%!PS-Adobe-3.0 EPSF-3.0
%%Creator: Tk Canvas Widget
%%For: Alexander Belopolsky
%%Title: Window .4315905424
%%CreationDate: Tue Nov  9 12:54:06 2010
%%XBoundingBox: -172 -52 785 845
%%BoundingBox: 290 290 520 520
%%Pages: 1
%%DocumentData: Clean7Bit
%%Orientation: Portrait
%%EndComments

%%BeginProlog
/CurrentEncoding [
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G
/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W
/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g
/h/i/j/k/l/m/n/o
/p/q/r/s/t/u/v/w
/x/y/z/braceleft/bar/braceright/asciitilde/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
] def

50 dict begin
% This is a standard prolog for Postscript generated by Tk's canvas
% widget.
% RCS: @(#) $Id$

% The definitions below just define all of the variables used in
% any of the procedures here.  This is needed for obscure reasons
% explained on p. 716 of the Postscript manual (Section H.2.7,
% "Initializing Variables," in the section on Encapsulated Postscript).

/baseline 0 def
/stipimage 0 def
/height 0 def
/justify 0 def
/lineLength 0 def
/spacing 0 def
/stipple 0 def
/strings 0 def
/xoffset 0 def
/yoffset 0 def
/tmpstip null def


/cstringshow {
    {
	dup type /stringtype eq
	{ show } { glyphshow }
	ifelse
    }
    forall
} bind def



/cstringwidth {
    0 exch 0 exch
    {
	dup type /stringtype eq
	{ stringwidth } { 
	    currentfont /Encoding get exch 1 exch put (\001) stringwidth 
        }
	ifelse 
	exch 3 1 roll add 3 1 roll add exch
    }
    forall
} bind def

% font ISOEncode font
% This procedure changes the encoding of a font from the default
% Postscript encoding to current system encoding.  It's typically invoked just
% before invoking "setfont".  The body of this procedure comes from
% Section 5.6.1 of the Postscript book.

/ISOEncode {
    dup length dict begin
	{1 index /FID ne {def} {pop pop} ifelse} forall
	/Encoding CurrentEncoding def
	currentdict
    end

    % I'm not sure why it's necessary to use "definefont" on this new
    % font, but it seems to be important; just use the name "Temporary"
    % for the font.

    /Temporary exch definefont
} bind def

% StrokeClip
%
% This procedure converts the current path into a clip area under
% the assumption of stroking.  It's a bit tricky because some Postscript
% interpreters get errors during strokepath for dashed lines.  If
% this happens then turn off dashes and try again.

/StrokeClip {
    {strokepath} stopped {
	(This Postscript printer gets limitcheck overflows when) =
	(stippling dashed lines;  lines will be printed solid instead.) =
	[] 0 setdash strokepath} if
    clip
} bind def

% desiredSize EvenPixels closestSize
%
% The procedure below is used for stippling.  Given the optimal size
% of a dot in a stipple pattern in the current user coordinate system,
% compute the closest size that is an exact multiple of the device's
% pixel size.  This allows stipple patterns to be displayed without
% aliasing effects.

/EvenPixels {
    % Compute exact number of device pixels per stipple dot.
    dup 0 matrix currentmatrix dtransform
    dup mul exch dup mul add sqrt

    % Round to an integer, make sure the number is at least 1, and compute
    % user coord distance corresponding to this.
    dup round dup 1 lt {pop 1} if
    exch div mul
} bind def

% width height string StippleFill --
%
% Given a path already set up and a clipping region generated from
% it, this procedure will fill the clipping region with a stipple
% pattern.  "String" contains a proper image description of the
% stipple pattern and "width" and "height" give its dimensions.  Each
% stipple dot is assumed to be about one unit across in the current
% user coordinate system.  This procedure trashes the graphics state.

/StippleFill {
    % The following code is needed to work around a NeWSprint bug.

    /tmpstip 1 index def

    % Change the scaling so that one user unit in user coordinates
    % corresponds to the size of one stipple dot.
    1 EvenPixels dup scale

    % Compute the bounding box occupied by the path (which is now
    % the clipping region), and round the lower coordinates down
    % to the nearest starting point for the stipple pattern.  Be
    % careful about negative numbers, since the rounding works
    % differently on them.

    pathbbox
    4 2 roll
    5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
    6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll

    % Stack now: width height string y1 y2 x1 x2
    % Below is a doubly-nested for loop to iterate across this area
    % in units of the stipple pattern size, going up columns then
    % across rows, blasting out a stipple-pattern-sized rectangle at
    % each position

    6 index exch {
	2 index 5 index 3 index {
	    % Stack now: width height string y1 y2 x y

	    gsave
	    1 index exch translate
	    5 index 5 index true matrix tmpstip imagemask
	    grestore
	} for
	pop
    } for
    pop pop pop pop pop
} bind def

% -- AdjustColor --
% Given a color value already set for output by the caller, adjusts
% that value to a grayscale or mono value if requested by the CL
% variable.

/AdjustColor {
    CL 2 lt {
	currentgray
	CL 0 eq {
	    .5 lt {0} {1} ifelse
	} if
	setgray
    } if
} bind def

% x y strings spacing xoffset yoffset justify stipple DrawText --
% This procedure does all of the real work of drawing text.  The
% color and font must already have been set by the caller, and the
% following arguments must be on the stack:
%
% x, y -	Coordinates at which to draw text.
% strings -	An array of strings, one for each line of the text item,
%		in order from top to bottom.
% spacing -	Spacing between lines.
% xoffset -	Horizontal offset for text bbox relative to x and y: 0 for
%		nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
% yoffset -	Vertical offset for text bbox relative to x and y: 0 for
%		nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
% justify -	0 for left justification, 0.5 for center, 1 for right justify.
% stipple -	Boolean value indicating whether or not text is to be
%		drawn in stippled fashion.  If text is stippled,
%		procedure StippleText must have been defined to call
%		StippleFill in the right way.
%
% Also, when this procedure is invoked, the color and font must already
% have been set for the text.

/DrawText {
    /stipple exch def
    /justify exch def
    /yoffset exch def
    /xoffset exch def
    /spacing exch def
    /strings exch def

    % First scan through all of the text to find the widest line.

    /lineLength 0 def
    strings {
	cstringwidth pop
	dup lineLength gt {/lineLength exch def} {pop} ifelse
	newpath
    } forall

    % Compute the baseline offset and the actual font height.

    0 0 moveto (TXygqPZ) false charpath
    pathbbox dup /baseline exch def
    exch pop exch sub /height exch def pop
    newpath

    % Translate coordinates first so that the origin is at the upper-left
    % corner of the text's bounding box. Remember that x and y for
    % positioning are still on the stack.

    translate
    lineLength xoffset mul
    strings length 1 sub spacing mul height add yoffset mul translate

    % Now use the baseline and justification information to translate so
    % that the origin is at the baseline and positioning point for the
    % first line of text.

    justify lineLength mul baseline neg translate

    % Iterate over each of the lines to output it.  For each line,
    % compute its width again so it can be properly justified, then
    % display it.

    strings {
	dup cstringwidth pop
	justify neg mul 0 moveto
	stipple {
	   
 
	    % The text is stippled, so turn it into a path and print
	    % by calling StippledText, which in turn calls StippleFill.
	    % Unfortunately, many Postscript interpreters will get
	    % overflow errors if we try to do the whole string at
	    % once, so do it a character at a time.

	    gsave
	    /char (X) def
	    {
		dup type /stringtype eq {
		    % This segment is a string.
		    {
		        char 0 3 -1 roll put
		        currentpoint
		        gsave
		        char true charpath clip StippleText
		        grestore
		        char stringwidth translate
		        moveto
		    } forall
		} {
		    % This segment is glyph name
		    % Temporary override
		    currentfont /Encoding get exch 1 exch put
		    currentpoint
		    gsave (\001) true charpath clip StippleText
		    grestore
	            (\001) stringwidth translate
		    moveto
		} ifelse
	    } forall
	    grestore 
	} {cstringshow} ifelse
	0 spacing neg translate
    } forall
} bind def

%%EndProlog
%%BeginSetup
/CL 2 def
%%EndSetup

%%Page: 1 1
save
306.0 396.0 translate
0.9995 0.9995 scale
4 -449 translate
-483 898 moveto 475 898 lineto 475 0 lineto -483 0 lineto closepath clip newpath
gsave
grestore
gsave
0 445 moveto
200 445 lineto
3.03844939755837 479.729635533386 lineto
190.97697355474 411.325606868252 lineto
17.7718927978523 511.325606868252 lineto
170.980781421648 382.768084930944 lineto
42.42325948434 535.97697355474 lineto
142.42325948434 362.771892797852 lineto
74.0192308192062 550.710416955034 lineto
108.748866352592 353.748866352592 lineto
108.748866352592 553.748866352592 lineto
74.0192308192064 356.787315750151 lineto
142.42325948434 544.725839907333 lineto
42.4232594843401 371.520759150445 lineto
170.980781421648 524.72964777424 lineto
17.7718927978524 396.172125836932 lineto
190.97697355474 496.172125836933 lineto
3.03844939755834 427.768097171799 lineto
200 462.497732705185 lineto
-1.13686837721616e-13 462.497732705185 lineto
196.961550602442 427.768097171799 lineto
9.02302644525972 496.172125836932 lineto
182.228107202148 396.172125836933 lineto
29.0192185783518 524.72964777424 lineto
157.57674051566 371.520759150445 lineto
57.5767405156596 544.725839907332 lineto
125.980769180794 356.787315750151 lineto
91.2511336474073 553.748866352592 lineto
91.2511336474079 353.748866352592 lineto
125.980769180793 550.710416955034 lineto
57.5767405156601 362.771892797852 lineto
157.57674051566 535.97697355474 lineto
29.0192185783522 382.768084930944 lineto
182.228107202148 511.325606868253 lineto
9.02302644525994 411.325606868252 lineto
196.961550602442 479.729635533386 lineto
-1.70530256582424e-13 445 lineto
0 445 lineto
1.000 1.000 0.000 setrgbcolor AdjustColor
eofill
grestore
gsave
0 445 moveto
200 445 lineto
3.03844939755837 479.729635533386 lineto
190.97697355474 411.325606868252 lineto
17.7718927978523 511.325606868252 lineto
170.980781421648 382.768084930944 lineto
42.42325948434 535.97697355474 lineto
142.42325948434 362.771892797852 lineto
74.0192308192062 550.710416955034 lineto
108.748866352592 353.748866352592 lineto
108.748866352592 553.748866352592 lineto
74.0192308192064 356.787315750151 lineto
142.42325948434 544.725839907333 lineto
42.4232594843401 371.520759150445 lineto
170.980781421648 524.72964777424 lineto
17.7718927978524 396.172125836932 lineto
190.97697355474 496.172125836933 lineto
3.03844939755834 427.768097171799 lineto
200 462.497732705185 lineto
-1.13686837721616e-13 462.497732705185 lineto
196.961550602442 427.768097171799 lineto
9.02302644525972 496.172125836932 lineto
182.228107202148 396.172125836933 lineto
29.0192185783518 524.72964777424 lineto
157.57674051566 371.520759150445 lineto
57.5767405156596 544.725839907332 lineto
125.980769180794 356.787315750151 lineto
91.2511336474073 553.748866352592 lineto
91.2511336474079 353.748866352592 lineto
125.980769180793 550.710416955034 lineto
57.5767405156601 362.771892797852 lineto
157.57674051566 535.97697355474 lineto
29.0192185783522 382.768084930944 lineto
182.228107202148 511.325606868253 lineto
9.02302644525994 411.325606868252 lineto
196.961550602442 479.729635533386 lineto
-1.70530256582424e-13 445 lineto
1 setlinecap
1 setlinejoin
1 setlinewidth
[] 0 setdash
1.000 0.000 0.000 setrgbcolor AdjustColor
stroke
grestore
gsave
grestore
gsave
-1.70530256582424e-13 445 moveto
-9.00000000000019 450 lineto
-7.00000000000017 445 lineto
-9.00000000000015 440 lineto
-1.70530256582424e-13 445 lineto
1.000 1.000 0.000 setrgbcolor AdjustColor
eofill
-1.70530256582424e-13 445 moveto
-9.00000000000019 450 lineto
-7.00000000000017 445 lineto
-9.00000000000015 440 lineto
-1.70530256582424e-13 445 lineto
1 setlinejoin 1 setlinecap
1 setlinewidth
[] 0 setdash
1.000 0.000 0.000 setrgbcolor AdjustColor
stroke
grestore
restore showpage

%%Trailer
end
%%EOF

