summaryrefslogtreecommitdiff
path: root/macros/generic/TeX-PS
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/generic/TeX-PS
Initial commit
Diffstat (limited to 'macros/generic/TeX-PS')
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/README34
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdfbin0 -> 206964 bytes
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex673
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/fountain.eps302
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/gdansk.eps112
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/rules.tex6
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat23
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample1.tex56
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample2.tex74
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample3.tex31
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample4.tex48
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/screen.eps1150
-rw-r--r--macros/generic/TeX-PS/epsfx.tex412
-rw-r--r--macros/generic/TeX-PS/mirr.hd32
-rw-r--r--macros/generic/TeX-PS/poligraf/README121
-rw-r--r--macros/generic/TeX-PS/poligraf/crops.pro196
-rw-r--r--macros/generic/TeX-PS/poligraf/kol-cmyk.eps208
-rw-r--r--macros/generic/TeX-PS/poligraf/poligraf.sty101
-rw-r--r--macros/generic/TeX-PS/poligraf/sample.tex50
-rw-r--r--macros/generic/TeX-PS/poligraf/samplelx.tex64
-rw-r--r--macros/generic/TeX-PS/poligraf/separate.pro144
-rw-r--r--macros/generic/TeX-PS/trans.tex653
22 files changed, 4490 insertions, 0 deletions
diff --git a/macros/generic/TeX-PS/cmyk-hax/README b/macros/generic/TeX-PS/cmyk-hax/README
new file mode 100644
index 0000000000..5212f0f670
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/README
@@ -0,0 +1,34 @@
+The package CMYK-HAX contains the following files:
+
+cmyk-hax.tex - The set of macros for making color separation
+rules.tex - The patch for DVIPS rules definitions
+cmyk-doc.pdf - Documentation in Polish
+fountain.eps - EPS file used in sample1.tex
+gdansk.eps - EPS file used in sample2.tex
+readme - This file
+sam1-sep.bat - The batch file for sample1.tex
+sample1.tex - Example 1: color separation for outline graphics and text
+sample2.tex - Example 2: color separation for outline graphics
+ by color changes
+sample3.tex - Example 3: color separation for bitmap
+sample4.tex - Example 4: color separation for bitmap with color changes
+screen.eps - EPS file used in sample3.tex and sample4.tex
+
+=============================================================================
+
+Pakiet CMYK-HAX zawiera nast/epuj/ace pliki:
+
+cmyk-hax.tex - Pakiet makr do wykonywania wyci/ag/ow barwnych
+rules.tex - /Lata na DVIPS-owe definicje ruli
+cmyk-doc.pdf - Dokumentacja po polsku
+fountain.eps - Plik EPS u/zywany w przyk/ladzie sample1.tex
+gdansk.eps - Plik EPS u/zywany w przyk/ladzie sample2.tex
+readme - Ten plik
+sam1-sep.bat - Plik wsadowy do przyk/ladu sample1.tex
+sample1.tex - Przyk/lad 1: rozbarwianie grafiki obwiedniowej i tekst/ow
+sample2.tex - Przyk/lad 2: rozbarwianie grafiki obwiedniowej poprzez
+ podmian/e kolor/ow
+sample3.tex - Przyk/lad 3: rozbarwianie mapy bitowej
+sample4.tex - Przyk/lad 4: rozbarwianie mapy bitowej wraz
+ z podmian/a kolor/ow
+screen.eps - Plik EPS u/zywany w przyk/ladach sample3.tex i sample4.tex
diff --git a/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf b/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf
new file mode 100644
index 0000000000..4477328289
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf
Binary files differ
diff --git a/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex b/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
new file mode 100644
index 0000000000..4d397c2f45
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
@@ -0,0 +1,673 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CMYK-HAX.TEX:
+% E This is a set of TeX macros supporting color separation and
+% substitution using TeX/PostScript environment. Needs DVIPS and
+% COLORDVI from standard DVIPS distribution.
+%
+% P Zestaw makr TeX-owo-PostScript-owych do tworzenia wyci/ag/ow barwnych
+% i podmiany kolor/ow. Wsp/o/lpracuje ze sterownikiem DVIPS
+% i zestawem makr COLORDVI (ze standardowej dystrybucji DVIPS-a);
+%
+% AUTHORS' COORDINATES:
+% BOP s.c.
+% ul. Piastowska 70, 80-363 Gda\'nsk, Poland
+% tel./fax +48 58 553-46-59
+% email: bop@bop.com.pl
+%
+% VERSION 0.75, 15.06.2000
+% Public domain
+%
+% HISTORY:
+% E version released during the GUST annual meeting Bacho\TeX'95.
+% P wersja udost/epniona podczas Bacho\TeX'95.
+% VERSION 0.51, 5 V 1995:
+% E macro \CMYKinit added (it places necessary def's in a PS prolog).
+% P dodane zosta/lo makro inicjalizacyjne `\CMYKinit',
+% kt/ore umieszcza w prologu PS u/zywane definicje.
+% VERSION 0.52, 27 VI 1995:
+% E the `currentpoint' fault in case of empty current path; now `currentpoint'
+% is called by the `stopped' command, which makes an error action
+% availlable.
+% P `currentpoint' generowa/l b/l/ad gdy bie/z/aca /scie/zki by/la pusta;
+% obecnie `currentpoint' jest wykonywane przez `stopped',
+% co daje mo/zliwo/s/c zareagowania na b/l/ad.
+% VERSION 0.53, 23 VII 1996:
+% E 1. the constant `epsilon=0.005' entered to do approximed
+% color comparations.
+% 2. \PSscreen became a \special.
+% P 1. wprowadzono sta/l/a `epsilon=0.005', kt/ora jest dok/ladno/sci/a
+% por/ownania kolor/ow.
+% 2. \PSscreen by/l dot/ad makrem TeX-owym o tre/sci PS-owej
+% sensowne jest, aby sta/l si/e \specialem
+% VERSION 0.54, 8 XI 1996 r.
+% E `show' redefinition allows the text outlining.
+% P redefinicja `show' umo/zliwia ju/z dok/ladanie obw/odki do tekst/ow.
+% VERSION 0.60, 11 IV 1997:
+% E processing of CMYK bitmaps enabled
+% P umo/zliwienie przetwarzania bitmap CMYK
+% VERSION 0.61, 11.VIII.1997
+% E `adddownstroke' added (stroke under fill)
+% P dodano `adddownstroke' (rysowan/a pod fillem)
+% VERSION 0.62, 24.IX.1997
+% E `setscreen' gets all parameters
+% P `setscreen' zyskuje wszystkie parametry podawane explicite
+% nie korzysta si/e z warto/sci `currentscreen'
+% VERSION 0.64, 9.VII.1999
+% E bitmap color separation added, delblack (also for imagemask),
+% additional 5-th all-white bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 4 def)
+% additional 6-th all-black bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 5 def)
+% P do/l/aczono rozbarwianie bitmap, delblack (tak/ze dla imagemask),
+% 5. bia/ly wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 4 def)
+% 6. czarny wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 5 def)
+% VERSION 0.65, 6.VIII.1999
+% E 5-th and 6-th bitmap separation were improved (`pop' added
+% in the case of not-dictionary images)
+% P poprawka w 5. i 6. wyci/agu bitmap (dodano `pop' w bitmapach
+% nies/lownikowych)
+% VERSION 0.66, 13.IX.1999
+% E indexed color bitmaps support (for `colormap')
+% P obs/luga bitmap paletowych (do `colormap')
+% VERSION 0.67, 21.01.2000
+% E support for multisource `colorimage' -- only CMYK separations
+% P obs/luga wersji wielo/xr/od/lowej polecenia `colorimage'
+% -- na razie tylko CMYK i tylko separacja
+% VERSION 0.68, 16.03.2000
+% E \projectCMYK calls setcmykcolor explicite
+% P \projectCMYK wywo/luje explicite setcmykcolor
+% VERSION 0.70, 27.03.2000
+% E image, colorimage and imagemask operators are transferred to
+% their dictionary form and we support them almost completly;
+% limitations: we support only bitmaps with
+% ImageType = 1, in one of Device Color Spaces,
+% when BitsPerComponent = 1 (other values of BitsPerComponent
+% we allow for imagemask, of corse, and for DeviceGray model --
+% without color substitution, unfortunately)
+% P oparatory image, colorimage oraz imagemask przeniesione do wersji
+% s/lownikowej i prawie kompletnie obs/lu/zone;
+% ograniczenia: obs/lugujemy tylko bitmapy, dla kt/orych
+% ImageType = 1, model barw nale/zy do klasy Device Color Spaces,
+% BitsPerComponent = 8 (inne warto/sci BitsPerComponent dopuszczamy
+% oczywi/scie dla imagemask oraz w przypadku modelu DeviceGray --
+% wtedy jednak nie potrafimy podmienia/c kolor/ow)
+% VERSION 0.71, 10.04.2000
+% E 3 bugs fixed:
+% 1) we already support MultipleDataSources in ImageDict
+% 2) it was a superfluous pop in merge_multi3
+% 3) 1 level of redefinition setcmykcolor (hax_setcmykcolor) added
+% P usuni/eto 3 pluskwy w obs/ludze image:
+% 1) ju/z obs/luguje si/e MultipleDataSources w ImageDict
+% 2) by/l zb/edny pop w merge_multi3
+% 3) dodano 1 poziom redefinicji setcmykcolor (hax_setcmykcolor)
+% VERSION 0.73, 28.04.2000
+% E 1) \sepbitmapfalse turns bitmap separation off,
+% \sepbitmaptrue turns bitmap separation on
+% 2) missing ImageDict parameter added before ori_image
+% P 1) \sepbitmapfalse wy/l/acza rozbarwianie bitmap,
+% \sepbitmaptrue przywraca rozbarwianie bitmap
+% 2) dodano brakuj/acy parametr ImageDict przed ori_image
+% VERSION 0.74, 11.05.2000
+% E Bug in \delblacktrue handling has been fixed;
+% the colors created from black with changecolor can be separated now.
+% P Poprawiona pluskwa w obs/ludze \delblacktrue;
+% mo/zliwe staje si/e rozbarwianie kolor/ow powsta/lych z podmiany
+% koloru czarnego.
+% VERSION 0.75, 15.06.2000
+% E \convertbitmaptrue turns on conversion of RGB bitmaps to CMYK,
+% to allow them to be separated
+% \convertbitmapfalse truns conversion off, by default, RGB bitmaps
+% are neither converted nor separated
+% P \convertbitmaptrue w/l/acza konwersj/e bitmap RGB do modelu CMYK,
+% co umo/zliwia ich rozbarwianie
+% \convertbitmapfalse wy/l/acza konwersj/e bitmap RGB do modelu CMYK,
+% co uniemo/zliwia ich rozbarwianie; domy/slnie bitmapy RGB nie s/a
+% ani konwertowane, ani rozbarwiane
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\edef\slashcatcode {\the\catcode`\/}
+\catcode`\/12
+%
+\def\CMYKinit {\special {! userdict begin
+%
+/ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor load def} ifelse
+/ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor load def} ifelse
+/ori_setgray where {pop} {/ori_setgray /setgray load def} ifelse
+/ori_colorimage where {pop} {/ori_colorimage /colorimage load def} ifelse
+/ori_image where {pop} {/ori_image /image load def} ifelse
+/ori_imagemask where {pop} {/ori_imagemask /imagemask load def} ifelse
+/ori_fill where {pop} {/ori_fill /fill load def} ifelse
+/ori_eofill where {pop} {/ori_eofill /eofill load def} ifelse
+/ori_stroke where {pop} {/ori_stroke /stroke load def} ifelse
+/ori_show where {pop} {/ori_show /show load def} ifelse
+/hax_setcmykcolor /ori_setcmykcolor load def
+%
+/maybe_black {
+ 4 copy
+ 1 sub abs epsilon le exch
+ 0 sub abs epsilon le and exch
+ 0 sub abs epsilon le and exch
+ 0 sub abs epsilon le and
+ /if_delblack exch def
+} def
+%
+/my_fill {userdict begin if_delblack {newpath} {ori_fill} ifelse end} def
+/my_eofill {userdict begin if_delblack {newpath} {ori_eofill} ifelse end} def
+/my_stroke {userdict begin if_delblack {newpath} {ori_stroke} ifelse end} def
+/my_show {userdict begin if_delblack {false charpath currentpoint newpath moveto} {ori_show} ifelse end} def
+%
+/eofill {userdict begin my_eofill end} def
+/fill {userdict begin my_fill end} def
+/stroke {userdict begin my_stroke end} def
+/show {userdict begin my_show end} def
+%
+/setcmykcolor {userdict begin
+ /k_ exch def /y_ exch def /m_ exch def /c_ exch def
+ c_ m_ y_ k_ hax_setcmykcolor end} def
+/setgray {ori_setgray currentcmykcolor setcmykcolor} def
+/setrgbcolor {ori_setrgbcolor currentcmykcolor setcmykcolor} def
+%
+/hax_image {
+ dup type cvlit /dicttype eq {
+ /ImageDict exch def
+ currentcolorspace dup length 1 eq % only Device color spaces
+ ImageDict /ImageType get 1 eq and {% and ImageType 1 are supported
+ 0 get
+ dup /DeviceRGB eq {/ncomp 3 def} if
+ dup /DeviceGray eq {/ncomp 1 def} if
+ /DeviceCMYK eq {/ncomp 4 def} if
+ ImageDict /BitsPerComponent get 8 ne % only gray image separations
+ /ncomp 1 ne and {/ncomp 0 def} if % allowed if sample is not a byte
+ } {pop /ncomp 0 def} ifelse
+ } {
+ false 1 makeimagedict
+ } ifelse
+ ncomp 0 eq {ImageDict ori_image} {hax_image_} ifelse
+} def
+%
+/hax_colorimage {
+ makeimagedict
+ hax_image_
+} def
+%
+/makeimagedict {
+ dup /ncomp exch def
+ dup 4 eq {/DeviceCMYK setcolorspace} if
+ dup 3 eq {/DeviceRGB setcolorspace} if
+ 1 eq {/DeviceGray setcolorspace} if
+ /ImageDict 7 dict def ImageDict begin
+ {/MultipleDataSources true def
+ ncomp array astore} if % store multi source in array
+ /DataSource exch def
+ /ImageMatrix exch def
+ /BitsPerComponent exch def
+ /Height exch def
+ /Width exch def
+ /Decode [ncomp {0 1} repeat] def
+ /ImageType 1 def
+ end
+} def
+%
+/data_str 65532 string def % very long
+/data_str_ 8192 string def
+/merge_multi4 {
+ ImageDict /DataSource get aload pop
+ dup type cvlit /filetype eq {
+ /fdatsrck exch def
+ /fdatsrcy exch def
+ /fdatsrcm exch def
+ /fdatsrcc exch def
+ /datasrck {fdatsrck data_str_ readstring pop} def
+ /datasrcy {fdatsrcy data_str_ readstring pop} def
+ /datasrcm {fdatsrcm data_str_ readstring pop} def
+ /datasrcc {fdatsrcc data_str_ readstring pop} def
+ } {
+ /datasrck exch def
+ /datasrcy exch def
+ /datasrcm exch def
+ /datasrcc exch def
+ } ifelse
+ ImageDict /DataSource {
+ data_str
+ 0 datasrcc {3 copy put pop 4 add} forall pop
+ 1 datasrcm {3 copy put pop 4 add} forall pop
+ 2 datasrcy {3 copy put pop 4 add} forall pop
+ 3 datasrck {3 copy put pop 4 add} forall
+ 3 sub 0 exch getinterval
+ } put
+} def
+%
+/merge_multi3 {
+ ImageDict /DataSource get aload pop
+ dup type cvlit /filetype eq {
+ /fdatsrcb exch def
+ /fdatsrcg exch def
+ /fdatsrcr exch def
+ /datasrcb {fdatsrcb data_str_ readstring pop} def
+ /datasrcg {fdatsrcg data_str_ readstring pop} def
+ /datasrcr {fdatsrcr data_str_ readstring pop} def
+ } {
+ /datasrcb exch def
+ /datasrcg exch def
+ /datasrcr exch def
+ } ifelse
+ ImageDict /DataSource {
+ data_str
+ 0 datasrcr {3 copy put pop 3 add} forall pop
+ 1 datasrcg {3 copy put pop 3 add} forall pop
+ 2 datasrcb {3 copy put pop 3 add} forall
+ 2 sub 0 exch getinterval
+ } put
+} def
+%
+/i_Str 3 string def
+/O_Str 4 string def
+/UCR {0.5 mul} def
+/BG {0.7 mul} def
+/min {1 index 1 index le {pop} {exch pop} ifelse} def
+/max {1 index 1 index ge {pop} {exch pop} ifelse} def
+%
+/RGBtoCMYK {% RGB pixel is on the stack
+ % RGB --> CMYK conversion (Red Book p. 306)
+ dup 0 get R_scale mul R_shift add /c_i exch def
+ dup 1 get G_scale mul G_shift add /m_i exch def
+ 2 get B_scale mul B_shift add /y_i exch def
+ /k_i c_i m_i y_i min min def
+ O_Str
+ dup 0 255 0 c_i k_i UCR sub cvi max min put
+ dup 1 255 0 m_i k_i UCR sub cvi max min put
+ dup 2 255 0 y_i k_i UCR sub cvi max min put
+ dup 3 255 0 k_i BG cvi max min put
+} def
+%
+/RGBtoCMYKfilter {
+ ImageDict /Decode get aload pop % use Decode for RGB -> CMYK conversion
+ 2 copy sub /B_scale exch def pop 255 mul 255 exch sub /B_shift exch def
+ 2 copy sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def
+ 2 copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+ /rtc_file ImageDict /DataSource get def
+ ImageDict /DataSource {rtc_file i_Str readstring {RGBtoCMYK} if}
+ 0 () /SubFileDecode filter put
+ /DeviceCMYK setcolorspace /ncomp 4 def
+ ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def
+%
+/sep_str 8192 string def
+/SEP_CMYK {
+ 0
+ hax_sep 4 3 index length 1 sub {
+ 2 index exch get
+ 3 copy put pop
+ 1 add
+ } for
+ dup 0 ne {0 exch getinterval}{pop pop ()} ifelse
+} def
+%
+/SEPfilters {
+ ncomp 4 eq {
+ hax_sep 3 le {
+ /sepproc /SEP_CMYK load def
+ ImageDict begin /Decode [
+ Decode hax_sep 2 mul 1 add get
+ Decode hax_sep 2 mul get
+ ] def end
+ } {
+ /sepproc {dup length 4 idiv 0 exch getinterval} def
+ } ifelse
+ /sep_file ImageDict /DataSource get def
+ ImageDict /DataSource {sep_file sep_str readstring pop sepproc} 0 ()
+ /SubFileDecode filter put
+ /DeviceGray setcolorspace
+ } {% ncomp 1 eq
+ hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if
+ } ifelse
+ hax_sep 4 eq {ImageDict /Decode [ 1 1 ] put} if
+ hax_sep 5 eq {ImageDict /Decode [ 0 0 ] put} if
+} def
+%
+/change_str 12288 string def % must be a multiplicity of 3 and 4
+/CHANGEfilter {
+ /change_file ImageDict /DataSource get def
+ ImageDict /DataSource {
+ change_file change_str readstring pop
+ 0 ncomp 2 index length ncomp sub {
+ 1 index exch 2 copy ncomp
+ getinterval changebits putinterval
+ } for
+ } 0 () /SubFileDecode filter put
+} def
+%
+/hax_image_ {
+ ImageDict /MultipleDataSources known {
+ ImageDict /MultipleDataSources get {
+ ImageDict /MultipleDataSources false put
+ ImageDict /DataSource get length
+ dup 4 eq {merge_multi4} if
+ dup 3 eq {merge_multi3} if
+ 1 eq {ImageDict begin /DataSource DataSource aload pop def end} if
+ } if
+ } if
+ ImageDict begin
+ /DataSource dup load Width BitsPerComponent mul 7 add 8 idiv
+ Height ncomp mul mul () /SubFileDecode filter def
+ end
+ to_change_bitmap {CHANGEfilter} if
+ ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if
+ ncomp 3 ne to_sep_bitmap and {SEPfilters} if
+ ImageDict ori_image
+} def
+%
+/zero_data_str 65532 string def % length of the data_str
+/hax_imagemask {
+ if_delblack {
+ dup type cvlit /dicttype eq {
+ /ImageDict exch def
+ } {
+ /ImageDict 7 dict def ImageDict begin
+ /DataSource exch def
+ /ImageMatrix exch def
+ /Decode exch {[1 0]} {[0 1]} ifelse def
+ /Height exch def
+ /Width exch def
+ /BitsPerComponent 1 def
+ /ImageType 1 def
+ end
+ } ifelse
+ ImageDict begin
+ /DataSource load Width 7 add 8 idiv Height mul
+ () /SubFileDecode filter
+ end /mask_file exch def
+ ImageDict /DataSource {
+ zero_data_str 0 mask_file data_str readstring pop length getinterval
+ } 0 () /SubFileDecode filter put
+ ImageDict /Decode [1 0] put
+ ImageDict ori_imagemask
+ } {ori_imagemask} ifelse
+} def
+%
+/truebp {0 matrix defaultmatrix matrix currentmatrix
+ matrix invertmatrix matrix concatmatrix dtransform
+ dup mul exch dup mul add sqrt} def
+/truein {72 mul truebp} def
+/truept {72.27 div truein} def
+/truesp {65536 div truept} def
+/truedd {1238 mul 1157 div truept} def
+/truecc {12 mul truedd} def
+/truemm {25.4 div truein} def
+/truecm {10 mul truemm} def
+%
+/epsilon 0.005 def
+/if_delblack false def
+/to_change_bitmap false def
+/to_convert_bitmap false def
+/to_sep_bitmap false def
+%
+currentcmykcolor setcmykcolor
+%
+end % userdict
+}}% \special \CMYKinit
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\PSbegingroup {\begingroup \special{ps: save }}
+\def\PSendgroup {\special{ps: restore }\endgroup}
+%
+\def\forcolor #1{\def\thecolor{#1}}
+\def\checkcolor {\thecolor\space count 4 lt {(Not CMYK ) print} if
+% k_ eq exch y_ eq and exch m_ eq and exch c_ eq and
+% comparison of colours with a predefined accurracy (epsilon):
+ k_ sub abs epsilon le exch
+ y_ sub abs epsilon le and exch
+ m_ sub abs epsilon le and exch
+ c_ sub abs epsilon le and }
+%
+\def\changefill #1{%
+ \edef\changefills{\changefills \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\changestroke #1{%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\changecolor #1{%
+ \edef\changecolors{\changecolors \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addfill #1{%
+ \edef\addfills{\addfills \checkcolor {addfill} if }%
+ \edef\changefills{\changefills \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\adddownstroke #1{%
+ \edef\addstrokes{\addstrokes \checkcolor {adddownstroke} if }%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addstroke #1{%
+ \edef\addstrokes{\addstrokes \checkcolor {addstroke} if }%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addcolor #1{\addstroke{#1}\addfill{#1}}
+\def\delfill {%
+ \edef\delfills{\delfills \checkcolor {delfill} if }}
+\def\delstroke {%
+ \edef\delstrokes{\delstrokes \checkcolor {delstroke} if }}
+\def\delcolor {%
+ \edef\delcolors{\delcolors \checkcolor {delfill delstroke} if }}
+\def\strokehook #1{%
+ \edef\strokehooks{\strokehooks \checkcolor {#1} if }}
+\def\fillhook #1{%
+ \edef\fillhooks{\fillhooks \checkcolor {#1} if }}
+\def\strokeup {%
+ \edef\changestrokes{\changestrokes \checkcolor {upstroke} if }}
+\def\fillup {%
+ \edef\changestrokes{\changestrokes \checkcolor {upfill} if }}
+%
+\def\forbitmap #1{\def\thebitcolor{<#1>}}
+\def\checkbitcolor {dup \thebitcolor\space eq }
+%
+\def\changebitmap #1{%
+ \edef\changebits{\changebits \checkbitcolor {pop <#1>} if }}
+%
+\def\setCMYKchange{%
+ \edef\changestrokes{}%
+ \edef\changefills{}%
+ \edef\changecolors{}%
+ \edef\addstrokes{}%
+ \edef\addfills{}%
+ \edef\delstrokes{}%
+ \edef\delfills{}%
+ \edef\delcolors{}%
+ \edef\strokehooks{}%
+ \edef\fillhooks{}%
+ \edef\changebits{}%
+}
+%
+\def\fillinitials{%
+ /to_fill true def
+ /to_stroke false def
+ /to_upstroke false def
+}
+\def\strokeinitials{%
+ /to_fill false def
+ /to_stroke true def
+ /to_upstroke true def
+}
+%
+\def\useCMYKchange{%
+ \special{ps:
+ userdict begin
+ /addfill {/to_fill true def} def
+ /delfill {/to_fill false def} def
+ /upfill {/to_upstroke false def} def
+ /addstroke {/to_stroke true def upstroke} def
+ /adddownstroke {/to_stroke true def upfill} def
+ /delstroke {/to_stroke false def} def
+ /upstroke {/to_upstroke true def} def
+ /current_point {{currentpoint} stopped {0 0} if} def
+ %
+ /do_stroke {
+ to_stroke {gsave \changestrokes \strokehooks my_stroke grestore} if
+ } def
+ %
+ /eofill {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_eofill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /fill {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_fill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /stroke {
+ userdict begin
+ \strokeinitials \delstrokes \delcolors \addfills
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_eofill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /show {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ to_upstroke {} {dup false gsave charpath do_stroke grestore} ifelse
+ to_fill {dup gsave my_show grestore} {} ifelse
+ to_upstroke {dup false gsave charpath do_stroke grestore} if
+ false charpath current_point newpath moveto
+ end
+ } def
+ %
+ /setcmykcolor {
+ userdict begin
+ /k_ exch def /y_ exch def /m_ exch def /c_ exch def
+ c_ m_ y_ k_ hax_setcmykcolor \changecolors
+ end
+ } def
+ %
+ currentcmykcolor setcmykcolor
+ end}%
+ \ifx\changebits\empty\else
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_change_bitmap true def
+ /changebits {\changebits} def
+ end}%
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\cyan {1 0 0 0}
+\def\magenta {0 1 0 0}
+\def\yellow {0 0 1 0}
+\def\black {0 0 0 1}
+\def\white {0 0 0 0}
+%
+\def\ScreenFrequency {150}
+\def\Cangle {15}
+\def\Mangle {75}
+\def\Yangle {0}
+\def\Kangle {45}
+%
+\def\PSscreen #1{\ifx\ScreenFrequency\empty
+ \special{ps: currentscreen exch pop #1 exch setscreen}%
+ \else
+ \special{ps:
+ /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def
+ \ScreenFrequency\space #1 {dot_spot} setscreen
+ }\fi}
+%
+\newif\ifdelblack \delblackfalse
+\newif\ifbitmapsep \bitmapseptrue
+%
+\def\sepbitmaptrue{%
+ \bitmapseptrue
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_sep_bitmap true def
+ end}}
+%
+\def\sepbitmapfalse{%
+ \bitmapsepfalse
+ \special{ps:
+ userdict begin
+ /to_sep_bitmap false def
+ end}}
+%
+\def\convertbitmaptrue{%
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_convert_bitmap true def
+ end}}
+%
+\def\convertbitmapfalse{%
+ \special{ps:
+ userdict begin
+ /to_convert_bitmap false def
+ end}}
+%
+\def\BITinit{\special{ps:
+ userdict begin
+ /image /hax_image load def
+ /colorimage /hax_colorimage load def
+ /imagemask /hax_imagemask load def
+ end}}
+%
+\def\projectCMYK #1{%
+ \edef\projectcolor{#1}%
+ \ifx\projectcolor\cyan
+ \special{ps:
+ userdict begin
+ /hax_sep 0 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Cangle
+ \else \ifx\projectcolor\magenta
+ \special{ps:
+ userdict begin
+ /hax_sep 1 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Mangle
+ \else \ifx\projectcolor\yellow
+ \special{ps:
+ userdict begin
+ /hax_sep 2 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop exch pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Yangle
+ \else \ifx\projectcolor\black
+ \special{ps:
+ userdict begin
+ /hax_sep 3 def
+ /hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Kangle
+ \fi \fi \fi \fi
+ \ifbitmapsep\sepbitmaptrue\fi
+ \special{ps: currentcmykcolor setcmykcolor}%
+}
+%
+\def\CMYKlabels #1{{#1% #1 is a font csname
+ \Cyan{CYAN}
+ \Magenta{MAGENTA}
+ \Yellow{YELLOW}
+ \Black{BLACK}}}
+%
+\ifx\notCMYKinit\undefined\CMYKinit\fi
+%
+\catcode`\/\slashcatcode
+%
+\endinput
diff --git a/macros/generic/TeX-PS/cmyk-hax/fountain.eps b/macros/generic/TeX-PS/cmyk-hax/fountain.eps
new file mode 100644
index 0000000000..f6228d76cc
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/fountain.eps
@@ -0,0 +1,302 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 132 201 728 472
+%%Creator: CorelDRAW!
+%%Title: FOUNTAIN.EPS
+%%CreationDate: Fri Apr 28 08:32:57 1995
+
+%%DocumentFonts:
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------
+% Copyright 1992 Corel Corporation. All rights reserved.
+/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def
+/ld{load def}bd/xd{exch def}bd/_ null def
+/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def
+/$n _ def/$o 0 def/$fil 0 def/$bkg false def
+/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def
+/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def
+/$ptm matrix def/$ttm matrix def/$stm matrix def
+/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def
+currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd
+/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def
+/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld
+/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd
+/@ss{exch $Scra add exch load setscreen}bd
+AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def
+/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt
+{@err1 exit}{currentflat 2 add setflat}ifelse}bd
+/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse
+}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd
+/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit
+}ifelse}bind loop setflat}bd/@eoclip/eoclip ld
+/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse
+}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if
+/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse
+2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd
+/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd
+/setcmykcolor where{pop}{/setcmykcolor{4 1 roll
+3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat
+setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd
+/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd
+/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd
+/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{
+0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat
+setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd
+/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{
+exch aload pop pop 4{4 index mul 4 1 roll}repeat
+5 -1 roll pop setcmykcolor}{exch aload pop
+CurrentInkName eq{4 index}{0}ifelse 6 1 roll
+5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{
+/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop}
+repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup
+6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint
+dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor
+exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{
+currentgray 1 eq currentoverprint and not}ifelse}bd
+/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def
+/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd
+/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd
+/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def
+2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if
+dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if
+$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl
+0 $phei rl clip @np $pn cvlit load aload pop
+7 -1 roll 5 index sub 7 -1 roll 3 index sub translate
+/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse
+@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{
+dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub
+0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch
+@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add
+exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop
+0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for
+pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat
+@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd
+Bbllx Bblly $pm itransform/$tlly xd/$tllx xd
+/$wid $turx $tllx sub def/$hei $tury $tlly sub def
+@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{
+$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask
+/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{
+$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd
+exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def
+/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if
+@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{
+/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def
+/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def
+/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def
+/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def
+true}{$frt $frc $frm $fry $frk $frn $o @scc
+dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse
+$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{
+/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def
+/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if
+}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd
+2 mul sub $fst div/$wid xd 2 index sub/$hei xd
+pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill
+$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll
+$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll
+ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd
+2 div 1 index 4 index sub dup $roy mul/$roh xd
+2 div 2 copy dup mul exch dup mul add sqrt
+$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd
+4 index add $roh add exch 5 index add $row add
+exch translate pop pop pop pop currentflat dup 5 mul setflat
+$c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale
+$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill
+/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop
+setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip
+newpath Bbllx Bblly moveto Bbllx Bbury lineto
+Bburx Bbury lineto Bburx Bblly lineto $fan rotate
+pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if
+@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d
+$t $c $m $y $k $n $o @scc pop $ctm setmatrix
+72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop
+$Psn load exec}{1 setgray eofill}ifelse @rs
+@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def
+}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd
+/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd
+/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd
+/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd
+/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd
+/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd
+/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld
+/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd
+/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd
+/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld
+/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld
+/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc
+{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix
+$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{
+matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse
+$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp
+S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd
+/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd
+/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd
+/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore
+exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd
+/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe
+16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] def/@cc{currentfile $dat readhexstring pop}bd
+/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def
+1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd
+/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore
+/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd
+/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def
+}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd
+/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd
+/@ii{concat 3 index 3 index m 3 index 1 index l
+2 copy l 1 index 3 index l 3 index 3 index l
+clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def
+pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def
+}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if
+@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def
+$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate
+$urx $llx sub $ury $lly sub scale $wid $hei abs
+$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0
+$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse
+$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse
+@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def
+1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll
+@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def
+$llx $lly translate $urx $llx sub $ury $lly sub scale
+$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]
+/@cc load false $ncl colorimage @gr $ctm setmatrix}bd
+/z{exch findfont exch scalefont setfont}bd
+/ZB{9 dict dup begin 4 1 roll/FontType 3 def
+/FontMatrix xd/FontBBox xd/Encoding 256 array def
+0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def
+CharStrings/.notdef{}put/Metrics 256 dict def
+Metrics/.notdef 3 -1 roll put/BuildChar{exch
+dup/$char exch/Encoding get 3 index get def
+dup/Metrics get $char get aload pop setcachedevice
+begin Encoding exch get CharStrings exch get
+end exec}def end definefont pop}bd/ZBAddChar{findfont begin
+dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put
+CharStrings 3 1 roll put Metrics 3 1 roll put
+end}bd/Z{findfont dup maxlength 2 add dict exch
+dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall
+pop dup dup/Encoding get 256 array copy dup/$fe xd
+/Encoding exch put dup/Fontname 3 index put
+3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{
+$fe exch 2 index exch put 1 add}ifelse}forall
+pop}if dup 256 dict dup/$met xd/Metrics exch put
+dup/FontMatrix get 0 get 1000 mul 1 exch div
+3 index length 256 eq{0 1 255{dup $fe exch get
+dup/.notdef eq{pop pop}{5 index 3 -1 roll get
+2 index mul $met 3 1 roll put}ifelse}for}if
+pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
+{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse
+}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd
+/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if
+$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if
+setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup
+@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
+/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd
+/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd
+/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix
+/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def
+3 1 roll moveto $ttm concat t $stm setmatrix}def
+/@n{/$ttm exch matrix rotate def}bd/@s{}bd
+/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd
+matrix scale $ptm dup concatmatrix/$ptm xd
+1 eq{$ptm exch dup concatmatrix/$ptm xd}if
+1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd
+/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd
+/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd
+/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def
+/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def
+/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{
+/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{
+/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq
+{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{
+CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq
+{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def
+}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep
+/@whi{@gs -72000 dup moveto -72000 72000 lineto
+72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill
+@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer
+@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth
+2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto
+2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto
+moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def
+/rightbracket{(\051)}def
+
+%%EndProlog
+%%BeginSetup
+11.4737 setmiterlimit
+1.00 setflat
+/$fst 128 def
+
+%%EndSetup
+@sv
+/$ctm matrix currentmatrix def
+@sv
+%%Note: Object
+134.86 204.55 724.61 468.58 @E
+0 J 1 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+[1.00000 0.00000 0.00000 1.00000 0 0] 1 5.69 5.69 -90.00 @w
+ 0 O 0 @g
+0.10 0.20 0.90 0.00 0.90 0.20 0.10 0.00 0.00 0 0.00 0 0 @k
+%%CURV 17
+266.83 468.58 m
+592.63 468.58 l
+665.28 468.58 724.61 409.25 724.61 336.60 c
+724.61 336.53 l
+724.61 263.88 665.28 204.55 592.63 204.55 c
+266.83 204.55 l
+194.18 204.55 134.86 263.88 134.86 336.53 c
+134.86 336.60 l
+134.86 409.25 194.18 468.58 266.83 468.58 c
+@c
+B
+@rs
+@rs
+%%Trailer
+ end
diff --git a/macros/generic/TeX-PS/cmyk-hax/gdansk.eps b/macros/generic/TeX-PS/cmyk-hax/gdansk.eps
new file mode 100644
index 0000000000..22c79093b5
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/gdansk.eps
@@ -0,0 +1,112 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: GhostScript
+%%BoundingBox: 169.99 255.1 453.46 624.46
+%%EndComments
+%%BeginProlog
+/GSexport 100 dict def GSexport begin
+/m {moveto} def
+/C {curveto} def
+/L {lineto} def
+/@c {closepath} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/f {eofill} def
+/s {stroke} def
+/setcmykcolor where {}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+gsave
+%%
+0.0 1.0 1.0 0.0 k
+170.14 624.31 m
+169.99 371.52 L
+169.99 295.78 255.17 289.3 311.9 255.1 C
+368.5 289.15 453.46 294.62 453.46 371.52 C
+453.31 624.31 L
+374.47 624.31 249.05 624.46 170.14 624.31 C
+@c f
+0.0 0.0 0.0 0.0 k
+321.26 467.28 m
+321.26 479.3 324.43 490.9 330.84 500.9 C
+292.61 500.9 L
+299.02 490.9 302.18 479.3 302.18 467.28 C
+302.18 467.28 L
+290.38 467.28 278.78 470.66 268.63 476.86 C
+268.63 438.62 L
+278.78 444.82 290.38 448.2 302.18 448.2 C
+302.18 448.2 L
+302.18 436.39 299.02 424.8 292.61 414.65 C
+330.84 414.65 L
+324.43 424.8 321.26 436.39 321.26 448.2 C
+321.26 448.2 L
+333.07 448.2 344.74 444.82 354.89 438.62 C
+354.89 476.86 L
+344.74 470.66 333.07 467.28 321.26 467.28 C
+@c f
+0.0 0.0 0.0 0.0 k
+321.26 358.56 m
+321.26 370.3 324.43 381.96 330.84 392.11 C
+292.61 392.11 L
+299.02 381.96 302.18 370.3 302.18 358.56 C
+302.18 358.56 L
+290.38 358.56 278.78 361.87 268.63 368.06 C
+268.63 329.62 L
+278.78 336.02 290.38 339.41 302.18 339.41 C
+302.18 339.41 L
+302.18 327.38 299.02 315.72 292.61 305.64 C
+330.84 305.64 L
+324.43 315.72 321.26 327.38 321.26 339.41 C
+321.26 339.41 L
+333.07 339.41 344.74 336.02 354.89 329.62 C
+354.89 368.06 L
+344.74 361.87 333.07 358.56 321.26 358.56 C
+@c f
+0.0 0.0 1.0 0.0 k
+311.83 524.66 m
+336.67 524.66 358.92 517.97 374.11 511.92 C
+407.16 574.42 L
+394.06 577.3 392.11 567.65 391.54 561.67 C
+388.73 564.34 379.58 564.05 376.78 558.79 C
+378.14 554.18 379.73 550.58 386.06 549.14 C
+377.42 542.45 362.3 543.1 356.54 556.34 C
+360.65 554.4 362.09 554.76 364.82 557.42 C
+363.53 560.66 362.3 561.89 358.2 562.1 C
+363.31 564.77 361.51 567.43 358.56 570.1 C
+354.82 569.02 351.94 567.43 354.24 562.97 C
+350.28 565.06 349.2 564.34 345.96 562.1 C
+347.11 559.01 347.47 557.64 352.66 557.28 C
+344.23 549.86 314.21 547.63 316.73 561.67 C
+322.78 556.13 331.34 558.5 337.1 565.27 C
+333.0 572.76 325.66 577.66 317.45 574.06 C
+322.56 581.9 322.56 588.46 311.76 592.56 C
+300.89 588.46 300.89 581.9 305.93 574.06 C
+297.79 577.66 290.38 572.76 286.27 565.27 C
+292.1 558.5 300.67 556.13 306.65 561.67 C
+309.24 547.63 279.22 549.86 270.72 557.28 C
+275.9 557.64 276.26 559.01 277.49 562.1 C
+274.25 564.34 273.17 565.06 269.21 562.97 C
+271.44 567.43 268.56 569.02 264.82 570.1 C
+261.94 567.43 260.14 564.77 265.18 562.1 C
+261.07 561.89 259.92 560.66 258.55 557.42 C
+261.36 554.76 262.8 554.4 266.9 556.34 C
+261.07 543.1 246.02 542.45 237.24 549.14 C
+243.72 550.58 245.16 554.18 246.6 558.79 C
+243.72 564.05 234.72 564.34 231.91 561.67 C
+231.19 567.65 229.39 577.3 216.22 574.42 C
+249.26 511.92 L
+264.46 517.97 286.78 524.66 311.83 524.66 C
+@c f
+%%
+grestore
+%%Trailer
+end
+showpage
diff --git a/macros/generic/TeX-PS/cmyk-hax/rules.tex b/macros/generic/TeX-PS/cmyk-hax/rules.tex
new file mode 100644
index 0000000000..1bd8d95bbe
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/rules.tex
@@ -0,0 +1,6 @@
+\def\RULES{\special{ps:
+ /v {/ruley exch def /rulex exch def V} def
+ /V {gsave newpath transform round exch round exch itransform
+ moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto
+ closepath fill grestore} def
+}}
diff --git a/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat b/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat
new file mode 100644
index 0000000000..a53a15eb24
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat
@@ -0,0 +1,23 @@
+:: This is a sample batch illustrating how to make color separation
+:: using CMYK-HAX.TEX. The script can be easily adapted to any platform
+:: Calls for `TEX' and `DVIPS' should be changed to respective local names:
+:: TEX calls tex with appropriate format (e.g., plain or MeX, or...)
+:: DVIPS calls dvips (or dvips32.exe)
+:: Names SAMPLE1.TEX, SAM1-C.PS, SAM1-M.PS, SAM1-Y.PS, SAM1-K.PS
+:: should be replaced appropriately by parameters of the script.
+::
+:: MAKE CYAN SEPARATION (PROJECTION):
+call tex \def\separate{\CYAN}\input sample1.tex
+call dvips sample1 -osam1-c.ps
+::
+:: MAKE MAGENTA SEPARATION (PROJECTION):
+call tex \def\separate{\MAGENTA}\input sample1.tex
+call dvips sample1 -osam1-m.ps
+::
+:: MAKE YELLOW SEPARATION (PROJECTION):
+call tex \def\separate{\YELLOW}\input sample1.tex
+call dvips sample1 -osam1-y.ps
+::
+:: MAKE BLACK SEPARATION (PROJECTION):
+call tex \def\separate{\BLACK}\input sample1.tex
+call dvips sample1 -osam1-k.ps
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample1.tex b/macros/generic/TeX-PS/cmyk-hax/sample1.tex
new file mode 100644
index 0000000000..6a208e4ecb
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample1.tex
@@ -0,0 +1,56 @@
+% E Sample TeX file demonstrating how to separate colors using CMYK-HAX
+% macros -- outline graphics + text
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow za pomoc/a
+% makr pakietu CMYK-HAX -- grafika obwiedniowa + tekst
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\newif\ifPolish
+%\Polishtrue % true for Polish text,
+\Polishfalse % else English text
+%%
+\ifx\unknown\separate\def\separate{\COLOR}\fi
+\ifx\unknown\separate\def\separate{\CYAN}\fi
+\ifx\unknown\separate\def\separate{\MAGENTA}\fi
+\ifx\unknown\separate\def\separate{\YELLOW}\fi
+\ifx\unknown\separate\def\separate{\BLACK}\fi
+
+\def\COLOR{}
+\def\CYAN{\projectCMYK\cyan}
+\def\MAGENTA{\projectCMYK\magenta}
+\def\YELLOW{\projectCMYK\yellow}
+\def\BLACK{\projectCMYK\black}
+
+\delblacktrue\separate
+
+\nopagenumbers
+\ifPolish
+\font\bf plssdc10 at 20pt \bf
+\font\rm plss8
+\prefixing
+\else
+\font\bf cmssdc10 at 20pt \bf
+\font\rm cmss8
+\fi
+
+\baselineskip 28pt
+\hsize 100mm
+
+\setbox1 \hbox{\epsfxsize\hsize \epsffile{fountain.eps}}
+
+\hbox{\rlap{\copy1}%
+\vbox to \ht1{\vss
+\textBlack
+\ifPolish
+\centerline{Pan Sobieski mia/l trzy pieski:}
+\centerline{\Red{czerwony}, \Green{zielony}, \Blue{niebieski}.}
+\else
+\centerline{All words tell the genuine true:}
+\centerline{\Red{red}, and \Green{green}, and even \Blue{blue}.}
+\fi\vss}}
+\nointerlineskip\vskip 5mm
+\centerline{\CMYKlabels\rm}
+
+\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample2.tex b/macros/generic/TeX-PS/cmyk-hax/sample2.tex
new file mode 100644
index 0000000000..d4ae6b14bb
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample2.tex
@@ -0,0 +1,74 @@
+% E Sample TeX file demonstrating how to separate by changing colors using
+% CMYK-HAX macros -- outline graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow poprzez
+% zamian/e kolor/ow za pomoc/a makr pakietu CMYK-HAX -- grafika obwiedniowa
+%
+\input epsf % DVIPS standard distribution
+\input cmyk-hax
+\special{landscape}
+
+\nopagenumbers
+\voffset -0.25in
+\hoffset -0.5in
+\vsize 180mm
+\hsize 270mm
+
+\def\RED{%
+ \setCMYKchange
+ \forcolor{0 1 1 0}\changecolor{0 0 0 1} % E change red to black
+ % P zamie/n czerwony na czarny
+ \forcolor{0 0 1 0}\changecolor{0 0 0 0} % E change yellow to white
+ % P zamie/n /z/o/lty na bia/ly
+ \addstroke{0 0 0 0} % E add the white stroke to yellow
+ % P /z/o/lty zyskuje bia/l/a obw/odk/e
+ \strokehook{2 truemm setlinewidth % E of thickness 2 truemm
+ % P grubo/sci 2 truemm
+ 0 setlinejoin % E with pointed joints
+ % P spiczaste po/l/aczenia
+ 2 setlinecap % E with lenghtened tips
+ % P wyd/lu/zone ko/nce
+ 5 setmiterlimit % E with medium miter limits
+ % P obcinane /srednio daleko
+ }%
+ \useCMYKchange}
+
+\def\YELLOW{%
+ \setCMYKchange
+ \forcolor{0 0 1 0}\changecolor{0 0 0 1} % E change yellow to black
+ % P zamie/n /z/o/lty na czarny
+ \forcolor{0 0 0 0}\delcolor % E make white invisible
+ % P uczy/n bia/ly niewidzialnym
+ \forcolor{0 1 1 0}\delcolor % E make red invisible
+ % P uczy/n czerwony niewidzialnym
+ \useCMYKchange}
+
+\def\SPEC{%
+ \setCMYKchange
+ \forcolor{0 0 1 0}\changecolor{0 0 0 0} % E change yellow to white
+ % P zamie/n /z/o/lty na bia/ly
+ \forcolor{0 0 0 0}\changecolor{0 0 0 1} % E change white to black
+ % P zamie/n bia/ly na czarny
+ \forcolor{0 1 1 0}\delcolor % E make red invisible
+ % P uczy/n czerwony niewidzialnym
+ \addstroke{0 0 0 1} % E add the black stroke to red
+ % P czerwony zyskuje czarn/a obw/odk/e
+ \strokehook{2 truemm setlinewidth % E of thickness 2 truemm
+ % P grubo/sci 2 truemm
+ 0 setlinejoin % E with pointed joints
+ % P spiczaste po/l/aczenia
+ 2 setlinecap % E with lenghten tips
+ % P wyd/lu/zone ko/nce
+ 5 setmiterlimit % E with medium miter limits
+ % P obcinane /srednio daleko
+ }%
+ \useCMYKchange}
+
+\setbox1\hbox{\epsfysize 15cm \epsffile{gdansk.eps}}
+
+\vbox{\centerline{%
+ \PSbegingroup\RED{\copy1}\PSendgroup \hskip3cm
+ \PSbegingroup\SPEC{\copy1}\PSendgroup}
+ \kern-20mm
+ \centerline{\vbox to0cm{\PSbegingroup\YELLOW{\copy1}\PSendgroup\vss}}}
+
+\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample3.tex b/macros/generic/TeX-PS/cmyk-hax/sample3.tex
new file mode 100644
index 0000000000..afd52bf871
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample3.tex
@@ -0,0 +1,31 @@
+% E Sample TeX file demonstrating how to separate using CMYK-HAX macros
+% -- bitmap graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow
+% za pomoc/a makr pakietu CMYK-HAX -- grafika bitmapowa
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\nopagenumbers
+\hoffset-1in
+\voffset-1in
+\topskip 0pt
+\hsize 210mm
+\vsize 297mm
+
+\def\epsfi{\epsfxsize 90mm \epsffile{screen.eps}}
+\def\cbox#1{\vbox{\halign{\hss##\hss\cr#1\crcr}}}
+\def\separate#1{\PSbegingroup
+ \delblacktrue
+ \projectCMYK#1%
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+
+\vglue 0pt plus 1fil
+\centerline{\separate\cyan \hskip 5mm \separate\magenta }
+\vskip 5mm
+\centerline{\separate\yellow \hskip 5mm \separate\black }
+\vglue 0pt plus 1fil
+
+\eject\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample4.tex b/macros/generic/TeX-PS/cmyk-hax/sample4.tex
new file mode 100644
index 0000000000..800af12bbe
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample4.tex
@@ -0,0 +1,48 @@
+% E Sample TeX file demonstrating how to separate using CMYK-HAX macros
+% -- bitmap graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow
+% za pomoc/a makr pakietu CMYK-HAX -- grafika bitmapowa
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\nopagenumbers
+\hoffset-1in
+\voffset-1in
+\topskip 0pt
+\hsize 210mm
+\vsize 297mm
+
+\def\epsfi{\epsfxsize 90mm \epsffile{screen.eps}}
+\def\cbox#1{\vbox{\halign{\hss##\hss\cr#1\crcr}}}
+\def\chbit{% E change some colors of bitmap
+ % P podmiana niekt/orych kolor/ow mapy bitowej
+ \forbitmap{23 19 1B 00}\changebitmap{00 00 00 60}
+ \forbitmap{DD BC C1 E4}\changebitmap{00 00 00 FF}
+ \forbitmap{2A 21 21 00}\changebitmap{00 00 00 E0}
+ \forbitmap{69 54 54 01}\changebitmap{00 00 00 90}}
+\def\separate#1{\PSbegingroup
+ \setCMYKchange
+ \forcolor\black\delcolor % E make black unvisible
+ % P uczy/n czarny niewidzialnym
+ \chbit
+ \useCMYKchange
+ \projectCMYK#1%
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+\def\sepblack{\PSbegingroup
+ \setCMYKchange
+ \chbit
+ \useCMYKchange
+ \projectCMYK\black
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+
+\vglue 0pt plus 1fil
+\centerline{\separate\cyan \hskip 5mm \separate\magenta }
+\vskip 5mm
+\centerline{\separate\yellow \hskip 5mm \sepblack }
+\vglue 0pt plus 1fil
+
+\eject\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/screen.eps b/macros/generic/TeX-PS/cmyk-hax/screen.eps
new file mode 100644
index 0000000000..7c5f73d6e2
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/screen.eps
@@ -0,0 +1,1150 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 600.0000 450.0000
+%%Creator: CEP ver. 0.7 by BOP s.c.
+%UNCEPInfo: 19 240 8000 4
+/_fltrd_file currentfile /ASCII85Decode filter /LZWDecode filter def /_read_string /readstring load def
+/width 800 def
+/height 600 def
+/glevel 8 def
+/dpi 96 def
+/istr 800 string def
+/nheight height neg def
+/dot {72.0 dpi div mul} def
+/imageturkey
+{ width height glevel [width 0 0 nheight 0 height]
+ { _fltrd_file istr _read_string pop } false 4 colorimage} def
+gsave
+0 0 translate
+width dot height dot scale
+imageturkey
+J2^Pg(F0=o#(jYL0R-P@*=[fl,#GeF4sq,'`+(NHe7(Q]O@LQn\KlVo-BcG]13lin>qMF:-;qCM^1T?m
+b\&_WeDbm>TMHt7\g7917\\7D1jW.GSP?%].TF!U5,VG]e8$pfeRH3tYZEAU]-VpHB!U'+2LAGuh/0Z+
+/loT\^?9[Ngi#,ue`-OU^gAcs]I!R_L;Mkg3.+aO*KA-M10D2d5:;c>jE!>/emgj8!,-IX4XQLiVpoI(
+>.lI3=g%g<o:%l!f4DD9mWP(Jk3:!li,EpG4sq/+a5h8d>eXi0S^6MAH<i_4=0:*@G'dN/kBFVsn9B=e
+5:;fBkOa(K?GC-^h=(,dIU>=;fBpr:IJ%lHfBs@8,7j,E!PjdJ%+QL$#Qb#,&6'MP6*OT=#Js;j/IKB,
+UbrI/#Oq4WLbK5J&]Be_9bYJX9N;hHO_e;>`Y"/@)9.f?D&^M-b]Or@&,]-#1sP?0[7?B2N?c$]9I(>U
++UA)q8^`9a-H^@fW@:IQ]X97]d.BUW6nS%agdlK;aYV.^9Z8m5do>'[9bW3936h&rkr[13biM"5e("7Y
+:D<s15gT'S#t*']9a*u4e5[GW;&"]ge&Vu5'eIOkXYidNEnrfNe!1??r4,Z=O]0dF98Or\PncS\<Rgt)0ME3=<En&ic#m=DQ0j!,fG4pM
+@G$ktNFUWNKh1uu,+tk7fl)S6BA+pP.afITNO;kmQ$p>K8li!P>?Nm:bkBSR"hSn]o]9ctbUB%.H/=mi
+m<d_,c1QMBQgOa$i"ujLA_VEGf7MRSQii%MQp)OC@Mhh1L#R:i@a.f8^)qN.Qpq[G<G9kZJn/`q`hZ,8
+,DV@@q.2.C2(;!^QoV]u;4D0C1W>kfdIU^ej4,&JKO+*Oaan.E:6h[?RVn[ol5G\ZWTocj)i3]=`RffP
+RJ&_%lT"%;MX/M-YHq_Bf%$tkG7MdUkkT[MCi/WAGuF(4B("aKGd_J'mlARR^#Z[E]ta%sl3R`4.7T/=
+<k0!Hamtt*/^*`*cS`u=SF8U?lMG3_Yf^/jWNUE5#?=IieqWe&nOFs*[e4n.#m>9ONt91sh<&M1@l^<`
+^j'.D!T!OR(N6j/r_(.?nK)l$`Q<P3*KB9lMCHmKT'^L(Hd5sWi;A'8c1ClU:Y#-YSI]A\j*bk%gAU]*jk&N*%b(2rTC$1[ft4eF/'5:6Vh3^\S-XU?8_aq<%a:SN$8aG&
+jZEd-"C>kbJ.O#i_+*YkTSn8Lcsd3qVi^W2,J&2Y[<7dhguK9(jaE69)B[UBgn<EaL@+7,6WeaIiWMQ';%2d*2uNVRoCljZ+sXM(-J)RF
+Y_$f]-9oSR%Um8hLN"9N_0;:R=\L/nO\M9-#dji2,SGWIWW^5KUDkE\.?/:e36%9i$0(;pMp]f_\AgF)
+'oUb'E=tT/=Gm\u/6I8GH4J#Q%3sqeOciU:c9u?J'jW@dClp=G.HRl`?"BCGnO<Ab,rhFFN/EV"She<?
+/l:T(?\M@o=i'=Z/7j)p3"HX*6chn:ji`79;/t6PM/`XV*.!oki`jITWnQ=A&WfmO8kiHj"^iQ>J5[?t
+baEl3VX,F`1Q"&VLbg169Pu4U1muOtf!:8<M4;s<E_UiH4m0cZBl[BUQDP6,S"&l80j9*'6O<eVm(eQ2
+.YQ!uh)8d(ZD'"7r(IEB*bGh'UGF@Vd&?[mV\q=e&:Rs*C-=t^4E?jsEg=YSr;WSiCRT?3I8a;?3[N#t
+,a94=:)MLUjCH6(YbI6.g5>uED*Fm3;Phi7KeM^;,_T/YFOW@L<+T?7VU]Re<SG*hVrTEY9nn7g-Q?1DX_":aRL%9ia$V-EY+:fC<`Ak\;5X:&Y*-5O7uBMbkg^NH1eIaF
+HN@P*]mlf@'#iAq`FJ6K&Z,&):a+J!dAEaIZV_%u;sNOP.a<.;<8u9Sg9G.i""Tr8Y0>CqR;;*<#.2oeg.rWJB'mRJ[oVl6<YcoFlQi3I
+dW46kkMpN`WIplV3G5qXST(`[c+4<YL<b,Z2QDGqV"Be>bA11'/TogV<jpRZ$:eWF/Z5VWNk3^Zf46F4
+)nZg/ak#IZ$e"r-]U&-f4kiOjX6o8h=/qe@Bj@dBSd)eab0O2V&Us4u"1^;WW8O0^L$3[[_`.<"@GF#$
+cNV%)<6!'+lIC`26h\&-.YH=,.jc=G%$nEFkMo/$.\?T]^::l1dl[qm1'<iWps/ru9J'q`2A!;7-OF8'
+mmJMan$P/K#2=I#PHq>m_\kZ\j;bk"o*/Wm'F,[Ie\?t2L1X@dT$it+Q^Y6R[`7!3_cn)UNY3nUa*GMf
+=a.9F1DYOJGn+lOgp*-H%TCPR,73S9$)2L;W7!\)6tn5'V)2M=aa,m3C#(qMo)9iY1]J3F9N.@#?DZ&(
+.lZa@q/L<g)UoGZTPB5!O0f+tf2[G$f;X%BZn4ktqZ`0s4:@J?7SMK4^F8?;NLOR_iMUp8m:G*t[J%VnOrB6_<h33'ocC'VQod69m9cp#QEeMuDf%jAde7m>Ibm$HH3>8O
+TC\ZAhc/2tn%C<f\-E&m<p+@<I7\OW*b=3`Mf7u54"7W,$X<H0Idf9Y68uXshHXuFmsZe+\HD$9r.gF**_jcP7"sR2UP#gH'=^#^khLBr
+[W)d'b:AV<fSV[[W;_4kH3ZRr8kRiYSrF;)D^jp6+/X/:S]0=UdH01[WHDFC_E+K^DLG`jFj@>FHG<gs
+HEQ@IDK3qUG<3Bas.T/3M;,Xt61+Wo[<2E8h>>6<mp5Cr*qBop]E_m74bJF_5/lKn7p>;.e&HRg)r1@8
+On'Ph\G7d.jZJ$Zo3Q(TH#Ge,4SPQA*fnSB02(Ols/5NrVq-04>O"@qZ1]6beb_"8m6,s.pI8'#GMdi;
+rWg:7?Ou.D?]As-T/F?4+6It.Sb)i9dJ@3Gl7?;+\S4Raqd4:0IG_a4rs.N\:#cY0Ws;-f-BQknn"mYO
+m([8TnXFjsmIC,[rA;F0ru[=$J)C2(n,WM6kka<$pSbrk:.iha2W#a;!@F!/:YsdNnmq4_?Z7.Acd:8t
+"Tr^("0aojn3HedTIu<7A[!Z;0Jl$k0*Nq`F"gY1n4mV8@UB[Qm]=G4O@'7,FU)l2#Hr[YO@ZVF1BERWnSiIHYP-')JD%')fFUOWXen9YPlY``]eH,dc,e#2CtS..!-"+C
+9n`bR*<pJ2%'[tbnBh[r5mRrB"AhcAD)D\raU=li$4u4MD%?\Eo_hV[hsgD(OJ`RbmaI/N#d++<cmD$(bn&2>&MU`B:t615,nb2H&uho@
+KS]t-XUB+\$]j"*0^RH>3tuY5%WNUVCa-t4rtJ='&9.4UD(ubZN]b]V$H_HCYo_Tg/JiDP(U8B)n6Eqp
+(9sX)j7,\B,RG6jq[q5:%hPcZD&3,g^D$-%((kU!Z!.s*"VC1E5&li+c$^>sE>T;0*3ma.n^(U)0J%09
+(pU[jOg7D1^D@KO&<WY"Z,6rc6OWFH*g,J(nc'NTL.%0e&^g1ad<-Hb'd7T8+gN(WdFS7N1ji0X)Y*nJ
+E)e#8[2IC))\OkLni/j3$Ofor,Vh;"d9Rhk]cWD3,dL8eEZZV`AL;G3-DTND,-`/mLD,h.(=H1\c&0+>
+_'hotfo^2!bm`;Nm3H^N,Hc5=nY7Cn?QN+A.57MBP+sI(D(BY;/$ci=j/"+)[3nb4,-o"30r6GleLbgp
+/[B"?:uNU0`qopm>4U,,"Ur/EUcYmN/^jSNo)UO!eLgp&/<1#fdfa^^q_9lE0s_lTn%CE0;(bcj1:&Pfo.`$W2%9(%kc`;gF$VW=75T'W1p;`lWF63RG4s7'27$FCmr:6!
+=#MjK2KN^mdq^lUD`1O:2m[cgo5cl)G;qC83-1'<du-4"O#U('3O>,6o923Jj!W8#q_Lr-o<CA5[6&H>cr3diE8<U^`B84`4L<9plT#e[
+kqhqY4gWs-oAMkhjBn+c)NYh#F7DINofmNn5I(SY:^[P-V)d#"5dQeBe-SD4'gXYo5]e#4'H]V_,=/[[
+5nj2`oIs?flFZN2(2Rb6oJ8ll6u#[a+)Z3fFAYB3,t1c^7<Dg(ZscB[?Ue")7?\N=1][k<XM.(m7'oHS
+oRL:JHooLZ53(6cFG!.?ogmM^-M2?gZo^kOD+\n_8sF*`['<6q[76Ck9%:IG1qu\*]f@kWR:Le=Pa+ro
+]h&=:9oY>Bd5+:-Y1tYVBN.8l<:Na<lV.JcM@eu6<;fLj-OKFc9GIq/<=Me_&Q*Yf;7-p3eJ(c$"?_o-
+$oF]Y'^4oF2,2Tn;me`H/n%MQr65^\MQUS^M;_AJ93#OZ;jBRIjc`]^O\d:c<g7dQYid-DY19p8c8B06
+'nKIBKiBodIJ$028dOC`DQkKu=1)12'nog<T&k*bPV04EQ(Cp>:KQo':(c/E8r$TX2-Z?B>d^>2'p+V:Y&tJbZF.-\Pil>TDd8RP?DN]h'oIi*Q!Z)m?1dPGFXnjr_cd@f
+>ZH2JQ0`4LTiEd#0ag3S-u!$'`E;g/=Z+dCb>hPBdcNFO@MV'qp*F$1!Fh?'\FqQj:Amdb^J7eHA6'4Jp-)k^R3=>/_Nm8q-0o)!O^sb`
+ABq)SFu%/T9&0,Y!#$^8G)i;ZqW<u)-5).T:Y039k8;T>BegW?<\%gK2I\QB:\+<m;la;Kj(iMZBXVk^
+Q=jotQYBJ>6^H%O%M`HRK4OY2TLc%feb;4kbi[L<A!R]8d$nb_Z!m?t]5_BfP'\D$%_K1RE06hG<j>R]
+[;WLaD_'jL'tnE@05+!.L!4%=(>f$'WlVEL#4Q&!f0YY.f[^,F
+jgApD$\7!_kq\ED`0Q1%(B4VV#qC-(2-+R9lmj9a*Hu\_C,M=5EDJ,%,?aafXPsOcf.@hldpOkqW-*B,
+p:Tk[W/p[oFYneI.e@hCAS<qKHcE*n#m#3MIs#QsXTmBmX3XqX3k3;*Ha%Q\pD&(!OUMdU&!j1)=8uZ0
+P@h<0/'_4;f.2#S6Z0b2=P'<UQSE^4F'KJ;MW3-g(Kl.+2'd23C/RiVfJR;#fm1G+J_1]cU;qE&'ms%b
+H2$JiiY@(Tdqd>WIhpL@P)XG,kA>7.ig6cs6`UbX"XZ1UIE+d%Wl-</kC%M-4kHY_(4gCk9^qKSH[%?"
+1DP"PSK&E8S+h2d'M3t&??T']K_KD=:1&^@`GYG8/9k]j3'dZaKjZh[+BQC;QO?kKB-+SCNnAV([]t!7hd9t[IYPgmp<?a+eON`nK"0-cGehC&[<";hFOO0O-RX1WDi#7O>?MPE(0b.UWpl%H
+OLIL\=?2Oh58igu!>5?s1-Y_@@kG5K@(=C:QK++oc]e0#%J]T]3*UHl3n5)]P6Fr(:p2Sd%>3>m?hnH^
+3B;,7-%u!b:j;#gCt4oV\X"'/+4I--p4JX`B:4#]HFDER[fq6nbF.d.RQ5M$H$P.+OSlH9^,F$#8?84_RpPmYMmWgG
+G8HloVi4c`RX&mj[X3Qd%ujXLSbO(o;(6HE=bmrXR90!CfXAs`\K9E!Qa)+4NR+0L'%K"AEqK*tR=UL2
+KqB6>O1GLko?3p>AWW?NN=O!V\V$U/+cm)HMs[L/=ikNJ-QX/OGdi#\QD]5$LEYA_H5Oo([XE;oX&>8"
+WHU:Iq?qtF@B4MCWOZqiqK8-N96s7YQJ/[CHF^.5+eY9,XBHEkHD.$9V52LQWj9ZsRTHRM;5+uZYHuMW
+D\JA)",`Jo1ckrHq+%R\#HYCOXuJ#.gAS<6R]P6``EJn8qVA<#ae\`^Od`H>g@^]aq6F3r4'/ho>8+7\
+;.TQ(Ya\nefV<;PZ)tV[[!PHSnGqi9;n%*T[Is:%]7B60A%+KrZe=_CqiOc<P>Rg9;B)%7>G8V)V7G?[\\"t:2r]fY6[Kbl]<hJZRtJ2^>I=9U]N]Zo]+q>b.Ccf&H<Z0:gYok#BnuO>]"=`O
+gS_X[o=k+p^Dm-d]E(<?S\:Hg^"_ec>S4duc+We*Tpuk6m[M%ZVln^fZhKNt*&5>W;8QNTV;*rGm/t7q
+3Kfj"Qo]6**)X[#?c6">Z$]QjmKLR^bDGet_HHQO*-'"W!Pn!n`;Fbum5r<kWPFg$V-JGi*0E@2DH-OfY8ibJmBOd;
+A]U2q\G2Q9*3lA'4C#OqaP=,Fo=`2/O2@(gakRo\*76QIQ_0eOa1TaC4Q*91]0tC8]sr(+>iX-me]W)F
+cPOL9r:SDd\'Aukba,BRekpNaj3V'L@QaI'*<!de+jmtOI9d.MSIK;G%F(a:Z+D\HRl%HtXjXXgo*iUQ
+o!QPe'=M0'e=Bl.4ZTfhWRQ>TeSjp)@ujUejc,]<e3.0QI;rJm_p*U0\=IJFS<);#P_\'JC](0_SF>#T
+NRQWrZJ3jTE#DqV`pqlO&R?KpXMM+[&i=L>gmuGA:CZ+6bZXhndiG:5>A`-.j>h,+156MASKl't-,dI0
+cio!SS&;oW4fiAcYesC8gU9]0eY`<-5"Ad5@F,h.6fL9Wi]mP(ShK*[1#m^?j1Z#5>u058MhYP/@X]-J?+&M%S_3nW`Q8R2X?"SYC6Yk+hP(Q'6(e3#!TtMHiuWL+4t8BQJ*5[0kC/:5*U^DM
+o<,d!hjc:[dcu=(r&45)f1E1(frR<mXl6c7l(-h7]uAfSdG6t5MV6ojr_r0t`T:(Rl$fsj#`6poE$GD_
+)aH4^^+o&in*aTQj1k]aRFM(>l0c>Kn"0.?SiAPk%H?7?n/<je?0g\QL[X+Hke@ephKAC<KC^0F]UW'jh2C0</(#B#
+=%l1]h_4XdrUjMUF?[/HpOTc%'C>\#q6P=`jt67tJbOY:o)D?SAng>?cq9p`!'X9TT$?Xa%D;[9q&b@0
+hG(/;5NSF8l4)RbXnX&H&+9EN*T/[^huX*j!!8eor*RSChnf6JGO^#<s.U+q^CfqliVT8/n=SD4J*l`r
+Lj`VTkeASi!"]7+HiS`6@.7]/!-S>[J-)t=J-$MrJjH.#R+(;n!ffO8X2YO/dSq\]T[K6-Y$!?C9BHm*
+Peod4QVC_K3RmJB/=]Gq:.`D7K1(jLW)Qq0!c9N]e#@EBPtn;YX&PtuTa6;P-'QV!0_gT=aU#2l/Cp1G
+4q1\u=+E4;AR=VD]3XkAS(+V(8AA,@F;o0$#B7RPXuMA&T,3@(@^6Vo*Z$"$\_coqSCVU=S^1:`!+7;a=/+,8[+\e,X%t1ol8<ntC`?`afZJ71rRUF_]rYU#df%JsM8eLpkBB%,0.Y8eoC:WU
+L#\`P`(IOeNQ2.+guS461u?iF2h.UN]N`-.-dV2R:4/ZUQd5CmYlGg'PB[?$q>J%rlh(0#E!uZ%].]rn
+"[R*:Wgk0ncnl6L&<nRQX=thFs$17V$P"@R)UnaRd'OAh`:63>_5@S6!>_E.U)=M3EJ+?$_l0)@)oa:B@2?h]_l"3X
+mn:8:_+r2*,s;cdP4/GaFH7Ta$Hff[YmUUEqlK#2\M#*6RjdJgd[\K:-dm=.pe;&7`61`8>MV9Pku?HK
+9f"p'4\p*MK%dYm]`?`9'E&5&d*s'D78WV\8KbV9jWcRdWD_\.XVA^c&L0%D%8'Mu"[]doOC^J>XqPp5
+,>E*PUK/b-F[]?W$)M=,c?7(a-<=.,[%'M"p]4cl+K>&8=>iU%AQ^o3MdtF:gh_erQ0kVf5#?VO$/8"q
+UE/+:`PWSK(E<R:`0SrQCY`kb<hRGEdNa"VDnY=J7Ziu)HJ^I$AJe;/4_7a6olY=9=&P:[K]%&aM^kk"
+_LkM1<6chLbVHLDF^_f>o8TVlI'0ZO+gC0_A@Xlt!+d$S<L.3Q`a>!@(kfq6A%BU"W$HJ#=eA]/6Y1rkND%jPkk%%=P\40/pQ)deI[d<!DH.iUC=s9%kW6)RYu>FpCTC7D21;_Wl8p9AWO)Ik
+L;C3aNa92,4/UgaD0s-sS67`rNP8QHAXC59]CuL0Dmk(H[dQ=jE1B:>--:N);;=<_6VnI[%Inga3k!2Q
+`Sl8P>o[KfP+VhE_f.b';o)f7T1"Fu=;K5PfA3kGh+>+El(.1Q:Og\k(#OL"9/s%4j`r].BroVT:P\0u^5K`aj#Dod
+R;Taq>I&-.YFUYrrh%@Z:Xj%+7/^:1KYFr(SpU2[2)ieE]/[9dMLTtSmJe'e36,D5SRIE3gq3ml!M6=!
+HKB.V1.LF#TT_&`:#6#_f(QD>6HM).S0\\B&CM"5*eY)]_*PJo!8tL?I,p:.3L;FNQP4jfY-Gl2KnACE
+JJ!V!mM/(-Wk4*,Z<i2Ye2jOElXE5^E7#^R7&Z"-&aD,pMFIZ?[L2J*1VQSF+tLFj6P`t^aFA-ik!%3k
+SY"%2L^nQg]`H4Eha+&kd$W1K\F1F__8)%(NWmGU!7VJ\ni"gr6(YRJcQh2VNiaW(22MD%@iNBN0lBBN
+([WNCe=2VAFl#^S1jbt8#;d'V9H5KTn7(XLHk8nNb1J-FANU$S?igs-'3>EHr4%eaNa9M9D]PGqZ^?LCa.Oe.6t+#-R;jP_3!c,7eoWr;DJin,<C7=Q,Yj3Cg2>.Q^GDU;iW'XG_+hsU'iX1#
+5r"6mcLg9!AR!$1&6,f,V,o*;)A\:ZPqY_KYg&s@fOn*:37&As,,OR\To%''*glgk@q>e;M%KE[:m*t3
+kR""@DF,`uLI^AmWhGCZ7$:+b78Z]$120p/:hjD,<CJO;O>rKF$<9i8e&5[9>j^"o#9Y2eA8UGb=@!b7pK7qe=/=h`
+bEH"+kZq)[Pu==*b-4Wt_ha_e4rVYeTfF);M6%G@)?;,s<U.]sRo?%-\/EOMSTSCE<Q6B;3pu:-FQuYC
+Z!#Q_i?p/cJ=]P7M70uu67I=HHhIduVcj[-.pNBk0u?DYl"`Z?,uCo^6HI0Y-Uep_5?3E_Ne!E_C$?<$
+I?EZR^<0/a+0D5\'$?NdH>6k?c*t/_inmtpJT!.U]==1*Y0\[0D(\e)YJeTGb'L6hl80'!N6^]S40:':?%"+Y;I)Un3A%*+iMtHamG;te="=\,]l;].bj4/5.lCY8$Tb\%K7dB6F`pkA3m3$R
+>QtE]!Pdcp!8os=IjZiFSME?Y`G&5&-Zq/.;posMG8XjmVuaD>EMYQAf5D&9]R4aGr(pP_elDPOGH9Nl
+T6J4bDn[T)GYZ(Zb>2qg#!/Qc'qaOQGgUJO9?*,%TWYW%N:JJ%IMk'h^eC;5D_^jon1lY.2t!fD^/e3W
+?DV3OPBLV&2T^4uOlMRk-iaHbbs2@fk.3ANF*;<CP`:`+m'2siTd.6PcEZ:(]m+Gm]V1(Wpug!-P-`Q*
+RogX1kiba:1_He:<%gf#/.&,s-C(9n4%EAjop&<"2O"sa_U"`(L2fpD\+=B9>T7]]$uR*:)ReYbXG<kC
+QA^o/O'E;V0"A=u;+>fMjD2heW@_PS[.rf,D#ALa1%*HCRnmg7%?T&;#.E9Tf5GG!_6*GAh8q\?Cs"Q^
+qtEkJT34g0me`3Z1;6Q7(h-Y5-!aA][U7OfC'`WIcb,ZXFj>9LNO$@Z2o$2P0,6NRbB\#>p^D&P]KYl9
+4tiUENu?:aEq457I0_fmm,E=GckIK`VDQ!mdoZ^;Enh,IoX:"H>'EYSr._#T'3'MW;KqDQ8^K"X6a:ZY=tPsbc_rb.Zgmp;nl-Q>@p_jXdANkh/thj(rN=4"_U;WU,gcDkPhOdrOkW(*<ShoZg\Zo<D;7RL
+pb-^5plOXl%b$(iL@sMbZRGRm(#Q);HGVc$T(Q3t^7\JY4n?Y5E";K)0#%_OISpJtCmDoK(D_ZFBEWQ%
+,*b-kS%K_NddaJ-TfDM=QlL_JH;?cI4UHJ_]\f1L*a(i%jo>(&e(jP2#L5Co.@ko'(@OI0ShR>@kW5Qd
+FrGY0\jG093on5&c`u6]IPUV'cR9k$6udR]aNK'YCN[/mf=%e*rL^-raR=n:s#08M*Q.8mTC)W)Du/8$
+e+pQ7]tS6E1,F,>/%uZIS\B1H,`C"q6RSlp`jbO(^kd"ij'P%K!'mNK4L<'fCZQ(RLaCg\^r,3K$e@;m
+'>7$?_*ca=A(J>H&]#Uq3CDOaqqO$ORC(`'^%<:-6^L*G*^178P<8u.6W-*@'0oLt^fg5tBVZG1$C=C"
+]MRE="/eGK;6`b'5MRkU_m)K(W]08i6Q@et,VVSJ0gdKL6UW^t9K#7C2a`N^_ji\RUc63(3CBl26c;&R
+bW\DL5=>oD`#M$1,X9405t!7m6psC19L_ET7mr;*`10@dUdrA98OTXS7)V_dbYCR]:IP[e`>h]C,YuBA;+3$977:'C9NFSdrsR=#N]\Pso:\84-+_Si6A+PllOU_Aqo0"a41f">_1t@GKLLFc_Qg44Ch?.a
+@Rb0@RbVSrKPEuhB1At>7`9(3b\fo*Dat4R`uK%g,]C^cECVR&7mqDg9Qip2G=RU8a..BEUj'klGt4ra
+8&TaEb^N(;In0usa;f_$,_*ltJOh>G848)$9SQ)CLIdAYaIJ&WUkd%(M+F_-8ApEWb`56LO%Bb?aW-C6
+,`g&0O\%*h8OSb69U87TQV!.%adeG^S=)s$'#GL0`L,[SX?K(cSf2?!-gY/.j&\G*=!a)C6&];)1bVIK
+@5dbI8Yh]aFK.pFWli8^9"_;u`32eWY0-sOb1s8F%'iM?ZqENh9/O(M/@S8G[`a?5b?VU$N4MZH]M#oN
+9=2E+XM7EP^<?_pbM9qX%)P[P`(W;4,D<s)m&!$hj?4-k6`cqE1gLD+I[<'38i'S`YfSmch3nD57KX+A
+bbgB\a/*=m.$S:;Cfel/Ur@0'9m#%4UtO"GgWchT9sibOgttiUi(_GS:$gf`,iR#Gj3B4::,M*.>j"j]
+kY=h9:2K.>V!60PlcuTu::0Fah![I`kfldI7DcgR7*8:FTUKDbT@D+PM$Z4*e\`qUcP4jD>c9m:qoY/u`^K_sN;Tg=WQZpp9MEIQ*6$8^!mi4r:gF6$D$/.-"OMQ':lPfYAI6_k$IFJ8:u)RWm0h;6%++qb
+;%4.7jUolt&C7#\[Fl8<A>DfHeN=eL]KB%bXVi3;oqOYCJEsW^;m&$@T$Nnoc`;5aJiQG%&B7@CdRt%E
+%
+ /m<8s&+gT[d=(B"VakJ.oOV*da\uYjXa<c0N.9ldetn!/M^6f02kS"doA2&AMd=k3)aZRdsX5TXZB"*
+[F19lb)Fe1[40S\5JJ3-dX;rjeJku[2,?<r7Ek<dHLj"ApeK>cdNg%I"Vt(L]GeF5WP)!5r+49's3oKq
+d]GOYF]29l<)^2'eQ#St]iEU*<n2V$<K10^AQr/g>Lf9LeZE(Vm9N`b?<-q/;p@SX'3irMcdj[Z<!2O1
+[26sOb>0]X`8qq3ML*6uXO6DYe=u@A9h\OB9fg6g<s;AP4`MDdSCJ'[eK!,ih02m'GLdL:f:@0<V0H(T
+Guq+r=2fMfc$iaMIom//fH#KE-%FQ1@CG!(=&^eQ7>9;M5KV0*-8fJLPf_LPoN8/O<lITe]bOT//CsAL
+fTd9+,32la6-f]Z=G;O^>gOogJQOLl=@IjFNLF"@Rp!s[N5N#'ChAQuYR@_@d9MJ;UhJHc2qgZA>#_m9FduU:W*4VK=hUh<eZ%91$W\R>g=oe5FbX)sX3%c1_I^##D&Ph`C;mkV=QIn+eSJ9W)VG2VgO%u8
+'`M:tQ<)P$>-4aXjf@/'XBZ4M>TGh.FDtJACg9E$Rg@0l<-I&>UYKC5>_U,OP9O'cU"mTp>bL<9jj%#q
+QJDGR>ogacrR5$u_HfUZh(<9got4FL@E'm0h0n!V'c1/;i6P-QgH77G9_$kC6IuYH53ldbqt6aji7jFX
+>J77HKJ#2`Qs!'h?>\EKolf.kls42i>ts_B?1)%sIbbS!>kQ90A^*H$Q/<&Agk_8$IJ)Btp:_iF>m8L1
+HuRt+bL[cRhi7'\c1#*5mpHV*?lf7)/:cI)l9b0I=_',B<Kc0Oia()l=M;5o>k2):+e*7KY)HCf:sDc%
+0hOLf?6)UDSBfmG"(2lYi$JE^?5I$eW*^:bhmOClmMakDqcqDE@C@02D9HA$2.?`[iU*K$-5k_&r7;E!
+$&0b`SfD3/'k)hFigpopVAJ7!OPiSA`#H-m?"K(%r7OLS@%D(1SdJ[jN79p?gLYC\lnM3L8`9.SdIfh7
+-04*/ki9*&A)8]qmOR>k.:`R^iYD#nKqaI<T\iKljAj=]2>UYsR*ufo@HJnI?2S/L8)c^%ACYa3/ktEP5%FRhA.DJu%T6k#G2h%%5lM!o`%N=k<o0*uNU@*aV;=UOhdEkM-o;H/N]A?o-Xf>uA$f.dlOR=9
+;WJU)AklrL7V1_*7cZH%AGu=5DGOfUGZlq_B%A-dY%WZ`8nOpl$'oPhQ>>I9C>nZ_AB&`S*cu"3;eM,'
+kE^@*SXO+ikFM#pi.Yc'p+G9Ogg_Y<)`BM.mPNrV?g(+i[?XQh4Tf3FHY9L<Aql1UVMaMb6=H`]B5UIW
+I":G+BkHdQ>&K>CcB)`]Ep34<i`;(N#&N8tQt[%gBqC.E^5;*OS'a-A>LjHg?8#Wek9u>%>G/T>XOLgo
+8S-&^BNCu^VP38BTPBLCC!N_m[]=,^X6H`lkrnrZk*9X4qs+GXk>mg]I[One")@OqB6L]Hm^Cg:F(j.2
+i[DKT`k-!:]P=U]ldW3(h7V5!IUGm9@hhc&(#S4#o2s!?C,VsUC('<U_.jGFAer)FcG",/bA>JHh%$]!
+2Rqu]Z0%WoA;8HHQEnQNcg<j6D,.8#p<Muq[orEiic_bIQEY2^]^45)mDd@ejlo"4WGEWkli,"#/Wo5Y
+_e%E;>D=tN?&^,OhX#FM)BEqf-K*ulb&-#&D=6fYf'[GROR#s$D2lMOD4t_ldGNeTm@8pbAIs^WYMW`Zkt\_V7ZV>>fBF@'me6WspA]$us5b<:DCoI7rlEgM_IIIf@o]jK/mN'RJ]t^d]Zk<]S__.X1L?'+
+n0\=s(B3e.&8qdRnGa)?%h`kH&b/X1EE<eCD\QF=!UdXUmN2pV'pJ&U"mABC*W8EA?O1/6$G9^R66]jr
+`ueAPL@MGn/d5-mB,C)^-ZY7_nt.=NV^M&M.<;UDElT\M*uOM4h!d5fBAXZl%ik(uOR,^Lnio#t4_s)m
+*]k].5VSS^KC\RT+VW,aDQbAU5:5si5]Ya5o&i;\%mkA&61dr?FB:g$Da[NLWms=)dtXdOLB^eG3:gK9
+<+dF5%d<Mb/N`sLW?Ytp%?Ou[3:gYD3r(+Dk8A@7A9<;kFD"a!Y?H(`7J4u0p"*Djk?N/e?tGU*F8[\4
+XCLn9MfVq]o51e_C?TD"TD!2$^^Dc9_<Z/r7Q^o95[QTJr9X.V&9e@tG7S_<+*1jDEq`(FpD7srDg$>S
+FSCQ5pQ'WET6kd+HM>I,pQp;Pms]K\I/!qpp^_t$+&d?t1dK@KBK#$s7q_U@C@5/$FUk-\C'"%#3d?QE
+FuO2]muM_nOEhA!Gor2p09\AfNc;`R5!ObjItmc*kTftPFVgD$L#r*4VKfk5Gg+6PemW[hPPPf`H68l-
+0;EhXUj>h1Gu!GoB*S'2L3e"NpcBDdqQ5(QT(L@#-]b%;7r!@rD"cm;je&Ar0=-!i[!PTVHXF4.CM`i[
+1\DhHq/3"us+u!0WckkS1:L9\%o.7c*(?*aok$#AgbrZZG8cg]Ya9495JG?sDY_.cHsIS`igkICJpbUS
+q>r;I9o]([S,E?Xr,9&m0@P>4\a\1eqiAAa=06e0:&:L(8oN"'6Tb,D]_pB^^08F&X:3KXa8QUt5Y'7Ne=HRliO.k/F._SJa5MI/?MtWJr_L@ZLVe5Ob'p%GIb$9%ndL!1lbFn*ICJcs0>1=496l:dI."t"
+QH"D5pcKqZI@nT-cfY6,lQ?H%Hft9S+8gop!X/[W[o\M),T76tL-oCrpj`D\$%oc40mLWK2&hQGA't)T
+IO>eaaPsKC7&Es7Q:RaU8DKXM/XfCF1FTWa+ZQ#gB@HZEiaEb!8a$cnjW9[[P0<(=8p&@F8Z#L&eU#2H
+[9Ke8CXr:cL;dZ.=_uYKRA?c\!8=Q>3n;(REjN]`nB*:+o+\l;Dj-Q*dKP67<3E`Y7OJq/`a`O;RpEKJ
+KUPmqpZcVi%@OumZ.FrQlM$m%k\tb5-7;_RdqCO?h/1J8XjudGqcti3B:FhCmeQghs#GbfC%kg1*r]Hd
+a)Q7W.!GIscKS^oS:-.`NS3N'GCA=rmt6k[pH5"\Y61QWNd/%Hs$):tb4L*G?&r'6R8EkTr6M^hq`:p=
+o)c_S4:q_4:g=kB_9dKPa=W<h!s0k\,QP,;%`ASF4`8^UlSpSO8J8th4AbdG&>U`_-nh([&%iG^5h3Eh
+4?EJP0rndS_f;08*l9ZH6QaCr'T!c#10erD8J5eX,t\e$T-->#S=(m"OT]YJ7r]66.EYQ<a!8Wg'XKSh'"lgJc*Jt%(G*m+AG8;e,h"a!;`sS!Z#Rte5#"rR#s,sY9bBe@<*^A2dF<PB#r5/%%])\er:`J*
+;]@_ldM2XG:t/(J.i'm^W`:"W;sd^Q5daPd<mrlUeQ>PrU[L.f1_jXj=-`^<&lSC-eN-IkK.U:Y[C"mF
+9Jt<[%p8MlVe929j`)2B'pX>da>T$/B%(q"F)OTn"bO]rQ/0Juf@Ja=;;PBFl$D4<^$s@r;/K/<b-].*
+(gXT+4ZhO\4qWI`pYAV\-$E;GF&qfp+`lD)Kuna9fT%t-i`?m[Fs@bZ'p<)`nm^<a=[Q2Kj4N\r6.D)f
+Be<Ol^1!OCq;'5ag[>><OCiaO-(SLfY$IX^MFL%,@9S,RW9RQXWHhp:VAuA`H#<_+ABuk8kN]Z#ag.et
+]ISHMq-l.RBlJeWR,^)RMfi_p2Y"@mg-1e9mk\NR]C+9?8#GZu*:2ThH)ou71AkbI^i+UDs1WNcMSiu_
+>e^H#Am9a2cnV%sM4sP<p<D+[?!gacousO1aPWH2rB=U+`k?q=HPC&CpYGhLZsG@kD3XT-G=C9]I.nl/
+Dcg?U\To2c6gAsRY;tY!3_%fhoY+t9"S/&>^!lnnDo_3irjUABoR;kInGRitEVe5`n(m^;?cR`ss3LZE5SYL0:n%o@C0?%r2sR%U8gAPa4omqd,bj-/C2r\W=MAA'jq-"Q>#.^a2cnN'+Uc:tB=4#@K\U\l
+KH#E"rAd3b#mm9Q$Z#3_"2cN[%NuM]K?Q@#2TTe5+aIaTY`2o!8;@\L)p3c[1(U[8:B][Q<Jo11/4=#L
+m%?(=GA23&\;6m3+G7=b0qL3J(^Qql9=0[5]op<9i>gmRFcOl*6p\oa*ol=0O3?Mi`o;C_bGrO:nEr)'
+QlR:0A;qh^"p;6QEt$e[%!-Ff9-Y;p,bl'BMXk@.agZaJ,m9rH;Na$Rf_$\iA?D-F^+Bg`9\(JI[:#(F
+0?T#afOS6kQdP@p9DO6>-!\?TdiN$nQCfmD<6^i[5#Y,f\KM>CL6?R$?HnkZ1a_8_RT"BK:)V#1k9T/Z
+e"1YVRFG8Lq/Ls;EWsO/)`HbVoQV#5CehJD4(m(AT@<di:`9L&kTpD*b)UocM5ZrobkRlR/_:h)<!Ybq
+!2=R9MpZ8f!$.T;T^>':;!I(4k.Mt7[$"24RS?DR74Y4a[[9s=AP4JC0;c+rRT#Yl:8u2oVptF5;gO-n
+.NLaP[0E@)RZ14F78'W12Q0T$V,Jk7:TCflW`>Li<iX,CX4;Bt<I2Vc.ihuu[>(tfRa#$:7;JrEc8O)7#<U-teu:FqHWQKs:<7i$UGR.A;>U#*kj<hoFrH<AHPL"+AK%h^,0*h*+_9qFP-VMoa4YesAo-Rp
+ZaO>h=rTb@m+nDC[Z\tjHW=ftAYulDU=WTg@;P=:ZF73if@tXpDJeLD\$k;R>T865mG5Xh[h@TRH^/Vh
+A]D9i,3N5NTlf^.d^lnckM:KmG&HEm]=28<?5p_*mbQm8\!$4:He!F\A`g\8UA&"6iI(*"o"MT]pYU>j
+IW+?A^UN5&?lT2tmk"hqoKj&-)ZpsidG&!G9EP8lKE*]d'>h7X$"8cEL2ag=['ddW@E_/pnKo/B2@34%
+$jhFPh?([+Y8:ZlAW1W+0ZMb[*+M*LNj6kea11R[A'BXgE[F&mf`*4-4HGZ2:.<:80.1;SV3H"t:s.HU
+/7grIQEne9bIMOEA^&,U0JQVE'#n2+MXc>'AI'Ki?FXVb\jNV)+L$uK>%-&8MA?tOQC3@jAc2e"oF?Q$
+H&"e$>n`q(<fPLq5=9-*(SnE]PgUIG9PIcgV=`?0e!bbZC)o73[.^<F)NRj4>uQ;qol5o?dP+H8Vjd->
+D,aVm$)'[,42ApU!&C.I;3NsW_GKn+%kg*t\Ak*2YmAla5?$qY9sjS"eCn,.Ci+U.[!(T_gUh*:mCg3CpBK^6>F0GLIFYiOB'.p]Vg%RBh03oh<QsQ^]3r&VXgP9`+W8):lb.YKo;577HP^2T]p$/9Xe82]
+1idR"%n9*^']HVD5ZnRIBhkiERf$rXh-MnX%fZ%U)pa`=SkX/a+"4iCDT;8U6d3(FcEb+2qX]ZDcE7[?
+ja5%@EpeS&\fX0#>p#e_NfDJ5B1qLF(K9d*M6%sS%F&,KH`6=O7lUebf:)S=lqNJF3*p2Mgp$8;%R%aQ
+B/\7Eqj[,)A)+2I4RNuo]@e7sc$O)Jm[`OSoa[8F\o38L?3Z;^NsfTI[t!JOPIGb=l#[<i;"7dmlu`74
+k58SWo3Qd]H6501r?n?3*fncr>\DQDT2_8m>?UW[?&E]P):r/@JbC,sffLXWm.e%)Gn0^rI(i>F?8ot$
+:FC.25KiNQ-fK?3L[)Q;ebYnF[f&Fcl@*Bk6p7aCG9<N*IP9dZh4sN=Dn5-tBBoH1A,#u;h>I;.o_r4L
+r,OAnmg3W0/.M0J%;>d\)!b]\lehjFn.OYu'\C\L!>$%K&/t[)*s,7h!g##YDT(K_"S\Wo-ObP#0,XWU
+[dc#`nup"/9:G[[dep7\"E0n90O4Q0_ZgXIs"EC;&+'TTd0;5umuTa.:epFs1Be:@"mn#JY^Z?9L+i"\#&ir;&9eI8FUF4K$F$E8d'F)k[gGsCb`DJV7aC^EPeg/tp.&q*YR9]j)Z]>Klu9iEV25LoU'W".
++.s8WYjW)VnIE>Im;CG[0-:L^CnknL#k4AiY_s)iR0XBB&5ZnFE=h08!]BJT$dgO5mE"CiU?5;]nhE9>
+/p@lp0beRq$1LS$nOi5S<>,sK$^!4\&R?%>?PZLK(6NMNEH93_=Fh%1Sda'@/b^)RlIPE=f.bc!OP8uo
+&Hbi)%O8Er&GI)>q\jGH&$G^>&PWro+V9c5&heeN:QZT9](/]o'lhJ<MdZoF],_K'(=@7?XC3,h*=.e@
+#)H=mm(j`^^E'Se*qAtF1#3m+"X&rd+L0fI&dKQ-(EkOE+[eZV%:9polLkSR%-_Ze_8tO9f`BM_!cgF*
+dQms*70)g4pMf(/j+>oY$G!FB&!<t(nG^`@iu[a?n^18WXD%iW@jc5Cs&*nAZ2h>=KcuU$.+/VJEBt^%
+#8".Bddi5B;Oo8!r@,$n-F+XB&rS7q)_4gu/!@Xqo"?S0_("li"-7jSD.=Cq/Jr:BhkfKF6J13k_&6\'
+)7!*L0(Q3I]*'k!*KPshY`C7HI0Qqm&eW(p&oB,HWuQ(M0@IfiElTq6%0r$q0N)g.EsDLn<@K^W-PIFQZQV/'
+aY\&d1p\Da'2LJa8Mu[O(P]=+C_G;sfbfn0/]C"./dVuJF"Xce/Fl^9lY7XVjXek:.T:s@cqtC[b;9gW
+3O(k1EQ&Q2V`E343K(]Z;d2+8[5E!."\&Y%;<p6+QRQqM3O"JtEO@om)*8Lm1t0!!'AkuP[m"lF5*PG!
+e+39tM]u%R,*9sGE!8-G+ZD/J,P2Kl1_D!T'`l`W%J,&CZCiG#J2<=o4u;^qoCY;S1IIA.6ZbO['L>)c6U[//7+=:dZr'6_>sF1D5].H)$?JI1d`p&9p<esEOd,P/R3_DIm'AOTU/\>[%78Q579#==
+e<<<Q2*,iA8T^RnFJ2:UUIpcK9%9+u['89u?C&iM%$P;\;elAH.2^@@/l-I>P]nb0HEL4s'g^1__?E[K
+j\@>D05;u^8SL`&V+Xeb:R(lP2$$>B"]*YN:t5eIoa=V3(K"0Nps`ItFN6VOf1[sU;FM6aZl)eA'2t,3
+;mJhXco4\%(E[b]!#82=!XVXNfe9`R;)JY\'jk!A)-/V/<cq\KeT4e,G?2+s<q*"[Jq$\k,9jNFY>]:?
+o5RI-D`;ddTp0ggogY_ITiBQ=]!YNbDBRpGgo[uqXS'<0Q,-[i`EUm1>h-l"ougVUf3MD2>a=2P2;qi+j^$Es
+?Ie4Fp$5s"pKpqt?BtOt2?@0N"^fg_@+GQjp'Y:E(L^>_XE#OSe7hWW.1FYZ=Rhp-Zu$ZPcWRSs=nL<L
+1Or6diEEVS6@oGBC-(>S!WX>G!#A^KemW.`>@r%gAsR"@(2mhdD.f/MB@_-:[Xi);U]b'\"(2.C[Z>,\
+O_E=6Bi^^;G,&dfVePk*C"BJ&<ip-qZ"fT8CKA&_G/J,3a(tClCY$gJ<m>J>d;5-%D-#D.G2mHUkABqYD:\/n<paf`nSXZgDcZaRG6;e##B0>EDq>M=<t0..&TF'SEE=*!G9_,E-ZSl2ERuja="SJP
+0liU@F&tGEG=-Hg7s"DtF4X30=&!fr;08.-F]VdiG@Pe4B6EraFk:PT=)E.?EH[[oG?9-8GCt,VLNiKN
+GLqmsFr3:V+]t$VA+h?:1+u;>5>sF(;ft6M'FfB5I8i*YTJ`]D[RqZC:*<S98<RR/G(k?FGA$['I<L6k
+fAh;q>T^cN'4?HA\*bGaKm;5FGo)<ep\TIWrIC7?JCk$V(^#=k$\:8TJTq]Vp`"f%*J0Y+K%MB%(aFZ8
+.t]fAK6T&%pcF-G4bT1mK\/_I(dj!Z98,?.Km6CIpfiIh]I(f&;@20)eA$;DAU7)H=]RCReicMZGth4c>"T<)
+\&2b!2ge8N>6kUo'j3N)K\Z=nIi%GW2tr%D?&P)ZMqDU"(h8M,]8S_kN-N*rpreX6c&J+BNS)dA(t4LI
+gQ"8XNd0HAq!3tXm>mY/O4a,e)"WhkqiE_%/e"FXG]'(:??7u^@^O+:Kc;s+kD3&JLt4sSlX>XXXKf:(
+[MYTqQ*l#A.uK@BMV,%h=UU;d#F0Q@Q'kX<)./\4?'^m_QJ#c6\T*r2B:!mbQ^Mu`)1S#VI@-FLR+[+Z\WN9TLRE>[OR0TA.(>'nBS,uUbm7Sl3?a/:WEE^UHWRP"q7iEn].XKt8..eKb=e'7<g"=n
+4\CgI),H/.;jj&=T%WG%)3^[QS"H,;T3;2d[uRG6!MA"0X*P)EH4-EM';:j,U"TUBqA5ke)kn2>RI$i?
+.:n`cI08.H/+<Rc2D!+A7/!"!=cno(Q9UQ.0O=BDM-%`g<`*'^2ksNRPaC&bc?h>TJY#s8,.]/#)CqOc
+Kqb#kW7m0/)M=D9Pc$R-Kj'mQ)P*m3M5kl_Wk+CoR^9$J[At4TC>(<SPE2ItR>2IS/Qo>:PqAc\ae[F*
++EVb&<8"+(Bg'WiPB`Cf\_!^#oqn/51%Fc;OA-HnH]'q7X.$5s)\92W]rSaaYr`hgg7_rkag(^D@5\Fu"1b_L
+2mI]MZb&6')aC]66aW;EX:l:0Md`]5Bi92(2HY-e\9k$=Ij7WCZ:30;HKLEZcR!eYYBZn4>C[]^rBo$5
+8ZO#=RH_'t4g_hf\_BWbS"mOjQa1sVWOa[m]<eh)#J(kP\m)eZ)k4K%^V!do]U(:YnL.=/6+)#UUQ>;S
+HWjV<=%7M\7_<ERYVj0j&\i1B^Ru1Rqua^(#J]%#^`3fuq5Lhkgq4QuMDeJ<\oBIRZSJRS\N:85gV(L/a2<9\_jis/f$1e]7].&(`1+6J>;*<f6+m+W`Oo?mgge>DB>c`I]eS`I.j;U<Kt^K$LK`)-
+g..W7N_s%VPWT`uYaW)7*L&M/^"\=Z;Q08-O2Blg`a!<%r*RVeC!0bnTcB'9*)k'D;9YP0:`Qgd*4a<V
+\':GVc!9.tr,4UEf!E#4UV(q3qd7D^+0A\TaW-GgM^-?2D7D&W\<@>tF3:7?X0S8Sc.q'uI36mC,LVnT
+b^@[Z>r0^<0@Pagd_-gOh*9>96e%YmeCk$Xn9NACFf(FUY'g1;'Z&+]0>9RKck,B)#_T"dL!]Fi^^ft`
+SOM1:9@SAcfR8aP4Zh,@2:ES4fud1n!=g"J!ST]7g:aK>?*W,>Ze7\Ff_p``*P^B8M;3NAW;P`DI9*Ydm*9gE
+^=F[XH:,c!Xk)=nLBecUI&!nD'0Vj;M]#C0*Q-[(#Me/>i4[<o?+XMcYM/sjfq'1`IMpm(-/3l!gKlPm
+Rk:X($/jZ%i>t5DSjD<2%FmJ4e[ZBf?#/9N@&4h.hOX&r!c+@?osh("fH(!`IKSY;4leeRjF2UAQOVph
+mGgBgidQsJhMpOOLZtBO48tN**g,_OPNlJJ?QOFW*e!69\*H5/i>p:c^"AX@nQA!I^2C-MQ%hTGQ7i!4_+0@E1]Q'T%Ha2nSfR[6]n>WW]Bc'_n(tasSt!s<U%"YSnD:/7*iJ%)S`2jEnQu[o5-<M1
++n>RQnt.49*r5D6s6m]'oA;XiU>^LT+1M8?af0")a]7G+bN4Uo^8^7U.%fn;b&+n,E')tF4Hj?*ldsP#
+*8^A[s#9^;3VZrIJ_pXaWjD9r/bu"`q7da!s-NQ=Vt.U%qHjuKhlloaTAr#Dpj^'Rhhh8<_>(U3D')LN
++%t\n$f/R#[FqbMq6SD\hLL)qmJCM\IrY33D>/4#h')j3@(@5\-mT]=",+ML:l'3O+QO7C6m)c*<\=B%
+*YW'$giaGX%#2P1.3t?T,F$=3;MfM(@4[g=k*#P1g1rF5c0&#^o_*huThag8qAgK46);om</PfVThMF`lBM.9
+>,tN%ea$4mole/VYu^4Vq]2-K@C4_L:qLg5)0*.(DKdUbf(!st>q^D;jo540]\kJg/*neuLM-ZB34s,b
+'p-IHEVWk:?RM8`B(FTe/q4D*^h7_VN@o!<WRGUi)SL='@@PVP1g"Uj7p2bGDKhQJQIfa0ZuGD;94o<t
+al@EOZ`Gf5U!;Y?H@7DY=0^BEFZY"hkC:2(m.`\l0(5.S1uS6**nZ=FW)Ncp5#AHghspO@IfH%toC2WAO:2'i5d3'TqnR.!f\<V`lkKB7&-<:D6EmgM$p]o=0*O_FX<.tg98#S8__EuD'La`U<u+60
+FC,h-DklIiJ1+M$!.[<;E?-8YngKDe&c+4*8?sM%+NY69P9qM&qE0cD.1=Aj4S#k[/4u)Sdk&\*goiBS
+ZNRrs9QN&01e]Au(u%ckAD[&Tdu<5icBFJ2hR55`G1048ndRb//bK91:inQ&6oS'BlT)*^,l'jUm!TZ.
+9iEUl9@D9MgIBSH*AL:;2&/JV<#%8J;q,qa92np!<F#2>d@FngerQ)5)HQO5G?n:Xc$m7U&DU[nfQJ9l'\Lq%
+mW(^]Cd`j-ejZJR_N@5LBYnr;MebU:lhtX&n(j%A>ZR]IFBph)1>pkf>ZhqGOg5E;7rcbB,@;'`o-N;'
+jo6StnpI?:i3d/+<T,fi'ng"?FrQ6Fpm)eS\^k%8N+2S44_A1`jR#N8oRhXSc8c=XhddT?:Qab+p,e8(
+R:^)sZ86)AS722ma-YraeoQZ2);^.BBY",'T]m@@20da'`h.Nk)KqkofJf);FP0^Nhf`5nNafl]f,hVG
+l^K^gZ9srV_ZK4p7^oL)gD8,HDS*81X?h2>e%<ELD1R">p\"9t?X,Mp_r(gMUOf)l2Nu3rI#fAkEkJ;'
+V/mWK1Q,eVp0l;1]*CjQoUQ'DRPm;A#Ln8E?Vcqu*L9nno\Fj%f(V>13R)U"j0RLnIIDsKpY=Yej*<g9
+Olb)^rhWuu*gWd4C>Q,hFm_?X&\.N2T"hE*)je$XmlPF]\9f/Jf5?"$&(toM?RP%5CHn-`qu4%p#@VR+
+l9J`P1'&!>!s'M_:k6n>"@0I)"!B]8@#lbr]\"Y9i3UXZn4F*T\2;-q$`/Ld_:q:96O2Q`XCeIYf:/.%$XGR"G&Y#*Qe5^5*L`0MYZ;5g7-l*"E,G[FqB.QgFU)A,7tWN?*Q4>5'$j4sHB1ND]f)b\c[/`C
+.oG[uVnT]Jo$Dc&mP)69ZPO3Xk'dcN0g9g;(uH$GN"N?S7VM$,;)Ds7X-gK=./+Pp$&*l)%L1!6+!G#k
+KTPaC#=t3s"Cb>"M6]Gq8LZ)5jKt&4jH:BIGrZ1j,b(#0OZ'N074;T7Vj",A'Z4NS.V1r2L9T1jaba]I
+PHcN#+Z(8CfZ>Z!FL@:<!_gfU-SX[>_H%78.`Ej''ddF@MXak1^LuFBj0S6&;15^o=aM"G`7J-?L2Fu/
+d$n'W@?)qRF&!%p4&A&sSF,ll7[`@$?fY=Ue)j^\=c5$_m/NH;#%Q!e#=+IMYa'15;Su*?6X`t&T2M)F
+17B@Mk`ls<oK$%#MB\]Ae?NW)p4CBXlnASSU'W4`>t`4F8E]XMTTm0W;]9@D$7*c^o/`F2(TfM@RcoZN
+JaUZ/]/?K+m\p`:DH*'m;efk7W:R$6QjDYMB,lIBMq5!`HFAj6lLq:/Ej8X`a]L&N?`b'&-:mE5>A:2q
+VU`Po<pJ[iW'iS?1j2hr#\-;:jVG&N"PclJ7:5-KKJQXI;-1kB%LA&8@P5B[Tkc#KCSd,q[D'i;]/=5-9fT%l2C[+liDpo26(7HVI8j@]CFXHnN4-IR>;l@X)q@TQQK"ZCg!`sa`EB<CVR"u,cZ!bZ_moB.
+#YY%XAhJ4rZStA:gt<m@'A\PL:85[/gC%Dj"kgKl#0&^Y_[>hff=TY']O&0.H>draAi,s@=Ys&gAJN\*
+=$lgl]CgYe"e`5GMZHbBX(cGLVk2E:q:_ma2m?#Z[[9Pk@6>tSXc."o;j,s@bBHs'\E'\*IDfSR'o<n\
+Lq.8Ls'M7pMfE>^^R2RghHSli9<I6dGgc@mS8im1m+o][F!&OuG3S@*6-0GQq#m4SPA*3San"C-?YT1l
+EJ?!dfk2jI[7>a$*ML948t9*r>A>Ck$t].=1LXPARr`akD+KuLiL6WrVT*h==GF4mB+dX9IOKa>ZPd>u
+YFtMGL!^cPSmu#hO`A(tdM=3"Bfq<8oSqXK>#PXiCjfW0[[PUTIT0kC;3K)=l\IeIb@l;=U3%`aef)4Z
+X"4@?Fgb\UW6[4P$m.Pe6`/+3pGctPM6V4^a'?1?ZKK7>6M=mag!2)^ccoar23uhJ)cplZNC10gY+3rW
+[mt0Ba^Fc/kM.h@P>P&p$9(F=gY927D_m$F!_nk-&T^q:]skEDmb-/R"+M)F]rgt1\A6Qd"AR-af/<K)fK:qAm#EO6GdeLJG_4i4/5+$)nHL3c#E\KcV4_^<s5b4*Pjgk>^lpD@hOBjWmL@^Z\V?f_e5(;Q
+I#kc4k*P6.bF!$RF_nPCpZ9&kQZTBub,^:$bT011jut,N1L,%\oC%Lnlo2pFpL!8-LL*c%V8k;PMV:4a
+_Y0MrioG#*l.m_soY0M;CSs/ToKSge.N-OUpO)FY#FOrHe)#I)RBM&X=a1G^j'@+,hZTu<FF:.E]XN"R
+rS,P5StX!up&io+(Tu_7-0X4C=]1f/#^.k(l[<u\Hs8),D#QU`q&0_9j@bOZc)9BGpR1dTDp;G`29e/e
+N4_.aa*`r95/&t)Q&NK@r?%O"r"4YHKTfnV^%q/H+5Zo;"7[*j4.#mE[e(s!WhTKr)8/Bloi]VnIm<2r
+Ge[3#I@I\BT4qL),IK\pP;-"p57@TX)t1R&at*AR\]^Y[]#D-glTg[>5a2I8;bo&F_nab+^8qYT@oTat
+@L5@75V*%'1_[\^'U'4$\23_>",*ZFN4iBj5C*mUMQ8tK*5U,FYcI[S"(dVt:m,o$2P^u&1^(Z`'L)-m
+^,uY;F:#bL.)L?B,ua"mZb7a@l,'5FR>_\>PDV,jH,;Zi6;/+]/2=$fWBkVAWUq8uPPHH))PlF5Yl#P0Zoc1BUd=VN4(J9-o<^aZ[iem@6SpPd1d],K1dN&K4BsL,F=9P)/]<<6_IP/^]"XjGE(#p^6M'S(
+`%\pl1W:%q`)KUM9GTup2Dru$79e4V6h[883>8b\-Hmo,Ug$7B>Xd.5`S6A6.m:`X5f<L"$`PGaA)>0]
+;T0nl`ad:^A1#:.?:L/m`hZkZRYaAD%D]ek`,'2-lB8H30=q?`3^dQ"1do?"F@SG^]-LB@4+nr>(n7m7
++4OF/>ZsGZou#"%a5[HCggE:Gh*;*O^YE51Z2d3:AOf^RaAdnk9:nD$CDLFj7_EZ\[#2rC8]Js8*K02R
+b_Z_/&A;Sr6POX`FEP\^PcXLV7spW;<-ZAt"[+*58X%W-8o6qs3&%+^a6]D>o%6HKR)@un4ktWICd?!.
+PY+o08Q;Q9X6D`'8OV'd`q5>7Ul\-!<lW@^1mG%5n^Fm=f>hC@aZQIo1pY:jVDY/,`Cac-8U89p@Rm-g
+a0Et%goO-G]Lo9=bLF7l>M0gnr^n`Xa;\eb7"i^![)uXm9/s=Mlu'GR92(S29B<.d@e<=;b<C"R[!T_b
+XN\ibOZO7t0$M=01rRX,`QM5Ra`M_mI$d&2R`0V^/PMY6,b7O)gs+@)Rl#W3!@0<)--Ap$buE]J,ic^Cg<,n10-oXI]PU!R^J+c,c?Vq*Pg@Xnld!/I^SK:L/E9Gen4cU;):XsFACeqOSgOooc'1/b*1S_T
+hG9C3c_L2,>+\%/_+ZEY]50[P6asiNnkTu$ckQV=_;%eeD7$=&,i"C!K^DC.#;9Wo:7VU9<:%iUE_bZj
+^>eTW%0KBH&'SSU9m%)p9RS]Jg+tkG/R7("XU<G"$;e\Y)!(Keo@_>EK?rVR82Pl_%0/^H&CM9p;%obP
+7*2B,k"oQU:mB+"PeBt2k0^"CaO/hlUkqq&ekYiM;B6<H,qdUr7EoB7dj+KRAD#4MSB:u':P1c.;`;s$
+qPnrX2>'!XI2IsF^`4(/`h_Qe75*-o02rT89^Lt@FKEcq#gc9Pe&<c:]gG\W$dsE/\ZIC3D%.Z`"20+7
+a"9U+"]*VW0WD_^bA>b0`&C2W'gmrr0PhWUMl]jb3@\lI^NEYRP;lE$r6sIBbTqeji/5f#;-"E.<:\,/
+od!5m6mZ,1]HkPK>t`aZM:>g%;I)dl<3F`YCC#go4`q7?/Rd0=@TN]=;'f,bGdsk5<6o#sbGit@F]MP&
+Gh.RoZ]lG&Q!76nfL^H4dJ?;`njHRU79B_EP)M_/*J;rYKUr?WetgVC4A8f#Lre\(=H![<NFY-LD,/%qfW>Rrbq16r+Ah`b<\9Ke7,q?#;`1[^cYKR]<EN%.2R)Q':\A)Fopa)d\Bh9\(L3?-AY2h@Z.!7m
+Wl9Q8AUrJtUKU*_S8A8Z4d0"pVi!o0[tSBgNJ^DdOk5kX:pl6aBgl4DBA1&%5-9mX'Ts`tWEP:hf*nM/
+9esn71Y:G>c]*>+*>[87RS"lq;<7^ZjF.Y?^=gE[f1>eo'uQ1<_UEp[cXk%!j^-VO)-^+Lg4d[E9>Xl5
+`7/A('?*OI%F/)C.G27P>mnZr`R;\g-+akrW0PK[Xk2BLK%k\dgPpVSKpL&mFjmI[c+UdGno!6*_:c62
+a5+P]mGO.5`El!nQd*KRXk_$pjkP5m>F!sG-0q^.ln1`oXtB')c.Lc^fO#'ifO`:4'l)PkN7PtMhbDHg
+PpYC",MNCr7CCZ-%8KVLn__m??eoa&-'_\eWSdZbf2S2?AU$*:T\5bg?BsJP^#DE(j'J;^*(AsqAdRCr
+"5m#k)ib-\D3eMYmbnomi?diW]jTabn6b;mQ&X!_I7MrOps+#;>lFBT[M_"]YMkK[N(#6fVAmMA/@tLm
+5aE-l()C@7@GRJq-@M1aV)Li'"?;,Fi9h!2VCOgO$DZuMLl+B*O_,O!HII<R@^ZYP`[kG6%:/oHghnrY
+4hk=&)or46j*dEU7O2D;4QF5NiU"\FKe$TNo@k</?`$0N,jJS,*TT+Bh'PC_hB>5iOK8@+j45I9[Fnq.
+g0b%AjN\$?eX+gghHRt<gXR<SVGk7pDrTIJ@d60"^/a1a%HW0p-ReoQ-(AC&<+Bnp??R`#&SG[h>ttS`
+TCj16Y$g;(9B<6J>BTM`HZe;E7Dc1/@@eK?:2+=[6e]a9@BE/_EuO+lA7?k9k$E)ghIS`S-03l\jR%=,4Lr;*0>1+10MZ$4$+uU>FX-bkOW!S"m.]]&WXm*r<UO,5-(<b8?Jnt$j)/Agh43(aNT6U^@%Lok
+Aoq_(Q"4FHB!*6,NR?CMD!(_Z0s%M,^-uY`>A"=Pho)g52N6mLMm8jIiac$JFooLL"m;*EB;UFAECse;
+=/Q]?VaEG%N_ebSJ44XUi-C]rk(?oh^;qXT0]^pOp53EF&87Y@N%MkZ[[?@bF1\T7k'bP4?622rCKgFo
+ktM?6cF19SC$A!PCS%n"I[.6oENu[7CCZ_I&sqc^!2a(lS$%!MekoFbT&,JX/[<'sk'U_D([="rkPeLu
+Su#/IVJ6Et5OPIVVTrj-2.\)tAd67iG,X6*3DKK]=V-DSofqd9f^%SVCF.622F'I/D]+RsD8q`Uod]8k
+hlaDuB"a2l0")o\q_fdedcS=4G1gZsDJ>tjcUMAHf$[s__qVoDj'=TW7`UpR)=IdJ1TNRuSh<C%I:s!M
+>W1%>#-$u*nYG<Fm1ngJB#WUHI;Eu\lIOM@(9ZcUYO6kmmY#4]G2$mUi5VYN8<1;tL6(ae#B3GG<'3\:
+Y2M+<jYe0n2jXSbp?;#ML!q);C_fcc*`$GAh,@YO?r$.R?LR7l'(;.Wj`^3+VPWX^=RP%ADe@R?K`5f]eo-1pDU-C>^=4FjnSdRU=6.0\Ij`#:!H9\@nGK3HFbgM<$c&q)2b)jtjj.naC%Bk/E'F\84A+M'
+#N)R0Z\IUF*s(mB.W^W<nK+.eY12WT47%oPl.d4o<mp2U5em$2B?n_@U-.O=*:^beMsaeiL=UATXBnZu
+jmk4jY$L%!q,+mS@%39t%bPg*3HKs+%3>(]b3m\Y7.iJFBe<uh%gDWM2-e`hF^DOu:GP%N%5VW,@P9b7
+pJLSr%dX]=@W*T&IYHdB6?-njp1GK<(J!ZG*,87"WW)M_V]KZ0C$_#oFHs^]O%7t@Wc:NFgYZZ9(B3GS
+XGsC7dK`VCG@-OkWcbI4AuAjI2co/!H1f0Aj<%WGB3W0,"aAZt4GAm$QT%tFG^"XFGZa&#+$3Q[<,=3N
+bGRPm:D[cFnTO@rV_:I3T5/O5CR`@5Cr^=!QZH_&8G<?+a-V`\?Mo(<&+X9/lK5'fs*"0=SG6Q$D6%XF
+T%u-a/pIVK7C/T^,gGo#<Z("Lkm_?=O',5sDCqUPpi!2.f3mJ`3prh"llirV1%JC[2HPAQoG2fFb^T@P
+NLVqmHS9;X-^Sj4R!VlYk_rm;pR:Q#S&?8UHG?M+g08U4$MUHkCQDJ?(Sto&UO%Wsr"jqU0;`]KZ[*_4]Onf(A[F;G^O!r7r8p1\T+^Ct@qit-agYhjT8[6_[eE"mg];?jRDjMcR/;)np1?40Q^.MV4B:"F
+puf<RY>BW8c27NLHk/%!:60W1>'rQ0r(\(+7>l:Xj*k:_H5FPC5H"F##5kbf?"_C\&']S.^A*2[h7nem
+pPNUEdlQ)FUBfE>cKifE"aGf3*f'Q@-i)I$\7^:arE#5-5_&i"+<UZ_66Ursi@p'E1)17P`*9:^$^)kP
+Mn(#D\9rH?*rnNd$*jts8Jr+p6XU3oY$3HB9I8.*I+E!jREfDC\[:XK4If4qe/A3#M+=8fBN2Q#.[s,-
+<%6?9I9*=KWRbfa]!Z:b>c_$Xef+LQUDX1Xg&MLTY1md#>V4PEc.4<Z]A)`IBZ8j(GeW*T(ct1+onLCi
+nQ.8Qmer3_?h.>.-;u:Sb@Yf5]WQ</S^;$A=fi0t5DR5C0t<c[Y=G25Cj$a\0%418_<SL29pXgX^WL<$
+)f>!Z;lngFq-)Wf-Q0hWni*(6VYc;'lL[/BecL[r8H=!_?9]g(c0+_FI9mUR\D.>Vp33r\+4eF*qL0uf
+^UND(r]a3F!<9i2/-?!iO@0<W^sGaq#!l(%+U=o9aO2OFJ.+(>_f4*[%muHV3t]D./41)h&PE'96R^.0(WHtR>k:F)N,9NR&Za"J]#^qu*CoG.Jr6=["H&#Vnk)%j8TI]@+@d''V('QMXJH:md7d[p9/>;9
+0$FnqYnTk&,f;6.dnJ.(85Z2;.m5Y?_MlUbA;qq^'>4!",#"f@N1`]f"$TJdX$8qs.#L]]Uga[.$.9BM
+,m_q\V(5*boURR.dhLn$:=L!Tm,L+.@o$#b&aOE!<L#r5=4L10AQ76'KkjetQ"u^l!#<1q>$)NIEp5<$
+rIjIG<Xj#a=-d][;V-)?De.Mo?*.U?p/=0C]AdLO*mPQ0de:BJ`-G-W2bh\Be2LC^G#VOcj*4m3Xm(2g
+pW_lL-Z^9Z1>h[e!=m(hbiNh71OOD#@2Ne!KA=\HL2oG%NN7tA35)_Zj&k_*O5h)f37)*[/g.dR'AcYS
+;)C-.K.cd:#F4DrY%]30FBou:kEiUPHtU"pIA#d"/r?@eFJVOk0D]9MgY(/9?)QtTp-l#s\H]C=g)BCh
+a(lV([:WS8VT6%-[[+7uCqFS]YAMhX\$^$U^<s@=2]rWoc5-)h]/KL%"f#co*g+?Z]I+<1nQ]uCa)O-,
+rINm3XOTPso+i4X4]smqc=,N%m_N@WY;\K6r<H?Qopp#,fCg5E`R/gU#4Yf:#d.]hjdB)6k[s&`F%5>?O,_/!r_JTrGog=Xk4'?rkifR([_GmcIa;lBpAW[U;sjS!_mn<ihn4j4T/EP2qVN[VnbsJn4f<Y!
+YL!*Lp>D.LG#(p+qMc`HH&rKu^djpri"Q?G:a-!,Ql+nB]9I@(=b*BH$KdlUrH/Z_Ku(heN*R)6FKTc9
+Y]rA=iC#,K:p(Q]#AECrHn@s.9b40-Gg+iW3Hrj;hP\DK8^"aVLeouR5e)R]U+?h38*/u"([1R"&^Pgo
+:&@0]Wtc_m_0t^f-UkP;'pc2jM[ur!^=^%8ioF!R;1:7>fWN8ee,"QTot<frrt46q8WOJO4\+.e+61Rq
+O-0d9_al-ui2hcCNb(+7k@G'1P&?E/D>V1,isB!bOcr[\:.a,$Q"5MpPVR\\O]QQ`+iHKf0_SMBG^cE^
+%
+ "=9nc9]WFAM%K3[jWsh1rdM8'O(]CNUmKd7qg^5-3RYC;5.P<aMfjn,@+dm-8[ngYqMt*a-iga31]*F
+l_CQ85'#pT:0DEoV9J.nPFcqmRG/lmN"gkA.LJIe)T<j^UQ^dnm`B!N-7#+WTMuDQ:fpX[Qu*,%ccC-!
+Gu@14Cp0R47Z%gN-Uju6N2%))ND\A8nRltfSTKa3;H_mKU1&>8B/+3k)7N9%'[W^5AbjcbW@q`:0RXY<SLV3kpM%<"N")5Ie6.hPQM[2B1s"BK8l&CNF]"rW:6\aNTfV6koT9g4;q77/l_mdFT8e_X<`U:h
+BO,>S<N`bTHG[1-I0?UihM]eH1L4e8GHXtd]Yjk%<3!'OWqHe8=?5%f-@9C12&`>j9-%LnHHN0Cg<)lg
+B4;roQT):_TNPH;Z"]`\Z5/F^c.0F(A"#-%PqL.Gb6r+N[BQm$`nFWYD./N#=f[b/hBLVj,3TE<Xt[/d
+]pd0eW!)mt[k?fJgRE0D"j+=H`XH&**Ghjs[C\?Rls8&WAh:=(VtN$s?:uPcm^;/]ekTu5l%8`4?(*[:
+$I7M]R='c97)'P;o09,EhQ9rK!;HKo?E:b`0%L9>GV95.g_.@Re\/"c:4$4RPm4CE._)Ngj2'M'Gj>7Q
+X[=d=*ZRb.Yq@6>:p1;F4/I!KS%=@Lbs>i)!:KB[3QCjK*+QX(O)bF_+r#Y7i/EYJ1+l,=jZ`0./'iY4
+2Gq.=NmV4HXd$,.m'H5Zpf#D>BJS)d^!4Q6j]o'Wk1um@2t4stm$ElVG"U%_a#[i>i@2!r];ob`_+JrL
+Mf\j=KMkGRkY+'qkU%YW)CY.>XVmiiKj_mfK0W#`@k'4qRE,/>+)0M_VY(.bGEdPYk5A#Eo<tRBYV!5s
+'R>(I5-`7G,4Xt^D0iM=\[+#o05E.DQKfN$HF\M'C[BHRp,,Rp3ho\k]iVNuL<m*67m66E.<"1IBQ^me
+&)jt'U$FiB`&^@_kj22moR>lW;N",Wc+,1n^-.acl;hgp>t/i]c/2_qB5cW"\h_I]3YP_.l[=mkYI+e`
+S/5T&STV0o[]n?6F'3J]'sT_7#N:%L=`#bh^Gl07j4oEQ5^fVbo@/W6]4U!c/]G/lDVemXJkC)Yf-[s]l.nJZSjMi!]/b?mTY&5fDf1Oa\iP`+)OHP-hFH&*(<b>-&QNsK2m,-a_ot5YY&I]!f(J0%j-SoS
+AmL,0qXs(;rHGN\DP,\[O!X37bII3H[E85?H-_3U5>Rl#V6gs8d*RuLk[&T`3Q^LJINQQSNS]Z-I:BdO
+hg'=6L9e:V#h5.>](\DUkPXq-^7*L>p>4Hs,?*+Z(+Z`RDb\,&a'\28c`p-e]>M6\U$V_dWV[3SlgD6U
+o=kgIHs]204ul7()<^-f>q_ju/Hb-0T::*J)XG%2khQ2FmQqE_k^NJEka:X8Xbg-Aa!\b!hlGi;gN,us
+:T3sBY+>IHamMC4%))@Qgs#4jb`>O"/>Vu8C<DV:ZjRfEDC5'qIf>CZ!QAsTO<jW5-N.m4!pRr)D632%
+SFUJIq@=".O/27paREn:">.XjW)W:s`<D?'"meMP-4p%!@ft"YdgsOVKb"DU87c_e!jCD^&;(&'7fEh)
+s)72GM2q8U#mg!C<A9mL/U%6b"SIiI!DQo$l<+F4T&Qsl$BQ26YTQq"JIJc:%+'h:E7EeWD$+^Fj\;tg
+c@g>%BXgl0\BmpAn"U't&B-8G"jm&KnETM);!&<YcO6cDW-Bua1A,U6l#/Qk0[U>KcOusQi%?/Om=:Yp[0fa6$?,#>Ysd-h`>#=f'CXr&n=:8T'+;#\!3j?V0YnN7Tb;?^'%&-@;/mB>mgZEs%H[ZPE9.3V
+m13o%qIOR@Y[n@nA.7C\*hX',NtW',`>R's)3/VHE),QC%\^'"&P_QT&Jd-a*i"_d(GX;ROj^j=0bnMq
+'_0umdGkt]fbG+^*mg#bO\H21miSh#+0Hm5;=*Ys;\i3M+OI/0;AC!g)&H0k*H6oK&Ut87XVa;*"Xmds
+BOr%c7i>0`)\-iudR>DnYo?O4&?t=:WZ:6-`>g0!&WW%[nf&bcBd%6q*Nm4#Ol[s1kmA"m+;0.tP(=AS
+TdTDOl>hjL.?P!9#p%G)+&W[.Z>CqoB.@r(.^#TacoE:\f-8WsdZQHlY6rWlOUcD+,_OD]d@s+XVYao%
+/Q0rtEmG7M@jNT-r,"M-VH4"C>:*5i.e<Ti$Z@C(^C)dd.5MJ8#!XK!'-4ji%&!C8o-#kf,+EWq1,CR=
+P;P-P)(9Ph1UB@I&R,2iRgTe<0iFW$.VCFJWA$,627$]s&2bu$[k#i8,;MHHdPtF94XC\s/gk-\XALru
+JGSj"/@0`8E[8NL_(S<.#Ho[%;Z/L0"ZhiRQEplGNX%9P5<F^s1c$%1dk`d&"pk:0!#*O<o@#i9brq99DU[3$1YY)leNS'/4EDl7'/;^--Ti$4#h/`;16daH4Z'HjlnRBI'GR$X=[BBp6.<#'lE)sb[cK;^
+0%.Qp0**VB"ZZf^6W8kc:U:517mo!J3:&dIP4'4.D$Mh"AtqXPcSZ=Gdm@"Y7e<^coDpD'<BsL"f<TN\
+P<2!-2*R5N"e]^'oTB2rO\&NC8X,Q5Uj5QHT1QDh9(]5Y1o!W`m67nj4k.;=P_hoV;^iE19^t%AFEo]a
+](E9,ifk6$AhcUdF&%te7b$^BPURFX,sq3PgN(0@ORC#LktnNu7+0s1o%$Di7Qe's8lFVF#rP-alT$M)
+7>>:uP$LN[krL*a3csg\'gkbO01U(T8$`P\<7*,e;,q^k23Z-T[)#BLOoXD_!^HceeT"YjF&qs\=*8pm
+Q%`<tM-(LP=7q\XFcT[*P?>2m96Hk-F_*^Xa&V_-=ERnR1_ScSg@]Oo9TeEo;PN+W),tb':DM2T<RASq
+[82r6T'r9>e3Mk*#2Ae[75aO37laH,f3ag8XgKS42(Z:Yn=fJc&_0"!e7i2G8R\p&4#OJpdL,9IXWPn!
+>>aKQP`8_/Ro^/$=dD?Tei@5]mm"624*E>hmLJ7,\QfnM>]:[f2Ap+Lf3MEo@FXsU[GO<TDdG$-:b5aUY%M*""[uGj:)3[r'8:,g`FoCR?mfGlVg2\DW8<e*B!u\kp).<Mk5UQ"48(1"'+J0PrDkbiA!NHr
+K?%L[O%T(V1QmAj[`N>=q\Ae95h8k<<Q)JqRiM-9CK@]Yp9S^I?Vbih:U&k'o5?uS#*\Y%A+P%\f$m<8
+P",/3Ed&O<b["Oi(MZ8CC:%>V2Qq'98T:!t]Cel)<ag,/?#0/qFf`&^;s-eS4'n.*XYlM;f&9TuiH?!T
+m?[V/(@uE^m;H`DDO%C<2beD'"aRRQB(l`mQOqKGpB29YHHcaIQ15f:M/m__7Q2ehesCc+973'\C%jGV
+pX;KL]b*+Z@.I`J2*YMnT6YYJ*DtR0GC;;IK6V-LCt3/i[aO_<L6G\[D>$\5G/8[Y;\iGdm5Pt<[uFkk
+M*La"H.SI5\1rI%KmGY%OVIb@'Knm,3<Zi^H^ITVjhlHjeU5UXI(3QVQs#,C.sg9OC'S0geMd_c"`t(p
+*6st)G_LcIfa-4WCmZGA2uA30/V"MpJ5r.:9Vdm)%nlY@M-(RNPh/YaP@^)3Gn^W];br<K=>4uTK/h82
+R*u[m4^HFnHAeg,"$[a%-[Ss2&=@<hOemdc'p"_pO0a\(m2IY0od'>'Xk2-rFYLg:5@HO!r:fH8G_qScdb)(>bS\/QbJf;dUP[T:=-Y,jpo.EJFb)JO.(M=gZCc^<B7G0LM"6mt2iEJP-]M8GN;7BYG'/+4
+%
+ iBJ;_\j,T(eYAV;T#fTOL6)sYI0HP#^(AtOBI\K=1[SH32"^h+q"1Lb4r/c[@=_5FEqqjRDRY]8K^j<
+lWH#pZPT/b'9gt?PSSle8dC6[2'=k-Q.aKHoZ`=S*M&S&N*%6^Q6J"cEM0jXT\78[1RF*R5B0f`T(ka$
+G;GV/$(/-hR.cqpq3.583-G'TRPb,7Wo9=*6_SLTS,'Uk)7QGf]qm*5QC8J[qIKBSb#pt>!l-ft3cG'!
+#R;K/Vj_u5!!E\&kFXcZT+7uGq>=<^h0-<)P549O<39];,H3VKWH\/f;nWOLOVA2hW7h7E=(%'bB:O8[
+XP1i,RSB-;fYZ<jJ%0J&G(f^[VlhdHEr&&u\8e\*6[cB$X="+P3sDK5pSO^!8m6/23tnP2J#I[NpA+qm
+R5_E%4fQ!N,C9H2BNnQ'WKc,=SU"e2q-fPK2ljEOZl/\3=';0HrNLUqYa]".,qY+eH]@IhHF;jSZZWEj
+PHMJgBq"Rq0a5&K';S7^O`59h9g[>+Q+=Mp\a;BIpb0&/caonP2Wn/HH@)R_^T.r&P1I[\e;JKmCKK87F_=7<gGu9Tc\hG-oU@9k>;H6,#9S<3^@VZ33le*:A\+B0[Mu;7\TaaS/TEg*A@hT*PC8JBMiSaR
+Kj0._)F(`4UUYta_'a$/)kjfZ3Q$37_lR^F*!<sg!)it!Z.a>u-i:/pO)@&,'3Xk2gWbD@<He-HA6Pt)
+oFXcb@2(fh>^Q"J3UOm,]_-YBaSZ"UOjUV+g._9/[lFu%)gN[?ICRi#;>Hp&OgDpS5IXPP_cP`Xgr1qW
+,KX2Q`2+e[S$o!d^Tq!P>L.#t,FQPP4ds98bGhqDHe1oSccCB/c<P^*>>pf7Mo[paP54XU][=sYPK`W,
+ad`Y*HJXe^\E2K^6b4S2gGLQ!.iO&X_ITXq*43Uh.to!"bPKgZZL`j+5@FCXdCiu9AqX-R;6bB-c8dc,
+p@3aIkq*6gncMF*q`2\Y5K1"Wcm<,-S*.d3$e_oC^KmC8]joH\A_M7jdMa"O>EPX>mhku#2k6qleIg9@
+P[$@?e9L5ol_DVXBdIk,-0A(KC)IVs?eW3\g4ek;>(`gKO+C.gFkQqIo-]ClbKdPF1RRH:;fTgar_=I-
+9HB&Kpab#:;9dicg-#le154+;q9e%^g>5+Br!1t3/&9t"_&Z/YS\K1c_oaVOglmTN''$0E;Zn,re$Ae)
+AG9$3jbN+_d9Z;&r>4%RM8_S1fJg+u*W(H/n)?Fnc4IWCI='kC'fd,od`se`3i1/jl`8^da8Qt/h$;V\
+IEl)C<F$-qIA?!IL$1]fmE//X)euFe\&o`Ae=%gmg+Dc=V;-LBUV:;-5&&iD^""tqa'O$;a3C(nbO*%b
+CE<)Gr:0"X-nkTJZ@)V`3E99%_4W\FMB35ORh&n5YJRj2Fkqhd]03ncfm!@$Z5tUaQG)Y9?XfT-Q+erc+!9A>GO>a%mTc4`^CA3>;=L2HdeHPdrqX@u]7o,E;I9[a<h&l2P#-WAOo=>c4mVk"HXYq&f"-(a
+5=b:YX!IJHl/-@BT$+h5Xl,J,lA+aDZ"M]q[nK"fQ?:[7hd;=e^&NR9+:*.@!"f9a6(kGA9HFoSLI5M^
+aHS;+%uJ9"Yo$\fGenDj,LQkqG"3^=8>QrE<16r9QV(hq$%/mg/W@[/;2NfbGrUXOKOKtp!eWk7d3qtO
+2("AYVGl`%)HBP';QA7s'oKD2Y?e;4lZO2sNkJo-fdmns25\]:[Ti-C)cb2>Ek:'Z(Q5]`msVoWms#f&
+%
+ fLF1)G5]K%O2^I`Stn4gkIm>PKRLC)'%/L.uKGh1`@AMO%H1sC%OFa/uqjOf5('u%;(W3[@1s/\o"&(
+8\C+#GT7b@%uI/q-o;om:EteBkB$J?*g][%dbX24]j7OK8_<?Rol<ai#"/IlJ:J\Z7#4ec&:cpXs,Y(R
+o_EoaJ"OdMn,<,Jn!ZXo%g:O;!Pk];!5_#q//H&fY_3l#61CBb$UQPC1CM((`&=<b86?-;LlFK8R[f?O
+9^b&WMf0CYakD.X7HYk5)b)72BUM?SluNr_nN:G,7)1c)#s8]FKbME[e%$_c&fdAhb&Ri'-a[nFNWFj-YQ+]\!isa)O-,['.a!oRGb7LT4PM/Vo/,D_:+7I=4%BQ5jYoquSGPIj'>/ZS:fJ^l6-Q\-ogMZ?
+r(fT)e1Db4_(aA#91+r_.nmk1jY'>,o^+S5<&FhL;cHac92sE!Rh!WJ:E<qHekF9,c;jC>Y9l3s%=)5?
+&R?2;2pjus@*-stP@[m?AXd=8p/R/\4;O3?BKC9W1@i*H9t9m]O9NGu4n]TDq7uJV#U%Q\APZ<3pMEuU
+?8mT$HX9dmi=I-I3%PP.P\l5E3#=,i6dJ_s%\(^&<Z6P-e=@J.g?j%+?/RV9$].`HFL*Vo',8PG@oQ'7
+KVCIQ)jKH/h#W:/'Ll)gk#j<P)WgcY@@ZLo[TT)4fqr[Yk8GWSG$apFo6P+s7[^)e\qZiVBf`,^Wp2XV
+dqmSMT"A1lg?-,q-C)!$B%jbl$*uNmS<[Pm]3#)=m5q32]5IMco-dep"L#1N:*-ja>AlmZ\KmL^_Z+U<
+A]4H"r*@-\>oGo)X)e'W1!=W#k;U_%\(V'!7$n\5d^LfgJW\10k(f1DRP&a8om-PsMIec[9k`q-jJe0\
+de()2bWVhUPik(4PMZ)fT3KukrNE!Y7NH]FlZq@,?fcT?gtV2l^Ae\(F1T]@c$\Crch2]NB0Z(fhf$lSn66'1Yl=[3#I7DO[PPG&2Xn+\lYfnOrVj;4&HZ?>$\=,"""c=Chr&;S,L)I63+iZ\*)mksY!rpc
++issbqib;\<V\t*h[1Ha.><kd(EljH!#Or#FQp3gV.Tk)(gA>"Yjq3E2"M3O"@%^$`B?/X]%`7p8U57T
+n1j"4QW!Zg!%Enp7)iL)@`-ZQO_onB33O!*'/k4mQ7td;HP`Fs>t0sMlb0#a$fP%RNfhUK6J1TF,J8&X
+;>!f$7`>9JXFlTah/,E"FTe@B!f_4M!Zfr+"Q56$J[%7-8Tg@EU0J4IP$rl,@EA]ho8%D5IDi%^7,hW!
+#`^Y%5"bWV/7[J@O34Pd!$Jimc$W-H#lrs=KOYF!N,EmH![>iZ_%GU!b&*22Ce340h4fNEMQDYebm:WJ
+UJos;&[H5sLS6Z)''5Vq^150.Y;[h.j+pX*G>5&@/E`8*SoV\ob=V(a-e.sa1'0a4(\8dYg\[*%6*n\S
+-R1!DR[:=&]ufG]6)]GZ=jgK1[sAm6.*S9Tc4Orc\Oe6H/0(I!#*@8#h^[5_nXjm^QVVp9950?4,Z)cl
+\n-2Nh+Q"`'>@r)b'd&u1e'rr.V;!O/9RiU\8JWJ.Rdqo6K;m$W`<)C<Fu\:@b",PM,JBEqLoFE`EfM)]!,255sHfH19HhARF\t*>AJq66g'>X:`9@?b_1_DF@o6RM(9qr*BA!PqMS3qEjY0pJ?a/Z^K?;S
+?kPmIP8&,%8h*(rV+i8BOF@X*.THeUQ#F$qNmh&K:f:_]KjtfSM44g2;!U88NHIZ[<Z.(@)pLld#puCU
+\@17gK>O(b%IUmn[omTBjL5R:Z<Xd&F)@2jGo&[14Y(.aXVIhB[rTsL9>>[h"l?l?qRfW$d/C$*qQ+HB
+_H7`d=X8A)^,A0r*7JP0h:4NZ7(O;jqrpkXFHjN3<llpe%q7)s(L)u5PM*Q1UG.?G>u":`?;&=nD\a;)
+1%nhpRW!PW)lPV11:1;DVSh7r[YspOfZVAQ:*sf:DqA<N2agA[DQN09=PDtFf=c;S:!1N/VWm+,OZYB$
+WlTA'm,IprL9U(__jOFPjXdO"@>/m.3Hk&HVT)8?"\-:eVZ,?)hhc;I"ded(b%!=_I.*S#Z*Z_WB#kRR
+ecooaGV2hNfgfYUm3p>ET*Ne+6^2Vo=OEQj7qHi88L_'K`Ylo+1`W,IEG7YGYkBh_.^q(7KJp=N0,imV
+Di3hU>b&>(,%S?GVK,_@esSTrA:8GnonK*@)K/b_Cpg&3%Zo>4%qB;-9mO&L?d%'*QY&7ER<;6ses]csm;2:GYI8Dp-O2eASD@STrnQ6d7quddDac?4I^9g;5@HN?BCnY.KXr[Cm#@(1\&S<J]5<(4;k8cQ
+c:rI#C2Too"g?nqU<ba`):ZhWI&^5Z-.qKjlE$2d1+s?OqVN@ac8TV8cQ:4KJNmp!LWMCZjPN&VI<,<m
+b^"+_QJ$=kF*l4]1\S!0*&hV74g1^U`oY,s[D(:ae"%+q9!MTUVXNr0J[[[9cVu9]D!fui(BZ,P<2Y%7
+a2bqTQX]*I_RT6XK4D:.\(934P?)N_UNfjX^fE6/DuEBWog_R9Lsq9$C;%cskATguA&2p:6fEBI,Oq*>
+`:.(<j*=,fm(JIdG#'jSr7@5cHRi^p]?bfhhU:[:=#8)A]='Mug%B]mEaTmIl?;W0p,T1Om[m+Y3j/S1
+PXBUGcF]cl+2O4JI[0UK2s#KiRIc5YT(e13EHk4+mCTumI;W!>2>7LGIS9*:%F(k,**eYTn(VV[f5Z0;
+KCOC\pNWn#j?'"%j'ED>OmhJos0jBFs7_em>NEM/!'Y3"5V!=,o:.rEYWWXR]u/X76N=_dTYER^^jA/O
+o5QK0UVAn[2(OD8$N7c1$TaKI]cc8sg'0_8oG9UL.9%*LC`!^7(Vu=QQV8;`]ApG4"$e+3_<`4*lC\KR8isXC[H%*IqtWQFDo,AF,7Gm2"!G>Lm30=H_B]XHUV/Rcr]drdU7%+[4=NU<oKV+(^WZXAA,*nt
+1IDNj_])WD4>iOc!Q1EJ_k\AAZld#'X2%Z[_s$Y>,/1j7&\fk0^GHD5K@rX477:BM2Uk(3'0Wpqqm5o4
+_6cj'X@tp]9YnY>Y1u(Vr&_k"A?Lk>'@<MiN"<jJlF?a?_a@P<MsS=q=K<+G4;8:1_f<Kp]XWnf6V3rN
+F>(C633A]X528%_@ud97@_tfK`bSgK>JS7#@CqI\7]]HVZr"cd4Gq>c3QsZ/]EUb#W'kCX3VmX/X4P%d
+E^sAX7q<;tPMW8!4htlI.kGL+ghfQloSF1-^4It+4=e5UU;!+'`ae?YoN=U-=iHkg`f)ShMC?*D<5R@%
+6HjbrWK0LO@7,^.6CYk]/;-7;2b#WW_]ab(P`Eb2/k'$0aV9.m]U245R)d.67dP'5nq+;qr^ep[8<cWU
+"@Kk%T#YZA8h>6UP6=KF"\5)&1\nnp"K0D"O33r8b,hO6UoVYFW>m[W5"(i2I$mV6bFslD`BctN\td+^
+2(d%-5HInne0_G2KgT[>7:_4c,D[btQ-7k<%;OjrP%lJ"QHU7(`I*n1>^FSh^-aHg8:/9HjL*2oa"eX=9)P+$
+XNXAL4NXrp8]5R9"(sN^834,!.^X:\FJ-c5eP0:?a,>emHT"/hX@h9Lc)fVn]\1QRXT/Gkb4Np$']7-=
+_[.Ml-.>H,TqI:S)p"N=a^TJ;XCOm2L;(=25K(!'HD(WZLm[heR@A:h]Z#kPN1L/*8DM<A60_.6o=6E7
+Veh(2>_Z$Zq+lCZ:;ltCS52l_btljg:)*^WUo$iY!C0o:4WJI\jO(@TZV/Mb8ehH5Ms/;h#H3Ql_CZ,5Cj475e'0"U,m16_*=sY7&Mtci_:8J0%2;UjWNc5)92su19]aX5LVaAec@h6SZD(,glH>.P
+Wm(,W)AsS"#sT\n5a6oIX67eCnfAM9bS9ra,ooZqr(i"19LUF+[3sDGa&5<X7[u0Ybl?'j'[]&u;^i/L
+j93]nS]TBOXpd_3oF.cOe'Q9Od!O?5[6)7JejOXDd)=NGNB0)m%b"\od2V(B$fO/=*)d"qdg\'%d$[WW
+!)"h8W^tK06\eQ$m`AEU`H8Q:KcX."/4b12-S-oGil]6q]i*rm:e953r?+ln+3[[_;Uggtobu8kl;EmR
+/p14:4^$>$p/Gm<;`.'G4Q+[W!Rk"o8nC,E7*sD1UWNFTes$QhC5]:FTpr/sQ@3U/okr?O%DCi!<m>8.]W9OF
+6W?DZd4JhWI:Pp?('"M079!NS0XJ$:-;Js+<:sPI'i<5QJAl'o[DX^k]i:E,6;I]mQ;ihf[96CtO4FbE
+:5cU*I.l3`03G"De^YU@j>bY#@on)'f7fAJD.Q;NA]G1(='5J\KFq*&"k?Uh=cI4K2*3jA)+X;*8/2uF
+lp=Y2Ti:W)]er$MPhA[jG$81<;'Y+('pDc@WBp3&a"+aB'n"WFN)\ngfCb3JKj%/[`n2a'=?5>:j\&""[*D*p<H2;EKdN\(a]I;[9Pn#rAWJ>fNRb_TdZ'.4qoW*5P2%(Ag_H&M%@'t)5dU-+&,hki
+90Ug_1g.6/9gp5R9q0q?50$=Lg!uP3KFM*!$<e_-3i/UujUYEeVBFNZ>\i?K?,50Rfj#dCLg>>OI@ij>
+XKi"7g[uQ?mBG=SZ9G(pUB9H-76sa]E]Q(McO'm2KYZ?-]$\(KeeDR[jh=alOPAUN?Idq>jhOU`_d=G;
+gb&*/'pRKQcWOaFg1^<;IF$L[[Sf!Xgs+#F`O@umk#BfK<s,;Kc#DATfNe*t<uV!B4&Og-WEjSIM5CIf
+oljahg0ZsZ<2H?_kh&X0JD/i;[9]uA*;!P@]N#j=hEA3Ih.kFB>hPQg`)Z"NIHb(OhHmW&fZf!+XgYW[n5UaQ
+iSGG\\o?Ob$0!!L@O_%Y9f1j(p,!NY(BsS@[J<R7qI50U?jp:Cc(_d$c/6/G4`2c<7KME>$+F4D?p6-m
+Scq`X#ESi7h-JXN[A[O]$">YOf::mJ6sGX69JPW%?6$i3mLI6:Ic9fahDpZt7Ou?o.a9eniI!<;qCUbS
+Z*C]ug[6"\/fJ7!+CF6DABg-:r]&r83FJ^]jXGK77:j$D-(tf-&$@;8jiG[u3EERj@c]RY`R<Q`>/sRq@\_Q7p&\_487MN-?o?;Bb/daZi+6U%@r<WdrWqU4;.c6j&IB'0d%o<!.V?Jq>GO19%M.+_
+Yuhc+?CU[h4X!kfRV,WS3^t]sp.&5E*os1o==-ehSfHV,HGtSeiRWG7%21q12J/h#A"J<d.MQG_`32X1
+j'GgK[OBhk.HTD9f%rjQc(/@hk1pLVkiE]Gp4t0RrRpUUa!F!d`\Z7A6-7A<Zm%*RD5Z3M;eS@_SH1NG
+Q946i+WIAT`_8*mmL`tF&nC;Yk;?0U"lqHs9\Vt,f@C\4`d#pSNl*28@HJH^r_?ejZKeO$9MU*&1[\c+
+'Bgd3lRoJS(56*nJRr,Qe49RQIUX)+rFApLCTb1lB"Vp($>).)AYl2(3sK(s60W_^k)Qc^VR+;(?!u&nC$SO6
+G&Xj\TOc'D)9oK#m*T+_7V[)EkBa#R>ejd%Y$8W_cH^e&#'";#NGAD4lLrZ\SsaCiKPWj*m?(H)7^[*W
+VRbOg<(=B2ZA`%SM<PLRlb:&M53-+cA6KJX>t%(c<bL6#hX6C_YdO"<Y/G5%iTeq"Nn26#[Rb-cTPU4i
+D.+:J]l-6E&a\VMkhc$!^8U"NIVRH:D)SH^7WN%I?uN,un##\nL?n6)!H#:IBr88s9@2$;As*6&mJ\ii()Bdoc"O9cmS=40]VOt$4`5-?mXDuiV?Vlp28NkVE"<$<`tT)neQ[/4?EQlVr9N"TEpqqC
+@5c=Op'a3oai2iVTMG:9pAJ;Mf@&G5EMjQ<NuDX7?#iW'jUUZs+"-SBZLC%WY?(m"DMM.s^/M.KA7l5:
+0&U]h0lnC[E98rqel_0A5j</Dk'"3c#+4p>..a&Fh;1f0[0p^BHYOW$jPM8)k56HJ)c?tek1:ZfAp*>7
+nSA-lD*K@L#&e8V,O[9/nWtQjs$5l\3c^!:o\V*<VM2S3^h%-i%t=h(B.e._[,8&@E3D$>Iop;!/\sV+
+d"aJ>`oqJiOn3`Rlo-A9qrU=%q=5)h?,&fcG<FgGH1V5?FLPk(_)5jq6J]YZoL9V[me>R6+Ln=>n'4+=Y5.\&
+>4g,aoSelOLN%2:JG'4CpMWf<02QN;;';tuo$!WsS=aq'mq_W\ooFTHrk!4]!GehpE:u/$B3fX2hK+a#
+o_4,bE4bY.)"oe;P;#H+TRCRtrsaprDr5-to_)V;OEX6PDag^Cdl^:Jb]_T-lDJ;q#<d1L(&%&fmf_nA
+VfI(+@!I0FpLg)K2gFg\!](X=pd\9.mTFPe<b8`"GR(-a5CVi51hFF+cnqYF5D=(u_Y@c9HL;)aO[Ai@(5\rIps66r#IF;'N-e(&U3<^#)cbksOa3Wfq).9tebh$k]k\EUeSi$0ek#UdF8$HCq:8>c
+2;e99_e7!Aq<+r+LW=QJgj0alBQ'Ydf/%QYI:mIOqIbA*J'`(/W:cM$ZR:'5B3b;bXLFf7pi"6%J"Pll
+\/qiY<2gd_=0m6\gj<\hrTM_[Qac]WP5-3=fGD;jLV%],6i*U0F]i8MO)=eB`,[a&r"gJOYN+9mR/@1u
+I`sV=GM%:mf`)nsr1>IYs3#XgUZ3_tmN,^4n'M)qIsi@iI4m3_:Xs\crGa/DHuJM1!+[tf&\t'$BIjW,
+#DGJfd+F",,n#Stic/Y57Pbj?7O-=6"EHpMP"4SRBe2]a]O88rEnPiO=QBT.g&MG\hK(ZG:FB)oh!>/L3IiO-
+H:90?0r@XlJOe&gT2DT;WW3BB[]<W5dO93@%0FL5S(;2;3VB8eAXV9><f;+?iH);/m^F^[U18G[?Z2;.
+V>C?V!1?W5!#W(Z!!@lU<31eBc&g(ZEnPi[AsY<qB/A!Fr6%AXc"V22R62!AUX<k"HL23WA[0s)2LB;D
+_f<<E=mnHM(BX]T]l&#jh1#rfbN3ea4FW&)V6&j"3o%q$B<TkP?$\TUheLX!mJ+;bIlF:K^mOCMdZ9':ht$R-Ic!B)fCAb:It!IUo)M":'E%pHcl<Pt_%9id#/H=J&s/t88>n!<0Vg9/6L_'8%)\1V
+5nCn1oLTP2b;;Qo6?*u>'ZI=f1mkS2P>)t8dCPM[.8Kc%gr=&t0c`b>"E>X,dQEX;a\"R\:ajb.T-m3N
+S>e!\d_(Va.2(.4/i.>iYqX5_Cg<?X+:&)M"[ND\!$B+p2B^99N9<2r'=@!ccEl=!50l%_nNbEb"U6*_
+Y]M*X_2s?e78Xb9+\0s[ALBuGNDl_340Dc%)R\kiW2lr!2*e2l.e8EjXj8:OZTSh)<:s9B@TupbFhMV.Yi$@[
+.^=qR1=s`J/+FZ?m%kq"Wt`g<+#L'7+(i!=h5)1*(1T^9>>H!7DVI%6[ob_XoriDic#(@'>Sg\bG$0#G
+H$%nEFm!r)cPgG,db!=JIaY^uQ%35.rX",5\/l*4i>>l)7`B?u?&6K;Sfrsk0go0"`V?SrNT0LSGE>pP
+*5-ROp8l8S83%BnQ=P8i@@51tRZf-")7F+Hk?6T(P2rp?I@"T7l=VlLF=r\?:g-n`6>;m;SZ'oec4>Zp
+]"So[CHBHQY%pTBO*Z<jlV,oei"7^ED#6q";H-kK:8?:I9j#,I\#/\Bf%[q3]\Q>rH!`9W?H]$TQ7]@d
+C7<tDEb+PGO_?HX;\<?sf8H9>nbcHK9l*lQ29/_OpHQE7>n9e9oUT=cf'iOO;fm/QInSC:\&)@QpKI<:
+`bW9^GMm\Ys,#\/^)r;nj&hU/k%!7i@aO>omnVGIEit&[F'27>0P!BAYOMH`enpp4+#h74rE52fPtYP'
+f.?-qcXZ83J%Encq&eLJrqPsXrBLN9fNjn,!.a,S.H<bKgJ_d:Xg"k7j[00n9653o[;J9cD#n&*)hZG`=Z@3Ei?*oEE=[V8^_^DPTk!La/kNmi<ICs?_WQ"P[JLr23ca3&on-(m&%>)X%O)j`LMkr&\hh#3
+@T5ULd39g<jUV?cU]64uW[pBUY83kV<K",!s#d_@oHP>e7''iR\7U9MRJ\@XYdkpq7EkK7]C:g-h<VdS
+Uh(W9G`U8Md`5n9+J]-YH=N'nVO8%s,[?='&i)tuknPISUm$ti6;,EL0dbu0CJD'/0M31s.,s<aMpe%/
+_e=5H,Rb'3cn\]qq./2jN3n/YTWgj%QKk1Q\r$"S-nfg6$tK,>85T"?5DY^GT9Lp^P6MrLM3PC0!BllH
+3bV6OM_\nUR@@+JE(ZLdrMKM-S26FF34VI-,p]CZe#mo?g#5'VPk?<LM<;fjT0Aj'XH;`X6:b$+qdu(7
+TQ.8L:b!0B,LMg<Zn@/)q?!!s6f=[n`,\Co2+HZ.S>3H39[W]*85i-7PS;bqcH9-ZBk6j5%UsLCfFJ$n
+GqkVh5+GPtFY2@2W<D7+IXnDjh^:9MSJ,%kQW](),BP<%FZs]faqE)OOjp?D7V1+PNDaC(=fM'8Xt%#r
+<+T'<WpnjAcC2.C.Q(j^FIncGl<?k2Q$'6phRM0nX$.odq6/?A'>5dX7B!&99C]lWZJ,giC=NMDZqeQm'2:hfXUh^<?0g/HWFi*BHq`%5:F;mjBTm;,[+:8dg07Ehm8^9qQG1l&qFs#OeTS,ShRVBsX\:6Z
+2jK,2ZW"DOE9YTQK!bBI<%?^,Y%>;We!?iI8)e813MBE]?+;A"[+f@7R:gZ*U-t>X=K9p1XnR!Lf#c*[
+01BH_pF[LngNe+KL%INodbS,3omUi@\\H_Ls514<R4%,#YO=M/=;r%pls+D%'GC,llm,HtFdU%f0e$7;
+Bnc'<hkIP'_Vtq6LFhsOPI@dL@Z+`RnQ%6LfWd?h2fjIf"uX1ugDX?gIsg?]WMZK:iETTD!t%9u!l/aT
+;u2,pYC4[;R68:@(Y=\,jk,0Q>4(.9Yc-jYiOtEG-ImgoEi13bbP/Us<QrdWo1i`=F*d]G*1[:RScQkl
+h`GJ@ELsGLI<]o*115J=JrOUHIJA:)@JU=AC7Um4\ilPAR.l=lL6Z?H3@/Bs(Pt_$-cPkm'^>QbW-'F@
+:!G/tB?]n;ok&ZflE_NbHAJJ>2FqC<#3056Lf*E.8\$jj?tV%.F<%[+HMLCojh/",o"N>k4#EnALXVZ4
+SbIiGU24FWjd\63_jbd9D:ZCS;"kE+gj>Z2hEf8a[;N&$S%j/c*E>2n#(t8\!e0?;#DfJ<Lr/pRo'biSK5.!D_j441E,HCHGNKW3)JXt?aUr2D#,^D8=,^lVA\.W%mG<5;O@B+VGk7eG-b@bOf^j0eTQ)^;
+])*fANP2oKQ;#Fpmpn^9T?d.2d(;bW/0iBOlsYi0][o#UQJ_fb`12eNSNE_@^8'0NcJ?b@K4)tGYIHL*
+22Y%U?1lL^dJ9DGlR\NMEW4G.GjfG8h6q[F4U'X8_\U'Mk(%D$0u,jiOO9FK$?rWgbX4?^*hXXOG[D!@
+HoHj0r[Z#'D]m;HQ5fC$2o^*W+6G]CRe$H&!-pd6+aAbN_KJG+C$eR5I9r].r+f8=Nn)oJT=+'KL*,!L
+qm`d!WTEh(h2Y3VP(6WPm/J02F%M(jC1B<f,s,a](Lp1``^*_nlEXI9W`j_8:m$=%5CNRK!.P75Z(.;a
+DI1HU24*V,foP3odrXrggeIa<ReUWiDuTW`[f<Q+p5eq(Y3=a0mdB-qiQk3dmJ+#i'Z)O>NUKX7Amk7,
+54U?no8kNp0+d(FSH?#LoFO4i:br4c0*5hfoV@HM0Mq13#k^u"orqp1%8>f#rs$gP#3oCYO6YJS`qRbV
+p]Pj'mth=.P5*A_rpZ*5:2XYSSh!U2fuP"Mc_rT0XLlf_X3?sbO1=HCaS]u"$d['+0=LaRhQ(SabtuXiMQHVBD[gU'#uK?hDe/nZr<Eo&%aaeWYkJ-8lMue7!9@,;YS;HR(nrYXIaBA8&JYH60*A(bi@u8a
+;&99C%cEBJ_=1Xc0OFF6B+qO6`\1fHYkJAW8Il5ErFrAC7q1QhD"&f6#c`Lm/!UT@OVZ>Zq.Bj+VI"O>
+>_350jbD34d=TG:MHE>V%$"m,@gNOI_$g=N%ETJ+&Z$Bg!uc'?fM's6lAH,A[20A7i%D7gnZa&&im#j7
+'X?+$n^S.Ifaj3%hU1>dnH*4j0WL-P&8t,@dDI%<m0.JV8ruOG0M(bM-n,KB+Aa^70K1*a,4J8n&Wnia
+LsjbT..ttR##[.`0P_\L3utUhY-Cmk0tK:u=tu%82=Y;bn]MkkboG)t9JLiPObjFf[3glR\AK[3%Z#/I
+T)LI1-a1,j0s)A!V>rlO$\l\N&sXn#aR$(=--._]P"?+Ed1+:Qb_V0,10Ej>d3K=[//#]K;Ej.1qZ*n^
+A'sNA0NB:b;'0_.do$,gUoPYW3s<tD"H=U;EpEg*m4NE*+0c7'1>8ud;^0XG,4cI&&7ZrJaV<2E/1k3&
+.=DZe4#4cQ;mBscEih-<?MTMT9*,lFdW!9K8>d&T1t$:Z:Ag2d1kmDI-doO&nspYYUD`W\)D[@&1Nb.1AiDK"l/q@JDg=-u[466P2mYR\;i_nmXPD993Cd?S;^4$gX#cHJ/8=8uda9W:.,Rt9mkHIL9fFZo
+',%GQ0J`X%&e$V'ff`+9/jsP?..8k30,)GkLpQNX;+0H.+ZhKb5KA0t;7S[mRkmrH5nfqX,5Qs_,YIYr
+;_qDjYb\>L,poBj9&t7Tnp3"=MH5o!#Hj="Z)9"#!!%Ou$'\.Q'NIRY:IQOS7'_RV%]M^tZU&3B.[34Z
+ZooBCFEU)\ehhY5-XSoUs%(WA3n03^1<U^Ms%1B7/Q)(0Zf[7p&BhE*j\s,]kH?P$+Tp.!9FhpOoXdb9
+oh/.64Y?\*Z0L=im3;iV5>+?u[$OOJ6o6_$4&[L)1RMG<<7gb\:_XX@6IS5sJO:eB6ISioYGY5r92X/6
+8k050Y)>ZKgC<0<-r8#FP[-_1&-dZ3;q4-'PBfVNb====:hYPYP+b\rqYMRM82Q)mFGi^)nQ+/)<qU2k
+ZaWNt]$QH`4>bL'e?#p^Yl[hT9VfQLF59Kp$M(Lq"8.j$eB^"[W:+iZZh3'.<9#3!=\a*\:8SLYotXs7
+#41HP:XN`Loi"kuACslh1$faVob13fDE.=R6?7-F.-bt3@n9Ob8'K6YF[&h`$:g@A2j8MdoPIls]2`gp?.;',<E2%:gLA((<gCR(<]=Mh4'[aE9m(kp:@,2`_+bOe4Hm_2E=2h*NESj$4iF<3o(?U\B4fC9
+A`T1MM-F0,00Z?o>Eu[%ZP?^;EG3i)2`<j.<QuInH!N(]?$60U[\[_mdp<XS>.*m9<?#:&lSR.Rf'Z*f
+<`_n)1ISW2@!+^7?r@12&T*iiD53//2*54ZQXO[Y@e>LH[/!a>b=<&YC:<^a,C+!(4_XR!A![QM8i&Pq
+)Ip.L*mPi]O;hb-+(^`5B=;hnFe&$L9-KH/=nZc,f/cC0@rk%VB5<'=E=Z7^9ec9n0m@&$;u(E7%UV`t
+G/sna<s(tqF(t??@Q/RW:=!\9E10h:CY+bc\!IquN@PWjHZr;-<A?m]UMUbQD0FZ\2W9"7c$OWsHkm#e
+QL>;""Y*OTDfF#BeR!msm<mK_@lJ1C2fjFllZ!%:=-3B19G(g;$!9)_>&sd^OXWF1!HdDA9QK`H<M<)?
+9lq1AArA$L(_8f3="nhS/^c!Mf3`38@tV7&:`&/@QgSYa7=N@<GBWg?Q[]:n>?t?<C(=`gGCtX(h0?AQ
+2ma]][uks%\VH/gJuDOTQDl65<?HjY$obA,<o*hl1]uY:M7B1832)2]WJXfYHhQ?E2Uu3%aYoLC8%?5_
+<EgE`SS=I(BsPF*pd]d88WAj.Il9egpE;YC-%cj=4LD;4p^:Zc-tYD3d["[#AVYh^!KY;:NqMLaeBMus
+]b?]cOr->qQYDHSf*>:DP,%E'pP3,X@tg:Y5iQ^,(r:s:cu94A6.[eJUJYhRc%l(BQ5>fQQQm7>d/FU)
+2jmm9eg``OKc50OM3t?$?k*41*\j(@R/)`/R>m)LRu8,kHPjAC0p@jQojR["8'oGK))mej3Hq_uNOcrj3Q70'6]O)GIotrbq"p*g.j('SFZBq&\I3$bRkHe`AMo-6)<-'FIZ\hcKD7NA\]^LuM0BjD5e4Fb
+,$U9$Bq*fuS%"2ob^U=E\!?c#Q8KhOM[t2ipGJ2AQZZak0Z07ngR*8KR<aqq!"&^V&#FSVV>=Jo3`DI!
+T6kh$F1NRV\oFN(`4=ODVcg'qftj2)MkM&MNRX)\om4u1eR\L/EgR#Nat[J;pR`97F?/Z<[m)OWYCek.
+;#(cIQo,Ok+.sJrXRl1>37XuhgJ5XhE4Qd!Gt4f98ZpFoKMcBK:uA#BHVsQrOW&Rb':cqNH'<3b2j_"L
+q3@?d=f'jnVE6$.)^2)(Of#I5Rs1d5pqrPI4/Xk`3?!OE(XJbd9;pS#[.VUQ3RNjdfiT/bWn)TZ22en'
+fk_S?4h@u/(b))F<KV6'XH4$:`7'ADQ>/mY\D*4X)jc_VOgN:*Xco`4g?Xu*?%tB\Zs0lC@bm`ho`9CK
+(Y\i#;3!EQ?uhaPF1Ng):P(ZrI2Y)OD7_<cgE9',-`.erMS%8+m)?YOFa^kb^UV;J(Xp!#W4k<L\_C'!
+>SFr9;71_<_Acd'\i4H:`@r5)O'8Nlg7c!"9=I8_T$K^?\tcb/S\j(NOSbHUk+T=j=iFWMXaC_g*#l$U=%QRa:jGF8HjlG^)ED$6]%hk$*.u>&LP?[F&?`HrLdf'F@l<Euad8Ut]@3$MRf6mSM)8;==KA8[
+kXsUsVHK&(a/tZ?ECZP>^bVs[>gpH8$cdW*5J1XS>G'2g(S'8&IsY>.8c7Ikf=&9*_]*=-=S^;@7^BFo
+JbUEYeB-(jgT2#2_ik(^r6Rs(l-e9!P8EW1bhK:jhp'r1])=qE>`7)p8^r-I](g3=RmJ\4C":]okhH2=
+Q5r)%a4=FB]sT^HI(+t1];>dBZ4qB,,?juT]@)ug)-dK[I?s4_0?0OLg"bjX)OJc0kC9Z)[N,TVq;"Qo
+iI]kpOPLZ!\.?'^$/8Zq\1n.2W^ro@fVBPBhAtM1>0O?u:"inAKY90O\Z"l-IG(&2e,\bS_>Xf`"lPs]
+i4]HT4qHUY&`MRciZ8uqSPRbK;<"*gC@s3&I9nW,3O9^YMu9J?*6ZLu-._Lq?MiPd\$suC>\AJ;WdTUK
+2+^2uSG[G\N#dstSQcK9HKoC:]N[.[S9a#Ze_33Jg)cHW*N?HN%GLaSNj/oGlQoYoKA50WX51\K,]?jL
+a6K51NnkeXl85;bj6XJBh;6KE\d.+/FI>4ehbX8]BQqrGgoZm7iVk.^IeW:pq;OU:mp>n\?N9MD-e.#aink?[!dirjOa\?I3V?[Qn:Lt[Fj6f^YoS%U31nC6L?MmBLplV.EgKb0^ZPNHN1V7&nqH8Q^%ItH
+p"s!Hs'ta5l.KC"pCqu=*M<(tg\80qcQ8Q-)P('G`R3OQLq^(fhQtT7chY;gO58!T*(l:FrSF!jTKfZg
+hV%XK1j1V0T`+WX=+/Sim$H%Tn@o#&?dns;0@ZWIn=K[Yh\1_Gh9%p*pFXq1:NcINDr]gWh-Md?O=2@m
+$Nl'uiD>>P2B`Kc6K4)W662^!MoK7HW5O!B+-+B,-A1df"AUQL!+S=]YYm.T!PtGu!#,\D!)D^@g%>8p
+6(^O(F=H;a.hSSqkn&\f]Eg_K!%Kid9WS;!2ZP?c\La>e>W\bB(0MW7d35o#XZ"@.Shj*;>cF&O[FXk@
+]j3:5Wt#&&>eo8K(d'\m&V@sYlujm*o-&=lhI>'jKtB(+c"45Ir9e2^S'Pd?)GLs4&0hU<^`'=e]3D>g
+lh4Nl[b#N+h/)hTIGXjJ\_urO>Ri\/Oi6@#q4)n@4.F@UoD2`&[o]iam<&5rIc#Lag$nb6?4Su]Ka9N#
+$@j4*\)6WII(g[eO5K@#qYpJdg-bB'TaEU]!\!81K)n6A<#5a)YY'AcZAb"hTtp.;,'#uRe2Ik)Yk!*P'FEP]T>Z6_9b52t<*'i(Z#j=`_\%POJjBsTB,i<q;tL'`!!iW,/!9l4'a,ZgM'GS)4GtN-11ZXu
+8b/+:.S6qQUFLd!nF0/.1>KIj]alC.n]\1!aYV/cP5-rZZP:QX:")Mf3B*&<mg7;g+AQhsTN(_O:_Wd(
+6-me=%a`TT2&+KdZpNA1%]==G/5fHD/P=H5bqDdi'_OO^:fS5:;:%0H#tNCN/IPTW2$H!B$Pcr[;q0@*
+>?ZSKm-tB+F\R?T=;5%r7jI]e-Y-?L[<lH1<c+77f_-&;N.<Ho\s+L4Jn+rc5l,Ag`QR<KB\Crr#+26D
+Fk!?>8u:=DX,>HgY;#<cWI.lmZQF6q[Y=Zmi%W-TJmN[O]n9`Q7MgAZ\0^LGgpd80MHY84K8`p"^,:l,
+2DQ".j>3Z'3TRMI9p'!)-;Tq=3GqobAiYTYQ"IRR=WP8="8eYPZ0$H55Ome`)<d/=CE2RmKPqc:=9Y$"
+_YR_gUM3o?Y7O*!5.)%m)TKOrCc`>NWdl$>>I*Vm*+FV7EV,#.a>09h\]YqfZb#Te`3V,?dboa3k1Q()
+RV)IRJMqJ[)n@ru>]st@C!4b8>L6L/4cXSGa#@(#2#f^?drgpsb#_^60@VSdmmYRp>q]R5=$2OBc$#W5;[bM\NKp:0?2&PnGSTsK7UKt3ZB_E_h8#RIQQDu\G[:!SDu-&4Q/sL08%48YG.S^J2#]G1np!AX
+U;(#YO4S5sM-o*+rYRg>Kl#X2I`Zt$-Yr\Ss6I+4/fi!J-OBf],R8=.-3:o\%0I_@$\ApHnM?JUceu,j
+K()eL+;0pnR[PpI0R^@'W'^=tUJP3WM>K,c7gi0u?#,F7(IL/r%9m'`C+/3a6Y'+!%uY?s/]G=i2Y>hR
+448#KotJ3Y*>;h>%tMqP#t6gS73ZhQ49ecm]dI4L<Qk5gObNfR7onqc1SK`0RP@8;`oe)\B3$aa3BJE"
+)^D]h;3(/M4-MlMRVV#<cf.3l..FJ_0k"BABlkrG]^mBG.V]EkS]D*?3=2B;HI?CpaL0\K?ISIQbX(]`
+8D*^p]TeZoSB3u%=LOgNY?haJ=[)Xnr+2nuPqiP*`jlHrA_Qp9OZk;7$&L@u1r>Xm@V!\cQSIW"gP=-e
+TL#QV1u\?QBQ?BS6b%ArTu=Ks/N+<[ai-2O2!:DCVKF_p\IP<4P+?GJ%hM9c&>C^DDeWN'2obk1f`]Qm
+'0^"g!gPR0@u[-\(t_9P0X9Y0QW8)*M*KYNlQ$>"U,)G!bK;fEUO<r<%`U/"2/o7feL.,h?0BJp!<<I*<0^>kR)rEB8ec)s0Q3q-4K;GBN050N$QPZMWeO3hVuW#SISNkMf(N[6ZmucCmhSEP^82fLW&2f$
+a;JAblK[i=bIXn.3lP6;%;2aW@]`Qi2_V/<D0#4PK[:VB?"d5[Y4^)R=).84@Z,)l<X'#X>6L"!_a0b_
+Y'/,/a#Ide10K^4kZI"p@k>$SZPI.ofX?]"lqNk90QMIu"G]._7/':HSp\k;Y7d?'Ej(br]\=*f67npG
+[ar_/:rRTgURJZd$DP#b35lbL"/&PP>2iTJ;f^[)X.lt1O]#D_7W*(pF(HNX;VR^GB)QMN'[lIeWo-D.
+3nL8UDXARYer/hJ!@Tf@U<._D,@7cN>r=[M8d4N[f=U%BpV-`82:#3?0e[kj*_tX`&V@6!$XI[d!O5;@
+Ftg&B;7=?t=6jd[0\s%PfS:#I4?Al^%>:s,>/JO)-Tpalm^(B*bt_<+G\QQ+`V@n&@m#$tEV;VnR**RY
+RlQP74?uG3b154EN0H)/XND<h0MhU<L[cuu[lB4+:gCC^bN6LML7[L8CV$c'299lA?SuG#0lU.+dA/U_
+0P7mX4>Fgfc&Ug$N_=_YYU4k:RH2]:@e4)JCKA;f+U2:"_gO"-f=s:7ZV,&.IpP;$Wg-kGkR5A%[.==5
+"NsX+%7P_g2PnqBOmB0`'-T.YYKaWb@UZ@MX`CSQb5#7ICQ3P?c<_m;=JlnMQA&d'(,4D2=!2$9CSshU
+Oso!"A[VI'[.2/fg=[E.cHWi*ni7&K[[/;)X&+saN;(Ii""J)WH+Rkf'A'XjJo;TP*D$0;]#J6-k=F=k
+?#KSu)Tu7&8jAabDYUej"O^t/,JCL=/t@V?4_ak!G;spiiKd08/si\QGc%!"3\[+<lg6%kNX]9j>$AZs$)PiV($#51MGqLqW9!*%k8]cPo;h3&l;jg.I)0>n?3S3U*SK7qds#]SIFC6$9'O#VVl%',Ye%7k
+lPR6Pm$?&.G$X"f>=+ruSZB2#'qaj@:UD:ZbM$c6?>Q1M+8)n\\5Ea"[5?/SceDgTH='S>#Gn;59(ms$
+-W=R*1PB!:)4:7_^N@..UNjDOFSp:u\ecEG>b<V2Bf?iL;o=H6?85+/mh"1.$Tr_D1[2?)P*&a'N_%l^
+f6NUF7D+MQ'5pmK4mt/gh#j2=mX+JGIJ!=M+68W'8b"We^Z]8=n9Rl5jKA6+l9517I@n(0550X*WRkNo
+5-M1donWJDEc(P&[Fm_;m+K(1[rLZMgO#Q.6XSUDj;`7?^WZC,j17=YGpKH'Lmld$OXIV2_nQ<B^=t6L
+MsN4:/jBY$]bl^@UW^;biBF8J\(g11H.>%Jl8+'F4O\r!)or^='"loL5o^E<_&4enlSY.pYe0*,j.e?=
+TF+!\Ue=:N_/ulUgHA2k04FaX"8BLA,sj#:^)Q)XCZW7b.Dh<!^/QVsA1U'C/OG[A%$8Icb#1M.)EKtb
+5^WdR6o2_[$H$BZ-m4++1cW5oC,RU7Z-4CVPP2cX-:>uO_;kGXgU93a5XF/4$7nEK.uc"TAgD`t6p*`."9:g-6pnQ15SDL#;^SesEjBKa5WL+*>R<bk2T6X;1:&ON,H;F4(WBn1\*OSj$K@fX0r_H8_.6cd
+4C#]Z?,::?4ChS.oNX1>3NcUR^a(ZUe3TZG%\jY/7R<*RGlkhHL``Vk4c9G+R;]d<[R+5:[X:@d$N%C:
+#Gh046M,1;PN0O@Fi)4h4k+\B%!W*,TgsrYa#fupOaFYbAjqZ-`_1Tp>W51f;TL,6a=L;fK;uN,3Q%%j
+#br1oj@;V<be"!)_qXiP1lKGF8.]gf[Z__&qeSgG`lSm*7&6!ej@I@VLre%\7(OMM'MUM1e\Ekr7-"D7
+;nb#WJ4N(Za>+(;U^=M_V2.L[_%SgtS:3EX%8'T'\1Ct*e>PgqMS.04b)BapFC2!=@*6)@]WA4UZU5hY
+>!]4qLa6WUCp^-Vf1(k:00mL[91g^.CUI,Y]6n]=Hu:c<"hiCI^+5[,<-uh#V*_P4_OPlsFLt*1]M)d,
+T'UkhS@)!Wf#d!F8aM)R[*6b4c,^:_^FY*j/3:%HNM5]17'f%S"?s*G7S-8P8L0M?"I?-ZPYHgnc)\+o
+,hBh+Q*M[a8>Lr6*!+"MRn9Ar5Y3MbjIDCuInZrh9YAZn$SP85%SA7)N;R-YPCZ>:ImEY(b/C;KKZUQ>"]"uu]]<-&]^jB2YCKR[V?GC.[-gR;qRCYC:UKXU]P+fgM6t0e$s[PDWis8I<4M:[8@/=],\%FV
+^8a7b[2d$,Bk,#E`(X,+:k]"J=`$0/ksGmV_#taQbY^t0kKtR";&p<I.sT;1L!9K2X>:Whb`!\jh^o!+
+3t0lg<<Q%F4-k!=9mf/gI'ZAu_asG=;;BgOoC^AgYKd.DZ9in5/5FWQ"I=,Bc<J$.D%iF+REfi*`_^\(
+1c%(8E_8(2;_8MQ<:/#M$pe.i8rtT&>r2u.og*Eae"P49Eg9M.B0j3adu?T*/H%u2L/72'`hA,&`+q[A
+fh`pI(C^aLm+BZ_F\lO@3T<e1]R.jh(KAU*$fl?8WJ==33@ehEe'.a="YE_S'\-J'<HTpa>ntFt(-9C]
+;KP/ugt>S9M+p\a<V5$D3pk=YYrrgTdS4+@2'C5A+]]mo<Xg.q>@^a_+A$o*Z@n^h\I:DbSMsP"eR=tI
+o]as&``Eea`Bj[PWfeu^lV>XS;cL%:D*-&QGTF."`GG6HU_HG^X!<MdcZG&B!]Dkse^Ysl1LlBPD1Y_;
+9c/Pne4NrAF[a<h7`NtKe<ED:qbOZ.9#?-teEmOb@a3L6O=pt>.nOur@]Ru\L!^WS90H6SKiZldES6mafp#JA-!ApN3RtF_:!D3hquG4#gfb-?<^gZPKjdO&KN:e%>%JaC9r"9H@b)Qq<`NYWSL)j`-JA%M
+;OqW-rNND@DGq:>,,&N"X`N$PEk`0>;`SQjI=kU<Js:sIfB"trPc`8BWmcBDdriE0]W>&NOM*eV06q9*
+`Kf2P2VNSYc`!!`eV6_Ms3sB+.YP@!EsK)jlTuUXg`eo7(lCCtN\@5id)Dr]NRL(CVE%A7d+!HhmDV1K
+.9e[`fra#^]p`6L.bWVo<Lo`/I@lVfONfpp68]l[`N37NjkaLShB]_aS,:*W(qZkC<kYbE]d[:8/R'Ne
+h6cG_FNdW/Dc]B95de(&A67A_]\HCC9#\b.otTCL^u(]shlX[7)Nn>t52?["?er9MD%P23K\Ug\fNeut
+BYU1@+'=&Yck?XF";t=de"--e=QS(>4W<!#$7>tl?#>g6>uBFCmjMKT?/=:AeeI!?'gQV=9a0E\UUj$.
+jXdfi0-.-#IHKM>*Q-GH=p<tnQ(6^--sk`6@P-qEZ+ild<8hA^;Z6,m1cM/6Q.JY_cKq?&7J:3>=@$LX
+gZA?/"t\Mu1Z,V:@k]HB[?mWDrn,&ai!o`ojoND95%$7hi'b'#o1S"I!*m/YX$jNuSRl=A3S!Mt.P;-,],p$&%LeU-7iP#[<D^R7s5M`^iC4RC`_5CD'@Au[@>7Rq[M_g,X^V_;aL3'd2BHF1<Ms.Cbq;m]
+dhcI>mS^c&i`99m:0cB4?"LHNA]630Ak^!c$q2bU@\tQUXSU[sNm>V_j*EXch)F?d]43ERjK/"2^22gi
+f&KBn>W'mi1hUF3Rp9cgfN((-JuVpiae,EPMV;+hF%PF6E7T0Y9Q!m/V@DT<Xln7n/;`5eSHdTUPMF/K
+eI\rYNb:h9@-$/kk]UBJIYQBr:K=7JjUJA!%N3tPin@]Ig,3QtDL?.6Of(ZM9@b1j:5fHJ?YO+Xl#pCt
+IUD>oRH;,fk`mj]IUVA*ghFuc`Ei/8mUkU039'@GLs>ikShOd-C=Ams7J-;>FZjC))+V=pB.RPr2KW=j
+4Q&qhA(cTLL4%hmW!K4,R_ng^`^QDVQY6"]0+.KpX-)TZia$-IA<DLI<=e%HLud^4C\ER#"0#t2Md?5P
+9cf:'"s2Rn7-Oo:lW1I\I];XValHcm<R/c8;n?e%heBfq(1tBsh=Jc.?f+>G?WFe^:5*20ltS0'M_6b5
+X>4Ni?;ll^8r@Rr!qg&@Z>A>.6&j4NSuqDr4DO9+B5Zb^Ga7H``JCA96IrI]]0ts[aCt80DPhdK@n#^B.E<*$ff%Wm^4b#h^$H6Cmk2BAmdqi4_;Tj#e\)ejG/S37Nb>2JB\fXL2'$BWk&8\fDsXpoL.,fT
+E*fmPn2CF<7$qpnCN)KAn7sCi-M5%Fn`XI7E1rV"42kQ$\3Wc7f:LT/(m"'%eI*u'jK>:n1SdnaCdmKn
+DJ%at]"%/4Z>L]dB3q`?53-JXZ!'u<>hbi'UYSo15%S@D>sq5(1qhrcHH\s"jE"1/K!a3*%]0/oD`7uC
+a"-`3okc#>jT`R[-GsbNZ-l,=i7<qTArlO^DfTIgn)lUfY;g1&kiIgJn4s70^BaA^4S.MS`=;BYbb"=9
+>\5c*="Yu=JUD'HGOYnPM!krCPc3`9BXe"3B-\E1@Z'JV78apIQ9Q;',dA_oX_oL*mOoSnEJEmfEsbpl
+<+4n*Ij"1:+ia6SnkEchognXZWer]be@)r%,uA8=8i;ASEouue7mQcD/X(pJEsFAi*`4;/!881JF%k/)
+Id??uD0=.GG40;.PY(4;!HRfo>4s387I9bJj_:n(p1>*)l_ehD`:Q7AijCRD]^bM%f5u^kGOJ#MB%(t[
+`cT.,:Ee*G*Ms*3n94^Nk=2MlSp#6@M<ah7\RBdK^/JEdPV??^`lmAgT3:JD[e7+I6:L#2D]/.)m4'>M
+l^Lm(s!bi=GBQ2^H+/"n`Gt?ZBMip1DuHL*a)Z5j;u'cZH8hVq7ZdHWC>oq_G<^608#W_35ObkFh;<MP
+QI,3j.G8l*GRo/UetI'V0l\MYD2l4&rt8pNJ6ZC[YfDH?dAGSU@3rsX,R]q5JA64c]o*+9QGoS>R&"u]
+#[!Qr3PQ\,B-s3gOl5,mCu72Fp?J?L?WcVoi;M8bp@06n@s24[I.tqb#A&2;pLOT%F-clJVkJ%0B5GVarHHlkLXc04=^JN]HA?Ua^T)RnLY\ht;APj@)CkVkYjgt1HRFBFDmT3$8S#"mr^TW&PLO45\-O>;
+M3>.p7FQV(Q$$P^ESV#mkbWaK_LEs!Fb?9'FMi,2YrW]AHa<EThj!jB)Z6K#SmRkOSUl'ad.u#eI/&3t
+_]c5e$4-og^u6tl<$E=lLdN@_\>2;9(5g%?0mM2W4WTVS,Z.%rnUfgYPmW$Z9WhSNPtWLQ)1:"L2jqs'
+;n4HNHRPBaBAa+C(6(h[;JB)k9equ0W)RM33fQ1]5HIGHQ'q;[\Qc7<WHKbfQHa'L>&@<PA[^E5\6NoQ
+4/LNqBWG"62gaZO[5O;r^`X1"!saMp#XfdD:+mQF`FL^V*.Cs6?d)VfZ@')4r-1qtF8?dPIRg8pl?+#U
+%
+ ]`g8e*H^3*McU3-eN4CZ&8PC&\Wlo`9laO.u2+(Jq42NJ-2._kOZ67%Sp/_`p<<-]cQ?4PMPGEr#IF$
+Qc\F\qKuVa2lk^"oR&g;"09!3=Si!r-'+\mjSup^1\Upacbp1j5VJ'0"?MRdY6I<)";M6[0O,n2]]ueP
+$p8=ZOU\m<b"f4JB-7BmL&_2^%0PMk:DCe<E+g;C!$H_;7^9UI*(J>o7'K(ar.N<7J-`M@0[_o]%k@,qLEO^eN1h]A'!.K69%&s1&qFtlAK"4J"Aot/EK"BB`Nqs4(/8d^%L.LB"Q)1hTHF^E::%V(^;KNk
+T.SCsr:rY*P&.*^d1c0f&^[n"bs]qN>m!Yr#:1@ucZ@ml2,)HjHR-]Ej5A@oD:M>;<4,);<7R7>>uT:]
+KjRh\<NTt>ehtEZ>h>7sI9Td]!_/fd$/LMLW&?tb@]T33aM(6/]e6eJ1o7;eb8-YVD;1BD]l2[B$L_`W
+QP.t\-nH#;_d.*E-$S1sM_Akm(NW'n1]e+X?e8<k8U=:DmKI"-ng4TC_b/C!+1a)RYjK<qoGlq$G^G^3
+_V!']N+7+_7?:r?,O^]R\LZj*5hR2=P!P--=-qtcN_PmQGh'lU6PL0&,!L:bIne1PjNB=%dgUGqd^i.!
+/88(DSOr)2QCFgfPPib"lP"C!3GW]-\N3L7`ksscR\%bJ>h_lKZg%?u/[\HfG3+6gH\/"Ule3%]1"5r/
+6\Sp<%JdhIfKTb\E845$`UJ7n&'&ZpLDe.if0u$:o,PM&@rj+6M.^)&*M5]9qm+P?DOQT0d.H.4?.\cj
+O(E'JD8/`sb8g_DFg1Um.GqF[%t3CepQpTo!#N?;II`nfs0hD&T'$a^hK+7i2SQjuYMm!o*L?T[%O%6Yh^3(.k-1FRrV[g.f)tsNN]!/NhlkN&ra/E=SG'X&E5rtdcm8")!]@@/d+d8.BW6:A[76PK>-&9J
+77%3p=<tQob@*$M=ognOE8@2J&VI<8\\]1Wh-hHpK.5WL,1L)Z?d$Z>Y"fkJLRS_r`&<@ShAntNGn8lh
+6#pjGc8i:t&Rn-u=f\CuQUYm#?h=k]WVpYP#d"j$`*&!eW[GcaLeH>sKm0^E1->`snRFCeGY]c9_^Ko7
+&c=tA:dR/m=1&Ou\ZJ7)22=?gBcgHXpjUWtqnJ@4as82WII*t"aCF0,,V4q<;FX8Ca&l2KgEg#l&knt<
+',8k?.r4^9(8aV9.A]EAMGT122WZ"ajTMiRZGKbf-r2Fa6sD:J:!u[[C7lm#AXCjU>g*uQf%\]><,Y5K
+7erScAq\Et1"L)5q5#t2XOEWcIEocV]f0D0-$N(L-D\2q#p9Yk8+BVfcIq#8kC[K,Z"@kj'"%+;*,2$@
+*du=JAF^sRUm[EYCe\Db0k^&WTSsW4`p'6>A!n^+$rVs;GNS[f[#gD*3_@`-AO`WZb!8K4p/2^S81<jP
+V,X:\:0BW2VbED"oXs=o3CP[OMg9(nU'%-T.k9[,,:^"IT['Qo;<>bgW6%q^]1S>c@\leKeO$&tl&=9L%*<%E3eGVV]iStQ$_Z%1YLY2H=XsiaT!9V]6u(FO*;nc=n8=RfGX"6#<)KYqm_2cVr>-ucQ\lN\
+0Wr;)]]]3)D9LU[]Xe>O.lD#`N!?X\n];gh0cE#N@YrKE94qs-,.(<qdD)/<Bb87]V/N6];Th^KX[@TB
+<$`%$LM^)J*Ag*"9W:9\En=nl4%;!qgJpaD"Y-XoWHTuV>hDn\b>$9]pHE[FX,D"0V*MWBnP(@RE,I4\
+iN2d6a^/0rH1)L1]f2\-QhoSulZMa#'8j=q94oU-STq0@ZKPZMrI=!ho8=@sHb78O@O:m=N>(g#U[oQm
+=4NAEQa69])J<YsrKabr;Em[p3.oSCTTD(7f\6g+,OksbP'D0%inR1bYs#7>F"Z/#G[k,gq_G)2VOU7:
+]md,T8nqF;+Pb1tOg6ReQ'_U$jF!5A*Hb5CR5tUa3e^nhh;>O4Y:a6G]7k;1'[0^01$.`T8ah@L^0.<e
+<t]Y?$Z6$'q#_mD3AFgFApM^*mC6dWXapd@pqZYZiTOCoTr_-[_=fcFi@Mm7020$Q&H<2-2L*04)<\qA
+AF\or4cAt;0ub'1d9>?rWV$asI/jC3M),UAD;I652r`Xbm:Ah.g?5oth^%;eLTbk*FijGX@)<oZ/+tU6aa*nt9C7jAX7CVg[)5CG>p#KC^=h5pDb+`)\?PFFCVBV)c,@9PSgno,b';LLj,K%)[Qa6<>Kq"t
+lNaq<S%FV_%n()$Ob3>p#q,R#d+I[#\""]Q_O=,4n=+L:<W/D]\p"\LbqV\$`i7K,MiD`53QLeo+LG=Y
+=)q#Ba`W@cj]n]c1O`'#-bcg^8Rkt@R:Rl8pB&G1CR],lS'Uou_moI;i_1tUca(7[kki,#/W9\I2Q$f7
+>Bd(9NigiX`o$)F;MGkp`Rj]_@GKW"qeiDI(A"?)hAaqPG2D"ZGI/gG)sY=[*=mabf6BoX&U[D-V:N6H
+6HaUb8Ngr5hs4-C`LKh`pqACoGkWBP>]7a[+"?=L[k$P]Dj1"R<#Pl/L@cOFd"!3.l+IMib/kIKqL2T1
+3I\H7[o6UTMj@>NQ.adggVJ6nQgaJt9Xg9_i-T@hnS?6ckdBi]4j.EpqVPBD*HULo0<=_o_hP:=ZZ:4/
+gO2"Em.jcDj559MIli/ErEl_gIW*3RZUJo]<Zcfeh%%s$B*H\s,O8ra!03r3_e^rONZA+S&FiLN`%EOg
+miMQ`.caAW![]nfcm8_^/<Z&No?Ub8O>unE3q][L";!QT&)K!:70Cn6"A:;:Dg(CQ>3Kb)rU$3\K_jmcOTt;l#;:>Rbk1]`FU(`jr31AM6KHDuJuapCenuW-0<Y.iq[&@V$.,@2&%;A=\@t_XqsM]7YK2XH
+guiS+rK+u,Dpn&(Wr=ZgmYUN6Yh8Bf&AcKb_@VgW/27KDVY`st%WDpY`D#h,37H1jismF<&IAO..g&RU
+")p%.E&S?u*(!L?&M?]ZnL4Sq/6!388ApW(;)&L*CD2gq8PqhgA<d@NSknZCiJsFbc$'AkIePOI#7uY+
+Dg_=3jVG+7p5/#L:=Tc)OABI(.o;K1OJ`F_N<ukP$8I_]XXstm]aE/[T$P4=K)65%E:#<$("%FKEOaj[
+XSr^Bh_4.%d+[pVm2Y.Kd>n/$&W[f"ZO\bT?a*T<C(?r>*9'g!!JD*t$rHJq7hF&To+"2%0bGP4;\JX3
+"0idf0ciI*#kRU!'!OG3;CN<C/JBCo!'m%^NmA+]r?G3#,QIij;Fr*PIdG#Q+YZaT9lV3c@(J's,k-3u
+&nr/FCrfE&-F%%b7q3o@QQ*28(bpjfZ'cW\M^\.Q.5@/1Z,6q=T'R#qmV^2G%@I+AB.B'q.l+K2Z+bBV
+k8\Kd*3mm2N=-4nkp^Z"_U7NpAP3b8fe'B;9!J5BcQ'jMr=EuM0/<[<dN9'!,pcIh0J?'FP4[d4q\!oo0etI-
+nOFjF9dI#31%Q\9M_+OB+YhFj16Q*:njP:<5ql(qB<sN%M0h(!=!geN'_6/Y13YU>>o0[$-dA0PZXjqM
+I1K5</MhGrdZlbTFZ68ch\)J>C>TCC@gKs'/$aL0m=Qo%[lO&R(NQV`7s,8]aXf6O/8k7@dbd"4][DMu
+*`D!X#=fl!ko]:M!HK,4F4`dB%eJ.8"VN=?F6PL0k6'2aA<Yn)&eR>!r(.PT5VjcD#*CMk<`AW%7o,HskA<I_1I.-c54\^7Z^AcY1Gk2&9!DpBE*G2@CGiI_QkFI-cAnIF6PRq[2\Ua2F+6Wb^I=An
+qXCO8&Yb*qN>bX%mLZuk;Gd;^4ZYEN827;<C^2puNkhj^Gqmh;[$\]ESOmpps&>gd[%U'5<CPA\3$t7[
+OmN[3;'-G5P*5)rZL22No-'8!5AjC`1]KYFk<[T@,h)*Z1sg^#pJ$hh9sik7oFaZIF\f@]pL]@te/(rU
+ZtRtj:_`XhEB,Vg"X.Ci71X/o'K6fEWC6AM6kqLG:rQ?GE-;s*;cB/)PcmP69hR<O<>;]<.jIN(T2k7,
+7cuo^NgiPHBQ`jM;s-_C<I%ZPQTB*!):5c`1oX)iM-0DN=OiU;[$an$<E/S/9<&^Z'2LOr4T^O94U8SmX\DL\
+$>,OQ0b?Q6[.@P0j$E>S>ndN11+uk[%8CmY5#oi@Q.&!`'2S;j7hl5ZA8)1"9S&@:6R8pDAAMW+^L6a&
+7hS6famVDM.&iIY]5P_I[4=--2cJ9Ykq]eW1cnZ8>gK826T-Y<Z!f`%T4IUt<H_AG(06ms>r\'_%5Oau
+[#!"L.gReD=4VM,C#rs4X!tE:A'0^@2HZ[D?!;7*>!arIocUZ+d*pOW::&Z^FRNNh:JJ7]?$<V#Q4dm)]5+]@&GE/0FPS/6lQfNG?T&F&Q4HqP3Aj479PZ2WWd'(%H!o4UB(IZ3cUViuLK:F4YSMq%
+pBbeZ?O6B6@krL<ehG6F;-*,@=k8F@(0bg'/TS1?Ab9bM'kU(;a(CTf7uhi>Z^k`q9m#J%3E8@9e8ZIP
+>enVYFtW*'pLSN7B6G)/0VDSP?q-hK05.B%@?T:Ce2(:s>k<`e0,2MM1rinPh/%+3CD>ZAG.h`ndpH/G
+@+VSsA"+Y6nSGVZ?Iu<,GHkPbc#%'NDUn[X@XaQB/<mX%VeM=(G)dsC&4]YPDq5j^9le@a4`FI;;FS-9
+[5S@n$"AZoA9UlCGCOY"JUt<SEu5rX2d'/t2KQ9;;NbI11lEj/R9+VLKK)B&QoSd/KkN0jG8G+MGZBI,CPCA]
+8Q;U.==&O=.4s&`Tbi\3(7Pja+_hEaH^KK:E>=;;`ElW^CGjXXQcXQ\rHu*%I.l6NGHs\o@5""-4r*+(
+;uq<2d>>B4MH97bfBEF?d=&$<a73_.+u)o[-#qnc?'pfiZYb,XlXDd`3AA9>Qk+^!d)n9\-eSN>c(Tf6
+iFLRcJpA)cfb9L1QZH2;K%=Lb\25iSI,=W]O*EsPff>8+2ceFL89dpQ[rHV9H^);HPo3SGR,CL1=-WM`Q2+@E3E[obLQU7+!#"<N'YpIZq(R#T+108n[CM)PSSCNeH4Wl1Qc"aVT8CRKN&[SMWD@E"
+Xc.rr7oT)=1\m&U]8:aNRIpTL<<nJNbbs+>6FbR,/<oW\.oBE^ShqO/egl8A6"DJ@O0"V"f_pnuqd^TC
+A!oELGnGeA)kd$:TfI/!\1;Wh*JG8@=rAs\<c:?fZs1*67'54:3]TQ$pN9JUP*D'r\Rh$-^SJDSQ5WaK
+qGF)7;3ooDTl.%M(irlbQF!s]'/tq<CfuQ(/R/(%4S?U.R#s,1iHo-#S<q]n\^-_-:R_-I75NbhQ/S[0
+RAfnMWApqqHCAU0dS6(Zpm*'<`.!qSCST/+VDSIX/LQuf_4FU6O#ZO0=Zrp5ql]O!%/TLU3Wr[WENZ%$A@`AM
+=`L[X#I)o"P^+R[BU$chWM3KfBD4p"2KPVpZj'n<!i=e\)`0;H3O=&gZl;%]4$U(+6aYT;0mcR#RnpG]
+;?.Y;[9HkD>@*,K]s@NJ[Ms:r4*@t.H+3Zp\3#,K>=H'6:lOf2pf]&K;lc.o;P?-UQ?liIqk>J8US[Ub
+/Gf_R;!sBHf8gH9V\1e3P<YEJds4u]e_,ubqM0ASkIc)VH[:oM>,/(Ki^KTV^?"%`C:$$KgR3EGS+jh7>.:$6l`8e8Vfhrf>/tj5';j.P'[8"rd>>S_TmM(KkghVq&)4:64)aA+UGYM_gAf'Ff=P6!
+]6Y424B\o\\S)j*U%p(@=Y#!T5mU[B2(*3Ec3Lc3NQ9e7a?5$pHYLOuMo].aaI@LL,%%e=3QYKV\9t-o
+gm?,&X3)B<b1f.hcC_Xn2oZXq*-t:/>HbW.c+8;M\fB%N<L^rI?+\%S.?FU53UO[[&PT^"RC)&i>'HmK
+(BZbM`Ol/.Fj6s)`GJj3WX2P;=56GDF4'<(:+;BRh$JHL%@S:NX/*e`K\<#em$2RAJsM[*RaID0&g7E?
+N*TGPGhoNf095rj`*>HBoM)NLHcb)V`jch>S5n1R>K)!If@#As*+cCD+f&0_PP7_nr,YqEGI$!g;gb'9rGusA
+VSDsnOF4jJVgHWs:X$COV#8i1>HQ.r@FuqX*^)sG\So?NhQk-AD"SY[9juB$ME%nCQo]h\SHg?d"4();
+d.j<)SMWbu3,;09:*b>;*YQNL,N6T$S%=NXoEW1&=4(7b^J8hB>/dUAfA3#aIbD!cqNnsE1QpR"KKWn.
+>eA]P8"TQ=`7Y[W*bj7JD:i042)ui4fcu,/rm!X>PZ^;)rL\UhIg<TLg5jk/S[%B5_7@$dgq;+IUl!kGV<\&VlM]&l25=k+:#3JGQCM8OrSunIRr<]OLcBT%;'h$2oA@19db`7,=eidH$c+m=mlho`
+@_S`)YYSU)CgR54Ifu!b-f=kUCVC+h^(9[\4hM)&fQKZnjSgA-^$jhbTSBT:jC2o^-L+\6T&"VAh.aM4
+"OEZ@YIo.#5%I;-CZcdJfDf@:*d?8EA$OCg.Wg07R5<t(MHbLN\fR984d5-8S[hrLP9%-.B7&r.XkUdp
+q>6f[fk\2`_=i6ulcuoMYkB&p4.4kWIiS1rDal`>:$lt$M`79.O(#gFjh<d]7p)\Wru9pgpe+sJ/nmbP
+4S)@9^`W_FkPthhJjForOb=>^%#)Q,?sq?/!>:8YJ,jP%4u4.<a!4I$lLBJeOi_/%5Qn5m/!S6<N^4Lm2?9/i
+B(K`0!b!LEcXbN$'`*YAS^(k'g/Tbn9rCqT'bDc)%KNKYC@V/N!eD2l7,kW]%-hV5R*m@))Jtq$C:@F8
+(E8Xbl"d!>BXZ+'me)!qh.dblc//\P^Ygg`S5mT;NP]2pGoS]N(R:iWZ<<-Wmk(*VBClo69qlVtdqNq?
+9idHZVq1-URiQ[q@C+^*G8gG2ds&:XmWY0ApBuPij)K>`r`9c"a6)r<SK;uJU!r=1AgW\7:]oG>GItQ'%tDRVo6Ga*:KNV15kF^r3Z2SMRIp<'l!JAS6T:IG,d5(ZrBO0='"ooYHeQBE:<UTVZEP8M
+!jN:tk6/F/M_>:HOF0+"_^XX_%l>_/&sRnh#Qt,r&Q2LBKOG\u(WJ2"6Hm3%"D]#I&[BFu`[C9F9o(P5
+L=*U#I$3bd;FHj!8[<u3TI$T?QkPt0kS5Vk1>!9B#NB+l0?bgo#;Vt9*6%sY6?'IMMaMFa/q>1W-TB=+
+m(5/M^^T0:N<AhQ5_(Zp"Vo=i4RG1,<'V!^RK*L385`EH+%jt'[4+gJe6N_`;mcc@6;VbU7m#5lm,M'iF)>&=
+9iZk_0ih49C4mb/JfS,Ikdn]n/9V2GO"2^(V\,onbkG1AG#`$+g!`Bb>1XOa,-Y.+eUilbC8?1f=O>Jg
+S?l+nG.fi#4joWuQL3>)XDB@@D(/O*psq'V/_,8T2^EBm7dQ?/Ic(b%msX-`L&Zb_Ql@u;5PSP0L>3Vp
+.uQTl4JO5a\E5`28bh^>O5j@Y99Ni]%T/AM3G)?ZAD(a$'"or/0:HM!??$,sYr"kq>P[tG&*PHc'o(]b
+6pW;9OmVY*S`%TG!9tJgPc-\L6%"s`3\1:<,d.E+YGGGEOeJS^VPgAC3jPBZCHr*7VX/X>`=_;Pp?f2V
+RHdE\7<)"J+3%1?-G/beXBcl:Z7LhU#VnSRQ"Cn_<Pp5tUmB7_PK^9`F44-+1EdbadofgPSP)1gZH\YG
+<HU61;Ui)jCIWL>s)$Qc'b>TGG#]gn5B\(frRY&XD.RC&4Y:e]q<2\#H!",)Wi]RL[CZe49$`jcHh/VS
+Bqb7&GAI-?V<5&[(oEVA6'u6NNGi%QZ0Yd-kLXUJ\#Ufs(A<de+;=0P9c=*u(_HdV9:'*A%L4)c(BNGn%;sNJ$T,pG9-='L/e1=m\L9`Ki=hW"E0_'P85BPc*%HXRXq\bFP0DV&2hmF>)`(T2gC(WACkp-F
+6eFBr+p8%#n%K&q2>GWC$pne_V=p5KhU^G6D+C_Z%)_]7f]$[^M<2;s[hu"I&"4F;0a42fW5TXKX#*64
+"i%RCB]A':EK5s%R(.t7i?PFCO$E`c\C`qPA/$RRd2!&0BNehDl`<b%dIBD#EgiOdSp6+NcR5WQ-<&sD
+<DLfsW+TT.jV,@mMLJ>n#u;jI6cP<^c"F`s>dU;RjHbjp?H[JsocC^3Q\AlH`]/q[T(K46/rjF(kK<F^
+o@@5dZ8=s_Ylpj/Y)Q@[Fj&CC0;d6BLs3tp6*d%)VR0uf0ICeK\]$S_'S`0;)2h8Cb%E)#r&N6OBu:5^
+4sVEMT9-X6:RV5HkR@E_'GZTp-uf^LeI.-\@NEJ0dUJpJo72cdGXR:u7N9"d*.Xt!Je.rQW<FKA1jupC
+j2An\Te2snXrkVr*tRT^1SiN`.T#B'6tp3AU(-60dg@M[gGM9j']=!jptm+Pb]o1d*i7B_RRpa(IrY):
+J^ns%1mlMjOL8g+eWPh7jL_(IadPal!XtN]S?,H51.b*i?RHRVWNMD4i(Amo?"F1[PtJ1=VWX-t-&^!7mm:3YR?[PZeBOHn@Z+"FeEE`oB!CkQoG/A\1D\qLS(.:lZ&:b!%,:`fAYu-SEnpVbeW;^Z(2tBf
+itB]J(UY%0cp:<A3@$ao[qlYPgWO;K;HuMfe/GJpHEf`<29EBF0'?K?TlXXB7AlA"lHl$)H`?BN1=T(J
+bo:,Ff+$M&W.LctRF,e%KtX6\,2tH&cGH#k!ItsULf=b'HKlLb\qe(ge;"+bC/f>TPAq[E#lB.PQ3aLI
+)Qhf=+E&&Jd_^a=Mjql-QR`tWI!0!1&VlrDUr@ja[CTIAopDdqlbfo+h\TbUq2A<RCrIm<==jn,LMSfU
+_t,KcOip`_mp"P:Gj;WY<Nu=reX`:5NlTil135+o;a0C1-8'@f#As`M]JH"!;1-3-U.t:&R1CoVajRop
+%
+ UR;:M?dBjUP*]Jcbd6A3G2U[So_nuL,"jWh2MB+maWqf85bIOMnti8'M#Y.6Sb#:h$5B8O1q`I#AH__
+Icn.gV)SB4?l'3$n4j8)\sH7O]EjQPCQQC.gH/h+n#U:,%^\[h;b5+o@W:nK`,`m3==W3b2A43PGgBkl
+]oTFA7a&!c_H+l@@ubRn4NTK6?"=TdR&UWXa*R%t&^2Ok1eqi.\modt%Doq:P@NC7UGZY3aPOCDMp#$(1@I?;HP]`X[i:m)0mqrP20O;s>SD\X/e,[B7gmYS>3g/+!HmA_rJ+Q;mc]#4\@71WZs#B]heh$L
+ZSlWtqHb]BY"=i8T-NH@hY_<W:STnq%VKo+:SO`l+#PsUkE5EWi5Zo^2/`i%qSRsT=C>aK^)I)ET5)&N
+Ya8CB>pUqlBP\Z(eok,!`_)j;FnJtG%+a3[2I5S#XFXkn`qAH*DmIQHT9%.G=616]N:5$IbWFD?@QU[#
+5f>g)HiG%ocr\(tWT2.)cZnsT'>XD"6/J9`o3hJ$Uj7EMk'ADDiLY,7H+,B'3/3"D=)Wt14X%fp-[!Zr
+bBNJp,i(I<1!mYTP+g3=b\[<[k*6kcF,U^Wq<eDB<DT:<?AI]l$KC\".u#6j$a'aoBC83L&1`O*eHq4u
+lL(9WCd,]156"d`.kPFP:?/hGcg*)EZIr#:]sXH@I(rp1>0Zq<KD]r(^F(eg%WX+Z>K/VFQ9B"B]RuHU
+X'.Tsg8A0Y4@BH>g)iS-!5IKR3!86Sqr^5o%Qs@o5&:_F"/EB$dQJPtYOS2:fmu:ar]Oc/[*pbAZjS!$
+Q_1&&5dO"pZL9s8^+S0t[2\)43qb`[rZ#G.Y]Jqlg^h8$&K+G@Umhf+bN_"'lO*e8^<i%OiT@l=0Y].l-#<U?fE)-4)A<f?6SpR9*&PPm_Oo7nXE0K=,;R#2H+Tj(.*<_u^tc`C1-qB"ZT+hsoKY5hI)?@"
+\PrYR*&,35_RVcq^n_4RA-g*n)8#GaU?Kn8ZmENs-:I2q7/Tcu$mptX&j\U8_)"DD9N8ij"$pEkZu^Jo
+]8oBs4/WIt^N5DZ'H4HF#/Pr.`IqL8Zp(Zu?+2X2_/%o7l+]6k+@^.;`cG$&aLsH99gp$u.dT[FapFbU
+:_YCr0_>"8]Jl/Bl_UY]6Y#Ma6=[ml_3L6P$bS>a7!V:]H:'f@_d%RZS9mao@BI/X17H30gcIfc,!%M2
+[$4t9n?kYdVCa&"7MH+qb\]jsHQj.lTG1Lt'MLmT8][Dm8?>M+qgQUaE'1KH]4=c,oT[A.Pt&-Gaa@km
+/6#&#RQ-ea336.K,EKgDpVm>s8Hb69r1JmK3/75D8gtK:@AF*8:d*7]JX?E;W\=`aW(N4&6-ItRi20+3
+!(u=K7?jZAEq.;RWIP,W9"HcBjC?/V*lV9s`dG9cN$,[pTLP^cab/cbe4[mtTs-?QND&IL$u^s;\-gG0
+LnLD2N/C0iE_!cj8'K"IN.&p'aio.U9U*[e/<%(.lp%:*U&uqV9SGT6O[[2XaFq=D][+f+pV9ad_6b#ar*I;=T?LijXji)")1!X(d6n\N7JNWLCuIrri_.5La`QStXI2Y];`#,B`EYu'no;,YfWoS@^hg1\
+AF.SC!WXnUL(pm`KX)PZ\P#;Y8aMti,bk]GmDrEB#u'e`"<31knXG4&W/Rf?PdSc#AALX&4olcm3QDaO
+<R<;u:c/;N4U"YV##H7>6;6Fb<!U5ZlHMT+Pqch`35g]qN(cpfbZ):ejNL<2&()rPd3TIR*>MF/'N&]Y
+5YFdFoR]k`]<cV8:7Ol"F*^'^YEq!N;7)6Y%,/[rgJ+)Gc$F.rgFCVd,/`cu^_J1o<(bEq.$@!4THrPq
+biI-1/lL3XddZ?n>S>=lLbp'>cAYmdS=S)DEkU.S,,D@J9fUQU*m]f7Y?\A3bc'"%d7,[H.#g6D/O7WS
+,La$6c_WeRe>lB`[(X]^V`W@aN<E(#8^sjGe>5gf[0FXQ0;q#Udb@j*jU;l;cl^&dd9RI6AQ2NL<E3m8
+eU:IuKiQZo=%os5[lkTs6t!/<)o+SiQb=G*>ea.gV6u`9P!fB"Mo^gXJ&pZc2nXgd'kL+@o19gQetfuZ
+l?Wc=/6)8'03p85%8^+H:=h'Mf-:Yp]eS,B*7H[<;afq;j]t@*kra;_9'#]&D1#,ado7W(c2'<2`()6+IEG6ccWtqBqhrM]>s4_V7<JN%CRWLYO]N-\btX*oiD,HM@Yp(J<L$b?rE._nO]a8tffbEebX8]g
+>h0=?6'P#CeEbZ[f2cS2ehp6jm=*BP*7BNafpt$!]pVOLCg&DKWYK5O2(;SQUs85eg,^BZc)Fc5WRj#-
+f/oe[<9Dog)qT1C=7r@jN+>jmRmY/f=rZ4k/;.+.[8^r_=G9:;\i,[M+5<l/>ID%H]tIXp^)R<j_>=C2
+%
+ BMO&^"U0#f\G1SD3S0L`S!,5gh"O]Fi[]+Q*Y9,;50[RI;P!EZraZ.g$/?9`?(FacW5;:>:C1_A^7JR
+V-R%h<h6I#>u"<-B[X#`>,C"[^"lp6__[:0+A*\VK@a<JH-BiGgeHe`eR6q?IlS1/=EW6;o6j>=Cu0"G
+=:MZBIH`RW\MWuogYKVO%D6$_n6[4+bI%U]kj0;.gsY<5/Y.r-D>@Frq:qO_?bQ<`*Qk[Y)(AS>c.kJ<
+?2.]Bl_g/5+D"kES2jtWccnVDbq9$)IKEnoW#0p;i/ID;9'P-M_-^4!?Z$B_%M3%g^g?^)?N(XI4r%Ed
+j@*')dTu7h<TM)piO@W(=FB_p?.ciLr4CKLdDZ%+`P>-1T.T-6\aB#smLiSqp0HG!2^)*fQ2G!d.UTU]
+ik?o%SRL+GiEWsaio%:H"q4'5$*(?2>ndQP:,5A"`8J=qj*!0([PHZ\N+8_Eg5XueXsN$B-Y)!tA*uT6
+DA+InOf>KNA1g8!/k"bI73hI+>4hi$'fSct);ng>_2\f[mQ0*67pC-X>D=8&PM\i?+poqIi\"/=,U6:D
+]AIFWA.!i(D?I*<6K4:^@^[iL^+EpQ>M`r7&sCgL?9@,RUKNO?AY#8a'l2Zs,Me(2f!]#Hh?mbDA%UgVk)(DDjq$R.5N^g@B%#eqSjqdQEb%@Rk;Ge=9h=@'\RGF^_0('&9@r<tB08=A5^#0Nbf4;-8*=o-
+k?S&E$_4U?;oX0T3X/Vme_T&QE(7c_W"l"=D><5<MIjecA`em'(&bo8LL9auB#Y$/\pECsA5d)MBTpBN
+Nb@L'OCN`ci0f6h*Rnd-L1]k.k2r1GrgRWY?q+96B.cX97\OQ,7-@S<kkqX=(.qo@2I8CRf4:<7KedD7
+W@#'QC;$cbVQ>kR[c*/d+m'r1Ne>NFBPSp0YV%3c^7?DUd'\mi[`G3,`f&s0\nKAqhK9[po[$tEQJ,)t
+4JfRNes5KKH>FA62s.iiB#A9/Mo^&ICeEIJ<lo(<[Ht'<k[$R?*cpTnc0X_YC,R4#Hi!#-Lub]sD'm>@
+:=Wd=H!;>oAL&F4/lb(FJg8RJm&%t^VC'+@d2UrQD>q-4T"A!WNT0AtleMh`>)@&Zk%TS3;80m5B#O+t
+_Vs9ACdut>Y+4n)mVTu4DVLmu(8,L;c#4ZLjF$.LIKjP-1JXflm7-:-Nqm"@2;[KBiA.4:7^DL>fd_m^
+UTWA?#6A'Vm4a(h(09bbS]QF*8HV08E.6_SXX#h^cX"!Tg*Z+QV[[N^%.NEhjL0:#F;aMDQWa-Ak,+I60(/3N($rBtnT*]/(@q!ec>OcNAJME0PP\FIVG2Nrn@p)d%>F8Q2/RcUlQ6%BT!N9ogM]Q8EJGr5
+*92&;AoLb4E+]DpNsK*qlqQ&65L/H]rZtq^puW73fY*0n7]'2[%b`dQ@ANO0AK>aoTQ9JMnQ-OsD`r0f
+5&k-aCsO$iVXeQd)r;&AE[Mn]*Ro,-+`qWmCPP;pF<<tb,[:Z\AM4"Xmf;p>5-Qpmlbtg'KuNVu!-KY@
+En0pNL<!QC%.7(KTl2)\<FXAL`N:`?BE&KbcBRQ&Ab$ot;C:DcDWu3p<qH&qFQ[0*hdk[%T6)/fD`5j^
+//<7jp.n0,;LL`NIr0AbT6-%#E]*@YX<D]"g2GPBd!%Tq>iGEQ!`5qY#u=K"YB]IW#PQ1]F^;lU#?Q'"
+0oae&Cf]k.?G]SEp@m_Vp#c#:?X;f\&o75EFUe`<(DQQrA9b:hGdgHC]=o6aBQOcGD!u(5LMC[DV=[d7
+A=nAI:R,,o9C*0/:\5b'(FAmKrUNHQpt(JglJ=CjGDVAYGFZj%rs&&O$$?K<M-l*XT/fd[>4G'k@&j%o
+DMRnuJb'\1b0JK,YGV!]6hFu%[jI<omriusFa1s4q^')KQ]Lq1B;mhOmo@m&p#9u[GB)N8qnKd7LMGf"E,X&rn*_Of-_#.#IeuTO<]Y\jeI?4oT6_MXqA1^N%9<1Q]_$@MG%[ds:TjHM`:q3hpa7tA?d<*S
+Y'Oa)eg=2fO#:DhZ2)_PrHGSrNjX48[ejDtH[U,6*r'^aZ?\[HH0p?4`tHr>d,(t+hu@)kVLKgkJ85J-
+E`^'PY1i@M_L+9YfY`;epMT_\a*3lDr.h"H\(#f/$iKW[._be.5,<FGfOhO]\,Q5<T7M-e[!0!jEASY5
+@EO)'MLN%dL]D5k,7MA\OD$0T'*j4X+jekp1*m<c6fN*!X@=u^NCG/?f`Z=a)j3_PEbR(Z;^[i&-.:J"
+Z=PJ&Y8AlW#Qt81'aR2`an5^b4e^59PU]*CPt%F]NsW*$3h\F#eJs=,ThkhnX]9ldqZV_nA$T6Qek8/l
+eSDTtD:Zm)MQLrh3A-S$XkrGj]%O9qr!!A?EOOg[=F<Q[s+A;MES1/;)^1E\A:PP5%U1Z$`oT#0qd+&"
+T[I@g[E@<9"'1r;oq2>!N(95Glum_mL<FYIh/51+h?NS*[%$OZFXiA5K3"D`q6LrG8"J)lFSafqL$P/V
+kP&SW4YBL2">1,`!^r0@!T`j!4apa&VrR(7I6M"FJ%+D)rdOmne,\J]CW$M[^s:C(!k^3l)$[q(Hm#nlO@0H`*00Ss#fBKn&IUtQ9Fh\%MhFA,_QbXX$mlQ*9bYLn$sq2c0goLi7M3:E(.V";9cQXLZMb]_
+:c*A?X\nGI)_<^A=X-M^;K!mDP+/X(9!Y4s.n_Y9[4]Xcr3%ftEtl;C9G8Dn1<hSl=IfF%7,[0%.YQsF
+cBFL_43pj3QOl"`6uqf[&/:_^Zr.m-"Z)"JSNtQ'EoTYem&^Laa<r8e5uElC2bQIO4Y]`1%6IQT0!0J,
+j$6UE=Q$Z2I8mm[Xdn\DbgjAX>YS5Rfc+"Xe%\Yn9@Pl558H?Ark-fLm:O(UI?aZ`<fNMUa7d1Y,udq$
+\Sf#;`-k'/QHdMq>LtqLN^Cj!'6(t`D8@9gQJL;=YrAfFE*X&enT*Np%EEZj=5+mJhTKH[JlD!;IpCsb
+DBUgq2?kUci`NoFM;m150ob5=HEB6h;p>'"cZqAB]he#r#CFgCD7rbRf$nt;_c_Y*(Xi,D77H,M[WR9T
+)8r4mkKM4uRbUjh$_(j5re76%>"5Egkdam/;pEie>hi@`m_If;[8h!sA%:+;ZgC>1osEb8IX.d+p+u0K
+g"*=r]35$Vn%Do8Sc,!lg`Hg2?gsR`K^]m<T>g#a.`Z[=15\uV?(@JAG]5a._oH^i%mA2&*/-8$EubcIU$4]b.F^ls7MF?,osR)mp:Gfmh!NqLD;FsBmt'8<rYH<uptZ]c;WX?k>F5/Q<o_Y6[*4NMoieMj
+WcWIn$HCLXB<;cd^8>tDfU>%.mHD;LbOP:++0h\d9"(tSlV2KW=k4&4s8>:(iNg!aM#cAm"@Z)5iP8OU
+\f7DmJ^*Ss5o:[#+G.m]c=-I`Ql*=MCNFah8b57BfVOu=+'rQ."M08.^Y\:t?V#>P6PnbePiNs=n@?q6
+6sC+nq3-H8l0Ua'K^`AK6\*Ps,=GXr'&l#JJPX\T'rU@3ieaXl;-#/8G-Z[+X5S$D3Z5><UC*V[7>o7K
+n%TVJpE>2u;p>q34m0X$UNBk&:Hfmjf@:\%S5>,>fUJmro%7=&_gbQ*66U"DL#QW8M9r*;aS0NJN-h`a
+co)6QQmjB?Pa[f?h8VsQ7"ei4.[4cO*]1>A?rGLIP(fo,6\uXFTjmqS;PeFr3H$K\47/ATr`Mn8o.-A9
+Q=I4l"A%1/1?MQ\P#FP79c9?U-CHQKd9:?TRBmYUjF<)eqC9P(8KHild#8Us=1tLgqOIb1=A".2:0>[D
+kEFShE/$EnRFr$V,e\<+p!QQW9d!sdL6.QBK2@sD6Hdl:R^>7k9kbh/R-^l7;H`.T=ZHWGm2M8=E:lg0rCGm6]kB#V>LH*t%U&CYGd@R[&c"]3S6B[%a>PeHWaSOL;sTeaU7]:\G;3?U`,g[!+29jH74+iC
+U(oSb<6D%9lCC\5C6EL0fsb!sj]ee3-9od'b<RO.kG2&%'uu-`>1,NTO)qm[<u>.*j*bZU[E`njHLj;#
+*GD@J$@"c2"S1b"4+Ia%PZXCe@bEo'A?:r)eJbD<:c4G=/%QA>>2)Wn,ab@XIZE,#5q4*bJ$d1CaWgRu
+:[/r_O#CTT=#J_]PVk\6'Y0+4=jlJAI(lM%`kU#<JT'ff269>hiET>,;HaftWjYO#>mmKMm\Q5\G?Ku/
+3kI;Qj]\/DEcBWEj'1lukDXSi^IE!cB&sJK]pC2P]rU+;Y8&XfQ*R]&LXUY.9rF%Rjhb<&!')T1NPO+0
+"5mDrK'7@)]!scDTNeY5VEJLc<f2ssRmC`6`59:67>BbiE+g]65"KI,b$jW'M9cYD\9P]q]5#ddmH):"
+'_^V;*,e;^U6`hW*?Da-UN<TX7D]o`lf=!HP&b/-5Z`-rh<^t>CBW;"p]E%[>0W)*-9]9BIkYIL]3oAN
+2nSk&/nU%gP-Qo>aI#%$4-0dM!'@9gfOGBLXRP)KhI8iSL(4fbB'!M:(r^BgcY*Re\*\>b[CRPa<IAYP
+mE5XY[WaRcaD$_,<h7]8_Hc-g1O\4/11iBs2WX7(Wq0i)ah"f[fmKJp[@Xe1L`8.dm(3I?4hncMqd=4\
+K_VH/]W2oQqg\tUr\eB2CO89Xm(JssG)"K"gIl5pI,D#Kk,P/UqM=7&eV3MTHec6(B@2]oY,oShXuOFh
+6eY&,n!9b@BqF*nbrqB_A38't.o,.V"%mF5^6EqbKP5'k]qr0$]rVlu025<E[eAP.**8)=IPm:m(:M@JI]q$(_gQ7LjNH7]IW)oD](otjjk=40k#/C-CbF>n]47?%SZ0p1[lcPC2iDZN2VU.o;;=`-478(!
+da+6EhL%*9E:sC;Cp&A2&>+GY\k-U[q:*jh%1MHLS^dMcpK`-X:*eUHb.<jgm(.+4nEYdeoac04DF3J\
+^5'^S(ObL1s1W^`PK.^8[.(D;.aU@T-$CkljYZ,3o)C#sr1nMsgD_qi6?0D*=[hr$+KK@RlfV(\U*fl'
+e.gX\`;CF#n0EXmh*-n<M8)aK>FTa-$%'?=h[7<X[Q$;D03c,^CVCc8c>R"cW&l#qmJd-1I-&N13&?9a
+*S992$-h8;O)3;DDsmO&Mr%UOXS)P\oQouTl[NQNn=5,lG]$#r5G*k`)ZN.cg<X+gYPnLI-HqG8f^BO/
+,+.uj6NGH.?-c(C%mDE0JGeld!_q\&O5/fV#"@uscV;d`m[j5,$LOq"!pT?qLK=SVBX[AOp*LcdYE]5C
+`:ur$q.jN,kRMQ-Ghd5Ma(eZP$L7MMIg8e6^Wea&n&XI)(B&1rrNMIlO=(?-W;Z2H$;][O9Eb8dikMZ:
+s%Ll@&-!$a^;KFATJ-T$n-UQ4)Y=.toe7Be,4ttt7eK1CgMibkW!N5O;C]oQcELRWm6q+1E<A]1!q="rbM99/dh&ah1oNnTVA."o*74,Xjp`IEO1PXYE;Bng[;VB,V2G1(I1rhm]W>lS0hVe5N<V*miQFq$
+d3fF.km>aE(/\QWN84o'i:-8WriiL9C&&>G#3q<n^JP:SOc'=f0+1NerijWV,RY'#'b(`3):0#u&SDDe
+,jMSeN\H-sV83]o0adH0PmbVDbPr/B)%97_ZL56Z:h9m5Gm1H@KFb$cn_Fij.gZXjjKTQtlZEm1B'did
+"jP]rnd>-<`mM'jrlBX*W6Y=gXVMMP,#TX0Os%`jW>AC.o20cIDG(AB]*iU[(\,HiP"Qr1OQK6_)3EYT
+02.]ET-])=)R4'%XPk>nBcJa%>d;"pd<d.]oc3IH*3q^U0h@p7E\R%J+Nn%4%Gr<u#4)fl&$/aq-YPea
+RhRK]#S@ubcrDI@<><^b.^I"n;RZmI`8FP!]ojroP1_%"h'T89$8O=P%&i5]OX%$ajtb*?ch?o`F").H
+Q;N2^o*Y>q_&Y22(@27Z;55GAg4Spf)GCG0EUtdQg5(jZ1BuegmkC(84Y9Q]+4Ba80bYC9(GBbj\)aq$
+P*m@i""Fe<U/AGJna?.T[0-gk/PiO?B;6+2%)qg-\.3(.&c4-_cA4*T2[0@:':Uduj#RjDkgL>#Ou251'%ZI',O`)pYdl#uNZ<R]!!"Jt'?*(cO$(n74EK%8ie'BMd62R04edEhoA)Sdm64nY5-sK;oD(U"
+Y<.sB5?%GEF7VXr%mZ?k5h$H5PSZX7fbq&Z!%blAZO$.WQLf]\-6eX@;^4$dcOE_1AMS0ZoL_ghk3m>Q
+,SL>%o0kSn^BB:eY"fnb1:\II9M5l_+S0M?P,Q(a2'$]@8!9-.:<>.FKdcPD7ak1u1&3BK71jWc30]\#
+:"M7Xdh1sL7+7tn1S7=)^>&953n222Z`o@.(ECcs,kGe&o1q50aZ`ZI:,M,u']i)sks*\b:GhT,Zlq[I
+F\WY>:fR0cFSeju'i.g=:pgm12#di")^R-p-#hg2%o5R_Ti.+8;RHU*E$$j7B1oV?h\:W@8SKuZFVOIR
+.dGh0P)Addhc08U,ne$J1u@d9RlI`g*`,cqE"tp+\MQ(#e<Ns$FH];`4%E:t6I^?5O8_02P>nqW>#`=A
+25nXFk9Dd`$F:NUoIBks]1N_87s/lULI=!5\QkEJf^pUj')<hQ1C]EV6oF"'<$O-JkpCPR9?l9re5]cf
+]i@p$.!"uMF_+ruktQq$Q*f:9jiRQhO:U7M@J1pTFYK([WA*pJ)`B8hYSCS(_+bW==;@;qQ%M16eAddV8CbmCEJX!\R9t+0AlYa@2JHcGYqEE)X&R<YF1"+%=(CcS$Oqq`l[rJc!:lBp[.V)QFh$*L?R?LD
+-,nUoEM$SrD/0Pc>1SlMel7h)M_s">rq0P0ES2"hAJ.t(VtMWXQ6B^<h/0SLDAMDE.:6X"K.F.&V=[s<
+p,(1iD&p&F=HH0Xo)3@T=)R^6CK>4Sf,J^r+(f5fB,5W&/C,Q,6XZ+eBbOiaPhc2FMT6Km?Zl;6FjCIR
+gEcIKfs;t['eN@n>>pSU;X[1lpDn95+Z=NuR23DRoOPK(@r(aGGZIrt('.!lN'PtSD>*(:Q^<!LQ$O51
+A(F:_(@`nCDbDs6e+7\bf;if@]mLV('fUJWpIN'B;cFQMCH$6]=5/.`]fMFbIT#P3P4<`nI8*JgBK&"h
+<8TY-Por$d/8l*&(JT!dm:=ceDh?SkM=YgiQZX*;;H;[^[om%)/V:A`G.6@PpcCn;_09jLGH8aKQ8O#5
+]6J@k=,9+>p=")M"bBa45e!M6\7p6_V2!U4HrZ5Wp,4([s+!'FE*'r'fS>6+M0G=W<u7oo92TVOh1O@R
+I<_N>O(!Jr.t2A'I]jK!fCL^p6LC*rV[DCA7Z&5E1(E.DN;1h7K2<QhHn5!LF2e<4alpdRR(\m=NEFS@UCiL<huFVUJ#CbUX%eWg\TLWKK,GJKGoMA-6obrYMR]Ki\&VJcPDQIp(bZrDGJ;I>CE",6L_a'F
+`'JZEO-J::PuqgeG]/k5lN[-?la9Gg;;I#4[tn.QM":Ll\RdbQQ'\sG(mu\-R>ZrJO-5nYDfrIG3#^BZ
+22el]9mC$$[L[HQ5na=%O')'HGlNda!LFZ2eG-kL,3t_Cq4"-ZOBDaW,?8$5;h@t'Fa%8#p$H(11K/Sb
+K6`HE3VdT8QM-PGP;YX*G#NH:c\6=>=n_`/Qq7"+_1pT`Q8iNB\g*r\06t*\*d?Rt'UOLL4."TFHC8uQ
+3HL%d';0MWTA!A7)3q%d.nj*6M\kWGn*?E&X_G>f@@,6-8(3(nF'EjC0JDEb)8sa5c_oroW&=u7g5)9q
+N29Yf:`0p]'K^He,AO\rX#9"=q=g_s?_ti9P1ktm>#V()Z[V3:Nd;5<F^(uZd085UQ2+^gPb!(\0s6u,
+Y;Y/;TsP2oVf<NR#2*c3HI4\&o8+AWKfVkGH;dk-'sYc:T=VeCRjYMf?#k7&9Qk\c\0Hq-Z);_SCj608
+o5-t_2+Q5^^5(aJGS;O:DYa00B\D@NqP[-:?)r8<)Kk;9[qSe<0<?+FKCT$s)^2$P6$M'O^!;[`&LXIeR%4$G\li3_4/]6-orkt+lhH;MG_N6p8KM#-Z!.mSQ#!ZbK<`&65[/fF]#24NhV:)oEgu64et&1*
+%
+ u\dhZkbHk\Z]e5`B0Rh6<W2HG>j*=kFX#:[l\T1>T5"oJ%aV^\5"]adG_Ud]r.@6]pkWR=ed.o$nkhe
+YBoAs!cQ"^7Ct@rYLnh(Z[h$r8&'7&L0M?rS85cZID&i\'YJK=HmQJ=-cb!"n/F0OZ88hVPn=p[TY+cJ
+>a9,qEQ/Z9E$r&n)?YJ9$-F1h\;[&Nf2&iEooV?QWn1`qH1,K0Ft"?CaBX5>QR,89@>%NQ_ce(ppk-K>
+Oh;Uib<a7E=M_rPnRB)r.bt'BK'UB/+RM",\MtUa)+OAuYIqMbdQ7cUR<=HO.V\h4dp.OSS:Gf'M5GX_
+aSbA+>'mUS+gjH&Xc?bs>03m-UOi4MZeWC4r6hjo("XIEf1Z^BSD2N+I9Jd4M"/I+h")O$=^YJ2GW]3.
+>YWQ\h8Hu%g&%tV*<\".#XDWnd.`L/=r1^FJ[lbC@!X]cR$lDBU!>gHBAGMqh1=D<fK1*>^7:08pp`WD
+V1AN6=VcLamT\5<\_+8jb-@"l=iWj)("XuMf5)>`IM,G_/`$ATh@(_`THjP'D?(_0iuU)<4tks10r%PE
+\Xb%SoOYq)?a4o+g7DBK];+)-8*1fojka/&6>tU`='1;O3gGn>(C:_EUQZRpj?(c>>9ggEe\-DXl!<''
+I[51@jg/*\ErGm]=RFWYVqG%:TCgU[q[k_K!HWDnl]MM=fFc[rB>D(<Ibi/4?CU2NS>q1Cj.>GohWa'L
+lgGl\gsEdF?8sTEmGn3Kn/ho(.8fT+n*aR_Ye?%<H^EIc?eZU'g"pH6(T$\.V9lqn`I;a;;h<BN'HoL>Yl0oD=p;.d-,RBYd=!\@=Bk28?g[l'i[-2@*/clVlT78ueod>Eo3LXr)DM6O)rc):6?ahINZ!C6
+OCeSX3<_Q+g+-D1pcjK5+,eZ`ebMFq5[U"B+.n(r]2AL@=aOuJc?/6acK?:mrE0lZIbj^Ihr96+nG`[]
+^ZYUQ4`K9*m=ECYrt56^!&jl\JP[a?)@?I^Y8Al_>W*)pKZ%>]R!Xnta?P2"0t=^p5mi?9,>lQ6?;Vr3
+_e!fO<5':pO\B:?GjLkX2k<NQF.)+gI6j:3-;uA$!c^f'd]!qk]RGb]UX5ao<mbje<if?#En^0&>qE3]
+lr-NANmS:JL-o>V?+-MJ\QnQh>IAXj7_IRGQ:h\drIM?'0:+d9QN;`Vic,cN?5FcIa^jt1>ddu-Mp5T"
+);Oq86(sagmIojXRbO[hC%ZeCB"qWVe84fi9nqD6[G>]oH_'=!IDO]XpUj6+)hl8mEVY!RB0Vs7jE142
+:5<&Mea7MVI@fTX/nldM!'W%`S'0jaq>FW\GIQPtq0N%'hg^f_U:j^.^Rs!S\j+Nq)$2U4j9GZ=YS-4\
+S)=p;#/TYYr/6*@.>4D3Bc(H`J-SAfO@/=r%_0/)<"dSECSW0\6-P99Oi#J`<5V(BlpVFQ&Ba;P4HW$\cGl!BJGi!AW^Zu=0RT'1aZous-cseiV^Y6DCp,81&u;oc9-=954;204_(d/%l`i9?o2EBl9s[OH
+2pKfVjZ$"VN:/i%kdi6s:T0NV5#:ec"%"2FZP>k_%"*lR^sFYH8't:f>=-[N2(_KlE>ckjcq9aj(a5o"
+Ro1Y7)Ea.tFUC]=<2sM6=B$#/8s.WrI;`==Bl"!OUh]"?X/e,f*F_ohSMleBZt+_nZuI?i@o??l#gc\^
+SZKT4'O@&C>IO+aCbOB<a)X!m2!]6YQW3Ksh3VC<G2=$`j*G$U[G?4:=3^&ZhXWJjqHt-Rj+-'T"7:\2
+D#AusgoU2eCYC\CBkQ1f;F)'Bps'ff+gI:i(WO7h!=iXc/jXG%Dakb-Y`W0rNFj$g'c=g`7VIP;q:%Ka
+W-M]PEafo0JBQj=;D0VP!Dl)okuq\iVWiDeSr;l+*j)JX\tV]rC&77qVTb5D_B@Y.^%Ja>Rnh;;D7aE;
+IdT:&d65qM*pl_k43$Z,i`kgq^f!91rephB.QPC"*"*Rr;`nnZY]9=6HGilBG:]Ei#FV:do3CBY<V$sG
+03;;b7;L=P4V`*1=:3l9Y&Kqq#?>A^,`>2`rLPNSn(mZ7A_VXJL7'm.GB[luSl^cTDHh=U\8Hb^TBZ29Vm#E55)6W4qg(']Jc$?Da72?<8'TdnhbJO[jZ'H+dm(TCKCm-F@cdJUfl,Q6@Vb9Z7.7L]UIXm.
+Mi7gM-8gLh8,CQi'=rU1c3M)BaMH:k?#/gnX0q)uil_HBCJBBi2C?B6?L0%d%rrB$LU@L5<%VI:e]0VY
+B+8(VIO1Wn`4lP+i8O#bEip`03-^2;U%BBM&CMN9[5t-.;%\VaIN5qc7d?7[ScCBrPElGT'dDmAJguX2
+7Q@Le&)gN3&Z+*ELk-/uF.e+]9Zo%8M\"`Th2SVWj1C]>[pCgP1Pl;t5cFQ'=L"ZUE[DVo\6gIhFH;P^
+3_7@!)'o`]hdEXR9Zac]-JpjSGE=EN`u,<1h)n5fcr*$L)+q4X!^;^LnlDCTN@`sdUQq".9JhP[#=g$^
+KCEmn6'ei2@2'kXm?/+'M(9k6FNp6e8nc=\W15#q9Sr@Q)^l>9&>o&S0@:PT:%o5Z's'K+;iYokLnbJn
+<99\b[T"i44$2W4jGD7;Gq-mp(ZMOr.</fK7VVZ_W&(9/1_qiC$5"a.F@M<H%KB%7CnkLO24eVV<Q=h0
+.q>Cj1bnu.\0EFABa#lEV5e1Q.TnW@SL^Pd[[9uS?VOJ3R$4o=nk$h6=<Ou]>>ur6+GM=8,t+b<XU.K7k^-5Vbd`8/#!UP:2'=Aq6\:RUU;6&L8SSuGB@QR.[$cGR-7$;YeX`S#fJ<gQ,UTCQb*u<Jl!/#+
+F#`bsa4Il0''AOKS<NBUcPlsI'buG,(*oU"HPI$,7.;pS1;[/I,rf^hP-S+L`EAB06/sO*F"V>]Yh(4"
+/M3U$e,>tDRJe$K>9L>s$8u$kB^dK%[AXglXN2;)DI^Wu[oVJKg_0$h<lJCFn`o+=[5VCWQ-["m7_;qe
+nTA`'e2VR0S^XPqG:a\gVtFKR<=<qL/km.\N<W9cbE5b8Ki>[/YfTOBjCW0*?'fM9/506l0VHkHX\ft:
+<ohF[0"oiI=<d*>S.>:M*IO?!p*Rc%+(hUG(U/'l_`1jZKkERi`"k]I@N.=QeshoAQsU;3*&D0qgf(Tp
+/q6<I"W&AZVmI<&d9=1o6LBaC0@%Ske7hi]XrKpFYU:W"GEn@I:/Au,&uT9N"-a2T,(6l:"_G=cK/3-.
+bSbITh.sEBDVf$Ma5W^l/&\eJ-"+C=;VOGuidta-<^8FQ!6B!FSfjk7cc\C.d7J2(CDpKH(^BtM9bi/6
+^'&8^)_pI0_kf.)Q-s9q]jWKQKLcjoT5[^AZohQN0chg`pjZ7G8:uaQp*N%bZGYtpBo'0gX4G8hemmH!N@bkI[8*J6lo]D+j<]`9RfnJmrKsh[*PKP_ma>`QrNnBC<R<g?4R3B?SMoW[cP^0GjfL,FFO$90
+)IIW)D:73\/Nh9>_g+iFd@X+%6G0ZPP?W?sZhO1Nef"Spm1'H;bPqXj46&;5Xm:G!p5@<Z3Zd2tf[KJI
+jP9X9N:+tK]3Cl'Sese1:TQK:g$^&D)W-`]h-[-=="C9fY?\`"AVtc!UZVEM0l0R.YAG%4N;Eulo?EJ7
+G+Uk[C>U,QX(Bb#(BD``'o12m[/@Lip?K>'=R^.ePIf.`=^1TbESegX4#\,G*.,))c/3`WG%eMc+#ZCn
+hgRN9#,r%6\*kC4]Y!W^mLn9iGL#1*qtGg64_oaq@N0Q-,ehZR;+PsV)ru7Nb,tM5[J#)/g3YKEDOeHX
+CL2(_.3nfGZpQ"u5%1,7kG.]R_-:pj94IjRK'6J6UsL04mp,iMkar+9m%&]BH<m`-^E[B6Io_FJ(3n_b
+J*Bor$WK1]e*I:pDt/lMpO*"to:LO&IMMD-Hq/kH440hk%I\`EVg%s-fBduOl2=d5MuEW62L,%Q`38M+
+^]OP51(>aLbV1QP^E_)j;t*%Vn\(^P^k5QH$K!*B=<6^;ZC=ZNe#9OhR_>cW3E)6Zl_;3<NOA<%0glVf'AYra@l\V+3\t?YA)t4BV>pln!E7Xdii91\3OZ!N^U,,pg\@_8j?aEfN[q[G,R2%X#"!D$_IP((
+C\'bX_nSi%T0s#>CV7F*6+4+K69Hs>'JZTqq'eZu#:'45,KN+@7RLqk\@^!PKI=WQ3Q&3b]sH-PMd/<[
+>Io`4\RX)KUDpl\4XXH>6eiD?*#4;]'9Z<2($$"G>Y23TUSq"_!!#*3k`A3ZTu!O#_40Q&g^>lPoJg)"
+6R5XG]<3Qo.7I'p_Fj@8>WP3942n9`7D)lsHn%Ii?DQo[1K5qjCbmM%Y/1:A4`jcF<+Wo[r'NQ#5?gLY
+gAa:0?c->_RcJ8%>QD[#"@^gE7AOnC!bfAs6T)d4^=qL6=hqiV;8g(X3OD2m/3Z5@8M*V+,/]kf<#3D_
+I[-#7`9^19gjqlSJ]-m7_5lZg;l7:0e$"E57P%S0'P9n2.*.Ss`H6utX>7bbEQ,k98GnN<r/d^j?9C$X
+`WN`f<%^XelT<$=8?A3#PHVuJLqhFj_b+7N$V&7nC.\&hTbMCcm#jp[U<*P5(\E!gqq+:&N]t*ua)OU8
+N-NB"V8PKF7%AWV'R`KQIm);59*Bdg'SB%(K$-!&(#6(;1k\:#KrBA<_9@YI95DV%LWYNk8Y!H5*4r445tZN9
+8DLo$7&!:9_T<M09H`:c1\8TW2FBltab5tsoS^h%]hGfVY$@Ep">iJFSjqM]bk08p\M5F9DbNR8bs^%*
+:t\>iF38"d3h!+BS@LfcUs3_V0Z:-4U4pb>'FI78$d?"O%'n.uZd'9Fc6VIG1uuqmji^oeb:L(j%(B!"
+-c*_A6Mnb\Mm5q8WD(8!W;Q!Q]Sst#1U<P#bWPOA9_H_"P"]+1]JPkqC&Z>Xc+er"c`HT]eGZ5mpIpdk8^u*Yr;fLo!`1_I:Mg6Z>kUuu9hJAJ[2Jg8Ol\2PnZ;(K9t^f[`8+&'hAkTH:+YCi>nG:]
+&l*9W:3@7J<>*JS[)Cba:8Jf=Cq*7T<&1hkV%i@@r;K/jg-R)+`an[6oJo`Yoh\X5:i.Ju,\Tu,`\-oZ
+9nO`fb<jOf,>=(<;T13+/7MD^S#$7X`gm1U'erN)3']8jbr$bF<?fn',J=Ksb,^iTP9Li_imI@':rN[g
+Md!C)("#/*:$XsiAE_<m'\"-j;uK,677G\tkE_XHaA#4KI-]7oRS1MU;>bQ7e5]G\:=QqE'@e:*F]$Re
+2UsBW9k>YFD'm-2n2m-&:\:,MSP7Jk3Bhb`e[gmh$o(c+A6%t[c^V#[dYc91!4[\ucmt")9ED@<1VVs.eO<D;
+KZ$.+4giNpe`e1+%9a_cXAI/W2%;q&CuWqRERAVif/5uu9h&2!G0Xcee:i.`[7X9&]#gL=9C5Hm9mfgd
+VU"u%epV77'kl5G;qNe4c[AgG<@CD/.8mi3eX_0>XP'Er@FCVi<T@gr[$Xkt.+GY]QM"O`g\o\YZrTTt
+<`PAbAC6kd"3MX9et&2\*0;0M%7$.gURclG9d)FfM,rti6$1mBOH8"9G!t/,g+<n<7ASXKF]rXW>(q2rX[l<cWn4(b<X^_7j_WPtqc_g%aE7C0[8C$hRG!jm>;`e7FY?<L-Rml+=i:["MgWWh)d2PX
+--_G(]_Y^cO'$^e>Fg^ENP-W\]VnO)&:H:[28rg3Q;&rtgF]d;Q,obYe_.?G`KI>3oq!hEXAHR5/N#[c
+Fdpug7bU;/<)oYu7AsKDVql36Q1_,B%BDe>g.o'0cFqt'D1,Uc+'S%!*aRXUp!$\Sm5,R"gHE\c:$("B
+K\L?E]9JgZKtYd[h:o;I>K+,-,4s[X\A+T9hW$'B'1#="mF?oFO<)7_*Ab'Vp>9HUbpE-fD>E(3pt9fN
+>?0clbB:?Yd85hH\tI2Ni5e`scS7J7e89-[*GaJQ[9YrH<'Ac>L"5".$/i4f.imF'e_FQogYhbZ?.H/d"WlV;
+SR)3cgC/2^2;uP</6cE$?=j%CQ2P-Zm9XqE6ERb(Sa8d.Lq\lj./!Yk`Z[7rmooB6i^Ma/jNLse4'V5L
+Y7:?cV>4Sd.cR<UhmN:4%N=6]0&khO1VO#_73(%Am#I1O@=:4p?4,W/WaK(R?u3-r"ut+=$"IR.A%i:F
+;5@UV&**'hA,\[AXqTY-1>tBdd%3Wl/e[,K+BS@->:(3GVFfj79"u\leRW"FeeD6#+PX!q>Q'Fa23;?JAn)9Pi[L2>egB0%M6m-#A7cSc7PEi"04h2FdZ-%9g^E(3]$(H'=9_mTFpm5fs%Ra*j/*(A
+bi`KE4D&b"Aqjn17R5o"5\@06;64tP3oOU#;eFiZ6i5AF(3/3F(C`P[jh>it[T[<I(tDXLfMdOTFm3H!
+:o0[l3egD8c&1UPE(Q?ojX)*VmT&H;i7pCP>\u60<Q3E<2Wn[VB5WO7Fsk9sg=Ye?MCnpgSmUX'CM&$0
+;hd6mhIO=m6"Z+!jrS*u<fbWt5%_Nqj7\jP[Z8kfY3,(KB);5I-0o-.T&^r2k=1;AI\Gq*La9]YiPp-(
+KsjI2,@rKSAG.*:IHjVr;;;T4l?$Y$ja1YFXPk,pj^O52I%4kFL1jo!X"G6(2POq%U>^E%Ai)m>eo)3ectMQZ
+AWE&3::SQoA7gj5BkBMn:;H*X_IK`_l'?."SseEi]kP3QBVd7Tc!P*1a;1?Kk7->6%^kVGcKfAodsCb'
+<_UL1/5lHfh[N_&jXY)A\n1<\WD9PIbTCD.Y373_m7"e-7^QiHZgI1e$6HWlk0RdjYM993lKGuu\Bi-N
+s5[nJCc42r`b+%53UABajsKG1f'Ln.2!e93lqS&WDC02%IVI'pm%28H^,3[gRq.Q<mtTe>Q<N@hdC5^rB9q4DhL06ae_tB9Da+6k'J8U%6fM+;Y7BE+pBBse7IQi-D"dXA1MLelj6qHj?US!+5.U*/
+J8Wo3jjptG0#2H+'(4oLnO7NWcLC(Z(@5V:CmOYYY6"!f%d^YDP]mOQI4XaB#Od]Znap&SY';T.a60VX
+=GHigcN<X7-L`(\\/eR/Ns9Q)#4;F3ncp`8KpcnNOGa<NS.5R+0Ze=aL:VW(DN>NBFU7LYP4;<]F+4ki
+2OAE,n8kb"D]J`E<u>t-)0*,KdnZ\%`u+FZ+S+,+o%p-^*i/0UH0mg@kS2-Z<c)ki-Zlei@O5K(Q':dB
+:@7sooJ]22%/'2V5:3i4MmKXn\Ehc01\6WmlfRJ3?L)[!3-.l"EAopp?TW7W)g!GIF7ekdf3n4U)tO:TmCouN
++(b(/Al;s4D'qef?I<]:gm$X+C6io0#>=dR-Lu`hD;S.`(FjVLQ#nZkpIA(]VT>)WA)qTj2\<jo?!U"7
+)KhBJo2dhL<t]YZIeUlfDWb;JkCN(<5#U!Ao?-3<;/uA$@Va:!%[A#0k:CgYMY'DsgIF^+MG7X<-Z-dF
+p<HKT7rJ,L6h^M-p4KmIpMtOichODsG>FT)?W*$lGA43:%_i?bmL\^YIqC<pf+3<$G?an;J9Usjlpj/6='bSR(#A&.F8pD.mtJV[LAHt3p(k6ei5PD6R<nV1_InjH[j(J%%.8;>_XC(\hei0B[eVh5
+kJ+=B\!Hhs.mOW3qZiMcbbW%HXHrgip=D&5LCSUd6#7X<H2]aH^'As+`-cd'r.^G^:SrGECh`njHA>mT
+15bq*!.)\dI+PIoSBI3o]mVhtHe^`1(F!U4,C&rnH]CnhB1VoDgA!nBC6&Ml0=q,A?[Y`-rB-86rc@pt
+b5;F8Eu$Rl-[P^"_u,Q,2-7cN5*DY\U].`sF,tllB?GAbT)4#`p'\)%mR;O/o$!t<HlVWp^Yo(re:1qm
+rEj81a4Ck-PNXsYDuXVO\,H9?O3=bX)G5]K$jm9r?8,W9Ta6;P%#74onCX7#.2%S.j&'LN<]q=\a<U4G6mtMB
+%
+ =f_pR9Zah/s]/lZT49$@lKcMAs8),l>8_V:Zo)G'c)ElTMfHfMHq]k:8UtS[5sRRUK=BpC6a\4-;*?r
+f>&.`-'legZs%<&gF[m1$$'8/="B9I^ML;[la#9ipA8sI?*IBm*S1T)!2P<6$r/Go!3mQb[QKjS-323N
+1ARI&D`sE5B!aR'NdjKl$p<5d*DWeA!Rp4RH>StgBt)d`G2'.%pMmh'Dmu,qr]cC"`c='6mT2?8cfF*T3.*YdVq/@b]3W/6GJ2o'GC'6N09`Btm!8NC^Jl`$n+_9K1uAh=mHjKEIfA6Vj7`JeO8I;l
+YA&@F"2POAi4H#3e/JIiOF/>[_N8ji#XZn^0b)!=e2n.,nGG]d`/sUa&4F\3i.E/N**Rq_Oc3Q`7M2/-
+)TNG;FLjql$H30#&c0fs8.mG^+t^"jPlSEO%%AJ6&r`Y9b*&j./'ARL[.-`R1m'B+9)O"=Uf/a$Oeacq
+br!\/7,8&8nJkIA:6Uq.36r8.m6/cO]_+J6;hS-E95DDb!N_<mHS;Jcm'-R_Dp+I1Z4>'2i4&?l2,(IgHXBH+
+FU^W6drcBu;H&i<;W>7:V'f?p[%/?e<ehs:>LsRkCK\Ffm<N'^[EWUc0D(6T?.d_&O_*.q<L[StMc;E>
+>*"XH5?ef^s)$LI"heeX<pd_AgfH)FF52ug<u]1WmG2qkn]]"ihK1$>B\GAF^O021qU9iL=:PLc^%OU]
+KAbBVK7Z^^jm@dadhUOk9j"LO29jdn22`^1^!Ui\(H'[(j>d--P2r#p<0uMU.f!PbMd.13AkL$rKg1iT
+T[M@nm89K8<:a)A<;J1FTBR7PJYVI('j0[4<HVfNkBH?rLZ05t$`i5)k&IQi)Ut`q8:(!SBPdPMeZ[Sd
+,iu:Cn&AFnjP-j%]B(!WkIkcfk4-.S).hEF?5tU)_qhs^I<o@I>`4A<gOtX.='JrTJ+Ad-fsL?t7UsP5
+bCF1)!iYi`d\:#3:""0467LH-4_J9V+l.o\flm=e!S_e2a*ZWO81-\GEZQ.ti5]Vf2iH^f?8La?#^/AG
+n%911lgN]VXmLGEr`aq@'LMJ\o.lb=cFUTF+.d1-BAKDk)A?3GrZA'*VZ.`d6)X!OL8b,["7(#d3TEA&eG::U"'2WD.$`EtkFAmjJac,94n`WJ?t0Wu%rMk?f<GQgr#U3HL(Zg49_R=0nSp0*'ggDTNuVqD
+EUH^43X6f(*5jU5jaGuI[s\dXe3/UarZT2sM%S`(8Th+W_4(^Hnt!utG&^,&`Ajt7@`,s<O_QDcVi_0a
+Zo!07()4X\T^sBqc]'S=2A/P>#b_AKNY0PL`u+1a)$Dfu%u&2m6Ge0j),Gj&W8p._o)3)Z]7*HdrCE=s
+,@lI`<Fs$65Nsa"?i1RLOb)OaW"fJ>jIB[6NBt\m,q%dGVj1/JaIVs#.$G'XNj7S*b;jDZV7a4&'(0$L
+Ls$/G<%aODjqpc`8:7![YYakI<LnAU.orDZMihTo7CfH8B"ZWLZW_4b356-hCoEk%XVOU,pG4.LU6k:!
+Kgs_GoOCkjH-]5l91eM'B>!o0'CJ!,FUEn%9$E@c/Hj,9_K@-(P`X<^qp<5l,3Wj+U/XU>1ns5$BZ'jb
+18]0=B#R7h")4OV*^DLf=\*3h-_,:Xc^tMN8EVu[T/-,.dolK@.D7X3<:.BE\V1CU"[>G>($*93@h,9_
+E/+"fB<W:O9.GW`G]b@#;\@,3C98b\'D]aF\YVEdK^PoT]T1<1EDJ%6B<>12[Ps)Bq5=?i<iRcKS](IlC5!Nd8m7!Og*UBEKTE>0qMNnakQhDaEg%,B]i_i\9'18!=#E1a8c'f=Q0ih%[&2*u)^&Qc<A1ZL
+5./k/9j0,3V6q)AeO#(]:o4],QufLsY?F!rlJ4p[eLo-BMOdg#)j;FF@]nJoK3#"`0"CUaVTrqi)=&<j
+XB/,V<bgB)0"nC!2f@-Z96?G`ESODZrIYpJVg,1HNM1M*p/kPR@'=_C3(8;7=KCatXDRc5[6E]UHTuFf
+"]2]eG62.K4b.H&"`=#-]NqSMKC6_j_:V6b@5lMJm?KuT2#a4K4,eD29Zji3$Ka"Ahh)k"_mr]tgVA,-
+K(4-CKhm/9ieK%*E>BB6pHn.G9;Pa.XKo^PF!9KnM1qq[-V,&.X%u4!=`6JXV)R\QT'P@#lm>iJq.D<!
+S*=BI"o#b,;Z'Ck1P)i42T7Wt2IK\pAb1(^bo+h1=_*M*Y!(@Wg$^-Jgl\3brdJ-TWnH,9$KA;VB"R7K
+&BbJPPOU-QWA[6q+-XU$jX)ja>%ZZ$!oQ/UaDV&>K2H0T=?6WUA(;5G7HplkUM!Ug[[?e2j6^MJZds`T
+)'<1#]mPQU8b$VVD!GGV"-d+;T?NY)q.8BOQM-'ZIq?MPAdtehZNasp;AVA7>h(7oY2RZ1MQGt]c*qm[.?GsE!TYg7]CkU'hHRm)mmen%Yh"T<H7'`s\WNe0c+2)dib7T%"FYCkU""H?;^1U0!'#EaM7$*#
+0Bu923*rGg#D5t?Sfu.aQ@t+IgK7%jT0%&t[cKR$GjCpfbP.&OhRP!ETS3iM,OVX@q]ZJ\4O#2GAm3no
+$_hJ*MWK#q@G9NjCinIU@laGe^RK\9DOnhuoVEeth/@CXh8rn\AQ@jIa0KbMc+Np,BXIF/%JJWND)jd3
+W;*i0YWX)!ZX(?(>ZeY(r\;D<g#(i$X,q:9P45_ec^o0@%oV2#G;mF$\<s%S`X_%2q-TN0h2eo60%K._
+of_H8]pIK5]r/:g*U]h?\k9ZEeT/,gp01%^oJn.)qI`Fbh'^hHrh\5YQW24XEX5gOJ_"t(iqT'Sj70m>
+J[\h;gq12*qB)d2r9r;1&<!u?rUH`pV7,R#e'YDFn%,le"lN]?7JPb9cAq@USK:Oe\PM#U[g&/3*u<(M
+9D\4X1@jli!,bd:W0jGXZN2_g!Dfe$moF;B;W<cL.kd":9>#k;H@Se#p5`hZcoD3qVBJ]u"DtI00J_oG
+VYEfGq/5uHc]mTE*;QgG#&floE)rrkY-.)\qN)Qk:`BFSJHt[nqlTGqYJ/CWC5+Bn5nF$IO3X#N#];&4rpX;gKD>koe=#e'CG6h0mO$1TR^[-EX7%n,ONJhE3=%<e%<-Y'Xap>QpAO+rTZ])Q$%-SD:<KDL
+p9=>pYknP*ABXFbpFu14au9#*9*J)f##5C50N.s+)$Q-Hmgo!;"LSJ1/I.Bf%FBe<OZ*s@!sk!Kqp:Sq
+0?4DP9]E9qmjq0C%S7&oMXP3alEOt6DtqRr[a-[.#)CR6d*D]RbaoBp'<sP2d>8,?]&uKc)(_*Uk1VBj
+`)i'.<_E0!&H*O;XM'`!pJJHpOA-\^Tc>F0UQH3%8Y6VhhUmp*$#MU;OXD0si=;t?'#_*i#s/etNup*9
++*!2\W(dt$h$D4[hhu1_n'_"baQr@udSY0qn8;Bl+!Ju,`GoB.Oj$ZW@.KFc*O(]oc;=ShIj>GT!cdlT
+dRt8b[.S7+,@mJ?XP!/9+W>.j)R)@OYl?&o],Pb'*)^>f904-!0-"ugJqTelOqA]Hf-q7"hs\pQA[Mil
+nK3ok,grM7nuQ%n!>L^(W3SK8OprRR@hq`?'a8RpNS<Gi,pLche^1tdd8KlrPpA):,XgB(EiUh`W@oc'
+,uHNNbS2K-^&UD$!4%9N8FZDnR4#1f"*/B#1E/(19.*P/-]u4VcqtAVIjd)\.5<7KBQ4GXj!dl]*ffD$jf9HKlQhY`.W\`Bo(=lehW.O(+AUf:P5Qp=n>"@%_)$&9E`jut%chXj.?`4?Z';a0.i-Tcg[dh'
+P2dAljXsHu2=jm-'<HQ0O>*[>32d`]WpqcA#s8k[3bU5`P7o^QaM.(p)\XAXP&Cm`W:r&k1=I[9Wuj/Q
+2%`cUs&'^cF$VUGnN\o35D5djKrHp6#s=ET3g:L>Z`>B(AN"WV#nGsHEleq,`5IjuLN5;p9LfI$!]s<5
+$]dae+hdqA!CYF7$OW=?JO&bsP]]_BF\Y:aF#:7C"YPu$7qOJA<$+E5(I?CfnAlV/mVOa09fuC?0P;mS
+0:bL#\M6N"kqgpGe)!"iSP&!2"HK$F;pcq6"Qo)Y1i[:UPRTK,#=!=[`\TbOV1`)LbpkQ$8+_L1["AX+
+,9Sfj,LX1%d%rggd2_[WF>DWDb`tUr;ag*G7C6DkZt/4HB^jDj:,NDV1fc/m&Ohj:+[?G9TnPrMTHR;V
+n;lM'eL*iS"#qsi3]!I0Wln.:m7ro7<_p5r'T5kmUF6e@8TVd@PJoYG>>S8E50=O3Oh")jgIfA>/erU2
+'n7Qp[5(^n9D+-FPK)@ZLAGuq=>4q7naB\(a]oG;;<mFSFQ!t@<DI\e<]/K0C&'88BjNI/:U#sWo5u4_8Q0a38nsPg2).s.2!7k#;sboR7p+a<,>qDg3+Db^!l&0i7P"0;<"Q9V<\/BXCK0t(+VB-&e9PQN
+d8h"<?'\&mF`*WLl"&oY=&8Ej[TuIf<sI-t=1#UpFcB"YTfptKbLN"^epT6;ONUY#)jY8'P8?K,ZTn'U
+3JF"t<RFMu_eKkgF&^q&Q-V[h_,ciUCK=)DNU:$dpKfXm.!=uG2=jeUYV4QM+]d3%Fp1gq.1S6gFL<=C
+Z85<$d8:YV/GAaE&KOEmY>V_t@s(^[ZuoB5F[t#lEH\rI9?'<)DHL\rB=3),[@Lt)!t#Di4Vio0p29U_
+K4f%n0K1^tp46j.TkJX3>0o-@'>8*\UI6mprt_.V[psUTVdEEL2pp&i<j+lUdrDjNACeG=[GOb8[qmtC
+<u2/cpN9;RF(sX_Dm_6:Pne4[6Om%OG#_7FG4Bjc#tEO_Cpd7L(D10O'4b1(G^%baJoPcsF)j-YOB3lO
+pFUL=m;ja;F_NLMm[\GWPbM5NIeQKI(JphQH!&\oB\-Fem$UQ!EGa=I;7Bn/fHX+2'mqf2?rN5+&ab4W
+M1+"/EL91JXTs6_P>=maEKp9ND@p^64'tbUJl\9k%hj#-Wql3/Aoa5F<],TZdr<pdLiCOd(eo[MgPIlH
+E!3EUiY?q[Tn(VrJS([,eW,_*Zo;QAMDm,;&4.A(XNYlkN,j=pGTTWgj+mi7N9#tN(8W$l,?p2q8a%#;
+(1W)W0o5TpO*L>YYV0fQ!CDmgM3?It(h7CneKHWQLQJQl(j?c4]PCU0lrNS7;P?!Mc"%\LE9Q,&3;n[O
+6'%?[H''a/p%=60o9C-dN0kII35]hM)3sM&J9b(D\@QN;AX0[(QZMV<`%*Do+-P9GK!')u=VeMLhfj<fR/)D!=Ij4OYqMM.M-3933Brt399;,3:Q\A>\$K1921.ArP1Kq:R.1pdD4B#SLf_onZ:C?$Z'tLM
+R[GNom_bG1;4fd$C\XloR<,"lje+=5TQ.T0(n[,ICOhaI"Bku%\d=8Iq``6`kF!UM\^b8:M1tbhOg4)$
+p*5>R0:C-dI9;i#Qc#D?XdY\UGZMY7;R^pscZuj?UfX+1g.d=2`I\tdlI^T^39QJ7qB:,CLmC2[g/Y*J
+;aItZ43[5i=nSIl'<3p^-953l3ZEsf)k\)kX#delH"VT;T;jf)X'-K@QkcX-0::I_U:<"We./W4Rt<KN
+ocd;?\i#8Sh4DtBUkqa>>$%p(Oe+JAV7F'O=BR0.o0[UOVRM,OH?ZUW)4OXfV;!B%\pL\B':kSIS]K9Y
+g68aF5>N290B=ndHGd,d&ZTCgQ.ijO]#hAW>IGH`[Fu$/Ro-1(a0n'P[WocXMA)_#(IXJcZNdh3R?m-h
+WNMTJU<(67j:>gieN7=?H]6R\)aghkXV:R<ZFdZE)i8l&O-'(p>.Z)n].($i^V)]"7llKjQd_CMYJ*(a
+::caCqi".XBt!l7[6+2XA+R-5Bt'RU^cVq=)Tf`UqnILVF5.#9djLJT*Om!T@M:u>7mXl[OeWgelM%c_S";n"0dY>>n]Vra*)4.OZP`SK]\0iWHUiH%B4b+%_VAkF]PQ$.28.bujdSEIHrIuNjh@\lXr.nf
+>`HQYnRi&IXV^lN]UciCTrbm=WZ&a(Q&D[&OghtGflj-mG-RH4l=9\HRI?GMP$Pr,P7$f#`#:u)r-I#5
+o>gc+a;j<_2j(_=Q*BoZ]j,%qRi06E!RNt5Oqd_uS9Fk!iQf+OcAgk`GhKT2D93eEb+0or>qNHOYCV'A
+auHNGI4s$]Xi[*BQ(0,r<"l-lS8TCfUjF3.7^L>9`P]>[c#=o*d1ae#8'sI;c@'uYdoXM8cQIW.?G-)q
+d[Qb4#MD8*d!OHmh49bCFk=;Cg.lA$rK)D9O^+Ghd_(XhS\<MN^WNN)e69!'S=dr-_:#kogj=J)SOq#8
+:!<4QbUNA!2sJl"$$Y3G@+T07>H-JK^XjL*i-g%3O$2,7/VS6(KtWD!*KRiRQf:1Ti&k;D>]n`s40P3Q
+i4_1Y=en*eP6m!)E*]S-rRL!-_rVoTIm$0T^0H1+F2=>Ye(qX;?.m_V?MD-+5m4U>(Zr+#/N\<@PFZ*5
+*W*#8$*ROgi*JLsI[f9M#L<6M#eRe/\J<@1+l[sYlZp1s]/T'E2re58j*o*3*N`m0OS$oKE^"4!?>Js(pZD;sk8MUQ[p/8@^7tS^k;q(Ok"eeJj@ZQAkWVSCh=Kj&$:"J2;1(%ARP3osbN^/ql0<KO*:_Zf
+(U4q.caYq"5.U:b6)Is=iuJZ$s!.*,:F6o)m2^!0?H'(]P6KbejZdJ@I5!@g`%`>-mY`$cmXa1YCVO1[
+pRcWohYp/t44]Tu/H66n3K1"&Mp=G@g\[[lIj+0.Z1<BB])OAII]N'gNH8?;oJ"*T\s>mQ$fo(Do\=N[
+^+U=1?hGMIr`>/"9SF@V=@G?*c$o3VfVBW"5S+2.!.hsoi!/K:K&hX'@5/TE.N%4HUkM&>]Oj)@N(9Y*
+q!=#0-'670&t(#><WE[l:/^>0b%!#`_r+BOPTk65Skn:nl4!e.31EL9</NfDPtdK<.M5jC2Q%%a<U,j,
+[:Zr0&V`Y\$N5_"@^'":Q?t3deRnkdmM?h-cKTJ_eSc%([I3j=\(`Jo)b(>=KXTgC\=>`%&W=D6neiEq
+k.=X'jXYVH`br2Oa_15a*.A[(MT4oQ>+J]sl"/F]p)=s@j%YKeD0Hi1cD,Tmh/E%X%JL*a_rGZ\*%k#'
+QcJ3/q4/">8#au'F*eo[cW@RiL71_g5S&LdjRN"mra/0bg$ABY^)io3=52`)Cqh'af$<r1c8)Kf!f!lHlh7qHcnlBE^?gLj"[VMi*5=8U9I1$!E0MLT6ZD*IS3ESQE"rL!#QYOUYrk_n78ZHS'ZKTa@i!((
+A8<#OOh>NG[Z8j`mRPR8JF:L!'T4'SndLX)8Q%C/-TSESr2hf;.jWQbZD7^8Y"?KRU!*$!_P'WNm)G_K
+W[]KpW@DH52GNdIrei5SJrqgeP;Mem9G>U_3R-#Y"$07LbiM2W9[s_$]$T7D/OQmN,:lElga>Kee4]m;
+;`*Sj$du9@,jNko,Ag?.oWfE58bAO@=&kN6='8P2KkjiB25P4q=#K)Z,X_$IjUbO;%>aet&#Fn,eJ;Xp
+A^Am!0.O:$S1A?hP^L#W_=i;L!a@R!3H%Mjc,U"BG,<!a;tg%/E8C8B6!ul2'P/:T(US73?T7*:IpVa>
+Fb*W%h0jn5p`9lti><jWDPF88c#"u=eg1JU',:2"c\_koN_A`UDaYn^%-`qSkcQhDd$+/^QVY/@4#Ki[
+V#d%1Zn8+Kg,\"5L:C3#FNhXI?AjDK3UW)+kZR&7V-TFH'r*<@Nek_j[UaZ;BDUJsL25M7^ThT:-FpDJ
+gFZcXfN'WZA*r#_hYSg(7FA2SpH@'>l.b82CgGE=/A?(!`ZMlZqmQ"Gn<<Oo^dB);)ffrrQN+pEr51b,][s:cIIl(Y!RLCD$ra9EqZbHuFZjA7f53["$,\:=Q6k#>]T/,gAiTg9O(DHfcE0d)7u4>/8;Dmn
+pXpPRi8[sqUZc;\DHZ:;o8]7+C%PJ.;fFc4/(f5i"';AtrndPEc<SYkmkDLloD!bmk'bhYT>0:^Im<++
+rkF6e!+5m@,-)Tk^j$:i<`=*kDB8R+pLa79g?j)[R&r!lT\e&&(L:q@%_-`9"5s(AKFUH*/\!_G@!!TH
+NCD*`LH=Z?">bd/e^:reDZ8Q.3e22?+$]OM%a,80G)'*B6^GCF(q]*Zme,g!pO8`DMps+-9pWaGM\FQ-
+:JEJp/k,Q:o,asbN/ZGS4il"W']ZEA:k]0BfRV\MA8-WmW]I,8>(bQ<Gr@##4ukI]*$Q)LOAZi:aCsTW
+,Wq!@ckX&UVW@k)Hn^,0dLSkC.j-(,G(YTr6l4L?jP4hkPXm\H6>8(U,tst(YnBpD3DR+r>aUh>/FUC%
+aUR&W]7uL6?E\%),,@ngQr=c09Qt$3dK,_O15-!(=*YXWXA0nC9oqcpJF[1V':RB^C!@O*nDaZ$S<JP>
+ZT-1S-W;:SES^'(R+h=39RDG6\d?KWkrWP-q4EZ9hT"eq+(>Z[2)4qCbSUVcUh%K=F!>&>g*&iIPmjC+^.??P,t6q7(.9q'JfgEJ-QuEQ>V=<&1oXgCV(%Uo1m4-<fpq%JPr!HBSe])A4\+bd(7+MnL<Jdt
+0.ICFL6Nm<d7TNgW_H!_8R5]<Ba4cOlh-mLb&9"jYr8>0fW-fWY0G\43Ms>mXAtR+`ROoKj!nuC1kl!+
+)GrWN4SX`:#.Djh7:'BDP"H@9SY*IW?d/`YPLK6%=F-BEBUssaFt0?@fc*_#c'+n:@:[jP?!sOX/["`+
+(K/pWj=-q!@Wl@O>&%ngS&I+Xp8S^m)cLN'e[)Zcet:GAJSo>D]1/&(aB8=j@kJ4NRC,B?(0*&SCXl@'
+e:ls4``U@B]Mt?=(m!5ScPY?[A9h1PlrH3]32YNlS@<Y,cBkk;CW+Gqote?aV&+2b<PP4d][iBlr.Juo
+3A*,eq:e:,)__;S2mV/Kgj=m0Dl*lOGV9;0g`^^>XHTD]<;FX@02:pRZ)Um*Hd\rRL8d$`[$Zmc.[s9b
+0\)f7AqJOe#ubZEhD7sYg0ECTLQ66%6squ1"CV.WKQ6]QN_E=k=1dRLS)rh88\(,!kDmZUD!B(;3V:V?
+\ToNed`In4cJ6'lKCC^B2@"F!A-U;HbT7b6dk9cj7r*VEV#l.Wbe>(Gol%,OB[<+85@bc8OYcgMUR4gb
+BPKS0EOL$UfQT"ub=R&NAr]gb^:Ij3lX.#2S(!ViN^Fe1Nj6Tt7lfm#kM8q,ogXP`.^#0#oeDeK?F%6_
+cWb0jE3q:Sg<$r"kj,o(R\hEAI6#[?C2I)IZ'D/0"a%iC>7%3KL3;3=f/su]OfJ-+WnWuOAF7(Cs)]k-
+ZC@$sC&@_6E@.*q<UXMeV6,Z"L@a8^.s,!CH)WYBqmX,FE,GQc^c)c)htBL4XR1NIJPd<D>Vh*"XkPlom]b=`;5J&&IBDgJ(#tN/D<sgAC?t=0i0>Num?S7#YE&94E9if+pWKDpDZ8_0&"@MjEPZq(3B#WQ
+6geiBh"4RUjnJ&&jo$FO<A*b)>rSZ#/an\ncMZ0t:O_k0DpGr?46p/B6$1-H89eeJm!Y4Up21o)HRB?`
+gBWc4mN^M)LDoQbf&:<lj[!u7s6FkFH!5E#b*8`E[CFV<o_krLmT1h*]mIeBh]^T6Pf2b>Q_4)%&nZ5m
+:R'ZW\+H:Qk^=8BY['bIF`+8F>rOV1^.6cM59K5AIt+Ae_+o06f@mpY]BoOkh0\U3n9sK7pma_+G@'1t
+4-a^A*TFSsrLrRmDDCgH#JhlK-ZUSa`p=)J_tkuUJ]qJ[qHoT@IW&foI<uHdhIAreM_Bg%GGK8fQ_\N6
+l2H1aqf=rjW]`Go0uNQH49@`GoKQRP53ljb_rRWJiP#u`5^Wl'MmbldjhS4_^r,7u':h=-q`]Z&^8qCK
+UZsnWUR$8F[UNdOq@PpgVSPq,^bcY=4;pMU)aT[P^MD"Yg\7M=Trc020fpYrb0NB_,=4L<'gr!a6i]Pg
+Tg=V?6+eV^`$r=iq5aUt]*o-8g^D!c,!u2:_[9,J*"OmA]tTFS1_N'XA/%%^`BLS%ProjFirYno.`&296c;((9KkK'*C9#c2^A*fj)hhA8i?du6;0g9>XgWi5Jcrj5R\u(r$T;p4N$MK`4Sf2Z)\9Ed(EU9
+6Ng6''JDm#;(OOd3<D'+r"-\$9LI7K6YPJLEoBA@4W?3U2N0%QKNH.Z9uZ1#[bJsC"<JuH8%KBb]c9DO
+PXNH+B1@8^/J)qWZmS83CE]cb`UljDggEV2+iGkE6HIP=$r]YI;9(dsa$MXMS2.Iu^FiK(7LJ&bPWH^/
+aM:]?Q-p(2!l5tKHUj<Fa:)t-*,R*/@CckVUl7UXKLJ@7gI?!maGbsDCaI#aMaj[r7a-BR,`TkrO$BW<
+)P]'gS7tJMFM!_m7oY[B>`K85n0dQ+`r&n/m$^!2.`Kn17B4]hEG^tDG.uF<2O&\Gm#T4%U<.5I8iq#^
+4G:jl"%Z[-88?F4qts!TX%L#L8?@bBge&/0NCl$rb"T%Z'Rhs-ff<7:Z]$P1"85;GbfaDY7r/r!['<8V
+50'@i6aR!"qDthHP!Mpo7BjMJEVRa'U.ZKE9=2X\XN!pBVFDiP7"_G\PKuSfLe>V09Zs?Ve?6m*cFmJN
+bZ)t`CrNOSHkdn@aU).p*7@P$:G9?$PcHQ"CmdQLd`oD>ah1[![+>^+=VP8R9Jfp/F4s?>p<5@sc"uK6<8:5QoZ0-[cAVKlS0Z0t^<3P%:<`)aXNj;JY"$(bc=GeX*9Tmeim"/n_f8LI909k(p<OGfabrAX
+PJ"q`##,Nscci5Ob]lq4A'NKh7[1?k4:k'rps0B2c\2O!9a3?]kXorM6mNkhPfb^S[nOI%d*3"USF4Vn
+mnE*O:F-1l'aD;*o8BuLbu8;nPk@a\O3&CSbD=[u;HcZqhG<eW2JL<2[2dRLdmpIS1J1Wo8\<@Z*)\p:
+dS1@QXN/\I-V./E:m>M('^I9g$rGb2;Tcc$m-i<meC$3#;=-'c7$(99ED]]JR`-#b2&[R%1sn_dc[#T"
+1:O'u*`F@>/$bJib50<R=fm(b*GNMk+a?oh-.G(A;oM08/I0LXbY!N3d&_Z>[-U]@92rK+dcAa(gXK1[
+7+3/Q9LJ6t,[66obge!7;eZ>675e#,]c-J:-s[b;]c5K2:RuO(<(,_Cr?"nE:JpdaMfF!lrEE6,>uiOf
+&p6[lI&>DHe$S3dZ;jK84_dPoCIqNB96G%$eSNg=DUd2If*sCTc!sbeF%-7Cdon]Z3Qt551K46RP&^"n
+AU)g+E0rIWSTE62-"PUh,0PCTe_NGWo__Ts%9Kq5==n%8?%5sfJCJ-WcBUm^bGa"JDc"'67V+0p/PK:5B@d;?;X0oU-&5RhLV/modsZVqFMcT?f@WN9c32X"F=^.7Qdp*EP_D)q%?ah1>M8B+9>JAI"b4pB
+S<oLi=Y6IQoomcLA_<6#<csE3AS7tn$s26uf_)@9NK@9X:.E3ug1?IP*)0R1;\IoP2cWm]]`>8W[)HU$
+>!5P_-)K=4]36cDc.njl4dATe>2-0b>8=qU?)Q&'8(*?N(2^),<H$Z0DHqUJgl74sS]>!#b1r\e7]!<B
+ohO6N]A+FC5+Se0c*PSf"$0GhgNpD9.o'ALoN/HP:t<-_%F<k+g<6;Gcubl4_ZO2Pcs<d3;H:TdS>Y.1
+A6d*s>_V6F?-D)Aj^*)jX3ApsNTMurl,d5U<u'"^*JIelmp6?1gGQNENS(H=+BTY0h./r[Kpl3$g"uu%
+g^N#\qjpO\QlKDX?^:RqrVbGmLtjlg>*\:/*U6sblJO8r?p4a%1/EX4:^_^W@"no:"pj.a$/hrp@(m(X
+Q4@<2%cGVCi8+uQ*Y;a,&Rd:+@6P.W7I8\:c+9bGhsL2IRO#G6TYip=7if=se^Mu9[[.I#^YSTlmB+kI
+raJ%cRh?o)*W'.'7pbU%@R_d*:#.@ci`9V>=KVj9:+bBn048*=@h(0Okkj:u0Ol"-j#-%/D=-@td,C!6@?roR`Z$G2-J>WS>?pg\_i\*T<+FE&?Ta3%H,AIa3937Q:#7iH?9=0(+gHbMA"H*LQ79M,iSqdA
+?8[UM-;J%d1Z\O1j$lmP7Lq?\(U;r>@ri]$/dL?E>\-qPAR7`7Sj[+kJ#3]Fh^pj!"kDKN!gl!\A`P+G
+%
+ '6I_BB3B'AZ]Lnc6ciQ[]dp6jJHX'<bb%J9A5"+?kuW$%T$^0DJ&ldB+Ae=:0*1R=BQKCB08eJ*]7RF
+Y2qiLaNdrN:0M;4?If8>Ae;Lb+Ur)7g`%#:iQPqIj<Pa0A*9FtkI,*eAA+Kr+D&PRkZ2H]VM\$[s5L`0
+d%2fO#'&kpDWpeSB`=,P/p>0l!+eoM*?LG@!53(uMdp@`l%soP7YL!.M7>EokOs;e(4P5tqc/>nl/ZMl
+e,E@k_'Oh,l+X!"p6mIj!+^6t70]ROQE"Z-WkFp:jMl!Y5&G!TGA.PkCAtJP#-ku#;WfnKB24k-OKQ[E
+<^,V_l%SM?=r_3FV<YM%C;ue/'f]Pt;WoHUQ(gD&etM@#M!0Q?a8W.*^7*.B>hPl8BP,9NB$+ppgu>cE
+?j;VW`T-7oZ>BNDD$J='%Kl#YHtSI^CS$sYDK>%a\SXgI-3h(u[_1t/q;!B)C&+dq#//cKO6e1%Cc*%c>g2Q"19"lbmB5/ZSgr:Pei?3smU"XcAt*DHbo;D?m2kY1/9OYCmHkV2BeIp&L=L'JGA23Bm=+T^
+hWXB.pLmm2l6bL+B&7CCp*^F/?T'99B)0+!J1YV%al_[PVZLb+**O)Pmr&9qQNh<0lY+6$b%B(>rs@?)
+\#@*PnA)PQf*fYi%.Nk3D[-k9DUW;Xf^CFpCOT>9`qAja_shRJms/*-52P8L,%9Whed^*sOpCHug2F_F
+EQ`XoN^?DCJl!a9nW+u81b$]KB_#dREJGrA(5qP&pght`nK/*A\]bR='_:c/O#IT1(GCh>163+mo$909
+^@<#JQ1$([Bi5PN0%Ofm0lL,0De@\nO$7Si45IX+>D2\;("_d4Ic"pdnch;<j/6dM,4Ztnn5h(2T.*XG
+J+A(]oC#:neFRG#Xmh)3mcRGff27e4#Y$0rJ.FI/="o\*<:K'4FXL<bml%bebjfTcD3hX'f(89HNq::r
+p'DZ0QV@#D@kZ.MDl5s&D]A<j7TEe`2h:>FVeE'\s1ZT%i`rlX^LD<JDg"!o:Zf`>hf*\pEqV'am,mX!
+hba!</bLYkohST^T2tP2HM(\Zo)TbN(Cfm>%emG[o/D$f:NuPRP]a/ho?MT#<]/ugKm"3qpIC'ZFM95Y
+;taO)iWheC5AIX1C"%9=eBCQEG.VWN!72O#pG\@R^M\6CQ2+44nm;XmZt";]2>;lrAJ\GDV!/>H7!L)L
+q7K`&7pL:5EHl*IG^"sgIi%p9Vft:-/ls+hmIGS$*-'uSqR+gtha)EXQt/!Fq/c&p#H.BIW)tnb>Q:)f
+2n!UjRIpNJo_/Xf%taWiVPDId$f?@4#JL#\=SoPqnLpX7*Z/t%'u-*PFr,&n5ISo3`)<4=Gn3@2hl^i=6i<:Np1n.dqdEL^P;ZE(q_,AU+)L/%d="7!I3kTXYIJ8hc$PMeH`,O`s&As#Id5hFGPD16f_CB.
+TCEHEpbPHe,QV[^V>`\fr&9B#B;TZEZ$f-^gF(&:^We;.qS@[(jo;M[P$2@NcgmfmrE&4_+0k*lk^OE@
+Al#o1?b-'"c2JO;s,SA5Vtkb/p3n?S)HXl6k?e&`FU/#DW)Nc4TT.L^"ir/)Ld2NmF@%&YM8Wkc.)]FL
+(61gnd?s9P588c;KOKtp!`(81b,#a8AA28(R8%9LH%b<o31\?le*5rmHUFK(BJb#=-Ab9id\t[\ANlS^
+WE![jHA,t1=KU/Se`u7FHR3\4/Co/:VU]Ij>:6lDICA6Y\m94*H_iXjHbNj*fDFBJ!G];Uml)4E-NRb\
+j(n?^AW%j:Z<B"A*6!OfNm-ZBGs)(M6(ZM<o\(ldLK12#lSX!:I,c@VEb4r+I<Od^]%6<DgYN.pJ&:.4
+31PFV-\ok(o([B!1_p>EJol=p5/11(g[032Sc,'/Z2sI^G+N&2T@F;@q`TCHGK8\6pAI/S?cV'so)/MP
+DmTBB^^qI^!^H0*&HfjG'GC[:E&8R@_@W4V$:40_0akhU!LQ[`%'%UY,Z,I<OeaENrt7`i>YQ!09XEUd6dX%')B=eX72!R:FEJYDOkbL#[a&BEk;fh1M^1iV>`C#NdU\UiZdAjh\182lrg(_91BfARdepnh
+Yd4bZ[EDK"d24.WPh@I]18<5@c*D`[-r,tJml\nEh!7/M'B:M8ckFq-6;R5*#=QrR>n9EOe9r'%:<nL%
+n%<bU.ni%P_r"3YYgks7_UT?;;UcF%;,^GZ4]PJ3Q$l_9e^]ph>1OFZE>_.69RRsPp$*hCfCg55@_T8#
+D-BlFXbC6*2C4u.=:msQ8Pt_+Y=RC`[CL//f$pSN9FURAZcmVCk:YR,?.c\n=)Ho@YLAcKE%1C4l#5<8
+h<TMs=7-*=i)d4HI,LA4rIa'2:)ST@G]k$Z@LZ$\:"))9/WA-1_oZK%ekL.GA6$?6ARsI(8X/<3/l@nq
+=`.Z6AX5\tB]dm:M.YoDL2`2/YjHY$BMlI2Rch6;V4MC(o4a!>>(3$@i]<AQW&,0@\BnN*IH>N#qX21E
+CRYgUY2J$)r:9-A[]?h'gIBr-D4@-S\F/+Kjgsn"^@f5//:2)*@sHT/_W\1g4db@,QP[[*HtOPAEEnPR
+an"5B0?H]:U(sJFg-)BgoGV%uT>l90?c;R7-V'ubg2?r)G!"Sq^NNnp<NIjUG.+=8X=&GRpesZ&iV;"oceMEB'LUMu?(YufqAu9$lM=hrU[7iK^U``Y*o>M+n:)Mh_IJUabJ`uo?W"uET6K#jbtB^YKmnMu
+kP>-bY;>s'ch7>]=#fE7A-I,!"f"=q<mr.s5^s%SeN2>!"Pmk8H`r#04npl<i7d.=cKsMtP#@R&bK#:?
+RM7(0cO+)i?\6UKj0kmB#9flsL="3b_:W`;iRC#FYjrmRk]0R.'BOV&Sg6&a4Eqs,%uIPSs2=(Mrl[(l
+M?ls,1`,Bk@_>Th0m/hu3%4oslT0VpS;t0o[25H.LObI-1e.hm6_SlmLiM958!nt;h9t_1&:Cf2EtogU
+9IkAY)AL7`>%,QAMil,!3leRZ%&B+RP0r8]ab_YlUthB%P%mfbq*a&u/4kZdRT)\q&K@KU@#?_N0?Ws!
+(1OYVIS]N<9*nfSV:fF2cmCbH(J?G,*5RV4p,9je3uhi`bt(Vk:<aYD-`3]f2A,U:'D$&e$quOP`;UE@
+6Jj$27,FGtSobcoY[/T6ekda:C!Pu)4D1IbSo`V3busX$kLB9916tnXC'?+-%0W#\l@_u['eEq,I$^nZ
+K[@i'6tSR",*1#^5\SC^du>-'Mi(lgZg.a-jVaFa4_i<c<BfYXre#9oY8\p`=PdS@0b^FOPF9TR-VW[#'`Oao_rX989eBh=cBhG?P>S>ZrMe=*W)Up9;X1%.TG!it:c:0dAQ9A;Q%"ir$5f-FD.K_I:9_\u
+6Q=rLnta_EA^XXI7cMo"XUPnS<lpb9l]c+_'gAVL$EI-=rAB\4^35[n?sTZJJ?c)Na4'6DA=#`GW&@t'
+c*UtAX8R^Bj-%42lU>K(-%iS5$Ii6@9ks&iMP.<\;cTa9=!'kD[ah7Y>DgR2hnb&MpAWgIRb(d0j0,UB
+SYa_<FK+[SICTr)e(Uj,CG(aY:):F8a8!,&C#OH%$#Ob:8HSBbm?Y'd[dd[Jpeu!7d(5Q5pg3jZFRQ'V
+^,OX?heVBK._W.&b];WH]EN1l,[R%,MZ_m""+ag<@^rm*kL+.2K+O:n_Djag;>[\K0AZHAfC!Mple<Wk
+8UbonE1CBL^=Y(rlE[eS(Dg1)GtV_*_mnS6A"3.OYl6c*)"/SWgT,g@N^^AZ*[TQG'l\+u:!&ef-06*q
+Pjk7Ub1L:W@63k2ZG"Oe385Ne*.s=5emO<")A,oC#C#c7/M=Q(ia,*rH=m^A`[.fE93X]M1Zi/f=oU\J
+4T1pp#(t:JdjH7ceW_hdN6s[F.;8Z+USA:9\?o`s/KHQ91=a4aRV,H%Rld<c(8]NG1D-d[jbfjK?d5%<be)\7flNsEcHrmsQE8>S&0@arRf>b@m=VW#2T46P(LbcA!:]PVo?hkS8o5$6Uc,*6g3[!SBl,hV
+o'.ehZPQBp4[5:@%U%;.)g#neOYh4+Dq/FV3+fe6Q<Mimep5SGaR%^O[qkS+R"oeO]oTu(%g:]n)hDs7
+'YmY%h'?2g]N*dm`:f5A<qn%WEK2KUmLB`^O;gpQICB;a5#U0`Mj-K?GJa,N#N^mdIa.Mg#W\G6hYOJ$
+B-(eqGL#j"1-^3"IG;p?G=CW,+,"a-?ded09'NIT_f4[0`&NMkinSUV/"8ON\CVJ\e_cF.R,b[M/T@'3
+Q`KK:h:/t5`m9&t\9*auh"clDk@N[uh<j+V[>JPa1M.6f/oM+THY(3fDn#Hnj3tYBNU`T)\bQaPjB')n
+m&Kf[:i=b6qY-PHINaeqhQuB!*Hq&2DNK%#\(^bpD9MgKanm/#jV,[Wk<.5Jo5)tFQR8lSIIe.^?@gti
++,;K)'A<79-1ZLtbPC#Dk5>R@_dKLW=Is-;qG0uPrBK$5hfjsYYJedP)BSgQS+;$#c2,1Fli#_MpjR_S
+q`g_ArkHMM<kh^BHY6f#04=W0Pkn2\ZgMf%Y5j7@*4'G#kO3ZPW)WNYh#X[,!@UeFmJ-clgA)8O!)P`W0L#Z$5ld!8"3%YDNC6$#UAGEGr"$=AcaO)h^BO)5Xfu:=UZVi\HK=Pk_@SX/E'jm?Lu#7\Z&g$H
+6iR5Ti&2'epeZkME")MsK^\'?ZV?bCd!lE79+*FF$]ouK:qmC6k611s"X\R"D4:`+D$Frt%5?NGOP^Ld
+i^.U-orn;JciFO$_[I"e#]Pa.E$?ognm<]_KJ.`BB`/8+E=!j*bn---mY%pL!=s.Y%l#RIOY7>e1Cm>A
+$t;V)Xrd10Wt#]k'Th,\;,%b07hlV5%Zam*Y\Om!2&7h`]r-,+%s&$C2SIKNZ,E+COa-s;K*fmS9+R!E
+OWJboI25[7'6.Y&d?tmBQPrPPo$@;77!B("V\O2O'Q6DT0i&aEVXt6)U$)4;!p3VTcrB2r5OmCR:K\F[
+ipG-g)6ok@;&\l>EuctI(D-`L&I(k%]"7:k9+ci]nIG[g<>_qqmh#F1&To.X,9G71,#Tj6EU+gkT+e0G
+qSe@3/<Lnb6Q>6o*7<LdZ:,^Q730MhY-LgFE`U!(>gH;V*/$6t;=KQTrtVd)s07h6&q;+)/=Qu[SdQ,X
+&Ss'kgE7%IfhW8(EIeH-"!<XA+S$5UM4kHT;MDE)-o/CYo"?8'JLg<3/1pl?WJmV#4VTP,,r.sTdV1!>__'(O
+-KHI*$jeQQ(7-9M0/@;rN:9.(G6a)3/!A"*;Ta`7LFCT/.B7Pcn<"iUeKPYBnL\MN&rABM.4UGZ.T(g*
+0lI>LrsGg8`03P=E:GX1_(bI^2,d^:1LDjJ$7tcQ+jrPaZK!kVk1ONo.5Dbp&?R8+]Y1TDUU'nYZZ8C<
+q`*#F3":!UduJo6K.a;^QP68Lo<13TKar+]-]q_:ZO8ZI=Z-cRYg%G)6m"2u/Jhm&.:g<IOp&+mdkn<1&^mc^;0=BFm#cA*4B'-Te,;CMs$*jq">VnW67"P<gHeRr3cg-Ddeu3_[3fss4#<9k10[(E
++ZgAo3>8#Oa9=o;+#e:)6?G4KPFSRn.7DDQ(t;\9;n4fM]#.H&5SS!!M)e#R-Sb78bk%;?1hfIeJI.Kf
+5#Xa2ObYd>&Mk%=.Bo[c'DXmmUHgZ67b"8,[&C?"i4nW=X"h!'1qc8`_\A<"-'Ug0FB\i(F$fNL9iO#(
+F;HrM2afJo652^S#%5HK,qjA`9f2*'1fm?@5d+,t44In8e8ItE?SVd)k]9TmZQfMcG=W+p4tgn3Oo%\t
+[7O.E8(B5_WQ@aHYu(*`<)lRg2%`h!VR?'.99cnDmaV+hj\?@q9U*q"2!\3W7or[c=*8@]Ph/r6kti#[:3CJV
+Z>D['C8*QZ=4GnN&cEa=q,"G0%eP$GPttTEo+G'2=mOY-odWY!h\Xc-5&U6h&=5.P-C\#I!Km%PE18[_
+HneVg>89k42=4U*o3W7+>HY(B<5hmRHU5"r78u!.dT9S9qcNLj@+B["ecT>Y8Qdp/=8!_;1sVC&/R`dQ
+@rmiAA&U$bK4#H`2c`R\(.VpO9k9PcAQD`@Q="3H@qF5&A[ZAd(2%7qD.])PB22032KNMl6QC7e:Gs(n[Ku[#4_V-(:"GYE2;'st3C<G1?<3h(eiQu12/-!=C/j:sF^\:9_c>5laH]rMf#;J!a)*`d
+Ct@?X(>Wh.iGFn<DO0=#[c_PZo5>E=DH?XPpAJo2!H4;(E0gZG[g-m('6+g)E*!utpDn6T+`WhjEgJ"k
+[jQ4J1NO?kE`Y>CpH<S!6$&AWFI,@:[mtPl;frmXFB;[gpK_oC@;pD5Fn]Zcp46juojd]BGF*5lZK66g
+C>$(KGaDQX=,hI6AU.@<H$>HtQ_/QTUNmZRH+0c!(Ti!bX*[pOHZufCQbRn!_g<3?Hah+E(X7>/bC*I<
+I<X.gQf!5Cj*_a,ES"oR8Q0ibo62KL=]]Tmf7/;Eomf!qJ/AZE=:KeJ%tRgrJX?[nfF`]0(P4UcJf$"i==o,l
+08!@_K:"$=fJ/$R2hX.PKG[@8=A=I9:PDnLKpYAafMR@t=,&\=L)=]\=D`e[DhhG9LR;_0fPu]AGDJ5*
+L_u&+=H/-(O,6u&M3s'TfTD$cQ\mblMAWCO=KRIJYDZMhMjUE#fWcDsP?=-bp<ej=eB),#q`'dnMn$T_
+fXHe6iJmWeN`bV-R.$%pnW%kcO-o[&f^4a1!K[$KN`a\:[-^6S,A?b0@TF"`GghV>$'JEnP'I:qR4j`V1QY`uP.<T:)*O0d4-Wl4P^,W\R89'u]&NE4O`c/=\R1J"09s$DPrV-rfh7Y,;3s:YQPk.:
+=acX)J!aAkR$i/cfn#OdLCH7X@G)/o)&$d$NLBTNRTZ\Y\WN@!Q('e;Rp!@mRD5.M_4,_fS=.EfftEod
+d@C$NAGMXZ<\C>=)j)$$C:0aLQ.)9afq2F=T:+<'\^d>jpRg.ETK3%F=pq!l&#!/9T\8.i2DLZLH(#UN
+Od<2FRN\AN';:jPURDdig,#N#2l&JrU`)n%>"tf]:Sh5n#5T>sQA;4R-(^LEOkCshH<m@n8#KNfVg<E^
+RX_6hK;G#`W-X#n\qR)OPGm&ROOW`rH=Dgn+0&:7WOcl>HBG1QZ`>"RW;=-*>.L^1]rP>UX;]-\3mXn]dUmD0
+QBi2T[s(]\.o4`oVAdX\g<$N:dB<?=Y<(4;](`D^q64'*YaYZtgAeDs#I+(?Yr`>u],.a,)7!HkZC<#C
+gE3a@-aNV,ZTB\D]/R(N3OE!X[$s@ggHW(b8$r.n[6%$h]2uDp=ghOE[[U^6gL%E/B=@\[[l\B7]6Ca=
+H+7(2\=8&ZgOHaQLUd5H\N>_[]9g(_RCZUt\soD)gRl(sVn2c5]0!(*]=5E,\\).a]UQaMgV:E@a1V<"]fXEN]@XaNftL\N^74)qgY]abkJ$id
+^H:br]D'(pq7p5;^mkG@g],)0#Jg6P_)r+A]GJE>)8]W'_OMddg`OER-c5d=_`THe]Jma`3Q,/i`10-3
+gcrat8&Y=*`B6f4]N<)-=iO]V`ggJWggA)AB?'jla#n.X]Q_EOH,s6CaIIh&gjdEcLWKCYaZ7'X+9~>
+
+grestore
+showpage
diff --git a/macros/generic/TeX-PS/epsfx.tex b/macros/generic/TeX-PS/epsfx.tex
new file mode 100644
index 0000000000..88d8e4cd94
--- /dev/null
+++ b/macros/generic/TeX-PS/epsfx.tex
@@ -0,0 +1,412 @@
+%--------------------------------------------------------------------------
+% This is small extension of T. Rokicki's EPSF.TEX (from DVIPS 5.58):
+% -- allows safe including of EPS files generated by DVIPS
+% -- can also display bounding boxes.
+%--------------------------------------------------------------------------
+% AUTHORS: Bogus\l{}aw Jackowski and Piotr Pianowski
+% BOP s.c.
+% ul. Piastowska 70, 80-363 Gda\'nsk, Poland
+% email: B.Jackowski@GUST.org.pl
+% USAGE:
+% \eps{file.eps} % instead of \epsffile{file.eps}
+% The following settings of the parameter \tracingeps are recognized:
+% \tracingeps=0 % default, no extra information displayed
+% \tracingeps=1 % displays bounding boxes and file names
+% \tracingeps>1 % displays graphics, bounding boxes and file names
+% HISTORY:
+% ver. 0.5 19 VIII 1994
+% ver. 0.51 25 VIII 1994
+% * \epsnamecolor added
+% ver. 0.52 31 VIII 1994
+% * \eps renamed to \epsraw
+% * \tps renamed to \eps
+% ver. 0.53 9 I 1995
+% * `\isls false N' added to \eps
+% * virtually active slash neutralized
+% ver. 0.54 9 III 1995
+% * \eps clears bop-hook
+% ver. 0.55 27 III 1995
+% * a patch neutralizing unnecessary rounding added
+% ver. 0.56 3 X 1995
+% * \special commands surrounding EPS box are to be nested in the \vbox
+% ver. 0.57 31 VIII 1996
+% * odd characters in names enabled
+% ver. 0.58 21 III 1997
+% * setpageparams and setpage neutralized
+% ver. 0.585 25 III 1997
+% * comments touched
+% ver. 0.59 7 VI 1998
+% * EPSF.TEX included
+% ver. 0.60 10 I 1999
+% * safe multiplication of eps dimensions by 10 (expected to be
+% included in the newest version of Rokicki's package)
+% ver. 0.61 29 III 2000
+% * \eps expands to \hbox
+% ver. 0.62 13 (Friday) VII 2001
+% * setpagedevice neutralized (why only now?) along with a bundle of
+% commands specifying paper size (a0, a1, ... , b0, b1, ... , etc.)
+%--------------------------------------------------------------------------
+\edef\slashcatcode{\the\catcode`\/}
+\catcode`\/12
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% \input epsf -- inserted below %%%%%%%%%%%%%%%%%
+% EPSF.TEX macro file:
+% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+% Revised by Don Knuth, 3 Jan 1990.
+% Revised by Tomas Rokicki to accept bounding boxes with no
+% space after the colon, 18 Jul 1990.
+%
+% TeX macros to include an Encapsulated PostScript graphic.
+% Works by finding the bounding box comment,
+% calculating the correct scale values, and inserting a vbox
+% of the appropriate size at the current position in the TeX document.
+%
+% To use with the center environment of LaTeX, preface the \epsffile
+% call with a \leavevmode. (LaTeX should probably supply this itself
+% for the center environment.)
+%
+% To use, simply say
+% \input epsf % somewhere early on in your TeX file
+% \epsfbox{filename.ps} % where you want to insert a vbox for a figure
+%
+% Alternatively, you can type
+%
+% \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB
+%
+% which will not read in the file, and will instead use the bounding
+% box you specify.
+%
+% The effect will be to typeset the figure as a TeX box, at the
+% point of your \epsfbox command. By default, the graphic will have its
+% `natural' width (namely the width of its bounding box, as described
+% in filename.ps). The TeX box will have depth zero.
+%
+% You can enlarge or reduce the figure by saying
+% \epsfxsize=<dimen> \epsfbox{filename.ps}
+% (or
+% \epsfysize=<dimen> \epsfbox{filename.ps})
+% instead. Then the width of the TeX box will be \epsfxsize and its
+% height will be scaled proportionately (or the height will be
+% \epsfysize and its width will be scaled proportiontally). The
+% width (and height) is restored to zero after each use.
+%
+% A more general facility for sizing is available by defining the
+% \epsfsize macro. Normally you can redefine this macro
+% to do almost anything. The first parameter is the natural x size of
+% the PostScript graphic, the second parameter is the natural y size
+% of the PostScript graphic. It must return the xsize to use, or 0 if
+% natural scaling is to be used. Common uses include:
+%
+% \epsfxsize % just leave the old value alone
+% 0pt % use the natural sizes
+% #1 % use the natural sizes
+% \hsize % scale to full width
+% 0.5#1 % scale to 50% of natural size
+% \ifnum#1>\hsize\hsize\else#1\fi % smaller of natural, hsize
+%
+% If you want TeX to report the size of the figure (as a message
+% on your terminal when it processes each figure), say `\epsfverbosetrue'.
+%
+\newread\epsffilein % file to \read
+\newif\ifepsffileok % continue looking for the bounding box?
+\newif\ifepsfbbfound % success?
+\newif\ifepsfverbose % report what you're making?
+\newif\ifepsfdraft % use draft mode?
+\newdimen\epsfxsize % horizontal size after scaling
+\newdimen\epsfysize % vertical size after scaling
+\newdimen\epsftsize % horizontal size before scaling
+\newdimen\epsfrsize % vertical size before scaling
+\newdimen\epsftmp % register for arithmetic manipulation
+\newdimen\pspoints % conversion factor
+%
+\pspoints=1bp % Adobe points are `big'
+\epsfxsize=0pt % Default value, means `use natural size'
+\epsfysize=0pt % ditto
+%
+\def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
+ \global\def\epsfurx{540}\global\def\epsfury{720}%
+ \def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
+ \let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
+%
+\def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetgraph{#6}}%
+%
+\def\epsfnormal#1{\epsfgetbb{#1}\epsfsetgraph{#1}}%
+%
+\def\epsfgetbb#1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+\openin\epsffilein=#1
+\ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else
+%
+% Okay, we got it. Now we'll scan lines until we find one that doesn't
+% start with %. We're looking for the bounding box comment.
+%
+ {\epsffileoktrue \chardef\other=12
+ \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
+ \loop
+ \read\epsffilein to \epsffileline
+ \ifeof\epsffilein\epsffileokfalse\else
+%
+% We check to see if the first character is a % sign;
+% if not, we stop reading (unless the line was entirely blank);
+% if so, we look further and stop only if the line begins with
+% `%%BoundingBox:'.
+%
+ \expandafter\epsfaux\epsffileline:. \\%
+ \fi
+ \ifepsffileok\repeat
+ \ifepsfbbfound\else
+ \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi
+ }\closein\epsffilein\fi}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def\epsfclipon{\def\epsfclipstring{ clip}}%
+\def\epsfclipoff{\def\epsfclipstring{\ifepsfdraft\space clip\fi}}%
+\epsfclipoff
+%
+\def\epsfsetgraph#1{%
+ \epsfrsize=\epsfury\pspoints
+ \advance\epsfrsize by-\epsflly\pspoints
+ \epsftsize=\epsfurx\pspoints
+ \advance\epsftsize by-\epsfllx\pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize\epsfsize\epsftsize\epsfrsize
+ \ifnum\epsfxsize=0 \ifnum\epsfysize=0
+ \epsfxsize=\epsftsize \epsfysize=\epsfrsize
+ \epsfrsize=0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsftsize<\epsfrsize\else
+ \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \fi
+ \else \ifnum\epsfysize=0
+ \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsfrsize<\epsftsize\else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \else
+ \epsfrsize=\epsfysize
+ \fi
+ \fi
+%
+% Finally, we make the vbox and stick in a \special that dvips can parse.
+%
+ \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
+ \epsftmp=10\epsfxsize \divide\epsftmp\pspoints
+ \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
+ \ifnum\epsfrsize=0\relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp
+ \epsfclipstring}%
+ \else
+ \epsfrsize=10\epsfysize \divide\epsfrsize\pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp\space
+ rhi=\number\epsfrsize \epsfclipstring}%
+ \fi
+ \hfil}}%
+\global\epsfxsize=0pt\global\epsfysize=0pt}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
+ \def\testit{#2}\ifx\testit\epsfbblit
+ \epsfgrab #3 . . . \\%
+ \epsffileokfalse
+ \global\epsfbbfoundtrue
+ \fi\else\ifx#1\par\else\epsffileokfalse\fi\fi}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def\epsfempty{}%
+\def\epsfgrab #1 #2 #3 #4 #5\\{%
+\global\def\epsfllx{#1}\ifx\epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global\def\epsflly{#2}%
+ \global\def\epsfurx{#3}\global\def\epsfury{#4}\fi}%
+%
+% We default the epsfsize macro.
+%
+\def\epsfsize#1#2{\epsfxsize}
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let\epsffile=\epsfbox
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of EPSF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ---
+\newcount\tracingeps \tracingeps0
+% ---
+\newbox\tmpepsbox
+% ---
+\ifx\epsdirundefined\epsdir\def\epsdir{}\fi
+\def\epsnamecolor{1 0 0}
+% ---
+% BOTH \eps and \epsraw ``normalize'' the eps name, as one may wish
+% to use \epsraw separately
+% ---
+\def\epsraw{\begingroup\escapechar-1\catcode`\%12\def~{\string~}\epsrawcont}
+\def\epsrawcont#1{%
+ \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup
+ \ifnum\tracingeps=0 \hbox{\epsffile{\epsdir\theepsname}}\fi
+ \ifnum\tracingeps>0
+ \hbox{\setbox\tmpepsbox\hbox{\epsffile{\epsdir\theepsname}}%
+ \ifnum\tracingeps>1 \rlap{\copy\tmpepsbox}\fi
+ \vbox{\offinterlineskip
+ \hrule\vskip-.4pt
+ \hbox to\wd\tmpepsbox{\vrule\hss\vbox to\ht\tmpepsbox{
+ \vss\hbox{\tt \special{ps:gsave \epsnamecolor\space setrgbcolor}%
+ \theepsname\special{ps:grestore}}\vss}\hss\vrule}
+ \vskip-.4pt\hrule
+ }}\fi}
+% ---
+\def\eps{\hbox\bgroup
+ \begingroup \escapechar-1 \catcode`\%12 \def~{\string~}\epscont}
+\def\epscont#1{%
+ \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup
+ \vbox{\special{ps: /SItps save N /isls false N
+ statusdict begin
+ /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def
+ end
+ userdict begin
+ /bop-hook {} def /setpagedevice {pop} def
+ /a0 {} def /a1 {} def /a2 {} def /a3 {} def /a4 {} def /a5 {} def
+ /a6 {} def /a7 {} def /a8 {} def /a9 {} def /a10 {} def
+ /b0 {} def /b1 {} def /b2 {} def /b3 {} def /b4 {} def /b5 {} def
+ /letter {} def /note {} def /legal {} def
+ /halfletter {} def /11x17 {} def /ledger {} def
+ /flsa {} def /flse {} def
+ end }%
+ \epsraw\theepsname\special{ps: SItps restore }}\egroup}
+% ---
+% Redefinition of epsf macros:
+%
+% The values of `rwi' and `rhi' parameters are to be given in tenths
+% of big point; the older version of the epsf package used to multiply
+% a dimen register by 10, which put severe limitations on the
+% available EPS size.
+%
+% The macro `\decimalshift' multiplies a given value by 10 ``syntactically,''
+% i.e., accomplishes ``decimal shifting''; the following conditions
+% are assumed to hold:
+% * leading zeros are meaningless;
+% * <digit>+<period><dimen unit> is a proper form of a dimen value;
+% * the command `\the' applied to a dimen register yields a canonical form:
+% [<minus>]<digit>+[<period><digit>+]<pt unit>
+% where <pt unit> are `p' and `t' characters having category code 12.
+%
+\def\decimalshift#1{% #1 -- a dimen register
+ \expandafter\expandafter\expandafter
+ \decimalsplit\expandafter\gobblePT\the#1.\relax
+}%
+\def\decimalsplit#1.#2\relax{%
+ \ifnum#1=0 \ifdim#11sp=-1sp -\fi \else #1\fi
+ \ifdim0#2sp=0sp 0\else \fractionshift#2\fi
+}%
+\def\fractionshift#1#2.{\ifnum0#2=0 #1\else #1.#2\fi}%
+{\catcode`\p12 \catcode`\t12 \gdef\gobblePT#1pt{#1}}%
+\def\pttobp{0.99626401}% = 72/72.27
+% ---
+\def\epsfsetgraph#1{%
+ \epsfrsize=\epsfury\pspoints
+ \advance\epsfrsize by-\epsflly\pspoints
+ \epsftsize=\epsfurx\pspoints
+ \advance\epsftsize by-\epsfllx\pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize\epsfsize\epsftsize\epsfrsize
+ \ifnum\epsfxsize=0 \ifnum\epsfysize=0
+ \epsfxsize=\epsftsize \epsfysize=\epsfrsize
+ \epsfrsize=0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsftsize<\epsfrsize\else
+ \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \fi
+ \else \ifnum\epsfysize=0
+ \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsfrsize<\epsftsize\else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \else
+ \epsfrsize=\epsfysize
+ \fi
+ \fi
+%
+% Finally, we make the vbox and stick in a \special that dvips can parse.
+%
+ \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
+ \epsftmp=\pttobp\epsfxsize
+ \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
+ \ifnum\epsfrsize=0\relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space
+ rwi=\decimalshift\epsftmp
+ \epsfclipstring}%
+ \else
+ \epsfrsize=\pttobp\epsfysize
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space
+ rwi=\decimalshift\epsftmp\space
+ rhi=\decimalshift\epsfrsize
+ \epsfclipstring}%
+ \fi
+ \hfil}}%
+\global\epsfxsize=0pt\global\epsfysize=0pt}%
+% ---
+\catcode`\/\slashcatcode
+% ---
+\endinput
diff --git a/macros/generic/TeX-PS/mirr.hd b/macros/generic/TeX-PS/mirr.hd
new file mode 100644
index 0000000000..5c39e74fa7
--- /dev/null
+++ b/macros/generic/TeX-PS/mirr.hd
@@ -0,0 +1,32 @@
+% The following header can be used for producing mirrored output on
+% printers (phototypesetters don't need this) with T. Rokicki's DVIPS
+% driver.
+%
+% USAGE:
+% dvips -hmirr.hd [other_options1] <file_name> [other_options2]
+%
+% WARNING:
+% Be careful when you use DVIDVI or DVI2DVI in the context of global
+% specials like `\special{landscape}'; fortunately, `\special{landscape}'
+% works smoothly with DVIDVI but not with DVI2DVI (Sawatzki's
+% implementation)---you have to use `\special{landscape}' on every
+% page that appears to be the first one after splitting a DVI by DVI2DVI;
+% the same technique concerns both DVIDVI and DVI2DVI if user-defined
+% global specials are used.
+%
+% In the case of difficulties mail to:
+% Piotr Pianowski or Bogus\l{}aw Jackowski or Piotr Strzelczyk
+% B.Jackowski@GUST.org.pl
+%
+userdict begin
+/bop-hook {-1 1 scale isls {vsize} {hsize} ifelse neg 0 translate} def
+/appenddef {
+% use this for lengthening `bop-hook' in your TeX program, i.e.,
+% instead of \special{ps:... userdict begin ... /bop-hook{...}def ... end}
+% say \special{ps:... userdict begin ... /bop-hook{...}appenddef ... end}
+ /stuff-to-append exch def /to-append exch def
+ [/to-append load where {pop /to-append load load aload pop} if
+ /stuff-to-append load aload pop] cvx /to-append load exch store
+} def
+end
+
diff --git a/macros/generic/TeX-PS/poligraf/README b/macros/generic/TeX-PS/poligraf/README
new file mode 100644
index 0000000000..7fcc57d2a2
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/README
@@ -0,0 +1,121 @@
+poligraf.sty generic macros, crops.pro and separate.pro dvips header files
+Copyright (C) 1996, 2001 Janusz Marian Nowacki. Public domain.
+ver. 1.0, May 1996
+ver. 1.2, April 1997
+ver. 2.0, April 2001
+------
+ [Polish:] | [English:]
+,,Mi/edzy \TeX-em a drukarni/a'' | ``Between \TeX{} and the printing house''
+wersja 2.0, kwiecie/n 2001 r. | version 2.0, April 2001
+------
+Cel: obs/luga strony dokumentu | Purpose: preparation of pages for
+dla cel/ow drukarskich, separacje | prepress, color separation, cropmarks,
+barwne, pasery, ,,lustro''. | color and gray scale bars, mirror print.
+--
+Pakiet makr zaprezentowany po raz | Macro package presented for the first
+pierwszy na IV konferecji polskiej | time on the Polish TeX Users Group
+Grupy U/zytkownik/ow Systemu TeX | (GUST) IV-th Conference ``BachoTeX'96''.
+(GUST) ,,Bacho\TeX'96''. |
+Niniejsza wersja r/o/zni si/e | This package was completely rewritten,
+*znacznie* od poprzedniej. | so it is *not* compatible with the
+ | previous version.
+------
+UWAGA: Korzystanie z pakietu | In order to use the package (with
+i programu GhostScript do podgl/adu| GhostScript for previewing) needs
+wymaga zaistalowania fontu | Helvetica font to be installed.
+Helvetica. U/zycie opcji \labeloff | If you do not have the font, use
+nie wymaga posiadania tego fontu. | \labeloff toggle.
+--
+Instalacja: | Installation:
+- plik poligraf.sty nale/zy | - poligraf.sty should be copied to the
+ skopiowa/c do katalogu | directory searched by TeX, e.g.
+ przeszukiwanego przez TeX-a, np. |
+ texmf/tex/generic/tex-ps/
+- pliki crops.pro i separate.pro | - crops.pro and separate.pro should be
+ nale/zy skopiowa/c do katalogu | copied to the directory searched by
+ przeszukiwanego przez dvips, np. | dvips, e.g.
+ texmf/dvips/tex-ps/
+-------
+Zastosowanie: | Usage:
+W pliku \TeX-owym nale/zy u/zy/c | The source file should contain
+polecenia (dla Plain): | for Plain:
+ \input poligraf.sty | \input poligraf.sty
+lub (dla LaTeX): | or for LaTeX:
+ \usepackage{poligraf} | \usepackage{poligraf}
+Polecenia powy/zsze koniecznie | The above commands should be preceded
+nale/zy poprzedzi/c zdefiniowaniem | by the definition of the paper size,
+rozmiar/ow papieru np: | e.g.
+\special{papersize=x mm,y mm} | \special{papersize=x mm,y mm}
+Inaczej przyj/ete b/ed/a warto/sci | If not specified, default parameters
+domy/slne. | will be used.
+-------
+Separacje barwne uzyskujemy poprzez| Color separation toggle:
+\NoOverPrintBlack | \NoOverPrintBlack
+ wy/l/aczenie naddruku obiekt/ow | turn off black overprint
+ czarnych (domy/slnie w/l/aczone)| (default: black overprint)
+\Separate\BLACK | \Separate\BLACK
+ (lub \CYAN \MAGENTA \YELLOW) | (or \CYAN \MAGENTA \YELLOW)
+Polecenia powy/zsze wymagaj/a | To use them, you need cmyk-hax.tex
+zainstalowania pakietu cmyk-hax.tex| macros have installed:
+ CTAN:/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
+-------
+Dost/epne polecenia: | Available options:
+(podano warto/sci domy/slne) | (default values given)
+\cropmarkdistance{3}
+ odst/ep linii obci/ecia od | cutting distance from the sheet
+ arkusza (0--5 mm) | body (0--5 mm)
+\cropmarksize{10}
+ rozmiar paser/ow (mm) | cropmarks size (in mm)
+\barsize{5}
+ rozmiar pask/ow barwnych (mm) | color bar size (in mm)
+\nocolorbars
+ tylko pasery i linie obci/ecia | cropmarks and registration marks only
+\onlycolorbars
+ tylko brudziki | color bars only
+\onlycolorsteps
+ tylko skale barwne | color steps only
+\mirror
+ lustro | mirror
+\labeloff
+ bez opisu na marginesie | turn off marginal label
+\xoffset{?mm}
+\yoffset{?mm}
+ przesuni/ecie uk/ladu | additional x an y offsets for
+ dla druku na drukarkach | printing on laser and ink printers
+ (nie stosowa/c dla na/swietle/n!) | (do not use it for typesetters!)
+-----
+Z plik/ow separate.pro i crops.pro | separate.pro and crops.pro header files
+mo/zna korzysta/c pomijaj/ac | can be used without poligraf.sty.
+poligraf.sty. Wystarczy wywo/la/c: | Just run:
+ dvips -h separate.pro -h crops.pro foo.dvi
+uzyskuj/ac efekty zgodne | and you can have the results, as
+z warto/sciami domy/slnymi, | default values from those files.
+zawartymi w wymienionych plikach. | To use effectivelly separate.pro,
+Efektywne u/zycie separate.pro | you need to copy it to the working
+wymaga skopiowania tego pliku do | directory and to change the value
+katalogu roboczego i odpowiedniego | of the variable color_sep
+ustawienia zmiennej color_sep |
+------
+Zawarto/s/c pakietu: | Contents of the package:
+README ten plik | this file
+poligraf.sty plik makr | the main macro file
+crops.pro pliki dla dvips | header files for dvips
+separate.pro |
+sample.tex przyk/lad Plain | example for Plain
+samplelx.tex przyk/lad LaTeX | example for LaTeX
+kol-cmyk.eps prosta grafika | simple graphics file
+
+------
+Wszelkie uwagi s/a mile widziane | Please report any comments
+przez autora. | and corrections to the author.
+
+Author: Janusz Marian Nowacki
+ 86-300 Grudziadz
+ ul. Sniadeckich 82/46
+ tel. +48 +56 46-218-37
+ Poland
+ e-mail: j.nowacki@gust.org.pl
+------
+(distribution prepared by Staszek Wawrykiewicz <StaW@gust.org.pl>)
+==========================================================================
+
diff --git a/macros/generic/TeX-PS/poligraf/crops.pro b/macros/generic/TeX-PS/poligraf/crops.pro
new file mode 100644
index 0000000000..79614ba8b1
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/crops.pro
@@ -0,0 +1,196 @@
+userdict begin
+% [PL] Domy/slne parametry | [E] Default parameters
+% Odst/ep linii obci/ecia od | Cutting distance from the sheet
+% arkusza (mm) | body (in mm)
+/cropmarkdistance 3 def % [0..5]
+% Rozmiar paser/ow (mm) | Cropmarks size (in mm)
+/cropmarksize 10 def
+% Rozmiar pask/ow barwnych (mm) | Color bar size (in mm)
+/barsize 5 def
+/colorbars 1 def
+% 0 - bez paskow barwnych | 0 - without color steps and bars
+% (np. do monta/zu) | (e.g. for plate composition)
+% 1 - komplet pask/ow barwnych | 1 - complete set of color steps and bars
+% 2 - tylko ze skalami kolor/ow | 2 - color steps only
+% 3 - tylko z brudzikami | 3 - color bars only
+%
+/mirror 0 def
+% 0 - normalny widok | 0 - normal view
+% 1 - lustrzane odbicie | 1 - mirror
+%
+% opis na marginesie | marginal label
+/marglabel 1 def % 0 -- off, 1 -- on
+% dodatkowe przesuni/ecie strony | additional page offset
+/xoffset 0 def
+/yoffset 0 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/h_size {hsize} def /v_size {vsize} def
+statusdict /setpageparams known {
+ statusdict /orisetpageparams statusdict /setpageparams get put
+ statusdict /setpageparams {4 2 roll CMdim 2 mul add x_offset add 4 1 roll
+ CMdim 2 mul add y_offset add 4 1 roll orisetpageparams} put
+}{
+ statusdict /setpage known {
+ statusdict /orisetpage statusdict /setpage get put
+ statusdict /setpage {3 1 roll CMdim 2 mul add x_offset add 3 1 roll
+ CMdim 2 mul add y_offset add 3 1 roll orisetpage} put
+ } if
+} ifelse
+%
+ /mm{25.4 div 72 mul}def
+ /bd{bind def}def
+ /_y{exch}def
+ /origin{0 0 moveto}def
+ /T{translate}def
+ /K{setcmykcolor}def
+ /box{_y dup 0 rlineto _y 0 _y rlineto neg 0 rlineto closepath}bd
+ /_distance {cropmarkdistance mm} def
+ /CMdim {cropmarksize mm} def
+ /boxdim {barsize mm} def
+ /dist{_distance 5 mm le{_distance}{5 mm}ifelse}def
+ /x_offset {xoffset mm} def
+ /y_offset {yoffset mm} def
+ /cmdim{dist neg CMdim add}def
+ /cmhalf{cmdim 2 div}def
+ /horver{h_size v_size le}def
+ /setsep 0 def
+%
+/rm {
+ 0 cmhalf moveto cmdim cmhalf lineto stroke
+ cmhalf 0 moveto cmhalf cmdim lineto stroke
+ cmhalf cmhalf cmdim 3 div 0 360 arc stroke
+ } bd
+/cm {
+ 0 CMdim moveto cmdim CMdim lineto stroke
+ CMdim 0 moveto CMdim cmdim lineto stroke
+ rm} bd
+/cmarks{ cm
+ h_size CMdim 2 mul add 0 T -1 1 scale cm
+ 0 v_size CMdim 2 mul add T 1 -1 scale cm
+ CMdim 2 mul h_size add 0 T -1 1 scale cm
+ } bd
+%
+/halfmarks{gsave
+ 0 v_size 2 div CMdim 2 div add dist 2 div add T rm
+ h_size cmdim add dist 2 mul add 0 T rm
+ h_size 2 div neg cmhalf sub dist sub
+ v_size 2 div cmdim 2 div add dist add T rm
+ 0 v_size neg cmdim sub dist 2 mul sub T rm
+ grestore}bd
+%
+/boxfill{boxdim boxdim box fill}bd
+/_step{boxfill horver{0 boxdim}{boxdim 0} ifelse T}bd
+/contour{origin
+ horver{boxdim boxdim 11 mul}{boxdim 11 mul boxdim} ifelse
+ box stroke}bd
+/csteps{
+ setsep 1 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /cbar {0 setgray} bd
+ }{
+ setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 0 _y 0 _y K _step} for grestore
+ 1 0 0 0 K contour % /cbar {1 0 0 0 K} bd
+ }{ % /cbar {1 setgray} bd
+ } ifelse
+ } ifelse
+ } bd
+/cbar {setsep 1 eq {0 setgray}{setsep 0 eq {1 0 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/msteps{setsep 2 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /mbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 0 _y K _step} for grestore
+ 0 1 0 0 K contour %/mbar {0 1 0 0 K} bd
+ }{ % /mbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/mbar {setsep 2 eq {0 setgray}{setsep 0 eq {0 1 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/ysteps{setsep 3 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /ybar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 _y 0 K _step} for grestore
+ 0 0 1 0 K contour % /ybar {0 0 1 0 K} bd
+ }{ % /ybar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/ybar {setsep 3 eq {0 setgray}{setsep 0 eq {0 0 1 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/gsteps{setsep 4 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{ % /gbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/gbar {setsep 4 eq {0 setgray}{setsep 0 eq {0 setgray}{1 setgray
+ } ifelse} ifelse} bd
+%
+/colorsteps{gsave
+ horver {CMdim boxdim sub dist sub CMdim boxdim add}
+ {CMdim boxdim add CMdim boxdim sub dist sub} ifelse T gsteps
+ horver {0 boxdim 12 mul}{boxdim 12 mul 0} ifelse T ysteps
+ grestore gsave
+ horver {CMdim boxdim sub dist sub v_size CMdim add boxdim 12 mul sub}
+ {h_size CMdim add boxdim 12 mul sub CMdim boxdim sub dist sub}
+ ifelse T csteps
+ horver {0 boxdim 12 mul neg}{boxdim 12 mul neg 0} ifelse T msteps
+ grestore} bd
+%
+/colorbar {gsave
+ horver {
+ h_size CMdim add dist add CMdim T
+ /begbar {boxdim 4 boxdim mul v_size CMdim 2 mul sub} bd
+ /endbar {for 0 boxdim T}bd /mt {0 exch moveto} bd
+ }{
+ CMdim boxdim add v_size CMdim add dist add T
+ /begbar {boxdim 4 boxdim mul h_size CMdim 2 mul sub} bd
+ /endbar {for boxdim 0 T} bd /mt {exch 0 moveto} bd
+ } ifelse
+ begbar {mt cbar boxfill} endbar begbar {mt mbar boxfill} endbar
+ begbar {mt ybar boxfill} endbar begbar {mt gbar boxfill} endbar
+ grestore} bd
+%
+/color_sep -1 def
+/label_s{
+ marglabel 1 eq {
+ /Helvetica findfont 8 scalefont setfont
+ (Page (PS/TeX): ) show page_num_ps 20 string cvs show
+ ( / ) show page_num_tex 20 string cvs show
+ color_sep 0 ge {
+ color_sep 0 eq {(, \ \ Plate CYAN ) show} if
+ color_sep 1 eq {(, \ \ Plate MAGENTA ) show} if
+ color_sep 2 eq {(, \ \ Plate YELLOW ) show} if
+ color_sep 3 eq {(, \ \ Plate BLACK ) show} if
+ }{(, \ \ COMPOSITE) show} ifelse
+ } if
+ } bd
+/page_number{gsave
+ horver {CMdim 2 mul 10 moveto label_s}
+ {10 CMdim 2 mul moveto 90 rotate label_s} ifelse
+ grestore} def
+%
+/_mirror {mirror 1 eq {-1 1 scale h_size neg 0 T} if}bd
+%
+/full {.1 setlinewidth
+ 1 colorbars eq {colorsteps colorbar}{
+ 2 colorbars eq {colorsteps}{
+ 3 colorbars eq {colorbar}{} ifelse
+ } ifelse
+ } ifelse
+ 1 1 1 1 setcmykcolor page_number cmarks halfmarks} bd
+%
+/save_page_num{pstack 2 copy 1 add
+ /page_num_ps exch def /page_num_tex exch def}def
+%
+[/bop-hook where {pop /bop-hook load aload pop} if
+{x_offset y_offset T
+ gsave save_page_num full grestore
+ CMdim CMdim T _mirror} aload pop] cvx
+/bop-hook exch def
+end
diff --git a/macros/generic/TeX-PS/poligraf/kol-cmyk.eps b/macros/generic/TeX-PS/poligraf/kol-cmyk.eps
new file mode 100644
index 0000000000..6feb55da4e
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/kol-cmyk.eps
@@ -0,0 +1,208 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: GhostScript rev. 550
+%%BoundingBox: 68.0315 463.846 280.63 677.481
+%%EndComments
+%%BeginProlog
+/GSexport 100 dict def GSexport begin
+/h {closepath} def
+/m {moveto} def
+/c {curveto} def
+/l {lineto} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/*u {/oper_kind -1 def} def
+/*U {*U*f *U*d *U*c} def
+/f {/oper_kind 0 def} def
+/*U*f {0 oper_kind eq {eofill} if} def
+/s {closepath /oper_kind 1 def} def
+/S {/oper_kind 1 def} def
+/*U*d {1 oper_kind eq {stroke} if} def
+/W {} def
+/n {/oper_kind 2 def} def
+/*U*c {2 oper_kind eq {eoclip newpath} if} def
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+/setcmykcolor where {pop}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/q {gsave} def
+/Q {grestore} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+q
+*u
+1.0 1.0 1.0 1.0 k
+175.748 605.578 m
+187.806 605.578 199.175 602.539 209.133 597.189 c
+206.166 575.036 192.899 556.068 174.333 545.285 c
+156.181 555.826 143.091 574.189 139.742 595.705 c
+150.305 601.972 162.618 605.578 175.748 605.578 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+175.748 605.578 m
+187.806 605.578 199.175 602.539 209.133 597.189 c
+206.166 575.036 192.899 556.068 174.333 545.285 c
+156.181 555.826 143.091 574.189 139.742 595.705 c
+150.305 601.972 162.618 605.578 175.748 605.578 c
+s
+*U
+q
+*u
+1.0 0 1.0 0 k
+174.332 545.284 m
+163.899 539.224 151.791 535.749 138.898 535.749 c
+126.84 535.749 115.471 538.79 105.513 544.141 c
+108.45 566.064 121.476 584.867 139.742 595.705 c
+143.091 574.189 156.179 555.824 174.332 545.284 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+174.332 545.284 m
+163.899 539.224 151.791 535.749 138.898 535.749 c
+126.84 535.749 115.471 538.79 105.513 544.141 c
+108.45 566.064 121.476 584.867 139.742 595.705 c
+143.091 574.189 156.179 555.824 174.332 545.284 c
+s
+*U
+q
+*u
+1.0 1.0 0 0 k
+139.741 595.703 m
+139.187 599.261 138.898 602.906 138.898 606.615 c
+138.898 632.754 153.177 655.663 174.332 667.947 c
+195.486 655.663 209.764 632.754 209.764 606.615 c
+209.764 603.419 209.548 600.271 209.135 597.185 c
+199.177 602.536 187.807 605.578 175.748 605.578 c
+162.617 605.578 150.305 601.97 139.741 595.703 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+139.741 595.703 m
+139.187 599.261 138.898 602.906 138.898 606.615 c
+138.898 632.754 153.177 655.663 174.332 667.947 c
+195.486 655.663 209.764 632.754 209.764 606.615 c
+209.764 603.419 209.548 600.271 209.135 597.185 c
+199.177 602.536 187.807 605.578 175.748 605.578 c
+162.617 605.578 150.305 601.97 139.741 595.703 c
+s
+*U
+q
+*u
+0 1.0 1.0 0 k
+208.872 597.326 m
+228.218 587.036 242.282 568.041 245.771 545.624 c
+235.207 539.357 222.895 535.749 209.764 535.749 c
+196.872 535.749 184.768 539.226 174.334 545.285 c
+192.899 556.068 206.165 575.036 209.132 597.188 c
+209.046 597.234 208.959 597.28 208.872 597.326 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+208.872 597.326 m
+228.218 587.036 242.282 568.041 245.771 545.624 c
+235.207 539.357 222.895 535.749 209.764 535.749 c
+196.872 535.749 184.768 539.226 174.334 545.285 c
+192.899 556.068 206.165 575.036 209.132 597.188 c
+209.046 597.234 208.959 597.28 208.872 597.326 c
+s
+*U
+q
+*u
+0 0 1.0 0 k
+245.771 545.624 m
+246.325 542.066 246.614 538.421 246.614 534.712 c
+246.614 495.681 214.78 463.846 175.748 463.846 c
+136.716 463.846 104.882 495.681 104.882 534.712 c
+104.882 537.908 105.096 541.056 105.51 544.142 c
+115.469 538.79 126.838 535.749 138.898 535.749 c
+151.792 535.749 163.899 539.225 174.334 545.285 c
+184.768 539.226 196.872 535.749 209.764 535.749 c
+222.895 535.749 235.207 539.357 245.771 545.624 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+245.771 545.624 m
+246.325 542.066 246.614 538.421 246.614 534.712 c
+246.614 495.681 214.78 463.846 175.748 463.846 c
+136.716 463.846 104.882 495.681 104.882 534.712 c
+104.882 537.908 105.096 541.056 105.51 544.142 c
+115.469 538.79 126.838 535.749 138.898 535.749 c
+151.792 535.749 163.899 539.225 174.334 545.285 c
+184.768 539.226 196.872 535.749 209.764 535.749 c
+222.895 535.749 235.207 539.357 245.771 545.624 c
+s
+*U
+q
+*u
+1.0 0 0 0 k
+138.898 677.481 m
+151.79 677.481 163.896 674.006 174.33 667.947 c
+153.176 655.663 138.898 632.754 138.898 606.615 c
+138.898 602.906 139.186 599.262 139.74 595.704 c
+121.474 584.866 108.45 566.063 105.513 544.141 c
+83.2374 556.108 68.0315 579.641 68.0315 606.615 c
+68.0315 645.646 99.866 677.481 138.898 677.481 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+138.898 677.481 m
+151.79 677.481 163.896 674.006 174.33 667.947 c
+153.176 655.663 138.898 632.754 138.898 606.615 c
+138.898 602.906 139.186 599.262 139.74 595.704 c
+121.474 584.866 108.45 566.063 105.513 544.141 c
+83.2374 556.108 68.0315 579.641 68.0315 606.615 c
+68.0315 645.646 99.866 677.481 138.898 677.481 c
+s
+*U
+q
+*u
+0 1.0 0 0 k
+209.764 677.481 m
+248.796 677.481 280.63 645.646 280.63 606.615 c
+280.63 580.713 266.609 557.987 245.771 545.624 c
+242.297 567.941 228.345 586.867 209.134 597.189 c
+209.547 600.274 209.764 603.419 209.764 606.615 c
+209.764 632.754 195.486 655.663 174.332 667.947 c
+184.766 674.006 196.872 677.481 209.764 677.481 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+209.764 677.481 m
+248.796 677.481 280.63 645.646 280.63 606.615 c
+280.63 580.713 266.609 557.987 245.771 545.624 c
+242.297 567.941 228.345 586.867 209.134 597.189 c
+209.547 600.274 209.764 603.419 209.764 606.615 c
+209.764 632.754 195.486 655.663 174.332 667.947 c
+184.766 674.006 196.872 677.481 209.764 677.481 c
+s
+*U
+%%Trailer
+end
+showpage \ No newline at end of file
diff --git a/macros/generic/TeX-PS/poligraf/poligraf.sty b/macros/generic/TeX-PS/poligraf/poligraf.sty
new file mode 100644
index 0000000000..6b5b93df38
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/poligraf.sty
@@ -0,0 +1,101 @@
+%% poligraf.sty generic macros
+%% Copyright (C) 1996, 2001 Janusz Marian Nowacki. Public domain.
+%% [Polish:] | [English:]
+% ,,Mi/edzy \TeX-em a drukarni/a'' | ``Between \TeX{} and the printing house''
+% wersja 2.0, kwiecie/n 2001 r. | version 2.0, April 2001
+%---
+% Cel: obs/luga strony dokumentu | Purpose: preparation of pages for
+% dla cel/ow drukarskich, separacje | prepress, color separation, cropmarks,
+% barwne, pasery, ,,lustro''. | color and gray scale bars, mirror print.
+%---
+% Author: Janusz Marian Nowacki
+% 86-300 Grudzi/adz
+% ul. /Sniadeckich 82/46
+% tel. +48 +56 46-218-37
+% Poland
+% e-mail: j.nowacki@gust.org.pl
+%% Wsp/o/lpraca i komentarze: | Cooperation and comments:
+%% BOP s.c. & Staszek Wawrykiewicz
+%
+%------------------------------------------------------------------
+\catcode`\@=11
+%
+\newdimen\bigpoint \bigpoint 1pt
+\newdimen\Voffsetdim \Voffsetdim\voffset \advance\Voffsetdim by 1in
+\newcount\Voffset \Voffset\Voffsetdim \divide\Voffset by \bigpoint
+\newdimen\Hoffsetdim \Hoffsetdim\hoffset \advance\Hoffsetdim by 1in
+\newcount\Hoffset \Hoffset\Hoffsetdim \divide\Hoffset by \bigpoint
+\newcount\overprintblack \overprintblack=1
+%
+\def\cropmarkdistance #1{%
+ \special{!userdict begin /cropmarkdistance #1 def end}}
+\def\cropmarksize #1{%
+ \special{!userdict begin /cropmarksize #1 def end}}
+\def\barsize #1{%
+ \special{!userdict begin /barsize #1 def end}}
+\def\nocolorbars{%
+ \special{!userdict begin /colorbars 0 def end}}
+\def\onlycolorbars{%
+ \special{!userdict begin /colorbars 3 def end}}
+\def\onlycolorsteps{%
+ \special{!userdict begin /colorbars 2 def end}}
+\def\mirror{%
+ \special{!userdict begin /mirror 1 def end}}
+\def\xoffset #1{%
+ \special{!userdict begin /xoffset #1 def end}}
+\def\yoffset #1{%
+ \special{!userdict begin /yoffset #1 def end}}
+\def\labeloff{%
+ \special{!userdict begin /marglabel 0 def end}}
+%
+\def\CYAN {1 0 0 0}
+\def\MAGENTA{0 1 0 0}
+\def\YELLOW {0 0 1 0}
+\def\BLACK {0 0 0 1}
+\def\sepcolor{}
+\def\NoOverPrintBlack{\overprintblack=0}
+%
+\def\Separate #1{%
+ \input cmyk-hax
+ \edef\projectcolor{#1}%
+ \ifx\projectcolor\CYAN
+ \def\sepcolor{\projectCMYK\cyan}
+ \special{!userdict begin /color_sep 0 def /setsep 1 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\MAGENTA
+ \def\sepcolor{\projectCMYK\magenta}
+ \special{!userdict begin /color_sep 1 def /setsep 2 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\YELLOW
+ \def\sepcolor{\projectCMYK\yellow}
+ \special{!userdict begin /color_sep 2 def /setsep 3 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\BLACK
+ \def\sepcolor{\projectCMYK\black}
+ \special{!userdict begin /color_sep 3 def /setsep 4 def end}
+ \fi \fi \fi \fi
+}
+%
+\def\add@makeheadline#1{%
+ \let\oriheadline\makeheadline%
+ \def\makeheadline{#1\oriheadline}%
+ }
+\def\add@begindvi#1{%
+ \def\PoligrafHook{#1}%
+ \def\@begindvi{%
+ \PoligrafHook%
+ \unvbox \@begindvibox%
+ \gdef\@begindvi{\PoligrafHook}%
+ }}
+%
+\ifx\documentclass\@undefined
+ \add@makeheadline{\sepcolor} % for Plain
+\else
+ \add@begindvi{\sepcolor} % for LaTeX
+\fi
+%
+\catcode`\@=12
+%
+\special{header=crops.pro}
+%
+\endinput
diff --git a/macros/generic/TeX-PS/poligraf/sample.tex b/macros/generic/TeX-PS/poligraf/sample.tex
new file mode 100644
index 0000000000..975a434f71
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/sample.tex
@@ -0,0 +1,50 @@
+%% Plain TeX example of poligraf
+\special{papersize=190mm,277mm}
+%\special{papersize=180mm,267mm} % try together with \xoffset and \yoffset
+%% --
+\hsize5.5in \vsize8in
+\input epsf % standard dvips distribution
+\input colordvi % standard dvips distribution
+\input poligraf.sty
+%% -- change some options ------
+%\NoOverPrintBlack % default is overprint black
+%\Separate\CYAN % or
+%\Separate\MAGENTA % or
+%\Separate\YELLOW % or
+%\Separate\BLACK
+
+%\xoffset{5} % additional x an y offsets for printing on standard
+%\yoffset{5} % printer (do not use it for typesetters!)
+%\cropmarkdistance{5} % 1--5 (default 3mm)
+%\cropmarksize{10} % default 10mm
+%\barsize{6} % default 6mm
+%\nocolorbars % no color bars and scales
+%\onlycolorsteps % color steps only
+%\onlycolorbars % color bars only
+%\mirror % mirror switch
+%\labeloff % no page label
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\text{
+\Black{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Red{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Blue{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Green{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}
+}
+
+\text
+\bigskip
+
+\centerline{\epsffile{kol-cmyk.eps}}
+\vskip -10mm
+\centerline{\bf THIS TEXT IS BLACK}
+
+\bye
diff --git a/macros/generic/TeX-PS/poligraf/samplelx.tex b/macros/generic/TeX-PS/poligraf/samplelx.tex
new file mode 100644
index 0000000000..38a25b51b0
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/samplelx.tex
@@ -0,0 +1,64 @@
+%% LaTeX example of poligraf.sty
+\documentclass{article}
+\usepackage[dvips]{color}
+\usepackage[dvips]{graphicx}
+\usepackage{poligraf}
+%% --
+\special{papersize=190mm,277mm}
+%\special{papersize=180mm,267mm}
+%% -- change some options ------
+%\NoOverPrintBlack % default overprint black
+%\Separate\CYAN % or
+%\Separate\MAGENTA % or
+%\Separate\YELLOW % or
+%\Separate\BLACK
+
+%\xoffset{5} % additional x an y offsets for printing on standard
+%\yoffset{5} % printer (do not use it for typesetters!)
+%\cropmarkdistance{3} % 1--5 (default 3mm)
+%\cropmarksize{10} % default 10mm
+%\barsize{6} % default 6mm
+%\nocolorbars % no color bars and scales
+%\onlycolorsteps % color steps only
+%\onlycolorbars % color bars only
+%\mirror % mirror switch
+%\labeloff % no page label
+
+\begin{document}
+
+\def\text{
+\textcolor{red}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+{\color{blue} This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\textcolor{green}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\textcolor{black}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}
+}
+
+% -----------------------------------------------------------
+\text
+
+\begin{figure}
+ \begin{center}
+ \includegraphics[width=0.5\hsize]{kol-cmyk}
+ \caption{Vector graphics. CMYK model}
+ \end{center}
+\end{figure}
+
+%% -----------------------------------------------------------
+%%% put here your favourite colour photo
+%%% then uncomment the following lines and test colour separations
+%\eject
+%\begin{figure}
+%\includegraphics[width=\hsize]{my-photo.eps}
+%\caption{My photo}
+%\end{figure}
+% -----------------------------------------------------------
+
+\end{document}
diff --git a/macros/generic/TeX-PS/poligraf/separate.pro b/macros/generic/TeX-PS/poligraf/separate.pro
new file mode 100644
index 0000000000..44eb9ce984
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/separate.pro
@@ -0,0 +1,144 @@
+% [PL] Parametry separacji: [E] Separation parameters:
+% Odkomentuj TYLKO JEDNO Uncomment EXACTLY ONE
+% z poni/zszych ustawie/n: of the following settings:
+%%%%%
+% /color_sep 0 def % cyan
+% /color_sep 1 def % magenta
+% /color_sep 2 def % yellow
+/color_sep 3 def % black
+%%%%%
+/ScreenFrequency 150 def
+/Cangle 15 def
+/Mangle 75 def
+/Yangle 0 def
+/Kangle 45 def
+%
+userdict begin /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor
+load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor
+load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load
+def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage
+load def} ifelse /ori_image where {pop} {/ori_image /image load def}
+ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def}
+ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill
+where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where
+{pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show
+/show load def} ifelse /hax_setcmykcolor /ori_setcmykcolor load def
+/maybe_black { 4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le
+and exch 0 sub abs epsilon le and exch 0 sub abs epsilon le and /if_delblack
+exch def } def /my_fill {userdict begin if_delblack {newpath} {ori_fill}
+ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill}
+ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke}
+ifelse end} def /my_show {userdict begin if_delblack {false charpath
+currentpoint newpath moveto} {ori_show} ifelse end} def /eofill {userdict
+begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke
+{userdict begin my_stroke end} def /show {userdict begin my_show end}
+def /setcmykcolor {userdict begin /k_ exch def /y_ exch def /m_ exch
+def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end} def /setgray {ori_setgray
+currentcmykcolor setcmykcolor} def /setrgbcolor {ori_setrgbcolor currentcmykcolor
+setcmykcolor} def /hax_image { dup type cvlit /dicttype eq { /ImageDict
+exch def currentcolorspace dup length 1 eq ImageDict /ImageType get
+1 eq and {0 get dup /DeviceRGB eq {/ncomp 3 def} if dup /DeviceGray
+eq {/ncomp 1 def} if /DeviceCMYK eq {/ncomp 4 def} if ImageDict /BitsPerComponent
+get 8 ne /ncomp 1 ne and {/ncomp 0 def} if } {pop /ncomp 0 def} ifelse
+} { false 1 makeimagedict } ifelse ncomp 0 eq {ImageDict ori_image}
+{hax_image_} ifelse } def /hax_colorimage { makeimagedict hax_image_
+} def /makeimagedict { dup /ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace}
+if dup 3 eq {/DeviceRGB setcolorspace} if 1 eq {/DeviceGray setcolorspace}
+if /ImageDict 7 dict def ImageDict begin {/MultipleDataSources true
+def ncomp array astore} if /DataSource exch def /ImageMatrix exch def
+/BitsPerComponent exch def /Height exch def /Width exch def /Decode
+[ncomp {0 1} repeat] def /ImageType 1 def end } def /data_str 65532
+string def /data_str_ 8192 string def /merge_multi4 { ImageDict /DataSource
+get aload pop dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy
+exch def /fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck
+data_str_ readstring pop} def /datasrcy {fdatsrcy data_str_ readstring
+pop} def /datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc
+{fdatsrcc data_str_ readstring pop} def } { /datasrck exch def /datasrcy
+exch def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource
+{ data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm
+{3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add}
+forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval
+} put } def /merge_multi3 { ImageDict /DataSource get aload pop dup
+type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr
+exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg
+{fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_
+readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr
+exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy
+put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall
+pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval
+} put } def /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul}
+def /BG {0.5 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse}
+def /max {1 index 1 index ge {pop} {exch pop} ifelse} def /RGBtoCMYK
+{dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale
+mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch
+def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub
+cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255
+0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put
+} def /RGBtoCMYKfilter { ImageDict /Decode get aload pop 2 copy sub
+/B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy
+sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2
+copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+/rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file
+i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK
+setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length
+1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch
+getinterval}{pop pop ()} ifelse } def /SEPfilters { ncomp 4 eq { hax_sep
+3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode
+hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc
+{dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict
+/DataSource get def ImageDict /DataSource {sep_file sep_str readstring
+pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace
+} {hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse hax_sep
+4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict /Decode
+[ 0 0 ] put} if } def /change_str 12288 string def /CHANGEfilter {
+/change_file ImageDict /DataSource get def ImageDict /DataSource {
+change_file change_str readstring pop 0 ncomp 2 index length ncomp
+sub { 1 index exch 2 copy ncomp getinterval changebits putinterval
+} for } 0 () /SubFileDecode filter put } def /hax_image_ { ImageDict
+/MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict
+/MultipleDataSources false put ImageDict /DataSource get length dup
+4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin
+/DataSource DataSource aload pop def end} if } if } if ImageDict begin
+/DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height
+ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter}
+if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne
+to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def /zero_data_str
+65532 string def /hax_imagemask { if_delblack { dup type cvlit /dicttype
+eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin
+/DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0
+1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1
+def /ImageType 1 def end } ifelse ImageDict begin /DataSource load
+Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file
+exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str
+readstring pop length getinterval } 0 () /SubFileDecode filter put
+ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask}
+ifelse } def /epsilon 0.005 def /if_delblack false def /to_change_bitmap
+false def /to_convert_bitmap false def /to_sep_bitmap false def
+currentcmykcolor setcmykcolor end
+%
+ /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def 150 0 {dot_spot}
+setscreen
+%
+userdict begin
+ color_sep 0 eq
+ {/hax_setcmykcolor {maybe_black pop pop pop 1 exch sub ori_setgray} def
+ ScreenFrequency Cangle {dot_spot} setscreen}
+ {color_sep 1 eq
+ {/hax_setcmykcolor {maybe_black pop pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Mangle {dot_spot} setscreen}
+ {color_sep 2 eq
+ {/hax_setcmykcolor {maybe_black pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Yangle {dot_spot} setscreen}
+ {/hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Kangle {dot_spot} setscreen}
+ ifelse
+ } ifelse
+ } ifelse
+end
+%
+userdict begin /image /hax_image load def /colorimage /hax_colorimage
+ load def /imagemask /hax_imagemask load def
+ /to_sep_bitmap true def /to_convert_bitmap true def
+end
+currentcmykcolor setcmykcolor
diff --git a/macros/generic/TeX-PS/trans.tex b/macros/generic/TeX-PS/trans.tex
new file mode 100644
index 0000000000..a3869832f6
--- /dev/null
+++ b/macros/generic/TeX-PS/trans.tex
@@ -0,0 +1,653 @@
+% ---------------------------------------------------------------------------
+% TeX macros implementing a standard set of PostScript transformations
+% made in BOP (1993--2001), Gda\'nsk, Poland -- public domain software
+% authors: Bogus\l{}aw Jackowski, Piotr Pianowski, Piotr Strzelczyk
+% e-mail contact: bop@bop.com.pl
+% ---------------------------------------------------------------------------
+% S Y N O P S I S
+%
+% In the sequel, `box' means \hbox, \vbox, \box, or \copy, `dimen' means
+% a sequence of dimens to be summed up; all macros mentioned below expand
+% to \hbox{...}, they can therefore be used wherever \hbox can be.
+%
+% 1)
+% x_scale and y_scale are given in percents (>0)
+% \zscale changes uniformly x_size and y_size (x_scale=y_scale=scale)
+% \xscale changes only x_size (y_scale=100)
+% \yscale changes only y_size (x_scale=100)
+%
+% \zscale{scale} followed by a box
+% \xyscale{x_scale}{y_scale} followed by a box
+% \yxscale{y_scale}{x_scale} followed by a box
+% \xscale{x_scale} followed by a box
+% \yscale{y_scale} followed by a box
+%
+% 2)
+% \xyscaleto resizes a box uniformly such that the resulting wd=dimen
+% \yxscaleto resizes a box uniformly such that the resulting ht=dimen
+% \xscaleto resizes a box horizontally such that the resulting wd=dimen
+% \yscaleto resizes a box verically such that the resulting ht=dimen
+%
+% \xyscaleto{dimen} followed by a box
+% \yxscaleto{dimen} followed by a box
+% \xscaleto{dimen} followed by a box
+% \yscaleto{dimen} followed by a box
+%
+% 3)
+% \revolve rotates anticlockwise the box (either \hbox or \vbox
+% following the command) by 90 degree; for the resulting box
+% width=height+depth of the original box, height=width
+% of the original box, and the reference point is the left top corner
+% of the original box; this means that revolving a box four times
+% yields the original box if and only if its depth is zero;
+% \revolvedir- is equivalent to \revolve, \revolvedir+ rotates
+% the box clockwise
+%
+% \revolve followed by a box
+% \revolvedir+ followed by a box
+% \revolvedir- followed by a box
+% \revolveleft followed by a box (equivalent to \revolvedir-)
+% \revolveright followed by a box (equivalent to \revolvedir+)
+% \revolvepi followed by a box (equivalent to \xflip\yflip
+% but not to \revolve\revolve)
+% \rotatepi followed by a box (equivalent to \revolvepi;
+% cf. also plain METAFONT rotatedaround and rotatedabout macros)
+% 4)
+% \rotate rotates a box by an arbitrary angle, clockwise for angle>0,
+% width=height=depth=0pt for the resulting box
+%
+% \rotate{angle} followed by a box
+%
+% \rotatebb rotates a box by an arbitrary angle, clockwise for angle>0;
+% the result is placed in a box having the dimensions of the resulting
+% bounding box, protrusion to the left is compensated by appropriate
+% shifting (see the macro \put_into_bb)
+%
+% \rotatebb{angle} followed by a box
+%
+% 5)
+% \xflip and \yflip flip the box horizontally and vertically,
+% respectively, i.e., with respect to the vertical and horizontal
+% axis of the box, without changing the dimensions of the \box
+%
+% \xflip followed by a box
+% \yflip followed by a box
+%
+% 6)
+% \slant slopes a box by an angle alpha such that tan(alpha)=slant,
+% without changing dimensions of the \box;
+%
+% \slant{slant} followed a box
+%
+% (negative argument value means slanting to the left)
+%
+% \slantbb slopes a box by an angle alpha such that tan(alpha)=slant,
+% the result is placed in a box having the dimensions of the resulting
+% bounding box, protrusion to the left is compensated by appropriate
+% shifting (see the macro \put_into_bb)
+%
+% \slantbb{slant} followed a box
+%
+% 7)
+% \clipbox clips the contents of a box that follows the command;
+% the macro expects three dimen parameters: the width, the height
+% and the depth of the resulting box
+%
+% \clipbox{width}{height}{depth} followed a box
+%
+% Any parameter can be empty; in such a case, the respective dimension
+% of the original box is used
+% ---------------------------------------------------------------------------
+% HISTORY:
+% 18 VIII 1993 ver. 0.1
+% * first release
+% 30--31 VIII 1993 ver. 0.2
+% * third parameter eliminated from \scale (via \afterassignment
+% and \aftergroup hackery)
+% * added \zscale, \xyscale, \yxscale, \xscale, and \yscale
+% with scaling given in percents
+% * added \scaleto, \xyscaleto, \yxscaleto, \xscaleto, and \yscaleto
+% 3 IX 1993 ver. 0.21
+% * \the_scale renamed to \lastscale and made global, thus it became
+% available to a user
+% 8 IX 1993 ver. 0.22
+% * all transformations return \hbox, because of currentpoint
+% positioning
+% * the old version of \scale is become undefined
+% * \slant and \rotate fit the new convention of parameter's
+% hackery -- they are assumed to be followed by an \hbox
+% or a \vbox
+% 6 XII 1993 ver. 0.23
+% * \revolve added
+% * \rotate with \vbox patched
+% 10 II 1994 ver. 0.24
+% * \revolvedir+, \revolvedir-, \xflip, and \yflip added
+% 20 III 2000 ver. 0.5 (pre-release)
+% * total reconstruction:
+% -- all macros expand to \hbox, so that it is possible to
+% superpose them, e.g., \xscale{200}\yscale{50}\hbox{...};
+% one must remeber, however, that \rotate yields a box having
+% null dimensions, so an attempt to scale the result
+% to a given dimen will produce erroneous PostScript code
+% -- the possibility of changing \ht and \dp of a \vbox abolished;
+% such an operation yields hardly intuitive results; try, e.g.:
+% \hrule width\hsize
+% \hbox{\setbox0\hbox{\vrule height1cmwidth1cm}\ht0 0mm \box0}
+% \kern20mm
+% \hrule width\hsize
+% \hbox{\setbox0\vbox{\hrule height1cmwidth1cm}\ht0 0mm \box0}
+% -- the box expected by all macros can be a TeX box expression:
+% \hbox, \vbox, \box, and \copy
+% -- scaling height or width to a given dimension yields exact value
+% of the height or width, respectively (or both); this change is
+% backward incompatible (but reasonable, one should think)
+% -- all transformations store information about the position of the
+% lower left corner and the upper right corner of the resulting
+% bounding box (with respect to the base point of the transformed
+% box) in four globally defined macros:
+% \transllx, \translly, \transurx, \transury
+% (a piece of funny code for vector rotation was added)
+% -- \rotatebb and \slantbb added
+% 25 III 2000 ver. 0.51
+% * fraction multiplication improved (speedup in trigonometric
+% calculations ca 30%)
+% * trigonometry calculations are performed in a group (otherwise using
+% them within another \loop ... \repeat would be inconvenient);
+% the result is a pair of globally defined macros (instead of dimen
+% registers); they expand to a series of digits (i.e., they contain
+% a count representation of the resulting dimen)
+% * \unhbox (introduced in order to reduce the level of box nesting)
+% should be used only in \rotatebb
+% * internal macro naming changed
+% 27 III 2000 ver. 0.52
+% * a dimen parameter can be a sequence of dimens to be summed up
+% * \clipbox added
+% 7--10 X 2000 ver. 0.53
+% * a bug in \slant[bb] fixed: \ht and \dp were interchanged due to
+% a fallacious interpretation of a slant sign (recall that in dvips
+% PostScript, unlike in METAFONT, `-' denotes slanting to the right,
+% `+' -- to the left, because the y-axis is directed downwards);
+% actually, the problem is much more complex: relying (unconsciously)
+% on dvips coordinates means, in this case, that for non-square pixels
+% both rotate and slant will not work -- need to be fixed!
+% 13 XI 2000 ver. 0.54
+% * @ is a letter during reading trans macros (AMSTeX uses active @)
+% * local macro \undtranscode renamed to \transundcode
+% 9 VI 2001 ver 0.55
+% * ``mnemonic'' macros added: \revolveleft, \revolveright, \revolvepi
+% and \rotatepi
+% ---------------------------------------------------------------------------
+\def\transspecial#1{\special{ps:#1}}% driver-oriented; default is dvips
+% ---
+\edef\transundcode{\the\catcode`\_}\catcode`\_11
+\edef\transatcode{\the\catcode`\@}\catcode`\@11
+% \z@ (0pt) and \p@ (1pt) are borrowed from plain
+% ---
+% a pretty general macro
+\def\sumto#1{\def\sum_to_what{#1}\sum_to_what=\z@\relax \sumto_}
+\def\sumto_{\futurelet\sum_tok\sumto__}
+\def\sumto__{\ifx\sum_tok\relax\else\expandafter\sumto___\fi}
+\def\sumto___{\afterassignment\sumto_\advance\sum_to_what}
+% ---
+\newbox\tmp_box % temporary box register
+\newdimen\tmp_dim % temporary dimen registers
+\newdimen\tmp_dim_a
+\newdimen\tmp_dim_b
+\newdimen\tmp_dim_c
+\newdimen\tmp_dim_d
+\newcount\tmp_count_a % temporary count registers
+\newcount\tmp_count_b
+\newcount\tmp_count_c
+\newif\ifput_into_bb
+% ---
+\def\jump_setbox{\ifvoid\tmp_box % every box is initially void
+ \aftergroup\after_setbox \else \after_setbox \fi}% a general trick
+% ---
+\def\set_std_bb{%
+ \xdef\transllx{\the\z@}%
+ \xdef\translly{\ifdim\dp\tmp_box>\z@ -\fi\the\dp\tmp_box}%
+ \xdef\transurx{\the\wd\tmp_box}%
+ \xdef\transury{\the\ht\tmp_box}%
+}
+\def\put_into_bb#1{% #1 = operation: \unhbox for rotation, \box for slanting
+ \setbox\tmp_box\hbox{\kern-\transllx\rlap{#1\tmp_box}\kern\transurx}%
+ \ht\tmp_box\transury \dp\tmp_box-\translly \relax
+}
+% ---
+\def\perc_scale#1#2{% #1 -- xscale, #2 -- yscale, in percents,
+ % to be followed by an \hbox or a \vbox
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{%
+ \transspecial{gsave
+ currentpoint #2 100 div div exch #1 100 div div exch
+ currentpoint neg #2 100 div mul exch neg #1 100 div mul exch
+ translate #1 100 div #2 100 div scale translate}%
+ \box\tmp_box \transspecial{grestore}}%
+ \ifdim#1\p@=100\p@ \else % special treatment of special case (100%)
+ \tmp_dim\wd\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % rounding rather than floor
+ \wd\tmp_box#1\tmp_dim
+ \fi
+ \ifdim#2\p@=100\p@ \else % ditto
+ \tmp_dim\ht\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % ditto
+ \ht\tmp_box#2\tmp_dim
+ \tmp_dim\dp\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % ditto
+ \dp\tmp_box#2\tmp_dim
+ \fi
+ \set_std_bb
+ \box\tmp_box\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\xyscale#1#2{\hbox\bgroup\perc_scale{#1}{#2}}
+\def\zscale#1{\xyscale{#1}{#1}}
+\def\yxscale#1#2{\xyscale{#2}{#1}}
+\def\xscale#1{\xyscale{#1}{100}}
+\def\yscale#1{\xyscale{100}{#1}}
+% ---
+{\catcode`\p12 \catcode`\t12 \gdef\PT_{pt}}
+\def\hull_num{\expandafter\hull_num_}
+\expandafter\def\expandafter\hull_num_\expandafter#\expandafter1\PT_{#1}
+% ---
+\def\find_scale#1#2{% #1 -- size after rescaling, #2 -- \wd or \ht
+% Finds a scale (\lastscale macro) such that the box following the macro
+% call would have the respective dimen (i.e., #2) equal to #1 after rescaling
+% NOTE: it is assumed that prior to calling \find_scale a macro
+% \extra_complete is defined
+ \def\after_setbox{%
+ \resize\tmp_dim{100\p@}{#1}{#2\tmp_box}%
+ \xdef\lastscale{\hull_num\the\tmp_dim}\extra_complete}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}
+% ---
+\def\scaleto#1#2#3#4{% #1 -- size of dimen #2 (\wd or \ht) after scaling
+ % #3 -- actual x-size, #4 -- actual y-size
+ \hbox\bgroup % `initial' hbox
+ \sumto\tmp_dim#1\relax % freeze the argument; must not be empty
+ \setbox\tmp_box\hbox\bgroup % one more setbox in order to control
+ % the specified dimen
+ \def\extra_complete{%
+ \perc_scale{#3}{#4}\box\tmp_box % finish setbox above
+ #2\tmp_box=\tmp_dim % force the exactness of the specified dimension
+ \set_std_bb
+ \box\tmp_box
+ \egroup % close `initial' hbox
+ }%
+ \find_scale{\tmp_dim}#2}
+%
+\def\xyscaleto#1{\scaleto{#1}\wd\lastscale\lastscale}
+\def\yxscaleto#1{\scaleto{#1}\ht\lastscale\lastscale}
+\def\xscaleto#1{\scaleto{#1}\wd\lastscale{100}}
+\def\yscaleto#1{\scaleto{#1}\ht{100}\lastscale}
+% ---
+\def\slant{\hbox\bgroup \put_into_bbfalse \slant_}
+\def\slantbb{\hbox\bgroup \put_into_bbtrue \slant_}
+\def\slant_#1{% #1 (slant) = tan(alpha), where alpha is the slant angle,
+ % to be followed by a box
+ \def\after_setbox{%
+ \transspecial{gsave 0 currentpoint neg exch pop 0 currentpoint exch pop
+ translate [1 0 #1 1 0 0] concat translate}%
+ % set bounding box
+ \dim_x\wd\tmp_box
+ \ifdim#1\p@>\z@ \dim_t-#1\ht\tmp_box \advance\dim_x#1\dp\tmp_box
+ \else \dim_t#1\dp\tmp_box \advance\dim_x-#1\ht\tmp_box
+ \fi
+ \xdef\transllx{\the\dim_t}%
+ \xdef\translly{\ifdim\dp\tmp_box>\z@ -\fi\the\dp\tmp_box}%
+ \xdef\transurx{\the\dim_x}%
+ \xdef\transury{\the\ht\tmp_box}%
+ \ifput_into_bb \put_into_bb\box \fi
+ \box\tmp_box \transspecial{grestore}\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\update_bb#1#2#3{% used in \rotate
+ \trigcompute{-#1}{#2}{#3}% clockwise vs anti-clockwise
+ \ifdim\transllx>\trigxresult sp\xdef\transllx{\trigxresult sp}\fi
+ \ifdim\translly>\trigyresult sp\xdef\translly{\trigyresult sp}\fi
+ \ifdim\transurx<\trigxresult sp\xdef\transurx{\trigxresult sp}\fi
+ \ifdim\transury<\trigyresult sp\xdef\transury{\trigyresult sp}\fi
+}
+\def\rotate{\hbox\bgroup \put_into_bbfalse \rotate_}
+\def\rotatebb{\hbox\bgroup \put_into_bbtrue \rotate_}
+\def\rotate_#1{% #1 -- angle,
+ % to be followed by a box
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{% otherwise does not work with \vbox
+ \transspecial{gsave currentpoint currentpoint translate
+ #1 rotate neg exch neg exch translate}%
+ \box\tmp_box \transspecial{grestore}}%
+ % set bounding box
+ \xdef\transllx{\the\z@}\xdef\translly{\the\z@}%
+ \xdef\transurx{\the\z@}\xdef\transury{\the\z@}%
+ \update_bb{#1}{\z@}{\ht\tmp_box}%
+ \update_bb{#1}{\z@}{-\dp\tmp_box}%
+ \update_bb{#1}{\wd\tmp_box}{\ht\tmp_box}%
+ \update_bb{#1}{\wd\tmp_box}{-\dp\tmp_box}%
+ %
+ \wd\tmp_box\z@ \ht\tmp_box\z@ \dp\tmp_box\z@
+ \ifput_into_bb \put_into_bb\unhbox \fi
+ \box\tmp_box\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\plus_{+}
+\def\minus_{-}
+\def\revolvedir#1{% to be followed by a box
+ \hbox\bgroup
+% check parameter:
+ \def\param_{#1}%
+ \ifx\param_\plus_ \else \ifx\param_\minus_
+ \else
+ \errhelp{I would rather suggest to stop immediately.}%
+ \errmessage{Argument to \noexpand\revolvedir should be either + or -}%
+ \fi\fi
+ \def\after_setbox{%
+ \tmp_dim_a\wd\tmp_box
+% prepare to revolving:
+ \setbox\tmp_box\hbox{%
+ \ifx\param_\plus_\kern-\tmp_dim_a\fi
+ \box\tmp_box
+ \ifx\param_\plus_\kern\tmp_dim_a\fi}%
+% compute dimensions of the box to be revolved:
+ \tmp_dim_a\ht\tmp_box \advance\tmp_dim_a\dp\tmp_box
+ \tmp_dim_b\ht\tmp_box \tmp_dim_c\dp\tmp_box
+ \dp\tmp_box\z@ \ht\tmp_box\wd\tmp_box \wd\tmp_box\tmp_dim_a
+% revolve:
+ \kern \ifx\param_\plus_ \tmp_dim_c \else \tmp_dim_b \fi
+ \transspecial{gsave currentpoint currentpoint translate
+ #190 rotate neg exch neg exch translate}%
+ \set_std_bb
+ \box\tmp_box
+ \transspecial{grestore}%
+ \kern -\ifx\param_\plus_ \tmp_dim_c \else \tmp_dim_b \fi
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+\def\revolveleft{\revolvedir-}
+\def\revolveright{\revolvedir+}
+\def\revolvepi{\xflip\yflip}
+\let\revolve\revolveleft
+\let\rotatepi\revolvepi
+% ---
+\def\xflip{% to be followed by a box
+ \hbox\bgroup
+ \def\after_setbox{%
+ \tmp_dim_a.5\wd\tmp_box
+% prepare to flipping:
+ \setbox\tmp_box
+ \hbox{\kern-\tmp_dim_a \box\tmp_box \kern\tmp_dim_a}%
+% flip:
+ \kern\tmp_dim_a
+ \transspecial{gsave currentpoint currentpoint translate
+ [-1 0 0 1 0 0] concat neg exch neg exch translate}%
+ \set_std_bb
+ \box\tmp_box
+ \transspecial{grestore}%
+ \kern-\tmp_dim_a
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\yflip{% to be followed by a box
+ \hbox\bgroup
+ \def\after_setbox{%
+ \tmp_dim_a\ht\tmp_box \tmp_dim_b\dp\tmp_box
+ \tmp_dim_c\tmp_dim_a \advance\tmp_dim_c\tmp_dim_b
+ \tmp_dim_c.5\tmp_dim_c
+% prepare to flipping:
+ \setbox\tmp_box\vbox{%
+ \kern\tmp_dim_c\box\tmp_box\kern-\tmp_dim_c}%
+% flip:
+ \advance\tmp_dim_c-\tmp_dim_b
+ \setbox\tmp_box\hbox{%
+ \transspecial{gsave currentpoint currentpoint translate
+ [1 0 0 -1 0 0] concat neg exch neg exch translate}%
+ \lower\tmp_dim_c\box\tmp_box
+ \transspecial{grestore}}%
+% restore dimensions of the flipped box:
+ \ht\tmp_box\tmp_dim_a \dp\tmp_box\tmp_dim_b
+ \set_std_bb
+ \box\tmp_box
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+% save TeX registers:
+\let\clip_wd\tmp_dim_a
+\let\clip_ht\tmp_dim_b
+\let\clip_dp\tmp_dim_c
+% ---
+\def\tracingclipcmyk{1 0 0 0}
+\def\clip_fix_pos#1{\transspecial{%
+ currentpoint /clip_#1_y exch def /clip_#1_x exch def%
+}}
+\def\clip_use_pos#1{clip_#1_x clip_#1_y}
+\def\clip_delta#1#2{#1 #2 3 -1 roll exch sub 3 1 roll sub exch}
+%
+\def\do_clip{\transspecial{%
+ newpath
+ \clip_use_pos{LL} moveto
+ \clip_delta{\clip_use_pos{UR}}{\clip_use_pos{UL}} rlineto
+ \clip_delta{\clip_use_pos{UR}}{\clip_use_pos{LR}} rlineto
+ \clip_delta{\clip_use_pos{LL}}{\clip_use_pos{LR}} rlineto
+ closepath
+ \ifx\tracingclip\unknown \else
+ gsave \tracingclipcmyk\space setcmykcolor fill grestore
+ \fi
+ clip newpath%
+}}
+%
+\def\clip_use_dim#1{% #1 = wd, ht, or dp
+ \ifdim\csname clip_#1\endcsname=\maxdimen \csname#1\endcsname\tmp_box
+ \else \csname clip_#1\endcsname\fi
+}
+%
+\def\clip_fix_dim#1#2{%
+ \edef\clip_use_dim_param{#2}%
+ \ifx\clip_use_dim_param\empty #1\maxdimen\else
+ \ifx\clip_use_dim_param\space #1\maxdimen\else \sumto#1#2\relax \fi\fi
+}
+%
+\def\clipbox#1#2#3{% desired height, width and depth to be followed by a box
+ \hbox\bgroup
+ \clip_fix_dim\clip_wd{#1}%
+ \clip_fix_dim\clip_ht{#2}%
+ \clip_fix_dim\clip_dp{#3}%
+ \clipbox_
+}
+\def\clipbox_{%
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{\box\tmp_box}%
+ \clip_wd\clip_use_dim{wd}% freeze dimen
+ \clip_ht\clip_use_dim{ht}% ditto
+ \clip_dp\clip_use_dim{dp}% ditto
+ \transspecial{gsave}%
+ \rlap{%
+ \lower \clip_dp \vbox{%
+ \hbox to\clip_wd{\clip_fix_pos{UL}\hss\clip_fix_pos{UR}}
+ \kern\clip_ht \kern\clip_dp \nointerlineskip
+ \hbox to\clip_wd{\clip_fix_pos{LL}\hss\clip_fix_pos{LR}}
+ \do_clip
+ }%
+ }%
+ \wd\tmp_box=\clip_wd \ht\tmp_box=\clip_ht \dp\tmp_box=\clip_dp
+ \set_std_bb \box\tmp_box \transspecial{grestore}\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}
+% ---------------------------------------------------------------------------
+% ``floating point arithmetic'' (excerpted from T. Rokicki):
+% r y
+%
+% ^
+% |
+% |
+% |
+% |
+% |
+% 0--------------> t x
+%
+% save TeX registers:
+\let\dim_x\tmp_dim_a % horizontal size after scaling
+\let\dim_y\tmp_dim_b % vertical size after scaling
+\let\dim_t\tmp_dim_c % horizontal size before scaling
+\let\dim_r\tmp_dim_d % vertical size before scaling
+%\tmp_dim % register for arithmetic manipulation (already declared)
+% ---
+\def\resize
+ % dimen registers:
+ #1% y make y such that y/r=x/t
+ #2% r
+ #3% x
+ #4% t
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+ {%
+ % save parameters to the internal variables:
+ \dim_r#2\relax \dim_x#3\relax \dim_t#4\relax
+ \tmp_dim=\dim_r \divide\tmp_dim\dim_t
+ \dim_y=\dim_x \multiply\dim_y\tmp_dim
+ \multiply\tmp_dim\dim_t \advance\dim_r-\tmp_dim
+ \tmp_dim=\dim_x
+ \loop \advance\dim_r\dim_r \divide\tmp_dim 2
+ \ifnum\tmp_dim>0
+ \ifnum\dim_r<\dim_t\else
+ \advance\dim_r-\dim_t \advance\dim_y\tmp_dim \fi
+ \repeat
+ % assign result:
+ #1\dim_y\relax
+}
+% ---------------------------------------------------------------------------
+% ``fixed point arithmetic'' -- fractions and trigometry, inspired by mf.web:
+%
+% save TeX registers:
+\let\fracint\tmp_dim
+\let\fracfrac\tmp_count_a
+\let\fracprod\tmp_count_b
+\def\fracpowlimit{30}%
+\def\fracone{1073741824}% = 2^\fracpowlimit
+% ---
+\def\fracproduct#1#2{% #1 = fraction * 2^\fracpowlimit, #2 = integer
+% result: macro \fracresult = floor(#1 * #2 / 2^\fracpowlimit + 1/2)
+% expanding to the count equivalent of the respective dimen
+\begingroup
+ \fracfrac#1\relax % \fracfrac <= 2^30
+ \fracint#2\relax % \fracint <= \maxdimen
+ \ifdim\fracint<0pt \fracint-\fracint\def\fracsign{-}\else\def\fracsign{}\fi
+ \ifnum\fracone=\fracfrac \fracprod\fracint \else
+ \advance\fracfrac\fracone % \fracfrac < 2^31
+ \fracprod\fracone % if \fracprod were dimen, this would yield error
+ \divide\fracprod2 % \fracprod = 2^29 (representation of 1/2)
+ \loop
+ \ifodd\fracfrac \advance \fracprod\fracint \fi
+ \divide\fracprod2 \divide\fracfrac2
+ \ifnum \fracfrac>1 \repeat
+ \fi
+ \xdef\fracresult{\fracsign\number\fracprod}%
+\endgroup
+}
+% ---
+\newdimen\onedegree
+\onedegree16pt % this must be consistent with the table below
+% save TeX registers:
+\let\trigangle\tmp_dim_a
+\let\trigxpart\tmp_dim_b
+\let\trigypart\tmp_dim_c
+\let\trigxtmp\tmp_dim
+\let\trigiter\tmp_count_a
+\def\triglimit{28}%
+% ---
+\def\trigvalarg#1{\csname argscaled:\number#1\endcsname}
+\def\trigvalcos#1{\csname cosscaled:\number#1\endcsname}
+\def\trigvalsin#1{\csname sinscaled:\number#1\endcsname}
+\def\defspectrig#1#2#3#4{%
+% #1 -- ordering number (index)
+% #2 -- angle in degrees * \onedegree expressed in sp; alpha=#1*2^(-20)
+% #3 -- floor(cosd(alpha)*2^30+1/2) (30=\fracpowlimit)
+% #4 -- floor(sind(alpha)*2^30+1/2)
+ \expandafter\def\csname argscaled:#1\endcsname{#2}%
+ \expandafter\def\csname cosscaled:#1\endcsname{#3}%
+ \expandafter\def\csname sinscaled:#1\endcsname{#4}%
+}
+\defspectrig{1}{62914560}{536870912}{929887697} % alpha=60
+\defspectrig{2}{47185920}{759250125}{759250125} % 45
+\defspectrig{3}{31457280}{929887697}{536870912} % 30
+\defspectrig{4}{16777216}{1032146887}{295963357} % 2^4
+\defspectrig{5}{8388608}{1063292242}{149435979} % 2^3
+\defspectrig{6}{4194304}{1071126243}{74900443} % 2^2
+\defspectrig{7}{2097152}{1073087729}{37473049} % 2^1
+\defspectrig{8}{1048576}{1073578288}{18739379} % 2^0
+\defspectrig{9}{524288}{1073700939}{9370046} % 2^-1
+\defspectrig{10}{262144}{1073731603}{4685068} % 2^-2
+\defspectrig{11}{131072}{1073739269}{2342539} % 2^-3
+\defspectrig{12}{65536}{1073741185}{1171270} % 2^-4
+\defspectrig{13}{32768}{1073741664}{585635} % 2^-5
+\defspectrig{14}{16384}{1073741784}{292818} % 2^-6
+\defspectrig{15}{8192}{1073741814}{146409} % 2^-7
+\defspectrig{16}{4096}{1073741822}{73204} % 2^-8
+\defspectrig{17}{2048}{1073741823}{36602} % 2^-9
+\defspectrig{18}{1024}{1073741824}{18301} % 2^-10
+\defspectrig{19}{512}{1073741824}{9151} % 2^-11
+\defspectrig{20}{256}{1073741824}{4575} % 2^-12
+\defspectrig{21}{128}{1073741824}{2288} % 2^-13
+\defspectrig{22}{64}{1073741824}{1144} % 2^-14
+\defspectrig{23}{32}{1073741824}{572} % 2^-15
+\defspectrig{24}{16}{1073741824}{286} % 2^-16
+\defspectrig{25}{8}{1073741824}{143} % 2^-17
+\defspectrig{26}{4}{1073741824}{71} % 2^-18
+\defspectrig{27}{2}{1073741824}{36} % 2^-19
+\defspectrig{28}{1}{1073741824}{18} % 2^-20
+% ---
+\def\trigcompute#1#2#3{%
+% #1 angle in degrees (a)
+% #2 initial xpart (x)
+% #3 initial ypart (y)
+% result: (x',y')=(x,y) rotated a; the pair of macros
+% \trigxresult and \trigyresult contain x' and y', respectively;
+% both expand to the count equivalent of the respective dimen
+\begingroup
+ \trigangle#1\onedegree \trigxpart#2\relax \trigypart#3\relax
+ \loop \ifdim\trigangle<0sp \advance\trigangle360\onedegree \repeat
+ \loop \ifdim\trigangle>360\onedegree \advance\trigangle-360\onedegree \repeat
+ \ifdim\trigangle=360\onedegree \trigangle0sp \fi
+ \ifdim\trigangle<180\onedegree \else % >=
+ \trigxpart-\trigxpart \trigypart-\trigypart
+ \advance\trigangle-180\onedegree
+ \fi
+ \ifdim\trigangle<90\onedegree \else % >=
+ \trigxtmp\trigxpart \trigxpart-\trigypart \trigypart\trigxtmp
+ \advance\trigangle-90\onedegree
+ \fi
+ \trigiter1\relax
+ \loop
+ \ifnum\trigvalarg\trigiter>\trigangle \else % <=
+ \advance\trigangle-\trigvalarg\trigiter sp
+ \trigxtmp\trigxpart
+ % x=x*cos[i]-y*sin[i] :
+ \fracproduct{\trigvalcos\trigiter}\trigxpart
+ \trigxpart\fracresult sp
+ \fracproduct{\trigvalsin\trigiter}\trigypart
+ \advance\trigxpart-\fracresult sp
+ % y=y*cos[i]+x*sin[i] :
+ \fracproduct{\trigvalcos\trigiter}\trigypart
+ \trigypart\fracresult sp
+ \fracproduct{\trigvalsin\trigiter}\trigxtmp
+ \advance\trigypart\fracresult sp
+ \fi
+ \advance\trigiter1
+ \ifnum\trigangle>0 \repeat
+% result in dimen registers: \trigxpart and \trigypart
+ \xdef\trigxresult{\number\trigxpart}%
+ \xdef\trigyresult{\number\trigypart}%
+\endgroup
+}
+% ---------------------------------------------------------------------------
+% restore original catcodes:
+\catcode`\@\transatcode
+\catcode`\_\transundcode
+% ---------------------------------------------------------------------------
+\endinput
+