diff --git a/books/bookvol10.1.pamphlet b/books/bookvol10.1.pamphlet index b86e43c..7721582 100644 --- a/books/bookvol10.1.pamphlet +++ b/books/bookvol10.1.pamphlet @@ -8474,6 +8474,9 @@ variable $P$. setCurve(C)$P \end{verbatim} +\chapter{Interpolation Formulas} +{\center{\includegraphics[scale=0.80]{ps/lozenge2.eps}}} + \chapter{Groebner Basis} Groebner Basis \chapter{Greatest Common Divisor} diff --git a/books/ps/lozenge2.eps b/books/ps/lozenge2.eps new file mode 100644 index 0000000..b8f283a --- /dev/null +++ b/books/ps/lozenge2.eps @@ -0,0 +1,7522 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software +%%Title: lozenge2.dvi +%%CreationDate: Tue Jul 22 12:22:24 2014 +%%BoundingBox: 60 251 486 721 +%%DocumentFonts: NimbusRomNo9L-Regu CMR8 CMR6 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips lozenge2.dvi -E -o lozenge2.eps +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2014.07.22:1222 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 +def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 +rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 +N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop +false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A +length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} +forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ +BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat +{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch +round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 +rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B +/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} +B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p +-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ +0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: pstricks.pro 0 0 +% $Id: pstricks.pro 647 2012-02-12 15:03:40Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 1.12, 2012/02/12 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +% Define the follwing gs-functions if not known, eg when using distiller +% +systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if +systemdict /.setblendmode known not {/.setblendmode { pop } def } if +systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if +% +/tx@Dict 200 dict def % the main PSTricks dictionary +tx@Dict begin +/ADict 25 dict def % The arrow dictionaray +/CM { matrix currentmatrix } bind def +/SLW /setlinewidth load def +/CLW /currentlinewidth load def +/CP /currentpoint load def +/ED { exch def } bind def +/L /lineto load def +/T /translate load def +/TMatrix { } def +/RAngle { 0 } def +/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments +/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/tan { dup cos abs 1.e-10 lt + { pop 1.e10 } % return 1.e10 as infinit + { dup sin exch cos div } ifelse % default sin/cos +} def +/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees +/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root + pop pop 0 }{ sqrt exch atan} ifelse } def +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter +/Pyth2 { % Pythagoras, xA yA xB yB + 3 -1 roll % xA xB yB yA + sub % xA xB yB-yA + 3 1 roll % yB-yA xA xB + sub % yB-yA xA-xB + Pyth } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +/Rand { rand 4294967295 div } def % a real random number +%----------------- hv added 20050516 --------------- +/PiDiv2 1.57079632680 def +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +%/e Euler bind def +% +/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } bind def % viceversa +%----------------- hv end--------------------------- +/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def +% +/PathLength { + flattenpath /z 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } + { /y ED /x ED PathLength@ } + {} + { /y y2 def /x x2 def PathLength@ } + /pathforall load stopped { pop pop pop pop } if + z +} def +% +/STP { .996264 dup scale } def % BP/PT scaling +/STV { SDict begin normalscale end STP } def % +% +/DashLine { + dup 0 gt + { /a .5 def PathLength exch div } + { pop /a 1 def PathLength } ifelse + /b ED % pattern should fit evenly in b + dup /X ED % pattern array + 0 get /y ED % length of first black segment + /z 0 X {add} forall def % length of the full pattern + %% Computation of the scaling factor as described by van Zandt: + b a .5 sub 2 mul y mul sub z Div round + z mul a .5 sub 2 mul y mul add b exch Div + %%%% scaling factor on stack. + /z ED %% now, z is the scaling factor + false % for the length test below + X { z mul } forall X astore %% modification TN 04-08-07 + %%% Checking whether at least one dash in X has positive length: + {0 gt or} forall + { X 1 a sub y mul } + { [ 1 0 ] 0 } + ifelse + setdash stroke +} def +% +/DotLine { + /b PathLength def + /a ED /z ED /y CLW def + /z y z add def + a 0 gt { + /b b a div def + }{ + a 0 eq { + /b b y sub def + }{ a -3 eq { + /b b y add def } if + } ifelse + } ifelse + [ 0 b b z Div round Div dup 0 le { pop 1 } if ] + a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse + setdash 1 setlinecap stroke +} def +% +/SymbolLine { % on stack [ x y x y ... + counttomark % number of elements + 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + + %% for negative SymStep we calculate the distance + SymStep 0 lt + { %XYLength SymStep div abs cvi + /nSym SymStep abs cvi def } + { /nSym XYLength SymStep div cvi def } + ifelse + 0.5 setflat + /Shift Symbol stringwidth pop 2 div def + /deltaX XLength nSym div def + /deltaY YLength nSym div def + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + nSym { + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + currentpoint translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + deltaX deltaY rmoveto + } repeat + /YA YB def /XA XB def + } repeat + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + XA YA translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + pop % delete the mark symbol +} def +% +/LineFill { % hv ------------ patch 7 ------------- + gsave + abs /hatchWidthInc ED + abs /hatchSepInc ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + 2 setlinecap + systemdict + /setstrokeadjust known { true setstrokeadjust } if + x2 x1 sub 1 add { + x1 a mul y1 moveto 0 y2 rlineto stroke + /x1 x1 1 add + hatchWidthInc 0 gt { CLW add } if + def + hatchSepInc 0 gt hatchWidthInc 0 gt or { + /a a hatchSepInc add def + CLW hatchWidthInc add SLW + } if + } repeat + grestore + pop pop } def +% +/DotFill {% on stack: dot radius + /dotRadius ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform + pathbbox % llx lly urx ury of smallest bounding box + /y2 ED /x2 ED /y1 ED /x1 ED + y2 y1 sub a div 2 add cvi /Ny ED + x2 x1 sub a div 2 add cvi /Nx ED + clip + newpath + /yA y1 dotRadius add CLW add def + /xA0 x1 dotRadius add CLW add def + Ny { + /xA xA0 def + Nx { + newpath + xA yA dotRadius 0 360 arc + SolidDot { gsave fill grestore } if + stroke + xA a add /xA ED + } repeat + yA a add /yA ED + } repeat + grestore +} def +% +/PenroseFill {% on stack: scaling factor + dup dup scale + 1 exch div round /penroseFactor ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + systemdict + /setstrokeadjust known { true setstrokeadjust } if + /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} + { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall + [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto + i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 + mul j l + S rmoveto}F i L j L stroke }F}F}F}F + grestore + pop pop +} def +% +/TruchetFill { % on stack: scaling factor + 10 dict begin + dup dup scale + 1 exch div round /penroseFactor ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + systemdict + /setstrokeadjust known { true setstrokeadjust } if + /ma a neg def + /ha a 2 div def + /mha ha neg def + /tile { + rand dup 2 idiv 2 mul eq { 90 rotate } if + mha mha moveto ha mha lineto + ha ha lineto mha ha lineto +% closepath .1 setlinewidth stroke + contents + } def + /contents{ + 0 ha moveto ha 0 lineto + 0 mha moveto mha 0 lineto +% 1 setlinewidth stroke + } def + /dotiling { + f ma mul a f a mul { + /i exch def + f ma mul a f a mul { + /j exch def + gsave i j translate + tile stroke grestore + } for + } for + } def +% + /f 3 def + 5 srand dotiling + end % local user dict +} def +% +/BeginArrow { + ADict begin % hold it local, for end see EndArrow + /@mtrx CM def + gsave + 2 copy T + 2 index sub neg exch + 3 index sub exch Atan + rotate newpath +} def +% +/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict +% +/Arrow { + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /a ED + { 0 h T 1 -1 scale } if + w neg h moveto + 0 0 L w h L w neg a neg rlineto + gsave fill grestore +} def +% +/ArrowD { % the sides are drawn as curves (hv 20071211) + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /Inset ED + { 0 h T 1 -1 scale } if % changes the direction +% we use y=w/h^2 * x^2 as equation for the control points +% for the coordinates the arrow is seen from top to bottom +% the bottom (tip) is (0;0) + w neg h moveto % lower left of > + w 9 div 4 mul neg h 3 div 2 mul + w 9 div neg h 3 div + 0 0 curveto % tip of > + w 9 div h 3 div + w 9 div 4 mul h 3 div 2 mul + w h curveto % upper left of > + w neg Inset neg rlineto % move to x=0 and inset + gsave fill grestore +} def +% +/Tbar { + CLW mul add /z ED + z -2 div CLW 2 div moveto + z 0 rlineto stroke + 0 CLW moveto +} def +% +/Bracket { + CLW mul add dup CLW sub 2 div + /x ED mul CLW add /y ED /z CLW 2 div def + x neg y moveto + x neg CLW 2 div L x CLW 2 div L x y L stroke + 0 CLW moveto +} def +% +/RoundBracket { + CLW mul add dup 2 div + /x ED mul /y ED /mtrx CM def + 0 CLW 2 div T x y mul 0 ne { x y scale } if + 1 1 moveto + .85 .5 .35 0 0 0 curveto + -.35 0 -.85 .5 -1 1 curveto + mtrx setmatrix stroke 0 CLW moveto +} def +% +/SD { 0 360 arc fill } def +% +/EndDot { % DS is the dot size + { /z DS def } { /z 0 def } ifelse % outer or inner dimen + /b ED % the color definition + 0 z DS SD + b { 0 z DS CLW sub SD } if + 0 DS z add CLW 4 div sub + moveto +} def +% +/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { + /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto + load } if ] cvx newpath 3 1 roll T exec } def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED % n 2 div on stack + n eq not { exch pop } if % even numbers of points? delete one + ] aload /Points ED + showpoints not { Points aload pop } if +% { ] aload /Points ED } +% { n 2 mul 1 add -1 roll pop } ifelse % delete the mark symbol +} def +% +/Line { + NArray n 0 eq not + { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def + n { Lineto } repeat + CP 4 2 roll ArrowB L pop pop + } if +} def +% +/LineToYAxis { + /Ox ED % Save the x origin value + NArray % all x-y pairs on stack + n { 2 copy moveto % go to current point + Ox exch Lineto % line to y-axis + pop % delete old x-value + } repeat +} def +% +/LineToXAxis{ + /Oy ED % Save the y origin value + NArray % all x-y pairs on stack + n 0 eq not + { n 1 eq { 0 0 /n 2 def } if + ArrowA + /n n 2 sub def + CP 2 copy moveto pop Oy Lineto + n { 2 copy moveto pop Oy Lineto } repeat + CP + 4 2 roll + ArrowB + 2 copy moveto pop Oy + L + pop pop } if +} def +% +/Arcto { + /a [ 6 -2 roll ] cvx def + a r + /arcto load stopped { 5 } { 4 } ifelse { pop } repeat + a +} def +% +/CheckClosed { + dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq + and { pop pop /n n 1 sub def } if +} def +% +/Polygon { + NArray n 2 eq { 0 0 /n 3 def } if + n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + n 2 mul -2 roll + /y0 ED /x0 ED /y1 ED /x1 ED + x1 y1 + /x1 x0 x1 add 2 div def + /y1 y0 y1 add 2 div def + x1 y1 moveto + /n n 2 sub def + n { Lineto } repeat + x1 y1 x0 y0 6 4 roll Lineto + Lineto pop pop closepath } ifelse +} def +% +/SymbolPolygon { % on stack [ x y x y ... + counttomark % number of elements + 2 add /m ED + 2 copy m 2 roll % copy last two + m 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + /nSym XYLength SymStep Div cvi def + /Shift Symbol stringwidth pop 2 Div def + /deltaX XLength nSym Div def + /deltaY YLength nSym Div def + XA Shift sub YA Shift sub moveto + nSym { + gsave rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + grestore + deltaX deltaY rmoveto + } repeat +% XB Shift sub YB Shift sub moveto Symbol show + /YA YB def /XA XB def + } repeat + pop % delete the mark symbol +} def +% +/Diamond { + /mtrx CM def + T rotate + /h ED + /w ED + dup 0 eq { pop } { CLW mul neg + /d ED + /a w h Atan def + /h d a sin Div h add def + /w d a cos Div w add def } ifelse + mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div + /ArrowA { moveto } def + /ArrowB { } def + false Line + closepath mtrx setmatrix } def +% +/Triangle { + /mtrx CM def + translate + rotate /h ED 2 div /w ED + dup CLW mul /d ED + /h h d w h Atan sin Div sub def + /w w d h w Atan 2 div dup cos exch sin Div mul sub def + mark + 0 d w neg d 0 h w d 0 d + /ArrowA { moveto } def + /ArrowB { } def + false + Line + closepath + mtrx +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% setmatrix } def + setmatrix pop +} def +% DG/SR modification end +% +/CCA { + /y ED /x ED + 2 copy y sub /dy1 ED + x sub /dx1 ED + /l1 dx1 dy1 Pyth def +} def +% +/CC { + /l0 l1 def + /x1 x dx sub def + /y1 y dy sub def + /dx0 dx1 def + /dy0 dy1 def + CCA + /dx dx0 l1 c exp mul dx1 l0 c exp mul add def + /dy dy0 l1 c exp mul dy1 l0 c exp mul add def + /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def + /x2 x l0 dx mul m mul sub def + /y2 y l0 dy mul m mul sub def + /dx l1 dx mul m mul neg def + /dy l1 dy mul m mul neg def +} def +% +/IC { + /c c 1 add def + c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse + /a a 2 mul 3 div 45 cos b exp div def + CCA + /dx 0 def + /dy 0 def +} def +% +/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def +/NC { CC x1 y1 x2 y2 x y curveto } def +/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def +/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def +/NAC { x2 y2 x y curveto CC x1 y1 } def +/EAC { x2 y2 x y ArrowB curveto pop pop } def +% +/OpenCurve { + NArray n 3 lt + { n { pop pop } repeat } + { BOC /n n 3 sub def n { NC } repeat EOC } ifelse +} def +% +/CurvePath { + %% for negative SymStep we calculate the distance + SymStep 0 lt { gsave PathLength SymStep div abs /SymStep ED grestore } if + 0.5 setflat + flattenpath /z 0 def /z0 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def + x1 Shift sub y1 Shift sub moveto + gsave + curveticks + { x1 y1 translate startAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { startAngle rotate Symbol show } + ifelse + grestore /z0 z def } + { /y ED /x ED PathLength@ z z0 sub SymStep ge { + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub CorrAngle sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore /z0 z def } if + /yOld y def /xOld x def } + {} %% the lineto part + { /y y2 def /x x2 def PathLength@ + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + x Shift sub y Shift sub moveto + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + } + pathforall +% curveticks +% { gsave +% x y translate rotAngle rotate +% 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto +% SymbolLinewidth setlinewidth stroke grestore +% } if + z +} def +% +/OpenSymbolCurve { + OpenCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/AltCurve { + { false NArray n 2 mul 2 roll + [ n 2 mul 3 sub 1 roll ] aload + /Points ED + n 2 mul -2 roll } + { false NArray } ifelse + n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse +} def +% +/AltOpenSymbolCurve { + AltCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedCurve { + NArray n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + 6 copy n 2 mul 6 add 6 roll + IC CC x y moveto n { NC } repeat + closepath pop pop + } ifelse +} def +% +/ClosedSymbolCurve { + ClosedCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def +/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def +/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def +% +/FontDot { + DS 2 mul dup + matrix scale matrix concatmatrix exch matrix + rotate matrix concatmatrix exch + findfont exch makefont setfont +} def +% +/Rect { + x1 y1 y2 add 2 div moveto + x1 y2 lineto + x2 y2 lineto + x2 y1 lineto + x1 y1 lineto + closepath +} def +% +/OvalFrame { + x1 x2 eq y1 y2 eq or + { pop pop x1 y1 moveto x2 y2 L } + { y1 y2 sub abs x1 x2 sub abs 2 copy gt + { exch pop } { pop } ifelse + 2 div exch { dup 3 1 roll mul exch } if + 2 copy lt { pop } { exch pop } ifelse + /b ED + x1 y1 y2 add 2 div moveto + x1 y2 x2 y2 b arcto + x2 y2 x2 y1 b arcto + x2 y1 x1 y1 b arcto + x1 y1 x1 y2 b arcto + 16 { pop } repeat + closepath + } ifelse +} def +% +/Frame { + CLW mul /a ED + 3 -1 roll + 2 copy gt { exch } if + a sub /y2 ED + a add /y1 ED + 2 copy gt { exch } if + a sub /x2 ED + a add /x1 ED + 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse +} def +% +/BezierNArray { + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} def +% +/OpenBezier { + BezierNArray + n 1 eq + { pop pop } + { ArrowA n 4 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + 6 2 roll 4 2 roll ArrowB curveto } ifelse +} def +% +/OpenSymbolBezier { + OpenBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedBezier { + BezierNArray + n 1 eq + { pop pop } + { moveto n 1 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + closepath } ifelse +} def +% +/ClosedSymbolBezier { + /f ED % save showpoints value + 2 copy /yEnd ED /xEnd ED + counttomark -2 roll 2 copy /yStart ED /xStart ED + counttomark 2 roll + f + ClosedBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath + [ xEnd yEnd xStart yStart SymbolLine +} def +% +/BezierShowPoints { + gsave + Points aload length 2 div cvi /n ED + moveto + n 1 sub { lineto } repeat + CLW 2 div SLW [ 4 4 ] 0 setdash stroke + grestore +} def +% +/Parab { + /y0 ED /x0 ED /y1 ED /x1 ED + /dx x0 x1 sub 3 div def + /dy y0 y1 sub 3 div def + x0 dx sub y0 dy add x1 y1 ArrowA + x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def +} def +% +/Parab1 { % 1 end | 0 SP + /ySP ED /xSP ED /y1 ED /x1 ED + /dx xSP x1 sub 3 div def + /dy ySP y1 sub 3 div def + newpath x1 y1 moveto xSP y1 lineto xSP ySP lineto + x1 ySP lineto closepath clip + currentpoint + newpath moveto + xSP dx sub ySP dy add x1 y1 ArrowA + xSP dx add ySP dy add xSP 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 xSP ySP xSP 2 mul x1 sub y1 ] def +} def +% +/Grid { + newpath + /a 4 string def + /b ED % psk@gridlabels in pt + /c ED % { \pst@usecolor\psgridlabelcolor } + /n ED % psk@griddots + cvi dup 1 lt { pop 1 } if + /s ED % \psk@subgriddiv + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if % \pst@number\psyunit abs + /dx ED dy div round dy mul % \pst@number\psxunit abs + /y0 ED dx div round dx mul + /x0 ED dy div round cvi + /y2 ED dx div round cvi + /x2 ED dy div round cvi + /y1 ED dx div round cvi + /x1 ED + /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def + /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def + b 0 gt { + /z1 b 4 div CLW 2 div add def +% /Helvetica findfont b scalefont setfont + /b b .95 mul CLW 2 div add def } if + systemdict /setstrokeadjust known + { true setstrokeadjust /t { } def } + { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add + exch itransform } bind def } ifelse + gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse + /i x1 def + /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def + /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def + x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if + { i dx mul dup y0 moveto + b 0 gt + { gsave c i a cvs dup stringwidth pop + /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse + h 0 gt {b neg}{z1} ifelse + rmoveto show grestore } if + dup t f moveto + g t L stroke + /i i w add def + } repeat + grestore + gsave + n 0 gt + % DG/SR modification begin - Nov. 7, 1997 - Patch 1 + %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } + { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } + % DG/SR modification end + { 2 setlinecap } ifelse + /i y1 def + /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def + /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def + y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if + { newpath i dy mul dup x0 exch moveto + b 0 gt { gsave c i a cvs dup stringwidth pop + /z2 ED + w 0 gt {z1 z2 add neg} {z1} ifelse + h 0 gt {z1} {b neg} ifelse + rmoveto show grestore } if + dup f exch t moveto + g exch t L stroke + /i i h add def + } repeat + grestore +} def +% +/ArcArrow { + /d ED /b ED /a ED + gsave + newpath 0 -1000 moveto clip + newpath + 0 1 0 0 b + grestore + c mul + /e ED + pop pop pop r a e d PtoC y add exch x add + exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c + mul neg d +} def +% +/Ellipse { + /rotAngle ED + /mtrx CM def + T + rotAngle rotate + scale 0 0 1 5 3 roll arc + mtrx setmatrix +} def +% +/ArcAdjust { %%%% Vincent Guirardel +% given a target length (targetLength) and an initial angle (angle0) [in the stack], +% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0). +% This computes an angle t such that (x0,y0) is at distance +% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)). +% NOTE: this an absolute angle, it does not have to be added or substracted to angle0 +% contrary to TvZ's code. +% To achieve, this, one iterates the following process: start with some angle t, +% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]. +% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned. +% +% Another difference with TvZ's code is that we need d (=add/sub) to be defined. +% the value of d = add/sub is used to know on which side we have to move. +% It is only used in the initialisation of the angle before the iteration. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Input stack: 1: target length 2: initial angle +% variables used : rx, ry, d (=add/sub) +% + /targetLength ED /angle0 ED + /x0 rx angle0 cos mul def + /y0 ry angle0 sin mul def +% we are looking for an angle t such that (x0,y0) is at distance targetLength +% from the point M(t)=(rx*cos(t),ry*sin(t))) +%initialisation of angle (using 1st order approx = TvZ's code) + targetLength 57.2958 mul + angle0 sin rx mul dup mul + angle0 cos ry mul dup mul + add sqrt div +% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees +% (if the ellipse is very curved at the point where we draw the arrow, % +% the value can be much more than 360 degrees !) +% this should avoid going on the wrong side (more than 180 degrees) or go near +% a bad attractive point (at 180 degrees) + dup 90 ge { pop 90 } if + angle0 exch d % add or sub +% maximum number of times to iterate the iterative procedure: +% iterative procedure: takes an angle t on top of stack, computes a +% better angle (and put it on top of stack) + 30 { dup +% compute distance D between (x0,y0) and M(t) + dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt +% if D almost equals targetLength, we stop + dup targetLength sub abs 1e-5 le { pop exit } if +% stack now contains D t +% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]: +% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 ) + exch dup cos rx mul x0 sub exch sin ry mul y0 sub +% stack contains: y(t)-y0, x(t)-x0, d + 2 index Div targetLength mul y0 add ry Div exch + 2 index Div targetLength mul x0 add rx Div +% stack contains x(t')/rx , y(t')/ry , d +% now compute t', and remove D from stack + atan exch pop + } repeat +% we don't look at what happened... in particular, if targetLength is greater +% than the diameter of the ellipse... +% the final angle will be around /angle0 + 180. maybe we should treat this pathological case... +% after iteration, stack contains an angle t such that M(t) is the tail of the arrow +% to give back the result as a an angle relative to angle0 we could add the following line: +% angle0 sub 0 exch d +% +% begin bug fix 2006-01-11 +% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180 +%(we don't want to make the ellipse turn more or less than it should)... +dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse +% end bug fix +} def +% +/EllipticArcArrow { + /d ED % is add or sub + /b ED % arrow procedure + /a1 ED % angle + gsave + newpath + 0 -1000 moveto + clip % Set clippath far from arrow. + newpath + 0 1 0 0 b % Draw arrow to determine length. + grestore +% Length of arrow is on top of stack. Next 3 numbers are junk. +% + a1 exch ArcAdjust % Angular position of base of arrow. + /a2 ED + pop pop pop + a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig + a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig + a1 cos rx mul xOrig add % + a1 sin ry mul yOrig add % +% Now arrow tip coor and base coor are on stack. + b pop pop pop pop % Draw arrow, and discard coordinates. + a2 CLW 8 div +% change value of d (test it by looking if `` 1 1 d '' gives 2 or not ) + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse + ArcAdjust +% resets original value of d + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap. +} def +%%------------------ tvz/DG/hv (2004-05-10) end -------------------%% +% +/Rot { CP CP translate 3 -1 roll neg rotate NET } def +% +/RotBegin { + tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if + /TMatrix [ TMatrix CM ] cvx def + /a ED + a Rot /RAngle [ RAngle dup a add ] cvx def +} def +% +/RotEnd { + /TMatrix [ TMatrix setmatrix ] cvx def + /RAngle [ RAngle pop ] cvx def +} def +% +/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def +/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def +/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +% +/Uput { + /a ED + add 2 div /h ED 2 + div /w ED + /s a sin def + /c a cos def + /b s abs c abs 2 copy gt dup + /q ED + { pop } { exch pop } ifelse def + /w1 c b div w mul def + /h1 s b div h mul def + q { w1 abs w sub dup c mul abs }{ h1 abs h sub dup s mul abs } ifelse +} def +% +/UUput { + /z ED + abs /y ED + /x ED + q { x s div c mul abs y gt }{ x c div s mul abs y gt } ifelse + { x x mul y y mul sub z z mul add sqrt z add } + { q { x s div } { x c div } ifelse abs + } ifelse + a PtoC + h1 add exch + w1 add exch +} def +% +/BeginOL { + dup (all) eq exch TheOL eq or + { IfVisible not { Visible /IfVisible true def } if } + { IfVisible { Invisible /IfVisible false def } if } ifelse +} def +% +/InitOL { + /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def + /Visible { CP OLUnit idtransform T moveto } def + /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def + /BOL { BeginOL } def + /IfVisible true def +} def +% +%%%%%%%%%%%%%%%%% tools %%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% ### bubblesort ### +%% syntax : array bubblesort --> array2 trie par ordre croissant +%% code de Bill Casselman +%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/ +/bubblesort { +4 dict begin + /a exch def + /n a length 1 sub def + n 0 gt { + % at this point only the n+1 items in the bottom of a remain to + % the sorted largest item in that blocks is to be moved up into + % position n + n { + 0 1 n 1 sub { + /i exch def + a i get a i 1 add get gt { + % if a[i] > a[i+1] swap a[i] and a[i+1] + a i 1 add + a i get + a i a i 1 add get + % set new a[i] = old a[i+1] + put + % set new a[i+1] = old a[i] + put + } if + } for + /n n 1 sub def + } repeat + } if + a +end +} def +% +% +/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422 + 0 1 index { length add } forall + string + 0 3 2 roll + { 3 copy putinterval length add }forall + pop +} bind def +% +/dot2comma {% on stack a string (...) + 2 dict begin + /Output exch def + 0 1 Output length 1 sub { + /Index exch def + Output Index get 46 eq { Output Index 44 put } if + } for + Output + end +} def +% +end +%-----------------------------------------------------------------------------% +% +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 594 2011-10-31 18:13:18Z herbert $ +%% +%% PostScript prologue for PSTricks algorithm parser +%% Version 0.04, 2011/10/21 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%%-----------------------------------------------------------------------------% +% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.13 +% +% 09/2011 DR factorial with ! added +% +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF|P! +% P->(E)|literal +% literal->number|var|var[E]|func(params) +% params->E|E,param +% number->TOBEFINISHED +% +%% E expression, T term, SF signed factor, F factor, P power +% +%% parser +% +%% str +% +%% C->EE +%% STR index -> STR index+lenExpr +/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def +% +%% analyze Expression List (separator , or | ) +%% STR index -> STR index+lenExpr +%% /AnalyzeListOfE { +%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar +%% NextNonBlankChar dup 0 eq { pop exit } if +%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if +%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop +%% AnalyzeListOfEPostHook +%% } def +/AnalyzeListOfE { + /NotFirst false def + { NextNonBlankChar pop AnalyzeExpr + NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse + dup Strlen eq { exit } if NextNonBlankChar + dup 44 ne 1 index 124 ne and + { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } + if pop 1 add } loop + AnalyzeListOfEPostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% E->T|E+T +%% STR index -> STR index+lenExpr +/AnalyzeExpr { + AnalyzePreHook AnalyzeTerm IsEndingExpr + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% T->FS|T*FS +%% STR index +/AnalyzeTerm { + AnalyzePreHook AnalyzeSignedFactor IsEndingTerm + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FS -> F | +FS | -FS +%% STR index +/AnalyzeSignedFactor { + AnalyzePreHook 2 copy get dup IsUnaryOp + { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp } + { pop AnalyzeFactor } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% F->P|F^P|P! +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { dup 33 eq%% is there a ! DR 09/2011 + { pop 1 add NextNonBlankChar pop EvalFactorial } + { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower } + ifelse + IsEndingFactor { pop exit } if } loop } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% P->(E)|literal +%% STR index +/AnalyzePower { + %% depending of first char either a number, or a literal + 2 copy get dup 40 eq%%an open par + { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop } + { AnalyzeLiteral } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index STR[index] -> STR index +%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def +/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% recognize + or - +%% chr -> T/F +/IsUnaryOp { dup 43 eq exch 45 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadNumber { + exch dup 3 -1 roll dup 3 1 roll + %%read mantissa + { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop + dup 101 eq exch 69 eq or + %%% there is a "e" or "E" -> read exponant + { 1 add 2 copy get dup IsUnaryOp + { pop 1 add 2 copy get } if + { IsNumber not { exit } if 1 add 2 copy get } loop } + if + dup 4 1 roll + 3 -1 roll exch 1 index sub getinterval +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadCondOp { + NextNonBlankChar 1 index 4 1 roll + { IsCondOp not { exit } if 1 add 2 copy get } loop + 2 copy 5 -1 roll + exch 1 index sub getinterval 3 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can contain only : 0123456789. +%% chr -> T/F +/IsLiteral {% + dup 48 ge exch dup 57 le 3 -1 roll and exch + dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch + dup 97 ge exch 122 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)? +%% STR index -> literal STR index' nextchr +/ReadLiteral { + exch dup 3 -1 roll dup 3 1 roll + %%read literal core + { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop + 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a clpar +%% STR index -> STR index STR[index] T/F +/IsEndingExpr {% + 2 copy dup Strlen eq + %% if end of str is reached -> end ! + { pop pop 0 true } + %% ending chr -> clpar, comma, |, <, >, =, !, + {get dup dup 41 eq + exch dup 124 eq + exch dup 93 eq + exch dup 44 eq + exch dup 30 eq + exch dup 60 ge exch 62 le and or or or or or} + ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a +- +%% STR index -> STR index STR[index] T/F +/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or */ +%% STR index -> STR index STR[index] T/F +/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or ^ +%% STR index -> STR index STR[index] T/F +/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index STR[index] +/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def +/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def +%%%%%%%%%%%%%%%%%%%%%%%% +%% DEBUG +/BRK {false} def +/BRKtrue {/BRK true def} def +/BRKStop {BRK {BRKtoto} if } def +/BRKEvalStop {BRK exch if } def +/BRKBRK2true {BRK {BRK2true} if } def +/BRK2 {false} def +/BRK2true {/BRK2 true def} def +/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def +end +% +%-------------------------------------------------------------------------------% +% +/tx@AlgToPs 12 dict def tx@AlgToPs begin +% +%% algExpr -> PSVector +/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def +/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def +/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def +/Strlen 0 def +/EvalListOfExpr {} def% +/EvalNumber {% + ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx + exch 1 add array astore def NextNonBlankChar pop } def +/EvalAddSub {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def +} def +/EvalMulDiv {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def +} def +/EvalPower {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + pop /exp cvx exch 1 add array astore def +} def +/EvalFactorial {% DR 09/2011 + /ExpressionVector ExpressionVector aload length + /fact cvx exch 1 add array astore def +} def +/EvalLiteral {% + ReadLiteral + dup 40 eq%%% there is an open par -> function call + { pop 2 index + dup (Sum) eq { EvalSum } + { dup (IfTE) eq { EvalCond } + { dup (Derive) eq { pop EvalDerive } + { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx + exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse } + { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def + dup 91 eq%%% there is an open bracket -> vector element + { pop 1 add NextNonBlankChar pop AnalyzeExpr + /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add } + { pop NextNonBlankChar pop } + ifelse} + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the derive function : Derive(n,f(x)) +%% firstparindex lastparindex -> +/EvalDerive { + %% manage the function descripiton + 1 add ReadNumber 3 1 roll NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + 1 add NextNonBlankChar pop + 3 -1 roll cvi + dup 0 eq + { pop AnalyzeExpr 3 -1 roll pop 1 add } + { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll + { (x) tx@Derive begin Derive end } repeat + ExpressionVector exch /ExpressionVector [] def + AlgToPs aload length + /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def + l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add + 1 index length /Strlen exch def } ifelse +} def +/EvalSum {% + pop 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll + 5 -1 roll 4 add array astore def + %% keep ExpressionVector for later and create a new one for internal Sum computation + ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def + 1 add NextNonBlankChar pop AnalyzeExpr + %% add each term + /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def + /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add + array astore def 3 -1 roll pop 1 add +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +/EvalCond {% + pop 1 add AnalyzeCond NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + ExpressionVector 3 1 roll /ExpressionVector [] def + 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def + NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add AnalyzeExpr + NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if + ExpressionVector + /ExpressionVector 6 -1 roll aload length dup + 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def + 1 add 3 -1 roll pop +} def +%% CondOp STR index +/EvalCondOp {% + 3 -1 roll + dup (=) eq { /eq } {% + dup (<) eq { /lt } {% + dup (>) eq { /gt } {% + dup (>=) eq { /ge } {% + dup (<=) eq { /ge } {% + dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator } + ifelse } ifelse } ifelse } ifelse } ifelse } ifelse + cvx exch pop + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def +/EvalUnaryOp { + 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook {} bind def +/PreEvalHook {} bind def +/AnalyzeListOfEPostHook {} bind def +/AnalyzePostHook {} def +/RollOp { 3 1 roll } bind def +end %tx@CoreAnalyzerDict +% +%--------------------------------------------------------------------% +% +/tx@Derive 41 dict def tx@Derive begin +%%increase ^^ for each function added +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable -> PSVector +/Derive {% + 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end +} def +/Strlen 0 def +/InitParser { dup length /Strlen exch def 0 } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable index -> PSVector +/DeriveIndexed {% + 3 1 roll 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u,v)'=-(u',v') +/EvalListOfExpr {% + 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe + 2 copy 7 -1 roll dup length 4 1 roll putinterval add + 6 -2 roll pop pop + 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (-u)'=-(u') +/EvalUnaryOp { + 4 -2 roll 4 index (0) eq + { (0) StrConcat 7 -1 roll pop } + { 7 -1 roll 45 eq + { AddSub AddOpPar true } { false } ifelse + 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (number)'=0 +/EvalNumber { ReadNumber (0) 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u+v)'=u'+v' +/EvalAddSub {% + 7 index dup (0) eq + { pop true }%% du=0 nothing added + { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false } + ifelse + 5 index dup (0) eq + { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0 + { exch + { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added + { 5 -2 roll 7 index 43 eq%%something yet added + { AddAdd false } { AddSub AddOpPar true } ifelse } + ifelse 11 1 roll + 3 -1 roll StrConcat 10 -1 roll { AddClPar } if + 2 copy pop 0 6 2 roll GetIntervalNewStr } + ifelse + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)' or (u/v)' +/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)'=u'*v+u*v' +/EvalMul {% + 4 -2 roll 7 index dup (0) eq + { pop false }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if + true }%%du!=0 + ifelse + 5 1 roll 5 index (0) eq + { 5 -1 roll not { (0) StrConcat } if }%%dv=0 + { 5 -1 roll { AddAdd } if + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + }%%dv!=0 + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u/v)'=(u'*v-u*v')/v^2 +/EvalDiv {% + 4 -2 roll + 4 index (0) eq%%dv=0 -> u'/v + { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse } + { 7 index dup (0) eq + { pop }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0 + ifelse + AddSub + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + %}%%dv!=0 + 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar + AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add } + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str1 index str2 -> str1 index +/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def +/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u) +/EvalPower {% + 4 -2 roll 7 index (0) eq + {%%if du=0 then (u^v)'=v'ln(u)u^v + 4 index (0) eq + { (0) StrConcat }%%if dv=0 then (u^v)'=0 + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if + AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse + } + {%%du!=0 + 4 index (0) eq + {%%if dv=0 then (u^v)'=vu'u^(v-1) + 5 index dup IsStrNumber + { dup (0) eq + { StrConcat } + { dup dup (1) eq exch (1.0) eq or + { StrConcat } + { StrConcat + 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1 + { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006 + (*\() StrConcat 8 index StrConcat (\)) StrConcat + 5 index dup dup (2) eq exch (2.0) eq or + { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse } + { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)) StrConcat } ifelse + } + {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u) + 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if + AddOpPar 5 index StrConcat (\)*\() StrConcat + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)+\() StrConcat + 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (\)*ln\() StrConcat + 8 index StrConcat AddClPar + } ifelse + } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for factorial ! only cst => null derivative +/EvalFactorial {% DR 09/2011 + 4 index (0) eq + { (0) mark 8 -2 roll cleartomark 2 index 7 index dup 4 index exch sub getinterval exch 6 2 roll } + { DERIVATIVE_ENGINE_ERROR_no_variable_in_factorial } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str -> true/false +/IsStrNumber {% + true exch + { dup 48 lt exch dup 57 gt 3 -1 roll or + exch dup 46 ne%%. + exch dup 43 ne%%+ + exch 45 ne%%- + and and and { pop false } if } forall +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalLiteral {% + ReadLiteral dup 40 eq%%% there is an open par -> function call + { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec } + { dup 91 eq%%% there is an open bracket -> vector element + { DERIVATIVE_ENGINE_ERROR_vector_not_yet_implemented } + { pop EvalVariable } + ifelse } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% first last parpos Expr[first:parpos-1] -> +/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (f(u))'=u'f'(u) +/EvalFunc { + 4 2 roll 4 index (1) ne + { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Func derivative -> Eval +/EvalFunc_sin {% + PreCommonFunc + { (cos\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_cos {% + PreCommonFunc + { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_tan {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_asin {% + PreCommonFunc + { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_acos {% + PreCommonFunc + { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_atg {% + PreCommonFunc + { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_ln {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_exp {% + PreCommonFunc + { (exp\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_EXP {% + PreCommonFunc + { (EXP\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { DERIVATIVE_ENGINE_ERROR_no_variable_expression_in_Fact } if + PostCommonFunc } def +/EvalFunc_sh {% + PreCommonFunc + { (ch\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_ch {% + PreCommonFunc + { (sh\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_th {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argsh {% + PreCommonFunc + { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argch {% + PreCommonFunc + { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argth {% + PreCommonFunc + { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/PreCommonFunc { + 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop + 4 2 roll 4 index (0) eq + { (0) StrConcat false } + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse +} def +/PostCommonFunc { + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +/EvalFunc_Derive {% + 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs + 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add + 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval + exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_Sum {% + 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop 3 -1 roll pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if + 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat + 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_IfTE {% + 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond + NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + 1 add NextNonBlankChar pop dup 5 1 roll + AnalyzeExpr NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add NextNonBlankChar pop + AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat + 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% advance in str until a comma is found (no error detection!) +%% str index -> str index' +/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for condition.... +/EvalCondOp { 3 -1 roll pop } bind def +/PutIntervalOneAdd {putinterval 1 add} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add close parenthesis in string at the given index +%% str index -> str index+1 +/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add 0 in string at the given index +%% str index -> str index+1 +/AddZero {2 copy (0) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddMul {2 copy (*) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddDiv {2 copy (/) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a plus sign in string at the given index +%% str index -> str index+1 +/AddAdd {2 copy (+) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a minus sign in string at the given index +%% str index -> str index+1 +/AddSub {2 copy (-) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a pipe sign in string at the given index +%% str index -> str index+1 +/AddPipe {2 copy (|) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook { dup 5 1 roll } bind def +/PreEvalHook {} def +/AnalyzePostHook { 7 -1 roll pop } bind def +/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def +/RollOp { 5 1 roll } bind def +end%%%tx@CoreAnalyzerDict +/tx@AddMathFunc 12 dict def tx@AddMathFunc begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% NEW FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2)) +%% x -> theta +/asin {% + dup abs 1 gt { EQDFasinrangeerror } if + dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad +} def +%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x) +%% x -> theta +/acos {% + dup abs 1 gt { EQDFacosrangeerror } if + dup dup mul 1 exch sub sqrt exch atan DegtoRad +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def +%% HYPERBOLIC FUNCTIONS +/sh { dup Ex exch neg Ex sub 2 div } def +/ch { dup Ex exch neg Ex add 2 div } def +/th { dup sh exch ch div } def +/Argsh { dup dup mul 1 add sqrt add ln } def +/Argch { dup dup mul 1 sub sqrt add ln } def +/Argth { dup 1 add exch 1 exch sub div ln 2 div } def +%% modified exponential funtion for 0 +%% x n -> x^n +/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def +%% modified exponential funtion for 0 +%% x -> e^x +/Ex { Euler exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/! { Fact } bind def +end +% +% END pst-algparser.pro + +%%EndProcSet +%%BeginProcSet: pst-tools.pro 0 0 +% $Id: pst-tools.pro 622 2012-01-01 15:36:14Z herbert $ +% +%% PostScript tools prologue for pstricks.tex. +%% Version 0.02, 2012/01/01 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +/Pi2 1.57079632679489661925640 def +/factorial { % n on stack, returns n! + dup 0 eq { 1 }{ + dup 1 gt { dup 1 sub factorial mul } if } + ifelse } def +% +/MoverN { % m n on stack, returns the binomial coefficient m over n + 2 dict begin + /n exch def /m exch def + n 0 eq { 1 }{ + m n eq { 1 }{ + m factorial n factorial m n sub factorial mul div } ifelse } ifelse + end +} def +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% subroutines for complex numbers, given as an array [a b] +% which is a+bi = Real+i Imag +% +/cxadd { % [a1 b1] [a2 b2] = [a1+a2 b1+b2] + dup 0 get % [a1 b1] [a2 b2] a2 + 3 -1 roll % [a2 b2] a2 [a1 b1] + dup 0 get % [a2 b2] a2 [a1 b1] a1 + 3 -1 roll % [a2 b2] [a1 b1] a1 a2 + add % [a2 b2] [a1 b1] a1+a2 + 3 1 roll % a1+a2 [a2 b2] [a1 b1] + 1 get % a1+a2 [a2 b2] b1 + exch 1 get % a1+a2 b1 b2 + add 2 array astore +} def +% +/cxneg { % [a b] + dup 1 get % [a b] b + exch 0 get % b a + neg exch neg % -a -b + 2 array astore +} def +% +/cxsub { cxneg cxadd } def % same as negative addition +% +% [a1 b1][a2 b2] = [a1a2-b1b2 a1b2+b1a2] = [a3 b3] +/cxmul { % [a1 b1] [a2 b2] + dup 0 get % [a1 b1] [a2 b2] a2 + exch 1 get % [a1 b1] a2 b2 + 3 -1 roll % a2 b2 [a1 b1] + dup 0 get % a2 b2 [a1 b1] a1 + exch 1 get % a2 b2 a1 b1 + dup % a2 b2 a1 b1 b1 + 5 -1 roll dup % b2 a1 b1 b1 a2 a2 + 3 1 roll mul % b2 a1 b1 a2 b1a2 + 5 -2 roll dup % b1 a2 b1a2 b2 a1 a1 + 3 -1 roll dup % b1 a2 b1a2 a1 a1 b2 b2 + 3 1 roll mul % b1 a2 b1a2 a1 b2 a1b2 + 4 -1 roll add % b1 a2 a1 b2 b3 + 4 2 roll mul % b1 b2 b3 a1a2 + 4 2 roll mul sub % b3 a3 + exch 2 array astore +} def +% +% [a b]^2 = [a^2-b^2 2ab] = [a2 b2] +/cxsqr { % [a b] square root + dup 0 get exch 1 get % a b + dup dup mul % a b b^2 + 3 -1 roll % b b^2 a + dup dup mul % b b^2 a a^2 + 3 -1 roll sub % b a a2 + 3 1 roll mul 2 mul % a2 b2 + 2 array astore +} def +% +/cxsqrt { % [a b] +% dup cxnorm sqrt /r exch def +% cxarg 2 div RadtoDeg dup cos r mul exch sin r mul cxmake2 + cxlog % log[a b] + 2 cxrdiv % log[a b]/2 + aload pop exch % b a + 2.781 exch exp % b exp(a) + exch cxconv exch % [Re +iIm] exp(a) + cxrmul % +} def +% +/cxarg { % [a b] + aload pop % a b + exch atan % arctan b/a + DegtoRad % arg(z)=atan(b/a) +} def +% +% log[a b] = [a^2-b^2 2ab] = [a2 b2] +/cxlog { % [a b] + dup % [a b][a b] + cxnorm % [a b] |z| + log % [a b] log|z| + exch % log|z|[a b] + cxarg % log|z| Theta + cxmake2 % [log|z| Theta] +} def +% +% square of magnitude of complex number +/cxnorm2 { % [a b] + dup 0 get exch 1 get % a b + dup mul % a b^2 + exch dup mul add % a^2+b^2 +} def +% +/cxnorm { % [a b] + cxnorm2 sqrt +} def +% +/cxconj { % conjugent complex + dup 0 get exch 1 get % a b + neg 2 array astore % [a -b] +} def +% +/cxre { 0 get } def % real value +/cxim { 1 get } def % imag value +% +% 1/[a b] = ([a -b]/(a^2+b^2) +/cxrecip { % [a b] + dup cxnorm2 exch % n2 [a b] + dup 0 get exch 1 get % n2 a b + 3 -1 roll % a b n2 + dup % a b n2 n2 + 4 -1 roll exch div % b n2 a/n2 + 3 1 roll div % a/n2 b/n2 + neg 2 array astore +} def +% +/cxmake1 { 0 2 array astore } def % make a complex number, real given +/cxmake2 { 2 array astore } def % dito, both given +% +/cxdiv { cxrecip cxmul } def +% +% multiplikation by a real number +/cxrmul { % [a b] r + exch aload pop % r a b + 3 -1 roll dup % a b r r + 3 1 roll mul % a r b*r + 3 1 roll mul % b*r a*r + exch 2 array astore % [a*r b*r] +} def +% +% division by a real number +/cxrdiv { % [a b] r + 1 exch div % [a b] 1/r + cxrmul +} def +% +% exp(i theta) = cos(theta)+i sin(theta) polar<->cartesian +/cxconv { % theta + RadtoDeg dup sin exch cos cxmake2 +} def + +%%%%% ### bubblesort ### +%% syntax : array bubblesort --> array2 trie par ordre croissant +%% code de Bill Casselman +%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/ +/bubblesort { % on stack must be an array [ ... ] +4 dict begin + /a exch def + /n a length 1 sub def + n 0 gt { + % at this point only the n+1 items in the bottom of a remain to + % the sorted largest item in that blocks is to be moved up into + % position n + n { + 0 1 n 1 sub { + /i exch def + a i get a i 1 add get gt { + % if a[i] > a[i+1] swap a[i] and a[i+1] + a i 1 add + a i get + a i a i 1 add get + % set new a[i] = old a[i+1] + put + % set new a[i+1] = old a[i] + put + } if + } for + /n n 1 sub def + } repeat + } if + a % return the sorted array +end +} def +% +/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422 + 0 1 index { length add } forall + string + 0 3 2 roll + { 3 copy putinterval length add }forall + pop +} bind def +% +/dot2comma {% on stack a string (...) + 2 dict begin + /Output exch def + 0 1 Output length 1 sub { + /Index exch def + Output Index get 46 eq { Output Index 44 put } if + } for + Output + end +} def +% +%-----------------------------------------------------------------------------% +% END pst-tools.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 130 2009-08-27 08:55:03Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.02, 2009/06/16 +%% +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +%% Modified by Herbert Voss (hv) - 2008/04/17 +% +10 dict dup begin % hold local + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def +% /FontBBox [-571.5 -742.5 571.5 742.5] def % changed to next line 20060616 hv + /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef + Encoding % replace with given dot names + dup (b) 0 get /Bullet put % get the numerical position of b in ASCII +% % and save /Bullet at this place in Encoding + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put % 67 + dup (u) 0 get /SolidTriangle put + dup (t) 0 get /Triangle put + dup (T) 0 get /BoldTriangle put + dup (r) 0 get /SolidSquare put + dup (s) 0 get /Square put + dup (S) 0 get /BoldSquare put + dup (q) 0 get /SolidPentagon put + dup (p) 0 get /Pentagon put + dup (P) 0 get /BoldPentagon put +%%% + dup (k) 0 get /Asterisk put + dup (K) 0 get /BoldAsterisk put + dup (J) 0 get /SolidAsterisk put + dup (h) 0 get /Hexagon put + dup (H) 0 get /BoldHexagon put + dup (G) 0 get /SolidHexagon put + dup (f) 0 get /Octogon put % 2008-04-18 hv + dup (F) 0 get /BoldOctogon put % 2008-04-18 hv + dup (g) 0 get /SolidOctogon put % 2008-04-18 hv + dup (a) 0 get /Add put + dup (A) 0 get /BoldAdd put % 65 + dup (x) 0 get /Mul put + dup (X) 0 get /BoldMul put + dup (m) 0 get /Oplus put + dup (M) 0 get /BOplus put + dup (e) 0 get /SolidOplus put + dup (n) 0 get /Otimes put + dup (N) 0 get /BOtimes put + dup (E) 0 get /SolidOtimes put + dup (i) 0 get /Bar put + dup (I) 0 get /BoldBar put + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +%%% +/CharProcs 47 dict def +CharProcs begin + /CirclePath {0 0 500 0 360 arc closepath} def + /Bullet {CirclePath fill} def + /Circle {CirclePath .9 .9 scale CirclePath eofill} def + /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def + /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def + /SolidTriangle {TrianglePath fill} def + /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def + /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def + /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def + /SolidSquare {SquarePath fill} def + /Square {SquarePath .89 .89 scale SquarePath eofill} def + /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def + /PentagonPath { + -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto + 0 574.7 lineto -546.6 177.6 lineto closepath + } def + /SolidPentagon {PentagonPath fill} def + /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def + /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def +%-------------- hv begin 2004/07/25 from: er 2003/03/24 + /HexagonPath { + 0 550 moveto -476 275 lineto -476 -275 lineto + 0 -550 lineto 476 -275 lineto 476 275 lineto closepath + } def + /SolidHexagon {HexagonPath fill} def + /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def + /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def +% 2008-04-18 hv + /OctogonPath { + 550 dup 22.5 tan mul dup neg dup add /xMove exch def + exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def + /SolidOctogon { OctogonPath fill } def + /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def + /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def +% + /AsteriskPath { + 20 0 moveto 10 250 180 500 0 500 curveto + -180 500 -10 250 -20 0 curveto closepath + } def + /Asterisk { + AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath + 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill + } def +% + /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def + /BoldAsteriskPath { + 50 30 cos 100 mul moveto Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp closepath + } def + /BoldAsterisk {BoldAsteriskPath fill} def + /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def + /CrossPath { + 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto + -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto + 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath + } def + /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto + -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto + 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath + } def + /Add {CrossPath fill} def + /Mul {45 rotate CrossPath fill} def + /BoldAdd {BoldCrossPath fill} def + /BoldMul {45 rotate BoldCrossPath fill} def + /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def + /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def + /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def + /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def + /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def + /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def + /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def + /Bar {BarPath fill} def + /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def + /BoldBar {BoldBarPath fill} def + /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def + /SolidDiamond {DiamondPath fill} def + /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def + /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def +%%% + /.notdef { } def +end +% +/BuildGlyph { + exch + begin +% Metrics 1 index get exec 0 + 0 0 +% BBoxes 3 index get exec + -1000 -1000 1000 1000 +% -571.5 -742.5 571.5 742.5 + setcachedevice + CharProcs begin load exec end + end +} def +% +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +% +end +/PSTricksDotFont exch definefont pop +% +%% end + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 645 2012-02-12 09:09:51Z herbert $ +%% +%% PostScript prologue for pst-node.tex. +%% Version 1.13, 2011/11/21. +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin % from main pstricks dict + /T /translate load def + /CP /currentpoint load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + NodeScale % a bugfix for xelatex, it's empty for dvips + /next exch def % { x y } boolean N@name type + dict dup % { x y } boolean N@name dict dict + 3 1 roll def % { x y } boolean dict N@name dict def + exch { dup 3 1 roll def } if % { x y } dict boolean + begin % { x y } dict begin + tx@Dict begin + STV CP T exec % set scaling + end + /NodeMtrx CM def % save CM + next % InitXNode + end + grestore +} def +% +/InitPnode { + /Y ED /X ED + /NodePos { NodeSep Cos mul NodeSep Sin mul } def +} def +% +/InitCnode { + /r ED /Y ED /X ED + /NodePos { NodeSep r add dup Cos mul exch Sin mul } def +} def +% +/GetRnodePos { + Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse + Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse + dx Sin mul abs dy + Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse +} def +% +/InitRnode { + /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED + /NodePos { GetRnodePos } def +} def +% +/DiaNodePos { + w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup + Cos mul exch Sin mul +} def +% +/TriNodePos { + Sin s lt + { d NodeSep sub dup Cos mul Sin Div exch } + { w h mul w Sin mul h Cos abs mul add Div + NodeSep add dup Cos mul exch Sin mul + } ifelse +} def +% +/InitTriNode { + sub 2 div exch + 2 div exch + 2 copy T + 2 copy 4 index index /d ED + pop pop pop pop + -90 mul rotate + /NodeMtrx CM def + /X 0 def /Y 0 def + d sub abs neg /d ED + d add /h ED + 2 div h mul h d sub Div /w ED + /s d w Atan sin def + /NodePos { TriNodePos } def +} def +% +/OvalNodePos { + /ww w NodeSep add def + /hh h NodeSep add def + Sin ww mul Cos hh mul Atan dup cos ww mul exch sin hh mul +} def +% +/GetCenter { begin X Y NodeMtrx transform CM itransform end } def +% +/XYPos { + dup sin exch cos Do + /Cos ED /Sin ED /Dist ED + Cos 0 gt + { Dist Dist Sin mul Cos div } + { Cos 0 lt + { Dist neg Dist Sin mul Cos div neg } + { 0 Dist Sin mul } ifelse + } ifelse + Do +} def +% +/GetEdge { + dup 0 eq + { pop begin 1 0 NodeMtrx dtransform + CM idtransform + exch atan sub + dup + sin /Sin ED + cos /Cos ED + /NodeSep ED + NodePos NodeMtrx dtransform CM idtransform end } + { 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse +} def +% +/AddOffset { + 1 index 0 eq + { pop pop } + { 2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse +} def +% +/GetEdgeA { + NodeSepA AngleA NodeA NodeSepTypeA GetEdge + OffsetA AngleA AddOffset + yA add /yA1 ED + xA add /xA1 ED +} def +% +/GetEdgeB { + NodeSepB AngleB NodeB NodeSepTypeB GetEdge + OffsetB AngleB AddOffset + yB add /yB1 ED + xB add /xB1 ED +} def +% +/GetArmA { + ArmTypeA 0 eq + { /xA2 ArmA AngleA cos mul xA1 add def + /yA2 ArmA AngleA sin mul yA1 add def } + { ArmTypeA 1 eq {{exch}} {{}} ifelse + /Do ED + ArmA AngleA XYPos OffsetA AngleA AddOffset + yA add /yA2 ED + xA add /xA2 ED } ifelse +} def +% +/GetArmB { + ArmTypeB 0 eq + { /xB2 ArmB AngleB cos mul xB1 add def + /yB2 ArmB AngleB sin mul yB1 add def } + { ArmTypeB 1 eq {{exch}} {{}} ifelse + /Do ED + ArmB AngleB XYPos OffsetB AngleB AddOffset + yB add /yB2 ED + xB add /xB2 ED } ifelse +} def +% +/InitNC { + /b ED /a ED % second and first node + /NodeSepTypeB ED /NodeSepTypeA ED + /NodeSepB ED /NodeSepA ED + /OffsetB ED /OffsetA ED + tx@NodeDict a known tx@NodeDict b known and dup { + /NodeA a load def + /NodeB b load def + NodeA GetCenter /yA ED /xA ED + NodeB GetCenter /yB ED /xB ED } if +} def +% +/LPutLine { + 4 copy + 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED + 1 t sub mul + 3 1 roll 1 t sub mul + 4 1 roll t mul add /Y ED + t mul add /X ED +} def +% +/LPutLines { + mark LPutVar counttomark 2 div 1 sub /n ED +% t floor dup n gt + t floor dup n ge % to allow npos<= hv 2008-08-14 + { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse + cvi 2 mul { pop } repeat + LPutLine + cleartomark +} def +% +/BezierMidpoint { + /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t ED + /cx x1 x0 sub 3 mul def + /cy y1 y0 sub 3 mul def + /bx x2 x1 sub 3 mul cx sub def + /by y2 y1 sub 3 mul cy sub def + /ax x3 x0 sub cx sub bx sub def + /ay y3 y0 sub cy sub by sub def + ax t 3 exp mul bx t t mul mul add + cx t mul add x0 add ay t 3 exp mul + by t t mul mul add cy t mul add + y0 add 3 ay t t mul mul mul 2 + by t mul mul add cy add 3 ax t t mul mul mul + 2 bx t mul mul add cx add atan /NAngle ED + /Y ED /X ED +} def +% +/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def +} def +/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def +/NAngle yyB yyA sub xxB xxA sub Atan def } def +/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def +/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def +} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit +} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd +} def +/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def +} def +/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def +/NAngle yyB yyA sub xxB xxA sub Atan def } def +/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def +/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def +} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check { +exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark +VPosEnd } def +/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2 +roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx +def grestore exec /LPutVar /SaveLPutVar load def } def +/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def +GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos { +LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos { +LPutVar VPutLine } def LPutVar } def +% +/NCLine { + NCCoor + tx@Dict begin + ArrowA CP 4 2 roll + ArrowB + lineto pop pop + end +} def +% +/NCLines { + false NArray + n 0 eq + { NCLine } + { 2 copy yA sub exch xA sub Atan /AngleA ED + n 2 mul dup index exch index yB sub exch xB sub + Atan /AngleB ED + GetEdgeA GetEdgeB + /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1 yA1 ] cvx def + mark LPutVar + tx@Dict begin false Line end + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def + } ifelse +} def +% +/NCCurve { + GetEdgeA + GetEdgeB + xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1 +roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA +GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict +begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ] +cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines +} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def +% +/NCAngles { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx transform pop + xB2 yB2 mtrx transform exch pop + mtrx itransform + /y0 ED /x0 ED + mark ArmB 0 ne { xB1 yB1 } if + xB2 yB2 x0 y0 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def } def +% +/NCAngle { + GetEdgeA GetEdgeB GetArmB + /mtrx AngleA matrix rotate def + xB2 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform + /y0 ED /x0 ED + mark + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 x0 y0 xA1 yA1 + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +/NCBar { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx itransform pop + xB2 yB2 mtrx itransform pop + sub dup 0 mtrx transform + 3 -1 roll 0 gt + { /yB2 exch yB2 add def /xB2 exch xB2 add def } + { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse + mark + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +/NCDiag { + /lineAngle ED + GetEdgeA GetEdgeB GetArmA GetArmB mark + lineAngle abs 0 gt { + /xTemp xA2 10 add def + /yTemp yA2 lineAngle dup sin exch cos div 10 mul add def + /dY1 yTemp yA2 sub def + /dX1 xTemp xA2 sub def + /dY2 yB2 yB1 sub def + /dX2 xB2 xB1 sub def + dX1 abs 0.01 lt { + /m2 dY2 dX2 div def + /xB2 xA2 def + /yB2 xA2 xB1 sub m2 mul yB1 add def + }{ + dX2 abs 0.01 lt { + /m1 dY1 dX1 div def + /xB2 xB1 def + /yB2 xB1 xA2 sub m1 mul yA2 add def + }{% + /m1 dY1 dX1 div def + /m2 dY2 dX2 div def + /xB2 m1 xA2 mul m2 xB1 mul sub yA2 sub yB1 add m1 m2 sub div def + /yB2 xB2 xA2 sub m1 mul yA2 add def + } ifelse + } ifelse + } if + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +% +% GetEdgeA GetEdgeB GetArmA GetArmB mark +% ArmB 0 ne { xB1 yB1 } if +% xB2 yB2 xA2 yA2 +% ArmA 0 ne { xA1 yA1 } if +% tx@Dict begin false Line end +% /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def +% /LPutPos { LPutLines } def +% /HPutPos { HPutLines } def +% /VPutPos { VPutLines } def +} def +% +/NCDiagg { + /lineAngle ED + GetEdgeA GetArmA + lineAngle abs 0 gt + { lineAngle } + { yB yA2 sub xB xA2 sub Atan 180 add } ifelse + /AngleB ED + GetEdgeB mark + lineAngle abs 0 gt { + /dY2 yA2 yA1 sub def + /dX2 xA2 xA1 sub def + lineAngle abs 90 eq { + /m2 dY2 dX2 div def + /yA2 xB xA2 sub m2 mul yA2 add def + /xA2 xB def + }{ + /m1 lineAngle dup sin exch cos div def % tan alpha + dX2 abs 0.01 lt { + /yA2 xA1 xB sub m1 mul yB add def + /xA2 xA1 def + }{% + /m2 dY2 dX2 div def + /xA2 m1 xB mul m2 xA2 mul sub yA2 add yB sub m1 m2 sub div def + /yA2 xA2 xB sub m1 mul yB add def + } ifelse + } ifelse + } if + xB1 yB1 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +% +% GetEdgeA GetArmA +% yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED +% GetEdgeB +% mark +% xB1 yB1 xA2 yA2 +% ArmA 0 ne { xA1 yA1 } if +% tx@Dict begin false Line end +% /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def +% /LPutPos { LPutLines } def +% /HPutPos { HPutLines } def +% /VPutPos { VPutLines } def +} def +% +/NCLoop { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED + /xB3 xB2 yB2 mtrx transform pop def + xB3 yA3 mtrx itransform /yB3 ED /xB3 ED + xA3 yA3 mtrx itransform /yA3 ED /xA3 ED + mark ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +% DG/SR modification begin - May 9, 1997 - Patch 1 +%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r +%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add +%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360 +%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED +% +/NCCircle { + NodeSepA 0 NodeA 0 GetEdge pop + 2 div dup 2 exp r r mul sub abs sqrt + atan 2 mul /a ED + r AngleA 90 add PtoC yA add exch xA add + exch 2 copy + /LPutVar [ 4 2 roll r AngleA ] cvx def + /LPutPos { + LPutVar t 360 mul add dup 5 1 roll 90 sub PtoC + 3 -1 roll add + /Y ED add /X ED /NAngle ED +% DG/SR modification end + } def + /HPutPos { LPutPos } def + /VPutPos { LPutPos } def + r AngleA 90 sub a add AngleA 270 add a sub + tx@Dict begin + /angleB ED /angleA ED /r ED + /c 57.2957 r Div def + /y ED /x ED +} def +% +/NCBox { + /d ED /h ED + /AngleB yB yA sub xB xA sub Atan def + /AngleA AngleB 180 add def + GetEdgeA GetEdgeB + /dx d AngleB sin mul def + /dy d AngleB cos mul neg def + /hx h AngleB sin mul neg def + /hy h AngleB cos mul def + /LPutVar [ + xA1 hx add yA1 hy add xB1 hx add yB1 hy add + xB1 dx add yB1 dy add xA1 dx add yA1 dy add ] cvx def + /LPutPos { LPutLines } def + /HPutPos { xB yB xA yA LPutLine } def + /VPutPos { HPutPos } def + mark + LPutVar tx@Dict begin false Polygon end +} def +% +/NCArcBox { + /l ED neg /d ED /h ED /a ED + /AngleA yB yA sub xB xA sub Atan def + /AngleB AngleA 180 add def + /tA AngleA a sub 90 add def + /tB tA a 2 mul add def + /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def + /x0 xA r tA cos mul add def + /y0 yA r tA sin mul add def + /c 57.2958 r div def + /AngleA AngleA a sub 180 add def + /AngleB AngleB a add 180 add def + GetEdgeA GetEdgeB + /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul sub def + /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def + l 0 eq { + x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn + }{ + x0 y0 translate + /tA AngleA l c mul add def + /tB AngleB l c mul sub def + 0 0 r h add tA tB arc r h add + AngleB PtoC r d add + AngleB PtoC 2 copy + 6 2 roll l arcto 4 { pop } repeat + r d add tB PtoC l arcto 4 { pop } repeat + 0 0 r d add tB tA arcn r d add + AngleA PtoC r h add + AngleA PtoC 2 copy 6 2 roll + l arcto 4 { pop } repeat + r h add tA PtoC l arcto 4 { pop } repeat + } ifelse + closepath + /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def + /LPutPos { + LPutVar /d ED /h ED + /AngleB ED /AngleA ED + /r ED /y0 ED /x0 ED + t 1 le { + r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC + }{t 2 lt { + /NAngle AngleB 180 add def r 2 t sub + h mul t 1 sub d mul add add AngleB PtoC + }{ + t 3 lt { + r d add AngleB 3 t sub mul AngleA 2 t sub + mul add dup 90 sub /NAngle ED PtoC + }{ + /NAngle AngleA 180 add def + r 4 t sub d mul t 3 sub h mul add add AngleA PtoC + } ifelse + } ifelse + } ifelse + y0 add /Y ED x0 add /X ED + } def + /HPutPos { LPutPos } def + /VPutPos { LPutPos } def +} def +% +/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB +sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1 +ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB +w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos +{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop } +{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine } +def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin +/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def +% +/LPutCoor { + NAngle + tx@Dict begin /NAngle ED end + gsave + CM STV + CP Y sub neg exch X sub neg exch moveto + setmatrix CP + grestore +} def +% +/LPut { + tx@NodeDict /LPutPos known + { LPutPos } { CP /Y ED /X ED /NAngle 0 def } ifelse + LPutCoor +} def +% +/HPutAdjust { + Sin Cos mul 0 eq + { 0 } + { d Cos mul Sin div flag not { neg } if + h Cos mul Sin div flag { neg } if + 2 copy gt { pop } { exch pop } ifelse + } ifelse + s add flag { r add neg }{ l add } ifelse + X add /X ED +} def +% +/VPutAdjust { + Sin Cos mul + 0 eq + { 0 } + { l Sin mul Cos div flag { neg } if + r Sin mul Cos div flag not { neg } if + 2 copy gt { pop } { exch pop } ifelse + } ifelse + s add flag { d add } { h add neg } ifelse + Y add /Y ED +} def +% +% +end +% +% END pst-node.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.05, 2006/11/04 +% prepared by Herbert Voss +% For copying restrictions, see pstricks.tex. +% +% For the PSTricks gradient fillstyle.% +% Based on some EPS files by leeweyr!bill@nuchat.sccsi.com (W. R. Lee).% +% Syntax:% D.G. modification begin - Apr. 9, %1998 +%%%%%% R0 G0 B0 R1 G1 B1 NumLines MidPoint Angle GradientFill +% ifGradientCircle GradientScale %GradientPosX GradientPosY +% R0 G0 B0 R1 G1 B1 NumLines MidPoint %Angle GradientFill +% D.G. modification end +% +/tx@GradientDict 40 dict def +tx@GradientDict begin +/GradientFill { + /ifCMYK exch def % do we have rgb or cmyk? hv 1.06 + rotate + /MidPoint ED + /NumLines ED + ifCMYK { + /LastBlack ED % 1.06 + /LastYellow ED % 1.06 + /LastMagenta ED % 1.06 + /LastCyan ED % 1.06 + /FirstBlack ED % 1.06 + /FirstYellow ED % 1.06 + /FirstMagenta ED % 1.06 + /FirstCyan ED % 1.06 + }{ /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED + /FirstRed ED + } ifelse + /GradientPosY ED + /GradientPosX ED + /GradientScale ED + /ifGradientCircle ED + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack + 4 copy /ury ED /urx ED /lly ED /llx ED + /y ED /x ED + ifGradientCircle + { 0 GradientPosX eq { 0 GradientPosX eq {2 copy translate} if } if } + {2 copy translate} ifelse + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + ifCMYK { % 1.06 + LastCyan FirstCyan add 2 div % 1.06 + LastMagenta FirstMagenta add 2 div % 1.06 + LastYellow FirstYellow add 2 div % 1.06 + LastBlack FirstBlack add 2 div % 1.06 + setcmykcolor % 1.06 + }{ + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor + } ifelse + ifGradientCircle + { /YSizePerLine y NumLines div def + /CurrentY y 2 div def + /MidLine NumLines 2 div 1 MidPoint sub mul abs cvi def + }{ + fill + /YSizePerLine y NumLines div def + /CurrentY 0 def + /MidLine NumLines 1 MidPoint sub mul abs cvi def + } ifelse + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } ifelse + MidLine 0 gt { + ifCMYK { + /Cyan FirstCyan def + /Magenta FirstMagenta def + /Yellow FirstYellow def + /Black FirstBlack def + /CyanIncrement LastCyan FirstCyan sub MidLine 1 sub div def + /MagentaIncrement LastMagenta FirstMagenta sub MidLine 1 sub div def + /YellowIncrement LastYellow FirstYellow sub MidLine 1 sub div def + /BlackIncrement LastBlack FirstBlack sub MidLine 1 sub div def + }{ + /Red FirstRed def + /Green FirstGreen def + /Blue FirstBlue def + /RedIncrement LastRed FirstRed sub MidLine 1 sub div def + /GreenIncrement LastGreen FirstGreen sub MidLine 1 sub div def + /BlueIncrement LastBlue FirstBlue sub MidLine 1 sub div def + } ifelse + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt { + ifCMYK { + /Cyan LastCyan def + /Magenta LastMagenta def + /Yellow LastYellow def + /Black LastBlack def + /CyanIncrement FirstCyan LastCyan sub NumLines MidLine sub 1 sub div def + /MagentaIncrement FirstMagenta LastMagenta sub NumLines MidLine sub 1 sub div def + /YellowIncrement FirstYellow LastYellow sub NumLines MidLine sub 1 sub div def + /BlackIncrement FirstBlack LastBlack sub NumLines MidLine sub 1 sub div def + }{ + /Red LastRed def + /Green LastGreen def + /Blue LastBlue def + /RedIncrement FirstRed LastRed sub NumLines MidLine sub 1 sub div def + /GreenIncrement FirstGreen LastGreen sub NumLines MidLine sub 1 sub div def + /BlueIncrement FirstBlue LastBlue sub NumLines MidLine sub 1 sub div def + } ifelse + NumLines MidLine sub { GradientLoop } repeat + } if +} def/GradientLoop { +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + ifGradientCircle + {CurrentY 0 gt { +% The default center used is the center of the bounding box of the object + 0 GradientPosX eq {0 GradientPosX eq + {/GradientPosX urx llx sub 2 div def + /GradientPosY ury lly sub 2 div def} if} if + GradientPosX GradientPosY CurrentY GradientScale mul 0 360 arc + ifCMYK { Cyan Magenta Yellow Black setcmykcolor } + { Red Green Blue setrgbcolor } ifelse + fill + /CurrentY CurrentY YSizePerLine sub def + ifCMYK { + /Cyan Cyan CyanIncrement add def + /Magenta Magenta MagentaIncrement add def + /Yellow Yellow YellowIncrement add def + /Black Black BlackIncrement add def + }{ + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def + } ifelse + } if } { 0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + ifCMYK { Cyan Magenta Yellow Black setcmykcolor } + { Red Green Blue setrgbcolor } ifelse + fill + /CurrentY CurrentY YSizePerLine add def + ifCMYK { + /Cyan Cyan CyanIncrement add def + /Magenta Magenta MagentaIncrement add def + /Yellow Yellow YellowIncrement add def + /Black Black BlackIncrement add def + }{ + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def + } ifelse + } ifelse% D.G. modification end + }def +% +/GradientFillHSB { % hv 2006-11-04 + rotate + /MidPoint ED + /NumLines ED + /LastBrightness ED + /LastSaturation ED + /LastHue ED + /FirstBrightness ED + /FirstSaturation ED + /FirstHue ED + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack + /y ED /x ED + 2 copy translate + y sub neg /y ED + x sub neg /x ED + % This avoids gaps due to rounding errors: + LastHue FirstHue add 2 div + LastSaturation FirstSaturation add 2 div + LastBrightness FirstBrightness add 2 div + sethsbcolor + fill + /YSizePerLine y NumLines div def + /CurrentY 0 def + /MidLine NumLines 1 MidPoint sub mul abs cvi def + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /Hue FirstHue def + /Saturation FirstSaturation def + /Brightness FirstBrightness def + /HueIncrement LastHue FirstHue sub MidLine 1 sub div def + /SaturationIncrement LastSaturation FirstSaturation sub MidLine 1 sub + div def + /BrightnessIncrement LastBrightness FirstBrightness sub MidLine 1 sub + div def + MidLine { GradientLoopHSB } repeat + } if + MidLine NumLines lt + { + /Hue LastHue def + /Saturation LastSaturation def + /Brightness LastBrightness def + /HueIncrement FirstHue LastHue sub NumLines MidLine sub 1 sub div def + /SaturationIncrement FirstSaturation LastSaturation sub + NumLines MidLine sub 1 sub div def + /BrightnessIncrement FirstBrightness LastBrightness sub + NumLines MidLine sub 1 sub div def + NumLines MidLine sub { GradientLoopHSB } repeat + } if +} def +/GradientLoopHSB { + 0 CurrentY moveto + x 0 rlineto + 0 YSizePerLine rlineto + x neg 0 rlineto + closepath + Hue Saturation Brightness sethsbcolor fill + /CurrentY CurrentY YSizePerLine add def + /Brightness Brightness BrightnessIncrement add def + /Saturation Saturation SaturationIncrement add def + /Hue Hue HueIncrement add def +} def +% +end +% +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%!ps +% PostScript prologue for pst-coil.tex. +% Version 1.06, 2011/09/18 +% For distribution, see pstricks.tex. +% +/tx@CoilDict 40 dict def tx@CoilDict begin +/CoilLoop { + /t ED + t sin AspectSin mul t 180 div AspectCos mul add t cos lineto } def +/Coil { + /Inc ED + dup sin /AspectSin ED + cos /AspectCos ED + /ArmB ED + /ArmA ED + /h ED /w ED /y1 ED /x1 ED /y0 ED /x0 ED + x0 y0 translate y1 y0 sub x1 x0 sub 2 copy Pyth + /TotalLength ED + Atan rotate + /BeginAngle ArmA AspectCos Div w h mul Div 360 mul def + /EndAngle TotalLength ArmB sub AspectCos Div + w h mul Div 360 mul def + 1 0 0 0 ArrowA ArmA 0 lineto + /mtrx CM def + w h mul 2 Div w 2 Div scale BeginAngle Inc + EndAngle { CoilLoop } for + EndAngle CoilLoop mtrx setmatrix TotalLength ArmB sub 0 lineto CP +% DG/SR modification begin - Jun. 2, 1998 - Patch 1 (from Michael Vulis) +% TotalLength 0 ArrowB lineto } def + TotalLength 0 ArrowB lineto + pop pop pop pop } def +% DG/SR modification end +% +/Sin { + /Func ED + /PointsPerPeriod ED + /ArmB ED + /ArmA ED + /Amplitude ED + /roundValue ED + /relativePeriod ED + /Periods ED + /y1 ED /x1 ED /y0 ED /x0 ED + x0 y0 translate y1 y0 sub x1 x0 sub 2 copy Pyth + dup /TotalLength ED + ArmA sub ArmB sub /SinLength ED + Atan rotate + 1 0 0 0 ArrowA ArmA 0 lineto + /mtrx CM def + relativePeriod + {} + { SinLength Periods div + roundValue dup 0 eq { pop cvi } { 1 eq { round } if } ifelse + /Periods ED } ifelse + /dxStep SinLength 360 div def % the default step for x pos + /xStep 360 PointsPerPeriod div def % the step for the for loop + 1 xStep 360 { % PointsPerPeriod times + dup dxStep mul ArmA add exch % x pos and value for the func + Periods mul Func Amplitude mul lineto + } for + mtrx setmatrix TotalLength ArmB sub 0 lineto CP + TotalLength 0 ArrowB lineto + pop pop pop pop +} def +% +/AltCoil { + /Inc ED + dup sin /AspectSin ED + cos /AspectCos ED /h ED /w ED /EndAngle ED /BeginAngle ED + /mtrx CM def + w h mul 2 Div w 2 Div scale BeginAngle sin AspectSin mul + BeginAngle 180 div AspectCos mul add BeginAngle cos + /lineto load stopped { moveto } if + BeginAngle Inc EndAngle { CoilLoop } for + EndAngle CoilLoop mtrx setmatrix } def +/ZigZag { 15 dict begin + /ArmB ED /ArmA ED + 2 div /w ED + w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED + x1 y1 translate y0 y1 sub x0 x1 sub 2 copy Pyth + /TotalLength ED + Atan rotate TotalLength ArmA sub ArmB sub dup h div cvi /n ED n h mul + sub 2 div dup ArmA add + /ArmA ED ArmB add + /ArmB ED + /x ArmB h 2 div add def + mark 0 0 ArmB 0 + n { x w /w w neg def /x x h add def } repeat + TotalLength ArmA sub 0 TotalLength 0 + end } def +% + /ZigZagCirc { % x0 y0 x1 y1 bow h w ArmA ArmB on stack + /bow ED + /ArmB ED /ArmA ED + 2 div /w ED + w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED + x1 y1 translate % + y0 y1 sub x0 x1 sub 2 copy Pyth 2 div + /HalfLength ED + Atan /ang ED %angle of A relative to B + %rotate % so end B is origin and BA is horizontal, A to right + /theta bow abs HalfLength Atan 2 mul def %halfangular sector for arc + /theta2 theta 2 mul def % full arc + %/psi ang 90 sub theta sub def % angle of B from center if bow>0 + /rho HalfLength theta sin div def % radius of circle + bow 0 gt { /direc 1 def /thetaB ang 90 sub theta sub def } % travel B to A in pos drn + { /direc -1 def /thetaB ang 90 add theta add def } ifelse % travel B to A in neg drn + %thetaB=angle from center to B + rho thetaB 180 add PtoC translate % origin now at center + /h h rho div RadtoDeg def + /ArmA ArmA rho div RadtoDeg def /ArmB ArmB rho div RadtoDeg def + theta2 ArmA sub ArmB sub dup h div cvi /n ED n h mul + %HalfLength 2 mul ArmA sub ArmB sub dup h div cvi /n ED n h mul + sub 2 div dup ArmA add + /ArmA ED ArmB add /ArmB ED + /h h direc mul def % h is now angle increment for half-period + /rhoo rho w add def /rhoi rho w sub def % outer and inner radii + /arg thetaB ArmB direc mul add def % argument for 2nd point +% thetaB = direc = bow = HalfLength = theta = rho = arg = h = n = + mark rho thetaB PtoC rho arg PtoC /arg arg h 2 div add def + n { w 0 gt { rhoo }{ rhoi } ifelse arg PtoC /w w neg def /arg arg h add def } repeat + rho thetaB theta2 ArmA sub direc mul add PtoC rho thetaB theta2 direc mul add PtoC + } def +% +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.0, 2005-11-29 (hv) +% For distribution, see pstricks.tex. + +/tx@TextPathDict 40 dict def +tx@TextPathDict begin + +% Syntax: PathPosition - +% Function: Searches for position of currentpath distance from +% beginning. Sets (X,Y)=position, and Angle=tangent. +/PathPosition +{ /targetdist exch def + /pathdist 0 def + /continue true def + /X { newx } def /Y { newy } def /Angle 0 def + gsave + flattenpath + { movetoproc } { linetoproc } { } { firstx firsty linetoproc } + /pathforall load stopped { pop pop pop pop /X 0 def /Y 0 def } if + grestore +} def + +/movetoproc { continue { @movetoproc } { pop pop } ifelse } def + +/@movetoproc +{ /newy exch def /newx exch def + /firstx newx def /firsty newy def +} def + +/linetoproc { continue { @linetoproc } { pop pop } ifelse } def + +/@linetoproc { + /oldx newx def /oldy newy def + /newy exch def /newx exch def + /dx newx oldx sub def + /dy newy oldy sub def + /dist dx dup mul dy dup mul add sqrt def + /pathdist pathdist dist add def + pathdist targetdist ge + { pathdist targetdist sub dist div dup + dy mul neg newy add /Y exch def + dx mul neg newx add /X exch def + /Angle dy dx atan def + /continue false def + } if +} def + +/TextPathShow { + /String exch def + /CharCount 0 def +% hv begin 2005-11-29 1.00 +% String length +% { String CharCount 1 getinterval ShowChar +% /CharCount CharCount 1 add def + /CharSize 1 def + currentfont /FontType get 0 eq + { currentfont /FMapType get dup 2 eq exch dup 5 eq exch 9 eq or or + { /CharSize 2 def} if + } if + String length CharSize idiv + { String CharCount CharSize getinterval ShowChar + /CharCount CharCount CharSize add def +% hv end 2005-11-29 1.00 + } repeat +} def + +% Syntax: InitTextPath - +/InitTextPath +{ gsave + currentpoint /Y exch def /X exch def + exch X Hoffset sub sub mul + Voffset Hoffset sub add + neg X add /Hoffset exch def + /Voffset Y def + grestore +} def + +/Transform +{ PathPosition + dup + Angle cos mul Y add exch + Angle sin mul neg X add exch + translate + Angle rotate +} def + +/ShowChar { + /Char exch def + gsave + Char end stringwidth + tx@TextPathDict begin + 2 div /Sy exch def 2 div /Sx exch def + +%%% MV 10-09-99 00:36 + /sc?currentpoint where {pop sc?currentpoint} {currentpoint} ifelse +% currentpoint + + Voffset sub Sy add exch + Hoffset sub Sx add + Transform + Sx neg Sy neg moveto + Char end tx@TextPathSavedShow + tx@TextPathDict begin + grestore + Sx 2 mul Sy 2 mul rmoveto +} def +% +end +% END pst-text.pro + +%%EndProcSet +%%BeginProcSet: pst-3d.pro 0 0 +%% $Id: pst-3d.pro 247 2010-01-04 22:45:42Z herbert $ +% PostScript prologue for pst-3d.tex. +% Version 0.01, 2010/01/01 +% +/tx@3Ddict 300 dict def +tx@3Ddict begin +% +/SetMatrixThreeD { + dup sin /e ED cos /f ED + /p3 ED /p2 ED /p1 ED + p1 0 eq + { /a 0 def /b p2 0 le { 1 } { -1 } ifelse def + p3 p2 abs + } + { p2 0 eq + { /a p1 0 lt { -1 } { 1 } ifelse def /b 0 def + p3 p1 abs + } + { p1 dup mul p2 dup mul add sqrt dup + p1 exch div /a ED + p2 exch div neg /b ED + p3 p1 a div + } + ifelse + } + ifelse + atan dup sin /c ED cos /d ED + /Matrix3D + [ + b f mul c a mul e mul sub + a f mul c b mul e mul add + d e mul + b e mul neg c a mul f mul sub + a e mul neg c b mul f mul add + d f mul + ] def +} def +% +/ProjThreeD { + /z ED /y ED /x ED + Matrix3D aload pop + z mul exch y mul add exch x mul add + 4 1 roll + z mul exch y mul add exch x mul add + exch +} def +% +/SetMatrixEmbed { + SetMatrixThreeD + Matrix3D aload pop + /z3 ED /z2 ED /z1 ED /x3 ED /x2 ED /x1 ED + SetMatrixThreeD + [ + Matrix3D aload pop + z3 mul exch z2 mul add exch z1 mul add 4 1 roll + z3 mul exch z2 mul add exch z1 mul add + Matrix3D aload pop + x3 mul exch x2 mul add exch x1 mul add 4 1 roll + x3 mul exch x2 mul add exch x1 mul add + 3 -1 roll 3 -1 roll 4 -1 roll 8 -3 roll 3 copy + x3 mul exch x2 mul add exch x1 mul add 4 1 roll + z3 mul exch z2 mul add exch z1 mul add + ] + concat +} def +% +/TMSave { + tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if + /TMatrix [ TMatrix CM ] cvx def +} def +% +/TMRestore { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +% +/TMChange { + TMSave + /cp [ currentpoint ] cvx def % ??? Check this later. + CM + CP T STV + CM matrix invertmatrix % Inv(M') + matrix concatmatrix % M Inv(M') + exch exec + concat cp moveto +} def +% +end % of tx@3Ddict +%% +%% End of file `pst-3d.pro'. + +%%EndProcSet +%%BeginProcSet: pst-math.pro 0 0 +% -*- Mode: Postscript -*- +% pst-math.pro --- PostScript header file pst-math.pro +% +% Author : Christophe JORSSEN +% Author : Herbert Voß +% Created the : Sat 20 March 2004 +% Last Mod : $Date: 2010/10/02 $ +% Version : 0.62 $ +% +/PI 3.14159265359 def +/ENeperian 2.71828182846 def +% +/DegToRad {PI mul 180 div} bind def +/RadToDeg {180 mul PI div} bind def +% +/COS {RadToDeg cos} bind def +/SIN {RadToDeg sin} bind def +/TAN {dup SIN exch COS Div} bind def +/tan {dup sin exch cos Div} bind def +/ATAN {neg -1 atan 180 sub DegToRad} bind def +/ACOS {dup dup mul neg 1 add sqrt exch atan DegToRad} bind def +/acos {dup dup mul neg 1 add sqrt exch atan} bind def +/ASIN {neg dup dup mul neg 1 add sqrt neg atan 180 sub DegToRad} bind def +/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def +% +/EXP {ENeperian exch exp} bind def +% +/COSH {dup EXP exch neg EXP add 2 div} bind def +/SINH {dup EXP exch neg EXP sub 2 div} bind def +/TANH {dup SINH exch COSH div} bind def +/ACOSH {dup dup mul 1 sub sqrt add ln} bind def +/ASINH {dup dup mul 1 add sqrt add ln} bind def +/ATANH {dup 1 add exch neg 1 add Div ln 2 div} bind def +% +%/SINC {dup SIN exch Div} bind def +/SINC { dup 0 eq { pop 1 } { dup SIN exch div } ifelse } bind def + +/GAUSS {dup mul 2 mul dup 4 -2 roll sub dup mul exch div neg EXP exch PI mul sqrt div} bind def +% +/GAMMA { 2 dict begin % hv 2007-08-30 + /z exch def + 1.000000000190015 % p(0) + 0 1 5 { % on stack is 0 1 2 3 4 5 + dup % n-1 n-1 + [ 76.18009172947146 + -86.50532032941677 + 24.0140982483091 + -1.231739572450155 + 0.1208650973866179E-2 + -0.5395239384953E-5 ] exch get exch % p(n) n-1 + 1 add z add div % p(n)/(z+n) + add % build the sum + } for + Pi 2 mul sqrt z div mul + z 5.5 add z 0.5 add exp mul ENeperian z 5.5 add neg exp mul + end } bind def +% +/GAMMALN {dup dup dup 5.5 add dup ln 3 -1 roll .5 add mul sub neg 1.000000000190015 + 0 1 5 { + [76.18009172947146 -86.50532032941677 24.0140982483091 -1.231739572450155 + .1208650973866179E-2 -.5395239384953E-5 2.5066282746310005] exch get + 4 -1 roll 1 add dup 5 1 roll div add} for + 4 -1 roll div 2.5066282746310005 mul ln add exch pop} bind def +/BETA {2 copy add GAMMALN neg exch GAMMALN 3 -1 roll GAMMALN EXP} bind def +% +/HORNER {aload length + dup 2 add -1 roll + exch 1 sub { + dup 4 1 roll + mul add exch + } repeat + pop +} bind def +% +/BESSEL_J0 {dup abs 8 lt { + dup mul dup [57568490574 -13362590354 651619640.7 -11214424.18 77392.33017 -184.9052456] HORNER + exch [57568490411 1029532985 9494680.718 59272.64853 267.8532712 1] HORNER + Div} + {abs dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup + [1 -1.098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER + 3 index COS mul + exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER + 4 -1 roll SIN mul 3 -1 roll mul neg add mul} + ifelse} bind def +% +/BESSEL_Y0 {dup 8 lt { + dup dup mul dup [-2957821389 7062834065 -512359803.6 10879881.29 -86327.92757 228.4622733] HORNER + exch [40076544269 745249964.8 7189466.438 47447.26470 226.1030244 1] HORNER + Div exch dup ln exch BESSEL_J0 .636619772 mul mul add} + {dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup + [1 -.1098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER + 3 index SIN mul + exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER + 4 -1 roll COS mul 3 -1 roll mul add mul} + ifelse} bind def +% +/BESSEL_J1 {dup abs 8 lt { + dup dup mul dup 3 -2 roll [72362614232 -7895059235 242396853.1 -2972611.439 15704.48260 -30.16036606] HORNER mul + exch [144725228442 2300535178 18583304.74 99447.43394 376.9991397 1] HORNER + Div} + {dup abs dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup + [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER + 3 index COS mul + exch [.04687499995 6.2002690873E-3 .8449199096E-5 -.88228987E-6 .105787412E-6] HORNER + 4 -1 roll SIN mul 3 -1 roll mul neg add mul exch dup abs Div mul} + ifelse} bind def +% +/BESSEL_Y1 {dup 8 lt { + dup dup dup mul dup [-.4900604943E13 .1275274390E13 -.5153428139E11 .7349264551E9 -.4237922726E7 .8511937935E4] HORNER + exch [.2499580570E14 .4244419664E12 .3733650367E10 .2245904002E8 .1020426050E6 .3549632885E3 1] HORNER + Div mul exch dup dup ln exch BESSEL_J1 mul exch 1 exch div sub .636619772 mul add} + {dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup + [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER + 3 index SIN mul + exch [.04687499995 -.2002690873E-3 .8449199096E-5 6.88228987E-6 .105787412E-6] HORNER + 4 -1 roll COS mul 3 -1 roll mul add mul} + ifelse} bind def +% +% En cours... +/BESSEL_Yn {dup 0 eq {pop BESSEL_Y0}{dup 1 eq {pop BESSEL_Y1}{ + exch dup BESSEL_Y0 exch dup BESSEL_Y1 exch 2 exch Div { + mul 3 -1 roll mul 2 index sub pstack} for + } ifelse } ifelse } bind def +% +/SIMPSON { 1 dict begin %% on stack a b var f ierr Dominik Rodriguez + 3 index 5 index sub % compute h + 1 % a b var f ierr h n + 4 index 7 index def 3 index exec % a b var f ierr h n f(a) + 5 index 7 index def 4 index exec add % a b var f ierr h n f(a)+f(b) + 5 index 8 index 4 index 2 div add def 4 index exec % a b var f ierr h n f(a)+f(b) f(a+h/2) + exch 1 index 4 mul add 0 % a b var f ierr h n old=f(a+h/2) Estim=f(a)+f(b)+4f(a+h/2) NbLoop + { % a b var f ierr h n old Estim NbLoop + 5 -1 roll 2 div dup 6 1 roll % h<-h/2 + 5 -1 roll 2 mul 5 1 roll % n<-2n + % a b var f ierr h n old Estim NbLoop h + 2 div 10 index add 0 % a b var f ierr h n old Estim NbLoop a+h/2 Cumul + 5 index { + 1 index 10 index exch def 8 index exec add exch 6 index add exch + } repeat % a b var f ierr h n old Estim NbLoop a+nh/2 Cumul + exch pop % a b var f ierr h n old Estim NbLoop New + 2 index 1 index 4 mul 6 -1 roll 2 mul sub sub % a b var f ierr h n Estim NbLoop New Diff + 4 -1 roll 2 mul 1 index sub 4 1 roll % a b var f ierr h n Estim NbLoop New Diff + exch 4 1 roll % a b var f ierr h n old Estim NbLoop Diff + 5 index 6 div mul abs 6 index lt { exit } if + 1 add dup 9 eq { exit } if + } loop % a b var f ierr h n old Estim NbLoop + exch 5 -1 roll 6 div mul mark 10 2 roll cleartomark +end +} def +% ------------------------------------ math stuff ---------------------------------- +% +% Matrix A in arrays of rows A[[row1][row2]...] +% with [row1]=[a11 a12 ... b1] +% returns on stack solution vector X=[x1 x2 ... xn] +/SolveLinEqSystem { % on stack matrix M=[A,b] (A*x=b) + 10 dict begin % hold all ocal + /A exch def + /Rows A length def % Rows = number of rows + /Cols A 0 get length def % Cols = number of columns + /Index [ 0 1 Rows 1 sub { } for ] def % Index = [0 1 2 ... Rows-1] + /col 0 def + /row 0 def + /PR Rows array def % PR[c] = pivot row for row row + { % starts the loop, find pivot entry in row r + col Cols ge row Rows ge or { exit } if % col < Cols and row < Rows else exit + /pRow row def % pRow = pivot row + /max A row get col get abs def % get A[row[col]], first A[0,0] + row 1 add 1 Rows 1 sub { % starts for loop 1 1 Rows-1 + /j exch def % index counter + /x A j get col get abs def % get A[j[r]] + x max gt { % x>max, then save position + /pRow j def + /max x def + } if + } for % now we have the row with biggest A[0,1] + % with pRow = the pivot row + max 0 gt { % swap entries pRow and row in i + /tmp Index row get def + Index row Index pRow get put + Index pRow tmp put % and columns pRow and row in A + /tmp A row get def + A row A pRow get put + A pRow tmp put % pivot + /row0 A row get def % the pivoting row + /p0 row0 col get def % the pivot value + row 1 add 1 Rows 1 sub { % start for loop + /j exch def + /c1 A j get def + /p c1 col get p0 div def + c1 col p put % subtract (p1/p0)*row[i] from row[j] + col 1 add 1 Cols 1 sub { % start for loop + /i exch def + c1 dup i exch % c1 i c1 + i get row0 i get p mul sub put + } for + } for + PR row col put + /col col 1 add def + /row row 1 add def + }{ % all zero entries + /row row 1 add def % continue loop with same row + } ifelse + } loop + /X A def % solution vector + A Rows 1 sub get dup + Cols 1 sub get exch + Cols 2 sub get div + X Rows 1 sub 3 -1 roll put % X[n] + Rows 2 sub -1 0 { % for loop to calculate X[i] + /xi exch def % current index + A xi get % i-th row + /Axi exch def + /sum 0 def + Cols 2 sub -1 xi 1 add { + /n exch def + /sum sum Axi n get X n get mul add def + } for + Axi Cols 1 sub get % b=Axi[Cols-1] + sum sub % b-sum + Axi xi get div % b-sum / Axi[xi] + X xi 3 -1 roll put % X[xi] + } for + X + end +} def +% +/c@_0 2.515517 def +/c@_1 0.802853 def +/c@_2 0.010328 def +/d@_1 1.432788 def +/d@_2 0.189269 def +/d@_3 0.001308 def +/norminv { + 5 dict begin + neg 1 add 1 exch div ln 2 mul sqrt + /t exch def + /t2 t dup mul def + /t3 t2 t mul def + c@_0 c@_1 t mul add c@_2 t2 mul add 1 d@_1 t mul add + d@_2 t2 mul add d@_3 t3 mul add div neg t add + end +} def +%end{norminv Michael Sharpe} +% +% +% END pst-math.pro + +%%EndProcSet +%%BeginProcSet: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 328 2010-05-24 15:56:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.23, 2009/12/17 +% +/tx@addDict 410 dict def tx@addDict begin +%% +realtime srand % set random generator +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/GTriangle { + gsave + /mtrx CM def + /colorA ED /colorB ED /colorC ED % save the colors + /yA ED /xA ED % save the origin + xA yA translate + rotate % \psk@gangle + /yB ED /xB ED /yC ED /xC ED % save other coordinates + /ds [ % save data in a array + 0 0 0 colorA aload pop % fd x y xr xg xb + 0 xB xA sub yB yA sub colorB aload pop + 0 xC xA sub yC yA sub colorC aload pop +% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD + ] def + newpath + << + /ShadingType 4 % single Gouraud + /ColorSpace [ /DeviceRGB ] + /DataSource ds + >> + shfill + closepath + mtrx + setmatrix grestore} def +% +/RGBtoCMYK { % on stack r g b -> C M Y K + 3 dict begin + /Blue ED /Green ED /Red ED + 1 Red sub % Cyan + 1 Green sub % Magenta + 1 Blue sub % Yellow + 0 % Black + end +} def +% +/CMYKtoGRAY { % on stack c m y k -> gray + exch 0.11 mul add + exch 0.59 mul add + exch 0.3 mul add + dup 1 gt { pop 1 } if + neg 1 add +} def +% +/RGBtoGRAY { % on stack r g b -> gray + 0.11 mul + exch 0.59 mul add + exch 0.3 mul add +} def +% +/HSBtoGRAY { + 6 dict begin + /b exch def + /s exch def 6 mul dup cvi dup + /i exch def sub + /f exch def + /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def + F i get { s mul neg 1 add b mul} forall + 0.11 mul + exch 0.59 mul add + exch 0.3 mul add + end +} def +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanometres +%% lambda min=380 nanometres +%% adaptation de : +%% http://www.physics.sfasu.edu/astro/color.html +%% www.efg2.com/lab +% +/Gamma 0.8 def +/calculateRGB { + lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if + lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if + lambda 380 ge {lambda 439 le { + /R {lambda 440 sub neg 440 380 sub div} def + /Red R factor mul Gamma exp def + /G 0 def + /Green G factor mul Gamma exp def + /B 1 def + /Blue B factor mul Gamma exp def} if + } if + lambda 440 ge { lambda 489 le { + /G {lambda 440 sub 490 440 sub div} def + /Green G factor mul Gamma exp def + /R 0 def /Red 0 def + /B 1 def + /Blue B factor mul Gamma exp def } if + } if + lambda 490 ge {lambda 509 le { + /B {lambda 510 sub neg 510 490 sub div} def + /Blue B factor mul Gamma exp def + /R 0 def /Red 0 def + /G 1 def + /Green G factor mul Gamma exp def } if + } if + lambda 510 ge {lambda 579 le { + /R {lambda 510 sub 580 510 sub div } def + /Red R factor mul Gamma exp def + /Blue 0 def + /G 1 def + /Green G factor mul Gamma exp def } if + } if + lambda 580 ge {lambda 644 le { + /G {lambda 645 sub neg 645 580 sub div } def + /Green G factor mul Gamma exp def + /Blue 0 def + /R 1 def + /Red R factor mul Gamma exp def } if + } if + lambda 645 ge { lambda 780 le { + /Red 1 factor mul Gamma exp def + /Blue 0 def + /Green 0 def } if + } if +} def +% +/factor { + lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if + lambda 420 ge {lambda 700 le { 1 } if } if + lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if +} def +% +/wavelengthToRGB { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + calculateRGB +} def % now the colors are saved in Red Green Blue +% +/wavelengthToGRAY { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + calculateRGB + Red Green Blue RGBtoGRAY +} def % now the gray color is on the stack +% +/wavelengthToCMYK { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + gsave + calculateRGB Red Green Blue RGBtoCMYK + /Black ED /Yellow ED /Magenta ED /Cyan ED + grestore +} def % now the colors are saved in Cyan Magenta Yellow Black +% +/axfill { + 8 dict begin + /xw exch def /nl exch def + /C1 exch def /y1 exch def/x1 exch def + /C0 exch def /y0 exch def/x0 exch def + << /ShadingType 2 + /ColorSpace /DeviceRGB + /Coords [ x0 y0 x1 y1 ] + /EmulatorHints [ xw 2 div dup ] + /Function << + /FunctionType 2 + /Domain [0 1] + /C0 C0 + /C1 C1 + /N 1 + >> + >> shfill + end +} bind def +% +%/amplHand {.8} def +%/dtHand 2 def +/varHand { rand sin amplHand mul add } def +/MovetoByHand { moveto } def +%/MovetoByHand { /y0 ED /x0 ED x0 y0 moveto } def +/LinetoByHand { 4 dict begin + /y1 ED /x1 ED + currentpoint /y0 ED /x0 ED + x0 x1 sub dup mul y0 y1 sub dup mul add sqrt /dEnd ED + 0 dtHand dEnd { dup + x1 x0 sub mul dEnd div x0 add varHand exch + y1 y0 sub mul dEnd div y0 add varHand lineto + } for +% /x0 x1 def /y0 y1 def + end +} def +% +end +% +% END pstricks-add.pro + +%%EndProcSet +%%BeginProcSet: pst-3dplot.pro 0 0 +%% $Id: pst-3dplot.pro 298 2010-03-13 08:46:53Z herbert $ +%% +%% This is file `pst-3dplot.pro', +%% +%% IMPORTANT NOTICE: +%% +%% Package `pst-3dplot.tex' +%% +%% Herbert Voss +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pst-3dplot' is a PSTricks package to draw 3d curves and graphical objects +%% +%% +%% version 0.31 / 2010-02-20 Herbert Voss +%% with contributions of Darrell Lamm x y z + 3 1 roll % h r phi + /Phi ED + /Radius ED % h->z on stack + Radius Phi cos mul exch % x z + Radius Phi sin mul exch % x y z +} def +% +/SphericalTo2D { + x y z ConvertToCartesian ConvertTo2D +} def +% +/CylinderTo2D { % r phi h + x y z ConvCylToCartesian ConvertTo2D +} def +% +/convertStackTo2D { + counttomark + /n ED /n3 n 3 div cvi def + n3 { + n -3 roll + SphericalCoor { ConvertToCartesian } { saveCoor } ifelse + ConvertTo2D + x2D xUnit y2D yUnit + /n n 1 sub def + } repeat +} def +% +% the angle in the parameter equation for an ellipse is not proportional to the real angle! +% phi=atan(b*tan(angle)/a)+floor(angle/180+0.5)*180 +% +/getPhi { % on stack: vecA vecB angle + 3 dict begin + /angle exch def /vecB exch def /vecA exch def + angle cvi 90 mod 0 eq { angle } { vecA angle tan mul vecB atan + angle 180 div .5 add floor 180 mul add } ifelse + end +} def +% +/RotSet (set ) def +% +/eulerRotation false def +% Matrix multiplication procedure +/matmul { + + /M@tMulDict 20 dict def + M@tMulDict begin + /m2 ED + /m1 ED + m1 dup length 2 sub 2 getinterval aload pop + /col1max ED + /row1max ED + m2 dup length 2 sub 2 getinterval aload pop + /col2max ED + /row2max ED + /m3 row1max col2max mul 2 add array def + m3 dup length 2 sub row1max col2max 2 array astore putinterval + 0 1 row1max 1 sub { + /row ED + 0 1 col2max 1 sub { + /col ED + /sum 0 def + 0 1 col1max 1 sub{ + /rowcol ED + sum + m1 row col1max mul rowcol add get + m2 rowcol col2max mul col add get + mul add + /sum ED + } for + m3 row col2max mul col add sum put + } for + } for + m3 + end % end of M@tMulDict + +} def +% +/SetMQuaternion { + + /MnewTOold 11 array def + + /Qu@ternionDict 30 dict def + Qu@ternionDict begin + + /normRotVec xRotVec yRotVec zRotVec 3 array astore VecNorm def + normRotVec 0 gt + {/xRotVecNorm xRotVec normRotVec div def + /yRotVecNorm yRotVec normRotVec div def + /zRotVecNorm zRotVec normRotVec div def + RotAngle} + {/xRotVecNorm 1 def + /yRotVecNorm 0 def + /zRotVecNorm 0 def + 0} ifelse + + 2 div dup + /q0 exch cos def + sin dup dup + /q1 exch xRotVecNorm mul def + /q2 exch yRotVecNorm mul def + /q3 exch zRotVecNorm mul def + + /q0q0 q0 q0 mul def + /q0q1 q0 q1 mul def + /q0q2 q0 q2 mul def + /q0q3 q0 q3 mul def + + /q1q1 q1 q1 mul def + /q1q2 q1 q2 mul def + /q1q3 q1 q3 mul def + + /q2q2 q2 q2 mul def + /q2q3 q2 q3 mul def + + /q3q3 q3 q3 mul def + + MnewTOold 0 q0q0 q1q1 add q2q2 sub q3q3 sub put + MnewTOold 1 q1q2 q0q3 sub 2 mul put + MnewTOold 2 q1q3 q0q2 add 2 mul put + + MnewTOold 3 q1q2 q0q3 add 2 mul put + MnewTOold 4 q0q0 q1q1 sub q2q2 add q3q3 sub put + MnewTOold 5 q2q3 q0q1 sub 2 mul put + + MnewTOold 6 q1q3 q0q2 sub 2 mul put + MnewTOold 7 q2q3 q0q1 add 2 mul put + MnewTOold 8 q0q0 q1q1 sub q2q2 sub q3q3 add put + + MnewTOold 9 3 put + MnewTOold 10 3 put + + end % end of Qu@ternionDict + +} def +% +/SetMxyz { + 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 3 3 11 array astore /MnewTOold ED + RotSequence cvx exec % Now create a new MnewTOold using xyz, etc. +} def +% +/ConcatMQuaternion { + MnewTOold % Push onto stack + SetMQuaternion % Uses [xyz]RotVec and RotAngle to make MnewToOld + MnewTOold matmul /MnewTOold ED +} def +% +/ConcatMxyz { + MnewTOold % Push onto stack + SetMxyz % Uses RotX, etc. to set MnewTOold + MnewTOold matmul /MnewTOold ED +} def +% +/RotatePoint{ + MnewTOold x y z 3 1 5 array astore matmul + 0 3 getinterval aload pop + /z ED + /y ED + /x ED +} def +% +/makeMoldTOnew { + /MoldTOnew 11 array def + MoldTOnew 0 MnewTOold 0 get put + MoldTOnew 1 MnewTOold 3 get put + MoldTOnew 2 MnewTOold 6 get put + MoldTOnew 3 MnewTOold 1 get put + MoldTOnew 4 MnewTOold 4 get put + MoldTOnew 5 MnewTOold 7 get put + MoldTOnew 6 MnewTOold 2 get put + MoldTOnew 7 MnewTOold 5 get put + MoldTOnew 8 MnewTOold 8 get put + MoldTOnew 9 3 put + MoldTOnew 10 3 put +} def +% +/RotXaxis { + eulerRotation + {1 0 0} + {makeMoldTOnew MoldTOnew 1 0 0 3 1 5 array astore matmul + 0 3 getinterval aload pop} ifelse + /zRotVec ED + /yRotVec ED + /xRotVec ED + /RotAngle RotX def + ConcatMQuaternion +} def +/RotYaxis { + eulerRotation + {0 1 0} + {makeMoldTOnew MoldTOnew 0 1 0 3 1 5 array astore matmul + 0 3 getinterval aload pop} ifelse + /zRotVec ED + /yRotVec ED + /xRotVec ED + /RotAngle RotY def + ConcatMQuaternion +} def +/RotZaxis { + eulerRotation + {0 0 1} + {makeMoldTOnew MoldTOnew 0 0 1 3 1 5 array astore matmul + 0 3 getinterval aload pop} ifelse + /zRotVec ED + /yRotVec ED + /xRotVec ED + /RotAngle RotZ def + ConcatMQuaternion +} def +/xyz { RotXaxis RotYaxis RotZaxis } def +/yxz { RotYaxis RotXaxis RotZaxis } def +/yzx { RotYaxis RotZaxis RotXaxis } def +/xzy { RotXaxis RotZaxis RotYaxis } def +/zxy { RotZaxis RotXaxis RotYaxis } def +/zyx { RotZaxis RotYaxis RotXaxis } def +/quaternion { } def % Null +% +/VecNorm { 0 exch { dup mul add } forall sqrt } def +% +/UnitVec { % on stack is [a]; returns a vector with [a][a]/|a|=1 + dup VecNorm /norm ED + norm 0 lt {/norm 0 def} if + { norm div } forall 3 array astore } def +% +/AxB { % on the stack are the two vectors [a][b] + aload pop /b3 ED /b2 ED /b1 ED + aload pop /a3 ED /a2 ED /a1 ED + a2 b3 mul a3 b2 mul sub + a3 b1 mul a1 b3 mul sub + a1 b2 mul a2 b1 mul sub + 3 array astore } def +% +/AaddB { % on the stack are the two vectors [a][b] + aload pop /b3 ED /b2 ED /b1 ED + aload pop /a3 ED /a2 ED /a1 ED + a1 b1 add a2 b2 add a3 b3 add + 3 array astore } def +% +/AmulC { % on stack is [a] and c; returns [a] mul c + /factor ED { factor mul } forall 3 array astore } def +% +% +/setColorLight { % expects 7 values on stack C M Y K xL yL zL +% les rayons de lumi�re + xLight dup mul yLight dup mul zLight dup mul add add sqrt /NormeLight ED +% the color values + /K ED + /Yellow ED + /Magenta ED + /Cyan ED +} def +% +/facetteSphere { + newpath + /Xpoint Rsphere theta cos mul phi cos mul CX add def + /Ypoint Rsphere theta sin mul phi cos mul CY add def + /Zpoint Rsphere phi sin mul CZ add def + Xpoint Ypoint Zpoint tx@3Ddict begin ProjThreeD end moveto + theta 1 theta increment add {% + /theta1 ED + /Xpoint Rsphere theta1 cos mul phi cos mul CX add def + /Ypoint Rsphere theta1 sin mul phi cos mul CY add def + /Zpoint Rsphere phi sin mul CZ add def + Xpoint Ypoint Zpoint tx@3Ddict begin ProjThreeD end lineto + } for + phi 1 phi increment add { + /phi1 ED + /Xpoint Rsphere theta increment add cos mul phi1 cos mul CX add def + /Ypoint Rsphere theta increment add sin mul phi1 cos mul CY add def + /Zpoint Rsphere phi1 sin mul CZ add def + Xpoint Ypoint Zpoint tx@3Ddict begin ProjThreeD end lineto + } for + theta increment add -1 theta {% + /theta1 ED + /Xpoint Rsphere theta1 cos mul phi increment add cos mul CX add def + /Ypoint Rsphere theta1 sin mul phi increment add cos mul CY add def + /Zpoint Rsphere phi increment add sin mul CZ add def + Xpoint Ypoint Zpoint tx@3Ddict begin ProjThreeD end lineto + } for + phi increment add -1 phi { + /phi1 ED + /Xpoint Rsphere theta cos mul phi1 cos mul CX add def + /Ypoint Rsphere theta sin mul phi1 cos mul CY add def + /Zpoint Rsphere phi1 sin mul CZ add def + Xpoint Ypoint Zpoint tx@3Ddict begin ProjThreeD end lineto + } for + closepath +} def +% +/MaillageSphere { +% on stack must be x y z Radius increment C M Y K + setColorLight + /increment ED + /Rsphere ED + /CZ ED + /CY ED + /CX ED + /StartTheta 0 def + /condition { PSfacetteSphere 0 ge } def + -90 increment 90 increment sub {% + /phi ED + StartTheta increment 360 StartTheta add increment sub {% + /theta ED + % Centre de la facette + /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul CX add def + /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul CY add def + /Zpoint Rsphere phi increment 2 div add sin mul CZ add def + % normale a la facette + /nXfacette Xpoint CX sub def + /nYfacette Ypoint CY sub def + /nZfacette Zpoint CZ sub def + % test de visibilite + /PSfacetteSphere + vX nXfacette mul + vY nYfacette mul add + vZ nZfacette mul add + def + condition { + gsave + facetteSphere + /cosV { 1 xLight nXfacette mul + yLight nYfacette mul + zLight nZfacette mul + add add + NormeLight + nXfacette dup mul + nYfacette dup mul + nZfacette dup mul + add add sqrt mul div sub } bind def + Cyan cosV mul Magenta cosV mul Yellow cosV mul K cosV mul setcmykcolor fill + grestore +% 0 setgray + showgrid { facetteSphere stroke } if + } if + } for + % /StartTheta StartTheta increment 2 div add def + } for +} def +% +%---------------------- Cylinder --------------------------- +% +/PlanCoupeCylinder { % + /TableauxPoints [ + 0 1 359 { + /phi ED + [ Radius phi Height ConvCyl2d ] % on décrit le cercle + } for + ] def + newpath + TableauxPoints 0 get aload pop moveto + 1 1 359 { TableauxPoints exch get aload pop lineto } for + closepath +} def +% +/facetteCylinder { % + newpath + Radius phi currentHeight ConvCyl2d moveto + phi 1 phi dAngle add { % loop variable on stack + Radius exch currentHeight ConvCyl2d lineto + } for + phi dAngle add -1 phi { % fill dHeight + Radius exch currentHeight dHeight add ConvCyl2d lineto + } for + closepath + } def % facette +% +/MaillageCylinder { % on stack true or false for saving values + { setColorLight % expects 4 values on stack C M Y K + /dHeight ED /dAngle ED /Height ED /Radius ED + /CZ ED /CY ED /CX ED } if +% + 0 dHeight Height dHeight sub { + /currentHeight ED + 0 dAngle 360 dAngle sub { + /phi ED +% Normal vector of the center + /nXfacetteCylinder Radius phi dAngle 2 div add cos mul CX add def + /nYfacetteCylinder Radius phi dAngle 2 div add sin mul CY add def + /nZfacetteCylinder currentHeight dHeight 2 div add CZ add def + /NormeN + nXfacetteCylinder dup mul + nYfacetteCylinder dup mul + nZfacetteCylinder dup mul + add add sqrt def + NormeN 0 eq { /NormeN 1e-10 def } if +% test de visibilité + /PSfacetteCylinder + vX nXfacetteCylinder mul + vY nYfacetteCylinder mul add + vZ nZfacetteCylinder mul add def + condition { + facetteCylinder + /cosV + 1 xLight nXfacetteCylinder mul + yLight nYfacetteCylinder mul + zLight nZfacetteCylinder mul + add add + NormeLight NormeN mul div sub def + Cyan Magenta Yellow K + cosV mul 4 1 roll cosV mul 4 1 roll + cosV dup mul mul 4 1 roll cosV dup mul mul 4 1 roll + setcmykcolor fill + showgrid { + 0 setgray + facetteCylinder % drawing the segments + stroke } if + } if + } for + } for +} def +% +%------------------------ Cylinder type II ----------------------- +% +/MoveTo { Conv3D2D moveto } def +/LineTo { Conv3D2D lineto } def + +/IIIDEllipse { % x y z rA rB startAngle endAngle Wedge + /dAngle 1 def + /isWedge ED + /endAngle ED + /startAngle ED + /radiusB ED + /radiusA ED + startAngle cos radiusA mul startAngle sin radiusB mul 0 + isWedge { 0 0 moveto LineTo }{ MoveTo } ifelse + /Angle startAngle def + startAngle dAngle endAngle { + /Angle ED + Angle cos radiusA mul Angle sin radiusB mul 0 LineTo + } for + isWedge { 0 0 lineto } if +} def + +/IIIDCircle { % x y z r startAngle endAngle Wedge + 7 3 roll % startAngle endAngle Wedge x y z r + dup % startAngle endAngle Wedge x y z r r + 8 -3 roll + IIIDEllipse +} def + +/IIIDWedge { % x y z r startAngle endAngle + true IIIDCircle +} def + +/IIIDCylinder {% x y z r h start end wedge + /isWedge ED + /increment ED + /endAngle ED + /startAngle ED + /height ED + /radius ED + startAngle increment endAngle { + /Angle ED + radius Angle 0 ConvCylToCartesian MoveTo + radius Angle height ConvCylToCartesian LineTo + } for + stroke +} def +% +%---------------------- Box --------------------------- +% +/PlanCoupeBox { % x y z + /TableauxPoints [ + [ CX CY CZ Height add ConvBox2d ] % top or bottom + [ CX CY Depth add CZ Height add ConvBox2d ] + [ CX Width add CY Depth add CZ Height add ConvBox2d ] + [ CX Width add CY CZ Height add ConvBox2d ] + [ CX CY CZ Height add ConvBox2d ] % bottom + ] def + newpath + TableauxPoints 0 get aload pop moveto + 0 1 3 { + TableauxPoints exch get aload pop + lineto } for + closepath +} def +% +/facetteBox { % + newpath + dup + 1 eq { % back + CX CY CZ ConvBox2d moveto + CX CY CZ Height add ConvBox2d lineto + CX Width add CY CZ Height add ConvBox2d lineto + CX Width add CY CZ ConvBox2d lineto + CX CY CZ ConvBox2d lineto + } if + dup + 2 eq { % right + CX CY CZ ConvBox2d moveto + CX CY CZ Height add ConvBox2d lineto + CX CY Depth add CZ Height add ConvBox2d lineto + CX CY Depth add CZ ConvBox2d lineto + CX CY CZ ConvBox2d lineto + } if + dup + 3 eq { % left + CX Width add CY CZ ConvBox2d moveto + CX Width add CY Depth add CZ ConvBox2d lineto + CX Width add CY Depth add CZ Height add ConvBox2d lineto + CX Width add CY CZ Height add ConvBox2d lineto + CX Width add CY CZ ConvBox2d lineto + } if + 4 eq { % front + CX CY Depth add CZ ConvBox2d moveto + CX CY Depth add CZ Height add ConvBox2d lineto + CX Width add CY Depth add CZ Height add ConvBox2d lineto + CX Width add CY Depth add CZ ConvBox2d lineto + CX CY Depth add CZ ConvBox2d lineto + } if + closepath + } def % facette +% +/TestPlane { % on stack x y z of the plane center and # of plane + /nZfacetteBox ED /nYfacetteBox ED /nXfacetteBox ED + /Plane ED + /NormeN + nXfacetteBox dup mul + nYfacetteBox dup mul + nZfacetteBox dup mul + add add sqrt def + NormeN 0 eq { /NormeN 1e-10 def } if +% test de visibilite + /PSfacetteBox + vX nXfacetteBox mul + vY nYfacetteBox mul add + vZ nZfacetteBox mul add def + condition { + Plane facetteBox + /cosV + 1 xLight nXfacetteBox mul + yLight nYfacetteBox mul + zLight nZfacetteBox mul + add add + NormeLight NormeN mul div sub def + Cyan Magenta Yellow K + cosV mul 4 1 roll cosV mul 4 1 roll + cosV dup mul mul 4 1 roll cosV dup mul mul 4 1 roll + setcmykcolor fill + 0 setgray + Plane facetteBox % drawing the segments + stroke + } if +} def +% +/MaillageBox { % on stack true or false for saving values + { setColorLight % expects 4 values on stack C M Y K + /Depth ED /Height ED /Width ED + /CZ ED /CY ED /CX ED } if +% +% Normal vector of the box center + /PlaneSet [ + [ Width 2 div CX add + CY + Height 2 div CZ add ] % normal back + [ CX + Depth 2 div CY add + Height 2 div CZ add ] % normal right + [ Width CX add + Depth 2 div CY add + Height 2 div CZ add ] % normal left + [ Width 2 div CX add + Depth CY add + Height 2 div CZ add ] % normal front + ] def + PlaneSequence length 0 eq { % user defined? + Alpha abs cvi 360 mod /iAlpha ED + iAlpha 90 lt { [ 1 2 3 4 ] + }{ iAlpha 180 lt { [ 2 4 1 3 ] + }{ iAlpha 270 lt { [ 3 4 1 2 ] }{ [ 3 1 4 2] } ifelse } ifelse } ifelse + }{ PlaneSequence } ifelse + { dup 1 sub PlaneSet exch get aload pop TestPlane } forall +} def +% +%--------------------------- Paraboloid ----------------------------- +/PlanCoupeParaboloid { + /Z height store + /V {Z sqrt} bind def + /TableauxPoints [ + 0 1 359 { + /U ED [ U U Z V calculate2DPoint ] % on decrit le cercle + } for + ] def + newpath + TableauxPoints 0 get aload pop moveto + 0 1 359 { + /compteur ED + TableauxPoints compteur get aload pop + lineto } for + closepath +} def +% +/facetteParaboloid{ + newpath + U U Z V calculate2DPoint moveto + U 1 U increment add {% + /U1 ED + U1 U1 Z V calculate2DPoint lineto + } for + Z pas10 Z pas add pas10 add{ + /Z1 ED + /V {Z1 sqrt} bind def + U1 U1 Z1 V calculate2DPoint lineto + } for + U increment add -1 U {% + /U2 ED + U2 U2 Z pas add V calculate2DPoint lineto + } for + Z pas add pas10 sub pas10 neg Z pas10 sub { + /Z2 ED + /V Z2 abs sqrt def + U U Z2 V calculate2DPoint lineto + } for + closepath +} def % facette +% +/MaillageParaboloid { + % on stack true or false for saving values + { setColorLight % expects 7 values on stack C M Y K xL yL zL +% /CZ ED /CY ED /CX ED + } if + 0 pas height pas sub {% + /Z ED + /V Z sqrt def + 0 increment 360 increment sub {% + /U ED +% Centre de la facette + /Ucentre U increment 2 div add def + /Vcentre Z pas 2 div add sqrt def +% normale à la facette + /nXfacetteParaboloid 2 Vcentre dup mul mul Ucentre cos mul radius mul def + /nYfacetteParaboloid 2 Vcentre dup mul mul Ucentre sin mul radius mul def + /nZfacetteParaboloid Vcentre neg radius dup mul mul def + /NormeN { + nXfacetteParaboloid dup mul + nYfacetteParaboloid dup mul + nZfacetteParaboloid dup mul + add add sqrt} bind def + NormeN 0 eq {/NormeN 1e-10 def} if +% test de visibilit� + /PSfacetteParaboloid vX nXfacetteParaboloid mul + vY nYfacetteParaboloid mul add + vZ nZfacetteParaboloid mul add def + condition { + facetteParaboloid + /cosV 1 xLight nXfacetteParaboloid mul + yLight nYfacetteParaboloid mul + zLight nZfacetteParaboloid mul + add add + NormeLight + NormeN mul div sub def + Cyan Magenta Yellow K + cosV mul 4 1 roll cosV mul 4 1 roll cosV dup mul mul 4 1 roll cosV dup mul mul 4 1 roll + setcmykcolor fill + showgrid { + 0 setgray + facetteParaboloid + stroke } if + } if + } for + } for +} def +% +% ------------------------------------ math stuff ---------------------------------- +% +% Matrix A in arrays of rows A[[row1][row2]...] +% with [row1]=[a11 a12 ... b1] +% returns on stack solution vector X=[x1 x2 ... xn] +/SolveLinEqSystem { % on stack matrix M=[A,b] (A*x=b) + 10 dict begin % hold all ocal + /A exch def + /Rows A length def % Rows = number of rows + /Cols A 0 get length def % Cols = number of columns + /Index [ 0 1 Rows 1 sub { } for ] def % Index = [0 1 2 ... Rows-1] + /col 0 def + /row 0 def + /PR Rows array def % PR[c] = pivot row for row row + { % starts the loop, find pivot entry in row r + col Cols ge row Rows ge or { exit } if % col < Cols and row < Rows else exit + /pRow row def % pRow = pivot row + /max A row get col get abs def % get A[row[col]], first A[0,0] + row 1 add 1 Rows 1 sub { % starts for loop 1 1 Rows-1 + /j exch def % index counter + /x A j get col get abs def % get A[j[r]] + x max gt { % x>max, then save position + /pRow j def + /max x def + } if + } for % now we have the row with biggest A[0,1] + % with pRow = the pivot row + max 0 gt { % swap entries pRow and row in i + /tmp Index row get def + Index row Index pRow get put + Index pRow tmp put % and columns pRow and row in A + /tmp A row get def + A row A pRow get put + A pRow tmp put % pivot + /row0 A row get def % the pivoting row + /p0 row0 col get def % the pivot value + row 1 add 1 Rows 1 sub { % start for loop + /j exch def + /c1 A j get def + /p c1 col get p0 div def + c1 col p put % subtract (p1/p0)*row[i] from row[j] + col 1 add 1 Cols 1 sub { % start for loop + /i exch def + c1 dup i exch % c1 i c1 + i get row0 i get p mul sub put + } for + } for + PR row col put + /col col 1 add def + /row row 1 add def + }{ % all zero entries + /row row 1 add def % continue loop with same row + } ifelse + } loop + /X A def % solution vector + A Rows 1 sub get dup + Cols 1 sub get exch + Cols 2 sub get div + X Rows 1 sub 3 -1 roll put % X[n] + Rows 2 sub -1 0 { % for loop to calculate X[i] + /xi exch def % current index + A xi get % i-th row + /Axi exch def + /sum 0 def + Cols 2 sub -1 xi 1 add { + /n exch def + /sum sum Axi n get X n get mul add def + } for + Axi Cols 1 sub get % b=Axi[Cols-1] + sum sub % b-sum + Axi xi get div % b-sum / Axi[xi] + X xi 3 -1 roll put % X[xi] + } for + X + end +} def +% +% u -> e_u with |e_u|=1 +/vector-unit { 1 dict begin + dup vector-length 1 exch div + vector-scale + end +} def +% +% u v -> u+v +/vector-add { 1 dict begin + /v exch def + [ exch + 0 % u i + exch { % i u[i] + v % i u[i] v + 2 index get add % i u[i]+v[i] + exch 1 add % i + } forall + pop + ] + end +} def +% +% u v -> u-v +/vector-sub { 1 dict begin + /v exch def + [ exch + 0 % u i + exch { % i u[i] + v % i u[i] v + 2 index get sub % i u[i]+v[i] + exch 1 add % i + } forall + pop + ] +end } def +% +% [v] c -> [c.v] +/vector-scale { 1 dict begin + /c exch def + [ exch + { % s i u[i] + c mul % s i u[i] v + } forall + ] + end } def +% +% +% [u] [v] -> [u x v] +/vector-prod { %% x1 y1 z1 x2 y2 z2 +6 dict begin + aload pop + /zp exch def /yp exch def /xp exch def + aload pop + /z exch def /y exch def /x exch def + [ y zp mul z yp mul sub + z xp mul x zp mul sub + x yp mul y xp mul sub ] +end +} def +% +% [u] [v] -> u.v +/vector-mul { %% x1 y1 z1 x2 y2 z2 +6 dict begin + aload pop + /zp exch def /yp exch def /xp exch def + aload pop + /z exch def /y exch def /x exch def + x xp mul y yp mul add z zp mul add +end +} def +% +% [x y z ... ] -> r +% watch out for overflow +/vector-length { 1 dict begin +dup +% find maximum entry +/max 0 def +{ % max + abs dup max gt { + % if abs gt max + /max exch def + } { + pop + } ifelse +} forall +max 0 ne { + 0 exch + { % 0 v[i] + max div dup mul add + } forall + sqrt + max mul +} { + pop 0 +} ifelse +end } def +% +end % tx@3DPlotDict +% + +%%EndProcSet +%%BeginProcSet: 8r.enc 0 0 +% File 8r.enc TeX Base 1 Encoding Revision 2.0 2002-10-30 +% +% @@psencodingfile@{ +% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, +% W. Schmidt, P. Lehman", +% version = "2.0", +% date = "27nov06", +% filename = "8r.enc", +% email = "tex-fonts@@tug.org", +% docstring = "This is the encoding vector for Type1 and TrueType +% fonts to be used with TeX. This file is part of the +% PSNFSS bundle, version 9" +% @} +% +% The idea is to have all the characters normally included in Type 1 fonts +% available for typesetting. This is effectively the characters in Adobe +% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol, +% MacRoman, and some extra characters from Lucida. +% +% Character code assignments were made as follows: +% +% (1) the Windows ANSI characters are almost all in their Windows ANSI +% positions, because some Windows users cannot easily reencode the +% fonts, and it makes no difference on other systems. The only Windows +% ANSI characters not available are those that make no sense for +% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen +% (173). quotesingle and grave are moved just because it's such an +% irritation not having them in TeX positions. +% +% (2) Remaining characters are assigned arbitrarily to the lower part +% of the range, avoiding 0, 10 and 13 in case we meet dumb software. +% +% (3) Y&Y Lucida Bright includes some extra text characters; in the +% hopes that other PostScript fonts, perhaps created for public +% consumption, will include them, they are included starting at 0x12. +% These are /dotlessj /ff /ffi /ffl. +% +% (4) hyphen appears twice for compatibility with both ASCII and Windows. +% +% (5) /Euro was assigned to 128, as in Windows ANSI +% +% (6) Missing characters from MacRoman encoding incorporated as follows: +% +% PostScript MacRoman TeXBase1 +% -------------- -------------- -------------- +% /notequal 173 0x16 +% /infinity 176 0x17 +% /lessequal 178 0x18 +% /greaterequal 179 0x19 +% /partialdiff 182 0x1A +% /summation 183 0x1B +% /product 184 0x1C +% /pi 185 0x1D +% /integral 186 0x81 +% /Omega 189 0x8D +% /radical 195 0x8E +% /approxequal 197 0x8F +% /Delta 198 0x9D +% /lozenge 215 0x9E +% +/TeXBase1Encoding [ +% 0x00 + /.notdef /dotaccent /fi /fl + /fraction /hungarumlaut /Lslash /lslash + /ogonek /ring /.notdef /breve + /minus /.notdef /Zcaron /zcaron +% 0x10 + /caron /dotlessi /dotlessj /ff + /ffi /ffl /notequal /infinity + /lessequal /greaterequal /partialdiff /summation + /product /pi /grave /quotesingle +% 0x20 + /space /exclam /quotedbl /numbersign + /dollar /percent /ampersand /quoteright + /parenleft /parenright /asterisk /plus + /comma /hyphen /period /slash +% 0x30 + /zero /one /two /three + /four /five /six /seven + /eight /nine /colon /semicolon + /less /equal /greater /question +% 0x40 + /at /A /B /C + /D /E /F /G + /H /I /J /K + /L /M /N /O +% 0x50 + /P /Q /R /S + /T /U /V /W + /X /Y /Z /bracketleft + /backslash /bracketright /asciicircum /underscore +% 0x60 + /quoteleft /a /b /c + /d /e /f /g + /h /i /j /k + /l /m /n /o +% 0x70 + /p /q /r /s + /t /u /v /w + /x /y /z /braceleft + /bar /braceright /asciitilde /.notdef +% 0x80 + /Euro /integral /quotesinglbase /florin + /quotedblbase /ellipsis /dagger /daggerdbl + /circumflex /perthousand /Scaron /guilsinglleft + /OE /Omega /radical /approxequal +% 0x90 + /.notdef /.notdef /.notdef /quotedblleft + /quotedblright /bullet /endash /emdash + /tilde /trademark /scaron /guilsinglright + /oe /Delta /lozenge /Ydieresis +% 0xA0 + /.notdef /exclamdown /cent /sterling + /currency /yen /brokenbar /section + /dieresis /copyright /ordfeminine /guillemotleft + /logicalnot /hyphen /registered /macron +% 0xB0 + /degree /plusminus /twosuperior /threesuperior + /acute /mu /paragraph /periodcentered + /cedilla /onesuperior /ordmasculine /guillemotright + /onequarter /onehalf /threequarters /questiondown +% 0xC0 + /Agrave /Aacute /Acircumflex /Atilde + /Adieresis /Aring /AE /Ccedilla + /Egrave /Eacute /Ecircumflex /Edieresis + /Igrave /Iacute /Icircumflex /Idieresis +% 0xD0 + /Eth /Ntilde /Ograve /Oacute + /Ocircumflex /Otilde /Odieresis /multiply + /Oslash /Ugrave /Uacute /Ucircumflex + /Udieresis /Yacute /Thorn /germandbls +% 0xE0 + /agrave /aacute /acircumflex /atilde + /adieresis /aring /ae /ccedilla + /egrave /eacute /ecircumflex /edieresis + /igrave /iacute /icircumflex /idieresis +% 0xF0 + /eth /ntilde /ograve /oacute + /ocircumflex /otilde /odieresis /divide + /oslash /ugrave /uacute /ucircumflex + /udieresis /yacute /thorn /ydieresis +] def + + +%%EndProcSet +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginProcSet: special.pro 0 0 +%! +TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N +/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N +/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N +/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ +/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho +X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B +/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ +/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known +{userdict/md get type/dicttype eq{userdict begin md length 10 add md +maxlength ge{/md md dup length 20 add dict copy def}if end md begin +/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S +atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ +itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll +transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll +curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf +pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} +if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 +-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip +yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub +neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ +noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop +90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get +neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr +1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr +2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 +-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S +TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ +Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale +}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState +save N userdict maxlength dict begin/magscale true def normalscale +currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts +/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x +psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx +psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub +TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def +@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll +newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto +closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N +/@beginspecial{SDict begin/SpecialSave save N gsave normalscale +currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} +N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs +neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate +rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse +scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg +lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx +ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N +/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ +pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave +restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B +/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 +setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY +moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix +matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc +savematrix setmatrix}N end + +%%EndProcSet +%%BeginProcSet: color.pro 0 0 +%! +TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop +setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll +}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def +/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ +setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ +/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch +known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC +/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC +/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 +setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 +setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 +0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC +/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 +setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 +0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ +0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ +0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC +/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 +setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 +setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 +0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC +/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 +setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 +0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ +0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ +0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC +/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 +setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC +/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 +0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 +0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 +0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 +setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 +0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC +/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 +setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 +0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 +1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC +/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 +setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ +0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} +DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 +setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 +setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 +setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end + +%%EndProcSet +%%BeginFont: CMR6 +%!PS-AdobeFont-1.0: CMR6 003.002 +%%Title: CMR6 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (), with Reserved Font Name CMR6. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup +/UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR6 def +/FontBBox {-20 -250 1193 750 }readonly def +/UniqueID 5000789 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def +/FullName (CMR6) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 50 /two put +dup 51 /three put +dup 52 /four put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 +1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D +2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 +EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD +EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 +CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 +9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 +1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D +2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A +E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A +32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 +5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A +3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF +6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 +2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 +464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB +EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB +87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 +F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA +4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C +D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E +7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 +39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 +77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 +8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 +A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 +4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 +3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 +A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 +AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F +269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E +2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 +C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 +AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC +17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E +2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E +117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 +DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B +9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC +CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 +2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC +26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F +4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D +C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D +60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 +01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B +E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E +235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 +9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB +DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D +28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E +E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 +85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 +BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A +237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 +7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E +9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 +B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 +FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 +7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F +FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 +10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C +6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 +B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 +9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC +E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 +8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 +5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA +B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 +3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF +6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD +5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E +A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A +3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 +97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 +9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 +EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 +8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 +1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 +4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 +68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB +8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A +33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 +548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E +A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 +133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 +B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 +F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 +3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 +C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE +0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 +45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 +0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 +EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 +FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 +8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 +02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B +7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 +AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA +57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 +5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 +AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 +CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 +BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB +5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 +69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 +34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 +24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 +4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E +7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A +B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB +080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD +71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 +3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A +A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A +A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA +281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 +A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D +451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 +48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 +F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 +B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 +126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 +1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C +770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 +283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 +06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 +8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 +8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 +984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A +5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 +1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E +026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 +DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E +C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB +1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D +2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 +427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 +26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 +6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 +F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD +054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A +60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 +F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 +9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 +F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD +436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 +323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B +2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C +6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 +069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 +CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D +2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 +A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 +1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 +9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 +360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 +911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 +8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD +FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB +0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 +44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 +0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A +5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 +41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE +4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE +3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 +85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 +9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 +8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 +422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 +AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 +6E70C6C7CC93119675040346B0FF1754C1EAC3D277DFCB3B457EBF747976F09C +FBED73EBD70DE1B4511B333D0A064072AF96926D98C8547B14256AEADF217F5E +986B3CFE3F4F91C104E84B1D0B6660D0971A45E76B1557E7966E1AEBF6B0922A +ED8FFD6EA9E39B4BD1FA9865198AD39CFB5777168DE2E20108B8E929633AFA1F +CB9F235C99545652E1519F44BC3E06FFD3701112E2301A13E3E45AB31E7C55C1 +E6294CB1CCC563D7CFE13141A3D6C91A07F0E2CCC182922F788645417834CD1F +8D561FDF4B792B43B987181000F4BA284FF0854805296C03C15B69DF110DBFE1 +0D0BC75DF8031CC3FE596623F0E4871AB331F1902A4F1B4C1D8178252971CC87 +98A408405112F0CCF1C6828FCC9D48697741E3476759FE32F53B9F3588D2FD32 +9F1832D480511BF45C818CDA228F9893EA549168D1264ADED3CE377EB1C15E12 +07A1FF78646319C279B0DC9E8545711BA018199BCFC4F88E6018E1596AA7D06B +3EA02CBC2C1ED4007D757C2B3530563F274802F016968777B29E524023173279 +12D0BA494CF9105D6A81FCB4E9469F6330FAC99729037024D27D2B2A51D7C4DF +0A5C229589486C1037A777D493265CA9EDA7568737DF04B3371F70292FE4FF06 +1DCA08E20D4C4614FE0025F8C47AA535F1CAF4C178973BFC28EB37C63A35D9B8 +DD2E88C3CAD5CA8737BD134FDDBC4F65FDB2EAC8E92FC0A49530EE8C19B985B0 +38DAA1BB7067E1CE699E81D198D05CDDF9BD5C24F1935ACC817E012B825BFE26 +A03B10E05E3988DDC964A6D5DA892B5B3A645D6514E720EF00DB628FD026405E +9EDBD0F1029DC456AE054C7CB55D5671068B5350096BB3C170DE7C17F047D9CD +6BA4016D8E3CEB5ECBEED0012FD66717647924F29430144E44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR8 +%!PS-AdobeFont-1.0: CMR8 003.002 +%%Title: CMR8 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (), with Reserved Font Name CMR8. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup +/UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR8 def +/FontBBox {-36 -250 1070 750 }readonly def +/UniqueID 5000791 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def +/FullName (CMR8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 1 /Delta put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B +8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF +27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF +18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB +7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A +DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 +6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 +B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 +2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 +3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 +9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 +7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D +25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 +CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD +A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 +DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE +EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB +16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 +07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E +B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B +B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C +F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 +762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 +D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 +CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C +74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 +1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 +E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 +3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE +37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 +7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 +C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 +A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D +7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 +CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD +3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC +FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 +59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 +6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 +79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 +F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B +49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 +2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B +29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F +2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 +5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 +EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 +5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E +293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF +F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 +568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 +64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C +DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 +A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 +267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D +136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 +A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 +80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 +D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB +46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A +E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 +66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 +2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 +CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF +2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 +DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C +DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B +C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 +CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B +0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F +CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E +F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 +CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 +7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF +6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 +6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C +72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 +13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE +6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 +1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 +86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 +D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B +70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 +0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 +FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 +52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 +7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B +F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA +09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 +401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 +74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 +3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 +ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 +93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 +301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 +F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 +1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E +36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 +34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C +CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 +ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B +9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 +E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A +893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 +E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE +0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 +B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB +A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 +B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F +3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 +AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 +98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF +4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B +F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 +AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E +015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A +167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F +9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 +CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 +130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 +2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D +A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 +C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 +ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A +CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 +3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 +E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 +3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 +3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D +947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 +26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 +0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 +984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E +FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 +44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 +603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B +6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C +D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE +276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF +809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 +08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 +3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF +76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 +A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 +3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 +966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 +CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 +2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF +94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 +DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 +9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 +FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E +1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 +24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C +06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC +6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 +F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 +26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 +D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 +49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 +064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A +E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A +D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 +8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 +2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 +52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 +17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF +145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F +2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 +5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 +B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 +9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 +0826E1DF4743FAE6668B61F72C8700992755522AB11C765981A9BEE0D040039D +6C2D64ABED527082C97CA606127AF5C0F9C3278AD945DA86CFEC33DD7CE3D15A +327BE3199DE15A9C56EB83EAC8B367F8CBDBA9BF41F14113170E6BADEA0942AB +386E17F1F9732CE9D2387B4BE73D6D7C091F68F31D50D5471FAE37CE2FD5AE79 +4D37219AFCC450518CAFDFA28BEC927A937CF04A06DC9C39E50F739C67D98D7C +B732BD847C97DE84BCD808ED70950D543B5052B51DA6389CBCEA2554F2D3FF6A +132043F7E9C1F48E876938031EB220E254A2C7846316FCE8ABEFE57467F505A7 +EFB49F9D7C64EAA656C0B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: NimbusRomNo9L-Regu +%!PS-AdobeFont-1.0: NimbusRomNo9L-Regu 1.05 +%%CreationDate: Wed Dec 22 1999 +% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development +% (URW)++,Copyright 1999 by (URW)++ Design & Development +% See the file COPYING (GNU General Public License) for license conditions. +% As a special exception, permission is granted to include this font +% program in a Postscript or PDF file that consists of a document that +% contains text to be displayed or printed using this font, regardless +% of the conditions or license applying to the document itself. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.05) readonly def +/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def +/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def +/FullName (Nimbus Roman No9 L Regular) readonly def +/FamilyName (Nimbus Roman No9 L) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /NimbusRomNo9L-Regu def +/PaintType 0 def +/WMode 0 def +/FontBBox {-168 -281 1000 924} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding StandardEncoding def +currentdict end +currentfile eexec +D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE +6FBF7F9888E039AB60FCAF852EB4CE3AFEB979D5EA70FDE44A2AE5C8C0166C27 +BF9665EEA11C7D2329C1A211DD26BB372BE5822F5EA70D99EB578C7BEFD44CDF +045A363056E5E1CC51525EA6FC061DCEBB337208EFF729802376A2801424F670 +0E7E6397B28F15BC10B40012B0A3EAEB2693E8F7F627C4C9C7C6C5BFF105C1E4 +1B2B9E8F09253B76040D268B80719E1B3F5A55AB7B8E152A40E590419249F2E4 +C36159F8E54B532468E36965A38646781AB0B7F6A3E851FD10CAA49ADFC1E546 +2FD2EC6150DC6E19523050F6148348A561AD8D2E2721EFF8A570CB33460A745B +926C889304C09753C2D78FB0CA95DC6DE5B8C524752C83601E7E9F73DF660674 +F05AD83A166DA9BE89F22FEABD4B2665960F6FB5BC32928E1230C212E5D69CEE +0B3311A1738A11747AE263106916D8E95F25B25B4BC6AFB03B79ABB95DDA518B +41A49458111D2A1433C043627EF9460D324FFE22935F4F6DA88B8B91AE95B34E +08408A34EC8EAC3F65B6AE3E3E2524867EE9D29068F81E4372F4470BEEB4D6BE +EE4DF956BECC0CB77F8490117B22B2FB75C938ED0A5E208D88BC38B2AB8B9CFB +F1D53084B6F43DF336481ECA0AA2D5317BC83FC0E1D4DB01D0B7707EEF217E94 +A7F985102DED27D8E8B009F7EF6DB91B91E78BFAE7BD688E10B3DC9AC77CDEE8 +47AA4DC8EC78241E593D26EC7A60696151A2AE5325D736E99E01BDCBDE69579F +92EEEC224B6757EEDC64A75455BB665DF42A0E4CE7B99BF3E7D66F8FFC8C13F9 +D7A1FF7A9D5FF7AC43396779F11C9B008C33A2043D48B61B88B03104B1425F09 +675B559CA4302C001EE80D2B739CC0FD1023BF4F1FF9C01E892E59CCA7C26011 +B8E0B6D29CC29FC72792FDA5E7D5D88EF98F9DBA960C96534C399C54865EAB86 +0FA2E0D6C7C44B553EAC1574D55E7970744D4792FFFBDCE6FB4365BDBC2965BB +2E9EDAD9E0EBF0B620DB415AD98297F5AE83D9C710436657E74D26E83957C745 +89834337035A7501803947F6880B70E56A3A404C62D57B849D28804CBE0F5884 +435A0E12DCC9BA414ABB732BFBAE237001F557DEA5E972BA0838A3C7C9EB75AA +4A050DA0A529BDFFBF9011C360564FD17A02C18860AF6B86EFD4E2C125686C9A +5E114E95C71FC89A5DE9C589BFE5AC0480CFF716345265D2435EDAE67CFC4801 +5BC08E7A48D683ACDB91E05F469C0C8919D73A5D07A1CCB173E30E76680ACB09 +02A40A3E11916198BD69F1A26E88330F50692D0D5917E99E7A01B327413E24AA +E98EA484E45897E6AE4D6997B6E8BBF61C9406E916D56985CB2BD297E8ACFC6E +CF2D2281AD84696B7C6CB584BD85CC20BA14ADD3BC3E25DB91124C0ACF22E902 +3CFBF04CC40DE331991E9075D22AB5EE0E849B340050E6C417C664A782D05549 +DB2EF572F193B1C12B4635C2B358747046DE585E9EEC4FBBE9CE6AE8532B2CD4 +101F1E68B19CC8756AD1987CCFF2302525BA8389489E8AD29C974C5A18DA8F05 +5671EBB8954C3A90EE42B2AFCC9D2F52165A0DF06D6A365FB88544455AA87281 +8C323EC616CEC04738328542CDE8B0B5BF7C93F1B7E133F3A0518EF8DE086451 +3345AE867EC3032919647C526C614C58D6AD7668D50EB5705B5F8F86CAB5CA38 +79405DF665D0513A29CA1598EF607BE11D603F92B2607D41C3029037A543ABB1 +E059247E276E206CB00BED125C8F78AFBEEF8A8EFCC84F58309D656041D58C14 +FD6E83D26D13AAE036CEFAB476721A2E3A65C2C5B0C7A8CDA3DC3F8F945E8803 +662299C3FE983D7D85435A622644609E4A0E2A68646E9583B6B9A75C95840BAB +3FE1A886815826A0132FCFD809E2BC34AED85936859171FC5B2E0903AF6D630D +C6F2532EFBA61D0CE72227D516759EE22D9F51DAEDF5873816653E5215E436CF +C0C888385900D08491DFB085E6A13EE6C92B0797073BE1D91564F0AC54D70F8E +FC63B94F73ACBB4CD279716D9F482833B69725F53363FA3896798939057C6223 +02818F0F735BA0468954522498086CCE1E87A9435170ABB7B721D7440302D3F5 +0A273DF58E4C5280F43D4DF87E5C4DC3E857BACF340CFA7BC22E210F87DF1099 +6FB54B98B8FB2B09B7F5A4D013A42092913C1B2635840881AEAA0D7BCF7B8B03 +5A2F86B132AD079E3C0C9EBA174022ED2EE21A5B950485E2D62CCF1A1E277D8A +BFF556029CFD2D1E54F05BA49751FF706500F8CB45D20FE0897E2907ADE65E8A +F53AD8B166DDD1069C89BF40433C1A7761EB74BBCDD0EF503B3C0A7B6110AADB +0EDFF36F24255DAFB221C113F8E414A15E2E72E76448B6CE2AAB25ADB6B6B2AF +F57F0B294DF7D539E4754CD2C62F1790F8A442D94ED07F5F983E6AE6478E9BE3 +326266B2D53D8C44BF4406642BE1AE8EDEC76BCF3CF60BDC1DB09467179704B9 +F04B677B574559D47C3240B0D4A30A382DED5AF585C938A80207557EE7668528 +DB216195143E8CF31C5D103CA1E0B0092B0CBD2223900A5A4D8EA5A116993652 +2382A3D7C2180C19791C85A0DDD1DFA04D362503CB2528CEE5CE3F7250608058 +EF90ACC54A90659DD7AF69B2FFF4CDA6789A50609824588E505F6A89ACA2C20F +6C0EC6F2BD8471A03D56FE7C722619CD8B47106750B3A44FDC35209300AE63A1 +5A7D983219EB991B300213F0DF5E4640BC1D08E083BA4D822D74C1473FEBC4F1 +81C7A074E4B55A869C96FCA78117347B9CFA480FF4A19B8D29EB8FCDA4F03239 +01508EC6D0D3A034E320723726340B9F9D22F16E40184A3697C368E4E09A0E24 +F5F907B9634A3E67B0F7613BD667E77DC9CB0006F1365EEE0616289C27C15172 +12BFF2CF9A0430CB4BE740393BDCD349EA093EDF3861D8055DD7605F9D205C8F +862EF87FCA9016BA8B65D9294431598E605A1FE81D00237552934829824046E1 +0E39028ACCCCB0D003B54A9CB6EE412F54DE75B3EC897FAEB296D9F156191934 +B5B9A874B9224DCB5B58229BA324E59A81107E24495511637ABD5A6967E6004D +88512A8506E972039EA95A7E5AB85DA35A4A00452DBD61ECCE286F7D119A3214 +ECFB40BB188D37B7EF316D7ABDFC060FC255912ACC95F901CD7DA38FAA447B31 +A65DB3DE4599103D7A4B818A46C98482D55FFC768FD0EFB91B78A79DB10BC150 +3B7E343ACD1B94955C5B05BB255409FBC7A72B3C72517B86514F6952862F2071 +36E1E16B417D8BC6EFE4447480B542B229FECFCD917788FCB6F16C10B485F688 +4A7B560FAB7F0EB5F6FA72DABD6F0BE782627BA182659028839789B8E47A6158 +140C2CDB1B0FF5A4EB59A67192BCA9ED8B4D70ACD4EFFD55C411038DC4EB2988 +5A11D100A928720A707BA004D95439DB8C5BB3FF454B2C31CB7BA76413412F70 +46CE91068CFB9B33DB98E520A332422433D2DAEBE5ADF45857FD33A69E4D26EC +72F19AFC769272387869490FF5989CC7AC6FB71C40F8EECDA336259BA0D0151D +CB3F2CFD904651FE75CB3AE344D9DDD6D66B643350BBF6D66F001C80A5CF3025 +00D3F3428D883D166829B22390A6F862FA731D18CF33BBF61F01565E3C825B0D +61428CE90D5ED9EC12A48A3B435F51F5FA7F361A73429EDF0A9D7DF9C7A18172 +50E78AD0204C9DCF16C79412C790138AA7A9BE8E9EA76D1DED1866D501078204 +20ADEB8D2DA4B491536CEF9D1E9F4FD8C0003E6F232E2E18409CB64E9E89BF14 +838CC8E9BDA2CDF342464050F8C30E907C72052513A1B20808585CACEF9C4266 +4E7FF87E2B457C41477583D580BB31F18D435619DCBF45F82D52F921628DE7E9 +8B50DF6F25D1BB4F3D5B44BE476AFB688358F195BDCDEBAB71622D0A07E88633 +6BCFFAFC0F71433B47B55359AD40D487FEED35517BA2DE64C1D02FD6CAB47955 +3AA9B765C965D6911DDAEA54F207742D31C0B69DDD41BA88727A808696202C3F +0BE2ADF32E017E9EB5E294B9559556A974B882DDCBF708EDDB1B5DEA54A92603 +EF47888C851EEDECA6CABAD9EBC22A55727BF40CAB44696D80CF4535A1A53832 +242A353515B5B347774F32B8B6C033ADC4313E2D595F3A3E6DB94D42D2EF8BFB +8514BF6888BF5E61F80EFDE9391FB1A1FAD79A57DFBD94A4FCC106D83D078EA3 +87EEF02769CDD90167909E4A06C058C505D330CC44607478B88A6E8E0467C0F7 +C8BC7CAE640EE8EFEA15954F01DB19D0B2217A275F139F173E270CA910E74657 +4D7853E1F92DD54F145D33BE7241517863FFCC739143D56714D28650F11AB852 +8DDC7BB770CA28B2A6342E7FD23E1BFE1487D82689119BB8567F58C7B4240705 +C19A10B53830AD637E14F8AFB20A7C9197290AEBD3348B4369F148C706C928A4 +14FA1FC70D7CF54F6C86A39390575D5ED4A59BF74D18189541D6822540D36BB2 +C736225102573D21FD0B03969BAA06B79EC06C7B364E6040B557C7D6B0F7E5E5 +521E2BCEA2E2D4AE26385ABF6CC82A01F18E577035FF3498A0972597685BF59A +BBF4DD5E3AA444423F9A4FF385FCA83DDCD78D676E71B6C51A64A87FD82AC7FD +78237E4CF55C88A384578D427F6A7F96140C43040D8CD6828DFFC59E4382D77C +A2CC650F27FD453BED9574EAEA7E4306238F06F910C43CFB7809656D574C1887 +F8CB3673D652227EB88E279912B638563A1B51C0CB3517C75EE70F2575FE3A0D +EF48E5C9008EEA4F990890CDC67CCAFD3C85932525DED921561818551B6F7D1E +F65F1F0F2A19321B7CF95EF16323FAA568836ECFD4A813D3CE8E9AF3403565B4 +A26C6C28C08567BF5860D0930D7CC87F9A7CD9CC027EE23F3B3BC61A40EA5704 +4322C2318F179E97BC531F99999053013611B3230B8D462CB20908C0C6A30675 +3C7C6E67538BA28C743EBEF8C82DA0218E56310EBC62B5AAE1C61E6A8BB6B315 +DE7285F1C1C725CC64B8164E6CF77E91BEED3C5DE8E5621FEED17F0232D60CE9 +D10B12C4928ACB38BDEA9630D094A86807593533D903B8948753E873822FF2E1 +C8DE9834854FF291076C592C606AEDA97EA7194967AF4CF6DF30D6963BF14D47 +EB67966E9B6F104FDDFF62E82B16CBE3D401AAFA44466E208F20774549A2D4DA +F2AB5AC55D031A2A37B16CA54E25BE0127D82D914E35831C4DAC2B6439331381 +4BD780E93F82F7477A180FF3D6F876D5E3064BB81E60C292CF23D66E0FA7039C +3E11CC5C1BDD1347412F127F51C671EBFB43D84299D336736B15B05591122AE5 +1D1481E85397A39E769DF23C1D07FB9A61DDB92EC67EC42BBC3418F226100094 +B97CED7DD2CFA4E238D325FAC472D0DEBC2C87AACB2B1E4EF9E1A8E8B0D52105 +FAB18988D8D1405ADA3E1BF030E67C7B8BCD803B4C9ED2CA50C9FC219CF7E9B6 +F0477934A009A070DD833BEFE93156F05C5F570B17EFF49A79EEE4953A33DB45 +95E959F4D0F9A3660A4CAED3CA557EB3AD75BE428A088081FF6E74A343537E9D +4B958FC9C413E5FDF7E3F203BD2D3299DCFF1DF563261F80F02D5575FC16589F +AB2693CD5FB68E712C66332D75ADAF193E5E9B30FD11F04D70E268F1D4B7A991 +E790ABA77249D6562DB2B13644EE111AC51724AA92CEBB9F7FB26DA3444238CC +33E2791CABC1DCD0BFC15A223E41A33F45DF6684D3DCBDCA5537ABC8C2B536D4 +79DE27F7C1E2D97BD87B20D735CE102C0F60A9D44BF8B45AD5ACD937150B85AC +F4262B137D9E0FAF538F883A4F19D4250600581E061573D68D729FEF72720840 +A2055D831EC36EBF5A75BEC8F6DD5F6E6843964C45B67D81BCEDEA3FBEF65ED3 +5C6D8E31D2914E409D64B390B0B8F810D8FB65A4B85073FA7C70A3FD3F1508DC +BB9F3140E60ED739E2BDD299569EE578A0F2E627F3CC4754257C74E99FC30618 +363E875234D5138D9726E4C107DB8AFA18B19A8D93E92CCC167DB36D72585E11 +2E6E8CBD8C8650442AD930F7F724A305C4DB7BBE9E3E9D166FE9AF620A32C81E +373C26C2B8B8A2A90B6D6C9B00B56052E8DD1FD1211542206F504F14DD921D90 +CCB69C31E5660DE3B1382DA7D52AD383ADEFEE5AE79B09D15B870EBA459DCD04 +2318B13B3F8E41278F724B68142E046E5073FAF13FF8DE094D96DF30BF939792 +B6CD340B2AB42EF5EFCA6DD7DA629DC92AEA6280B88995F6F36A32A620397F6D +A17D2763E1E13016C0278566645F3E91877D30E3E8BC9BFC6F9E95AD368DD344 +F9BC3680D9D81DAA41D72ECEBC8BA57CDB159623F9AF904648EA775ABC563B57 +F1BD609D38B08E9AA22D0F0C76FBBE4336E58486528D7589C1B97147EFE76204 +F39138EC559A9DA4E255389A7E0E2D176FF8D32123FED99B7F5015AC51D90DC3 +07366E0297E13CA352F8274449017ECE71DA1161E725BD2BA1215B502D8E87B4 +DA5855DFAD2424FBAF44218BFA11BA9F47B3A2A58A3D2A109AD414ECC7FCC29E +DBE9205C3EE212E3F28F488425E8038116DCD6F4F109937EC27D5AD3C94A1CBC +455476914B9F7631C812B4B0A44F2E1BF8F647EE552216BB0DEC7E42E13C63C8 +EB66F0EBF8456434557918D766BCD51AA8183A380C9F39DB49CDFB269606DB9E +5651C5B598FB9011D7AB1B1A3515F8B1ECDECF19B0045E98A0CE0804A4157948 +44E0923905D6EB963E69EB14CDBEF98D11FBC6BBD1BEC5103BC2051857423F64 +F7A19CBF02B8C539FB20F08257D40F890FC7E35E8024B82A7133E834379B3477 +DAD425B7996592FB0395E78B09B9D5F22FAF42427BA60815F29576EB055D5841 +C307DDC2198D16044BBA796678C9ED23D6194A5CE79410159AB27BB61B4A077F +ADD338C2A01580D84E0135EED01037C81E373C26C2B8B8A2A90B6D6C9B00B560 +52E8DD1E215C663F183246F0377048C48AB0D05E92A03FCD2BD80E93D77E83CD +F905D1B866D26F5671725C1EC2AAB2E9502F531D461A1FFA9FD3D5CCC64D6788 +FA447CA7693002D78BCE5365E1CE48CD621592E13F40A9276AFA549A5F59F205 +4FAD9A3878CFF50032C9215ABB00DB8953AA22C0685B03F604B930772A4D52CF +1E3480229AE0840EC5741A0ED35AF47FF40F2DA0B75EA8C8FB7257630404DDC2 +198D16044BBA796678C9ED23D6194A5CE794101644F4D1F8727B7F021BCE3FB6 +2CF3D855FF25F5E0A7980BB2075FF97C68768B4435372423C4BAF6A443C80D8E +6C3C6D5085D8843F74732B2B10DD809BBE0984741E5E5AE0EEB088B60F3DA6B9 +A3AA97EA25CE5DEB8FF37E8CCAA54277F55C9A2AA048D8FF185763DA65D56DB0 +7497EE2A6FBB9EAA77C3E1CD4050AFE0CF39A32316087F82BD4B2683DF88F44B +9F9CC174C1ECDD3A63E5883BFC190D4E797EF349A0EB76D9524D9345E8226E83 +D3291E7866AE4A0EC499AB117729205C51F2DC110AB4DCFB31275CA297FF423A +F24B9E1D2443EF397EE0AB134571CA2C812CEB52B1DF86A32A0946A3BD1E8ED4 +B742EA905221E19D5A4C763EC2A172263718D3C0B2DC97F50E034EADAE9D8750 +19E23C31650A25CBEEC6B93C575C363FAE22253110344D9DEA1A7675912AA4B7 +A084AB3481D795604B285766C06EA868F915E051139ECFE22AC9B84668F87261 +513691DC7010505C0F1C9BDDF1747CA2F970952D4957DB421D427E28CA6143F6 +3B988D41D1A11438795D8E06BE4D1495247B1EC6571E5D15825D479AF0E6E8F6 +B7165B3942784392AFC1444339665254CEFC2A3F9BC4346E7C0C519F68E411E4 +7A248FFDD79D1D00AA769D78F7A708FA4B252278EF66FD1C374BC3CE94A6AC6C +9E72BF82A85B58BA201F11BE07DA0E6C440D1AD07D3EF48C380429655F8F25C8 +9E65074A52CC6047885F4105DD6958943E33FD627F1A45160CD3D048416BA31C +C103BF4B41C281C7140CC128F24D366E08106B6E18E6596B9AB7EB7E1DAFDBFC +032CCBB03D0964DF8D25F7BDCDE781941C824B2832924F86F49214FEBB4B3AE0 +5A12F0D23368C70D908A4EE7AFEF5FFA49D59C844204CC485B2C679D0D6D0E78 +01038F92981250C3BDD77F02C296953F4C5C835432574C9A5B66DAAD0A940CF9 +A96365BAA62E270D202D5C9578091F53E88750944AA1105951D105D65117E722 +D1183612B014A7687524921D1F4D39C1DD6D89C0C17F72AE76A679EA447B94DB +5CB272D0E55C2C1389C88636EE75116CA98589E3AB1D42EAE1A775AFFBA5CB64 +A1969316236284A571A5A3063CAA9DD92C9048EBA6E1F2EBFCC4E3F3D8112A7E +8FF270331D2FB475491A51A1A536E5FA1E8FE0EE6A8E81E6A3BBF9C1524C164F +2A6C447CB520B59E53117FB961AD0BDD708C34E6B895A98BA22E9E7A5B5E3348 +51268D3E044FF8501EA004CBA494557852020BF0C27F175DE9AFC917F2D783A0 +838DB7030654EBB0D8A2E015FB9A9070A5B29F6B69940F415AA043A4B2422CD8 +0F79734FD400375FBDCFA9BC37EAE549688A808785ED46B2205D9BCAEA85DAF9 +DFB14F50FD6BC7508DBA86A2ACDAE6B930FB8DAF846931370FF1C38008057D6A +AA2EFF416F401936169B51765AEE96012AA426D21B60115A395877B1E42F8AAE +EB135141C89D8592DC6171F3EB972479D537F63B50E8088F4AD38D69204C3868 +6001B66E6F09E890FA521A931274C30C6B87C4DAB4A3F2F275F62E72049D1001 +0E8F4C57E668F3594C4215F8E99FA089F7320D1B9BA262EBFF58E04A4BB59DB7 +CC2102831DD0DC39B8E381381F17FCAD8CF4505C45A38D889E1AEF1F1880F2D4 +AE3978C60533FCFB81A5A18E98E97858DE82F429B57E1C863719C70EF2C8B862 +EE357855AB3554B085F80C7C11DD39ACDF31FF8D01256B7CED1EDC4310A4F5A5 +5B3F6521AD16F5A4496561AFC3A88E05EE7A9C59D781A5CFE3F56DDC27A8770F +BF51D4BEB61D042F28D43DE91F9D0922CBE43CB5782E34609B04176ACF3E97C9 +FBC9D6E6646AABBAA96BF229A004245E590EE0F04BA96E61ED1E128EEB51D0C0 +9F89B3F755905EC9C747C4AF4D0F51CF4E726240B63095D44A790435D7FFF2BF +36A43FA3CF732F443D1B302755CA7C1A3014CD898E9B732C5035829A69E2B42A +ED8BF2D183F1E321FBDF15B23F185B3E4FE39D1536C6D9852BAE98DAC79BC2F3 +5E9E395C0E6F46871DD9E3595D5819E641BFAE651A5817EBCC04DB78FB56E6D9 +5991BC64AA0A0957FD57D62B06EB3EC8DF55D14797BE1B13A81A1763E4217BE3 +E8F731BEB3A94C7F3538C0570C19F62AE49C1E369D07F2A18F70ADB7D08D8DE8 +C2430BE355B2F0F8623A25D83E58FF822EF8AEF58A80C6EA83D4D63521759D35 +7951C05F6C0EB1B8478154CC48AEC66A6FB0E42B89EE932074325629DBE743BD +4C354EB11F1C2C783900EB5A58F86CF89183BF3101F45CA2212344BC46A1665B +061523676DCE48838F36E1250D148A68B749EC5085F923392A63B606202E3337 +6B4B4594E4A79E1BED56FD0C200A109145E50AB8B23A0B0288A4B7EAC3C53FDB +7EEA6972691EC51B42B1E4202ECE6BE1A91EABADE96950322D1B2CD9BCD04F70 +55FAF1EF4F4EDA7FAF2F38BD56FD94D4D41DB85BF63346E35B3CCECFC3ACB589 +6BE8BB5ECE64EC235D16761B91D6A17175D4C637D45EB9C6FF3BEBA94D2EE241 +F802782DFFE945449DF3A7EF660176092A0E0669C41704A1B7852C07701580DD +7BE4070E91C3DA0C8D4DD701D32DA6D1638DB707D0D676643F5A1C57F0EF878E +02941B651602E5B5163614457BDEE3EF2E40EA98BC709D20D02F2C3B64813A03 +D490E97E047DC26C9F6CC5533670919ACCA1803D0F1C3FC8017A47595B31511D +B513D72D0CD466E036F0FA35EE4B32C1A38754418BD9358518BC4524D4379DE2 +4322F8F0F491E49C8DE616A40DC7FFBBD4F964CF7C1F2385D0FF8A988857F3E0 +AD5CCFDF92DA896ECFFB9944EBE29AAA5CA2B07FCF95394B4F0C864415381B5C +73AF7DAE507ECAF41A8B78C0A38B01298C0D382AD2A71A8293A7281B548FF90D +3F37B382A67B29101C9B226EBDB5463D405429969330097388C9C9C35E5FF467 +E1EBE3B65ACB8BF11769DABF8A09A17726F06D6F01AD3CD8DA178AB83EC3464E +3E46D7BA5E1888528BA8B64A6E8590317B413BFBEB5961019126CEFB6753A850 +3DA0355CA5EB43B3DCF1331C71D1485C39E70E27C32777900E2212282D078243 +1E5DF55ACFCFCF4C4487826CE108A2339C9997EB0803F50848158ABF79FC157D +D4F02ADED31589CFBCD8DEF4DE99D74E2DAB1823D6394C3E2479A70DD0A1CF49 +288F7B9FAE2D16C78DB9D0F7712F2F2328AF9A2383111B176746A8BFC3091F95 +DD8701E2542DB7E5BC8F5FD8690D1FC337939EEA4A330ADA5A21690656F98FEB +74D989FDFC54DEB11265BC1BEC42B0B4A412614CA2C1101EFC083B7ECFD7E230 +D3733DC5F4ED621AF73451F6E99ADB85FA3F67F97AA9A57C15177EB3E5FB92C5 +50FE6FABB4F94B263E2C7A3D9DCA7BA2FEE6C8CF20BBF5FD89D2FA7A0DBDCE6E +3253972E3F769B070486E0D7E0A51F25832E4B90405F65B3A215950E967C3ECD +7B1B5A937BE22A4AFF12C74ADE8940069867F8F511AAF5299E9BC7EA383F78E4 +D4DA5CFF5E19DE31D5F793F7C316456FA5E80276D36793C5655878523A941B74 +9DB9C56E3B9A8FE98E4A1C0D9B3530F2ADA68FF99C10C7835B396DB889FEB4B8 +4CC0A3F60EDBE06FEF37C5832466D7F7256F449E0E3DD18D2626175D9407ED28 +5F8252E362374FB8DC792502CAB5A80B1C9D7490F50A72330D556F3DD6DCB576 +F6A520579801906213B7F54BCEC93F9F52DD811A04CC59C40C4D3B9EB63F9CDB +4032CEF88697CF929C6B47AB2BE08B0CA35AA61A2FD3AA9DFEFEED5C9A943A47 +0D1C29B67050C66292779337D3D3FDE482BF499BCB856587BED316652BBD11A2 +8E4EDB5FBC38E05FEC87F9DFA2C716D01B3DCC050CAD3613E7B439E4BE422876 +5E546E17328EEDA0833C35F798D6C9DB5EE4C605B809B3F91117D3EFDF8CCC7B +234FF9DDF6BD2C5753D1274C4A224FD06F4215A899BE84B9345FA50357A72ECA +8A71DAF3232A912D8CE85D23AE420464A8FD9C5EF6BA972B7EC5E68B5ED5648D +09497D77075188C433467624B7475DC3716FC4B60AFBB9911726D37CE1264467 +C71442656FB3B8DB9F6E3F83CF35ACC57D3BFE5AF05A021E6F54F52483B249D5 +00404B27FBF6A538018E9FB48F079F578217334B0008060A05397B3A1FB15468 +4125F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (lozenge2.dvi) +@start /Fa 203[30 30 30 50[{}3 49.8132 /CMR6 rf /Fb 254[59 +1[{}1 66.4176 /CMR8 rf /Fc 134[33 3[33 49[44 13[33 33 +33 33 33 33 2[22 17 37 1[22 22 40[{ TeXBase1Encoding ReEncodeFont }14 +66.4176 /NimbusRomNo9L-Regu rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop 0 3904 a +tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end + 0 3904 a 0 3904 a +tx@Dict begin gsave STV CP T /ps@refangle 0. def grestore end + 0 3904 +a 0 TeXcolorgray 0 3904 a +tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end + 0 3904 a 0 3904 a +tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip +setmatrix end + 0 3904 a +0 3904 3444 3904 v 3444 3904 a +currentpoint grestore moveto + 3444 3904 a 0 3904 a + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 0 +3904 a 28 1950 a +tx@Dict begin { 9.79408 214.20006 } PutCoor PutBegin end + 28 1950 a -38 1965 a Fc(y\(-3\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 99.01541 214.20006 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+3,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 186.08553 214.20006 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(2)8 1970 y Fc(y\(-4\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 281.11324 214.20006 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+4,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 379.56427 214.20006 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 1947 +y Fa(4)8 1970 y Fc(y\(-5\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 180.05685 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 92.19138 180.05685 } PutCoor PutBegin end + 28 1950 a -68 1965 a Fb(\001)p Fc(y\(-3\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 190.06412 180.05685 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+3,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 277.13422 180.05685 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(3)8 1970 y Fc(y\(-4\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 383.54285 180.05685 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+4,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 9.79408 145.91365 } PutCoor PutBegin end + 28 1950 a -38 1965 a Fc(y\(-2\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 99.01541 145.91365 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+2,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 186.08553 145.91365 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(2)8 1970 y Fc(y\(-3\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 281.11324 145.91365 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+3,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 379.56427 145.91365 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 1947 +y Fa(4)8 1970 y Fc(y\(-4\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 111.77045 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 92.19138 111.77045 } PutCoor PutBegin end + 28 1950 a -68 1965 a Fb(\001)p Fc(y\(-2\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 190.06412 111.77045 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+2,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 277.13422 111.77045 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(3)8 1970 y Fc(y\(-3\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 383.54285 111.77045 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+3,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 9.79408 77.62723 } PutCoor PutBegin end + 28 1950 a -38 1965 a Fc(y\(-1\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 99.01541 77.62723 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+1,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 186.08553 77.62723 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(2)8 1970 y Fc(y\(-2\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 281.11324 77.62723 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+2,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 379.56427 77.62723 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 1947 +y Fa(4)8 1970 y Fc(y\(-3\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 43.4836 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 89.63074 43.4836 } PutCoor PutBegin end + 28 1950 a -68 1965 a Fb(\001)p Fc(y\(-1\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 190.06412 43.4836 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+1,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 277.13422 43.4836 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(3)8 1970 y Fc(y\(-2\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 383.54285 43.4836 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+2,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 8.08699 9.3404 } PutCoor PutBegin end + 28 1950 a -27 1965 a Fc(y\(0\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 92.4714 9.3404 } PutCoor PutBegin end + 28 1950 a -58 1966 a Fc(C\(u,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 186.08553 9.3404 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(2)8 1970 y Fc(y\(-1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 281.11324 9.3404 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+1,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 379.56427 9.3404 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 1947 +y Fa(4)8 1970 y Fc(y\(-2\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 -24.8028 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 90.48428 -24.8028 } PutCoor PutBegin end + 28 1950 a -57 1965 a Fb(\001)p Fc(y\(0\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 183.5201 -24.8028 } PutCoor PutBegin end + 28 1950 a -58 1966 a Fc(C\(u,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 277.13422 -24.8028 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 +1947 y Fa(3)8 1970 y Fc(y\(-1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 383.54285 -24.8028 } PutCoor PutBegin end + 28 1950 a -93 1966 a Fc(C\(u+1,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 8.08699 -58.946 } PutCoor PutBegin end + 28 1950 a -27 1965 a Fc(y\(1\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 97.02396 -58.946 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-1,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 184.37842 -58.946 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(2)19 1970 y Fc(y\(0\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 274.56879 -58.946 } PutCoor PutBegin end + 28 1950 a -58 1966 a Fc(C\(u,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 379.56427 -58.946 } PutCoor PutBegin end + 28 1950 a -85 1970 a Fb(\001)-26 1947 +y Fa(4)8 1970 y Fc(y\(-1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 -93.08922 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 90.48428 -93.08922 } PutCoor PutBegin end + 28 1950 a -57 1965 a Fb(\001)p Fc(y\(1\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 188.07265 -93.08922 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-1,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 275.42712 -93.08922 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(3)19 1970 y Fc(y\(0\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 376.99884 -93.08922 } PutCoor PutBegin end + 28 1950 a -58 1966 a Fc(C\(u,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 8.08699 -127.23285 } PutCoor PutBegin end + 28 1950 a -27 1965 a Fc(y\(2\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 97.02396 -127.23285 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-2,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 184.37842 -127.23285 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(2)19 1970 y Fc(y\(1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 279.12134 -127.23285 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-1,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 377.85674 -127.23285 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 1947 +y Fa(4)19 1970 y Fc(y\(0\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 -161.37605 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 90.48428 -161.37605 } PutCoor PutBegin end + 28 1950 a -57 1965 a Fb(\001)p Fc(y\(2\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 188.07265 -161.37605 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-2,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 275.42712 -161.37605 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(3)19 1970 y Fc(y\(1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 381.55139 -161.37605 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-1,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 8.08699 -195.51926 } PutCoor PutBegin end + 28 1950 a -27 1965 a Fc(y\(3\))28 1950 +y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 97.02396 -195.51926 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-3,1\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 184.37842 -195.51926 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(2)19 1970 y Fc(y\(2\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 280.25969 -195.51926 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-2,3\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a 28 1950 a +tx@Dict begin { 377.85674 -195.51926 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 1947 +y Fa(4)19 1970 y Fc(y\(1\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 1.69841 -229.66246 } PutCoor PutBegin end + 28 1950 a 11 1972 a Fc(1)28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 +a +tx@Dict begin { 90.48428 -229.66246 } PutCoor PutBegin end + 28 1950 a -57 1965 a Fb(\001)p Fc(y\(3\))28 1950 y +tx@Dict begin PutEnd end + +28 1950 a 28 1950 a +tx@Dict begin { 188.07265 -229.66246 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-3,2\))28 +1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 1950 a +tx@Dict begin { 275.42712 -229.66246 } PutCoor PutBegin end + 28 1950 a -74 1970 a Fb(\001)-15 +1947 y Fa(3)19 1970 y Fc(y\(2\))28 1950 y +tx@Dict begin PutEnd end + 28 1950 a 28 +1950 a +tx@Dict begin { 381.55139 -229.66246 } PutCoor PutBegin end + 28 1950 a -86 1966 a Fc(C\(u-2,4\))28 1950 y +tx@Dict begin PutEnd end + 28 +1950 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 73.13243 185.32054 27.60786 +205.80655 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 73.13243 115.89621 27.60786 +136.38179 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 71.99452 46.47145 26.46996 +66.95746 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 70.85617 -21.81538 25.33203 +-1.32938 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 71.99452 -90.67097 26.46996 +-70.18497 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 70.28699 -157.25029 24.76286 +-136.76428 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 71.99452 -227.24423 26.46996 +-206.75821 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 162.47403 148.90106 116.94946 +169.38707 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 164.18112 81.75256 118.657 +102.23859 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 163.61195 11.75906 118.08781 +32.24507 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 161.90486 -55.95859 116.38072 +-35.47258 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 163.04321 -123.10709 117.51865 +-102.62106 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 163.61195 -190.82475 118.08781 +-170.33875 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 254.0919 184.18262 208.56734 +204.66862 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 253.52272 115.32703 207.9986 +135.81305 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 253.52272 45.90227 207.9986 +66.38828 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 254.66107 -21.2462 209.13652 +-0.7602 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 254.66107 -90.10179 209.13652 +-69.61578 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 252.95355 -158.3882 207.42941 +-137.90263 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 253.52272 -226.67505 207.9986 +-206.18904 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 354.81442 150.03941 309.2903 +170.52542 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 355.3836 82.89093 309.85904 +103.37694 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 355.95277 14.60408 310.4282 +35.09009 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 356.52196 -53.11314 310.99739 +-32.62714 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 354.81442 -123.67625 309.2903 +-103.19025 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 357.0907 -191.96266 311.56656 +-171.47665 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 31.59123 151.17734 73.70161 +183.61345 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 30.45332 81.75256 72.56326 +114.18867 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 29.88414 11.75906 71.99452 +44.19518 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 28.17705 -54.82024 70.28699 +-22.38412 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 27.60786 -122.5379 69.71825 +-90.10179 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 28.74623 -192.53185 70.85617 +-160.09573 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 122.07118 183.61345 164.18112 +216.04956 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 120.93283 115.89621 163.04321 +148.33232 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 120.36409 48.17854 162.47403 +80.61465 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 119.22574 -20.67703 161.33612 +11.75906 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 119.22574 -88.96388 161.33612 +-56.52777 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 119.79492 -156.11237 161.90486 +-123.67625 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 121.50201 -223.26086 163.61195 +-190.82475 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 211.41278 150.03941 253.52272 +182.47552 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 210.84361 81.18382 252.95355 +113.61993 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 210.27487 14.03534 252.38481 +46.47145 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 210.84361 -53.11314 252.95355 +-20.67703 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 211.41278 -122.5379 253.52272 +-90.10179 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 210.27487 -191.3935 252.38481 +-158.95738 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 313.84283 182.47552 355.95277 +214.91164 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 312.1353 115.89621 354.24568 +148.33232 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 312.70448 48.74771 354.81442 +81.18382 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 311.56656 -18.40076 353.6765 +14.03534 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 312.70448 -86.6876 354.81442 +-54.2515 /Lineto /lineto load def 1 setlinejoin false NArray n +0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 310.4282 -156.11237 352.53815 +-123.67625 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 314.41158 -227.24423 356.52196 +-194.80812 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 53.2156 234.2593 29.3154 219.46417 + /Lineto /lineto load def 1 setlinejoin false NArray n 0 eq not +{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup +1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha +cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub +def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha +y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos 0.5 abs +def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } repeat +}{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub +ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop +} repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def +n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave +1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin 0 setlinecap +stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 238.72717 232.5522 214.82698 +217.75665 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 136.29756 234.2593 164.18112 +216.04956 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 1.13791 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def [ 318.39494 233.12137 354.81442 +214.91164 /Lineto /lineto load def 1 setlinejoin false NArray +n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW +mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy +/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA +x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n +n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt +{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /dArrowPos +0.5 abs def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } repeat }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 +sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } +if gsave 1.13791 SLW 0 setgray 1. .setopacityalpha 1 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 0 3904 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch +neg exch translate + 0 3904 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/changelog b/changelog index c38fe94..df21370 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +20140722 tpd src/axiom-website/patches.html 20140722.01.tpd.patch +20140722 tpd books/bookvol10.1 add section on interpolation formulas +20140722 tpd books/ps/lozenge2.eps add the Hamming lozenge diagram 20140720 tpd src/axiom-website/patches.html 20140720.01.tpd.patch 20140720 tpd books/bookvol7 apply Camm's patches 20140720 tpd books/bookvol8 apply Camm's patches diff --git a/patch b/patch index 80b7268..c155c37 100644 --- a/patch +++ b/patch @@ -1,3 +1,3 @@ -books/bookvol7, bookvol8 apply Camm's patches +books/bookvol10.1 add section on interpolation formulas -See Camm's diff-Naur patch in the mailing list on 17-July-2014 +Show a common structure for constructing interpolation formulas. diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index e22b6dc..bfc7fd4 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -4556,6 +4556,8 @@ books/bookvolbib add Jeff97 books/bookvol10.1, bookvolbib, bookheader.tex clean up mistakes 20140720.01.tpd.patch books/bookvol7, bookvol8 apply Camm's patches +20140722.01.tpd.patch +books/bookvol10.1 add section on interpolation formulas