forked from barryclark/jekyll-now
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgreen-card.ps
2053 lines (2050 loc) · 130 KB
/
green-card.ps
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
%!PS-Adobe-2.0
%%Creator: dvipsk 5.58c Copyright 1986, 1994 Radical Eye Software
%%Title: green-card.dvi
%%Pages: 11
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips green-card.dvi
%DVIPSParameters: dpi=300, compressed, comments removed
%DVIPSSource: TeX output 1997.02.14:1649
%%BeginProcSet: texc.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: special.pro
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale true def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
%%EndProcSet
TeXDict begin 40258431 52099146 1000 300 300 (green-card.dvi)
@start /Fa 9 118 df<EA2060EA70E012D8EAD9C0A3EA73801223EA0700A3120EA35A13
40EA38E0EA39B0A21271EA70E0EA30400C167F930F>37 D<123E127FEA7180EA20C01200
121F123F126012C0A21261EA7FF8EA1E780D0D7F8C0F>97 D<EA0F80EA3FC01271EA6080
EAC000A5EA60C01270EA3F80EA0F000A0D7E8C0F>99 D<120FEA1F80EA30C01260EAC060
A2EAFFE0A2EAC000EA60601230EA1FC0EA0F800B0D7F8C0F>101
D<12FCA2120CAEEAFFC0A20A127E910F>108 D<EAF9F0EAFBF8EA1E38EA1C1013001218
A6B4FCA20D0D7F8C0F>114 D<EA3F80127F12C1A2EAE000127E121FEA0180EA40C012C0
12E0EAFF80EADF000A0D7E8C0F>I<12081218A2EA7FC012FFEA1800A61360A3EA0FC0EA
07800B107F8F0F>I<EAF0F0A2EA3030A81370EA1FFCEA0FBC0E0D808C0F>I
E /Fb 30 126 df<EA4040EAE0E0A7EA40400B097D9312>34 D<EA0E38A4EAFFFEA2127F
EA1C70A5EA7FFE12FFA2EA38E0A50F147F9312>I<EA3018EA783812FC1370A313E0A212
78EA31C01201A2EA0380A2EA0700A3EA0E18133C137E121CA31238133CEA18180F1A7F96
12>37 D<EA01801203EA06005A5A123812301270A25AA71270A21230123812187E7EEA03
80120109197B9612>40 D<128012C0126012301218121C120C120EA21207A7120EA2120C
121C12181230126012C0128008197C9612>I<126012F012F8127812181230A212E012C0
0509798312>44 D<EAFFF8A30D037E8B12>I<126012F0A212601200A6126012F0A21260
040E798D12>58 D<13381378EA01F0EA03E0EA0F80EA1F00123C12F85A7E123C121FEA0F
80EA03E0EA01F0EA007813380D117E9212>60 D<EAFFFEA2127FC7FCA3EA7FFE12FFA20F
097F8E12>I<124012E07E127C7EEA0F80EA07C0EA01E0EA00F8137813F8EA01E0EA07C0
EA0F80EA3E005A12F05A12400D137E9312>I<EAFFC0A2EAE000B3A4EAFFC0A20A1A7A96
12>91 D<EAFFC0A21201B3A412FFA20A1A7F9612>93 D<EA1FC0EA3FF0EA3838EA101C12
00EA07FC123FEA781C12E0A3EA703C383FFF80EA1FCF110E7F8D12>97
D<EA07F0EA1FF8EA3838EA7010EA600012E0A41260EA70381238EA1FF0EA07E00D0E7E8D
12>99 D<13F8A21338A4EA07B8EA1FF8EA3878EA7038126012E0A41260EA70781238EA1F
FEEA0FBE0F147F9312>I<EA0780EA1FE0EA38701270EA603812E0EAFFF8A2EAE0001260
EA70381238EA1FF0EA07C00D0E7E8D12>I<137E13FFEA01C7EA03821380A2EA7FFE12FF
EA0380AAEA3FF8A21014809312>I<1206120FA21206C7FCA3127FA21207AAEAFFF0A20C
157D9412>105 D<B4FCA21207B0EAFFF8A20D147E9312>108 D<EAF9E0EAFFF0EA3E3812
3C1238A8EAFE3EA20F0E7F8D12>110 D<EA0F80EA3FE01238EA7070EAE038A5EAF078EA
7070EA38E0123FEA0F800D0E7E8D12>I<EAFBE0EAFFF0EA3C38EA381C130C130EA4130C
131CEA3C38EA3FF0EA3BC0EA3800A512FEA20F157F8D12>I<EAFC78EAFDFCEA1F9CEA1E
081300121CA7EAFFC0A20E0E7E8D12>114 D<EA1FF0123FEA607012C0EAE000127FEA3F
E0EA0FF0EA0078EA601812E0EAF030EAFFE0EADFC00D0E7E8D12>I<1206120EA3EA7FF8
12FFEA0E00A7131CA3EA07F8EA01E00E127F9112>I<EAF8F8A2EA3838A91378EA1FFEEA
0FBE0F0E7F8D12>I<EA7C7CA2EA1CF0EA0EE0EA0FC01207EA0380120713C0EA0EE0EA1E
F0EA1C70EAFC7EA20F0E7F8D12>120 D<13F81201EA0380EA0700A8120E12FCA2120E7E
A8EA0380EA01F812000D1A7E9612>123 D<127812FC120E7EA8EA0380EA01F8A2EA0380
EA0700A8120E12FC12780D1A7E9612>125 D E /Fc 5 94 df<EA07C0EA1830EA3018EA
701CEA600CA2EAE00EA9EA600CA2EA701CEA3018EA1C70EA07C00F157F9412>48
D<1206120E12FE120EB1EAFFE00B157D9412>I<B512FCA2C8FCA6B512FCA2160A7E8C1B>
61 D<12FCA212C0B3AB12FCA206217D980A>91 D<12FCA2120CB3AB12FCA2062180980A>
93 D E /Fd 3 107 df<12C012F01238120E6C7EEA01E0EA0078131C1307EB03C0EB00F0
A2EB01C0EB0700131E1378EA01E0EA0380000EC7FC123C127012C0C8FCA6387FFFE0B512
F0141E7D951B>21 D<1406A380A2EC0180EC00C01560B612FCA2C8126015C0EC0180EC03
00A21406A31E127E9023>33 D<12C0B3AF02217C980A>106 D E
/Fe 40 122 df<126012F0A2126004047D830A>58 D<126012F0A212701210A21220A212
40A2040A7D830A>I<14C0A21301A21303130514E01308131813101320A213401380A238
01FFF0EB007012025AA25A121838FE03FE17177F961A>65 D<3807FFF83800E00E140714
03A2EA01C01407A2140E3803803CEBFFF0A2EB803C3807001C140EA3000E131CA2143814
70381C01E0B5120018177F961B>I<EB1F82EBE0443803802C3807001C120C001C13085A
123012700060130012E0A35A1420A214407E00601380EB0100EA3002EA1C1CEA07E01717
7E9619>I<3807FFF83800E00E140315801401D801C013C0A21400A238038001A4390700
0380A215005C000E130E140C5C1470381C01C0B5C7FC1A177F961D>I<0007B512803800
E003EC0100A3EA01C0A21440A248485A138113FF1381D80701C7FC1402A26D5A120E140C
14081418481370B512F019177F961A>I<0007B512803800E003EC0100A3EA01C0A21440
A248485A138113FF1381D80701C7FCA390C8FC120EA45AEAFFC019177F9616>I<3907FE
1FF83900E00380A43901C00700A43803800EA2EBFFFEEB800E48485AA4000E5BA4485B38
FF83FE1D177F961D>72 D<EA07FEEA00E0A4EA01C0A4EA0380A4EA0700A4120EA45AEAFF
C00F177E960F>I<D807F0EB0FE00000EC1E0013B8152E154ED80138135C159CEC011C13
1C0002EB02381404A214080004495A130E1420144000085C1480EB0F007F39180601C039
FE040FF823177F9622>77 D<3907F007F80000EB00C001B81380A2139C39011C0100131E
130EA238020702A2EB0382A2380401C4A2EB00E4A2481378A21438A20018131012FE1D17
7F961C>I<EB1FC0EB70703801C0183803001C0006130C000E130E5A1218123812301270
A3141C5A006013381270147014E0383801C038180380380E0E00EA03F017177F961B>I<
3807FFF83800E00E1407A3EA01C0A3140E3803801C1470EBFFC0EB800048C7FCA4120EA4
5AB47E18177F9616>I<3807FFF03800E01C14061407A2EA01C0A3140E48485A1470EBFF
80EB80E03807007080A3000E5BA21580A248EB310038FF801E19177F961B>82
D<EB3E10EBC1A0380100E0000213601206481340A2000E1300120FEA07E013FCEA01FEEA
003FEB07801303A2EA200138400300A2EA60061304EAD818EA87E014177E9615>I<381F
FFFE38381C0E00201304126012401338128000001300A25BA45BA4485AA41203EA3FFC17
177F9615>I<38FF807F381C0018141014301420001E1340120E1480EB0100A213025B12
0F6C5A5BA25B136013405B120390C7FC120218177E9615>86 D<EA0710EA18F0EA307012
60136012C0A3EA80C013C4A212C1EA46C8EA38700E0E7E8D13>97
D<127C1218A45AA4EA6780EA68C0EA7040EA606012C0A4EA80C0A2EA8180EAC100124612
3C0B177E960F>I<EA07C0EA0C20EA10701220EA60005AA35AA2EAC0101320EA60C0EA3F
000C0E7E8D0F>I<133E130CA41318A4EA0730EA18F0EA30701260136012C0A3EA80C013
C4A212C1EA46C8EA38700F177E9612>I<EA07C0EA1C20EA301012601320EAFFC0EAC000
A41310EA4020EA60C0EA1F000C0E7E8D10>I<130E13131337133613301360A4EA03FCEA
00C0A5EA0180A5EA0300A41202126612E65A1278101D7E9611>I<13E2EA031EEA060E12
0C130C1218A3EA1018A3EA1838EA08F0EA07301200A2EA606012E0EAC1C0EA7F000F1480
8D11>I<120313801300C7FCA6121C12241246A25A120C5AA31231A21232A2121C09177F
960C>105 D<121F1206A45AA4EA181C1366138EEA190CEA3200123C123FEA3180EA60C0
13C4A3EAC0C813700F177E9612>107 D<123E120CA41218A41230A41260A412C012C8A3
12D0127007177E960B>I<38383C1E3844C6633847028138460301388E0703EA0C06A338
180C061520140C154039301804C0EC07001B0E7F8D1F>I<EA383CEA44C6EA47021246EA
8E06120CA3485A144013181480EA3009EB0E00120E7F8D15>I<EA07C0EA0C20EA1010EA
2018126012C0A3EA8030A2EAC06013C0EA6180EA3E000D0E7E8D11>I<EA1C3CEA2246EA
2382130312461206A3EA0C06A2130C1308EA1A30EA19E0EA1800A25AA312FC1014808D12
>I<EA30F0EA4918EA4E38EA4C30EA9C001218A35AA45AA20D0E7F8D10>114
D<EA07C0EA0C20EA1870A2EA3800121EEA0FC0EA03E0EA0060126012E0EAC0C0EAC180EA
3F000C0E7E8D10>I<1203A21206A4EAFFC0EA0C00A35AA45A1380A2EA31001232121C0A
147F930D>I<EA1C02EA26061246A2EA860C120CA3485A1480A21338380C5900EA078E11
0E7F8D14>I<EA1C04EA26061246A2EA8604120CA3EA1808A213101320EA0C60EA07800F
0E7F8D11>I<381C0204382606061246A238860C04120CA338181808A214101208380C2C
203803C7C0170E7F8D19>I<EA0F1F3811A180EA20C31400EA41801201A348C7FC130212
C3EAE704EAC508EA78F0110E7F8D14>I<EA1C02EA26061246A2EA860C120CA3EA1818A3
1338EA0C70EA07B0EA00301360127013C0EA2180EA1E000F147F8D11>I
E /Ff 34 124 df<EB7F803801E0C0380780E0380F01F0A3EB00E01400A2B512F0A2EA0F
00AD383FC3FCA2161A809919>12 D<127012F812FCA3127C1204A21208A2121012201240
060D7D850C>44 D<127812FCA4127806067D850C>46 D<127812FCA412781200A5127812
FCA4127806117D900C>58 D<1303497EA2497EA3EB1BE0A2EB3BF01331A2EB60F8A2EBE0
FCEBC07CA248487EEBFFFE487FEB001F4814800006130FA248EB07C039FF803FFCA21E1A
7F9921>65 D<B512F014FC380F803FEC0F80EC07C0EC03E0A2EC01F0A215F8A815F0A214
0315E0EC07C0EC0F80EC3F00B512FC14F01D1A7E9922>68 D<B512FEA2380F803E140E14
06140780EB8183A21480138313FFA213831381A2EC8180EB8001EC0300A35C5C143EB512
FEA2191A7E991D>I<EAFFF8A2EA0F80B3A4EAFFF8A20D1A7E9911>73
D<B512E014F8380F807E80801580A51500143E5CEBFFF80180C7FCAAEAFFF8A2191A7E99
1E>80 D<B512C014F8380F807E80801580A41500143E14FCEBFFE01381EB80F01478147C
A3147EA3150C143F39FFF81F18EC07F01E1A7E9921>82 D<3807F040381FFDC0EA3C0FEA
7803EA700112F01300A26C1300B4FCEA7FF86CB4FC6C13806C13C0000113E0EA000FEB03
F01301EAC000A36C13E0EAF00138FC03C038EFFF803883FE00141A7E9919>I<007FB512
80A238781F07007013030060130100E014C000C01300A300001400AF3807FFFCA21A1A7E
991F>I<39FFF81FF8A2390F800180B20007EB030013C0000313063801F01C38007FF8EB
1FE01D1A7E9922>I<EA1FF0EA383CEA7C1E7FA21238120013FFEA0FCFEA3E0F127C12F8
A31317387C27E0EA1FC313117F9015>97 D<12FCA2123CA713FE383F8780383E01C0003C
13E0EB00F0A214F8A514F0A2EB01E0003E13C0383B07803830FE00151A7E9919>I<EA03
FCEA0F0EEA1C1F123C1278130E00F8C7FCA51278A2383C0180381C0300EA0F06EA03FC11
117F9014>I<EB07E0A21301A7EA03F9EA0F07EA1C03EA3C011278A212F8A51278A2123C
EA1C03380F0DF8EA03F9151A7F9919>I<EA03F0EA0E1C487EEA3C071278148012F8A2B5
FC00F8C7FCA21278A2383C0180381C0300EA0E06EA03FC11117F9014>I<13FEEA03C738
078F80EA0F0FA2EB070090C7FCA3EAFFF0A2000FC7FCADEA3FE0A2111A80990E>I<3807
F1C0381C1EE0EA380E38780FC01400A4EA380E6C5AEA37F00020C7FC1230A2EA3FFE381F
FF8014C0EA700338E000E0A4387001C0383C07803807FC0013197F9016>I<12FCA2123C
A7133EEBC780EA3D03003E13C0A2123CAA38FF0FF0A2141A7E9919>I<123C127EA4123C
1200A412FCA2123CAD12FFA2081B7E9A0D>I<12FCA2123CB3A412FFA2081A7E990D>108
D<39FC3E03E09038C78C78393D039038003EEBE03CA2003C13C0AA39FF0FF0FFA220117E
9025>I<EAFC3EEBC780EA3D03003E13C0A2123CAA38FF0FF0A214117E9019>I<EA03F8EA
0E0E383C0780EA3803007813C0A200F813E0A6007813C0EA7C07003C1380380E0E00EA03
F813117F9016>I<EAFCFE38FF8780383E03C0383C01E014F0130014F8A514F0130114E0
383E03C0383F0780383CFE0090C7FCA5B4FCA215187E9019>I<EAF8F0EAF938EA3A7CA2
123C13381300A9EAFF80A20E117E9012>114 D<EA1FD8EA2078EA401812C0A2EAF000EA
FF80EA7FE0EA3FF0EA07F8EA003CEAC00CA212E01308EAF830EACFE00E117F9011>I<12
06A4120EA2121EEA3FF012FFEA1E00A81318A5EA0F30EA03E00D187F9711>I<38FC0FC0
A2EA3C03AB1307A2381E0BF0EA07F314117E9019>I<38FF07F0A2001E1300EA0F06EA07
8CEA03DC13F86C5A1200487E13BCEA031E1207EA0E0F381C078038FE0FF0A214117F9017
>120 D<38FF03F0A2383E01C0001E1380EA1F03000F1300A2EA0786A2EA03CCA213FC6C
5AA26C5AA21360A2EA70C012F812F95B0077C7FC123C14187F9017>I<B512F81501808A
16>123 D E /Fg 2 121 df<EA71F0EA9A18129C12981218EA3030A213321362EA606413
380F0B7E8A13>110 D<EA0F38EA1144EA218C13801201EA0300A21308EA4310EAC730EA
79C00E0B7F8A11>120 D E /Fh 11 122 df<126012F0A2126004047D830B>58
D<141014301470A214F814B8EB01381302A21304130C1308EB103C141C13201340EB7FFC
EB801CA2EA01001202805A120C121CB4EBFFC01A1A7F991D>65 D<EA03E6EA0617EA1C0E
123812301270EA601C12E0A3133912C012E0EA6079EA219AEA1E0E10107F8F14>97
D<EB0FC01301A3EB0380A4EB0700A2EA03E7EA0617EA1C0E123812301270EA601C12E0A3
133912C012E0EA6079EA219AEA1E0E121A7F9914>100 D<EB07C0EB0C60EB1CE0EB18C0
EB3800A45BA2EA07FFEA0070A25BA5485AA6485AA390C7FCA2126712E65A127813217E99
13>102 D<120313801300C7FCA7123C124EA2128EA2129C121CA25AA212391271A21272
A2123C091A7E990D>105 D<EA703EEA58C7389D0380129E129CA238380700A3130E0070
1340A2131C1480EAE00C3860070012107E8F17>110 D<EA30F0EA5918EA9E38EA9C1813
00A25AA45AA45A12600D107E8F11>114 D<EA03E0EA06181208EA18381330EA1C00EA1F
C0EA0FE0EA07F0EA0070133012E0A2EA8060EA40C0EA3F000D107E8F12>I<3807878038
08C8C0EA10F1EA20E01400A2EA01C0A4EA0381A212C3EAE582EAC584EA787812107F8F16
>120 D<EA3803004C1380384E0700128E129CA2EA1C0E1238A3485AA3EA303C6C5AEA0F
B8EA00385B1260EAE0E0485AEA4380003EC7FC11177E8F13>I E
/Fi 46 123 df<EB03FEEB0E03EB1C07EB1806EB3800A35BA33807FFFC3800701CEBE038
A41470EA01C0A314E4A2EA0380A21468143090C7FC5AA2126612E65A12781821819916>
12 D<1218123CA2121C1208A31210122012401280060B78990C>39
D<130413181330136013C013801201EA0300A21206120E120C121C1218A212381230A212
70A21260A312E0A35AA51260A31220123012107E0E267B9B10>I<134013601320133013
101318AB1338A21330A21370A2136013E013C0A212011380120313001206A25A5A12105A
5A5A0D267F9B10>I<121812381278123812081210A21220A212401280050B7D830C>44
D<1230127812F0126005047C830C>46 D<137CEA0186EA020300041380138312081210A3
381107001212EA0C0EC65A13305BEA01800002C7FC120CEA10011220EA3C06EA67FEEAC1
FCEA80F011187D9714>50 D<1420146014E0A2130114F0EB0270A213041308A21310A213
201340A2EB8038EBFFF8380100381202A25AA25A121838FE01FF181A7E991D>65
D<EB0F82EB7062EBC0163803801E3807000C120E5A121800381308123000701300A25AA4
1420A314401260148038300100EA1006EA0C18EA03E0171A7A991B>67
D<3803FFF83800700E80809038E00180A315C0EA01C0A43903800380A3150048485AA214
0E140C000E131C5C5C5C381C0380D8FFFEC7FC1A1A7D991D>I<0003B5FC380070071403
140113E0A43801C080A313C13803FF001381A3EA0702EB0004A21408120E141814101430
4813E0B5FC181A7D991A>I<0003B5FC380070071403140113E0A43801C080A313C13803
FF001381A3EA070290C7FCA3120EA4121EEAFFC0181A7D9919>I<EB0FC1EB3021EBC013
3801800F38070006120E120C5A00381304123000701300A25AA3EB07FEEB0070A4006013
E0A27EEA1801380C0640EA03F8181A7A991E>I<3903FF1FF83900700380A39038E00700
A43801C00EA43803FFFCEB801CA348485AA4000E5BA4485B38FF87FC1D1A7D991D>I<EA
03FFEA0070A313E0A4EA01C0A4EA0380A4EA0700A4120EA45AEAFF80101A7D990F>I<EB
FFC0EB0E00A35BA45BA45BA45BA4EA61C012E15B12830047C7FC123C121A7C9914>I<EA
03FFEA0070A35BA4485AA4485AA448C7FC1410A21420120E1460144014C0381C0380B5FC
141A7D9918>76 D<D803F8EB1FC0D80078EB3C00A2155C01B85BA290389C0138A239011C
0270A21404140800025C1410A214200004EB41C0A21481A239080F0380A2130EEA180C4A
C7FC39FE083FE0221A7D9922>I<3903F007F839007800C01580A290389C0100A3138E38
010E0213061307A238020384A3EB01C4000413C8A2EB00E8A24813F01470A21218142012
FE1D1A7D991D>I<3803FFF83800701C1406140713E0A43801C00EA2141C143838038060
EBFF80EB8000A248C7FCA4120EA45AB47E181A7D991A>80 D<EB3F10EB60903801807013
004813201206A31400120713C0EA03F8EA01FEEA007FEB0F8013031301A21220A2386003
00A21306EA700CEAC818EA87E0141A7D9916>83 D<383FFFFC38381C0C00201304124013
381280A338007000A45BA4485AA4485AA41207EAFFF8161A79991B>I<3AFF87FC1FC03A
3C00E007000038140413015D1302001C5C13045D13085D13105DD920E1C7FC134014E213
8014E4EA1D0014E8121E1470121C146012181440221A789926>87
D<EA03CCEA0E2EEA181C123812301270EAE038A4EAC072A3EA60F2EA6134EA1E180F107C
8F14>97 D<127E120EA35AA45AA2EA3BC0EA3C301278EA7018A3EAE038A4EAC070136013
E0EA60C0EA6380EA1E000D1A7C9912>I<EA01E0EA0618120CEA1838EA3010EA70001260
12E0A413081310EA6020EA30C0EA1F000D107C8F12>I<EB1F801303A3EB0700A4130EA2
EA03CEEA0E2EEA181C123812301270485AA4EAC072A3EA60F2EA6134EA1E18111A7C9914
>I<EA01E0EA0E18EA1C08123812701310EAFFE0EAE000A41308EA60101320EA30C0EA1F
000D107C8F12>I<1307EB0980131BEB3B00133813301370A4EA07FFEA00E0A5485AA548
5AA490C7FC5AA21206126612E412CC1270112181990C>I<13F338038B8038060700120E
120C121CEA380EA4EA301CA3EA183C5BEA07B8EA0038A25B1260EAE0E0EAC1C0007FC7FC
11177E8F12>I<EA1F801203A348C7FCA4120EA2137CEA0F86EA1E07A2121CA2EA380EA3
5B00701380A21338EB3900EAE019EA600E111A7E9914>I<1203120712061200A6123812
4C124E128E129CA2121C1238A212701272A212E212E41264123808197C980C>I<EA1F80
1203A3EA0700A4120EA2130E1313EA1C2713431380EA1F00123CEA3F80EA39C0EA38E0EA
70E2A313E4EAE064EA6038101A7E9912>107 D<121F1207A3120EA4121CA41238A41270
A412E4A412E81230081A7D990A>I<38307C1E38598663399E0783801403129CA239380E
0700A3140ED8701C1340A2141C158038E0380C39601807001A107C8F1F>I<EA307CEA59
86EA9E07A2129CA2EA380EA35B00701380A21338EB3900EAE019EA600E11107C8F16>I<
EA01F0EA0618EA0C0CEA180E12301270126012E0A2130C131C13181330EA6060EA30C0EA
1F000F107C8F14>I<EA030F380590C0EA09E0EBC060A3380380E0A4380701C014801303
1400EA0E8E137890C7FCA25AA4B4FC1317808F14>I<EA30F0EA5D18EA9E38EA9C181300
A25AA45AA45A12600D107C8F10>114 D<EA03E0EA04301208EA18701360EA1C00EA1F80
13C0EA0FE01200136012E0A2EA80C0EA4180EA3E000C107D8F10>I<1206120EA45AA2EA
FFC0EA1C005AA45AA412E1A312E212E412380A177C960D>I<EA3806EA4C07EA4E0E128E
129CA2EA1C1C1238A3EA7039A3EA3079EA389AEA0F0C10107C8F15>I<EA3818EA4C1C12
4EEA8E0C129CA2EA1C081238A213101270A21320EA3040EA18C0EA0F000E107C8F12>I<
38380C10384C0E38EA4E1C008E1318129CA2381C38101238A338707020A2144012303818
B880380F0F0015107C8F19>I<EA3806EA4C07EA4E0E128E129CA2EA1C1C1238A3EA7038
A3EA3078EA38F0EA0F7012001360EA60E0EAE1C0EAC180EA4700123C10177C8F13>121
D<EA0382EA07C4EA0FFCEA10081310EA00201340EA0180EA03001204EA08081210EA2018
EA7FF0EA43E0EA81C00F107E8F10>I E /Fj 1 16 df<EA0780EA1FE0EA3FF0EA7FF8A2
EAFFFCA6EA7FF8A2EA3FF0EA1FE0EA07800E107E9013>15 D E /Fk
79 127 df<126012F0AD12601200A4126012F0A212600417789614>33
D<EAC060EAE0E0A4EAC060A5EA40400B0B7C9614>I<EA071CA5EA7FFFB51280A2380E38
00A7B51280A26C1300EA1C70A511177F9614>I<EA3806EA7C0E126CEAEE1CA25BA2126C
EA7C70123812005BA2485AA3485AA248C7FC130E131FEA0E1BEB3B80A2121CA238381B00
131FEA180E111D7F9914>37 D<1207487EEA18C0EA38E0A35B3839CF80138F381F1C0012
1EA2EA0E38121EEA37701267EAE3F05B38E1C38013E3EA63F3383F3F00EA1E1E11177F96
14>I<126012F012F812781218A31230A2126012C01280050C789614>I<EA01801203EA06
005A121C121812385AA35AA91270A37E1218121C120C7EEA03801201091D799914>I<12
8012C01260123012381218121C120EA31207A9120EA3121C121812381230126012C01280
081D7C9914>I<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2EA3FF8EA7FFCEAF39E
EA638CEA0380A30F107E9214>I<127012F812FCA2127C120C1218123012E012C0060A79
8414>44 D<EAFFFEA30F037E8C14>I<127012F8A312700505798414>I<1306130EA2131C
A21338A21370A213E0A2EA01C0A2EA0380A3EA0700A2120EA25AA25AA25AA25AA25A0F1D
7E9914>I<EA07C0EA0FE0EA1C70EA3838EA3018EA701CA2EAE00EA9EA701CA2EA3838A2
EA1C70EA0FE0EA07C00F177E9614>I<1203A25A5A123F12F712471207AEEA7FF0A20C17
7C9614>I<EA0FC0EA1FF0EA3838EA701CEAE00EA312401200131CA213381330137013E0
EA01C0EA030012065AEA180E1230EA7FFEA20F177E9614>I<EA0FC0EA1FF0EA3838EA70
1CA212201200131813381370EA0FE013F0EA0038131C130EA2124012E0A2EA701CEA7838
EA3FF0EA0FC00F177E9614>I<127012F8A312701200A6127012F8A312700510798F14>
58 D<127012F8A312701200A6126012F012F8A2127812181230127012E012800515798F
14>I<130E133E137C13F0EA03E0EA07C0EA1F00123E12F85A7E123E7EEA07C0EA03E0EA
00F0137C133E130E0F137E9414>I<B51280A27EC8FCA3387FFF80B5FCA211097F8F14>I<
124012E012F8127C121EEA0F80EA07C0EA01F0EA00F8133E131E133E13F8EA01F0EA07C0
EA0F80EA1E00127C5A12E012400F157E9514>I<EA01C0487EA21360A2EA0770A4EA0630
EA0E38A4487EEA1FFCA2EA1C1CA2487EA238FE3F80A211177F9614>65
D<EAFFF013FCEA381E130E1307A4130E131EEA3FFCA2EA381E130E1307A5130E131EEAFF
FC13F810177F9614>I<3801F180EA07FFEA0E1FEA1C071238EA7003A348C7FCA7387003
80A338380700121CEA0E0EEA07FCEA01F011177F9614>I<EAFFE013F8EA383C7F130E7F
A3EB0380A8EB0700A2130E131E5BEAFFF813E011177F9614>I<B5FCA2EA3807A490C7FC
A21338A2EA3FF8A2EA3838A290C7FCA3EB0380A4B5FCA211177F9614>I<B51280A2EA38
03A490C7FCA21338A2EA3FF8A2EA3838A290C7FCA7B4FCA211177F9614>I<EA03C6EA0F
FEEA1C3EEA181E1238EA700EA21260EAE000A4137FA2130E12601270A2EA381E1218EA1C
3EEA0FFEEA03CE10177F9614>I<38FE3F80A238380E00A8EA3FFEA2EA380EA938FE3F80
A211177F9614>I<EAFFF8A2EA0700B3EAFFF8A20D177D9614>I<EA07FCA2EA0070B012E0
A2EAF0E0EA7FC0EA1F000E177D9614>I<B4FCA21238AF1307A4B5FCA210177E9614>76
D<38FC1F80A2007C1300EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80
A211177F9614>I<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4
133E12FEA211177F9614>I<EA1FF0EA7FFCEA783CEA701CEAE00EAFEA701CEA783CEA7F
FCEA1FF00F177E9614>I<EAFFF013FCEA381E130E1307A5130E131EEA3FFC13F0EA3800
A812FEA210177F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA514
80EB1DC0A238FE0F80EB070012177F9614>82 D<EA0FCCEA1FFCEA307CEA603CEAE01CA3
13001270127EEA3FE0EA0FF0EA01F8EA001C131E130E126012E0A2EAF01CEAF838EAFFF0
EAC7E00F177E9614>I<387FFF80B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I<38
FE0FE0A238380380B0381C0700A2EA0E0EEA07FCEA01F01317809614>I<38FC1F80A238
700700A7EA31C6EA33E6EA3BEE136EA5EA1B6CA2EA1A2CEA1E3CA311177F9614>87
D<38FC1F80A238380E00EA3C1EEA1C1CEA1E3CEA0E38A26C5AA2EA036013E0A26C5AA8EA
07F0A211177F9614>89 D<EA7FFE12FFEAE01CA21338A2EA007013E0A2EA01C0A2EA0380
EA0700A2120EA25AEA380EA21270A2EAFFFEA20F177E9614>I<EAFFE0A2EAE000B3A7EA
FFE0A20B1D799914>I<12C07EA21270A27EA27EA27EA27EA2EA0380A3EA01C0A2EA00E0
A21370A21338A2131CA2130EA213060F1D7E9914>I<EAFFE0A21200B3A712FFA20B1D7F
9914>I<EAFFFEA30F037E7E14>95 D<1208121812301260A212C0A312F012F812781230
050C799914>I<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3
EA707C383FFF80EA0F8F11107E8F14>I<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C
1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA
1C0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<
137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0
EA07CF12177F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE000
12601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300
A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA
701CA3EA3018EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A438
700700EA3C1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07
121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D
187C9714>I<136013F0A213601300A4EA1FF0A2EA0070B2EA40E0EAE0C0EA7F80EA3F00
0C207E9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38
133C131C7F38FF1F80A21117809614>I<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB
8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA
1E07121CAA38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA70
1CEA783CEA3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380
EB01C0A6EB0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03
E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0
A213187F8F14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F
14>I<EA0FD8EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012
F0EAF81CEAFFF8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131C
EA07F8EA01F00F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I<
38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F
80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E
3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A21110
7F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA348
5A12730077C7FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0EA01
C0EA0380EA0700120EEA1C0712381270B5FCA210107F8F14>I<133E13FEEA01E0EA0380
AAEA7F0012FE127FEA0380AAEA01E0EA00FE133E0F1D7E9914>I<12E0B3AB031D789914>
I<127812FE120FEA0380AAEA01FCEA00FEEA01FCEA0380AAEA0F0012FE12780F1D7E9914
>I<EA1C10EA3F38EAE7E0EA41C00D047D9614>I E /Fl 52 122
df<3801F8F038060738EA0C0E381806101400A3B512C038180600AB387E1FC015148093
14>11 D<EA01F8EA0604EA0C0E121890C7FCA3EAFFFEEA1806AB387E1F801114809313>
I<EA01FEEA060E120CEA1806A4EAFFFEEA1806AB387E1F801114809313>I<124012E012
601220A31240A2128003097D9309>39 D<120212041208121812101230122012601240A2
12C0AA1240A212601220123012101218120812041202071E7D950D>I<12801240122012
30121012181208120C1204A21206AA1204A2120C1208121812101230122012401280071E
7E950D>I<124012E012601220A31240A2128003097D8209>44 D<12FFA2080280860B>I<
124012E0124003037D8209>I<136013E0A2EA016012021206120C120812101220126012
C0EAFFFCEA0060A5EA03FC0E137F9211>52 D<EA6060EA7FC01380EA44001240A3124FEA
70C0EA40E0EA00601370A212E0A21360EA40E0EA21C0EA1F000C137E9211>I<124012E0
12401200A7124012E012601220A31240A2128003137D8C09>59 D<1330A21378A3139CA2
EA019E130EA2EA0207A200061380EA07FFEA0403380801C0A2001813E0EA380038FE07FC
16147F9319>65 D<EAFFFCEA1C07EB0380EB01C0A4EB0380EB0700EA1FFE381C0380EB01
C0EB00E0A5EB01C0EB038038FFFE0013147F9317>I<EBFC2038070360380C00E0481360
5A00701320126000E01300A600601320127012306C13406C138038070300EA00FC13147E
9318>I<B51280EA1C031300A21440A2130814001318EA1FF8EA1C18130814201300A214
60144014C01301B5FC13147F9316>69 D<EBFC2038070360380C00E04813605A00701320
126000E01300A4EB0FF8EB00E01260127012307E7E380703603800FC2015147E931A>71
D<38FF87FC381C00E0A8EA1FFFEA1C00A938FF87FC16147F9319>I<EAFF80EA1C00B2EA
FF8009147F930C>I<EA0FF8EA00E0AE126012F013C0EA6180EA3F000D147F9311>I<EAFF
C0001CC7FCAB1440A314C0148013011303B5FC12147F9315>76 D<00FEEB0FE0001E1400
00171317A338138027A23811C047A23810E087A3EB7107A2133AA2131CA2123839FE083F
E01B147F931E>I<EA01F8EA070E381C0380383801C0EA3000007013E00060136000E013
70A6007013E0A2003013C0EA3801381C038038070E00EA01F814147E9319>79
D<EAFFFCEA1C07EB0380EB01C0A5EB0380EB0700EA1FFC001CC7FCA8B47E12147F9316>
I<EAFFF8EA1C07EB0380EB01C0A4EB0380EB0700EA1FF8EA1C0E7FEB0380A41484A2EB01
CC38FF80F816147F9318>82 D<EA1F10EA30F0EA603012C01310A2EAE0001270127FEA3F
C0EA0FE0EA00F0133813181280A3EAC030EAF060EA8FC00D147E9312>I<387FFFF03860
703000401310A200801308A300001300ACEA07FF15147F9318>I<39FF0FF0FC39380380
30A2001CEBC020A2001E1460390E04E040A200071480EB0870A23903887900EB9039A238
01F03EEBE01EA23800C00CA31E147F9321>87 D<127FEAE1C0EAE040EA40601200EA07E0
EA3860126012C01364A2EA61E4EA3E380E0D7E8C11>97 D<12F01230A6EA33E0EA3430EA
3808EA300C1306A5130CEA3808EA3430EA23E00F147F9312>I<EA0FE0EA18701220EA60
20EAC000A51260EA2010EA1820EA0FC00C0D7F8C0F>I<13781318A6EA0F98EA1878EA20
38EA601812C0A51260EA2038EA1858EA0F9E0F147F9312>I<EA0F80EA1040EA2020EA60
30EAC010EAFFF0EAC000A31260EA2010EA1820EA0FC00C0D7F8C0F>I<EA03C0EA0CE012
1813401300A3B4FC1218AB127F0B1480930A>I<EA0F3CEA30E6EA2040EA6060A3EA2040
EA30C0EA2F001260A2EA3FE013F0EA6018EAC00CA3EA6018EA3030EA0FC00F147F8C11>
I<12F01230A6EA33E0EA3430EA38181230A9EAFC7E0F147F9312>I<1220127012201200
A512F01230AB12FC06157F9409>I<1202120712021200A5120F1203AE124312E212E612
7C081B82940A>I<12F01230A6137C133013601380EA31001233EA3F801231EA30C01360
13701330EAFC7C0E147F9311>I<12F01230B212FC06147F9309>I<38F3E1F03834321838
381C0CEA3018A938FC7E3F180D7F8C1B>I<EAF3E0EA3430EA38181230A9EAFC7E0F0D7F
8C12>I<EA0FC0EA1860EA2010EA6018EAC00CA5EA6018A2EA3870EA0FC00E0D7F8C11>I<
EAF3E0EA3430EA3808EA300C1306A5130CEA3808EA3430EA33E0EA3000A512FC0F137F8C
12>I<EAF3C0EA34E01238EA30401300A812FE0B0D7F8C0D>114 D<EA3E80126112C0A2EA
E000127EEA3F80EA03C01280A212C0EAE180EA9F000A0D7F8C0D>I<1210A312301270EA
FF80EA3000A71380A3EA1100120E09127F910D>I<EAF078EA3018A91338EA1858EA0F9E
0F0D7F8C12>I<EAF83CEA30181310EA3830EA1820A2EA0C40A2EA0680A3EA0300A20E0D
7F8C11>I<38F87CF83870703038305820A238188840138CA2380D04801306A238060300
A3150D7F8C18>I<EAF87CEA3030EA1860EA0C401380EA07007EEA0780EA0CC0EA086012
10EA3030EAF07C0E0D7F8C11>I<EAF83CEA30181310EA3830EA1820A2EA0C40A2EA0680
A3EA0300A21202A212E4A212E812700E137F8C11>I E /Fm 7 56
df<121812F81218AA12FF080D7D8C0E>49 D<123EEA4180EA80C012C01200A2EA0180EA
03001204EA08401230EA7F8012FF0A0D7E8C0E>I<123E1241EA61801201EA0300121EEA
0180EA00C0A212C0A2EA4180EA3E000A0D7E8C0E>I<12035AA2120B12131223126312C3
EAFFC0EA0300A3EA0FC00A0D7E8C0E>I<EA6080EA7F00125C1240A2125FEA6180EA00C0
A212C01280EA4180EA3E000A0D7E8C0E>I<120FEA31801261EA60005A12DEEAE180EAC0
C0A31260EA2180EA1E000A0D7E8C0E>I<1240EA7FE013C0EA8080EA81001202A25A120C
12081218A40B0E7E8D0E>I E /Fn 7 56 df<1218127812981218AC12FF08107D8F0F>
49 D<121FEA6180EA40C0EA806012C01200A213C0EA0180EA030012065AEA10201220EA
7FC012FF0B107F8F0F>I<121FEA2180EA60C0A212001380EA0100121FEA008013401360
12C0A2EA8040EA6080EA1F000B107F8F0F>I<EA0180A212031205120D12191211122112
4112C1EAFFE0EA0180A4EA0FE00B107F8F0F>I<EA20C0EA3F80EA2E001220A3122FEA30
80EA2040EA0060A312C0EA80C0EA6180EA1F000B107F8F0F>I<EA0780EA1840EA30C012
6013005A12CFEAF080EAE040EAC060A31240EA60C0EA3080EA1F000B107F8F0F>I<1240
EA7FF013E0EA8040A2EA0080EA01001202A212061204A2120CA50C117F900F>I
E /Fo 76 125 df<EBFE7C380381C6380603CE000E1384001C1380A6B512F0381C0380AE
38FF8FF0171A809916>11 D<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA
1C03AE38FF8FF0141A809915>I<EBFF80EA0383EA0603120E121CA6B5FCEA1C03AE38FF
9FF0141A809915>I<90387E1F803901C17040390703C0600006EB80E0000E14401500A5
B612E0380E0380AE397F8FE3FC1E1A809920>I<126012F0A61260AA12201200A4126012
F0A21260041A7D990B>33 D<EA60C0EAF1E0EAF9F0EA68D0EA0810A3EA1020A2EA2040EA
40800C0B7F9913>I<126012F012F812681208A31210A212201240050B7D990B>39
D<1380EA010012025A120C120812185AA35AA412E0AA1260A47EA37E1208120C12047E7E
EA008009267D9B0F>I<7E12407E7E12181208120C7EA37EA41380AA1300A41206A35A12
08121812105A5A5A09267E9B0F>I<130CACB61280A2D8000CC7FCAC191A7E951E>43
D<126012F0A212701210A31220A21240A2040B7D830B>I<EAFFC0A20A0280880D>I<1260
12F0A2126004047D830B>I<1304130C1318A31330A31360A313C0A3EA0180A3EA0300A3
1206A35AA35AA35AA35AA35AA20E257E9B13>I<EA07E0EA1C38EA381CEA300CEA700EEA
6006A2EAE007AAEA6006A2EA700EEA300CEA381CEA1C38EA07E010187F9713>I<12035A
B4FC1207B3A2EA7FF80D187D9713>I<EA0F80EA1060EA2030EA4038EA803CEAC01C12E0
1240EA003C1338A21370136013C0EA018013001202EA040412081210EA3008EA3FF8127F
12FF0E187E9713>I<EA07E0EA1838EA201CEA601EEA700EEA201E1200131CA213381370
EA07E0EA0038131C130E130FA212E0A212C0EA400EEA601CEA1838EA07E010187F9713>
I<1318A21338137813F813B8EA01381202A212041208121812101220124012C0B5FCEA00
38A6EA03FF10187F9713>I<EA3018EA3FF013E01380EA2000A5EA2FC0EA3060EA2030EA
00381318131CA2124012E0A2EA8018EA40381330EA30E0EA0F800E187E9713>I<EA01F8
EA0704EA0C06EA180E123013001270126012E0EAE3E0EAE418EAE80CEAF00EEAE0061307
A31260A2EA7006EA300EEA180CEA0C38EA07E010187F9713>I<1240EA7FFF13FEA2EA40
04EA80081310A2EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>
I<EA07E0EA1818EA300CEA20061260A21270EA780CEA3E18EA1F30EA07C0EA03E0EA0CF8
EA307CEA601E130FEAC0071303A3EA6002EA2004EA1818EA07E010187F9713>I<EA07E0
EA1C30EA3018EA700CEA600EEAE006A21307A31260EA700FEA3017EA1827EA07C7EA0007
1306130E130C12701318EA6030EA3060EA0F8010187F9713>I<126012F0A212601200A8
126012F0A2126004107D8F0B>I<126012F0A212601200A8126012F0A212701210A31220
A21240A204177D8F0B>I<EA1FC0EA2060EA4030EAC03812E0A21200137013E0EA018013
005A1202A6C7FCA41206120FA212060D1A7E9912>63 D<130CA3131EA2132F1327A2EB43
80A3EB81C0A200017F1300A248B47E38020070A2487FA3487FA2003C131EB4EBFFC01A1A
7F991D>65 D<B51280380E00E014701438143CA514781470EB01E0380FFFC0380E00F014
78143C141C141EA4141C143C147814F0B512C0171A7F991B>I<EB3F023801C0C6380300
2E000E131E48130E14065A007813021270A200F01300A600701302A21278003813047E14
087E000313303801C0C038003F00171A7E991C>I<B57E380E00E01470808080A280A215
80A81500A25C140E5CA2147814E0B51280191A7F991D>I<B512F8380E00381418140814
0C1404A3EB0100A35BEA0FFFEA0E037FA3EB0002A314061404A2140C143CB512FC171A7F
991A>I<B512F8380E003814181408140C1404A3EB0100A35BEA0FFFEA0E037FA390C7FC
A8EAFFE0161A7F9919>I<EB3F023801C0C63803002E000E131E48130E14065A00781302
1270A200F090C7FCA5903801FFC03970000E00A2127812387EA27E000313163801C06638
003F821A1A7E991E>I<39FFE1FFC0390E001C00AB380FFFFC380E001CAC39FFE1FFC01A
1A7F991D>I<EAFF80EA1C00B3A6EAFF80091A7E990E>I<EA0FFEEA0070B3124012E0A2EA
40E0EA61C0EA1F000F1A7E9914>I<EAFFE0000EC7FCB01408A3141814101430147014F0
B5FC151A7F9918>76 D<B414FF000F14F0A2390B800170A23809C002A33808E004A2EB70
08A3EB3810A3EB1C20A2EB0E40A3EB0780A2EB0300121C39FF8307FF201A7F9923>I<00
FEEB7FC0000FEB0E001404EA0B80EA09C0A2EA08E01370A21338131CA2130E1307EB0384
A2EB01C4EB00E4A21474143CA2141C140C121C38FF80041A1A7F991D>I<137F3801C1C0
38070070000E7F487F003C131E0038130E0078130F00707F00F01480A80078EB0F00A200
38130E003C131E001C131C6C5B6C5B3801C1C0D8007FC7FC191A7E991E>I<B51280380E
01E0EB007014781438143CA4143814781470EB01E0380FFF80000EC7FCABEAFFE0161A7F
991A>I<B5FC380E01C0EB0070147880A55C1470EB01C0D80FFFC7FC380E0380EB00C080
1470A31478A31540143CEC1C8039FFE00F001A1A7F991C>82 D<EA0FC2EA1836EA200EEA
600612C01302A3EAE0001270127EEA3FE0EA1FF8EA03FCEA007E130E130713031280A3EA
C0021306EAE004EAD818EA87E0101A7E9915>I<007FB5FC38701C0700401301A200C014
8000801300A300001400B13803FFE0191A7F991C>I<39FFE07FC0390E000E001404B200
065B12076C5B6C6C5A3800E0C0013FC7FC1A1A7F991D>I<3AFF81FF07F03A3C007801C0
001CEC0080A36C90389C0100A33907010E02A33903830F04EB8207A2150C3901C40388A3
3900E801D0A390387000E0A301305B01201340241A7F9927>87 D<39FFC0FF80390F003C
0014106C5BEA03806D5A00015BEA00E101F1C7FC137A133E131C131EA21317EB27801343
EB41C0EB81E0EA010048137000021378481338000C7F001E133EB4EB7FC01A1A7F991D>
I<EA2040A2EA4080A2EA8100A3EAE1C0EAF1E0A2EA60C00B0B7A9913>92
D<EA1FC0EA38707FEA101C1200A2EA03FCEA1E1C1238127012E01480A2133CEA705F381F
8F0011107F8F13>97 D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C0
1480381E0300EA1906EA10F8131A809915>I<EA07F8EA1C1C1238EA700813005AA61270
1304EA3808EA1C18EA07E00E107F8F11>I<133F1307A9EA03E7EA0C17EA180F487E1270
12E0A6126012706C5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA60
0C12E0EAFFFCEAE000A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA01F0EA07
18EA0E38EA1C101300A6EAFFC0EA1C00AEEAFF800D1A80990C>I<EA0FCF381871803830
3000EA7038A4EA30306C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA
6006EA381CEA07E011187F8F13>I<12FC121CA9137CEA1D87381E0380A2121CAB38FF9F
F0141A809915>I<1218123CA212181200A612FC121CAE12FF081A80990A>I<EA0180EA03
C0A2EA0180C7FCA6EA0FC01201B21241EAE180EAE300127E0A2182990C>I<12FC121CA9
EB1FC0EB0F00130C5B13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A
809914>I<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0A200
1C1301AB39FF9FE7F81D107F8F20>I<EAFC7CEA1D87381E0380A2121CAB38FF9FF01410
808F15>I<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA700EEA381CEA1C38
EA07E010107F8F13>I<EAFCFCEA1D07381E0380381C01C0A2EB00E0A6EB01C01480381E
0300EA1D06EA1CF890C7FCA6B47E1317808F15>I<EA03E1EA0C13EA180BEA300FEA7007
12E0A61270A26C5AEA1C37EA07C7EA0007A6EB3FE013177F8F14>I<EAFC78EA1D9CEA1E
1C1308EA1C00ABEAFF800E10808F0F>I<EA1F20EA60E0EA402012C0A2EAF000127FEA3F
C0EA1FE0EA00F0EA8070133012C01320EAF040EA8F800C107F8F0F>I<1208A41218A212
38EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC1F80EA1C03AB1307
120CEA0E0B3803F3F01410808F15>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3
EA03A0A2EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C0700003C1306381C0C0413
0E380E16081317A238072310149013A33803C1A014E0380180C0A319107F8F1C>I<38FE
3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181CEA381E
38FC3FC012107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA
01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I<EAFFF8EAE07012C0EA80E0
EA81C0A2EA0380EA0700A2EA0E04121CA2EA380812701338EAFFF80E107F8F11>I<B712
F82501808926>124 D E /Fp 52 122 df<90380FF07F90397FF9FF809039F83FC7C039
01E07F8F0003140FEA07C091383F07806EC7FCA5B612F8A22607C01FC7FCB0393FF8FFF0
A22220809F1F>11 D<EB0FE0EB7FF8EBF81C3801E07C1203EA07C0A2143891C7FCA3EBC1
FEB5FCA23807C03EB0393FF9FFC0A21A20809F1D>I<EAFFF0A40C047F8B11>45
D<1238127C12FEA3127C123807077C860F>I<EA01FCEA07FF381F07C0EA1E03003E13E0
387C01F0A300FC13F8AD007C13F0A3383E03E0001E13C0EA1F8F3807FF00EA01FC151D7E
9C1A>48 D<137013F0120712FF12F91201B3A4387FFFC0A2121D7D9C1A>I<EA03FC381F
FF8038381FC0387C07E038FE03F0A214F81301127C1238EA000314F0A2EB07E0EB0FC014
00131E5B13705B3801C018EA0380EA0600481338381FFFF05A5AB5FCA2151D7E9C1A>I<
EA03FC380FFF80381C0FC0383C07E0387E03F0A31307003C13E01200EB0FC0EB3F803803
FE005B38000F80EB07C0EB03E014F014F81238127C12FEA214F012FC387807E0383C0FC0
381FFF803803FC00151D7E9C1A>I<EB01C013031307A2130F131F133B1373136313C3EA
01831203EA0703120E120C12181238127012E0B512FEA2380007C0A6EBFFFEA2171D7F9C
1A>I<001C13E0EA1FFF14C01480140013FC13C00018C7FCA4EA19FE381FFF80381E07C0
381803E0381001F0120014F8A2127812FCA314F0EA7803007013E0383C0FC0380FFF00EA
03FC151D7E9C1A>I<133F3801FFC03807C0E0EA0F81381F03F0121E123E127CEB01E090
C7FCEAFC1013FF00FD13C0EB03E038FE01F0A200FC13F8A4127CA3003C13F0123E381E03
E0380F07C03807FF803801FE00151D7E9C1A>I<1260387FFFF8A214F014E014C038E001
8038C00300A21306C65A5B13381330137013F0A2485AA21203A41207A56C5A6C5A151E7D
9D1A>I<EA01FE380FFF80381E07C0383801E0EB00F01278A2127C127FEBC1E0383FE3C0
381FFF80380FFE003807FF8014C0001F13E0383C3FF0EA780FEB03F8EAF00113001478A2
14701278007C13E0383E03C0380FFF803803FC00151D7E9C1A>I<EA01FCEA0FFF381F07
80383E03C0007C13E0130100FC13F0A314F8A4EA7C03A2EA3E05EA1FFDEA07F9EA0041EB
01F0123C127EEB03E0A214C0383C078038381F00EA1FFCEA07F0151D7E9C1A>I<14E0A2
497EA3497EA2EB06FCA2EB0EFEEB0C7EA2497EA201307F141F01707FEB600FA2496C7E90
B5FC4880EB8003000380EB0001A200066D7EA2000E803AFFE00FFFE0A2231F7E9E28>65
D<903807FC0290383FFF0E9038FE03DE3903F000FE4848133E4848131E485A48C7120EA2
481406127EA200FE1400A7127E1506127F7E150C6C7E6C6C13186C6C13386C6C13703900
FE01C090383FFF80903807FC001F1F7D9E26>67 D<B512FEECFFC03907E007F0EC01F86E
7E157E81A2ED1F80A316C0A91680A3ED3F00A2157E5D4A5AEC07F0B612C04AC7FC221F7E
9E28>I<B612E0A23807E00714011400156015701530A21430A21500147014F013FFA213
E014701430A391C7FCA8B57EA21C1F7E9E21>70 D<903807FC0290383FFF0E9038FE03DE
3903F000FE4848133E4848131E485A48C7120EA2481406127EA200FE91C7FCA591381FFF
E0A2007E9038007E00A2127F7EA26C7E6C7E6C7E6C6C13FE3800FE0190383FFF8E903807
FC06231F7D9E29>I<B5380FFFF0A23A07E0007E00AC90B512FEA29038E0007EADB5380F
FFF0A2241F7E9E29>I<B5FCA2EA07E0B3A9B5FCA2101F7E9E14>I<D8FFE0EC3FF86D147F
00071600D806F814DFA3017CEB019FA26DEB031FA26D1306A290380F800CA2903807C018
A3903803E030A2903801F060A2903800F8C0A2EC7D80A2EC3F00A3141ED8FFF0903803FF
F8140C2D1F7E9E32>77 D<EB1FF890B5FC3901F81F803907E007E0390FC003F0391F8001
F890C7FC4814FC4814FE007E147EA200FE147FA9007E147E007F14FEA26C14FCEB800100
1F14F8390FC003F03907E007E03901F81F806CB51200EB1FF8201F7D9E27>79
D<B512FEECFF803907E00FE0EC03F0EC01F8A215FCA515F8A2EC03F0EC0FE090B51280EC
FE0001E0C7FCACB5FCA21E1F7E9E24>I<B512FCECFF803907E00FE0EC03F081140181A4
5D14035DEC0FE090B5128002FCC7FCEBE03FEC0F8081140781A381A31630EC03F8020113
60B53800FFC0ED3F80241F7E9E27>82 D<3803FC08380FFF38381E03F8EA380048137814
3812F01418A26C13007EEA7FC013FE383FFF806C13C06C13E06C13F0C613F81307EB00FC
147C143C12C0A36C1338147800F8137038FE01E038EFFFC000811300161F7D9E1D>I<00
7FB512FCA2397C07E07C0070141C0060140CA200E0140E00C01406A400001400B10003B5
12C0A21F1E7E9D24>I<B53801FFE0A23A07E0000C00B3A400035C6C7E5D6C6C5B90387E
03C090381FFF80D903FCC7FC231F7E9E28>I<3CFFFC0FFFC0FFE0A23C0FC000FC000E00
7F00076E130CA26D151C0003D901BF1318A2D801F85D9138031F80A22600FC076D5AEC06
0F01FE15E0903A7E0C07E0C0A2013FECE18091381803F1A2D91FB801FBC7FCECB00102F0
13FF6D486C5AA201075C4A137CA2010314784A133801011430331F7F9E36>87
D<EA07FC381FFF80383F07C0EB03E0EB01F0A2120C1200133FEA07FDEA1F81EA3E01127C
12F8A3EAFC02EA7E0C383FF87E380FE03E17147F9319>97 D<B4FCA2121FAAEB1FC0EB7F
F0EBE0F8EB807CEB007E143EA2143FA6143EA2147C1380381EC1F8381C7FE038181F8018
207E9F1D>I<EA01FE3807FF80381F0FC0123EA2127CEB030000FCC7FCA6127C127E003E
1360003F13C0EA1F813807FF00EA01FC13147E9317>I<EB07F8A21300AAEA01F8EA07FE
EA1F83EA3E01EA7E00127CA212FCA6127CA2127EEA3E01EA1F07380FFEFFEA03F818207E
9F1D>I<EA01FE3807FF80380F83C0381E01E0383E00F05A14F812FCB5FCA200FCC7FCA3
127CA26C1318121E380F80703807FFE0C6138015147F9318>I<EB3F80EBFFC03803E3E0
EA07C71387120FEB83C0EB8000A5EAFFFCA2EA0F80B0EA7FF8A213207F9F10>I<3803FC
3C380FFFFE381E079E383C03DE007C13E0A5003C13C0381E0780381FFF00EA13FC0030C7
FCA21238383FFF806C13F06C13F84813FC3878007C0070133E00F0131EA30078133CA238
3F01F8380FFFE000011300171E7F931A>I<B4FCA2121FAAEB0FC0EB3FE0EB61F0EBC0F8
13801300AD38FFE7FFA218207D9F1D>I<121C123E127FA3123E121CC7FCA6B4FCA2121F
B0EAFFE0A20B217EA00E>I<B4FCA2121FAAEB01FEA2EB00F014C0EB0380EB0700130C5B
137C13FC139E130F001E1380EB07C01303EB01E014F0EB00F838FFC3FFA218207E9F1C>
107 D<B4FCA2121FB3AAEAFFE0A20B207E9F0E>I<3AFE0FE03F8090391FF07FC03A1E70
F9C3E09039407D01F0EB807E121FEB007CAC3AFFE3FF8FFEA227147D932C>I<38FE0FC0
EB3FE0381E61F0EBC0F81380EA1F00AD38FFE7FFA218147D931D>I<48B4FC000713C038
1F83F0383E00F8A248137CA200FC137EA6007C137CA26C13F8A2381F83F03807FFC00001
130017147F931A>I<38FF1FC0EB7FF0381FE1F8EB80FCEB007EA2143E143FA6143E147E
147CEB80FCEBC1F8EB7FE0EB1F8090C7FCA7EAFFE0A2181D7E931D>I<EAFE3EEB7F8038
1ECFC0138FA2121FEB030090C7FCABEAFFF0A212147E9316>114
D<EA0FE6EA3FFEEA701EEA600EEAE006A2EAF800EAFFC0EA7FF8EA3FFCEA1FFE1203EA00
1FEAC007A212E0EAF006EAF81EEAFFFCEAC7F010147E9315>I<1203A45AA25AA2123FEA
FFFCA2EA1F00AA1306A5EA0F8CEA07F8EA03F00F1D7F9C14>I<38FF07F8A2EA1F00AD13
01A2EA0F063807FCFF6C5A18147D931D>I<39FFE07F80A2391F001C00380F8018A26C6C
5AA26C6C5AA2EBF0E000015B13F900005B13FF6DC7FCA2133EA2131CA219147F931C>I<
3AFFC7FE1FE0A23A1F00F0030014F8D80F801306A29038C1BC0E0007140CEBC3BE3903E3
1E18A29038F60F380001143001FE13B03900FC07E0A2EBF80301785BA290383001802314
7F9326>I<38FFC0FFA2380F80703807C0606D5A3803E180EA01F36CB4C7FC137E133E13
3F497E136FEBC7C0380183E0380381F048C67E000E7F39FF81FF80A219147F931C>I<39
FFE07F80A2391F001C00380F8018A26C6C5AA26C6C5AA2EBF0E000015B13F900005B13FF
6DC7FCA2133EA2131CA21318A2EA783012FC5BEAC0E0EAE1C0EA7F80001EC8FC191D7F93
1C>I E /Fq 39 122 df<127012F012F8A212781208A31210A31220A21240050E7C840D>
44 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>49
D<1306A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A2124012
C0B512F038000E00A7EBFFE0141E7F9D17>52 D<1240387FFFE014C0A238400080388001
00A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A131F7E9D17>55
D<EA03F0EA0E18487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13
EA03E338000380A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>
57 D<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FCEB
000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F9F22>65
D<B61280380780071401A2140015C01540A4EC2000A3146014E013FF138014601420A391
C7FCA87FEAFFFE1A1F7F9E1E>70 D<90380FE0109038381C309038E002703803C0013907
8000F048C71270121E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C12
3CA27EA27E6C7E3903C001703900E002309038380C1090380FF0001F217E9F24>I<EAFF
F0EA0F00B3ABEAFFF00C1F7E9E10>73 D<3807FFC038003E00131EB3A3122012F8A3EAF0
1CEA403CEA6038EA1070EA0FC012207F9E17>I<B4EB0FF8390F8003E0EC0080EA0BC0EA
09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2143C141EA214
0F1407A214031401123E38FF80001D1F7E9E22>78 D<EB1FE0EB70383801C00E48487E39
070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA90078147800
7C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E38007038
EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F00141E14
7CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<B57E380F00F0143C8080A21580A41500A214
1E5C14F0EBFF80EB01C0EB0070A280143CA3143EA31504143F141FEC0F0839FFF00788C7
EA01F01E207E9E21>82 D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13
007E127CEA7F80EA3FF86CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C13
6014E06C13C038F8018038C60300EA81FC14217E9F19>I<007FB512E038780F010060EB
006000401420A200C0143000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FF
F00FF8390F0003E0EC0080B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D
207E9E22>I<39FFF001FF391F800078000F146012076D1340000314807F3901F0010012
00EBF802EB7C06EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E
22>89 D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F013
10A3131E127838386720380F83C014147E9317>97 D<121C12FC121CAA137CEA1D87381E
0180EB00C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C
15207E9F19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A612701278003813
80A2381C0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03
EA180112381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<
EA03F0EA0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C01
00EA0706EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00
B2EA7FE01020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5A
EA1E38EA33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A400
6013606C13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D0300
1E1380A2121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EA
FF80091F7F9E0C>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1D
F0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>107
D<121C12FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E
01E01CA2001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2
121CAE38FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F0
13F0A6007013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1CF0EAFD
18EA1E3CA21318EA1C00AEEAFFC00E147E9312>114 D<EA0FC8EA3038EA6018EAC008A3
EAE000127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E0
0F147F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F0
0E1C7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38
FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A2
1370A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214
C0D80704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB4008
1E147F9321>I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01
C4A213E4EA00E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>121
D E /Fr 19 118 df<EAFFFEA30F037F8E14>45 D<127812FCA412781200AE127812FCA4
1278061A7B9910>58 D<02FF13100107EBE03090381FC07890393E000C7001F8EB06F048
481303484813014848130048481470A248C812305A123E1610127EA2007C150012FCA892
B5FC127C007EEC03F01501123EA2123F7E6C7EA26C7E6C7E6C6C13026C7E013EEB0C7090
391FC03830903907FFE0100100EB8000282B7DA92E>71 D<B53883FFFEA23A07F0001FC0
6C48EB0F80B090B6FCA29038E0000FB1486CEB1FC0B53883FFFEA227297EA82C>I<EA03
FCEA0C0738100380383C01C0003E7F6D7E121C1208C7FCA3137FEA03E0EA0F80EA1E005A
127C0078144012F8A31301127C393C027880381E0C7F3907F01E001A1A7E991D>97
D<137F3801C0E038070010000E1378001E13F85A1470007C13200078130012F8A8127812
7C003C1308A26C1310000E13206C13603801C18038007E00151A7E991A>99
D<140F14FFA2141F80AC133F3801C0CF3803802F380F001F121E001C7F123C127C1278A2
12F8A71278A27EA26C5B000E132F6CEB4F803901C18FF038007E0F1C2A7EA921>I<13FC
38038780380701C0000E13E0EA1C00003C13F0A2481378A212F8A2B512F800F8C7FCA512
78A26C1308A26C1310000E13206C13403801C18038007E00151A7E991A>I<131FEB70C0
EBE1E0EA01C31203EB81C0380780801400A9EAFFFEA2EA0780B3A37FEA7FFCA2132A7FA9
12>I<140F3901FC308038070743380E03C3001EEBC100486C7EA2007C7FA5003C5BA26C
485A000E5BD81707C7FCEA11FC0030C8FCA47E381FFF806C13F06C7F3818007C48131E00
70130E00607F12E0A40070130EA26C5B6C5B380781E0C6B4C7FC19287E9A1D>I<121E12
3FA4121EC7FCA9120FB4FCA2121F7EB3A2EAFFF0A20C297EA811>105
D<120FB4FCA2121F7EACECFFC0A2EC7E0014305C14405C0103C7FC1304130C131E133E13
5F138FEB0780801303806D7E1300801478147C147E39FFF1FFE0A21B2A7EA91F>107
D<120FB4FCA2121F7EB3B2EAFFF0A20C2A7EA911>I<380F07F038FF1838EB201C381F40
0E000F130F1380A21300B139FFF0FFF0A21C1A7E9921>110 D<137E3803C3C0380700E0
000E1370481338003C133CA248131EA200F8131FA80078131EA26C133CA2001C13386C13
706C13E03803C3C038007E00181A7E991D>I<380F0F8038FF11C0EB23E0EA1F43EA0F83
EB81C0EB800090C7FCB07FEAFFFCA2131A7E9917>114 D<3807F080EA1C0DEA3003EA60
0112E01300A27E6C1300127EEA7FE0EA3FFC6C7EEA07FF38003F801307388003C0A21301
12C0A200E01380130300F01300EACC0EEA83F8121A7E9917>I<7FA41201A31203A21207
120F381FFF80B5FC38078000AD1440A73803C08012013800E100133E12257FA417>I<00
0F130FB413FFA2001F131F6C7FB05CA26C132F3903804F803901C08FF038007F0F1C1A7E
9921>I E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin
%%EndSetup
%%Page: 1 1
1 0 bop 306 193 a Fr(Green)19 b(card:)26 b(a)20 b(foreign-language)d
(in)n(terface)h(for)i(Hask)n(ell)766 307 y Fq(Simon)c(P)o(eyton)f
(Jones)457 364 y(Glasgo)o(w)f(Univ)o(ersit)o(y)i(and)f(Oregon)h
(Graduate)e(Institute)811 443 y(Thomas)h(Nordin)232 499
y(Ro)o(y)o(al)h(Institute)f(of)g(T)l(ec)o(hnology)l(,)h(Sto)q(c)o
(kholm,)f(and)g(Oregon)g(Graduate)g(Institute)835 579
y(Alastair)g(Reid)815 635 y(Y)l(ale)h(Univ)o(ersit)o(y)788
745 y(F)l(ebruary)f(14,)g(1997)30 804 y Fp(1)52 b(Motiv)m(ation)30
900 y Fo(A)14 b(foreign-language)j(in)o(terface)e(pro)o(vides)h(a)f(w)o
(a)o(y)f(for)g(soft-)30 942 y(w)o(are)9 b(comp)q(onen)o(ts)h(written)g
(in)f(a)g(one)h(language)h(to)e(in)o(teract)30 983 y(with)17
b(comp)q(onen)o(ts)h(written)f(in)g(another.)29 b(Programming)30
1025 y(languages)17 b(that)e(lac)o(k)h(foreign-language)i(in)o
(terfaces)e(die)f(a)30 1066 y(lingering)h(death.)30 1125
y(This)26 b(do)q(cumen)o(t)h(describ)q(es)h(Green)e(Card,)j(a)d
(foreign-)30 1167 y(language)e(in)o(terface)g(for)e(the)g(non-strict,)k
(purely)d(func-)30 1209 y(tional)15 b(language)g(Hask)o(ell.)20
b(W)m(e)13 b(assume)h(some)g(kno)o(wledge)30 1250 y(of)f(Hask)o(ell)h
(and)g(C.)30 1376 y Fp(1.1)52 b(Goals)18 b(and)g(non-goals)30
1460 y Fo(Our)12 b(goals)i(are)e(limited.)19 b(W)m(e)13
b(do)f(not)h(set)f(out)h(to)f(solv)o(e)h(the)30 1501
y(foreign-language)f(in)o(terface)f(in)f(general;)h(rather)f(w)o(e)f
(in)o(tend)30 1543 y(to)14 b(pro\014t)h(from)f(others')g(w)o(ork)g(in)i
(this)f(area.)20 b(Sp)q(eci\014call)q(y)m(,)30 1584 y(w)o(e)13
b(aim)g(to)g(pro)o(vide)i(the)e(follo)o(wing,)i(in)e(priorit)o(y)i
(order:)75 1673 y(1.)j(A)j(con)o(v)o(enien)o(t)i(w)o(a)o(y)e(to)f(call)
j(C)d(pro)q(cedures)j(from)123 1715 y(Hask)o(ell.)75
1786 y(2.)18 b(A)11 b(con)o(v)o(enien)o(t)i(w)o(a)o(y)d(to)h(write)g
(COM)660 1771 y Fn(1)688 1786 y Fo(soft)o(w)o(are)g(com-)123
1828 y(p)q(onen)o(ts)20 b(in)g(Hask)o(ell,)h(and)f(to)e(call)j(COM)d
(comp)q(o-)123 1869 y(nen)o(ts)c(from)f(Hask)o(ell.)30
1959 y(The)e(abilit)o(y)i(to)d(call)i(C)e(from)g(Hask)o(ell)j(is)e(an)g
(essen)o(tial)h(foun-)30 2000 y(dation.)28 b(Through)18
b(it)e(w)o(e)g(can)h(access)g(op)q(erating)h(system)30
2042 y(services)c(and)g(moun)o(tains)h(of)e(other)g(soft)o(w)o(are)g
(libraries.)30 2101 y(In)j(the)f(other)h(direction,)i(should)g(w)o(e)d
(b)q(e)h(able)g(to)g(write)f(a)30 2142 y(Hask)o(ell)c(library)g(that)e
(a)g(C)g(program)h(can)f(use?)16 b(In)10 b(principle)30
2184 y(this)j(mak)o(es)f(sense)g(but)g(in)h(practice)f(there)g(is)h
(zero)e(demand)30 2225 y(for)16 b(it.)29 b(The)17 b(exception)h(is)g
(that)f(the)f(abilit)o(y)k(to)c(supp)q(ort)30 2267 y(some)d(sort)g(of)f
(call-bac)o(ks)j(is)f(essen)o(tial,)g(but)f(that)g(is)g(a)g(v)o(ery)30
2308 y(limited)i(form)e(of)g(C)f(calling)k(Hask)o(ell.)p
30 2338 356 2 v 73 2363 a Fm(1)90 2375 y Fl(Microsoft's)9
b(Common)h(Ob)r(ject)g(Mo)q(del)g(\(COM\))g(is)g(a)f(language-)30
2408 y(indep)q(enden)o(t)16 b(soft)o(w)o(are)d(comp)q(onen)o(t)h(arc)o
(hitecture.)23 b(It)14 b(allo)o(ws)g(ob-)30 2442 y(jects)d(written)h
(in)g(one)f(language)g(to)g(create)f(ob)r(jects)h(written)g(in)i(an-)30
2475 y(other,)j(and)g(to)e(call)i(their)f(metho)q(ds.)28
b(The)15 b(t)o(w)o(o)f(ob)r(jects)h(ma)o(y)h(b)q(e)30
2508 y(in)d(the)f(same)g(address)g(space,)g(in)h(di\013eren)o(t)g
(address)f(spaces)g(on)g(the)30 2541 y(same)h(mac)o(hine,)i(or)d(on)i
(separate)e(mac)o(hines)i(connected)f(b)o(y)h(a)e(net-)30
2574 y(w)o(ork.)i(OLE)c(is)h(a)e(set)h(of)f(con)o(v)o(en)o(tions)i(for)
e(building)j(comp)q(onen)o(ts)e(on)30 2608 y(top)h(of)g(COM.)1017
804 y Fo(Should)j(w)o(e)c(supp)q(ort)j(languages)g(other)f(than)f(C?)g
(The)g(trite)1017 845 y(answ)o(er)k(is)f(that)g(prett)o(y)h(m)o(uc)o(h)
f(ev)o(erything)i(a)o(v)n(ailable)h(as)d(a)1017 887 y(library)f(is)e(a)
o(v)n(ailable)i(as)d(a)h(C)f(library)m(.)18 b(F)m(or)10
b(other)h(languages)1017 929 y(the)18 b(righ)o(t)h(thing)g(to)f(do)g
(is)g(to)g(in)o(terface)h(to)e(a)h(language-)1017 970
y(indep)q(enden)o(t)d(soft)o(w)o(are)d(comp)q(onen)o(t)i(arc)o
(hitecture,)f(rather)1017 1012 y(than)i(to)e(a)h(raft)f(of)h(sp)q
(eci\014c)h(languages.)21 b(F)m(or)14 b(the)g(momen)o(t)1017
1053 y(w)o(e)d(c)o(ho)q(ose)g(COM,)f(but)h(CORBA)1515
1037 y Fn(2)1543 1053 y Fo(migh)o(t)g(b)q(e)g(another)h(sen-)1017
1095 y(sible)j(c)o(hoice.)1017 1154 y(While)k(w)o(e)d(do)h(not)g(prop)q
(ose)h(to)f(call)h(Hask)o(ell)g(from)f(C,)e(it)1017 1195
y(do)q(es)j(mak)o(e)g(sense)g(to)f(think)i(of)e(writing)h(COM)f(soft)o
(w)o(are)1017 1237 y(comp)q(onen)o(ts)g(in)f(Hask)o(ell)g(that)f(are)g
(used)h(b)o(y)f(clien)o(ts.)25 b(F)m(or)1017 1278 y(example,)e(one)d
(migh)o(t)h(write)f(an)g(animated)i(comp)q(onen)o(t)1017
1320 y(that)14 b(sits)f(in)h(a)f(W)m(eb)g(page.)1017
1379 y(This)19 b(do)q(cumen)o(t,)h(ho)o(w)o(ev)o(er,)g(describ)q(es)g
(only)f(\(1\),)g(the)f(C)1017 1421 y(in)o(terface)c(mec)o(hanism.)1017
1551 y Fp(2)53 b(F)l(oreign)d(language)i(in)o(terfaces)f(are)1096
1607 y(harder)17 b(than)h(they)f(lo)q(ok)1017 1704 y
Fo(Ev)o(en)25 b(after)e(the)h(scop)q(e)g(is)h(restricted)g(to)e
(designing)k(a)1017 1745 y(foreign-language)14 b(in)o(terface)e(from)f
(Hask)o(ell)i(to)e(C,)f(the)h(task)1017 1787 y(remains)k(surprisingly)h
(tric)o(ky)m(.)i(A)o(t)12 b(\014rst,)h(one)h(migh)o(t)f(think)1017
1828 y(that)20 b(one)f(could)i(tak)o(e)e(the)g(C)g(header)h(\014le)g
(describing)i(a)1017 1870 y(C)14 b(pro)q(cedure,)h(and)g(generate)g
(suitable)h(in)o(terface)f(co)q(de)g(to)1017 1911 y(mak)o(e)f(the)f
(pro)q(cedure)h(callable)i(from)c(Hask)o(ell.)1017 1971
y(Alas,)21 b(there)e(are)h(n)o(umerous)g(tiresome)g(details)g(that)g
(are)1017 2012 y(simply)e(not)f(expressed)g(b)o(y)g(the)f(C)g(pro)q
(cedure)i(protot)o(yp)q(e)1017 2054 y(in)d(the)g(header)g(\014le.)22
b(F)m(or)14 b(example,)i(consider)g(calling)h(a)d(C)1017
2095 y(pro)q(cedure)e(that)f(op)q(ens)h(a)f(\014le,)h(passing)g(a)f(c)o
(haracter)h(string)1017 2137 y(as)h(argumen)o(t.)18 b(The)13
b(C)g(protot)o(yp)q(e)h(migh)o(t)g(lo)q(ok)g(lik)o(e)g(this:)1057
2196 y Fk(int)k(open\()g(char)g(*filename)e(\))1017 2255
y Fo(Our)25 b(goal)h(is)f(to)g(generate)g(co)q(de)g(that)g(implemen)o
(ts)i(a)1017 2297 y(Hask)o(ell)15 b(pro)q(cedure)f(with)g(t)o(yp)q(e)
1057 2356 y Fk(open)k(::)g(String)g(->)h(IO)f(FileDescrip)o(to)o(r)1073
2453 y Fj(\017)h Fo(First)e(there)h(is)g(the)f(question)i(of)d(data)i
(represen)o(ta-)1111 2495 y(tion.)44 b(One)22 b(has)g(to)g(decide)h
(either)f(to)g(alter)h(the)1111 2536 y(Hask)o(ell)j(language)g
(implemen)o(tation,)k(so)25 b(that)f(is)p 1017 2566 V
1061 2590 a Fm(2)1077 2603 y Fl(CORBA)11 b(is)h(a)f(v)o(endor-indep)q
(enden)o(t)i(comp)q(etitor)e(of)g(COM.)p eop
%%Page: 2 2
2 1 bop 123 117 a Fo(string)19 b(represen)o(tation)g(is)e(iden)o(tical)
j(to)d(that)g(of)g(C,)123 158 y(or)f(to)g(translate)h(the)e(string)i
(from)f(one)g(represen)o(ta-)123 200 y(tion)e(to)f(another)h(at)f(run)g
(time.)18 b(This)13 b(translation)j(is)123 241 y(con)o(v)o(en)o
(tionall)q(y)g(called)f Fi(marshal)r(ling)p Fo(.)123
296 y(Since)22 b(Hask)o(ell)g(is)f(lazy)m(,)h(the)f(second)g(approac)o
(h)h(is)123 337 y(required.)32 b(\(In)18 b(general,)i(it)d(is)i
(tremendously)g(con-)123 379 y(straining)13 b(to)d(try)g(to)g(k)o(eep)h
(common)f(represen)o(tations)123 420 y(b)q(et)o(w)o(een)15
b(t)o(w)o(o)f(languages.)23 b(F)m(or)14 b(example,)h(precisely)123
462 y(ho)o(w)e(do)q(es)h(C)f(la)o(y)g(out)h(its)f(structures?\))86
530 y Fj(\017)18 b Fo(Next)c(come)g(questions)i(of)d(allo)q(cation)k
(and)d(lifetime.)123 572 y(Where)h(should)h(w)o(e)d(put)i(the)f
(translated)h(string?)21 b(In)123 613 y(a)11 b(static)g(piece)g(of)f
(storage?)17 b(\(But)10 b(ho)o(w)h(large)g(a)f(blo)q(c)o(k)123
655 y(should)k(w)o(e)d(allo)q(cate?)19 b(Is)11 b(it)h(safe)f(to)h
(re-use)g(the)f(same)123 696 y(blo)q(c)o(k)17 b(on)e(the)g(next)h
(call?\))25 b(Or)14 b(in)i(Hask)o(ell's)h(heap?)123 738
y(\(But)i(what)f(if)g(the)g(called)i(pro)q(cedure)g(do)q(es)e(some-)123
779 y(thing)g(that)e(triggers)h(garbage)g(collection,)j(and)c(the)123
821 y(transformed)k(string)g(is)f(mo)o(v)o(ed?)35 b(Can)19
b(the)g(called)123 862 y(pro)q(cedure)11 b(hold)g(on)f(to)g(the)g
(string)g(after)g(it)g(returns?\))123 904 y(Or)k(in)i(C's)d
Fk(malloc)n Fo('d)h(heap?)23 b(\(But)14 b(ho)o(w)h(will)h(it)e(get)123
945 y(deallo)q(cated?)20 b(And)14 b Fk(malloc)c Fo(is)k(exp)q(ensiv)o
(e.\))86 1014 y Fj(\017)k Fo(C)g(pro)q(cedures)i(often)e(accept)g(p)q
(oin)o(ter)i(parameters)123 1055 y(\(suc)o(h)14 b(as)f(strings\))h
(that)e(can)i(b)q(e)f Fk(NULL)n Fo(.)k(Ho)o(w)12 b(is)h(that)123
1097 y(to)h(b)q(e)g(re\015ected)g(on)g(the)g(host-language)h(side)g(of)
e(the)123 1138 y(in)o(terface?)33 b(F)m(or)18 b(example,)i(if)e(the)g
(do)q(cumen)o(tation)123 1180 y(for)11 b Fk(open)e Fo(told)i(us)g(that)
g(it)g(w)o(ould)h(do)f(something)h(sen-)123 1221 y(sible)17
b(when)e(called)h(with)f(a)g Fk(NULL)e Fo(string,)i(w)o(e)g(migh)o(t)
123 1263 y(lik)o(e)g(the)e(Hask)o(ell)i(t)o(yp)q(e)e(for)g
Fk(open)e Fo(to)i(b)q(e)163 1341 y Fk(open)18 b(::)h(Maybe)e(String)h
(->)g(IO)h(FileDescri)o(pto)o(r)123 1420 y Fo(so)14 b(that)f(w)o(e)f
(can)i(mo)q(del)g Fk(NULL)d Fo(b)o(y)i Fk(Nothing)n Fo(.)86
1488 y Fj(\017)18 b Fo(The)e(desired)g(return)g(t)o(yp)q(e,)g
Fk(FileDescri)o(pt)o(or)m Fo(,)f(will)123 1529 y(presumably)23
b(ha)o(v)o(e)d(a)g(Hask)o(ell)i(de\014nition)h(suc)o(h)d(as)123
1571 y(this:)163 1649 y Fk(newtype)d(FileDesc)o(rip)o(tor)f(=)j(FD)g
(Int)123 1728 y Fo(The)24 b(\014le)g(descriptor)h(returned)f(b)o(y)f
Fk(open)f Fo(is)i(just)123 1769 y(an)16 b(in)o(teger,)h(but)f(Hask)o
(ell)h(programmers)g(often)e(use)123 1811 y Fk(newtype)e
Fo(declarations)k(create)f(new)f(distinct)i(t)o(yp)q(es)123
1852 y(isomorphic)g(to)c(existing)j(ones.)k(No)o(w)13
b(the)h(t)o(yp)q(e)g(sys-)123 1894 y(tem)f(will)h(prev)o(en)o(t,)f(sa)o
(y)m(,)f(an)h(attempt)g(to)f(add)i(one)f(to)123 1935
y(a)g Fk(FileDescrip)o(to)o(r)m Fo(.)123 1990 y(Needless)18
b(to)f(sa)o(y)m(,)h(the)f(Hask)o(ell)h(result)g(t)o(yp)q(e)f(is)g(not)
123 2032 y(going)e(to)e(b)q(e)g(describ)q(ed)i(in)f(the)f(C)f(header)i
(\014le.)86 2100 y Fj(\017)k Fo(The)g(\014le-op)q(en)h(pro)q(cedure)f
(migh)o(t)g(fail;)i(sometimes)123 2142 y(details)e(of)e(the)g(failure)h
(are)f(stored)h(in)f(some)g(global)123 2183 y(v)n(ariable,)j
Fk(errno)n Fo(.)25 b(Someho)o(w)16 b(this)h(failure)g(and)f(the)123
2225 y(details)21 b(of)d(what)g(w)o(en)o(t)g(wrong)h(m)o(ust)f(b)q(e)h
(re\015ected)123 2266 y(in)o(to)14 b(Hask)o(ell's)h Fk(IO)d
Fo(monad.)86 2334 y Fj(\017)18 b Fo(The)f Fk(open)f Fo(pro)q(cedure)i
(causes)g(a)f(side)i(e\013ect,)f(so)f(it)123 2376 y(is)k(appropriate)i
(for)d(its)h(t)o(yp)q(e)g(to)f(b)q(e)h(in)g(Hask)o(ell's)123
2417 y Fk(IO)c Fo(monad.)31 b(Some)17 b(C)g(functions)i(really)g(are)e
(func-)123 2459 y(tions)d(\(that)f(is,)g(they)h(ha)o(v)o(e)f(no)g(side)
h(e\013ects\),)f(and)h(in)123 2500 y(this)i(case)f(it)g(mak)o(es)h
(sense)f(to)g(giv)o(e)h(them)f(a)g(\\pure")123 2542 y(Hask)o(ell)h(t)o
(yp)q(e.)22 b(F)m(or)14 b(example,)i(the)f(C)f(function)i
Fk(sin)123 2583 y Fo(should)h(app)q(ear)f(to)f(the)h(Hask)o(ell)g
(programmer)g(as)f(a)123 2625 y(function)g(with)e(t)o(yp)q(e)1150
117 y Fk(sin)18 b(::)h(Float)f(->)h(Float)1073 203 y
Fj(\017)g Fo(C)8 b(pro)q(cedure)j(sp)q(eci\014cations)h(are)d(not)g
(explicit)j(ab)q(out)1111 244 y(whic)o(h)g(parameters)g(are)g
Fk(in)f Fo(parameters,)h(whic)o(h)g Fk(out)1111 286 y
Fo(and)h(whic)o(h)h Fk(in)19 b(out)o Fo(.)1017 383 y(None)c(of)f(these)
g(details)i(are)f(men)o(tioned)h(in)f(the)f(C)g(header)1017
425 y(\014le.)26 b(Instead,)17 b(man)o(y)f(of)g(them)g(are)g(in)g(the)g
(man)o(ual)h(page)1017 466 y(for)h(the)h(pro)q(cedure,)h(while)g
(others)f(\(suc)o(h)g(as)f(parameter)1017 508 y(lifetimes\))d(ma)o(y)e
(not)g(ev)o(en)h(b)q(e)f(written)h(do)o(wn)f(at)g(all.)1017
638 y Fp(3)53 b(Ov)o(erview)16 b(of)h(Green)g(Card)1017
735 y Fo(The)9 b(previous)i(section)f(b)q(o)q(des)f(ill)i(for)d(an)h
(automatic)h(system)1017 776 y(that)f(attempts)h(to)e(tak)o(e)h(C)g
(header)g(\014les)h(and)g(automatically)1017 818 y(generate)k(the)f
(\\righ)o(t")h(Hask)o(ell)g(functions;)g(C)e(header)i(\014les)1017
859 y(simply)h(do)f(not)f(con)o(tain)h(enough)h(information.)1017
918 y(The)d(rest)g(of)f(this)i(pap)q(er)f(describ)q(es)i(ho)o(w)d(w)o
(e)h(approac)o(h)h(the)1017 960 y(problem.)18 b(The)10
b(general)h(idea)g(is)g(to)f(start)g(from)g(the)g Fi(Haskel)r(l)1017
1001 y Fo(t)o(yp)q(e)17 b(de\014nition)i(for)e(the)f(foreign)i
(function,)g(rather)f(than)1017 1043 y(the)f Fi(C)g Fo(protot)o(yp)q
(e.)25 b(The)15 b(Hask)o(ell)i(t)o(yp)q(e)f(con)o(tains)h(quite)g(a)
1017 1084 y(bit)i(more)e(information;)22 b(indeed,)e(it)e(is)g(often)g
(enough)h(to)1017 1126 y(generate)14 b(correct)e(in)o(terface)i(co)q
(de.)j(Sometimes,)d(ho)o(w)o(ev)o(er,)1017 1167 y(it)g(is)f(not,)g(in)h
(whic)o(h)g(case)f(w)o(e)f(pro)o(vide)j(a)e(w)o(a)o(y)g(for)g(the)g
(pro-)1017 1209 y(grammer)g(to)f(express)i(more)e(details)j(of)d(the)g
(in)o(terface.)18 b(All)1017 1250 y(of)10 b(this)h(is)f(em)o(b)q(o)q
(died)i(in)e(a)g(program)h(called)g(\\Green)g(Card".)1017
1310 y(Green)20 b(Card)g(is)g(a)g(Hask)o(ell)h(pre-pro)q(cessor.)38
b(It)19 b(tak)o(es)h(a)1017 1351 y(Hask)o(ell)13 b(mo)q(dule)h(as)d
(input,)i(and)g(scans)f(it)g(for)f(Green-Card)1017 1393
y(directiv)o(es)18 b(\(whic)o(h)f(are)f(lines)i(pre\014xed)f(b)o(y)f
(\\)p Fk(\045)p Fo("\).)26 b(It)16 b(pro-)1017 1434 y(duces)10
b(a)g(new)f(Hask)o(ell)i(mo)q(dule)g(as)e(output,)i(and)f(sometimes)
1017 1476 y(a)j(C)g(mo)q(dule)h(as)f(w)o(ell)h(\(Figure)g(1\).)1017
1535 y(Green)29 b(Card's)g(output)h(dep)q(ends)g(on)f(the)g(particular)
1017 1576 y(Hask)o(ell)19 b(implemen)o(tation)i(that)d(is)g(going)h(to)
e(compile)j(it.)1017 1618 y(F)m(or)j(the)g(Glasgo)o(w)h(Hask)o(ell)g
(Compiler)h(\(GHC\),)c(Green)1017 1659 y(Card)15 b(generates)g(Hask)o
(ell)g(co)q(de)g(that)f(uses)h(GHC's)f(primi-)1017 1701
y(tiv)o(e)h Fk(ccall)n Fo(/)p Fk(casm)d Fo(construct)j(to)e(call)i(C.)e
(All)i(of)f(the)f(argu-)1017 1742 y(men)o(t)e(marshalling)j(is)d(done)g
(in)g(Hask)o(ell.)18 b(F)m(or)10 b(Hugs,)h(Green)1017
1784 y(Card)16 b(generates)g(a)f(C)g(mo)q(dule)i(to)e(do)h(most)f(of)g
(the)g(argu-)1017 1825 y(men)o(t)i(marshalling,)j(while)e(the)f
(generated)g(Hask)o(ell)h(co)q(de)1017 1867 y(uses)13
b(Hugs's)f Fk(prim)f Fo(construct)i(to)f(access)h(the)f(generated)h(C)
1017 1908 y(stubs.)1017 1968 y(F)m(or)g(example,)h(consider)h(the)e
(follo)o(wing)i(Hask)o(ell)g(mo)q(dule:)1057 2027 y Fk(module)i(M)i
(where)1057 2110 y(\045fun)f(sin)g(::)h(Float)f(->)g(Float)1057
2193 y(sin2)g(::)g(Float)g(->)h(Float)1057 2234 y(sin2)f(x)h(=)g(sin)g
(\(sin)f(x\))1017 2294 y Fo(Ev)o(erything)f(is)d(standard)i(Hask)o(ell)
g(except)f(the)f Fk(\045fun)f Fo(line,)1017 2335 y(whic)o(h)19
b(asks)g(Green)g(Card)f(to)g(generate)h(an)g(in)o(terface)g(to)1017
2377 y(a)h(\(pure\))f(C)g(function)i Fk(sin)n Fo(.)36
b(After)18 b(the)i(GHC-targeted)1017 2418 y(v)o(ersion)15
b(of)f(Green)g(Card)f(pro)q(cesses)i(the)e(\014le,)i(it)f(lo)q(oks)g
(lik)o(e)1017 2460 y(this)1078 2444 y Fn(3)1097 2460
y Fo(:)p 1017 2483 356 2 v 1061 2507 a Fm(3)1077 2519
y Fl(Only)k(GHC)c(a\014cionados)h(will)i(understand)g(this)g(co)q(de.)
29 b(The)1017 2552 y(whole)15 b(p)q(oin)o(t)h(of)f(Green)g(Card)g(is)h