commit 2149d342956ef4b28cd2cc1b753438ec08786b78 Author: Sven Riwoldt Date: Sat Oct 24 13:47:37 2020 +0200 init diff --git a/06_2.eps b/06_2.eps new file mode 100644 index 0000000..3ac122c --- /dev/null +++ b/06_2.eps @@ -0,0 +1,3273 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Fri Jun 02 13:19:48 2006 +%%Pages: 1 +%%PageOrder: Ascend +%%BoundingBox: 0 0 595 842 +%%DocumentFonts: CMMI5 CMR5 CMSY10 +%%DocumentPaperSizes: a4 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips.exe 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2006.06.02:1319 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.01, 2005/09/27 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2005/09/28 : - rename it to pstricks-add.pro +% - agg support for Gouraud shading +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression +% 2004/12/16 : addition of SUM and IFTE +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { InitParser SetExpr LexStr 0 exch AnalyzeListOfE ExpressionVector /ExpressionVector [] def} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/SetExpr { RemoveWS /ExpressionString exch def } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/InitParser { + /ExpressionVector [] def /AddVector [] def + /AddVectorfree [] def /MulVector [] def + /MulVectorfree [] def /PowVector [] def + /PowVectorfree [] def /OpParVector [] def + /ClParVector [] def /ParVectorFree [] def + %%/CompVector [] def /CompVectorFree [] def + /BraVector [] def /SemVector [] def + /ComVector [] def /ExpressionVector [] def + /LoopLevel -1 def /LoopContext [] def %%% NEW for SUM function +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/FLbreak { tst not {/L exch def /F exch def 2 copy L eq exch F eq and /tst exch def} {pop pop} ifelse} def +/Negbreak { tst not { dup 0 lt /tst exch def } if } def +/STOP { tst {TOUF} if} def +/tst false def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Expression List +%% first last +/AnalyzeListOfE { + exch SemVector { + exch 1 index 1 sub AnalyzeExpr 1 add + } forall%%last_char + exch AnalyzeExpr +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Expr +%% first last +/AnalyzeExpr { + FindFirstAdd%% first last pos+ + 2 copy abs 1 sub ne + { 3 -1 roll 1 index abs 1 sub AnalyzeExpr dup abs 1 add 3 -1 roll AnalyzeTerm EvalAdd } + { pop AnalyzeTerm } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Term +%% first last +/AnalyzeTerm {%%19 28 FLbreak STOP + FindFirstMul%% first last pos* + 2 copy abs 1 sub ne + { 3 -1 roll 1 index abs 1 sub AnalyzeTerm dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalMul }%%% NEW 2004/11/14 + { pop AnalyzeSignedFactor } ifelse%%% NEW 2004/11/14 +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NEW 2004/11/14 +%% analyze Signed Factor +%% first last -> +/AnalyzeSignedFactor { + ExpressionString 2 index get + dup 45 eq%% a - sign + { pop exch 1 add exch AnalyzeSignedFactor EvalNeg } + { 43 eq%%a + sign + { exch 1 add exch AnalyzeSignedFactor } + { AnalyzeFactor } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Factor +%% first last -> +/AnalyzeFactor { + FindFirstPow%% first last pos* + 2 copy abs 1 sub ne +% { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzePower EvalPow } + { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalPow }% NEW 2004/11/14 + { pop AnalyzePower } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Power +%% first last -> +/compteur 0 def +/AnalyzePower { + ExpressionString 2 index get + dup 40 eq%% an open parenthesis + { pop 1 index UnfreePar 1 sub exch 1 add exch AnalyzeExpr } + { dup 45 eq%% a - sign + { pop exch 1 add exch AnalyzePower EvalNeg } + { dup 43 eq%%a + sign + { pop exch 1 add exch AnalyzePower } + { dup 46 eq 1 index 48 ge 2 index 57 le and or%%a digit or a dot + { pop AnalyzeNumber } + { pop AnalyzeLiteral } ifelse } ifelse } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze parameters list +%% first last +/AnalyzeParam { + { FindFirstCom%% first last pos, + 3 -1 roll 1 index 1 sub AnalyzeExpr + 2 copy 1 sub ne { 1 add exch } { pop pop exit } ifelse + } loop +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual addition at this level +%% first last -> position +/FindFirstAdd { + 2 copy /Last exch def /First exch def false 0 + AddVector { + AddVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos abs First gt pos abs Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeAdd} %% find one mul + { Last 1 add } ifelse +} def +%% { +%% 2 copy /Last exch def /First exch def false 0 +%% AddVector { +%% AddVectorFree 2 index get +%% { /pos exch def +%% true 0 1 ClParVector length 1 sub +%% { ParVectorFree 1 index get +%% { OpParVector 1 index get pos abs le +%% ClParVector 2 index get pos abs ge and +%% pos abs First lt pos abs Last gt or or +%% { pop pop false exit } if +%% } if +%% pop +%% } for +%% { pop pop true dup exit } if +%% } +%% { pop } ifelse +%% 1 add +%% } forall +%% pop +%% { pos UnfreeAdd}%% find one add +%% { Last 1 add } ifelse +%% } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual multiplication at this level +%% first last -> first last position +/FindFirstMul { + 2 copy /Last exch def /First exch def false 0 + MulVector { + MulVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos abs First gt pos abs Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeMul} %% find one mul + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual power at this level +%% first last -> first last position +/FindFirstPow { + 2 copy /Last exch def /First exch def false 0 + PowVector { + PowVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos First gt pos Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreePow} %% find one ^ + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual comma at this level +%% first last -> first last position +/FindFirstCom { + 2 copy /Last exch def /First exch def false 0 + ComVector { + ComVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos First gt pos Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesisSTOP + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeCom} %% find one comma + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the first opened parenthesis (only for func call) +%% first last -> first last position +/FindFirstPar { + 2 copy /Last exch def /First exch def false 0 + OpParVector { + ParVectorFree 2 index get + { /pos exch def + pos First gt pos Last lt and + { exch not exch exit } if + } { pop } ifelse + 1 add + } forall + pop + { pos dup UnfreePar }%% find one par + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the first opening bracket +%% first last -> first last position +/FindFirstBra { + 2 copy /Last exch def /First exch def + BraVector { + /pos exch def + pos First gt pos Last lt and + { exit } if + } forall + pos dup UnfreePar%% finding it is mandatory +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Read the number and push it in the vector +%% first last -> +/AnalyzeNumber { + 1 index sub 1 add ExpressionString 3 1 roll getinterval cvr /n exch def + /ExpressionVector ExpressionVector aload length n exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Read the literal and push it in the vector +%% first last -> +/AnalyzeLiteral { + ExpressionString 1 index get dup 41 eq %%close par at the end => function call + { pop FindFirstPar%%first last parpos + ExpressionString 3 index dup 3 index exch sub getinterval + dup (SUM) eq { sumation } + { dup (IFTE) eq { condition } + { 1 index 1 add 3 index 1 sub AnalyzeParam + dup cvn /n exch def TrigoFunc + /ExpressionVector ExpressionVector aload length + /tx@addDict cvx /begin cvx n cvx /end cvx 5 -1 roll 4 add array astore def + %%n cvx exch 1 add array astore def + pop pop pop } ifelse } ifelse } + { 93 eq%%close bracket => vector element + { FindFirstBra%%first last brapos + ExpressionString 3 index dup 3 index exch sub getinterval cvn /n exch def + /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def + 2 copy 1 add exch 1 sub AnalyzeExpr + /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def + pop pop pop + } + { 1 index sub 1 add ExpressionString 3 1 roll getinterval cvn /n exch def + /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push add in the vector +%% kind -> +%% if kind>0 then add else sub +/EvalAdd { + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll + 0 gt { /add } { /sub } ifelse cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push mul in the vector +%% -> +/EvalMul { + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll + 0 gt { /mul } { /div } ifelse cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push exp in the vector +%% -> +/EvalPow { + pop /ExpressionVector ExpressionVector aload length + /tx@addDict cvx exch /begin cvx exch /EXP cvx exch /end cvx exch 4 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push neg in the vector +%% -> +/EvalNeg { + /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Lexical Analyzis of the string +%% -> +/LexStr { + /freepar 0 def /lastpar 0 def /lastchar 0 def + 0 ExpressionString + { dup 40 eq 1 index 91 eq or %% open parenthesis + { /OpParVector OpParVector aload length dup 3 add index exch 1 add array astore def + /ClParVector ClParVector aload length -1 exch 1 add array astore def + /lastpar freepar def /freepar freepar 1 add def /NoPar false def} if + dup 41 eq 1 index 93 eq or %% close parenthesis + { ClParVector lastpar 3 index put lastpar + dup 0 eq + { pop } + { { 1 sub dup ClParVector exch get -1 eq { /lastpar exch def exit } { dup 0 eq { pop exit} if } ifelse } loop } + ifelse } if + dup 42 eq %% * operator + %%{ /MulVector MulVector aload length dup 3 add index exch 1 add array astore def } if + { /MulVector 2 index MulVector aload length 1 add array astore def } if + dup 43 eq %% + operator + { %%test if it is a real operator and not the unary operator + lastchar dup 40 ne %% open parenthesis + 1 index 59 ne and %% ; + 1 index 42 ne and %% * + 1 index 43 ne and %% + + 1 index 44 ne and %% , + 1 index 45 ne and %% - + 1 index 47 ne and %% / + 1 index 0 ne and %% first char + 1 index 94 ne and %% ^%%2004/11/14 + exch 124 ne and %% | + %%{/AddVector AddVector aload length dup 3 add index exch 1 add array astore def } if} + {/AddVector 2 index AddVector aload length 1 add array astore def } if} + if + dup 44 eq %% , separator + { /ComVector ComVector aload length dup 3 add index exch 1 add array astore def } + if + dup 45 eq %% - operator + { %%test if it is a real operator and not the unary operator + lastchar dup 40 ne %% open parenthesis + 1 index 59 ne and %% ; + 1 index 42 ne and %% * + 1 index 43 ne and %% + + 1 index 44 ne and %% , + 1 index 45 ne and %% - + 1 index 47 ne and %% / + 1 index 0 ne and %% first char + 1 index 94 ne and %% ^%%2004/11/14 + exch 124 ne and %% | + %%{/AddVector AddVector aload length dup 3 add index neg exch 1 add array astore def } if} + {/AddVector 2 index neg AddVector aload length 1 add array astore def } if} + if + dup 47 eq %% / operator + %%{ /MulVector MulVector aload length dup 3 add index neg exch 1 add array astore def } + { /MulVector 2 index neg MulVector aload length 1 add array astore def } + if + dup 59 eq 1 index 124 eq or%% ; separator | + { /SemVector SemVector aload length dup 3 add index exch 1 add array astore def } + if + dup 91 eq %% open bracket + { /BraVector BraVector aload length dup 3 add index exch 1 add array astore def } + if + dup 94 eq %% ^ operator + %%{ /PowVector PowVector aload length dup 3 add index exch 1 add array astore def } + { /PowVector 2 index PowVector aload length 1 add array astore def }%%2004/11/14 + if + /lastchar exch def 1 add + } forall + /AddVectorFree AddVector CreateFree def + /MulVectorFree MulVector CreateFree def + /ParVectorFree OpParVector CreateFree def + /PowVectorFree PowVector CreateFree def + /ComVectorFree ComVector CreateFree def + 1 sub +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Create Free vector +%% -> +/CreateFree { + dup length array exch + { pop true exch } forall astore +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree parenthesis +%% pos -> +/UnfreePar { + /pos exch def ParVectorFree 0 + OpParVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree mul +%% pos -> +/UnfreeMul { + MulVectorFree 0 + MulVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree add +%% pos -> +/UnfreeAdd { + AddVectorFree 0 + AddVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree exp +%% pos -> +/UnfreePow { + PowVectorFree 0 + PowVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree com +%% pos -> +/UnfreeCom { + ComVectorFree 0 + ComVector { pos eq { exit } if 1 add } forall + false put +} 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 3.14159265359 /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the condition function +%% -> +/condition { + %% manage the condition + 1 index 1 add 3 index 1 sub FindFirstCom + %% find the test char <,>,=,! + 4 index 1 index 1 sub FindTestChar + 4 index 2 index 1 sub AnalyzeExpr 3 1 roll + 1 add 1 index 1 sub AnalyzeExpr exch + /ExpressionVector ExpressionVector aload length dup 1 add array exch 3 add -1 roll cvx exch astore def + %% manage the then clause + MngClause + %% manage the else clause + MngClause + /ExpressionVector ExpressionVector aload length 1 add /ifelse cvx exch array astore def + mark 8 1 roll cleartomark +} def +/FindTestChar { + 1 exch + { dup ExpressionString exch get + dup 60 eq { pop /lt exit } if%%< + dup 61 eq { pop /eq exit } if%%= + dup 62 eq { pop /gt exit } if%%> + pop pop } for +} def +/MngClause { + 3 1 roll FindFirstCom 4 -1 roll 1 add 1 index 1 sub + /ExpressionVector ExpressionVector exch [] def 3 1 roll AnalyzeExpr + /ExpressionVector exch aload length 1 add ExpressionVector cvx exch array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the sumation function +%% -> +/sumation { + /LoopLevel LoopLevel 1 add def + %% create the accumulator + /ExpressionVector ExpressionVector aload length 1 add 0 exch array astore def + %% read the variable name + 1 index 1 add 3 index 1 sub FindFirstCom + ExpressionString 4 -1 roll 2 index 1 index sub getinterval cvn + /tempvar exch def + %% read the initial value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + %% read the increment value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + %% read the limit value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + /LoopContext LoopContext aload length 1 add ExpressionVector exch array astore def + /ExpressionVector [ tempvar /exch cvx /def cvx ] def + 1 add exch AnalyzeExpr + %% add each term of the sum + /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def + /ExpressionVector LoopContext LoopLevel get aload length 2 add + ExpressionVector cvx exch /for cvx exch array astore def pop pop pop pop } def +/GetNextNumber { + exch FindFirstCom ExpressionString 4 -1 roll 1 add 2 index 1 index sub getinterval cvi + /temp exch def } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% METHODS FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MISC FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/RemoveWS {% + dup length + 0 2 index { 32 ne { 1 add } if } forall + 2 copy ne + { exch pop string 0 2 index + { dup 32 ne { 2 index 2 index 3 -1 roll put 1 add } { pop } ifelse } forall + pop exch pop } { pop pop } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% NEW FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Make a discrete sum +%% var n begin end expr -> +/SUM {} def +%% function arcsine in radians +%% x -> theta +/asin {% + dup abs 1 gt { EQDFasinrangeerror } if + dup abs 1 eq + { PIdiv2 exch -1 eq { neg } if } + { .1 %% asin(x) + { dup dup PI div 180 mul sin 3 index sub exch PI div 180 mul cos div + dup abs 1e-6 lt { sub exit } if sub + } loop + exch pop } ifelse +} def +%% function arccosine in radians +%% x -> theta +/acos {% + dup abs 1 gt { EQDFacosrangeerror } if + dup abs 1 eq + { -1 eq { PI } { 0 } ifelse } + { 1.5 %% asin(x) + { dup dup PI div 180 mul cos 3 index sub exch PI div 180 mul sin neg div + dup abs 1e-6 lt { sub exit } if sub + } loop + exch pop } ifelse +} def +%% factorial function +%% n -> n! +/fact { 1 exch 2 exch 1 exch { mul } for } def + +%end + +%% modified exponential funtion for 0 +%% x n -> x^n +/EXP { dup 0 eq { pop pop 1 } { exp } ifelse } def +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/GTriangle { + gsave + /mtrx CM def + /colorA ED /colorB ED /colorC ED % save the colors + /xA ED /yA 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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end + +% END pst-eqdf.pro + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.81)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 1 /periodcentered put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8AC5158CF7CDD95058BF2B70796EB09F833A6DD557560244C58DCDF257B +36F96AF73BCDFAD79FC5AE97F7E4CB643BE6125DC257BE825C1FCE80EA9886AF +87B49B6FCF3AB57CB1960E83AD525404EDE0E99FB350CB662C8CA46B4D161320 +892A7D2FB2A57C42B874D5DE96C17F8A0FEC855E62DD37AD6088597E91527E1C +0EA9A3FB7AE720C62543ED75FF6DFA01E434F2841851CCD780F15A1EBE417E52 +0F753BEF7ADFFAA9173C4776936AD55854BC82CDB3327374E540A4A0A27B6AB0 +0E9C1B155C72BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR5 +%!PS-AdobeFont-1.1: CMR5 1.00B +%%CreationDate: 1992 Feb 19 19:55:02 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +dup 43 /plus put +dup 49 /one put +dup 83 /S put +dup 90 /Z put +dup 97 /a put +dup 98 /b put +dup 101 /e put +dup 102 /f put +dup 105 /i put +dup 108 /l put +dup 112 /p put +dup 115 /s put +dup 116 /t put +readonly def +/FontBBox{-341 -250 1304 965}readonly def +/UniqueID 5000788 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA1F9B0FF4CFF25B8E64D0747A3 +7CAD14E0DBA3E3CA95F10F24B7D5D75451845F1FB7221D7794A860756CFBB3E7 +704A52A22448C34812C3DBEDD41892577AABA7D555E9298C1A0F7DA638078167 +F56E29672683C51CF1C003764A8E7AD9D8ADE77B4983F56FE2D12723AAD8BF36 +682CFBB71B1D12210144D39DD841A971F71DB82AC6CD815987CDCF29ABC3CC96 +5EEBD5D661F452C6E0C74F9ED8D0C5B3755551A172E0FE31EA02344176E32666 +14B6853A1C303A5E818C2E455A6CF8FC9A66DC6E279101D61C523BD9DB8EB82F +EAF4D7FDF6372383C0794C4568D079648689A199D4B65BA646CF95B7647E4BEC +83856C27A8EF177B3A686EDA6354FE9573E123C12EC4BA56A7E8BFB8F9B75147 +9DD79A743968F36F7D0D479FA610F0816E6267E5CE327686A5485AB72201525C +FB3B7CA10E1BF26E44C24E1696CB089CB0055BD692C89B237CF269F77A31DC81 +0F4B75C8400ABCFDCEC6443CD0E81871CD71AA3064ABDE882C4C52322C27FA8B +41C689F827FB0F8AAF8022CF3C1F41C0B45601190C1328831857CBF9B1E7D1AA +246117E56D6B7938488055F4E63E2A1C8D57C17D213729C68349FEC2C3466F41 +171E00413D39DF1F67BC15912F30775AFDF7FB3312587E20A68CF77AD3906040 +842D63C45E19278622DD228C18ABDD024DD9613CDC0B109095DB0ADC3A3C0CB5 +AB597D490189EA81239E39202CBC7A829EB9B313A8F962F7879D374ADF529BD0 +5533EF977142F647AD2F5975BA7E340419116099B19ACCCC37C55127607E2972 +88B936F778CCE8AF349CDFCDCCB95D64B43BAB28A8B3FF2F20421C0106DEA8B9 +C09F32D07E5CF0D9D30325C9CFA6A4A06DE55C75C5343AD87386CE54E3E79590 +90163816ED6E689B627EFB41C61EF00DF68FBF95821DAC0589A7897B36648C14 +8E0379CD420B5C3DE2063F5514E2D2D51E4057CB71FE5837BF0B5A482F35A732 +742071902686DEB43C0076F20B1DD9B9DF27CDE27181E608DE9ADC4403FFF5CA +3BCA2E5DFA2032276D14699455F58CCEE19835FDF498D4C3E335BCA67C84E4B2 +A773BBF4676457ADA65332E161F6D24472DB723476C3C734B08A223D3D904E2D +47C92417B05537C38476DF22527F29EA2FA3438AC9CE324B58941FB705476C4B +86301739E57E5BAE46301DDB6C307664F3CB0A800585F82256609624C0893A17 +D40B36F7F3825B223BF73EBB425567EDEA6754ED4B24A50FB85C89DEA501F35B +BDF97B7E8F0FFA8599678423235E1CAA4ABCFAEEDF2C779EEA18A8EE18815CCC +E9B052C9F3B670C0D7DF4A7D80F5A7B1D7DAA7A77C410D0DCA708BE3B5657411 +4702B8BFA244ECE2E44E4C6644D2AFD89A8748C3EF8898974F3AFD5966C06F4D +E64CCD410C6A6C1B96397666755AE375F3832953D38FAA9336BD7EA7A28CDE12 +58A9936288107603FA84C841E1C678D70844958BD37DD40B9309EC1C19081C7E +930A64AE6E78DAB5D99A85D9D7DBE223DA85DFC2352FE3EA5E22A348344CFC98 +6D10BAB7FBD89F7CAA8DBFB5CF8BAD8D3EBAEDD29121EF53FE85EF2B7E40AB13 +8EA5263DE6D32B55FFE5FEAD48896DC221D6FEFFEFFA6D4995A5779E6B1285F3 +7D0119F16A368F9849DFB873D6BDC4C71FD3414BABE9D146CD4BA85A54448F19 +CC5CDD8523C874D879EA16C1849B81E70AE91BFF597EEA3A161E837FC6788BB7 +E799872FCCEFB039439D5A4C7B96E0BBA625D0804F4316D067F80566806A4E57 +4170E3274E20922C45DEED0FE53269BBA903EF036AD8C941855FE4AD339A2088 +4669AE68A01634E06B4BE7134EDF91EEB9C67276961BCC30AAF7B47E87C974C1 +C950D8CB9B9745D46963A20FBE7397F177B8F92779312E5D09626B0EBAC2AAC5 +0A7ADE926A73839CCAC22C6B3D7D700AFB940476DE013B787249FEC13DA8BF9A +84D30287E6C4677B61C18294B945D0B750BFC2ECF8B2D4F9F6EAF022E1691369 +16BC03FBFDBD264D2C14DF4F9E275C78CACF6E5A79E159D441E6DCD19B6CB5B0 +4AA9ED0F10AC675C1EC607B9FFB1E612CB14BC09C831AFC8E8A37B114F81CAE3 +7DB84C23877FE236D9863B532C19F40EED6D916517A6F8FAE364CD1352524E63 +38FEF25A4CEE8E0D633F53100F80B706FBA81C569BAA09BC135760E2F988E679 +ADE36BB63E2CC274379D1C9C2DC15E79ABCDC13649802FEBBA932755297909BC +B4776475377BC9C43A3931ADBC0153E5C3FFB79A277EE0B4C866E80387B0774E +991422B7E3D0F512A89A6E98E073814176CC782DA456F3D790541E62C9078CCC +2FDE5D476A22BC030AD0761B6CAB72F21102E17D0484E20AB7B1C7560064BC51 +17CA24D2B63C3AA8532C3418256EAEBD5C675228C957DABA62CAB44D367448C3 +516DC3D4E5FE7CF67D4392B57B7F2AB0D4A23C32D7693A284FB1A309C63C1966 +67B23D46BCB4ADBF5B34478C4FB18417FF44CAB2D8320080454AA2C7E90B4FE3 +1EEF822ED8D8033920C2D8F561495E5670373940D4255647EF88BD86848EA783 +383BE702F804554F875D33D5928962266FC80C0B32B33AEF81450701BAED3109 +D0C21D4C22EC1C8475714D4E5777ABF193579CB063D82D30124B3E1BC492843D +766FC3166E422447FD74D4D91697B9F7A431EDA9ADEA4D68A8DE0BDC2B2A9CBF +515AECAD2E08145A72342DF9F7A699497AF1E825CCBD874EC10BF7FFC2F8E857 +8BC54E3C22B44051DA454D2CBB05C3E7D583472C9847C3E7CC981EE84AB2CB15 +4556655444A03FF9FD713457E9B9265433C7C24B86DD51B8BECA15BAEEC52CEE +E485D92B7587B69A18CC24CA4D71A021501CA6937F8876AD9571AAEC4452CDCF +354F22D3118AA224C8E665C2ED32D2698E444051C7B779391E1206125D117570 +06CFDB6AB967657D07F9DEB15B7082D982DFB68C7B004C6921DBD29F15BC104C +225B412873921FACF6CBAFFBB54E898F33C9732A2ADBC34071B11AB6916F8E48 +FBCF1602EF13F5C77A3E8020F5E734D3C1C6E683A088D4B9820F878B4ADE6A35 +BA89ECD5251E80C248C6FEF399326ECBB795E285425217FCFA719C28F99568CC +EED8EF4A1E86BB9B1020E93486ECFCEA0AF14E22C20657B68B4EC5ED6EA028FD +5DBAA47DDB74E938D4441A7B43304180A95B4E0C908A4CF922FCF10ABE90E9C3 +24FA05814DB9E16873A369D7796062B54B2073E8D5BA303371462B9BDADFBE4C +B5906C076844C99D1D6E3D77DAE91BDC39A2A0B102A2049AB5A80F938A0BCD98 +F45C0EDB15B2C780130478EE35CE8AC2257F8D0B2945BBA90D58BE948E8CB299 +07AF801BDC8CF85794BFB9FA9311657DD042E18654857A333BFC15617F4F3146 +87289B952E719CFB9233DC3E92D554D0B0748770DD49204A5FB65B3B8553AEF4 +4E2513BFD0ACC898A0F01A99D0E1313EE9DA1D8BCF503394A44A0BBEDF608A13 +8DBE85DD148B2DAD9A85CC440F37690FFF402D69C452F6F2B736D7B6E4A459EF +94D4DEA0BB1B35DC7789BC13DED9363007019F555F85DEA422B595B72B201D88 +FF047A554585B326B0B96566CB8FCC4349C718EF48236FA5C3CC2FCF4F81D7DA +FCD724880563FB9651FEB0F3237E0CC8E04BFFB786E817F3093B9E5EF3F78A79 +44D9908B86EC62C241C5D7873931B1E3E19A2E2187EBEB8C3A1E58072052B820 +8E3F3ADDEFBF9CDC077E6BA6282DDD270D3AC52E02BA843EFF0BAC5C50F80776 +55FBBD42CCFE7B817666F7C33D4BF3F4C6C2A9D1D2B9C4217D938D3D5203E01D +94F90CAB65BF5EF14C536AB052CDD976D718E454347F954F3ED4B1F0049F3B6C +BEA64FFA725601003AA4E475B8B602C941519BA3AA16C810E5B0AA3FEA7EDCDA +45FBE86E272C2328358A2CDE72CE5D9FC166D50106A57EB59BB433D4B9E3EF7E +D791632AB920FAB1F6758650A2E84F1B390182F6BA5610AB8638A376BC3A8803 +4FA79C2565B825E53922C4CC42451731FBFC3AB9B30BDFD34BBB621A18F6B271 +E24F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI5 +%!PS-AdobeFont-1.1: CMMI5 1.100 +%%CreationDate: 1996 Aug 02 08:21:10 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 60 /less put +dup 98 /b put +dup 109 /m put +dup 110 /n put +dup 114 /r put +readonly def +/FontBBox{37 -250 1349 750}readonly def +/UniqueID 5087380 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633 +89DE8BB201D5DB4627484A80A431B6AFDBBBF23D4157D4AFE17E6B1C853DD417 +25F84CD55402AB88AB7EEFDEDBF2C2C731BD25567C53B474CCF739188A930039 +098A197F9C4BE7594D79442B2C8A67447DE44698321145D7689B91EF235EA80E +B600AA8E238064F154284096C4C2554EFE8DDF13AFF8D3CE30E0999375C0FEE6 +F992DEA5FC3897E2CC8B7A90238E61E41622DE80F438DD994C73275CC52249D9 +F6686F87F394FB7BB668138B210BEC9E46415A1B58C990B81E7D7DD301143517 +4C2A259D2A0A1E200F8101469C10D7D537B0D4D39296A9AB3F132DA9A3B459B0 +F850E2B3A03BDCB35AEF82285D19C38F474FB414F8EC971B994D1C7DD753B271 +2B71549DF497C665DF0F266988209D9EB616E4D9BA229FF984E7A886DB01FD21 +48ED2E4859FD6416C2CE52537464EA884C8C9C2D1083E2B83BE4B766474C23B6 +6E8EC5003200AB10514BB44D14CA700416AB6B2683E80862E7D5B49A05526A32 +554BB23AB8B0824BBA198E3825CE82380CC0FECF46651E3E5D77F09465E73164 +20342822F29572BC7F73F2C3BF95ED3BB6FDEADC20C6AC866C4F2C679594D7E8 +8D944704A3C5D771DC39503BECAB89F34D8CDB8FDB91AFE21F3F0260D05E90C5 +73E2C13DFA022C4522E5918EE25038A0498FBB530DA33B0AE238B1C6ED03FC04 +2BFED8236E07820C5BAB411EAE1B31D93A2FA7C374B1725FEC359ABCB88E2C89 +214529A263D795AACB0B95A3AB2F4E08EF350C282CE521716DBB06E5B8291B3F +5D4ACA230FA192F64BC902A4C8842C0F916F92FBD002ADD408BF0401D0284FBB +F05D4C6DB631420747CC902C5E1617E6573612FB26C8378DF41FFB5048D3CF06 +4893DBA48EF4B043D760F60C75712169D16C83EE020C45369E443E853E1809DD +F395B812067D6FDBD26111B34F42C21036AF952D0D767FD17F6959D9FDD46005 +D64FFF54772B50BB9B173AE79702981F58F9F235C591F476A31852174DF0619C +A470359153DC32610E782B204E7945515464DACE9099B81EEECC7EBD4B5126AF +C3FD9DDFB329AF1C95C41FA4A5F6958869509A23BD7210386329771FA46FF926 +0E54AC35106253EE140449425A8670E1F92B178A02A58EB57540F4BD8110E548 +BB584EA6D625C5F5FE0124A98E49915F1A1B95D2125874360EED1C4379FEF3C6 +90E5780C20309F11F2F23FAD635C44BA030B39EFF083A3ECCDD2641DC82D3B44 +B3AB94ECA6CEAEFF2F4DBB525A310BB2F5922D686A6BE4BC3EF493A77F207C36 +3F17867E5EDD171D420525FFE9E735D6969D1D922C4FBD758C77DA56F5EA2C73 +30D988D88E57279067362E614076FC9BF56DD9752DE0A6AE008AA13ADC932317 +AF9AEB94A166F6731A63810C91EC27A59565A4EE9C656EF838504E41543A2A5A +F906CAEF3EAFAF32FE47125AB7C5200DE07A5CBBD396DEF418EB33D294B3B5A6 +8975DF98DF9D8F626D934C636DDDFF1F32F2A6E7E3F251D6D4EFF248749D647A +3205BAD59E8FB37B4AB62921B35EE90A6028288CEDEEC0BBA5CB4E4C5416678B +97BAB1E3DED0AC960F54A05BBA0F499B34693E3E35B93C4C6CD03BA93A867C72 +19004C31E3D9260DBA0B39629F04AC223ADA686456BE4A39B6B0A6AA3A82761F +A91B55C8D739FCE778DD7B600343CC0887C7EBA0526803BB7B8B01A840D2F6AF +B645E09CE9DDAA8C4536CC128BE50B02AA42C772856C4E3DF4449F64F2F686A1 +DB490B82991EAE713ADB5D9A5ACC71A3BA8D1349FC4F19B488510AA9BD9009E9 +6271F5E218E7B0B7E71FF755F7086A0A9E88001F6DE03014FBF3A5A7ADC24E63 +AB523F19F0AA74EE7BFE9099A4F129FC3B49CBF2D904A0107359C228F7BF86A0 +D4161E0161028D2179547F6FF57FC0E668598ACCF2EF0ABAD64658F71B9D96FE +4720E5AC7452453069C71A1FD14AC600BB4305DE99E2B4011EFD984150DBFAFC +11763ACC7FCCC263186141BFBF37F6D86804042ED4F4B63CF0D1362E47552BCA +EF8751505865576BAA825B983A69A25A9BF5C37EA5BD858CF37E3463F8980C27 +24F008C1283FEED6203ABE5D2ADD32750CEE3F965CDF7C11350D291EBCB5A061 +ACD2C5F9264189DD315A34C7B4AC24BDC6F64B19F46EF7BC668D16C281AA0792 +274E1F59B81B265469CACA001AD0663B39FE497BD7ADBB15D082C7681B80D366 +75A4A58BC3A08C78D447B077A3C637E57B6AAEB5DDABB482CAF862E23EFB5D12 +87FA4E793BA9D5AEB3ABD1A74A69BD6EA7A0102B948CEFACBA888FEEBA9FD3D9 +2140C77970BBA646E114CC3A823E9B7DDB1DDADA520834859BDD6022F9A70240 +3DDD42303D3F21BBD2091F3CEE6E89422FEA090DE35A3B56EE224A3F791B8408 +1DE1FD6C9AF1A30758745DA9E51B74C5C23CAFE3A9E78F11303E3EAC44A826AB +6668E60A797CD6BC94ED41196F76E569792021517197470E9282816569B42C2A +5B63C36484B7F705DBB93DACE05BEE94E9BCBD8EF096BF1F887C6B2F3E48B7D4 +C5CEB33C6C9AD59C465A30A67FD57DACF74D10C84BE661955DB25E5341E43FBE +79EFC72FBD73DA751592808646801BC45E63417613D06DC6C7098D47A8CBEB81 +E6BD81A2C05449BF829811D09BDE3368E93D1204AD42CEE2E3FB50921E2D576A +C653F8532A5FDE6144281823879EFBA5B59C918EBE1FD03DE5E708D513EC556F +96A897E7755013DA4CF41631F7CDCB6F28D0D2CA490ACD3CA00AF0C22EB3495F +F72AE5445320CA1A5B0EB3CF47D04D61E2DF1C451AF8AEECB26F7D1838607A1E +A72BA038157C6FAE509038A489D05C05382C114D88221BE4BB01B907C230BAD7 +27135348789BED5E7F0350C7A8D0816D1FC90426E589B4C0EF792A7E0B37F97E +16C7EA8F88BDB981A6D8A601C235859CB2FE9FEF8CFBF4291E16B66CAAE9297C +B168E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 39139632 55387786 1000 600 600 (2dgrafiken.dvi) +@start /Fa 254[23 1[{}1 83.022 /CMSY10 rf /Fb 139[22 +23 2[31 3[17 2[17 2[18 25 2[31 28 6[34 6[31 33[28 5[43 +1[22 22 40[{}15 41.511 /CMR5 rf /Fc 141[28 3[37 51 10[26 +37[45 60[{}5 41.511 /CMMI5 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 8018125 0 10255734 + 591 -543 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def 28.45274 0 -56.90549 + 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd exch def xEnd yEnd +L /yStart exch def /xStart exch def 0 setlinecap stroke stroke 3 dup +2 mod 0 eq false and exch 2 lt true and or { /viceversa -56.90549 +28.45274 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +-28.45274 def /maxTickline 42.67911 def /dT 1864679 65536 div viceversa +{neg} if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { xStart +} def /MaxValue { xEnd } def /logLines { false } def /LSstroke { 0 +setlinecap stroke } def /subLSstroke { 0 setlinecap stroke } def 0 +dT MaxValue { /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 +{ /dx exch def /x cntTick dT dx log mul add def x abs MaxValue abs +le { x minTickline moveto x maxTickline lineto } if } for subTwidth +SLW subTColor subLSstroke grestore stroke /dsubT 0 def } if dsubT abs +0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MaxValue abs le { cntsubTick tickstart STsize mul moveto cntsubTick +tickend STsize mul lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart moveto cntTick tickend lineto Twidth +SLW TColor LSstroke grestore } for /dT dT neg def /dsubT dsubT neg +def 0 dT MinValue epsilon viceversa { add }{ sub } ifelse { /cntTick +exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick +dT dx log mul add def x abs MinValue abs le { x minTickline moveto +x maxTickline lineto } if } for /dsubT 0 def subTwidth SLW subTColor +subLSstroke grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick +tickstart STsize mul moveto cntsubTick tickend STsize mul lineto +}{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore } for } +if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def 0 42.67911 0 -28.45274 + ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd exch def xEnd yEnd +L /yStart exch def /xStart exch def 0 setlinecap stroke stroke 3 dup +2 mod 0 eq true and exch 2 lt false and or { /viceversa -28.45274 +42.67911 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +-56.90549 def /maxTickline 28.45274 def /dT 1864679 65536 div viceversa +{neg} if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { yStart +} def /MaxValue { yEnd } def /logLines { false } def /LSstroke { 0 +setlinecap stroke } def /subLSstroke { 0 setlinecap stroke } def +0 dT MaxValue { /cntTick exch def logLines { gsave 1 10 subTNo div +9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MaxValue +abs le { x minTickline exch moveto x maxTickline exch lineto } if } +for subTwidth SLW subTColor subLSstroke grestore stroke /dsubT 0 def +} if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo +1 sub { cntsubTick abs MaxValue abs le { cntsubTick tickstart STsize +mul exch moveto cntsubTick tickend STsize mul exch lineto }{ exit } +ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW +subTColor subLSstroke grestore } if gsave cntTick tickstart exch moveto +cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore } for +/dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon viceversa +{ add }{ sub } ifelse { /cntTick exch def logLines { gsave 1 10 subTNo +div 9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MinValue +abs le { x minTickline exch moveto x maxTickline exch lineto } if } +for /dsubT 0 def subTwidth SLW subTColor subLSstroke grestore } dsubT +abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul exch moveto cntsubTick +tickend STsize mul exch lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart exch moveto cntTick tickend exch lineto +Twidth SLW TColor LSstroke grestore } for } if end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray -28.45274 -14.22636 7.11317 0 CLW mul +sub 0 360 arc closepath gsave 0.5 SLW 0 setgray 0 setlinecap stroke + grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray 14.22636 -14.22636 7.11317 0 CLW mul sub +0 360 arc closepath gsave 0.5 SLW 0 setgray 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray -42.67911 14.22636 7.11317 0 CLW mul sub +0 360 arc closepath gsave 0.5 SLW 0 setgray 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0.25 setgray [ -54.06003 34.1432 -2.84544 2.84544 +-54.06003 2.84544 /r 0.71114 def /Lineto { Arcto } def false 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 /xx1 +x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div +def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha +y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11 +sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos +mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known +{ ArrowInside } if pop pop } loop }{ /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 x12 x11 sub ArrowPos mul x11 add y12 y11 +sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside +} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11 +ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll +2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def +/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath +} ifelse gsave 0.5 SLW 0.25 setgray 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0.25 setgray [ -2.84544 11.38092 -2.84544 42.67911 +-54.06003 42.67911 /r 0.71114 def /Lineto { Arcto } def false 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 /xx1 +x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div +def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha +y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11 +sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos +mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known +{ ArrowInside } if pop pop } loop }{ /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 x12 x11 sub ArrowPos mul x11 add y12 y11 +sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside +} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11 +ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll +2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def +/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath +} ifelse gsave 0.5 SLW 0.25 setgray 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 14.22636 21.33955 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 14.22636 7.11317 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 21.33955 14.22636 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 7.11317 14.22636 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 20.38658 17.78296 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 17.78296 20.38658 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 20.38658 10.66977 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 17.78296 8.06615 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 8.06615 10.66977 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 10.66977 8.06615 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 8.06615 17.78296 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 10.66977 20.38658 14.22636 14.22636 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -14.22636 38.41138 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -14.22636 24.185 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -21.33955 31.29819 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -7.11317 31.29819 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -8.06615 34.85478 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -10.66977 37.45796 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -8.06615 27.7416 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -10.66977 25.13797 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -20.38658 27.7416 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -17.78296 25.13797 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -20.38658 34.85478 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -17.78296 37.45796 -14.22636 31.29819 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +591 -543 a + tx@Dict begin { -51.21501 36.98865 } PutCoor PutBegin end + 591 -543 a 548 -535 a Fc(b)574 -523 y Fb(11)591 +-543 y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { -5.69046 9.95863 } PutCoor PutBegin end + 591 -543 a 546 -533 a Fc(b)572 +-525 y(r)q(r)591 -543 y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { -42.67911 31.51135 } PutCoor PutBegin end + 591 -543 +a 579 -525 a Fa(\001)591 -543 y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { -35.56592 27.20801 } PutCoor PutBegin end + +591 -543 a 579 -525 a Fa(\001)591 -543 y + tx@Dict begin PutEnd end + 591 -543 a 591 +-543 a + tx@Dict begin { -28.45274 22.90424 } PutCoor PutBegin end + 591 -543 a 579 -525 a Fa(\001)591 -543 y + tx@Dict begin PutEnd end + 591 -543 +a 591 -543 a + tx@Dict begin { -21.33955 18.6009 } PutCoor PutBegin end + 591 -543 a 579 -525 a Fa(\001)591 -543 y + tx@Dict begin PutEnd end + +591 -543 a 591 -543 a + tx@Dict begin { -14.22636 14.29756 } PutCoor PutBegin end + 591 -543 a 579 -525 a Fa(\001)591 +-543 y + tx@Dict begin PutEnd end + 591 -543 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ -56.90549 -34.1432 -62.59595 7.11317 -56.90549 +48.36957 1. 0.1 0. /c ED /b ED /a ED false OpenCurve gsave 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ 28.45274 -34.1432 34.1432 7.11317 28.45274 +48.36957 1. 0.1 0. /c ED /b ED /a ED false OpenCurve gsave 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial 591 -543 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 28.45274 div 2.0 div +def 36.98865 -28.45274 /YA exch 28.45274 div def /XA exch 28.45274 +div def 36.98865 -1.42271 /YB exch 28.45274 div def /XB exch 28.45274 +div def /Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul +XA add def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 +mul def /@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add +def /@yTemp yMid @deltaY 2 mul sub def @xTemp @yTemp 28.45274 mul exch +28.45274 mul exch } false /N@@tempNode 10 {InitPnode } NewNode end +end + 591 +-543 a 591 -543 a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if /rotAngle exch +def end + 591 -543 a 591 -543 a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 1.0 add 28.45274 div Yc 0.0 add 28.45274 div 28.45274 +mul exch 28.45274 mul exch } PutCoor PutBegin end + 591 -543 a 591 +-543 a + tx@Dict begin rotAngle RotBegin end + 591 -543 a 591 -543 a + tx@Dict begin RotEnd end + 591 -543 a 591 -543 a + tx@Dict begin PutEnd end + 591 +-543 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def 0.5 SLW 0 setgray /ArrowA { +moveto } def /ArrowB { } def /ArrowInside { } def [ tx@NodeDict begin +tx@NodeDict /N@@tempNode known { /N@@tempNode load GetCenter } { 0 +0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY add 28.45274 mul +exch 28.45274 mul exch XA @deltaX add YA @deltaY sub 28.45274 mul +exch 28.45274 mul exch 36.98865 -28.45274 /r 5.69054 def /Lineto { +Arcto } def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () +length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 sub Pyth +def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def +ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha +sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 0 setgray +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ 36.98865 -1.42271 XB @deltaX add YB @deltaY +sub 28.45274 mul exch 28.45274 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 28.45274 mul exch 28.45274 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def false NArray n 0 eq not { n 1 +eq { 0 0 /n 2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA +x1 y1 /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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath end + +@endspecial +591 -543 a + tx@Dict begin { 48.36957 -8.5359 } PutCoor PutBegin end + 591 -543 a 11 x Fb(Zeile)19 b Fc(r)c Fb(+)e(1)591 +-543 y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { 48.36957 -15.6491 } PutCoor PutBegin end + 591 -543 a 10 x Fb(bis)19 +b Fc(m)p Fb(\(falls)591 -543 y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { 48.36957 -22.76227 } PutCoor PutBegin end + +591 -543 a 10 x Fc(r)f(<)f(m)p Fb(\))591 -543 y + tx@Dict begin PutEnd end + 591 -543 +a 591 -543 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 28.45274 div 2.0 div +def 36.98865 1.42271 /YA exch 28.45274 div def /XA exch 28.45274 div +def 36.98865 42.67911 /YB exch 28.45274 div def /XB exch 28.45274 div +def /Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul XA +add def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 mul +def /@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add def +/@yTemp yMid @deltaY 2 mul sub def @xTemp @yTemp 28.45274 mul exch +28.45274 mul exch } false /N@@tempNode 10 {InitPnode } NewNode end +end + 591 -543 a 591 -543 a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if /rotAngle exch +def end + 591 -543 a 591 -543 +a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 1.0 add 28.45274 div Yc 0.0 add 28.45274 div 28.45274 +mul exch 28.45274 mul exch } PutCoor PutBegin end + 591 -543 a 591 -543 a + tx@Dict begin rotAngle RotBegin end + 591 -543 a 14 x Fb(Zeile)i(1)h(bis)f +Fc(r)591 -543 y + tx@Dict begin RotEnd end + 591 -543 a 591 -543 a + tx@Dict begin PutEnd end + 591 -543 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.5 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def 0.5 SLW 0 setgray /ArrowA { +moveto } def /ArrowB { } def /ArrowInside { } def [ tx@NodeDict begin +tx@NodeDict /N@@tempNode known { /N@@tempNode load GetCenter } { 0 +0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY add 28.45274 mul +exch 28.45274 mul exch XA @deltaX add YA @deltaY sub 28.45274 mul +exch 28.45274 mul exch 36.98865 1.42271 /r 5.69054 def /Lineto { Arcto +} def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length +0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 0 setgray 0 setlinecap +stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ 36.98865 42.67911 XB @deltaX add YB @deltaY +sub 28.45274 mul exch 28.45274 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 28.45274 mul exch 28.45274 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def false NArray n 0 eq not { n 1 +eq { 0 0 /n 2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA +x1 y1 /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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath end + +@endspecial 591 -543 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 28.45274 div 2.0 div +def -54.06003 -31.29819 /YA exch 28.45274 div def /XA exch 28.45274 +div def -1.42271 -31.29819 /YB exch 28.45274 div def /XB exch 28.45274 +div def /Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul +XA add def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 +mul def /@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add +def /@yTemp yMid @deltaY 2 mul sub def @xTemp @yTemp 28.45274 mul exch +28.45274 mul exch } false /N@@tempNode 10 {InitPnode } NewNode end +end + 591 +-543 a 591 -543 a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if 90. add /rotAngle +exch def end + 591 -543 a 591 -543 a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 0.0 add 28.45274 div Yc -4.0 add 28.45274 div 28.45274 +mul exch 28.45274 mul exch } PutCoor PutBegin end + 591 -543 a 591 +-543 a + tx@Dict begin rotAngle RotBegin end + 591 -543 a 420 -533 a Fb(Spalte)h(1)g(bis)f Fc(r)591 +-543 y + tx@Dict begin RotEnd end + 591 -543 a 591 -543 a + tx@Dict begin PutEnd end + 591 -543 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.5 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def 0.5 SLW 0 setgray /ArrowA { +moveto } def /ArrowB { } def /ArrowInside { } def [ tx@NodeDict begin +tx@NodeDict /N@@tempNode known { /N@@tempNode load GetCenter } { 0 +0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY add 28.45274 mul +exch 28.45274 mul exch XA @deltaX add YA @deltaY sub 28.45274 mul +exch 28.45274 mul exch -54.06003 -31.29819 /r 5.69054 def /Lineto +{ Arcto } def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if +() length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 sub +Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add +def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 +Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ -1.42271 -31.29819 XB @deltaX add YB @deltaY +sub 28.45274 mul exch 28.45274 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 28.45274 mul exch 28.45274 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def false NArray n 0 eq not { n 1 +eq { 0 0 /n 2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA +x1 y1 /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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath end + +@endspecial 591 -543 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 28.45274 div 2.0 div +def 1.42271 -31.29819 /YA exch 28.45274 div def /XA exch 28.45274 div +def 28.45274 -31.29819 /YB exch 28.45274 div def /XB exch 28.45274 +div def /Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul +XA add def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 +mul def /@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add +def /@yTemp yMid @deltaY 2 mul sub def @xTemp @yTemp 28.45274 mul exch +28.45274 mul exch } false /N@@tempNode 10 {InitPnode } NewNode end +end + 591 +-543 a 591 -543 a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if 90. add /rotAngle +exch def end + 591 -543 a 591 -543 a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 0.0 add 28.45274 div Yc -4.0 add 28.45274 div 28.45274 +mul exch 28.45274 mul exch } PutCoor PutBegin end + 591 -543 a 591 +-543 a + tx@Dict begin rotAngle RotBegin end + 591 -543 a 440 -533 a Fb(Spalte)h Fc(r)15 b Fb(+)e(1)591 +-543 y + tx@Dict begin RotEnd end + 591 -543 a 591 -543 a + tx@Dict begin PutEnd end + 591 -543 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.5 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def 0.5 SLW 0 setgray /ArrowA { +moveto } def /ArrowB { } def /ArrowInside { } def [ tx@NodeDict begin +tx@NodeDict /N@@tempNode known { /N@@tempNode load GetCenter } { 0 +0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY add 28.45274 mul +exch 28.45274 mul exch XA @deltaX add YA @deltaY sub 28.45274 mul +exch 28.45274 mul exch 1.42271 -31.29819 /r 5.69054 def /Lineto { +Arcto } def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () +length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 sub Pyth +def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def +ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha +sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 0 setgray +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def [ 28.45274 -31.29819 XB @deltaX add YB @deltaY +sub 28.45274 mul exch 28.45274 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 28.45274 mul exch 28.45274 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def false NArray n 0 eq not { n 1 +eq { 0 0 /n 2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA +x1 y1 /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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath end + +@endspecial 591 -543 a + tx@Dict begin { 14.22636 -51.21501 } PutCoor PutBegin end + 591 +-543 a 455 -533 a Fb(bis)19 b Fc(n)g Fb(\(falls)591 -543 +y + tx@Dict begin PutEnd end + 591 -543 a 591 -543 a + tx@Dict begin { 14.22636 -56.90549 } PutCoor PutBegin end + 591 -543 a 507 -533 a Fc(r)f(<)f(n)p +Fb(\))591 -543 y + tx@Dict begin PutEnd end + 591 -543 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/06_2.pdf b/06_2.pdf new file mode 100644 index 0000000..5dcad4b Binary files /dev/null and b/06_2.pdf differ diff --git a/2dgrafiken/01_1_1.pst b/2dgrafiken/01_1_1.pst new file mode 100644 index 0000000..f6ede70 --- /dev/null +++ b/2dgrafiken/01_1_1.pst @@ -0,0 +1,33 @@ +\begin{pspicture}(-1,-1)(5,5) + %\psgrid[griddots=10,gridlabels=0pt, subgriddiv=0] + + %%%%%%%%%%%%%%%%%%%%%%%%Koor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(0,0)(4.5,4.5)%Schnittpunkt, x0, y0 x1,y1 + \rput[l](1.7,-0.8){$1.\ Koordinate$} + \rput[c](4.8,0){$x$} + + \rput[l](0.4,4){$2.\ Koordinate$} + \rput[c](0,4.8){$y$} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor / Gerade%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=red, linewidth=0.1pt](0,0)(3,3) + \rput[c](3.0,-0.4){$a_1$} + \rput[c](-0.4,3){$a_2$} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%Hlfslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](3,-0.2)(3,3) + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](-0.2,3)(3,3) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pfeil%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline{->}(3.5,2.5)(3.1,2.9) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Kreuz %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=green] (2.9,3.1)(3.1,2.9) + \psline[linecolor=green] (2.9,2.9)(3.1,3.1) + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Beschriftung am Pfeil %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \rput[l](3.3,2.3){Punkt} + \rput[l](3.2,1.9){$(a_1, a_2)$} + \end{pspicture} diff --git a/2dgrafiken/01_1_2.pst b/2dgrafiken/01_1_2.pst new file mode 100644 index 0000000..16e8bf4 --- /dev/null +++ b/2dgrafiken/01_1_2.pst @@ -0,0 +1,27 @@ + \begin{pspicture}(-1,-1)(5,5) + %\psgrid[griddots=10,gridlabels=0pt, subgriddiv=0] + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Koordinaten%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(-0.0,-0.0)(4.5,4.5)%Schnittpunkt, x0, y0 x1,y1 + \rput[c](4.8,0){$x$} + \rput[c](0,4.8){$y$} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=red, linewidth=0.1pt]{->}(0,0)(3,3) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Hilfslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](3,-0.2)(3,3) + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](-0.2,3)(3,3) + \rput[c](3.0,-0.4){$a_1$} + \rput[c](-0.4,3){$a_2$} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%Pfeil mit Beschriftung%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline{->}(3.5,2.5)(3.1,2.9) + \rput[l](1.8,2.3){$Vektor\ ("Pfeil")$} + \rput[l](2.5,1.9){$\vec{a}$} + + + + + \end{pspicture} diff --git a/2dgrafiken/01_1_3.pst b/2dgrafiken/01_1_3.pst new file mode 100644 index 0000000..d67e6db --- /dev/null +++ b/2dgrafiken/01_1_3.pst @@ -0,0 +1,38 @@ +\begin{pspicture}(-1.65,-0.85)(8,5.9) +%\psgrid[griddots=2,gridlabels=0pt, subgriddiv=2] +\psaxes[Ox=0,Dx=3,Oy=0,Dy=3,linewidth=0.1pt]{->}(0,0)(0,0)(7.5,5.5)%Schnittpunkt, x0, y0 x1,y1 + + + + +\psline[linecolor=red, linewidth=0.5pt]{->}(0,0)(5,1) +\psline[linecolor=orange, linewidth=0.5pt, linestyle=dashed]{->}(5,1)(7,5) +\psline[linecolor=orange, linewidth=0.5pt]{->}(0,0)(2,4) +\psline[linecolor=orange,linewidth=0.1pt,linestyle=dashed](2,-0.4)(2,4) +\psline[linecolor=orange,linewidth=0.1pt,linestyle=dashed](-0.4,4)(2,4) +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](5,-0.4)(5,1) +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](-0.4,1)(5,1) +\psline[linecolor=red,linewidth=0.5pt,linestyle=dashed]{->}(2,4)(7,5) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](-0.4,5)(7,5) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](7,-0.4)(7,5) +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(7,5) +\rput[l](1.2,1.9){\color{orange}$\vec{a}$} +\rput[l](3,3.5){\color{blue}$\vec{a}+\vec{b}$} +\rput[l](4,1.25){\color{red}$\vec{b}$} +\rput[1](2.0,-0.65){\color{orange}{$a_1$}} %%a1 +\rput[1](-0.85,4){\color{orange}{$a_2$}} %%a2 +\rput[1](5.0,-0.65){\color{red}{$b_1$}} %%b1 +\rput[1](-0.85,1){\color{red}{$b_2$}} %%b2 +\rput[1](7.2,-0.65){\color{blue}{$a_1+b_1$}} %%c1 +\rput[1](-1,5){\color{blue}{$a_2+b_2$}} %%b2 +%\psline[linearc=1.5](4,2)(3.75,3)(3.6, 3.75)(3.5,5)(3.5,5.5)%(2.5, 3.15)(2.75, 3.45)(3,3.75)(3.25, 4)(3.35, 4.5)(3.45,5) +%\psline[linewidth=0.75pt]{->}(4,2)(4.1, 1.75) + +\rput[l](4,2){\color{white}x\rnode{a}x } + +\rput[c](3.5, 5.6){Paralle\Rnode[e]{ae}logramm} + + +\nccurve[nodesep=3pt,angleA=-90,AngleB=90]{->}{ae}{a} + +\end{pspicture} diff --git a/2dgrafiken/04_1_1.pst b/2dgrafiken/04_1_1.pst new file mode 100644 index 0000000..867354f --- /dev/null +++ b/2dgrafiken/04_1_1.pst @@ -0,0 +1,13 @@ +\begin{pspicture}(-0.1,-0.1)(7,1.3) + +%\psgrid(0,0)(7, 1.3) + +\rput[l](0.1,1.1){$\vec a \rnode{a}\times \vec b = \left( {a_2 b_3 - a_3 b_2 ,a_3 b_1 - a_1 b_3 ,a_1 b_2 - a_2 b_1 } \right)$} + + +\rput[l](0.1,0.1){"Kr\Rnode[e]{ae}euz"} + +%\nccurve[angleA=0]{->}{ae}{a} +%\ncbar[nodesep=1pt]{->}{ae}{a} +\ncline[arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/04_1_1.tex b/2dgrafiken/04_1_1.tex new file mode 100644 index 0000000..d57857b --- /dev/null +++ b/2dgrafiken/04_1_1.tex @@ -0,0 +1,10 @@ +\begin{pspicture}(-0.1,-0.1)(7.5,1.85) + +%\psgrid(0,0)(7.5, 2) + +\rput[l](0.5,1.6){$\vec a \rnode{a}\times \vec b = \left( {a_2 b_3 - a_3 b_2 ,a_3 b_1 - a_1 b_3 ,a_1 b_2 - a_2 b_1 } \right)$} + + +\rput[l](0.5,0.6){"Kr\Rnode[e]{ae}euz"} \rput[l](0.25,0.1){Kreuzprodukt} + +%\nccurve[angleA=0]{->}{ae}{a} %\ncbar[nodesep=1pt]{->}{ae}{a} \ncline[arrows=->,linecolor=red]{ae}{a} \end{pspicture} diff --git a/2dgrafiken/04_2_1.eps b/2dgrafiken/04_2_1.eps new file mode 100644 index 0000000..fe314f0 --- /dev/null +++ b/2dgrafiken/04_2_1.eps @@ -0,0 +1,2762 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Sun Jun 15 07:29:41 2008 +%%BoundingBox: 76 725 86 737 +%%DocumentFonts: CMMI10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.15:0729 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /alpha put +dup 97 /a put +dup 98 /b put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176671A33FC55340CD04C2DE46FD812FC2711A85F74A8C600229F212AC85 +CBA7D09BA916377A99C88B1B9923D78FECFEB1649CAF0855BD1F39D4257E7BAD +FA7ABC385A1E8FBDB7317D387B1D356E9ABAF5AA4B7DBE0DD8A5CDD932BF7C15 +8717E43921266B3BDEE504361F2356A9FA43744D24A3A8FD5B5DEF6E3C9BE745 +B8D61692BDA24871AE3648A0E89E824C038065F008CBC45EE9E77D9BB7B90C5A +EA0E901E746C26250B86CF6ADDAC1CE25B6187A1CBBDE513399055B6B38DE66F +195CE35E0A4F0CF1FC060C1C684E741CFE13E0D864C2E87027F540951E4CB0EB +2D290A5140BD48CA9E33F70DC3E80902561332E4EAA8F7E42C019A7D5DE26306 +EF3293C602B0153023AC687B3B0709268F78C9AC12820101CD025074550D32A8 +86A3E2950D8DECF364AAB131B0BDA998088BDC4B78D348E258C575D1EF2F7D72 +C0BC60BA258EEBA583BAA7ABD9C44E41CAAA488BBDF0BEAAC15E3DCCF0133BD4 +F354863A2F0C2FA86282D0A43C271D97A3809F71713E226BE0F10A322AA2C292 +EACDE7DA5172009745DFCE508FEA0B784BE71BC56979BD8BAF2DAD2B2270519A +13BF83F5D2B61E7457F424A5A0FC410381531FB2B9B65503EE4802F6A808A65A +9AF872234CCF024C4DA34D0287A105790EDE1C6563047AC710A91AEBE9B2EF49 +3785ECDBCE6E1EA59178F7139D58F9158B28918596557DE795441607638F8B58 +7B4466E37F9F3C146127EEEC50B1C725C1B11182BF69E9DD028F6D2390603C79 +68308F80CA0C895C47FD149BA52A20A47AD26D499E0C1BAD4D7EDBE4AC4AF2C5 +DC7EBE0C5332E563E69CDBC62188F16EB09830F1B8D14C837D7A0E3260218423 +6AC2987F502EEA7711FDFF766DAEEA00922F43E98510BDE1294994DFD3789364 +F618D43B2186CF9F18BDFABF5FD2AABB8CE59454BD6A7836B94E30886BB7DB95 +43CDA72610F97C11C545516F4C463F1A781FE1776CF2C59CA968E6A5D3FFEE8C +1CD54ADB3CB1D820F6DC4BBED866611FEC18EBCF44483F2900BD4BEB91E1B8EB +13D019D38E454901A5BB47172503F64B7BF9EB6F8085EF1DCA23A2B5F2242E1A +D6E1D20ADD7E5BA9428F8B91D7A6F46ECCAB38E4E350F3A2B307CBE301527789 +C2F116D93021BEC662F8A2F0C2CA89407350849B9884B58895DAC32C003F83F3 +BFA61E1E6E7129340786D31D438461F36F2160267363EF46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 129[42 27[36 44 85[53 11[{}4 83.022 /CMMI10 +rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 5034627 0 11001622 + 71 -94 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray gsave 0.4 SLW 0.5 + setgray 0.0 0.0 159.33553 65.44139 0.0 0.0 28.45274 abs 28.45274 abs +5 0 {} 0 /Helvetica findfont 0 scalefont setfont Grid grestore gsave +0.8 SLW 0 setgray 0.0 0.0 159.33553 65.44139 0.0 0.0 28.45274 abs +28.45274 abs 1 0 { 0 setgray } 10.0 /Helvetica findfont 10.0 scalefont +setfont Grid grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 133.7278 0.0 0.0 0.0 /Lineto /lineto load def false 0 +setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 19.91682 56.90549 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 153.64464 56.90549 19.91682 +56.90549 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 153.64464 56.90549 133.7278 +0.0 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial 71 -94 a + tx@Dict begin { 71.13185 -7.11317 } PutCoor PutBegin end + 71 -94 +a 44 -65 a Fa(~)-37 b(a)71 -94 y + tx@Dict begin PutEnd end + 71 -94 a 71 -94 a + tx@Dict begin { 2.84544 31.29819 } PutCoor PutBegin end + 71 +-94 a 44 -76 a Fa(~)53 -54 y(b)71 -94 y + tx@Dict begin PutEnd end + 71 -94 a 71 -94 +a + tx@Dict begin { 15.6491 11.38092 } PutCoor PutBegin end + 71 -94 a 0.6 0.2 0.5 TeXcolorrgb 44 -77 a Fa(\013)p +Black 71 -94 a + tx@Dict begin PutEnd end + 71 -94 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0.6 0.2 0.5 + setrgbcolor /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale + false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul +/a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg +a neg rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow + } def /ArrowInside { } def 0.0 0.0 /y ED /x ED /r 28.45274 def /c +57.2957 r Div def /angleA 0. 0.0 c mul 2 div add def /angleB 70. 0.0 +c mul 2 div sub def x y r angleA angleB { ArrowB } r 0 gt { { sub } +} { { add } } ifelse ArcArrow arc gsave 0.5 SLW 0.6 0.2 0.5 setrgbcolor +1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/04_2_1.pdf b/2dgrafiken/04_2_1.pdf new file mode 100644 index 0000000..8273223 Binary files /dev/null and b/2dgrafiken/04_2_1.pdf differ diff --git a/2dgrafiken/04_2_1.pst b/2dgrafiken/04_2_1.pst new file mode 100644 index 0000000..91a4cec --- /dev/null +++ b/2dgrafiken/04_2_1.pst @@ -0,0 +1,27 @@ +\begin{pspicture}(-0.3,-0.4)(5.6,2.3) + +\psgrid(0,0)(5.6,2.3) +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(4.7,0) + +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(0.7,2) + +\psline[linecolor=red, linewidth=0.5pt, linestyle=dashed](0.7,2)(5.4,2) + +\psline[linecolor=red, linewidth=0.5pt, linestyle=dashed](4.7,0)(5.4,2) + +%\rput[c](0.25,1.15){\color{blue}\tiny{+}} + +\rput[c](2.5,-0.25){$\vec{a}$} + +\rput[c](0.1,1.1){$\vec{b}$} + +%\psline[linecolor=red, linewidth=0.5pt]{->}(2.1,1.1)(0.3,0.1) + +\rput[c](0.55,0.4){\color{lila}$\alpha$} + +\psarc[linewidth=0.5pt, linecolor=lila]{->}{1}{0}{70} + + + + +\end{pspicture} diff --git a/2dgrafiken/04_2_2.eps b/2dgrafiken/04_2_2.eps new file mode 100644 index 0000000..efd7b36 --- /dev/null +++ b/2dgrafiken/04_2_2.eps @@ -0,0 +1,2876 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Sun Jun 15 20:42:24 2008 +%%BoundingBox: 76 725 86 737 +%%DocumentFonts: CMMI10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.15:2042 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 6 2007-12-29 21:41:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 nanomètres +%% lambda min=380 nanomètres +%% 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 +% +/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 +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176671A33FC55340CD04C2DE46FD812FC2711A85F70616E4B2F7C0EFA18D +28C25F2510A63A3C55C2EEC5CAD04051CCE773EC997373A7B72E99B1C581B9D6 +F945B833780834A8A81AC913CD0390BE72A97E66AA9DBBCC4547C3E48FB55E97 +0FCD36A15C764735DCC35D6AFE72FA07AC862F705D3836DEFE836EBB286E0B5E +DB9AD3E936F8850A7A0726CE409780A458A3269A7647BF7D4F3A207F2228BD5E +856D37106F4FBAFB0BAE752A491EF3B250840A2CC66035A1E8DFB435F0525F3B +13C37EA9D2C9BDE25A0C0E03252CFFDFBBC06B239255218247AE43B1CAF3EA34 +7972BA33216135473B1C44505100A33E22C85403BD010914105135C26B475846 +B0F79C0BF9CFF273FF8EF8CFECDA6EB9D37C4B66CB296EC0355634B424BECD8D +CD1F4D572E833BF460F7DE54409FE74259DA13338C4F4C30135FE5CFDE245D26 +CC39E3DA858C00E6B875C7BC1D7621518575F87C0C45F3FD6A32FA26665C9265 +751DA393EECB13DE9326F6D624AE1AA812F92804DE3AE43D1BE3A8A90DE61FFA +8357D3FB0960DE6674D65CD9B3174578A45CB0A7E8E64895B945AA03E200EAD4 +93671C69E5E40F67A1C007C6D779205653F987DEC8B887429B9C03B8A4ABD3FB +C4DF9310EBA9E35A3E10E808948D15BD8E966029ED72862E514304DEBAB74A68 +105BEA1C0B172F902D71B29C952891B021BA211D87EFCC7A9B4E864BCE1DD01F +4BFE59A582DA9CBE5EAC7B2EE2EA63D41F16E532CBBB6212FD19823F848F94A6 +9704B26FDBCE7C254FA5AC1ABB4DF1716299406FBE6420208406672F0B4A87AB +C78DF3A6034AF589DAC23499334EBDC4FCC900DDB61E052B4061303006240A36 +BAEDB3001938385F6F365CA45F7D4B8493E51BD40B2A698D96FCBC103B5FD0DB +3D1F103B6D2DFCB9229E625B4E8140EC6FF29F016A3EB3127EB8D633BE5FE9EE +B86906ABA6CE7A6C58700552F4AD7DD89BD02804286271D5A6FE71A13D2EEC2A +1EC3D50CC3FBB69699C00E293417CDD37583715E5EF00A977EE19BC69AB6BC4C +6607B5ECBEA5975FD8FA8C8E043141D42274CBDA45ADC444C7E7619621981545 +667B928A997EF3BB9A3CF9D53A04D95FDDD1E3278A252E86F68AE466AA9F6F64 +7A4926C22E499020BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 129[42 26[36 36 44 97[{}4 83.022 /CMMI10 rf +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 5966966 0 12866301 + 71 -94 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 133.7278 0.0 0.0 0.0 /Lineto /lineto load def false 0 +setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 19.91682 56.90549 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 153.64464 56.90549 19.91682 +56.90549 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 153.64464 56.90549 133.7278 +0.0 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 28.45274 17.07181 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 162.18054 17.07181 28.45274 +17.07181 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 162.18054 17.07181 133.7278 +0.0 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 182.09738 73.9773 153.64464 +56.90549 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 182.09738 73.9773 162.18054 +17.07181 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 48.36957 73.9773 19.91682 +56.90549 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 48.36957 73.9773 28.45274 +17.07181 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 182.09738 73.9773 48.36957 +73.9773 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial 71 -94 a + tx@Dict begin { 71.13185 -7.11317 } PutCoor PutBegin end + 71 -94 a 44 -65 a Fa(~)-37 +b(a)71 -94 y + tx@Dict begin PutEnd end + 71 -94 a 71 -94 a + tx@Dict begin { 4.26773 31.29819 } PutCoor PutBegin end + 71 -94 a 48 -65 a Fa(~)g(c)71 +-94 y + tx@Dict begin PutEnd end + 71 -94 a 71 -94 a + tx@Dict begin { 14.22636 17.07181 } PutCoor PutBegin end + 71 -94 a 44 -76 a Fa(~)53 -54 +y(b)71 -94 y + tx@Dict begin PutEnd end + 71 -94 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/04_2_2.pdf b/2dgrafiken/04_2_2.pdf new file mode 100644 index 0000000..bfdf3cf --- /dev/null +++ b/2dgrafiken/04_2_2.pdf @@ -0,0 +1,121 @@ +%PDF-1.4 +%Çì¢ +5 0 obj +<> +stream +xœu“±nÛ@ †÷{ +Žñ öHäZ Э±7#CëÀ^â!íЭÏ^žª6‰¥BdSùó~Š/P‘ Žkyž®åÃÁåGÿ¾_ +‰vªŠÒ®…3æ/"C¯ϯŒTdm#Ò*¡ö7̹4 'aø¹¸/‘Âü»n$î »£k@o†V%©é¬Ð½¡IBܳ;eèªsÀ z²³þZlío+gC+½JíWlC³¡i hêk wNZL0%Ó5·H\IJ}ÍHMmDò Æl†4GÎå*(îÂXEà1ž¥M7×Uö£JÅêêÓªJº”¹í*Oe9óÐ7}ŽìEtíÁ}ãKBQŠkË´ºIܦVƒQKâs„–§™ÀÚ*ÿ÷h›Éà›WÛÝT¸ÏûR^ +ÍûËãt…‡Ü!‡À蜚‡ó2 ëØÛXä܇õï~íššéÝ×ÝD(!ÖŸËÔ;’´âùÙ$üô>í¦ŠÞ;ñ€[£F0ç¦ý¥'E÷ åÐku˜8»¨ùQÌÌ·ÝÔ°©z æÓ¡|Éë7lÁÐçendstream +endobj +6 0 obj +436 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +10 0 obj +<> +endobj +11 0 obj +<> +endobj +8 0 obj +<> +endobj +13 0 obj +<> +endobj +9 0 obj +<> +endobj +12 0 obj +<>stream +xœ%[HSqÇÿ7óhcZ0HªJidäC„EÎ"ÍØ¤4¦žtË]ÚEÙtsº‹Û~ §nÓæeMs–2/MÓR¡Ä²ÛC>ÔKÑå¡·ˆsÆy°Ioßï×χ/Fü„1N“H¥¥…'vb.»³R؃<°&R5© à€ÿ8qa/S²‡9ÉœÌB|Œ/–ßIÔ£VÞШ§ò$ùTaQÑ)ê¼’ÖÊëd*J*Ó7ÒJ™>Yš¨+ê:9­7§Î75Q•; UIëhm3]ÿ-Q+5=­¥¤êzZ«j¦ëôj-Bˆ_'«µ T‚Š‘{PjR¥!Þ‡‡ñŸm,½†„Ûxö%²F˜Ø·xÏo1ª_<–b³D­`³¹µÍm;¡¶Ž<ŠŽÅWnΖpû¹l.‡;TøêÌ&çëßþG¯ÃévÛâ3y†v Ê5+óáß±·ääúÚÓ5ˆÁœå¾†n§d“,¶ ‚ã›<6ŠŒ³ªh \:—Åᬕ~¯von}²iÅ2LÃèèàÔÐÌÀðNpuxºÌ.±©ÌXQ „Æ5Žxû‚‹dpÁðÏ ½ï ­÷N€º‰¡ö€I×f0¸Äe\¿Èiw›éÖÕÚV5Uæµ'«SLæè3ròõÒlˆ÷‹·Ãã$“‡ÄŽþ—dn/àçŒõ±%ΉîAÀ¢/¶¹ïŠm«ŒD»BË^{‡½Sîlq_Ú«ºZ¡1ûØ é“Ád2ùLîëOWתš”â–³¢žxýÁ•K¡q f¢ÊË +.ÍH“ŠKÕ õ@ÈÑ­|G +Y;ðàUüu³1ö§ÈlQ¨“ÀŽ@GÀïëíñ‰ûC£‹‘Þî€ú!`÷Ù}†uØ6æöw ˜0;,6gßÁf’û¾Ëd„––a"…†Hâ\„‹ƒ»8Y0m2ãÓnqÿTXþ°G @èT²B¼ +endstream +endobj +14 0 obj +<>stream + + + + + +dvips\(k\) 5.96dev Copyright 2007 Radical Eye Software + +2dgrafiken.dvi + + + + + +endstream +endobj +2 0 obj +<>endobj +xref +0 15 +0000000000 65535 f +0000000755 00000 n +0000003655 00000 n +0000000696 00000 n +0000000540 00000 n +0000000015 00000 n +0000000521 00000 n +0000000820 00000 n +0000000921 00000 n +0000001219 00000 n +0000000861 00000 n +0000000891 00000 n +0000001438 00000 n +0000001130 00000 n +0000002252 00000 n +trailer +<< /Size 15 /Root 1 0 R /Info 2 0 R +/ID [<64427AC95772A9E01C6F071BDA5E197E><64427AC95772A9E01C6F071BDA5E197E>] +>> +startxref +3861 +%%EOF diff --git a/2dgrafiken/04_2_2.pst b/2dgrafiken/04_2_2.pst new file mode 100644 index 0000000..4a9b1dc --- /dev/null +++ b/2dgrafiken/04_2_2.pst @@ -0,0 +1,39 @@ +\begin{pspicture}(-0.3,-0.4)(6.6,2.8) + +%\psgrid(0,0)(6.6,2.8) +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(4.7,0) + +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(0.7,2) + +\psline[linecolor=blue, linewidth=0.5pt](0.7,2)(5.4,2) + +\psline[linecolor=blue, linewidth=0.5pt](4.7,0)(5.4,2) %, linestyle=dashed + +\psline[linecolor=red, linewidth=0.5pt, linestyle=dashed]{->}(0,0)(1,0.6) + +\psline[linecolor=red, linewidth=0.5pt, linestyle=dashed](1,0.6)(5.7,0.6) + +\psline[linecolor=red, linewidth=0.5pt](4.7,0)(5.7,0.6) + +\psline[linecolor=red, linewidth=0.5pt](5.4,2)(6.4,2.6) + +\psline[linecolor=red, linewidth=0.5pt](5.7,0.6)(6.4,2.6) + +\psline[linecolor=red, linewidth=0.5pt](0.7,2)(1.7,2.6) + +\psline[linecolor=red, linewidth=0.5pt ,linestyle=dashed](1,0.6)(1.7,2.6) + +\psline[linecolor=red, linewidth=0.5pt](1.7,2.6)(6.4,2.6) + +%\rput[c](0.25,1.15){\color{blue}\tiny{+}} + +\rput[c](2.5,-0.25){$\vec{a}$} + +\rput[c](0.15,1.1){$\vec{c}$} + +\rput[c](0.5,0.6){$\vec{b}$} + + + + +\end{pspicture} diff --git a/2dgrafiken/06_2.pst b/2dgrafiken/06_2.pst new file mode 100644 index 0000000..d19c999 --- /dev/null +++ b/2dgrafiken/06_2.pst @@ -0,0 +1,85 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-2.5,-2.3)(3,2.0) +\SpecialCoor +%\psgrid[%griddots=20, +%gridlabels=0pt, subgriddiv=10](-2,-1)(1,1.5) + +%\multido{\iX=0+30}{13}{\psline[linecolor=blue](1,1)(0.25cm;\iX)} +\psaxes[linewidth=0.5pt,linecolor=red,%ticks=none, +ticks=none, +labels=none +](0,0)(-2,-1)(1,1.5) %Mittelpunkt (linke Seite x,y 3/4 Quad) (rechte Seite x,y) + +\pscircle[linewidth=0.5pt](-1,-0.5){0.25} +\pscircle[linewidth=.5pt](0.5,-0.5){0.25} +\pscircle[linewidth=.5pt](-1.5,0.5){0.25} +\pspolygon[linewidth=0.5pt,linearc=.025,linecolor=darkgray](-1.9,0.1)(-0.1,0.1)(-1.9,1.2) +\pspolygon[linewidth=0.5pt,linearc=.025,linecolor=darkgray](-1.9,1.5)(-0.1,1.5) (-0.1,0.4) + +%Grundkreuz vier Einzellinien +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.5,0.75) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.5,0.25) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.75,0.5) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.25,0.5) +%re o +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.7165,0.625) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.625,0.7165) +%re u +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.7165,0.375) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.625,0.2835) +%li u +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.2835,0.375) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.375,0.2835) +%li o +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.2835,0.625) +\psline[linewidth=0.5pt,linecolor=orange](0.5,0.5)(0.375,0.7165) + +%Kreuz links +%Grundkreuz vier Einzellinien +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.5,1.35) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.5,0.85) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.75,1.1) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.25,1.1) +%re o +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.2835,1.225) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.375,1.3165) +%re u +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.2835,0.975) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.375,0.8835) +%li u +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.7165,0.975) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.625,0.8835) +%li o +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.7165,1.225) +\psline[linewidth=0.5pt,linecolor=orange](-0.5,1.1)(-0.625,1.3165) + +\rput[c](-1.8,1.3){\tiny{$b_{11}$}} + +\rput[c](-0.2,0.35){\tiny{$b_{rr}$}} + +\rput[c](-1.5,1.1075){$\cdot$} +\rput[c](-1.25,0.95625){$\cdot$} +\rput[c](-1,0.805){$\cdot$} +\rput[c](-0.75,0.65375){$\cdot$} +\rput[c](-0.5,0.5025){$\cdot$} + +%\multido {\ra=.5+1,\ib=1+1}{8}{\rput (\ra ,-.4){\ib }} +\pscurve[linewidth=0.5pt]{}(-2,1.7)(-2.2,0.25)(-2,-1.2) +\pscurve[linewidth=0.5pt]{}(1,1.7)(1.2,0.25)(1,-1.2) +\psbrace[linewidth=0.5pt,ref=lC, nodesepA=1pt](1.3,-1)(1.3,-0.05){} +\rput[l](1.7,-0.3){\tiny{Zeile $r+1$}} +\rput[l](1.7,-0.55){\tiny{bis $m$\\(falls}} +\rput[l](1.7,-0.8){\tiny{$r + 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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 6 2007-12-29 21:41:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 nanomètres +%% lambda min=380 nanomètres +%% 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 +% +/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 +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667094CD8DC214A666D7D12CB23EC030318B42DAC7C5B55D30D323720D +18B508F25EC90F4BB39F01A9B5D9FDADCB3F6BF98CBAE558EB843CCBAA498263 +B83BF30467B3249E244947C6FD053CED99A226B8C32894FB029DD305F1374857 +C11C401F455A46F61DF097D8B43AA61FFFF8E9FB7D8BC3C4A3AE7F30EB7A90AA +6D8D7637BB8661D971A06517AD0AEC7BC3ECDA20C75B5D8527BF8154C308BF5F +064B1EC3440E75F0DAB199514994A0E46DDF7F59DEAB0B3DB11CF017A4FDB6CE +FC1BA9BF7B8D27E8A48F437DD7DC3955CFFF805BA63ED962D7281641FF587038 +5DF251D9C0DBCB7BBE9A5C20204AEF774209030E8E87B038D78C17D36805FB7C +AADB49335324F07898B8E6CB7C382967C01FD51DA17A7DB98A1E3339B1EB8AEA +E6FB0FE33D971B21C1A1DD8F01F7E522F857A9C9A1A584C625A5F402EF41749D +9E1F4FC5F19B7FC278EA7B198F4E3D832DC26780A825DF08EDC4FE8B6B7CAC70 +3CB7B7C37451466649360CBBCFDC7C760A3C48ABF01E7BC1E8DF3F3895CEE7AD +7EA124068F2D040CACEA71D0E98B2F296504E4A4B2B3D562B42BC83C17BDB65E +C0E751DD5F2274B8D3F013E42426E1349E0298C2DEAFAD75D6D556C871E6D9C5 +34D1EF8EA00EAAB5084F0629DE55DFE2FD5C204506038E56299437FBF9F9A335 +2A72F41B25A13670C3F8F45882D406D46B2F4BE5F81DF8AE6027EA83F1E8133F +9D7B3E81CC8FEDC08EFE9FCB8DEE761580FE3209D6BCE91BCF5E6278D22B56CF +3EC1FD13D60E957A3DDAE8168814189EBF09C4C3A8CB927A832ED660B1419FE4 +D199D171076868640E3C2541986C6FA403D57D3759E68B46C863D1D0AC6C6669 +17D18F77D838A337FB3F26A50E1F036FCCEEF54BFF6D1A770175F5EB23467D98 +D1C2F8DA9CAC1D739557AA55ECDCDEE692DA3F0CB135036F226DA2790EF30543 +62DBDFDC9E010A29DFAA7407A60F969E54404D8D2E11056EA0D213607AE0CBA2 +55A8B1337DD4568B2CF2ED806C95727600D87BD3EB013944AB47689A9882CB06 +462A23D7885BD62280F3DED49AEA1CF53D886B7C71DD848B78EBBAC2D5EFF289 +A65E3DCCFEAA2DFD0AA9995BFA2C12525838472DE53D781138C2AF79FE32CA2F +34AEF51540D6F8D86C8BD543DF422C8729FC63D21FDFC033272334E8FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR5 +%!PS-AdobeFont-1.1: CMR5 1.00B +%%CreationDate: 1992 Feb 19 19:55:02 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +readonly def +/FontBBox{-341 -250 1304 965}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA1F9B0FF4CFF25B8E64D0747A3 +7CAD14E0DBA3E3CA95F10F24B7D5D75451845F1FB7221D7794A860756CFBB3E7 +704A52A22448C34812C3DBEDD41892577AABA7D555E9298C1A0F7DA638078167 +F56E29672683C51CF1C003764A8E7AD9D8ADE77B4983F56FE2D12723AAD8BF36 +682CFBB71B1D12210144D39DD841A971F71DB82AC6CD815987CDCF29ABC3CC96 +5EEBD5D661F452C6E0C74F9ED8D0C5B3755551A172E0FE31EA02344176E32666 +14B6853A1C303A5E818C2E455A6CF8FC9A66DC6E279101D61C523BD9DB8EB82F +EAF4D7FDF6372383C0794C4568D079648689A199D4B65BA646CF95B7647E4BEC +83856C27A8EF177B3A686EDA6354FE9573E123C12EC4BA56A7E8BFB8F9B75147 +9DD79A743968F36F7D0D479FA610F0816E6267E5CE327686A5485AB72201525C +FB3B7CA10E1BF26E44C24E1696CB089CB0055BD692C89B237CF269F77A31DC81 +0F4B75C8400ABCFDCEC6443CD0E81871CD71AA3064ABDE882C4C52322C27FA8B +41C689F827FB0F8AAF8022CF3C1F41C0B45601190C1328831857CBF9B1E7D1AA +246117E56D6B7938488055F4E63E2A1C8D57C17D213729C68349FEC2C3466F41 +171E00413D39DF1F67BC15912F30775AFDF7FB3312587E20A68CF77AD3906040 +842D63C45E19278622DD228C18ABDD024DD9613CDC0B109095DB0ADC3A3C0CB5 +AB597D490189EA81239E39202CBC7A829EB9B313A8F962F7879D374ADF529BD0 +5533EF977142F647AD2F5975BA7E340419116099B19ACCCC37C5512599441893 +4BB8166C90763910DBD81A481648BCD29B8B7ADB12588E59B3EAC247BDED439C +059B9AFF27D00E73EAFBB8BEDB74E79154BEC9DE93FED04713F7439EA773100E +667C18168F39C507192CE6DA9B59F789C9F157F3851136E2FE6093FC7ABAC558 +72E686A9CFB0520F480FB9FF345775C63EEF90C574484B1ABA33EAEA88626269 +DC05EE807B324BB5D0B5B34B1FBC74CDBE4E9CE5EA0E21C6E4C21563F39D9A03 +76A1F4BEDF2BB4AF02A2BF12769C259B41529365E842B4A3D6E16BDD6821E1CF +BBE509EB381F2AEA3E5DC47602725A46A26FCD6AAE0E0215C7E7DE2E5651036E +CB4D73C351C51E8C5045B2FF7207CDB845C287441EBC9DBC9A67636D6839341B +D2601D11201CC44D46FCFC125275AD65BB8EFC71F0BE92186B77DC2A6F1287DE +07968289E7947874168C36352874E5FD5FB88A07C2D0A68DF02F0EE4C6E6FE92 +3097426006CCA78A0402CF72A6250A941EA0AFF98473F06620C06851F3C5C175 +ABE76D966F1E6E40A14C7164F984D7400993924520C051A1D15E6F7B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI5 +%!PS-AdobeFont-1.1: CMMI5 1.100 +%%CreationDate: 1996 Aug 02 08:21:10 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 100 /d put +dup 101 /e put +dup 116 /t put +readonly def +/FontBBox{37 -250 1349 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633 +89DE8BB201D5DB4627484A80A431B6AFDBBBF23D4157D4AFE17E6B1C853DD417 +25F84CD55402AB88AB7EEFDEDBF2C2C731BD25567C53B474CCF739188A930039 +098A197F9C4BE7594D79442B2C8A67447DE44698321145D7689B91EF235EA80E +B600AA8E238064F154284096C4C2554EFE8DDF13AFF8D3CE30E0999375C0FEE6 +F992DEA5FC3897E2CC8B7A90238E61E41622DE80F438DD994C73275CC52249D9 +F6686F87F394FB7BB668138B210BEC9E46415A1B58C990B81E7D7DD301143517 +4C2A259D2A0A1E200F8101469C10D7D537B0D4D39296A9AB3F132DA9A3B459B0 +F850E2B3A03BDCB35AEF82285D19C38F474FB414F8EC971B994D1C7DD753B271 +2B71549DF497C665DF0F266988209D9EB616E4D9BA229FF984E7A886DB01FD21 +48ED2E4859FD6416C2CE52537464EA884C8C9C2D1083E2B83BE4B766474C23B6 +6E8EC5003200AB10514BB44D14CA700416AB6B2683E80862E7D5B49A05526A32 +554BB23AB8B0824BBA198E3825CE82380CC0FECF46651E3E5D77F09465E73164 +20342822F29572BC7F73F2C3BF95ED3BB6FDEADC20C6AC866C4F2C679594D7E8 +8D944704A3C5D771DC39503BECAB89F34D8CDB8FDB91AFE21F3F0260D05E90C5 +73E2C13DFA022C4522E5918EE25038A0498FBB530DA33B0AE238B1C6ED03FC04 +2BFED8236E07820C5BAB411EAE1B31D93A2FA7C374B1725FEC359ABCB88E2C89 +214529A263D795AACB0B95A3AB2F4E08EF350C282CE521716DBB06E5B8291B3F +5D4ACA230FA192F64BC902A4C8842C0F916F92FBD002ADD408BF0401D0284FBB +F05D4C6DB631420747CC902C5E1617E6573612FB26C8378DF41FFB5048D3CF06 +4893DBA48EF4B043D760F60C75712169D16C83EE020C45369E443E853E1809DD +F395B812067D6FDBD26111B34F42C21036AF952D0D767FD17F6959D9FDD46005 +D64FFF54772B50BB9B173AE79702981F58F9F235C591F476A31852174DF0619C +A470359153DC32610E782B204E7945515464DACE9099B81EEECC7EBD4B5126AF +C3FD9DDFB329AF1C95C41FA4A5F6958869509A23BD7210386329771FA46FF926 +0E54AC35106253EE140449425A8670E1F92B178A02A58EB57540F4BD8110E548 +BB584EA6D625C5F5FE0124A98E49915F1A1B95D2125874360EED1C4379FEF3C6 +90E5780C20309F11F2F23FAD635C44BA030B39EFF083A3ECCDD2641DCB59CC30 +728C0DC15829632716892C6A528D2D1579613E02B8A797AA937854238E94A400 +8BCA3F34BE599F8D1DEF9AD819B7AEFA00BCBAAC5BC1BBBD89CC607441357344 +B06D8FE420C5BC37B166D7F7B38FC3F1EFF5AA0A646A2B6F7C68F3CCC5FC479A +23E83D389C542DE10F989AFDA0A41D92EA9AC18A88566D7EF8923A82E931A11F +EC51951FF43E5ED3349BCC4767A383CCCD643A41D70CDEA34D6749466324BAEE +4972E5642AF413A0F40A17252EBDEA02033FF6C9BBE73688E7469040650035AC +CC8B73EAAC19A6FC2F856FA89BC7E703378E9932ACF22CC0D02B6772998DCDE9 +8E0E124C00153E8E30EB93C9DC54BB4CECBFBE21814B3E49B7272CE6B3E08A41 +5F32977A36472C08BB19382A7CC73FF40596BBC9A008BD1755B6697538C27E87 +84ED626818EEAE77920EDDE4A62BBECD1CD5A9938AB435B506E46FC4AB0FCDD1 +D452F62517D01C57B22BBD0782349CD37C436821B667406E0A6E36B141CE811C +F0C6F8F8E5D109ED4E8601416483E39CA9B7D690EFFB1B5914FD6272616BB55A +5FFB1C8CE4667ADF1D1BE364CD2B30735CB37A6B1233F53E8AE957AED9ED1BDB +5B2E4914843BF5DCC84451E785FC6F5D96B0FF2BF9E362DDC1E486743BBA0926 +1BC4362BA21226C4A88A2F14571501D9D6931036F9C6EB3E8202E6575514C71B +4691F9B9CCE8B52543BEFAFA6CCDBC03CB8AD9CBE2898CD1322F8AB95B9055E9 +5C15F60A93DF88FBB138170A426F2F5A520B6470906E12628720915F5242F8F0 +9ADB5FB7E415B019D73C111D8E8C07EEF1232DB8D2E0EC59C68C5FA2EC6AF4F0 +FB8BF471BBC8274318812CE44D5F74220812EF3542C76AAA04E7AC06AF40AF87 +112BD362DDAA50ED80801642C409F8835C7DFA9E547EA270253CFD38917142E7 +437C803CE2498CB27238795D653EF92BD1486F623C6F60F6F5C6F500D5539028 +4E82D6C6D434239F284CDECFED5E6998327E35E0E27B856F3E54D03564E9E8AB +F7099F4898AA39AF22E1F10D367B851D301285CE46AA17AC2452091032EC8C24 +516E1113E79E2149A02B157A5B8AAAF25D9B4E4105D340D6B278B4B8965755E4 +B91A086EEF41A994566FBDDD69B91D8C8E1814718B23E96698E65544C8535255 +24DDAAADFDBB8042BC16CF71B8759E850CE0BA07F86962DB0C83343BEDAA10A4 +E495F7C7C03F7802126CDCE0CA3247AB972449F9F059CAAEC39D5517E5B0670A +CC1F6B897C892CE946336A02BF9BA2CF05BF69A388CBFC6CF4415C54DD835664 +13311A6D76D8A6B756FDADC556300F53830B24EAB7E7ED059EC82C7E6C0BC5AB +82D1D59249BFD131DC8D3011F52C1524226CF280DA372FB5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY5 +%!PS-AdobeFont-1.1: CMSY5 1.0 +%%CreationDate: 1991 Aug 15 07:21:16 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 106 /bar put +readonly def +/FontBBox{21 -944 1448 791}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBAF552B11EFFB6A16C +F03FB920C15AE724EFDF0CCBF00A838D34440FF9FED532F44036AD22561184C5 +283722DDFA7285E62754372D716D704AC0E00B2F6AB67154241C7449AA047833 +94CEDB08E8C92907FE72A0B05AE36A7B9226ACD6E7890A0B528FDDE84A950FC6 +801DE75CF2E739E9121149CCB8B1C87A106822648D84A3D3FBF295EE6C4BF403 +BBE9A1C1F6DAEDD1E642ACC486E609703D7612BFFD10C324F5DC710811F7F614 +3691B400E3773987424C0D2B0D8A736873C6371DDB2442F05E018A2B5CA9A4AA +17AABB95D09E5890CFFFED5AC01495D89A53D3C89F3D8DBAC85E06561646557A +B16BAE67D1CC9C622388A11FF988ABF5BC1C3F854BAEAE9059C1C86E9204D7BB +065597A3C6F7BBDC04EAD452B2C338F7A1F616768ADC5162003390B4F9E7B7D8 +D0666121EF447FEAF63DA1B4864DD8A04B87996634C259E700D0068F7C23FD7E +D4D9ECD786D05DA81EE458CACDD6DCE3CC88E851C2EED23C609773208BD55FAD +A7BEE6662789A4F601FDC967E994402792AC50338ADED12DC0366714D927D0CF +2571D30BBCBDE5A7A4433352360C4802935C5B6B9DFEB14C4463F32C46CF8D2B +1F951932DA04 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 134[41 +47 22[44 97[{}3 83.022 /CMMI10 rf /Fc 214[22 22 40[{}2 +41.511 /CMR5 rf /Fd 139[23 14[28 31 34[43 65[{}4 41.511 +/CMMI5 rf /Fe 149[19 106[{}1 41.511 /CMSY5 rf +%DVIPSBitmapFont: Ff ecrm0500 5 6 +/Ff 6 229 df70 D<01FF0007FF801F07C03C07C03807C07803 +80F00000F00000F00000F00000F00000F000007800003800603E00C01F81C007FF0001FC +0013127D9119>99 D<01FE0007FF801F03C03C00E03800E0780070FFFFF0FFFFF0F00000 +F00000F00000F000007800003800301E00600F80E007FF8000FE0014127E9119>101 +D104 D108 D<0E03801F07C01F07C01F07C00E038000 +00000000000000000000000000001FF8003FFE007C0F007C07807C03C03803C00003C001 +FFC00FC3C03E03C07803C0F003C0F003C6F003C6F007C67C0FEE3FFBFC0FC1F0171C7D9B +1C>228 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 6153445 0 10255733 + 165 -165 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW +mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale +} if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill +grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside { +} def 85.35823 0 -5.69046 0 ArrowA CP 4 2 roll ArrowB /yEnd exch +def /xEnd exch def xEnd yEnd L /yStart exch def /xStart exch def 0 +setlinecap stroke stroke 3 dup 2 mod 0 eq false and exch 2 lt true +and or { /viceversa -5.69046 85.35823 gt { true }{ false } ifelse +def /epsilon 0.01 def /minTickline -5.69046 def /maxTickline 62.59595 + def /dT 1864679 abs 65536 div viceversa { neg } if def /subTNo 1 def +subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 +4.0 /tickend exch def /tickstart exch def /Twidth 0.4 def /subTwidth +0.2 def /STsize 0.75 def /TColor { 0 setgray } def /subTColor { +0.5 setgray } def /MinValue { xStart } def /MaxValue { xEnd 1.5 2. + CLW mul add 1.4 mul viceversa { add epsilon sub } { sub epsilon add +} ifelse } def /logLines { false } def /LSstroke { 0 setlinecap stroke +stroke} def /subLSstroke { 0 setlinecap stroke stroke} def 0 dT MaxValue +{ /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch +def /x cntTick dT dx log mul add def x abs MaxValue abs le { x minTickline + moveto x maxTickline lineto } if } for subTwidth SLW subTColor subLSstroke +grestore stroke /dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick +cntTick dsubT add def subTNo 1 sub { cntsubTick abs MaxValue abs le +{ cntsubTick tickstart STsize mul moveto cntsubTick tickend STsize +mul lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } +repeat subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick +tickstart moveto cntTick tickend lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline moveto x maxTickline lineto +} if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke grestore +} dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 +sub { cntsubTick abs MinValue abs le { cntsubTick tickstart STsize +mul moveto cntsubTick tickend STsize mul lineto }{ exit } ifelse +/cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW subTColor +subLSstroke grestore } if gsave cntTick tickstart moveto cntTick tickend + lineto Twidth SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW +mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale +} if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill +grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside { +} def 0 62.59595 0 -5.69046 ArrowA CP 4 2 roll ArrowB /yEnd exch +def /xEnd exch def xEnd yEnd L /yStart exch def /xStart exch def 0 +setlinecap stroke stroke 3 dup 2 mod 0 eq true and exch 2 lt false +and or { /viceversa -5.69046 62.59595 gt { true }{ false } ifelse +def /epsilon 0.01 def /minTickline -5.69046 def /maxTickline 85.35823 + def /dT 1864679 abs 65536 div viceversa { neg } if def /subTNo 1 def +subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 +4.0 /tickend exch def /tickstart exch def /Twidth 0.4 def /subTwidth +0.2 def /STsize 0.75 def /TColor { 0 setgray } def /subTColor { +0.5 setgray } def /MinValue { yStart } def /MaxValue { yEnd 1.5 2. + CLW mul add 1.4 mul viceversa { add epsilon sub } { sub epsilon add +} ifelse } def /logLines { false } def /LSstroke { 0 setlinecap stroke + stroke} def /subLSstroke { 0 setlinecap stroke stroke} def 0 dT MaxValue +{ /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch +def /x cntTick dT dx log mul add def x abs MaxValue abs le { x minTickline +exch moveto x maxTickline exch lineto } if } for subTwidth SLW subTColor +subLSstroke grestore stroke /dsubT 0 def } if dsubT abs 0 gt { gsave +/cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick abs MaxValue +abs le { cntsubTick tickstart STsize mul exch moveto cntsubTick tickend +STsize mul exch lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT +add def } repeat subTwidth SLW subTColor subLSstroke grestore } if +gsave cntTick tickstart exch moveto cntTick tickend exch lineto Twidth +SLW TColor LSstroke grestore } for /dT dT neg def /dsubT dsubT neg +def 0 dT MinValue epsilon viceversa { add }{ sub } ifelse { /cntTick +exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick +dT dx log mul add def x abs MinValue abs le { x minTickline exch moveto +x maxTickline exch lineto } if } for /dsubT 0 def subTwidth SLW subTColor +subLSstroke grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for } if end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 1 0.5 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 71.13185 14.22636 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +1 0.5 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 71.13185 14.22636 71.13185 +-5.69046 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +1 0.5 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 71.13185 14.22636 -5.69046 +14.22636 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +1 0.5 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 14.22636 42.67911 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 14.22636 42.67911 -5.69046 +42.67911 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 14.22636 42.67911 14.22636 +-5.69046 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 56.90549 71.13185 +14.22636 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 56.90549 14.22636 +42.67911 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +1 0.5 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +165 -165 a + tx@Dict begin { 88.20367 42.67911 } PutCoor PutBegin end + 165 -165 a 10 x Ff(Fl\344c)o(he)20 b Fe(j)p +Fd(det)11 b Fc(\()p Fd(A)p Fc(\))q Fe(j)165 -165 y + tx@Dict begin PutEnd end + 165 +-165 a 165 -165 a + tx@Dict begin { 14.22636 -11.38092 } PutCoor PutBegin end + 165 -165 a 108 -153 a Fb(a)152 -141 +y Fa(21)165 -165 y + tx@Dict begin PutEnd end + 165 -165 a 165 -165 a + tx@Dict begin { 71.13185 -11.38092 } PutCoor PutBegin end + 165 -165 a 108 +-153 a Fb(a)152 -141 y Fa(11)165 -165 y + tx@Dict begin PutEnd end + 165 -165 a 165 +-165 a + tx@Dict begin { -12.80363 14.22636 } PutCoor PutBegin end + 165 -165 a 108 -153 a Fb(a)152 -141 y Fa(12)165 +-165 y + tx@Dict begin PutEnd end + 165 -165 a 165 -165 a + tx@Dict begin { -12.80363 42.67911 } PutCoor PutBegin end + 165 -165 a 108 -153 a Fb(a)152 +-141 y Fa(22)165 -165 y + tx@Dict begin PutEnd end + 165 -165 a 165 -165 a + tx@Dict begin { 91.04869 0.0 } PutCoor PutBegin end + 165 -165 +a 141 -147 a Fb(x)165 -165 y + tx@Dict begin PutEnd end + 165 -165 a 165 -165 a + tx@Dict begin { 0.0 68.2864 } PutCoor PutBegin end + 165 +-165 a 143 -155 a Fb(y)165 -165 y + tx@Dict begin PutEnd end + 165 -165 a @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 68.2864 39.83366 82.51277 36.98865 93.89413 38.41138 96.73915 +39.83366 1. 0.1 0. /c ED /b ED /a ED false OpenCurve gsave 0.5 +SLW 0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/08_1_1.pdf b/2dgrafiken/08_1_1.pdf new file mode 100644 index 0000000..dbffab2 Binary files /dev/null and b/2dgrafiken/08_1_1.pdf differ diff --git a/2dgrafiken/08_1_1.pst b/2dgrafiken/08_1_1.pst new file mode 100644 index 0000000..55f6022 --- /dev/null +++ b/2dgrafiken/08_1_1.pst @@ -0,0 +1,27 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.7,-0.7)(4.8,2.6) + +%\psgrid[%griddots=20, +%gridlabels=0pt, subgriddiv=10](0,0)(3,3) + +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.5pt,linecolor=blue, ticks=noticks]{->}(0,0)(-0.2,-0.2)(3,2.2)%Schnittpunkt, x0, y0 x1,y1 + +\psline[linecolor=orange]{->}(0,0)(2.5,0.5) +\psline[linewidth=0.2pt,linecolor=orange](2.5,-0.2)(2.5,0.5) +\psline[linewidth=0.2pt,linecolor=orange](-0.2,0.5)(2.5,0.5) +\psline[linecolor=red]{->}(0,0)(0.5,1.5) +\psline[linewidth=0.2pt,linecolor=red](-0.2,1.5)(0.5,1.5) +\psline[linewidth=0.2pt,linecolor=red](0.5,-0.2)(0.5,1.5) +\psline[linecolor=red, linestyle=dashed](2.5,0.5)(3,2) +\psline[linecolor=orange,linestyle=dashed](0.5,1.5)(3,2) +\rput[l](3.1,1.5){\tiny{Fl\"ache $\left|det\left(A\right)\right|$}} +\rput[c](0.5,-0.4){$a_{21}$} +\rput[c](2.5,-0.4){$a_{11}$} +\rput[c](-0.45,0.5){$a_{12}$} +\rput[c](-0.45,1.5){$a_{22}$} +\rput[c](3.2,0){$x$} +\rput[c](0,2.4){$y$} +\pscurve[linewidth=0.5pt]{->}(3.4,1.4)(3.3,1.35)(2.9,1.3)(2.4,1.4) + +\end{pspicture}%} diff --git a/2dgrafiken/08_1_2.eps b/2dgrafiken/08_1_2.eps new file mode 100644 index 0000000..3c5a1f5 --- /dev/null +++ b/2dgrafiken/08_1_2.eps @@ -0,0 +1,2622 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Sun Jun 15 21:01:07 2008 +%%BoundingBox: 98 735 118 744 +%%DocumentFonts: CMMI10 CMR10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.15:2101 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 6 2007-12-29 21:41:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 nanomètres +%% lambda min=380 nanomètres +%% 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 +% +/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 +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 61 /equal put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E +4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099 +E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634 +5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721 +639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB0342893C0BBC0A879 +B7220832FB50103F72F8B5D986B7619683B3BE2BBEFDBCE02277C601A977C3CC +A643D219A9074AFFAEACE5CF1E007DF84E7B0634F5FF6824D3ABC3CE1259C2F8 +0D023DBDD4DD06EF96751AA97695823E5E8FEA5C526B78059E57293164FF5B4E +452ABA970DE4680E0170CBD232901F175DD37779D63BC85BA1450F2A6C3E62D4 +6636A59DBA0BE8DECA24B77DB2A60676CF6146666094BA9F805E7BE295BCC02C +7422EC734C49DC0529F6829881A0855596C8F17F089A9D8EF68BD3FBE9BBC987 +674637AA811D0E4653E7E044EF655B9CC90912236F4B78C01ECA4EBE3E0AF090 +688571B045A62D267FF554E63D810B2491CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 85 /U put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC4983DF52B6DF1C3829B4 +0FB92A97DF7B1B8F89E4305EC069473B3012FAA4B32CE72F0E77DE97ADDAC2E1 +3349C4F5AFF26F52BD37E5206CB40EFE28867F81DD28818D7A7817C396D48CAE +0714948EF724A3A814B63FCFDA6D3E7EA9D8FD2DFAEF0C2693CBD8E179CB15A2 +2BE08370660B93AA0C0DE880937076D1E9DD7B690A549E650A6B95D667B013BA +29C769619FEDBBF1123E01684D38598B39C9940999F84FEA9E2D1C5F180FB451 +81909247AF6200073AC0E27407EBF6D23932572576B426FCFD8B05EAAE71ECD5 +5B6ED5D4E69C853BCC5BF7D68539859ED5AEFA06CB894BE3338E063D7C734F32 +A9CB3C67E65CA031D375A630DD4548B3EB0ACE802E774CA80160D743A3ADA74E +A130F6A641F861016C5AB46479372C170C77FB93D9AA402CCEBF3BAAD0225B72 +451EB1EA7108E5B5A75A9929D60E672CF75DD10C7ADD543BF36730381C79781B +C39C90A6A9340E18A3AF11521D47CE07CE91F7D64EE6056E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 194[65 61[{}1 83.022 /CMR10 rf /Fb 170[57 +85[{}1 83.022 /CMMI10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 6216003 249037 11345138 + 32 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 3.8 neg 3.8 neg 169.31306 +94.84868 .5 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + + +@endspecial 225 -165 a + tx@Dict begin { 88.20367 42.67911 } PutCoor PutBegin end + 225 -165 a 28 x Fb(U)31 b Fa(=)225 +-165 y + tx@Dict begin PutEnd end + 225 -165 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/08_1_2.pdf b/2dgrafiken/08_1_2.pdf new file mode 100644 index 0000000..aafa42d Binary files /dev/null and b/2dgrafiken/08_1_2.pdf differ diff --git a/2dgrafiken/08_1_2.pst b/2dgrafiken/08_1_2.pst new file mode 100644 index 0000000..1bdbb21 --- /dev/null +++ b/2dgrafiken/08_1_2.pst @@ -0,0 +1,10 @@ +\psset{xunit=1cm, yunit=1cm} +\psframebox{ +\begin{pspicture}(-0.7,-0.7)(5,2.5) + +\psgrid[%griddots=20,gridlabels=0pt, subgriddiv=10](0,0)(3,3) + +\rput[l](0.1,1.5){$U=$} + + +\end{pspicture}} diff --git a/2dgrafiken/08_1_3.eps b/2dgrafiken/08_1_3.eps new file mode 100644 index 0000000..54cb410 --- /dev/null +++ b/2dgrafiken/08_1_3.eps @@ -0,0 +1,2826 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Sun Jun 15 20:57:55 2008 +%%BoundingBox: 68 707 135 733 +%%DocumentFonts: CMEX10 CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.15:2057 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 6 2007-12-29 21:41:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 nanomètres +%% lambda min=380 nanomètres +%% 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 +% +/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 +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC7DB153AAF50E53CABC8E +0E0F1774878C54465B194A131B7E152A65174AD35DE8CB2780C167FB33E30054 +E3F31A4700223D9AC00E1831DE3B962198C9AC3A9E53543B1416EBA24187F6F4 +D676C85D599002BA70151A704BEC1355A25FA8D1931D58505826EB93DE6877FF +3A0F8695C51734BFF89702D69799BAB03BF594B7BA0F9F27DC323101650E722F +29ECF35198E82ECEC805AC7A2E5D829EF14CCBEB562B13861EEE789AF8570557 +42C9B1E71CAE81403590E190428163BEF0FD3FECD272E06D7AE799B10B64A632 +5ABDB7048B00AECC013401C7E17187C83FC5D6E075F6E040F985BE9C75814F48 +73F03DA144665FC1D4AD81808400CA165B689AFBBC25AB8178D56F36CB0DCC72 +F8FA27D311E8041E7E81C688411363E1EE4772222811AB62D4686C7727B021E2 +1FEA2217BB9C48D7CCD253B1D3EC3CA74635B2510F5798821A0A94D01F03DC81 +FD07FFDD90A1CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMEX10 +%!PS-AdobeFont-1.1: CMEX10 1.00 +%%CreationDate: 1992 Jul 23 21:22:48 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMEX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMEX10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 18 /parenleftbigg put +dup 19 /parenrightbigg put +readonly def +/FontBBox{-24 -2960 1454 772}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 +DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 +8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 +FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 +BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 +EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 +DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 +EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C +6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 +E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 +E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 +4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 +8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 +8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 +FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A +EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 +680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 +5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 +3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 +DD4DD1C1C9C622FAEAB9D3E54476B49A2A026565F10A9695AA86AFBEEFBBEC93 +995B2D4B67FC2F7BA2444DB0F1C35156E006877CD0260F44D3D98E8577578CFA +B34A5D7FCE83CD56FD37513915C11FE5225B850742741FC12E08F5732D7A18A2 +760AF526ACD3F6CCF262FB565A65ACD98724F7BF6926F8994C495EF657B7C356 +1854FCEF3910D5BC68E488A61FA38ECB5D4A60CF83743BD690FD2AB8B9142469 +41FA6B6B5EFA5C3210C69EF534BF5F98A2FB98578A4D0088629350A178A7B955 +EFAAA17F864BDD85AD8F87B44F7B7C3FF0A76C8EDA84BFDC691E753F3288D393 +94789ACA8F6A310C158A2B202342755733028011A56091A402550FA696629008 +AF20572EF7A90C57BA6BB4F6FE2E8BF9D6B125918516F0C7D7A2C0A956BF99E2 +36C195B5D9568091C4BA0AD847ECF04E9B2FB6DE67590F6A0D6931F1C7574BD1 +E3BEF8AB0E79BFC8AE773F92B40B4BFB92AA847E62A346E9328DE5C6A6A089D4 +30B31D39ABB5D85D4C531A5B69EDDB96E0804EC7DA5587298CA543803AC9417C +C9FE1C3B0D3AE8634215257784FD94891E9E5C9CC4C654EFD630A245ACA045A8 +E6B4039858F1129E5F85F48068B98139A1C04BF2F360078CFCE86EAAB3033CD6 +F087E3E2874C5CEB833AC2197E22A2815643552C0DA8CAFCD1FC03F1A274E2FC +E46828CF3C62CB46E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 158[44 +97[{}1 83.022 /CMMI10 rf /Fc 236[61 61 18[{}2 83.022 +/CMEX10 rf +%DVIPSBitmapFont: Fd ecrm0500 5 2 +/Fd 2 46 df<0000C000000000C000000000C000000000C000000000C000000000C00000 +0000C000000000C000000000C000000000C000000000C000000000C000000000C0000000 +00C000000000C000000000C000007FFFFFFF80FFFFFFFFC00000C000000000C000000000 +C000000000C000000000C000000000C000000000C000000000C000000000C000000000C0 +00000000C000000000C000000000C000000000C000000000C000000000C000000000C000 +0022237C9B2B>43 D45 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 2424088 0 4475218 + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 59.75093 2.84544 8.5359 31.29819 /Lineto /lineto load def +false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 0 0 1 setrgbcolor 1. +.setopacityalpha 0 setlinecap stroke grestore end + + +@endspecial 0 0 a + tx@Dict begin { 7.11317 32.72047 } PutCoor PutBegin end + 0 0 a 0 0 1 TeXcolorrgb -21 10 a Fd(+)p +Black 0 0 a + tx@Dict begin PutEnd end + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 8.5359 2.84544 59.75093 31.29819 /Lineto /lineto load def +false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 1 0 0 setrgbcolor 1. +.setopacityalpha 0 setlinecap stroke grestore end + +@endspecial +0 0 a + tx@Dict begin { 7.11317 1.42271 } PutCoor PutBegin end + 0 0 a 1 0 0 TeXcolorrgb -10 9 a Fd(-)p Black 0 +0 a + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 2.84544 17.07181 } PutCoor PutBegin end + 0 0 a -96 x Fc(\022)103 -30 y Fb(a)147 +-18 y Fa(11)300 -30 y Fb(a)344 -18 y Fa(12)103 70 y Fb(a)147 +82 y Fa(21)300 70 y Fb(a)344 82 y Fa(22)456 -96 y Fc(\023)0 +0 y + tx@Dict begin PutEnd end + 0 0 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/08_1_3.pdf b/2dgrafiken/08_1_3.pdf new file mode 100644 index 0000000..4eaaa03 Binary files /dev/null and b/2dgrafiken/08_1_3.pdf differ diff --git a/2dgrafiken/08_1_3.pst b/2dgrafiken/08_1_3.pst new file mode 100644 index 0000000..c04e62b --- /dev/null +++ b/2dgrafiken/08_1_3.pst @@ -0,0 +1,22 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(0,0)(2.4,1.3) + +%\psgrid[%griddots=20, +%gridlabels=0pt, subgriddiv=10](0.2,0.2)(2.8,2.8) + +\psline[linecolor=blue, linewidth=0.5pt]{->}(0.3,1.1)(2.1,0.1) +\rput[c](0.25,1.15){\color{blue}\tiny{+}} + +\psline[linecolor=red, linewidth=0.5pt]{->}(2.1,1.1)(0.3,0.1) +\rput[c](0.25,0.05){\color{red}\tiny{-}} +\rput[l](0.1,0.6) +{$\left( + \begin{array}{cc} + a_{11} & a_{12} \\ + a_{21} & a_{22} \\ + \end{array} + \right) +$} + +\end{pspicture}%} diff --git a/2dgrafiken/09_2_1.pst b/2dgrafiken/09_2_1.pst new file mode 100644 index 0000000..e86cc39 --- /dev/null +++ b/2dgrafiken/09_2_1.pst @@ -0,0 +1,19 @@ +\begin{pspicture}(-0.1,-0.1)(7.5,1.2) + +%\psgrid(0,0)(7.5, 1.2) + +%\rput[l](0.1,0.8){$\vec a \rnode{a}\times \vec b = \left( {a_2 b_3 - a_3 b_2 ,a_3 b_1 - a_1 b_3 ,a_1 b_2 - a_2 b_1 } \right)$} + + +\rput[l](0.1,0.8){$b_{ij} = \frac{1}{{\det \left( A \right)}} \cdot \left( { - 1} \right)^{i + j} \cdot \det \left( {A_{\rnode{a}{ji}}} \right) $} + +\rput[l](5.5,0.8){\fbox{Vorsicht!}} + +\rput[l](5.6,0.3){\Rnode[e]{ae}nicht $A_{ij}$} + +%\rput[l](5.5,0.1){"Kreuz"} + +\nccurve[nodesep=1.5pt,linecolor=red,angleA=180,AngleB=240]{->}{ae}{a} +%\ncbar[nodesep=1pt]{->}{ae}{a} +%\ncline[arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/09_2_2.pst b/2dgrafiken/09_2_2.pst new file mode 100644 index 0000000..ee4b978 --- /dev/null +++ b/2dgrafiken/09_2_2.pst @@ -0,0 +1,18 @@ +\begin{pspicture}(-0.1,-0.1)(11,3) + +%\psgrid(0,0)(11, 3) + +\rput[l](0.1,1.2){$x_j = \frac{{\det \left( {\begin{array}{*{20}c} + {a_{1,1} } & \cdots & {a_{1,j - 1} } & {\rnode{a}b_1 } & {a_{1,j + 1} } & \cdots & {a_{1,n} } \\ + \vdots & {} & \vdots & \vdots & \vdots & {} & \vdots \\ + {a_{n,1} } & \cdots & {a_{n,j - 1} } & {b_n } & {a_{n,j + 1} } & \cdots & {a_{n,n} } \\ +\end{array}} \right)}}{{\det \left( A \right)}}$} + + +\rput[l](9,2){''$\vec{b}$ \Rnode[e]{ae}in} +\rput[l](9,1.6){Spalte $j$''} + +%\nccurve[angleA=270, AngleB=0]{->}{ae}{a} +\ncbar[linecolor=blue, nodesep=3pt, angleA=90, AngleB=90]{->}{ae}{a} +%\ncline[arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/10_1_1.pst b/2dgrafiken/10_1_1.pst new file mode 100644 index 0000000..66adfa3 --- /dev/null +++ b/2dgrafiken/10_1_1.pst @@ -0,0 +1,14 @@ +\begin{pspicture}(-0.1,-0.1)(2.5,1.5) + +%\psgrid(0,0)(2.5, 1.5) + +\rput[l](0.1,0.2){$\rnode{a}\Rightarrow$} + + +\rput[l](1.5,1){''\Rnode[e]{ae}folgt''} + + +%\nccurve[angleA=270, AngleB=0]{->}{ae}{a} +%\ncbar[linecolor=blue, nodesep=3pt, angleA=90, AngleB=90]{->}{ae}{a} +\ncline[nodesep=3pt, arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/10_2_1.pst b/2dgrafiken/10_2_1.pst new file mode 100644 index 0000000..2d4604b --- /dev/null +++ b/2dgrafiken/10_2_1.pst @@ -0,0 +1,14 @@ +\begin{pspicture}(-0.1,-0.1)(2.5,1.5) + +%\psgrid(0,0)(2.5, 1.5) + +\rput[l](0.1,1){$\rnode{a}\subseteq$} + + +\rput[l](1,0.2){''Teilm\Rnode[e]{ae}enge''} + + +%\nccurve[angleA=270, AngleB=0]{->}{ae}{a} +%\ncbar[linecolor=blue, nodesep=3pt, angleA=90, AngleB=90]{->}{ae}{a} +\ncline[nodesep=3pt, arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/11_1_1.pst b/2dgrafiken/11_1_1.pst new file mode 100644 index 0000000..d90251b --- /dev/null +++ b/2dgrafiken/11_1_1.pst @@ -0,0 +1,27 @@ + +\begin{pspicture}(-3.4,0.5)(5.3,-1.5) +%\psgrid(-5,0.5)(5, -1.5) +%\psset{xunit=0} +%\psaxes[linecolor=red,yAxis=false,ticks=none]{<->}(0,0)(-2.7,0)(4.5,0)% +\psline[linecolor=red](-2.6,0 )(4.5,0) +\psline[linecolor=red,linestyle=dotted](-3.2,0 )(-2.7,0) +\psline[linecolor=red,linestyle=dotted](4.5,0 )(5,0) +\psline[linecolor=red](0,-1.5mm)(0, 1.5mm) +\psline[linecolor=red](1,-1.5mm)(1, 1.5mm) +\psline[linecolor=red](4.2,-1.5mm)(4.2, 1.5mm) +\psline[linecolor=red](-2.4,-1.5mm)(-2.4, 1.5mm) +\rput[c](0,-0.35){\color{red}$0$} +\rput[c](1,-0.35){\color{red}$1$} +\rput[c](4.2,-0.35){\color{red}$x_1$} +\rput[c](-2.4,-0.35){\color{red}$x_2$} +%\rput[bl](0,4.2){$\underbrace{\text{bottom, left}}$} + +%%%%%%%%%%%%%%%%%%%%%%Klammer unten)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psbrace[ref=cC, nodesepB=5pt, linecolor=blue, bracewidth=0.1, rot=90 ](0,-0.5)(4.2, -0.5){\color{blue}$|x_1|$} +\psbrace[ref=cC, nodesepB=5pt, linecolor=green, bracewidth=0.1, rot=90 ](-2.4,-0.5)(0, -0.5){\color{green}$|x_2|$} + +\end{pspicture} + + + + diff --git a/2dgrafiken/11_1_2.pst b/2dgrafiken/11_1_2.pst new file mode 100644 index 0000000..b9a8c88 --- /dev/null +++ b/2dgrafiken/11_1_2.pst @@ -0,0 +1,13 @@ + +\begin{pspicture}(-3,-0.5)(3,3) +%\psgrid(-3,-0.5)(3, 3) +\psaxes[linecolor=blue,ticks=none]{->}(0,0)(-2.5,0)(2.5,2.5)% +\psline[linecolor=red]( -2,2 )(0,0) +\psline[linecolor=red]( 2,2 )(0,0) +\rput[c](2.2,1.5){\color{red}$y=|x|$} + +\end{pspicture} + + + + diff --git a/2dgrafiken/14_2.pst b/2dgrafiken/14_2.pst new file mode 100644 index 0000000..4af567b --- /dev/null +++ b/2dgrafiken/14_2.pst @@ -0,0 +1,36 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.7,-5)(11,3) +\psset{plotpoints=300} + +%\psgrid[griddots=20,gridlabels=0pt, subgriddiv=10](0,-5)(9,5) + +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.5pt,linecolor=SlateGrey,ticks=noticks]{->}(0,0)(-0.6,-3)(4,3) + +%\psplot[linecolor=Gold]{-1}{4}{2 x mul RadtoDeg sin .5 div } + +\psplot[linecolor=Gold]{-0.5}{3.2}{3 x mul 0.75 add RadtoDeg sin 2 mul} + +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.5pt,linecolor=SlateBlue,ticks=noticks]{->}(8,0)(5,-3)(11,3) + +\pscircle[linecolor=Goldenrod](8,0){2} + +\psline[linecolor=DarkRed,linewidth=0.25pt](0,1.36)(9.46,1.36) + +\psline[linecolor=DarkRed,linewidth=0.25pt]{->}(8,0)(9.46,1.36) + +\psarc[linecolor=DarkRed,linewidth=0.25pt](8,0){1}{0}{43.3} + +%\rput(2,4){$y=2\cdot \sin\left(3\cdot x+0.75\right)$} + + +\psline[linecolor=DeepSkyBlue,linewidth=0.25pt](0.71,0.5)(6.065,0.5) +\psline[linecolor=DeepSkyBlue,linewidth=0.25pt]{->}(8,0)(6.065,0.5) + +\psline[linecolor=Red,linewidth=0.25pt,linestyle=dashed](-0.7,2)(11,2) +\psline[linecolor=Red,linewidth=0.25pt,linestyle=dashed](-0.7,-2)(11,-2) + +\psline[linecolor=DimGray,linewidth=3pt](4.5,2.5)(4.5,-2.5) +\rput(8.5,0.2){$\varphi$} + +\end{pspicture}%} diff --git a/2dgrafiken/2dgrafiken.pdf b/2dgrafiken/2dgrafiken.pdf new file mode 100644 index 0000000..068f4e8 Binary files /dev/null and b/2dgrafiken/2dgrafiken.pdf differ diff --git a/2dgrafiken/2dgrafiken.ps b/2dgrafiken/2dgrafiken.ps new file mode 100644 index 0000000..32280a1 --- /dev/null +++ b/2dgrafiken/2dgrafiken.ps @@ -0,0 +1,6112 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Tue Aug 27 20:47:20 2013 +%%Pages: 1 +%%PageOrder: Ascend +%%BoundingBox: 0 0 596 842 +%%DocumentFonts: CMR12 CMMI12 CMR8 SFRM1200 +%%DocumentPaperSizes: a4 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: /usr/texbin/dvips -o 2dgrafiken.ps 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2013.08.27:2047 +%%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 728 2012-11-19 14:35:21Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 1.15, 2012/10/16 +%% +%% 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 + clipType % must be defined in pstricks.tex: clip -- eoclip + 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 + clipType % must be defined in pstricks.tex: clip -- eoclip + 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 + /Scale ED +% 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 +gsave + 220 150 translate + Scale dup scale + 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 +% +/PenroseFillA {% on stack: scaling factor, border color, kite color, dart color + /Scale ED + Scale dup scale + /border_colour ED + /kite_colour ED + /dart_colour ED + clip + + newpath + gsave + 100 100 translate + 6 + Scale 1 lt { 1 Scale dup add div mul cvi } if %%%% Number of iterations + 10 %%%% Long side length in millimeters + /border_width { L 0.06 mul }def %%%% Choose the scalefactor for the borders + /L exch 25.4 div 72 mul def %%%% Conversion: mm -> inches -> points + /f{-1 5 sqrt add 2 div}bind def %%%% The reciprocal of the golden ratio + /l{L f mul}bind def %%%% Short side length l = L*f + /Ll{L l add}bind def %%%% Ll = L + l + /c{36 cos L mul}bind def %%%% c = L*cos(36) + /s{36 sin L mul}bind def %%%% s = L*sin(36) + /draw_tile { 0 0 moveto c s lineto 0 lineto gsave closepath gsave fill grestore + 0 setlinewidth stroke grestore border_colour stroke } bind def + /half_kite { dup dup 0 gt{ 1 sub gsave f f neg scale -36 rotate half_dart + Ll 0 translate 144 rotate kite grestore } + { kite_colour L draw_tile }ifelse + pop } bind def + /half_dart { dup dup 0 gt{ 1 sub gsave f f scale half_kite + -144 rotate Ll neg 0 translate half_dart grestore } + { dart_colour l draw_tile }ifelse + pop } bind def + /kite{ gsave half_kite 1 -1 scale half_kite grestore }bind def + border_width setlinewidth 1 setlinejoin 1 setlinecap +% 450 0 translate + dup f exch neg exp dup scale + 5 {kite 72 rotate } repeat stroke + grestore +} 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 +% +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 713 2012-10-16 14:25:00Z herbert $ +% +%% PostScript tools prologue for pstricks.tex. +%% Version 0.03, 2012/10/16 +%% +%% 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 +% +/rightTrim { + dup + length 1 sub -1 0 { + /i exch def dup i get 32 ne { exit } if + } for + 0 i 1 add getinterval + dup length string copy +} bind def + +/psStringwidth /stringwidth load def +/psShow /show load def + +%/stringwidth{ rightTrim psStringwidth } bind def + +%/show { rightTrim psShow } bind 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 707 2012-09-21 14:17:30Z herbert $ +%% +%% PostScript prologue for pst-node.tex. +%% Version 1.14, 2012/09/18. +%% +%% 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@Dict begin % from main pstricks dict + /T /translate load def + /CP /currentpoint load def + /startGlobal { true setglobal globaldict begin } bind def + /endGlobal { end false setglobal } bind def +end +/tx@NodeDict 400 dict def tx@NodeDict begin +/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 692 2012-06-04 06:47:40Z 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: cm-super-t1.enc 0 0 +% This file is generated from `T1uni.map' and `glyphlist.txt', `gl-other.txt' +% +% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; +% LIGKERN quoteleft quoteleft =: quotedblleft ; +% LIGKERN quoteright quoteright =: quotedblright ; +% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ; +% LIGKERN greater greater =: guillemotright ; +% LIGKERN f f =: ff ; f i =: fi ; f l =: fl ; ff i =: ffi ; ff l =: ffl ; +% +% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; +% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; +% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; +% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; +% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; +% LIGKERN nine {} * ; * {} nine ; +% +/T1Encoding [ +% 0x00 +/grave +/acute +/circumflex +/tilde +/dieresis +/hungarumlaut +/ring +/caron +/breve +/macron +/dotaccent +/cedilla +/ogonek +/quotesinglbase +/guilsinglleft +/guilsinglright +% 0x10 +/quotedblleft +/quotedblright +/quotedblbase +/guillemotleft +/guillemotright +/endash +/emdash +/afii61664 +/perthousandzero % PERTHOUSAND ZERO +/dotlessi +/dotlessj +/ff +/fi +/fl +/ffi +/ffl +% 0x20 +/uni2423 +/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 +/hyphen.alt % HANGING HYPHEN +% 0x80 +/Abreve +/Aogonek +/Cacute +/Ccaron +/Dcaron +/Ecaron +/Eogonek +/Gbreve +/Lacute +/Lcaron +/Lslash +/Nacute +/Ncaron +/Eng +/Ohungarumlaut +/Racute +% 0x90 +/Rcaron +/Sacute +/Scaron +/Scedilla +/Tcaron +/Tcommaaccent +/Uhungarumlaut +/Uring +/Ydieresis +/Zacute +/Zcaron +/Zdotaccent +/IJ +/Idotaccent +/dcroat +/section +% 0xA0 +/abreve +/aogonek +/cacute +/ccaron +/dcaron +/ecaron +/eogonek +/gbreve +/lacute +/lcaron +/lslash +/nacute +/ncaron +/eng +/ohungarumlaut +/racute +% 0xB0 +/rcaron +/sacute +/scaron +/scedilla +/tcaron +/tcommaaccent +/uhungarumlaut +/uring +/ydieresis +/zacute +/zcaron +/zdotaccent +/ij +/exclamdown +/questiondown +/sterling +% 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 +/OE +/Oslash +/Ugrave +/Uacute +/Ucircumflex +/Udieresis +/Yacute +/Thorn +/SS % 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 +/oe +/oslash +/ugrave +/uacute +/ucircumflex +/udieresis +/yacute +/thorn +/germandbls % or /germandbls.alt +] 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 +TeXDict begin @defspecial + +/preview@version(11.86)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: SFRM1200 +%!FontType1-1.0: SFRM1200 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich . +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ecrm1200, tcrm1200, larm1200, lbrm1200, lcrm1200, rxrm1200. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Roman) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch false def +/Weight (Medium) def +end readonly def +/FontName /SFRM1200 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-185 -320 1420 942}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E48759F33528B839DFD4B92DF049F26DBA77FA20B6513D +285BE588908C3BAD6A1BF20F213E587F1372774EF31D66B237AD60712D60BCFA +83574CC5F88A6B4676356ABC2DCCBA498F4272476923789659CA8836F2FDA94D +38271FA2CA8B77D7099705602FEB41085F6674B7AA0DC588C9ABCCBD9115601F +CDFBCD7A8E3CFC8B1E718E576254F5F05FAB25DC253CB561EC3604749243AED5 +76898EC99BDB1760B0CA75CEAE3FE6FFF1700F64F585BE9267ACBD5F155F3122 +732792E17022F23B1F46FEFB0696E5C2B78DE0479F09B6512035B9C488042B62 +98525003ACCAB6C8F36BBDDBF6E82F5CFCCB418706BBEC1D4E42086E70847405 +3ADD1383ADD34574F2C6C64907B0561F107A259A649BB525F0B74CC3B1F42412 +C4F81A7ACDC6A3F37DE7FC06DEF21B9821DD39D75432AE3881E431569A012092 +38FCECF1BE90B0B199DC4D56EE18658B2818B69FB6836486BA302CE7F6EB18CD +7AC5AC6648097F65C8AB851E9BD1696B9703230711F68FD82E1DF92936A4B1A2 +CCE51645573EB0E762D68A417AB6C0A2EC8756FC9BFE5972DFC4C794E948A970 +918BBB1BD7B31F9B1B323EB2AF8D41A153CB1B1511F43560825DB6ECE30C16E4 +902BFD1EFF59F06984F36F284553AB3F2C7901B37ECE058F5E477EC9C629847E +1C7A3628DB7C47C099A0DF53F05ABEF94CD40589562A0293A3D07EBB2F326829 +2687940852D6DAD1BF1DF5ED0F9D3F76FCD6DF36E7380620E9CF2100ABF6A58E +77D2C37BB43CBCBC5E8F420A8C198D67799CC7B2898ED6857D7C042EBB2158CA +8958FBBD615BDCBF3B5EDC9F6CC3D93A7734F5DFB2AAB5A5E1419F06D18EEF25 +02606D642F86FE39DD5462BA30D961C1658178E1C3DC0FE83EC18C1D73E01862 +3A9EA9374A498257D71504AA25281D675358850D4D893C79F1BA2C067EA1AF0B +DFEA1640E48266186158BA24320A9C9CC538791A5582E4B187B32743E198B649 +B8DD80AA3C43F7B4CC48AB22160A3AA6D8AD740847322114D2784D10FCA6AC12 +7441BD7F65D06BE9AC829013E30AB286E1625B2B054965BD22074A990C040338 +A46C166E5DF4AD5D5045B5D0F82FF8319B7F7815877DE9B4D3E5C3B6E421E5B7 +0ABF66CC0A584F6BCC0D8CA7D3E38598A1AFFD9ACC65347138160A96B455ECFE +B768F3B782074D8BD9BAAEB8A76A224EC7756777361FF22160C50700F514DC86 +A8029E891F7AA1F2D68E8D48018B90ED80DC3ADCC0DE305E7AD2C9148391A5E9 +FA955B1DBBFB2A882A3DBFC56EC994783DE79BE054EEE1BA194A3509A66A23CF +C11D284912F6D7A5FF12B27BF1C820F77C9239B5B04BF7CFC2FFED3FE1BA0754 +F9E8EEB1966924F12467925A7D63B740E183AE97689244F248F067AFA7BDED66 +4D6021284E9080E3162B5D449E7387966C100B066343E45D28AA84F3074C4B47 +77F1C77ABF8356F94811405DD1C066F456C040C38A1054F86D61847369D68AD2 +7ED95468DC67A64619757374C4F9BBAAF7BC684EAC5F6B51795B5615DAD314AF +1812F54F4F3DCF13881E73921286163D218D5038365E93E4896AE155B966DB29 +21B90432E775E06E20F5202FACA3FD7E36B95CA9BEDE9B4149FA1C8764EC9A46 +2218A1C447A40084861C178AC5F07DF40666780D14DE79D2D8C3008CE9686EB5 +EFC8B134E7077F199067CF4FCB74F37C1BA6F12369BE1FB27F0337FCEE385C18 +11F984E4B591F2B8775A348E7AB9C68F4498A009C313F891CC4A67BFEB02FB23 +336FCF78D45D2DAB99845BD683D59FAB8B53D3D0FB41957900507283AC943017 +74B2DB39D6C3E8B60AC0D7BDB0915ABA92E7CD2F9AF2636D9E92F0A47C4E8AA7 +685A2DB505CDD01E943E23E8A0C7BF44EB8CC1328B778B0AAFA9920B98811471 +84B65F5D7C052F06678C87D5819E08A750B51C6E0C7368C5E736C641D37EFC66 +E73874F3B4498E76A6B895737F35B3582CB342487B79AB412E0904226657CB0B +002B4F768E2D4D83EFDD6E0F7C8913C7A3CECAE07AB541E85B385181FE1ABDBA +26588082039A41DB1D1A1D683CB0C7BBB6DA94FF5C951A90ED6D91E2FED0BE18 +B9EF74532ED4CB1E9D678F1648DFC226971D791DF18D435619DD6DC1A0CF27D6 +184238E19570DED42DAB84F180F7D92EF581C3FF620FD9DDBF7B95963009BB90 +979D161236F9D84B8B5ED658B7E0B86AE371F88916F7CE9C3785D77EE0A65288 +1FD59CD9007A5C4CD14A5EA33EA49B2859775D4D411FE04B82E3E9E8B3ECE6BC +D788A66D08CD8FC01B9EBE56ED641AABA269DCDD24DE122BA633813E315B0149 +ED06B645EE3FF46B75985E8FD6428C81808D21720ACA15C2FF5C0DAFD0986E3B +0ECC51B056FAB9C164E12F726D9364D80573DC8988E43EA7817B39CDCC113D41 +77F248EF181479A7C6A575CC909C6874CB617DE4AE387F1D4C119110B1450E29 +42755180793F7177BD0AB7140B6B2BA83E1D5763BD5E7ABCC778D8C09671E86A +01327CC9B19628F781B3397BD98222DB27B346DF3F527DA1D5811177A3029143 +3645BD7DE1ED8E082C569E92C2E678DF07F6E5F7F9DEDD098FAABB1561E71C9D +086CE3A51D07185666ED49667DA1FCB3F11CFE69CA3E8A11FAF52F787EB15CF3 +E4E6E59AB7A529DA186123404D72524E93FE2686995EDCA2CD069C14DAD478CA +087947DF3E7E3631228A73A803B9C9D46D12FF53A354718283EF1354B2F2278D +C479DC3AFD69B176E7F248C0B1BD98D8D3CADAF119EB95FB140BD8996F754ACD +F119843219461C01EB6C9612874D8511BD47543E22BADD90F856086FF3E2A412 +22DE1EE3DCE38C845D8EF76EEDD9574188C595CE11E044D10C8B616CA78E3804 +83A1FCB2D5BCFF5DDB509F8647C8C43373337E0DED68C8F31A1AE6C657CE3936 +3D8BEB71E2459918945E21DB85CD73AE158B3F90C1DEA8246B85593950171B6A +0F7EDAA10170E82FD77B4516E25AD5DAAB55E1F317983F27EE740B4A10885986 +65218FEF3D2ACF9B3116814C0F7F931AEC2660CE1334505A748ACAD80165450E +A6674365AB6AFDB4EB58F6EBC3B3E21466E651E1A36301F32ABF989CEC3ECB0F +D20844C88A2E2CA020D92D27A6D375B5B75860CE0FA73D3647BFFA2021E05D26 +24B1CA640C89CEC2CF066B7C03D4703A071AA97A562CE4ACA0AB19A869F642DD +8A886D479A52E0FF0F7DE1334DA432D462D39FD27EFE2BFD74E6E808B6763072 +FF2D8C381B419B7D9912992BEDC93477704F6E8C7C650563BD7EDA45FE0335B6 +EF780BD59AF906D73C3CA2116C478416310A6CE0F84E68240BA4F3B0517BEB6E +D17C38E9D5189F81936DF97FD443934CBC9E9025EB1562468421147D93DA3B42 +F8B404028E03377F7D1E8BE505EF65448B816F1E292D186121ED29020F33A60E +B9A37784E071411ACA7D8C2355A4B655F2D3F8E8A7374AFE2BB1121234BC6FC2 +6D1021CD015D979E0E011CA35D529DC83D33CCB7B380A6FAC9A2EA4F990890CD +C723E1D3A12FE648D0C20412CBA7D49FA47220A54F1C2C04EF17D4777C33A6DE +4D9CFA72AE451A303D6A513C80A46F92701B8CEBEBC07E453FFF5AFC65829CEE +27DEB404C8ECC6BCDDEEF126238B17805A31F7B9999093549C4FC92273E5D755 +DBE21D30F46C3535B21C88EA98E8C3D62E9BCC6581024CE765A0BE18B4D561A4 +A2E0C08FF803D055F474EB429270F829538ED60D950B72719B354C8AEC8C242D +45A0A3905AE977EF13BA060701B5A57C4DA652E88C10A996DE9071855B51E9B9 +2C58BCCF98F8D73B69B5A250033CEF665A05E1C7A440DA8749FCF325A4DDEF7D +AE4F198FE674525D8BBBD61B2BB33D7292FF76311A8CE50A8FA91F9B68A2AE14 +9DB85DB2A27E9187C3BE89CFCB303E06CB767FE25C041E338B9C127E4B1E0B5A +A0AC4337AA98EAD761ABFAE1B269FCF77C04DB06AF3105BA141E4F97BAAC1CE5 +D20931E048B663B6C65B536BF4DA01CEDB20C2D8530FF27AD271A8AF594F457F +6A083C4150686FB861878544E4C5A3CD975220E75C2CC659A45F2B9B84A6479C +6819C90D6918118723694B48288CE22E50C09144C5109FF036F8F694E8F551ED +7A230BF9E13BAFF3971137F3F4D005CD4DE87AE4D3EE71781A85E66530DDF065 +43A6FEAA3E779D8721C358C413DEB43EDE8601EBCC0332427BADC9821C4DDF57 +FAFAAA1378D4464957ED7310E6743A5DB004A7EE85F3A49416670915B9EEBD5C +5F1D0057F1C4073976F973BDBB333D136C4F93B26351DA95DA8DE12531947580 +4FAC922B3CC1B2444C04CA2BBA3B85BB230DFA65472774EEB98FCE14553B862C +BF5A0744DDD3A0A9E6CF8B200FB6A5BCD1D7FA7DC234E3EDCD8F47DDDB8C1FD5 +D6A3AA4917F1B765EF387C9FD4AACCC343705FC9CC20664D4331A66156ECEB42 +6A2F09540CD2E6BF3507B9D2BC965832803E347A3E9F093BC2A3B199DC21FCD4 +61CEECA106FFADFC82AD03450B7A55297CCE7609181D8C57CC3F2870D995317E +A4E7786D750C09528DDF1BC4E5498A3C91650FD91AA94DFCFD3C2BA11FC9DC95 +62843B44CF8E6A6C2183EB49EBA76FE2E1F95FF6E4EC39A557E6EB5872FBF47F +F2B2394EA7D286DB631F22F0B461336C243D19A5CF2A51F61981D2A539A4556B +9C2573FB02FD2051A5925CB1295CD3DA706ACAF33858F972B851DBA214DE190F +0106455C15E2CB39B970DB7C6032F887E36190ECB691F9FCE219872F837721BE +EB1B82536677FB5750F35C875DA81AF659291A239C1E0E54F8C5C3DACFAA2DD7 +725940927893B276FD7EFD3A62F32FD250281ADC5F52005DF39FB1A5444DBD64 +65AD69F3E231D1BB051E79E0169E7F1A91A66BF31816E435F389B7221FE52D83 +B627145EA7EF36982B7B6D9AE2CCE75E31A379E70A7EDD762D066737E6DC1AA8 +FCEEA48E815FB47A57EC73E5A4C5EB4A5DFDE1239479CB408285E4B468DBF9C8 +AE3B8895B0577A91BD01E98FD9DAED2D4BB97829968ECA4E0CD35AFEAC7BD6A1 +4C706510819F6D4420C6CE6B31363BDD6948E8901287899E2C27421A060BBA25 +43BB1BB488D359C2F9F6DF7DCC5C36CD0DE6194AB8E793E2FE0E4359B41B3257 +AF837DF2D28725FC03B9C4879345AD1FDCAFB919488965B4F1871B50ED6BEA46 +043DD8A1EFB17AD3567D65325812C513EDC78FDDFA7906F97647DD9C70F4A3DE +364FBBE8685F311A793E4266C7F916F1FC9B392901A965A81087522C25DE993B +D984F2BF4FBFF484233240DA2D69FB113BA1CE195F9BC4E9E9942E8E3F314B72 +E0DAA0C76CD30C2768667D4614149AD4F6CA1AC24273481FBD4D0508C697D1D0 +0B0D3DF021B55031E2ECE16909AEF8A0A6F4A5951947BAE42B7FE909AEE069FA +9D8718CD9810FE2ED0CFD642876388551979C260A04B3BC3A5AC1A65EC1F8C05 +EF8DD102045D5F93D1A9C9B08D902ACD8AE9738A6BEC40934D25B213B34B198F +3F725DEDA493640971F5CDCC254962C6CBB4895B2AE63843A9838F88B5DB8989 +F8D9CDE0932AA4E0AF536893B02849B46C2EE9A510A265735BA7B1F4C66739DD +D45FA7B62AFD434E53A7FF213446046678C38F2811A9C0AC403ED6A15B4D64E5 +F683A676BD7CAD08F5F9FBE9A24B4230A0AD0869D0B3A5A116E6D197BD58DCD9 +CB011ED7D3851B3DA54CC41FF177419FF97A7BFE63B5C591975E184FE85ED684 +D87D90BB5774D9E6DDE7690BE4FDE8C60E9C0E64772DC84619730C97F54CA92C +075A9A2D5D6F7008365E52796975CCACE3DE9860974F1E761F853CB8B89B768B +A13C7DFA42B60DA8882817F68EEA18E6E3F3D69B7496F2911937825090DBED77 +EE177F3154FF88D7C341CF2414A6EBB464931C901B7C87F0B8C20574A1FA2FEA +685E885920D1C155FF78D7982EAB0BA65C597DD3DC68975CE46704D6CEED368A +F9ED2ED65CE1C505BE8BD7C96597FC936605DADFDE29BF2FB10835B653AC22FC +ED7AA7B273C6F91B593BACB2AECD7D75EE96B5930B70AF8F83BCC9A3A71F84A5 +2F2BE751637420B70C1948912E396AF7774F4C6D3E7C00F3B953C6ED6226F610 +CB203BF6483F93831F1DAFC015328A7204078742E146CA8985E1FE9D35CEBAC9 +2D54FB0E40F4EE60D0E107D7CF2140159DB688BFB73CCE3A81C12D2733C29629 +E475D5CAD5DAB5B802B510A5BA6B4B71DA5E713A988B0833D77D22C6A4E93F0E +05A3280BE35D2F96E1059607034CC5D3CEC8F0E74C93BC2C94AB7B1D1934894D +F0C0E9BE982CE1611496A1AB0176B6689904D577EC7CB422ED455E1B69C2CAA6 +C17253F42CB1C246392D9310AC486AD94A9B7A7F52C6D39BD4D870EAE09B62EC +173561C0C632FC2856982B0CDC31E1E9679D75C4E5A961D4CBD1F90A76E2A7D9 +CA8968EEC33E4C8671953FCB48C7A45DF52775CFF1CBBEB778EA6288D7A5A35D +1BA55CA325C748FC43A09C5D19399274458A9A9E480FBAB91561D07905C34F79 +08B848A0B6381D85D22CF2EC2AFDA0BA2FC377D6DFA832616A6C0B4E1A3DA8CC +EFD27C618BEFFD1D46812D934D815957856745F282F7CA2D3A11102B9C651362 +D17C0AF8EE47D963479335B4A0FD9354253000D12D4F9C352C158ED487E2021E +75F15AFA840E71851BB161C9BCA50E8DCED4C68C978013ED3CE631E200296EE7 +41F16B12669BD34F29516A9A921CD052487BD40EC9AC6DA11FDC1AC05DE28261 +9F0480126A329FF481DC65D7E2223F244D2A97ECE636E61FB4D4010FB6D33CD5 +75992925EBDD62DC17E05D608EE8F59C276D4745F1FABF411D71487C4C000173 +5EC02EBAE844A143C6372125B3065EA1B15EA74FF2A0E641F2476B0C4C7485CB +2F15E96B39725C13676E097D561901026763586484CAF2D9BE9D6B06CC0861D7 +F46F68F45A8C3AF30BC6D5DC06031F85CE92D29B5D159B7728023E6FE0DC6B5F +B2E0D22024308F2A50591F19938EF206313F55A8C60E07F72E620A208FBB7013 +744967065924B67CF1D1A1D07F602F7454B2A8236882A8D2FE7352DD2619AADB +222DE5D2956BE54A92D63EBFBAB59869877BDE355E3AFA69EB60896A9B8F3C6B +BD771BA74EB3DA00CB1E4CA70D84C187423702DC55419D9F27690C81360BFC5D +2630B7DE482DFDBE4172E0091AACC7E4570CB3EF56B97380CABC00B820B92DB7 +7892A7FEBC6C8FDD73E66FD50FB9A3250B8A6B0782FF750829FFBA33F06B8385 +52A1D6896B3DCBFDA85739AAA22E68790A8E264C5D5AD12936EEE94C0D7E1F73 +F75BD74E03CA7BC423D376E2C1654C54C9EC681F0854829DAFF653300EE9615D +27AD29AC3992386AEF51596257BE6F83CF64DFAC5A23CFE24BF2A6255133A273 +90AA355705D794AF077C779E8EF4ED49A5DF031D3397BDDE5CCEAA969C5561B6 +774277B157C6E4367E5CE351FE8860C3CC71E21BC66316B6C809C90BF1598F7A +279110DC21625EC297192C2CA6516E19D7710CE3BBCE155DF4F84430F2E5809E +05D69ECAFB6F4823C8B71EC87C16FEFD3F19A075FF8716F6AFEE641047B43872 +F0B075F2C99248D716E9766F15C3E11CA368F1D6A566C548B696A6A5977F1DEE +184B2832ECD425FF9CD8E68048E3CB947F083768C7254FC019CBD8C8133740F1 +B80C50FB33E6C92D86370D5C03D5B6F93C09FCA1FB4EA55972BEE88BBF948919 +FC131839BABEAFCC6C257CDE0DBE5188FF8B4371E958A61F72B1D04367A1F1E8 +46407C9A642EBB057271F3BC63F882AD275C6488EA8D3235852CAFD245E58F56 +67E0EFBC8F94FE6942AF06A3B25F02D3C226535CD6801C3D94C7136269EB3074 +E0D4D37A972CB05DA5AF20B551159F13B93D9B56713DFCBEA94A0F91003F410A +A42B5F5DF08F575F38B4842D82FB04C02E57BB179CB5E39011AB14A2C48A3344 +39A727DD70ED6E93729E662C95909AC36E4A979C9357FA3D1224CBE2611562C1 +387CC5092BAAB0834B01302650761951170EF5A2DF77B600F65E230678679C01 +924D011691F7B90241CFD4012EFF08ED361E898D8D6FE65C93925D987F1707F7 +3A8CEADD6A7A37C7B448FF421F6DDB1E3684D37626B6CEDA3CAC91E253D46616 +005DE4BA3600067C76724B62BB0C1A5088254A060C183C1F5BA0D7C110693727 +CAF3125CBD712ED3430F83A266D0935A3930630591DC99359DF0A561D627CF29 +E7A2B5A8D014B8466A8D22219481E6454A4869064A13F329CBD6F02CFE5AF7F8 +5118BCA2411F1C09E1C5281C859EB777FDA513DFABBBD5D94F98F8AB40D90647 +E1232B7450224E0D3D5D3333E92AF5AB205007ADBE32E422D9037DED0B93FA18 +F0D1AC01C613D995C1516E8B0F436CFEDAEEC0A70B2B6B8185ACF5FB3DD6BD73 +BE4FB5562627A5EF9660374BAE0367B180F4A154C8A28EAFA97A5AD06300F84F +C6ED92208FABF1714CC0D533851E19DAD19997E6EE13E5A12D9F6EE5AF0B503B +A9869B76BFDBB5D6035DCE5B14F0D8BC40C64D393DBC37E2D9B21906B6E84AE2 +A13614DEEFBD46B07386A035608BB2F425FB0D74A025DA1E80A0027CB712C104 +993D29734898085052B64F4E52D1446648C730D04A2B43E0C83DFCF33A9EC3F6 +19087815404138FCA28996D15A7E9550D55D447192B5721C1210AB114584BDA4 +2A8BF5D93E25D1FD72139D7218DCDC65CA3C0F7C8169C6EFCB877210431C88D0 +58D8945AD99BE47DA5DD2EF04B731C2E42C49C0A4DD635203A5379E22E3565E7 +3F678EB667B9A1A64C2E3FC6AE76C2ADBA3125358ED3BC4DC805E984AC8946D3 +3383E7B1D72D5B4AE3224B3C0F99E211834D7C78D4B260AA07B1D1AC56BBD1BE +C0A9D7EAED8FC6EF2A79A4B3FF443A80C14970BE8FB09A10D1D2048FE03E6B4E +D108073392E31D2450B7B9CBF2CC3E89EE68C40EEF5C573DEA5D4B20F639C63C +3A5D71682208A4F244CF0B2749DEB37CDD0F5CBB4348B5974C688064AE8E50EE +F8257AFB55B24B704EB97FD7FA898EC01A1BE9AA042065F3A2DCB32AFF7D1F72 +E5D3E05C3FBA09063E0EF740120F5AC94A436FAD9E79B647C7EC19F3A13DDE8B +BEF17D26E6B7074A0C828448BBC999C9FBA32073495CA295BE6933B1441A8253 +3966668425C076564E246D45C0F861E429B563D63D767C40173CA96C3013D38E +FB1B71090A66EC91C4B9326C993E4FD1504C60DFC005BE8BD7C96597FC936605 +DADFDE29BE649F7F1E334F029E0E8903FFE59642F9610847DD2BB541D686147B +390A099993B56CB0126A705DE23C3762D2DD8BBC9FD02B86D827ECCDDD6F4DFB +CC8A504273FDD95DACDF4C836DE7A317F1FD1CADB828028E2630B9CC7C620F7D +D15F3A1DD64DB4C08432BA75C1C069E7F3079B6CD66D8B330B24A05052B58C91 +A4C760C013B3F21A12F89228B228DC80BBFF2AAE2CFA9F2DF32707FA6CDBD6DD +B7A0F60EAE33EBE378C0EA28694A1A2E87DAE97E08179532AE10702A48C722EC +D74B1C64DEFE53DE757097F9B9BEA9DEC49B232CCD4A0E2E158AD7FD36CCE8B5 +2E88924D294C7B3FAA216148BBB56367EF01CF69D83F1D83B8214F70B1040980 +EF82F43E87D96EBE73D952B8036DF4229DF208FEA16C84933882E8A20C99D5DC +6EFF38D2448F6D01F08C2A7F0236D0498B8D3264DF633BC3C63D64D96470C31B +21A1C48181C93F281B60952FC9B7BBA1E0C9995F56030748253A7FFEB1BEFCFB +76FD32513EC40DD18B091E916CAE56C93D1DB50D439E9D214EF74B9AB3E91413 +D442962AF071D9D12ECA7A57C328B55F56F991AEB4E084F95F922F3AE30D2531 +15EF6AE4BB2288B601895DDC8D2E16F53B38534C95E98D90CF65FB8120D2C27C +670A49F6367351904E1E2865C1F737A0D2B380591A19B5249CC3D9AD158B058D +5A01E6CC86C4A7FA563B2B8707B2C21F6BBBF8AD387ADD824FEFFA057DB5D01D +0C395B1BE913DFD7E802FE062AD8C228DF1E96B8BF13EAD3D85A5483673CD616 +F474B2B11E8E2987BCA4B6017830244B617420435487B074D486C65A00DD76ED +3AD190AFC41865110D1292831EB375E272F9C1BA16EAE6EC78008BFA1AF8A53A +5CF8C94E8C7B4CCBFF17D27D96953DA481DF5456DD05A9B44D10754FDF74C973 +D5E5AEB71DE711DF6B01BE6267AB4A4576F61B2314C093407A7A81C971268B86 +0D6DD7D732F45213802BCF61502F5DAEF06D2F0B3CBD322FDA0BD9EBC671CAD5 +7A4F8CD5CB791C3804D2833C8AE7700EC788CEA1420EF1D3C24AA659B6F218D6 +3F889232170F4B36101EEDAE50D2DEC0C99EE892D2D7634E6D878C064279EC05 +83350BD73679C3F5590BF8E650BB9734634986C125039F96DAEE49F72D9FCEE5 +6074C08C44733A6884594EE0DE38019902797BBDF1BC2D89210C9277A8294F20 +651713FC4CF2ACEB570F71FC0D31D9E6D6B94A68A3BDE863B33897789D483463 +AC41166EB61DA909B252C86F471C8AD9CC5A535093867259F40325819B22B11D +769617DA7D028D58BFD44268E8893127F954B61DD68A783105361A8D36959C8E +902125C479E425A6FD6E64397B063B7E08D2444C28C537BCA780BCE37E9A1800 +FBB7C450F411171C52B681F45A8B10E90843CA3060B85F08DD7DCDF07DF406C5 +3B19093129BFA7F932A028782ACBE2145BF879C777B0C7636B868750DE9DCDB0 +0C3056B4B130B078713FF4AE6AC5C46A2B8CE2A4A415C86943660A976294DC0E +91B68BF0DA6EB3B50A258C77561D6481C94E34AC57A2A0974D303681606A921C +DB370C48094881E7C47E6367B1C4D8DBFD644245E2B2C4571A1998632C518AE5 +8765357E44F508821A6C5812D607CD407816197AEA71D5CBCB91DE50B4617917 +0D527B664AB04399183A9821694B01287BC300CBF256619D22BF73CEE2C77C08 +27301075A955AC5372D507F82075B4DB1173175420EBB16B2BF4AD7A7F5E5F55 +744D96306C1C8271A4C12E084C336388379E8A43EDFDC11BC0A68E585BB6288A +A2869B7B187368E05FD9717EA34A076EBF6AE5D9D76277540B42CFAD4086470F +2FB05F3EEE0917D679FE5D5A8E7DB156F31F322D3F9D4436500C2A4CF83BA1BE +5CD8397F85A11010A2251D265BD58EB0DB82DEAFD4694D3EF14D7B0F0F8A4FD8 +DFE8F5BA6056E50ABE08443FA04C1BB702FB56E379009C98FD447A2245B1F60F +29FB744D669AAA2FF05C9CCBF78D80ED0A86C342592D710C4735D340CF26BC1A +1DA9FCB49CDC41FB737804F6B8D604D06B26EABAF3CD0A62CCD31703E86A4492 +7B6075329AAFB6BE610E87D8E6E7EB12DD3EFB21C3F0042444461C67BD9B16EF +D8159FBE7BB901EC9879F6F327B3C9F94D59757EEFD396C0E8C68234ED00755E +BD0536F07330E0205B59B768459DD7756FDF237643580BC806B24F1417EECDC1 +5FED50109918B1CCC90D604DDB2CBA6DD1514A1E174038C85747E88B6A2181D2 +E34B4D67B59AD99F4A2072DA51BDD4DB41C44B786FC694DD9FD17769B151BFDD +C6337C6B71ADC83268028D0176D0656F255825E5ACC1FE48CFDE144E5ED32C7E +300735400620A16DA989A482DC31F094678A696FE6D2C7D2D8F3F16AC870565A +BEE83804E9694CC3A13658C6ADDD821AC50BACF8EF1170348CEE1C21ED974623 +017749E043F3C8E4E05FE3ACBA5AC1FAF7A23B8FDDC05DE7A54C191AA8FC5961 +A92C811CB697C2B6673159A45613F0078BBE750DB3296D55164EBAE5FCD3F74A +C249FBBBE9B44306C8053622F240C544167FDE13D5ABCF0B5EAE5F501CF558F5 +94D3BE94CF29E42E78F665A9734E8BC7661C4F661DB7D1181A17D6CB732B4E21 +070DF8647F7F47F96391E3689453E2A280B8E0D0C88A514E4D685865D48B11FF +DC80C39A5986D52F64AB1008246044F5FD46DC01669153B2A82D743C40B85D6C +776EE437D7BE1B94930D288E20147394E624BAFBBB1E491EC091EAE37AA7D44C +3221898AE033919C41D2AB47F0E93B8F7928A5C7A1020296AA7E88EAA5CDE691 +671321D7047B3D57B3C396FC0F270A03683CBF176CF4F163637974554A7F56CD +D46EB6281FE4C38CDCD38FBF1899ADFF45EACDE4824C7DD4E8D86EA2CD56A2E5 +F0584DDD856062B93970C29D46912CAB78DF279A8F70024D36724FB7B3967F5C +DE3D53BEE53081C57B2CD11FB45866C461D6AD6765835767953EC2DCCF025072 +413B60D4BABCD9357BD97D8BF1A2E885507E2E23C4A20055CC6A094D780D0A1F +3F79DD40BBDA903F75FB101B03242FEF89B5464B955D3A849B6F4C6525C04C23 +940A9DD945E5336170855FA8889E744E7B22DC2D6D9BBD975B3D29619FCF424C +EC32605D5F7C600B222DAFD0CF2CFEECCA11DAE487152CB48E39D0300DDBB05C +63A8207742985BA985575F236E2DC77E5E51E3C3F1739689A0E8D44820A2C4DF +5BC8038B3CEE459794AB12FE3A6037C850C9C4F1CD1618B53F7A4976BF426288 +C7D2A41180EB090C9421E8BED372E8EE3FC4D4C5ACE2590766FBF42B79ABAEE8 +AA572820C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%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 49 /one put +dup 50 /two 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 +0826E1DEB8CF0BE87C59313978F28295C0E3A01D2B5682DA86A38F390982A8FE +C3E81B8D3532C92C4A4A4BCB421D248F634447613101BA5B301431F192BC6962 +E6F9E2542F1B0D3AE7560888A9344A7EB7ACED0D46351ABA0DC93EEB47CDF0AF +28B602579EE7E3CEFE0C6F5332EB843348D80B020E7A127C634BF2A3A55B6C94 +1896769C33D5BEFA8F144D6DD702380447904C92197B8C7CB55679A6AB8FB7D6 +2E3087D2CC3CB9BC10C0CC485AE395D036339862CF98337FEEE3394157B9862A +120162EE40ADD32C55B39E4BED180B4E4F51C28377589B982F13DC6D44E758B3 +022813BABDF45231A712C97D06658FC2AAB9F59BEEF9FDBE186B7CF64ABDB9E9 +CAAB0BC223880A2DD496BC166B6C88552D2B1B23965FAB5BC51D2EE90B8E1322 +5688DEB8C76E0E9C2FC7EF7AEB6E7DAE821F73A43A5CA6814FC018337C234636 +4D61A7EE4CAD90722EF68E825686812D5A20AC3874A33E3202C32E60B44FFAFC +8D517C3A5B86ED309A0DFBC06EFA9BA510DD6C8E6292544F0EB765371C64CAC1 +F04F96546838C6E7423116B4FB72F7C81C47C55138A3819E121884A0A5E87BE8 +DE4D02 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.0: CMMI12 003.002 +%%Title: CMMI12 +%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 CMMI12. +% 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/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup +/UniqueID get 5087386 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 /CMMI12 def +/FontBBox {-31 -250 1026 750 }readonly def +/UniqueID 5087386 def +/PaintType 0 def +/FontInfo 10 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/ascent 750 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 98 /b put +dup 126 /vector put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 +45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 +7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 +72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E +BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 +974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 +11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE +882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 +2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A +7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 +0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 +987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 +609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC +182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A +CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A +1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE +C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D +3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 +D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E +E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 +761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 +8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F +68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D +10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 +262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 +922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 +56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 +32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA +7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 +7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A +46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD +754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF +88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F +CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A +7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 +8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 +BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B +CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 +8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B +D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 +135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A +C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 +1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 +07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 +14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D +7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D +2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D +639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 +D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F +90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 +10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E +1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E +8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC +D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 +1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 +9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 +EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE +DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 +60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 +FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D +203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 +FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 +DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F +2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D +244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 +31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B +724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 +F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 +D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA +AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 +CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF +01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D +CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA +287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 +8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 +9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 +6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 +7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C +192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA +AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 +A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 +50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 +A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 +3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF +CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 +5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 +8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE +084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 +92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 +AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 +97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF +92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 +7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 +5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 +13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 +6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 +5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 +6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 +F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E +A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 +7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A +9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 +E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 +AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD +F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 +0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 +1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 +7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E +38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 +5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F +3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B +B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 +15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B +AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 +6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 +CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 +EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 +A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D +806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 +461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 +4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 +9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C +172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 +69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E +ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 +356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 +E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 +7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C +B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A +31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF +EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 +98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 +C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 +AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 +E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 +76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 +8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 +CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 +761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A +2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 +89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 +D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF +C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 +D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 +B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 +AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F +D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 +866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD +207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 +756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 +60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD +A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A +1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 +A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 +C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 +03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 +1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B +97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE +D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 +4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF +94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 +201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 +9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 +CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 +29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 +4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED +66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 +14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 +84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 +6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 +49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C +224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 +5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 +A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 +1F6CF8470DCC892AD0CFE11578718948BABF9C142709013933E3B325C8685C61 +048660562D70CC0055BA8777786CCD161049903DF61A5AF6DBFB02668AC5DE57 +3D52C3FA13DBD74DE4AB848DDC5DF11DA16E7AE728A1B19B8832EFAAAD7263D8 +DD78BB34C58DC2439747CC82B1937B920E8500DEF5293C01896B10A6DA71A168 +4F6DE6DDB7E2910A0D9226ABDCDA689F20A867450D5C57181D23CE3779136295 +0FB6833E98F45B76D98F7F115A67578C90CE30A316B3A041849901838D0A12D4 +7F8BCF5CC5768C0AB33CE1B23EBD4E3C802D8BEA7EEBE241E7C7DA1E4135D3DB +AB5C51E5FFC0F527C5B59A59FE5C3360A0C3CD978DEC483D4DCDDD173894CAB7 +0B73187E5BB9C5480BFC02FC45F2B1240C294133F7627AEFC03823146D0735CA +D73632F8EE970DC0EBA43D2C700A1D5DFBD179A2BF9BA6CB5818D72CDD90E52D +FACB64955479363CDDBF4C141FCFE9A9A2D73D1AD3D3FB7699F4A04B5B078DBE +76729D694396683D4125C68AB8F0DEBA88B876C71B13A737A00B245A1571E9CB +B63FB2EBF35B5BA2F0E744ACCF23EAB3C9E0437A2F11AADC43B5D23573EDF779 +8A4397FC6B28F7DFB72F5895A6BBE071E3442C0A00DD938476920CF67869A9DD +F5A29AA5030369D13477E95EAA9BBC038E0530B2AD398A9B03C8BC5AC4B184E1 +3F3ABA4A18487B10878E9D8009F85672B756BA24DB51A2A131B516923D5CC746 +A429FC5B2E565CFA592C54A42801A142883EBF015FA81AB52E34F91345BEBA6A +CB555778CC267DEA91A4C2179322E46D3E61F8C996A63AA3D616B447B0D88B53 +37ADF6E4CC84EEA24F77BB33582B268EED29D4C4A28C745F663D97F370141456 +A5DA72442BDC46D862F6CE1D7408EA2A22AA7C602BE0B0A43D9D5C6F50C479A8 +1587361F7897A2D28A562A935226FF823955C3AEC37FCFC416D861B0E313E938 +7668640FB271BA91799E6A004D436C27CC46EEF80FA1A05AB90D788643BDAD10 +366C6192D003985BAB6E49DA96211DF7CA971E34661E17C5DD710E6DE3B94D85 +3362CCB1538C5D0664BDB72A57757B2CBFC6F5D915C260859C43D16849F29A1E +78AE53B6B477C24A622EBE5C0DA2A9745F1B53F1FBB54E46FF405BCCB859F8A6 +83E2B84CEDAED3264A1C2683C4F28A6E0B9E86433E56DB72AB068F56185A95E1 +B0429A0F9DCA37CB2C9CEC2CBDBDC9CD49C47C8E31E70FF75FC4E34D15C0BBFE +D0EAFDFAE2C502881246F7254CB4F3A196D257CFF8AC01064DC59B43DF12DCA6 +26F8A2147DFB161F8F98CC3027FB5FDF901190949B4B6A3297C9891193419E3A +48D571DEE01E6C1591107758A825000F27BE974490F2C2A1EDF171B5A5F7ED24 +B33D2C3F965E6C31138546BB8DA583B835BD8F8D290BD895D061C711128C794F +77BD223CF144C0FDBF1576BC1C236F66A3B79E7942082A69DFA7F1756D39C28D +5D07475970D8D7A6DF940E23FDF870E2858CDBC2A3303984E8B4733D35471A43 +C4AC733BB92B64091D3187C8F9855C044F5810B772FE37524027FB1807E2EBB9 +5CBC2A6834B6D297D934C7F01CCFC190FF085E5DB40B26A4E0D9D68BA661840C +4858D1D3E67DEA90A16FF693AF98E2212BCB115345D433ED23F7B0B9A7414BA0 +6EA5776A594A9275834F2E56C9A5C9BD35B8B288FAC8AC56D0136C16C2109C87 +627A1CFEA2A6707D6B09A863A2A8F766E04C09553BFD0F222FF93038A2BC3C57 +1220FBB27843BA1D65F542D596F3647FFC1E8D9BE2EDCF1873856390460A71BE +7F8CB0CF3CC477C61D0EF5E89EB39A06E8C322EDAD6BCAB99554EB604AE9B420 +676B67A0636503F0949A1F141F46509F7AE95D1D0B409776B0860D37B4FA3E0C +E6FF00F936211EF1AC38ABAD01C2317FC6A4D4FBFC6FF61693FAF103AA789DB5 +CD8C7EC326A40898478B978A43568DA020E102EB0CAD13C8D90F22B85F906BFB +468FE4A7DFA95B3E6FE55B87C57D501FC75CEE35943667F262AF45A7D282B83C +B467194A742A66616D45C52B75C58A1E47684729FB3AE76BEFE23D26130E772E +75A20D7554ACF7D000D4FD4E00749C2FE2E9AF9BA8D180D36C99D7686075533F +31A57D0FA9CE7F0C281A34BBC6A4F3709F9F0F3630E9074AF0034F72DF503F56 +70A3E85C6B63FD307BA7C3C9CC3879089C952C844B5EE99EA0CB75B87F44C939 +E7897031B58295A4D79B5F6A8FA4105CA66FC686F7ABBC8B71B0E8FA6C80E309 +9BA3D43E77C451750FB5A05B6728D3128630815A2C13DA962953BD13ADAC8ECD +CAEF72BEC5F112521A2E39AF6CCDFD19B7BA417A1ADFF4E69144018357AEEEC3 +D27861D474051303BC9C5C6CDB4950E962E4D2CD12E0DE5701AB65F20923319F +423C16ADFA23A9C1C5C211843D5903F65176285D4E9754EC97C90CC2C2AC0E69 +49914C998EBA692D7E71B613F76D2DC171233903280DF601337A98B740BC22C3 +6C3B3F7BD0043FF523F0B67B8E9DD97CC395AE8238E93D5ACDAFE9C6F7098ED2 +886FE1A53A23E5B5C98EB429CEEDD1EEF6807079917C8BF123FA6BAB88523C84 +A0A0B1AA2F72733EA92A053486ED697F47F65F66320AB25C822376FDE0E74489 +BB799B4A18E90BB19B444426168989209B0A4E6BB4628AE6C24BA9C07E8499D8 +17E61DBCB0BB96A7B0ECA483C5BDC0696BD3E98776 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR12 +%!PS-AdobeFont-1.0: CMR12 003.002 +%%Title: CMR12 +%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 CMR12. +% 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/CMR12 known{/CMR12 findfont dup/UniqueID known{dup +/UniqueID get 5000794 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 /CMR12 def +/FontBBox {-34 -251 988 750 }readonly def +/UniqueID 5000794 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 CMR12.) readonly def +/FullName (CMR12) 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 43 /plus put +dup 48 /zero put +dup 51 /three put +dup 54 /six put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 +F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 +FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B +8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 +B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A +966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E +CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 +2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E +56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 +EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 +E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 +5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F +847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 +72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 +3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 +57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB +B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 +547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 +F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 +47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 +24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 +64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 +49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 +FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD +F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A +DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 +CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 +7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 +459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 +1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 +6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 +67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 +71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED +C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 +2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E +3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF +CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 +F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 +16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 +29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 +0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 +A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E +DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 +39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 +28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 +FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 +D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 +116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F +59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 +482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 +4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A +323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 +C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB +5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 +46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 +E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C +C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 +4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C +BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 +5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 +9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 +52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B +E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 +655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC +F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 +FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 +87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 +5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 +6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 +B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 +3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A +A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 +343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 +BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D +775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 +8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 +7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 +E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 +397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 +7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 +37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 +2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E +37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 +DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F +89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 +90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 +EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 +FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C +5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B +8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 +54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 +4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 +86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B +08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E +D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B +B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 +6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC +3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 +DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C +A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 +DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E +748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A +C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 +0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA +1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D +6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 +E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 +F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 +FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 +E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D +903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B +6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 +2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 +139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 +0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 +E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 +2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 +585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 +D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E +51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E +B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 +A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E +512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 +F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D +E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 +1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB +F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 +1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF +BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 +BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 +43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E +AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A +2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 +D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 +8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 +9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 +BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 +969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A +3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A +845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 +E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D +6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 +E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 +3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 +52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 +F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F +95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 +AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 +39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 +8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 +957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 +55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F +53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C +D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 +CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E +CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 +BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 +B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 +218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 +3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 +31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 +7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 +196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 +1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 +ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 +82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 +E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D +F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A +BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9 +7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28 +2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD +54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7 +2F3AD75292BC9219DD7A33B9E7611905DBCF29C14D54609AE663D76AFCB4FECF +198AA5C28D09C2F003B2030360069250C11650F3D23BF48EDC1D254AA9E355CE +C93402CBF14B60303FCA7C0B62042FDB73E74659FE69E03B3DB775AB81BD2913 +4585B660431D1F7EA1B2C0399E50A5F722B06B66A1C0ADF6A44F6E454DAFE809 +9B34E344BC864360A7A08894DE5656072790C9E9EDAD1FDB656920C181904657 +D9E09C0593FE137A7FE2C973043A554D02E5B9654B11F61783D284531EC73320 +9C96E95E70D5BE6ED6959E74DBA7DDA33FD0C3C9F7A21384DE9757F98E8C29C1 +C8C98D4FB899A942E1BAFC9B8E9EA128343B3F75379D81CE212F479747D06EA7 +D739507AB7AC634529DA2AF1E38749B15760715FD8532540C9FD00C749D57C54 +B68621D019C155F04EBE9F4EE72DBCEAD010C337DCD054ACC7DBC0DDD804B598 +5E5F3C66E7B49FC7573760B2617450B1B61F8D301D46EB85CD2319465F19E455 +04D5090792260AA38461D790F8B84D72BFAC5C3E0940D76C0DB039AD981F9F2A +3ADFF08F8D86A3DF58C55F64107F3B6CFA33AF9866656CD70487093F6BE5D71B +F2EC6810F8693217AC9F49254B6021704BEE0284B8AC0A7BEC353C26AB4A270B +5FE6C94ADC0B0E2CFD6A93B79B926C8E2EB537DC68608C535790CCAFE356F91A +64AEFD0AEDA0C81A29B0DBE3396F994AD9FD4C76F9CAD0AC4085CF752B8EA6D2 +EFFD7D2CC080360129D49E7E9AFCA9BBCB249E17A09C6FAD895C3D91E6D256C4 +7301777063C9E2201551059B59045A02BD00D03C43A1FBE00DACE820B88C75E1 +8E9898BD674EF1C812FDCC6AEF053C0C07F35A5858D0C6912D9587C605EF640B +BA2C8672E30FDD1D76E15524C50E20DCBB365697412F6359A4CCF8F75902395E +E59457E46B4FFE3C01935C8C0909ECE6D252DB891489A9D024D41B7DCE728DBE +EB9A6ED25B64539B938B534940B5A166ACA357CB8902FA871B5A86240F89F2A8 +3657777F877FE1529AAAAF140C5D674F2FA06BB91A5B1DD9315DF5DB35146E3B +88F499996768933F5EC79BA9ED224D90DC44E794A5813A7BC4C527C8AE2093F5 +A31D81717AE4C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +TeXDict begin 39158280 55380996 1000 600 600 (2dgrafiken.dvi) +@start /Fa 135[51 5[38 2[49 1[81 27 4[49 1[43 3[49 16[66 +80[{ T1Encoding ReEncodeFont }9 99.6264 /SFRM1200 rf +/Fb 205[35 35 49[{}2 66.4176 /CMR8 rf /Fc 129[49 27[41 +51 97[{}3 99.6264 /CMMI12 rf /Fd 201[49 2[49 2[49 4[76 +43[{}4 99.6264 /CMR12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: a4 +/setpagedevice where +{ pop << /PageSize [595 842] >> setpagedevice } +{ /a4 where { pop a4 } if } +ifelse +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 12586582 0 17994140 + 390 -201 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +/showOrigin true def 213.39557 0 0.0 0 ArrowA CP 4 2 roll ArrowB +2 copy /yEnd exch def /xEnd exch def L 0 setlinejoin 0 setlinecap +stroke stroke /yStart exch def /xStart exch def 0 dup 2 mod 0 eq false +and exch 2 lt true and or { /viceversa 0.0 213.39557 gt { true }{ +false } ifelse def /epsilon 0.01 def /minTickline 0.0 def /maxTickline +156.49008 def /dT 5594037 abs 65536 div viceversa { neg } if def /DT +3 abs viceversa { neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT +subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart +exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor +{ 0 setgray } def /subTColor { 0.5 setgray } def /MinValue { xStart +} def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub }{ sub epsilon add } ifelse } def /logLines { false } def +/LSstroke { 0 setlinejoin 0 setlinecap stroke stroke} def /subLSstroke +{ 0 setlinejoin 0 setlinecap stroke stroke} def 0 dT MaxValue 1 +add { /cntTick exch def logLines { gsave 1 1 DT { 1 sub /OffSet exch +def 10 subTNo 1 add div dup 10 { /dx exch def /x dx log OffSet add +28.45274 mul cntTick add def x abs MaxValue abs le { false { x minTickline + moveto x maxTickline lineto } { x tickstart STsize mul moveto x +tickend STsize mul lineto } ifelse } if } for } for subTwidth SLW +subTColor subLSstroke grestore stroke /dsubT 0 def } if dsubT abs 0 +gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MaxValue abs le { false { cntsubTick minTickline STsize mul moveto +cntsubTick maxTickline STsize mul lineto } { cntsubTick tickstart +STsize mul moveto cntsubTick tickend STsize mul lineto } ifelse }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if showOrigin { gsave false { +cntTick minTickline moveto cntTick maxTickline lineto } { cntTick +tickstart moveto cntTick tickend lineto } ifelse Twidth SLW TColor +LSstroke grestore }{ /showOrigin true def } ifelse } for /showOrigin +true def /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 1 DT cvi { 1 sub /OffSet exch def 10 subTNo 1 add div dup 10 { /dx +exch def /x dx log OffSet add 28.45274 mul cntTick add def x abs MinValue +abs le { false { x minTickline moveto x maxTickline lineto } { x +tickstart STsize mul moveto x tickend STsize mul lineto } ifelse +} if } for } for /dsubT 0 def subTwidth SLW subTColor subLSstroke grestore +} dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 +sub { cntsubTick abs MinValue abs le { cntsubTick tickstart STsize +mul moveto cntsubTick tickend STsize mul lineto }{ exit } ifelse +/cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW subTColor +subLSstroke grestore } if showOrigin { gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore }{ /showOrigin +true def } ifelse } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.1 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 0.0 156.49008 0.0 0.0 /Lineto /lineto load def 0 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 0.1 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.1 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 213.39557 0.0 0.0 0.0 /Lineto /lineto load def 0 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 0.1 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +/showOrigin true def 0 156.49008 0 0.0 ArrowA CP 4 2 roll ArrowB +2 copy /yEnd exch def /xEnd exch def L 0 setlinejoin 0 setlinecap +stroke stroke /yStart exch def /xStart exch def 0 dup 2 mod 0 eq true +and exch 2 lt false and or { /viceversa 0.0 156.49008 gt { true }{ +false } ifelse def /epsilon 0.01 def /minTickline 0.0 def /maxTickline +213.39557 def /dT 5594037 abs 65536 div viceversa { neg } if def /DT +3 abs viceversa { neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT +subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart +exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor +{ 0 setgray } def /subTColor { 0.5 setgray } def /MinValue { yStart +} def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub }{ sub epsilon add } ifelse } def /logLines { false } def +/LSstroke { 0 setlinejoin 0 setlinecap stroke stroke} def /subLSstroke +{ 0 setlinejoin 0 setlinecap stroke stroke} def 0 dT MaxValue 1 +add { /cntTick exch def logLines { gsave 1 1 DT { 1 sub /OffSet exch +def 10 subTNo 1 add div dup 10 { /dx exch def /x dx log OffSet add +28.45274 mul cntTick add def x abs MaxValue abs le { false { x minTickline +exch moveto x maxTickline exch lineto } { x tickstart STsize mul exch +moveto x tickend STsize mul exch lineto } ifelse } if } for } for subTwidth +SLW subTColor subLSstroke grestore stroke /dsubT 0 def } if dsubT abs +0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MaxValue abs le { false { cntsubTick minTickline STsize mul exch +moveto cntsubTick maxTickline STsize mul exch lineto } { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto } ifelse }{ exit } ifelse /cntsubTick cntsubTick dsubT add def +} repeat subTwidth SLW subTColor subLSstroke grestore } if showOrigin +{ gsave false { cntTick minTickline exch moveto cntTick maxTickline +exch lineto } { cntTick tickstart exch moveto cntTick tickend exch +lineto } ifelse Twidth SLW TColor LSstroke grestore }{ /showOrigin +true def } ifelse } for /showOrigin true def /dT dT neg def /dsubT +dsubT neg def 0 dT MinValue epsilon viceversa { add }{ sub } ifelse +{ /cntTick exch def logLines { gsave 1 1 DT cvi { 1 sub /OffSet exch +def 10 subTNo 1 add div dup 10 { /dx exch def /x dx log OffSet add +28.45274 mul cntTick add def x abs MinValue abs le { false { x minTickline +exch moveto x maxTickline exch lineto } { x tickstart STsize mul exch +moveto x tickend STsize mul exch lineto } ifelse } if } for } for /dsubT +0 def subTwidth SLW subTColor subLSstroke grestore } dsubT abs 0 gt +{ gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul exch moveto cntsubTick +tickend STsize mul exch lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if showOrigin { gsave cntTick tickstart exch moveto cntTick tickend +exch lineto Twidth SLW TColor LSstroke grestore }{ /showOrigin true +def } ifelse } for } if end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.1 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 0.0 156.49008 0.0 0.0 /Lineto /lineto load def 0 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 0.1 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.1 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 213.39557 0.0 0.0 0.0 /Lineto /lineto load def 0 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 0.1 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 266 -169 a Fd(0)266 -877 y(3)366 +-62 y(0)659 b(3)h(6)390 -201 y @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 142.26372 28.45274 0.0 0.0 /Lineto /lineto load def 0 + 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 0.5 SLW 1 0 0 setrgbcolor 1. +.setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0.5 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 142.26372 28.45274 /Lineto /lineto +load def 0 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 0.5 SLW 1 0.5 0 + setrgbcolor 1. .setopacityalpha 0 setlinecap [ 5.0 3.0 0.0 + 0.0 ] -2 0 add DashLine grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0.5 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 56.90549 113.81097 0.0 0.0 /Lineto /lineto load def 0 + 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 0.5 SLW 1 0.5 0 setrgbcolor +1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 56.90549 113.81097 56.90549 +-11.38092 /Lineto /lineto load def 0 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 0.1 SLW 1 0.5 0 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 56.90549 113.81097 -11.38092 +113.81097 /Lineto /lineto load def 0 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 0.1 SLW 1 0.5 0 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 142.26372 28.45274 142.26372 +-11.38092 /Lineto /lineto load def 0 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 0.1 SLW 1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 142.26372 28.45274 -11.38092 +28.45274 /Lineto /lineto load def 0 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 0.1 SLW 1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 56.90549 113.81097 /Lineto /lineto +load def 0 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 0.5 SLW 1 0 0 setrgbcolor + 1. .setopacityalpha 0 setlinecap [ 5.0 3.0 0.0 0.0 ] -2 0 add + DashLine grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 199.1692 142.26372 -11.38092 +142.26372 /Lineto /lineto load def 0 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 0.1 SLW 0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 199.1692 142.26372 199.1692 +-11.38092 /Lineto /lineto load def 0 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 0.1 SLW 0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap +[ 5.0 3.0 0.0 0.0 ] 0 0 add DashLine grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 0.0 0.0 /Lineto /lineto load def 0 + 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 0.5 SLW 0 0 1 setrgbcolor 1. +.setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 390 -201 a +tx@Dict begin { 34.1432 54.06003 } PutCoor PutBegin end + 390 +-201 a 1 0.5 0 TeXcolorrgb 384 -165 a Fc(~)-43 b(a)p +Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 a +tx@Dict begin { 85.35823 99.5846 } PutCoor PutBegin end + 390 -201 a 0 0 1 +TeXcolorrgb 384 -156 a Fc(~)g(a)22 b Fd(+)550 -182 y +Fc(~)561 -156 y(b)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 +a +tx@Dict begin { 113.81097 35.56592 } PutCoor PutBegin end + 390 -201 a 1 0 0 TeXcolorrgb 379 -178 a Fc(~)390 -152 +y(b)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 a +tx@Dict begin { 56.90549 -18.4941 } PutCoor PutBegin end + 390 -201 +a 1 0.5 0 TeXcolorrgb 345 -187 a Fc(a)396 -172 y Fb(1)p +Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 a +tx@Dict begin { -24.185 113.81097 } PutCoor PutBegin end + 390 -201 a 1 0.5 0 +TeXcolorrgb 345 -187 a Fc(a)396 -172 y Fb(2)p Black 390 +-201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 a +tx@Dict begin { 142.26372 -18.4941 } PutCoor PutBegin end + 390 -201 a 1 0 0 TeXcolorrgb +350 -174 a Fc(b)391 -159 y Fb(1)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 +-201 a 390 -201 a +tx@Dict begin { -24.185 28.45274 } PutCoor PutBegin end + 390 -201 a 1 0 0 TeXcolorrgb 350 -174 +a Fc(b)391 -159 y Fb(2)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a +390 -201 a +tx@Dict begin { 204.85966 -18.4941 } PutCoor PutBegin end + 390 -201 a 0 0 1 TeXcolorrgb 244 -174 a Fc(a)295 +-159 y Fb(1)357 -174 y Fd(+)g Fc(b)496 -159 y Fb(1)p +Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a 390 -201 a +tx@Dict begin { -28.45274 142.26372 } PutCoor PutBegin end + 390 -201 a 0 0 1 +TeXcolorrgb 244 -174 a Fc(a)295 -159 y Fb(2)357 -174 +y Fd(+)g Fc(b)496 -159 y Fb(2)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 +-201 a 390 -201 a +tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end + 390 -201 a 1 TeXcolorgray 22 x Fa(x)441 +-179 y +tx@Dict begin tx@NodeDict begin {5.1654 0.0 6.19986 3.09993 2.5827 +} false /N@a 16 {InitRnode } /NodeScale {} def NewNode end end + 441 -179 a Fa(x)p Black 390 -201 a +tx@Dict begin PutEnd end + 390 -201 a +390 -201 a +tx@Dict begin { 99.5846 159.33553 } PutCoor PutBegin end + 390 -201 a 55 -176 a Fa(P)m(aralle)351 -176 +y +tx@Dict begin tx@NodeDict begin {8.26465 0.0 3.26308 1.63153 3.61575 +} false /N@ae 16 {InitRnode } /NodeScale {} def NewNode end end + 351 -176 a Fa(logramm)390 -201 y +tx@Dict begin PutEnd end + 390 -201 a 390 -201 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def /NCLW CLW def tx@NodeDict begin 0.0 0.0 neg 3.0 3.0 0 0 /N@ae +/N@a InitNC { /AngleA -90. def /AngleB 0. def 0.67 0.67 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 2 copy /y0 ED /x0 ED tx@Dict begin ArrowA end xB2 yB2 xB1 +yB1 tx@Dict begin ArrowB end /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 +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 /getValues { ax t0 3 exp +mul bx t0 t0 mul mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 +t0 mul mul add cy t0 mul add y0 add 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 } def /getdL { getValues 3 -1 roll sub 3 1 roll sub Pyth } def +/CurveLength { /u 0 def /du 0.01 def 0 100 { /t0 u def /u u du add +def /t u def getdL add } repeat } def /GetArrowPos { /ende 0.5 1 gt +{ArrowPos}{ArrowPos CurveLength mul} ifelse def /u 0 def /du 0.01 def +/sum 0 def { /t0 u def /u u du add def /t u def /sum getdL sum add +def sum ende gt {exit} if } loop u } def /dArrowPos 1. 1 gt {1.0 1. +1.0 add div }{ 0.5 } ifelse def /ArrowPos 0. def /loopNo 0.5 1 gt +{CurveLength 0.5 div cvi }{ 1. } ifelse def loopNo cvi { /ArrowPos +ArrowPos dArrowPos add def /t GetArrowPos def /t0 t 0.95 mul def getValues +ArrowInside pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 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 } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 390 -201 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/2dgrafiken.tcp b/2dgrafiken/2dgrafiken.tcp new file mode 100644 index 0000000..3f9df16 --- /dev/null +++ b/2dgrafiken/2dgrafiken.tcp @@ -0,0 +1,12 @@ +[FormatInfo] +Type=TeXnicCenterProjectInformation +Version=4 + +[ProjectInfo] +MainFile=2dgrafiken.tex +UseBibTeX=0 +UseMakeIndex=0 +ActiveProfile=LaTeX => PS => PDF +ProjectLanguage= +ProjectDialect= + diff --git a/2dgrafiken/2dgrafiken.tex b/2dgrafiken/2dgrafiken.tex new file mode 100644 index 0000000..1de7a3d --- /dev/null +++ b/2dgrafiken/2dgrafiken.tex @@ -0,0 +1,32 @@ +\documentclass[12pt]{article} +\usepackage{inputenc} +\usepackage[svgnames]{pstricks} +\usepackage[T1]{fontenc} +\usepackage{pst-all} +\usepackage{pst-eps} +\usepackage{pst-node} +\usepackage{pst-pdf} +\usepackage{pstricks-add} +\usepackage{multido} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{microtype,ellipsis,fixltx2e,mparhack} +\usepackage{amssymb} + +\pagestyle{empty} +\begin{document} + +\newrgbcolor{lila}{0.6 0.2 0.5} +\newrgbcolor{darkyellow}{1 0.9 0} +\newrgbcolor{orange}{1 0.5 0} + + +%\TeXtoEPS +%\fbox{ + +%\input{bitwise.pst}}%\endTeXtoEPS +\input{01_1_3.pst}%} +%\input{multidotest.pst}} + +\end{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/2dgrafiken/2dgrafiken.tps b/2dgrafiken/2dgrafiken.tps new file mode 100644 index 0000000..b57c6ac --- /dev/null +++ b/2dgrafiken/2dgrafiken.tps @@ -0,0 +1,125 @@ +[FormatInfo] +Type=TeXnicCenterProjectSessionInformation +Version=2 + +[SessionInfo] +ActiveTab=2 +FrameCount=4 +ActiveFrame=0 + +[Frame0] +Columns=1 +Rows=1 +Flags=2 +ShowCmd=3 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-4 +MaxPos.y=-30 +NormalPos.left=132 +NormalPos.top=174 +NormalPos.right=1070 +NormalPos.bottom=543 +Class=CLatexEdit +Document=2dgrafiken.tex + +[Frame0_Row0] +cyCur=597 +cyMin=10 + +[Frame0_Col0] +cxCur=1053 +cxMin=10 + +[Frame0_View0,0] +Cursor.row=0 +Cursor.column=0 +TopSubLine=0 + +[Frame1] +Columns=1 +Rows=1 +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-4 +MaxPos.y=-30 +NormalPos.left=0 +NormalPos.top=0 +NormalPos.right=942 +NormalPos.bottom=373 +Class=CLatexEdit +Document=bitwise.pst + +[Frame1_Row0] +cyCur=318 +cyMin=10 + +[Frame1_Col0] +cxCur=913 +cxMin=10 + +[Frame1_View0,0] +Cursor.row=34 +Cursor.column=11 +TopSubLine=19 + +[Frame2] +Columns=1 +Rows=1 +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-4 +MaxPos.y=-30 +NormalPos.left=22 +NormalPos.top=29 +NormalPos.right=964 +NormalPos.bottom=402 +Class=CLatexEdit +Document=08_1_1.pst + +[Frame2_Row0] +cyCur=318 +cyMin=10 + +[Frame2_Col0] +cxCur=913 +cxMin=10 + +[Frame2_View0,0] +Cursor.row=18 +Cursor.column=0 +TopSubLine=4 + +[Frame3] +Columns=1 +Rows=1 +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-4 +MaxPos.y=-30 +NormalPos.left=132 +NormalPos.top=174 +NormalPos.right=1052 +NormalPos.bottom=589 +Class=CLatexEdit +Document=06_2.pst + +[Frame3_Row0] +cyCur=360 +cyMin=10 + +[Frame3_Col0] +cxCur=891 +cxMin=10 + +[Frame3_View0,0] +Cursor.row=0 +Cursor.column=0 +TopSubLine=0 + diff --git a/2dgrafiken/3dgrafiken.pdf b/2dgrafiken/3dgrafiken.pdf new file mode 100644 index 0000000..3efd39f Binary files /dev/null and b/2dgrafiken/3dgrafiken.pdf differ diff --git a/2dgrafiken/AdditionVektorenInEbene.eps b/2dgrafiken/AdditionVektorenInEbene.eps new file mode 100644 index 0000000..6d6906a --- /dev/null +++ b/2dgrafiken/AdditionVektorenInEbene.eps @@ -0,0 +1,3353 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Fri Jun 06 14:24:18 2008 +%%BoundingBox: 79 725 288 859 +%%DocumentFonts: CMR10 CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.06:1424 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 98 /b put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667094CD8DC214A666D7D12CB23EC030318B42DAC7C5B55D30D323720D +18B508F25EC90F4BB39F01A9B5D9FDADCB3F6BF98CBAE558EB843CCBAA498263 +B83BF30467B3249E244947C6FD053CED99A226B8C32894FB029DD305F1374857 +C11C401F455A46F61DF097D8B43AA61FFFF8E9FB7D8BC3C4A3AE7F30EB7A90AA +6D8D7637BB8661D971A06517AD0AEC7BC3ECDA20C75B5D8527BF8154C308BF5F +064B1EC3440E75F0DAB199514994A0E46DDF7F59DEAB0B3DB11CF017A4FDB6CE +FC1BA9BF7B8D27E8A48F437DD7DC3955CFFF805BA63ED962D7281641FF587038 +5DF251D9C0DBCB618791E2F1B5FA6D56888ED653C537DF398274E5F4D98C427A +285F72AFE4BC918C427410EE2FCBF2DF61937FFC87289A358CA53BDFB1305055 +47ED86CBCA33CB044DE52BCAFBE09FCCBCCB34B51E330C3DE2A3DDB19A072167 +E7289B12C43A02F58716E691A28D81C6CF68420A35A5C492AC9349DDD5451712 +A96F5EACA2AF53D1E25EACBD4E80C2CD3606B4996DF0AB082DAE5C158FD8F069 +8783CB568345B1D246629644F8269D70BF27FA680D4CBD7A69AC4304CEF6B59C +B38DEB2BA9C7212202AB45E3691A259C6D3CC46D04029149E0C324E6C6260E02 +A8C991F90CDA1E13788AA7A344E2C09C4CDE984EDB0D30592BDDF84CA6E8D711 +7218A9611A0B4BEA6203B993E552C41CD16599C8D49CD330760833B60781F921 +CEB598DCF46881CE7D9927878E2584E8CF464AB0B7E343A100603F5E2310DBEF +DB354F03A59DA8FE3BEBBC31A2F0FF2B3DE63D5637ED710A11E5BC4D125B5CDF +9B50628A39EDFA3903B7EB31DC9A1B27B5ADD8DC0BCE62841BEE3509832D3ACC +F8DE5DCC9FFCEF448FAAE3966E5060D2C57C1C0CEF480DDD2DDF568F2F451AD7 +764489CF582E23F8698B43083B87F559B80DBE03F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 43 /plus put +dup 48 /zero put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 54 /six put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3901F92CC2EC9BC842 +5EE578CF06846C7078E026DFCB18AD4D78023652F0165DE17C183E43752132BB +19F361414774D5C13AD718B01F47E61745009D823C3996FB208C3A9D4B4F116E +4D38E56725461BBA1FE17CDC27CD99AC7D748CF7750CA2C6E1EC5E4746AC85F5 +E8274DA59750A144AD5AEBE6C9A7CE843BD6837FE2A88078124AA1A94EFC1C50 +B811EAEB2679AD57294AB13E45AEEB8C6EA105696E341E4C14ECF573EEBB83E6 +F9DE39BD6CC376158231CA2A83D91F721ABD116A40698F26610853E7FD075472 +ED40CCE32031FCFAE2737B412807F7C9E6494D0B73B7AB13AFD20D5219A71562 +12A7B57DD9965B15AFB38BEDA28D35D73282D4F1F9A15C4403B7C69C7E80DF54 +C112D7813F7271A5474438A7CC380735F029CFDF4C0C30C3901A7E30F8B3B017 +B1A663CC9481C79B903806F30AF37522828FD5DE3EC220C719B63A90FB3CE105 +3D5E0F56440F1657C4D99760B010A26A6B8411D2FC60C28C4E885AD14A379244 +841B408BEDC905276B7C9BE5BDFC5675334396F3715517D7A61C24BE35125DBD +E1F7E59DABE44B1155B5AD46DB008CFEFC55199AA4E4AE14D2E1F5A9C868442C +5DEC207A5BD9D7CB3A9D5C0BCF31E3ACF5CFB49145C099F5EF39A75AF03D0C11 +E7FFCF9EACA07B7763FFE6E967041542039ED83F65701CA8EBE91FFE63E0884A +57017E016E8182B7E0F7A6DC2A9E9EA4FD8B87FA6E5218822E2DBA3100566384 +47DC37BC683F7C0586DAC2D76B5FF98BF542BE06ACF55D5E9E8EAA4C46F5B546 +88DD28B2BE2EDF38F538A54C577DAAEEC62FF0272572C002F45D65BA1E4A3628 +844E717403250B6CF3B65A75905990D701A5948742D859163AF3B0C6F9E66406 +A26A3C64CB9DDA214554D54BAD6684F42D87A89E5F641471AF9D3E5F289662CC +A825B269111AB0343F68409D6C720F30F972518AE0D59E7DABCF1C4CDE587E4B +C26138C194C7FD1DE8442AC7CE668AAAB12A6D11A38746F672ED64A0004911CF +37389B2BC62B359BECEF334826591DD8CFFCC389744D8660971DDAE9E7ABE98C +411FED1153ABF3A8F357E7D6A0D54AC2326451DE5FD08F6690D9B43D4DA20FA5 +C23C3888724AF9809D0E1D3DD339DD4D92A46DF07D64E68CD085C7831102C55B +91AB2FBA385A89C545E101E827825D1553FC8154D65F5FDA20C5F274A4399FC9 +E6F7B3F60FCBF2FDB79AA97D9ABE907EA70CB9167BF65288913C10CCB4AAD6ED +3A7CE2F30D97C03979E0F68C50766AAC359659D5C2C12B9000EFDE294FF5774B +7F5F599F3012D1442F46FA47D6B854462BF47653201C266B0A564B70A695009D +E9BB996C946CE7554EDFD847585845B0BDE1DB8F8849F98C6C9609BBC50DA35A +A3411EBE980A9C7DC944AD20E868AE72EA6D8A186C25B3C9F8BFECAF89230AA2 +592AA1FCD9E1342A6DE8D817FBB5A37069467E33A1A7731BE093213477D4DA95 +1CC4263E7898CAFF2CB05D6BF62221BBA2D966BCBF7CB57A47840DE546DC8687 +D07FCA4698B62BEDCE687ED1011BFC6E47D2E83C6F3A4A75E25FFF0E4D8ADE84 +718D07CD2C772F33BB20C98D3409D338EB321E636F6FC0AB11B2E17022DF56C9 +50BEEBCCA3DD251AB6E0000633308A6FD8E3407D198D2F4AD4C8DF94A484CC56 +FF863DEA0365F76A14249B7103A41CCFAD71CCCE6FCFFAA07E97299060F9D60F +06B4BAEE56F8417F7CF13F8F1D659B422F3203844995380A90A963EFE0C3F639 +3E08BA61E3243C6D1AF23EC3CA1F3A8B259D60AC0871396D22FED6F98E1960E0 +93AB054A05AE8ED95E64AF6B9D3ED60C792EA652370DDD417E019BE68BAB4395 +D8809DE583A49533C7945330635E386D3609A56E70AE14450A53DE903DB5C255 +7A00AC7D4EC665CCD102D263F4F5F526B5EB507E4D3B550D5AAA6CF6C96301C6 +BCEF498D6A07ED53960CA970F3966593E53D2860049CBF3B4928FC8170478977 +4C489B8C91C5B641D5448BB13A202237857892FBA489A220AB849E8C0A14155C +8C874BAC9C32E6E5CFDFBC55862541D00CEF108F4B31EB581496CE1262506A21 +B94FCD2BC75173A23EED2E6151015EB45D6C48FD288DE17C0EC6092C9C2F7E1C +43797A5E8ED3477A656D865BAF2A47F2A2D8778519E56EC4C5010158FAC16F8F +3D9B3D6610C34B5FCA7687B8A81214A69D27C47BE0341079A167F62A26CEA377 +225F621B1D06D2CE2BA0DBB5C6F5038C58C6F86CEEF64045 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start +%DVIPSBitmapFont: Fa ecrm1000 10 8 +/Fa 8 115 df80 D<001FE0000000FFFC000003E03F000007000F +80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE000FC000FC000FC +00078000FC00000000FC00000000FC00000000FC00000000FC0000007FFC000007FFFC00 +003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC007F8000FC007F +0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF00 +03FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE0007F8007C026277D +A52A>97 D<0007F800001FFF00007C0FC001F803E003F001F007E001F80FC000F81F8000 +7C1F80007C3F00007E3F00003E7F00003E7F00003F7E00003FFE00003FFE00003FFE0000 +3FFFFFFFFFFFFFFFFFFE000000FE000000FE000000FE000000FE0000007E0000007E0000 +007F0000007F0000003F0000033F8000031F8000070FC0000607C0000E07E0001C01F000 +3800F80070007E03E0001FFF800003FC0020277EA525>101 D<00000003F0000FF00FF8 +003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003F0000FC003F0001F +8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F80 +01F8000FC003F0000FC003F00007C003E00003E007C00003F00F800003F81F0000073FFC +0000060FF000000E000000000E000000000E000000000E000000000F000000000F000000 +000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FFFFFFC00F80007FE0 +1F00000FF03E000003F07C000001F07C000001F8F8000000F8F8000000F8F8000000F8F8 +000000F8F8000000F8FC000001F87C000001F03E000003E03F000007E00F80000F8007E0 +003F0001FC01FC00007FFFF0000007FF000026387EA52A>103 D<03F000FFF000FFF000 +FFF0000FF00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917>108 +D<03F00FF0001FE000FFF03FFC007FF800FFF0F03F01E07E00FFF1C01F83803F000FF380 +0FC7001F8003F7000FCE001F8003FE000FDC001F8003FC0007F8000FC003FC0007F8000F +C003F80007F0000FC003F80007F0000FC003F80007F0000FC003F00007E0000FC003F000 +07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F +C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 +07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F +C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 +07E0000FC003F00007E0000FC007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FF +FFFFFFC1FFFF83FFFF40257EA445>I<0003FE0000000FFF8000003E03E00000F800F800 +01F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007E03F +000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8FE00 +0003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E0000 +03F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC0001F +8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277EA52A +>111 D<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003EC03E0 +03FC008003F8000003F8000003F8000003F8000003F0000003F0000003F0000003F00000 +03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 +03F0000003F0000003F0000003F0000003F0000003F0000003F0000007F80000FFFFF000 +FFFFF000FFFFF0001C257EA421>114 D E +%EndDVIPSBitmapFont +/Fb 205[33 33 49[{}2 58.1154 /CMR7 rf /Fc 129[42 27[36 +44 97[{}3 83.022 /CMMI10 rf /Fd 201[42 1[42 42 42 1[42 +4[65 43[{}6 83.022 /CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 12213652 0 16782110 + 354 -177 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +213.39557 0 0.0 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq false and exch 2 lt true and or { /viceversa +0.0 213.39557 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 156.49008 def /dT 5594037 abs 65536 div viceversa +{ neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { xStart +} def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 setlinecap +stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MaxValue abs le { x minTickline moveto x maxTickline lineto +} if } for subTwidth SLW subTColor subLSstroke grestore stroke /dsubT +0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick tickstart +STsize mul moveto cntsubTick tickend STsize mul lineto }{ exit } +ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW +subTColor subLSstroke grestore } if gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore } for /dT +dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon viceversa { add +}{ sub } ifelse { /cntTick exch def logLines { gsave 1 10 subTNo div +9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MinValue +abs le { x minTickline moveto x maxTickline lineto } if } for /dsubT +0 def subTwidth SLW subTColor subLSstroke grestore } dsubT abs 0 gt +{ gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul moveto cntsubTick +tickend STsize mul lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart moveto cntTick tickend lineto Twidth +SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +0 156.49008 0 0.0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq true and exch 2 lt false and or { /viceversa +0.0 156.49008 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 213.39557 def /dT 3729358 abs 65536 div viceversa +{ neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { yStart +} def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 setlinecap +stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MaxValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for subTwidth SLW subTColor subLSstroke grestore stroke +/dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke +grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick tickstart +STsize mul exch moveto cntsubTick tickend STsize mul exch lineto }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart exch +moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore +} for } if end + +@endspecial 238 +-150 a Fd(0)238 -623 y(2)238 -1095 y(4)333 -49 y(0)667 +b(3)g(6)354 -177 y @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 142.26372 28.45274 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 1 0 0 setcmykcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 142.26372 28.45274 /Lineto /lineto load +def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 0 1 0 0 setcmykcolor +1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup 0 gt { /a .5 def PathLength +exch div } { pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get +/y ED /z 0 X {add} forall def 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 /z ED false X { z mul } forall +X astore {0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse +setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 1 0 0 setcmykcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 56.90549 113.81097 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 1 0 0 setcmykcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 1 0 0 setcmykcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 56.90549 113.81097 56.90549 +-11.38092 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 1 0 0 setcmykcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 1 0 0 setcmykcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 56.90549 113.81097 -11.38092 +113.81097 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 1 0 0 setcmykcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 142.26372 28.45274 142.26372 +-11.38092 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 142.26372 28.45274 -11.38092 +28.45274 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 56.90549 113.81097 /Lineto /lineto load +def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.5 SLW 1 0 0 setrgbcolor 1. +.setopacityalpha [ 5.0 3.0 ] -2 0 add dup 0 gt { /a .5 def PathLength +exch div } { pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get +/y ED /z 0 X {add} forall def 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 /z ED false X { z mul } forall +X astore {0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse +setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 199.1692 142.26372 -11.38092 +142.26372 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 199.1692 142.26372 199.1692 +-11.38092 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 199.1692 142.26372 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial 354 -177 a + tx@Dict begin { 34.1432 54.06003 } PutCoor PutBegin end + 354 +-177 a 0 1 0 0 TeXcolorcmyk 349 -148 a Fc(~)-37 b(a)p +Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 a + tx@Dict begin { 85.35823 99.5846 } PutCoor PutBegin end + 354 -177 a 0 0 1 +TeXcolorrgb 349 -140 a Fc(~)g(a)19 b Fd(+)491 -162 y +Fc(~)500 -140 y(b)p Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 +a + tx@Dict begin { 113.81097 35.56592 } PutCoor PutBegin end + 354 -177 a 1 0 0 TeXcolorrgb 345 -158 a Fc(~)354 -137 +y(b)p Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 a + tx@Dict begin { 56.90549 -14.22636 } PutCoor PutBegin end + 354 -177 +a 0 1 0 0 TeXcolorcmyk 313 -165 a Fc(a)357 -153 y Fb(1)p +Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 a + tx@Dict begin { -14.22636 113.81097 } PutCoor PutBegin end + 354 -177 a 0 1 0 0 +TeXcolorcmyk 313 -165 a Fc(a)357 -153 y Fb(2)p Black +354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 a + tx@Dict begin { 142.26372 -14.22636 } PutCoor PutBegin end + 354 -177 a 1 0 0 TeXcolorrgb +318 -155 a Fc(b)354 -143 y Fb(1)p Black 354 -177 a + tx@Dict begin PutEnd end + 354 +-177 a 354 -177 a + tx@Dict begin { -14.22636 28.45274 } PutCoor PutBegin end + 354 -177 a 1 0 0 TeXcolorrgb 318 -155 +a Fc(b)354 -143 y Fb(2)p Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a +354 -177 a + tx@Dict begin { 204.85966 -14.22636 } PutCoor PutBegin end + 354 -177 a 0 0 1 TeXcolorrgb 227 -155 a Fc(a)271 +-143 y Fb(1)326 -155 y Fd(+)f Fc(b)445 -143 y Fb(1)p +Black 354 -177 a + tx@Dict begin PutEnd end + 354 -177 a 354 -177 a + tx@Dict begin { -28.45274 142.26372 } PutCoor PutBegin end + 354 -177 a 0 0 1 +TeXcolorrgb 227 -155 a Fc(a)271 -143 y Fb(2)326 -155 +y Fd(+)g Fc(b)445 -143 y Fb(2)p Black 354 -177 a + tx@Dict begin PutEnd end + 354 +-177 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 99.5846 156.49008 99.5846 142.26372 +102.43004 106.69778 106.69778 85.35823 113.81097 56.90549 /r 42.67911 +def /Lineto { Arcto } def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.8 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.75 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 116.65642 49.7923 113.81097 56.90549 /Lineto /lineto load +def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.75 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial 354 -177 a + tx@Dict begin { 99.5846 159.33553 } PutCoor PutBegin end + 354 -177 a 69 -157 +a Fa(P)n(arallelogramm)354 -177 y + tx@Dict begin PutEnd end + 354 -177 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/AdditionVektorenInEbene.pdf b/2dgrafiken/AdditionVektorenInEbene.pdf new file mode 100644 index 0000000..e1f5048 Binary files /dev/null and b/2dgrafiken/AdditionVektorenInEbene.pdf differ diff --git a/2dgrafiken/AdditionVektorenInEbene.pst b/2dgrafiken/AdditionVektorenInEbene.pst new file mode 100644 index 0000000..936fdbd --- /dev/null +++ b/2dgrafiken/AdditionVektorenInEbene.pst @@ -0,0 +1,31 @@ +\begin{pspicture}(-1.5,-0.75)(7.5,5.8) +%\psgrid[griddots=2,gridlabels=0pt, subgriddiv=2] +\psaxes[Ox=0,Dx=3,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(0,0)(7.5,5.5)%Schnittpunkt, x0, y0 x1,y1 + + + + +\psline[linecolor=red, linewidth=0.5pt]{->}(0,0)(5,1) +\psline[linecolor=magenta, linewidth=0.5pt, linestyle=dashed]{->}(5,1)(7,5) +\psline[linecolor=magenta, linewidth=0.5pt]{->}(0,0)(2,4) +\psline[linecolor=magenta,linewidth=0.1pt,linestyle=dashed](2,-0.4)(2,4) +\psline[linecolor=magenta,linewidth=0.1pt,linestyle=dashed](-0.4,4)(2,4) +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](5,-0.4)(5,1) +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](-0.4,1)(5,1) +\psline[linecolor=red,linewidth=0.5pt,linestyle=dashed]{->}(2,4)(7,5) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](-0.4,5)(7,5) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](7,-0.4)(7,5) +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(7,5) +\rput[l](1.2,1.9){\color{magenta}$\vec{a}$} +\rput[l](3,3.5){\color{blue}$\vec{a}+\vec{b}$} +\rput[l](4,1.25){\color{red}$\vec{b}$} +\rput[1](2.0,-0.5){\color{magenta}{$a_1$}} %%a1 +\rput[1](-0.50,4){\color{magenta}{$a_2$}} %%a2 +\rput[1](5.0,-0.5){\color{red}{$b_1$}} %%b1 +\rput[1](-0.5,1){\color{red}{$b_2$}} %%b2 +\rput[1](7.2,-0.5){\color{blue}{$a_1+b_1$}} %%c1 +\rput[1](-1,5){\color{blue}{$a_2+b_2$}} %%b2 +\psline[linearc=1.5](4,2)(3.75,3)(3.6, 3.75)(3.5,5)(3.5,5.5)%(2.5, 3.15)(2.75, 3.45)(3,3.75)(3.25, 4)(3.35, 4.5)(3.45,5) +\psline[linewidth=0.75pt]{->}(4,2)(4.1, 1.75) +\rput[c](3.5, 5.6){Parallelogramm} +\end{pspicture} \ No newline at end of file diff --git a/2dgrafiken/Aufgabe0001.pst b/2dgrafiken/Aufgabe0001.pst new file mode 100644 index 0000000..1873676 --- /dev/null +++ b/2dgrafiken/Aufgabe0001.pst @@ -0,0 +1,59 @@ +\psset{xunit=0.75cm, yunit=1cm} +\begin{pspicture}(-3.75,-1.5)(11.5,6.5) +%%%%%%%%%%%%%%%%%%%%Koordinaten +\pnode(3,4){A}\pnode(10,5){B}\pnode(5,2.5){C} +\pnode(-2,1.5){D} + +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.1pt]{->}(0,0)(-3.5,-1)(11,6)%Schnittpunkt, x0, y0 x1,y1 +%\psgrid(0,0)(4,4) +\rput[c](11.3,0){$x$} +\rput[c](0,6.2){$y$} + + + + +%%%%%%%%%%%%%%%%%%%%%%%Vektor a%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(3,4) +\rput[c](1.3,2){\color{blue}$\vec{a}$} + +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](3,0)(A) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](0,4)(A) +\rput[c](3,-0.8){\color{blue}$a_1$} +\rput[c](-1,4){\color{blue}$a_2$} + +%%%%%%%%%%%%%%%%%%%%%%%Vektor b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=red, linewidth=0.5pt]{->}(0,0)(B) +\rput[c](5.5,3.1){\color{red}$\vec{b}$} + +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](10,0)(B) +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](0,5)(10,5) +\rput[c](10,-0.8){\color{red}$b_1$} +\rput[c](-1,5){\color{red}$b_2$} + + + +%%%%%%%%%%%%%%%%%%%%%%%Vektor 1/2 b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=lila, linewidth=0.75pt]{->}(0,0)(C) +\rput[c](2.5,1.75){\color{lila}$\frac{1}{2}\vec{b}$} + + +\psline[linecolor=lila,linewidth=0.1pt,linestyle=dashed](5,0)(C) +\psline[linecolor=lila,linewidth=0.1pt,linestyle=dashed](0,2.5)(C) + +\rput[c](5,-0.8){\color{lila}$\frac{1}{2}b_1$} +\rput[c](-1,2.5){\color{lila}$\frac{1}{2}b_2$} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%Subtraktion %%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=lila, linewidth=0.5pt](C)(A) +\psline[linecolor=lila, linewidth=0.5pt]{->}(A)(D) + +\psline[linecolor=orange, linewidth=0.75pt]{->}(0,0)(D) +\psline[linecolor=orange,linewidth=0.1pt,linestyle=dashed](-2,0)(D) +\psline[linecolor=orange,linewidth=0.1pt,linestyle=dashed](0,1.5)(D) + +\rput[c](-1.5,0.5){\color{orange}$\vec{c}$} +\rput[c](0.4,1.5){\color{orange}$c_2$} +\rput[c](-2,-0.8){\color{orange}$\frac{1}{2}c_1$} + +\end{pspicture} diff --git a/2dgrafiken/Aufgabe006.eps b/2dgrafiken/Aufgabe006.eps new file mode 100644 index 0000000..86e9b01 --- /dev/null +++ b/2dgrafiken/Aufgabe006.eps @@ -0,0 +1,3049 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:09:23 2008 +%%BoundingBox: 79 719 93 729 +%%DocumentFonts: CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1309 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 73 /I put +dup 82 /R put +dup 85 /U put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC27E4A7E07D09FB08355F6EA74E530B0743143F2A871732D62D80F35B19FD2 +C7FDF08105847F13D50934419AC647CBA71DF74F4531DC02BBDA22AEEA3FBBBB +407E0ACC52BDC60D01A29407CC4F93EB8BF6D4813E9BA858D54F38918AC82720 +4956D50291F0546E50FCAFA6DBD0099123F5ECD4AB338DB310DB4CAE11337A89 +8ED99B6F483940C97544F888EAF0CBEB11094A13C073D0061808662A04A82BA0 +AD35E8782F854AF66C20C0FEF18D0ECDD1646321B93D327E53D88CA0E825FA95 +05AA57BD7693EA3A9DCCC91F06B8DFDA57D42661A44A77D42A530D086F330537 +53852ABAB5B24501D597AA3FBB2CC79C4E57ED56ED73EFCDE669FAFE8FC7F680 +2AB1BE6F63D1D27E63976CE13BE28FE562D13528F11852D059F36D2CB22E1C1B +57A1A2D2D61F04FA1A34E72B8131BA2C08ADDA4053967682F5A9AFB3E9FDD469 +44A3C01029BFED0832645BCA9D6CEB09CF841A84DB9ECA8F13D685793BD50288 +5C3F78A491464A2FAAF439819D3824E45C8DACFD609C5DFDDA2796B581329D8A +E41E27E3907FAD620727E4EFFD53613E145A2023C4CEB528440ACB0B1273B731 +9B60BFBF644739831F0D5213ADC5082E828C2F0434CAFEBBAF592D8851A64052 +5FFF83DF880065DBD0D72F06A1AAA2C1B6B6BD64439D4BF4C6B413CBCD6F2E09 +0CBF33B9835590E1C4BBD2B24861EBB856DBBDA383E0394D020DF9F4CF64A22D +CD3633128B3180EEB1E14ABEDB7497E4A98D69D969A588E7B59B9C89ABEB4564 +D44CDAEC8E76B005D53B8B6609FADCA24761C219E5A11A29DA83CD0A51C20152 +8056A09C4BA9EBBF40027FDA539DEB3F08527BFC232CAF7F2802A12E12F5AEC9 +54525674533648C03742237D1CB1BD7C4E7DF36C73DE742C4C7D66B3E33E141B +E826001DCE3DC1C869C6C4F2F2B88D76E5E77C983AFA9288B8CDC5417C901E2D +1C89AE9AF4DA5F005E171A0AF4ABC16D0B325FF2CFD27D7B5D9B8F5127FC9F49 +5D074C8BCC9F1732AFDD545050E6E59AA8BEC350EA706D34B286FACBD79BA910 +C33ECFA338BFB247C53A0AEB7439281542A887F958D94C0B7B0644A12C5FA343 +66C3BCA31E85AE23C683FF19C91FCE6A2928809C88F001894BFC8B24946E1A72 +9564913CD8E0E8C496EC0D62924F40A39E435E4A3E88E647368DE2940FE1D838 +F1F386CFA971D120D259001E5518972D063842E46D716CE20EEE99192A0473A6 +39CB91DB549888D7C81DB5FFFD312FB53D1E2B5514E1BF58C47C8D6460B7EACB +D769CB93A4BB66F46A8DBE53B2004E69785C1E05D45BC5C61057D69106184E08 +C38BFC2BD0CC66D4EFBD3C1ECA7175977DEBB681B7F56637664B8CF11891D617 +CA99BE7517706538ABE09331C4DF3AE426F37AACC90F7FEBCCEE98ABB3EF195B +8308879D1A05B45FD1EC1D05FE9293FFB5EED41B5203BBC0C7FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 170[57 +2[63 8[36 73[{}3 83.022 /CMMI10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 7272236 0 13052752 + 118 -35 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 28.45274 91.04869 56.90549 +91.04869 56.90549 79.66776 28.45274 79.66776 /Lineto /lineto load +def false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add +2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 113.81097 91.04869 142.26372 +91.04869 142.26372 79.66776 113.81097 79.66776 /Lineto /lineto load +def false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add +2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 79.66776 28.45274 91.04869 +28.45274 91.04869 56.90549 79.66776 56.90549 /Lineto /lineto load +def false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add +2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial 118 -35 a + tx@Dict begin { 42.67911 99.5846 } PutCoor PutBegin end + 118 -35 a 68 -13 a +Fb(R)131 -1 y Fa(1)118 -35 y + tx@Dict begin PutEnd end + 118 -35 a 118 -35 a + tx@Dict begin { 14.22636 93.89413 } PutCoor PutBegin end + 118 +-35 a 81 -13 a Fb(I)117 -1 y Fa(1)118 -35 y + tx@Dict begin PutEnd end + 118 -35 a +118 -35 a + tx@Dict begin { 156.49008 93.89413 } PutCoor PutBegin end + 118 -35 a 81 -13 a Fb(I)117 -1 y Fa(2)118 -35 +y + tx@Dict begin PutEnd end + 118 -35 a 118 -35 a + tx@Dict begin { 93.89413 71.13185 } PutCoor PutBegin end + 118 -35 a 96 -7 a Fb(I)118 -35 +y + tx@Dict begin PutEnd end + 118 -35 a 118 -35 a + tx@Dict begin { 128.03734 99.5846 } PutCoor PutBegin end + 118 -35 a 68 -13 a Fb(R)131 -1 +y Fa(1)118 -35 y + tx@Dict begin PutEnd end + 118 -35 a 118 -35 a + tx@Dict begin { 99.5846 42.67911 } PutCoor PutBegin end + 118 -35 a 68 -13 +a Fb(R)131 -1 y Fa(2)118 -35 y + tx@Dict begin PutEnd end + 118 -35 a 118 -35 a + tx@Dict begin { 179.25237 42.67911 } PutCoor PutBegin end + 118 +-35 a 71 -13 a Fb(U)128 -1 y Fa(2)118 -35 y + tx@Dict begin PutEnd end + 118 -35 a +118 -35 a + tx@Dict begin { -8.5359 42.67911 } PutCoor PutBegin end + 118 -35 a 71 -13 a Fb(U)128 -1 y Fa(1)118 -35 +y + tx@Dict begin PutEnd end + 118 -35 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { BeginArrow 1. +1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false +/DS 2.0 2. CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB +{ } def /ArrowInside { } def [ 28.45274 85.35823 0.0 85.35823 /Lineto +/lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 17.07181 85.35823 5.69046 85.35823 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 153.64464 85.35823 165.02599 85.35823 +/Lineto /lineto load def false 0 setlinejoin NArray n 0 eq not { +n 1 eq { 0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add +dup 1.5 mul exch 0.3 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 85.35823 68.2864 85.35823 79.66776 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.3 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 0.0 5.69046 0.0 79.66776 /Lineto /lineto +load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 mul exch +0.3 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.3 SLW 0 setgray 1. .setopacityalpha +[ 5.0 3.0 ] -2 0 add dup 0 gt { /a .5 def PathLength exch div } +{ pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get /y ED /z 0 +X {add} forall def 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 /z ED false X { z mul } forall X astore +{0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke + grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.3 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 170.71646 5.69046 170.71646 79.66776 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.3 SLW +0 setgray 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup 0 gt { +/a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse +/b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 /z +ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub y +mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 113.81097 85.35823 56.90549 85.35823 + /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def [ 170.71646 85.35823 142.26372 85.35823 /Lineto /lineto load +def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def 0.2 SLW 0 setgray /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def [ 170.71646 0.0 0.0 0.0 /Lineto /lineto load def false 0 + setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 28.45274 85.35823 0.0 /Lineto +/lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 85.35823 85.35823 56.90549 + /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe006.pdf b/2dgrafiken/Aufgabe006.pdf new file mode 100644 index 0000000..4e7c84d Binary files /dev/null and b/2dgrafiken/Aufgabe006.pdf differ diff --git a/2dgrafiken/Aufgabe006.pst b/2dgrafiken/Aufgabe006.pst new file mode 100644 index 0000000..7a99782 --- /dev/null +++ b/2dgrafiken/Aufgabe006.pst @@ -0,0 +1,37 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.5,-0.15)(6.5,3.75) +%\psgrid(0,0)(7,3.5) + +\pspolygon[linewidth=0.4pt,fillstyle=solid](1,2.8)(2,2.8)(2,3.2)(1,3.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](4,2.8)(5,2.8)(5,3.2)(4,3.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](2.8,2)(3.2,2)(3.2,1)(2.8,1) +\rput[c](1.5,3.5){$R_1$} +\rput[c](0.5,3.3){$I_1$} +\rput[c](5.5,3.3){$I_2$} +\rput[c](3.3,2.5){$I$} +\rput[c](4.5,3.5){$R_1$} +\rput[c](3.5,1.5){$R_2$} +\rput[c](6.3,1.5){$U_2$} +\rput[c](-0.3,1.5){$U_1$} +\psline[linewidth=0.2pt]{o-}(0,3)(1,3) + +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(0.2,3)(0.6,3) +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(5.8,3)(5.4,3) +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(3,2.8)(3,2.4) +\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(0,2.8)(0,0.2) +\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(6,2.8)(6,0.2) +\psline[linewidth=0.2pt](2,3)(4,3) +\psline[linewidth=0.2pt]{-o}(5,3)(6,3) +\psline[linewidth=0.2pt]{o-o}(0,0)(6,0) +\psline[linewidth=0.2pt](3,0)(3,1) +\psline[linewidth=0.2pt](3,2)(3,3) +%\pscircle[linewidth=0.2pt](-0.1,3){0.1} +%\pscircle[linewidth=0.2pt](6.1,3){0.1} +%\pscircle[linewidth=0.2pt](-0.1,0){0.1} +%\pscircle[linewidth=0.2pt](6.1,0){0.1} +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe006.pst.sav b/2dgrafiken/Aufgabe006.pst.sav new file mode 100644 index 0000000..d020243 --- /dev/null +++ b/2dgrafiken/Aufgabe006.pst.sav @@ -0,0 +1,26 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-1,-1)(6,6) +%\psgrid(0,0)(5,2.5) + +\pspolygon[linewidth=0.4pt,fillstyle=solid](1,1.8)(2,1.8)(2,2.2)(1,2.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](4,1.8)(5,1.8)(5,2.2)(4,2.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](4,1.8)(5,1.8)(5,2.2)(4,2.2) +%\rput[c](-1,-0.25){$-e$} +%\rput[c](1,-0.25){$e$} +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,0)(-1,1.5) +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,1.5)(1,1.5) +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](1,1.5)(1,0) +%\psline(0,0)(4,3) +%\psbrace[linecolor=orange,linewidth=0.2pt,ref=lC,nodesepA=5pt](1.1,0)(1.1,1.5){$H$} +%\psarc[linecolor=orange](0,1.5){2}{180}{360} +%\psbrace[linecolor=green,linewidth=0.2pt,ref=lC,nodesepA=5pt](0.05,0.5)(0.05,1.5){$h$} +%\psplot[linecolor=yellow]{0.01}{1}{1 x div} +%\rput[c](1.5,-0.1){$x$} +%\rput[c](-0.2,1.8){$y$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe010.eps b/2dgrafiken/Aufgabe010.eps new file mode 100644 index 0000000..01e3fd8 --- /dev/null +++ b/2dgrafiken/Aufgabe010.eps @@ -0,0 +1,3118 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:12:56 2008 +%%BoundingBox: 79 729 93 739 +%%DocumentFonts: CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1312 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4B067A46F8EE +2AFACDE591ADF7304939394F221B5B9B316BC47DC7772711A35B466E1790D4F5 +C02C57DE57A0498128C6041CB7E702F4D8500433633B8358C438237BBA39C647 +F659FACF75574B1AAD3FE61FB97D6C5D0B19E4AC762321891092E73D192C4816 +2F14A6FFAA1B22AABB65E8F611F1E9AF66DF68DA1B2B64B4CA8870261F8663FA +28953254FA64F0AD6EFBFAB15830AF856A65835C803B70963595060F91F4079B +F8BF5396F04C070254AC5DCACB20C0B1FADD38825886322366927C97E3C5AA1B +EA858D5974EBC14D17D4ADDCB3C7EA74A8A2B75293747CFCE0B484713D631F95 +43BD5A359229F1276D2F652078ADA5000D1E060CE5CDF2E57401E487F3C10975 +09AACD27CEE8581EBADC25D0FC9CEA533B99DCEDC0F28E782F4FE22AE097CCF3 +F73338DA748C535291B4E8AF84546FE4B910107B6FFC5439C5B966DE6C905D86 +460A69D6031EC3F7261FCB6D932F722BC1F550574EBD6F676AC9770969657422 +4C8212F9FC9A49C9F0E813A2ACD16D1131A73D3001E698C63F76FE6D6143D310 +155256BE90530489736CF35CA2D7E4A1FAEAE2423ABB52E55DD7314097DF7C09 +F39C3E3A29F9BAA3AEBA89CC3E7B134E79A2DA39D449D98FE4ADE1A0ACDA79C4 +1E2C78CDCC5BDD192DAA27F17DC4368EBC54CC009802018E50519F69025DE7E8 +FB61694AEA672E59D00F6BA0CA9509FB8DC6544CB92B70BA0AE393A43959C90E +8857B0DA53A8D26426CAE0DCF2F3033BAC62502E08447B09CC18B2525AB65EC2 +C63074FF725168D115137ECDAB1EEB083711F647F757C9806056811466D59087 +B93D6B71594046B3B60A7D5789D6B99FC14764428A251F0A54ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 73 /I put +dup 82 /R put +dup 85 /U put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC27E4A7E07D09FB08355F6EA74E530B0743143F2A871732D62D80F35B19FD2 +C7FDF08105847F13D50934419AC647CBA71DF74F4531DC02BBDA22AEEA3FBBBB +407E0ACC52BDC60D01A29407CC4F93EB8BF6D4813E9BA858D54F38918AC82720 +4956D50291F0546E50FCAFA6DBD0099123F5ECD4AB338DB310DB4CAE11337A89 +8ED99B6F483940C97544F888EAF0CBEB11094A13C073D0061808662A04A82BA0 +AD35E8782F854AF66C20C0FEF18D0ECDD1646321B93D327E53D88CA0E825FA95 +05AA57BD77A225AB34CD5ACC7E73AF40D929E47E13D5E13C42802D90DB29608E +1EFC240BAF75617F0041858CE70A6F8FEF4516ABD16A7AC7284F44FB01FBC5A2 +DE08ECCB0477B95F961E8513DBC2796D4CED7CD6EF3162613634B941517C4CD5 +7096D3E3DBBCEDF72D4C3BD038C7C32E49331F94FEF3EFE606F54CB5A7233E98 +D0B8BE71C5948E2DD31DEB17B2C217C747E050F0FEBB799D56EDAAD3B51DDDD0 +A09D39F987DDEDD2BA3910885ADB3DE10C383BD6867827E3F88175A835DBBC2A +1816BC56A4E77A64316AA9553C1EDDD9AD09174983955162C38D6937E4C6824B +E6E3DE7CC12A2327E8EEF1D7B060A63E8249F7631D3A9101CFE83D506752BCE7 +54FA1FBB13AC9E75331E61AB5860727CC7A5B833338BDF5DE1ACE6FC469FE8D9 +8429AFA89489DEA794DFF855F994EA2001334FB2FD5465F5F9B8D413A2BF51DE +C9F01B6F4E5CE254C931ACF06194D4C72FEF5AC529211BEFCB47F27C79443B58 +02D84BEF5E5D927D7F82E394727E1BAF7310146A3089CAA991223F7E5FC9685D +69B29620DB72C31DEA0DE4EB82C648E85F811EFAFBF443423951662BF98D459F +2B6917E681832EA1E58004408CCE164138A0F5946B54A358549F37A5A8670B92 +1FC95612A7CD735918FDEB802B581FEF0FF304E0C04312561BB0C4DEF045DE3F +02A5CC70C3FDF412AB46091929060496A29AD2693FFD20690B8B13C888FE9907 +6EF6937640D8C6535A40D3DAC362C0DBEB106E925A475E42E1FA9492F9D913A6 +ECA241C25C72C0121189398E4A61F299F0C410C5FED88F83222FEE791DDF0E6F +F83F63893549EDA82DA2571328E9F2B3262326960C553E2ED890CAC4078E4F68 +D648CB4338C59E950C9AD382CCB8CAFCAAC05015C2F2586FBE4507A04BFA2315 +FCC0B4338297B1A9EA03D0167FB0BA296B01A5730A40BB3FC8E9E4792D43A1C0 +06C8AF47565B51F3525446A37F50D5DCB400AA00A4C1E5EB686F2A0B42EA0139 +ADA661D5DE18E98A9D653B14BE7B313E7E9321030A57B5D6C3B3F4D551E11E86 +7DB6385599003D7E0EFA5ADA8F0277394406D3DCDBB9E8F8CB991C84C2910892 +24E1FC8466025281F666E33441838E675AC79CBAF3D04527B01DE0B39E083F4B +064C5E3F257DE23032CD39A9A029D05F2335AC8758B6772C5A702EA449B70591 +BF29901D1177351303A82B42321091E51A4F8B7AFF5397436879E39DCC769E7C +3B38403AE9B86CBDF6F99153534AC4DFDF7B4AC183B8305D9F4B947603305CE2 +CEC7C5A31C2D09D350F7572C84434EFCDDCF2A344258F9E72BD0A5332AFA7DC0 +1684C7C6E54B9139ED0C22B5A8A0EC4E7E6FB181DD670EDDFA94231F8C0D596E +1F85CACE71F0DD0A82ACAEF4D628A25E4DC8239538476D7E231E8C1B1A4AD05C +C2741EB3919A8EC16B4D3A98D96C9AC168B9F9EE9ED242435110E6BF97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start +%DVIPSBitmapFont: Fa ecrm1000 10 1 +/Fa 1 74 df73 D E +%EndDVIPSBitmapFont +/Fb 204[33 33 33 49[{}3 58.1154 /CMR7 rf /Fc 170[57 2[63 +8[36 7[62 65[{}4 83.022 /CMMI10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 6712855 0 13052752 + 118 -118 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 14.22636 5.69046 42.67911 +5.69046 42.67911 -5.69046 14.22636 -5.69046 /Lineto /lineto load def +false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 128.03734 5.69046 156.49008 +5.69046 156.49008 -5.69046 128.03734 -5.69046 /Lineto /lineto load +def false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add +2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray [ 79.66776 28.45274 91.04869 +28.45274 91.04869 56.90549 79.66776 56.90549 /Lineto /lineto load +def false 0 setlinejoin 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 /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add +2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/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 x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 1 setgray 1. .setopacityalpha fill + grestore gsave 0.4 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial 118 -118 a + tx@Dict begin { 28.45274 14.22636 } PutCoor PutBegin end + 118 -118 a 68 -96 +a Fc(R)131 -84 y Fb(3)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 -118 +a + tx@Dict begin { 93.89413 14.22636 } PutCoor PutBegin end + 118 -118 a 81 -96 a Fc(I)117 -84 y Fb(2)118 -118 y + tx@Dict begin PutEnd end + +118 -118 a 118 -118 a + tx@Dict begin { 105.27505 -8.5359 } PutCoor PutBegin end + 118 -118 a 81 -96 a Fc(I)117 -84 +y Fb(1)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 -118 a + tx@Dict begin { 142.26372 14.22636 } PutCoor PutBegin end + 118 -118 a 68 +-96 a Fc(R)131 -84 y Fb(1)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 -118 +a + tx@Dict begin { 99.5846 42.67911 } PutCoor PutBegin end + 118 -118 a 68 -96 a Fc(R)131 -84 y Fb(2)118 -118 y + tx@Dict begin PutEnd end + +118 -118 a 118 -118 a + tx@Dict begin { 179.25237 42.67911 } PutCoor PutBegin end + 118 -118 a 71 -96 a Fc(U)128 -84 +y Fb(2)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 -118 a + tx@Dict begin { -8.5359 42.67911 } PutCoor PutBegin end + 118 -118 a 71 +-96 a Fc(U)128 -84 y Fb(1)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 -118 +a + tx@Dict begin { 85.35823 -8.5359 } PutCoor PutBegin end + 118 -118 a 87 -90 a Fc(A)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a 118 +-118 a + tx@Dict begin { 65.44139 -8.5359 } PutCoor PutBegin end + 118 -118 a 81 -96 a Fc(I)117 -84 y Fb(3)118 -118 +y + tx@Dict begin PutEnd end + 118 -118 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray 128.03734 42.67911 8.5359 +0 CLW mul sub 0 360 arc closepath gsave 0.4 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial 118 +-118 a + tx@Dict begin { 128.03734 42.67911 } PutCoor PutBegin end + 118 -118 a 87 -90 a Fa(I)r(I)118 -118 y + tx@Dict begin PutEnd end + 118 -118 +a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0 setgray 42.67911 42.67911 8.5359 +0 CLW mul sub 0 360 arc closepath gsave 0.4 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial 118 -118 a + tx@Dict begin { 42.67911 42.67911 } PutCoor PutBegin end + 118 +-118 a 103 -90 a Fa(I)118 -118 y + tx@Dict begin PutEnd end + 118 -118 a @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale false +0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a +ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a +neg rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow + moveto } def /ArrowB { } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { BeginArrow 1. 1. scale false 0.3 1.5 4.2679 0. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def [ 68.2864 0.0 62.59595 0.0 /Lineto /lineto load +def false 0 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 mul exch 0.3 +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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale false +0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a +ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a +neg rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow + moveto } def /ArrowB { } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { BeginArrow 1. 1. scale false 0.3 1.5 4.2679 0. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def [ 108.1205 0.0 102.43004 0.0 /Lineto /lineto +load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 mul exch +0.3 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.2 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 85.35823 11.38092 85.35823 17.07181 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.3 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 0.0 5.69046 0.0 79.66776 /Lineto /lineto +load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 mul exch +0.3 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.3 SLW 0 setgray 1. .setopacityalpha +[ 5.0 3.0 ] -2 0 add dup 0 gt { /a .5 def PathLength exch div } +{ pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get /y ED /z 0 +X {add} forall def 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 /z ED false X { z mul } forall X astore +{0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke + grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.3 SLW 0 setgray + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 170.71646 5.69046 170.71646 79.66776 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.3 SLW +0 setgray 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup 0 gt { +/a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse +/b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 /z +ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub y +mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 128.03734 0.0 42.67911 0.0 /Lineto +/lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def [ 170.71646 0.0 156.49008 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def 0.2 SLW 0 setgray /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { BeginArrow +1. 1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} +false /DS 2.0 2. CLW mul add 2 div def EndDot EndArrow } def /ArrowInside +{ } def [ 170.71646 85.35823 0.0 85.35823 /Lineto /lineto load def +false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale 0.0 + dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false /DS 2.0 2. +CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { BeginArrow 1. +1. scale 0.0 dup 0 eq { pop }{ SLW } ifelse {1 setgray true} false +/DS 2.0 2. CLW mul add 2 div def EndDot EndArrow moveto } def /ArrowB +{ } def /ArrowInside { } def [ 14.22636 0.0 0.0 0.0 /Lineto /lineto +load def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 28.45274 85.35823 0.0 /Lineto +/lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 85.35823 85.35823 56.90549 + /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 setgray 1. .setopacityalpha 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray 85.35823 0.0 0.99594 0 CLW +mul sub 0 360 arc closepath gsave 0 setgray 1. .setopacityalpha fill + grestore gsave 0.2 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.2 SLW 0 setgray 85.35823 85.35823 0.99594 +0 CLW mul sub 0 360 arc closepath gsave 0 setgray 1. .setopacityalpha +fill grestore gsave 0.2 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe010.pdf b/2dgrafiken/Aufgabe010.pdf new file mode 100644 index 0000000..2675ea3 Binary files /dev/null and b/2dgrafiken/Aufgabe010.pdf differ diff --git a/2dgrafiken/Aufgabe010.pst b/2dgrafiken/Aufgabe010.pst new file mode 100644 index 0000000..feda8d8 --- /dev/null +++ b/2dgrafiken/Aufgabe010.pst @@ -0,0 +1,40 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +%\begin{pspicture}(-0.5,-0.15)(6.5,3.75) +\begin{pspicture}(-0.5,-0.5)(6.5,3.1) +%\psgrid(0,0)(7,3.5) + +\pspolygon[linewidth=0.4pt,fillstyle=solid](0.5,-0.2)(1.5,-0.2)(1.5,0.2)(0.5,0.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](4.5,-0.2)(5.5,-0.2)(5.5,0.2)(4.5,0.2) +\pspolygon[linewidth=0.4pt,fillstyle=solid](2.8,2)(3.2,2)(3.2,1)(2.8,1)%0.4 +\rput[c](1,0.5){$R_3$} +\rput[c](3.3,0.5){$I_2$} +\rput[c](3.7,-0.3){$I_1$} +\rput[c](5,0.5){$R_1$} +\rput[c](3.5,1.5){$R_2$} +\rput[c](6.3,1.5){$U_2$} +\rput[c](-0.3,1.5){$U_1$} +\rput[c](3,-0.3){$A$} +\rput[c](2.3,-0.3){$I_3$} +\pscircle[linewidth=0.4pt](4.5,1.5){0.3} +\rput[c](4.5,1.5){II} +\pscircle[linewidth=0.4pt](1.5,1.5){0.3} +\rput[c](1.5,1.5){I} +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{<-}(2.2,0)(2.4,0) +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{<-}(3.6,0)(3.8,0) +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(3,0.6)(3,0.4) +\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(0,2.8)(0,0.2) +\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(6,2.8)(6,0.2) +\psline[linewidth=0.2pt](1.5,0)(4.5,0) +\psline[linewidth=0.2pt]{-o}(5.5,0)(6,0)%0.2 +\psline[linewidth=0.2pt]{o-o}(0,3)(6,3)%0.2 +\psline[linewidth=0.2pt]{o-}(0,0)(0.5,0)%0.2 +\psline[linewidth=0.2pt](3,0)(3,1) +\psline[linewidth=0.2pt](3,2)(3,3) +\pscircle[linewidth=0.2pt,fillstyle=solid, fillcolor=black ](3,0){0.035} +\pscircle[linewidth=0.2pt,fillstyle=solid, fillcolor=black ](3,3){0.035} +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe011.eps b/2dgrafiken/Aufgabe011.eps new file mode 100644 index 0000000..480a9ba --- /dev/null +++ b/2dgrafiken/Aufgabe011.eps @@ -0,0 +1,3003 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:14:46 2008 +%%BoundingBox: 33 693 55 730 +%%DocumentFonts: CMEX10 CMR10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1314 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 54 /six put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3901F92CC2EC9BC842 +5EE578CF06846C7078E026DFCB18AD4D78023652F0165DE17C183E43752132BB +19F361414774D5C13AD718B01F47E61745009D823C3996FB208C3A9D4B4F116E +4D38E56725461BBA1FE17CDC27CD99AC7D748CF7750CA2C6E1EC5E4746AC85F5 +E8274DA59750A144AD5AEBE6C9A7CE843BD6837FE2A88078124AA1A94EFC1C50 +B811EAEB2679AD57294AB13E45AEEB8C6EA105696E341E4C14ECF573EEBB83E6 +F9DE39BD6CC376158231CA2A83D91F721ABD116A40698F26610853E7FD075472 +ED40CCE32031FCFAE2737B412807F7C9E6494D0B73B7AB13AFD20D5219A71562 +12A7B57DD9965B15AFB38BEDA28D35D73282D4F1F9A15C4403B7C69C7E80DF54 +C112D7813F7271A5474438A7CC380735F029CFDF4C0C30C3901A7E30F8B3B017 +B1A663CC9481C79B903806F30AF37522828FD5DE3EC220C719B63A90FB3CE105 +3D5E0F56440F1657C4D99760B010A26A6B8411D2FC60C28C4E885AD14A379244 +841B408BEDC905276B7C9BE5BDFC5675334396F3715517D7A61C24BE35125DBD +E1F7E59DABE44B1155B5AD46DB008CFEFC55199AA4E4AE14D2E1F5A9C868442C +5DEC207A5BD9D7CB3A9D5C0BCF31E3ACF5CFB49145C099F5EF39A75AF03D0C11 +E7FFCF9EACA07B7763FFE6E967041542039ED83F65701CA8EBE91FFE63E0884A +57017E016E8182B7E0F7A6DC2A9E9EA4FD8B87FA6E52188224544B87EE5FB59F +0294D276133B8CBCFFDF9178BDB01CF721746638ADA1F70FC1A089DB45CAB49A +7B9483CE96FDD2316651B242922E198D169F3A4D8AF79E1457FF2B1F41D5C058 +AD6446064BB43E3B05D66295B16FB541E442459B6455D008DF9FAE1DA7E2FC31 +9BAA5A8C0DBB2C55C1B6A2553BF0D204824162E1B11677B24CEED5054DF8762B +F166EE30CDE851B0B6DC48423763EB3516D120698AC2FE6F5B0AC7696E8712F6 +30DA0ABD1943E93BAA7B4091D3FBA3D46E98F991E2D824DD5F48D9220588A462 +1A2877F6ADE9E4ECA0EF44204C589E34E6951C2DF48872736D6CF195E5F8376F +6C650A2264F8BF2DA98D99593693022172E9D67A99B6FBAF896697111191B942 +E20FB2BFD81B923AD79D99093BF16FE2CC788F2932FA97AD738A126B06D7BFC3 +6B6D893E74011FE566697B0B84B07BDF4641339903427E66B28AA862A890A3BE +00BF62F8E4916C452976D1424796B1CC073D27EEB3F77E3EB64B559FBF032579 +C2217032081826B5B34154FBDBEBFB0A3F42EEFA653B53E89ABFEF8DB26983BD +98BD0D69DDBE469D6241C4E9FBA4AB2726C10BC780A62E94EF77E9D409B001F8 +C316456F85600E5CF02315BB0863B4BD47A95256216BAAF8DC9888430AAD4C17 +85B1844EEB3806CD9A4C8E625DE3BD034DDA8A2A91106FADA95BD6A09BF8EB2C +1267BF9D0627F8E93B76214F32ECBF0D6664C77D02B22C769A19BA1A8774DB95 +8EAAC80BCC301F8FF60000BD1BE6B6F50447B0E9D19C5EB6E22939BA0E4EF18F +E3A88B47EA3588E89C0523557E2E1B5ECB17F3F2C089C44363CDD2999A2A9CC8 +B915A3D07772608E1DDB1EA2FC6D115CDA62F229975275892351D2782BD7DC52 +1D62F48C5C5AB303570D336F8EAA71BA3FF6EA5726E4BE93C525EDFAF71368A3 +6B7F3345D5028EF39F509C81D1CA830DE8DEDE2CA998C54220352B15AD429AD5 +633BFEACDEBA2F1FE294837414F3D7C5171EB4A01F42DD7944C08C70D7262E36 +5F71EB07FC31322115E1099C298000C01132453EF5B5D2867F5A1A6600AAC5E5 +F9B9D6376C26B564FFADF341D06C5FA85EA7F709D6F8753D3F10A1A9B721D7DA +0E4D2F02A4AE5BDA0B062675A60A165C15C446EA7C69C6F570ACF67D5B190D1F +0BEB3A7DAD5EAADC4DB5BE683436D592936C3A3B7975A160A33E87FE27113079 +2CEDFE2387584F80B93A8ACE0F6533E1CDFC8D00816677E677F33493E867FF52 +51F0BA73D4DC0E34C86B6687D669314BA2446D2097962D2B0EC641B1CA606C23 +0B4C83759928EE9D7BDB625EE7EEAC58A73AF44DC527B24FF1AF7F56E2AEE15B +D55E9BFDFF93A40A74B8D8202E9E326772BBA1021DFD71060578016FD556D962 +04C6E8403C9A57839742D1CABF827F46B07FD906A7C90646593CF06AE7B618B3 +8748264670758AD7C2EB49556096C167A78E411A50B817BA2054C6CE7393564A +E353EA7B08CE167F583BB995 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMEX10 +%!PS-AdobeFont-1.1: CMEX10 1.00 +%%CreationDate: 1992 Jul 23 21:22:48 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMEX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMEX10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 48 /parenlefttp put +dup 49 /parenrighttp put +dup 64 /parenleftbt put +dup 65 /parenrightbt put +readonly def +/FontBBox{-24 -2960 1454 772}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 +DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 +8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 +FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 +BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 +EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 +DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 +EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C +6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 +E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 +E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 +4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 +8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 +8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 +FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A +EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 +680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 +5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 +3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 +DD4DD1C1CF9DB1FD1568F84892C602408AFD8174118B8C83CF7B8E0548D0EF58 +2FA44F0D00B7F86166B3289AFBF7577CA8FEE257C6909F4CF3E3D53CFC926DAC +BA918B2F3C34518D74C7E3A03B22F5A5A025DD251DB0AE71C6298B4613A17682 +2F7D1BF16426C932A5365D890FAD89912A1382A6222403D98FF75F6A39E9F550 +0F4C4D60374B66EA34D75D97E315C534C3B5B184844D9108B1B8180EB2773894 +E43B384EFCAC42A6DA864C0CECC50DC67B4D47A8E52BAEBD0A96F24C0C645995 +1AA793B46BC641FF1AD2B88C0A357E8D82225B0423991283C989A7290323CD97 +F8F5467E8CEDEF98E23258BB90EF78370FA2A020B7A9A3283AA514A5998A091D +2C9FF3D23520AA32AB698E9EC085EE6A78A44C5B91D5F696F99750DEC6870B44 +2889FF4D37C295707BAB1CEBB60CF2D4AE8132A067CE697A86CA6849F59A0D56 +BB394FCF6D0F2132AABE56222406C314B5CFC4BD37C67784C4291BF27B916E8F +022D97653CA7B0735CC4DD57157207AC72AB789F9049FB8DA214927069A6F847 +28F593E23BA32438F94F4ADF68F627177D8067E99B7024145B6F85EEAC4CD04D +F641B40CC04A8EF94792BD1655BC5BEF610DC4A79E2CFE0437F652A1DABC0394 +37A9C68B6A8E030C33918980DB56BD64F8F7F320DAD6691CE8F542077D13BCB6 +50FFCFE6FC3B8372624FC84FB6DBA579AABE077C18AB4F015E2FB6E6D86DA7FF +AC561B351777F0E995D8AAFA5C0BCA90240475F587742F2DFAFB154B7FC375D3 +E704FE350A5EEAA888CBF158913C074E998F9DBD3947802EF0EF08E058112FC6 +0E9307B9FE29090D81441A1C3B7E371656A3321A0031038D54BB66700594C9C7 +2FDDE3DE50EE1CFBDEEE5B6DDBA17B1D6328651FE1EFD1E2B83769495353E35A +988064FDB6CE37ED4570B49903AF26304DE40164903476EC2F4830D64995CEE9 +B37B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 201[42 1[42 42 42 42 42 48[{}6 83.022 /CMR10 +rf /Fb 190[73 73 14[73 73 48[{}4 83.022 /CMEX10 rf +%DVIPSBitmapFont: Fc ecrm1000 10 2 +/Fc 2 46 df<000000300000000000003000000000000030000000000000300000000000 +003000000000000030000000000000300000000000003000000000000030000000000000 +300000000000003000000000000030000000000000300000000000003000000000000030 +000000000000300000000000003000000000000030000000000000300000000000003000 +000000000030000000000000300000000000003000000000000030000000000000300000 +0000000030000000FFFFFFFFFFFFFCFFFFFFFFFFFFFC0000003000000000000030000000 +000000300000000000003000000000000030000000000000300000000000003000000000 +000030000000000000300000000000003000000000000030000000000000300000000000 +003000000000000030000000000000300000000000003000000000000030000000000000 +300000000000003000000000000030000000000000300000000000003000000000000030 +00000000000030000000000000300000000000003000000036367BAF41>43 +D45 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 4475218 0 4288767 + -236 71 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 73.9773 17.07181 34.1432 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 83.9355 17.07181 44.10184 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 93.89413 17.07181 54.06003 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 34.1432 17.07181 71.13185 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 44.10184 17.07181 81.09048 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.3 1.5 4.2679 0. CLW mul add dup 2 div /w ED +mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto +0 0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a +sub moveto EndArrow } def /ArrowInside { } def 0.4 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.3 +1.5 4.2679 0. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { +0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow } +def /ArrowInside { } def [ 54.06003 17.07181 91.04869 68.2864 /Lineto +/lineto load def false 0 setlinejoin NArray n 0 eq not { n 1 eq { +0 0 /n 2 def } if () length 0 gt { 4.2679 0. CLW mul add dup 1.5 +mul exch 0.3 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.4 SLW +1 0 0 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] -2 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial -236 71 a + tx@Dict begin { 31.29819 71.13185 } PutCoor PutBegin end + -236 71 a 0 0 1 TeXcolorrgb +-268 92 a Fc(+)p Black -236 71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 41.25638 71.13185 } PutCoor PutBegin end + +-236 71 a 0 0 1 TeXcolorrgb -268 92 a Fc(+)p Black -236 +71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 51.21501 71.13185 } PutCoor PutBegin end + -236 71 a 0 0 1 TeXcolorrgb +-268 92 a Fc(+)p Black -236 71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 31.29819 14.22636 } PutCoor PutBegin end + +-236 71 a 1 0 0 TeXcolorrgb -250 89 a Fc(-)p Black -236 +71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 41.25638 14.22636 } PutCoor PutBegin end + -236 71 a 1 0 0 TeXcolorrgb +-250 89 a Fc(-)p Black -236 71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 51.21501 14.22636 } PutCoor PutBegin end + +-236 71 a 1 0 0 TeXcolorrgb -250 89 a Fc(-)p Black -236 +71 a + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 42.67911 42.67911 } PutCoor PutBegin end + -236 71 a -319 -75 a Fb(0)-319 +74 y(@)-236 71 y + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 42.67911 42.67911 } PutCoor PutBegin end + -236 71 a -257 -9 +a Fa(4)-257 91 y(3)-257 190 y(1)-236 71 y + tx@Dict begin PutEnd end + -236 71 a -236 +71 a + tx@Dict begin { 52.63774 42.67911 } PutCoor PutBegin end + -236 71 a -257 -9 a Fa(6)-257 91 y(1)-257 190 y(2)-236 +71 y + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 62.59595 42.67911 } PutCoor PutBegin end + -236 71 a -257 -9 a Fa(3)-257 +91 y(0)-257 190 y(1)-236 71 y + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 62.59595 42.67911 } PutCoor PutBegin end + -236 +71 a -226 -75 a Fb(1)-226 74 y(A)-236 71 y + tx@Dict begin PutEnd end + -236 71 a +-236 71 a + tx@Dict begin { 72.55458 42.67911 } PutCoor PutBegin end + -236 71 a -257 -9 a Fa(4)-257 91 y(3)-257 190 +y(1)-236 71 y + tx@Dict begin PutEnd end + -236 71 a -236 71 a + tx@Dict begin { 82.51277 42.67911 } PutCoor PutBegin end + -236 71 a -257 -9 a +Fa(6)-257 91 y(1)-257 190 y(2)-236 71 y + tx@Dict begin PutEnd end + -236 71 a eop +end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe011.pdf b/2dgrafiken/Aufgabe011.pdf new file mode 100644 index 0000000..ae36898 Binary files /dev/null and b/2dgrafiken/Aufgabe011.pdf differ diff --git a/2dgrafiken/Aufgabe011.pst b/2dgrafiken/Aufgabe011.pst new file mode 100644 index 0000000..a93df40 --- /dev/null +++ b/2dgrafiken/Aufgabe011.pst @@ -0,0 +1,73 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(1,0.3)(3.3,2.7) +%\psgrid(0,0)(5,3) + +\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(1.2,2.4)(2.6,0.6) +\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(1.55,2.4)(2.95,0.6) +\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(1.9,2.4)(3.3,0.6) +\psline[linewidth=0.4pt,linecolor= red, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(2.5,2.4)(1.2,0.6) +\psline[linewidth=0.4pt,linecolor= red, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(2.85,2.4)(1.55,0.6) +\psline[linewidth=0.4pt,linecolor= red, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3, linestyle=dashed]{->}(3.2,2.4)(1.9,0.6) +\rput[c](1.1,2.5){\color{Blue}+} +\rput[c](1.45,2.5){\color{Blue}+} +\rput[c](1.8,2.5){\color{Blue}+} +\rput[c](1.1,0.5){\color{Red}-} +\rput[c](1.45,0.5){\color{Red}-} +\rput[c](1.8,0.5){\color{Red}-} + +\rput[c](1.5,1.5){$ +\left( {\begin{array}{c} + \\ + \\ + \\ +\end{array}} \right. $} + +\rput[c](1.5,1.5){$ + {\begin{array}{c} + 4 \\ + 3 \\ + 1 \\ +\end{array}} $} + +\rput[c](1.85,1.5){$ +\begin{array}{c} + 6 \\ + 1 \\ + 2 \\ +\end{array}$} + +\rput[c](2.2,1.5){$ + {\begin{array}{c} + 3 \\ + 0 \\ + 1 \\ +\end{array}} $} + +\rput[c](2.2,1.5){$ +\left. {\begin{array}{c} + \\ + \\ + \\ +\end{array}} \right) $} + +\rput[c](2.55,1.5){$ +\begin{array}{c} + 4 \\ + 3 \\ + 1 \\ +\end{array}$} + + +\rput[c](2.9,1.5){$ +\begin{array}{c} +6 \\ +1 \\ + 2 \\ +\end{array}$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe011.pst.sav b/2dgrafiken/Aufgabe011.pst.sav new file mode 100644 index 0000000..031cb01 --- /dev/null +++ b/2dgrafiken/Aufgabe011.pst.sav @@ -0,0 +1,35 @@ +\psset{xunit=1cm, yunit=1cm} +\psframebox{ +\begin{pspicture}(0,0)(5,3) +\psgrid(0,0)(5,3) + +\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(1.6,2.2)(3.5,0.8) +%\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(1.5,2.4)(3.5,0.6) +%\psline[linewidth=0.4pt,linecolor= blue, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(2,2.4)(4,0.6) + +\rput[c](1.5,1.5){$ +\left( {\begin{array}{ccc} + 4 & 6 & 3 \\ + 3 & 1 & 0 \\ + 1 & 2 & 1 \\ +\end{array}} \right.$} +\rput[c](1.5,1.5){$ +\left( {\begin{array}{ccc} + 4 & 6 & 3 \\ + 3 & 1 & 0 \\ + 1 & 2 & 1 \\ +\end{array}} \right.$} + + +\rput[c](4,1.5){$ +\begin{array}{cc} + 4 & 6 \\ + 3 & 1 \\ + 1 & 2 \\ +\end{array}$} + +\end{pspicture}} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe019.eps b/2dgrafiken/Aufgabe019.eps new file mode 100644 index 0000000..f101f24 --- /dev/null +++ b/2dgrafiken/Aufgabe019.eps @@ -0,0 +1,2888 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:16:28 2008 +%%BoundingBox: 133 744 170 753 +%%DocumentFonts: CMR10 CMMI10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1316 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 122 /z put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC6625AD0DE6604E9706C5 +5484E3F510FD79D18DD0DB3F9F1AFBC9CB11AF840958EC2C8E7771B8A8A1FE38 +83D887B747D3AA8ECF376AEB3631BAE5F1BD24F9F305E2D5FD073C58DF97A8DF +6D980C9D25A2170AC9D17DFA15C0951CD09D855DFB639EBD60A6C1AE6116F916 +BF91B8508565F8D9A0AE585F73CC386F2CF37A7799E9E63F2B3CEFFAC78291EE +41CA6707D6A8FB39A964FFA3C7D355C354B77D67D01812E1E6C59B3C89DAF203 +01C8E92AC3CECCDEFFC2871697792A231574F32B2C72C4C680487A8FED400F99 +640BE2966716796D42FF99E4128BB4DE56F68C4EBC093045F8943A7F50D16DCC +D0289D38339CBEFB5EC4AEE26A848C719D7F6F06250F8F3AA787554484CA0107 +8ADFA8F911F08F8F9AF5D9F95FA890A48210DFE1C44DB683BC411AB6805F4CF3 +D92D4867A757218D1915DCA89E367669125CA6DBDB636D3EBF7200DA606B62E1 +44CE5D40BB25F74368FAB5A53875ADC62DDBC98B24665A58D289E3378285C762 +FE4C913B8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 51 /three put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390C98D93BE299A9CB +689CDA9BE6BEA47570D9D15DC614719507F27069622E7DB1A97F7B6FF5A5A0C5 +78162E7A9CF76FF72A34097236DF64DA4B61645C7326058030E2B5AABFCC44D0 +49E9CD83D81D8ECA953BDB8CA81CD3D122FAB35612C9C3F6C7F22B666462A78C +AC5473F8755B70B582C0D4C3C9D8C70EE755D41A42C8C17F066414DC21B33111 +A188A5FDDC2D6B02C0965CDC0D91DF1A487ABBBBE2E2896CE0B4BFBE38C79866 +BCD14C2C92449525BD879F6BC320C05FEF8BF68D616695ACD14B3594882B4914 +5B7569629AF50EBCF7152E3715510FBF60F1675D5259715B293A3D7E844764F8 +4B88D997BA5C7B7AB6B104E77F7769C22788334A91C91F02CE675DC14E1FDE5A +F8A03756C12F189494DBC735E3C86A6D4BC4D005E323AC4D7CEF6E1820F9F184 +4DD2EC4C5C58AEE4B5344077AFCCCD82CFC289D46552563B36DA5DAF3C179C90 +BBB4163F2E88909E040769367672B37254345F892D42DF5D5261EAB4CFD4745D +7D72D01D779DEA580D7AA0897250CB8CC10EF282B3A1899F63F375E39C44176C +B7564F74D9707C66F815382539015CB24FB96758AE957394949E07B161F90114 +1689FD2EB721C8215340E343CC9C3AA8F8312A359E8C9EB957342CA66C740F92 +F347ED9226CA15DE4E048981B43AD0DA6EAEB58B2EB85C48F0F0DECD3653C122 +44845CCFCF12E2793EEA620EA9CA14BE18A089FD9DF13B1576C0B3B4A52756B0 +7E0C853E9D27084755446131B18A0471E49057C0206CAB7C0091F4BA8351D8ED +0446ED99B3C2DD22689CABB079FE99451395488C85BCA382BB2D6DB0C0049D88 +BF3811B8C6236AE17A7668CDA660FF11A40573D23984CB953E1794E4B756A6D8 +AC49ABAC506F1CD530D5765184B15F40AFB44647A6E8CFFA58989E1F28F909B8 +8F2D628785382F4B60DCEE93C7654B2E83613CE98AC4ACC40FCA6F70BF078253 +0C863E2FD89EBD7AFB20981F9C5EB0ABBFBD79E9B6CDB93259DAB9E334589721 +5C64989B14B91C2F7E9470D2C8BAB37AB9FF7FF1F419BB3E5A759D23BA2C42CE +03EBD685CC63452F1531D0EAF4996D72AD040F2CA7E417654A39C1A9F1A766A5 +A1D47146F7B569D63E843CED0A72DB1F06D3AE307835F0629386C2ADACEF01B5 +AA7BD987BA7595B2C5A45218D6E627865C589EDCB07DF7CBC672 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 133[39 122[{}1 83.022 /CMMI10 rf +%DVIPSBitmapFont: Fb ecrm1000 10 4 +/Fb 4 110 df73 D82 D<0007F800001FFF00007C0FC001F803E003F001F007E001F80FC000F81F80007C1F +80007C3F00007E3F00003E7F00003E7F00003F7E00003FFE00003FFE00003FFE00003FFF +FFFFFFFFFFFFFFFE000000FE000000FE000000FE000000FE0000007E0000007E0000007F +0000007F0000003F0000033F8000031F8000070FC0000607C0000E07E0001C01F0003800 +F80070007E03E0001FFF800003FC0020277EA525>101 D<03F00FF0001FE000FFF03FFC +007FF800FFF0F03F01E07E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE001F80 +03FE000FDC001F8003FC0007F8000FC003FC0007F8000FC003F80007F0000FC003F80007 +F0000FC003F80007F0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC0 +03F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007 +E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC0 +03F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007 +E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC0 +07F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40257EA4 +45>109 D E +%EndDVIPSBitmapFont +/Fc 204[42 1[42 49[{}2 83.022 /CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 9323395 0 13052752 + 614 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0.44 0.5 0.565 setrgbcolor /ArrowA +{ moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 +2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 +scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave +fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def 99.5846 0 -71.13185 0 ArrowA CP 4 2 roll ArrowB /yEnd exch +def /xEnd exch def xEnd yEnd L /yStart exch def /xStart exch def 0 +setlinecap stroke stroke 3 dup 2 mod 0 eq false and exch 2 lt true +and or { /viceversa -71.13185 99.5846 gt { true }{ false } ifelse +def /epsilon 0.01 def /minTickline -22.76227 def /maxTickline 99.5846 + def /dT 1864679 abs 65536 div viceversa { neg } if def /subTNo 1 def +subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 +4.0 /tickend exch def /tickstart exch def /Twidth 0.4 def /subTwidth +0.2 def /STsize 0.75 def /TColor { 0 setgray } def /subTColor { +0.5 setgray } def /MinValue { xStart } def /MaxValue { xEnd 1.5 2. + CLW mul add 1.4 mul viceversa { add epsilon sub } { sub epsilon add +} ifelse } def /logLines { false } def /LSstroke { 0 setlinecap stroke +stroke} def /subLSstroke { 0 setlinecap stroke stroke} def 0 dT MaxValue +{ /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch +def /x cntTick dT dx log mul add def x abs MaxValue abs le { x minTickline + moveto x maxTickline lineto } if } for subTwidth SLW subTColor subLSstroke +grestore stroke /dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick +cntTick dsubT add def subTNo 1 sub { cntsubTick abs MaxValue abs le +{ cntsubTick tickstart STsize mul moveto cntsubTick tickend STsize +mul lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } +repeat subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick +tickstart moveto cntTick tickend lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline moveto x maxTickline lineto +} if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke grestore +} dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo 1 +sub { cntsubTick abs MinValue abs le { cntsubTick tickstart STsize +mul moveto cntsubTick tickend STsize mul lineto }{ exit } ifelse +/cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW subTColor +subLSstroke grestore } if gsave cntTick tickstart moveto cntTick tickend + lineto Twidth SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0.44 0.5 0.565 setrgbcolor /ArrowA +{ moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 +2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 +scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave +fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def 0 99.5846 0 -22.76227 ArrowA CP 4 2 roll ArrowB /yEnd exch +def /xEnd exch def xEnd yEnd L /yStart exch def /xStart exch def 0 +setlinecap stroke stroke 3 dup 2 mod 0 eq true and exch 2 lt false +and or { /viceversa -22.76227 99.5846 gt { true }{ false } ifelse +def /epsilon 0.01 def /minTickline -71.13185 def /maxTickline 99.5846 + def /dT 1864679 abs 65536 div viceversa { neg } if def /subTNo 1 def +subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 +4.0 /tickend exch def /tickstart exch def /Twidth 0.4 def /subTwidth +0.2 def /STsize 0.75 def /TColor { 0 setgray } def /subTColor { +0.5 setgray } def /MinValue { yStart } def /MaxValue { yEnd 1.5 2. + CLW mul add 1.4 mul viceversa { add epsilon sub } { sub epsilon add +} ifelse } def /logLines { false } def /LSstroke { 0 setlinecap stroke + stroke} def /subLSstroke { 0 setlinecap stroke stroke} def 0 dT MaxValue +{ /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch +def /x cntTick dT dx log mul add def x abs MaxValue abs le { x minTickline +exch moveto x maxTickline exch lineto } if } for subTwidth SLW subTColor +subLSstroke grestore stroke /dsubT 0 def } if dsubT abs 0 gt { gsave +/cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick abs MaxValue +abs le { cntsubTick tickstart STsize mul exch moveto cntsubTick tickend +STsize mul exch lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT +add def } repeat subTwidth SLW subTColor subLSstroke grestore } if +gsave cntTick tickstart exch moveto cntTick tickend exch lineto Twidth +SLW TColor LSstroke grestore } for /dT dT neg def /dsubT dsubT neg +def 0 dT MinValue epsilon viceversa { add }{ sub } ifelse { /cntTick +exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick +dT dx log mul add def x abs MinValue abs le { x minTickline exch moveto +x maxTickline exch lineto } if } for /dsubT 0 def subTwidth SLW subTColor +subLSstroke grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for } if end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.5 SLW 0 setgray /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 99.5846 56.90549 -71.13185 56.90549 + /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.5 SLW +0 setgray 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup 0 gt { /a +.5 def PathLength exch div } { pop /a 1 def PathLength } ifelse /b +ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 /z ED +false X { z mul } forall X astore {0 gt or} forall { X 1 a sub y mul +} { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0.44 0.5 0.565 setrgbcolor /ArrowA +{ moveto } def /ArrowB { } def /ArrowInside { } def [ 28.45274 1.42271 +28.45274 -1.42271 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.4 SLW +0.44 0.5 0.565 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke + grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0.44 0.5 0.565 setrgbcolor /ArrowA +{ moveto } def /ArrowB { } def /ArrowInside { } def [ 1.42271 28.45274 +-1.42271 28.45274 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.4 SLW +0.44 0.5 0.565 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke + grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.4 SLW 0.44 0.5 0.565 setrgbcolor /ArrowA +{ moveto } def /ArrowB { } def /ArrowInside { } def [ 1.42271 85.35823 +-1.42271 85.35823 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.4 SLW +0.44 0.5 0.565 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke + grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 2.0 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 1.42271 85.35823 1.42271 +28.45274 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 2.0 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +614 -236 a + tx@Dict begin { -5.69046 28.45274 } PutCoor PutBegin end + 614 -236 a 593 -209 a Fc(1)614 -236 y + tx@Dict begin PutEnd end + 614 +-236 a 614 -236 a + tx@Dict begin { -5.69046 85.35823 } PutCoor PutBegin end + 614 -236 a 593 -209 a Fc(3)614 -236 +y + tx@Dict begin PutEnd end + 614 -236 a 614 -236 a + tx@Dict begin { 28.45274 -8.5359 } PutCoor PutBegin end + 614 -236 a 593 -209 a Fc(1)614 +-236 y + tx@Dict begin PutEnd end + 614 -236 a 614 -236 a + tx@Dict begin { -8.5359 105.27505 } PutCoor PutBegin end + 614 -236 a 518 -208 a Fb(Im)51 +b Fa(z)614 -236 y + tx@Dict begin PutEnd end + 614 -236 a 614 -236 a + tx@Dict begin { 102.43004 0.0 } PutCoor PutBegin end + 614 -236 a 28 +x Fb(Re)g Fa(z)614 -236 y + tx@Dict begin PutEnd end + 614 -236 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe019.pdf b/2dgrafiken/Aufgabe019.pdf new file mode 100644 index 0000000..8533e25 Binary files /dev/null and b/2dgrafiken/Aufgabe019.pdf differ diff --git a/2dgrafiken/Aufgabe019.pst b/2dgrafiken/Aufgabe019.pst new file mode 100644 index 0000000..999d253 --- /dev/null +++ b/2dgrafiken/Aufgabe019.pst @@ -0,0 +1,25 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-2.6,-1)(4.4,4) +%\psgrid(-3,-1)(4,4) + +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.5pt,linecolor=SlateGrey,ticks=noticks]{->}(0,0)(-2.5,-0.8)(3.5,3.5) +\psline[linewidth=0.5pt,linestyle=dashed](-2.5,2)(3.5,2) + +\psline[linewidth=0.4pt, linecolor=SlateGrey](1,-0.05)(1,0.05) +\psline[linewidth=0.4pt, linecolor=SlateGrey](-0.05,1)(0.05,1) +\psline[linewidth=0.4pt, linecolor=SlateGrey](-0.05,3)(0.05,3) +\psline[linewidth=2pt, linecolor=Red](0.05,1)(0.05,3) + +\rput[c](-0.2,1){$1$} +\rput[c](-0.2,3){$3$} +\rput[c](1,-0.3){$1$} + +\rput[c](-0.3,3.7){Im $\hspace{1mm}z$} +\rput[l](3.6,0){Re $\hspace{1mm}z$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe026.eps b/2dgrafiken/Aufgabe026.eps new file mode 100644 index 0000000..cf4146d --- /dev/null +++ b/2dgrafiken/Aufgabe026.eps @@ -0,0 +1,3022 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:18:54 2008 +%%BoundingBox: 68 700 208 718 +%%DocumentFonts: CMR10 CMSY10 CMR7 CMR5 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1318 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR5 +%!PS-AdobeFont-1.1: CMR5 1.00B +%%CreationDate: 1992 Feb 19 19:55:02 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR5) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR5 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 50 /two put +readonly def +/FontBBox{-341 -250 1304 965}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA1F9B0FF4CFF25B8E64D0747A3 +7CAD14E0DBA3E3CA95F10F24B7D5D75451845F1FB7221D7794A860756CFBB3E7 +704A52A22448C34812C3DBEDD41892577AABA7D555E9298C1A0F7DA638078167 +F56E29672683C51CF1C003764A8E7AD9D8ADE77B4983F56FE2D12723AAD8BF36 +682CFBB71B1D12210144D39DD841A971F71DB82AC6CD815987CDCF29ABC3CC96 +5EEBD5D661F452C6E0C74F9ED8D0C5B3755551A172E0FE31EA02344176E32666 +14B6853A1C303A5E818C2E455A6CF8FC9A66DC6E279101D61C523BD9DB8EB82F +EAF4D7FDF6372383C0794C4568D079648689A199D4B65BA646CF95B7647E4BEC +83856C27A8EF177B3A686EDA6354FE9573E123C12EC4BA56A7E8BFB8F9B75147 +9DD79A743968F36F7D0D479FA610F0816E6267E5CE327686A5485AB72201525C +FB3B7CA10E1BF26E44C24E1696CB089CB0055BD692C89B237CF269F77A31DC81 +0F4B75C8400ABCFDCEC6443CD0E81871CD71AA3064ABDE882C4C52322C27FA8B +41C689F827FB0F8AAF8022CF3C1F41C0B45601190C1328831857CBF9B1E7D1AA +246117E56D6B7938488055F4E63E2A1C8D57C17D213729C68349FEC2C3466F41 +171E00413D39DF1F67BC15912F30775AFDF7FB3312587E20A68CF77AD3906040 +842D63C45E19278622DD228C18ABDD024DD9613CDC0B109095DB0ADC3A3C0CB5 +AB597D490189EA81239E39202CBC7A829EB9B313A8F962F7879D374ADF529BD0 +5533EF977142F647AD2F5975BA7E340419116099B19ACCCC37C55124CA6C6A2C +D961E1362D29A5F4C3393CEA88CEDCFCD8AAC05D8F6790F6C9822F00885D7FFB +C8F31D0CA9E18CE24A9ABF70858A7531318CD90234AADA0744453E549C2E75EC +8D9E6B30AA7CC04511AA5787A9CD72D6CB8B880B2069BBA92A37C94479E9AE61 +1F53F873B45A8C200913421D44CF0E2E947665A66813C81A6BB49F0CA576AE5C +7695400937D0F6B4482ECC524F0A06DE1DCE031B21F5A4B64080D78835975D4B +F6B9520724A4320420F2AC5FA35328964AABFBC3A4FCCC29561A0E602974614B +DAE5EF30B8E815DE96655404EC9589FB9114B93740B9DB69F2C1C9937DBD4132 +4DAEDC52DCF2B182BE3F956BF154BED0288ECFE6D05126B462DE6DA0D4B2C44E +FFEFC865CC4BE77D57BC008E44FD2C7494C9DDBCBE4C873743D5E7242250B480 +340EA291FA9612C8FED8AC6CE4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +dup 43 /plus put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4A78141CA32C +B3C74E1A0AE0520B950B826B15D336D8A12ED03ECD59B50775E3C5D8309802AB +9DF865421C5AD1492673F0D8DC1B55EA958330AE6F4301D5314190C760AE2832 +0FFE98B31B10B50826F26335347600DC34708CD6913388C6A1DCFE3414F267F3 +B269D4D5A9A00AC78F252683E4021E203432502358A9B3E137263BC107513521 +345A2C8F613C2CB9236D0C6D8C81274046D8E26BADE086CC18D48E0F710163FE +20A0C8F968586F53FB9F1F122AD0B311B35DD63494CCE2A905753031DA7F6D05 +F178B67D06097D803CA48FE0A01FAC8E7CDDD83A30916E01EE9795EDF731031D +A8C35ED6E0E8D5215ED779FEEA2D2B54BA35B5A50044CC0DE5AB8C0D11BCB29C +4DCC8F5196BB16E01F28CF4ABE6416A787954229D583A62D436D54771659C45D +192DCA24D352721480EA72F31CBB95A1E289D48E953A04DCC7AE4B19368AB7C8 +B0E713DEC2F2C10D5BC4260782F176A15AE88D14A506444C55CCD6B212C2D1E7 +00F4EC0E490BCB077542D5D14AFCAAEC1CAA26FB05F1E617B6E0B086F9D8B07D +0B07F9DDEB30A5BED917E802D4128E4A343EF15B24D5C77942D6E3F4E503D2D0 +B3D7ADEEC3FE710D926473A219F1EFABB4AECC9ABED361959B6039A7F89C2B1C +0026DB30E4FD410723FF313002BCC2037477E4AD8BC12CFB99E0DF70FD1FEF0A +30516F328126559512B885E3EEDE8F38F37E3626604644EE6A3BE0029A2A9B3E +B63907D2FC4200128F53F577E14556750224AFA51FA99398E9AB31E36EF72B67 +1DE414F8D6CC778ADA6D6138F720F2187CD82E417483A3E086A8684963A021D2 +29B341D9D63ED2076853354C72260A0C8F9050F7F8B5FA18FEF90863C51B90ED +82EA0D4E8D2F9C82BB614351AA380270F37D86C2DBB86590D2CDD941445F8A36 +D0AD1AF6E09F811982C6D6AE81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 54 /negationslash put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8B26E4C82EF29D958771406371C3287AAAD9FBEDC5388FD805B1A378BD1 +66379207D5BB9A500FF1B7C6FF91C9170F4A93D8A4C066E364B876952465FDD5 +7E8A679181EA001DC30F878BE1B45C201A4F5E16389721129717AF7D150C49AD +A5342087D5CF7B1ED449D6DDB43739E549AB16E74BBCDFC6BAEAC58B3BB3F09F +7E839DEF75538BAB45BA8921F222BC8ABAA36084347B7D97F1611BBE04E9DE6C +FC0F72BBB385B87A05C9DF54D91C76BE7B18D5236E9C249CD174688F0FFFDCFC +87F7E71FF6CA4337B9EA357940B242693E0DF0AE5CB112965175F63333 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 61 /equal put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E +4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099 +E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634 +5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721 +639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428955D5B6A6C01 +F9D9F44C93F0C94D9D0728D2A6F5390B793E4205F4BBFADB26785DCF0EAE8467 +0F2CB7F2ECC80860473B0AF607E131ADC315664B74C8FBBB3169708EC9EF9977 +FB3172531CB7AFD5E6CE40A819129D46BA23A46C548A8713BE1A4125FE8E4E94 +FD2FB0777C4853D15397A4FF99571D812F2B9E35004919C4314D9F6E54371AA0 +38C011069DFBC2C687DB92D7B7010B8E4A2F593D6B5848C027F20628B9A67DD4 +3B35CFD3570714A4771F582487CF985C9D9DBCE6CF2B1543E877D3494741211E +044EAF9744DE6C3D87B44584FA866B45484E33246047A120441A969B28C02114 +DFA45627F09A98791A218F5269138F8D0E8CFCC710E11B529BA50C401A88F645 +4D14D6B3225744EEDA10938DDB022C50FFCE603EEF489B31A07A86FCEAF12086 +59FA206B692B4C69AE8E95E0467504CB336AC7053742E3ED95AB3B65F85960DB +4750227F4B07513D2BDD058A5F424E5AE03ED2ECE074FC50C23D4D8F28A7DA17 +3C0713DFC1F2A134F0218382F98F068F207F0B63AFCFA7AED0FFC71A11AA9F96 +49DDE0B659B73C5A5285FB333789A53F1833D4123992EA03F2CDE5BCBB3C1637 +EFA6E8B9A3355C29C3F12D4A83839F074314F5322C69A98695C6E268C58510DD +B08B2397D6F18B21B87DC2D86A697E9B796DC346E551D127B7E6F57B0F884CAE +D90B077FD6EC9151728D5354 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[28 50[{}1 41.511 /CMR5 rf +%DVIPSBitmapFont: Fb ecrm0700 7 10 +/Fb 10 229 df<387CFEFEFE7C3807077B8613>46 D<00FF000003FFE0000E03F0001800 +F80030007C0060007E0078003F00FC003F00FE001F80FE001F80FE001F80FE001F807C00 +1F8000001F8000001F0000003F0000003E0000007E0000007C000000F8000001F0000003 +E0000003C00000078000000E0000001C0000003800000070018000E00180018001800300 +0300060003000C0003001FFFFF003FFFFF007FFFFE00FFFFFE00FFFFFE0019267DA521> +50 D78 +D<003F0001FFE003E1F00F80F81F007C1F003E3E003E7E001E7E001F7C001FFC001FFC00 +1FFFFFFFFFFFFFFC0000FC0000FC0000FC00007C00007E00007E00033E00031F00070F80 +0E07C01C03E07800FFE0003F80181C7E9A1E>101 D<007E03E001FF9FF007C3FCF00F00 +F0F01F00F8001E0078003E007C003E007C003E007C003E007C003E007C003E007C001E00 +78001F00F8000F00F0000FC3E0000DFF80001C7E00001C0000001C0000001C0000001E00 +00000FFFF0000FFFFC0007FFFF001FFFFF803E001FC0780007C0780003E0F00001E0F000 +01E0F00001E0F00001E0780003C07C0007C03E000F800FC07E0003FFF800007FC0001C27 +7E9921>103 D<0F800000FF800000FF8000001F8000000F8000000F8000000F8000000F +8000000F8000000F8000000F8000000F8000000F8000000F8000000F81FC000F8FFF000F +9C0F800FB007C00FE007C00FC003E00FC003E00FC003E00F8003E00F8003E00F8003E00F +8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F +8003E00F8003E00F8003E01FC007F0FFF83FFEFFF83FFE1F287EA725>I<0F81FC00FF8F +FF00FF9C0F801FB007C00FE007C00FC003E00FC003E00FC003E00F8003E00F8003E00F80 +03E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F80 +03E00F8003E00F8003E00F8003E01FC007F0FFF83FFEFFF83FFE1F1A7E9925>110 +D<0F07C0FF1FF0FF38F81F71F80F61F80FC1F80FC0F00FC0000F80000F80000F80000F80 +000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80001FC0 +00FFFC00FFFC00151A7E991A>114 D<0F8003E0FF803FE0FF803FE01F8007E00F8003E0 +0F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E0 +0F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8007E00F8007E007800FE0 +07C01BF003E073FE01FFE3FE007F83E01F1B7E9925>117 D<038038000FC07E000FE0FE +000FE0FE000FE0FE000FC07E000380380000000000000000000000000000000000000000 +0000FE000007FFC0000F03E0001C00F0003E0078003F007C003F003C003F003E001E003E +0000003E0000003E0000003E00003FFE0001FFFE0007F03E001FC03E003F003E007E003E +007E003E00FC003E18FC003E18FC003E18FC007E187E007E187E00DF383F838FF00FFE0F +E003F807C01D287EA621>228 D E +%EndDVIPSBitmapFont +/Fc 205[33 6[51 1[26 26 40[{}4 58.1154 /CMR7 rf /Fd 201[0 +54[{}1 83.022 /CMSY10 rf /Fe 194[65 10[42 42 49[{}3 83.022 +/CMR10 rf +%DVIPSBitmapFont: Ff ecrm1000 10 20 +/Ff 20 229 df78 D<000FF800C0003FFE01C000FFFF81C003F807 +E3C007E000F7C00FC0007FC01F80003FC03F00001FC03E00000FC07E000007C07E000007 +C07C000003C0FC000003C0FC000001C0FC000001C0FC000001C0FE000000C0FE000000C0 +FE000000C0FF000000C0FF800000007FC00000007FE00000007FF80000003FFF8000001F +FFF800001FFFFF80000FFFFFE00007FFFFF80003FFFFFE0000FFFFFF00003FFFFF800007 +FFFFC000007FFFC0000007FFE00000007FE00000003FF00000001FF00000000FF0000000 +07F800000007F8C0000003F8C0000003F8C0000001F8C0000001F8C0000001F8E0000001 +F8E0000001F8E0000001F0F0000001F0F0000003F0F8000003E0FC000007E0FE000007C0 +FF00000FC0FF80001F80FBF0003F00F0FE00FE00E03FFFF800E00FFFE000C001FF000025 +3D7CBA2E>83 D86 D<001FE0000000FFFC000003E03F00000700 +0F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE000FC000FC000 +FC00078000FC00000000FC00000000FC00000000FC00000000FC0000007FFC000007FFFC +00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC007F8000FC00 +7F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF +0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE0007F8007C02627 +7DA52A>97 D<03F0000000FFF0000000FFF0000000FFF00000000FF000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F01FE00003F07FF80003F1E03E0003F3801F8003F7000FC003FE0007E003FC00 +03F003F80001F803F00001F803F00000FC03F00000FC03F00000FE03F00000FE03F00000 +7E03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F +03F000007F03F000007F03F000007F03F000007E03F00000FE03F00000FE03F00000FC03 +F00001FC03F80001F803F80003F003FC0003F003EE0007E003C6000FC003C7801F000381 +E07E000300FFF80000001FC000283B7EB92E>I<0003FC00001FFF80007E03E001F80070 +03F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F0000F07F000000 +7F0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000 +FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F8000061F80000E +1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF000007F8001F277DA5 +25>I<0000000FC0000003FFC0000003FFC0000003FFC00000003FC00000000FC0000000 +0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F +C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0 +0003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC00FC0001FC00F +C0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E00000FC0FE00 +000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE0000 +0FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F00000FC03F00000F +C01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CFFF007C078FFF +001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC001F803E003F001 +F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F00003F7E0000 +3FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE000000FE0000 +00FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F8000070FC000 +0607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020277EA525>I< +00000003F0000FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100F +C003F0000FC003F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F80 +01F8001F8001F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F +800003F81F0000073FFC0000060FF000000E000000000E000000000E000000000E000000 +000F000000000F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF80 +03FFFFFFC00F80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F8 +000000F8F8000000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F00 +0007E00F80000F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>103 +D<03F000000000FFF000000000FFF000000000FFF0000000000FF00000000003F0000000 +0003F00000000003F00000000003F00000000003F00000000003F00000000003F0000000 +0003F00000000003F00000000003F00000000003F00000000003F00000000003F0000000 +0003F00000000003F00000000003F00000000003F00FF0000003F03FFC000003F0F03F00 +0003F1C01F800003F3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E0 +0003F80007E00003F80007E00003F80007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80293A7EB92E>I<0380000F +E0001FF0001FF0001FF0001FF0001FF0000FE00003800000000000000000000000000000 +000000000000000000000000000000000003F000FFF000FFF000FFF00007F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00007F800FFFFC0FFFFC0FFFFC012387EB717>I<03F000FFF000FFF000 +FFF0000FF00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917>108 +D<03F00FF00000FFF03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003F7000FC0 +0003FE000FC00003FC0007E00003FC0007E00003F80007E00003F80007E00003F80007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0 +0003F00007E00003F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF +80FFFFC1FFFF8029257EA42E>110 D<0003FE0000000FFF8000003E03E00000F800F800 +01F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007E03F +000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8FE00 +0003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E0000 +03F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC0001F +8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277EA52A +>I<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003EC03E003FC +008003F8000003F8000003F8000003F8000003F0000003F0000003F0000003F0000003F0 +000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0 +000003F0000003F0000003F0000003F0000003F0000003F0000007F80000FFFFF000FFFF +F000FFFFF0001C257EA421>114 D<00FF030003FFE7000F80FF001E003F003C001F0078 +000F0070000700F0000700F0000700F0000300F8000300F8000300FC000300FF0000007F +E000007FFF00003FFFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF8000007F8000 +001F80C0000FC0C00007C0C00007C0E00003C0E00003C0E00003C0F00003C0F0000380F8 +000780FC000780FC000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521>I<0018 +000000180000001800000018000000180000003800000038000000380000007800000078 +00000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF0001F8 +000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 +000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 +00C001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C000FC +01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347FB220>I<03F000 +07E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F0000FE00003F000 +1FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80001FFF +87FF800003FC07E00029267EA42E>I<3FFFFFFC3FFFFFFC3F8003FC3E0003F83C0007F0 +38000FE030000FE070001FC070003F8060007F8060007F006000FE006001FC006001FC00 +0003F8000007F0000007F000000FE000001FC000003F8000003F8000007F000600FE0006 +00FE000601FC000603F8000607F8000E07F0000E0FE0000C1FC0001C1FC0001C3F80003C +7F00007CFF0003FCFFFFFFFCFFFFFFFC1F247EA325>122 D<00E000E00003F803F80007 +FC07FC0007FC07FC0007FC07FC0007FC07FC0007FC07FC0003F803F80000E000E0000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000001FE0000000FFFC000003E03F000007000F80000F8007E0001FC003F0001FE003F0 +001FE001F8001FE001F8001FE000FC000FC000FC00078000FC00000000FC00000000FC00 +000000FC00000000FC0000007FFC000007FFFC00003FE0FC0000FE00FC0003F800FC000F +F000FC001FC000FC003FC000FC007F8000FC007F0000FC007F0000FC0CFE0000FC0CFE00 +00FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF0003FC0C7F00077C0C7F80063E183FC01E +3E180FE0781FF003FFF00FE0007F8007C026387DB62A>228 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 8950465 0 12679794 + -24 94 a + tx@Dict begin { 14.22636 133.37222 } PutCoor PutBegin end + -24 94 a 21 x Ff(V)-7 +b(org\344nger)25 b(gleic)n(h)i Fe(1)g Ff(setzen)-24 94 +y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 14.22636 115.58926 } PutCoor PutBegin end + -24 94 a 21 x Ff(N\344herung)g(gleic)n(h)g +Fe(2)g Ff(setzen)-24 94 y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 14.22636 97.8063 } PutCoor PutBegin end + -24 94 a +21 x Ff(Solange)g(N\344herung)f Fd(6)p Fe(=)i Ff(V)-7 +b(org\344nger)-24 94 y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 28.45274 80.02333 } PutCoor PutBegin end + -24 94 a 21 +x Ff(V)g(org\344nger)25 b Fe(=)j Ff(N\344herung)e(setzen)-24 +94 y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 28.45274 62.24037 } PutCoor PutBegin end + -24 94 a 21 x Ff(N\344herung)h(durc)n(h)-24 +94 y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 28.45274 44.4574 } PutCoor PutBegin end + -24 94 a -14 80 a Fc(\()p Fb(N\344herung)o +Fc(\))319 55 y Fa(2)351 80 y Fc(+2)p -14 101 449 4 v +30 149 a Fb(2.)i(N\344herung)473 121 y Ff(ersetzen)-24 +94 y + tx@Dict begin PutEnd end + -24 94 a -24 94 a + tx@Dict begin { 14.22636 26.67444 } PutCoor PutBegin end + -24 94 a 21 x Ff(N\344herung)e(ausgeb)r(en)-24 +94 y + tx@Dict begin PutEnd end + -24 94 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 17.07181 +193.47873 142.26372 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 124.48074 +193.47873 142.26372 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 106.69778 +193.47873 124.48074 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 22.76227 70.4207 +193.47873 88.20367 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 22.76227 34.85478 +193.47873 70.4207 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 17.07181 +193.47873 34.85478 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe026.pdf b/2dgrafiken/Aufgabe026.pdf new file mode 100644 index 0000000..3d68b89 Binary files /dev/null and b/2dgrafiken/Aufgabe026.pdf differ diff --git a/2dgrafiken/Aufgabe026.pst b/2dgrafiken/Aufgabe026.pst new file mode 100644 index 0000000..7956eab --- /dev/null +++ b/2dgrafiken/Aufgabe026.pst @@ -0,0 +1,27 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(0.1,0.4)(6.9,5.2) +%\psgrid(0,0)(7,5.5) + + +\rput[lC](0.5,4.6875){Vorgänger gleich $1$ setzen} +\rput[lC](0.5,4.0625){Näherung gleich $2$ setzen} +\rput[lC](0.5,3.4375){Solange Näherung $\neq$ Vorgänger} +\rput[lC](1,2.8125){Vorgänger $=$ Näherung setzen } +\rput[lC](1,2.1875){Näherung durch} +\rput[lC](1,1.5625){$\frac{\left(\text{Näherung}\right)^2+2}{\text{2. Näherung}}$ ersetzen } +\rput[lC](0.5,0.9375){Näherung ausgeben} + + +\psframe(0.2,0.6)(6.8,5) +\psframe(0.2,4.375)(6.8,5) +\psframe(0.2,3.75)(6.8,4.375) +%\psframe(0.2,3.1)(6.8,3.75) +\psframe(0.8,2.475)(6.8,3.1) +\psframe(0.8,1.225)(6.8,2.475) +\psframe(0.2,0.6)(6.8,1.225) +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe029.eps b/2dgrafiken/Aufgabe029.eps new file mode 100644 index 0000000..7f804f2 --- /dev/null +++ b/2dgrafiken/Aufgabe029.eps @@ -0,0 +1,3044 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 13:19:55 2008 +%%BoundingBox: 68 719 262 733 +%%DocumentFonts: CMMI10 CMR10 CMSY7 CMMI7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1319 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI7 +%!PS-AdobeFont-1.1: CMMI7 1.100 +%%CreationDate: 1996 Jul 23 07:53:53 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 105 /i put +readonly def +/FontBBox{0 -250 1171 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F +C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B +B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868 +DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811 +4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3 +FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB +76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5 +123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770 +012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6 +A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413 +44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC +4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050 +01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608 +D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3 +914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05 +261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615 +24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2 +A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663 +9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C +889787CDC194F782420BB447DE705EAE7963391B36647BFD662706AB28B30382 +7E7A5BDCB851A85292D46EECE27CB23438211D04CB1ECE8DEEE49365CF9F83B5 +67CEDB275F119B245287933BB9B48A7062A03ED8B20FFF01CCEA58A8AB205F7C +4D910E2572381D550394AD131B7BCA5E5E11319F3DCEEC0E22B7F35C5B648CC5 +5A42368643A16F14C84BB1F7FFFCA5E3E838DCDDEE2F928047C8C6AAB9193836 +67FC9D1E38349DCAB94C65FB6FD34934263E4E558E5BB570BE665BA580B1C5BE +401776616DFFAD1A9D2897A6A438612E5172EB0CD9D1EFCF542B8099DF494692 +64F16AB3BA8E3D8503001661025993F8400F7F874F2955BBED51BF34632CA0D1 +3E0EFAA7A1696E59EC28F6E720C5D128F70EEC6F9DCFC50A5621674AAB62BB9C +8E60421D2A67D53921DF2BDB730170D29E09E640315961C48CD7C4649D5FA0CE +072A5CACEDA97F6849D5ACDF2D9C24868FA29D75F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY7 +%!PS-AdobeFont-1.1: CMSY7 1.0 +%%CreationDate: 1991 Aug 15 07:21:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /minus put +readonly def +/FontBBox{-15 -951 1252 782}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949 +8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D +F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443 +E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765 +424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8 +E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C +C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63 +868AEA25DA3D5413467B76D2F02F8097D2841EDA6677731A6ACFEC0BABF1016A +089B2D24F47B9D66B677886B90AA787AD865B5F78EE434AA47B7B0F1244A4215 +251FDCC670FD01A92226E2C667C2344298D001575BDF782D969D836ECA11E229 +C7A17E28F70F9B17273FF243452DA885068A8BCB5165534F3996CBD8D97307DB +593D606C197AFC259E691C242F6E1E651575B6852AAD54567905E6F542DCA109 +7F6DA24DC9112FBF7CE48B387953787B2BCB841873AED2DFA83339D39E14F4DD +3A51584527AC3A93630D121E2AE0C89D9C3F2FFA767743B1276BE1E648041010 +0FD510F1A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 43 /plus put +dup 49 /one put +dup 61 /equal put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E +4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099 +E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634 +5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721 +639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428955D5B6A6C01 +F9D9F44C93F0C94D9D0728D2B9813C532BB6423C4312EA61867077D50C2B6516 +B0FCC1DFAB384F3992522F9C6CD387C68847706BDBF9682B31D8026697DE0E11 +F84EC860FD51D875F1125B1358DAC27578E4A029D79C8F4AD93B53E185EEF464 +B996030AFF6FC8C9FD19F2C1D19659134C7E783208C1EE32FD58E207D8169D57 +035FA66E4E746E8C264AA22FCEF5BB62F00A938770DF6CEBDE9CA4C9F2E3B218 +F2A481FB30BB7F45CABF13B2E357BF132EDF996244361823F00AFC3FB4E6DBE5 +FA44E54593E3F31A4319FE6E3A8270E4B7D61D15D36FF72DC7CF6C6FC2821458 +E6CAB3904D428F3CE6F02E3CF252022357737C9A10C56F99AA1DE3561228B4C9 +E1A39026109492871FDCEC4610BC6EC9910F8F6AF125424EBDF09521CD0EF10C +EE017D796A4CB958014C6E001DC93A2FCF2E68E0D723F6E8E55603AFC0967249 +FB087FA71182C4F43F0C15352DA8B4054AEFFDC4516C1AF8F66709D2D6CCD0FC +431D21D6ACC2EF5F1D5CF6C4E276B4BDB4DC02B106EF66232D968B2B74BA7569 +F1AB3221E641AF4ADB50EB905BAC62B7DE880D9961FC48B205783DA8529B6F21 +F75EADF1DB6EB8D6517BB7188E00E026A6C16D34DE20147A2F9F5ABBDD1A5AC2 +C52F1294CDBC28C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 105 /i put +dup 110 /n put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +95601766777978D01677B8D19E1B10A078432D2884BB4A3666F8AF444210B3D0 +319DD6FCE930E32EF34966D78404D303260C0E674D575DC1FC7883D338D6352D +AB26DD98ACCB585AEE756AAAA1584E6FBF074918F7932078E1F01709262E44EA +99AA334496069D9E89F21675A52E89A4B85BF62091E2FECE45E70CCFEA16D9F3 +1AF6D42D1618EC64EF3E67781F7209392AD5E47C2252EC1EA18068D0169AEFCD +9CDA17C4391889003778BCF091D352878E81AF2F0D362EB98482CC8394BCFA4F +8C3EDA951A1BE471EEBD8C817DE63072F94B9CAC3BF2773E09D6DF235DE8F109 +661EC29F8A3726DEB91258E9B371759FD4CBC26EA2D191A7259BBF44D60A0A68 +470337EC55B8331F052DDC7AF84B8E881C6DDC36E8EAF254976CEE7837892554 +5A693071CD86AA9E61297F5615A3A0D760518425E414F6B36C7692848E1F4B8E +9CA6EB832B90655F09C534DB3909CAA667EA2FBBDD1BB6C3E4662CA8067EA084 +B675DFAFDD8663C036999A3E6F7C024F5195013EAD2ABD75DE4CBCFC8415CFEE +32B8E0E8A024322DC565AE54FE1E822D6AB9E5D391638E8BE20DED76A58F7B4D +29A0F41A07160821A3B439C466A85FEAAE87CBB3713C82A9913AFBFD751767B6 +3B89F62E2F69808772AE17CF6ED9FF1402680D8097FDEF17B32EEC4A5DBA6A37 +88DA4D4CD6381F4FFBF7AC69952A68AE13E112A353662173404AA20584BAE1F0 +DEE7C73D2E293B0D74D01ACDB1618D88D01E8FA121F0B8822A3EF3C68FCE1CF6 +4667EB1BC94C7D511889332F4A4F72F9CDCB77B810FAF0EF15392924E9CAC573 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 150[23 105[{}1 58.1154 /CMMI7 rf +%DVIPSBitmapFont: Fb ecrm0700 7 6 +/Fb 6 118 df<007F802003FFF060078078E00E000EE01C0007E0380003E0780001E070 +0000E0F00000E0F00000E0F0000060F0000060F8000060F80000007C0000007F0000003F +E000003FFF00001FFFF0000FFFFC0003FFFF0000FFFF80000FFFC00000FFE000000FF000 +0003F0000001F0000000F8000000F8C0000078C0000078C0000078C0000078E0000070E0 +000070F00000F0F80000E0FC0001C0EF000780E3E01F00C0FFFC00801FF0001D2A7DA825 +>83 D<00FE000007FFC0000F03E0001C00F0003E0078003F007C003F003C003F003E001E +003E0000003E0000003E0000003E00003FFE0001FFFE0007F03E001FC03E003F003E007E +003E007E003E00FC003E18FC003E18FC003E18FC007E187E007E187E00DF383F838FF00F +FE0FE003F807C01D1C7E9A21>97 D<000003E000003FE000003FE0000007E0000003E000 +0003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000 +3F83E001FFE3E003E03BE007800FE00F0007E01F0003E03E0003E07E0003E07C0003E07C +0003E0FC0003E0FC0003E0FC0003E0FC0003E0FC0003E0FC0003E0FC0003E07C0003E07C +0003E07E0003E03E0003E01E0007E01F000FE00F801FF003E073FE01FFE3FE007F03E01F +297EA725>100 D<0F81FC007F0000FF8FFF03FFC000FF9C0F8703E0001FB007CC01F000 +0FE007D801F0000FC003F000F8000FC003F000F8000FC003F000F8000F8003E000F8000F +8003E000F8000F8003E000F8000F8003E000F8000F8003E000F8000F8003E000F8000F80 +03E000F8000F8003E000F8000F8003E000F8000F8003E000F8000F8003E000F8000F8003 +E000F8000F8003E000F8000F8003E000F8000F8003E000F8001FC007F001FC00FFF83FFE +0FFF80FFF83FFE0FFF80311A7E9937>109 D<0F81FC00FF8FFF00FF9C0F801FB007C00F +E007C00FC003E00FC003E00FC003E00F8003E00F8003E00F8003E00F8003E00F8003E00F +8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F +8003E01FC007F0FFF83FFEFFF83FFE1F1A7E9925>I<0F8003E0FF803FE0FF803FE01F80 +07E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F80 +03E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F8007E00F80 +07E007800FE007C01BF003E073FE01FFE3FE007F83E01F1B7E9925>117 +D E +%EndDVIPSBitmapFont +/Fc 255[52{}1 58.1154 /CMSY7 rf /Fd 194[65 11[42 5[65 +43[{}3 83.022 /CMR10 rf /Fe 145[50 4[29 105[{}2 83.022 +/CMMI10 rf +%DVIPSBitmapFont: Ff ecrm1000 10 24 +/Ff 24 253 df<0000600000E00001C0000380000700000E00001E00003C000078000078 +0000F00001E00001E00003C00003C00007C0000780000F80000F00000F00001F00001E00 +001E00003E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F800 +00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 +00F80000F80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E00 +003E00001E00001E00001F00000F00000F00000F800007800007C00003C00003C00001E0 +0001E00000F000007800007800003C00001E00000E000007000003800001C00000E00000 +60135278BD20>40 DI<0000003800000000000038000000000000380000000000007C00 +00000000007C0000000000007C000000000000FE000000000000FE000000000000FE0000 +00000001FF000000000001FF000000000001FF0000000000037F8000000000037F800000 +0000077FC000000000063FC000000000063FC0000000000E3FE0000000000C1FE0000000 +000C1FE0000000001C1FF000000000180FF000000000180FF000000000380FF800000000 +3007F8000000003007F8000000007007FC000000006003FC000000006003FC00000000C0 +03FE00000000C001FE00000000C001FE000000018001FF000000018000FF000000018000 +FF000000030000FF8000000300007F8000000300007F8000000600007FC0000007FFFFFF +C0000007FFFFFFC000000FFFFFFFE000000C00001FE000000C00001FE000001800000FF0 +00001800000FF000001800000FF0000030000007F8000030000007F8000030000007F800 +0060000003FC000060000003FC0000E0000003FC0000E0000001FE0001E0000001FE0003 +F0000001FF000FFC000007FF80FFFF8000FFFFFEFFFF8000FFFFFEFFFF8000FFFFFE373C +7DBB3E>65 D70 +D<000FF800C0003FFE01C000FFFF81C003F807E3C007E000F7C00FC0007FC01F80003FC0 +3F00001FC03E00000FC07E000007C07E000007C07C000003C0FC000003C0FC000001C0FC +000001C0FC000001C0FE000000C0FE000000C0FE000000C0FF000000C0FF800000007FC0 +0000007FE00000007FF80000003FFF8000001FFFF800001FFFFF80000FFFFFE00007FFFF +F80003FFFFFE0000FFFFFF00003FFFFF800007FFFFC000007FFFC0000007FFE00000007F +E00000003FF00000001FF00000000FF000000007F800000007F8C0000003F8C0000003F8 +C0000001F8C0000001F8C0000001F8E0000001F8E0000001F8E0000001F0F0000001F0F0 +000003F0F8000003E0FC000007E0FE000007C0FF00000FC0FF80001F80FBF0003F00F0FE +00FE00E03FFFF800E00FFFE000C001FF0000253D7CBA2E>83 D<001FE0000000FFFC0000 +03E03F000007000F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001F +E000FC000FC000FC00078000FC00000000FC00000000FC00000000FC00000000FC000000 +7FFC000007FFFC00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000 +FC007F8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC +0CFE0001FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE0 +007F8007C026277DA52A>97 D<03F0000000FFF0000000FFF0000000FFF00000000FF000 +000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F01FE00003F07FF80003F1E03E0003F3801F8003F7000FC003 +FE0007E003FC0003F003F80001F803F00001F803F00000FC03F00000FC03F00000FE03F0 +0000FE03F000007E03F000007F03F000007F03F000007F03F000007F03F000007F03F000 +007F03F000007F03F000007F03F000007F03F000007F03F000007E03F00000FE03F00000 +FE03F00000FC03F00001FC03F80001F803F80003F003FC0003F003EE0007E003C6000FC0 +03C7801F000381E07E000300FFF80000001FC000283B7EB92E>I<0003FC00001FFF8000 +7E03E001F8007003F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F +0000F07F0000007F0000007E000000FE000000FE000000FE000000FE000000FE000000FE +000000FE000000FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F +8000061F80000E1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF0000 +07F8001F277DA525>I<0000000FC0000003FFC0000003FFC0000003FFC00000003FC000 +00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000 +000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000000 +0FC00000000FC00003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003F +C00FC0001FC00FC0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC0 +7E00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE +00000FC0FE00000FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F00 +000FC03F00000FC01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801 +CFFF007C078FFF001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC0 +01F803E003F001F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E +7F00003F7E00003FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000 +FE000000FE000000FE0000007E0000007E0000007F0000007F0000003F0000033F800003 +1F8000070FC0000607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC00 +20277EA525>I<00007E000003FF80000FC1E0001F87E0003F0FF0007E0FF0007E0FF000 +FC0FF000FC0FF001F803C001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F80000FFFFFC00FFFFFC00FF +FFFC0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001 +F8000001F8000001F8000003FC00007FFFF8007FFFF8007FFFF8001C3B7FBA19>I<0000 +0003F0000FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003 +F0000FC003F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8 +001F8001F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F8000 +03F81F0000073FFC0000060FF000000E000000000E000000000E000000000E000000000F +000000000F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FF +FFFFC00F80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F80000 +00F8F8000000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F000007 +E00F80000F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>I<03F000 +000000FFF000000000FFF000000000FFF0000000000FF00000000003F00000000003F000 +00000003F00000000003F00000000003F00000000003F00000000003F00000000003F000 +00000003F00000000003F00000000003F00000000003F00000000003F00000000003F000 +00000003F00000000003F00000000003F00FF0000003F03FFC000003F0F03F000003F1C0 +1F800003F3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E00003F800 +07E00003F80007E00003F80007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00007F800 +0FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80293A7EB92E>I<0380000FE0001FF0 +001FF0001FF0001FF0001FF0000FE0000380000000000000000000000000000000000000 +0000000000000000000000000003F000FFF000FFF000FFF00007F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00007F800FFFFC0FFFFC0FFFFC012387EB717>I<03F000FFF000FFF000FFF0000F +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003 +F00003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917>108 D<03F00FF0001FE000FFF0 +3FFC007FF800FFF0F03F01E07E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE00 +1F8003FE000FDC001F8003FC0007F8000FC003FC0007F8000FC003F80007F0000FC003F8 +0007F0000FC003F80007F0000FC003F00007E0000FC003F00007E0000FC003F00007E000 +0FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0 +0007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000 +0FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0 +0007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000 +0FC007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF4025 +7EA445>I<03F00FF00000FFF03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003 +F7000FC00003FE000FC00003FC0007E00003FC0007E00003F80007E00003F80007E00003 +F80007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FF +FFC1FFFF80FFFFC1FFFF8029257EA42E>I<0003FE0000000FFF8000003E03E00000F800 +F80001F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007 +E03F000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8 +FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E +000003F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC0 +001F8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277E +A52A>I<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003EC03E0 +03FC008003F8000003F8000003F8000003F8000003F0000003F0000003F0000003F00000 +03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 +03F0000003F0000003F0000003F0000003F0000003F0000003F0000007F80000FFFFF000 +FFFFF000FFFFF0001C257EA421>114 D<00FF030003FFE7000F80FF001E003F003C001F +0078000F0070000700F0000700F0000700F0000300F8000300F8000300FC000300FF0000 +007FE000007FFF00003FFFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF8000007F +8000001F80C0000FC0C00007C0C00007C0E00003C0E00003C0E00003C0F00003C0F00003 +80F8000780FC000780FC000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521>I< +001800000018000000180000001800000018000000380000003800000038000000780000 +007800000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF00 +01F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80000 +01F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80000 +01F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C0 +00FC01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347FB220>I<03 +F00007E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003 +F00007E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F0000FE00003 +F0001FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F03C7FF8000 +1FFF87FF800003FC07E00029267EA42E>I<3FFFFFFC3FFFFFFC3F8003FC3E0003F83C00 +07F038000FE030000FE070001FC070003F8060007F8060007F006000FE006001FC006001 +FC000003F8000007F0000007F000000FE000001FC000003F8000003F8000007F000600FE +000600FE000601FC000603F8000607F8000E07F0000E0FE0000C1FC0001C1FC0001C3F80 +003C7F00007CFF0003FCFFFFFFFCFFFFFFFC1F247EA325>122 D<001C001C0000007F00 +7F000000FF80FF800000FF80FF800000FF80FF800000FF80FF800000FF80FF8000007F00 +7F0000001C001C0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000003F00007E000FFF001 +FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F0000FE00003F0000FE00003F0000FE00003F0001FE00001F000 +1FE00001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80001FFF87FF800003FC +07E00029387EB62E>252 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 10069255 0 14730953 + -24 -47 a + tx@Dict begin { 14.22636 133.37222 } PutCoor PutBegin end + -24 -47 a 28 x Ff(Anzahl)28 +b Fe(n)f Ff(der)h(Summanden)g(einlesen)-24 -47 y + tx@Dict begin PutEnd end + -24 +-47 a -24 -47 a + tx@Dict begin { 14.22636 115.58926 } PutCoor PutBegin end + -24 -47 a 21 x Ff(\(ohne)g(Anfangssummand\))-24 +-47 y + tx@Dict begin PutEnd end + -24 -47 a -24 -47 a + tx@Dict begin { 14.22636 97.8063 } PutCoor PutBegin end + -24 -47 a 20 x Ff(Summand)g(gleic)n(h)f +Fd(1)g Ff(setzen)-24 -47 y + tx@Dict begin PutEnd end + -24 -47 a -24 -47 a + tx@Dict begin { 14.22636 80.02333 } PutCoor PutBegin end + -24 -47 +a 20 x Ff(Summe)h(gleic)n(h)f Fd(1)h Ff(setzen)-24 -47 +y + tx@Dict begin PutEnd end + -24 -47 a -24 -47 a + tx@Dict begin { 14.22636 62.24037 } PutCoor PutBegin end + -24 -47 a 28 x Ff(F\374r)g Fe(i)23 +b Fd(=)f(1)27 b Ff(bis)h Fe(n)-24 -47 y + tx@Dict begin PutEnd end + -24 -47 a -24 +-47 a + tx@Dict begin { 28.45274 44.4574 } PutCoor PutBegin end + -24 -47 a 22 x Ff(Summand)g(durc)n(h)611 -58 y +Fc(\000)p Fb(Summand)p 611 -44 341 4 v 770 3 a Fa(i)990 +-25 y Ff(ersetzen)-24 -47 y + tx@Dict begin PutEnd end + -24 -47 a -24 -47 a + tx@Dict begin { 28.45274 26.67444 } PutCoor PutBegin end + -24 -47 +a 25 x Ff(Summe)g(durc)n(h)g(Summe)g Fd(+)f Ff(Summand)h(ersetzen)-24 +-47 y + tx@Dict begin PutEnd end + -24 -47 a -24 -47 a + tx@Dict begin { 14.22636 8.89148 } PutCoor PutBegin end + -24 -47 a 20 x Ff(Summe)g(ausgeb)r(en)-24 +-47 y + tx@Dict begin PutEnd end + -24 -47 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 0.0 224.77649 +142.26372 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 106.69778 +224.77649 142.26372 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 88.91481 +224.77649 106.69778 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 71.13185 +224.77649 88.91481 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 22.76227 35.56592 +224.77649 53.34889 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 22.76227 17.78296 +224.77649 35.56592 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0. true 5.69046 0.0 224.77649 +17.78296 0 Frame gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe029.pdf b/2dgrafiken/Aufgabe029.pdf new file mode 100644 index 0000000..7679812 Binary files /dev/null and b/2dgrafiken/Aufgabe029.pdf differ diff --git a/2dgrafiken/Aufgabe029.pst b/2dgrafiken/Aufgabe029.pst new file mode 100644 index 0000000..7979759 --- /dev/null +++ b/2dgrafiken/Aufgabe029.pst @@ -0,0 +1,27 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(0.1,-0.2)(8,5.2) +%\psgrid(0,0)(7,5.5) + + +\rput[lC](0.5,4.6875){Anzahl $n$ der Summanden einlesen} +\rput[lC](0.5,4.0625){(ohne Anfangssummand)} +\rput[lC](0.5,3.4375){Summand gleich $1$ setzen} +\rput[lC](0.5,2.8125){Summe gleich $1$ setzen } +\rput[lC](0.5,2.1875){Für $i=1$ bis $n$ } +\rput[lC](1,1.5625){Summand durch $\frac{-\text{Summand}}{i}$ ersetzen} +\rput[lC](1,0.9375){Summe durch Summe $+$ Summand ersetzen} +\rput[lC](0.5,0.3125){Summe ausgeben} + +\psframe(0.2,0)(7.9,5) +\psframe(0.2,3.75)(7.9,5) +\psframe(0.2,3.125)(7.9,3.75) +\psframe(0.2,2.5)(7.9,3.125) +\psframe(0.8,1.25)(7.9,1.875) +\psframe(0.8,0.625)(7.9,1.25) +\psframe(0.2,0.0)(7.9,0.625) +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe037.pst b/2dgrafiken/Aufgabe037.pst new file mode 100644 index 0000000..3f037c5 --- /dev/null +++ b/2dgrafiken/Aufgabe037.pst @@ -0,0 +1,31 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-2,-2)(3.2,3.2) +%\psgrid[%griddots=20, +%gridlabels=0pt, subgriddiv=10](-1.6,-0.5)(1.6,2) +\psset{plotpoints=200} +\psaxes[linecolor=SlateGrey]{->}(0,0)(-1.9,-1.9)(3,3) %Mittelpunkt (linke Seite x,y 3/4 Quad) (rechte Seite x,y) + + +\psplot[linecolor=blue]{-1}{1}{x} +\psplot[linecolor=red]{1}{2.5}{x 1 sub 2 exp} + + +%\rput[c](-1,-0.25){$-e$} +%\rput[c](1,-0.25){$e$} +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,0)(-1,1.5) +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,1.5)(1,1.5) +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](1,1.5)(1,0) +%\psline(0,0)(4,3) +%\psbrace[linecolor=orange,linewidth=0.2pt,ref=lC,nodesepA=5pt](1.1,0)(1.1,1.5){$H$} +%\psarc[linecolor=orange](0,1.5){2}{180}{360} +%\psbrace[linecolor=green,linewidth=0.2pt,ref=lC,nodesepA=5pt](0.05,0.5)(0.05,1.5){$h$} +%%\psplot[linecolor=yellow]{0.01}{1}{1 x div} +%\rput[c](1.5,-0.1){$x$} +%\rput[c](-0.2,1.8){$y$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe045.pst b/2dgrafiken/Aufgabe045.pst new file mode 100644 index 0000000..e407d3a --- /dev/null +++ b/2dgrafiken/Aufgabe045.pst @@ -0,0 +1,38 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-2.5,-0.8)(2.5,3.6) + +\psset{plotpoints=200} +\psaxes[ticks=noticks,linewidth=0.5pt,linecolor=SlateGrey]{->}(0,0)(-2.2,-0.3)(2.2,3.5) %Mittelpunkt (linke Seite x,y 3/4 Quad) (rechte Seite x,y) + + +\psplot[linecolor=blue]{-1.7320508075688772935}{1.7320508075688772935}{3 x x mul sub} +\psframe[fillstyle=vlines,linecolor = red, hatchcolor=red](-1,0)(1,2) +%\psplot[linecolor=red]{1}{2.5}{x 1 sub 2 exp} + + +%\rput[c](-1,-0.25){$-e$} +%\rput[c](1,-0.25){$e$} +\psline[linecolor=SlateGray,linewidth=0.5pt](-1.7320508075688772935,-.1)(-1.7320508075688772935,.1) +\psline[linecolor=SlateGray,linewidth=0.5pt](1.7320508075688772935,-.1)(1.7320508075688772935,.1) +\psline[linecolor=SlateGray,linewidth=0.5pt](-.1,3)(.1,3) +\rput[c](-1.7320508075688772935,-0.3){$-\sqrt 3$} +\rput[c](1.7320508075688772935,-0.3){$\sqrt 3$} +\rput[c](0.3,3){$3$} + + +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,1.5)(1,1.5) +%\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](1,1.5)(1,0) +%\psline(0,0)(4,3) +%\psbrace[linecolor=orange,linewidth=0.2pt,ref=lC,nodesepA=5pt](1.1,0)(1.1,1.5){$H$} +%\psarc[linecolor=orange](0,1.5){2}{180}{360} +%\psbrace[linecolor=green,linewidth=0.2pt,ref=lC,nodesepA=5pt](0.05,0.5)(0.05,1.5){$h$} +%%\psplot[linecolor=yellow]{0.01}{1}{1 x div} +%\rput[c](1.5,-0.1){$x$} +%\rput[c](-0.2,1.8){$y$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe051.pst b/2dgrafiken/Aufgabe051.pst new file mode 100644 index 0000000..ae0b99d --- /dev/null +++ b/2dgrafiken/Aufgabe051.pst @@ -0,0 +1,47 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.5,-0.5)(6.5,3.1) + +\pspolygon[linewidth=0.4pt,fillstyle=solid](1,1.8)(2,1.8)(2,2.2)(1,2.2) +\psline[linewidth=0.4pt](2.5,1.7)(2.5,2.3) +\psline[linewidth=0.4pt](2.7,1.7)(2.7,2.3) +\psline[linewidth=0.2pt](0.5,2)(1,2) +\psline[linewidth=0.2pt](2,2)(2.5,2) +\psline[linewidth=0.2pt](2.7,2)(3.5,2) +\psline[linewidth=0.2pt](3.5,2)(3.5,0.5) +\psline[linewidth=0.2pt](0.5,0.5)(0.5,2) + +%\pspolygon[linewidth=0.4pt,fillstyle=solid](4.5,-0.2)(5.5,-0.2)(5.5,0.2)(4.5,0.2) +%\pspolygon[linewidth=0.4pt,fillstyle=solid](2.8,2)(3.2,2)(3.2,1)(2.8,1)%0.4 +\rput[c](1.5,2.5){$R$} +\rput[c](2.6,2.5){$C$} +\rput[c](0.3,1.25){$i$} +%\rput[c](5,0.5){$R_1$} +%\rput[c](3.5,1.5){$R_2$} +%\rput[c](6.3,1.5){$U_2$} +%\rput[c](-0.3,1.5){$U_1$} +%\rput[c](3,-0.3){$A$} +%\rput[c](2.3,-0.3){$I_3$} +%\pscircle[linewidth=0.4pt](4.5,1.5){0.3} +%\rput[c](4.5,1.5){II} +%\pscircle[linewidth=0.4pt](1.5,1.5){0.3} +%\rput[c](1.5,1.5){I} +\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(0.5,1.15)(0.5,1.35) +%\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{<-}(3.6,0)(3.8,0) +%\psline[linewidth=0.2pt,arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(3,0.6)(3,0.4) +%\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(0,2.8)(0,0.2) +%\psline[linewidth=0.3pt,linestyle=dashed, arrowsize=1.5mm,arrowlength=1.5,arrowinset=0.3]{->}(6,2.8)(6,0.2) +%\psline[linewidth=0.2pt](1.5,0)(4.5,0) +%\psline[linewidth=0.2pt]{-o}(5.5,0)(6,0)%0.2 +%\psline[linewidth=0.2pt]{o-o}(0,3)(6,3)%0.2 +%\psline[linewidth=0.2pt]{o-}(0,0)(0.5,0)%0.2 +%\psline[linewidth=0.2pt](3,0)(3,1) +%\psline[linewidth=0.2pt](3,2)(3,3) +%\pscircle[linewidth=0.2pt,fillstyle=solid, fillcolor=black ](3,0){0.035} +%\pscircle[linewidth=0.2pt,fillstyle=solid, fillcolor=black ](3,3){0.035} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/Aufgabe122.eps b/2dgrafiken/Aufgabe122.eps new file mode 100644 index 0000000..06acf91 --- /dev/null +++ b/2dgrafiken/Aufgabe122.eps @@ -0,0 +1,2671 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Thu Jan 25 12:44:24 2007 +%%BoundingBox: 155 744 174 753 +%%DocumentFonts: CMSY10 CMMI10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2007.01.25:1244 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.08, 2006/06/17 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2006/06/17 : - changes to the code (hv) +% 2006/04/21 : - Improved parser -> generic with derivative and translator into ps (dr) +% 2006/01/16 : - EXP -> Exp to prevent missmatch with pst-math (hv) +% 2005/09/28 : - rename it to pstricks-add.pro +% - add support for Gouraud shading (hv) +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression (dr) +% 2004/12/16 : addition of Sum and IfTE (dr) +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +% +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { tx@AlgToPs begin AlgToPs end } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 +/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 3.14159265359 /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 } + { tutu 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (ln\() StrConcat 8 index StrConcat (\)*\() StrConcat + 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 (*\() 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 3.14159265359 /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 90 div 1.57079632680 mul +} 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 90 div 1.57079632680 mul +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } 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 { 2.71828182846 exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/PI 3.14159265358 def +end +% END pstricks-add.pro + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.83)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 72 /H put +dup 101 /e put +dup 104 /h put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667271C1FD06DBA26AC7504FCD81979D968F25C34F4E2737841D35911C +E0D84229C65535C9B5A1C9624D6292A8AF039F6952F712A5EA80024A2116EA2C +8CE48C502A9262D17C6F4FDB9B14F6E4F8DDCFE03B23A88D3C38D90E9D00B5D6 +AB67436E643E6B3A67DF324BFDE002FA8F9552AA968982EBB2537691EACFECD8 +01F0A297C4F04499FF6A74DE260954DA514530617B81A3B93216E5E709221CA1 +1086AB740AE3897360FD8C282208AC852B16F9F05537E03471B0EFD8A965887B +924184202D7E817AE8EBAB446D955D20D609D1B7203A72526029FFEE8E366C11 +AD0CB40918DA61BE07795A41BEDD60EA67EC1EFDE813E468A5B77C6673EE95D6 +A4E79593724D159044D89F7AA4E2B5487E9E11226F5D6AE44870E0BCB004FAC8 +DCEFF8D608B76DD645BFD05698351B07DE7FE444B8582D66682AE5075E8AE5AD +4FFA25AC0E69F244ED3BAFDAD8A873504BA5820CAE8319BD74184604FD597F2B +F562FF7BF28F0D67F6E5D76FF80221DF673160FD84FEFB929B0EB6152B07E68C +0DBD943CC7147EBBD88CE33229744C93EE0D8D424494DEAC98E229192B24038B +C8C51CC5D96F97F44B3636910991F4FA78336823B3DFC14ECCB3C76E2A7C1024 +1256A43CFE82017054C2FF18D0A7F2753D9350B76DCF094547C25D6C2275714B +185C9638562FC12698A9C791442716121CF499293472541FA04470AE6D1B0A68 +5E80BC102B0EC8F645C32F1B18277B01D249C5E85516520903BB8A7B3CFF812D +51777B1B492D2308E0EDDB45CD6A02EFD73CF179734168DB1568257880450206 +021664F7836B12D53C1D8D970257DDD6CED5017BD119A9EAD21FFD4A42E99B3C +C33875B484CA8831305447BBF097008F280B1A7544A60F7E9C1D20D5E02E1E2E +9508217FE658A9E188F3CCA431B9D74006DDD24D9357D4CDC678BE0969B84EAB +FD21CD4A66B4550C10FC57B17751B45444A7C7ACD9C063DB841C30558592978A +70279B5506879A6A59C4F33335CEA67116A07FF8CBE96305159F6D8FF21B77C0 +B868138B22852799F02D09B24BB99A5B6B8DE053204DEA91687FBA320E50B75F +691FA9CC418B5121177B1C163C4693CBECDAD8950465EBEAD6BAB3492D36E2D5 +4F58B06E8B290CC0BAD1BAD8AFFB38E4D7C1BE49242FAD243457B5191936B3D1 +C8B3FC73704103BDCDA5D852D33C7111A024D1E1FE78D6E82F4DDD726C421D5F +8AEFAEFAA574A554C4FC07477625870D99A8A1C64AC8508C0FF29C842A7DB00C +6AB0369999E203DB5BD37061868C87A7C0112B3A335FB789294A0E237093D227 +ECC4F574E416CE2A9A79A3C8D25421349231A5C7E42E32700577AD62C472D819 +7C844C1F2F171108CBAD97964527DA73ED09B19FA3DEB960C5A2124ECCC1814A +59ABE900457594B91703D2A205A15C68A9A2E865EA619ABF4929FD5C4980EE89 +CCD0E9D26C9C2A5B903802678228FC4A41336438B7926A31CB8141C47189D4DA +4588FA126CA4EF56C5229457C100D6807B2EA79703517C1DA979CF9BE5BB5C3D +FFBE5CCA68019D391B863BE3D4B58BF85D15662FD47BEB413D1A3A2BE6C49C32 +57F402F801F0265130164100564D7444B95DCB140074523F3E9B6CC090D748A9 +E1647CF675F9834C020D10A147698D4B9BD506AB41C786A9D45281E07856A3BA +7199411C86E8B441A85DC2273265FD825587FFB369C687E43A0E836F4D57BED5 +E43283DFC6890CD43A645613F972983496C80F815AB1CBCDD655AC00CCDDA545 +49B66E5D53153675A9EA06822E34F2B5377F0C84C85A3D5691772185D984B872 +3962813DAEFB640223B7E2B82821553112F91F84D249633A1418CB201DC26ED9 +F83BB6F934 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /minus put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8B1550654AD5E22C5F3F3CC8C1C0A6C7ADDAB55016A76EC46213FD9BAAF +03F7A5FD261BF647FCA5049118033F809370A84AC3ADA3D5BE032CBB494D7851 +A6242E785CCC20D81FC5EE7871F1E588DA3E31BD321C67142C5D76BC6AC708DF +C21616B4CC92F0F8B92BD37A4AB83E066D1245FAD89B480CB0AC192D4CAFA6AD +241BD8DF7AD566A2022FBC67364AB89F33608554113D210FE5D27F8FB1B2B78A +F22EC999DBAAFC9C60017101D5FB2A3B6E2BF4BE47B8E5E4662B8C41AB471DFC +A31EE1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 134[41 47 15[48 2[39 28[69 72[{}5 83.022 /CMMI10 +rf /Fb 255[65{}1 83.022 /CMSY10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 9323397 0 11933994 + 756 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +85.35825 0 -85.35825 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 1 dup 2 mod 0 eq false and exch 2 lt true and or { /viceversa +-85.35825 85.35825 gt { true }{ false } ifelse def /epsilon 0.01 +def /minTickline -5.69089 def /maxTickline 113.811 def /dT 3729359 +abs 65536 div viceversa { neg } if def /subTNo 1 def subTNo 0 gt { +/dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend +exch def /tickstart exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize +0.75 def /TColor { 0 setgray } def /subTColor { 0.5 setgray } def +/MinValue { xStart } def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 +mul viceversa { add epsilon sub } { sub epsilon add } ifelse } def +/logLines { false } def /LSstroke { 0 setlinecap stroke } def /subLSstroke +{ 0 setlinecap stroke } def 0 dT MaxValue { /cntTick exch def logLines +{ gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul +add def x abs MaxValue abs le { x minTickline moveto x maxTickline + lineto } if } for subTwidth SLW subTColor subLSstroke grestore stroke +/dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul moveto cntsubTick tickend STsize mul lineto +}{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore } for /dT +dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon viceversa { add +}{ sub } ifelse { /cntTick exch def logLines { gsave 1 10 subTNo div +9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MinValue +abs le { x minTickline moveto x maxTickline lineto } if } for /dsubT +0 def subTwidth SLW subTColor subLSstroke grestore } dsubT abs 0 gt +{ gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul moveto cntsubTick +tickend STsize mul lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart moveto cntTick tickend lineto Twidth +SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +0 113.811 0 -5.69089 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 1 dup 2 mod 0 eq true and exch 2 lt false and or { /viceversa +-5.69089 113.811 gt { true }{ false } ifelse def /epsilon 0.01 def +/minTickline -85.35825 def /maxTickline 85.35825 def /dT 3729359 +abs 65536 div viceversa { neg } if def /subTNo 1 def subTNo 0 gt { +/dsubT dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend +exch def /tickstart exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize +0.75 def /TColor { 0 setgray } def /subTColor { 0.5 setgray } def +/MinValue { yStart } def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 +mul viceversa { add epsilon sub } { sub epsilon add } ifelse } def +/logLines { false } def /LSstroke { 0 setlinecap stroke } def /subLSstroke +{ 0 setlinecap stroke } def 0 dT MaxValue { /cntTick exch def logLines +{ gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul +add def x abs MaxValue abs le { x minTickline exch moveto x maxTickline +exch lineto } if } for subTwidth SLW subTColor subLSstroke grestore +stroke /dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick +dsubT add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke +grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick tickstart +STsize mul exch moveto cntsubTick tickend STsize mul exch lineto }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart exch +moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore +} for } if end + +@endspecial 756 +-236 a + tx@Dict begin { -56.9055 -14.22636 } PutCoor PutBegin end + 756 -236 a 704 -215 a Fb(\000)p Fa(e)756 -236 +y + tx@Dict begin PutEnd end + 756 -236 a 756 -236 a + tx@Dict begin { 56.9055 -14.22636 } PutCoor PutBegin end + 756 -236 a 737 -218 a Fa(e)756 +-236 y + tx@Dict begin PutEnd end + 756 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.2 SLW 0 0 1 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ -56.9055 85.35825 -56.9055 0.0 /Lineto +/lineto load def 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 0 1 setrgbcolor [ 5.0 + 3.0 ] 0 0 add dup 0 gt { /a .5 def PathLength exch div } { pop /a +1 def PathLength } ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} +forall def 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 /z ED false X { z mul } forall X astore {0 +gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke + grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.2 SLW 0 0 1 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 56.9055 85.35825 -56.9055 85.35825 + /Lineto /lineto load def 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 0 1 setrgbcolor [ 5.0 + 3.0 ] 0 0 add dup 0 gt { /a .5 def PathLength exch div } { pop /a +1 def PathLength } ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} +forall def 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 /z ED false X { z mul } forall X astore {0 +gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke + grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.2 SLW 0 0 1 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 56.9055 0.0 56.9055 85.35825 /Lineto +/lineto load def 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 0 0 1 setrgbcolor [ 5.0 + 3.0 ] 0 0 add dup 0 gt { /a .5 def PathLength exch div } { pop /a +1 def PathLength } ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} +forall def 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 /z ED false X { z mul } forall X astore {0 +gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke + grestore end + +@endspecial 756 -236 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 56.9055 div 2.0 div +def 62.59639 0.0 /YA exch 56.9055 div def /XA exch 56.9055 div def +62.59639 85.35825 /YB exch 56.9055 div def /XB exch 56.9055 div def +/Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul XA add +def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 mul def +/@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add def /@yTemp +yMid @deltaY 2 mul sub def @xTemp @yTemp 56.9055 mul exch 56.9055 mul +exch } false /N@@tempNode 10 {InitPnode } NewNode end end + 756 -236 a 756 -236 +a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if /rotAngle exch +def end + 756 -236 a 756 -236 a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 5.0 add 56.9055 div Yc 0.0 add 56.9055 div 56.9055 mul +exch 56.9055 mul exch } PutCoor PutBegin end + 756 -236 a 756 -236 a + tx@Dict begin rotAngle RotBegin end + 756 -236 +a 28 x Fa(H)756 -236 y + tx@Dict begin RotEnd end + 756 -236 a 756 -236 a + tx@Dict begin PutEnd end + 756 -236 +a @beginspecial @setspecial + tx@Dict begin STP newpath 0.2 SLW 1 0.5 0 setrgbcolor /ArrowA { +moveto } def /ArrowB { } def /ArrowInside { } def 0.2 SLW 1 0.5 0 + setrgbcolor /ArrowA { moveto } def /ArrowB { } def /ArrowInside { +} def [ tx@NodeDict begin tx@NodeDict /N@@tempNode known { /N@@tempNode +load GetCenter } { 0 0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY +add 56.9055 mul exch 56.9055 mul exch XA @deltaX add YA @deltaY sub +56.9055 mul exch 56.9055 mul exch 62.59639 0.0 /r 5.69054 def /Lineto +{ Arcto } def 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.2 SLW 1 0.5 0 setrgbcolor 0 +setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.2 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 62.59639 85.35825 XB @deltaX add YB +@deltaY sub 56.9055 mul exch 56.9055 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 56.9055 mul exch 56.9055 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.8 SLW 1 0.5 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def 0.0 85.35825 /y ED /x ED /r 56.90549 +def /c 57.2957 r Div def /angleA 180. 0.0 c mul 2 div add def /angleB +360. 0.0 c mul 2 div sub def x y r angleA angleB arc gsave 0.8 SLW +1 0.5 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial 756 -236 a + tx@Dict begin tx@NodeDict begin {/bW2 9.95863 56.9055 div 2.0 div +def 2.84544 28.45274 /YA exch 56.9055 div def /XA exch 56.9055 div +def 2.84544 85.35825 /YB exch 56.9055 div def /XB exch 56.9055 div +def /Alpha YB YA sub XB XA sub atan def /xMid XB XA sub 0.5 mul XA +add def /yMid YB YA sub 0.5 mul YA add def /@deltaX Alpha sin bW2 mul +def /@deltaY Alpha cos bW2 mul def /@xTemp xMid @deltaX 2 mul add def +/@yTemp yMid @deltaY 2 mul sub def @xTemp @yTemp 56.9055 mul exch 56.9055 +mul exch } false /N@@tempNode 10 {InitPnode } NewNode end end + 756 +-236 a 756 -236 a + tx@Dict begin Alpha 90 sub 9.95863 0 lt {180 add} if /rotAngle exch +def end + 756 -236 a 756 -236 a + tx@Dict begin { tx@NodeDict begin tx@NodeDict /N@@tempNode known +{ /N@@tempNode load GetCenter } { 0 0 } ifelse end /Yc exch def /Xc +exch def Xc 5.0 add 56.9055 div Yc 0.0 add 56.9055 div 56.9055 mul +exch 56.9055 mul exch } PutCoor PutBegin end + 756 -236 a 756 +-236 a + tx@Dict begin rotAngle RotBegin end + 756 -236 a 29 x Fa(h)756 -236 y + tx@Dict begin RotEnd end + 756 -236 a 756 +-236 a + tx@Dict begin PutEnd end + 756 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.2 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def 0.2 SLW 0 1 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { } def /ArrowInside { } def [ tx@NodeDict +begin tx@NodeDict /N@@tempNode known { /N@@tempNode load GetCenter +} { 0 0 } ifelse end @xTemp @deltaX sub @yTemp @deltaY add 56.9055 +mul exch 56.9055 mul exch XA @deltaX add YA @deltaY sub 56.9055 mul +exch 56.9055 mul exch 2.84544 28.45274 /r 5.69054 def /Lineto { Arcto +} def 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.2 SLW +0 1 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.2 SLW 0 1 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 2.84544 85.35825 XB @deltaX add YB +@deltaY sub 56.9055 mul exch 56.9055 mul exch @xTemp @deltaX sub @yTemp +@deltaY add 56.9055 mul exch 56.9055 mul exch tx@NodeDict begin tx@NodeDict +/N@@tempNode known { /N@@tempNode load GetCenter } { 0 0 } ifelse end + /r 5.69054 def /Lineto { Arcto } def 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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.2 SLW +0 1 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath end + +@endspecial 756 -236 a + tx@Dict begin { 85.35825 -5.69089 } PutCoor PutBegin end + 756 -236 a 732 -218 +a Fa(x)756 -236 y + tx@Dict begin PutEnd end + 756 -236 a 756 -236 a + tx@Dict begin { -11.38092 102.43007 } PutCoor PutBegin end + 756 -236 a 734 +-226 a Fa(y)756 -236 y + tx@Dict begin PutEnd end + 756 -236 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Aufgabe122.pst b/2dgrafiken/Aufgabe122.pst new file mode 100644 index 0000000..8c660d6 --- /dev/null +++ b/2dgrafiken/Aufgabe122.pst @@ -0,0 +1,29 @@ +\psset{xunit=2cm, yunit=2cm} +%\psframebox{ +\begin{pspicture}(-1.6,-0.5)(1.6,2) +%\psgrid[%griddots=20, +%gridlabels=0pt, subgriddiv=10](-1.6,-0.5)(1.6,2) +\psset{plotpoints=200} +\psaxes[linecolor=red,%ticks=none, +ticks=x, +labels=none +]{->}(0,0)(-1.5,-0.1)(1.5,2) %Mittelpunkt (linke Seite x,y 3/4 Quad) (rechte Seite x,y) + +\rput[c](-1,-0.25){$-e$} +\rput[c](1,-0.25){$e$} +\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,0)(-1,1.5) +\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](-1,1.5)(1,1.5) +\psline[linecolor=blue,linewidth=0.2pt,linestyle=dashed](1,1.5)(1,0) +%\psline(0,0)(4,3) +\psbrace[linecolor=orange,linewidth=0.2pt,ref=lC,nodesepA=5pt](1.1,0)(1.1,1.5){$H$} +\psarc[linecolor=orange](0,1.5){2}{180}{360} +\psbrace[linecolor=green,linewidth=0.2pt,ref=lC,nodesepA=5pt](0.05,0.5)(0.05,1.5){$h$} +%\psplot[linecolor=yellow]{0.01}{1}{1 x div} +\rput[c](1.5,-0.1){$x$} +\rput[c](-0.2,1.8){$y$} + +\end{pspicture}%} +%%http://sites.inka.de/picasso/latex.html + + +%ticks=none,labels=none]{->}( diff --git a/2dgrafiken/KanonischeVektorenImRaum.eps b/2dgrafiken/KanonischeVektorenImRaum.eps new file mode 100644 index 0000000..370fec7 --- /dev/null +++ b/2dgrafiken/KanonischeVektorenImRaum.eps @@ -0,0 +1,2352 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Thu Aug 17 11:47:05 2006 +%%BoundingBox: 45 748 99 757 +%%DocumentFonts: Times-Roman +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2006.08.17:1137 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.08, 2006/06/17 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2006/06/17 : - changes to the code (hv) +% 2006/04/21 : - Improved parser -> generic with derivative and translator into ps (dr) +% 2006/01/16 : - EXP -> Exp to prevent missmatch with pst-math (hv) +% 2005/09/28 : - rename it to pstricks-add.pro +% - add support for Gouraud shading (hv) +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression (dr) +% 2004/12/16 : addition of Sum and IfTE (dr) +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +% +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { tx@AlgToPs begin AlgToPs end } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 +/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 3.14159265359 /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 } + { tutu 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (ln\() StrConcat 8 index StrConcat (\)*\() StrConcat + 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 (*\() 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 3.14159265359 /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 90 div 1.57079632680 mul +} 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 90 div 1.57079632680 mul +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } 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 { 2.71828182846 exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/PI 3.14159265358 def +end +% END pstricks-add.pro + + +%%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 = "30 October 2002", +% 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 +% 0xD0 + /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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.83)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end TeXDict begin +40258437 52099154 1000 600 600 (2dgrafiken.dvi) @start +/Fa 135[42 54[60 12[42 1[42 1[42 48[{ TeXBase1Encoding ReEncodeFont }5 +83.022 /Times-Roman rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 4326068 0 10628664 + 0 -274 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.56917 SLW 0 setgray 0. true 162.18054 33.00528 0.0 -33.00528 +0 Frame gsave false 1 0.0 0.0 gsave 1 0 0.4 setrgbcolor currentrgbcolor +grestore gsave 1 1 0 setrgbcolor currentrgbcolor grestore 2000 1.0 +0. tx@GradientDict begin GradientFill end grestore gsave 0.56917 SLW +0 setgray 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 0. true 81.94403 22.76227 7.96672 +-1.13791 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 22.76227 80.80568 +-1.13791 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 0.0 7.96672 -23.90019 +0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW 0 setgray +0 setlinecap stroke grestore end + +@endspecial +0 -274 a + tx@Dict begin { 45.72427 11.09654 } PutCoor PutBegin end + 0 -274 a -217 -246 a Fa(0xA0000000)0 -274 y + tx@Dict begin PutEnd end + +0 -274 a 0 -274 a + tx@Dict begin { 115.67392 11.09654 } PutCoor PutBegin end + 0 -274 a -21 -255 a Fa(x)0 -274 y + tx@Dict begin PutEnd end + 0 +-274 a 0 -274 a + tx@Dict begin { 80.51697 -12.23447 } PutCoor PutBegin end + 0 -274 a -42 -246 a Fa(24)0 -274 y + tx@Dict begin PutEnd end + 0 +-274 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/KanonischeVektorenImRaum.pdf b/2dgrafiken/KanonischeVektorenImRaum.pdf new file mode 100644 index 0000000..497ed67 Binary files /dev/null and b/2dgrafiken/KanonischeVektorenImRaum.pdf differ diff --git a/2dgrafiken/KanonischeVektorenImRaum.ps b/2dgrafiken/KanonischeVektorenImRaum.ps new file mode 100644 index 0000000..998d44c --- /dev/null +++ b/2dgrafiken/KanonischeVektorenImRaum.ps @@ -0,0 +1,1695 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software +%%Title: F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi +%%CreationDate: Thu May 11 08:41:55 2006 +%%Pages: 1 +%%PageOrder: Ascend +%%BoundingBox: 0 0 595 842 +%%DocumentFonts: CMMI10 CMR7 CMR10 CMMI7 +%%DocumentPaperSizes: a4 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: C:\texmf\MiKTeX\bin\dvips.exe -P pdf +%+ F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi +%DVIPSParameters: dpi=8000 +%DVIPSSource: TeX output 2006.05.11:0841 +%%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 +/p{show}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: alt-rule.pro 0 0 +%! +% Patch by TVZ +% Makes dvips files draw rules with stroke rather than fill. +% Makes narrow rules more predictable at low resolutions +% after distilling to PDF. +% May have unknown consequences for very thick rules. +% Tested only with dvips 5.85(k). +TeXDict begin +/QV { + gsave newpath /ruleY X /ruleX X + Rx Ry gt + { ruleX ruleY Ry 2 div sub moveto Rx 0 rlineto Ry } + { ruleX Rx 2 div add ruleY moveto 0 Ry neg rlineto Rx } + ifelse + setlinewidth 0 setlinecap stroke grestore +} bind def +end + +%%EndProcSet +%%BeginProcSet: pstricks.pro 0 0 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: 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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.81)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMMI7 +%!PS-AdobeFont-1.1: CMMI7 1.100 +%%CreationDate: 1996 Jul 23 07:53:53 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 105 /i put +dup 110 /n put +readonly def +/FontBBox{0 -250 1171 750}readonly def +/UniqueID 5087382 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F +C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B +B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868 +DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811 +4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3 +FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB +76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5 +123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770 +012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6 +A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413 +44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC +4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050 +01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608 +D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3 +914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05 +261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615 +24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2 +A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663 +9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C +889787CDC0C51802EA1E0C63E6DE20980D3DD206F05360F78906FF0132D5F4EB +8B2384EBF991DF6A99488477067F4A8C0FCE0CDE8FDEDE80EE0E087271DCB088 +9A0B2ED6FCA29399FF34CAAD2F4ADE9979E7B1F46EBCF7EAAA9C1BD7D5A7C901 +C4F56769AB3279B88B453CAD4F980D5776CBAFA7A5E45EA940A80018FF8A1060 +649DBA8BECEB5FB18938F7E69FDCC37A64DA9FE7336ED1BBE2609B8752409617 +6D0C56A0CA33A91D7D34AC34703DD12E031D0EEDDC326DB3C7D69E2EEEF2103E +0207D54FCA89E72DF619FDA6021550754A0D030D6EAD60F32A4889A025703DE5 +A8CDED50E5F7F6F06CB9A29BD7A5FA653CB399D3B21A2B4BF37F51C31C165D68 +01F36ED6F31DB77CA973CF6B83D22495487E1B6024F5E3102FF2C81D6BBFEE37 +EDF7922ED0D015B44F48A5D9D038D9831EF172D0346456F4B9845DC2E57D2DF0 +566DC8DD79D13BF83B380CB195F7619E0F6B2578A36C3EBAF45E775F06CB33DA +90630DA177E741F5E86D6C2CCD285CE0C39070FE3BB5C5AC5EAD82753A521F6D +E159B9CC589E1DA082437A1E0CF115B3B88DE31461153596734DFC910E7D2A64 +2CFE5D5BE313E4CB2B7665893A51B263E664094A94078AD2F3D7A189168D95B0 +029D54A6CF6D85773F314ED03B0D43A5602416F30BC1A9B44D7AA2EE12034AB5 +B2C7DE0B9F15DC55C6C808C5AECEF16F70453F209BFF0D5E9038A6603946D9D4 +FA1FB5435EBFB48DBDF1521A1AA595DB64FA37D36CFD73675F18C1601CE2D5C8 +92764CC093EB43726671E23A6953368F4C31CE413326629E87264D1B0D1855AB +E20AEF4B8030F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 61 /equal put +dup 75 /K put +dup 97 /a put +dup 100 /d put +dup 101 /e put +dup 105 /i put +dup 110 /n put +dup 111 /o put +dup 114 /r put +dup 116 /t put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BE18EFA2C389E5E30 +A01122D4441EBDC07E8FF810DAC4B013B1B89F5E18548EFFA31C3777BB187362 +FBBE6623184ECD991A057D130019D498D2ED4D2564124D648B1E0956E861DE83 +22DE4B89AD33CEC6DD6BC2744D542521314697AC87F8582E18ACD9233CB483DE +3038D43DEE9C4101EC3001E16A8AB4DBF57849C544A743267A6C9B510BA2D4BA +A94F5957E3FA951B817B69BEDF51BE484A6FA1B22079BB32D468F393A6187502 +C4D904A26BA22D3EA5867045C5621797FB5B6216077AF948D21F19461C01EB6D +54A084D3DCC5ABC5DF3CADC870236751D9EF221AC1E7BD29FDC20E11094E2852 +779FC5C0D5DB9D3C8E4443F64E4037AC19B46A1050451ECEB053DC8EB7B1FC8E +4B8175703FEC53549A80FA0B8B14AD07A99A7BEF99111BABBBEDB83B50CB2D6E +44036DA3DE4A6BB700EFA22290B3DC8113DB1B383EC98F8367ECA284490AEE8D +2E2DBB374BA8B0C30D5E782C9B7DB4551E2BFB4BE67A1833D36D09829FA03EE7 +D559D5AA9876BCCBAA3972BCABAB06157DBFB18A3A746FA3102EAD32D37460CE +2099273F1622C089AB3CB216A5C27D66D2C8170187CDF780CAF45A8E0C2D394A +26B50F8BE2ED926D812092E92DA4D04D0895B07B66D5344986A0FC7A8B2F7B9B +62EE1105F37A99A308E7DA80A3018D0ABC05D3F178B531BA4517B18300254453 +0CED9C755ED7FB6640DEBDACC45D477D8788EFC79A0297F6D5CBB83FAEE7B897 +F107662E8467FAC8D9E2AA0F906F3B47E80DCC1112B17D53D40A2B6069113FFA +623E46BE165E6F804BE8F048CBABB1F17C135472030108CBA8AC517767F5F9AC +03906FE484D8A872EE3C586138EC5914DE640386AC937CCB0E7372B10B4091F3 +50DA0CEBF7927D5B99DAEC3708AEFF3A0E6E57FC88F41EF68172E0D0173B4F9B +447A15A585CA04DB909525C301E6D672BA9E9974A1571A95F31027C28ADEB097 +50D714286B2F538AB6466492608DE79700A2696D228555A71EC969EF39E4A23C +75107AB50502B9C33250D3A57986216B54C172D9A428D7AFAE4A2886F5EA25CE +F049A97F439393AC4BA9F2B4B8E959E8877C96A1C9FD3C762189575E839ACAEB +A85304289EEB2139BBE7C1F478D42F5E7D4CB9881394A2234BC09636AEFE18C6 +23A58FB78B6479035DA7CCE11108D7ADBAF79C8E66A6F27EE257E88F34E6654E +DB7EB1419264F16AD68DAB440F5DF9902E8025EFB02E5E7FF35387ED3D8779AA +0C88BFB1858B89E1CD1BFC549BE2611EFCF4151893D9ACC39431310D99E97BFB +58C82D050CD3925F039ADFFC01654E60CD0185DED6094A824186878AFAA94548 +68CF03E16662A244C04EF44D40D1D84DC1FBE39B1A437D5A41FA94FCAAD836DA +7D190AA05F5CB767540BDD16FE1281E894F74F4F940FF944C3886A590A47E68D +8FDBBEAE0F3F5D79F3F2CC679E02594870A926F8970593E856EE0CB80ED14CAD +4CA1422EADC2853DDDD0DB3BB96778A5101FD6C92D734524E83373CEE8F30E68 +FB8970FD2CAF6C10BEC39B30DEED5147D20999B1B1D02A8DCB118C8E657CBF01 +7D644B1348E4249348584EA4E77613A0C29E527417FDC50A0CCEC1C3862634F6 +0E5CF2BA3A1BF447501205FDFBC20F3A96B966C3FB1D4D22326AD10E0815CC12 +02E2E7A214FF37F4B620F357509997F2E449606D7E61B19D466B5B6E199C5009 +239C7196FEA1442E26981A10CCBD5B6C534B88295C30D20FD15A2F382A290554 +48B5EE1DEE6C4DA3518C403F0055B0916CCDCA72316A030BCC37A2D329EE4F26 +87FF6CF2ACADF015DC38D20B699D8D02B23840FC090CCC0109640D6A8667F4F9 +2B00A756F75C2F086ACB207772CB8DD972C805F2FFEABE772245EF5F6244E752 +C3C441DFBF2189808F498723071F3F742318849245909201CBF2299C11F3E47B +8BAAC42915DA3E5FB8FD4D927F7D17A99DBE362C7C1B9F461343995462A7CEDE +29707D8EC3224895493584CB97A564EF7D988B78754CC7DD7D62877E1C3F023B +30A58DACBE442C588BA1FBFE2D176EAAF183E6CBC9778D1D9591F9C257989F85 +EEA440B8A9C55A289EBF9B34ED491F6B3F5551AD2725EE450D0F5157FC759DE5 +FBDB8A775F7BE3B81F4EC0A022297EE47315C4FEDA0A6B25CA8667E1CC850805 +27ABDDCE056718B31E9019A4CF627BAC4745E5F4875BBAB7B68935B92A4D2A05 +B5E1F777F14093072A3040BEA79BAC5B135F90FF30752FE4E6724643BB68F068 +DA0A7FE39A039360C96C8354DED48BB0FEB599601F14BDBF0D9B0146FADE9BA2 +3E7FB33CAF545C6438C1DB6544452E79E05CC96EADC49FA985FB1F29B330F21A +FE2E3E8596882E5BECCE232919F4154DE1501C44B015E44A979FF7C29A651459 +571691EF960398B49F57B1F03F71FBC0E2F94B7A456B4BB61FB7552E5DA0B5F3 +CACE059BBFB275D8E8C317A489EC6E5AC2C633E65A5B4DA40999AA4F89FEFEDE +A40F640238DC66E9AE785FEE629495F7566294F2C10FEFD5F295DEBC0564A052 +6CE534E8A7E7ED5DAA4584460A357067EE03B85943E7D2F50033953F2EC1D175 +643A9CBF84FBF7B0FDA60485D31AB1AF923C9D75948615F8D6F720FB8B36218E +CC6C74BEECBAC6625E58BD7BEC0BF7EB1D65D7CCEACF2C1789F5F4E8A1F60717 +3FF6D723CC54ED43E3A89B23D0A63CAAFC7A963E2FA4BFDB852EB0E66420A7F5 +572CDE874C3AF01169305D7465D6CB9B81C78733CF17D0424D0BE335579A32C0 +FA284FCF9843D5C3421B32190E4F0F3029838A3C63652B6C7508099380F2943D +511C8098A6484EBBD4110ED5C5AF74BEDB2E8CB3371E3E183FDCDC0587EAFC04 +5F0B394A8408C5231A306D3E39632B13995A5526FDDA1C266B367E21DBA2DEDA +2F289A3CF15FF954BCC1455CD0FA4CCEE1BFEF198367C7F50BD95B380FEAD6A4 +A768E3D36075F2EED85A54A22BA5F87EE7F9239695C489D8CF5CF74C27D5D976 +896925F54E78B52D5E9C0595359DBC010F5040BB9F22CB04D4C558D1C531289C +6ED5A4509A48BCBD125ED47FBC3D52FD2106403DD6263B0C1BD3EF6AF0BA5F4E +40271BF0A37B3D0353E3DC5B2D6EC64740BB8ABC5CB0F6E2F0B20617EA3F1E4F +51B57F2C081F655D16ECD82BF5793462BEBDD18EB1C6EE6C47DD26C5988917B1 +17D2DE951D3AAD646B61E14D099F60ED38E2AC39624F4256A3AEFDC93B6A4983 +9C6CEC0496F606026F84688FD5109E8ABCC7B5328E8A1F3D4BC5D1C814D35E0C +93CFEE0377D4F028E35591541084F87DFB0838D1E1EA84B44DBB2A525FE20D9F +550F9656D2E80B7059CA2EB824299C282745FFCD5BCFCB78898E2C178D489B7F +9CD068E50EB4D91F8066577C21918DC3BB5DFB59363436A1E053ECA9D7D91096 +EF4E7A4617AE36C0E9A9A63ABB9E1D07EE434A87888540E46BF6404BF821B431 +2194B9AF5F02A976071AF74FEFE9AF47295833D6329212C8A79A51822AD966B5 +904CBA69BCABC1FBCA166EE37205E6853CFB2891E72F9CC465E27849672A6187 +FCE8ECDC55761DB22AADB05145128DD4E4B3E5F3F94CAA42AD6FD60811CADBB0 +8D23D12B3B881D96E1F2D54CA122842B5CEFD391168129DFA38323A52E68F71E +9F9D9A2F7B43D9DB8F46663FF7D03DA5F12D06F9848D6C3D2C6030F7737CC45B +41A9C57EE53DEE9ECA6F3FF6FB1F7A21A45046A76A9E5F78158B137D67B84D48 +C84905212CFF6E5C05AD149F121D2542368D64E7614F9F61D842DA5422999DCA +367C1F77C877EC4428D6D74CA1F398E4F20820FB12853E8FC6B07DF8558070C6 +7725D4F29996EF6E31E5A525D44A7E15872B3F4678A2FA07A1F2214AA35662D0 +215B936EE2CF7042D222240318CC68759A1FDE746C366E34B747B9EC68264B77 +9E1CDE29505F54749613075CA1FAFBD5FAE46CF49E397E7D84499A33110B1CCD +06B59E003CD6437D3D0BD5E7BBC93F6454BFD84399AA8FAB2B4F3CA324FE5F9E +360A198F55221645C4E4CDE20F9BE9123A3204EE4DBF413F9553C620EFFC4F85 +F689DC750383A59ADE37ED18168C3CCF987612A2C0D102AA4E25ADA523B4C1EF +613C21605499272E4F021E4D289A34CE5DDDF0889D02756F43EC146F428313A0 +6CE47772CCBE298E0CF882F61701CDB6C9A34605C065621735C181514C1E6BC6 +490D1F69CC7131D64AD08FFA1E2AC4FF4C319D8EBEB5274D29871914A1872757 +26AC195F7DF9209E32B5341692AB5DEE94C88156D692506611CDE62D363E6527 +42BB7FAAF395742C5D2C96D544A88EBF224277669B44D30DA40C1622BB0B0D4B +4AB404DD9FE50BC8350BF81C86AB50A455545EAB9F6945BEE15C223AA4980BFD +F5203FF3BF4940B7D98BE0D04131B86CE1A399C069634A1266CF7649B2BA2521 +D144C9573A530FE59D83CBA515F6B1F2E801677CD394F889065794D9ED5F264A +E3E900F4FAF446EDFE71946AA604D385108F18AF7469305CD5175AC37C158BE0 +9500056A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4DE3E3F6222F +7A252B780C86447859579C68E52691E144F836C1C62F19A12EFB710343D33262 +1F7955FE5C37074CE5F9C7ABF1A241078519A4D7913A0AD861E0E357B50FB730 +E757C0D26390E6028FAC61EB0E9414716AC8406A6E35DC70A7C1AA524804FC8E +985CC3604A2BE0A8235CC895B2B33CB7EE85FE4F2CD817BAC3D27ADD295D0A0E +BC0E8D849952BCA7325DC261A785CD2305BC377AC61AC5E5B2CD3164CFF033CB +5436B8000673A4D763ED26273130702447C75A774C7799FB8C3E54A2E34D1710 +CF7883A9B05285C7DF30F314455A4428A5369D92C0348D45BF4AEC5E16611D16 +1E5EF015900F4DF63A58DC233BEE88417B204DBD110AACD1DE3D750F9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +dup 59 /comma put +dup 101 /e put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176671A33FC55340CD04C2DE46FD812FC2711A85E61442AB93E8157A603D +91023151267FB376665DDADCADD27FB02C8ED543E20516DA8FF6AF77848523C5 +86A500942F5D59B75422A42CF5876232320E2F1C54F253DE61FB2466D96F1F25 +31499278FF020F783D34144843E8EDA8454892F14751857C5D90C3320AD4362E +9D080C4C8EA27FF7A1EE12EF9303B68A8D71912344F9A2C976D6202438BAF801 +38B95E9AFC28215E35703FA3992E84F4734B7E8252C52296D37961DD6E82A835 +33295A448178B028B9276DCCB3C35F99A3473BEEEA01CAC41D1344C1B3074DAD +80FCC02AE3829A6A1F1B8E88DFA9DE9E1736348F7D8B1970DB844E2B676AAEF9 +C52E020C0CA5A82B66E7A1E45D8B27E63692A224B46A6E197278F5C1FFDE3C8B +FB4C03E4DAEB06388E6698426EB3D0AAB58C0B48E0496FFC6FD45D585CA8DFC7 +BC8FC4FCFBAAF7906A2185F446FE1134BD291A0BE0FBC9B6260AF3BF0447FFF6 +D1BA753E14AAC000038E8A7FCEF3BDC3909046B9D53B180E0E15A86991DA05C2 +E14228F3E8415E50871108DB3C79BA4B8AA38E7D58F37571D30AD984DC5D4B43 +7201690047E238E6A89680A90A007C8382471BF23BA0F4CC2D0975621F9F5360 +39ECA156B5127C646B9D1C9F2CFC89BC0E3B734F340A157A139B024635F34386 +7C8545D8B01A73077537CB607DAD73AF24789CC7552750B44F2EE0AA58A8BB82 +13ECD69EE48483AF01492526F8AAEB23C7AFC63233CD26A6B7A17331447E423A +08A09DE61204B1B277C115DF3C937988181C5CE2BF6BB4309171995067EB2DBC +4171EF27D8B7E0318560AADE630DB8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 39139632 55387786 1000 8000 8000 +(F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi) @start +/Fa 145[547 4[313 105[{}2 774.872 /CMMI7 rf /Fb 139[430 +1[434 2[553 615 4[307 3[492 615 2[553 21[861 13[861 11[553 +553 1[307 4[430 430 40[{}15 1106.96 /CMR10 rf /Fc 206[441 +49[{}1 774.872 /CMR7 rf /Fd 129[553 24[515 41[307 307 +58[{}4 1106.96 /CMMI10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 8000dpi +TeXDict begin +%%PaperSize: A4 + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 5594036 0 24240826 + 3076 -6022 a Fd(~)-697 b(e)3447 +-5856 y Fc(1)4252 -6022 y Fb(=)307 b(\()q(1)p Fd(;)184 +b Fb(0)p Fd(;)g(:)g(:)g(:)189 b(;)184 b Fb(0\))1577 b(.)185 +b(.)g(.)1840 b Fd(~)-633 b(e)16034 -5856 y Fa(i)16710 +-6022 y Fb(=)308 b(\(0)p Fd(;)184 b(:)g(:)g(:)189 b(;)184 +b Fb(1)p Fd(;)g(:)g(:)g(:)189 b(;)184 b Fb(0\))1577 b(.)185 +b(.)g(.)1957 b Fd(~)-750 b(e)30461 -5856 y Fa(n)31371 +-6022 y Fb(=)307 b(\()q(0)p Fd(;)184 b(:)g(:)g(:)k(;)c +Fb(0)p Fd(;)g Fb(1\))1575 -1575 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.1 3. 1.5 2. Arrow + EndArrow } def [ 181.24384 36.98865 181.24384 14.22636 /Lineto /lineto +load def false Line gsave 0.8 SLW 1 0 0 setrgbcolor 0 setlinecap +stroke grestore end + + +@endspecial 1 0 0 TeXcolorrgb 18361 -1820 a(i.)493 b(Ko)31 +b(ordinate)p Black eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/KanonischeVektorenImRaum.pst b/2dgrafiken/KanonischeVektorenImRaum.pst new file mode 100644 index 0000000..bc41af6 --- /dev/null +++ b/2dgrafiken/KanonischeVektorenImRaum.pst @@ -0,0 +1,18 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.5,-0.5)(12.5,2.5) +%\psgrid(0,0)(12,2) +%\begin{pspicture}(0,0)(12, 2) +\rput[c](6,1.5){$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$} +%\rput[c](6,1.5){\psframebox{$\cdot$}} +%\rput[c](4.3,1.5){\psframebox{$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$}} +%\psline[arrows=->](7.9,0.5)(7.9,1.2) + +\psline[arrowlength=3, arrowinset=0.1, linecolor=red]{->}(6.37,0.5)(6.37,1.3) +\rput[c](6.37,0.2){\color{red}{i. Koordinate}} + +%\rput[c](0.5,0.5){.} +%\rput[c](12,2){.} + +\end{pspicture}%} +%rput center --> Koordianten werden um die x-Koordinate ausgerichtet \ No newline at end of file diff --git a/2dgrafiken/Kreuzprodukt.eps b/2dgrafiken/Kreuzprodukt.eps new file mode 100644 index 0000000..88b7790 --- /dev/null +++ b/2dgrafiken/Kreuzprodukt.eps @@ -0,0 +1,2906 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Sat Jun 14 19:19:38 2008 +%%BoundingBox: 73 716 270 730 +%%DocumentFonts: CMMI10 CMSY10 CMR10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.14:1919 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 6 2007-12-29 21:41:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 nanomètres +%% lambda min=380 nanomètres +%% 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 +% +/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 +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4B067A46F8EE +2AFACDE591ADF7304939394F221B5B9B316BC47DC7772711A35B466E1790D4F5 +C02C57DE57A0498128C6041CB7E702F4D8500433633B8358C438237BBA39C647 +F659FACF75574B1AAD3FE61FB97D6C5D0B19E4AC762321891092E73D192C4816 +2F14A6FFAA1B22AABB65E8F611F1E9AF66DF68DA1B2B64B4CA8870261F8663FA +28953254FA64F0AD6EFBFAB15830AF856A65835C803B70963595060F91F4079B +F8BF5396F04C070254AC5DCACB20C0B1FADD38825886322366927C97E3C5AA1B +EA858D5974EBC14D17D4ADDCB3C7EA74A8A2B75293747CFCE0B484713D631F95 +43BD5A359229F1276D2F652078ADA5000D1E060CE5CDF2E57401E487F3C10975 +09AACD27CEE8581EBADC25D0FC9CEA533B99DCEDC0F28E782F4FE22AE097CCF3 +F73338DA748C535291B4E8AF84546FE4B910107B6FFC5439C5B966DE6C905D86 +460A69D6031EC3F7261FCB6D932F722BC1F550574EBD6F676AC9770969657422 +4C8212F9FC9A49C9F0E813A2ACD16D1131A73D3001E698C63F76FE6D6143D310 +155256BE90530489736CF35CA2D7E4A1FAEAE2423ABB52E55DD7314097DF7C09 +F39C3E3A29F9BAA3AEBA89CC3E7B134E79A2DA39D449D98FE4ADE1A0ACDA79C4 +1E2C78CDCC5BDD192DAA27F17DC4368EBC54CC009802018E50519F69025DE7E8 +FB61694AEA672E59D00F6BA0CA9509FB8DC6544CB92B70BA0AE393A43959C90E +8857B0DA53A8D26426CAE0DCF2F3033BAC62502E08447B09CC18B2525AB65EC2 +C63074FF725168D115137ECDAB1EEB083711F647F757C9806056811466D59087 +B93D6B71594046B3B60A7D5789D6B99FC14764428A251F0A54ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +dup 61 /equal put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E +4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099 +E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634 +5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721 +639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428955D5B6A6C01 +F9D9F44C93F0C94D9D0728D2B98C558E20C6DF38DA980247CC7320494E0ADE56 +B2F1936E624CA50F8DD14C4674BD8164D73715D01E4845C4D0F9B44DFF396A3C +73954C42DB561C79655F0ACFB39BDEF99E91B69C462AE7D188A88871FC02E84F +B64D11F20453799F19073DAFCDA6BE29A327CA3A1B7B475033E246866AD6A5C9 +CE63E677E66AE9EE18E12C91BF75ED357C599C9A3444E1595FBF981120D00727 +B85DCAD9DE4BA1211A167D9AD853DC4CE60691A761FEEC7306D80D36CCA55E80 +26D1B1AC2FB42CFA5B30DA798C0A830C69BB2C71F7428375D75CD6C9AA1D742B +8A2BBB915E4CCDB69681C7726D78EF2C675DFCE211C6ED0F44B35EFBA9DAE2DC +765D21E1164E195825B688B71A9296EA8873B321A64BD8B7B3BB06EED710B183 +D7B5A4469FC3CC45267DE00F267774DCE23A74A4C6F977C8C0EBD9B312AED9AA +3EB9CE2B8132FE3B8CC114169B93FF4FE2EDB053FA42B50206FAF075F15BE61D +870FB5A524F6DDA969F66479A695CA828FA647E7135007C38E73408787A2BC36 +FE411C5D5F976192C0C01CBAC5FB2B6057C83F8897740D4C6C7E349829FE59DD +AAE29A018EFB4B9ECE79BF134721FFEB19581802B6444839CFCF6E0193E1AB10 +0CCA4D53B084BA6C124B588B922565ABA2C79876D2FE23C6B3EEDD6589CB5BCF +5B454AECC151734F626650083CC3962090AFA6E10FD7120C46E2642CFA19 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /minus put +dup 2 /multiply put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD +5F3D9983B036D9202C8FCC4FA88AF960E1E49914EC809263862931DB14B61EEE +6D37A389B488D0B64CFB7DA527AAED80494F79A073D895AA287BB47BD5246090 +A76CE91680C1F37E6A9F6C8BD284ADF6D7B3E93691CF0EAE126A7363CEA56928 +4D4B95F10E093D28693E4B35D6582DB256BC3364AE949CF668D8133F3189297A +116DFB41090F940474B3DE47008C8169C68A598BD2723C588F77A3B700B0098E +9A38CEE88B344A4B1DEA95A9D9F1F8B4302C5F123F23FCD0AA709736EE75ABA0 +FBE39928BC58BD4587323A2A8EB3A359B6A662E040FB310A4C91724358458A14 +FD005CF1AE7F503CCE936EABDFB7B5594D50AB19451CCCB8909EA9376E9A89D2 +F415FBF657FABE55AA6A9768EB8812560EFB9B298ECD10FEE8CA4C636C88BFCA +B916DCBE930A2C228C0921CDA6693C0E0FC4C91AF19602F5B444206AE955757E +4FAB2022D71737D156E3603A8CD90B4F7E014940AB180EB2711CA8310F20BDC3 +CFF37EC1D25D88B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 59 /comma put +dup 97 /a put +dup 98 /b put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176671A33FC55340CD04C2DE46FD812FC2711A85F5E6FF0C65763747BCC9 +C581A7C0445D68BE75E9AFE14991C21EF15172F65D87F15D6710F751BC0A5CA4 +410267E65BD4094AC13527F22A43DF0C9AE0E2152CB8E7B21180C2506D725215 +4FDF140C61A72DCAF76B6ED1D22DD210E2547633540AA26BD5E84B16C84E4644 +CE224F5C85E4E10F218D01FB6DBE16877ABE7FE7A6BE2D0C0C80E2E87E3BBBDB +4C5BDA0675707440E9D94DA80A0BE536BA95173CCB4920B6273D5690F7AC9F56 +D0E26A65D3C6B181188DD5D401A9DFB5B4B9476A5552F337705FAAC661EEF732 +0FC111CE57FCC63628FF2A3EA6709C8E502008E38ECBBA3666F0DC539316A671 +CF47EEAAC2A2FCDED00EAD120820AF0641AEE27A22ACD0D6A571F69A4A5A48D0 +4C43F4E59ECD822D2131469F8C75E6B06FC9F26FF76048C36E0A347EC0FCC3EA +6363A189C4CE6DCB19BE03943B950491C9ECDFCBBEE52E9AB83030CD8DDEF7F2 +AD3526782896E7FAE1D8E3F41A40F80C13A20EAF2957FD6698CE106E22379EAB +E9BC51A74AD29F3B7AEEB0BA1DF73DE63EB122EA9E17CC0462A145F5D51E4FD3 +58326743E70262064AB38892D9BDB2D1D77FAB332158329BCB83372A4BBF4091 +EAB026C51F3E7D2244F299498DB9AA8644B0982598D3E19F4E3BC286768D6E30 +A8411AE1A99C97DA20A74C11C517D5E28910381D5831F22A6AE0EF25C9414A62 +1245363240CC5290088B4593F22D218C2BCF01DC257450B7A49C4456391A1DE0 +71A6023E29D2A6561B2F01148B4FA13987E311A4EF1A2F0F5C663B37F2C6FB16 +49F8FB61D29222FC96DBE33C9A3BC4F447314FF8AA01F43C3F7AD27C502BCFB6 +2B32B6B809B5E72049457AD94EA022B42E09D8F9F781B44AFC46A6039F6B96E3 +8D68BA5337B69040802141DE6F91240BCBFC0BF34F5150392B0576D8195D7487 +F1A495B857672E43D987CBB8EC7CF393D929EC5A24CF89E71CC34F93188B83EA +858AED32C53F0659925CBB038899B71497DC8BBE9EEED31EC4DB600632791DB4 +6946BF48329B85599D8110FA27F29ABFD7267CA47443EE4DFF112BAB6EB795 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start +%DVIPSBitmapFont: Fa ecrm1000 10 11 +/Fa 11 123 df<7C007CFE00FEFF01FEFF01FEFF01FEFE00FEFE00FEFE00FEFE00FEFE00 +FEFE00FEFE00FE7E00FC7C007C7C007C7C007C7C007C7C007C7C007C7C007C7C007C3C00 +78380038380038380038380038380038380038380038180030171E77BA2A>34 +D75 +D<0000000FC0000003FFC0000003FFC0000003FFC00000003FC00000000FC00000000FC0 +0000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC000 +00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00003 +F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC00FC0001FC00FC000 +1FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E00000FC0FE00000F +C0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0 +FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F00000FC03F00000FC01F +80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CFFF007C078FFF001F +FE0FFF0007F80FC0283B7DB92E>100 D<0007F800001FFF00007C0FC001F803E003F001 +F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F00003F7E0000 +3FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE000000FE0000 +00FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F8000070FC000 +0607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020277EA525>I< +03F0000000FFF0000000FFF0000000FFF00000000FF000000003F000000003F000000003 +F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 +00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 +000003F001FFFC03F001FFFC03F001FFFC03F0007FC003F0007F0003F0007C0003F00070 +0003F000E00003F001C00003F003800003F007000003F01E000003F038000003F0780000 +03F0FC000003F1FC000003F3FE000003F73F000003FE3F800003F81F800003F00FC00003 +F00FE00003F007E00003F003F00003F001F80003F001FC0003F000FC0003F0007E0003F0 +007F0003F0003F0003F0003F8003F0001FC007F8003FF0FFFFC0FFFFFFFFC0FFFFFFFFC0 +FFFF283A7EB92C>107 D<0003FE0000000FFF8000003E03E00000F800F80001F0007C00 +03E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007E03F000007E07E +000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8FE000003F8FE00 +0003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E000003F07E0000 +03F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC0001F8007E0003F +0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277EA52A>111 +D<03F01FE000FFF07FF800FFF1E07E00FFF3801F8007F7000FC003FE0007E003FC0003F0 +03F80003F803F00001F803F00001FC03F00000FC03F00000FE03F00000FE03F00000FE03 +F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F0 +00007F03F000007F03F000007F03F00000FE03F00000FE03F00000FE03F00001FC03F000 +01FC03F80003F803F80003F003FC0007F003FE000FE003F6000FC003F7803F0003F1E07E +0003F0FFF80003F01FC00003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000007F8000000FF +FFC00000FFFFC00000FFFFC0000028357EA42E>I<07E01F00FFE07FC0FFE1E3E0FFE387 +F00FE707F003E607F003EE07F003EC03E003FC008003F8000003F8000003F8000003F800 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000 +0003F0000003F0000007F80000FFFFF000FFFFF000FFFFF0001C257EA421>114 +D<0018000000180000001800000018000000180000003800000038000000380000007800 +00007800000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF +0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 +0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 +0001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800 +C000FC01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347FB220> +116 D<03F00007E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F000 +07E00003F00007E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F000 +0FE00003F0001FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F03 +C7FF80001FFF87FF800003FC07E00029267EA42E>I<3FFFFFFC3FFFFFFC3F8003FC3E00 +03F83C0007F038000FE030000FE070001FC070003F8060007F8060007F006000FE006001 +FC006001FC000003F8000007F0000007F000000FE000001FC000003F8000003F8000007F +000600FE000600FE000601FC000603F8000607F8000E07F0000E0FE0000C1FC0001C1FC0 +001C3F80003C7F00007CFF0003FCFFFFFFFCFFFFFFFC1F247EA325>122 +D E +%EndDVIPSBitmapFont +/Fb 204[33 33 33 49[{}3 58.1154 /CMR7 rf /Fc 194[65 19[32 +32 40[{}3 83.022 /CMR10 rf /Fd 253[65 1[65{}2 83.022 +/CMSY10 rf /Fe 129[42 27[36 44 37[23 59[{}4 83.022 /CMMI10 +rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 3636146 0 14171571 + 24 -24 a + tx@Dict begin { 14.22636 45.52455 } PutCoor PutBegin end + 24 -24 a 19 7 a Fe(~)-37 +b(a)68 7 y + tx@Dict begin tx@NodeDict begin {5.83333 0.83333 7.7778 3.8889 2.5 +} false /N@a 16 {InitRnode } NewNode end end + 68 7 a Fd(\002)123 -15 y Fe(~)132 7 y(b)23 +b Fc(=)f(\()q Fe(a)355 19 y Fb(2)392 7 y Fe(b)428 19 +y Fb(3)483 7 y Fd(\000)c Fe(a)610 19 y Fb(3)647 7 y Fe(b)683 +19 y Fb(2)720 7 y Fe(;)c(a)801 19 y Fb(3)838 7 y Fe(b)874 +19 y Fb(1)930 7 y Fd(\000)k Fe(a)1057 19 y Fb(1)1094 +7 y Fe(b)1130 19 y Fb(3)1167 7 y Fe(;)c(a)1248 19 y Fb(1)1285 +7 y Fe(b)1321 19 y Fb(2)1376 7 y Fd(\000)k Fe(a)1503 +19 y Fb(2)1540 7 y Fe(b)1576 19 y Fb(1)1613 7 y Fc(\))24 +-24 y + tx@Dict begin PutEnd end + 24 -24 a 24 -24 a + tx@Dict begin { 14.22636 17.07181 } PutCoor PutBegin end + 24 -24 a 29 x Fa("Kr)164 5 y + tx@Dict begin tx@NodeDict begin {4.3045 0.0 4.44336 2.22168 3.01314 +} false /N@ae 16 {InitRnode } NewNode end end + +164 5 a Fa(e)n(uz")24 -24 y + tx@Dict begin PutEnd end + 24 -24 a 24 -24 a + tx@Dict begin { 7.11317 2.84544 } PutCoor PutBegin end + 24 -24 +a 21 x Fa(Kreuzpro)r(dukt)24 -24 y + tx@Dict begin PutEnd end + 24 -24 a 24 -24 a + tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def /NCLW CLW def tx@NodeDict begin 0.0 0.0 neg 0.0 0.0 0 0 /N@ae +/N@a InitNC { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy +/y2 ED /x2 ED /y1 ED /x1 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 +sub atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def {/ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{/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 pop +pop end } if end gsave 0.8 SLW 1 0 0 setrgbcolor 1. .setopacityalpha +0 setlinecap stroke grestore grestore end + +24 -24 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Kreuzprodukt.pdf b/2dgrafiken/Kreuzprodukt.pdf new file mode 100644 index 0000000..b9dd4ac Binary files /dev/null and b/2dgrafiken/Kreuzprodukt.pdf differ diff --git a/2dgrafiken/Kreuzprodukt.pst b/2dgrafiken/Kreuzprodukt.pst new file mode 100644 index 0000000..925a005 --- /dev/null +++ b/2dgrafiken/Kreuzprodukt.pst @@ -0,0 +1,14 @@ +\begin{pspicture}(-0.1,-0.1)(7.5,1.85) + +%\psgrid(0,0)(7.5, 2) + +\rput[l](0.5,1.6){$\vec a \rnode{a}\times \vec b = \left( {a_2 b_3 - a_3 b_2 ,a_3 b_1 - a_1 b_3 ,a_1 b_2 - a_2 b_1 } \right)$} + + +\rput[l](0.5,0.6){"Kr\Rnode[e]{ae}euz"} +\rput[l](0.25,0.1){Kreuzprodukt} + +%\nccurve[angleA=0]{->}{ae}{a} +%\ncbar[nodesep=1pt]{->}{ae}{a} +\ncline[arrows=->,linecolor=red]{ae}{a} +\end{pspicture} diff --git a/2dgrafiken/LaengeVektorInEbene.eps b/2dgrafiken/LaengeVektorInEbene.eps new file mode 100644 index 0000000..c1f6844 --- /dev/null +++ b/2dgrafiken/LaengeVektorInEbene.eps @@ -0,0 +1,3396 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Mon Jun 09 16:04:48 2008 +%%BoundingBox: 74 726 216 832 +%%DocumentFonts: CMR10 CMMI10 CMR7 CMEX10 CMMI8 CMR6 CMR8 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.09:1604 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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 +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR8 +%!PS-AdobeFont-1.1: CMR8 1.0 +%%CreationDate: 1991 Aug 20 16:39:40 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 43 /plus put +readonly def +/FontBBox{-36 -250 1070 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65 +48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3 +9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB +0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB +8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F +EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466 +FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3 +9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62 +D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8 +9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5 +ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6 +10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582 +83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493 +2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30 +4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632 +BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B +041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721 +3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762B93EC4488CF1 +43FF3B2A427C5E1C756D1925B14DD861740DB6988068262559A6A8F0A2794D73 +A7F921F51FB8B769F5494E4E5E0E95C2B3B4ABE0355D63F075E0980CBD5545F6 +64F7175899BB0B1E29D7C2504CB59384FD67B6FE1D373075B49B8EE3E234ECD5 +9C2AA27C689FAD272B5166EBE5A005665C098B726EEAEB2E514ADB52AD598A1C +20FF97137799B132590E7B7D34CA7F3C8A4586AEC91CE06BE88A9DE0BBA37BBA +CE09C3DB3CC559C77F76AE0CDD716D5CF63486F4EA989370B2B3134F6C620534 +FC3DADB971ABFCC70A23686EAFB75F47D179CFDC77D28492C0855D83988DA5D9 +494F92434343250D8E88677B3207166E577599C8ACDD501B71C773DDB4DA8653 + +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR6 +%!PS-AdobeFont-1.1: CMR6 1.0 +%%CreationDate: 1991 Aug 20 16:39:02 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR6) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR6 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-20 -250 1193 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C +BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E +CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A +C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5 +D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D +23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8 +D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B +93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711 +6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4 +EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953 +CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF +D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE +00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5 +B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA +99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904 +A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB +11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5 +50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB67C3039A0F +BF0BA4B455D035FF3126F33A4DF59FF96752CF58DC0863924F6042B14DC2DEE4 +099CAA764A8EFFEB78F7FFD276F0928BA32624C3A69ACEB8777A461298B201D3 +4DA271476B8AC8966668D4E28A6FBA952F6D295AA80CC09B0CFD6BE840703B07 +7ED93999EB5630C2C7CD9BA683ED457D1341C3AA702B5FA8593A51E8E9165FF6 +1385693E19161FF1ADC1FE0BE16FD3AFCDC3916A309FCE6B3F2B362C9F958A16 +821E1EB2DD899522DD3155C0B7A7F0876E4DA32FD30D8289266D9F05E77F1F1C +D3BFD2D4D6C8B6FDE0E8957BDBBEC54458C70B96F4CD77E734EE0CF620684024 +EB05DF0536FAFF10FC6F6050AB338D44EA9C38150D3779A550C505C06D417A71 +62D41C2D23843E0A2A73F72D4B5286E3CB7B8695B2434479776A59CB3BC6D352 +677CCABF4133E20F12D91CFD8978C09FB81DF801707194AB8FABA9A6599C20FA +B36DB0A166490D20BB0BD53581A8715B099754E6FA0F7D2892F5573380DDFF1E +F9C3DA9F74BDBEBBDFA5715AE23264F967BC7841CE58E5EE2764555978D904F6 +E8DEF6ED66C478848FC35A9827ACEA1D7CE85C8626C162FF296869DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI8 +%!PS-AdobeFont-1.1: CMMI8 1.100 +%%CreationDate: 1996 Jul 23 07:53:54 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +readonly def +/FontBBox{-24 -250 1110 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120 +788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62 +C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32 +617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1 +D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63 +532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B +5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8 +4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6 +DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E +B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2 +A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89 +8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA +D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817 +AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04 +AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748 +A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827 +AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011 +85B385124C2B6534F3CD1866AF92009D93B97F763AA3C06D6BF59D18F5267399 +183578036BB6A8CEDE362CD0BE7247D7FF0358D412CED4D0328DC28BEF0499D5 +F6A7F55136E7F8DBF7C525ED71A3149D35B41AC5BC546E29992ABCD2486F9273 +087DF31DF9D398DF0175E6CBE33DE9EACD1D611E87DF606E9E0153AE37B44BF7 +AC8C4581FBDE5D5D52E927BA1D06D029EB8B7CA634D8BC97DE7E6444AD6D6735 +4FDFF81A5B73BE5F41A6CDB2705184F024CDEA9EDD0BD0F2E035603CAD68471E +BD235B7EBEA3788BF2E323C20942C5B6F5DA5BC91EC5CBDF00C7C8DBA209D407 +F869E8B73132F39D6B14CC669408E0F417113527EE65382E3C91BE9636160B37 +DAB4081B43EF36C606E88F4A1A9707583606B5F2640089C12EEB21383C70C1AA +687FDC1886A43B7CC318FF7A7ED4E5AC400757F592A9B4F1D2B3D2685ABCAB18 +198A39B7430D9FF1BF74E728AB2AC86D6F673DCC7E7B74B32794383C364353E2 +8D7CE76A3C3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMEX10 +%!PS-AdobeFont-1.1: CMEX10 1.00 +%%CreationDate: 1992 Jul 23 21:22:48 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMEX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMEX10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 113 /radicalBig put +readonly def +/FontBBox{-24 -2960 1454 772}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 +DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 +8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 +FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 +BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 +EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 +DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 +EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C +6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 +E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 +E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 +4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 +8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 +8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 +FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A +EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 +680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 +5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 +3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 +DD4DD1C1C8384F906A7BAACDF441BB0AAEA2A697E453D9DBB2D81F604C099193 +6920D33431DE443F1FFCBB75616B3C0666AC35128C74ADED81FBE145D1EA000B +FDD2D041BA53349483425A9923F7C2D263C1539F5DD5469E3024B44B5470598C +227ECF5FCB853A5401B4D3C687BB7FAE6610FC47D5463AF2A8A33786605D57FD +195000C7F42E2D419799A1A7CE89CFDB029E452F64DBEB6D62F1AA3549C49222 +6EA0C95D48511FB5887E45235AFC7D33F8A62BF372FB3D635CFF0E131E4DD2D1 +10323B81DD93B44F08759CCCF13374EC2095265BFD123FFDA96AFF5A26B719B4 +9FECD400229CD53E58218F7075C0E545CD00E28EB544ACC1AF04ACFBA4317087 + +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 120 /x put +dup 121 /y put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176671A33FC55340CD04C2DE46FD812FC2711A85F70616E4B2F7C0EFA18D +28C25F2510A63A3C55C2EEC5CAD04051CCE773EC997373A7B72E99B1C581B9D6 +F945B833780834A8A81AC913CD0390BE72A97E66AA9DBBCC4547C3E48FB55E97 +0FCD36A15C764735DCC35D6AFE72FA07AC862F705D3836DEFE836EBB286E0B5E +DB9AD3E936F8850A7A0726CE409780A458A3269A7647BF7D4F3A207F2228BD5E +856D37106F4FBAFB0BAE752A491EF3B250840A2CC66035A1E8DFB435F0525F3B +13C37EA9D2C9BDE25A0C0E03252CFFDFBBC06B239255218247AE43B1CAF3EA34 +7972BA332161355DF8EBA2F1315CDAC872EA06721730931CAEBBAA963BC9949B +F9E162156673618678B5F76DDAD4DD7970155F8BFE1C6609F6A2FF2147DB60C4 +89E435F5D9496BFD328A20B1CF794B0BA02D6C3289093FC68D635305FCB0E143 +DDB2E07B63E6F4D3A15EF00A0E411E7F85CC83697CB7F7DCB89CAAADD722CB49 +165F8F4674AEAA92CD18F51E463318438E59DA2A0108074544C7B724DCAB810B +B674927B5F4259D6C733E00F1946ECAD42AC01AFF42B94F8606DF64E20F88EAE +8F13E2680CE34EDF0EE029A78F22D62099E405C64D76648055B496CB417011EA +A3037B0FA8B91629E7A42B6D535E5966EB536A06481849493C239DF109AE296A +70E8A3DC7D426639895D96E5EE5C4AD5B2C32366A62D595A629BBF994D6F4F8C +9DFEC30866671E3966980F8CC98E40A8ACDAA599986064FAB145878A0B311DED +6A022B07E7678F0A05D260757D0FF361866AD230750A2604D28D02E01180BA4F +2C77DB23664952822EB1CD1A6A2CC70F6323C05DCCBCCD5E5819896D6A8B9B62 +12296FB1CECC0B9E4F09E50C39ACF97E0649A3B4A827C1A363C38288A0A54647 +39CAAD96469B2829FB7AF562421DCBEE4E4FE3FF73739E502A1957AB532B9935 +09BD85D21181A066BC46A913DA782B4F283CAAAF0008A068438C481003D91162 +7BB3128722E98304F512DA617F0D79BF19CBE85A338B6B98FD3477A70D8CC79C +061A2C930F08DE6483C1F85F93616BA460577ED9C4DC02813E3C2DEE1E08506B +F48BD0A79AB6F9A804941B03DB3F8BE763C1B5BD81D2AAD18D56DC75B639CB9A +1EBF6701AAD5E0D4B2A23A5F2D745827D67643D3D899924C49A91A4E134757A0 +3E9A40451A0DE5936E4234BEC5EC50B717D6CEC5561783E6A192F66D52FA729A +8738748A6F3A6131F873E7636862F4BEB924B0D437FF096BE7FC0EF7C78664B0 +37EE8D5B1C3CC3EB048F4BCA7B38909F5A07EB3C3B1FC0AF089ACE54C401DE47 +79B843C54991FA30EA1196D8076D109859CA6550DA8127A4878D85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390C98D93BE299A9CB +689CDA9BE6BEA47570D9D15DC614719507F27069622E7DB1A97F7B6FF5A5A0C5 +78162E7A9CF76FF72A34097236DF64DA4B61645C7326058030E2B5AABFCC44D0 +49E9CD83D81D8ECA953BDB8CA81CD3D122FAB35612C9C3F6C7F22B666462A78C +AC5473F8755B70B582C0D4C3C9D8C70EE755D41A42C8C17F066414DC21B33111 +A188A5FDDC2D6B02C0965CDC0D91DF1A487ABBBBE2E2896CE0B4BFBE38C79866 +BCD14C2C92449525BD879F6BC320C05FEF8BF68D616695ACD14B3594882B4914 +5B7569629AF50EBCF7152E3715510FBF60F1675D5259715B293A3D7E844764F8 +4B88D997BA5C7B7AB6B104E77F7769C22788334A91C91F02CE675DC14E1FDE5A +F8A03756C12F189494DBC735E3C86A6D4BC4D005E323AC4D7CEF6E1820F9F184 +4DD2EC4C5C58AEE4B5344077AFCCCD82CFC289D46552563B36DA5DAF3C179C90 +BBB4163F2E88909E040769367672B37254345F892D42DF5D5261EAB4CFD4745D +7D72D01D779DEA580D7AA0897250CB8CC10EF282B3A1899F63F375E39C44176C +B0F18AEC3FDE9E12B32B89F9F6A0670DEE9283804AE387096F22569AFE2A593E +C6E10A3FFE07F8F5948343F661D465D0C976CC700D77CCB261730868B3D39D7E +65EF4DC3D7254CC92DB35B467D8C0DB81929EA9F4352B5CCFB0906ECAE215A52 +3A3E286B6C506A8FD8279BEB97734C064861D4CE4FB39636A66652C9FE501046 +451D94A51F00800B6A1A6ED67186A14D6197EF48E8E5CADBAB2437ABC0A3EE8E +E5ABF20E28389FF0902A16AA8F372C615F696BA459AD45EAC10C51DC4A201BFB +0410A34AA3E13187E2736F1ECFD6B8E7377B67F18C01AEA3E680A635529C3E89 +D2CBEC56281C16BD0E54EDB14EB5CDBB4F138FF5669F4C8AED339FD5D5312E1E +B000175363053FBEC579FCD85622F7CB61C6C2B0A5F07D6FA363466289E97C53 +C6BA0CE73A4417D5DE924F231DCDC350E231FA805DB54C26D21E7F90793AC96C +11E6495CDF3E6FDA99DE146A2A18C21557B15DCE2F6540B85C6662A7E0B46FA9 +84B66C4180AE6A99BC1195A2355839940DAF5D6D6199005DB573E383DCCF0040 +75A027D53769D0E9A77F32A0894D7914C3C85C5991A968107E1DED454281C80E +01228AD18FE3778AD96FD49607150225FEBD68791B376BB9707C409E076360C9 +27D3FFAA700DC03CDF0D90069D7034631B51DFB15C4C89B8E6862097BC14CB86 +9A0C00EC7AF4EBF237EB61A363C23D16BABB2461197BA879E6DCB6BA50544303 +5DC77540758B36451FB6ECF2E09C3A1EB5FB51CEFAE1D32340D772168833C415 +D105363AD36F66727243F2F68EEE0B25B067E93FE4B219E0D4513E7C04F444DE +C822CFF1265048CB3058948F533AB6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 212[55 43[{}1 66.4176 /CMR8 rf /Fb 205[30 +30 49[{}2 49.8132 /CMR6 rf /Fc 158[37 97[{}1 66.4176 +/CMMI8 rf /Fd 142[71 113[{}1 66.4176 /CMEX10 rf +%DVIPSBitmapFont: Fe ecrm0800 8 14 +/Fe 14 229 df76 D80 D<00FF000007FFC0000F01F0001C00F8003F007C003F003E003F003E003F003F +001E001F0000001F0000001F0000001F0000001F000007FF00007FFF0001FE1F0007F01F +001FC01F003F801F007F001F007E001F00FE001F06FC001F06FC001F06FC001F06FC003F +06FE003F067E007F067F00EF8C1F83C7FC0FFF03F801FC01E01F207D9E23>97 +D<001FE000007FFC0001F01E0003E0070007C01F800F801F801F001F803F001F803E000F +007E0000007E0000007C000000FC000000FC000000FC000000FC000000FC000000FC0000 +00FC000000FC000000FC0000007E0000007E0000007E0000C03F0000C01F0001C01F8001 +800FC0038007E0070001F03E00007FF800001FC0001A207E9E1F>99 +D<001F800000FFF00003E0780007C03E000F801E001F001F001F000F803E000F807E0007 +807E0007C07C0007C0FC0007C0FC0007C0FC0007C0FFFFFFC0FFFFFFC0FC000000FC0000 +00FC000000FC000000FC0000007E0000007E0000003E0000C03F0000C01F0001C00F8003 +800FC0030003E00F0001F03C00007FF800001FC0001A207E9E1F>101 +D<003F00F800FFC3FE03E1FF1E07807C1E0F807C0C1F003E001F003E003E001F003E001F +003E001F003E001F003E001F003E001F003E001F001F003E001F003E000F807C00078078 +000FE1F0000CFFC0001C3F00001C0000001C0000001C0000001E0000001F0000000FFFF8 +000FFFFF0007FFFFC00FFFFFF01E0007F83C0000F87800007CF800007CF000003CF00000 +3CF000003CF000003CF800007C7C0000F83E0001F01F0003E007E01F8001FFFE00003FF0 +001F2D7E9D23>103 D<07C0000000FFC0000000FFC00000000FC000000007C000000007 +C000000007C000000007C000000007C000000007C000000007C000000007C000000007C0 +00000007C000000007C000000007C000000007C0FE000007C3FF800007C703E00007DE01 +F00007F801F00007F000F80007F000F80007E000F80007E000F80007C000F80007C000F8 +0007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F800 +07C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007 +C000F80007C000F8000FE001FC00FFFE1FFFC0FFFE1FFFC0222E7EAD27>I<07C0FE0000 +FFC3FF8000FFC703E0000FDE01F00007F801F00007F000F80007F000F80007E000F80007 +E000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C0 +00F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000 +F80007C000F80007C000F80007C000F80007C000F8000FE001FC00FFFE1FFFC0FFFE1FFF +C0221E7E9D27>110 D<001FE000007FF80001F03E0003C00F00078007800F0003C01F00 +03E03E0001F03E0001F07C0000F87C0000F87C0000F8FC0000FCFC0000FCFC0000FCFC00 +00FCFC0000FCFC0000FCFC0000FCFC0000FCFC0000FC7C0000F87C0000F83E0001F03E00 +01F01F0003E01F0003E00F8007C007C00F8001F03E00007FF800001FE0001E207E9E23> +I<0781F0FF87FCFF9E7E0F987E07B87E07B07E07F03C07E00007E00007E00007C00007C0 +0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0 +0007C00007C00007C0000FE000FFFF00FFFF00171E7E9D1B>114 +D<01FE1807FFB81E01F83C00F8780078F00038F00038F00018F00018F80018FC0018FF00 +007FF0003FFF001FFFC00FFFF001FFF8001FFC0001FCC0007EC0003EC0003EE0001EE000 +1EF0001EF0001EF8003CF8003CFC0078FF01F0E3FFC0C0FF0017207E9E1C>I<00600000 +600000600000600000E00000E00000E00001E00003E00003E00007E0001FE000FFFFF0FF +FFF003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003 +E00003E00003E00003E00003E01803E01803E01803E01803E01803E01803E01803E03801 +F03001F07000F860003FE0000F80152A7FA81B>I121 +D<03801C000FE07F000FE07F001FE07F801FE07F800FE07F000FE07F0003801C00000000 +000000000000000000000000000000000000FF000007FFC0000F01F0001C00F8003F007C +003F003E003F003E003F003F001E001F0000001F0000001F0000001F0000001F000007FF +00007FFF0001FE1F0007F01F001FC01F003F801F007F001F007E001F00FE001F06FC001F +06FC001F06FC001F06FC003F06FE003F067E007F067F00EF8C1F83C7FC0FFF03F801FC01 +E01F2D7DAB23>228 D E +%EndDVIPSBitmapFont +/Ff 205[33 33 49[{}2 58.1154 /CMR7 rf /Fg 129[42 4[41 +47 22[44 97[{}4 83.022 /CMMI10 rf /Fh 204[42 42 42 49[{}3 +83.022 /CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 8950464 0 10442213 + 142 -189 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +99.5846 0 -5.69046 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq false and exch 2 lt true and or { /viceversa +-5.69046 99.5846 gt { true }{ false } ifelse def /epsilon 0.01 def +/minTickline -5.69046 def /maxTickline 99.5846 def /dT 1864679 abs +65536 div viceversa { neg } if def /subTNo 1 def subTNo 0 gt { /dsubT +dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend exch def +/tickstart exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 +def /TColor { 0 setgray } def /subTColor { 0.5 setgray } def /MinValue +{ xStart } def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 mul viceversa +{ add epsilon sub } { sub epsilon add } ifelse } def /logLines { false +} def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 +setlinecap stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines +{ gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul +add def x abs MaxValue abs le { x minTickline moveto x maxTickline + lineto } if } for subTwidth SLW subTColor subLSstroke grestore stroke +/dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul moveto cntsubTick tickend STsize mul lineto +}{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore } for /dT +dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon viceversa { add +}{ sub } ifelse { /cntTick exch def logLines { gsave 1 10 subTNo div +9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MinValue +abs le { x minTickline moveto x maxTickline lineto } if } for /dsubT +0 def subTwidth SLW subTColor subLSstroke grestore } dsubT abs 0 gt +{ gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul moveto cntsubTick +tickend STsize mul lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart moveto cntTick tickend lineto Twidth +SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +0 99.5846 0 -5.69046 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq true and exch 2 lt false and or { /viceversa +-5.69046 99.5846 gt { true }{ false } ifelse def /epsilon 0.01 def +/minTickline -5.69046 def /maxTickline 99.5846 def /dT 1864679 abs +65536 div viceversa { neg } if def /subTNo 1 def subTNo 0 gt { /dsubT +dT subTNo div def}{ /dsubT 0 def } ifelse -4.0 4.0 /tickend exch def +/tickstart exch def /Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 +def /TColor { 0 setgray } def /subTColor { 0.5 setgray } def /MinValue +{ yStart } def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 mul viceversa +{ add epsilon sub } { sub epsilon add } ifelse } def /logLines { false +} def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 +setlinecap stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines +{ gsave 1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul +add def x abs MaxValue abs le { x minTickline exch moveto x maxTickline +exch lineto } if } for subTwidth SLW subTColor subLSstroke grestore +stroke /dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick +dsubT add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke +grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick tickstart +STsize mul exch moveto cntsubTick tickend STsize mul exch lineto }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart exch +moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore +} for } if end + +@endspecial 26 +-398 a Fh(1)26 -635 y(2)26 -871 y(3)357 -61 y(1)194 b(2)h(3)142 +-189 y + tx@Dict begin { 108.1205 0.0 } PutCoor PutBegin end + 142 -189 a 118 -171 a Fg(x)142 -189 y + tx@Dict begin PutEnd end + 142 -189 +a 142 -189 a + tx@Dict begin { 0.0 108.1205 } PutCoor PutBegin end + 142 -189 a 120 -179 a Fg(y)142 -189 y + tx@Dict begin PutEnd end + 142 +-189 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.5 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 85.35823 85.35823 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.5 SLW +0 0 1 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial 142 -189 +a + tx@Dict begin { 42.67911 56.90549 } PutCoor PutBegin end + 142 -189 a 0 0 1 TeXcolorrgb 115 -159 a Fg(~)-37 b(a)p +Black 142 -189 a + tx@Dict begin PutEnd end + 142 -189 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 85.35823 85.35823 +0.0 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 x1 sub y2 +y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 85.35823 0.0 +85.35823 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial 142 +-189 a + tx@Dict begin { 42.67911 -17.07181 } PutCoor PutBegin end + 142 -189 a 1 0 0 TeXcolorrgb 101 -177 a Fg(a)145 +-165 y Ff(1)p Black 142 -189 a + tx@Dict begin PutEnd end + 142 -189 a 142 -189 a + tx@Dict begin { 105.27505 42.67911 } PutCoor PutBegin end + +142 -189 a 0 1 0 0 TeXcolorcmyk 101 -177 a Fg(a)145 -165 +y Ff(2)p Black 142 -189 a + tx@Dict begin PutEnd end + 142 -189 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 42.67911 -11.38092 39.83366 +-6.544 28.45274 -4.26773 14.22636 -4.26773 5.69046 -4.26773 2.84544 +-2.84544 0.0 0.0 1. 0.1 0. /c ED /b ED /a ED false OpenCurve gsave +0.8 SLW 1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke + grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 0.0 82.51277 +-2.84544 79.66776 -4.26773 71.13185 -4.26773 56.90549 -4.26773 45.52455 +-6.544 42.67911 -11.38092 1. 0.1 0. /c ED /b ED /a ED false OpenCurve + gsave 0.8 SLW 1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 1 0 0 setcmykcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 96.73915 42.67911 91.90224 +39.83366 89.62596 28.45274 89.62596 14.22636 89.62596 5.69046 88.20367 +2.84544 85.35823 0.0 1. 0.1 0. /c ED /b ED /a ED false OpenCurve + gsave 0.8 SLW 0 1 0 0 setcmykcolor 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 1 0 0 setcmykcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 85.35823 88.20367 +82.51277 89.62596 79.66776 89.62596 71.13185 89.62596 56.90549 91.90224 +45.52455 96.73915 42.67911 1. 0.1 0. /c ED /b ED /a ED false OpenCurve + gsave 0.8 SLW 0 1 0 0 setcmykcolor 1. .setopacityalpha 0 setlinecap +stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray [ 78.24504 7.11317 + false NArray /DS 2.0 2. CLW mul add 2 div def /PSTricksDotFont 0. +[1.0 0.0 0.0 1.0 0.0 0.0] FontDot /Dot { moveto gsave 1. 1. scale +(b) show grestore } bind def newpath n { transform floor .5 add exch +floor .5 add exch itransform Dot } repeat end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 0 1 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def 85.35823 85.35823 /y ED /x ED /r 56.9055 def /c 57.2957 r +Div def /angleA 165. 0.0 c mul 2 div add def /angleB 225. 0.0 c mul +2 div sub def x y r angleA angleB { ArrowB } r 0 gt { { sub } } { { +add } } ifelse ArcArrow arc gsave 0.8 SLW 0 0 1 setrgbcolor 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial 142 -189 a + tx@Dict begin { 14.22636 102.43004 } PutCoor PutBegin end + 142 -189 a 0 0 1 +TeXcolorrgb 22 x Fe(L\344nge)350 -244 y Fd(q)p 421 -244 +231 3 v 77 x Fc(a)458 -190 y Fb(2)458 -146 y(1)509 -167 +y Fa(+)15 b Fc(a)616 -190 y Fb(2)616 -146 y(2)675 -167 +y Fe(nac)n(h)24 b(Pythagoras)p Black 142 -189 a + tx@Dict begin PutEnd end + 142 -189 +a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/LaengeVektorInEbene.pdf b/2dgrafiken/LaengeVektorInEbene.pdf new file mode 100644 index 0000000..020ca51 Binary files /dev/null and b/2dgrafiken/LaengeVektorInEbene.pdf differ diff --git a/2dgrafiken/LaengeVektorInEbene.pst b/2dgrafiken/LaengeVektorInEbene.pst new file mode 100644 index 0000000..5e4ec39 --- /dev/null +++ b/2dgrafiken/LaengeVektorInEbene.pst @@ -0,0 +1,31 @@ +\begin{pspicture}(-0.6,-0.8)(5,4) +%%%%%%%%%%%%%%%%%%%%Koordinaten +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.1pt]{->}(0,0)(-0.2,-0.2)(3.5,3.5)%Schnittpunkt, x0, y0 x1,y1 +%\psgrid(0,0)(4,4) +\rput[c](3.8,0){$x$} +\rput[c](0,3.8){$y$} + + +%%%%%%%%%%%%%%%%%%%%%%%Vektor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(3,3) +\rput[c](1.5,2){\color{blue}$\vec{a}$} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%Hilfslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](3,0)(3,3) +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](0,3)(3,3) +\rput[c](1.5,-0.6){\color{red}$a_1$} +\rput[c](3.7,1.5){\color{magenta}$a_2$} + +%%%%%%%%%%%%%%%%%%%%%%Klammer unten)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pscurve[linecolor=red]{-}(0,0)(0.1,-0.1)(0.2,-0.15)(0.5, -0.15)(1,-0.15)(1.4,-0.23)(1.5,-0.4) +\pscurve[linecolor=red]{-}(1.5,-0.4)(1.6,-0.23)(2, -0.15)(2.5,-0.15)(2.8,-0.15)(2.9, -0.1)(3,0) + +%%%%%%%%%%%%%%%%%%%%%%Klammer rechts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pscurve[linecolor=magenta]{-}(3,0)(3.1, 0.1)(3.15, 0.2)(3.15, 0.5)(3.15,1)(3.23, 1.4)(3.4, 1.5) +\pscurve[linecolor=magenta]{-}(3.4, 1.5)(3.23, 1.6)(3.15, 2)(3.15, 2.5)(3.15, 2.8)(3.1, 2.9)(3,3) + +\psdots(2.75,0.25) +\psarc[linecolor=blue]{->}(3,3){2cm}{165}{225} +\rput[l](0.5,3.6){\color{blue}\footnotesize{L\"ange $\sqrt{a^{2}_{1}+a^{2}_{2}}$ nach Pythagoras}} +\end{pspicture} diff --git a/2dgrafiken/Loesung121.pdf b/2dgrafiken/Loesung121.pdf new file mode 100644 index 0000000..3fa94fe Binary files /dev/null and b/2dgrafiken/Loesung121.pdf differ diff --git a/2dgrafiken/Loesung121.pst b/2dgrafiken/Loesung121.pst new file mode 100644 index 0000000..0acebb0 --- /dev/null +++ b/2dgrafiken/Loesung121.pst @@ -0,0 +1,48 @@ +\psset{xunit=1cm, yunit=1cm} +%\psframebox{ +\begin{pspicture}(-0.5,-0.5)(5,2.1) +%\psgrid(0,0)(5,2) + +%\begin{pspicture}(0,0)(12, 2) +\SpecialCoor +%\psline(0,0)(4,3) +\psline[linecolor=blue](0,0)(4;30.23) +%\psline[linecolor=blue](4;30.23|4.6295690655178304211198499881141,0) +\psline[linecolor=blue](0,0)(4.6295690655178304211198499881141,0) %cos \alpha = b/c +\psline[linecolor=blue](4.6295690655178304211198499881141,0)(4;30.23) + +\psarc(3.42,2){0.5cm}{210}{305} +\psarc(0,0){1cm}{0}{30.23} + + + +\uput[r](0.5;20){$\alpha$} +\rput[c](3.35,1.7){\Huge{$\cdot$}} +\rput[c](2.3,-0.25){c} +\rput[c](4.3,1){a} +%\psarc(0,0){2.5cm}{19}{71} + +%(2.3308602987736;59.77) +%3,9284742244794781932242365314914 +%(0,0)(6;40)(2;10|6;40)%(4;40|0,0) + %(0,0) (5;30.23) %Länge(Radius), Winkel + % nächster Winkel wäre 59,77° + + %(!50 cos 4 mul 0) + + + + +%\rput[c](6,1.5){$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$} +%\rput[c](6,1.5){\psframebox{$\cdot$}} +%\rput[c](4.3,1.5){\psframebox{$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$}} +%\psline[arrows=->](7.9,0.5)(7.9,1.2) + +%\psline[arrowlength=3, arrowinset=0.1, linecolor=red]{->}(6.37,0.5)(6.37,1.3) +%\rput[c](6.37,0.2){\color{red}{i. Koordinate}} + +%\rput[c](0.5,0.5){.} +%\rput[c](12,2){.} + +\end{pspicture}%} +%rput center --> Koordianten werden um die x-Koordinate ausgerichtet \ No newline at end of file diff --git a/2dgrafiken/Loesung121_2.pst b/2dgrafiken/Loesung121_2.pst new file mode 100644 index 0000000..a6f3a2d --- /dev/null +++ b/2dgrafiken/Loesung121_2.pst @@ -0,0 +1,68 @@ +\psset{xunit=1cm, yunit=1cm} + +%\psline[linecolor=lila, linewidth=0.5pt](C)(A) + +%\psframebox{ +\begin{pspicture}(-0.5,-0.5)(5,2.1) +%\psgrid(0,0)(5,2) + +%\begin{pspicture}(0,0)(12, 2) +\SpecialCoor + + +\pscustom[linecolor = blue]{ + \code{/x1 30.23 cos 4 mul def %x= r*cos phi und y=r*sin phi + /y1 30.23 sin 4 mul def + %/r 30.23 sin 30.23 cos div 4 mul def %tan x = sin x /cos x + %/x2 90 cos r mul def + %/y2 90 sin r mul def + /x2 4 30.23 cos div def + } + \psline(!0 0)(!x1 y1) \closepath + \psline(!0 0) (!x2 0)\closepath + \psline(!x2 0) (!x1 y1)\closepath} + + + + +%\psline(0,0)(4,3) + +%\psline[linecolor=blue](4;30.23|4.6295690655178304211198499881141,0) +%\psline[linecolor=blue](0,0)(4.6295690655178304211198499881141,0) %cos \alpha = b/c +%\psline[linecolor=blue](4.6295690655178304211198499881141,0)(4;30.23) + +\psarc(3.42,2){0.5cm}{210}{305} +\psarc(0,0){1cm}{0}{30.23} + + + +\uput[r](0.5;20){$\alpha$} +\rput[c](3.35,1.7){\Huge{$\cdot$}} +\rput[c](2.3,-0.25){c} +\rput[c](4.3,1){a} +%\psarc(0,0){2.5cm}{19}{71} + +%(2.3308602987736;59.77) +%3,9284742244794781932242365314914 +%(0,0)(6;40)(2;10|6;40)%(4;40|0,0) + %(0,0) (5;30.23) %Länge(Radius), Winkel + % nächster Winkel wäre 59,77° + + %(!50 cos 4 mul 0) + + + + +%\rput[c](6,1.5){$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$} +%\rput[c](6,1.5){\psframebox{$\cdot$}} +%\rput[c](4.3,1.5){\psframebox{$\vec{e_1}=\left(1,0,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_i}=\left(0,\ldots,1,\ldots,0\right)$\hspace{5mm}\ldots\hspace{5mm}$\vec{e_n}=\left(0,\ldots,0,1\right)$}} +%\psline[arrows=->](7.9,0.5)(7.9,1.2) + +%\psline[arrowlength=3, arrowinset=0.1, linecolor=red]{->}(6.37,0.5)(6.37,1.3) +%\rput[c](6.37,0.2){\color{red}{i. Koordinate}} + +%\rput[c](0.5,0.5){.} +%\rput[c](12,2){.} + +\end{pspicture}%} +%rput center --> Koordianten werden um die x-Koordinate ausgerichtet \ No newline at end of file diff --git a/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.eps b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.eps new file mode 100644 index 0000000..29bf016 --- /dev/null +++ b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.eps @@ -0,0 +1,1674 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94a Copyright 2003 Radical Eye Software +%%Title: 2DGRAF~1.DVI +%%CreationDate: Wed Aug 18 12:31:24 2004 +%%BoundingBox: 71 512 417 721 +%%DocumentFonts: CMR10 CMSY10 CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: E:\texmf\miktex\bin\dvips.exe -E 2DGRAF~1.DVI +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2004.08.18:1229 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 97 patch 4, 04/05/10 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/Div { dup 0 eq { pop } { div } ifelse } def +/NET { neg exch neg exch T } def +/Pyth { dup mul exch dup mul add sqrt } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def +/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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def /x x Coef mul def /y1 y1 Coef mul def /x1 x1 Coef mul def + x1 0 gt y1 0 gt x 0 gt y 0 gt and { [ y x y1 x1 ] 1 a sub y mul} + { [ 1 0] 0 } ifelse setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch +2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +% DG/SR modification end +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 +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +% def +a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +pop pop } def +% DG/SR modification end +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if +f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +/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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 97, 94/04/20 +% 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 + String length + { String CharCount 1 getinterval ShowChar + /CharCount CharCount 1 add def + } 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 + 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: 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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 60 /less put +dup 62 /greater put +dup 97 /a put +dup 107 /k put +dup 120 /x put +dup 121 /y put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667C419C4021DA92976C7550A196C257FC2124FAD1219D917D75E11299 +E7C59A90860E58D3C32DFBF59EA3C2CC10923A49690C438B3D0A6EC7F3439BF5 +123D18E54A317CF38A707F1E8FB16BABA63508A7621727B1897A95F1CAEDAD16 +F82F9E8604CC7E00CD31218BA27AA3D1FA9833177E3B11971E4C4B0A7C35EF68 +84B38B24DF9FEF362515B5F08A95FDD1680D1D8AA458EAA10F4436624D4C0284 +1D95031E5DEB7663921711DB5A3631DAF5431068EA44C971BD2EF417BC368F8D +36B844BEFE32305E1ED5C0E794F85E4CFFCEA02BAA0B9C9E062DA219B2872C69 +EB1E49B47EAEA0D65060F243889165356A4B063350634B4D6BA2BED7A6DEDA0E +C310464185B55E7EE94EFCDE33D5F9AB7A3B1799ECA413641903DC1329FC7D60 +53E276DA963F96A886B20E5E9D9A1F094CAB12A3124B945889C93951FD3AB9E4 +D41AFF0FF367AF9D15D50569F95B6E66A9998A0B7F00CCF10A985FD2C7F0E4BF +94CD755FB149AD40434CFDF60B8ACA00AEFF3D23CDC4CE40F8184E6393C91D9D +9AB72292A67B865BFB05709442399854ADBF536E16C9F98CB695FD09DD1FD05D +2214F7E1D7A545B46BABB149598B6BABAE1EA9995AA613F9DAE821FDCA0A1824 +6E3F3ECCF12527B43236DB942E938108D80B8546DEBDD6CE0B22493238187A8C +89E84C75DF277FCFD140FAC3D4FBC3A92182B4340340BEE45E8A1A599D2A02EF +B5D680FB8256E621C64EFFA9D3034CBFB942CCCE9A2EB5B82E522CD2548BF7E2 +D87ED98FB4884C6D130E1D92722034C70533531F7A340268BE9070BB3CF5F37F +4606200BBF3DC181E40E9518C7810D1FECA2B463F152028FB48192E7F3534E8F +3F272A0DCEF68D176A54EE77132BB64A1F2B648D290DA6FC78FC6BB4D3C9AA17 +1369DFC2B93FDD531A03C1711251C9BA5ED72BC87ABF3EDACE7B716D6B8D7289 +EBD39B460DECE57B774F20C81DFAAFA79D87BF9DA3B7FF2238A57412A94CCCE0 +A3D95C5D10F26D4584B97DEEBE10D2C83DC5E4701A72B71B82248CAA17E50610 +7EB48E64E6CCF39FBF34038964439F9D7F88E5B38B12DC490FFDE7A02DA46F9F +097C5D2587067246E3E364483A25255FC6C773F31D0507BEDE9A4391CED6AFE0 +9FAB5D1FE85D35C647E8C3DDF4066A80428985DEBD854EC518F79CFF1DAF4C7A +9CEEFBE8F55A74C7325269D64D3CA6EAB3D4DB19A1A98165B2373BC3BC6138FF +D2099454D35D82E4426E545A17C0DEB3E8CBA03361C8AD0959430C299B27C0D6 +1EACB75F782F4F48531FBD9D749B157BFA7CB8F91A86DF189D6341774DB8EC88 +5C67F8A64989B69187C80B676813F42F092E7E9358CAD7B9252B6E48FD6C22EB +CE1CC5AE8FEA8A790F4369D5988E2995D5D348B097475DD57D9335BAA7CC76C9 +FB804DD529DCABE48DFB0CEFA5AC8900F5E86856B66AD3F2D78B37DD035489B0 +B9D23925BFA86AAE19E8BE48EB456430CC62CC7B4A4B3703750370F52B52975E +43639B587EE83DAC9AFADCCF34F839B6FD033576FD0AA63F35BE2BD1C3E4F03B +3BA7C2A8B2C397A0C1BB0A85DC07D25D8DE0B42FCF4D698AFEE50FBE0BC010BC +427C708361B0901CEA2242FEA0576967AB01C7E54FA38D16BC3FA7CDABBD902C +560EC0927572189C87C2B636BC2D8B4D75BCFBEDABF7BF789DDA9D7CEF9343E5 +2B86A622F9186A870FA1C2E59882A74DB831D9D44ACBC09D4521AB82963BAF40 +7573235067816A975C51F02B4BC602DD1F00CD78C3A8C0ABE17A7F766F8C6EEC +1CD3D581C8920016288CCAC91924C8AEF8EF1A2F5ACE532B2D0547CC1FBB1AC4 +AEFDBDA27FAB45CCCCB4D191545BD9CBE304366D326019988CE1AE0819470C2B +6060CB285C21CD1AC9B52A79D655DB509950A8731EF764A5E65AC6641639D887 +5A0042844E962755784696130547A7820867520C47AADC0C89B04C91B8E91968 +043265CE7A09E183DC5875DBBA22CDCBE405E6645F0EF2CDFA3C6816579900A5 +EFAACD7BCDD71AECF5C1769CB362EDA486997FDE49559DA1DF0776FE20F5CA48 +15C46211D8AE37FBDF34344F1F7DEA3209A858DDDAB38B121A15 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /minus put +dup 1 /periodcentered put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD +5F3D9983B036D9202C8FCC4FA88AF960E1E49914EC809263862931DB14B61EEE +6D37A389B488D0B64CFB7DA527AAED80494F79A073D895AA287BB47BD5246090 +A76CE91680C1F37E77037F276BB789562C9F6EF55B70A908BB796404E1A607AE +F7FD408B9BFE94D46EA4A9ADE519AF64951144EE2EC1C682F522F500AE2DCD93 +DD2CAC5EDB11C360972DF7B145E951ACAC91F823C26C9132D7FDB1B98E1484B3 +BAC1EDCAA45D214F0511337C33B847A6D0EB96C7D709BCACC9A8E69DAB6B43BB +4787EFB2E4DDA476DE3171417D4499DDB862759D6FA8F39096AD160235678C33 +2CAC8B5D00DA5B40496DBC2D77D27E01020DD2613B9B01A35154F5F8981E07A5 +2E2AB588958580EC177D5969 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 47 /slash put +dup 48 /zero put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 54 /six put +dup 58 /colon put +dup 61 /equal put +dup 70 /F put +dup 82 /R put +dup 83 /S put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 114 /r put +dup 116 /t put +dup 117 /u put +dup 127 /dieresis put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B283796A9AD847424B4E6508546C36223A3B17EB82A56592F27FC27 +F1D49D5FF4BBC0E16231807AF7E195AA7D0D01C7566243448B222D57B811EAE6 +DE9370F84E207DC9BEC731AD6040FD9B804FA14CA264B73136F9AF34390319F6 +A543D5D4D7FDDDF2F76651E557683614521110DEC1CCAC426117DDA7D6CF1B8B +7879B21FDC78BAB3C944BCDCD6A65B67F3692F0A8D5E36FB783A63D4FBC9842E +2CBC2720A7206F42A99AEC79FBBA92A27965AF40A71E05E4BA8D7FC58C828226 +7A8B47241F73590CE626EDA930A1D18D758636250D9D6A09E133378CD725F586 +F40320EF186DDF87AF8C2F5470EADFF39C60384EB4DD859794CDD6E4AA8E8A7A +18E246579B5FD876A7C0AFB4D935B09F36A7441292FF926171B0E25FC7EA594E +01E0E7CEE1D3F4653DF435FA0EA881D33196ABE2331A480D3CBD2ABD46DA989D +77E7F46800CFD8E673E9706E2EC4109E8FCBFC24599819EDBDA44E136B801A21 +6AAE5168BF1DDF7419694FDED4B3EDBE4FE9C3DFFA5E45C08D537491A93BBF8A +D7C69616952258C0FE93CD557B6E7ACB7D36428FD60D1E9B8A9DFD05C44C457C +2669807F31630ECBD76431B25774F7345DE39A3F1936FF1DEF5402DDB43B7ABB +3F13781C6F65C00591A0DC2601FC4F93A21838BB86398A3F14EF56872E696677 +C6A65369E53FA588533AB062E1846017A535901CF2E767074B3615FDB27A6B71 +9D7AB6B93D28CE4EF0046DE4B310834746196745FFCF6DEE5A317932882AE822 +92FC9C23AE443551C0BFF09F05661AB5EB0F3A56FE983EF3E4349679AAD34A51 +341F395F68594F2336AD935833B94133FD5A8E2737C3066683F968834E025CD6 +41E85C4F6D5107C6E353655F0C806A1141CF22E47D1CDBAA2B55CC6D1875E28E +E7605698CBC9B5F743C497A77F962DA08F7A53332335479CE85A2F994F2D0665 +05C98A1C447E031BA83CCFBCADE4547CE755EF33244ECEF4405FCA767B638803 +DC91467D41C5620B2527430DD0E6597E457DD6FB56E5F24FB13CB7D83968F2C9 +B582F367CCFEFDEF1C42C612D947DF7BF71424ADC1BF5B288BE107A9EF944CFC +78B4966707860892EF24941E5525A7D0B3CF764ECD7CEEE9FFA5CB4584FBC7E2 +17F0AA05A815CF1BBD9DE7148682D3DA0B22143D3D6CA2FD240E5FE5C96CC936 +97A5688E0D0D7CD1CEFF5E355D691E098D1FB67FD0F0929D5D05E540124D1983 +CF4E2EC062206BD4546769BB25FD565D68CD2E008A6FABA441EBAD37A18B1E8C +4F02E5C4965940AB8DB67D033270A08CE19229209F81567747542BD1857B6F50 +60D5F08268B2A2FA8B5BB393D81F9DBBD95245A88888D1CF905601816477133A +A7E769B43997545AEBF05565477475875C1F2B7304F8E126EAB318D25F819484 +DC1800FB4688FD36E03C94CF8AA179F1FA8BE983193D779478A83B2B8E2B247A +9A11D5C0EAE2F3D7B7B8E1360506DFCF9A47D862A1AF210C1DD1428E0EA0E822 +2E00F70073206D5A3F71C15A2A37F89A3B4A645E485BBBB3F2DDBAB626932689 +0F5309ADA12DA69D2350D02E70DC54E3CA0BE8E1345A40A0A0C023623017D9F4 +454C2B2D48DA796CC7550A99699D29AF1243D534DF269C4351456A08F9E767B3 +F23A3A0A776A92D6243B22E2B89F369BB53A7D7E7F69282974122CB073584710 +92829D6566307340F386CC8B3D4FD372FD3D3534B303BDC7C563C5DEB2615043 +E192EB3B181322442771A1DA75DE45B02E57105F32C58E49DB49E62E711F899B +BFA84B861DE16AF2351EAA015326A2BB8B2A519C23B01683F0FDA0960C6DD511 +D386E364849B33C80DF131B99BE64122EB2B1D5A56F1DAE425CC2C31355AE78A +B3BD353DA7318CA461A4B2FC888B82D2921171D59F0EE112F6F3CD8D91B12092 +E4C217D59F0B4C5DFD9073064DC7917D955168C6F9C885C950B606DA32631B99 +5B7EB00667D611CDC387569930844FD3790D3148A73C145BDF4B792B43B98718 +1000F4BA284AE83258BA7292C298EC0DDCE43CED5793F87E9F606856A07F23F9 +AEE015AE48113411E0CD5A05B5D8B15AED92379D606BEFA1B0F4EF9B29A47DA6 +B89F58EA74860081977D7FFCF834C202E3A840B80332744FA13FE5E099DC539D +09835CB48B4975FF838FFC8ABA61B81CB266AE2C337AD93FBE98D7D96B7F0BED +78FC3435761858AEFAF393C9027A7D0DCDBA04912DEE7058F9114A19E1AE4009 +6E72249F8CBD35930062F0BCF5762ED2F1F9B327A3B9BE9699D0722A9C7EEE75 +D92D4B609ABA558D26BBBE22E9BAAE4E72AF00F915348ECE16F10CBA8EB7E89F +BBD9A7EC802EEE0456E4C3911E6FC7B628513B02F25927CC2CDCA84EE76B4C30 +D44BE84A613D0784478FFC7A453B6E993EC9143E1779F2B85565C863F38E8EED +795CB9045767A5A018817B4CEA599AD6AA2D563C5230C0FBC4BFC797ED71577D +698E8C4E67E7A5511A9DE82D8F06393A0769B972B2BF29900262E8A68D8DC73C +726E1D6268A79EAEEF61668B8F1729772DC4A505CF816C42893F545F557F6227 +D7F2F5BF1F641A049197751C7B88BD5C40C29F700A5F5FC434B97D14EE272385 +C2CA6DCD144ECE52E7E96316C9E24FBF0270ADA1E933759176BD0B6F51AFC48D +71FBB9D19AC2DA6751C29DEDC8C4ADBAF7C1B5BADF87F8EB8619AE3C696D52BC +5EAAA3E89DECBEF4A328ECF7505232A339CD4B12213066888E40B5C11F198536 +CC5D60B7ADC4E026DC37E1EB49BA6E298E39618A2980C05475BAA1A284CAC73B +A7C631F2197E7D8B5520AD65391C50D1D5F7365CA5A0463128A1444683A36E0E +C074C0FC67FAE9EE2311B48B8E34E8BB58990673152BDDAC3B428F3C241BB537 +082260D19C7A7651AFECE176FA620CEAF72323266FA149849463DC388745DD4E +D5627CF9C15E990D3E7214761A9C6F43E3236AF7164B0BD952918640E5815A55 +96362248E77F31834C9BD2F0B716A78D9889BB3EE648005A92DA15B2F94A7C8E +7C5D95E626FFA758772B7D8FB2BC01F78E2E3EE87C14A4C8E897194202E9685F +3942117465E382E76EFCA355EA7B9C31A4FD9A7041BC0A788695E16935375098 +5BA8BED07B13171E2E7CE3FBD77BC5F454BB00C73F77C99201B91857A096836F +7D2A02871C6973FC7E83FE9E6578441A7B5B4FBDD0E789F889B2BC21F97E1889 +93CF06AE4471FC0058B9E20BB120AAF56C7BC2CF556C92195FB49DC97CEC9207 +E87D6ED231F3F5211AD72273B36E07F24AD8D5C030ADC1664E69AE5FC48F3223 +CC8AE4868970BDF3EFEA19E819C979DE44EC91AF0C7BB522673E37B2790153E3 +55E54843CB1F01C0D535E8187494B8FF64244EF9DB08B00603D95F7C43C31CD4 +48B790A775853A450CDDEC230ED4C2D79F892D341F0A320FEA8F7DDA68274074 +DD54EAEBE962ACACB2B71DF577C15725ED8266D8AE88047C234BB9CD7966FCC0 +F91010D9C689AA1E367377F225AB900733CB8E17B13945518298F548CBCA69D3 +DE40A1A6E770A145EC500339A05C304D585524AD58B26BA842FE064E8852E3D5 +F276ECC1E3B46046DA6DE2AA1447547975EC34054F70AE9F3765C2669D2EEE8F +A6A8CB017DAE0AE243621A350DD7B2BDDD7DC598EC292439FD73E267EB410ACC +EF42599998612260EF9F01858B5B44FFCA97496AF70620E77F5371E2C8700506 +82D5EAFB9D07F3700AD308AF4A75F4ED6DB6FD3DA594A0A0B32DAA4865158599 +319E4CD8E514944840846CD8F6CB76B9AD5710B820E6E725DC403A5E7F69C87C +628D8AE4D9B1630D77AB4B039473BFAAB4FDD359CF60B36E761241A6D4D55612 +C3D061BDB7C3C90F716AEA2BB14276D900EEA4BA7D9E589DA3603D0FA6766B60 +E65F016BCB50B5ACF121D12AC4B9E2E9355D78EBA581E02684CD7F964DAB240D +64133273AB3D01EF7DCD8149DADDA8E4C0638AEB4497346597A140F87807F155 +7CB3626EFB1A869778EC32121A47AC3591E688DFAF97A4FE6698FF6E280D6272 +F5D16D17D6A1FA578CCF1C78DC93DD4530209440902F69A566C0E1614A4FB21A +B9C78A27A1EA57BB84A809972F337E6888F4925390990F08B943A09FA172CE71 +75B283522D2101BCD3290E5D4CC919C8AE4495618CBB9A658D084A3497044D6A +B094AAFB1AD44F8B51F13C491E4F31E494726022278A2E4AE9FCAA270F7C2A7A +2952B88C895B957D311A39F388E20057F857CACEAFDD9D0B098BEB034A800438 +C926F92D36502657BD3D4E257509473D8300BBB5EDB7C015C3724387275FDACC +76C8EA1118D68BF776EE4F654D63816F36C287C64ED6A032F2AAF88F5A6C27A5 +DE4149F1289816D0805385C0CD1EF7DF15B85BFFD910F5C4C1719924E2867466 +AD200F25FF48C3FF9AF324334B517313271FA587986D320F81F0C847505CC247 +1ECDF2E45CADBDA987F4F84EC77E8579884A41A6A4BBF4959C1DC292224C6920 +D91AFC4F593E570FF7D184B2AECFF80760462DDC0B6313C0AB38B100ED7F9C72 +3E01434A556906CC8884C2FF0F9FD939C35B33BB1CCA7B658C76670C5ECD0C45 +2B478AEC4A81286A9E90FE1333B2F5FE240A98781E487AC345536C7D03870BB0 +DD094F8445D2B3369D05418A805D3B5F29F3147CBADAFB46D028B2AB44500FC2 +AAB8FA2E3C80FF750F4C43536F1EB394A6E5B7B924EE77971959CD85FA2CB882 +108FFCA82BF55C8BF06ABED5A6ACE60905E925954184128918FB5783762F662F +D5CB2A5457488CEBB69BF1068CEE15A6F9DBB83BEE06B64EE58533886D42C740 +28988418F11BBE51147B1B3B9CDA95A579CD8554EC96EE80E3428B19DEA95757 +8E0A2C14DD129006F5FDB721E85EB078007D21DCB78956BC05393399DE4DF34F +5EC6AB304183EEAF0C91B33059BEFFFD34CEBCB5FD52EC40AEA11E5D15A860B3 +0E7EBD22DD4837D9EC594FE30F681064396900F32D2F5873B2492E4A21FC37F8 +0FD41D66936ECEE9219E095FC8CDB110025047FCE7EB06E0FC35406A959237F4 +825F40A505124AE912987354C100E3939384E1E88170B3E25E6719A1618D13FD +9D22198C11AFB788A7337FA9F68837F9B240D68D32540D7DAD863A59FD582F32 +F73D1E714AF1DDAAC67433CCBBC886C07197C54F5DF0714AAECADF6289194087 +071EF8344AF77682F92CE061B06ADECB333A765382CAE6DB4357D12322494F24 +7BC17CD5E4D179D11B167C46AFFF16A9B3F7EB1800C2979F37C4656D3D096729 +31591606A7690F78A3B8746D8B080CA292AC14D171E2506CEB24B7E57FF96FC5 +FD6EBF8089F2366B1D84086A9C2BA9386B321B519EF43FE604EEEE892D50F6A7 +A69F4D749DBB75682D704DCFF974AD69318003BDE84F52042BE5BB2BAD00496C +1552448382F85EA51585202D7463F0D876EEC1B1636E0860A85675A48DA04EC9 +3FD00FDABBF6F6733CAC04C8744790DFBA36B431FF5602F3BD68B1F8CEE28E1D +288AD1586CEA1C5C49E64C0FF24C04BDC689CE9D482A6EBDA141D15723BCD770 +8C374A9736604C5DAA44A03E6CAD5A42CE8430A62E8E4386FF19422A82723A5B +3A7FDEA170A60126444012859B5077E5E4B16A2F1D285523E5D94F8A9A0423A1 +4061422A791A8C7DB4EB432405275007B0AC0CB7D091CA01D73DE46ABB9C5E3C +BF0BBD626DD0E9BC76CB4C8ACA270EA5B6C295EC42DB026895754F700DBA18AB +C181CCCBD44C0F08DAD1E935924D38F70EB32146F09A12E3C974534C2C6C69F7 +159813BFE97B07ED8D04AA5EE5C7F80F4DB9340AB5D882A99CB7D85E2FD31B34 +83C6A7FBF4F5C218A4D06B356D3D2BFC00D547B3C98FF701CBAF3E9F2F0EB4EA +0F90E205CB3F8FBC226ED8B906436B80F23D33B4B36548FFB6FA57BAF445E95A +7CA8601669704D5B59294B05386EB4B1126EE0F1D76C0E3A07C5C7E4D6695523 +DD3BA7CDC2698679DA6FCB2A5957A821D0AE6F766661EC9D8AF704AC4EE80BDC +0D376328D38279B634981130B794A3A3042C7E3C26278FD4C46874D60F7F2D92 +15EEB568193AF1CB1043A1E1865F0891AFB098E33719C686B928969197C142F0 +2C3E46BACA1CD31E0E9361464526DD800E09A2E6E0C16989F142BBD882E98F30 +484AC6FD82ACFC4F566A0374682CE2957B73215BE34F803C2F2C451096AC3BB7 +835BC4720DDECD868E9DBB276F0659664FF164C675A9744A6588548C96230237 +522754413515D99057040D7386F7A9C698202709EFC92B66AA025DD9AC587E13 +4581FA22D83E8D9D85F930F85A9390F62C364C971809339F7296CCE7374F88A1 +A146B4914FE9621D708AB5C7049248DA39CADFEFDBD16C0485B028A7D0B124AD +7933DAE16B8EA15C5D3C183899C89F951BBF719CD3FF607C42D3409E11C29C71 +51815AD621FE93C933AC4913D9530020DD3E3793A8914FEBD1E153F952D02FEE +92CBE95CFFAD022D34590908B3A407E2854B6E9D255FCC6444EB190BA10ACCEE +C3EDF3777D65F75428102076151105AE63F92DB1117B0884C6879D113BEDF189 +65691CEC0D9ADD86B2CE0DA59F07F199536C03F41DE348531B8F6C1388ED933B +8AD8828FECF722A8EFE7BF851293F51A6E9D178FFA5A8D9B621B03300F801736 +5E5EE935CC82D805246287234C3E40A4AF97E7C4FB1F25DBE5BEBFB5FB40C219 +B9AAD390788EF31F6050EADD5B84C8DE0E2847C15534524E917554097B2B039C +09F2495A4C9CBAED9781F2C166112E77321754F41C75AE4F666E024B708D8CB5 +51B4A5211E270FF7F8484733C4DF75A3DBA495502B301831B67D29ECA0462069 +64E90E52ECC56951E9005FA49B6D34D8FD9F87C35AC99F47B0792EAECAA6F729 +1F27EF387ACBBBBC163F500641D0E01D698B3FC9A6AC250886052B3837A1D217 +1EF8E03601D54969F05B6AD853C5BB70EAC833EF53A047677488CF4276E06D27 +EC94D522E4E051C5AB21B4643BDD87D72F220F9BD599D3CC86ED9BBF1E3547F0 +F7961C937EF4C07E8A3A7593E9D59F84D263A85C36D9577DC9F422D914956CD2 +378D2DA7A0BB0D323E03A028FE93A2CF2E7E8A9447B1C9CE7BBF7419F032E42A +77488AF0FE29D52B81999C9197C54F0118B8A4356F39D32172EB2655F91E4244 +4B9A7E233D63CD97E10A5C01DC4FCCCDA4AB73CC021A05EE4248D627177A8715 +B8B563DB4BF661A258B62983DB69BB2747D28498E9A997B492C5FE3636BAFEBD +4E45E91AB188EFE9A2DE8690F4800697DF1ED89E97DE23C900C4B108FA66A2C9 +3D61024499328AC323E0FACC3DBD0BE5E47B8F87620628572ADB514C3388481F +2F193D003F8AB3600D2B57E25657CE9B921CC323102B682F768A36237A054E94 +B12ACEBD4000B1FB960FEFF8926F5AE7EE30AB37B852837D8C294CFBDA217707 +5867597DCD76D3EF7B02909F96A0D6AEC12E66D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2DGRAF~1.DVI) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 129[42 +4[41 47 12[43 9[44 34[65 1[65 60[{}7 83.022 /CMMI10 rf +/Fc 254[23 65{}2 83.022 /CMSY10 rf /Fd 128[42 9[46 32 +1[33 2[42 46 69 1[44 1[23 46 42 1[37 46 37 1[42 13[46 +61 11[54 8[65 2[23 3[42 1[42 42 42 1[42 42 47[{}26 83.022 +/CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop 0 TeXcolorgray 1 TeXcolorgray 0 +TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0.25 TeXcolorgray 0 TeXcolorgray 0.5 TeXcolorgray +0 TeXcolorgray 0 0.1 0.95 TeXcolorrgb 0 TeXcolorgray +0 1 1 TeXcolorrgb 0 TeXcolorgray 0.75 TeXcolorgray 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 1724 a + tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip +setmatrix end + 0 +1724 a 0 1724 2871 1725 v 2871 1724 a + currentpoint grestore moveto + 2871 1724 a 1162 +1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 179.25237 0 -128.03734 0 ArrowA CP 4 2 roll ArrowB L pop +pop gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 113.81097 0 exch -71.13185 0 exch ArrowA CP 4 2 roll ArrowB +L pop pop gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 0 rotate /n 3 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + +@endspecial +1613 1183 a Fd(2)431 b(4)f(6)1162 1063 y @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 0 rotate /n -2 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + +@endspecial 636 1183 a Fc(\000)p Fd(2)-579 +b Fc(\000)p Fd(4)1162 1063 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 90 rotate /n 1 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + + +@endspecial 1053 617 a(2)1162 1063 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 90 rotate /n -1 def +/dx 56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 +CLW 2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + + +@endspecial 989 1559 a Fc(\000)p Fd(2)2673 1081 y Fb(x)1140 +81 y(y)p 1 0 0 TeXcolorrgb 0 TeXcolorgray 1162 1063 a +@beginspecial @setspecial + tx@Dict begin STP newpath 1.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 56.90549 28.45274 0.0 0.0 /Lineto /lineto load +def false Line gsave 1.5 SLW 1 0 0 setrgbcolor 0 setlinecap stroke + grestore end + +@endspecial 1 0 0 TeXcolorrgb +1346 915 a(~)-37 b(a)p 0 TeXcolorgray 1 0 0 TeXcolorrgb +0 TeXcolorgray 1162 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 56.90549 28.45274 56.90549 -5.69046 /Lineto +/lineto load def false Line gsave 0.1 SLW 1 0 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + + +@endspecial 1 0 0 TeXcolorrgb 1593 1264 a(a)1637 1276 +y Fa(1)p 0 TeXcolorgray 1 0 0 TeXcolorrgb 0 TeXcolorgray +1162 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 56.90549 28.45274 -2.84544 28.45274 /Lineto +/lineto load def false Line gsave 0.1 SLW 1 0 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 1 0 0 +TeXcolorrgb 1026 839 a Fb(a)1070 851 y Fa(2)p 0 TeXcolorgray +0 0 1 TeXcolorrgb 0 TeXcolorgray 1162 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 170.71646 85.35823 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 0 0 1 setrgbcolor 5.0 3.0 0.0 0.0 -2 +0 add DashLine grestore end + +@endspecial 0 0 1 TeXcolorrgb 2106 691 a +Fd(3)18 b Fc(\001)13 b Fb(~)-36 b(a)p 0 TeXcolorgray +0 0 1 TeXcolorrgb 0 TeXcolorgray 1162 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 170.71646 85.35823 170.71646 -2.84544 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 0 1 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 0 1 TeXcolorrgb 2488 1272 +a Fd(3)18 b Fc(\001)g Fb(a)2633 1284 y Fa(1)p 0 TeXcolorgray +0 0 1 TeXcolorrgb 0 TeXcolorgray 1162 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 170.71646 85.35823 -2.84544 85.35823 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 0 1 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 0 1 TeXcolorrgb 928 375 a +Fd(3)g Fc(\001)h Fb(a)1074 387 y Fa(2)p 0 TeXcolorgray +0 0 1 TeXcolorrgb 1303 139 a Fb(k)26 b(>)d Fd(0:)36 b(Strec)n(k)n +(en/Stauc)n(hen)26 b(um)i(F)-7 b(aktor)27 b(k)p 0 TeXcolorgray +0 0 1 TeXcolorrgb 1303 233 a(hier:)37 b Fb(k)26 b Fd(=)c(3)p +1303 246 397 4 v 0 TeXcolorgray 0 1 0 TeXcolorrgb 0 TeXcolorgray +1162 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ -113.81097 -56.90549 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 0 1 0 setrgbcolor 0 setlinecap stroke + grestore end + +@endspecial 0 1 0 +TeXcolorrgb 0 TeXcolorgray @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ -113.81097 -56.90549 -113.81097 5.69046 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 1 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + + +@endspecial 0 1 0 TeXcolorrgb 93 989 a Fc(\000)p Fd(2)c +Fc(\001)g Fb(a)303 1001 y Fa(1)p 0 TeXcolorgray 0 1 0 +TeXcolorrgb 0 TeXcolorgray 1162 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ -113.81097 -56.90549 5.69046 -56.90549 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 1 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 1 0 TeXcolorrgb 1227 1556 +a Fc(\000)p Fd(2)f Fc(\001)i Fb(a)1437 1568 y Fa(2)p +0 TeXcolorgray 0 1 0 TeXcolorrgb 169 540 a Fb(k)26 b(<)d +Fd(0:)36 b(Ric)n(h)n(tung)28 b(\177)-42 b(andern)p 0 +TeXcolorgray 0 1 0 TeXcolorrgb 169 635 a(und)28 b(Strec)n(k)n(en/Stauc) +n(hen)p 0 TeXcolorgray 0 1 0 TeXcolorrgb 169 734 a(um)g(F)-7 +b(aktor)27 b Fc(\000)p Fb(k)p 0 TeXcolorgray 0 1 0 TeXcolorrgb +169 820 a Fd(hier:)37 b Fc(\000)p Fb(k)25 b Fd(=)e(2)p +169 840 462 4 v 0 TeXcolorgray eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pdf b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pdf new file mode 100644 index 0000000..6a477c9 Binary files /dev/null and b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pdf differ diff --git a/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pst b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pst new file mode 100644 index 0000000..2c6e2f0 --- /dev/null +++ b/2dgrafiken/MultiplikationVektorInEbeneMitSkalar.pst @@ -0,0 +1,48 @@ + \begin{pspicture}(-4.8,-2.8)(7,4.5) + + %%%%%%%%%%%%Koordinaten%%%%%%%%%%%%%%%%%% +\psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(-4.5,-2.5)(6.3,4)%Schnittpunkt, x0, y0 x1,y1 + \rput[c](6.5,0){$x$} + \rput[c](0,4.2){$y$} + + +%%%%%%%%%%%%%%Vektor a%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=red, linewidth=1.5pt]{->}(0,0)(2,1) +\rput[l](0.8, 0.75){\color{red}$\vec{a}$} + +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](2,-0.2)(2,1) +\rput[c](2, -0.8){\color{red}$a_1$} + +\psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](-0.1,1)(2,1) +\rput[c](-0.4,1){\color{red}$a_2$} + +%%%%%%%%%%%%%%%%%%%%%%%%Vektor * 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=blue,linewidth=0.5pt,linestyle=dashed]{->}(0,0)(6,3) +\rput[l](4, 1.7){\color{blue}$3\cdot\vec{a}$} + +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](6,-0.1)(6,3) +\rput[c](6, -0.8){\color{blue}$3\cdot a_1$} + +\psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](-0.1,3)(6,3) +\rput[c](-0.6,3){\color{blue}$3\cdot a_2$} + +\rput[l](0.6,4){\color{blue}$k>0$: Strecken/Stauchen um Faktor k} +\rput[l](0.6,3.6){\color{blue}\underline{hier: $k=3$}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor * -2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=green,linewidth=0.5pt]{->}(0,0)(-4,-2) + +\psline[linecolor=green,linewidth=0.1pt,linestyle=dashed](-4,0.2)(-4,-2) +\rput[c](-4, 0.4){\color{green}$-2\cdot a_1$} + +\psline[linecolor=green,linewidth=0.1pt,linestyle=dashed](0.2,-2)(-4,-2) +\rput[c](0.8, -2){\color{green}$-2\cdot a_2$} + + +\rput[l](-4.2,2.3){\color{green}$k<0$: Richtung \"andern} +\rput[l](-4.2,1.9){\color{green}und Strecken/Stauchen} +\rput[l](-4.2,1.5){\color{green}um Faktor $-k$} +\rput[l](-4.2,1.1){\color{green}\underline{hier: $-k=2$}} + + \end{pspicture} + diff --git a/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.eps b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.eps new file mode 100644 index 0000000..44aa0b2 --- /dev/null +++ b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.eps @@ -0,0 +1,1377 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94a Copyright 2003 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Wed Aug 18 09:16:43 2004 +%%BoundingBox: 71 583 216 721 +%%DocumentFonts: CMR10 CMMI10 CMEX10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: E:\texmf\miktex\bin\dvips.exe -E 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2004.08.18:0916 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 97 patch 4, 04/05/10 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/Div { dup 0 eq { pop } { div } ifelse } def +/NET { neg exch neg exch T } def +/Pyth { dup mul exch dup mul add sqrt } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def +/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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def /x x Coef mul def /y1 y1 Coef mul def /x1 x1 Coef mul def + x1 0 gt y1 0 gt x 0 gt y 0 gt and { [ y x y1 x1 ] 1 a sub y mul} + { [ 1 0] 0 } ifelse setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch +2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +% DG/SR modification end +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 +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +% def +a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +pop pop } def +% DG/SR modification end +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if +f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +/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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 97, 94/04/20 +% 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 + String length + { String CharCount 1 getinterval ShowChar + /CharCount CharCount 1 add def + } 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 + 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: 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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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: CMEX10 +%!PS-AdobeFont-1.1: CMEX10 1.00 +%%CreationDate: 1992 Jul 23 21:22:48 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMEX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMEX10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 16 /parenleftBig put +dup 17 /parenrightBig put +readonly def +/FontBBox{-24 -2960 1454 772}readonly def +/UniqueID 5000774 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 +DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 +8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 +FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 +BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 +EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 +DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 +EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C +6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 +E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 +E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 +4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 +8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 +8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 +FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A +EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 +680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 +5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 +3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 +DD4DD1C1C9C622FAEAB9D3E54476B49A2A026565F10A9695AA86AFBEEFBBECB3 +D7EFBD5289B6E0B120017EE070394FF866F88FF6DD3BC405870B386F9AB4D15C +E19ACFC1CF1EB5723F85E07692E7B56BA031AD03430F81F1312CF82683A2BC3B +1D74E01747B2D539117C6E0F6400756D2912DBD474361A61C8B4C0A9DDD0C534 +D71A014E31E216914993B273E7C7D22F190A0BF008518D1C89892526FDFE9EE8 +CA42D4061BCD5105C460139B0D13652134C0FAEE0D7C863BB3558BC63AF2E1A4 +B6606E9BD056C7EB2E2BF15830121649B492E3C47F8134B97B3777956EEDBFC7 +B4844777D40A5E1F4B47066CE30D1375625D5BB12DA324405FAAFA6CD44F74ED +179D48697CE5F6A912AD6201A33A6E78FA40EA4F70940B1DEBC7EA4868E18152 +DF104DFB6DC426DB07B4CCFBE44C1E982E159D12F2B3A3A12D24B27F2780CCD3 +FBA5BC5D773E721AD8D3DDCE6A58D1387DC133D228FBBFF0E03405469170C263 +68E7642AA10F72E2B7BD2AA62AC718EE79E59ED8A569CCA0A9284B31CCD2236E +E50B6ABDCD35C34483275C850C35552E301DD8435102C6D814F8BFC4231017AB +3EF6890D84F1E9FF17B63F09A919154265A223D9DAB45443E54C1517E7FAF4CA +B225A4E012D5E1120776967B3C7046F0CFC445B376931097752508304C8544B4 +93BF861C4D8FBF67D60C04121D09DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /alpha put +dup 59 /comma put +dup 97 /a put +dup 98 /b put +dup 120 /x put +dup 121 /y put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667C419C4021DA92976C7550A196C257FC2124F72473969FB0BF084760 +FC2FC27F0B367006913237C6209A929640B37A48254BA0ADE10E6C393F1F348A +6908DEDB03501629A69FC8CEB8E2E59D836F61D2C23B255101F88F0F95248D98 +1A22618DA880E229BCF35E6DD460C1AEB6137CC72F20B769D3F8F6E84AB5C352 +E88ADD4C7FB9D129BAB0B4EEB297D254AC7989BCE4721EF430099558EA0FEE78 +971EFC4133F57CA87F58D7C5B581DB27E1A555AF53A6E3C7FB9BB05F70734EEB +761D87345B03669E54C986FD1866DCC1FBA3D05AFA6D2E4B8590A91FD63CBA96 +A6040297C86B31CFF67238B03734C56E8D0EDE348F2D3E8A1A43AFDDD282B8A5 +851DBE073D267327DE91EE0876B03D796C6AC1133D02F2B573619FB6ED018A10 +10CBFA6EBE6EBAA642B537E7A701D018D956EAC3435C46A6161B724A8D421EE2 +9FDB883F68FA6E1F373D3A63802B7C2EFD16294232733473F5AAF86BAC97DDC0 +F00A425452EABB87F4A54CC3F62962025CDA8A3B411810D11CB5A94D6F4E041D +6CC99717668DF37B69AC69996C7046761EC9CA2BF3C068E154F071AF89431751 +C2210F38FC4872A5FA946E6EB8F19F1AFF7F8E6F316223CC64B4E27D83139C92 +566E823758DA7324955EA51CA8230028E681BBF6C2FA2E8CCB33DF2BCBC3ECA7 +4FE7AD822D8E294341AE9FEE0E3C869B5591F44E3A7EA35CD84A5629EE8539BF +A473F6CF9560394EA8091F5683941DB322E9EA35C2F31AE479118BA9C5B0B03F +174073A680D6AC16FB70B900D5121EE5839CB283482F133E8E1D3565026DAAB2 +0C3E53BCE95D614C1CC7C666382495552DEF599870B7C0A8DC3D889D667C46DF +86D277E481ED7DA5B8F773FA89E70912A95A18E1D3DAEF0FCE74461FDA55B287 +30CFF7A37E9DC2FBED3DEECDFEFF5360E9E101392F362E49B73AEA0E494CE2EF +8AE1C1B80D83CEAA0F70A436B2DB74029BDE84563F89BCAE875E4CBDE9FF3B0F +14E5CCCA5BB24BA19781DEF6C12DBE3DB2FB7A5D1F04A51DC6CD9860D80E0A6B +C84AAB764080B5B1EA9E6C105D049620936A991D1FBAE15DD79A945608847C1E +310C08155C089773C786E1EF8AF29CC16BCF4B71D378F0A6E479F5C8E336EA47 +F524BB67F73072170A81024E22F9D4773F045622DF2C668B118D38B3F54813E3 +07F1461C543DDCDDF7CB547B3BEC97B3306D32E7BEE3DEA8FA9B1F43B971E8BA +AF8B8E93F3ECAE2BF6094486629697F3CE687BF55AC00A45795EFD030AFD7F26 +625F9A648A3F349DD2F8C5F1702F6D809590DAB5991B7F74C4AC452245B98824 +E2D03ADA7078916CA89C1E14FC9DCFD49F035FB6B7685F53BABBA36275C43938 +96613DF967ACEFD1106D18F75EC9ED76B17D7F4B7974E8BB7AD2FB9E38AA0841 +FF994C75B08A5A7DAC6517E1A9C7DBB7245AEEEBF4183A8977B8B6B3892626F2 +AEA4AE13326B9066F3EA7CE832659397BDF1BA40BCD1DF9E94671FBDA6A0E83C +50B40E6BD66B588024E772B737F3B990CD3C5D967E15FC9629DCD8BF3CC4ECF5 +0C9D96808B25E6F33128C1D1E82B9DA2DAFD3513A080A2D34CD46968DBCCD1A9 +7C7F51E72CCE4DF93153BCED3C2B05063138C932E63C39B6E3CE25F3831D84A1 +6146D853F0711D99DF8684BE74D000D02C5D2100D4DEBD918C175201ED82C487 +3E8D65928B6A3308DE59BD2F135D9AC8BD8D21BBEBEAA7391006C0BBA9E0554B +661D130E970D1A7F1A49087C3D821A3B30C90E10AF5E6A3F4D6E20619741C807 +F66E07B9779263D61A68E29089FA491AD84CAC144539F9D96E1719FA0FA740F7 +8CA7F9852BD42D8D3C02E86C10A7F16719CFB9EB52D6D840AE09C601DD0390B2 +297027DA51CF95B885A13AE95E00C4FA277A5369D048C401C6664ECC42EC3E26 +D9E51A5F4EEC06581694A309630D55E281E3D41A5C028E8E8A1B13F1F9893706 +8BAE01A8A7FAF17E8B6FE4034A4D4D5C894BD37746ED3D7F7A09F60CACCF0C94 +1A3C020FCBE011928169C73C0F768279CA150A41CDFD1BF3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390C98D93BE299A9CB +689CDA9BE6BEA47570D9D15DC614719507F27069622E7DB1A97F7B6FF5A5A0C5 +78162E7A9CF76FF72A34097236DF64DA4B61645C7326058030E2B5AABFCC44D0 +49E9CD83D81D8ECA953BDB8CA81CD3D122FAB35612C9C3F6C7F22B666462A78C +AC5473F8755B70B582C0D4C3C9D8C70EE755D41A42C8C17F066414DC21B33111 +A188A5FDDC2D6B02C0965CDC0D91DF1A487ABBBBE2E2896CE0B4BFBE38C79866 +BCD14C2C92449525BD879F6BC320C05FEF8BF68D616695ACD14B3594882B4914 +5B7569629AF50EBCF7152E3715510FBF60F1675D5259715B293A3D7E844764F8 +4B88D997BA5C7B7AB6B104E77F7769C22788334A91C91F02CE675DC14E1FDE5A +F8A03756C12F189494DBC735E3C86A6D4BC4D005E323AC4D7CEF6E1820F9F184 +4DD2EC4C5C58AEE4B5344077AFCCCD82CFC289D46552563B36DA5DAF3C179C90 +BBB4163F2E88909E040769367672B37254345F892D42DF5D5261EAB4CFD4745D +7D72D01D779DEA580D7AA0897250CB8CC10EF282B3A1899F63F375E39C44176C +B0F18AEC3FDE9E12B32B89F9F6A0670DEE9283804AE387096F22569AFE2A593E +C6E10A3FFE07F8F5948343F661D465D0C976CC700D77CCB261730868B3D39D7E +65EF4DC3D7254CC92DB35B467D8C0DB81929EA9F4352B5CCFB0906ECAE215A52 +3A3E286B6C506A8FD8279BEB97734C064861D4CE4FB39636A66652C9FE501046 +451D94A51F00800B6A1A6ED67186A14D6197EF48E8E5CADBAB2437ABC0A3EE8E +E5ABF20E28389FF0902A16AA8F372C615F696BA459AD45EAC10C51DC4A201BFB +0410A34AA3E13187E2736F1ECFD6B8E7377B67F18C01AEA3E680A635529C3E89 +D2CBEC56281C16BD0E54EDB14EB5CDBB4F138FF5669F4C8AED339FD5D5312E1E +B000175363053FBEC579FCD85622F7CB61C6C2B0A5F07D6FA363466289E97C53 +C6BA0CE73A4417D5DE924F231DCDC350E231FA805DB54C26D21E7F90793AC96C +11E6495CDF3E6FDA99DE146A2A18C21557B15DCE2F6540B85C6662A7E0B46FA9 +84B66C4180AE6A99BC1195A2355839940DAF5D6D6199005DB573E383DCCF0040 +75A027D53769D0E9A77F32A0894D7914C3C85C5991A968107E1DED454281C80E +01228AD18FE3778AD96FD49607150225FEBD68791B376BB9707C409E076360C9 +27D3FFAA700DC03CDF0D90069D7034631B51DFB15C4C89B8E6862097BC14CB86 +9A0C00EC7AF4EBF237EB61A363C23D16BABB2461197BA879E6DCB6BA50544303 +5DC77540758B36451FB6ECF2E09C3A1EB5FB51CEFAE1D32340D772168833C415 +D105363AD36F66727243F2F68EEE0B25B067E93FE4B219E0D4513E7C04F444DE +C822CFF1265048CB3058948F533AB6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 238[50 50 16[{}2 83.022 /CMEX10 rf /Fb 129[42 +4[41 47 21[36 44 37[23 47[53 11[{}7 83.022 /CMMI10 rf +/Fc 204[42 42 42 49[{}3 83.022 /CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop 0 TeXcolorgray 1 TeXcolorgray 0 +TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0.25 TeXcolorgray 0 TeXcolorgray 0.5 TeXcolorgray +0 TeXcolorgray 0 0.1 0.95 TeXcolorrgb 0 TeXcolorgray +0 1 1 TeXcolorrgb 0 TeXcolorgray 0.75 TeXcolorgray 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 1134 a + tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip +setmatrix end + 0 +1134 a 0 1134 1194 1134 v 1194 1134 a + currentpoint grestore moveto + 1194 1134 a 146 +945 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 99.5846 0 -5.69046 0 ArrowA CP 4 2 roll ArrowB L pop pop +gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 99.5846 0 exch -5.69046 0 exch ArrowA CP 4 2 roll ArrowB L +pop pop gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 0 rotate /n 3 def /dx +28.45274 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + +@endspecial +361 1065 a Fc(1)194 b(2)h(3)146 945 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 90 rotate /n 3 def /dx +28.45274 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + + +@endspecial 37 735 a(1)37 499 y(2)37 263 y(3)1020 963 +y Fb(x)124 57 y(y)p 0 0 1 TeXcolorrgb 0 TeXcolorgray +146 945 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 28.45274 85.35823 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 0 0 1 setrgbcolor 0 setlinecap stroke + grestore end + +@endspecial 1 0 0 +TeXcolorrgb 0 TeXcolorgray @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 85.35823 28.45274 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 1 0 0 setrgbcolor 0 setlinecap stroke + grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def 0.0 0.0 /y ED /x ED /r 71.13188 def /c 57.2957 r Div +def /angleA 19. 0.0 c mul 2 div add def /angleB 71. 0.0 c mul 2 div +sub def x y r angleA angleB arc gsave 0.8 SLW 0 setgray 0 setlinecap +stroke grestore end + +@endspecial 228 +788 a(\013)296 696 y Fa(\020)340 788 y Fb(~)-37 b(a;)417 +767 y(~)426 788 y(b)462 696 y Fa(\021)p 1 0 0 TeXcolorrgb +897 738 a Fb(~)g(a)p 0 TeXcolorgray 0 0 1 TeXcolorrgb +373 208 a(~)382 230 y(b)p 0 TeXcolorgray eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pdf b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pdf new file mode 100644 index 0000000..8d845d8 Binary files /dev/null and b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pdf differ diff --git a/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pst b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pst new file mode 100644 index 0000000..8b3fd4b --- /dev/null +++ b/2dgrafiken/OeffnungswinkelZwischenZweiVektorenInEbene.pst @@ -0,0 +1,24 @@ +\begin{pspicture}(-0.5,-0.8)(4.2,4) +%%%%%%%%%%%%%%%%%%%%Koordinaten +\psaxes[Ox=0,Dx=1,Oy=0,Dy=1,linewidth=0.1pt]{->}(0,0)(-0.2,-0.2)(3.5,3.5)%Schnittpunkt, x0, y0 x1,y1 +%\psgrid(0,0)(4,4) +\rput[c](3.8,0){$x$} +\rput[c](0,3.8){$y$} + + +%%%%%%%%%%%%%%%%%%%%%%%Vektor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psline[linecolor=blue, linewidth=0.5pt]{->}(0,0)(1,3) + + +\psline[linecolor=red, linewidth=0.5pt]{->}(0,0)(3,1) + + +\psarc(0,0){2.5cm}{19}{71} +\rput[l](0.35, 0.75){$\alpha\left(\vec{a}, \vec{b}\right)$} + + + +\rput[l](3.2, 1){\color{red}$\vec{a}$} + +\rput[l](1, 3.2){\color{blue}$\vec{b}$} +\end{pspicture} diff --git a/2dgrafiken/SubtraktionVektorenInEbene.eps b/2dgrafiken/SubtraktionVektorenInEbene.eps new file mode 100644 index 0000000..052b7f7 --- /dev/null +++ b/2dgrafiken/SubtraktionVektorenInEbene.eps @@ -0,0 +1,1492 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94a Copyright 2003 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Wed Aug 18 10:17:36 2004 +%%BoundingBox: 71 549 381 721 +%%DocumentFonts: CMR10 CMSY10 CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: E:\texmf\miktex\bin\dvips.exe -E 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2004.08.18:1017 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 97 patch 4, 04/05/10 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/Div { dup 0 eq { pop } { div } ifelse } def +/NET { neg exch neg exch T } def +/Pyth { dup mul exch dup mul add sqrt } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def +/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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def /x x Coef mul def /y1 y1 Coef mul def /x1 x1 Coef mul def + x1 0 gt y1 0 gt x 0 gt y 0 gt and { [ y x y1 x1 ] 1 a sub y mul} + { [ 1 0] 0 } ifelse setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch +2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +% DG/SR modification end +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 +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +% def +a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +pop pop } def +% DG/SR modification end +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if +f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +/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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 97, 94/04/20 +% 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 + String length + { String CharCount 1 getinterval ShowChar + /CharCount CharCount 1 add def + } 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 + 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: 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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%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: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 98 /b put +dup 120 /x put +dup 121 /y put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667271C1FD06DBA26AC7504FCD81979D968F25EAC28F245E67080D282B +AAF95C9C72D34DB0A55DD7F78C87363B0B1DEC5C2AFC43C104658A3534C4BD76 +281C117E0FCB6167E2E19DF9D7172700085666D98348A3428BFF586A1A380823 +3421458F96B6E7EEA81AD0DA8478B1BE1378460411802D9DBCCDF22C4B910DEC +B270420E3EADA3BF7F2AD72E5ECCF558598414310E5876BF0866CCABC660576D +B70DA214F598FA4CE721F8DEF96E180C43F37268DDEE07716D3676A2C9FDF2AB +B573ACD8A0CA6DF494A08FB89802107CAB0335B6A711CD84471FCA71B2EB08FC +7F1AAD334D8E65CF14AA84629E50B557247F8FCDF8919E6FCAF77ED592EAE4B8 +35B80CCBC39110D2A9C0D27E5BEC04DE4D7C18AE3CC7D83AA20D68776FB125CE +0C2CC6C96355A512C7A95391F2068071371BB834EE4BD836D742E703E30F1DCE +CE3F74512056E073E5E63ECE1DDA66E205BEB1D8E3D7DDCF6785FB7C102E0153 +55836966E0DC14F6CCF3046303D71E6AEEC453B2E80939180C5BE233C4CA5C56 +14C3DDA330FF3102423C7E31F5F4375B7204E246BFDF360E216ACE0FFCF371A8 +FDEBE0E172FF0BE7540044AB2687F9DF368D9FD2BD91C5B9ED9FAE6ABDB82BD6 +68A432D02198AEB34557408A52190732AE3F02509EACB6B749432BE2FE5E8B62 +95E40CF0252EA074E72AE70E23CA91F319387EE9199D7437658BD7D8586D1BD4 +B9284C7F71B782A77EDC75656AF88AD901471073C7A29E1B2E9ACE350611C3BE +B9FB34665613C7424F186D139DF3D43ECDE7D392F7D50B16DFC00C483AC38F4E +6A34C29BF56D5C3ECCF8D47D05F431E5ADA191587DDD8CE5EEA92BD22A8D4BEF +1DD6C56A0FFBA9A69A921BC52EF17EEE7787FE504BDA2143923F1B5F4D61FECA +B7DD9DBFCC96B5351DC98A4505494AB31FEB9F91B1EF87A4D0AA02B0DD7C4443 +D77824DB8B5B23B7A80952D48C2BFC362E67B37A1E746D25994FC4F836B704B3 +E6E263D1E42689F9A843B038C36AC8D120A4CB64561EE88DB0CDFF08AA5059D8 +AC08ACA0927DA01729ACFE50F9592F4A6423085C83AB792FB3BB2162295F316F +7AB620789BDA1760B0848D8794D38589B9A4CFB81E3F6BEEAFAC8F4442920DA1 +835FBA77D41A0133553DC665E9643F57F84BBC91CA6778B3FB4A8FAE2B1C3527 +E5451D494F06C39BE2AA36D609BA8252E7C7C993B336E7B720CA9C3A43BACEFE +E25BF191E65638893B8F544073AA530174832A783D2FCC7A4C9CDC054015FFD2 +D92653D1205CE253A720A90934FDD7147E40E4E1471C5EA1D5EA104CF44B442E +5209868F0A88DB962070A6FA56141DD93446BCAECDE2DF124339599F0DCA6C46 +5D40AFB5F1D182225034FFA547879F9318F4FA12CB99451619D8D3AEA49EB704 +52C5DCFF2CAADBE707D7EB97D2B6A5792BFF7B26F82FD416DCEB00932E13C433 +04E6B98EEBD3CF30AB6C598227275B3E7033CE7FDB00B6D65641D0F0B8D0D398 +A9DE1FC9535FAD3FF0CCB4F4DCE65E9A3518BEF57F0528DA0D908141876E70E2 +EE996894BDDA2BAFCBBE9E05F42DBE24760FBB3EFCC599D3B0AA5AB6BE9A8506 +ACC6CA5ADF10B60C9809AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /minus put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8B1550654AD5E22C5F3F3CC8C1C0A6C7ADDAB55016A76EC46213FD9BAAF +03F7A5FD261BF647FCA5049118033F809370A84AC3ADA3D5BE032CBB494D7851 +A6242E785CCC20D81FC5EE7871F1E588DA3E31BD321C67142C5D76BC6AC708DF +C21616B4CC92F0F8B92BD37A4AB83E066D1245FAD89B480CB0AC192D4CAFA6AD +241BD8DF7AD566A2022FBC67364AB89F33608554113D210FE5D27F8FB1B2B78A +F22EC999DBAAFC9C60017101D5FB2A3B6E2BF4BE47B8E5E4662B8C41AB471DFC +A31EE1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 50 /two put +dup 52 /four put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390F0303E36E09AF75 +2659C90B837112B11D993027CA8BA9B5720A124F63E7DBABB2F0303A6D876536 +B55707F5C2F3D8090BA7F3C3776E669E5B78D3C03B6E07436B6560B5906E0348 +19F295F12536FFD558FBA1AB51DC370B95A56E0B988CA064E0AC7F9101EA7481 +AE0BE8FB1A69E4B782DE4E821305F50FE95C34D782990F0D0B632FC12B1E324F +1710B2002E0F3F132ED94495BC1892BB688C4FF28BEFE906F5D076592306D8BC +30833BD11CF1198C51BE09B0721EC7211F164A664AB4C7C6FE7EA206A7ABC433 +66FAAD8EF6D6DD77674A3480CBFA62794496BF327BA0BCF7739D813518451BBF +41F9D9F03F1466758C192E2BC0FE74616331609D6DD131325357A24634E1B3FB +059814C123CA62478537A6492B618815B78DB298E699E6064DCF24EEDD570C6D +62190EB9D3874C0A69B7FE6CC9CF1C0C94CA8B063A6E51A2EBF371201F6910F3 +50B8EF85203E4DAB28B15D18FE1EA4974CA1F2575D5BFE9A919CC65AE6B558A6 +FFD7EBFA6010495B5929C2756D0A66FA495A3FA9303D97BAC395E479BEDA98CB +EC189F19FDC65CC2FE63CE50DF02DCC944F7665D0FFB92C9ABA548FCD4647DFD +29DBA6DA78FBE22E983B0F205A80CF8556815EA0361FD9E3690071BB60A8C9C1 +2A6A386C1560623D237CA90BCBD4D32E81B86A0E6C714D9C1EF66D94F848AC8C +3536E2E84CBB7DAEFD16A049495255BB5F44C4F7A4940B8F71C75B4CEA3CADBB +F32234C335AF84099CC2E513EBA29B3A0988C55DAFB10FF54FF1AB5F2167545E +C3C7F45B82A3C688C3ABD9D018AEEBDEB7C631275B9246C3FCB79818C986ABE8 +9ED7977297D0FAEAFB91501EE8218F81EEA6064AFAB59B4B2388B205D811A5E3 +A96F1BCABBF11A9DA6C90AD8E56850DF8D04F690F9F7C4E65A1B42FEF85D8502 +C724976C335D068C2D13B781C9082615CDDFEE5F276A828DFE6209889FD39E98 +84E0E64962F5EE052D905514B841B06FB421A3708AAB6D6F74FBCA30B299585C +9EBCA42443EBA66B9F80CD0D25C2442DB3DE5B1358963628E8884B3A1F39B6EB +E3AE5EE830583E262CC90032BA18DF3378213C598B861E1CFEFCA505500BE7A3 +CBC40B32FA7BB2CF4ACAB799E98A51B1C8F0988B4A0F1181946FEB4F59E89DF5 +D617BC5DD07D37995D91F5E265 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 129[42 +4[41 47 21[36 44 97[{}5 83.022 /CMMI10 rf /Fc 255[65{}1 +83.022 /CMSY10 rf /Fd 203[42 1[42 50[{}2 83.022 /CMR10 +rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop 0 TeXcolorgray 1 TeXcolorgray 0 +TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 1 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0.25 TeXcolorgray 0 TeXcolorgray 0.5 TeXcolorgray +0 TeXcolorgray 0 0.1 0.95 TeXcolorrgb 0 TeXcolorgray +0 1 1 TeXcolorrgb 0 TeXcolorgray 0.75 TeXcolorgray 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 1417 a + tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip +setmatrix end + 0 +1417 a 0 1417 2564 1418 v 2564 1417 a + currentpoint grestore moveto + 2564 1417 a 1091 +1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 156.49008 0 -113.81097 0 ArrowA CP 4 2 roll ArrowB L pop +pop gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow EndArrow + } def 113.81097 0 exch -28.45274 0 exch ArrowA CP 4 2 roll ArrowB +L pop pop gsave 0.1 SLW 0 setgray 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 0 rotate /n 2 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + +@endspecial +1542 1183 a Fd(2)431 b(4)1091 1063 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 0 rotate /n -2 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + + +@endspecial 565 1183 a Fc(\000)p Fd(2)-579 b Fc(\000)p +Fd(4)1091 1063 y @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray 90 rotate /n 1 def /dx +56.90549 def n 0 lt { /dx dx neg def /n n neg def } if /y2 3.0 CLW +2 div add def /y1 y2 neg def /x dx def n { x y1 moveto x y2 lineto +stroke /x x dx add def } repeat end + +@endspecial +982 617 a(2)2461 1081 y Fb(x)1091 81 y(y)p 1 0 0 TeXcolorrgb +0 TeXcolorgray 1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 56.90549 85.35823 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 1 0 0 setrgbcolor 0 setlinecap stroke + grestore end + + +@endspecial 1 0 0 TeXcolorrgb 1440 620 a(~)-37 b(a)p +0 TeXcolorgray 1 0 0 TeXcolorrgb 0 TeXcolorgray 1091 +1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 56.90549 85.35823 56.90549 -5.69046 /Lineto +/lineto load def false Line gsave 0.1 SLW 1 0 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 1 0 0 TeXcolorrgb +1523 1240 a(a)1567 1252 y Fa(1)p 0 TeXcolorgray 1 0 0 +TeXcolorrgb 0 TeXcolorgray 1091 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 56.90549 85.35823 -5.69046 85.35823 /Lineto +/lineto load def false Line gsave 0.1 SLW 1 0 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 1 0 0 TeXcolorrgb 956 366 a +Fb(a)1000 378 y Fa(2)p 0 TeXcolorgray 0 1 0 TeXcolorrgb +0 TeXcolorgray 1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.5 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ 142.26372 28.45274 0.0 0.0 /Lineto /lineto load +def false Line gsave 0.5 SLW 0 1 0 setrgbcolor 0 setlinecap stroke + grestore end + + +@endspecial 0 1 0 TeXcolorrgb 2027 952 a Fb(~)2036 974 +y(b)p 0 TeXcolorgray 0 1 0 TeXcolorrgb 0 TeXcolorgray +1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 142.26372 28.45274 142.26372 -5.69046 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 1 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 1 0 +TeXcolorrgb 2235 1180 a(b)2271 1192 y Fa(1)p 0 TeXcolorgray +0 1 0 TeXcolorrgb 0 TeXcolorgray 1091 1063 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.1 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 142.26372 28.45274 -5.69046 28.45274 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 1 0 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 1 0 TeXcolorrgb 960 849 a +Fb(b)996 861 y Fa(2)p 0 TeXcolorgray 0 1 0 TeXcolorrgb +0 TeXcolorgray 1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.7 SLW 0 1 0 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ -85.35823 56.90549 56.90549 85.35823 /Lineto /lineto +load def false Line gsave 0.7 SLW 0 1 0 setrgbcolor 5.0 3.0 0.0 0.0 +-2 0 add DashLine grestore end + + +@endspecial 0 0 1 TeXcolorrgb 0 TeXcolorgray @beginspecial +@setspecial + tx@Dict begin STP newpath 0.7 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ 56.90549 85.35823 142.26372 28.45274 /Lineto +/lineto load def false Line gsave 0.7 SLW 0 0 1 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 0 1 TeXcolorrgb 0 TeXcolorgray +@beginspecial @setspecial + tx@Dict begin STP newpath 1.0 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. Arrow + EndArrow } def [ -85.35823 56.90549 0.0 0.0 /Lineto /lineto load +def false Line gsave 1.0 SLW 0 0 1 setrgbcolor 0 setlinecap stroke + grestore end + +@endspecial 0 0 1 TeXcolorrgb +495 899 a Fb(~)g(a)18 b Fc(\000)636 877 y Fb(~)645 899 +y(b)p 0 TeXcolorgray 0 0 1 TeXcolorrgb 0 TeXcolorgray +1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ -85.35823 56.90549 -85.35823 -5.69046 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 0 1 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + +@endspecial 0 0 1 +TeXcolorrgb 254 1180 a(a)298 1192 y Fa(1)354 1180 y Fc(\000)g +Fb(b)473 1192 y Fa(1)p 0 TeXcolorgray 0 0 1 TeXcolorrgb +0 TeXcolorgray 1091 1063 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def [ -85.35823 56.90549 5.69046 56.90549 /Lineto +/lineto load def false Line gsave 0.1 SLW 0 0 1 setrgbcolor 5.0 3.0 +0.0 0.0 0 0 add DashLine grestore end + + +@endspecial 0 0 1 TeXcolorrgb 1105 613 a Fb(a)1149 625 +y Fa(2)1204 613 y Fc(\000)g Fb(b)1323 625 y Fa(2)p 0 +TeXcolorgray eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/SubtraktionVektorenInEbene.pdf b/2dgrafiken/SubtraktionVektorenInEbene.pdf new file mode 100644 index 0000000..f927712 Binary files /dev/null and b/2dgrafiken/SubtraktionVektorenInEbene.pdf differ diff --git a/2dgrafiken/SubtraktionVektorenInEbene.pst b/2dgrafiken/SubtraktionVektorenInEbene.pst new file mode 100644 index 0000000..0871208 --- /dev/null +++ b/2dgrafiken/SubtraktionVektorenInEbene.pst @@ -0,0 +1,41 @@ +\begin{pspicture}(-4.5,-1.5)(6,4.5) %x1, y1 x2, y2 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Koor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(-4,-1)(5.5,4)%Schnittpunkt, x0, y0 x1,y1 + \rput[l](5.8,0){$x$} + \rput[l](0,4.2){$y$} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor a%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=red, linewidth=0.5pt]{->}(0,0)(2,3) + \rput[l](1.5, 2){\color{red}$\vec{a}$} + + \psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](2,-0.2)(2,3) + \rput[1](2.0,-0.7){\color{red}{$a_1$}} %%a1 + + \psline[linecolor=red,linewidth=0.1pt,linestyle=dashed](-0.2,3)(2,3) + \rput[1](-0.4,3){\color{red}{$a_2$}} %%a2 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=green, linewidth=0.5pt]{->}(0,0)(5,1) + \rput[l](4, 0.55){\color{green}$\vec{b}$} + + \psline[linecolor=green,linewidth=0.1pt,linestyle=dashed](5,-0.2)(5,1) + \rput[1](5,-0.4){\color{green}{$b_1$}} %%b1 + + \psline[linecolor=green,linewidth=0.1pt,linestyle=dashed](-0.2,1)(5,1) + \rput[1](-0.4,1){\color{green}{$b_2$}} %%b2 + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Berechnungslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=green, linewidth=0.7pt, linestyle=dashed]{->}(2,3)(-3,2) + \psline[linecolor=blue,linewidth=0.7pt,linestyle=dashed](5,1)(2,3) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor a-b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=blue, linewidth=1pt]{->}(0,0)(-3,2) + \rput[l](-2.5, 0.85){\color{blue}$\vec{a}-\vec{b}$} + + \psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](-3,-0.2)(-3,2) + \rput[1](-3,-0.4){\color{blue}{$a_1-b_1$}} + + \psline[linecolor=blue,linewidth=0.1pt,linestyle=dashed](0.2,2)(-3,2) + \rput[1](0.6,2){\color{blue}{$a_2-b_2$}} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{pspicture} \ No newline at end of file diff --git a/2dgrafiken/Variable.eps b/2dgrafiken/Variable.eps new file mode 100644 index 0000000..ac0125b --- /dev/null +++ b/2dgrafiken/Variable.eps @@ -0,0 +1,2352 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Thu Aug 17 11:43:58 2006 +%%BoundingBox: 45 748 99 757 +%%DocumentFonts: Times-Roman +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -E 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2006.08.17:1137 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.08, 2006/06/17 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2006/06/17 : - changes to the code (hv) +% 2006/04/21 : - Improved parser -> generic with derivative and translator into ps (dr) +% 2006/01/16 : - EXP -> Exp to prevent missmatch with pst-math (hv) +% 2005/09/28 : - rename it to pstricks-add.pro +% - add support for Gouraud shading (hv) +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression (dr) +% 2004/12/16 : addition of Sum and IfTE (dr) +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +% +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { tx@AlgToPs begin AlgToPs end } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 +/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 3.14159265359 /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 } + { tutu 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (ln\() StrConcat 8 index StrConcat (\)*\() StrConcat + 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 (*\() 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 3.14159265359 /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 90 div 1.57079632680 mul +} 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 90 div 1.57079632680 mul +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } 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 { 2.71828182846 exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/PI 3.14159265358 def +end +% END pstricks-add.pro + + +%%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 = "30 October 2002", +% 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 +% 0xD0 + /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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.83)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end TeXDict begin +40258437 52099154 1000 600 600 (2dgrafiken.dvi) @start +/Fa 135[42 54[60 12[42 1[42 1[42 48[{ TeXBase1Encoding ReEncodeFont }5 +83.022 /Times-Roman rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 4326068 0 10628664 + 0 -274 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.56917 SLW 0 setgray 0. true 162.18054 33.00528 0.0 -33.00528 +0 Frame gsave false 1 0.0 0.0 gsave 1 0 0.4 setrgbcolor currentrgbcolor +grestore gsave 1 1 0 setrgbcolor currentrgbcolor grestore 2000 1.0 +0. tx@GradientDict begin GradientFill end grestore gsave 0.56917 SLW +0 setgray 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 0. true 81.94403 22.76227 7.96672 +-1.13791 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 22.76227 80.80568 +-1.13791 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 0.0 7.96672 -23.90019 +0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW 0 setgray +0 setlinecap stroke grestore end + +@endspecial +0 -274 a + tx@Dict begin { 45.72427 11.09654 } PutCoor PutBegin end + 0 -274 a -217 -246 a Fa(0xA0000000)0 -274 y + tx@Dict begin PutEnd end + +0 -274 a 0 -274 a + tx@Dict begin { 115.67392 11.09654 } PutCoor PutBegin end + 0 -274 a -21 -255 a Fa(x)0 -274 y + tx@Dict begin PutEnd end + 0 +-274 a 0 -274 a + tx@Dict begin { 80.51697 -12.23447 } PutCoor PutBegin end + 0 -274 a -42 -246 a Fa(24)0 -274 y + tx@Dict begin PutEnd end + 0 +-274 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Variable.pdf b/2dgrafiken/Variable.pdf new file mode 100644 index 0000000..6af93d0 Binary files /dev/null and b/2dgrafiken/Variable.pdf differ diff --git a/2dgrafiken/Variable.pst b/2dgrafiken/Variable.pst new file mode 100644 index 0000000..10ae102 --- /dev/null +++ b/2dgrafiken/Variable.pst @@ -0,0 +1,13 @@ +\begin{pspicture}(0,-1.16)(5.7,1.16) +\definecolor{color118g}{rgb}{1.0,0.0,0.4} +\psframe[linewidth=0.02,fillstyle=gradient,gradlines=2000,gradbegin=color118g,gradend=Yellow,gradmidpoint=1.0](5.7,1.16)(0.0,-1.16) +\psframe[linewidth=0.04,fillstyle=solid](2.88,0.8)(0.28,-0.04) +\psframe[linewidth=0.04,fillstyle=solid](5.44,0.8)(2.84,-0.04) +\psframe[linewidth=0.04,fillstyle=solid](5.44,0.0)(0.28,-0.84) +\usefont{T1}{ptm}{m}{n} +\rput(1.6070312,0.39){0xA0000000} +\usefont{T1}{ptm}{m}{n} +\rput(4.065469,0.39){x} +\usefont{T1}{ptm}{m}{n} +\rput(2.8298438,-0.43){24} +\end{pspicture} \ No newline at end of file diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung01.eps b/2dgrafiken/VektorenInEbeneVeranschaulichung01.eps new file mode 100644 index 0000000..9510665 --- /dev/null +++ b/2dgrafiken/VektorenInEbeneVeranschaulichung01.eps @@ -0,0 +1,2658 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software +%%Title: F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi +%%CreationDate: Wed May 31 12:35:52 2006 +%%Pages: 1 +%%PageOrder: Ascend +%%BoundingBox: 0 0 595 842 +%%DocumentFonts: CMR10 CMMI10 CMR7 +%%DocumentPaperSizes: a4 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: C:\texmf\MiKTeX\bin\dvips.exe -P pdf +%+ F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi +%DVIPSParameters: dpi=8000 +%DVIPSSource: TeX output 2006.05.31:1235 +%%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 +/p{show}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: alt-rule.pro 0 0 +%! +% Patch by TVZ +% Makes dvips files draw rules with stroke rather than fill. +% Makes narrow rules more predictable at low resolutions +% after distilling to PDF. +% May have unknown consequences for very thick rules. +% Tested only with dvips 5.85(k). +TeXDict begin +/QV { + gsave newpath /ruleY X /ruleX X + Rx Ry gt + { ruleX ruleY Ry 2 div sub moveto Rx 0 rlineto Ry } + { ruleX Rx 2 div add ruleY moveto 0 Ry neg rlineto Rx } + ifelse + setlinewidth 0 setlinecap stroke grestore +} bind def +end + +%%EndProcSet +%%BeginProcSet: pstricks.pro 0 0 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.01, 2005/09/27 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2005/09/28 : - rename it to pstricks-add.pro +% - agg support for Gouraud shading +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression +% 2004/12/16 : addition of SUM and IFTE +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { InitParser SetExpr LexStr 0 exch AnalyzeListOfE ExpressionVector /ExpressionVector [] def} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/SetExpr { RemoveWS /ExpressionString exch def } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/InitParser { + /ExpressionVector [] def /AddVector [] def + /AddVectorfree [] def /MulVector [] def + /MulVectorfree [] def /PowVector [] def + /PowVectorfree [] def /OpParVector [] def + /ClParVector [] def /ParVectorFree [] def + %%/CompVector [] def /CompVectorFree [] def + /BraVector [] def /SemVector [] def + /ComVector [] def /ExpressionVector [] def + /LoopLevel -1 def /LoopContext [] def %%% NEW for SUM function +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/FLbreak { tst not {/L exch def /F exch def 2 copy L eq exch F eq and /tst exch def} {pop pop} ifelse} def +/Negbreak { tst not { dup 0 lt /tst exch def } if } def +/STOP { tst {TOUF} if} def +/tst false def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Expression List +%% first last +/AnalyzeListOfE { + exch SemVector { + exch 1 index 1 sub AnalyzeExpr 1 add + } forall%%last_char + exch AnalyzeExpr +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Expr +%% first last +/AnalyzeExpr { + FindFirstAdd%% first last pos+ + 2 copy abs 1 sub ne + { 3 -1 roll 1 index abs 1 sub AnalyzeExpr dup abs 1 add 3 -1 roll AnalyzeTerm EvalAdd } + { pop AnalyzeTerm } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Term +%% first last +/AnalyzeTerm {%%19 28 FLbreak STOP + FindFirstMul%% first last pos* + 2 copy abs 1 sub ne + { 3 -1 roll 1 index abs 1 sub AnalyzeTerm dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalMul }%%% NEW 2004/11/14 + { pop AnalyzeSignedFactor } ifelse%%% NEW 2004/11/14 +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NEW 2004/11/14 +%% analyze Signed Factor +%% first last -> +/AnalyzeSignedFactor { + ExpressionString 2 index get + dup 45 eq%% a - sign + { pop exch 1 add exch AnalyzeSignedFactor EvalNeg } + { 43 eq%%a + sign + { exch 1 add exch AnalyzeSignedFactor } + { AnalyzeFactor } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Factor +%% first last -> +/AnalyzeFactor { + FindFirstPow%% first last pos* + 2 copy abs 1 sub ne +% { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzePower EvalPow } + { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalPow }% NEW 2004/11/14 + { pop AnalyzePower } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze Power +%% first last -> +/compteur 0 def +/AnalyzePower { + ExpressionString 2 index get + dup 40 eq%% an open parenthesis + { pop 1 index UnfreePar 1 sub exch 1 add exch AnalyzeExpr } + { dup 45 eq%% a - sign + { pop exch 1 add exch AnalyzePower EvalNeg } + { dup 43 eq%%a + sign + { pop exch 1 add exch AnalyzePower } + { dup 46 eq 1 index 48 ge 2 index 57 le and or%%a digit or a dot + { pop AnalyzeNumber } + { pop AnalyzeLiteral } ifelse } ifelse } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% analyze parameters list +%% first last +/AnalyzeParam { + { FindFirstCom%% first last pos, + 3 -1 roll 1 index 1 sub AnalyzeExpr + 2 copy 1 sub ne { 1 add exch } { pop pop exit } ifelse + } loop +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual addition at this level +%% first last -> position +/FindFirstAdd { + 2 copy /Last exch def /First exch def false 0 + AddVector { + AddVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos abs First gt pos abs Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeAdd} %% find one mul + { Last 1 add } ifelse +} def +%% { +%% 2 copy /Last exch def /First exch def false 0 +%% AddVector { +%% AddVectorFree 2 index get +%% { /pos exch def +%% true 0 1 ClParVector length 1 sub +%% { ParVectorFree 1 index get +%% { OpParVector 1 index get pos abs le +%% ClParVector 2 index get pos abs ge and +%% pos abs First lt pos abs Last gt or or +%% { pop pop false exit } if +%% } if +%% pop +%% } for +%% { pop pop true dup exit } if +%% } +%% { pop } ifelse +%% 1 add +%% } forall +%% pop +%% { pos UnfreeAdd}%% find one add +%% { Last 1 add } ifelse +%% } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual multiplication at this level +%% first last -> first last position +/FindFirstMul { + 2 copy /Last exch def /First exch def false 0 + MulVector { + MulVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos abs First gt pos abs Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeMul} %% find one mul + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual power at this level +%% first last -> first last position +/FindFirstPow { + 2 copy /Last exch def /First exch def false 0 + PowVector { + PowVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos First gt pos Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesis + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreePow} %% find one ^ + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the eventual comma at this level +%% first last -> first last position +/FindFirstCom { + 2 copy /Last exch def /First exch def false 0 + ComVector { + ComVectorFree 2 index get + { /pos exch def + %% if it is in the current part of the analysed expr + pos First gt pos Last lt and + { true 0 1 ClParVector length + dup 0 eq%% no parenthesisSTOP + { pop pop pop pop exch not exch exit } + { 1 sub + { ParVectorFree 1 index get + { OpParVector 1 index get pos abs lt%% in this parenthesis level + ClParVector 2 index get pos abs gt and + { pop pop false exit } if%%then exit loop + } if + pop } for + { pop pop true dup exit } if } ifelse } if + } { pop } ifelse + 1 add + } forall + pop + { pos UnfreeCom} %% find one comma + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the first opened parenthesis (only for func call) +%% first last -> first last position +/FindFirstPar { + 2 copy /Last exch def /First exch def false 0 + OpParVector { + ParVectorFree 2 index get + { /pos exch def + pos First gt pos Last lt and + { exch not exch exit } if + } { pop } ifelse + 1 add + } forall + pop + { pos dup UnfreePar }%% find one par + { Last 1 add } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Find the first opening bracket +%% first last -> first last position +/FindFirstBra { + 2 copy /Last exch def /First exch def + BraVector { + /pos exch def + pos First gt pos Last lt and + { exit } if + } forall + pos dup UnfreePar%% finding it is mandatory +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Read the number and push it in the vector +%% first last -> +/AnalyzeNumber { + 1 index sub 1 add ExpressionString 3 1 roll getinterval cvr /n exch def + /ExpressionVector ExpressionVector aload length n exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Read the literal and push it in the vector +%% first last -> +/AnalyzeLiteral { + ExpressionString 1 index get dup 41 eq %%close par at the end => function call + { pop FindFirstPar%%first last parpos + ExpressionString 3 index dup 3 index exch sub getinterval + dup (SUM) eq { sumation } + { dup (IFTE) eq { condition } + { 1 index 1 add 3 index 1 sub AnalyzeParam + dup cvn /n exch def TrigoFunc + /ExpressionVector ExpressionVector aload length + /tx@addDict cvx /begin cvx n cvx /end cvx 5 -1 roll 4 add array astore def + %%n cvx exch 1 add array astore def + pop pop pop } ifelse } ifelse } + { 93 eq%%close bracket => vector element + { FindFirstBra%%first last brapos + ExpressionString 3 index dup 3 index exch sub getinterval cvn /n exch def + /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def + 2 copy 1 add exch 1 sub AnalyzeExpr + /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def + pop pop pop + } + { 1 index sub 1 add ExpressionString 3 1 roll getinterval cvn /n exch def + /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def } ifelse } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push add in the vector +%% kind -> +%% if kind>0 then add else sub +/EvalAdd { + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll + 0 gt { /add } { /sub } ifelse cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push mul in the vector +%% -> +/EvalMul { + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll + 0 gt { /mul } { /div } ifelse cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push exp in the vector +%% -> +/EvalPow { + pop /ExpressionVector ExpressionVector aload length + /tx@addDict cvx exch /begin cvx exch /EXP cvx exch /end cvx exch 4 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% push neg in the vector +%% -> +/EvalNeg { + /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Lexical Analyzis of the string +%% -> +/LexStr { + /freepar 0 def /lastpar 0 def /lastchar 0 def + 0 ExpressionString + { dup 40 eq 1 index 91 eq or %% open parenthesis + { /OpParVector OpParVector aload length dup 3 add index exch 1 add array astore def + /ClParVector ClParVector aload length -1 exch 1 add array astore def + /lastpar freepar def /freepar freepar 1 add def /NoPar false def} if + dup 41 eq 1 index 93 eq or %% close parenthesis + { ClParVector lastpar 3 index put lastpar + dup 0 eq + { pop } + { { 1 sub dup ClParVector exch get -1 eq { /lastpar exch def exit } { dup 0 eq { pop exit} if } ifelse } loop } + ifelse } if + dup 42 eq %% * operator + %%{ /MulVector MulVector aload length dup 3 add index exch 1 add array astore def } if + { /MulVector 2 index MulVector aload length 1 add array astore def } if + dup 43 eq %% + operator + { %%test if it is a real operator and not the unary operator + lastchar dup 40 ne %% open parenthesis + 1 index 59 ne and %% ; + 1 index 42 ne and %% * + 1 index 43 ne and %% + + 1 index 44 ne and %% , + 1 index 45 ne and %% - + 1 index 47 ne and %% / + 1 index 0 ne and %% first char + 1 index 94 ne and %% ^%%2004/11/14 + exch 124 ne and %% | + %%{/AddVector AddVector aload length dup 3 add index exch 1 add array astore def } if} + {/AddVector 2 index AddVector aload length 1 add array astore def } if} + if + dup 44 eq %% , separator + { /ComVector ComVector aload length dup 3 add index exch 1 add array astore def } + if + dup 45 eq %% - operator + { %%test if it is a real operator and not the unary operator + lastchar dup 40 ne %% open parenthesis + 1 index 59 ne and %% ; + 1 index 42 ne and %% * + 1 index 43 ne and %% + + 1 index 44 ne and %% , + 1 index 45 ne and %% - + 1 index 47 ne and %% / + 1 index 0 ne and %% first char + 1 index 94 ne and %% ^%%2004/11/14 + exch 124 ne and %% | + %%{/AddVector AddVector aload length dup 3 add index neg exch 1 add array astore def } if} + {/AddVector 2 index neg AddVector aload length 1 add array astore def } if} + if + dup 47 eq %% / operator + %%{ /MulVector MulVector aload length dup 3 add index neg exch 1 add array astore def } + { /MulVector 2 index neg MulVector aload length 1 add array astore def } + if + dup 59 eq 1 index 124 eq or%% ; separator | + { /SemVector SemVector aload length dup 3 add index exch 1 add array astore def } + if + dup 91 eq %% open bracket + { /BraVector BraVector aload length dup 3 add index exch 1 add array astore def } + if + dup 94 eq %% ^ operator + %%{ /PowVector PowVector aload length dup 3 add index exch 1 add array astore def } + { /PowVector 2 index PowVector aload length 1 add array astore def }%%2004/11/14 + if + /lastchar exch def 1 add + } forall + /AddVectorFree AddVector CreateFree def + /MulVectorFree MulVector CreateFree def + /ParVectorFree OpParVector CreateFree def + /PowVectorFree PowVector CreateFree def + /ComVectorFree ComVector CreateFree def + 1 sub +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Create Free vector +%% -> +/CreateFree { + dup length array exch + { pop true exch } forall astore +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree parenthesis +%% pos -> +/UnfreePar { + /pos exch def ParVectorFree 0 + OpParVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree mul +%% pos -> +/UnfreeMul { + MulVectorFree 0 + MulVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree add +%% pos -> +/UnfreeAdd { + AddVectorFree 0 + AddVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree exp +%% pos -> +/UnfreePow { + PowVectorFree 0 + PowVector { pos eq { exit } if 1 add } forall + false put +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unfree com +%% pos -> +/UnfreeCom { + ComVectorFree 0 + ComVector { pos eq { exit } if 1 add } forall + false put +} 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 3.14159265359 /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the condition function +%% -> +/condition { + %% manage the condition + 1 index 1 add 3 index 1 sub FindFirstCom + %% find the test char <,>,=,! + 4 index 1 index 1 sub FindTestChar + 4 index 2 index 1 sub AnalyzeExpr 3 1 roll + 1 add 1 index 1 sub AnalyzeExpr exch + /ExpressionVector ExpressionVector aload length dup 1 add array exch 3 add -1 roll cvx exch astore def + %% manage the then clause + MngClause + %% manage the else clause + MngClause + /ExpressionVector ExpressionVector aload length 1 add /ifelse cvx exch array astore def + mark 8 1 roll cleartomark +} def +/FindTestChar { + 1 exch + { dup ExpressionString exch get + dup 60 eq { pop /lt exit } if%%< + dup 61 eq { pop /eq exit } if%%= + dup 62 eq { pop /gt exit } if%%> + pop pop } for +} def +/MngClause { + 3 1 roll FindFirstCom 4 -1 roll 1 add 1 index 1 sub + /ExpressionVector ExpressionVector exch [] def 3 1 roll AnalyzeExpr + /ExpressionVector exch aload length 1 add ExpressionVector cvx exch array astore def +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the sumation function +%% -> +/sumation { + /LoopLevel LoopLevel 1 add def + %% create the accumulator + /ExpressionVector ExpressionVector aload length 1 add 0 exch array astore def + %% read the variable name + 1 index 1 add 3 index 1 sub FindFirstCom + ExpressionString 4 -1 roll 2 index 1 index sub getinterval cvn + /tempvar exch def + %% read the initial value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + %% read the increment value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + %% read the limit value + GetNextNumber + /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def + /LoopContext LoopContext aload length 1 add ExpressionVector exch array astore def + /ExpressionVector [ tempvar /exch cvx /def cvx ] def + 1 add exch AnalyzeExpr + %% add each term of the sum + /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def + /ExpressionVector LoopContext LoopLevel get aload length 2 add + ExpressionVector cvx exch /for cvx exch array astore def pop pop pop pop } def +/GetNextNumber { + exch FindFirstCom ExpressionString 4 -1 roll 1 add 2 index 1 index sub getinterval cvi + /temp exch def } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% METHODS FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MISC FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/RemoveWS {% + dup length + 0 2 index { 32 ne { 1 add } if } forall + 2 copy ne + { exch pop string 0 2 index + { dup 32 ne { 2 index 2 index 3 -1 roll put 1 add } { pop } ifelse } forall + pop exch pop } { pop pop } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% NEW FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Make a discrete sum +%% var n begin end expr -> +/SUM {} def +%% function arcsine in radians +%% x -> theta +/asin {% + dup abs 1 gt { EQDFasinrangeerror } if + dup abs 1 eq + { PIdiv2 exch -1 eq { neg } if } + { .1 %% asin(x) + { dup dup PI div 180 mul sin 3 index sub exch PI div 180 mul cos div + dup abs 1e-6 lt { sub exit } if sub + } loop + exch pop } ifelse +} def +%% function arccosine in radians +%% x -> theta +/acos {% + dup abs 1 gt { EQDFacosrangeerror } if + dup abs 1 eq + { -1 eq { PI } { 0 } ifelse } + { 1.5 %% asin(x) + { dup dup PI div 180 mul cos 3 index sub exch PI div 180 mul sin neg div + dup abs 1e-6 lt { sub exit } if sub + } loop + exch pop } ifelse +} def +%% factorial function +%% n -> n! +/fact { 1 exch 2 exch 1 exch { mul } for } def + +%end + +%% modified exponential funtion for 0 +%% x n -> x^n +/EXP { dup 0 eq { pop pop 1 } { exp } ifelse } def +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/GTriangle { + gsave + /mtrx CM def + /colorA ED /colorB ED /colorC ED % save the colors + /xA ED /yA 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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end + +% END pst-eqdf.pro + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.81)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +dup 59 /comma put +dup 75 /K put +dup 97 /a put +dup 100 /d put +dup 101 /e put +dup 105 /i put +dup 110 /n put +dup 111 /o put +dup 114 /r put +dup 116 /t put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +95601766758820333028C2295F4A921FA3F2A6AC5D3E60DC3A492FE965A7987C +6F4F0FF187FE2A577491EAE8A210018735A966012423879709D2555AB137295B +9B5817743E31C669E80C1C9C53C1E983AE730859A5F234D0225EE9AFC07A8E3B +EC5E7B264E010BEE39E6DC5E3E327C3666CB9A4A08C4B8CBACDC924E433641C6 +686D21874F17E0BF13EFE32F4BF7411F2D25D6DDF429E1E542A3E0DC5AA099AD +49FE89DE38D4A30E3B66EE30D8A8C209E368FCF5618A41FDAA24EDE7DBB91772 +0CBDC4BDEF23FD8FC13F2A3504DAC04480F21D0129D01C4DFCE85B5A476CC56D +F23924BCE3DDD30051D925086920AFC3A3EC706820AC9909A3418F772D4C1424 +E0240538BD41B3BFF3F428025FCEAB3C268416261A4599E220CE810FDA48ECF2 +D3DA1BCED380B1D97009F93D8C1986995D8DB275D6AD3D8278E16917DE54627F +968E88436E28A3961BA0D8968EDFD198D79630CAB56802CFA87EBF6E89B5C07F +290936E9C095B4212F3EF23211FA61DF05A13609CCBB74EE8413623ED6AFAC9D +ACB5B3D73FAF6001C57B0B17C1FF78C77F5B1303F1EF4C48552570CBDA9CB9EF +7D5860AC693D0E11A2CE55523F68CFC9FCB0AC7D5686C0CE58186B7307C50659 +BF8777E9F2337FE30A88E2E92607EC7CA81B2E3F07489267718381A344FBADB7 +C46F5D0E5DA5C5C5C1A45DBB46849939AA1B00F8BFBFB3660ABE17E449546711 +0F18BF16C69BA8C66C633A6CF96FA21B47A2AC8854B10FA1B095A41E4803EE51 +EAD1F80BD21CC20EF8287AEB8B06D2E6E825D032948BD9FD8AF17502D43AD55B +C9CE742D7CA43398176315BD3670118B6418BE757575C3F6C90850C10BE05F83 +100BACE4EA8D8A6622B9C34801AED6FDD2C1771AA8C11EC5E254364342C2FB00 +BF6A8B8FB21EBFBAF159C13E7F43D7C7B40D49A3B95898934FBFEF6D7A5C283D +FBCE910D5A0F78BB5ABA70C209A308FFE9F75396AD23B892EDEA965362397C06 +BC4159699BB635F4C5013498F952EA9C219ABE28590EF89F77DB4929878DE390 +7062FB42623CA24AA2900E0D136A843B83EE823D630D48238089F66BC452E581 +D480D3F1CB3D51E2A44BC65A8D8721CF4EDE51F617DA4BC63CAD1C62F8FB3DDA +3DE2CC019B65626F26A9EBAABA55A5B8E3E26F7F328A11234160B12A4E1A3248 +FA131B07C055CC223D55F2D3BEB4242A82B9F91263D2BF418B8AB841AB4C33B9 +1CB5A3578C5E41BEB1E24FF38249B114203725030EA435F0C883B1BA0A9440DC +21DC41BD9232A248FD2D9C0D0D0C341F4B0FFDCF1159293F208A2CDE0EC73288 +892332BB56150506790F33B4D3A0BC27B3F7678F0E42A60F07E608B12D68B859 +CC92AA1E1C23AF5F3E2B3BDDB92AE9649E906FDAF9CC5112FFE426623C4C910F +4A635E6AFCDDCBFF82269F50BE8168C1C634FB0CEF79E17FC7966B1AE960DC31 +3E91B2A7A137AA5392C5BBF0E8E9A6914A44E49C7E77A0BDE2A0DB041410054D +5109C31E618C0015134DA634F2409994E37271A49DA08DD599CF4EE6EF4A1B91 +7BF8A877C5EF71AE7D1D4D528D387FFEBA76F6202A0BB21B7CDF21A564039EE7 +FEE03AE534FB8CC8F11EA00D195068D2A6EC6DF4BEA0DE3D1E65504E310B0864 +0AD910C3325A65643044FA8F9F7AE501639864D4BC9BA6AFC1FE4143102B18E9 +F28D8C9E7C7C6286521C03EB4C52897F5D3DDE2C25EE9EFD316D97DEDBB6478F +FB7DD54A1A644780EE884333614997F1A79DFC55AFC41B2B63B56C7273C0906B +AD91B6BD0748AC6DDB23C735912A808F4AB2F6AD745A73E4CAA4F7DEA08DF644 +A4930E97301BFE070294B5796F123ED2B4224216540B14159C4B334E3AEC2540 +3DBCB792F822D0A94617DF5AAB3A7C4DD06D21C38EB9F0C5D68B7D3902AEA3E3 +BB08D5354741046784652E806F1956C531B5DFC47F8F1084935D507A519DC362 +FCDA5667426614B8B96814CD6A56A280874D5549AD791BF80CB8BFB6360CCCF8 +CE4F776AC01F2B5EFC3E7856362C28D6DA097F2B0432B36F7105BA20D4E6D91D +F75404D812DE4B83F5206380F738A6FD6666FD95A70554904FA4E45A3E89E2D2 +5BBBAB1194DDEB8903998FD4B87657C6587D9E78C875A1C115D52B1D68A8AECB +EA8DC4A19D7E45B5E5EBA645D1C79789484CB401F6B601F324C879ABB4FBE745 +6382884FFEF01C78624807BABA107769A5CE48DEC59B50ED4F3F8A412A087E9A +87EF124C0EB37EBEC02715B8769FDC38C4953721C50A528C06D7539AC65AF753 +C286213FCC8F73B928468B7FBE35C099CCCEE900C3EFBB6EB734D72544184C6B +45560B398CB0E03FCC408B0B38FCDD9145AC7039499DAEBA3D58FB80DCD4A98E +59E1CCF44296612EA94CAD9675F665C1FCA25B44F7F04C1AE6A2AE2150B7280F +D83F07A373B9A923771057AAFA1DF31A3AF8CE250B3260FB5E1E4BBB2A8A7D6C +693016D2A46E2BA76CCDCB2B24A988A92168A4004B40C6AA5F24F92E7313371C +A0B4F7924BDEE84B1C1C2E9D46B22BCA1C346A7BA5738A195B9EE5D9DB56C06A +8A575A4E6FBF37F3E738413A7F32CAA63A5886824331E783EB506267559E3FD9 +652EB7C24B165D28DA47E51FA4014ADF8DA6110F995A306D158EA2CE18D58DD0 +E30375A60244ECA4E5ED956E2413E9D4CE5D0DD991AD3075B027DCA48E73C845 +7926BC40AF7FB7B12826FC870E409538794185D00FBFD55B7B3A204947FD325D +417EBE45B0B4874819CE22F9C676A999BC5F46E964A84C26D381601DB66F5AB1 +2A20B034DD6365BB02888AAEB83AB1B8612E3923A8A49FACB3FE9807CE2C64EE +07E87E6F8264ADD02284E458471E9934D74F6DC45916A85738B40317B803FC46 +0EE52ADB77A4A8735D1A9D0664467D2C2A9F55EE9D93BC0369847D1317D3F7E2 +50A23319CA8D3C563DF8D3A33FE5E80B000731F21960B81B328ABC661136A897 +076EBE4EC5669E43688A1FF373C70674DBF0A3EBD6F12EBB37D8A5FD08DC8894 +52BA09304D3F2C664AF995B39E6858933EB7987B63FE19A35989AB8BDF639454 +D55A572F5A670AE281CDC090BE83F37A71E4F4937E822E5DA294EAF054245FC3 +5709F9951AB572805B3F51D7940E22571D34D3D077B4E485D001C8F63898C40A +750A0E21C8C226BA4F9322164D1DC3029CDA78B6EB85EB7C066DBFCEB3DD9353 +15A07243935489873A7E85C80182562F190714FB64E16CEA199640AF92EC01B8 +28202A3F402F8A63F8F01BC368FF49E0FC6BCE198F47744FA83F538AF8FA21B3 +69BE65FE9F3E1642D37720B1B2D1E331DFAE2388142E6BD29011F40AECD28526 +E18854CC07170E62945AC37D4990B343EA78698C2DFEF0908FC6CA012EEB1F43 +D87D88E80C9BD5E32807ECBB8D7505DFBFA8842AFD6BCE6F0D4ACEF53B0AA318 +DDFD8E707B41A19F235D8669194FFBEE1DBB2B9EA4A4109966ED793963292FCE +6C91F779ACAD52050242232FA5D63F540F37ED54C997001268D3CDF40E433BFD +BC143839C3F09065A0FBD4AA5431D57E7648AB9C9D4F4E889AFED6FAE6F7E459 +929D0E86BADE9DBE3BC81DA20E393C9CB41C8D9F70272AC3B678520A17367451 +6343D6228BA9AE7A7A444595D8402FFC5E28522CBD33C1836E96123018BAD12F +DC82861C4C4840910FFF41146A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 52 /four put +dup 80 /P put +dup 107 /k put +dup 110 /n put +dup 116 /t put +dup 117 /u put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B283796A9AD847424B4E6508546C36223A3B17EB82A56592F27FC27 +F1D49D5FF4BBC0E16231807AF7E195AA7D0D01C7566243448B222D57B811EAE6 +DE9370F84E207DC9BEC731AD6040FD9B804FA14CA264B73136F9AF34390319F6 +A543D5D4D7FDDDF2F76651E557683614521110DEC1CCAC426117DDA7D6CF1B8B +7879B21FDC78BAB3C944BCDCD6A65B67F3692F0A8D5E36FB783A63D4FBC9842E +2CBC2720A7206F42A99AEC79FBBA92A27965AF40A71E05E4BA8D7FC58C828491 +84A8EBDB90B1167333987F7D42A76E9C5C5A8429E1CACD4206D312E9CA60D7E0 +6E906270BD9F42EEE618B7F5CC9ACBE1FCDB7E7C02D756FBDCA1E23E47BCF2C9 +6A9C58E53950DB59E43228DF2E17F44D2828175BF383AD06F224BB9C8438B787 +B5673AAE3772C82AC0ED80420E4BCD787F6C1979B339E271D9F3A9068D32ACDB +476F04E5FFEACBC97E5C7B8E2229F94F3B360D1F7D0B7CE61AEDAAEF98864CB6 +CD1339FB5894E7A3752963AA6043403EF01422549C478F514629E5A25C4FDE51 +CB19068F183D547C8A109854E67074DD421CDC878BB48835AF0D965A0FDFD392 +847AE57C85675CF04BFD1410B56E616F68C399DAD07C9A198489AA1D0FA3717B +F3CD52E7FC86C8FFE001893AA6D9E4B7582ACD74AC46BE3E8161DEF949C13FE2 +F29D25BC8614D6C29F336C5E9F60656D2F7F6666A132347F5F471F11393C9873 +6262C0F79D55A0857D36058B06F3AABB121CA1540BA17F0A43DF8A4826C67875 +5F62A3B464A0300513DB48355B3D1870DC28137B05A079E7C728D8AE7462A5C4 +D2D09AC4B8DEDA847358A6856E3D6F3B11C1F343EA1AB3E596E20FDCE0830DD3 +016CB7301921FBD57FB36791D959D7D753D299285497CD3FF06B9FBF62FB1396 +CF5121199EB486424448B45EDB617EDB931969D35B7492B339AF758E0458C527 +D07286045CE90BA9685C38C23AE0E328D4FDC5C2E8652C59215D05298EF3AF28 +5D1905BB1471ED972022B4D84CF007C1D9B1D62815143BF43B1E4E2F9DD0328D +F38D31EEB4D23008289268A5885285EB671AFC98228DC94089124FA93E272C05 +50DB0509197D7656C887B7E0178ACC328E3FE36687F73F6E363A2CFAC2670653 +756797F6518CC0653A84BD915B7BDD4FCDAA5568A68ED3060B489924057FD0AC +1A617DBB69FC042B9BA407139ACECC6BA9E7A28221D26E54B1AB1EE6227AD836 +AE74E7809429D6D8774965604AF8971B3B95C979ACEE908EFED5DDB3CC116A1D +EE00A4165D7467E6E42A4C0D2DE72EE690D4A8E518B9E9A9551110A5D11459CC +68FBD07385D092561C228DF2784BABC30FBB94851B343EDBB40D23899DCE526A +1385533CE7F61B975686F6A58AECBE0C064E53C9993747EB6EA1C03863D75335 +9D618D6726A199D6F49F0BC19BBF03461B3FBDE2FF0F319EEC1A563B7F5DD72F +010AB26A0A8984BAA20506F412497862C3228D8730FA17B0E5379F10B882F7B6 +5BA35297C43859075E2C815D0631D83C7704DA8A7CA576E19877A8E6F294A1D7 +B48671C83AE0A97119D5C3D91C5D9203574FCAEDDFF997C84A6E6CB5BDD3ACD5 +FFC200F50229116CA9D17A3F9EF5C4B933AC28FCC8417193FAEB5C3C281AA0D9 +CB699FF1AAE89864854FD614DA061806D8BE8E768B3977E907A2215E8192D48B +0108F89C1B4A69E0D46B046205D77C7DE68D63399B6609837F330559173C219B +FE2964EE88A9D4BDA447E6EC32B154FF2E6B2AEC4D5D68E2D06693AD3A8764E2 +B33EBAE73DA62E20A5EAF90DBD5E91E36D15DF5DE0F7A750D7F9C5CC23428BEB +9975AED73D37681224C6347530D36C171F9F1C20251B5028FD55EE47DE935442 +EC909D4C3F11F2B5C337A9DFF6CB01418A3AEF4284F14D633828F42340AE663B +AEB2E8EFA8B07CCB3D6BEDD0294DC87AC15C2A1C3B3B53DFDD04374BE6E16AED +45A005180FBC22611262D8C468450616231B64293151532450CF54E76AAEC889 +116A37133BC43D2732CA86B2C644A3F9E3E55D3F0EB623B15A3402CD44963BC6 +78B20A1053DF478CC8C74BCD429F565DF55E1995E79BE4D72095DE8FA4AC2666 +7010306B78477C86508827A66C33F5F2513DB6419BF50B4CE3E86F8B97CE3044 +84DFD1FD5394887B86C1B167236082180B0E8F37EB73F0127EF5C35B9221FB2A +BFFD47CA9D937B791474D59C72624DB04964F6E8161C37077D88E47925C53D9E +3299AEE8EAEFCD13C368F6B85A3C3646384E0CBB4F4E0E017C287908392C4937 +41FCE7B58EEE6BEA1AA8A1BB60B82F106BA6AA34FF28658B0CD8E2EF05B04E21 +7552EB4004793B7B27DEA9C550385ED2E451722C35C283638E256D8E2FB255AF +7D00FE63D91DA29A65059FA96F11CA784A1B28E921ABD9FE679A182B64188C80 +D9BEB3691A4C9B483E10ADE9AB01D13A79E49E0B2E09462F653C777FBAF90F95 +A978A7B4EB650EB336437AD8F8675B0A7DFAE7B57BADEFE487AABBD4CCD2C0D5 +E7589EFDBC36FE7B16A0E0DAD13A4A429A3EF89AEF4305739A264961CD68CD15 +8C48B8CA7FC615D308C6B0CC083677DCA62E2F85B66F8A744055EEAC55567582 +41144955F968099B95B21D5C87F53EB30164B6DDA6D3380E39937DB020347079 +78E0263555882737220697982B3F916A3D2D3FF7C2C38C0801CB1FB5B52711D2 +1ACB9671D1EDA6F1ECC52E589A44B6B56A527E64FB8F89C6E8812C6005E3CBCB +764B0296A00B98802F0A5C3804E95F90306A7424065EA762732DA4D70CB05C0A +CDCAF8C0812DB7A00CB8D385457BF484A63C8AA561D16BC283023E6908B06921 +BE565026A59801988F1D7B7935ABE47D7B1E552E87BFD6C0E6F444D4665E3690 +AB86E9501875D208CE4F974AC7B39E07508F0DB2C082ED13FFE3652D730C4BAE +B264311C2DC30D971B5ED2396D232B84B32ED5A458EEE3D96FBE0E6B57BCF5AE +AB8B92B6BABFE29763DE0ABBCC4E60AC84D15B59626B835BF310C71FDA86F943 +8E28EF5982339BC409A2A3526C54D0A5A09162F15E2099A82890D12385AFEE77 +EF924D4B32DB34F226AA7F576A1457ADEBEE2C3DF0A232A4C117E00F401689CB +C3E4909AABCA8ED1265030CBA8C2EEA6FC3EAD67301BBE5F73080561FDC9AD29 +CDD57F38F01650E8A4D9FC522FFCE948B5EF65F0C5FD5EF33E025C81E446C186 +3C4BB1ED25465B41FAD6506310CC7E57E91EEEB09A45E506B56B79FC8635AC14 +81FBBB90E8C70355F9D4D1E4CD68A8BD4EB2BFEF6FA2437325480C5E8C1AE66A +DB02BB80DBBF329BB527B45F2BA89EB463F85AD9CE86D0AF46C97F3DA7911A0C +8803C1B03AC9D4BF9195C8FE90719A22BF9188E986E62BC9AA7886EA7D8AFD9C +D52588D561548D4C40C08F3451CC710E0B5AFDECB719F31C58AC28877F59E4AE +5D778B9F4747E96D7962FDD6DA24D3E0C049D13571DF921634F0D3B116C96741 +B94D98DBC0556FFC528DA41C5A5EFCFC0608F4F530AF714A02F9D2D324B339B9 +AAE949 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 39139632 55387786 1000 8000 8000 +(F:/MathematikFHTW/2dgrafiken/2dgrafiken.dvi) @start +/Fa 205[441 441 49[{}2 774.872 /CMR7 rf /Fb 134[543 633 +3[400 1[499 2[537 664 4[381 3[515 576 2[585 21[940 15[307 +307 58[{}13 1106.96 /CMMI10 rf /Fc 138[615 430 5[615 +2[584 26[753 27[553 1[553 553 553 6[430 430 40[{}11 1106.96 +/CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 8000dpi +TeXDict begin +%%PaperSize: A4 + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 11001594 0 11001594 + 3150 -3150 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul add +dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave +w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +128.03734 0 0.0 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq false and exch 2 lt true and or { /viceversa +0.0 128.03734 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 128.03734 def /dT 3729358 65536 div viceversa +{neg} if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { xStart +} def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke } def /subLSstroke { 0 setlinecap +stroke } def 0 dT MaxValue { /cntTick exch def logLines { gsave 1 10 +subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def x abs +MaxValue abs le { x minTickline moveto x maxTickline lineto } if +} for subTwidth SLW subTColor subLSstroke grestore stroke /dsubT 0 +def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def subTNo +1 sub { cntsubTick abs MaxValue abs le { cntsubTick tickstart STsize +mul moveto cntsubTick tickend STsize mul lineto }{ exit } ifelse +/cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW subTColor +subLSstroke grestore } if gsave cntTick tickstart moveto cntTick tickend + lineto Twidth SLW TColor LSstroke grestore } for /dT dT neg def /dsubT +dsubT neg def 0 dT MinValue epsilon viceversa { add }{ sub } ifelse +{ /cntTick exch def logLines { gsave 1 10 subTNo div 9.99 { /dx exch +def /x cntTick dT dx log mul add def x abs MinValue abs le { x minTickline + moveto x maxTickline lineto } if } for /dsubT 0 def subTwidth SLW +subTColor subLSstroke grestore } dsubT abs 0 gt { gsave /cntsubTick +cntTick dsubT add def subTNo 1 sub { cntsubTick abs MinValue abs le +{ cntsubTick tickstart STsize mul moveto cntsubTick tickend STsize +mul lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } +repeat subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick +tickstart moveto cntTick tickend lineto Twidth SLW TColor LSstroke +grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul add +dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave +w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +0 128.03734 0 0.0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq true and exch 2 lt false and or { /viceversa +0.0 128.03734 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 128.03734 def /dT 3729358 65536 div viceversa +{neg} if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { yStart +} def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke } def /subLSstroke { 0 setlinecap +stroke } def 0 dT MaxValue { /cntTick exch def logLines { gsave 1 +10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MaxValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for subTwidth SLW subTColor subLSstroke grestore stroke +/dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke +grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick tickstart +STsize mul exch moveto cntsubTick tickend STsize mul exch lineto }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart exch +moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore +} for } if end + +@endspecial 1600 +-2793 a Fc(0)1600 -9092 y(2)1600 -15391 y(4)2873 -1440 +y(0)5746 b(2)g(4)3150 -3150 y + tx@Dict begin { 48.36957 -22.76227 } PutCoor PutBegin end + 3150 -3150 a 385 x Fc(1)p +Fb(:)370 b(K)79 b(oor)31 b(dinate)3150 -3150 y + tx@Dict begin PutEnd end + 3150 -3150 +a 3150 -3150 a + tx@Dict begin { 136.57324 0.0 } PutCoor PutBegin end + 3150 -3150 a 2834 -2911 a Fb(x)3150 -3150 +y + tx@Dict begin PutEnd end + 3150 -3150 a 3150 -3150 a + tx@Dict begin { 11.38092 113.81097 } PutCoor PutBegin end + 3150 -3150 a 385 x Fc(2)p +Fb(:)370 b(K)79 b(oor)31 b(dinate)3150 -3150 y + tx@Dict begin PutEnd end + 3150 -3150 +a 3150 -3150 a + tx@Dict begin { 0.0 136.57324 } PutCoor PutBegin end + 3150 -3150 a 2859 -3019 a Fb(y)3150 -3150 +y + tx@Dict begin PutEnd end + 3150 -3150 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.1 SLW 1 0 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 85.35823 0.0 0.0 /Lineto +/lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } +if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 +sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos +add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add +y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /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 0.1 SLW +1 0 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial +3150 -3150 a + tx@Dict begin { 85.35823 -8.5359 } PutCoor PutBegin end + 3150 -3150 a 2609 -2995 a Fb(a)3194 -2829 +y Fa(1)3150 -3150 y + tx@Dict begin PutEnd end + 3150 -3150 a 3150 -3150 a + tx@Dict begin { -8.5359 85.35823 } PutCoor PutBegin end + 3150 -3150 +a 2609 -2995 a Fb(a)3194 -2829 y Fa(2)3150 -3150 y + tx@Dict begin PutEnd end + 3150 +-3150 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 85.35823 85.35823 -5.69046 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor [ 5.0 3.0 ] 0 0 add dup 0 gt { /a .5 def PathLength +exch div } { pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get +/y ED /z 0 X {add} forall def 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 /z ED false X { z mul } forall +X astore {0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse +setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 85.35823 85.35823 -5.69046 85.35823 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor [ 5.0 3.0 ] 0 0 add dup 0 gt { /a .5 def PathLength +exch div } { pop /a 1 def PathLength } ifelse /b ED dup /X ED 0 get +/y ED /z 0 X {add} forall def 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 /z ED false X { z mul } forall +X astore {0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse +setdash stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 88.20367 82.51277 99.5846 71.13185 /Lineto /lineto load +def false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length +0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.8 SLW 0 setgray 0 setlinecap +stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.8 SLW 0 1 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 88.20367 82.51277 82.51277 88.20367 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +0 1 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.8 SLW 0 1 0 setrgbcolor /ArrowA { moveto } def /ArrowB +{ } def /ArrowInside { } def [ 88.20367 88.20367 82.51277 82.51277 + /Lineto /lineto load def false NArray n 0 eq not { n 1 eq { 0 0 /n +2 def } if () length 0 gt { 2 copy /y1 ED /x1 ED ArrowA x1 y1 /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 /Length x2 x1 +sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.8 SLW +0 1 0 setrgbcolor 0 setlinecap stroke grestore end + +@endspecial 3150 -3150 a + tx@Dict begin { 93.89413 65.44139 } PutCoor PutBegin end + 3150 -3150 a 385 +x Fc(Punkt)3150 -3150 y + tx@Dict begin PutEnd end + 3150 -3150 a 3150 -3150 a + tx@Dict begin { 91.04869 54.06003 } PutCoor PutBegin end + 3150 +-3150 a 277 x Fc(\()p Fb(a)4165 -2707 y Fa(1)4662 -2873 +y Fb(;)184 b(a)5738 -2707 y Fa(2)6236 -2873 y Fc(\))3150 +-3150 y + tx@Dict begin PutEnd end + 3150 -3150 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung01.pdf b/2dgrafiken/VektorenInEbeneVeranschaulichung01.pdf new file mode 100644 index 0000000..18e11eb Binary files /dev/null and b/2dgrafiken/VektorenInEbeneVeranschaulichung01.pdf differ diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung01.pst b/2dgrafiken/VektorenInEbeneVeranschaulichung01.pst new file mode 100644 index 0000000..4ddfb41 --- /dev/null +++ b/2dgrafiken/VektorenInEbeneVeranschaulichung01.pst @@ -0,0 +1,33 @@ + \begin{pspicture}(-1,-1)(4.9,4.9) + %\psgrid[griddots=10,gridlabels=0pt, subgriddiv=0] + + %%%%%%%%%%%%%%%%%%%%%%%%Koor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(0,0)(4.5,4.5)%Schnittpunkt, x0, y0 x1,y1 + \rput[l](1.7,-0.8){$1.\ Koordinate$} + \rput[c](4.8,0){$x$} + + \rput[l](0.4,4){$2.\ Koordinate$} + \rput[c](0,4.8){$y$} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor / Gerade%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=red, linewidth=0.1pt](0,0)(3,3) + \rput[c](3.0,-0.3){$a_1$} + \rput[c](-0.3,3){$a_2$} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%Hlfslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](3,-0.2)(3,3) + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](-0.2,3)(3,3) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pfeil%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline{->}(3.5,2.5)(3.1,2.9) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Kreuz %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=green] (2.9,3.1)(3.1,2.9) + \psline[linecolor=green] (2.9,2.9)(3.1,3.1) + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Beschriftung am Pfeil %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \rput[l](3.3,2.3){Punkt} + \rput[l](3.2,1.9){$(a_1, a_2)$} + \end{pspicture} \ No newline at end of file diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung02.eps b/2dgrafiken/VektorenInEbeneVeranschaulichung02.eps new file mode 100644 index 0000000..68d8088 --- /dev/null +++ b/2dgrafiken/VektorenInEbeneVeranschaulichung02.eps @@ -0,0 +1,3040 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Fri Jun 06 14:01:36 2008 +%%BoundingBox: 85 732 217 866 +%%DocumentFonts: CMR10 CMMI10 CMR7 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2008.06.06:1401 +%%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 +/p{show}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 10 2008-01-18 13:31:24Z herbert $ +% +% PostScript prologue for pstricks.tex. +% Version 1.03, 2008/01/01 +% For distribution and copyright, see pstricks.tex. +% +% +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 tx@Dict begin +/ADict 25 dict def +/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 +%----------------- 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin + /@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 +% +/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 + /b ED 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 { +% aload length 2 div dup dup cvi eq not { exch pop } if /n exch +% cvi def +%} def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +% +/Grid { + newpath + /a 4 string def + /b ED /c ED /n ED + cvi dup 1 lt { pop 1 } if + /s ED + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if + /dx ED dy div round dy mul + /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 { /mtrx CM def T 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 +end +%-----------------------------------------------------------------------------% + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for PSTricks algorithm parser +% Version 0.01, 2008/01/01 +% For distribution and copyright, see pstricks.tex. hv@pstricks.de +% +%-----------------------------------------------------------------------------% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 +end + +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 7 2007-12-29 22:21:13Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.00, 2006/12/19 +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Herbert Voss (hv) - 2004/12/27 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +% +10 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [-571.5 -742.5 571.5 742.5] def +% /FontBBox [-1000 -1000 1000 1000] def +% See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch/.notdef put} for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 (a) 0 get /Add put + dup (A) 0 get /BoldAdd put + 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 + /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 + + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 7 2007-12-29 22:21:13Z herbert $ +% +% PostScript prologue for pst-node.tex. +% Version 1.00, 2008/01/01. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin + /T /translate load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + /next ED % { 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 +{ 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 { 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 { 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 +%! +% PostScript prologue for pst-coil.tex. +% Version 1.00, 2006/11/05 +% 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 +/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 { + /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 } 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: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.20, 2008/01/01 +% For distribution, see pstricks.tex. +% +% HISTORY -> see file Changes +% +/tx@addDict 410 dict def tx@addDict begin +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 + 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 { % c m y k on stack + 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 { + 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 +% +/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 +% +end +% +% END pstricks-add.pro + + + +%%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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.84)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E +1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86 +144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A +DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364 +56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A +8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF +3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E +BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18 +BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7 +25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991 +EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663 +F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4 +18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1 +A23F469A8447C1868C6DEC2C3C2BCFC691867E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 80 /P put +dup 86 /V put +dup 97 /a put +dup 101 /e put +dup 102 /f put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 111 /o put +dup 114 /r put +dup 116 /t put +dup 120 /x put +dup 121 /y put +dup 126 /vector put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667589EE6908966A17DDDE40C2FA52A4C9DA871E90BC37AE8F3EE3313C +27F8AC7F2682739C20889E85105CF10A10F928BC66EB5790EECA7BDF19E991AD +5EA8A95F6D9B54D455EE368F1C6975DA165A39306CDFD858660300F4BCA6DFE9 +F3D1EA52E75678472B8909B657CF8E6340273BD7FF70A03C4406A88EBFE23749 +4C939A4B0A307804DBFB9A8596EDA44BCB0F85ECDF03280E91E180E1D41FF5E7 +05D96349D2F7C7AEB8A375EEE5C75929A39570B1C8E60DAFBE394AE2E2A79F07 +A9437C547177DCE000FC7BABE4B14C2AE2DB39D948BB268FB742902209098ACD +6077A009A01F5971EEF64351866952DAFBD08F41C2716C85E553D1BD38AD04AB +44A82A3D9B126FA60EA47FE51E6583BC16BA0CED16FF8A401F284493668FE2C7 +D40DA88B36B96D67E3D63FDEBA80F6C1DCA71B8244F9EA3DECFB9B7EC83E1CAE +547E804527315482F2D43A84306A054A0F13FFD1850EC8854FE8FBBA6EB9A711 +9007FD28359772E2B9173942A02684A8DFBE224EB43FC6C920F31D0AD6782B3F +5612A2B3D31C7BA71C2701AA395F4D616D4EC5461B68B3979CD8ECC13BBEF603 +D714D5CA9341D79F2AB6E200CEC023020841B2598B2489C4D54FD35753081ACD +A3DA6F6AFA5CE44B46391FCE0E84F4E05F6F343B3F0501E546FD1AAF73CD8D64 +0A997E237BC5EBE85B1A4ADEE6ABF5CB4566AD001ACC34FE95B8CBF74A67D943 +34F2AC6D7F5E327AC1336AB13A94DA916532D6D68BC5783A02DCB7DA158002A1 +615135483906B884DF3C115D3751002AFE38E2FA21678B40E26D26DA7C530372 +0F5489A88633E03555724710902A4C266AFAD5D1D9799BFC5191FAE942B6F85F +AA9B0D64AA11A2AFFD9040EF8C4881C0835A9BEAD44CFA9E079A03AD30F9FC4C +C85AD235DF9DE1080AF647426EEFE9B9C3FD737A9F6EC42C937EF3B055A5706A +000E5FB042B0BAA09F8BD8C0AA127858201575B1EEBE96B44999595FCE327665 +75C8F3B4676F633A9B8D05FC017BA5F38A7783493D301A4179E5DE643532E221 +EC2E331F7F7E00D6B18F74F6856A57C9833EAB5E8D41A0CFEB9E33ED1108A946 +5C2EEC5533B7D6A19AA54417F7E25671D199E0CF023194FD4DD5DD9C48ED8A6C +81658AB2C77CF24D3BFBDE9365252A37CDAC54DBCF106EABEAA18918E1566C9C +5553DCB2FB76D8FB46059B0BD7CAEE20CB1C6ADCEFA160E198398387331ADE14 +43BA2FFB3A315318335F12C0D6BDE8358EA092DEF5BDAC17AF1D1B691418FA9F +C0189D5C2F79F0F82EE9B468F891552BEED0203CF86A30163FDA23E7369D6776 +6A9CDEADC274CB28E506C22742195EE1957F64A3493A4211B98EF1051698173F +FEA93E1CFF4D95E573D17B6C14B06379E39A3700566D7F6750A0801F79BFB6E2 +4D2970DB0ADF42027C7CB28397E2CD289AE1955F486A37F45D0CCC523136AC3B +4F6B0A587A2A8EA3EAFECCEE8B8A3F23261EB07A03E753C06BC9CA4D8673E659 +81663A676D98274F2463E8DC2504257236BCA1EBB16601A0FA2C75FA6E3D6C5D +E14D2F4758F06250AF3BECE5AF1DF1D9E6EAB6CD1E895373C2FE9AE6F5AB18DF +6BEE8D7C2014924C3C917489FBFB08147A9AC82A31E955F966CCF365C6DF68E5 +1CA81DFC7033407D7EF14F4E4D430F3FF165E328A07B88B765CF6D240C73515D +B48AE1DCF2BA20FD469EEA4C078B4946B57A7A0D57A999436F8CADB99B712476 +11AB2D53D1ABDA7EF74F699497A33CCE4AD1EDD01F7E6C36284624AE2E57FF38 +A2DAA38957B7FDCBBB0F9FB57657C58258FBC76592D9B43EE95F22B8B7013946 +C2863EE1D899DEF216A47DB76E4963F2FFFF16CBC349BCDCE7FD4FBC9B9368B4 +9F2427A97B35A947F37B4D5A77119D8EE4178B5E859A4AF3C735D1FF334CE0FA +7EF6B5FC6D76D9ADBE79D311C6BD8BAE9AA6E696084DB683E26EAD896DB855CD +5044B21C9DF771987CF2BF1E55333D1900F6E31641F09A17193EEAA11A360C66 +EA7CDCF4EA77313C2E2E0809739806474A3A92F382299BBBE9CE8297252103FD +8A2D9B195D902A3D54BE7F6DF07DD48F3126C67AD125FC4E85B0898CBD739214 +02EA8FCC966C1AD7211133E56A4A3B2C377ECB338C7374A04B3AFA2F21954D7E +B56609A8F44E871B7278F69EC9A03ADE5D1CD3EA049261A8CCE41CB1D58F8798 +9FECB6F0ED59EE13F50ECA4F11594196065377D5A2294B896E1D371934C0F730 +BB69DC24BE76CEB640271BC85F5B93C8AEE60107AD3978C1B08359422475F744 +C76488486DFAAC2165481A1011B3FD7DAE0E860B13A8B33ED7EFF24E5D966259 +07ED8302ECF1849899A45CFF3753A7F38282956344AAD703B27C0F9622885C21 +C36213D22E997B556E2BB1E8E4C24508DB5E3718E98A449CAD87AD674B6D8DE4 +4D4576F3E526DCBD3B8C41CA0FC11931EE1E01C02E337E2BD1C16ED8686087BD +E908BB9BDD668A60198D47C713E877934DEA43C763CCB5716121CF1A6E4B618C +89F1CF331627F8E245878484D58D09AA4A7F4F40CB3BE4E2627C6BEB70BFC692 +1004781F39BB4CC4634B47C5A9B45DBE4DB42A9345B45DFEE664E1BD83451B9D +69B9EC1F18439140A641B5940BEC5BE3D113DB988D1F98E4C94A14943FA6FA1A +9FB22C7E79BE5E11F6EF6A87E2F7D79A16C58868A24CE5981F8F792F0CBD35F0 +865DFFB82B3684978DB8211EB1906F21984F0F2B8AA34584629D6B93A45CC547 +8CEA7773520258A5907794D8C84FDA53079ACB3ACC1E20188D4C4C838A9A4A1D +96394E8B0A29618771C367190DF953113C6021390224676851491A578203EB2D +B7BAA0F8D8CAA82A3E077A9F423EEDE5A1477B73476F3E6C017C487C3A3386A7 +F36F05413D4B9F7FA741A9AF12DA5DC3DD760FA4E11B632ABB8B197A246D340B +E0924B6BD7A0B0A353CA8BF99913AB02527F6195A3139FB36FCE034D6E65951A +DDA9453A812C19CFA26AB0B45F411E75954E50C41D276138D7F9A2FC4383D8CF +E80B6FDE131D586794B01A4B1C4F3683667D6D2500CE68484CA230BA41131DA9 +F6111B1045C21F901893E82B3575FF5DE4E55F61DC3C7D2ABA1AAC5FD81A3982 +0F33E86C095C26EC6BCBCCACD78BFD4F953469AFBC44BDC3B19355A56E8B1C59 +33C0E145D52E78C1853220D0D7C826F2F40428E6EA3EA17FD2F4AFAA299F3C50 +A817D52D4F64C4BA64CDA0EC8B1EB87D761FCC533E85E165A384D2391596D050 +B1DB03EC39FFEE5372ACA5CE05815021B876E10F0625FDF782079298D18BE163 +5BD374C5F677DCE46D563B36DB5E87D6E5BC3A27DE99E764001EEA04329EAF28 +E92CCA0955ED2B10D9125096AF27B65D0869969220A8CA4F05A41A67AE37324D +71F84F46A8CD14779B52E88F07F3EED34A036E5A7D651388DB7244BE3BD284C9 +B2ACFD0518A0673146AF72EC8CBB8DD10FD3EB4C803B495CE3523F648E0B2266 +ACEB63BE045939CBE1D204D60D37DDFD9D5839B006F33C506506658C16DD4F6B +FC0B30518A6E9ADF63CD8162558A126EBB9C6A428A8A333B7B9D176EBE2121BA +F2F34DAF60A4B073F2561CD51627815484DCADCEC2B55014B78D751EB2637487 +7D65129EB16C1B6E434E8923ACC9206945F093516AD212200F8302A56C38C37F +6A432C9774AD7B396BAB391BCE4DEA9E35705609393258005797F1DC477642B1 +1E9C8E29F968E048E9F7D084934E5B627C964CBC7E9DEB54E272B44531C93686 +85224E2801FC62B99E06D3418504BD3C1BFBB35FAAC5C92F3AAD1C079E062C62 +78EE26D1ECD2F6C7CB7722CA1992399ED773220FF10D1C784227A4FB806A850B +894692278CAA363CF9B21C91E331C6C826673753C0AE45E8609BDE4EAAC055AE +0DD224C0122420A9F371B0F6777388E5FD1014D24FE68CFD9362BEB66991E8E4 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 34 /quotedblright put +dup 40 /parenleft put +dup 41 /parenright put +dup 48 /zero put +dup 50 /two put +dup 52 /four put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390F0303E36E09AF75 +2659C90B837112B11D993027CA8BA9B5720A124F63E7DBABB2F0303A6D876536 +B55707F5C2F3D8090BA7F3C3776E669E5B78D3C03B6E07436B6560B5906E0348 +19F295F12536FFD558FBA1AB51DC370B95A56E0B988CA064E0AC7F9101EA7481 +AE0BE8FB1A69E4B782DE4E821305F50FE95C34D782990F0D0B632FC12B1E324F +1710B2002E0F3F132ED94495BC1892BB688C4FF28BEFE906F5D076592306D8BC +30833BD11CF1198C51BE09B0721EC7211F164A664AB4C7C6FE7EA206A7ABC433 +66FAAD8EF6D6DD77674A3480CBFA62794496BF327BA0BCF7739D813518451BBF +41F9D9F03F1466758C192E2BC0FE74616331609D6DD131325357A24634E1B3FB +059814C123CA62478537A6492B618815B78DB298E699E6064DCF24EEDD570C6D +62190EB9D3874C0A69B7FE6CC9CF1C0C94CA8B063A6E51A2EBF371201F6910F3 +50B8EF85203E4DAB28B15D18FE1EA4974CA1F2575D5BFE9A919CC65AE6B558A6 +FFD7EBFA6010495B5929C2756D0A66FA495A3FA9303D97BAC395E479BEDA98CB +EC189F19FDC65CC2FE6707434F5BA2D2A2F49AF51E82F0E31DA4AAC638C79B41 +F14F03B65974A356C81EAC851CEDEFB4F8E7BBF3F14ACC381ED91B14D6B28200 +B21B2A3381BCAD4D00BF47A0D33E39B8388F68FDA528880BDCDE1E1A94E35994 +6CF6FA16128AFFD3ADB321867FDD8AB0FC275B5952B67DFA872BCCCDA20C95D9 +7596BF28FFEF77F9833B97A3B8FAA2196B1ADA466F9058BEF5148A1F5144651E +82CFD354FCF5A403E8ABE8B5F4BB6FB701F701A9112128766366CD7EB57C9A78 +8B1E56E1434B19D9325BC16B6E466759CA32FD013D7F28D510035A7372EBA710 +B9F50951D1463F823707C82410C7CF08C5FEC19CFA7754CC8EAD78F019F25CD1 +1DEB4D9CB7DF111E8BA36D08394020327C9159A85D7E065D8474DFC5FD5B57AB +3504EE475C07FC6F91BAA906E83D63AAB28487C4A5014B27616879017730552C +617205CB7C99DF26A7E5D48AA6BA5434DE645476CCD9AF0D08AC7E41B3B1AC6A +23B0C8FE22B81F800B442F51C77554FB14E7DCDAAB37D7A3EEAA17160BE53559 +C04026757EB7DA93B77DB0E1A09A3EBFABE1CD2E255B0F744705440769E637A9 +8F2E59FB77C1ACC26022EAE9059C03514991443FF17885ED407C78BF70F905F9 +31DB8EE4EB818BF887D2553610F13FBED5BB79DA17871ED4D35765B7A38598FF +BA01AAFE068A410FA8AE65A2053E501F77AF549276C88DE433371F5537DF159A +5091641221A399FDD8C1B265DB2AF4728CC6C89BBD8A8F3568501E4B79BAE17B +D056A96BB83523C21412D6759AABC2DDEB8ABABAEC257CAA18EE3B0A81F1EE61 +8878E9E13CE0E6561F6DCD1F53F754E5FA01667923757598E2BFEE0A6A0595CA +D4DCA89804B9EA28EC62D81159C7D60118523BB2A22FD01048E920FC160AE8D6 +09E4AAD5DD5E76905BAA6E0E19F3754F278E6810A5EECA5A3B28278BB34A8DAF +E6161DC57931C7C8F99E209F7DFC6A8D5FABFA7E740102074FD19AAE364B2BEE +48A693DD4191BDE4AFCFE3E6D1A5CC66B2E0F3C52B64FE260CDFD4EC61CAF27D +724675C0642B3E504443360B2BE74025A25C483CF720BA15345748D90C2F0507 +B770AEB3E8D16CE77F94EFB6C1082A5E302EE3036DAA842FD9BB7E6F4C3E14F3 +F0F552A9B9BD29A0768D5DF6E0E8029C85E797C783C8EAE5FDE00ABAD0975F7C +699FA87C1130396229CD77C4470A5E809B5C03284F6EBB74CFAEDDB817E03B55 +B4F0C629FF0346F603FBBF4ECF681E59B664A2F6A31BB34A481264DA21B159BD +F0D30A0B3C2F5615B09FBDD289B7FBA29C23656E9D4FC1377800E082CB8750D2 +18D6D3B6F4411521FFAE49C4508F74C6009CCF780069F83675FFEA97B90F9244 +39262FEE86D47E33C238165C1783BC576EC29ACCCB7716288C3F23F711252DF4 +54932173444DB2FF1B623546B7D5DC3D5E95228EAE425693AD73D06C398C303A +F99D294B31199DDD8789228A7028F7D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (2dgrafiken.dvi) +@start /Fa 205[33 33 49[{}2 58.1154 /CMR7 rf /Fb 129[42 +4[41 47 3[30 1[37 2[40 2[25 43 1[29 2[41 39 3[44 10[48 +5[53 80[{}14 83.022 /CMMI10 rf /Fc 203[42 1[42 1[42 6[32 +32 5[42 34[{}6 83.022 /CMR10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 11001594 0 11001594 + 236 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +128.03734 0 0.0 0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq false and exch 2 lt true and or { /viceversa +0.0 128.03734 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 128.03734 def /dT 3729358 abs 65536 div viceversa +{ neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { xStart +} def /MaxValue { xEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 setlinecap +stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MaxValue abs le { x minTickline moveto x maxTickline lineto +} if } for subTwidth SLW subTColor subLSstroke grestore stroke /dsubT +0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick tickstart +STsize mul moveto cntsubTick tickend STsize mul lineto }{ exit } +ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW +subTColor subLSstroke grestore } if gsave cntTick tickstart moveto +cntTick tickend lineto Twidth SLW TColor LSstroke grestore } for /dT +dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon viceversa { add +}{ sub } ifelse { /cntTick exch def logLines { gsave 1 10 subTNo div +9.99 { /dx exch def /x cntTick dT dx log mul add def x abs MinValue +abs le { x minTickline moveto x maxTickline lineto } if } for /dsubT +0 def subTwidth SLW subTColor subLSstroke grestore } dsubT abs 0 gt +{ gsave /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick +abs MinValue abs le { cntsubTick tickstart STsize mul moveto cntsubTick +tickend STsize mul lineto }{ exit } ifelse /cntsubTick cntsubTick +dsubT add def } repeat subTwidth SLW subTColor subLSstroke grestore +} if gsave cntTick tickstart moveto cntTick tickend lineto Twidth +SLW TColor LSstroke grestore } for } if end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.1 SLW 0 setgray /ArrowA { moveto } +def /ArrowB { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul +add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if +gsave w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow } def /ArrowInside { } def +0 128.03734 0 0.0 ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd +exch def xEnd yEnd L /yStart exch def /xStart exch def 0 setlinecap +stroke stroke 0 dup 2 mod 0 eq true and exch 2 lt false and or { /viceversa +0.0 128.03734 gt { true }{ false } ifelse def /epsilon 0.01 def /minTickline +0.0 def /maxTickline 128.03734 def /dT 3729358 abs 65536 div viceversa +{ neg } if def /subTNo 1 def subTNo 0 gt { /dsubT dT subTNo div def}{ +/dsubT 0 def } ifelse -4.0 4.0 /tickend exch def /tickstart exch def +/Twidth 0.4 def /subTwidth 0.2 def /STsize 0.75 def /TColor { 0 +setgray } def /subTColor { 0.5 setgray } def /MinValue { yStart +} def /MaxValue { yEnd 1.5 2. CLW mul add 1.4 mul viceversa { add +epsilon sub } { sub epsilon add } ifelse } def /logLines { false } +def /LSstroke { 0 setlinecap stroke stroke} def /subLSstroke { 0 setlinecap +stroke stroke} def 0 dT MaxValue { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MaxValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for subTwidth SLW subTColor subLSstroke grestore stroke +/dsubT 0 def } if dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT +add def subTNo 1 sub { cntsubTick abs MaxValue abs le { cntsubTick +tickstart STsize mul exch moveto cntsubTick tickend STsize mul exch +lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat +subTwidth SLW subTColor subLSstroke grestore } if gsave cntTick tickstart +exch moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke +grestore } for /dT dT neg def /dsubT dsubT neg def 0 dT MinValue epsilon +viceversa { add }{ sub } ifelse { /cntTick exch def logLines { gsave +1 10 subTNo div 9.99 { /dx exch def /x cntTick dT dx log mul add def +x abs MinValue abs le { x minTickline exch moveto x maxTickline exch +lineto } if } for /dsubT 0 def subTwidth SLW subTColor subLSstroke +grestore } dsubT abs 0 gt { gsave /cntsubTick cntTick dsubT add def +subTNo 1 sub { cntsubTick abs MinValue abs le { cntsubTick tickstart +STsize mul exch moveto cntsubTick tickend STsize mul exch lineto }{ +exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth +SLW subTColor subLSstroke grestore } if gsave cntTick tickstart exch +moveto cntTick tickend exch lineto Twidth SLW TColor LSstroke grestore +} for } if end + +@endspecial 120 +-209 a Fc(0)120 -682 y(2)120 -1154 y(4)215 -108 y(0)431 +b(2)f(4)236 -236 y + tx@Dict begin { 136.57324 0.0 } PutCoor PutBegin end + 236 -236 a 212 -218 a Fb(x)236 -236 +y + tx@Dict begin PutEnd end + 236 -236 a 236 -236 a + tx@Dict begin { 0.0 136.57324 } PutCoor PutBegin end + 236 -236 a 214 -226 a Fb(y)236 +-236 y + tx@Dict begin PutEnd end + 236 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.1 SLW 1 0 0 setrgbcolor + /ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 85.35823 85.35823 0.0 0.0 /Lineto /lineto load def false +0 setlinejoin 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 /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +1 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore +end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 85.35823 85.35823 +-5.69046 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.1 SLW 0 0 1 setrgbcolor /ArrowA { moveto +} def /ArrowB { } def /ArrowInside { } def [ 85.35823 85.35823 -5.69046 +85.35823 /Lineto /lineto load def false 0 setlinejoin 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 /Length x2 +x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ +/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 0.1 SLW +0 0 1 setrgbcolor 1. .setopacityalpha [ 5.0 3.0 ] 0 0 add dup +0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } +ifelse /b ED dup /X ED 0 get /y ED /z 0 X {add} forall def 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 +/z ED false X { z mul } forall X astore {0 gt or} forall { X 1 a sub +y mul } { [ 1 0 ] 0 } ifelse setdash stroke grestore end + +@endspecial 236 -236 a + tx@Dict begin { 85.35823 -8.5359 } PutCoor PutBegin end + 236 -236 a 195 -224 +a Fb(a)239 -212 y Fa(1)236 -236 y + tx@Dict begin PutEnd end + 236 -236 a 236 -236 +a + tx@Dict begin { -8.5359 85.35823 } PutCoor PutBegin end + 236 -236 a 195 -224 a Fb(a)239 -212 y Fa(2)236 -236 +y + tx@Dict begin PutEnd end + 236 -236 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ 88.20367 82.51277 99.5846 71.13185 /Lineto /lineto load +def false 0 setlinejoin 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 /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinecap stroke grestore end + +@endspecial 236 +-236 a + tx@Dict begin { 51.21501 65.44139 } PutCoor PutBegin end + 236 -236 a 21 x Fb(V)19 b(ek)s(tor)30 b Fc(\(")p +Fb(P)12 b(f)d(eil)r Fc("\))236 -236 y + tx@Dict begin PutEnd end + 236 -236 a 236 +-236 a + tx@Dict begin { 71.13185 54.06003 } PutCoor PutBegin end + 236 -236 a 231 -207 a Fb(~)-37 b(a)236 -236 y + tx@Dict begin PutEnd end + +236 -236 a eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung02.pdf b/2dgrafiken/VektorenInEbeneVeranschaulichung02.pdf new file mode 100644 index 0000000..3140417 Binary files /dev/null and b/2dgrafiken/VektorenInEbeneVeranschaulichung02.pdf differ diff --git a/2dgrafiken/VektorenInEbeneVeranschaulichung02.pst b/2dgrafiken/VektorenInEbeneVeranschaulichung02.pst new file mode 100644 index 0000000..3bcecdb --- /dev/null +++ b/2dgrafiken/VektorenInEbeneVeranschaulichung02.pst @@ -0,0 +1,27 @@ + \begin{pspicture}(-1,-1)(4.9,4.9) + %\psgrid[griddots=10,gridlabels=0pt, subgriddiv=0] + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Koordinaten%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psaxes[Ox=0,Dx=2,Oy=0,Dy=2,linewidth=0.1pt]{->}(0,0)(-0.0,-0.0)(4.5,4.5)%Schnittpunkt, x0, y0 x1,y1 + \rput[c](4.8,0){$x$} + \rput[c](0,4.8){$y$} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Vektor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=red, linewidth=0.1pt]{->}(0,0)(3,3) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Hilfslinien%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](3,-0.2)(3,3) + \psline[linecolor=blue, linestyle=dashed, linewidth=0.1pt](-0.2,3)(3,3) + \rput[c](3.0,-0.3){$a_1$} + \rput[c](-0.3,3){$a_2$} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%Pfeil mit Beschriftung%%%%%%%%%%%%%%%%%%%%%%%%%%% + \psline{->}(3.5,2.5)(3.1,2.9) + \rput[l](1.8,2.3){$Vektor\ ("Pfeil")$} + \rput[l](2.5,1.9){$\vec{a}$} + + + + + \end{pspicture} diff --git a/2dgrafiken/Zeiger_auf_Variable.eps b/2dgrafiken/Zeiger_auf_Variable.eps new file mode 100644 index 0000000..2fbdedb --- /dev/null +++ b/2dgrafiken/Zeiger_auf_Variable.eps @@ -0,0 +1,2441 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Wed Jan 24 14:08:35 2007 +%%BoundingBox: 42 716 102 724 +%%DocumentFonts: Times-Roman +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2007.01.24:1406 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.08, 2006/06/17 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2006/06/17 : - changes to the code (hv) +% 2006/04/21 : - Improved parser -> generic with derivative and translator into ps (dr) +% 2006/01/16 : - EXP -> Exp to prevent missmatch with pst-math (hv) +% 2005/09/28 : - rename it to pstricks-add.pro +% - add support for Gouraud shading (hv) +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression (dr) +% 2004/12/16 : addition of Sum and IfTE (dr) +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +% +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { tx@AlgToPs begin AlgToPs end } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 +/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 3.14159265359 /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 } + { tutu 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (ln\() StrConcat 8 index StrConcat (\)*\() StrConcat + 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 (*\() 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 3.14159265359 /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 90 div 1.57079632680 mul +} 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 90 div 1.57079632680 mul +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } 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 { 2.71828182846 exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/PI 3.14159265358 def +end +% END pstricks-add.pro + + +%%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 = "30 October 2002", +% 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 +% 0xD0 + /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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.83)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end TeXDict begin +40258437 52099154 1000 600 600 (2dgrafiken.dvi) @start +/Fa 133[37 1[42 51[60 55 55 60 12[42 42 42 1[42 48[{ + TeXBase1Encoding ReEncodeFont }10 83.022 /Times-Roman +rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 6526376 0 21555684 + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.56917 SLW 0 setgray 0. true 328.91364 99.5846 0.0 8.5359 +0 Frame gsave false 1 0.0 0.0 gsave 1 1 0 setrgbcolor currentrgbcolor +grestore gsave 1 0.2 0.2 setrgbcolor currentrgbcolor grestore 2000 +1.0 0. tx@GradientDict begin GradientFill end grestore gsave 0.56917 +SLW 0 setgray 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 0. true 81.94403 89.91077 7.96672 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 89.91077 80.80568 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 67.14848 7.96672 +43.24829 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +0 0 a + tx@Dict begin { 45.72427 78.24504 } PutCoor PutBegin end + 0 0 a -217 28 a Fa(0xA0000000)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 115.67392 78.24504 } PutCoor PutBegin end + +0 0 a -21 19 a Fa(x)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 80.51697 54.91357 } PutCoor PutBegin end + 0 0 a -42 28 a +Fa(24)0 0 y + tx@Dict begin PutEnd end + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 1.13791 SLW 0 setgray 0. true 242.98624 89.91077 169.00935 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 315.82562 89.91077 242.98624 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 315.82562 67.71767 169.00935 +43.81703 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial 0 0 a + tx@Dict begin { 241.47928 55.48276 } PutCoor PutBegin end + 0 0 a -217 28 a Fa(0xA0000000)0 +0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 277.51193 78.81421 } PutCoor PutBegin end + 0 0 a -18 19 a Fa(z)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 206.1847 78.24504 } PutCoor PutBegin end + +0 0 a -240 28 a Fa(0xB0320CAD)0 0 y + tx@Dict begin PutEnd end + 0 0 a @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale false +0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED +{ 0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow moveto +} def /ArrowB { } def /ArrowInside { } def 1.13791 SLW 0 setgray + /ArrowA { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul add +dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave +w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def [ 243.5554 42.67911 243.5554 21.62392 78.5294 +21.62392 78.5294 42.67911 false /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{ 0.5 } ifelse def BezierNArray n 1 eq { pop pop }{ 2 copy /y0 +ED /x0 ED ArrowA n 4 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat +6 2 roll 4 2 roll ArrowB /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 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 /getValues { ax t0 3 exp mul bx +t0 t0 mul mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 t0 mul +mul add cy t0 mul add y0 add 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 +} def /getdL { getValues 3 -1 roll sub 3 1 roll sub Pyth } def /CurveLength +{ /u 0 def /du 0.01 def 0 100 { /t0 u def /u u du add def /t u def +getdL add } repeat } def /GetArrowPos { /ende 0.5 1 gt {ArrowPos} +{ArrowPos CurveLength mul} ifelse def /u 0 def /du 0.01 def /sum 0 +def { /t0 u def /u u du add def /t u def /sum getdL sum add def sum +ende gt {exit} if } loop u } def /ArrowPos 0. def /loopNo 0.5 1 gt +{CurveLength 0.5 div cvi }{ 1. } ifelse def loopNo cvi { /ArrowPos +ArrowPos dArrowPos add def /t GetArrowPos def /t0 t 0.95 mul def getValues +ArrowInside pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 curveto } ifelse + gsave 1.13791 SLW 0 setgray 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 [ 108.68968 31.29819 108.68968 31.29819 +/Lineto /lineto load def 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0 setlinecap +stroke grestore end + +@endspecial +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Zeiger_auf_Variable.pdf b/2dgrafiken/Zeiger_auf_Variable.pdf new file mode 100644 index 0000000..a89182b Binary files /dev/null and b/2dgrafiken/Zeiger_auf_Variable.pdf differ diff --git a/2dgrafiken/Zeiger_auf_Variable.pst b/2dgrafiken/Zeiger_auf_Variable.pst new file mode 100644 index 0000000..ca03f63 --- /dev/null +++ b/2dgrafiken/Zeiger_auf_Variable.pst @@ -0,0 +1,24 @@ +\begin{pspicture}(0,0)(11.56,3.5) +\definecolor{color13f}{rgb}{1.0,0.2,0.2} +\psframe[linewidth=0.02,fillstyle=gradient,gradlines=2000,gradbegin=Yellow,gradend=color13f,gradmidpoint=1.0](11.56,3.5)(0.0,0.3) +\psframe[linewidth=0.04,fillstyle=solid](2.88,3.16)(0.28,2.32) +\psframe[linewidth=0.04,fillstyle=solid](5.44,3.16)(2.84,2.32) +\psframe[linewidth=0.04,fillstyle=solid](5.44,2.36)(0.28,1.52) +\usefont{T1}{ptm}{m}{n} +\rput(1.6070312,2.75){0xA0000000} +\usefont{T1}{ptm}{m}{n} +\rput(4.065469,2.75){x} +\usefont{T1}{ptm}{m}{n} +\rput(2.8298438,1.93){24} +\psframe[linewidth=0.04,fillstyle=solid](8.54,3.16)(5.94,2.32) +\psframe[linewidth=0.04,fillstyle=solid](11.1,3.16)(8.54,2.32) +\psframe[linewidth=0.04,fillstyle=solid](11.1,2.38)(5.94,1.54) +\usefont{T1}{ptm}{m}{n} +\rput(8.487031,1.95){0xA0000000} +\usefont{T1}{ptm}{m}{n} +\rput(9.753437,2.77){z} +\usefont{T1}{ptm}{m}{n} +\rput(7.2465625,2.75){0xB0320CAD} +\psbezier[linewidth=0.04]{<-}(2.76,1.5)(2.76,0.76)(8.56,0.76)(8.56,1.5) +\psline[linewidth=0.04cm](3.82,1.1)(3.82,1.1) +\end{pspicture} diff --git a/2dgrafiken/Zugriff1.eps b/2dgrafiken/Zugriff1.eps new file mode 100644 index 0000000..3094e7c --- /dev/null +++ b/2dgrafiken/Zugriff1.eps @@ -0,0 +1,2464 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software +%%Title: 2dgrafiken.dvi +%%CreationDate: Wed Jan 24 15:37:03 2007 +%%BoundingBox: 42 716 1774 2708 +%%DocumentFonts: Times-Roman +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -EPSF 2dgrafiken.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2007.01.24:1536 +%%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 +/p{show}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 +%! +% PostScript prologue for pstricks.tex. +% Version 1.00, 2005/09/18 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/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 +/Atan { /atan load stopped { pop pop 0 } if } def +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } 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 +/STV { SDict begin normalscale end STP } def +% +%%-------------- DG begin patch 15 ---------------%% +%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +%PathLength } ifelse /b ED /x ED /y ED /z y x add def 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 dup y mul +%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +%0 } ifelse setdash stroke } def +/DashLine { + dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse + /b ED /x1 ED /y1 ED /x ED /y ED + /z y x add y1 add x1 add def + /Coef 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 def + /y y Coef mul def + /x x Coef mul def + /y1 y1 Coef mul def + /x1 x1 Coef mul def + x1 0 gt y1 0 gt or x 0 gt or y 0 gt and + { [ y x y1 x1 ] 1 a sub y mul } + { [ 1 0 ] 0 } ifelse + setdash stroke +} def +%%-------------- DG end patch 15 ---------------%% +/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 +% +/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 +% +%gsave abs CLW add /a ED a 0 dtransform round exch round exch +%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +%% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +%% DG/SR modification end +%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 +%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +%% def +%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +%pop pop } def +%% DG/SR modification end +% +/BeginArrow { ADict begin /@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 +/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 +/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 { { /z DS def } { /z 0 def } ifelse /b ED 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 { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} 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 +/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 +/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 +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { 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 } ifelse mark 0 d w neg d 0 h w d 0 +%d /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 +/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 +/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 +/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 +/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 +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } 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 exch def /x0 exch def /y1 exch def /x1 exch def /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 +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /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 { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +% +/ArcAdjust { +% 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 +% maximum number of times to iterate the iterative procedure: + 30 +% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack) + { 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 +% +} def +% +/EllipticArcArrow { + /d ED % add/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 x add + a2 sin ry mul y add + a1 cos rx mul x add + a1 sin ry mul y 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 +end +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 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 +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /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 .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + 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 pst-dots.pro + +%%EndProcSet +%%BeginProcSet: pst-grad.pro 0 0 +%! +% PostScript prologue for pst-grad.tex. +% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.) +% 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 { + rotate + /MidPoint ED + /NumLines ED + /LastBlue ED + /LastGreen ED + /LastRed ED + /FirstBlue ED + /FirstGreen ED +/FirstRed ED +% D.G. modification begin - Apr. 9, 1998 +/GradientPosY ED +/GradientPosX ED + /GradientScale ED + /ifGradientCircle ED +% D.G. modification end + % This avoids gaps due to rounding errors: + clip + pathbbox %leave llx,lly,urx,ury on stack +% D.G. modification begin - Apr. 10, 1998 + 4 copy /ury ED /urx ED /lly ED /llx ED +% D.G. modification end + /y ED /x ED +% D.G. modification begin - Apr. 10, 1998 +ifGradientCircle + {0 GradientPosX eq + {0 GradientPosX eq {2 copy translate} if} if} + {2 copy translate} ifelse +% D.G. modification end + y sub neg /y ED + x sub neg /x ED % This avoids gaps due to rounding errors: + LastRed FirstRed add 2 div + LastGreen FirstGreen add 2 div + LastBlue FirstBlue add 2 div + setrgbcolor +% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998 + 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 +% DG modification end + MidLine NumLines 2 sub gt + { /MidLine NumLines def } + { MidLine 2 lt { /MidLine 0 def } if } + ifelse + MidLine 0 gt + { + /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 + MidLine { GradientLoop } repeat + } if + MidLine NumLines lt + { + /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 + 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 + Red Green Blue setrgbcolor fill + /CurrentY CurrentY YSizePerLine sub def + /Blue Blue BlueIncrement add def + /Green Green GreenIncrement add def + /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto + 0 YSizePerLine rlineto x neg 0 rlineto closepath + Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def + /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def + /Red Red RedIncrement add def} ifelse% D.G. modification end + }def + end +% END pst-grad.pro + +%%EndProcSet +%%BeginProcSet: pst-coil.pro 0 0 +%! +% PostScript prologue for pst-coil.tex. +% Version 97 patch 1, 98/06/02 +% 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 +/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 { /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 } def +end +% END pst-coil.pro + +%%EndProcSet +%%BeginProcSet: pst-text.pro 0 0 +%! +% PostScript header file pst-text.pro +% Version 1.00, 2005/12/15 +% 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-node.pro 0 0 +%! +% PostScript prologue for pst-node.tex. +% Version 97 patch 1, 97/05/09. +% For distribution, see pstricks.tex. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin /T /translate load def end +/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } +if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next 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 /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 +{ 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 { 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 { 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: pstricks-add.pro 0 0 +%! +% PostScript prologue for pstricks-add.tex. +% Version 0.08, 2006/06/17 +% For distribution, see pstricks.tex. +% +% HISTORY +% 2006/06/17 : - changes to the code (hv) +% 2006/04/21 : - Improved parser -> generic with derivative and translator into ps (dr) +% 2006/01/16 : - EXP -> Exp to prevent missmatch with pst-math (hv) +% 2005/09/28 : - rename it to pstricks-add.pro +% - add support for Gouraud shading (hv) +% 2005/05/20 : small (unimportant) changes (hv) +% 2005/02/25 : white space removal from expression (dr) +% 2004/12/16 : addition of Sum and IfTE (dr) +% 2004/11/14 : correction of a priority problem +% ^ before unary - (new rule FS) +% +/tx@addDict 410 dict def tx@addDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Pi and Euler are defined in pstricks.pro +/PIdiv2 1.57079632680 def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS %%% NEW 2004/11/14 +% FS -> F | +SF | -SF %%% NEW 2004/11/14 +% F->P|F^P %%% OLD +% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS +% P->(E)|literal +% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD +% params->E|E,param +% +% E expression, T term, SF signed factor, F factor, P power +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% parser +%% str -> [ LIFO vector ] +/AlgParser { tx@AlgToPs begin AlgToPs end } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/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 +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanomètres +%% lambda min=380 nanomètres +%% 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 + /lambda exch def + calculateRGB +} def + + +/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 + +systemdict /shfill known not { + +/Emulate_shfill 32 dict def Emulate_shfill begin + +/NumberOfLayers 128 def + +/assert { not { (assert) /typecheck signalerror} if } bind def +/assert /pop load def + +% generic interpolation +% takes two n-arrays, returns a hopefully optimized procedure taking one +% argument, and returning a correct blend of the two arrays (hence an +% n-array) +/interpolating_function { + 10 dict begin /a1 exch def /a0 exch def + a0 length a1 length eq assert + [ /mark load /exch load + 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end +} bind def + +% Emulates (rather poorly) a radial or axial fill. +% For radial fills, we _require_ that the inner circle be specified +% first. +% For axial fills, the ``Extend'' behaviour is ignored, and we _require_ +% an additional parameters in the dictionary, named EmulatorHints. It's a +% 2-array denoting the left and right extent of the area to paint. These +% are taken as multiples of the vector orthogonal to the direction vector. +/xshfill { begin gsave + % do some checks. + Function begin FunctionType 2 eq assert + Domain 0 get 0 eq Domain 1 get 1 eq and assert end + ColorSpace setcolorspace + % we assume ll2 at least, so that dicts can be extended. anyway + % the syntax we request is ll2 only. + /mkcol Function begin C0 C1 end interpolating_function bind def + ShadingType 3 eq { + /mkcoords + [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ] + interpolating_function + bind def + /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto + exec 0 360 arc fill } bind def + } if + ShadingType 2 eq { + /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch + ] cvx def % normal vector + /nv [ dv neg exch ] cvx def + /mkcoords + [ Coords cvx exec 5 2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + [ 4 -2 roll nv + exch 4 -1 roll exch EmulatorHints 0 get mul add + 3 1 roll EmulatorHints 0 get mul add ] + interpolating_function + % rescale to adapt to our reverse scan behaviour. + /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def + /bnv [ nv EmulatorHints cvx exec add mul exch + EmulatorHints cvx exec add mul exch ] cvx def + /nv [ bnv neg exch neg exch ] cvx def + bind def + /one { newpath mkcoords cvx exec moveto + nv rlineto + dv rlineto + bnv rlineto + closepath fill } bind def + } if + % The space is traversed backwards, since it is more customary + % for me at least to put the inner circle first for radial fills. + % For axial fills, this does not matter afaict. + 1 1 NumberOfLayers div neg 0 + { dup Function /N get exp mkcol cvx exec setcolor one } + for + grestore end +} bind def + +end +userdict /shfill { Emulate_shfill begin xshfill end } bind put } if + +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF +% 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 +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 +/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 3.14159265359 /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 } + { tutu 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (ln\() StrConcat 8 index StrConcat (\)*\() StrConcat + 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 (*\() 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + { 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_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { 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 3.14159265359 /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 90 div 1.57079632680 mul +} 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 90 div 1.57079632680 mul +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } 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 { 2.71828182846 exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/PI 3.14159265358 def +end +% END pstricks-add.pro + + +%%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 = "30 October 2002", +% 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 +% 0xD0 + /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]/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[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/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin @defspecial + +/preview@version(11.83)def + +userdict begin/preview-bop-level 0 def/bop-hook{/preview-bop-level +dup load dup 0 le{/isls false def/vsize 792 def/hsize 612 def}if 1 +add store}bind def/eop-hook{/preview-bop-level dup load dup 0 gt{1 +sub}if store}bind def end + +/preview@tightpage true def (compatibility PostScript comment for dvipng<=1.5 + +userdict begin/bop-hook{7{currentfile token not{stop}if 65781.76 div +DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll neg 2 copy lt{exch}if +dup 0 gt{pop 0 exch}{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 +add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat <>setpagedevice//bop-hook exec}bind def +end + +userdict (some extra code to avoid dvipng>=1.6 unknown special: 7{currentfile token not{stop}if 65781.76 div })) +pop + +userdict begin/bop-hook{preview-bop-level 0 le{7{currentfile token +not{stop}if 65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if +4 2 roll neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}{exch dup 0 lt{pop +0}if}ifelse 720 add exch 720 add 3 1 roll 4{5 -1 roll add 4 1 roll}repeat +<>setpagedevice}if//bop-hook +exec}bind def end + +@fedspecial end TeXDict begin +40258437 52099154 1000 600 600 (2dgrafiken.dvi) @start +/Fa 133[37 1[42 51[60 55 55 60 12[42 42 42 1[42 48[{ + TeXBase1Encoding ReEncodeFont }10 83.022 /Times-Roman +rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop +-32891 -32891 32891 32891 6526376 0 21555684 + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 0.56917 SLW 0 setgray 0. true 328.91364 99.5846 0.0 8.5359 +0 Frame gsave false 1 0.0 0.0 gsave 1 1 0 setrgbcolor currentrgbcolor +grestore gsave 1 0.2 0.2 setrgbcolor currentrgbcolor grestore 2000 +1.0 0. tx@GradientDict begin GradientFill end grestore gsave 0.56917 +SLW 0 setgray 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 0. true 81.94403 89.91077 7.96672 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 89.91077 80.80568 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 154.78299 67.14848 7.96672 +43.24829 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial +0 0 a + tx@Dict begin { 45.72427 78.24504 } PutCoor PutBegin end + 0 0 a -217 28 a Fa(0xA0000000)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 115.67392 78.24504 } PutCoor PutBegin end + +0 0 a -21 19 a Fa(x)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 80.51697 54.91357 } PutCoor PutBegin end + 0 0 a -42 28 a +Fa(24)0 0 y + tx@Dict begin PutEnd end + 0 0 a @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def /ArrowInside +{ } def 1.13791 SLW 0 setgray 0. true 242.98624 89.91077 169.00935 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 315.82562 89.91077 242.98624 +66.01056 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 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 0. true 315.82562 67.71767 169.00935 +43.81703 0 Frame gsave 1 setgray fill grestore gsave 1.13791 SLW +0 setgray 0 setlinecap stroke grestore end + +@endspecial 0 0 a + tx@Dict begin { 241.47928 55.48276 } PutCoor PutBegin end + 0 0 a -217 28 a Fa(0xA0000000)0 +0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 277.51193 78.81421 } PutCoor PutBegin end + 0 0 a -18 19 a Fa(z)0 0 y + tx@Dict begin PutEnd end + 0 0 a 0 0 a + tx@Dict begin { 206.1847 78.24504 } PutCoor PutBegin end + +0 0 a -240 28 a Fa(0xB0320CAD)0 0 y + tx@Dict begin PutEnd end + 0 0 a @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { BeginArrow 1. 1. scale false +0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED +{ 0 h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg +rlineto gsave fill grestore grestore 0 h a sub moveto EndArrow moveto +} def /ArrowB { } def /ArrowInside { } def 1.13791 SLW 0 setgray + /ArrowA { BeginArrow 1. 1. scale false 0.4 1.4 1.5 2. CLW mul add +dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave +w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore +grestore 0 h a sub moveto EndArrow moveto } def /ArrowB { } def +/ArrowInside { } def [ 243.5554 42.67911 243.5554 21.62392 78.5294 +21.62392 78.5294 42.67911 false /dArrowPos 1. 1 gt {1.0 1. 1.0 add +div }{ 0.5 } ifelse def BezierNArray n 1 eq { pop pop }{ 2 copy /y0 +ED /x0 ED ArrowA n 4 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat +6 2 roll 4 2 roll ArrowB /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 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 /getValues { ax t0 3 exp mul bx +t0 t0 mul mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 t0 mul +mul add cy t0 mul add y0 add 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 +} def /getdL { getValues 3 -1 roll sub 3 1 roll sub Pyth } def /CurveLength +{ /u 0 def /du 0.01 def 0 100 { /t0 u def /u u du add def /t u def +getdL add } repeat } def /GetArrowPos { /ende 0.5 1 gt {ArrowPos} +{ArrowPos CurveLength mul} ifelse def /u 0 def /du 0.01 def /sum 0 +def { /t0 u def /u u du add def /t u def /sum getdL sum add def sum +ende gt {exit} if } loop u } def /ArrowPos 0. def /loopNo 0.5 1 gt +{CurveLength 0.5 div cvi }{ 1. } ifelse def loopNo cvi { /ArrowPos +ArrowPos dArrowPos add def /t GetArrowPos def /t0 t 0.95 mul def getValues +ArrowInside pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 curveto } ifelse + gsave 1.13791 SLW 0 setgray 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 [ 108.68968 31.29819 108.68968 31.29819 +/Lineto /lineto load def 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 /Length x2 x1 sub y2 y1 sub Pyth def +/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos +Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{ /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 0 setlinecap +stroke grestore end + +@endspecial +10630 -16532 3544 8 v 9445 -14173 8 57 v 9474 -14230 +V 9502 -14287 V 9530 -14343 V 9559 -14400 V 9587 -14457 +V 9615 -14513 V 9644 -14570 V 9672 -14627 V 9700 -14683 +V 9729 -14740 V 9757 -14797 V 9785 -14854 V 9814 -14910 +V 9842 -14967 V 9870 -15024 V 9899 -15080 V 9927 -15137 +V 9955 -15194 V 9984 -15250 V 10012 -15307 V 10041 -15364 +V 10069 -15420 V 10097 -15477 V 10126 -15534 V 10154 +-15591 V 10182 -15647 V 10211 -15704 V 10239 -15761 V +10267 -15817 V 10296 -15874 V 10324 -15931 V 10352 -15987 +V 10381 -16044 V 10409 -16101 V 10437 -16158 V 10466 +-16214 V 10494 -16271 V 10522 -16328 V 10551 -16384 V +10579 -16441 V 10607 -16498 V 12989 -14173 V 13017 -14230 +V 13045 -14287 V 13074 -14343 V 13102 -14400 V 13130 +-14457 V 13159 -14513 V 13187 -14570 V 13215 -14627 V +13244 -14683 V 13272 -14740 V 13300 -14797 V 13329 -14854 +V 13357 -14910 V 13385 -14967 V 13414 -15024 V 13442 +-15080 V 13470 -15137 V 13499 -15194 V 13527 -15250 V +13555 -15307 V 13584 -15364 V 13612 -15420 V 13641 -15477 +V 13669 -15534 V 13697 -15591 V 13726 -15647 V 13754 +-15704 V 13782 -15761 V 13811 -15817 V 13839 -15874 V +13867 -15931 V 13896 -15987 V 13924 -16044 V 13952 -16101 +V 13981 -16158 V 14009 -16214 V 14037 -16271 V 14066 +-16328 V 14094 -16384 V 14122 -16441 V 14151 -16498 V +9449 -14170 3544 8 v eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/2dgrafiken/Zugriff1.pst b/2dgrafiken/Zugriff1.pst new file mode 100644 index 0000000..cfc76e2 --- /dev/null +++ b/2dgrafiken/Zugriff1.pst @@ -0,0 +1,34 @@ +\begin{pspicture}(0,0)(11.56,3.5) +\definecolor{color13f}{rgb}{1.0,0.2,0.2} +\psframe[linewidth=0.02,fillstyle=gradient,gradlines=2000,gradbegin=Yellow,gradend=color13f,gradmidpoint=1.0](11.56,3.5)(0.0,0.3) +\psframe[linewidth=0.04,fillstyle=solid](2.88,3.16)(0.28,2.32) +\psframe[linewidth=0.04,fillstyle=solid](5.44,3.16)(2.84,2.32) +\psframe[linewidth=0.04,fillstyle=solid](5.44,2.36)(0.28,1.52) +\usefont{T1}{ptm}{m}{n} +\rput(1.6070312,2.75){0xA0000000} +\usefont{T1}{ptm}{m}{n} +\rput(4.065469,2.75){x} +\usefont{T1}{ptm}{m}{n} +\rput(2.8298438,1.93){24} +\psframe[linewidth=0.04,fillstyle=solid](8.54,3.16)(5.94,2.32) +\psframe[linewidth=0.04,fillstyle=solid](11.1,3.16)(8.54,2.32) +\psframe[linewidth=0.04,fillstyle=solid](11.1,2.38)(5.94,1.54) +\usefont{T1}{ptm}{m}{n} +\rput(8.487031,1.95){0xA0000000} +\usefont{T1}{ptm}{m}{n} +\rput(9.753437,2.77){z} +\usefont{T1}{ptm}{m}{n} +\rput(7.2465625,2.75){0xB0320CAD} +\psbezier[linewidth=0.04]{<-}(2.76,1.5)(2.76,0.76)(8.56,0.76)(8.56,1.5) +\psline[linewidth=0.04cm](3.82,1.1)(3.82,1.1) + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\linethickness{0.3mm} +\put(45,70){\line(1,0){15}} +\multiput(40,60)(0.12,0.24){42}{\line(0,1){0.24}} +\multiput(55,60)(0.12,0.24){42}{\line(0,1){0.24}} +\put(40,60){\line(1,0){15}} +\end{pspicture} diff --git a/2dgrafiken/bitwise.pst b/2dgrafiken/bitwise.pst new file mode 100644 index 0000000..9d446a4 --- /dev/null +++ b/2dgrafiken/bitwise.pst @@ -0,0 +1,37 @@ +\psset{xunit=5mm, yunit=5mm} +%\psframebox{ +\begin{pspicture}(-1,-1)(33,4) + +\multido {\ia=0+1,\ib=1+1}{8}{\psframe[fillstyle=solid, fillcolor=Red!3](\ia,1)(\ib,2)} + +\multido {\ia=8+1,\ib=9+1}{8}{\psframe[fillstyle=solid, fillcolor=Blue!3](\ia,1)(\ib,2)} + +\multido {\ia=16+1,\ib=17+1}{8}{\psframe[fillstyle=solid, fillcolor=Green!3](\ia,1)(\ib,2)} + +\multido {\ia=24+1,\ib=25+1}{8}{\psframe[fillstyle=solid, fillcolor=Magenta!3](\ia,1)(\ib,2)} + +\multido{\ra=0.5+1,\ib=31+-1}{32}{\rput (\ra,1.5){\footnotesize{$b_{\ib}$}}} + +\psline(0,0.5)(16,0.5) + +\psline(0,.25)(0,.75) +\psline(16,.25)(16,.75) +\rput[c](8,0){\footnotesize{High word}} + +\psline(16,2.5)(32,2.5) +\psline(16,2.25)(16,2.75) +\psline(32,2.25)(32,2.75) +\rput[c](24,3){\footnotesize{Low word}} + + +\psline(0,2.5)(8,2.5) +\psline(0,2.25)(0,2.75) +\psline(8,2.25)(8,2.75) +\rput[c](4,3){\footnotesize{High byte}} + +\psline(24,0.5)(32,0.5) +\psline(24,.25)(24,.75) +\psline(32,.25)(32,.75) +\rput[c](28,0){\footnotesize{Low byte}} + +\end{pspicture}%} diff --git a/2dgrafiken/erzeuge.bat b/2dgrafiken/erzeuge.bat new file mode 100644 index 0000000..75b16b6 --- /dev/null +++ b/2dgrafiken/erzeuge.bat @@ -0,0 +1,10 @@ +del %1.eps +latex 2dgrafiken.tex +latex 2dgrafiken.tex +dvips -EPSF 2dgrafiken.dvi +REM dvips -E 2dgrafiken.dvi +REM "d:\Programme\MiKTeX 2.5\miktex\bin\dvips.exe" -E 2dgrafiken.dvi +ren 2dgrafiken.ps %1.eps +del %1.pdf +epstopdf %1.eps +%1.pdf diff --git a/2dgrafiken/formel.texaide b/2dgrafiken/formel.texaide new file mode 100644 index 0000000..3f9a217 --- /dev/null +++ b/2dgrafiken/formel.texaide @@ -0,0 +1,29 @@ +% MathType!MTEF!2!1!+- +% feaagaart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn +% hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr +% 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9 +% vqaqpepm0xbba9pwe9Q8fs0-yqaqpepae9pg0FirpepeKkFr0xfr-x +% fr-xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamiEamaaBa +% aaleaacaWGQbaabeaakiabg2da9maalaaabaGaciizaiaacwgacaGG +% 0bWaaeWaaeaafaqabeWahaaaaeaacaWGHbWaaSbaaSqaaiaaigdaca +% GGSaGaaGymaaqabaaakeaacqWIVlctaeaacaWGHbWaaSbaaSqaaiaa +% igdacaGGSaGaamOAaiabgkHiTiaaigdaaeqaaaGcbaGaamOyamaaBa +% aaleaacaaIXaaabeaaaOqaaiaadggadaWgaaWcbaGaaGymaiaacYca +% caWGQbGaey4kaSIaaGymaaqabaaakeaacqWIVlctaeaacaWGHbWaaS +% baaSqaaiaaigdacaGGSaGaamOBaaqabaaakeaacqWIUlstaeaaaeaa +% cqWIUlstaeaacqWIUlstaeaacqWIUlstaeaaaeaacqWIUlstaeaaca +% WGHbWaaSbaaSqaaiaad6gacaGGSaGaaGymaaqabaaakeaacqWIVlct +% aeaacaWGHbWaaSbaaSqaaiaad6gacaGGSaGaamOAaiabgkHiTiaaig +% daaeqaaaGcbaGaamOyamaaBaaaleaacaWGUbaabeaaaOqaaiaadgga +% daWgaaWcbaGaamOBaiaacYcacaWGQbGaey4kaSIaaGymaaqabaaake +% aacqWIVlctaeaacaWGHbWaaSbaaSqaaiaad6gacaGGSaGaamOBaaqa +% baaaaaGccaGLOaGaayzkaaaabaGaciizaiaacwgacaGG0bWaaeWaae +% aacaWGbbaacaGLOaGaayzkaaaaaaaa!7ABA! +\[ +x_j = \frac{{\det \left( {\begin{array}{*{20}c} + {a_{1,1} } & \cdots & {a_{1,j - 1} } & {b_1 } & {a_{1,j + 1} } & \cdots & {a_{1,n} } \\ + \vdots & {} & \vdots & \vdots & \vdots & {} & \vdots \\ + {a_{n,1} } & \cdots & {a_{n,j - 1} } & {b_n } & {a_{n,j + 1} } & \cdots & {a_{n,n} } \\ +\end{array}} \right)}}{{\det \left( A \right)}} +\] + diff --git a/2dgrafiken/multidotest.pst b/2dgrafiken/multidotest.pst new file mode 100644 index 0000000..d00dd6f --- /dev/null +++ b/2dgrafiken/multidotest.pst @@ -0,0 +1,24 @@ +\psset{xunit=1cm, yunit=1cm} +\begin{pspicture*}(-2.5,-2.5)(2.5,2.5) +\psgrid(-2,-2)(2,2) +\SpecialCoor +%\degrees[360] +%\multido{\iX=0+30}{13}{\psline[linecolor=blue](1,1)(\lineto(0.25;\iX))} +\multido{\iX=0+30}{12}{\psline[linecolor=orange](1,1)(0.5cm;\iX)} + + +%\pscustom[linecolor = blue]{ +% \code{/x1 30 cos 1 mul def %x= r*cos phi und y=r*sin phi +% /y1 30 sin 1 mul def +% /x2 60 cos 1 mul def +% /y2 60 sin 1 mul def +% /x3 90 cos 1 mul def +% /y3 90 sin 1 mul def} +% \psline(!1 1)(!x1 y1) \closepath +% \psline(!1 1)(!x2 y2) \closepath +% \psline(!1 1)(!x3 y3) \closepath} + + + + +\end{pspicture*} diff --git a/2dgrafiken/reHa.eps b/2dgrafiken/reHa.eps new file mode 100644 index 0000000..f329750 --- /dev/null +++ b/2dgrafiken/reHa.eps @@ -0,0 +1,14247 @@ +%!PS-Adobe-3.1 EPSF-3.0 +%%Title: reHaRegel.png +%%Creator: Adobe Illustrator(R) 11 +%%AI8_CreatorVersion: 11.0.0 %AI9_PrintingDataBegin %%For: ----- ----- +%%CreationDate: 5/11/2006 +%%BoundingBox: 0 0 160 175 +%%HiResBoundingBox: 0 0 159.9000 174.5997 +%%CropBox: 0 0 159.9000 174.5997 +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%%Pages: 1 +%%DocumentNeededResources: +%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0) +%%+ procset Adobe_CoolType_Utility_T42 (1.0 0) +%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.19 0) +%%+ procset Adobe_CoolType_Core (2.23 0) +%%+ procset Adobe_AGM_Core (2.0 0) +%%+ procset Adobe_AGM_Utils (1.0 0) +%%DocumentFonts: +%%DocumentNeededFonts: +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: +%ADO_ContainsXMP: MainFirst +%AI7_Thumbnail: 120 128 8 +%%BeginData: 9559 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD3FFF7DA8527D52A8FD70FFA8FD07F827A8FD6EFF27F852A87D7D +%27F8F827A8FD6CFF27F852FD05FFA8F8F852FD6BFFA8F827FD07FFA827F8 +%A8FD6AFFA8F852FD08FF7DF827FD6AFF7DF87DFD09FFF827FD6AFFA8F8A8 +%FD08FFA8F827FD6AFFA8F87DFD09FFF852FD6AFFA8F8A8FD08FFA8F827FD +%6AFFA8F87DFD09FFF827FD6AFFA8F8A8FD08FFA8F827FD6AFFA8F87DFD09 +%FFF827FD6AFFA8F87DFD08FFA8F827FD6AFF7DF852FD09FFF852FD6AFFA8 +%F87DFD08FFA8F827FD6AFF7DF87DFD08FFA8F852FD6AFFA8F87DFD08FF7D +%F827FD6AFFA8F852FD08FFA8F852FD6AFFA8F87DFD08FF52F827FD6AFFA8 +%F827FFFFA8A8FD04FF52F852FD6AFFA8F8F8F827FD05F852F8F827FD6AFF +%7DF8F8F827A87D7D5227F8F8F852FD6AFFA8F8F852FD05FFA827F8F827FD +%6AFF52F852FD08FF7DF852FD69FFA8F8F87DFD08FFA8F827FD69FF7DF8F8 +%A8FD09FFF827FD69FF27F827FD0AFF27F8A8FD68FF52F87DFD0AFF27F8A8 +%FD68FFF8F87DFD0AFF52F8A8FD67FFA8F8F8A8FD0AFF27F8A8FD67FFA8F8 +%F8A8FD0AFF52F8A8FD67FF7DF827FD0BFF52F87DFD67FF7DF827FD0BFF52 +%F8A8FD67FF52F852FD0BFF52F87DFD67FF52F87DFD0BFF52F87DFD67FF52 +%F87DFD0BFF52F87DFD67FF52F8A8FD0BFF52F87DFD67FF27F8A8FD0BFF27 +%F8A8FD67FF27F8FD0CFF27F8A8FD67FF2727FD0CFF2727A8FD67FF27F8FD +%0CFF27F8FD68FFF827FD0CFFF827A8FD21FFA8A8A8FD42FFA8F827FD0BFF +%A8F827FD1FFFA87DFD05F852A8FD40FFF87DFD0BFFA8F852FD1EFF52FD08 +%F827FD2FFFA87D527DA8FD0BFFA8F852FD0BFF27F827FD1CFF7DF8F8F852 +%52A8A8A87D52F827A8FD2CFF27FD05F852FD0BFFF852A8A8A8FFA8FD05FF +%52F8F87DFD1AFFA852F8277DFD08FF27F827A8FD29FF7DFD08F852FD05FF +%A8FFFFFFA827FD07F8525252FD04F87DFD19FFA8F8F8277DFD07FF7D27FD +%04F8A8FD26FFA852F8F8F852A8FFA852F8F852FD09FF27F8F827FD09F852 +%F852FD19FF52F827A8FD07FF52FD06F827FD25FF7DF8F8F852A8FD05FFA8 +%F8F852FD07FF52F8F8FD05A87D7D525252FFFF27F8FD17FF7D27F852A8FD +%05FFA87D27F8F8527DFF7DF8F8A8FD23FF7DF8F827A8FD08FF7DF8F8A8FD +%06FF27F87DFD0CFF7DF8A8FD15FF52F8F87DFD07FF27F8F827FD05FF7DF8 +%27FD22FFA8F8F852FD0AFFA8F8F87DFD06FFF8F87DFD0CFFA8F87DFD14FF +%7DF8F87DFD07FF52F8F827FD07FFF8F8A8FD21FF27F827FD0CFF27F827FD +%05FFA8F8F8A8FD0DFF2752FD13FF7DF8F87DFD07FF7DF8F852FD07FFA8F8 +%F8FD17FFA87D7D7DA8FD05FF7DF8F87DFD0CFF7DF8F87DFD05FFF8F87DFD +%0DFFF827FD12FF27F8F8FD08FF7DF8F8A8FD07FFA8F8F87DFD15FF7D52FD +%05F827A8FFFFFF27F852FD0DFFA8F8F87DFD05FF27F87DFD0DFF27F8FD11 +%FF27F827A8FD08FFF8F827FD07FFA827F827FD14FF7DFD05F827527D2727 +%A8FF7DF8F8A8FD0EFFF8F87DFD05FF27F87DFD0DFFF827A8FD0FFF7DF8F8 +%FD09FF7DF8F87DFD07FF52F8F852FD13FF7DF8F8277D7DFD05FF7D527D27 +%F87DFD0FFF7DF852FD05FF52F87DFD0CFFA827F8FD0FFF7D2727FD0AFF52 +%F827FD07FFA8F8F87DFD13FF27F8F87DFD09FFA827F827FD10FFA8F8F8FD +%05FF52F827FD0DFFF8F8A8FD0DFF27F8F8A8FD0AFF27F852FD06FFA8F8F8 +%7DFD13FF52F8F87DFD0BFFF8F852FD11FFF8F8A8FD04FF7DF852FD0DFF27 +%F8FD0DFF7DF8F87DFD0BFF27F87DFD05FFA8F8F852FD13FF52F8F827FD0B +%FF52F8F87DFD11FF52F87DFD04FF7DF8F8FD0DFF27F87DFD0BFF7DF8F827 +%FD0CFF27F87DFD05FFF8F8F8A8FD12FFA8F8F852FD0CFF27F827FD12FF7D +%F852FD04FFA8F827FD0DFF27F8A8FD0AFF52F8F852A8FD0CFF52F8A8FFFF +%FFA852F8F8A8FD13FF27F827FD0DFFF8F87DFD12FFA8F827FD04FF7DF8F8 +%FD0DFFF8F8A8FD09FFF8F8F8A8FD0EFF27F827FFFF52F8F8F8A8FD13FFA8 +%F8F8A8FD0CFFA8F8F8FD13FFA8F8F8FD04FF7DF827FD0DFF27F8A8FD07FF +%A8F8F8F8A8FD0FFF7DF8F8F827F8F8F8A8FD14FF7DF827A8FD0CFF52F852 +%FD12FF277DF8F8A8FFFFFF52F827FD0DFFF8F8A8FD05FFA852F8F827FD12 +%FF52FD05F8FD16FF52F852FD0CFFA8F827A8FD11FF27F8F827F8A8FFFFFF +%7DF852FD0DFF27F8A8FFFFFFA827F8F8F852FD13FFA827F8F852FD17FF27 +%F87DFD0CFF52F827FD11FF52F8F87D52F852FFFFFF52F852FD0DFFF8F8A8 +%FFFF7DF8F8F8527DFD13FF52F8F827A8FD18FFF8F87DFD0BFFA8F8F8A8FD +%11FF27F827FF52F852FFFFFF52F87DFD0CFFA827F8FFFF27F8F827A8FD14 +%FF52F8F852A8FD18FFA8F8F8A8FD0BFF52F827FD11FF52F827A8FF52F8F8 +%A8FFFFF8F87DFD0CFFA8F8F85227F85252FD15FF7DF8F87DFFFFA8FD14FF +%A8FFFFFFF8F8A8FD0BFFF8F852FD10FFA8F8F8A8FFFFFFF8F852FFA8F8F8 +%FD0DFFA827F8F8F87DFD16FFA8F8F87DFD15FFA827F8F827FFFF27F8A8FD +%0AFF52F8F8A8FD10FF27F827FFFFFFA827F852FF7DF827FD0EFF27F8F87D +%FD16FFA827F8F8A8FD14FF52F8F827275227A827F87DFD0AFF52F852FD10 +%FF7DF8F8A8FD04FF27F827FF27F852FD0FFF52A8FD17FF7DF8F87DFD14FF +%27F8F87DA8FFFF527D27F87DFD0AFF27F87DFD0FFFA8F8F827A8FD04FF52 +%F827A8F8F87DFD27FFA8F8F87DFD14FFA8F8F8A8FD06FF52F852FD09FFA8 +%F827FD10FF7DF827A8FD05FF7DF8277DF8F87DFD26FFA8F8F87DFD15FF52 +%F852FD07FF7DF852FD09FF52F87DFD0FFFA8F8F87DFD07FFFD05F87DFD25 +%FFA8F8F827FD16FF27F8A8FD07FFA8F8F8FD09FF27F8A8FD0FFF27F827FD +%08FF52FD04F87DFD25FF27F8F87DFD15FF7DF827FD09FF27F87DFD07FF52 +%F827FD0FFF27F8F8FD09FF7DFD04F8FD25FF7DF8F827A8FD15FF7DF852FD +%09FF7DF852FD07FF52F87DFD0EFF52F8F87DFD0AFFA82727A8FD25FF27F8 +%F8A8FD16FF7DF827FD09FF7DF827FD06FFA8F8F87DFD09FF7D7DFFFFFF27 +%F827FD33FF7DF8F852FD17FFA8F827FD0AFFF8F8A8FD05FF27F8F8FD0AFF +%7DF87D7D52F852FD34FF27F852FD18FF7DF8F8FD0AFF27F87DFD04FF7DF8 +%F87DFD0AFFA8FD04F852FD34FF7DF8F8A8FD18FFA8F827FD0AFF27F827FD +%04FF52F827A8FD0BFF5227F8F8A8FD34FF7DF827A8FD18FF7DF827FD0AFF +%52F827A8FFFFFF27F852FF7D52527D7DFD07FFA827F87DFD34FF27F852FD +%1AFFF8F8A8FD09FF7DF8F8A8FFFF7DF8F85227FD06F852A8FD05FF27F87D +%FD33FFA8F8F8FD1BFF52F87DFD09FFA8F8F852FFFF27FD04F8277D7D7D27 +%F8F852FD04FFA8F8F8A8FD33FF52F852FD1BFF52F852FD09FFA827F852FF +%A8F8F8F82752FD05FF7DF8F8FD04FFA8F8F8A8FD0BFFA8FD27FFF8F8A8FD +%1BFF7DF827FD0AFFF8F827FF27F8277DA8FD07FFF8F87DFFFFFF27F8F8FD +%0BFFF827FD26FFA8F827FD1CFFA8F8F8FD09FFA827F852A8F8F8A8FD09FF +%27F8A8FFFFA8F8F852FD08FFA852F827A8FD26FF7DF87DFD1DFFF8F87DFD +%08FFA8F8F85252F827FD0AFFF8F87DFFFF7DF8F87DFD07FF7DF8F8F87DFD +%27FF27F87DFD1DFF27F852FD08FFA8F8F852F8F87DFD0AFF27F8FFFFFF27 +%F8F8FD07FF7DF8F827A8FD27FFA8F8F8FD1EFF52F8F8A8FD08FF525227F8 +%27FD0AFF7DF827FFFFA8F8F87DFFA8527D5227F8F8F87DA8FD28FF52F852 +%FD1FFFF8F852FD0AFF27F8FD0BFF27F852FFFF7DF827FF52FD05F82752FD +%2AFFA8F8F8FD20FF52F852FD09FF52F87DFD0AFF7DF8F87DFFA8F8F87DFF +%27F8F85252A8FD2CFF52F8F8FD20FFA8F8F8FD09FFF827FD0BFF52F8F8A8 +%FF52F8F87DFFFFA8FD2FFFA8F8F852FD21FF27F87DFD07FF52F852FD0AFF +%7DF8F852FF7DF8F8F852FD32FF7DF8F8A8FD21FFA8F827FD06FF7DF8F8FD +%0AFF7DF8F852FFA8FD04F87DFD32FF27F87DFD22FFA827F8A8FD05FF52F8 +%F87DFD07FFA852F8F827FFFF7DF8F852F827FD31FF7DF8F8FD24FF52F87D +%FD05FF52F8F8277DFD04FFA85227F8F8F8FFFFFF27F827FFF852FD31FF27 +%F87DFD24FF7DF827A8FD04FF52F82727FD08F8277DFFFFFFF8F827FFFFF8 +%F8A8FD2FFF52F852FD25FF7DF8F8A8FD04FF52F827FF5227F8F8F82727A8 +%FD04FF27F8F8FFFFFF27F852FD2EFFA8F8F87DFD25FFA8F8F87DFD04FFA8 +%F8F8A8FFA8A8A8FFA8FD05FF27F8F87DFFFFFF7DF8F8A8FD2DFFF8F8F8A8 +%FD26FF27F852FD05FF27F87DFD09FFA852F8F87DFD05FF27F87DFD2CFF52 +%F8F8A8FD27FF52F8F8A8FD04FF7DF8F8FD07FFA852F8F8F87DFD06FF7DF8 +%F8FD2BFF52F8F8A8FD28FFA8F8F8A8FD05FF27F8F852527D7D7D5227F8F8 +%F8A8FD08FFF8F8A8FD29FFA8F8F87DFD29FFA8F8F87DFD06FF27FD09F827 +%A8FD09FF52F87DFD28FFA827F8F8A8FD2AFF7DF8F8FD09FF7D7D525252A8 +%FD0CFFA8F827FD28FF27F8F87DFD2CFFF8F852FD09FFA87DFD0AFF7D5252 +%FFFFFF27F87DFD26FF7DF8F87DFD2DFF7DF827FD06FF2752A87DF852FFFF +%FFA85227F82727F8F8F827A8FF7DF852FD26FF27F827FD2EFFA8F8F8A8FF +%FFFFA827F8F8F852F8F8A8FF52FD0BF8FFA8F8F8A8FD24FF52F8F8FD30FF +%F8F87DFFFFA8F8F87DFF27F852F8F827F8F87DFD07FFF8F852FF27F852FD +%23FF52F8F8FD31FF27F8A8FFA8F8F827FFFFFF7DFF7DF8F8F87DFD08FF52 +%F8F8A852F8F8A8FD21FF7DF8F852FD31FF5252A8FFA827F827FD06FFF8F8 +%52FD09FF7DF8F8A87DF8F87DFD21FF27F8F8A8FD34FFA8FF52F827FD05FF +%7DF8F8A8FD09FFA8F8F827FFF8F827FD20FF7DF8F87DFD37FF7DF827FD05 +%FF7DF827FD0BFF52F8F8FFA8F827FD1FFFA8F8F87DFD35FFA8A8FFA8F8F8 +%FD05FF52F827FD0BFF7DF8F8FFA8F827FD1FFF27F827FD36FF277DFFFFF8 +%F87DFD04FF7DF827FD0CFFF8F8A8A8F827A8FD1DFF7DF8F8A8FD35FFA8F8 +%F8A8FF7DF827FD04FFA8F8F8A8FD0BFF52F82727F8F8FD1DFFA8F8F852FD +%37FF27F8A8FFA8F8F8A8FD04FF27F87DFD0BFF52FD04F852FD1DFF7DF8F8 +%A8FD37FF7DF87DFFFF27F852FD04FF7DF827FD0BFF27F8F8F827A8FD1DFF +%27F827FD38FFA8F827FFFFA8F827A8FFFF7DF8F8F8FD0BFFF8F82752A8FD +%1DFFA8F8F8A8FD39FF52F8F8A852F8F827FF52F82727F852FD08FF7DF8F8 +%F8A8FD1FFF7DF852FD3BFF27FD06F827F8F87D7DF827FD07FFA8F8F8F87D +%FD20FF27F8A8FD3BFFA8F8F8F87D27F8F8F827FF52F8F8A8FD04FF7D27F8 +%F8F8A8FD20FFA8F8F8FD3EFF52A8FFFF527D52FFFFA8F8F8277D527D27F8 +%F8F852FD22FF7DF852FD48FF52FD07F852A8FD23FF27F827FD49FF7D5252 +%275252A8FD25FF27F852FD74FFA8F8F87DFD74FFA8F8F8FD76FF7DA8FD2F +%FFFF +%%EndData +%%EndComments +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults +%%BeginProlog +%%BeginResource: procset Adobe_AGM_Utils 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Utils 68 dict dup begin put +/bdf +{ + bind def +} bind def +/nd{ + null def +}bdf +/xdf +{ + exch def +}bdf +/ldf +{ + load def +}bdf +/ddf +{ + put +}bdf +/xddf +{ + 3 -1 roll put +}bdf +/xpt +{ + exch put +}bdf +/ndf +{ + exch dup where{ + pop pop pop + }{ + xdf + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/bdict +{ + mark +}bdf +/edict +{ + counttomark 2 idiv dup dict begin {def} repeat pop currentdict end +}def +/ps_level + /languagelevel where{ + pop systemdict /languagelevel get exec + }{ + 1 + }ifelse +def +/level2 + ps_level 2 ge +def +/level3 + ps_level 3 ge +def +/ps_version + {version cvr} stopped { + -1 + }if +def +/makereadonlyarray +{ + /packedarray where{ + pop packedarray + }{ + array astore readonly + }ifelse +}bdf +/map_reserved_ink_name +{ + dup type /stringtype eq{ + dup /Red eq{ + pop (_Red_) + }{ + dup /Green eq{ + pop (_Green_) + }{ + dup /Blue eq{ + pop (_Blue_) + }{ + dup () cvn eq{ + pop (Process) + }if + }ifelse + }ifelse + }ifelse + }if +}bdf +/AGMUTIL_GSTATE 22 dict def +/get_gstate +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_clr_spc currentcolorspace def + /AGMUTIL_GSTATE_clr_indx 0 def + /AGMUTIL_GSTATE_clr_comps 12 array def + mark currentcolor counttomark + {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop + /AGMUTIL_GSTATE_fnt rootfont def + /AGMUTIL_GSTATE_lw currentlinewidth def + /AGMUTIL_GSTATE_lc currentlinecap def + /AGMUTIL_GSTATE_lj currentlinejoin def + /AGMUTIL_GSTATE_ml currentmiterlimit def + currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf + /AGMUTIL_GSTATE_sa currentstrokeadjust def + /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def + /AGMUTIL_GSTATE_op currentoverprint def + /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def + /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def + currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf + cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf + /AGMUTIL_GSTATE_ht currenthalftone def + /AGMUTIL_GSTATE_flt currentflat def + end +}def +/set_gstate +{ + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_clr_spc setcolorspace + AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor + AGMUTIL_GSTATE_fnt setfont + AGMUTIL_GSTATE_lw setlinewidth + AGMUTIL_GSTATE_lc setlinecap + AGMUTIL_GSTATE_lj setlinejoin + AGMUTIL_GSTATE_ml setmiterlimit + AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash + AGMUTIL_GSTATE_sa setstrokeadjust + AGMUTIL_GSTATE_clr_rnd setcolorrendering + AGMUTIL_GSTATE_op setoverprint + AGMUTIL_GSTATE_bg cvx setblackgeneration + AGMUTIL_GSTATE_ucr cvx setundercolorremoval + AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx + AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer + AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or + { + currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne + { + mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark + } if + }{ + AGMUTIL_GSTATE_ht sethalftone + } ifelse + AGMUTIL_GSTATE_flt setflat + end +}def +/get_gstate_and_matrix +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_ctm matrix currentmatrix def + end + get_gstate +}def +/set_gstate_and_matrix +{ + set_gstate + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_ctm setmatrix + end +}def +/AGMUTIL_str256 256 string def +/AGMUTIL_src256 256 string def +/AGMUTIL_dst64 64 string def +/AGMUTIL_srcLen nd +/AGMUTIL_ndx nd +/agm_sethalftone +{ + dup + begin + /_Data load + /Thresholds xdf + end + level3 + { sethalftone }{ + dup /HalftoneType get 3 eq { + sethalftone + } {pop} ifelse + }ifelse +} def +/rdcmntline +{ + currentfile AGMUTIL_str256 readline pop + (%) anchorsearch {pop} if +} bdf +/filter_cmyk +{ + dup type /filetype ne{ + exch () /SubFileDecode filter + } + { + exch pop + } + ifelse + [ + exch + { + AGMUTIL_src256 readstring pop + dup length /AGMUTIL_srcLen exch def + /AGMUTIL_ndx 0 def + AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ + 1 index exch get + AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put + /AGMUTIL_ndx AGMUTIL_ndx 1 add def + }for + pop + AGMUTIL_dst64 0 AGMUTIL_ndx getinterval + } + bind + /exec cvx + ] cvx +} bdf +/filter_indexed_devn +{ + cvi Names length mul names_index add Lookup exch get +} bdf +/filter_devn +{ + 4 dict begin + /srcStr xdf + /dstStr xdf + dup type /filetype ne{ + 0 () /SubFileDecode filter + }if + [ + exch + [ + /devicen_colorspace_dict /AGMCORE_gget cvx /begin cvx + currentdict /srcStr get /readstring cvx /pop cvx + /dup cvx /length cvx 0 /gt cvx [ + Adobe_AGM_Utils /AGMUTIL_ndx 0 /ddf cvx + names_index Names length currentdict /srcStr get length 1 sub { + 1 /index cvx /exch cvx /get cvx + currentdict /dstStr get /AGMUTIL_ndx /load cvx 3 -1 /roll cvx /put cvx + Adobe_AGM_Utils /AGMUTIL_ndx /AGMUTIL_ndx /load cvx 1 /add cvx /ddf cvx + } for + currentdict /dstStr get 0 /AGMUTIL_ndx /load cvx /getinterval cvx + ] cvx /if cvx + /end cvx + ] cvx + bind + /exec cvx + ] cvx + end +} bdf +/AGMUTIL_imagefile nd +/read_image_file +{ + AGMUTIL_imagefile 0 setfileposition + 10 dict begin + /imageDict xdf + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + /imbufIdx 0 def + /origDataSource imageDict /DataSource get def + /origMultipleDataSources imageDict /MultipleDataSources get def + /origDecode imageDict /Decode get def + /dstDataStr imageDict /Width get colorSpaceElemCnt mul string def + /srcDataStrs [ imageDict begin + currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse + { + Width Decode length 2 div mul cvi string + } repeat + end ] def + imageDict /MultipleDataSources known {MultipleDataSources}{false} ifelse + { + /imbufCnt imageDict /DataSource get length def + /imbufs imbufCnt array def + 0 1 imbufCnt 1 sub { + /imbufIdx xdf + imbufs imbufIdx imbufLen string put + imageDict /DataSource get imbufIdx [ AGMUTIL_imagefile imbufs imbufIdx get /readstring cvx /pop cvx ] cvx put + } for + DeviceN_PS2 { + imageDict begin + /DataSource [ DataSource /devn_sep_datasource cvx ] cvx def + /MultipleDataSources false def + /Decode [0 1] def + end + } if + }{ + /imbuf imbufLen string def + Indexed_DeviceN level3 not and DeviceN_NoneName or { + imageDict begin + /DataSource [AGMUTIL_imagefile Decode BitsPerComponent false 1 /filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource /exec cvx] cvx def + /Decode [0 1] def + end + }{ + imageDict /DataSource {AGMUTIL_imagefile imbuf readstring pop} put + } ifelse + } ifelse + imageDict exch + load exec + imageDict /DataSource origDataSource put + imageDict /MultipleDataSources origMultipleDataSources put + imageDict /Decode origDecode put + end +} bdf +/write_image_file +{ + begin + { (AGMUTIL_imagefile) (w+) file } stopped{ + false + }{ + Adobe_AGM_Utils/AGMUTIL_imagefile xddf + 2 dict begin + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + MultipleDataSources {DataSource 0 get}{DataSource}ifelse type /filetype eq { + /imbuf imbufLen string def + }if + 1 1 Height { + pop + MultipleDataSources { + 0 1 DataSource length 1 sub { + DataSource type dup + /arraytype eq { + pop DataSource exch get exec + }{ + /filetype eq { + DataSource exch get imbuf readstring pop + }{ + DataSource exch get + } ifelse + } ifelse + AGMUTIL_imagefile exch writestring + } for + }{ + DataSource type dup + /arraytype eq { + pop DataSource exec + }{ + /filetype eq { + DataSource imbuf readstring pop + }{ + DataSource + } ifelse + } ifelse + AGMUTIL_imagefile exch writestring + } ifelse + }for + end + true + }ifelse + end +} bdf +/close_image_file +{ + AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile +}def +statusdict /product known userdict /AGMP_current_show known not and{ + /pstr statusdict /product get def + pstr (HP LaserJet 2200) eq + pstr (HP LaserJet 4000 Series) eq or + pstr (HP LaserJet 4050 Series ) eq or + pstr (HP LaserJet 8000 Series) eq or + pstr (HP LaserJet 8100 Series) eq or + pstr (HP LaserJet 8150 Series) eq or + pstr (HP LaserJet 5000 Series) eq or + pstr (HP LaserJet 5100 Series) eq or + pstr (HP Color LaserJet 4500) eq or + pstr (HP Color LaserJet 4600) eq or + pstr (HP LaserJet 5Si) eq or + pstr (HP LaserJet 1200 Series) eq or + pstr (HP LaserJet 1300 Series) eq or + pstr (HP LaserJet 4100 Series) eq or + { + userdict /AGMP_current_show /show load put + userdict /show { + currentcolorspace 0 get + /Pattern eq + {false charpath f} + {AGMP_current_show} ifelse + } put + }if + currentdict /pstr undef +} if +/consumeimagedata +{ + begin + currentdict /MultipleDataSources known not + {/MultipleDataSources false def} if + MultipleDataSources + { + 1 dict begin + /flushbuffer Width cvi string def + 1 1 Height cvi + { + pop + 0 1 DataSource length 1 sub + { + DataSource exch get + dup type dup + /filetype eq + { + exch flushbuffer readstring pop pop + }if + /arraytype eq + { + exec pop + }if + }for + }for + end + } + { + /DataSource load type dup + /filetype eq + { + 1 dict begin + /flushbuffer Width Decode length 2 div mul cvi string def + 1 1 Height { pop DataSource flushbuffer readstring pop pop} for + end + }if + /arraytype eq + { + 1 1 Height { pop DataSource pop } for + }if + }ifelse + end +}bdf +/addprocs +{ + 2{/exec load}repeat + 3 1 roll + [ 5 1 roll ] bind cvx +}def +/modify_halftone_xfer +{ + currenthalftone dup length dict copy begin + currentdict 2 index known{ + 1 index load dup length dict copy begin + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs /TransferFunction xdf + currentdict end def + currentdict end sethalftone + }{ + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs /TransferFunction xdf + currentdict end sethalftone + pop + }ifelse +}def +/clonearray +{ + dup xcheck exch + dup length array exch + Adobe_AGM_Core/AGMCORE_tmp -1 ddf + { + Adobe_AGM_Core/AGMCORE_tmp AGMCORE_tmp 1 add ddf + dup type /dicttype eq + { + AGMCORE_tmp + exch + clonedict + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + } if + dup type /arraytype eq + { + AGMCORE_tmp exch + clonearray + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + } if + exch dup + AGMCORE_tmp 4 -1 roll put + }forall + exch {cvx} if +}bdf +/clonedict +{ + dup length dict + begin + { + dup type /dicttype eq + { + clonedict + } if + dup type /arraytype eq + { + clonearray + } if + def + }forall + currentdict + end +}bdf +/DeviceN_PS2 +{ + /currentcolorspace AGMCORE_gget 0 get /DeviceN eq level3 not and +} bdf +/Indexed_DeviceN +{ + /indexed_colorspace_dict AGMCORE_gget dup null ne { + /CSD known + }{ + pop false + } ifelse +} bdf +/DeviceN_NoneName +{ + /Names where { + pop + false Names + { + (None) eq or + } forall + }{ + false + }ifelse +} bdf +/DeviceN_PS2_inRip_seps +{ + /AGMCORE_in_rip_sep where + { + pop dup type dup /arraytype eq exch /packedarraytype eq or + { + dup 0 get /DeviceN eq level3 not and AGMCORE_in_rip_sep and + { + /currentcolorspace exch AGMCORE_gput + false + } + { + true + }ifelse + } + { + true + } ifelse + } + { + true + } ifelse +} bdf +/base_colorspace_type +{ + dup type /arraytype eq {0 get} if +} bdf +/doc_setup{ + Adobe_AGM_Utils begin +}bdf +/doc_trailer{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright (C) 1997-2003 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Core 216 dict dup begin put +/nd{ + null def +}bind def +/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen [currentscreen] cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSA_cache 0 dict def +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_pattern_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_ovp nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/AGMCORE_Default_PageSize nd +/AGMCORE_currentbg nd +/AGMCORE_currentucr nd +/AGMCORE_gradientcache 32 dict def +/AGMCORE_in_pattern false def +/knockout_unitsq nd +/AGMCORE_CRD_cache where{ + pop +}{ + /AGMCORE_CRD_cache 0 dict def +}ifelse +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + 2 dict begin + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer {readline} stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + end + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type /dicttype eq{ + dup /HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup /HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +} def +/clp_npth +{ + clip newpath +} def +/eoclp_npth +{ + eoclip newpath +} def +/npth_clp +{ + newpath clip +} def +/add_grad +{ + AGMCORE_gradientcache 3 1 roll put +}bdf +/exec_grad +{ + AGMCORE_gradientcache exch get exec +}bdf +/graphic_setup +{ + /AGMCORE_graphicsave save def + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + [] 0 setdash + 10 setmiterlimit + newpath + false setoverprint + false setstrokeadjust + Adobe_AGM_Core/spot_alias get exec + /Adobe_AGM_Image where { + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + get exec + }{ + pop pop + }ifelse + } if + 100 dict begin + /dictstackcount countdictstack def + /showpage {} def + mark +} def +/graphic_cleanup +{ + cleartomark + dictstackcount 1 countdictstack 1 sub {end}for + end + AGMCORE_graphicsave restore +} def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + } if + AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + } + { + AGMCORE_str256 exch AGMCORE_tmp xpt + /AGMCORE_tmp AGMCORE_tmp 1 add def + } ifelse + } forall +} bdf +/doc_setup{ + Adobe_AGM_Core begin + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + errordict /AGM_handleerror known not{ + errordict /AGM_handleerror errordict /handleerror get put + errordict /handleerror { + Adobe_AGM_Core begin + $error /newerror get AGMCORE_cur_err null ne and{ + $error /newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error /newerror true put + end + errordict /AGM_handleerror get exec + } bind put + }if + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + AGMCORE_environ_ok not + {/AGMCORE_cur_err /AGMCORE_bad_environ def} if + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_currentbg currentblackgeneration def + /AGMCORE_currentucr currentundercolorremoval def + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and + }{ + false + }ifelse + def + level2 not{ + /xput{ + dup load dup length exch maxlength eq{ + dup dup load dup + length dup 0 eq {pop 1} if 2 mul dict copy def + }if + load begin + def + end + }def + }{ + /xput{ + load 3 1 roll put + }def + }ifelse + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_tmpmatrix matrix def + /AGMCORE_gstack 32 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 10 def + /AGMCORE_&gsave /gsave ldf + /AGMCORE_&grestore /grestore ldf + /AGMCORE_&grestoreall /grestoreall ldf + /AGMCORE_&save /save ldf + /AGMCORE_gdictcopy { + begin + { def } forall + end + }def + /AGMCORE_gput { + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget { + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave { + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge {limitcheck} if + Adobe_AGM_Core exch + /AGMCORE_gstackptr xpt + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore { + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt {1 add} if + Adobe_AGM_Core exch + /AGMCORE_gstackptr xpt + }def + /grestoreall { + AGMCORE_&grestoreall + Adobe_AGM_Core + /AGMCORE_gstackptr AGMCORE_gstacksaveptr put + }def + /save { + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge {limitcheck} if + Adobe_AGM_Core begin + /AGMCORE_gstackptr exch def + /AGMCORE_gstacksaveptr AGMCORE_gstackptr def + end + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + 0 1 AGMCORE_gstack length 1 sub { + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + } for + }if + level3 /AGMCORE_&sysshfill AGMCORE_key_known not and + { + /AGMCORE_&sysshfill systemdict/shfill get def + /AGMCORE_&usrshfill /shfill load def + /AGMCORE_&sysmakepattern systemdict/makepattern get def + /AGMCORE_&usrmakepattern /makepattern load def + }if + /currentcmykcolor [0 0 0 0] AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace [/DeviceGray] AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /devicen_tints [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /devicen_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent () AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + << + /MaxPatternItem currentsystemparams /MaxPatternCache get + >> + setuserparams + end +}def +/page_setup +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { + pop 0 + } if + 3 1 roll + } repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + { + pop + }ndf + /currentoverprint + { + false + }ndf + /AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_have_reported_unsupported_color_space false def + /AGMCORE_report_unsupported_color_space + { + AGMCORE_have_reported_unsupported_color_space false eq + { + (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.) == + Adobe_AGM_Core /AGMCORE_have_reported_unsupported_color_space true ddf + } if + }def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /LeaveColorUnchanged eq + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where {pop}{ + /convert_spot_to_process + { + dup map_alias { + /Name get exch pop + } if + dup dup (None) eq exch (All) eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + 1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor + currentgray 0 eq + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + Adobe_AGM_Core/AGMCORE_name xddf + false + Adobe_AGM_Core/AGMCORE_in_pattern known {Adobe_AGM_Core/AGMCORE_in_pattern get}{false} ifelse + not currentpagedevice/OverrideSeparations known and + { + currentpagedevice/OverrideSeparations get + { + /HqnSpots /ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not + }{ + gsave + [/Separation AGMCORE_name /DeviceGray {}]setcolorspace + false + currentpagedevice/SeparationColorNames 2 copy known + { + get + { AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + }def + }ifelse + /convert_to_process where {pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + dup true exch + { + dup (Cyan) eq exch + dup (Magenta) eq 3 -1 roll or exch + dup (Yellow) eq 3 -1 roll or exch + dup (Black) eq 3 -1 roll or + {pop} + {convert_spot_to_process and}ifelse + } + forall + { + true exch + { + dup (Cyan) eq exch + dup (Magenta) eq 3 -1 roll or exch + dup (Yellow) eq 3 -1 roll or exch + (Black) eq or and + }forall + not + }{pop false}ifelse + }{ + false exch + { + dup (Cyan) eq exch + dup (Magenta) eq 3 -1 roll or exch + dup (Yellow) eq 3 -1 roll or exch + dup (Black) eq 3 -1 roll or + {pop} + {convert_spot_to_process or}ifelse + } + forall + }ifelse + }ifelse + }def + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + AGMCORE_host_sep{ + /setcolortransfer + { + AGMCORE_cyan_plate{ + pop pop pop + }{ + AGMCORE_magenta_plate{ + 4 3 roll pop pop pop + }{ + AGMCORE_yellow_plate{ + 4 2 roll pop pop pop + }{ + 4 1 roll pop pop pop + }ifelse + }ifelse + }ifelse + settransfer + } + def + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /AGMCORE_RemoveProcessColorNames + { + 1 dict begin + /filtername + { + dup /Cyan eq 1 index (Cyan) eq or + {pop (_cyan_)}if + dup /Magenta eq 1 index (Magenta) eq or + {pop (_magenta_)}if + dup /Yellow eq 1 index (Yellow) eq or + {pop (_yellow_)}if + dup /Black eq 1 index (Black) eq or + {pop (_black_)}if + }def + dup type /arraytype eq + {[exch {filtername}forall]} + {filtername}ifelse + end + }def + /AGMCORE_IsSeparationAProcessColor + { + dup (Cyan) eq exch dup (Magenta) eq exch dup (Yellow) eq exch (Black) eq or or or + }def + level3 { + /AGMCORE_IsCurrentColor + { + gsave + false setoverprint + 1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor + currentgray 0 eq + grestore + }def + /AGMCORE_filter_functiondatasource + { + 5 dict begin + /data_in xdf + data_in type /stringtype eq + { + /ncomp xdf + /comp xdf + /string_out data_in length ncomp idiv string def + 0 ncomp data_in length 1 sub + { + string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put + }for + string_out + }{ + string /string_in xdf + /string_out 1 string def + /component xdf + [ + data_in string_in /readstring cvx + [component /get cvx 255 /exch cvx /sub cvx string_out /exch cvx 0 /exch cvx /put cvx string_out]cvx + [/pop cvx ()]cvx /ifelse cvx + ]cvx /ReusableStreamDecode filter + }ifelse + end + }def + /AGMCORE_separateShadingFunction + { + 2 dict begin + /paint? xdf + /channel xdf + begin + FunctionType 0 eq + { + /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def + currentdict /Decode known + {/Decode Decode channel 2 mul 2 getinterval def}if + paint? not + {/Decode [1 1]def}if + }if + FunctionType 2 eq + { + paint? + { + /C0 [C0 channel get 1 exch sub] def + /C1 [C1 channel get 1 exch sub] def + }{ + /C0 [1] def + /C1 [1] def + }ifelse + }if + FunctionType 3 eq + { + /Functions [Functions {channel paint? AGMCORE_separateShadingFunction} forall] def + }if + currentdict /Range known + {/Range [0 1] def}if + currentdict + end + end + }def + /AGMCORE_separateShading + { + 3 -1 roll begin + currentdict /Function known + { + currentdict /Background known + {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if + Function 3 1 roll AGMCORE_separateShadingFunction /Function xdf + /ColorSpace [/DeviceGray] def + }{ + ColorSpace dup type /arraytype eq {0 get}if /DeviceCMYK eq + { + /ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}] def + }{ + ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put + }ifelse + ColorSpace 0 get /Separation eq + { + { + [1 /exch cvx /sub cvx]cvx + }{ + [/pop cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll put + pop + }{ + { + [exch ColorSpace 1 get length 1 sub exch sub /index cvx 1 /exch cvx /sub cvx ColorSpace 1 get length 1 add 1 /roll cvx ColorSpace 1 get length{/pop cvx} repeat]cvx + }{ + pop [ColorSpace 1 get length {/pop cvx} repeat cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll bind put + }ifelse + ColorSpace 2 /DeviceGray put + }ifelse + end + }def + /AGMCORE_separateShadingDict + { + dup /ColorSpace get + dup type /arraytype ne + {[exch]}if + dup 0 get /DeviceCMYK eq + { + exch begin + currentdict + AGMCORE_cyan_plate + {0 true}if + AGMCORE_magenta_plate + {1 true}if + AGMCORE_yellow_plate + {2 true}if + AGMCORE_black_plate + {3 true}if + AGMCORE_plate_ndx 4 eq + {0 false}if + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + currentdict + end exch + }if + dup 0 get /Separation eq + { + exch begin + ColorSpace 1 get dup /None ne exch /All ne and + { + ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and + { + ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq + { + /ColorSpace + [ + /Separation + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get /exec cvx + 4 AGMCORE_plate_ndx sub -1 /roll cvx + 4 1 /roll cvx + 3 [/pop cvx]cvx /repeat cvx + 1 /exch cvx /sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + }if + }ifelse + }{ + currentdict ColorSpace 1 get AGMCORE_IsCurrentColor + 0 exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + }if + currentdict + end exch + }if + dup 0 get /DeviceN eq + { + exch begin + ColorSpace 1 get convert_to_process + { + ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq + { + /ColorSpace + [ + /DeviceN + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get /exec cvx + 4 AGMCORE_plate_ndx sub -1 /roll cvx + 4 1 /roll cvx + 3 [/pop cvx]cvx /repeat cvx + 1 /exch cvx /sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + /ColorSpace [/DeviceGray] def + }if + }ifelse + }{ + currentdict + false -1 ColorSpace 1 get + { + AGMCORE_IsCurrentColor + { + 1 add + exch pop true exch exit + }if + 1 add + }forall + exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + currentdict + end exch + }if + dup 0 get dup /DeviceCMYK eq exch dup /Separation eq exch /DeviceN eq or or not + { + exch begin + ColorSpace dup type /arraytype eq + {0 get}if + /DeviceGray ne + { + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + ColorSpace 0 get /CIEBasedA eq + { + /ColorSpace [/Separation /_ciebaseda_ /DeviceGray {}] def + }if + ColorSpace 0 get dup /CIEBasedABC eq exch dup /CIEBasedDEF eq exch /DeviceRGB eq or or + { + /ColorSpace [/DeviceN [/_red_ /_green_ /_blue_] /DeviceRGB {}] def + }if + ColorSpace 0 get /CIEBasedDEFG eq + { + /ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}] + }if + currentdict 0 false AGMCORE_separateShading + }if + }if + currentdict + end exch + }if + pop + dup /AGMCORE_ignoreshade known + { + begin + /ColorSpace [/Separation (None) /DeviceGray {}] def + currentdict end + }if + }def + /shfill + { + clonedict + AGMCORE_separateShadingDict + dup /AGMCORE_ignoreshade known + {pop} + {AGMCORE_&sysshfill}ifelse + }def + /makepattern + { + exch + dup /PatternType get 2 eq + { + clonedict + begin + /Shading Shading AGMCORE_separateShadingDict def + currentdict end + exch AGMCORE_&sysmakepattern + }{ + exch AGMCORE_&usrmakepattern + }ifelse + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4 {4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + Adobe_AGM_Core begin + /AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf + end + [/Separation 4 -1 roll /DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation (All) /DeviceGray {}] setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4 {4 index mul 4 1 roll} repeat + setcmykcolor pop + }ndf + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + /map_index + { + 1 index mul exch getinterval {255 div} forall + } bdf + /map_indexed_devn + { + Lookup Names length 3 -1 roll cvi map_index + } bdf + /n_color_components + { + base_colorspace_type + dup /DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + }bdf + level2{ + /mo /moveto ldf + /li /lineto ldf + /cv /curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + /level2ScreenFreq{ + begin + 60 + HalftoneType 1 eq{ + pop Frequency + }if + HalftoneType 2 eq{ + pop GrayFrequency + }if + HalftoneType 5 eq{ + pop Default level2ScreenFreq + }if + end + }def + /currentScreenFreq{ + currenthalftone level2ScreenFreq + }def + level2 /setcolorspace AGMCORE_key_known not and{ + /AGMCORE_&&&setcolorspace /setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup /arraytype eq exch /packedarraytype eq or + { + dup 0 get dup /Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + [ + /Separation Name + CSA map_csa + dup /MappedCSA xdf + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 xpt + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get [ + exch { + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + } forall + ] 1 xpt + }if + }ifelse + }if + }def + /setcolorspace + { + dup type dup /arraytype eq exch /packedarraytype eq or + { + dup 0 get /Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + DeviceN_PS2_inRip_seps {AGMCORE_&&&setcolorspace} if + }def + }if + }{ + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1 [8 0 0 8 0 0] {} image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /currentScreenFreq{ + currentscreen pop pop + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + } def + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + } def + /setcolor_devicecolor + { + base_colorspace_type + dup /DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + /setcolor + { + currentcolorspace 0 get + dup /DeviceGray ne{ + dup /DeviceCMYK ne{ + dup /DeviceRGB ne{ + dup /Separation eq{ + pop + currentcolorspace 3 get exec + currentcolorspace 2 get + }{ + dup /Indexed eq{ + pop + currentcolorspace 3 get dup type /stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err /AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + } def + }ifelse + /sop /setoverprint ldf + /lw /setlinewidth ldf + /lc /setlinecap ldf + /lj /setlinejoin ldf + /ml /setmiterlimit ldf + /dsh /setdash ldf + /sadj /setstrokeadjust ldf + /gry /setgray ldf + /rgb /setrgbcolor ldf + /cmyk /setcmykcolor ldf + /sep /setsepcolor ldf + /devn /setdevicencolor ldf + /idx /setindexedcolor ldf + /colr /setcolor ldf + /csacrd /set_csa_crd ldf + /sepcs /setsepcolorspace ldf + /devncs /setdevicencolorspace ldf + /idxcs /setindexedcolorspace ldf + /cp /closepath ldf + /clp /clp_npth ldf + /eclp /eoclp_npth ldf + /f /fill ldf + /ef /eofill ldf + /@ /stroke ldf + /nclp /npth_clp ldf + /gset /graphic_setup ldf + /gcln /graphic_cleanup ldf + currentdict{ + dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and { + bind + }if + def + }forall + /currentpagedevice currentpagedevice def +/getrampcolor { +/indx exch def +0 1 NumComp 1 sub { +dup +Samples exch get +dup type /stringtype eq { indx get } if +exch +Scaling exch get aload pop +3 1 roll +mul add +} for +ColorSpaceFamily /Separation eq + { + sep + } + { + ColorSpaceFamily /DeviceN eq + { + devn + } + { + setcolor + }ifelse + }ifelse +} bind def +/sssetbackground { aload pop setcolor } bind def +/RadialShade { +40 dict begin +/ColorSpaceFamily exch def +/background exch def +/ext1 exch def +/ext0 exch def +/BBox exch def +/r2 exch def +/c2y exch def +/c2x exch def +/r1 exch def +/c1y exch def +/c1x exch def +/rampdict exch def +/setinkoverprint where {pop /setinkoverprint{pop}def}if +gsave +BBox length 0 gt { +newpath +BBox 0 get BBox 1 get moveto +BBox 2 get BBox 0 get sub 0 rlineto +0 BBox 3 get BBox 1 get sub rlineto +BBox 2 get BBox 0 get sub neg 0 rlineto +closepath +clip +newpath +} if +c1x c2x eq +{ +c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse +} +{ +/slope c2y c1y sub c2x c1x sub div def +/theta slope 1 atan def +c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if +c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if +} +ifelse +gsave +clippath +c1x c1y translate +theta rotate +-90 rotate +{ pathbbox } stopped +{ 0 0 0 0 } if +/yMax exch def +/xMax exch def +/yMin exch def +/xMin exch def +grestore +xMax xMin eq yMax yMin eq or +{ +grestore +end +} +{ +/max { 2 copy gt { pop } {exch pop} ifelse } bind def +/min { 2 copy lt { pop } {exch pop} ifelse } bind def +rampdict begin +40 dict begin +background length 0 gt { background sssetbackground gsave clippath fill grestore } if +gsave +c1x c1y translate +theta rotate +-90 rotate +/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def +/c1y 0 def +/c1x 0 def +/c2x 0 def +ext0 { +0 getrampcolor +c2y r2 add r1 sub 0.0001 lt +{ +c1x c1y r1 360 0 arcn +pathbbox +/aymax exch def +/axmax exch def +/aymin exch def +/axmin exch def +/bxMin xMin axmin min def +/byMin yMin aymin min def +/bxMax xMax axmax max def +/byMax yMax aymax max def +bxMin byMin moveto +bxMax byMin lineto +bxMax byMax lineto +bxMin byMax lineto +bxMin byMin lineto +eofill +} +{ +c2y r1 add r2 le +{ +c1x c1y r1 0 360 arc +fill +} +{ +c2x c2y r2 0 360 arc fill +r1 r2 eq +{ +/p1x r1 neg def +/p1y c1y def +/p2x r1 def +/p2y c1y def +p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto +fill +} +{ +/AA r2 r1 sub c2y div def +/theta AA 1 AA dup mul sub sqrt div 1 atan def +/SS1 90 theta add dup sin exch cos div def +/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def +/p1y p1x SS1 div neg def +/SS2 90 theta sub dup sin exch cos div def +/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def +/p2y p2x SS2 div neg def +r1 r2 gt +{ +/L1maxX p1x yMin p1y sub SS1 div add def +/L2maxX p2x yMin p2y sub SS2 div add def +} +{ +/L1maxX 0 def +/L2maxX 0 def +}ifelse +p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto +L1maxX L1maxX p1x sub SS1 mul p1y add lineto +fill +} +ifelse +} +ifelse +} ifelse +} if +c1x c2x sub dup mul +c1y c2y sub dup mul +add 0.5 exp +0 dtransform +dup mul exch dup mul add 0.5 exp 72 div +0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt +72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt +1 index 1 index lt { exch } if pop +/hires exch def +hires mul +/numpix exch def +/numsteps NumSamples def +/rampIndxInc 1 def +/subsampling false def +numpix 0 ne +{ +NumSamples numpix div 0.5 gt +{ +/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def +/rampIndxInc NumSamples 1 sub numsteps div def +/subsampling true def +} if +} if +/xInc c2x c1x sub numsteps div def +/yInc c2y c1y sub numsteps div def +/rInc r2 r1 sub numsteps div def +/cx c1x def +/cy c1y def +/radius r1 def +newpath +xInc 0 eq yInc 0 eq rInc 0 eq and and +{ +0 getrampcolor +cx cy radius 0 360 arc +stroke +NumSamples 1 sub getrampcolor +cx cy radius 72 hires div add 0 360 arc +0 setlinewidth +stroke +} +{ +0 +numsteps +{ +dup +subsampling { round cvi } if +getrampcolor +cx cy radius 0 360 arc +/cx cx xInc add def +/cy cy yInc add def +/radius radius rInc add def +cx cy radius 360 0 arcn +eofill +rampIndxInc add +} +repeat +pop +} ifelse +ext1 { +c2y r2 add r1 lt +{ +c2x c2y r2 0 360 arc +fill +} +{ +c2y r1 add r2 sub 0.0001 le +{ +c2x c2y r2 360 0 arcn +pathbbox +/aymax exch def +/axmax exch def +/aymin exch def +/axmin exch def +/bxMin xMin axmin min def +/byMin yMin aymin min def +/bxMax xMax axmax max def +/byMax yMax aymax max def +bxMin byMin moveto +bxMax byMin lineto +bxMax byMax lineto +bxMin byMax lineto +bxMin byMin lineto +eofill +} +{ +c2x c2y r2 0 360 arc fill +r1 r2 eq +{ +/p1x r2 neg def +/p1y c2y def +/p2x r2 def +/p2y c2y def +p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto +fill +} +{ +/AA r2 r1 sub c2y div def +/theta AA 1 AA dup mul sub sqrt div 1 atan def +/SS1 90 theta add dup sin exch cos div def +/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def +/p1y c2y p1x SS1 div sub def +/SS2 90 theta sub dup sin exch cos div def +/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def +/p2y c2y p2x SS2 div sub def +r1 r2 lt +{ +/L1maxX p1x yMax p1y sub SS1 div add def +/L2maxX p2x yMax p2y sub SS2 div add def +} +{ +/L1maxX 0 def +/L2maxX 0 def +}ifelse +p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto +L1maxX L1maxX p1x sub SS1 mul p1y add lineto +fill +} +ifelse +} +ifelse +} ifelse +} if +grestore +grestore +end +end +end +} ifelse +} bind def +/GenStrips { +40 dict begin +/ColorSpaceFamily exch def +/background exch def +/ext1 exch def +/ext0 exch def +/BBox exch def +/y2 exch def +/x2 exch def +/y1 exch def +/x1 exch def +/rampdict exch def +/setinkoverprint where {pop /setinkoverprint{pop}def}if +gsave +BBox length 0 gt { +newpath +BBox 0 get BBox 1 get moveto +BBox 2 get BBox 0 get sub 0 rlineto +0 BBox 3 get BBox 1 get sub rlineto +BBox 2 get BBox 0 get sub neg 0 rlineto +closepath +clip +newpath +} if +x1 x2 eq +{ +y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse +} +{ +/slope y2 y1 sub x2 x1 sub div def +/theta slope 1 atan def +x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if +x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if +} +ifelse +gsave +clippath +x1 y1 translate +theta rotate +{ pathbbox } stopped +{ 0 0 0 0 } if +/yMax exch def +/xMax exch def +/yMin exch def +/xMin exch def +grestore +xMax xMin eq yMax yMin eq or +{ +grestore +end +} +{ +rampdict begin +20 dict begin +background length 0 gt { background sssetbackground gsave clippath fill grestore } if +gsave +x1 y1 translate +theta rotate +/xStart 0 def +/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def +/ySpan yMax yMin sub def +/numsteps NumSamples def +/rampIndxInc 1 def +/subsampling false def +xStart 0 transform +xEnd 0 transform +3 -1 roll +sub dup mul +3 1 roll +sub dup mul +add 0.5 exp 72 div +0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt +72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt +1 index 1 index lt { exch } if pop +mul +/numpix exch def +numpix 0 ne +{ +NumSamples numpix div 0.5 gt +{ +/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def +/rampIndxInc NumSamples 1 sub numsteps div def +/subsampling true def +} if +} if +ext0 { +0 getrampcolor +xMin xStart lt +{ xMin yMin xMin neg ySpan rectfill } if +} if +/xInc xEnd xStart sub numsteps div def +/x xStart def +0 +numsteps +{ +dup +subsampling { round cvi } if +getrampcolor +x yMin xInc ySpan rectfill +/x x xInc add def +rampIndxInc add +} +repeat +pop +ext1 { +xMax xEnd gt +{ xEnd yMin xMax xEnd sub ySpan rectfill } if +} if +grestore +grestore +end +end +end +} ifelse +} bind def +}def +/page_trailer +{ + end +}def +/doc_trailer{ +}def +systemdict /findcolorrendering known{ + /findcolorrendering systemdict /findcolorrendering get def +}if +systemdict /setcolorrendering known{ + /setcolorrendering systemdict /setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA map_csa setcolorspace_opt + set_crd + end +} +def +/setsepcolor +{ + /sep_colorspace_dict AGMCORE_gget begin + dup /sep_tint exch AGMCORE_gput + TintProc + end +} def +/setdevicencolor +{ + /devicen_colorspace_dict AGMCORE_gget begin + Names length copy + Names length 1 sub -1 0 + { + /devicen_tints AGMCORE_gget 3 1 roll xpt + } for + TintProc + end +} def +/sep_colorspace_proc +{ + Adobe_AGM_Core/AGMCORE_tmp xddf + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2 {AGMCORE_tmp mul NComponents 1 roll} repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + } repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +} def +/sep_colorspace_gray_proc +{ + Adobe_AGM_Core/AGMCORE_tmp xddf + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +} def +/sep_proc_name +{ + dup 0 get + dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{ + pop [/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +} def +/setsepcolorspace +{ + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup /sep_colorspace_dict exch AGMCORE_gput + begin + /MappedCSA CSA map_csa def + Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + { 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx + ] setcolorspace_opt + /TintProc { + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get /DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc [ + Components aload pop Name findcmykcustomcolor + /exch cvx /setcustomcolor cvx + ] cvx bdf + }{ + AGMCORE_host_sep Name (All) eq and{ + /TintProc { + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and + AGMCORE_host_sep or + Name () eq and{ + /TintProc [ + MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{ + cvx /setcmykcolor cvx + }{ + cvx /setgray cvx + }ifelse + ] cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc [ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get /DeviceGray eq{ + 1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx + }if + /Name cvx /findcmykcustomcolor cvx /exch cvx + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + /Name cvx + /AGMCORE_IsSeparationAProcessColor load /exec cvx + /not cvx /and cvx + }{ + Name inRip_spot_has_ink not + }ifelse + [ + /pop cvx 1 + ] cvx /if cvx + /setcustomcolor cvx + ] cvx bdf + }{ + /TintProc /setcolor ldf + [/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +} def +/additive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 + 0 1 numarrays 1 sub + { + 1 exch add /index cvx + c1 /get cvx /mul cvx + }for + numarrays 1 add 1 /roll cvx + }for + numarrays [/pop cvx] cvx /repeat cvx + end +}def +/subtractive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 1 + 0 1 numarrays 1 sub + { + 1 3 3 -1 roll add /index cvx + c1 /get cvx /sub cvx /mul cvx + }for + /sub cvx + numarrays 1 add 1 /roll cvx + }for + numarrays [/pop cvx] cvx /repeat cvx + end +}def +/exec_tint_transform +{ + /TintProc [ + /TintTransform cvx /setcolor cvx + ] cvx bdf + MappedCSA setcolorspace_opt +} bdf +/devn_makecustomcolor +{ + 2 dict begin + /names_index xdf + /Names xdf + 1 1 1 1 Names names_index get findcmykcustomcolor + /devicen_tints AGMCORE_gget names_index get setcustomcolor + Names length {pop} repeat + end +} bdf +/setdevicencolorspace +{ + dup /AliasedColorants known {false}{true}ifelse + current_spot_alias and { + 6 dict begin + /names_index 0 def + dup /names_len exch /Names get length def + /new_names names_len array def + /new_LookupTables names_len array def + /alias_cnt 0 def + dup /Names get + { + dup map_alias { + exch pop + dup /ColorLookup known { + dup begin + new_LookupTables names_index ColorLookup put + end + }{ + dup /Components known { + dup begin + new_LookupTables names_index Components put + end + }{ + dup begin + new_LookupTables names_index [null null null null] put + end + } ifelse + } ifelse + new_names names_index 3 -1 roll /Name get put + /alias_cnt alias_cnt 1 add def + }{ + /name xdf + new_names names_index name put + dup /LookupTables known { + dup begin + new_LookupTables names_index LookupTables names_index get put + end + }{ + dup begin + new_LookupTables names_index [null null null null] put + end + } ifelse + } ifelse + /names_index names_index 1 add def + } forall + alias_cnt 0 gt { + /AliasedColorants true def + 0 1 names_len 1 sub { + /names_index xdf + new_LookupTables names_index get 0 get null eq { + dup /Names get names_index get /name xdf + name (Cyan) eq name (Magenta) eq name (Yellow) eq name (Black) eq + or or or not { + /AliasedColorants false def + exit + } if + } if + } for + AliasedColorants { + dup begin + /Names new_names def + /AliasedColorants true def + /LookupTables new_LookupTables def + currentdict /TTTablesIdx known not { + /TTTablesIdx -1 def + } if + currentdict /NComponents known not { + /NComponents TintMethod /Subtractive eq {4}{3}ifelse def + } if + end + } if + }if + end + } if + dup /devicen_colorspace_dict exch AGMCORE_gput + begin + /MappedCSA CSA map_csa def + currentdict /AliasedColorants known { + AliasedColorants + }{ + false + } ifelse + /TintTransform load type /nulltype eq or { + /TintTransform [ + 0 1 Names length 1 sub + { + /TTTablesIdx TTTablesIdx 1 add def + dup LookupTables exch get dup 0 get null eq + { + 1 index + Names exch get + dup (Cyan) eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 0 0 + } + { + dup (Magenta) eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 /exch cvx 0 0 + } + { + (Yellow) eq + { + exch + LookupTables length exch sub + /index cvx + 0 0 3 -1 /roll cvx 0 + } + { + exch + LookupTables length exch sub + /index cvx + 0 0 0 4 -1 /roll cvx + } ifelse + } ifelse + } ifelse + 5 -1 /roll cvx /astore cvx + } + { + dup length 1 sub + LookupTables length 4 -1 roll sub 1 add + /index cvx /mul cvx /round cvx /cvi cvx /get cvx + } ifelse + Names length TTTablesIdx add 1 add 1 /roll cvx + } for + Names length [/pop cvx] cvx /repeat cvx + NComponents Names length + TintMethod /Subtractive eq + { + subtractive_blend + } + { + additive_blend + } ifelse + ] cvx bdf + } if + AGMCORE_host_sep { + Names convert_to_process { + exec_tint_transform + } + { + currentdict /AliasedColorants known { + AliasedColorants not + }{ + false + } ifelse + 5 dict begin + /AvoidAliasedColorants xdf + /painted? false def + /names_index 0 def + /names_len Names length def + Names { + AvoidAliasedColorants { + /currentspotalias current_spot_alias def + false set_spot_alias + } if + AGMCORE_is_cmyk_sep { + dup (Cyan) eq AGMCORE_cyan_plate and exch + dup (Magenta) eq AGMCORE_magenta_plate and exch + dup (Yellow) eq AGMCORE_yellow_plate and exch + (Black) eq AGMCORE_black_plate and or or or { + /devicen_colorspace_dict AGMCORE_gget /TintProc [ + Names names_index /devn_makecustomcolor cvx + ] cvx ddf + /painted? true def + } if + painted? {exit} if + }{ + 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq { + /devicen_colorspace_dict AGMCORE_gget /TintProc [ + Names names_index /devn_makecustomcolor cvx + ] cvx ddf + /painted? true def + exit + } if + } ifelse + AvoidAliasedColorants { + currentspotalias set_spot_alias + } if + /names_index names_index 1 add def + } forall + painted? { + /devicen_colorspace_dict AGMCORE_gget /names_index names_index put + }{ + /devicen_colorspace_dict AGMCORE_gget /TintProc [ + names_len [/pop cvx] cvx /repeat cvx 1 /setseparationgray cvx + 0 0 0 0 () /findcmykcustomcolor cvx 0 /setcustomcolor cvx + ] cvx ddf + } ifelse + end + } ifelse + } + { + AGMCORE_in_rip_sep { + Names convert_to_process not + }{ + level3 + } ifelse + { + [/DeviceN Names MappedCSA /TintTransform load] setcolorspace_opt + /TintProc level3 not AGMCORE_in_rip_sep and { + [ + Names /length cvx [/pop cvx] cvx /repeat cvx + ] cvx bdf + }{ + /setcolor ldf + } ifelse + }{ + exec_tint_transform + } ifelse + } ifelse + set_crd + /AliasedColorants false def + end +} def +/setindexedcolorspace +{ + dup /indexed_colorspace_dict exch AGMCORE_gput + begin + currentdict /CSD known { + CSD get_csd /Names known { + CSD get_csd begin + currentdict devncs + AGMCORE_host_sep{ + 4 dict begin + /devnCompCnt Names length def + /NewLookup HiVal 1 add string def + 0 1 HiVal { + /tableIndex xdf + Lookup dup type /stringtype eq { + devnCompCnt tableIndex map_index + }{ + exec + } ifelse + setdevicencolor + currentgray + tableIndex exch + HiVal mul cvi + NewLookup 3 1 roll put + } for + [/Indexed currentcolorspace HiVal NewLookup] setcolorspace_opt + end + }{ + level3 + { + [/Indexed [/DeviceN Names MappedCSA /TintTransform load] HiVal Lookup] setcolorspace_opt + }{ + [/Indexed MappedCSA HiVal + [ + Lookup dup type /stringtype eq + {/exch cvx CSD get_csd /Names get length dup /mul cvx exch /getinterval cvx {255 div} /forall cvx} + {/exec cvx}ifelse + /TintTransform load /exec cvx + ]cvx + ]setcolorspace_opt + }ifelse + } ifelse + end + }{ + } ifelse + set_crd + } + { + /MappedCSA CSA map_csa def + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{ + pop [/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval {} forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + } bind + }{ + Lookup + }ifelse + }ifelse + ] setcolorspace_opt + set_crd + }ifelse + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep { + /indexed_colorspace_dict AGMCORE_gget dup /CSD known { + begin + CSD get_csd begin + map_indexed_devn + devn + end + end + }{ + AGMCORE_gget/Lookup get 4 3 -1 roll map_index + pop setcmykcolor + } ifelse + }{ + level3 not AGMCORE_in_rip_sep and /indexed_colorspace_dict AGMCORE_gget /CSD known and { + /indexed_colorspace_dict AGMCORE_gget /CSD get get_csd begin + map_indexed_devn + devn + end + } + { + setcolor + } ifelse + }ifelse +} def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup clonedict begin + 1 setgray + /Decode [0 1] def + /DataSource def + /MultipleDataSources false def + /BitsPerComponent 8 def + currentdict end + systemdict /image get exec + grestore + }if + consumeimagedata +}def +/add_csa +{ + Adobe_AGM_Core begin + /AGMCORE_CSA_cache xput + end +}def +/get_csa_by_name +{ + dup type dup /nametype eq exch /stringtype eq or{ + Adobe_AGM_Core begin + 1 dict begin + /name xdf + AGMCORE_CSA_cache + { + 0 get name eq { + exit + }{ + pop + } ifelse + }forall + end + end + }{ + pop + } ifelse +}def +/map_csa +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_CSA_cache get exch get + }if +}def +/add_csd +{ + Adobe_AGM_Core begin + /AGMCORE_CSD_cache xput + end +}def +/get_csd +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_CSD_cache get exch get + }if +}def +/pattern_buf_init +{ + /count get 0 0 put +} def +/pattern_buf_next +{ + dup /count get dup 0 get + dup 3 1 roll + 1 add 0 xpt + get +} def +/cachepattern_compress +{ + 5 dict begin + currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def + /patarray 20 dict def + /string_size 16000 def + /readbuffer string_size string def + currentglobal true setglobal + patarray 1 array dup 0 1 put /count xpt + setglobal + /LZWFilter + { + exch + dup length 0 eq { + pop + }{ + patarray dup length 1 sub 3 -1 roll put + } ifelse + {string_size}{0}ifelse string + } /LZWEncode filter def + { + ReadFilter readbuffer readstring + exch LZWFilter exch writestring + not {exit} if + } loop + LZWFilter closefile + patarray + end +}def +/cachepattern +{ + 2 dict begin + currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def + /patarray 20 dict def + currentglobal true setglobal + patarray 1 array dup 0 1 put /count xpt + setglobal + { + ReadFilter 16000 string readstring exch + patarray dup length 1 sub 3 -1 roll put + not {exit} if + } loop + patarray dup dup length 1 sub () put + end +}def +/add_pattern +{ + Adobe_AGM_Core begin + /AGMCORE_pattern_cache xput + end +}def +/get_pattern +{ + dup type /nametype eq{ + Adobe_AGM_Core/AGMCORE_pattern_cache get exch get + dup wrap_paintproc + }if +}def +/wrap_paintproc +{ + statusdict /currentfilenameextend known{ + begin + /OldPaintProc /PaintProc load def + /PaintProc + { + mark exch + dup /OldPaintProc get stopped + {closefile restore end} if + cleartomark + } def + end + } {pop} ifelse +} def +/make_pattern +{ + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + 1 index begin + BBox 0 get XStep div cvi XStep mul /xshift exch neg def + BBox 1 get YStep div cvi YStep mul /yshift exch neg def + BBox 0 get xshift add + BBox 1 get yshift add + BBox 2 get xshift add + BBox 3 get yshift add + 4 array astore + /BBox exch def + [ xshift yshift /translate load null /exec load ] dup + 3 /PaintProc load put cvx /PaintProc exch def + end + gsave 0 setgray + makepattern + grestore +}def +/set_pattern +{ + dup /PatternType get 1 eq{ + dup /PaintType get 1 eq{ + currentoverprint sop [/DeviceGray] setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{ + pop + }{ + setcolorspace + }ifelse +}def +/updatecolorrendering +{ + currentcolorrendering/Intent known{ + currentcolorrendering/Intent get + }{ + null + }ifelse + Intent ne{ + false + Intent + AGMCORE_CRD_cache { + exch pop + begin + dup Intent eq{ + currentdict setcolorrendering_opt + end + exch pop true exch + exit + }if + end + } forall + pop + not{ + systemdict /findcolorrendering known{ + Intent findcolorrendering pop + /ColorRendering findresource + dup length dict copy + setcolorrendering_opt + }if + }if + }if +} def +/add_crd +{ + AGMCORE_CRD_cache 3 1 roll put +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/CRD known{ + AGMCORE_CRD_cache CRD get dup null ne{ + setcolorrendering_opt + }{ + pop + }ifelse + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + currentcolorspace dup type /arraytype eq + {0 get}if + /DeviceRGB eq + { + currentdict/UCR known + {/UCR}{/AGMCORE_currentucr}ifelse + load setundercolorremoval + currentdict/BG known + {/BG}{/AGMCORE_currentbg}ifelse + load setblackgeneration + }if + }if +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp) flushinput + }if +}def +/cpaint_gsep +{ + Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep) flushinput + }if +}def +/cpaint_gend +{ + newpath +}def +/path_rez +{ + dup 0 ne{ + AGMCORE_deviceDPI exch div + dup 1 lt{ + pop 1 + }if + setflat + }{ + pop + }ifelse +}def +/set_spot_alias_ary +{ + /AGMCORE_SpotAliasAry where{ + pop pop + }{ + Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf + true set_spot_alias + }ifelse +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry{ + dup/Name get AGMCORE_name eq{ + save exch + /Adobe_AGM_Core currentdict def + /CSD get get_csd + exch restore + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + /AGMCORE_&setcustomcolor AGMCORE_key_known not { + Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put + } if + /customcolor_tint 1 AGMCORE_gput + Adobe_AGM_Core begin + /setcustomcolor + { + dup /customcolor_tint exch AGMCORE_gput + current_spot_alias{ + 1 index 4 get map_alias{ + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + pop + }{ + AGMCORE_&setcustomcolor + }ifelse + }{ + AGMCORE_&setcustomcolor + }ifelse + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd /setpagedevice load def + /setpagedevice { get_gstate spd set_gstate } def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known{ + currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse + /AGMIRS_&fill where {pop AGMIRS_&fill}{fill} ifelse grestore + }if + end +}def +/lw_save_restore_override { + /md where { + pop + md begin + initializepage + /initializepage{}def + /pmSVsetup{} def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage /showpage load def} + ifelse + /showpage {orig_showpage gR} def + end + }if +}def +/pscript_showpage_override { + /NTPSOct95 where + { + begin + showpage + save + /showpage /restore load def + /restore {exch pop}def + end + }if +}def +/driver_media_override +{ + /md where { + pop + md /initializepage known { + md /initializepage {} put + } if + md /rC known { + md /rC {4{pop}repeat} put + } if + }if + /mysetup where { + /mysetup [1 0 0 1 0 0] put + }if + Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put + level2 + {Adobe_AGM_Core /AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if +}def +/driver_check_media_override +{ + /PrepsDict where + {pop} + { + Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne + Adobe_AGM_Core /AGMCORE_Default_PageSize get type /arraytype eq + { + Adobe_AGM_Core /AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and + Adobe_AGM_Core /AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and + }if + { + Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix + }if + }ifelse +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def + /AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def + /AGMCORE_invalid_color_space (This job contains an invalid color space. ) def +end +end +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.23 0 +%%Copyright: Copyright 1997-2003 Adobe Systems Incorporated. All Rights Reserved. +%%Version: 2.23 0 +10 dict begin +/Adobe_CoolType_Passthru currentdict def +/Adobe_CoolType_Core_Defined userdict /Adobe_CoolType_Core known def +Adobe_CoolType_Core_Defined + { /Adobe_CoolType_Core userdict /Adobe_CoolType_Core get def } +if +userdict /Adobe_CoolType_Core 60 dict dup begin put +/Adobe_CoolType_Version 2.23 def +/Level2? + systemdict /languagelevel known dup + { pop systemdict /languagelevel get 2 ge } + if def +Level2? not + { + /currentglobal false def + /setglobal /pop load def + /gcheck { pop false } bind def + /currentpacking false def + /setpacking /pop load def + /SharedFontDirectory 0 dict def + } +if +currentpacking +true setpacking +/@_SaveStackLevels + { + Adobe_CoolType_Data + begin + @opStackCountByLevel @opStackLevel + 2 copy known not + { 2 copy 3 dict dup /args 7 index 5 add array put put get } + { + get dup /args get dup length 3 index lt + { + dup length 5 add array exch + 1 index exch 0 exch putinterval + 1 index exch /args exch put + } + { pop } + ifelse + } + ifelse + begin + count 2 sub 1 index lt + { pop count 1 sub } + if + dup /argCount exch def + dup 0 gt + { + exch 1 index 2 add 1 roll + args exch 0 exch getinterval + astore pop + } + { pop } + ifelse + count 1 sub /restCount exch def + end + /@opStackLevel @opStackLevel 1 add def + countdictstack 1 sub + @dictStackCountByLevel exch @dictStackLevel exch put + /@dictStackLevel @dictStackLevel 1 add def + end + } bind def +/@_RestoreStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + @opStackCountByLevel @opStackLevel get + begin + count restCount sub dup 0 gt + { { pop } repeat } + { pop } + ifelse + args 0 argCount getinterval {} forall + end + /@dictStackLevel @dictStackLevel 1 sub def + @dictStackCountByLevel @dictStackLevel get + end + countdictstack exch sub dup 0 gt + { { end } repeat } + { pop } + ifelse + } bind def +/@_PopStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + /@dictStackLevel @dictStackLevel 1 sub def + end + } bind def +/@Raise + { + exch cvx exch errordict exch get exec + stop + } bind def +/@ReRaise + { + cvx $error /errorname get errordict exch get exec + stop + } bind def +/@Stopped + { + 0 @#Stopped + } bind def +/@#Stopped + { + @_SaveStackLevels + stopped + { @_RestoreStackLevels true } + { @_PopStackLevels false } + ifelse + } bind def +/@Arg + { + Adobe_CoolType_Data + begin + @opStackCountByLevel @opStackLevel 1 sub get /args get exch get + end + } bind def +currentglobal true setglobal +/CTHasResourceForAllBug + Level2? + { + 1 dict dup begin + mark + { + (*) { pop stop } 128 string /Category + resourceforall + } + stopped + cleartomark + currentdict eq dup + { end } + if + not + } + { false } + ifelse + def +/CTHasResourceStatusBug + Level2? + { + mark + { /steveamerige /Category resourcestatus } + stopped + { cleartomark true } + { cleartomark currentglobal not } + ifelse + } + { false } + ifelse + def +setglobal +/CTResourceStatus + { + mark 3 1 roll + /Category findresource + begin + ({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec + { cleartomark false } + { { 3 2 roll pop true } { cleartomark false } ifelse } + ifelse + end + } bind def +/CTWorkAroundBugs + { + Level2? + { + /cid_PreLoad /ProcSet resourcestatus + { + pop pop + currentglobal + mark + { + (*) + { + dup /CMap CTHasResourceStatusBug + { CTResourceStatus } + { resourcestatus } + ifelse + { + pop dup 0 eq exch 1 eq or + { + dup /CMap findresource gcheck setglobal + /CMap undefineresource + } + { + pop CTHasResourceForAllBug + { exit } + { stop } + ifelse + } + ifelse + } + { pop } + ifelse + } + 128 string /CMap resourceforall + } + stopped + { cleartomark } + stopped pop + setglobal + } + if + } + if + } bind def +/doc_setup + { + Adobe_CoolType_Core + begin + CTWorkAroundBugs + /mov /moveto load def + /nfnt /newencodedfont load def + /mfnt /makefont load def + /sfnt /setfont load def + /ufnt /undefinefont load def + /chp /charpath load def + /awsh /awidthshow load def + /wsh /widthshow load def + /ash /ashow load def + /sh /show load def + end + userdict /Adobe_CoolType_Data 10 dict dup + begin + /AddWidths? false def + /CC 0 def + /charcode 2 string def + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + /InVMFontsByCMap 10 dict def + /InVMDeepCopiedFonts 10 dict def + end put + } bind def +/doc_trailer + { + currentdict Adobe_CoolType_Core eq + { end } + if + } bind def +/page_setup + { + Adobe_CoolType_Core begin + } bind def +/page_trailer + { + end + } bind def +/unload + { + systemdict /languagelevel known + { + systemdict/languagelevel get 2 ge + { + userdict/Adobe_CoolType_Core 2 copy known + { undef } + { pop pop } + ifelse + } + if + } + if + } bind def +/ndf + { + 1 index where + { pop pop pop } + { dup xcheck { bind } if def } + ifelse + } def +/findfont systemdict + begin + userdict + begin + /globaldict where { /globaldict get begin } if + dup where pop exch get + /globaldict where { pop end } if + end + end +Adobe_CoolType_Core_Defined + { /systemfindfont exch def } + { + /findfont 1 index def + /systemfindfont exch def + } +ifelse +/undefinefont + { pop } ndf +/copyfont + { + currentglobal 3 1 roll + 1 index gcheck setglobal + dup null eq { 0 } { dup length } ifelse + 2 index length add 1 add dict + begin + exch + { + 1 index /FID eq + { pop pop } + { def } + ifelse + } + forall + dup null eq + { pop } + { { def } forall } + ifelse + currentdict + end + exch setglobal + } bind def +/copyarray + { + currentglobal exch + dup gcheck setglobal + dup length array copy + exch setglobal + } bind def +/newencodedfont + { + currentglobal + { + SharedFontDirectory 3 index known + { SharedFontDirectory 3 index get /FontReferenced known } + { false } + ifelse + } + { + FontDirectory 3 index known + { FontDirectory 3 index get /FontReferenced known } + { + SharedFontDirectory 3 index known + { SharedFontDirectory 3 index get /FontReferenced known } + { false } + ifelse + } + ifelse + } + ifelse + dup + { + 3 index findfont /FontReferenced get + 2 index dup type /nametype eq + {findfont} + if ne + { pop false } + if + } + if + { + pop + 1 index findfont + /Encoding get exch + 0 1 255 + { 2 copy get 3 index 3 1 roll put } + for + pop pop pop + } + { + dup type /nametype eq + { findfont } + if + dup dup maxlength 2 add dict + begin + exch + { + 1 index /FID ne + {def} + {pop pop} + ifelse + } + forall + /FontReferenced exch def + /Encoding exch dup length array copy def + /FontName 1 index dup type /stringtype eq { cvn } if def dup + currentdict + end + definefont def + } + ifelse + } bind def +/SetSubstituteStrategy + { + $SubstituteFont + begin + dup type /dicttype ne + { 0 dict } + if + currentdict /$Strategies known + { + exch $Strategies exch + 2 copy known + { + get + 2 copy maxlength exch maxlength add dict + begin + { def } forall + { def } forall + currentdict + dup /$Init known + { dup /$Init get exec } + if + end + /$Strategy exch def + } + { pop pop pop } + ifelse + } + { pop pop } + ifelse + end + } bind def +/scff + { + $SubstituteFont + begin + dup type /stringtype eq + { dup length exch } + { null } + ifelse + /$sname exch def + /$slen exch def + /$inVMIndex + $sname null eq + { + 1 index $str cvs + dup length $slen sub $slen getinterval cvn + } + { $sname } + ifelse def + end + { findfont } + @Stopped + { + dup length 8 add string exch + 1 index 0 (BadFont:) putinterval + 1 index exch 8 exch dup length string cvs putinterval cvn + { findfont } + @Stopped + { pop /Courier findfont } + if + } + if + $SubstituteFont + begin + /$sname null def + /$slen 0 def + /$inVMIndex null def + end + } bind def +/isWidthsOnlyFont + { + dup /WidthsOnly known + { pop pop true } + { + dup /FDepVector known + { /FDepVector get { isWidthsOnlyFont dup { exit } if } forall } + { + dup /FDArray known + { /FDArray get { isWidthsOnlyFont dup { exit } if } forall } + { pop } + ifelse + } + ifelse + } + ifelse + } bind def +/?str1 256 string def +/?set + { + $SubstituteFont + begin + /$substituteFound false def + /$fontname 4 index def + /$doSmartSub false def + end + 3 index + currentglobal false setglobal exch + /CompatibleFonts /ProcSet resourcestatus + { + pop pop + /CompatibleFonts /ProcSet findresource + begin + dup /CompatibleFont currentexception + 1 index /CompatibleFont true setexception + 1 index /Font resourcestatus + { + pop pop + 3 2 roll setglobal + end + exch + dup findfont + /CompatibleFonts /ProcSet findresource + begin + 3 1 roll exch /CompatibleFont exch setexception + end + } + { + 3 2 roll setglobal + 1 index exch /CompatibleFont exch setexception + end + findfont + $SubstituteFont /$substituteFound true put + } + ifelse + } + { exch setglobal findfont } + ifelse + $SubstituteFont + begin + $substituteFound + { + false + (%%[Using embedded font ) print + 5 index ?str1 cvs print + ( to avoid the font substitution problem noted earlier.]%%\n) print + } + { + dup /FontName known + { + dup /FontName get $fontname eq + 1 index /DistillerFauxFont known not and + /currentdistillerparams where + { pop false 2 index isWidthsOnlyFont not and } + if + } + { false } + ifelse + } + ifelse + exch pop + /$doSmartSub true def + end + { + exch pop exch pop exch + 2 dict dup /Found 3 index put + exch findfont exch + } + { + exch exec + exch dup findfont + dup /FontType get 3 eq + { + exch ?str1 cvs + dup length 1 sub + -1 0 + { + exch dup 2 index get 42 eq + { + exch 0 exch getinterval cvn 4 1 roll 3 2 roll pop + exit + } + {exch pop} ifelse + }for + } + { + exch pop + } ifelse + 2 dict dup /Downloaded 6 5 roll put + } + ifelse + dup /FontName 4 index put copyfont definefont pop + } bind def +/?str2 256 string def +/?add + { + 1 index type /integertype eq + { exch true 4 2 } + { false 3 1 } + ifelse + roll + 1 index findfont + dup /Widths known + { + Adobe_CoolType_Data /AddWidths? true put + gsave dup 1000 scalefont setfont + } + if + /Downloaded known + { + exec + exch + { + exch ?str2 cvs exch + findfont /Downloaded get 1 dict begin /Downloaded 1 index def ?str1 cvs length + ?str1 1 index 1 add 3 index putinterval + exch length 1 add 1 index add + ?str1 2 index (*) putinterval + ?str1 0 2 index getinterval cvn findfont + ?str1 3 index (+) putinterval + 2 dict dup /FontName ?str1 0 6 index getinterval cvn put + dup /Downloaded Downloaded put end copyfont + dup /FontName get exch definefont pop pop pop + } + { + pop + } + ifelse + } + { + pop + exch + { + findfont + dup /Found get + dup length exch ?str1 cvs pop + ?str1 1 index (+) putinterval + ?str1 1 index 1 add 4 index ?str2 cvs putinterval + ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add getinterval cvn + 1 dict exch 1 index exch /FontName exch put copyfont + dup /FontName get exch definefont pop + } + { + pop + } + ifelse + } + ifelse + Adobe_CoolType_Data /AddWidths? get + { grestore Adobe_CoolType_Data /AddWidths? false put } + if + } bind def +/?sh + { + currentfont /Downloaded known { exch } if pop + } bind def +/?chp + { + currentfont /Downloaded known { pop } { false chp } ifelse + } bind def +/?mv + { + currentfont /Downloaded known { moveto pop pop } { pop pop moveto } ifelse + } bind def +setpacking +userdict /$SubstituteFont 25 dict put +1 dict + begin + /SubstituteFont + dup $error exch 2 copy known + { get } + { pop pop { pop /Courier } bind } + ifelse def + /currentdistillerparams where dup + { + pop pop + currentdistillerparams /CannotEmbedFontPolicy 2 copy known + { get /Error eq } + { pop pop false } + ifelse + } + if not + { + countdictstack array dictstack 0 get + begin + userdict + begin + $SubstituteFont + begin + /$str 128 string def + /$fontpat 128 string def + /$slen 0 def + /$sname null def + /$match false def + /$fontname null def + /$substituteFound false def + /$inVMIndex null def + /$doSmartSub true def + /$depth 0 def + /$fontname null def + /$italicangle 26.5 def + /$dstack null def + /$Strategies 10 dict dup + begin + /$Type3Underprint + { + currentglobal exch false setglobal + 11 dict + begin + /UseFont exch + $WMode 0 ne + { + dup length dict copy + dup /WMode $WMode put + /UseFont exch definefont + } + if def + /FontName $fontname dup type /stringtype eq { cvn } if def + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /Encoding 256 array dup 0 1 255 { /.notdef put dup } for pop def + /FontBBox [ 0 0 0 0 ] def + /CCInfo 7 dict dup + begin + /cc null def + /x 0 def + /y 0 def + end def + /BuildChar + { + exch + begin + CCInfo + begin + 1 string dup 0 3 index put exch pop + /cc exch def + UseFont 1000 scalefont setfont + cc stringwidth /y exch def /x exch def + x y setcharwidth + $SubstituteFont /$Strategy get /$Underprint get exec + 0 0 moveto cc show + x y moveto + end + end + } bind def + currentdict + end + exch setglobal + } bind def + /$GetaTint + 2 dict dup + begin + /$BuildFont + { + dup /WMode known + { dup /WMode get } + { 0 } + ifelse + /$WMode exch def + $fontname exch + dup /FontName known + { + dup /FontName get + dup type /stringtype eq { cvn } if + } + { /unnamedfont } + ifelse + exch + Adobe_CoolType_Data /InVMDeepCopiedFonts get + 1 index /FontName get known + { + pop + Adobe_CoolType_Data /InVMDeepCopiedFonts get + 1 index get + null copyfont + } + { $deepcopyfont } + ifelse + exch 1 index exch /FontBasedOn exch put + dup /FontName $fontname dup type /stringtype eq { cvn } if put + definefont + Adobe_CoolType_Data /InVMDeepCopiedFonts get + begin + dup /FontBasedOn get 1 index def + end + } bind def + /$Underprint + { + gsave + x abs y abs gt + { /y 1000 def } + { /x -1000 def 500 120 translate } + ifelse + Level2? + { + [ /Separation (All) /DeviceCMYK { 0 0 0 1 pop } ] + setcolorspace + } + { 0 setgray } + ifelse + 10 setlinewidth + x .8 mul + [ 7 3 ] + { + y mul 8 div 120 sub x 10 div exch moveto + 0 y 4 div neg rlineto + dup 0 rlineto + 0 y 4 div rlineto + closepath + gsave + Level2? + { .2 setcolor } + { .8 setgray } + ifelse + fill grestore + stroke + } + forall + pop + grestore + } bind def + end def + /$Oblique + 1 dict dup + begin + /$BuildFont + { + currentglobal exch dup gcheck setglobal + null copyfont + begin + /FontBasedOn + currentdict /FontName known + { + FontName + dup type /stringtype eq { cvn } if + } + { /unnamedfont } + ifelse + def + /FontName $fontname dup type /stringtype eq { cvn } if def + /currentdistillerparams where + { pop } + { + /FontInfo currentdict /FontInfo known + { FontInfo null copyfont } + { 2 dict } + ifelse + dup + begin + /ItalicAngle $italicangle def + /FontMatrix FontMatrix + [ 1 0 ItalicAngle dup sin exch cos div 1 0 0 ] + matrix concatmatrix readonly + end + 4 2 roll def + def + } + ifelse + FontName currentdict + end + definefont + exch setglobal + } bind def + end def + /$None + 1 dict dup + begin + /$BuildFont {} bind def + end def + end def + /$Oblique SetSubstituteStrategy + /$findfontByEnum + { + dup type /stringtype eq { cvn } if + dup /$fontname exch def + $sname null eq + { $str cvs dup length $slen sub $slen getinterval } + { pop $sname } + ifelse + $fontpat dup 0 (fonts/*) putinterval exch 7 exch putinterval + /$match false def + $SubstituteFont /$dstack countdictstack array dictstack put + mark + { + $fontpat 0 $slen 7 add getinterval + { /$match exch def exit } + $str filenameforall + } + stopped + { + cleardictstack + currentdict + true + $SubstituteFont /$dstack get + { + exch + { + 1 index eq + { pop false } + { true } + ifelse + } + { begin false } + ifelse + } + forall + pop + } + if + cleartomark + /$slen 0 def + $match false ne + { $match (fonts/) anchorsearch pop pop cvn } + { /Courier } + ifelse + } bind def + /$ROS 1 dict dup + begin + /Adobe 4 dict dup + begin + /Japan1 [ /Ryumin-Light /HeiseiMin-W3 + /GothicBBB-Medium /HeiseiKakuGo-W5 + /HeiseiMaruGo-W4 /Jun101-Light ] def + /Korea1 [ /HYSMyeongJo-Medium /HYGoThic-Medium ] def + /GB1 [ /STSong-Light /STHeiti-Regular ] def + /CNS1 [ /MKai-Medium /MHei-Medium ] def + end def + end def + /$cmapname null def + /$deepcopyfont + { + dup /FontType get 0 eq + { + 1 dict dup /FontName /copied put copyfont + begin + /FDepVector FDepVector copyarray + 0 1 2 index length 1 sub + { + 2 copy get $deepcopyfont + dup /FontName /copied put + /copied exch definefont + 3 copy put pop pop + } + for + def + currentdict + end + } + { $Strategies /$Type3Underprint get exec } + ifelse + } bind def + /$buildfontname + { + dup /CIDFont findresource /CIDSystemInfo get + begin + Registry length Ordering length Supplement 8 string cvs + 3 copy length 2 add add add string + dup 5 1 roll dup 0 Registry putinterval + dup 4 index (-) putinterval + dup 4 index 1 add Ordering putinterval + 4 2 roll add 1 add 2 copy (-) putinterval + end + 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch + anchorsearch + { pop pop 3 2 roll putinterval cvn /$cmapname exch def } + { pop pop pop pop pop } + ifelse + length + $str 1 index (-) putinterval 1 add + $str 1 index $cmapname $fontpat cvs putinterval + $cmapname length add + $str exch 0 exch getinterval cvn + } bind def + /$findfontByROS + { + /$fontname exch def + $ROS Registry 2 copy known + { + get Ordering 2 copy known + { get } + { pop pop [] } + ifelse + } + { pop pop [] } + ifelse + false exch + { + dup /CIDFont resourcestatus + { + pop pop + save + 1 index /CIDFont findresource + dup /WidthsOnly known + { dup /WidthsOnly get } + { false } + ifelse + exch pop + exch restore + { pop } + { exch pop true exit } + ifelse + } + { pop } + ifelse + } + forall + { $str cvs $buildfontname } + { + false (*) + { + save exch + dup /CIDFont findresource + dup /WidthsOnly known + { dup /WidthsOnly get not } + { true } + ifelse + exch /CIDSystemInfo get + dup /Registry get Registry eq + exch /Ordering get Ordering eq and and + { exch restore exch pop true exit } + { pop restore } + ifelse + } + $str /CIDFont resourceforall + { $buildfontname } + { $fontname $findfontByEnum } + ifelse + } + ifelse + } bind def + end + end + currentdict /$error known currentdict /languagelevel known and dup + { pop $error /SubstituteFont known } + if + dup + { $error } + { Adobe_CoolType_Core } + ifelse + begin + { + /SubstituteFont + /CMap /Category resourcestatus + { + pop pop + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + { + $sname null eq + { dup $str cvs dup length $slen sub $slen getinterval cvn } + { $sname } + ifelse + Adobe_CoolType_Data /InVMFontsByCMap get + 1 index 2 copy known + { + get + false exch + { + pop + currentglobal + { + GlobalFontDirectory 1 index known + { exch pop true exit } + { pop } + ifelse + } + { + FontDirectory 1 index known + { exch pop true exit } + { + GlobalFontDirectory 1 index known + { exch pop true exit } + { pop } + ifelse + } + ifelse + } + ifelse + } + forall + } + { pop pop false } + ifelse + { + exch pop exch pop + } + { + dup /CMap resourcestatus + { + pop pop + dup /$cmapname exch def + /CMap findresource /CIDSystemInfo get { def } forall + $findfontByROS + } + { + 128 string cvs + dup (-) search + { + 3 1 roll search + { + 3 1 roll pop + { dup cvi } + stopped + { pop pop pop pop pop $findfontByEnum } + { + 4 2 roll pop pop + exch length + exch + 2 index length + 2 index + sub + exch 1 sub -1 0 + { + $str cvs dup length + 4 index + 0 + 4 index + 4 3 roll add + getinterval + exch 1 index exch 3 index exch + putinterval + dup /CMap resourcestatus + { + pop pop + 4 1 roll pop pop pop + dup /$cmapname exch def + /CMap findresource /CIDSystemInfo get { def } forall + $findfontByROS + true exit + } + { pop } + ifelse + } + for + dup type /booleantype eq + { pop } + { pop pop pop $findfontByEnum } + ifelse + } + ifelse + } + { pop pop pop $findfontByEnum } + ifelse + } + { pop pop $findfontByEnum } + ifelse + } + ifelse + } + ifelse + } + { //SubstituteFont exec } + ifelse + /$slen 0 def + end + } + } + { + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + { $findfontByEnum } + { //SubstituteFont exec } + ifelse + end + } + } + ifelse + bind readonly def + Adobe_CoolType_Core /scfindfont /systemfindfont load put + } + { + /scfindfont + { + $SubstituteFont + begin + dup systemfindfont + dup /FontName known + { dup /FontName get dup 3 index ne } + { /noname true } + ifelse + dup + { + /$origfontnamefound 2 index def + /$origfontname 4 index def /$substituteFound true def + } + if + exch pop + { + $slen 0 gt + $sname null ne + 3 index length $slen gt or and + { + pop dup $findfontByEnum findfont + dup maxlength 1 add dict + begin + { 1 index /FID eq { pop pop } { def } ifelse } + forall + currentdict + end + definefont + dup /FontName known { dup /FontName get } { null } ifelse + $origfontnamefound ne + { + $origfontname $str cvs print + ( substitution revised, using ) print + dup /FontName known + { dup /FontName get } { (unspecified font) } + ifelse + $str cvs print (.\n) print + } + if + } + { exch pop } + ifelse + } + { exch pop } + ifelse + end + } bind def + } + ifelse + end + end + Adobe_CoolType_Core_Defined not + { + Adobe_CoolType_Core /findfont + { + $SubstituteFont + begin + $depth 0 eq + { + /$fontname 1 index dup type /stringtype ne { $str cvs } if def + /$substituteFound false def + } + if + /$depth $depth 1 add def + end + scfindfont + $SubstituteFont + begin + /$depth $depth 1 sub def + $substituteFound $depth 0 eq and + { + $inVMIndex null ne + { dup $inVMIndex $AddInVMFont } + if + $doSmartSub + { + currentdict /$Strategy known + { $Strategy /$BuildFont get exec } + if + } + if + } + if + end + } bind put + } + if + } + if + end +/$AddInVMFont + { + exch /FontName 2 copy known + { + get + 1 dict dup begin exch 1 index gcheck def end exch + Adobe_CoolType_Data /InVMFontsByCMap get exch + $DictAdd + } + { pop pop pop } + ifelse + } bind def +/$DictAdd + { + 2 copy known not + { 2 copy 4 index length dict put } + if + Level2? not + { + 2 copy get dup maxlength exch length 4 index length add lt + 2 copy get dup length 4 index length add exch maxlength 1 index lt + { + 2 mul dict + begin + 2 copy get { forall } def + 2 copy currentdict put + end + } + { pop } + ifelse + } + if + get + begin + { def } + forall + end + } bind def +end +end +%%EndResource +%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0 +%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated. +%%Version: 1.19 0 +systemdict /languagelevel known dup + { currentglobal false setglobal } + { false } +ifelse +exch +userdict /Adobe_CoolType_Utility 2 copy known + { 2 copy get dup maxlength 25 add dict copy } + { 25 dict } +ifelse put +Adobe_CoolType_Utility + begin + /ct_Level2? exch def + /ct_Clone? 1183615869 internaldict dup + /CCRun known not + exch /eCCRun known not + ct_Level2? and or def +ct_Level2? + { globaldict begin currentglobal true setglobal } +if + /ct_AddStdCIDMap + ct_Level2? + { { + ((Hex) 57 StartData + 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 + 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 + d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 + cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec + } } + { { + eexec + } } + ifelse bind def +userdict /cid_extensions known +dup { cid_extensions /cid_UpdateDB known and } if + { + cid_extensions + begin + /cid_GetCIDSystemInfo + { + 1 index type /stringtype eq + { exch cvn exch } + if + cid_extensions + begin + dup load 2 index known + { + 2 copy + cid_GetStatusInfo + dup null ne + { + 1 index load + 3 index get + dup null eq + { pop pop cid_UpdateDB } + { + exch + 1 index /Created get eq + { exch pop exch pop } + { pop cid_UpdateDB } + ifelse + } + ifelse + } + { pop cid_UpdateDB } + ifelse + } + { cid_UpdateDB } + ifelse + end + } bind def + end + } +if +ct_Level2? + { end setglobal } +if + /ct_UseNativeCapability? systemdict /composefont known def + /ct_MakeOCF 35 dict def + /ct_Vars 25 dict def + /ct_GlyphDirProcs 6 dict def + /ct_BuildCharDict 15 dict dup + begin + /charcode 2 string def + /dst_string 1500 string def + /nullstring () def + /usewidths? true def + end def + ct_Level2? { setglobal } { pop } ifelse + ct_GlyphDirProcs + begin + /GetGlyphDirectory + { + systemdict /languagelevel known + { pop /CIDFont findresource /GlyphDirectory get } + { + 1 index /CIDFont findresource /GlyphDirectory + get dup type /dicttype eq + { + dup dup maxlength exch length sub 2 index lt + { + dup length 2 index add dict copy 2 index + /CIDFont findresource/GlyphDirectory 2 index put + } + if + } + if + exch pop exch pop + } + ifelse + + + } def + /+ + { + systemdict /languagelevel known + { + currentglobal false setglobal + 3 dict begin + /vm exch def + } + { 1 dict begin } + ifelse + /$ exch def + systemdict /languagelevel known + { + vm setglobal + /gvm currentglobal def + $ gcheck setglobal + } + if + ? { $ begin } if + } def + /? { $ type /dicttype eq } def + /| { + userdict /Adobe_CoolType_Data known + { + Adobe_CoolType_Data /AddWidths? known + { + currentdict Adobe_CoolType_Data + begin + begin + AddWidths? + { + Adobe_CoolType_Data /CC 3 index put + ? { def } { $ 3 1 roll put } ifelse + CC charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore + currentfont /Widths get exch CC exch put + } + { ? { def } { $ 3 1 roll put } ifelse } + ifelse + end + end + } + { ? { def } { $ 3 1 roll put } ifelse } ifelse + } + { ? { def } { $ 3 1 roll put } ifelse } + ifelse + } def + /! + { + ? { end } if + systemdict /languagelevel known + { gvm setglobal } + if + end + } def + /: { string currentfile exch readstring pop } executeonly def + end + ct_MakeOCF + begin + /ct_cHexEncoding + [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 + /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 + /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 + /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B + /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E + /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 + /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 + /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 + /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA + /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD + /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 + /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 + /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 + /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def + /ct_CID_STR_SIZE 8000 def + /ct_mkocfStr100 100 string def + /ct_defaultFontMtx [.001 0 0 .001 0 0] def + /ct_1000Mtx [1000 0 0 1000 0 0] def + /ct_raise {exch cvx exch errordict exch get exec stop} bind def + /ct_reraise + { cvx $error /errorname get (Error: ) print dup ( ) cvs print + errordict exch get exec stop + } bind def + /ct_cvnsi + { + 1 index add 1 sub 1 exch 0 4 1 roll + { + 2 index exch get + exch 8 bitshift + add + } + for + exch pop + } bind def + /ct_GetInterval + { + Adobe_CoolType_Utility /ct_BuildCharDict get + begin + /dst_index 0 def + dup dst_string length gt + { dup string /dst_string exch def } + if + 1 index ct_CID_STR_SIZE idiv + /arrayIndex exch def + 2 index arrayIndex get + 2 index + arrayIndex ct_CID_STR_SIZE mul + sub + { + dup 3 index add 2 index length le + { + 2 index getinterval + dst_string dst_index 2 index putinterval + length dst_index add /dst_index exch def + exit + } + { + 1 index length 1 index sub + dup 4 1 roll + getinterval + dst_string dst_index 2 index putinterval + pop dup dst_index add /dst_index exch def + sub + /arrayIndex arrayIndex 1 add def + 2 index dup length arrayIndex gt + { arrayIndex get } + { + pop + exit + } + ifelse + 0 + } + ifelse + } + loop + pop pop pop + dst_string 0 dst_index getinterval + end + } bind def + ct_Level2? + { + /ct_resourcestatus + currentglobal mark true setglobal + { /unknowninstancename /Category resourcestatus } + stopped + { cleartomark setglobal true } + { cleartomark currentglobal not exch setglobal } + ifelse + { + { + mark 3 1 roll /Category findresource + begin + ct_Vars /vm currentglobal put + ({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec + { cleartomark false } + { { 3 2 roll pop true } { cleartomark false } ifelse } + ifelse + ct_Vars /vm get setglobal + end + } + } + { { resourcestatus } } + ifelse bind def + /CIDFont /Category ct_resourcestatus + { pop pop } + { + currentglobal true setglobal + /Generic /Category findresource + dup length dict copy + dup /InstanceType /dicttype put + /CIDFont exch /Category defineresource pop + setglobal + } + ifelse + ct_UseNativeCapability? + { + /CIDInit /ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def + end def + /CMapName /Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000> 0 + endcidrange + endcmap + CMapName currentdict /CMap defineresource pop + end + end + } + if + } + { + /ct_Category 2 dict begin + /CIDFont 10 dict def + /ProcSet 2 dict def + currentdict + end + def + /defineresource + { + ct_Category 1 index 2 copy known + { + get + dup dup maxlength exch length eq + { + dup length 10 add dict copy + ct_Category 2 index 2 index put + } + if + 3 index 3 index put + pop exch pop + } + { pop pop /defineresource /undefined ct_raise } + ifelse + } bind def + /findresource + { + ct_Category 1 index 2 copy known + { + get + 2 index 2 copy known + { get 3 1 roll pop pop} + { pop pop /findresource /undefinedresource ct_raise } + ifelse + } + { pop pop /findresource /undefined ct_raise } + ifelse + } bind def + /resourcestatus + { + ct_Category 1 index 2 copy known + { + get + 2 index known + exch pop exch pop + { + 0 -1 true + } + { + false + } + ifelse + } + { pop pop /findresource /undefined ct_raise } + ifelse + } bind def + /ct_resourcestatus /resourcestatus load def + } + ifelse + /ct_CIDInit 2 dict + begin + /ct_cidfont_stream_init + { + { + dup (Binary) eq + { + pop + null + currentfile + ct_Level2? + { + { cid_BYTE_COUNT () /SubFileDecode filter } + stopped + { pop pop pop } + if + } + if + /readstring load + exit + } + if + dup (Hex) eq + { + pop + currentfile + ct_Level2? + { + { null exch /ASCIIHexDecode filter /readstring } + stopped + { pop exch pop (>) exch /readhexstring } + if + } + { (>) exch /readhexstring } + ifelse + load + exit + } + if + /StartData /typecheck ct_raise + } + loop + cid_BYTE_COUNT ct_CID_STR_SIZE le + { + 2 copy cid_BYTE_COUNT string exch exec + pop + 1 array dup + 3 -1 roll + 0 exch put + } + { + cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi + dup array exch 2 sub 0 exch 1 exch + { + 2 copy + 5 index + ct_CID_STR_SIZE + string + 6 index exec + pop + put + pop + } + for + 2 index + cid_BYTE_COUNT ct_CID_STR_SIZE mod string + 3 index exec + pop + 1 index exch + 1 index length 1 sub + exch put + } + ifelse + cid_CIDFONT exch /GlyphData exch put + 2 index null eq + { + pop pop pop + } + { + pop /readstring load + 1 string exch + { + 3 copy exec + pop + dup length 0 eq + { + pop pop pop pop pop + true exit + } + if + 4 index + eq + { + pop pop pop pop + false exit + } + if + } + loop + pop + } + ifelse + } bind def + /StartData + { + mark + { + currentdict + dup /FDArray get 0 get /FontMatrix get + 0 get 0.001 eq + { + dup /CDevProc known not + { + /CDevProc 1183615869 internaldict /stdCDevProc 2 copy known + { get } + { + pop pop + { pop pop pop pop pop 0 -1000 7 index 2 div 880 } + } + ifelse + def + } + if + } + { + /CDevProc + { + pop pop pop pop pop + 0 + 1 cid_temp /cid_CIDFONT get + /FDArray get 0 get + /FontMatrix get 0 get div + 7 index 2 div + 1 index 0.88 mul + } def + } + ifelse + /cid_temp 15 dict def + cid_temp + begin + /cid_CIDFONT exch def + 3 copy pop + dup /cid_BYTE_COUNT exch def 0 gt + { + ct_cidfont_stream_init + FDArray + { + /Private get + dup /SubrMapOffset known + { + begin + /Subrs SubrCount array def + Subrs + SubrMapOffset + SubrCount + SDBytes + ct_Level2? + { + currentdict dup /SubrMapOffset undef + dup /SubrCount undef + /SDBytes undef + } + if + end + /cid_SD_BYTES exch def + /cid_SUBR_COUNT exch def + /cid_SUBR_MAP_OFFSET exch def + /cid_SUBRS exch def + cid_SUBR_COUNT 0 gt + { + GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + 0 1 cid_SUBR_COUNT 1 sub + { + exch 1 index + 1 add + cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add + GlyphData exch cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + cid_SUBRS 4 2 roll + GlyphData exch + 4 index + 1 index + sub + ct_GetInterval + dup length string copy put + } + for + pop + } + if + } + { pop } + ifelse + } + forall + } + if + cleartomark pop pop + end + CIDFontName currentdict /CIDFont defineresource pop + end end + } + stopped + { cleartomark /StartData ct_reraise } + if + } bind def + currentdict + end def + /ct_saveCIDInit + { + /CIDInit /ProcSet ct_resourcestatus + { true } + { /CIDInitC /ProcSet ct_resourcestatus } + ifelse + { + pop pop + /CIDInit /ProcSet findresource + ct_UseNativeCapability? + { pop null } + { /CIDInit ct_CIDInit /ProcSet defineresource pop } + ifelse + } + { /CIDInit ct_CIDInit /ProcSet defineresource pop null } + ifelse + ct_Vars exch /ct_oldCIDInit exch put + } bind def + /ct_restoreCIDInit + { + ct_Vars /ct_oldCIDInit get dup null ne + { /CIDInit exch /ProcSet defineresource pop } + { pop } + ifelse + } bind def + /ct_BuildCharSetUp + { + 1 index + begin + CIDFont + begin + Adobe_CoolType_Utility /ct_BuildCharDict get + begin + /ct_dfCharCode exch def + /ct_dfDict exch def + CIDFirstByte ct_dfCharCode add + dup CIDCount ge + { pop 0 } + if + /cid exch def + { + GlyphDirectory cid 2 copy known + { get } + { pop pop nullstring } + ifelse + dup length FDBytes sub 0 gt + { + dup + FDBytes 0 ne + { 0 FDBytes ct_cvnsi } + { pop 0 } + ifelse + /fdIndex exch def + dup length FDBytes sub FDBytes exch getinterval + /charstring exch def + exit + } + { + pop + cid 0 eq + { /charstring nullstring def exit } + if + /cid 0 def + } + ifelse + } + loop + } def + /ct_SetCacheDevice + { + 0 0 moveto + dup stringwidth + 3 -1 roll + true charpath + pathbbox + 0 -1000 + 7 index 2 div 880 + setcachedevice2 + 0 0 moveto + } def + /ct_CloneSetCacheProc + { + 1 eq + { + stringwidth + pop -2 div -880 + 0 -1000 setcharwidth + moveto + } + { + usewidths? + { + currentfont /Widths get cid + 2 copy known + { get exch pop aload pop } + { pop pop stringwidth } + ifelse + } + { stringwidth } + ifelse + setcharwidth + 0 0 moveto + } + ifelse + } def + /ct_Type3ShowCharString + { + ct_FDDict fdIndex 2 copy known + { get } + { + currentglobal 3 1 roll + 1 index gcheck setglobal + ct_Type1FontTemplate dup maxlength dict copy + begin + FDArray fdIndex get + dup /FontMatrix 2 copy known + { get } + { pop pop ct_defaultFontMtx } + ifelse + /FontMatrix exch dup length array copy def + /Private get + /Private exch def + /Widths rootfont /Widths get def + /CharStrings 1 dict dup /.notdef + dup length string copy put def + currentdict + end + /ct_Type1Font exch definefont + dup 5 1 roll put + setglobal + } + ifelse + dup /CharStrings get 1 index /Encoding get + ct_dfCharCode get charstring put + rootfont /WMode 2 copy known + { get } + { pop pop 0 } + ifelse + exch + 1000 scalefont setfont + ct_str1 0 ct_dfCharCode put + ct_str1 exch ct_dfSetCacheProc + ct_SyntheticBold + { + currentpoint + ct_str1 show + newpath + moveto + ct_str1 true charpath + ct_StrokeWidth setlinewidth + stroke + } + { ct_str1 show } + ifelse + } def + /ct_Type4ShowCharString + { + ct_dfDict ct_dfCharCode charstring + FDArray fdIndex get + dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not + { ct_1000Mtx matrix concatmatrix concat } + { pop } + ifelse + /Private get + Adobe_CoolType_Utility /ct_Level2? get not + { + ct_dfDict /Private + 3 -1 roll + { put } + 1183615869 internaldict /superexec get exec + } + if + 1183615869 internaldict + Adobe_CoolType_Utility /ct_Level2? get + { 1 index } + { 3 index /Private get mark 6 1 roll } + ifelse + dup /RunInt known + { /RunInt get } + { pop /CCRun } + ifelse + get exec + Adobe_CoolType_Utility /ct_Level2? get not + { cleartomark } + if + } bind def + /ct_BuildCharIncremental + { + { + Adobe_CoolType_Utility /ct_MakeOCF get begin + ct_BuildCharSetUp + ct_ShowCharString + } + stopped + { stop } + if + end + end + end + end + } bind def + /BaseFontNameStr (BF00) def + /ct_Type1FontTemplate 14 dict + begin + /FontType 1 def + /FontMatrix [0.001 0 0 0.001 0 0] def + /FontBBox [-250 -250 1250 1250] def + /Encoding ct_cHexEncoding def + /PaintType 0 def + currentdict + end def + /BaseFontTemplate 11 dict + begin + /FontMatrix [0.001 0 0 0.001 0 0] def + /FontBBox [-250 -250 1250 1250] def + /Encoding ct_cHexEncoding def + /BuildChar /ct_BuildCharIncremental load def + ct_Clone? + { + /FontType 3 def + /ct_ShowCharString /ct_Type3ShowCharString load def + /ct_dfSetCacheProc /ct_CloneSetCacheProc load def + /ct_SyntheticBold false def + /ct_StrokeWidth 1 def + } + { + /FontType 4 def + /Private 1 dict dup /lenIV 4 put def + /CharStrings 1 dict dup /.notdef put def + /PaintType 0 def + /ct_ShowCharString /ct_Type4ShowCharString load def + } + ifelse + /ct_str1 1 string def + currentdict + end def + /BaseFontDictSize BaseFontTemplate length 5 add def + /ct_matrixeq + { + true 0 1 5 + { + dup 4 index exch get exch 3 index exch get eq and + dup not + { exit } + if + } + for + exch pop exch pop + } bind def + /ct_makeocf + { + 15 dict + begin + exch /WMode exch def + exch /FontName exch def + /FontType 0 def + /FMapType 2 def + dup /FontMatrix known + { dup /FontMatrix get /FontMatrix exch def } + { /FontMatrix matrix def } + ifelse + /bfCount 1 index /CIDCount get 256 idiv 1 add + dup 256 gt { pop 256} if def + /Encoding + 256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for + bfCount 1 255 { 2 copy bfCount put pop } for + def + /FDepVector bfCount dup 256 lt { 1 add } if array def + BaseFontTemplate BaseFontDictSize dict copy + begin + /CIDFont exch def + CIDFont /FontBBox known + { CIDFont /FontBBox get /FontBBox exch def } + if + CIDFont /CDevProc known + { CIDFont /CDevProc get /CDevProc exch def } + if + currentdict + end + BaseFontNameStr 3 (0) putinterval + 0 1 bfCount dup 256 eq { 1 sub } if + { + FDepVector exch + 2 index BaseFontDictSize dict copy + begin + dup /CIDFirstByte exch 256 mul def + FontType 3 eq + { /ct_FDDict 2 dict def } + if + currentdict + end + 1 index 16 + BaseFontNameStr 2 2 getinterval cvrs pop + BaseFontNameStr exch definefont + put + } + for + ct_Clone? + { /Widths 1 index /CIDFont get /GlyphDirectory get length dict def } + if + FontName + currentdict + end + definefont + ct_Clone? + { + gsave + dup 1000 scalefont setfont + ct_BuildCharDict + begin + /usewidths? false def + currentfont /Widths get + begin + exch /CIDFont get /GlyphDirectory get + { + pop + dup charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore def + } + forall + end + /usewidths? true def + end + grestore + } + { exch pop } + ifelse + } bind def + /ct_ComposeFont + { + ct_UseNativeCapability? + { + 2 index /CMap ct_resourcestatus + { pop pop exch pop } + { + /CIDInit /ProcSet findresource + begin + 12 dict + begin + begincmap + /CMapName 3 index def + /CMapVersion 1.000 def + /CMapType 1 def + exch /WMode exch def + /CIDSystemInfo 3 dict dup + begin + /Registry (Adobe) def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-) search + { + pop pop + (-) search + { + dup length string copy + exch pop exch pop + } + { pop (Identity)} + ifelse + } + { pop (Identity) } + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000> 0 + endcidrange + endcmap + CMapName currentdict /CMap defineresource pop + end + end + } + ifelse + composefont + } + { + 3 2 roll pop + 0 get /CIDFont findresource + ct_makeocf + } + ifelse + } bind def + /ct_MakeIdentity + { + ct_UseNativeCapability? + { + 1 index /CMap ct_resourcestatus + { pop pop } + { + /CIDInit /ProcSet findresource begin + 12 dict begin + begincmap + /CMapName 2 index def + /CMapVersion 1.000 def + /CMapType 1 def + /CIDSystemInfo 3 dict dup + begin + /Registry (Adobe) def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-) search + { + pop pop + (-) search + { dup length string copy exch pop exch pop } + { pop (Identity) } + ifelse + } + { pop (Identity) } + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000> 0 + endcidrange + endcmap + CMapName currentdict /CMap defineresource pop + end + end + } + ifelse + composefont + } + { + exch pop + 0 get /CIDFont findresource + ct_makeocf + } + ifelse + } bind def + currentdict readonly pop + end + end +%%EndResource +%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 +%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated. +%%Version: 1.0 0 +userdict /ct_T42Dict 15 dict put +ct_T42Dict begin +/Is2015? +{ + version + cvi + 2015 + ge +} bind def +/AllocGlyphStorage +{ + Is2015? + { + pop + } + { + {string} forall + } ifelse +} bind def +/Type42DictBegin +{ + 25 dict begin + /FontName exch def + /CharStrings 256 dict + begin + /.notdef 0 def + currentdict + end def + /Encoding exch def + /PaintType 0 def + /FontType 42 def + /FontMatrix [1 0 0 1 0 0] def + 4 array astore cvx /FontBBox exch def + /sfnts +} bind def +/Type42DictEnd +{ + currentdict dup /FontName get exch definefont end + ct_T42Dict exch + dup /FontName get exch put +} bind def +/RD {string currentfile exch readstring pop} executeonly def +/PrepFor2015 +{ + Is2015? + { + /GlyphDirectory + 16 + dict def + sfnts 0 get + dup + 2 index + (glyx) + putinterval + 2 index + (locx) + putinterval + pop + pop + } + { + pop + pop + } ifelse +} bind def +/AddT42Char +{ + Is2015? + { + /GlyphDirectory get + begin + def + end + pop + pop + } + { + /sfnts get + 4 index + get + 3 index + 2 index + putinterval + pop + pop + pop + pop + } ifelse +} bind def +end +%%EndResource +Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end +%%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved. +systemdict /setpacking known +{ + currentpacking + true setpacking +} if +userdict /Adobe_AGM_Image 75 dict dup begin put +/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +/AGMIMG_&imagemask nd +/AGMIMG_mbuf () def +/AGMIMG_ybuf () def +/AGMIMG_kbuf () def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/AGMIMG_maskSource nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/devnimg nd +/idximg nd +/doc_setup +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage /colorimage ldf + }if + end + end +}def +/page_setup +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists {/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode [ Decode 1 get Decode 0 get] def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode [1 1] def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub} currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + { pop 1 } currenttransfer addprocs settransfer + }def + }ifelse + /img /imageormask ldf + /sepimg /sep_imageormask ldf + /devnimg /devn_imageormask ldf + /idximg /indexed_imageormask ldf + /_ctype 7 def + currentdict{ + dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{ + bind + }if + def + }forall +}def +/page_trailer +{ + end +}def +/doc_trailer +{ +}def +/imageormask_sys +{ + begin + save mark + level2{ + currentdict + Operator /imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask { + level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse + }{ + AGMIMG_&image + }ifelse + }ifelse + }{ + Width Height + Operator /imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix /DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix /DataSource load + AGMIMG_&image + }ifelse + }ifelse + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint { + 0 get dup type /nametype eq { + dup /DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false exch + { + AGMOHS_sepink eq or + } forall + not + } ifelse + }{ + pop false + }ifelse +}def +/process_mask_L3 +{ + dup begin + /ImageType 1 def + end + 4 dict begin + /DataDict exch def + /ImageType 3 def + /InterleaveType 3 def + /MaskDict 9 dict begin + /ImageType 1 def + /Width DataDict dup /MaskWidth known {/MaskWidth}{/Width} ifelse get def + /Height DataDict dup /MaskHeight known {/MaskHeight}{/Height} ifelse get def + /ImageMatrix [Width 0 0 Height neg 0 Height] def + /NComponents 1 def + /BitsPerComponent 1 def + /Decode [0 1] def + /DataSource AGMIMG_maskSource def + currentdict end def + currentdict end +}def +/use_mask +{ + dup type /dicttype eq + { + dup /Mask known { + dup /Mask get { + level3 + {true} + { + dup /MaskWidth known {dup /MaskWidth get 1 index /Width get eq}{true}ifelse exch + dup /MaskHeight known {dup /MaskHeight get 1 index /Height get eq}{true}ifelse + 3 -1 roll and + } ifelse + } + {false} ifelse + } + {false} ifelse + } + {false} ifelse +}def +/make_line_source +{ + begin + MultipleDataSources { + [ + Decode length 2 div cvi {Width string} repeat + ] + }{ + Width Decode length 2 div mul cvi string + }ifelse + end +}def +/datasource_to_str +{ + exch dup type + dup /filetype eq { + pop exch readstring + }{ + /arraytype eq { + exec exch copy + }{ + pop + }ifelse + }ifelse + pop +}def +/masked_image_simulation +{ + 3 dict begin + dup make_line_source /line_source xdf + /mask_source AGMIMG_maskSource /LZWDecode filter def + dup /Width get 8 div ceiling cvi string /mask_str xdf + begin + gsave + 0 1 translate 1 -1 Height div scale + 1 1 Height { + pop + gsave + MultipleDataSources { + 0 1 DataSource length 1 sub { + dup DataSource exch get + exch line_source exch get + datasource_to_str + } for + }{ + DataSource line_source datasource_to_str + } ifelse + << + /PatternType 1 + /PaintProc [ + /pop cvx + << + /ImageType 1 + /Width Width + /Height 1 + /ImageMatrix Width 1.0 sub 1 matrix scale 0.5 0 matrix translate matrix concatmatrix + /MultipleDataSources MultipleDataSources + /DataSource line_source + /BitsPerComponent BitsPerComponent + /Decode Decode + >> + /image cvx + ] cvx + /BBox [0 0 Width 1] + /XStep Width + /YStep 1 + /PaintType 1 + /TilingType 2 + >> + matrix makepattern set_pattern + << + /ImageType 1 + /Width Width + /Height 1 + /ImageMatrix Width 1 matrix scale + /MultipleDataSources false + /DataSource mask_source mask_str readstring pop + /BitsPerComponent 1 + /Decode [0 1] + >> + imagemask + grestore + 0 1 translate + } for + grestore + end + end +}def +/imageormask +{ + begin + SkipImageProc { + currentdict consumeimagedata + } + { + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator /imagemask eq DeviceN_PS2 not and { + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{ + [/Separation /Black /DeviceGray {}] setcolorspace + /Decode [ Decode 1 get Decode 0 get ] def + }if + use_mask { + level3 {process_mask_L3 image}{masked_image_simulation}ifelse + }{ + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + { + Names convert_to_process not { + 2 dict begin + /imageDict xdf + /names_index 0 def + gsave + imageDict write_image_file { + Names { + dup (None) ne { + [/Separation 3 -1 roll /DeviceGray {1 exch sub}] setcolorspace + Operator imageDict read_image_file + names_index 0 eq {true setoverprint} if + /names_index names_index 1 add def + }{ + pop + } ifelse + } forall + close_image_file + } if + grestore + end + }{ + Operator /imagemask eq { + imagemask + }{ + image + } ifelse + } ifelse + }{ + Operator /imagemask eq { + imagemask + }{ + image + } ifelse + } ifelse + }ifelse + }ifelse + }{ + Width Height + Operator /imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix /DataSource load + /Adobe_AGM_OnHost_Seps where { + pop imagemask + }{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator /colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + AGMCORE_is_cmyk_sep{ + MultipleDataSources{ + /DataSource [ + DataSource 0 get /exec cvx + DataSource 1 get /exec cvx + DataSource 2 get /exec cvx + DataSource 3 get /exec cvx + /AGMCORE_get_ink_data cvx + ] cvx def + }{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource load + filter_cmyk 0 () /SubFileDecode filter def + }ifelse + /Decode [ Decode 0 get Decode 1 get ] def + /MultipleDataSources false def + /NComponents 1 def + /Operator /image def + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator /image eq{ + AGMCORE_host_sep{ + /DoImage true def + HostSepColorImage{ + invert_image_samples + }{ + AGMCORE_black_plate not Operator/imagemask ne and{ + /DoImage false def + currentdict ignoreimagedata + }if + }ifelse + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys} if + }{ + use_mask { + level3 {process_mask_L3 image}{masked_image_simulation}ifelse + }{ + image + }ifelse + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + /MappedCSA CSA map_csa def + begin + SkipImageProc { + currentdict consumeimagedata + } + { + save mark + AGMCORE_avoid_L2_sep_space{ + /Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get /DeviceCMYK eq and + currentdict/Components known and + Name () ne and + Name (All) ne and + Operator /image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load /exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + } /exec cvx + ] cvx bind + MappedCSA 0 get /DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator /imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentdict/ImageMatrix get concat + knockout_unitsq + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name (All) ne and{ + level2{ + [ /Separation Name [/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + } bind + ] AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + currentdict imageormask_sys + }{ + currentdict + Operator /imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentoverprint not Name (All) eq or Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentcolorspace 0 get /Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentoverprint + MappedCSA 0 get /DeviceCMYK eq and + Name inRip_spot_has_ink not and + Name (All) ne and { + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + end + end +}def +/decode_image_sample +{ + 4 1 roll exch dup 5 1 roll + sub 2 4 -1 roll exp 1 sub div mul add +} bdf +/colorSpaceElemCnt +{ + currentcolorspace 0 get dup /DeviceCMYK eq { + pop 4 + } + { + /DeviceRGB eq { + pop 3 + }{ + 1 + } ifelse + } ifelse +} bdf +/devn_sep_datasource +{ + 1 dict begin + /dataSource xdf + [ + 0 1 dataSource length 1 sub { + dup currentdict /dataSource get /exch cvx /get cvx /exec cvx + /exch cvx names_index /ne cvx [ /pop cvx ] cvx /if cvx + } for + ] cvx bind + end +} bdf +/devn_alt_datasource +{ + 11 dict begin + /srcDataStrs xdf + /dstDataStr xdf + /convProc xdf + /origcolorSpaceElemCnt xdf + /origMultipleDataSources xdf + /origBitsPerComponent xdf + /origDecode xdf + /origDataSource xdf + /dsCnt origMultipleDataSources {origDataSource length}{1}ifelse def + /samplesNeedDecoding + 0 0 1 origDecode length 1 sub { + origDecode exch get add + } for + origDecode length 2 div div + dup 1 eq { + /decodeDivisor 2 origBitsPerComponent exp 1 sub def + } if + 2 origBitsPerComponent exp 1 sub ne + def + [ + 0 1 dsCnt 1 sub [ + currentdict /origMultipleDataSources get { + dup currentdict /origDataSource get exch get dup type + }{ + currentdict /origDataSource get dup type + } ifelse + dup /filetype eq { + pop currentdict /srcDataStrs get 3 -1 /roll cvx /get cvx /readstring cvx /pop cvx + }{ + /stringtype ne { + /exec cvx + } if + currentdict /srcDataStrs get /exch cvx 3 -1 /roll cvx /xpt cvx + } ifelse + ] cvx /for cvx + currentdict /srcDataStrs get 0 /get cvx /length cvx 0 /ne cvx [ + 0 1 Width 1 sub [ + Adobe_AGM_Utils /AGMUTIL_ndx /xddf cvx + currentdict /origMultipleDataSources get { + 0 1 dsCnt 1 sub [ + Adobe_AGM_Utils /AGMUTIL_ndx1 /xddf cvx + currentdict /srcDataStrs get /AGMUTIL_ndx1 /load cvx /get cvx /AGMUTIL_ndx /load cvx /get cvx + samplesNeedDecoding { + currentdict /decodeDivisor known { + currentdict /decodeDivisor get /div cvx + }{ + currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvxs + BitsPerComponent /decode_image_sample load /exec cvx + } ifelse + } if + ] cvx /for cvx + }{ + Adobe_AGM_Utils /AGMUTIL_ndx1 0 /ddf cvx + currentdict /srcDataStrs get 0 /get cvx /AGMUTIL_ndx /load cvx + currentdict /origDecode get length 2 idiv dup 3 1 /roll cvx /mul cvx /exch cvx /getinterval cvx + [ + samplesNeedDecoding { + currentdict /decodeDivisor known { + currentdict /decodeDivisor get /div cvx + }{ + currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvx + BitsPerComponent /decode_image_sample load /exec cvx + Adobe_AGM_Utils /AGMUTIL_ndx1 /AGMUTIL_ndx1 /load cvx 1 /add cvx /ddf cvx + } ifelse + } if + ] cvx /forall cvx + } ifelse + currentdict /convProc get /exec cvx + currentdict /origcolorSpaceElemCnt get 1 sub -1 0 [ + currentdict /dstDataStr get 3 1 /roll cvx /AGMUTIL_ndx /load cvx currentdict /origcolorSpaceElemCnt get /mul cvx /add cvx /exch cvx + currentdict /convProc get /filter_indexed_devn load ne { + 255 /mul cvx /cvi cvx + } if + /put cvx + ] cvx /for cvx + ] cvx /for cvx + currentdict /dstDataStr get + ] cvx /if cvx + ] cvx bind + end +} bdf +/devn_imageormask +{ + /devicen_colorspace_dict AGMCORE_gget begin + /MappedCSA CSA map_csa def + 2 dict begin + dup dup + /dstDataStr exch /Width get colorSpaceElemCnt mul string def + /srcDataStrs [ 3 -1 roll begin + currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse + { + Width Decode length 2 div mul cvi string + } repeat + end ] def + begin + SkipImageProc { + currentdict consumeimagedata + } + { + save mark + AGMCORE_producing_seps not { + level3 not { + Operator /imagemask ne { + /DataSource [ + DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse + colorSpaceElemCnt /devicen_colorspace_dict AGMCORE_gget /TintTransform get + dstDataStr srcDataStrs devn_alt_datasource /exec cvx + ] cvx 0 () /SubFileDecode filter def + /MultipleDataSources false def + /Decode colorSpaceElemCnt [ exch {0 1} repeat ] def + } if + }if + currentdict imageormask + }{ + AGMCORE_host_sep{ + Names convert_to_process { + CSA map_csa 0 get /DeviceCMYK eq { + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + [ + DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse + 4 /devicen_colorspace_dict AGMCORE_gget /TintTransform get + dstDataStr srcDataStrs devn_alt_datasource /exec cvx + ] cvx + filter_cmyk 0 () /SubFileDecode filter def + /MultipleDataSources false def + /Decode [1 0] def + /DeviceGray setcolorspace + currentdict imageormask_sys + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate { + /DataSource [ + DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse + CSA map_csa 0 get /DeviceRGB eq{3}{1}ifelse /devicen_colorspace_dict AGMCORE_gget /TintTransform get + dstDataStr srcDataStrs devn_alt_datasource /exec cvx + ] cvx 0 () /SubFileDecode filter def + /MultipleDataSources false def + /Decode colorSpaceElemCnt [ exch {0 1} repeat ] def + currentdict imageormask_sys + } + { + gsave + knockout_unitsq + grestore + currentdict consumeimagedata + } ifelse + } ifelse + } + { + /devicen_colorspace_dict AGMCORE_gget /names_index known { + Operator/imagemask ne{ + MultipleDataSources { + /DataSource [ DataSource devn_sep_datasource /exec cvx ] cvx def + /MultipleDataSources false def + }{ + /DataSource /DataSource load dstDataStr srcDataStrs 0 get filter_devn def + } ifelse + invert_image_samples + } if + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentdict imageormask + }ifelse + }ifelse + cleartomark restore + }ifelse + end + end + end +}def +/imageormask_l2_overprint +{ + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN [ + AGMIMG_c 0 ne {/Cyan} if + AGMIMG_m 0 ne {/Magenta} if + AGMIMG_y 0 ne {/Yellow} if + AGMIMG_k 0 ne {/Black} if + ] /DeviceCMYK {}] setcolorspace + AGMIMG_c 0 ne {AGMIMG_c} if + AGMIMG_m 0 ne {AGMIMG_m} if + AGMIMG_y 0 ne {AGMIMG_y} if + AGMIMG_k 0 ne {AGMIMG_k} if + setcolor + }{ + /Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def + [/Indexed + [ + /DeviceN [ + AGMIMG_c 0 ne {/Cyan} if + AGMIMG_m 0 ne {/Magenta} if + AGMIMG_y 0 ne {/Yellow} if + AGMIMG_k 0 ne {/Black} if + ] + /DeviceCMYK { + AGMIMG_k 0 eq {0} if + AGMIMG_y 0 eq {0 exch} if + AGMIMG_m 0 eq {0 3 1 roll} if + AGMIMG_c 0 eq {0 4 1 roll} if + } + ] + 255 + { + 255 div + mark exch + dup dup dup + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ] setcolorspace + }ifelse + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation /Black /DeviceGray {}] setcolorspace + gsave + /Black + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Yellow /DeviceGray {}] setcolorspace + gsave + /Yellow + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Magenta /DeviceGray {}] setcolorspace + gsave + /Magenta + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation /Cyan /DeviceGray {}] setcolorspace + gsave + /Cyan + [{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + } if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +} def +/indexed_imageormask +{ + begin + save mark + currentdict + AGMCORE_host_sep{ + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget dup /CSA known { + /CSA get map_csa + }{ + /CSD get get_csd /Names get + } ifelse + overprint_plate not{ + knockout_unitsq + }if + }{ + Indexed_DeviceN { + /devicen_colorspace_dict AGMCORE_gget /names_index known { + indexed_image_lev2_sep + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + } ifelse + }{ + AGMCORE_is_cmyk_sep{ + Operator /imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + Indexed_DeviceN { + /indexed_colorspace_dict AGMCORE_gget begin + CSD get_csd begin + }{ + /indexed_colorspace_dict AGMCORE_gget begin + CSA map_csa 0 get /DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and { + [/Indexed [/DeviceN [/Cyan /Magenta /Yellow /Black] /DeviceCMYK {}] HiVal Lookup] + setcolorspace + } if + end + } ifelse + imageormask + Indexed_DeviceN { + end + end + } if + }{ + Operator /imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + Indexed_DeviceN not { + currentcolorspace + dup 1 /DeviceGray put + dup 3 + currentcolorspace 2 get 1 add string + 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub + { + dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put + }for + put setcolorspace + } if + currentdict + Operator /imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask { + level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse + }{ + AGMIMG_&image + }ifelse + }ifelse + end end +}def + /OPIimage + { + dup type /dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode [0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc {false} cdndf + /HostSepColorImage false cdndf + /Decode [ + 0 + currentcolorspace 0 get /Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ] cdndf + /Operator /image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse + }def +/cachemask_level2 +{ + 3 dict begin + /LZWEncode filter /WriteFilter xdf + /readBuffer 256 string def + /ReadFilter + currentfile + 0 (%EndMask) /SubFileDecode filter + /ASCII85Decode filter + /RunLengthDecode filter + def + { + ReadFilter readBuffer readstring exch + WriteFilter exch writestring + not {exit} if + }loop + WriteFilter closefile + end +}def +/cachemask_level3 +{ + currentfile + << + /Filter [ /SubFileDecode /ASCII85Decode /RunLengthDecode ] + /DecodeParms [ << /EODCount 0 /EODString (%EndMask) >> null null ] + /Intent 1 + >> + /ReusableStreamDecode filter +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type /dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode [/customcolor_tint AGMCORE_gget 0] def + /Operator /image def + /HostSepColorImage false def + /SkipImageProc {false} def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + bdict + /Name AGMIMG_colorAry 4 get + /CSA [ /DeviceCMYK ] + /TintMethod /Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components [ AGMIMG_colorAry aload pop pop ] + edict + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + dup 4 get map_alias{ + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + }{ + AGMIMG_&customcolorimage + }ifelse + }bdf +}def +/snap_to_device +{ + 6 dict begin + matrix currentmatrix + dup 0 get 0 eq 1 index 3 get 0 eq and + 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop + { + 1 1 dtransform 0 gt exch 0 gt /AGMIMG_xSign? exch def /AGMIMG_ySign? exch def + 0 0 transform + AGMIMG_ySign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch + AGMIMG_xSign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch + itransform /AGMIMG_llY exch def /AGMIMG_llX exch def + 1 1 transform + AGMIMG_ySign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch + AGMIMG_xSign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch + itransform /AGMIMG_urY exch def /AGMIMG_urX exch def + [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY] concat + }{ + }ifelse + end +} def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + } if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage + end + } def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{ + { + 255 mul round cvi GrayLookup exch get + } currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get /DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer + currentdict imageormask + }{ + currentcolortransfer + {AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + MappedCSA 0 get /DeviceGray eq { + {255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get /DeviceCMYK eq { + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{ + {HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get /DeviceGray eq { + {HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get /DeviceCMYK eq { + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div} exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end end + }def +}if +end +systemdict /setpacking known +{ + setpacking +} if +%%EndResource +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +Adobe_AGM_Utils begin +2 2010 Adobe_AGM_Core/doc_setup get exec +Adobe_CoolType_Core/doc_setup get exec +Adobe_AGM_Image/doc_setup get exec +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: reHaRegel.png 1 +%%EndPageComments +%%BeginPageSetup +/currentdistillerparams where +{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse +{ userdict /AI11_PDFMark5 /cleartomark load put +userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} +{ userdict /AI11_PDFMark5 /pdfmark load put +userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse +[/NamespacePush AI11_PDFMark5 +[/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 +[{ai_metadata_stream_123} +currentfile 0 (% &&end XMP packet marker&&) +/SubFileDecode filter AI11_ReadMetadata_PDFMark5 + + + + + + + + + + + 2006-05-11T07:34:26Z + 2006-05-11T07:35:55Z + Illustrator + + + + JPEG + 236 + 256 + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FUr8z+ZdG8s6Hda5rVytpptmFM87BiF5uI0FFDH4ncDpir5y0HUvz0/OHVtU1 TQfMTeV/KcVxPFps0KMpeIMfSB4sCzcePJuXXoMVSvzH+U3/ADlD5VV9S0fzhfa9FBC8s/pX07OA gLFRb3Lt6jELsFBJ6Yq9I/5x1/PpvPto/l7XwIfNmnQhnk6fXI0PF5uCoqxupKh1B9xQbBV7birs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeOf85azyR/krqSI xCzXVmkgHdROr0P+yQHFWeflhodpoX5d+XNLtVVUt9OtvUZBxDyvErSyUqd3dix374qyfFXy/wDm hpOneSf+clfIWq+WYF06fzDdQxarHGAIpfrV0Led+HQNJHMeVO4B61JVfUGKuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4x/zlz/5Ji9/5jLT/AJOYq9T8q7eV 9H/5gbb/AJMriqaYq+aP+ci5Ui/Pn8qpZDxjjvbRnbwA1GIk4q+l8VdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirxX/AJy8/wDJN3P/ADHWn/Ejir0r8u7ia5/L /wAsXE7c5ptJsZJXoBVmtkLGgoNye2KsgxV8y/8AOSUBuPzx/K+AHiZbq1QMegLahGK4q+msVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirxX/nLz/yTdz/AMx1 p/xI4q9E/K7l/wAqz8o8m5N+hdOq3Sp+qx74qybFXyr+fd20v/OUf5dWwcmO3k0esZ6K76o5Yj5r xxV9VYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXiv/OXv /km7n/mOtP8AiRxV5D+Rsv8Azkd5s8uDTfLWvLpXljTaW8WoXqK3HiKejbsYpJH4Cm1eK7YqzvX/ ACx/zl5oOnPf2Pm+01xLQNcSWUUEPruEB+BFktgZOS/sB616CuKvBNF84695w/P7y1r2vIkeq3Gu aRFcRRI0aKbeeGGgRixU/u6sK/arir9CMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdir5M/5zQ8zX995g8u+SLKsiKgv5YEFTJcXDtbwD5qqvT/AF8VfTnk7QF8 u+U9G0BXWT9FWNvZtKo4h2giWNnp/lleWKpvir5g/wCckdKsNC/Ov8uPOTL6UVze2y6jIgAr+j7u F+bHarGKbjv2X2xV9P4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXx353ZPM3/ADmNp1lCnrRWOoafGw6VFlElzNWo/ZKuPemKvsTFXYq+af8AnNNhDaeS7p6+ jBe3BkIBP7MLfqU4q+lgQRUbg9DirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVfI/5M6bNqH/OWnm+8b4hpd3rU5Y9gbo2qj7psVfXGKuxV81/85vf8ot5a/wCY 6b/kzir6L0vj+jLTj9n0Y6dtuA+eKonFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXzJ/zi/G2pfm5+Z2vFFobqRSzAcwby9mloKdj6O9PAYq+m8Vdir5j/5zcuHf T/J2lxrWS7ubuRD03iWFAK17+vir6Xs7f6taQW/Iv6Max8yAC3FQKkDxpiqrirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir5w/wCcOZDd/wCO9UVQIr3UoWRhv/v5 6V9hKMVfR+KuxV8wf85ZSnUPzF/LjQ7dPVu/XZlhahVjd3UESKV67tCQcVfT+KuxV2KuxV2KuxV2 KqF/qFhp9q93f3MVpaRCslxO6xRqPFnchRiryq4/5yr/ACRhlaNdblmCmnqR2d1xPy5RrirNfJn5 neQ/Ool/wxrMOoyQKHmhUPHMqsaBjFKscgFdq8cVZPirsVdirsVdirsVdirsVdirsVdiryX83f8A nI7yd5Bha0tHi13zHyMZ0u3mAEJFatcyKHEfE/sfaPgBvirw2H/nNT8yhcLPPoekPp4ko6JHdI5X rwEpndQ1O/D6MVfSP5Rfm/5e/MvQpNQ06NrO+tHEWoaZK6vJExUEMCv2o23CvxFSDttirO8VWyJ6 kTIGZOakc12YVHUV6EYq+OP+cbfzx8i/l55U1XS/MbXKXlzfm5iEEJkqhijj3PIAEMhxV7Tbf85Y fklMiNJq89uWpySSzuSVr/N6aSDb2JxVP9T/AOcgPyd0+we9k802U6KvIQ2rmeZjSoURxhmqfenv ir5kn8+v+av/ADk15X1K0AttNstQs4tLWX4HNrYzm6Jk3p6krc6D3C70xV9uYq7FXYq7FXYq7FXk f51f85DaD+XtdIsIl1fzbIoMenKSI4A4qj3LLuKg1WNfiYfygg4q86078mfzG/OFIfMf5j67PYWN xSex0i0VVihjapCxxMWCsFbjybk38zE4qzXTf+cQPyctI+FxDqGot/vy5uirf9O6wL+GKvEfzP0j yJ+Tvm7SdY/LTzLJc+YrK5b9IaNLKLmNIl+1HLJAIqKxXg8TtzINaimKvpT8m/zr8t/mTpINswtf MFrErappTbFDsrSRVJ5xFuh6jYNir0bFXYq7FXYq7FXYq7FXYq7FXyn+cH58ecvOHmiX8uvyujm/ vmtrrUrQn6xcOjFJBDKp4xW4O7SbE06qteSrIvy5/wCcPPLGnJbal52upNZ1YH1ZtPibhYhiPsOa erNQ715KD0KkdVXu0nlbyzLov6Dk0mzbRgvAaaYI/q4WlKCLjwH3Yq+R/wA2fK1z+Qf5kaJ5p8i+ rFpN/HLW1uZGliMiufXtHoFb0TE8ZTmzNUE8qqKKvrjyv5i0/wAyeXNN17T25Wep28dzDuCVEi1K NT9pD8Le4xVJPzd85XPkz8uNc8y2iq13YwqLUSAsnrTypBEWUdQHlBxV86f840/kN5O86+V73zV5 wt5dRae7kt7O39eSFOMaqXmYwskhZpHI3am3TfFXqN3/AM4ifkzOGEVpe2tRQGK7c0PiPVEm+KpX F/zhZ+VSSo7ajrciqwJja4tQrAH7J42qtQ+xBxVjf58flj5P/LS38ned/KmmCy/QWr2q3kKM7rNG reurys5aRjyg415ftYq+n45I5Y1kjYPG4DIw3BBFQRiq7FXYq7FXYq8M/PX/AJyD1byb5gs/KPlH T4NT8x3KJLcPOGliiWUsqRCOJ439U0D/ABGgUjY12VW/lT/zj7FHdQ+ePP8APNq/nO/Zrm7huCjQ xOx+DYDcqgG32V+yBQYq9svr7TdK0+W9vZ4rLT7SMvNPKyxxRxoOrMaKoGKvkTzP/wA5Hfml+ZOs 3HlH8u9PaxtL5wlrNbhxqXoqQGeSdX9OBD1YqBxG3PxVeh+UP+cNPy/00Wtz5ivrzW72L4ri3Vlt rJz2X00Bmov/ABl38O2KvOvOnkiL8gfzc8s+bNJuGuPLV/cTA20lTLDCQI7mEmo9QCKflEx7j4ul Sq+xsVdirsVdirsVecfmF/zkD+WfkWdrPU9Qa91RCRJpmnKtxOhBoRJVkjjP+S7g+2KvDtT/AOc0 POd/ftD5W8r2vo8v3aXPr3czL0FVgaEKa/Pw98VemeQ/z98yS67a6D+ZXlebync6k3p6XqciSxWc 0xFVgJmHwu1DT4zU7UGKo/8A5ye/MM+UPy0ubeyvHs9e1xhZ6a8VPUCBlN04JB4gQkpyG4LAih3C qQ/84n/lNb+W/KkfnHUIWHmDXoT6PIsvo6e7K8acPskymNZeVOnEDvVV73irsVeS/wDOUnllNc/J zVpRF6l1o7xalbEAkr6T8JW2PaCSStf7cVSf/nDnV7y//KJ7a4blHpeqXNpa+0TRxXNP+Rlw2Ksl /wCcldOe/wDyS8zxRkhoooLjavS3uYpWqARX4UPX54qxz/nDu8Fx+UHpDjW01K6hNKVqVjl+Knf9 792KvcMVdirx7/nLJEb8k9WLKCUuLMqSOh+sIKj6DirMPyc1G41H8qvKl3cP6k76ZbLJISGLFIwl SQTueO+KsxxV2KuxV4R+ff50eadI8waf+Xv5fRCbzdqYjeW7T0pjAJWISFY35KsjBeTGQUVCD+1V VU6/Jj8hdN8n2f6X8ypFrPne7d5rvU5C83pBwtIozIaErxqZOIYkkVpTFXruKvkb/nLH8xdZ17zd a/ljoDPJbwvAL+1iA5XN/OQ0ENepWNXUgVoWbfdRRV9Gfl5+V3kzyDpn1Py9YJDNKqi9vmq9xcOq gFnkcswBI5cFIUHoMVZFq+qWWkaTe6rfyelY6fBLdXUtC3GKFDJI1BUmiqemKvjKw1vVf+cgvzw0 y21WGZfKNlJNNHZIopbWSJzKyyIAa3LxIjMW2LUXoMVfbGKuxV2KuxV4D/zkr/zkD/g+3l8o+Wpi PNNzGpu7xaUsoZRUU/4vdaFf5VPLwxVAfkT/AM456LLpNv528/RDXtc1tV1CK1vS00Ua3H70PcK5 PrzSB+T+pUCvSu+KvftG8v6DodsbXRdNtdLtSeRgs4I7eMse/GNVFcVW+YNA0LX9Jn0vXLKG/wBN nX99BcKGXbowJ3Vl6qy0KncGuKvinyha6Z+ZP/OQtho8019qnk6zubj6hBe3M15xsbOJ5I1LztIw jmkjXktejUxV9yxxxxRrHGoSNAFRFACqoFAAB0AxVdirsVUL+ytb+xuLG7jWa1u4nguImAKvHIpV 1IOxBU0xV8uf84k6pceW/PvnD8u76Zi0bvJbqxKp69hK0E5VD0aVGUn2T2xV9DfmXYtf/lz5pslU O9zpN9HGrUA5tbOF3NafFTfFXiH/ADhDeyP5T8yWRcmOC/imWP8AZBmh4lh7n0RX5Yq+k8VdiryH /nK639X8kdZfiG9CaykqaVFbqNKivf46Yqmf/ONk4n/JHys4cvSGePka/wC67qVKb/y8aYq9LxV2 Kvn3/nKH885PK1hH5V8raiYfM1ywe/uLdlL2luBUKSQeMk3IcabhRXaq4qnP/ON/5XXuiaC/m7zb H9c85a64uvr13Wa8gtnjCpG0svKRXcEl6HoQp6Yq9pxV2Kvj78qdP/S3/OXfmS4u4zdHTdQ1m4Rn +IR+lO9vExr/ACeooXwNMVfYOKvj385vzc1n80/Otl+Wvkud4dDnvVs5ruFnK3sjNwaWT0utrEKv TcEDmegoq+m/y+/Lryx5E0CDSNDtI4ykard33BRcXUi1JkncCrGrGgOyjYUGKsnxV2KuxVKvNmvx eXvK+r69KnqR6VZz3hjrTn6EbOEr/lFaYq+VP+cZPJUf5kecte8+edq61JZPGscd4vrRTXMyt8Th 6qVt4kVUSlBVaU4jFX2AAAKDYDoMVdirB/zu8xW/l/8AKjzRfyytDI9hNaWro3CQXF2hghKGoNVe QNtvQVxV5P8A84YeREsfK+o+crqCl3q8ptNPlYCotLc/vGQ9aST1Vv8AjGMVfSGKuxV2KoLWda0n RNMuNU1e7isdOtV53F1MwRFFaCpPiTQDucVfLGnaxYRf85lQanpdxFdaPryq1vdQyBo5UuNM4llZ TQ/6QhFPEU64q+mvO8scPkvX5ZV5xx6bdu6AAkqsDkihoN8VfPX/ADg4f9xXm4f8X2X/ABCbFX0/ irsVeRf85Whj+SGt0JoJrKtOlPrcfXFUw/5xpXj+SHlccVX91cGi9N7uY17bnqffFXo19f2NhaS3 l9cRWlnAvKa5ndY40XxZ2IVR88VfM35yf85HXnmG5j8jflPJdXOqXdwIZtZs/hMgoQYrQ057satN VaBfhqDyCrJ/yT/5xu0/RLWTXvP1vFrXmm+lW4Md1S5S2IJepZq85mY1diSOlO5Kr3nFXYq7FXxL 5p1vzd+Sn/OQWueZHsBdWusz3txCrlo4bq0vpfrBVJQGo0UnENsfiXpQjFVTzb/zkH+bH5pa3aeX vIlrdaMkv2LLTpibuVxuzy3SiHhGo8OKj9onsq9+/Ir8hdJ/LbT2vLxotQ81Xa8brUFWqQp/vm35 AMF/mbYsfYAYq9YxV2KuxV2KvJf+cp9Uew/JTWljPF72S1tQw8HuEZ/vRCMVQv8AziVpYsvyW065 BBOp3V5dECuxWY21D/0j4q9kxV2Kvkn/AJyj813HnX8xdA/K/RZUZILqFLqRTyX6/dsIlV6doI33 /wBZgemKvqfQNFstC0PT9FsRxs9Nt4rW3BpXhCgQE0puaVOKo/FXYq7FXyB/zkx5m1v8wvzJ078u vJ8x1W2sgontLWjIdSLOJWkkUleMEXEMTsh5174qxP8ANTyba/lF+YfkJbRef6MsrG/vr9UYLc3s F/NLO4ryrRQi07LxxV9Z/m75g0+0/J7zPqyTRy2dxpE6Ws6sGjkN5F6MBVhUMHaVaU64q8x/5wp0 yWD8vNY1B1KreaoyRVBHJIII/iBOxHKRht3BxV9DYq7FXjn/ADlpcel+SupJQn17qzjr4UnV/wDj TFWG+VPz08q/l1+QfluGC4g1nzIYGWDSIJQxSSSZpD9ZZOfpcFf7J+JjsB1IVYVY/ln+eX5369+k /OstxoWi255QfXIJIY0V6HjZ2jcCxK9ZG692OKvoz8rPyV8mflvbSfoaJ7jU7lBHd6rckNO61B4L QBUTkAeKj51pirPsVdirsVSTzl5w0Lyf5cvNf1ucQWVohNKjnI9PgiiBI5O52UfwxV8iCy/OP/nI 3XXnZ/0b5PtJ2a3aUFbK3FSAicQGubgIdz95QEYq+q/y/wDyu8leQbKe18tWH1b60we6uJHaWaQq ABykck8RTZRRa123xVleKuxV2KsQ/Mz80/Kf5d6Iup69MxknJSx0+Hi1zcOtOQjRivwpyHNiaCo7 kAqvn7SvO3/OVH5m6i2ueUYx5f8AL9QtpzSFLYqrGjc7lJHuG7OyLx2pQdMVT785fMPmrV/yS8wa B5q0O+svMehRadPe6obflpt431mBHktLqMelWkvJk2K7js1FWb/84qXcU/5HaFEhq1rJexSjbZje Sy/8RkGKvW8VU7q5t7S2lurmVYbaBGlnmchUREHJmYnYAAVOKvj/AP5xS8saj5u/M3WPzC1lfVWx eWb1mX4JNRvixPGoI/doztQbrVcVfYmKuxV2KvOvz2/NCy/L/wAiXl2twqa7fxyW2h29R6jTsApm C91g5h2PToOrDFXl/wDzhl5EFvomq+d7+GVdQ1KVrKwkmQjlaoEkkljZh8YllPEt4p88VXf85t6N JP5V8u6ukLOLC8mgllVaqi3MakciBtVoQBirCPzF8/M3/OK/kXRYpCJ9YLQTxsQXNtpMzxdP5fVj jp8sVfRX5A6Cmifk55VtFYObixS/dwKVN+Td0Pjx9bj9GKvQMVdirC/zh/L+Tz75B1Dy7BcLa3sv Cexmkr6XrwtzjWWgY8GI4tsadaGlMVeZ/kl/zizbeTdVg8yeabuLUtdtWY2VrbVazhLLxEhMiI8k gBPH4QFO+5AOKvoDFXYq7FXYqsmmhgiaWaRYokFXkchVA9ydsVfG35reYPNP55fmjH5N8o0uvLWk zlYLuIN9XHwqs95cSKWQorBlibuv2alt1X1r5Q8saf5W8r6X5esAPqumW0dur8VQyMigPKwXbnI1 Xb3OKpvirsVdirsVfJv5pWB/NT/nJvTvJplLaLokaR3wBC0RF+s3fEnfm/JYtu4HYYq+rra2t7W3 itraNYbeBFjhiQBVREHFVUDoABQYqx38zfLT+Z/y+8waDGnqXF9YzJaptvOFLw9dv71VxV4x/wA4 VeYbebydrflxzxvtOv8A62YiCG9G5jVB18HgavhUYq+jcVeNf85WeeIvLn5WXWmxTenqXmJvqFug +0YKhrpqH9n0vgP+uMVTv/nHXyfL5V/KTRbO5iMN9fK2o3qHY87o80DDsVh4KR4jFXpWKuxVDalq Vhpmn3Oo6hOlrY2kbTXNxIeKJGg5MzH2AxV8i38ep/8AORX5z/6F6n+APLzJE85Pp8bViSzhWo/q XjxELtVVpy+zir670/T7LTrC30+whS2srSNILa3jHFI441CoqjwAGKsL/PPyjN5r/KvX9ItoGub4 wC4sYkpzae3YSoq17tw4/Tir8/dS1/Vr/SdI0S5Zja6Is8VjDvVfrMxmk28S7Yq/SHyDpk+leRfL ml3CNFPYaXZWs0b05K8NuiMrU2qCu+Kp7irsVdirsVdirsVdirsVfLf/ADl3+bepafeR+RNGuTEs 9ss2svGaNSUsFgNNxySjNv0IxV6d/wA42fly/kv8tbT6/Y/U/MGqs13qofiZAC7C3QkdOMPE8ezF u+KvVsVdirsVdirsVfKP5fCO1/5zI8xRMTyme/MfOteTxrLtT2rT2xV9XYq7FXyX+WHo/l9/zldr /lh2VbLWGuILZY/sILpU1C1U7DdUpHt3Phir60xV8U/nRrF/+cX542Xk/QG/0TTpJNMtZXoY/URi 15c1TmeH7vbxVAdq4q+1gABQbAdBirsVeYfnV+bWoflrc+W9TksBe+Wb24nttaaPe5RvTDwehyZE 5fC5IY70pt1xV4v+aP5wSfnja6X+X/5e6XqKXF1dC61CW8McCelCrACQQyTKYgz+oxY7FVoCcVe6 fkj+UVh+WnlT9H80udavSs2sX8YYLJIteEact/TiDELsK7tQVpir0PFXYqxV/wAq/wAun80/4qbQ LQ6/zEv17hv6qkES8K+n6lR9vjy98VZVirsVdirsVdirsVdirsVSHz75rtvKfk/VfMVyQItOgMtG /ackIigVFSzsABXc4q+V/wDnHL8tbr8yPOV9+ZPmuYXlnZX7P6D/ABfWL+iyjmOgihEiNx77D7NR ir7GxV2KuxV2KuxV2KvlWBn8t/8AOacn10Aw61UW8hIJAurP92R0p+9j4U8MVfVWKuxV8U/85KG7 8n/85EWnmm2YmaZNO1eLuK2pFvwp8Ox+qbivf3xV9V/mD+YGmeUfIGoebmK3EEFuslioqVnlnotu u2/F3danstTir4m/I/8ANHyz+W9/qnmC+0u41fX5YVttLhVo4oI43PKd3mbm6u3FVHGM7ct98Vet W/5+f85Pra/pKTyCk2nyfvFYaZqApH4rSWvH3IPjirNvyq/5ym0fzfr9l5W1rR59G8xXkjwowZHt OccbOQ7SGKWNmKcVTg3xUFcVeu+afKPlrzXpR0rzFp0OpWBcSCGYV4yKCodGBDIwDEclINCfHFXy x/zjfYWun/8AOSHmqw0FSmjWcGpwKkvxMLWK9iRFBJJ2cJv1p1xV9fYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXzx/zmV52t7HydZeToQ76jrk6TyKoBVba2cN8W9eTzcONB+y3tVV6R+Rv5bn8vvy9stEn IbU53a91VlNV+szBQVX2RERPelcVZ/irsVdirsVdirsVfJv/ADl1FN5d/M7yV52go0ixr6cQopMm l3S3AYtv9r6yo3HbFX1XYX1tf2NtfWr+pbXcSTwOOjRyKGU/SDiqvir46/5zcmgPnby9CoH1hNNZ 5DtXg87hPfqjYql35x+bNb81w+QPyo0led1aWGljUI0JCyajc2kQRCGAosKOTWv7Rr9nFXv/AJB/ 5xm/K/ybe/pCK1l1m/U1gn1UxziLeoMcapHGGH8xUnwIxV6vir5K/wCcj7UaT/zkN5L1TSo1h1C5 FhM/AAepPHfMis1KciyhVNeoGKvor80/Og8leQNZ8yhVkmsYf9Fjc0DTysIogdj+24JHhir53/5w r8tX915g8x+dbiYmNYTpgUrUyzXEkdzK5eu3D0V2pvz7U3VfWeKsC/NT86PJv5cWBfVp/rGryx+p ZaNCw+sSgllVm6+nGWUjm22xpU7Yqwv8nvPn5l/mh5rHnGi+XvIOnxvZDRai5a9uSpLOJSkTD02d DzpT4eIBJchV7jirsVdirsVdirsVdirsVdir5Z81Gy/MP/nLvR9MSM/UfKscaXjGjrJJYGS8J49A pmlSFgfD6MVfU2KuxV2KuxV2KuxV2KvEv+ctPIaeYvy0fW4UZtR8ssbqELvW3lKJcg+wVVkP+piq t/ziX5svtf8Aymitr0q0mhXcmmQNUl2t0jjliL1O3ETGNabUUYq9nxV43/zkT+VvkHX9Ifzn5rvr +zj8vWrKVsWiHqoz1WOkkcnxvIwVW6b74qwT/nFv8s5NY1W5/NnXkIluZph5ft+XJFBLwyynlVqJ vFHU7UJ/lxV9P4q7FXxxda9b/mn/AM5ZaRGJP9w+k3Xo2Dxj7cWkrLdktXtNOjb0HwkDrvirJf8A nMvzzHcx6P8Al7pv+kahLcJf38cRYup4tHbQFRsxkMpfidxRT3xVR1/8wNY/5x38q6H5I0jRYr3V Ly2OpX+sXjO1q11M5WWONIihf0wgX7a7cTQ1xVQsPzZ/5yy86wBNA8txabEwp9eismt4zz25LLqM skbcafs/T2xVkPlT/nFW81q9PmH829buda1p5EYWdvOWi9JN/TmmdOZG9OMXAL2Jrsq+htO06w02 xgsNPt47SytkEdvbQqEjRF2Cqq0AGKojFXYq7FXYq7FXYq7FXYqxf8zfO1v5J8jat5llCPJYwn6p C5ostw5CQxmhBoZGHKnauKvE/wDnDvy8NSj8y/mNqMrT65qd7NYs7Cgo3pXc8nuZJZR/wOKvpTFX Yq7FXYq7FXYq7FVG8s7a9s57O5QS21zG8M8Z6MkilWU/MHFXy1+Q8z/lt+ffmT8spZzJpmokixeX 7ZkgjNzbEkUUF7aRg9Bu1Plir6rxV8p/85d/mbLPq9n+W0Li203lb3euXY+JjzPKKOgP2UH7xgep 49KbqvpjytpWm6R5Z0jStLm+sabYWdvbWVwWVzJDFEqRyFkAViygGoFDiqaYq8B/5yC/5yN0vy7p s3lnyjcw6l5kvkeC4uIW9WOySRShIaNt7ip+Bf2Tu3ZSqxj8qPy7P5M+QNY/NbzbbOdfjtDHY6Sw FYEuJI44hLtVZZZWUN/IhNdyQFXz1rF95h80axd+fNdWU2d3qkUWo38NVWOWYNIsMJYuw4QwngN+ IUYq/Sngnw7VKfZJ3I2p1OKt4q7FXYq7FXYq7FXYq7FXYq7FXYq+Vf8AnL3zJN5h8z+Wfy30WX17 0zrNeWymq/WrorDaI1KkMqM7H2cHFX0P+XnkbS/I/lDT/LWnM0kNkp9S4cAPLLIxeSRuIHVjt4Cg xVkeKuxV2KuxV2KuxV2KuxV8ff8AOUuo3flP89vLvmnTUaCeOwtbkzqAfUlhuJkcfGGWvohFO3Sm KvruyvLe9s4Ly3bnb3MaTQtSlUkUMpofY4q+Mf8AnJDQLc/85F2K64rpout/o0ySxMA/1UlbaYq3 xUdfTalR4bUxVl2oeQv+crvIf+47yXrr655ehpFYDlaSyw26fDEjRX6n0+K0HGIlQMVQU/k7/nMr zfDFZ6zqb6ZZSsBJIbizs6KK7yDTwJWX2oflirP/ACH/AM4u/lv5Hgj1/wAx3LavqelML9tQndrW 0tjbN6wkWJH+ynGreqzA06DpiryD8w/zG8yfnt+Ylj5E8szfVfLElzS0WRePqeijvLeT9GosYYpH XpTbkcVeh/8AORX5W6Z5b/5x/tdI8r2vp6foWpW+oXxJZ5JOcctvJO5NSWaSdSewHSigDFXpX/OP /n3/ABp+WGlX88wl1SyU2GqUoD69vsGYCgrJHwfbbfFXo2KuxV2KuxV2KuxV2KuxV2KuxViP5q/m JpnkDyZea/esDMAYNNt2DH17x0ZoovhBoDwJJ8AcVfP3/OJ3lqbzf5u8w/mT5oSW/wBUt5kXT76W gia6nWQ3LhVovKKPgqinFQ2w2FFX1firsVdirsVdirsVdirsVdir5+/5zL8pwah+Xtn5ijireaLd oryhan6tc/u2UsBUD1fTIrt9+Ksy/wCcaNam1f8AJXy7NcXP1q6tlntJmLcmQQXEiRI1SSOMAjp7 UxVKP+cnPykuvPPlGLUNEthN5l0RjJbooAkntmH72BTtVgaOgr1BA3bFWA+Q/wDnMLTtI0a00Pzr o1+up6VALS5vYCs0s0luvDlNHO0LpKxX46sfi8OyrI9R/wCc0vy0htBJYaZqt3dMARA8cEKqfB39 V6f7FWxV47e/mJ+d355eYE0PSDLYaVLSC7tNPM0VlFBOQjyX0iktInHqHrXfitcVfUH5Q/kn5W/L fSUS1jS916VT9e1qSNRM3ILyjiO7Rw1UfBX3NTirOdW0rT9W0y60zUYVubG9ieC5gcVV43HFgfox V8p/84ryar5T/OLzR5CvrkpbpDcAWzElZLqznRUkQdKtAzt7inhir62xV2KuxV2KuxV2KuxV2Kux VTurm3tLaW6uZVhtoEaWeZyFREQcmZidgABU4q+NtV1nWf8AnIj85I/L9ndzW3kjTy06xKxULaW5 4PdmNtjNM0gRKrVAwHQNir690Hy/ovl/SrfSdFsorDTrZeMNtAoRR4sadWY7sx3J3O+KphirsVdi rsVdirsVdirsVdiqD1rSLLWdHvdJvk9Sy1CCS2uUPeOVSjfgcVfJ/wDzi7qOp+TPzj8wfl1qE37q 4+sQrGdg93YMSsiA9A8AkPuKeGKvrW/1Cw06zlvtQuYrSzgXnPczuscaL4s7EKBir59u/wDnKj8n tc8x3GheYtE+saFDO0VrrFzDFeW78X4+sYGUuiNTkpAZqdhiqW/k5r35c+YvzP13yxrnkbQNM1W1 mmfRHt7WIo6QsAyAOGRn4qJUeMAFeRAA6qs7/Mf/AJya/LnyLeSaLCsusatagxyWVgEEMDoKCOWZ iFUilCEDFe4xV5+3/OcWmcH4eUpg/FuFbxCOVDxr+5G1euKpJ5K/5zR8wjXVTzjptrJok7cWl09J I57erCj0eSQSqo6rse9exVVP+cj5h5a/MzyX+bXl+lxY6lFBcC4jrwna24sOTU2E9rKqjuQD4Yq+ rNH1aw1jSbPVdPkE1jfwx3NtKP2o5VDqfuOKovFXYq7FXYq7FXYq7FXYq+Xv+cu/PU+qXmlflfoK PdalcTw3V/HAx5M7hktrUqPtci/qEHp8BxV69+SH5S6f+XHlCKx4pJrt6Fm1q9XcvNTaJW6+nFXi v0t1bFXoeKuxV2KuxV2KuxV2KuxV2KuxV2KvCn/I3zM3/OSn/KxVltY/LnIXAQO7XBkWxW2KFCtB ylq1eVOP3Yqwv/nNyXzOq+XYjLGPLEhlZYULeo18g3aXbjxET0joa/bxV6r5I/K7yH5h/JDyto2q aPby2lzpFpdFwgEyXN1bpLLPHL9tJGdyag+3TbFXjv8Azk5+UPkDyZ5G0HUtI+sW+s20kOlwyFw7 XUSI7+pcbL+8j4bOgHULSnHiqyn/AJxQ/JnSbDy1bee9atBPrepEyaSs61FtbK1ElRWG0ktOQf8A k48aVNVX0birx/8A5ys8q3Gv/k/fSWyNJPolxFqixp1KRBopSduiQzO5+WKvnfQru684f8406x5a iJm1HyVqUesW9qhLSNYTCRJWVBUlYmnldz0A6+6r2n/nDXzk2rfl7eeXJt5vLlzSI02+rXpeVKnu RKsv0UxV7/irsVdirsVdirsVdirzT8//AM0E8g+QLu6srqGHzHfUt9Ggk+J2ZnUSyqla0ijJbkfh 5cQetCq8q/5xD/LDXbe+v/zD8wRSxPfQNBpS3SEyzC4ZJpbzlJ8VGChUf9sM3bqq+oMVdirsVdir sVdirsVdirsVdirsVdirD/zb8/nyF5D1HzMlob2a14RwQdE9WZxGjSEbhAzb037Yq8q/5yEW2/Mn 8gbDzd5frdw2UsepsygoViRZILtSrb/unJ5f6vU4qzP/AJxp84WnmT8otFRJud5osY0q+ioQY2tg FhG4FQYPTNRt26g4q8//AOc3LLUJPKXl28ij5WFvfSpdSDqsksQ9KvsQj7/LFXsn5QXmnXf5WeU5 tOINoNKtIlA7PFCscin3WRGB98VZdiqjeWdte2c9ncoJba5jeGeM9GSRSrKfmDir4v8AyXvNA/K3 89fMui+abhbPTFtb7TBcXJBjKLLHcRNJTY+rDDsKVJYClTTFU/8A+cIZJx5g82RRxMbNra1Z5uqq 6ySCNWO27Kzkbdj0xV9b4q7FXYq7FXYq7FULqup2OlaXeapqEvoWFhBJdXcxDMEhhQvI3FQzHiqk 0Arir43tLi7/AOcgP+cgInljlPlDTSX9PbjFp9sarzDcaNdS8QwFWHLuErir7QiiiiiSKJFjijUL HGoCqqqKAADYADFV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxViP5t+Tf8Y/l1rugJCs95c2rvp6MQv+ lxD1Lf4iVC1kUAmvQ77Yq8Z/5xn/ADB8rzeSJ/yq81TJYaxay3tkmnXQ9L1re4Zmmi5MAvqrJLIp QnlTpXeirCP+cZPPWk+RfzM1zyZfXyT6Xq9yLKw1GM84Xu7aZ4oHUqWUJcLIfiFd+O9N8Velf85J /mL5X1jTbj8qdLhl1nzhqk0EMVtb0RLWcSRyxepLJxQs9acVJoK8ivdVr/nDfztBqfkK68ryyf6d oM7PFGT1tLpjIpX/AFZfUB8NvHFX0FiqVeZvNPl7yvpEusa/fRadpsNA88pO7HoqKoLOxpsqgk4q +C5/LnmH84vza8yv5VSKd7qe61GJ5n9BRZrMscbHmA1aSRilK+2Kvr/8ifyctfyz8sSW0kq3Wu6m Ul1e6SvplowRHDHWnwRc2oSKkknbYBV6VirsVdirsVdirsVePf8AOVPnMeXPynvrOKQpf+YHXTYO PX0n+K4J/wAkwqyf7IYq1/zi5+XLeUfy3hvr2H0tZ8xFb66rQssBH+ix1H/FZ50O4LkHFXsWKuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV89fnj/AM4tS+dfMUnmbyvfW+n6peFf0naXnNbeRlUL6yPE sjI5VRyXhRjvUGtVWM+Y/wDnCq5XRdKbyvrcY16FQNWN+XS2kc/EZIGhjkePi3whSpqN6gjdVk35 H/8AOM2r+UPN8vm3zjqFrqepw8zp8ds0syiaaokuJZJ0iYvQsB8J68q1xV4t+XvmSf8AIf8AOTVL XzHbXE9nDFNYXa2qq0kkLsstvPEspiVg3BDuRsT8sVewaz/zm15IjsZDomhanc3/ABPpJei3t4eX bk0Utw1PkuKvPV8v/n5/zkDcrdamyaT5YiZZrYTpLb2AP2eVtFSSSeTg7EOxI6jmtQMVfTf5X/lL 5T/LrRhZaNAHvpVUahqkgHr3Dr3J34pX7KDYe5qSqzXFXYq7FXYq7FXYq7FXyR/zkjqsHmz8+/KX kWdmGm2dxY2l2FO/qanPGZSO39yY6bYq+tkRERURQqKAFUCgAGwAAxVvFXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FUi8yeRPJnmZon8waJZapJBQQy3UKSOgBrxVyOQWvVa0OKpTpv5MflRp s6z2flTTUmQlkkeBJSCRTb1OfbFWZgACg2A6DFXYq7FXYq7FXYq7FXYq7FXzHbflB51v/wDnKi48 zatpz/4dtrv9IxamAghdY4aWiL8W7rIiBhSu1dqjFX05irsVdirsVdirsVdirsVdirsVdirsVf/Z + + + + + + + application/postscript + + + + + +% &&end XMP packet marker&& +[{ai_metadata_stream_123} +<> +/PUT AI11_PDFMark5 +[/Document +1 dict begin /Metadata {ai_metadata_stream_123} def +currentdict end /BDC AI11_PDFMark5 +Adobe_AGM_Utils begin +Adobe_AGM_Core/page_setup get exec +Adobe_CoolType_Core/page_setup get exec +Adobe_AGM_Image/page_setup get exec +%%EndPageSetup +Adobe_AGM_Core/AGMCORE_save save ddf +1 -1 scale 0 -174.6 translate +[1 0 0 1 0 0 ] concat +% page clip +gsave +newpath +gsave % PSGState +0 0 mo +0 174.6 li +159.9 174.6 li +159.9 0 li +clp +[1 0 0 1 0 0 ] concat +gsave % PSGState +159.903 174.6 mo +0 174.6 li +0 0 li +159.903 0 li +159.903 174.6 li +clp +-.15 -.15 mo +-.15 139.8 li +128.1 139.8 li +128.1 -.15 li +false sop +/0 +[/DeviceRGB] add_csa +gsave % PSGState +clp +[1 0 0 -1 0 174.6 ] concat +/0 map_csa setcolorspace +[128.25 0 0 139.95 -.15 34.7996 ] concat +snap_to_device +Adobe_AGM_Image/AGMIMG_filter currentfile /ASCII85Decode filter /RunLengthDecode filter ddf +bdict +/ImageType 1 +/Width 855 +/Height 933 +/ImageMatrix[855 0 0 -933 0 933 ] +/MultipleDataSources true +/BitsPerComponent 8 +/Decode[0 1 0 1 0 1 ] +/DataSource [ +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +] +/NComponents 3 +/HostSepColorImage false +/SkipImageProc {false} +/Operator /image +edict +img +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&MuSD/K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^c/K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&MuSD/K)^H&K)`C]#PQTY[^roVZi.?;['mES[^WU@ +[fOnKjSsi3K)^H&K)^H&K)aU*#PQTY[^roVZi.?;['mES[^WU@[fOnK_Z,5fK)^H&K)^H&K)bfL#PQTY +[^roVZi.?;['mES[^WU@[fOnKT`9WDK)^H&K)^H&V#LVtr8Y"]&*j3!(1=Z=rVhEKMuSD/K)^H&K)`Oa +"oeG[YZ25"!!O-G\Es1nkl687K)^H&K)^H&K)aa."oeG[YZ25"!!O-G\Es1n`rCYjK)^H&K)^H&OoGab +p[RD%ccO)=]Df5>]!DO9JQ3irkl;2$11ufP[^WWP[^ro\de9jDK)^H&K)^H&K)`1W$2aJek2"A*_nNb^ +[Ka=LV1DVi"R,mh$Sl@YX9l>E['mES[_:,_N;nh9K)^H&K)^H&bl8"Hp[RD%ccO)=]Df5C]!J5ars\GWbcQb:9/.M%$3^I[!!E[0^$5IDs+:9&s+:9& +s+:96rs\GWbcQb:9/.M%$3^J0!7q2R$WXn)r3?9Rs+:9&s+:9&s0Ve7n`%cpMJ5^<*tntb!Sd\N!!E[0 +^$5HUs,6o/s+:9&s+:9qrs[c*X,Lgh1as+:9&s+:9&s3CWRg;9_DBMCB2(CgZQ!s+:9&s+:9&s3L]Rd(5g!A5"j+(_-cS!QtK;s+:9&s+:9&s+:9&s7ZI( +oZ`b>5r'o8)\`bh#6Y)/!Qb>ms+:9&s+:9&s+:9=rt+hIQu#&D.O5rI%LNFD!W`?!!7(YPs+:9&s+:9& +s+:9_rt+hIQu#&D.O5rI%LNFD!W`>T!:^&Ps,6o/s+:9&s+::$rrqqb7hYn(]E%d-K)^H&K)^H&K)^H& +p\tEeT19Oq!PAEas+:9&s+:9&s+:9>rrqqb7hYn(mf:W5[JtjYK)^H&K)^H&^&J02X!l'in,S[PMuSD/ +K)^H&K)aF%!rK#H\,c@)K)^H&K)^H&K)^H&q#:EmX!kIXfDgI&K)^H&K)^H&S,WNB;!J&*!4MoZs+:9& +s+:9&s1SF5fhf`imf8UPMuSD/K)^H&K)aF%!SL;X!;c_Is+:9&s+:9&s+::GrrJi2[/en[K)^H&K)^H& +K)_>?!MUFr!6bGPs+:9&s+:9&s+:9arrJi2a8kW.Q2cdBK)^H&K)^H&fDbp4C'CsEr;VBKK)^H&K)^H& +K)bZH!on#!ZiJh[K)^H&K)^H&K)_A@!on#!l2]!-\Gq0\K)^H&K)^H&^]+E"c6M84rVqKLK)^H&K)^H&K)b]I"6e$7"LA*_s+:9&s+:9&s+:9Crrr8ce?W-al2\s,!"6C< +K)^H&K)^H&K)`[e"o@T8Z<%IU!:0[c$^gsPs+:9&s+:9&s4[JVqWu_;BlSTIUM"g\11$_[BKs+:9&s+:9&s+::Mrs8Vtj2RX3:*BeI +!!3P$qqqF*s+:9&s+:9&s.TGurq>BlSTIUM"mZ01!!3P$qn<#]s+:9&s+:9&s2=pErqYj,WI7r1+UeIq +!9sOb7*_;%MuSD/K)^H&K)a[,$NBkddA_Ot3?\e5ZN("oc@Z(Js+:9&s+:9&rs\r-rqYj,WI7r1+UeIZ +!!,L5huA<.K)^H&K)^H&UAkVunCb:1@m;:U$NgG-!"K#1!WrT3$P4!j+solL8I7s]84,d68Oc3;r^IDb +5`!!3O@qS)u]s+:9&s+:9&s2=pFqs`:JNFP1"((13Fqu@Q7!b"p4o-!Ta:^$YKJ9KE$Q'K)^H& +K)^H&%0-7tikh+&8M1qj"9\Q%$N^G;%i-6>5#Z6NSbrEiq"jperVld/rVZQfo]tAY\=.eO6n]Pm$3^Ll +!!*hdi;\E/K)^H&K)^H&U]1`"o]!`UE(MZ$$j6\1!"/i2#nIdn/j<3LKq82B#64_uqY^X5#s+:9&s+:9&s+:9irsSbsikh+&8M1qj"9\Q%$N^G;%i-6>5#Z6NSbrEi +q"jperVld/rVZQfo]tAY\=.eO6n]Pm$3^M/!9jIa("\uUMuSD/K)^H&K)a^-$2Ef3Uj>rr+qOtV!"Ar0 +"UG\X,VqtsH',;Lr;Qcqrr2Tj%-Z9VTRU96.iJm'"9IQ`!4mg_K)^H&K)^H&K)Z2Xq!-2$H;cXE&-i%4 +%06J5#S@q"1ItesOfub%rrE#srq6:"kgmJ@IpPDk)@d#U!TX4\]&!"Au5#nIq%3)+""(?TTJG$3U2+%0?\>%iQfT9kK'O]$f[];JV/i`S9_OrVu-^##@0"&dSR?jT#=*rkJJbs+:9&s+:9&s2Y-Ir:Jsa +Qu,>D)%-QJr;[<.":5\\.6:@BMQ4YMlh0B>##@0"&dSR?rW)-^!I+O6s,6o/s+:9&s+::/rsSbsiPCmu +7k5Gb"9JH$%KQ\=&f`>];JV/i`S9_Ojo5N\2]iYf,eK)^H&K)^H&aSuVHq!-/%G>^4;&-Vn2$j$P;%iQiX;fIi% +bi7O[!uVLN!r`2`!!<9paSVV0MuSD/K)^H&K)ag0$N'>F[>83O+qk7aqu@--#7_Rs3`C!ZZHhP$f)P"8 +!rrf,eK)^H&K)^H&bPr%Km+KIjVi5I_ +.MrNq!WE'-!&GP!"/f1#n\468Sq"s,6o/s+:9&s+::4 +rs\kMI5)$6+Zr+H*>&GP!"/f1#n\468SOms+:9&s+:9,rrMp`r;[$%!"^%_ +$3U2+$3LMC)(IsYJu6ZMbl?u/!>0eCs+:9&s+:9&s+:9NrrMp`qZ$a1)AEM\qu@'+#7_V$6=#2?alE*p +fDk.:!>0e!s+:9&s+:9&s+:9prrMp`qZ$a1)AEM\qu@'+#7_V$6=#2?alCnNq>]a\!>0dTs,6o/s+:9& +s+::4rrDQa!!r2-K)^H&K)^Z,!:]mdrW!$,$3^J0!"&`- +"UPhc2cY'm_92fC!!!Vns+:9&s+:9&s+:9NrrDQa!!]^[!"#D"MuSD/K)^H&K)as4!:9L]!WiK*qu@!) +#7h_(7qdpiaoCi1qZ$U&M>r2-K)^H&K)^Z,!:9U`rW!!$"9JE##Qk;B)D"BlNjQq.l2Uejk5U&5K)^H& +K)^H&WrE(bp](9qqu@!'":>hf3ECO'o)I5>m/R.tm)B!Vs+:9&s+:9&s31KClhCG[!rN$(!<``D,<8eP +UsT/8s6Tde&+$(kMuSD/K)^H&K)as4!:0C[!!<&u#QY&8'I,V=I&+a]o)SXf!>"OSs+:9&s+:9&s+p[T +lhgb]!!!&t!!`W1%2^Q_BTL(2mJm7iU$)H-s+:9&s+:9&s/Q)!lhCG[!W2p&"9f5O.R[s2nc.)j0.q>^LqMZ8;.K)^H&K)^Z,!:'I^p](O"!soP[1K&M7s6]jeT9!X92Y3:6ams6fpf%`\O#s+:9&s+:9&s3:QErgr`^"T\Z0&gKE[ +s763Y!!*l#V>lJRK)^H&K)^H&k5PJ]T(E!d!asZs+:9&s+:9&s,$aVrgs#fq#CR! +!XB>_3P>C\!!*l#l2QA8K)^H&K)^H&X8`4h>4_dt!X&iE,jbQTs763l!_M[us+:9&s+:9&s+:9qrrMRl +oDf!q":>hgb5^o0o)Jgn8a<2QMuSD/K)^H&K)b!5!Uj4a!!E?+$5=bps8)fl!!33nlAbgqs+:9&s+:9- +rrKeJquHKl!WiZB[K#gu!mQf +qZ-Bk!Wr`C[/]^t!>4V_s+:9&s+:9&s+:9Orr?[%!!36/'^PeAs763k&aILU\!!*-,aT(Q* +oDemm>,_IZs+:9&s+:9&s5s=]8Fc`]!XQ(2rrD`m![^!!*--aT(Q*o)Jb:W;heUK)^H& +K)^H&k5PELo)Jdl"0hh*!;-Ia!;QTq!<]S+o)Jb1m/M\;K)^H&K)^H&X8`/f +o)Jdl"6oj,s763j*6S;5s+:9&s+:9&s3:QD8b)i]!QY6)s7?9k-E-s&s+:9&s+:9&s5s=]8b)i]!O)M' +!;-Xf!;HNo!O)Oq!!"A4s+:9&s+:9&s+:9Orr>X]!!!&as2P*3!!+5:bQ!1o +K)^H&K)^H&c2Rc8nc/Xja8bB'o`,"8pSn1Ns+:9&s+:9&s5s=]8b)i]!NuIq!!+5:OT0q4K)^H&K)^]- +!)!+gp].Gro`,""dd@'ds+:9&s+:9&s/Z/"9(DuGs2P*3!!*GTbQ!1oK)^H&K)^H&c2Rc9nc6]0kl:;U +!=I8Ss,6o/s+:9&s+::5rr>U\!3Q:n!!'![s+:9&s+:9&s,$aU8G`D^!3Q:n!!'"cs+:9&s+:9&s+:9O +rr>U\!9jI&s7?9kWQYRd!;HPrs7?9l;sE`MK)^H&K)^H&K)_nO!(cY\kl8[&oDen"Dp865s+:9&s+:9& +s3:QD8Fcc#s60LT!!*IGWrJ"WK)^H&K)^H&k5PEPnc5floDen"Dit'Os+:9&s+:9-rr>Ue!;QVrs763j +'CPmPs+:9&s+:9&s/Z/"8FliEs2P*1!!!\Vs+:9&s+:9&s+:9qrr>U]!6,!%s763j'<;(js+:9&s+:9& +s5s=]9Cr4bs763j"Hi_9s+:9&s+:9-rr>^h!;Z\rs763j"Rc;As+:9&s+:9&s/Z/"9Cr5Hs2P*1!!!/G +s+:9&s+:9&s+:9qrr>U_!5nj#s7-/is,6o/s+:9&s+::5rr>U_!36(i!0R;5s+:9&s+:9-rr>Ue!;cbr +s7-0Xs+:9&s+:9&s+:9Orr>[b!9F1"s7-06s+:9&s+:9&s+:9qrr>[b!5ed"s7-/is,6o/s+:9&s+::5 +rr>[b!3-"h!0R;5s+:9&s+:9-rr>Lb!;lhrs7-0Xs+:9&s+:9&s+:9Orr>L]!9F1"s7-06s+:9&s+:9& +s+:9qrr>L]!5ed"s7-/is,6o/s+:9&s+::5rr>[b!3-"h!0R;5s+:9&s+:9-rr>[g!;lhrs7-0Xs+:9& +s+:9&s+:9Orr>[b!9F1"s7-06s+:9&s+:9&s+:9qrr>Xa!5ed"s7-/is,6o/s+:9&s+::5rr>Xa!3-"h +!0R;5s+:9&s+:9-rr>Xf!;lhrs7-0Xs+:9&s+:9&s+:9Orr>^c!9F1"s7-06s+:9&s+:9&s+:9qrr>^c +!5ed"s7-/is,6o/s+:9&s+::5rr>^c!3-"h!0R;5s+:9&s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9O +rr>U`!9F1"s7-06s+:9&s+:9&s+:9qrr>U`!5ed"s7-/is,6o/s+:9&s+::5rr>U`!3-"h!0R;5s+:9& +s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U`!9F1"s7-06s+:9&s+:9&s+:9qrr>U`!5ed"s7-/i +s,6o/s+:9&s+::5rr>U`!3-"h!0R;5s+:9&s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U`!9F1" +s7-06s+:9&s+:9&s+:9qrr>U`!5ed"s7-/is,6o/s+:9&s+::5rr>U`!3-"h!0R;5s+:9&s+:9-rr>ai +!;lhrs7-0Xs+:9&s+:9&s+:9Orr>ad!9F1"s7-06s+:9&s+:9&s+:9qrr>ad!5ed"s7-/is,6o/s+:9& +s+::5rr>U`!3-"h!0R;5s+:9&s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U`!9F1"s7-06s+:9& +s+:9&s+:9qrr>[b!5ed"s7-/is,6o/s+:9&s+::5rr>[b!3-"h!0R;5s+:9&s+:9-rr>[g!;lhrs7-0X +s+:9&s+:9&s+:9Orr>L]!9F1"s7-06s+:9&s+:9&s+:9qrr>L]!5ed"s7-/is,6o/s+:9&s+::5rr>L] +!3-"h!0R;5s+:9&s+:9-rr>[g!;lhrs7-0Xs+:9&s+:9&s+:9Orr>[b!9F1"s7-06s+:9&s+:9&s+:9q +rr>[b!5ed"s7-/is,6o/s+:9&s+::5rr>Xa!3-"h!0R;5s+:9&s+:9-rr>Xf!;lhrs7-0Xs+:9&s+:9& +s+:9Orr>Xa!9F1"s7-06s+:9&s+:9&s+:9qrr>^c!5ed"s7-/is,6o/s+:9&s+::5rr>^c!3-"h!0R;5 +s+:9&s+:9-rr>^h!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U`!9F1"s7-06s+:9&s+:9&s+:9qrr>U`!5ed" +s7-/is,6o/s+:9&s+::5rr>U`!3-"h!0R;5s+:9&s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U` +!9F1"s7-06s+:9&s+:9&s+:9qrr>U`!5ed"s7-/is,6o/s+:9&s+::5rr>U`!3-"h!0R;5s+:9&s+:9- +rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>U`!9F1"s7-06s+:9&s+:9&s+:9qrr>U`!5ed"s7-/is,6o/ +s+:9&s+::5rr>U`!3-"h!0R;5s+:9&s+:9-rr>Ue!;lhrs7-0Xs+:9&s+:9&s+:9Orr>ad!9F1"s7-06 +s+:9&s+:9&s+:9qrr>ad!5ed"s7-/is,6o/s+:9&s+::5rr>ad!3-"h!0R;5s+:9&s+:9-rr>Ue!;ult +!NH+i!:Kl=s+:9&s+:9&s/Z/"8G<)a!Ta:#s7-06s+:9&s+:9&s+:9qrr>Ua!!!&:s60LR!36'Ws+:9& +s+:9&s5s=]9(i7as7-/Ps+:9&s+:9&s,$aU9)AVd!3-"h!:Kl=s+:9&s+:9&s/Z/"9(i8Gs2P*0!6kIp +s+:9&s+:9&s3:QD7J6_us60LR!36'Ws+:9&s+:9&s5s=]7J6_\s7-/Ps+:9&s+:9&s,$aU7Jd)_!3-"h +!:Kl=s+:9&s+:9&s/Z/"9(r;c!Ta:#s7-06s+:9&s+:9&s+:9qrr>[c!!!&:s60LR!36'Ws+:9&s+:9& +s5s=]9(r;c!NH+i!0R;5s+:9&s+:9-rr>Xf!;ult!NH+i!:Kl=s+:9&s+:9&s/Z/"8bW2b!Ta:#s7-06 +s+:9&s+:9&s+:9qrr>Xb!!!&:s60LR!36'Ws+:9&s+:9&s5s=]9D8Dd!NH+i!0R;5s+:9&s+:9-rr>^h +!;ult!NH+i!:Kl=s+:9&s+:9&s/Z/"9D8Dd!Ta:#s7-06s+:9&s+:9&s+:9qrr>Ua!!!);s60LR!36'W +s+:9&s+:9&s5s=]8G<)a!ic4j!0R;5s+:9&s+:9-rr>Ue!;ult!ic4j!:Kl=s+:9&s+:9&s/Z/"8G<)a +!Ta:#s7-06s+:9&s+:9&s+:9qrr>Ua!!!&:s60LR!36'Ws+:9&s+:9&s5s=]8G<)a!NH+i!0R;5s+:9& +s+:9-rr>Ue!;ult!NH+i!:Kl=s+:9&s+:9&s/Z/"8G<)a!Ta:#s7-06s+:9&s+:9&s+:9qrr>Ua!!!&: +s60LR!36'Ws+:9&s+:9&s5s=]8G<)a!ic4j!0R;5s+:9&s+:9-rr>Ue!;ult!ic4j!:Kl=s+:9&s+:9& +s/Z/"8G<)a!p'C$s7-06s+:9&s+:9&s+:9qrr>ae!!!&:s60LR!36'Ws+:9&s+:9&s5s=]9_SMe!NH+i +!0R;5s+:9&s+:9-rr>ai!;ult!NH+i!:Kl=s+:9&s+:9&s/Z/"8G<)a!Ta:#s7-06s+:9&s+:9&s+:9q +rr>Ua!!!&:s60LR!36'Ws+:9&s+:9&s5s=]8G<)a!NH+i!0R;5s+:9&s+:9-rr>[g!;ult!ic4i!:Tr> +s+:9&s+:9&s/Z/"9(r;c!p'C$s7$*6s+:9&s+:9&s+:9qrr>[c!!!);s60LQ!3?-Xs+:9&s+:9&s5s=] +7J?c^!NH+h!0[A6s+:9&s+:9-rr>Lb!;ult!NH+h!:Tr>s+:9&s+:9&s/Z/"7J?c^!Ta:#s7$*6s+:9& +s+:9&s+:9qrr>[c!!!&:s60LQ!3?-Xs+:9&s+:9&s5s=]9(r;c!NH+h!0[A6s+:9&s+:9-rr>[g!;ult +!NH+h!:Tr>s+:9&s+:9&s/Z/"8bW2b!p'C$s7$*6s+:9&s+:9&s+:9qrr>Xb!!!);s60LQ!3?-Xs+:9& +s+:9&s5s=]8bW2b!ic4i!0[A6s+:9&s+:9-rr>^h!;ult!NH+g!:^#?s+:9&s+:9&s/Z/"9D8Dd!Ta:# +s6p$6s+:9&s+:9&s+:9qrr>^d!!!&:s60LP!3H3Ys+:9&s+:9&s5s=]8G<)a!NH+g!0dG7s+:9&s+:9- +rr>Ue!;ult!NH+g!:^#?s+:9&s+:9&s/Z/"8G<)a!Ta:#s6p$6s+:9&s+:9&s+:9qrr>Ua!!!);s60LP +!3H3Ys+:9&s+:9&s5s=]8G<)a!ic4h!0dG7s+:9&s+:9-rr>Ue!;ult!ic4h!:^#?s+:9&s+:9&s/Z/" +8G<)a!Ta:#s6fs6s+:9&s+:9&s+:9qrr>Ua!!!&:s60LO!3Q9Zs+:9&s+:9&s5s=]8G<)a!NH+f!0mM8 +s+:9&s+:9-rr>Ue!;ult!NH+f!:g)@s+:9&s+:9&s/Z/"8G<)a!Ta:#s6fs6s+:9&s+:9&s+:9qrr>Ua +!!!&:s60LO!3Q9Zs+:9&s+:9&s5s=]9_SMe!ic4g!0mM8s+:9&s+:9-rr>ai!;ult!ic4g!:g)@s+:9& +s+:9&s/Z/"9_SMe!p'C$s6fs6s+:9&s+:9&s+:9qrr>Ua!!!&:s60LO!3Q9Zs+:9&s+:9&s5s=]8G<)a +!NH+f!0mM8s+:9&s+:9-rr>Ue!;ult!NH+f!:g)@s+:9&s+:9&s/Z/"9(r;c!Ta:#s6]m6s+:9&s+:9& +s+:9qrr>[c!!!&:s60LN!3Z?[s+:9&s+:9&s5s=]9(r;c!NH+e!1!S9s+:9&s+:9-rr>Lb!;ult!ic4f +!:p/As+:9&s+:9&s/Z/"7J?c^!p'C$s6]m6s+:9&s+:9&s+:9qrr>L^!!!);s60LN!3Z?[s+:9&s+:9& +s5s=]9(r;c!NH+e!1!S9s+:9&s+:9-rr>[g!;ult!NH+e!:p/As+:9&s+:9&s/Z/"9(r;c!Ta:#s6]m6 +s+:9&s+:9&s+:9qrr>Xb!!!&:s60LN!3Z?[s+:9&s+:9&s5s=]8bW2b!NH+e!1!S9s+:9&s+:9-rr>Xf +!;ult!NH+e!:p/As+:9&s+:9&s/Z/"9D8Dd!p'C$s6]m6s+:9&s+:9&s+:9qrr>^d!!!);s60LN!3Z?[ +s+:9&s+:9&s5s=]9D8Dd!ic4f!1!S9s+:9&s+:9-rr>Ue!;ult!NH+e!:p/As+:9&s+:9&s/Z/"8G<)a +!Ta:#s6]m6s+:9&s+:9&s+:9qrr>Ua!!!&:s60LN!3Z?[s+:9&s+:9&s5s=]8G<)a!NH+e!1!S9s+:9& +s+:9-rr>Ue!;ult!NH+e!:p/As+:9&s+:9&s/Z/"8G<)a!Ta:#s6]m6s+:9&s+:9&s+:9qrr>Ua!!!); +s60LN!3Z?[s+:9&s+:9&s5s=]8G<)a!ic4f!1!S9s+:9&s+:9-rr>Ue!;ult!ic4f!:p/As+:9&s+:9& +s/Z1n!!!&\s2P*,!7:ats+:9&s+:9&s3:T;!!!&:s60LN!3Z?[s+:9&s+:9&s5s@T!!!&!s6]lPs+:9& +s+:9&s,$dP!;ult!ic4f!:p/As+:9&s+:9&s/Z1n!!!)]s2P*,!7:ats+:9&s+:9&s3:T;!!!);s60LN +!3Z?[s+:9&s+:9&s5s@T!!!)"s6]lPs+:9&s+:9&s,$dP!;ult!ic4f!:p/As+:9&s+:9&s/Z1n!!!)] +s2P*,!7:ats+:9&s+:9&s3:T;!!!);s60LN!3Z?[s+:9&s+:9&s5s@T!!!)"s6]lPs+:9&s+:9&s,$dP +!;ult!ic4f!:p/As+:9&s+:9&s/Z1n!!!)]s2P*,!7:ats+:9&s+:9&s3:T;!!!);s60LN!3Z?[s+:9& +s+:9&s5s@T!!!)"s6]lPs+:9&s+:9&s,$dP!;ult"0)=g!:p/As+:9&s+:9&s/Z1n!!!,^s2P*,!7:at +s+:9&s+:9&s3:T;!!!,nDs60LN!3Z?[s+:9&s+:9&s5s@T!!3?I333)I!1!S9s+:9&s+:9-s7u`o!!3?I333)I!:p/A +s+:9&s+:9&s/Z1n!!3EL4Qc[`s6]m6s+:9&s+:9&s+:9qs7QEo#U)=Ks60LN!3Z?[s+:9&s+:9&s5s@T +!!3EL4KJMM!1!S9s+:9&s+:9-s7u`p!!<63+Zuh*mJuhXK)^H&K)^H&K)_nOpAb9r%O!sss2P*,!7:at +s+:9&s+:9&s3:T^^"!!^^"!!.8$Z@n,VtXK)^H&K)^H&K)_nOp](F!#88OYk5WI$n,Uc6K)^H& +K)^H&K)a*qp](F!#88OY`;f'$n,TQiMuSD/K)^H&K)b!5pAb9u&1:2Qs6p#Ps+:9&s+:9&s,$dP!<)s# +":uqTX8hYhnGe+?K)^H&K)^H&X8hno!sB/_:$2Jqs6p$6s+:9&s+:9&s+:9qs7cQs!^Og?l!=)l5s6]mV +s+:9&s+:9&s+:9Os763k#@-KmaT(Z.cMrLrK)^H&K)^H&c2[A8!=)iKs6BXP!3H3Ys+:9&s+:9&s5s@Q +!!*=/YQ+V&n,S[PK)^H&K)^H&M?!DPq>^O$>He(p!:^#?s+:9&s+:9&s/Z1k!!+0Xkl8a(mJtQ4K)^H& +K)^H&K)a*qo)Je5CrZM?s6]lgs,6o/s+:9&s+::5s763k+)J.\rrDNgPQ-77K)^H&K)^]-q>g?l!DSQW +s6]mVs+:9&s+:9&s+:9Os763k9o\B:aT(Z.cMrLrK)^H&K)^H&c2[A8!DSQns6BXP!3H3Ys+:9&s+:9& +s5s@R!!3V%oWS;p!:TuPs+:9&s+:9&s,$dP!;c`t%A39rs6]mVs+:9&s+:9&s+:9Os7?9m%A3:Vs2b6. +!7(Urs+:9&s+:9&s3:T;!!<920^6RVlMp8PXT+4YK)^H&K)^H&k5Y,T!s/lbl)t'd!:TuPs+:9&s+:9& +s,$dP!;um"!XpdIY5dninGe+?K)^H&K)^H&X8hqp"9J]7+\1\paT(]/c2WCqK)^H&K)^H&c2[P="9J]7 ++\0KNlMp;QX8e+XK)^H&K)^H&k5Y2V"9J]7+\/[7rrDQhP5g.6K)^H&K)^]-q>gKp!sB/_9s+Ha!:Tr> +s+:9&s+:9&s/Z1o!!s+:9&s+:9&s/Z1p!!E<*'.-H9 +s2b6/!6tOqs+:9&s+:9&s3:T=!!EB/'.HMks6BXQ!3?-Xs+:9&s+:9&s5s@V!!EB/'.HMTs8N)h!0[A6 +s+:9&s+:9-s7u^"!!!*+'.HMTs6fsVs+:9&s+:9&s+:9Os7ZKq":uqRk5WO&mf:W4K)^H&K)^H&K)a*q +pAb9u&1:,hs6BXQ!3?-Xs+:9&s+:9&s5s@U!!^^"!!*38,tY6= +mf;hVK)^H&K)^H&K)_nOp](Et";3"Pk5WO&mf:W4K)^H&K)^H&K)a*qp](Et";3"P`;f-&mf9EgMuSD/ +K)^H&K)b!5p](F!#88FPY5eJ$nGnaPK)^H&K)^H&M?!DP"onW*#88FPY5dnin,J">K)^H&K)^H&X8hqp +"9SlB-:I"raoCc/c2WCqK)^H&K)^H&c2[Ms+:9&s+:9&s/Z1p!!EB.&0O'ss2kgKp!s8uQ3NiDM!:Tr>s+:9&s+:9& +s/Z1o!!<<4*BE9^aoCc/c2WCqK)^H&K)^H&c2[MgKp"T\`3'`U5!s6]mTs+:9&s+:9&s+:9Os7ZKs!<`ZBs#TBDb5^l0bl<:pK)^H& +K)^H&c2[M<"T\`3'`U56s6TdR!36'Ws+:9&s+:9&s5s@T!!NE.%f\.NZN'k'nc4gPK)^H&K)^H&M?!DP +r;[!&"qLYc7^E'^!:Kl=s+:9&s+:9&s/Z1n!!NE.%f\.Nl2Sp+mJtK2K)^H&K)^H&K)a*qp&G6t":G/R +3QM0es6Tfds,6o/s+:9&s+::5s7QEr!X&l1,<<+1quH9fOoL%5K)^H&K)^]-q>gHo"Tef6s!'P1s6TgS +s+:9&s+:9&s+:9Os7QEs!gEn#6=o3$l1*H9Xaug!:Kl=s+:9&s+:9&s/Z1m!!`N, +#7M@n2GEK;bQ$r0bl<:pK)^H&K)^H&c2[D9#6G&8%iH]R:!pnK!Z)@Pdf8\7mJhepnK!Z)@Pjo=cKm/X-cMuSD/ +K)^H&K)b!5o)K1"!WrW5%i-9;3CHbPq>UkDB3\.r1+!nQ$jZt;o)SUdquH0bqZ-3fOT0q4K)^H&K)^]- +q>g?l$ipD3"pkeU+=]B>;IB8"%!#uc9gCH\)A^?mmf2YSmJhe;IB8""`e6\9gCH<-5mO+#Qt5#!;ZZm!:KmS!6bCos+:9&s+:9&s3:T7!$D:D!X8r?&fMoE +2*OQ,?Y*-9LClq-6F$8$jHh8!T!hMs8)ff!0I54s+:9&s+:9-s7u`k!$D:D!X8r?&fMoE2*OQ,]:j%13:A +!o!_Ls6Tg0s+:9&s+:9&s+:9qs7$(0!!W`>R!;ul`!:Bf6/K)^H&K)^H&K)a*qn,OF/!5!o)OmPK)^H&K)^H&M?!DPn,W@e!s/K)!rW/,!:Bf!87D7!:p2Ps+:9&s+:9&s,$dP +!9aF6s4RJ?s+:9&s+:9&s+:9Os5Ps+:9&s+:9& +s,-jP!:p3$s6TgQs+:9&s+:9&s+:9Ps6B[Ps3:T2!6Y=ns+:9&s+:9&s3CZ1!6bE2s6Tfbs,6o/s+:9& +s+::6s6BZqs7u`f!0@/3s+:9&s+:9.s7lZd!4i-s!:9`;s+:9&s+:9&s/c7d!:Bg2s6Tg/s+:9&s+:9& +s+:9ss6B[-s6fpT!3#pUs+:9&s+:9&s60LK!4W"*!;$8Ps+:9&s+:9&s,6pP!;$9#s6]mRs+:9&s+:9& +s+:9Qs6B[Os3(H2!6Y=ns+:9&s+:9&s3L`2!6Y?/s6frds,6o/s+:9&s+::7s6BZns82lh!0@/3s+:9& +s+:9/s7cTe!4Djp!:Bfs+:9&s+:9&s0)Ij!9aC's6fs4s+:9& +s+:9&s+::!s6Tg*s6BXQ!3?-Xs+:9&s+:9&s6K^P!3ZA%!:^&Ps+:9&s+:9&s,R-P!;QVts6fsVs+:9& +s+:9&s+:9Us6KaKs2Y0.!7(Urs+:9&s+:9&s3q#7!6,!&s6frhs,6o/s+:9&s+::;s6K`frr<&g!0dG7 +s+:9&s+:93s7?s6]lbrrE)f!1!S9s+:9&s+:96s7$*g!2feb +!:p/As+:9&s+:9&s0Vgo!94$ts6fs7s+:9&s+:9&s+::%s6]m&s6'FN!3Z?[s+:9&s+:9&s6p!U!2ohs +s6frQs+:9&s+:9&s-!EP!<)tps6fsZs+:9&s+:9&s+:9Xs6]mHs2=s+!7Cgus+:9&s+:9&s475!5AKps6frls,6o/s+:9&s+::@ +s6]l`s8N&e!13_;s+:9&s+:98s6fpf!2BM^!;-;Cs+:9&s+:9&s0hsq!9!mps6fs9s+:9&s+:9&s+::' +s6]m$s5j:L!3lK]s+:9&s+:9&s7--X!2TYos6frSs+:9&s+:9&s-3QP!29G]!;-;Cs+:9&s+:9&s0hsr +!8mgos6fs9s+:9&s+:9&s+::(s6]m#s5j:L!3lK]s+:9&s+:9&s763X!2TYos6frSs+:9&s+:9&s-s6]mbs.KD[!;?GEs+:9&s+:9&s1JC#!87Chs6]m:s+:9&s+:9&s+::-s6frss5a4J!4)W_ +s+:9&s+:9&s7cQ^!1s5hs6]lTs+:9&s+:9&s-iuV!;lehs6]m\s+:9&s+:9&s+:9`s6fs@s2+g(!7_%# +s+:9&s+:9&s5*eE!4W!hs6]lms,6o/s+:9&s+::Fs6frZs8Duc!1Ek=s+:9&s+:9>s6fsbs.KD[!;?GE +s+:9&s+:9&s1JC#!87Chs6]m:s+:9&s+:9&s+::-s6frss5a4J!4)W_s+:9&s+:9&s7cQ^!1s5hs6]lT +s+:9&s+:9&s-iuV!;lehs6]m\s+:9&s+:9&s+:9`s6fs@s2+g(!7_%#s+:9&s+:9&s5*eE!4W!hs6]lm +s,6o/s+:9&s+::Fs6frZs8Duc!1Ek=s+:9&s+:9?s6]mas.KD[!;?GEs+:9&s+:9&s1SI#!87Chs6]m: +s+:9&s+:9&s+::.s6]lrs5a4J!4)W_s+:9&s+:9&s7lW^!1s5hs6]lTs+:9&s+:9&s-s&V!;lehs6]m\ +s+:9&s+:9&s+:9as6]m?s2+g(!7_%#s+:9&s+:9&s53kE!4W!hs6]lms,6o/s+:9&s+::Gs6]lYs8Duc +!1Ek=s+:9&s+:9?s6]mas.KD[!;?GEs+:9&s+:9&s1SI#!87Chs6]m:s+:9&s+:9&s+::.s6]lrs5a4J +!4)W_s+:9&s+:9&s7lW^!1s5hs6]lTs+:9&s+:9&s-s&W!;c_gs6]m\s+:9&s+:9&s+:9as6fs?s2+g( +!7_%#s+:9&s+:9&s53kF!4Mpgs6]lms,6o/s+:9&s+::Gs6frYs8Dud!1s2+g(!7_%#s+:9&s+:9&s5 +s2+g(!7_%#s+:9&s+:9&s5s2+g(!7_%#s+:9&s+:9&s5Z!;HMds6]m\s+:9&s+:9& +s+:9es6]m;s2+g(!7_%#s+:9&s+:9&s5X.I!42^ds6]lms,6o/s+:9&s+::Ks6TfUs8Duc!1Ek=s+:9& +s+:9Cs6Tg]s.KD[!;?GEs+:9&s+:9&s2"a&!7q1es6]m:s+:9&s+:9&s+::2s6Tfns5a4J!4)W_s+:9& +s+:9&s8;oa!1X#es6]lTs+:9&s+:9&s.B>Y!;QSes6]m\s+:9&s+:9&s+:9es6Tg;s2+g(!7_%#s+:9& +s+:9&s5X.H!4;des6]lms,6o/s+:9&s+::Ks6TfUs8Duc!1Ek=s+:9&s+:9Cs6]m]s.KD[!;?GEs+:9& +s+:9&s2"a'!7h+ds6]m:s+:9&s+:9&s+::2s6]lns5a4J!4)W_s+:9&s+:9&s8;ob!1Nrds6]lTs+:9& +s+:9&s.B>Z!;HMds6]m\s+:9&s+:9&s+:9es6]m;s2+g(!7_%#s+:9&s+:9&s5X.J!4)Xcs6]lms,6o/ +s+:9&s+::Ks6frUs8Duc!1Ek=s+:9&s+:9Cs6fs]s.KD[!;?GEs+:9&s+:9&s2"a(!7_%cs6]m:s+:9& +s+:9&s+::2s6frns5a4J!4)W_s+:9&s+:9&s8;oc!1Elcs6]lTs+:9&s+:9&s.B>[!;?Gcs6]m\s+:9& +s+:9&s+:9es6fs;s2+g(!7_%#s+:9&s+:9&s5X.J!4)Xcs6]lms,6o/s+:9&s+::Ks6frUs8Duc!1Ek= +s+:9&s+:9Cs6fs]s.KD[!;?GEs+:9&s+:9&s2"a(!7_%cs6]m:s+:9&s+:9&s+::3s6]lms5a4I!42]` +s+:9&s+:9&s8Duc!1Elcs6TfTs+:9&s+:9&s.KD[!;?Gcs6Tg\s+:9&s+:9&s+:9fs6]m:s2+g'!7h+$ +s+:9&s+:9&s5a4J!4)Xcs6Tfms,6o/s+:9&s+::Ls6]lTs8Dub!1Nq>s+:9&s+:9Ds6]m\s.KD[!;?GE +s+:9&s+:9&s2+g(!7_%cs6]m:s+:9&s+:9&s+::3s6]lms5a4J!4)W_s+:9&s+:9&s8;oc!1Elcs6]lT +s+:9&s+:9&s.B>[!;?Gcs6]m\s+:9&s+:9&s+:9es6fs;s2+g(!7_%#s+:9&s+:9&s5X.J!4)Xcs6]lm +s,6o/s+:9&s+::Ks6frUs8Duc!1Ek=s+:9&s+:9Cs6fs]s.KD[!;?GEs+:9&s+:9&s2+g(!7_%ds6Tg9 +s+:9&s+:9&s+::3s6]lms5j:J!4)W_s+:9&s+:9&s8Duc!1Elds6TfSs+:9&s+:9&s.KD[!;?Gds6Tg[ +s+:9&s+:9&s+:9fs6]m:s24m(!7_%#s+:9&s+:9&s5a4J!4)Xds6Tfls,6o/s+:9&s+::Ls6]lTs8N&d +!1!1*Zb!:TuP +s+:9&s+:9&s.o\`!:g)ds6]mVs+:9&s+:9&s+:9js6fs6s2b6.!7(Urs+:9&s+:9&s60LO!3Q:ds6]lg +s,6o/s+:9&s+::>!1*Zb!:TuPs+:9&s+:9&s.o\`!:g)ds6]mVs+:9&s+:9&s+:9js6fs6s2b6.!7(Ur +s+:9&s+:9&s60LO!3Q:es6Tffs,6o/s+:9&s+::>!13`b!:TuPs+:9&s+:9&s.o\`!:g)es6TgUs+:9& +s+:9&s+:9js6fs6s2k<.!7(Urs+:9&s+:9&s60LO!3Q:es6Tffs,6o/s+:9&s+::>!13`b!:TuPs+:9& +s+:9&s.o\a!:^#ds6TgUs+:9&s+:9&s+:9js6p$6s2k<.!7(Urs+:9&s+:9&s60LP!3H4ds6Tffs,6o/ +s+:9&s+::?!13`a!:TuPs+:9&s+:9&s.o\a!:^#es6KaTs+:9&s+:9&s+:9js6p$6s2tB.!7(Urs+:9& +s+:9&s60LO!3Q:fs6K`es,6o/s+:9&s+::>!1,Ys6p$7s3(H/!6tOqs+:9&s+::; +s765es6'FO!3Q:gs6K`ds,6o/s+:90s7ZNe!0.!Ys6p#Vs82le!0[A6s+:9&s/uCg!:'TZs6p$Ys/H%b +!:Tr>s+:9&s+:9ts6Ka,s2G$-!71\gs6Ka1s+:9&s+:9&s7H?T!3#q\s6p#js6fpR!36'Ws+:9&s,R-P +!;$8PrrE)g!1Nrb!:g,Ps+:9&s+:9Ts6'ILs.fV`!:g)hs6KaRs+:9&s+:9&s4./0!6kJ^s6p$7s31N0 +!6kIps+:9&s+::Fs5O*Zs6'FO!3Q:hs6K`cs,6o/s+:95s7-0\!0R9]s6p#Ws8)fe!0R;5s+:9&s0hsa +!:^#`s6p$Ys/Z1d!:BfPs+:9&s+:9is1eX7s.fVP +!;$9.s5a7Gs+:9&s+:9&s6'Et!8[[os3gu7s4@;4!6G1ls+:9&s,-jP!6>/Ps6'F2!6Y?;s5a6Xs,6o/ +s+:9Is5!b5!2TVps2P->s7u`Ls6Tg[!0.#1s+:9&s2Y/P!2KSP!9aF_s7u`Ls5F%Ds+:9&s+:9&s69Qr +!8mgqs2P->s7u`Ls5F%"s+:9&s+:91s7QH3!5AKrs0r'jrrE)U!2fdSs+:9&s/,hP!8[^PrrE)/!9F1E +!;6DPs+:9&s+:9ls1872!2TYQ!8.A5s5!b@s+:9&s+:9&s6K]p!9*sss1SL.!:'U>!6>+ks+:9&s,R-P +!5nlPs6'Ei!:'Ua!8[^Ps,6o/s+:9Ks4dV1!2fbrs0Vjls5j=U!0$r0s+:9&s31MP!<)tqs53n+!:g*@ +!:'T9s+:9&s+::=s0Mdcs2G#P!;-?^s477ls+:9&s+:95s7-0-!5SWts0;Xps8)fP!2fdSs+:9&s/Z1P +!8@Lprr<&YrrE(O!;6DPs+:9&s+:9qs0_q+!6G0?!9*t9!1Ps+:9&s+::#s/uG!!3-"W!13cPs+:9&s+:9&s7ZJk!9X="s1\QF!6P7ms+:9&s-`oP!5ANPs5s?P +!8IRPs,6o/s+:9Ws3guIs8)cP!3H5#s+CCE!0@/3s+:9&s4..u!;HNU!;QVps5s+:9&s+:7Ns4@>-s5X1Is2G#P!6G6@s6p$5s+:9&s+:9Gs53nQ!8[\9!6bE* +s-s)T!<<)g!3?-Xs+:9&s1JBa!:^$Vs5X0crrE(R!!<3#!:^&Ps+:9&s+::/s4@>*s766^!3uR^!36+r +s6p$Xs+:9&s+:9'rr<&P!8@J7!:Bg*s1SKX!;c`b!7(Urs+:9&s/#bP!;ccMs5a7(s6'EP!:Kpas6p#i +s,6o/s+:9cs4ID=s6TdI!42\*s,@$Qs6p#Ps+:9&s+::0s4ID(s7?<^!4)X_!3Q=rs6p$Xs+:9&s+:9( +s8N)R!8%84!:Km+s1SK[!;HN_!7(Urs+:9&s/>tP!<)uJs5j=+s60LE!;ZZ0!;$9`s7$)js,6o/s+:9e +s4@>;s6BXH!4;df!;ZZ#!;6?ls7$)Qs+:9&s+::2s4@>$s7QH_!4;df!;lfrs0;Xss7$*Ys+:9&s+:9+ +s82lR!7Ci0!:Ts-s60OFs7$*=!:p0Z!71[ss+:9&s/H%P!!!#Hs5sC,s60LI!9O7,!;6E`s6p#js,6o/ +s+:9fs4ID:s69RH!4;dj!9O7!!;$3js6p#Qs+:9&s+::4s4ICus7cT`!4Mpl!;?HNs4.2=s6p$Ys+:9& +s+:9,s8)fR!71].!:^$/s60O6rr<&N!:TsW!71[ss+:9&s/Q+P!71].!7(W/s60O6s5!bO!:TsW!3Q9Z +s+:9&s2=rk!9X=Ds6'Hlrr<&b!71]%!:Bdds6p#Qs+:9&s+::5s4RIrs7u`a!4W!n!;6BHs5!bBs6p$Y +s+:9&s+:9-s7u`S!6bE+!:g*0s69U5s8DuS!:9aT!71[ss+:9&s/c7T!<)rAs60O0s6BXK!6tQ-!<3#\ +s7$)ks,6o/s+:9is4[P7s5j:F!4`(/!:'X0s6'IEs8W,h!0mM8s+:9&s6'F:!6G3;!:Kots60OVs4RG9 +!9=+L!:g)@s+:9&s,6pP!9O:"s60OSs2k<*!7LoAs6]mGs7$*8s+:9&s+:9Qs4m\Os3(H,!7:c3s60O) +s6]mbs5s@O!3Q9Zs+:9&s2P)p!9*t=s60Nps8E#b!6G3.!9=+Zs7$)Rs+:9&s+::8s5!als8;rb!5&9q +!;-;bs7$*[s+:9&s+:90s7ZNW!5\^"!;$64s60O3s24m,!7:ats+:9&s/uCY!;QT:s60O2s6K^L!3lLb +s7$)ls,6o/s+:9ls5*h4s5O(D!5/@1!:0]Ps8N&g!1!S9s+:9&s6BXA!5AL4!:9d!s6'ITs.TJ_!:p/A +s+:9&s,I'P!9sQus69UUs2tB*!7Lnbs7$*9s+:9&s+:9Us5!bKs2b6+!7Ci5s60Nes5a4N!3Z?[s+:9& +s2tAu!8RV5s6BZts8;rb!1*Z`s7-/Ts+:9&s+::;s5!ags8N)d!5/?r!;$5`s7-0\s+:9&s+:94s766X +!4i-q!;-<6s69U2s2+g+!7Cgus+:9&s0D[^!;$62s6B[5s6TdN!3Z@_s7$)ms,6o/s+:9os5*h1s5s53mbs6B[!s6B[Ts.B>^!;$5Bs+:9&s-!EP!:Turs6B[Xs2tB-!71\]s7-0;s+:9& +s+:9Ys5]!;-;Cs+:9&s-ps6KaZs3(H.!7(V\s7$*;s+:9&s+:9[s5F%Es2=s(!7_&9s6BZd +s5X.L!3lK]s+:9&s3^l+!7Ci%s6Ka&s8)fc!0dH\s7$)Us+:9&s+::Bs5F$^s8N&b!5ed$!:^#\s7$*] +s+:9&s+:9:s6Tg[!3H4e!;HN;s69U0s2"a*!7Ln!s+:9&s186h!9sO#s6Tg:s6fpP!3H4\s7$)ns,?sX +!.t6&s3q#,!7:c#s6Tg's8)fc!0dH\s7$)Us/#_q!8mg.s+::Ds5tr!8mg.s+::Fs5X0Zs8;o`!6"p'!:TrZ +s7$*^s+:9ns8;r2s+:9>s60O]!2TY]!;ZZ=s6B[0s1n[)!7Ut"s6Tda!1X"?s1JBm!9F0rs6Ka;s6p!Q +!3?.Zs7$)os,[3Y!.t6&s4./1!6bDrs6Ka)s7u`c!0[BZs7$)Vs/>tr!8mg.s+::Fs5X0Zs8;o`!6,!' +!:TrZs7$*^s+:9ns8;r2s+:9?s6'I^!29G[!;ZZ>s6B[/s1eU)!7Ut"s6fpa!1X"?s1SHo!94$os6Tg< +s6p!R!36(Xs7-/ps,m?Y!.t6&s4753!6P8os6Tg*s7u`d!0R-*!:KlXs7$*_s+:9rs7lZ.s+:9As6'I_s.02V!;lf@s6B[/s1eU(!7_%#s7--a!1X"? +s1eTt!8[[is6Ka=s6p!R!36(Xs7$)ps-3QY!.t6&s4IA8!6"ois6Ka+s7u`d!0Rs6p!R!36(Ws7-/qs-3QY!.t6&s4RG:!5ecfs6Ka,s7u`d!0R!5AK`s6Tg.s7u`d +!0RP +S,_sXq>Z'Hg&LRB!W`?,^&N]aV#TZZp]$Z]m/[.ccN!21bQ#9Un,V)?K)b`JnGiUk!X>.oK)`jjl2]?6 +]Dq6uh#HmDlN!pahuE0G[Jup"n,NOk!sT3ds+::.s69Trs4%)9!6bEPS,_sXq>Z'Hg]-aC!s&K.%DDdns/#b[!;?G[s6]mds3CZ1!6bDUs6p$? +s+::Ms6fpi!X/oDS,\*?a8bB(eGm,[mJu&BnGheSWW1lUn,TlrU&XQ]!s/W5&q^.8s5Z'Hh>cpD"9AW2&0AOb +K)__JkQ(>VR/cRSrr::Dl2]'.^&RR%fDgI&s8VNf"9AW2&0@>@K)`plkQ'-4])V0uh#HmDl2[jahuE0G +[K!!$mf3Ik":,P[K)^H&irA6C\c:.Ym/Y?0q>g'dOoP4Vn,T!Y]`7F#"9AW4&/sF*K)^Q)rW)9bQiHaY +m/Y?0lN$AQS,_sXq>Z'HhZ*$E"9AW4&/r4]K)_bKklCAUR/cORs8U@DlN#0/^&RR%fDgI&!<;Kf"9AW4 +&/q#;K)`sml2]63])V-th>csDlN!sbhuE0G[K!'&mJmCm"qMXPs+:9&s5O(D!4`'Xs6Tg0s7u`d!0RZ'HhuE*E!s8`<)S?$$s/>t^!;$5W +s6]mes3:T0!6kJVs6p$?s+::>!!<<-$lGB3K)a!nklB-2\c;'th>csDlN!sbhuE0G[K!'&mf3Fl"q2@J +s+:9&s5X.D!4`'Ws6]m1s7u`d!0Rt_!:p/Vs6]mes3:T0!6kJVs6fs?s+C=O!:Tsj!s];NQiD[;b5^`,d/UZV +mJu)Cn,M\RWrLuVmf9frV>oua!s8c<(&e/as+::3s60Nms3gr7!6kK>!:g,Ps7lW_!1j/*s6fpj!Ae?s+gXP!:BiPs7H?Y!6kK/!:KlVs6fsas+::1s6fpj!!:g,Ps7lW_!1j/+s6fpj!BVmf;#?LB%2PoDf!p!X9#IPlIe"9AQ.$PiO< +K)`:Zk5a]Fjo=TG[K"\Tm/YB1q>g'dOoP4Vmf8pY_>j!)"9AQ.$Ph=oK)aa.gAoV#qZ-*cPQ1:Tli><1 +lN$AQS,_pWqYu0Ijo=cL"9AQ-$P^#KK)aR*d/WA2nGejTli><1lN#0/^&RO$f`-d-qZ-9h"9AQ-$P\g) +V#TZ'H_#N!dmJl>Kl2\3kdf8Y6c2[V? +nGnaPq#Bd_Sc?V-n,NRl!sT,Gf)L@%ir@U1df9.DnGnaPo`+7Xc2[&/n,JmWmf<4aK)as4n,NRl!sT,G +[/Yj[rW(XPdf8S4n,JaSli><1l2]*/^&RO$f`-d-qZ-f%Fl2]*/\GtprhuE-E +lN"!chuE-F[fs+:9es3q&;s5s@H!4;dRs6Tg1s8)fd!0[BWs6frYs2G$+!!<9+$Ph4l +K)am2e,\"uq>g$cP5k.Rm/YB1lN$DRS,_pWqYu0IkPsrM!s/W6'smprs8)fI!8%89!:KlQs6Tg1s6B[0 +s1SI$!8.=0s7cTg!!<<,$5/I#WrL`Pp]/qGl2]'.\GtprhuE-ElN"!chuE-F[f<1lN$DR +S,_pWqYu0Il2U/O!s8`9'X@[ts7QHB!87DuDmf2SQX8h)Wmf9frY5dni!s8`9'_VKXs2tA]!;-8s6Td*!8@JK!:p2Ps763W!6tQ0!:TrWs6]mas+::8s6p!k!Ns6TgEs6fpQ +!3?.Ws6]lrs02Ol!!<6)"Usu%K)a6u^&[j+kl9rKZ2`2Nm/YE2qZ--dP5k=WmJrjYaoCf0!s&N.%+,$+ +s7?9)!8RVL!;$8Ps763W!6tQ0!:TrWs6]mas+:::s6fpi!<`Q7Y5amhlN#<4hZ)j@m/N@NmJm4ec2[)0 +c2YKWmJtr?O8nhPqu?g"!s]?ps186P!:p3Is69U,s0r$q!9!nFs6BZcs53kE!4W!5s6fpi!Ps763V!6tQ1!:TrWs6fsas+::=s6fph!sK"2s.98P!71`( +s69UMs-<1quH6eP5k=Wmf8pYc2[85!s&H+$d8R%s8Du&!94%O +!;->Ps763V!6tQ1!:TrWs6fsas+::>s6p!j!VuNOlhuM^9!<;KfjT"HElMm+Kmf<=ecN!52c2YKWmf;#?PQ1.Q!!*-(#S;^i`W*^R +!WN/h!9F1E!6G2Ks6KaFs6]jQ!3?.Ws6frrs0_ms!!<6)#S?>%K)ad/`;oT2mf<=dmJlDNY5ciJli>?2 +quH3dPQ1FXmf8pYcN!G8!sAf7'$1**rr<&=!;6B\!9sOT!;?JPs7--U!7(W1!:^#Xs6fsas+::?s7--l +"9o/FVZ3Lmh>la>p&FI\l2TuJl2R"Jmf<=ecN!21cMtTXmf;#?PQ11R!<`T-#nhpkaoB9Zp](-jnGqkS +l2\j([K#UoirAEGlN"$dhuE*E\,Wuljo=uQo)S=\l2\d&[/]Ln +j8\KGli=-ei;`0E\,X&>mf3Cj0Mgm3K)b'7ciD_uo`5!lnc.kSX8gHEm/YH3r;ccBPn,MbTcN!52nGf$Ym/[%`K)bNDmf3Cj0MeJDYQ*)PrrCOJo)SC^ +klBlGP5k%Pr;b.Cli>?2^AmR#g&IH>mf3Fl9)npCs3^kp!9*tLs766^s60O%s0Vgn!9=+Gs6K`es5s6fpg"%q_UK)b-9dK%brp&P'loDe%TX8gHEm/YH3r;c?2 +^AmR#g&IK?mJm>'g&M)(s3gqr!8mhIs7-0_s69U%s0Mam!9F1Hs6K`es53cMtWYm/Yi>RfDaT"+BP9 +s+::"s478)s6p!Y!;ZZ[!5ecBs6TgIs6K^P!3H4Xs6]lrs1SI"!!5C/qr[p1s6Td;!6G3:!;QWjs69T` +s31N1!7(WD!:TuPs7lW^!1s5As6Tdf5Ks#Cs,[3P!9=.$s7-0cs6fsc!/LUBs6Tg3s6TgUs-s&V!;leJ +s7lW]!!5C/qkF+rs4RJJs31N6!;lf\!9F0Bs7-0f!7(W3!7(VXs6]m?s-s&W!!<m\_Z-tBm/Z5Ili6>PXT.2XmJs`r^&RO$!s;60pZ;F,s6]j?!5nj6!;HQks60N_s31N1!7(WD +!:TuPs7lW^!1s5As6fpi"&-B%_uGo"nGqeR_>j'+r;Z0bquDNPmJlPRci<>3nc,*YmK!.aK)b]ImJm=l +DV+cYs0VgZ!;HN:s7-0fs60OEs,d9P!;ccBs6Ka3s1SI#!87CCs6]jh"E)igrVqKLf)OD'ec5%:nc8Uf +klAU#ZN':ljo=ZHli=0fhuE*E\,X5CmJm=lDV+dHs+::>s5!afs8;rk!<3#^!3-"As6Tg4s8E#e!0mNY +s6]lYs4RG?!!3@?qnW5ps7$*W!5&:%!<3#c!;lhPs6]jR!71]3!:g)Ys6]mas+::Js6]jg#&F+-s0Vg_ +!:p04s7-0hs6'IDs,d9P!;ccBs6Ka3s1SI#!87CDs6]jg#&F,5s+::&s53n%s6K^U!!*&_!5\]@s6KaJ +s6K^O!3Q:Ys6Tfrs2G!?puBPpmJm:lFo1.tK)b??huL7drW)Tk!<;6_W;k'@li>E4rW)BePlLOYm/WdY +hZ!]Qj3+=f!!3=HqnN/ps6p$Y!4W"!!!*&c!;unPs6]jQ!7:c4!:g)Ys6Tgas+:7Rs7kWtVX=Ec"a0^5 +s0hsd!:Bg-s4ID4s,[3P!;Z]Bs6Ka3s1SI"!8@IKrr_c!=r$E)!Endbs+::'s5rs5*hV!/1C=s6Tg5s6KaUs-s&U!;ukNrrVi;PQ=)Wli7)5`VuD-\,YFfli5!) +h#QF6O8nhPq>enBli>B3^&RI"gAe)N"SBs'64)uY![Yhbq>Z'Hg&L%3aoCT)h#P4iZ2a1kk5XcIli=0f +huE'D\Gs\N"SBs'64)uY![Yhbi;\E/oDdhNY5eP%huKVRb5^f.dJs1Gmf8UPq#B^]TE!sO"6lFJ&*j2s +#Cl]cs-E]P!;?Jps5n^
  • H5rW)?dQ2gXZm/WdYjSo;RKFmAJ!@,h$s-NcP!;QVo +s5F"Y!/(=H5rW)?dQ2gXZm/WdYjSo48kPtYd?hD#2RK)OPquEAhkl?>8li6>PdJrM4o)G3Z +m/[(aM#RJ)quH'`!?/ScR: +_Z/KmklAEsYlF(jkPslJlN"*fhuE'D\GseQ!7^03!?/T+s+::Fs5a6Zs7cQY!2KS9s6Tg6s8E#d!1!TZ +s6TfYs5j7\A*E4 +^&RI"gAe2QkPtZ&[eoatK)ad/jT*'qhuDsA]Do,8li?8LlMp2NY5dDZm/XZrbl?l,!ZJNEh#E!+q>]OV +VZ6Gkl2[RYaoC]-dJs4HmJrOPq#B^]TE"$QkPtZ&[emZ9SH%aP!!&PhlN$qaK)b0:li>K6lN$MUS,_jU +r;VTQ!#kb8mf3D!YP4C`^Am +^Am*jlN"NrYlF%ikl9uKlN"*fhuE'D\GseQ!#k,&!Y2F.g])m*qZ#[XV#U5ilN!XYaT(W-df9:HmJrOP +q#B^]TE"$Ql2Ul#U\hS$Sc@gPS,_dSrr7TMlMp5Odf8V5o)G3Zm/[(aM#[>Pn,NM)U\gAW^]3ErhuCCi +lN#`?NW8\Pp]/bBlN#<3^&RI"gAe2Ql2Ul#U\jZ_K)aj1joE'oi;`'B])Su6li?;Mli68NY5dDZm/XZr +c2[&/!].ang&H[(qu>dYU]:/il2[OXaT(T,e,TCImJrOPq#B^]TE"'Rl2UlA_u@.FT)[pQ!<8Shl2^h` +K)b-9li>N7lN$MUS,_jUr;VWRq>g$c!].anQ2e]#k5a<;^AmHuh#E?5pAjpfe,S_6d/UfZm/Yl?XT.Sd +!tU(DrUKo>s5X.B!4r3gs69Tqs/uCh!9sOLs6BZfs53kD!4`'Ss6BXe%trp?f`-R'r;Yp[U&Xrgl2[OX +a8bN,e,TCImJrOPq#B^]TE"*SlMq"tK]2mNlMp2NY5dDZm/XZre,SY4!Xb1h +eGk.#!<;-\TE"fgl2[IVa8bK+e,TFJmJrOPq#B^]TE"9Xkl:blPl%cdU]9EUr;WAgl2^b^K)b*8li>N7 +li?VVS,_jUr;ViXoDnRb!Xb1hOT3?#jT+!6_#N["gAd*2p]1!fe,Sb7d/UfZm/Yl?ZN'+g!H@Mos+::7 +s5a6is5O(D!4`'2s6TgOs6BXN!3Z@Zs6Tfrs4%)4!!.'-e,P%"jT(nPqu>p]TDuq2m/YW8rrDHeQ2gXZ +m/WdYmJlAM!H@M4s.o\W!;c_es6B[^s+::7s6Ka8s6KaVs-s&U!;ukZs7H?n!<<,o!!+IoNrR-!joF'6 +_#N^#g&I!1p]0seeGnk8d/UfZm/Yl?ZiB[u!!2`m!@Q7[s+::7s5joWW +qZ!2flN$e]K)b'7li>Q8lN$PVRfDdUr;Vr[nGr=a!X"V\NrR0"jT*s5_>ig$f`-m0p]0seeGnh7dJplZ +mJtu@[/]=i!X"V\li2S:lMorG[K#:elN"BnXoI_fli65Lli=6hhZ*!D\Gt1\k5YNFf$XMNs8N)^!1a)e +s6BZUs2P**!7UrJ!:9cPs7cQ]!2';\s5s@_4P$_9VZ5`Xq>[)elN$e]K)b'7li>N7li?YWRfDdUr;Vu\ +n,W4`!Beqms2k<&!7q1es69U:s,6pP!;$9@s6Ka5s1JC!!8IO^s5s@`$*j9js+:::s5a6fs5a4F!4Mp0 +s6B[Os69RM!3cFZs6Tfss4IA7!!3J3psK+qs8E#^!1X#es69TTs2P*)!7_#K!:9cPs7cQ\!20A^s5s@` +$*j9/s/5nZ!;HMds6B[\s+::7s6B[7s6KaWs-iuT!<)q_s6]m`!!319n;RChs5j=3s2+g%!8%7/s7cTd +!7_&8!7ChZs6Tg@s0r$k!!319nEKt)s6K^I!42^ds6BZms/l=e!:9aMs6K`hs5*eC!4i-_s5s@`!G_,N +s+^RP!:'WPs8Du`!1a).s6Ka8rr<&d!1*ZZs6TfZs7H?Q!!+P3XoG@"k5b2TT`=Z'HkPslKeGnk8 +oDb9Zm/[+bQiHCPq>^OFkDTA_s5sC2s2+g%!8%7.s7lZe!7_&8!7ChZs6Tg@s1/0k!!+P3kl687mJl>L +YlEhbl2\6lXT.SdmJlGNli=6hhZ)sC\c:IbjT#;hXj6s%s82l`!13`bs69TSs2G$(!7h)L!:9cPs7cQ\ +!20Abs5a4]$a$N1WW2,]o`(Wbl2^Y[K)b$6lN#K8li?YWRfDaTrVr8blN$e^!=Q#es31N*!7Lnbs6B[9 +s,-jP!:p3@s6Tg5s1JC!!8IObs5j:_"(h8js+::=s5jM>tj#jT*a/`;f*&f)LU,q>g*eec4t9dJplZm/Yo@]Dpsm!C,B% +s+::>s5a6bs5s@H!4;d,s6KaQs69RM!3cFZs6Tfss5!_:!!,=>c2WY#q>fm_QN.!blN!CR`;f0(ec,UL +m/WIPq#B[\T`=fej8]3$\#TJ/s5j=Qs.]PZ!;HMFs5s@J!7h,9!;$5[s6Kaas-s&P!;ulu*Ogk)c2Zo+ +dJq/blN#K8M?!DPo)R>@li>H5^&RF!g]+tej8]3$\)mXAs7$'N!3Z@as6BZks/Q+d!:BgNs6K`hs53kC +!4i-fs5X.]%ArpEs,-jP!:BiPs8W,b!1Nr*s6Tg:rr<&d!1*Z[s6K`Ys7u]U!!3V,po=@qs5j=Ps.]PZ +!;HMFs5j:J!7h,9!;$5[s6Kaas.',P!<)s"%AroVs3L`-!71\as6B[7s+p^P!:p3As6B[4s1SI!!8IOg +s5X.]&!?ABs+::@s5j<`s6'FJ!4)X)s6TgRs6BXM!3cF[s6K`rs5F"=!!3[nnB:iis7cT_!0mK`s6BZQ +s24m(!7q2M!:9cPs7lW\!20Ags5X.]&!?@\s/uCa!:^#`s6B[Ys+::3s6]m!=+A$s,I'P!:g,P +s6BZPs2+g(!7q2M!:9cPs7cQ\!20Ajs5F"Z#DT/VYQ*bcmf0*_lN$VXK)ap3mJtiE4]`7C"gAf%iiW'!$TAom&s7?9S!3-"^s6BZis/H%d +!:BgOs6K`gs5*eD!4`'is5F"Z+.p[TNW8\Po)OmPlN!=P_Z0$(f)PaMmJrOPp]'X]TE"liiW'!$T;V^n +s6'ILs/#b]!;-;Cs5a4J!7q2:!:p/Ys6]mbs.]PP!!3-qc%Z2Gs6'I*s2Y0*!7Ln&s82lg!7q2:!7:bY +s6]m@s2=rq!!,j>ir=W1o`++TW;l,^lN"0hWW2AdmJlJOli=3ghZ*!D\Gt^khuEdQc,p!Hs7?<`!0I3\ +!:0]Ps2+g(!7h)L!:BiPs7lW]!2'8ks53kY.\H@2s0;Ue!:9`^s6B[Ws+::3s6]m;s6TgWs-s&U!;ukl +s53kY.\H?es3q#2!6Y>^s6B[5s+gXP!:p3@s6Tg5s1SI"!8@Ils53kY.\H@ms+::Es5sB[s69RL!3lL& +s6TgSs69RN!3Z@Zs6Tfrs60LF!!ioM'F"da:7pdls,d9P!;->Qrr<&c!13`&s6Tg;rr<&e!1!TZs6TfY +s5j:e$5sT_#9Q^5l)+Kds5sCJs/#b]!;-;Cs5a4I!7q2;!:p/Zs6Tgas.o\W!!WcK'F"da:'%!OK`BU& +k5`U'a8bK+dJo"%quH9ff)P(:dJpo[m/Yl?aT(B&#mt.[`1D^FoVMSos6'IIs/,h^!;$5Bs5a4I!7q2:!;$5[s6Tgas/5nZ!!=mMlMLJYK)aC$kQ&[' +aT(Q+dJo"%quH9ff)P(:dJpo[m/Yl?aoCK'"#$J8qq;"$s7cQW!2]_\s6BZgs/H%c!:KmOs6K`hs53kD +!4`'ps5j:`0;Rn1_#KStnGr:`NrT+Zm/WIP_Z0!'f)G^Mm/WIPq#B^]V#LDqr;c*_"#[RRqORYns5sCH +s/,h^!;$5Bs5a4I!7q2:!;$5[s6Tgas/H"u!Tj@a27MoJqYu0If)On5a8a6\lN#?4L]@8Pnc78@li>H5 +^&RI"gAf@r!!23^"#[RRqUkh"s7lWX!2TY[s6K`gs/H%c!:KmOs6K`hs53kD!4`'ss5a4^1o]fSs-!EP +!;HPRs8N)e!1!T$s6Tg;rr<&d!1*Z[s6Tf_s8)f^!!5!Vl^Rp]s6'IHs/,h_!:p/As5a4I!7q2:!;$5[ +s6Tgas/Q+\!!5!VlhLL3s4@;7!6+u[s6B[3s+^RP!:g-@s6Ka5s1SI"!8@Itrr<)^!!4XDkgf]bs7u]Y +!2KS[s6BZfs/>tc!:KmOs6K`hs53kD!4`'trr<)^!!4XDke-qZs6p$a!0.$X!:BiPs2"a'!7q/M!:9cP +s7lW]!2fbr!W)l`!!4XDkaMO[s6'IFs/5n_!:p/As5X.I!7q2:!;$5[s6Tgas/c5#!TsFa"@]Ebs+::' +s6'I$s2k<,!7:b#s8;rg!7q2:!7Ch[s6Tg?s3CWE!TsFa"@]E@s+::Is6'HWs6K^N!3Z@#s6]mTs69RM +!3cF[s6Tfrs7$$g!TsFa"@]E's-3QP!;cbSs8E#e!0mN#s6Tg;rr<&d!1*Z[s6Tfbs7cT`!!Rljo;7Yli?SUK)ap3m/Y`;li?YWS,_jUr;Wo!k5YSg0Mn\>s+::'s60O$s2k<-!71\#s82lf!7q2: +!7Ch[s6Tg?s3L`.!!Rljo;:ZlN$JTK)am2m/Yc< +li?YWS,_jUr;Wr"kPt_h(50?goDaFBg&L::_Z.dYli>?2LB%2PnGq2@li>H5^&RI"gAfS#kPtVs6d>X_ +s82i\!20AYs6K`es/>tb!:TsPs6K`hs53kD!4`(#s6'F`'19/,Q2g7PquDZTr;c@h`s0r$m!9F0Zs6B[Ss+::2s6Tgtb!:TsPs6K`h +s53kD!4`(%rr%"S;]g!!E<-(HZ,h +s0r$n!9=*Ys6KaSs+::2s6Tgtb!:TsPs6K`hs53kC!4i.*rrE0% +kl:kk&0O5FKsUfFs6Tgc!/ggS!:^&Ps2"a&!8%5N!:9cPs7lW\!3uP)!Whilp](I%&0O5FKouDFs69UD +s/H%b!:Tr>s5X.H!8%8;!;$5[s6Kaas0_k-!WhNc"U5M\5[T65s+::)s6B["s31N/!6tOus8;re!8.>< +!7ChZs6Tg@s4@;7!!E?>.mmafs+::Ks6BZUs6fpQ!3?-us6KaTs69RM!3cFZs6Tfss7u]Y!!E?>.mmaM +s-E]P!<3%Vs8)fd!0[Aus6Ka.mma+s1/0p!9*sXs6KaRs+::2s6Ka< +s6KaWs-iuT!<)r,s5j:`$S4VNli2S:g]-O=^]2OXli>90LB%2Pn,V,@li>H5]`7@!g],t,jo>Jk/4*[b +s+::Ls69TTs6fpR!36'ts6KaTs69RM!3cFZs6Tfss82iY!!]< +!!)BdQN-a[m/XKmm/Zt_!s9`7@?(;ts69UCs/Q+c!:Kl=s5X.G!8.>ta!:^$R +s6BZgs53kD!4`(.s5j:a!s6B[Vs-s&U!;ul1s5s@c!=BYh2biH7K)aX+l2\QucN!21bQ!:rrW)Efg&L@ +"T\rI,WAH9s+::Ms69TSs7$'S!3-!rs6TgUs6BXM!3cF[s6Tfrs5s@c!=BYh2bg@QR/cIP!!%rWq#L!d +OT3,rm/Yl?rW) +!5AKYs6Ka.s+LFP!:U!As6B[4s1SI"!8@J5s5j:_#9GD0s+::Ms69TSs7$'T!3#pps6]mVs6BXM!3cF[ +s6Tg!s8;r_!!3BH/#E95s6BXb!/pmQ!;$8Ps1eU%!87DP!:9cPs7lW]!5/?o!!*quHQmm/Yi>lN$PVS,_jUr;X\7jT#Ab))OkAs+::+s69Tus3L`3!6P8(s82lms8E#f!87D< +!7Ch[s6Tg?s5j:B!!<<@1e5:[K)biMl2[@Snc.qUVuO.(quHQmm/ZYUlMp/MYQ*M[m/Xm#qZ,p^!s9Dt +8#?6Rs69TBs7cTe!07*)s7cTls6Tg>s8N)d!1*ZZs6]m%s5X.]&NN^?s1As6B[Vs-iuU!;ul8s5X.]&NN_Gs+::,s69Tts3L`3!6P8)s7cTls8E#f!87DNK)bB@o`4sjm/Yl?lN$PVS,_jU +r;Xh;iW'#f3FCYCK)a[,l2\Ntd/WG4aT%P*o)SdirrDKfgAgI=dJpo[m/Yl?li5oD!YIlq]DmK_s8V?a +S,`'Zli(>?- +K)a[,lN"TtdJrM4aT%S+nc8[hrrDKfgAgI=dJplZmJtu@mf2/E!Z"sh])RB^s8VBbRfE!ZlN!g^\Gu+" +rr;?cnc.nSlN"-ghZ*!Da8b]1mJm;(>(<7GRK)RQ!<8&Yp&OgeN;q?+nGrRgm/Yl?rrDEdQN-^ZmJt?. +huEi[->i_[s+:9_s6B[As0)Ih!9sN8s7H?]!<3#c!8@J=!;$5Zs6]mbs3:T%!!<6KD>i5hK)a[,lN"Tt +dJrP5a8_M+nGrRgrrDKfgAgI=dJplZmJtu@n,M;G!s'`crOMr[rrE)a!1NrZs6K`^s1/1"!<3#c!:g*S +s6BZgs5*eD!6Y?1!:Tsi3.h.%s-iuQ!!*%Ys7QHe!0$s+s7$*gs6Tg?s8N)d!1*ZZs6]m0s5!_W3.h/- +s+:9`s69U@s0)Ih!9sN8s7H?]!<3#c!8@J=!;$5Zs6]mbs3L`%!!5-3rn@C(s5*eA!5&9Zs6B[*s-NcT +!!*&u!:KpAs6Ka4s1JC"!8@JEs4mYU0(cUPK)YiNlN!@Qo`+4WV>n++n,NIgli?SUlMp2NY5dAYmJtK2 +m/ZYV!A=#8s-iuR!<<(Zs7HBd!0$s+s6p!gs6Ka>s8N)e!1!TYs6]m2s4mYU0(f#?K)`L`lN#c@YlF"h +l2QA8o`*VFgAgL>o)G0YmK!1bdf8,'!@$UVs+::-s6BZss3gr5!6>,+s6KaS!8@J>!7:bYs6]m@s7H?I +!!+;)[JtjY!<;?bRK)pZlN!d]\c:@`nc.nSli=3ghZ*!Dc2[,1nc/\7jIH7=s6B[bs,[3P!;HPPs3q## +!8IPR!:BiPs7cQ]!71]#!!+L_q#>sG]`79th>ab[lN$/KK)bNDfDs\+li?VVRfDdUr;Y:Hg].@'^XiF: +s5*eA!5&9[s6B[)s-WiP!:BjAs6Ka4s1JC"!8@JHs4dST.)3.hK)YiNlN!@Qp&F=XV#S(,f)YCAlMp2N +Y5dDZm/YQ6kQ(5T!\MUpS,\rWlN$tbO8nhPp]-6PeGn,#g].9RmJrOPq#B^]dJqr$!\MUpq#>sG]`79t +h>ab[lN$/KK)bQEf)XS*li?VVS,_jUr;Y@JgAh:,bPp)mK)a^-li=Wse,Sb7`W)A+l2^2Oh#H^@d/UfZ +m/Yl?qZ#:M!s23MrNlNUrrE)c!1Ds1JBu!8RU[s6B[Js+::Fs4%,*s6B[Us-s&U +!;ulMs4[MU$#nf$eGk.#hZ)pB])U:[lN"p(RfDUPm/YuBlN#<3^&RI"gAh'MgAh<^E8UZ#s+:7Ns6K`Q +s7ZKY!2KS,s4%,@s6K^N!3Z@Zs6Tg9s5a7T!!u0,e,\>)rW)?dQ2gUY +mJtf;gAh9lRIp.OK)`OalN#`?ZN'7kk5U&5q#AhDh>cd@o)G0YmK!1bgAfn-!Z7?tdf4q!huE!B])U:[ +li>!(S,_[Pm/YuBlN#<3]`7C"gAh*NgAh9lRIm``K)b-:R/cm[liu0,e,\>)rW)?dQ2gXZm/Yccd@o)G3Zm/[(ah#I!H!!29`!\qmtdJnguhuE!B])U=\lN"m'SH%jS!rr9#m/YrA +li>E4^&RI"gA_0QoDnjkl2Unk?.f+Ys+:::!1cBPfDk+9s8VEch#IBSmJrOPq#B^]g&L[ErW29a!s`,arUTu?s1SHu +!8RU\s6KaIs+::Is69U`s6Ka@s6KaVs-s&U!;ulSs4RGT&prL7ci8UshuE!B])U=\li=s'Sc@sTrr2ru +m/YrAli>E4^&RI"gAfk,!tot;riQ3Ps6BZPs7cQ[!29G-s69U`s6KaWs6BXN!3Z@Zs6Tg?s5*hS!!S,_dSrr8,\nc8OeM#Z0.klC\^m/YrArrDHeQ2gUYmJu#Ag&M1#T_.^QK)`OalN#`?ZiB@ljo9r4 +qu>m\rVu6bh#H^@o)G0YmK!1bi;_L2![XN3c2WCqhuE!B])U=\li=s'T)\$TrVu6bh#H^@d/UcYmJu#A +!!(aR![XN3X8deOlN!=Pq#BX[U&Vt/klCY]li?\XlMp2NY5dDZm/YuBg]7cgAo)G3Z +m/[(air@[3!FFj1s+::/s6BZqs4759!5ni0s6'I\s6KaAs6Tg4s1SI"!8mhS!8[\W.)#VYs+C=O!:0]P +s7lW[!29G0s6'I\s6KaXs6BXO!3Q:Ys6TgDs4RGT!%>P[O8kaMlN$n`P5k%PqZ)HPg]-I;r;Z*`h>dKT +mf8UPq#B^]huD@0![tb]m/M\;^AmL!g]+\]lN$#GK)bfLkQ(P\li>oBli?SUS,_jUr;YpZg&M6V-B@-b +ao?tmi;`*C\c::]lN"g%T`=3Ur;Z*`hZ)pBci:]Ym/Z,Fq>fIS"9Bj0j8GnUKDtoOli]a\T`;n/ +kQ(P\li?\Xli6;OXoI;Ym/Z,Fg&M-S-3B4frJpoJs6B[`s-*KP!;lhPs4mYoBli?SUS,_jUr;Ys[gAhBZ-]ZmPrlG+k +s5]g^o`+7WlN"*fhuE'Djo>)U!W`?'kl:hf%mHZSrVqfUSH%mTrVr,^mf<:dLB$*0 +kQ(GYm/Z#CrW)?dQ2gXZm/Z8Jp](?r!WhNc"9K)tT^Ln@K)`Ucl2]T=\,Yaoir=W1!<;3^q>]d]huE$C +nc,*Ym/[(ali6b\rrN-%l2Uqj4cdk[_#K#diW&0C\c:@_lN"a#U]9KWqYpQqli>rCli>B3^&RI"k5Y5W +rrN-%l2Uqj4cdk[T)XKDrrDBcQiHs_lN!OV`W,*$q>]d]p&F@Xli=0fhuE'Dk5Y5WrrN-%l2Uqj4cdk[ +qu;TSSc@sTrVr/_mK!4dL&^'1k5b8Vm/Z&DrW)BePlLOYm/ZDNpAk0ol2Unf0tm>=s+:9cs69U=s0r$o +!94$1s5sCVs6TgDs6KaUs-s&U!;ulbs7ZNm!pTaf!\qC_^&N]aiW&0C\c:@_lN"a#V#TTXq>^Kpm/Z&D +li>B3^&RI"l2UJXrW<*"li7+h0tm=Ns+LFP!:9cPs8;o_!1j/1s5sCUs6TgZs6K^O!3Q:Ys6TgOs7cTn +!pTag"!V@#qtL,Ks.02U!;uk_s6Tgd!/1C1s5sCUs6TgDs8E#e!0mNYs6TgOs7cTn!pTag"!V@#qqh@) +s1eU"!8@I_s6B[Ds+C=O!9aFVs6TgDs6KaUs-s&U!;ulcs7cTn!pTag"!V@#qn2r\s5F"D!4`'`s69U! +s/,hZ!;HNns6TgEs6B[2s1SI"!:9a]!!<6'"9\N$n,NRr4+t66R/_j>rrDEdQN-p`l2[CTaT(E'p&FCZ +p&FCYlN"'ehuE'Dm/Qk]!s&H+"6ojh#!5AK1s6'IVs8W,c +!9*tE!7(VYs6TgSs7u]u!WiK1#5A2j!!EK]P2lM*s+LFP!:BiPs8N&`!1a)2s6'ISs6KaZs6TdP!3H4Y +s6TgUs7u^!!WrW5#6X>n"qO+P\(pWTnGeFHScA$Vqu<&`lMpnbKE's2kQ(5Sli?#Er;c^[#!sT&:"76'm%n(rWh":Tts+:9cs6Ka=s186q!9!m2s8E#a!;$6W!9*tE!:^#Ys6Tg`s7ZKh!!NE+ +"pkM:m/R>$7"Dc%o_u8uK)ag0li=Nph#H[?^&P#1klCAUs8VEciW&6EcMtWYm/Z\Vqu?p%!X&]5$3g)& +q>^X)2LNU=NrOe4rrDHeQ2gj`lN!FSaoCT*o)J%VpAaLZli=-ei;`0Enc/Le"p"c."pbP>mJm@r2LNU= +li2nCScA$Vqu<&`lMuP:irA6Co)J%ViW&iVn,S[Pq>]g^nc/Le"p"c."pbP>mJm@r2LNU=df4q!_#N^# +g&J\al2]`ALB%2Pli?VVli?#Eli?PTSH%sVqu?Klr;[*(!?2^AmR#oDeah#QXr-!sAo=$3To#qZ$aV_;FnaNW4_4rW)?dQ2gmal2[=R +b5^Z*o)J%VpAaLZli=-ei;`0EoDeah#QXr-!sAo=$3T\r"?"$Qo`".UMuTCKlN$h^RK)RQ!<7ZNj8\?D +nGhkUirAoVn,S[Pq>]g^o`+ji#QXr-"UGJK$N]Yq!>iYus+:9ds6B[]g^p&Fpi"p"i2%2'E`m/R/6 +]ZgD-s1n[#!87Cbs69U@s+gXP!:BjTs6TgHs6B[Ss.',V!;lfns82j$!<`T9&f(iA!!+FZWrI\NirAf_s8E#d!1!Qas69TQ +s31N-!:BgR!;HN\s6BZds5',hhu +!Ug!i*iJe1s+::1s6BZos53kB!4r32s69UQs8Dua!9O7H!6tPXs6]m_s8;p(!DJ().,Wmf3CrG3Ph&K)aj1lN"Eoi;`*C\c8c2 +klC2Pr;Z*`k5X`Ic2YNXm/[.crW!9+!`E5T)\*Vqu<2dlN$n`K)b$6klC#Kli?2J +qZ--dP5k@Xm/[.crW!9+!MZUEqmJm^r!!!$$"U>AH +(a(=c+n#C4"&IXes+:9ds6B[1kPslKqZ$!`li='ci;`fXmf3dt!=dli=NpYQ*hem/Qt_li?8LlN#0/^Ae6s+ULP!:KoR +s8N)e!1!T3s60OGs6Ka^s6p!R!36(WrrN?+!V$.!!a!Ze94f`-m0T)\-WqZ!,d +li?q_K)b-9klBlGli?8Lq>g'dOoP7W!X/Z,nGj"!!irAUF) +nc/jq":#;D#m0Al!\M%Z]DmK__#N^#g&Jkfli>]]D.foK)aj1lN"EoirA?F[f]g^l2U)MbQ#g*eOT5.V!!W)s#QXu.!Z;O8nhP +pAj1Pli?>Nli?GQSGrQipAb@#"9\o5!r)cb!!4XNoToN/s5O(E!4W!gs6K`ns0;Uh!9sOZs6KaNs6Ka/ +s1\L5!VZQt"U"r4"p3rf!\18CoDaFBL&_,PmJr[Tr;cE_kOJS(s+LFP!:BiTs8;rf!0[B3s69UBs6Ka`s7$'T!3#qU +s7QEo,9Iog!!3ahlH]Efs.02V!;legs6Tg]s+::hm/Zn\K)b<>klBT?li?GQp]0pdO8o%U +!"S]&!(#iL!Dr-fs+::l2]Z? +li?GQp]0pdO8o%U!(HS]!<`Yo!!34%hQ[$3s6p!R!9aCK!87Cis6Ka9s-!EP!;Z]Os6KaQs6B[Os.')h +7J6]^":+T"p](?sli@"ao)ItTW;kfU!1_sI!X)li?JRpAjgcO8o%U!1_sI!X)Q8PQ1+Pq>f@Oli?JRl2^2N +SGrWB,O#4)!!3C?kD]G-s6Ka\!:'UN!4W!js6K`ks0_mk!9X=Vs6KaRs69U,s1\L6fH]AU!XEK'l2QA8 +\c:[ilMpkamJrdWq>g*eOT3r4klBQ>li@"ao)ItTW;kfU!SAXV!!3C?kK!U\s4%),!:0[O!;lejs6KaZ +s+::@s60O=s6KaRs7ZNd!07*TrrMbOirB-(VsphgK)bQEhuN*Cli>`=`;f0(eGkd5mf<4bh#H^@mf2SQ +li3LT!VDB9!;c`t+fFgfs-`oP!;?KZs6K`ps5s@J!4)X5s60OFs7lW\!:KmQ!6P8TrrMbOirB-(VsrpM +K)`Oah>lmArrDHeScAKcoDjsPf`14:gAgO?rVuHglN!j_i;WlXj!a$i!uP.Qpr38ks475,!:0[O!;lek +s6KaYs+::@s69UN7PlL1PquGIN +m/ZSSlN$8NSGrZij!a0mr;Zp:=M4Eds.',P!;?KZs6K`ps60LK!3uR4s6B[Fs7cQ\!:TsQ!6P8SrrN)3 +kPt]'BsHpas+:9bs4m\@s8N)e!1s5c!;$8Ps4IA;!87D>!<)rhs69T^s53hWrOqCp!ubmYl,3OZs4@;, +!:0[O!;lels6B[Xs+::@s6B[s6Ka=s2P**!7Ln4 +s6]mc!87D>!:TsQ!:0ZRrrN+:lMptlGk?^iT)[mPpAjOZli=Npkl9uLYlD34l2]lEp]'U\n,MYQaoB$R +!WI!&!!3FNo]#n&s1nZh!:0[b!:BiYs7cTe!07*4s69U;s6Tgbs7?9U!2okRrrN+:lMptlGkAfOMuVN2 +g&UI=li?q_V#Tc]o`'OCo)ItTg&LF>nGi.]p&L*PpAY3^?3KZr!Y("YVZ28Jr;YINli6;Og&K(lli>K6 +Q2g7Pr;bONm/ZYUl2^,LRK!?V?3KZr!"AscoS!7:s5X1S!:0[O!4W!ls6K`is0r$n!9=+Rs6TgUs69U* +s1A:4mTp%a!!3Udo\oh%s2+fh!:0[b!:BiYs7cTe!07*5s69U:s6Tgbs7H?V!2feOrrUtu'(>l&(R"$s +s,6p3s4ID=!:^$]!;6DPs7QBngiX8!!!3t"l)"E3s8DuN!:0[O!87Cl +s6Ka6s-E]P!<)uNs6TgUs69ULs-WffgiX8!!!*n!!9o.9U&X*Pp&OFYm/XWql2U)MYQ)-4l2]iDpAaL[ +nc.nTa8`^M!q)C)nc/_BV=`[FK)`agf)Y.:!!)EeTE"Wcp&L*PgAgFPqua8bK+dJoR5li@%cfDk1;nc.nTl2R%K!SLfO!!?Q\s8R]NUAs0Pmf;qYm/XWql2U)MYQ)05l2]fC +p]'R[nc.nTa8`XK!SLfO!!-EZh>`*,`;e-`o)A[imJrmZpAjmeNW7c5l2]H9li@%bo`+4WV>o6K!SLfO +!!-EZ]DmfhhuCdupAaIZr;WYoli?VVK)bNDl2]E8li?VVoDnXdMuW>I%emY1$ipD1!WW9&%Ssh5U&T`E +aT2&7li>c>aT(T,d/TL5lMpnbf)P(:o)J"Ukl6nI%emY1$ipD1!WW9&%Ssh5rr7TMV#T!5s6Ka`s/,h_!:p/As7QEW!7q29!;$6_!;HPP +s6osorq,*k[]d-`iV/rDK`D&P`rPo7li>c>aT(T,d/TL5lMpnbf)P%9oDe+Vkl6hG$3'SSbI4U_bi/s5F%Ds7-0fs6Ka`s/5na!:^#?s7lWY!7Uu7!;-<_ +!;QVPs+:9-s7u`[!:'UT!;ul`!8@Ips6Tg3s-s&Q!!*&Ks6KaXs6B[Js+:9&s/c7\!;6B`s7-0gs6BZq +s6K^P!3H46s69U?s7ZKY!;6BX!6+tis+:9rs5O+Bs7-0grr<&c!2KSe!;QVPs53kA!7Lo5!!*&ms6BZ[ +s+:9/s6'FB!9aCQ!<)r`!<)qqs6TgUs+::Gs69U4s6B[Xs766d!/gf.s,6pP!:0^Hs7?s2tB. +!7(V7s69U`s4%)7!;6BX!9aB6s+:9Qs5O+Os7--]!<)ra!4`'qs6K`es1\Nu!8RVJs6B[Xs6B[(s+:9& +s3L`*!9F1P!<)ot!:9c]s7?tb!:Tr> +s8)c[!7Ci4!;6B`!;QVPs+:90s7ZN]!9*tO!;ul`!8@Iqs6Tg2s.02S!<3#Js6B[Xs6B[Js+:9&s/uC_ +!:p0Zs7QHjs6K`qs6TdQ!3?.7s60O=s7ZKY!;6BX!6+tis+:9us5X1:s8)flrr<&c!2TYe!;Z\Ps5F"B +!7Ci4!!*&ns6BZZs+:9/s6BXF!8dbQ!;ZZ\!<)qrs6TgTs+::Is60O2s6B[Ys7-0d!/^`-s,I'P!:KpE +s8)fls6B[>s2tB/!6tP7s60O_s4%)7!;?HY!9X<5s+:9Ts5a7Ls6K[b!;HNZ!4i-rs6Tfes1n[!!8IPI +s6B[Ys6B['s+:9&s3gr/!87AP!;HKn!:0]]s7?tb!:Tr>s82i\!7:c3!;?H`!;Z\Ps+:93s7?<^!6kK0!8IOrs6]m2s.B>T!<)rHs6B[Zs6B[I +s+:9&s0;Uc!:KmEs6K`rs6TdR!36(8s6'I;s7QEX!;HNZ!6"nhs+::"s5a7)s6K`]s7?Cs6Ka]s6B[&s+:9&s4755!6>-+!2fee!;lhPs5j:F!6Y?/!!!#ps6BZY +s+:9/s7$'P!6,!(!<3#!s6TgQs+::Ns60O*s6Ka]s7$*d!/UZ,s-*KP!;QW6s6B[?s3:T2!6Y>9s60OZ +s3^l5!;ZZ\!9O64s+:9Ys6'IGs53kB!4r4!s6Tfbs2=s%!8%8Bs6Ka]s6B[&s+:9&s4IA8!6"p'!3#qf +!;unPs6'FH!6G3-!!!#ps6BZYs+:9/s7--Q!6"p'!<3#!s6TgQs+:7Ns60O)s6Ka]s7$*d!/UZ,s-3QP +!;Z]6s6B[?s3:T2!6Y>:s60OYs3^l5!;ZZ\!9O64s+:9Zs60OFs53kB!4r4!s6]lbs2P*&!7q2As6B[] +s6B[&s+:9&s4IA9!5nj&!3#qf!<)tPs60LH!6G3-!<3&qs6BZYs+:9/s7--R!5nj&!<3#!s6]mQs+::7 +!6G3+!;c`c!;cbPs+:98s6fsc!5ed%!8RV"s6Tg.s/#bZ!;HN@s6B[]s6KaHs+:9&s0hsm!9F1;s6BZr +s7$'U!2ok;s6'I5s7?9V!;c`^!5ebfs+::'s69U$s6BZas6p$f!/:I;s6'I's6Tgd!;c`^!20@Ds,6pJ +s60O#s6B[as/c7f!:0Z;rr<&`!65'*!;c`c!;lhPs+:99s6]mb!5ed%!8RV"s6Tg.s/#bZ!;HN?s6Ka^ +s6KaHs+:9&s0r$m!9F1;s6BZrs7$'U!2ok;s6'I5s763V!;c`^!5ebfs+::(s69U#rrE)c!3-"f!<)tP +s6BXJ!6,!+!<3&rs6BZXs+:9/s763T!5SX$!<3#"s6TgPs+LFP!9sR's6Ka_s6p$d!/LT+s-s60O!s6fsd!<3#`!20@Ds,6pLs69Tus6Kabs/uCg!:'T>s82lb!5SX#!<3#e!;lhPs+:9;s6Kac +!5AL"!8RV$s6Ka,s/H%_!:p09s6B[as69UFs+:9&s1/0q!9!n5s6Tfts763W!2]_=s60O1s7--T!<3#` +!5ebfs+::*s6B[!s8W,d!3?.f!!!"Os6]jN!5SX'!;uoss69TWs+:9/s7H?W!5/@!!<3#$s6TgNs+gXP +!:Bj&s6B[as6fsc!/LT+s-WiP!!!#3s6KaAs3^l5!6>,>s60ORs3CZ2!<3#`!9F03s+:9^s69UBs5!_A +!5&:&s6K`^s31N-!71]7s6Kabs69U$s+:9&s4mY>!5AL5s6K`fs6Tdd!/(=>s60Nts6p$e!<3#`!20@D +s,6pMs6BZss6Kacs0)Ii!9jH=s8)fc!58Eu!!*&e!;lhPs+:9IrrE#js6BZss6KaAs3^l6!65&=s69UR +s3CZ1!!*&`!9F03s+:9krrE#js6B[Bs5!_A!5&:&s6Tf^s31N.!7(W6s6BXbs60O#s+:9&s69O`rUp3W +!5/@3s6K`fs6Tfs60OQs3:T1!!*&a!9=*2s+:9lrrN,pp&F@YhZ)C2 +m/XcuoDe1XV#S^>l2]*/n,M_Ss8VBb_>f,eK)b-9!W;K\s6K`us8N&c!3Q:g!.t7>s69Trs7$*e!<<)b +!2':Cs,I$Zr:0I[li=Trm/[1dYQ*tikl6M>q>g$c]Dq3ts8VNfr;_TPK)__J!W;K]s6Kacs186t!8[\' +s6Ka*s/c7c!:Km3s3q&/s+:9&s2k9Br:JtAs6KaAs4mYA!5&:'s6K`]s3CZ0!6kK3s3q%bs+:9&s6K[d +r:JtAs6K`ts8N&c!3Z@g!.t7?s69Tqs7$*M!2':Cs,R*\r:JtAs6K`qs6K^cs02Oj!9aB>s7lZc!4r3_ +!;unPs+:9KrrW#Zb4bl%!<<)1s6KaBs3gr7!6+u>s69UPs3:Sn!9=*2s+:9mrrW#Zb4bl%!8[\1s6K`u +s7H?Y!2KS>s69U.s6p!;!5\\es+:::rrW#Zb4bl%!5&:1s6K`hs6Tdds+::@s69Tps7$*M!2':Cs,R*\ +maA31s6K`qs6K^cs02Oj!9aB?s7cTc!4i-^!;unPs+:9KrrVW:XS2\\!<<)1s6KaBs3gr7!6+u?s69UO +s3:Sn!9=*2s+:9mrrVW:XS2\]!8RV/s6Tg!s7QEY!2KS?s69U-s6p!;!5\\es+:::rrUobMt[2i@g]-X@]`7[)lif,eK)b3;"3dNb;"t"W!4i..s6K`k +s6Kacs+::Cs60Nls7-0N!2':Cs,[0^YCg"9p]'U\[K#RnZN'7kk5UJAo`4Xb[f>"\r;_TPK)_eL"0[>\ +2>@.f,eK)b6<"Ij=$.iA']m/XZrr;Z-a +ZN':lrr7TMp&F7V[K#dtj8bhPK)^r4"Ij=$.iA']m/XKmm/XKmli?/IO8nhPpAhT#f`:sNLAul*WW**J +;_f@%q#B^]r;X;,m/Z&Dec4t9_uI"Al2^)Kbl?2nj8X`2K)a$o"FF'&*=V`Cm/Yl?gAgO?^&Rj,liuDec5":_Z-qAklBuJ +bl?5oir=W1K)a$o"C=28&-Ve.mJtr?g&LF>^Ams-m/WgZec4h5a8bT-ec +g&LF>^Ams-m/WgZf)Oq6`rGH+f)WVdK)^H&mf*Gg0HC]+!;ZZ_!4Mq)s6Tfns6Tgbs+::Gs6'Hgs766P +!1s4Bs,m[ojStDCnGr=aZ2`PYrW%ZPK)_kN"Zde=#6Fo$s6]m`s0r$p +!9*t/s6Ka&s0Vgi!9jI*s4@>2s+:9&s31KH3[#(?!W`&rmJto>g&LC=^]4*/li<^Yf)Oq6`rGE*fDr_e +K)^H&mf*GO+V=q\!;ZZ_!4Mq)s6K`os6Kaas+::Hs60Nes7?ss6]lks6]me +!4Mpo!9F0Ds6p$b!3cFW!<)tPs+:9OrrtnB(CL)s6Ka#s7lW\!20ADs69U%s6Td=!5JPcs+::>rrt8!%Kun6!;ZZ_!4Mq) +s6K`os6Kaas+::Hs69Tes7?( +s6Tg$s7u]]!2';Ds69U$s6K^=!5JPcs+::>rrsYZ#Qk)-!;ZZ_!4Mq(s6Tfqs6Ka`s+::Is69Tcs7HBS +!1j.As-!Bd+qY(_!<<,rs6Tfis6fse!4`'q!9=*Es6]mb!3?.U!<3%Ps+:9Prrahg$NpM0!;c`_!;c`( +s6KaFs4@;;!5\]Es60OEs2b5p!9*s0s+:9rrrahg$NpM0!;c`_!8.>(s6Ka$s7u]]!2';Es60O#s6BX= +!5JPcs+::?rrahg$NpM0!;c`_!4Mq(s6K`rs6Ka_s+::Ks60N`s7QHU!1a(@s-*Hb*Y&DVr;c]om/X?i +mf<=e\c;!rir>>Em/[(bWrLlT!!%ZOK)_qP"!.pW!rW,qs6Tg_s0hso!94%2s6Ka$s1&*n!9=+#s4dV4 +s+:9&s3CWH*Y&DVr;c]om/Yf=fDk4<_#O92liid"h#P1hK)^H&nc&\:&d\^=!;c`_!4Mq' +s6Tfss6Ka_s+::Ls6'H^s7ZNV!1a(@s-3Nc,SCCdquHTnm/XAFli?taWW1fT!!%ZO +K)_tQ"!eKc"T/8rs6Tg_s0_mn!9=+4s6B[#s1/0o!94$us5*h6s+:9&s3UcJ//o$%qZ-Kmm/Yf=fDk1; +_>jE4lN!OVg]-L<_#NWuhZ1@iK)^H&o)AeC)[uuJ!;c`_!4Mq's6K`ts6B[^s+::Ls60N]s7cTX!1X"? +s-oHRK)^H&Y5\SH&I8I8!;c`_!;c`'s6KaGs4RG= +!5JQFs60OBs2G#r!8mg.s+:9trrXAU#Qjl'qZ#p_f`0S'li=m%qu?!_Sc@LFklAKukPsH?^&N]aK)bEA +"!A0]!rDuos6Tfps7u]]!5&9t!;c_Is8W,_!2TYk!9sQPs+:9:rrXS_$O$;+qZ#p_Y5dtkr;aJ0li?#E +RK)OPrrAkpirK,ZK)^H&YQ"\O'ak0@!;c`_!;c`'s6KaGs4RG=!5JQGs6'IAs2=rt!8[[,s+:9urrXS_ +$O$;+qZ#p_f`0S'li=m%r;Z*`SH%IGklAEsjT"?B])RB^K)bKC""tQ'#5J8qs6Tfps7u]]!5/?u!;ZYH +rrE)`!20Ai!:'WPs+:9;rrXnm%gMh0qZ#p_Y5dtkr;aM1li>uDRfDUPT`=-Srr7TMK)`(T""tQ'#5J8r +s6Ka^s0_mm!9F16s6Ka"s1SHr!8mgms6'I;s+:9&s3goL,8(7`q#L]s1n[" +!8@I)s+::"rrX\c$O$5)qu?!_f`0S'lN"g%r;Z-aS,_FHkQ&9qirA9D\Gq0\K)bND""=un"S_uos6K`o +s7lW\!58F"!;QSIs8N)`!1NrT!1*Y:s-`lh2'*85pAk*jli=0fnGrIe^&RI"huB8Ik5YM^S,_jUr;VBK +K)`.V"#V,1#PS5qs6Ka^s0Vgm!9F16s6Tg"s1eTs!8dahs6Tg?s+:9&s4%&N2'*85pAk*jli>]sGK)`.V"!nTe!qu]ls6Ka^s0Mam!9F17 +s6Ka!s2"`u!8RU`s7lZEs+:9&s4.,O0cCH&p&P!ili>]KkQ(S]K)^H&K)`4X"%+@K#5%uns6Ka^s0Mal!9O78s6Ka!s2"a!!8IO*s+:9&s472P6R]UOd.22sX!;lf` +!4Dk$s6Ka%s6B[Zs+gXP!:BiPs+:9&s.')k7O]#ToDndgm/X3enc8Oe_>ig$hZ'8KklCV\K)^H&K)`7Y +"%F^R"nVfls6Ka^s0Mal!9O7:s6K`ts69R]!9!n@!87C(s+:9&s4I>S@QYe@!V?Bhs6Ka!(!<;BcV>p2g!<;6^klA*jK)^H&K)biM"m!CX?mZ$H!;c`_!4Mq$s6Ka's6KaYs0;Us!9X=W!:^&P +s+:9&s.TGrjM$X^-3Wi=qZ#p_WrM\kq>eJ6li>f?b5_)6kl9iHq#>sGK)^H&]Di'+h6hi8)=RY&s6Tg_ +s0;Uk!9X==s6K`rs6TdX!9jIH!7q1%s+:9&s5!\YoA-g+'SJlWcY!;c`_!4Mq#s6Ka)s6KaXs0;Uq!:'UY!:p2Ps+:9&s.fSur:&7=HVFq'*lN$SWZN'Iqli6YYoDjsPK)^H&V#L]!qX)S&EC:!"!;c`_!36(k!;QW7s6B[> +s3(H5!:0[L!;6ADs+:9&s1SF;rqc$-U2`R)n,W=bm/["_Z2a.jkPsN@lN"Hpm/QVVmJlDNdf4q!K)^H& +hu#s6Ka+s8N)d!2KSd!<3&ds60Nfs+:9&s+:7UrqYd!Qt\S_n,W=bm/XTp +p&F@Ya8bH*oDc)qnc8(Wo`4XbNrO_2K)_YH#QFP_aI$[&!q63ds6Tfcs7HBf!6>-*!8@Iqs7-0Xs6'IT +s+:9&s+:9ars/Ptj1gac/HP>@qZ#p_qZ!f"m/Z>LiW&3D\Gtpqnc8+XkQ''2K)^H&K)aa.#QFJX^QN"W +!Up*cs6Tg=s3gr7!6>->!:9c]s7?@qZ#p_[f?""li>0-lN$MU +Z2a:nnc/1\p&L*PK)^H&V#LYto\Hs2=rQi0qZ#p_WW2Vkp]/G9lN#W?mJs!]oDnago`++TY5a+RK)^HʅEYCB:Omf<4am/XTpo`+7XaoCZ,o)GupmJunZnc8CaN;nM0 +K)_VG"nC0IIng4:!;c`_!3-"k!;HQ9s6B[^ol2^Y[kQ&s/K)^H&K)a^-"ROO4F=HVXqZ#p_f`0A!m/Y9.rW)BeU&X`bpAk$hkQ%ab +K)^H&K)Z#Sm*VYO.II34s6Tfps7?9X!6P9-!:g)os69U[s7$*a!/pl/s+:9Grrh]9V0"0S!;c`_!3#qk +!;HQ9s6Ka[PiO=oo#qZ#p_f`0=um/YB1quH3dTE"QafDquP +K)^H&K)YuRs0HnSm/["_m/XTpo)J(Wbl?u/nGf`mdfB4EM>r2-K)_SF!jd(Um/["_m/X'apAjpfbl?u/ +fDitmbQ.,3K)^H&K)`I_!jd(Um/["_m/["_Y5dkhl2TiElN"?mli530bl<:pK)^H&h>[MQ1@,#;s6Tg= +s3Uf5!6kK@!:Tu\s7HBF!36'Ns+:9&rr`<$VD@Kpum/YB1lN$GSYlE/PqZ)HPK)^H&UAk7k +1@,#;s6Tfas7ZNf!6kK0!7q1ks3C]4s+:9&s+:9`rrW.B"7-$as6Tg_s/uCh!9sOEs6K`ms6BX1!6bCo +s+:9&s5*bWrH8;0!;c`_!8.=us6Tg1s82le!1j/`!87FPs+:9&s+:7Qs8@*Cli?n^m/XTpo)J%Vc2[,1 +n,KTke,]FILAul*K)_YH!rgk'li7%cqZ#p_VuQJkp&NA;li>W:aT'Tem/M\;K)^H&^&J05fdlChq>]g^ +qZ!_uli?>NjT"QH[/]FkciD5gK)^H&K)aa.!rgk'li?k]li>`=ci]d]\,Z!um/YH3li?JRY5d#Prr@`PK)^H&V>gVhM[JbM!<;oq +li`=cigR\$gRfms8)c^!2okl!;-?=s6Ka8s2Y/i!9jH7s+:9&s1\L6PRHdWq#B[\qu6"]j!;HN[!4W!u +s6Ka4s6KaQs/uCQ!!*%Ns+:9&s/#_r>64'jrr;iplicN!83dJs"BoDk9Yp]07QUAoiF +K)^N(!WFbcN!83 +df9(BoDk9Yp]0=ST`9WDK)^N(!V@,n!;6BZ!4W!ts6Tg7s6B[Os/c7T!<)qLs+:9&s/,esfa-pErVu]n +m/X$`q#L'fdf8V5e,RDegAp=7K)^H&K)`Uc!SIbF!;6BZ!;lets6TgPs60LK!3uRes4[Ojs+:9&s+::0 +rrLdYli?bZli>`=cN!52eGo7Co`19Wq>fRVTDsNCK)^N(!N#nb!;6BY!4W!ts6Ka8s6B[Ns/Z1U!;ukK +s+:9&s/,esV?-&ar;ZWnligr +m/YZ9lN$8NWrLoUr;VBKK)^H&VZ-X'm/[%`q>]j_V#U8koDmD@li>H5_Z/Knj8X`2K)^H&^]+9dm/ZbX +mK!+`X8hPem/Q>Mli=6hjT"*;_>f,eK)^H&iVrm1m/ZbXmJto>c2[/2eGo7Cp&L9UquGdXTDsNCK)^N( +!A4B?!;$6Y!4Mprs6Ka9s6KaNs/,hT!<)qLs+:9&s/,er&FBJps7u]_!2TYk!:p3@s6Ka5s1eTm!9F03 +s+:9&s1eR6&FBJhs6]m`s/Z1d!:BgNs6K`hs5F":!5ebfs+:9&s5EtX&FBJis6Tg=s3:T1!7q2D!;?JP +s5F$Ps+:9&s+UISmKg*e +f)P(:d/UfZiW/*?K)^H&K)`Xd!U^*Y!;$6X!;c_rs6KaQs6BXN!3Z@Xs5X0ts+:9&s+::1rrB_!!;$6X +!8.=rs6Ka:s7QHe!0$sXs5X0Rs+:9&s+UIS]Dqs#!;$6X!4Mprs6Ka:s6KaMs.]PS!<3"Ms+:9&s/5ks +]^5^qs8)c_!2TYk!:p3As6Tg4s1/.0!<3#`!9O64s+:9&s1nX7JF*@.s6Tg_s/Z1d!:BgOs6Tfgs4dPR +!<3#`!5nhgs+:9&s5O%YJF*@.s6Tg=s3:T1!7q2D!;HPPs8Drt!<3#`!29FEs+:9)rrR]N!:KpZs6Tfp +s6p!S!8%8;!9jHPs69Uas+:9&s+:9Krr>(I!;ZZks6Tf^s7u`e!8%8;!71\Ps69UHs+:9&s+:9drr>(I +!:p0W!;c_rs6KaQs6K^O!3Q:Ps69U&s+:9&s+::1rr>(I!:p0W!8.=qs6Ka=s7?dqli>`=li?5KRfD[Rs8R]NK)^H&W;cnC!Ug$` +s7u]_!2KSk!:^'Ds6B[Ms7cT^s0D[k!9X<5s+:9&s2"^9PQC4QnGhnVqZ!SqlN$DRmJlJPlMpVZbl?2m +li>!(K)^H&K)am2!L*WR!:^$V!8.=qs6B[>s766d!:'UZ!36(ms6K`[s+:9&s+^OUPQ:aanGr(Ym/XWq +mJlMQh#H[?mJm"_nc/ak!!')"lMpqbK)^H&K)_eL!*&Cep]('hm/Wp]quH6eh#H[?mJlJP!ri6#qZ!l$ +lN$,JK)^H&K)`[e!*&Cen,MbTqulAnc8LdnGh2B_>j3.licd@nGh>Fr;a8*li?5KK)^H&K)`^f!V@Q(!:TsT!;leps6KaT +s6p!R!:g*>!9X=1s6Ka)s+:9&s+::3rrL@Nn,VnVm/Yi>b5^f.hZ**GqZ-0deH!Pfp&F@YU]5rGK)^W+ +!R1rM!:p3Ys6Tfqs6TdP!8dbA!:g*^!9!pfs6K^cs+:9&s+:9MrrL@Nn,W1^q>]g^UAt/ln,VAGl2^DT +gApsJ]Dq3tkPp/6K)^H&_Z'Y"!q?9Xs6Tg`s/>ta!:^$Xs69UTs3Ui2s3q#7!6+tis+:9&s5a1\Ook.R +mJlPRg&K4pli>rCn,W=co)I);a8bi4lita +!:^$Xs6B[Xs2k?.s3q#7!6+tis+:9&s5a1[:%//Ms6Ka>s2tB.!9!nG!;liks2P,_s7QEY!2KRGs+:9, +rrMa(r;cKjm/QDP\Gtpqli>uDl2^SYmJtr@^]3X#!<7ZNK)^H&WrE+l&b,kns7u]]!2KSm!:U!Hs69UY +s4%,@!5JR#!9aB6s+:9&s24j;oF^Tnm/QDPr;W_qli?PTnc.nTq>\;3n,Ll:m/Y*)K)^H&K)b!5!V_rM +!:9aP!8@Iqs6KaDs6fsd!;ZZ3!6tQ:s6Tf\s+:9&s,$aVpQtdXo`4@Yli=Qqm/QDPi;`*Cq>]a\fDrbf +m/[1dK)^H&K)_nO!V_rM!;-]a\U]:;n +n,VGIl2^e_c2d84`;f3)k5U&5K)^H&`W#u*B^Yrfs6B[`s/5na!:^$Zs69U_s18:%s3q#8!6"nhs+:9& +s6'C_ltGhfli6;Og],Cqm/Z,FmJsKldf9"?m/Wm\K)^H&MZ3^t&,QA#!:'UN!4i-qs6TgFs3(Jl!65'+ +!<<(Ns+:9&s/c5$`t.Y>oDeUcli'*m/Z;KK)^H&K)`gi!QP`?!:'UN!<)qqs6KaU +s762[!;?HAs6Tg)s+:9&s+::6rr?g&!:'UN!8IOqs6KaFs6]lj!7_&As6Tf\s+:9&s,-gVCAIr(!:'UN +!4i-qs6KaFs3(Jj!6G3-!<<(Ns+:9&s/c5#C@;/os7lW\!2KSn!:KpIs0D^i!6P9.!9X<5s+:9&s2P'> +l4EFbl2U)MrVreqli?SUo)G0Zp]&_Bm/Y*)K)^H&K)b'7!U:6c!9sOM!8IOqs6KaFs6]li!7h,Bs6Tf\ +s+:9&s,6mXl4EdlpAjIXli=Trli6;Oir@4&c2c)gli@(cK)^H&K)_tQ!0?ULnc/Cali\tEli>!(K)^H&K)b'7!0?ULkl9uLg],Cq +li?)Gm/X0ef`1[Fli=If]$=kPsoLrVrbp +m/Z\Vo`(-Ur;Y=IlN"m'K)^H&K)b-9!rIHJn,VYOm/Yo@aT(W-jT"QHW;tZPp]'OZUAoiFK)^i1!rIHJ +q#L0ik5XiL\c:spli?2JaT0H`dJrP5rr7TMK)^H&YQ"Xi54ARAs7ZK\!2BMn!:BjLs0)L`!7Ci5!9O64 +s+:9&s2b3@losn=jo=`KrVrbpli?VVp&C0TrVtFJli=s'K)^H&K)b-9!UN#>!9O7K!8IOps6KaJs6BZ_ +!8RVKs6K`Zs+:9&s,I$Zdh)9Sq>fUVmJsftlMp2Nk5WO'aT0chli@%bK)^H&K)`%S!RhVM!:Ts]s6]l] +s8N)e!9XgK)^H& +lMgmW!V$0Ns6TgAs2b6,!9X=I!8@JRs3:W"s7cQ[!29FEs+:91rrJ_mp]1-jjT"TI])V'qli?2JaT28> +!<:=Edf8Y6rr7TMK)^H&YQ"Wq!V$0Ys7ZK[!2KSo!:BjMs2Y37rr<&ts7ZNQ!7Lo6!9O64s+:9&s2k9A +qa^,UjT"TIrr8kqli?VVpA`26p\t3nrVtLMrr:OKli=s'K)^H&K)b0:!W,CV!9F1I!8RUqs6KaKs69UA +!;HKn!<)rM!8RVKs6K`Zs+:9&s,R*[qa^A\q>fUVm/X`tlMp/Mkl8g+rr;Ed!W`9#h>l%)li@%bK)^H& +K)`(T!T"R\!:Ts]s6Tf]s8N)d!9jI+!:0Xd!<<)u!9!q,s6KaIs+:9&s+:9mrrLskn,VPLm/[.cVZ5r^ +oDeOab5gl.!W`9#h>mTUec4t9_uG>gK)^H&li."B(%;4as6TgAs2b6+!9jIJ!9=.=s5F%8s7cQ[!29FE +s+:92rrK,'pAk'jj8\KH])V'qlN$/KblI\Ak5XE@eGnk8rr7TMK)^H&Yl=a("n;T\s7ZK[!2KSo!:9dM +s31Q(s8W,Y!7_&8!9O64s+:9&s2k9AWWhnmj8\HGs8Sqqli?YWpA`J>gAg77ec5":_Z,5fK)^H&li-s+ +n,VMKli>lAa8bK+kl9oJk5a69jT+3]ISjT*j2 +m/[+bK)^H&K)`(T!-@W0mf2t[m/Wp]!!)?clMo63hZ*EOk5a*5li?,HK)^H&K)`sm!%[O=irABGs8Sqq +lN$SWp]&V@f)On5f)P(:_Z,5fK)^H&li-r8n,VJJm/YuBa8bH*lMp)KklB<7k5aE>q#B[\T`9WDK)^l2 +!%[aCqZ,XUli=]ulMp,LlMo<5p&EqLkQ'36li@"aK)^H&K)`+U!U^3_!:BgZs6K`^s8N)c!:'U5!8RVL +s6'I6s6KaHs+:9&s+:9nrrMNmnGqPJli7%cVZ5o]o`+[cdf@kskQ'36li=p&K)^H&K)b3;!U^3_!9*tE +!8dars6B[Ns6'IM!7:c1!8mhOs6K`Ys+:9&s,[0[]_):&!9*tE!5/?rs6B[Ns3q&?s5*e?!7q2:!<)qL +s+:9&s0;S(]^Ppgs7QEY!2TVp!:0^Os3q&&s7cQX!7q2:!9F03s+:9&s2t?A]^Pp[s6K^cs/#b]!;-oBa8bH*m/Q5Kmf:T3lN#iBq#B[\T`9WDK)^o3!K$pO +!;uoUs6K`us69RL!:9a9!:g*Es6B[9s6Kaas+:9&s+:9UrrIuXnc8%Vp&F@YU]9Z\m/PZ;f)PCBli>Z; +lN$#GK)^H&K)a!n!*8Uii;`-D!<8kpli?\Xq>]%HaoC]-fDk.:_Z,5fK)^H&m/I&dnGqMIli>oB`rGB* +m/Q5KnGp]2li>rCq>]a\T`9WDK)^o3!*8amr;baTm/Xg!kl9uLmJkf=mJkr@lN#T;li?t`K)^H&K)`.V +!W+D$s7H?W!8.>]i-erW'/%K)^H&mJd46#4_cNs6KaCs2P** +!:BgK!;?K1s6KaDs7u]]!2';es8E"Xs+:94rrLINo`4skhZ)pB^&Rf`1:s6B[Fs0r%(!7_%#s+:9orrJhpnc7PHliFO_#Ng&!!(^PlN"d$g&LjJZN#OVK)b6c>li?q_TE"Wcmf.n=K)`1W!W-R$!:'UV +s6K`]s6KaSs4dV"s763V!8@J>!94$gs7ZNDs+:9&s31KDqe5O#h>cgAV#Tc]o`+jhg]5+hmK!7egAgL> +_#N-gpAhQ"K)^H&mf*=bB^u/Zs6KaCs2P**!:TsK!;cc0s6KaEs82i^!1s5hs7QGTs+:95rrMIEoDnmk +h>cgA^&Rl[;g&LC=g]-R>qu<>hp&OO\K)^H&Zi:'m2Y$k5s7H?X!2TY]!:TsE!6kK6s6Ka? +s6B[Es1/1'!7h+$s+:9prrMIEnc7MGli7"cV>ol^o`+mihuL@gmK!7eg]-R>_#N3io`2>uK)^H&mf*== +&b5qXs6B[Cs2P**!:^$K!<)u0s6KaEs82i^!1s5is7HASs+:95rrL[_oDnmkh>cd@^AmEsli?PThuMd: +g&LC=g]-R>qu-1s6Ka@s69UDs1A=&!7q1%s+:9p +rrASZ!8[\A!!!"qs6B[Xs8DuW!4`'s!<3&Ss69U"s5!_H!4;cXs+::=rrASZ!8[\@!9!mss6B[Ts5O(Z +!4`'q!9*tUs69TUs8W,j!0[A6s,m<]SFZa\!8[\@!5AKss6B[Ts6Kaas8E#Ss4RGcd@iW$UknGq/?K)^H&c2Rh42=^b&s6K^c +!2]_]!;6Bjs6Kaas8E#+s6]md!8[\@!5JQks7$)rs+:9&s6osgmPXP8g]-U?i;^gslN$MUli?e[[f>[o +irArVlN!RWrrDQhP5g.6P5bN3nc/Xig]-U?^AmEslN$MUli>T9f`1:cd@qZ!Gmmf;hVK)^H&[/U,U +nGqhRoDe.WV>oi]o)J%V]`7O%li>lAlN#oD^]3a&f)L@%K)a*q!.XM=g]-X@!!&kqlN$VXrr;?cX8hVg +rW(gTl2\U!irAEH[/YaXK)b??!8R&Dg]-U?i;^gslN$MUm/Zk[[f>[oirAuWl2[LWrW)HgP5g.6PQ(X< +nGiOhg]-U?^AmEslN$MUm/YZ9f`1:oi]oDe.W]DqF$ +li>rCl2]cB_Z/s&f)L@%K)a-r!,qB-gAgO?!!&kqlN$VXs8VEcX8hVgrW(jUl2\QujT"QH[/YaXK)b?? +!,qB-gAgL>i;^gslN$PVli?bZ[f>[oirB#Xl2[OXquH6eP5g.6PQ(W$nGq;Cli=d"kl9rKoDe1Xe,S)# +m/Z#Cl2^Y[X8hGbn,J">K)`:Z!V@2u!9jISs6K`^s6B[Vs6Tfts7--V!8db@!9!mqs69U8s+:9&s3L]G +oG@#tgAgO?!!&kqlN$VXs8VHdWrMMfrrCpUl2\Quk5X]H[/YaXK)bB@!V@2u!8@J>!9!mss6B[Ws6KaY +s0hso!94%Xs6BZ\s7cTa!0[A6s-3N`Z1%bIs6Ka"s60LK!;-s+:9Z +rrB=n!9jISs6K`^s6B[Ws6K`ss7--U!8mhB!8mgrs6'I6s+:9&s3L]FZ1%bIs6Tdd!2]_]!;6?ls6Tfc +s6fse!9!nB!58Ess6'Hhs+:9&s760jmS*-Ng&LC=i;^gslN$SWm/ZeY[f>[oirB&Yl2[[\pAjaaOoL%5 +Q2^mQ9^r)_s4[M>!5AKss6B[Ws6Tg7s4IA$lm/X-cmf<=ei;`*C]`7uDlN$\ZZ2`tem/M\;K)`@\!;,^[kPt,Qli$lmJs3cmf<=ei;`*C]`7?uk5_deK)^H&oD\g_mf;#?lN#rE`rG?) +p&FCZoDc9!li?&F!<;?bW;lDgo`1$PK)_/:!6=O.!<:aPlN"a#kl9rKp&FCZdJql!li?#ElN$YYZiB.f +li2S:K)`@\!6=O.kPt,QlN!j_lN$VXm/XZrnc.qUiW&3Dh>b_!joEj0K)^H&dJj3emf:u>mf<=eVuQ&_ +pAY*mm/X*bmf<=eiW&3D]Dq@"joDUbK)^H&o`"pgmJtl=li?&F`rG?)pAaIZoDc9!li?&F!<;?bWW2Jg +p&L*PK)_2;!;l0a!<:^Oli=j$kl9rKpAaIZdJql!li?#ElN$YY[/]7glMlJ9K)`C]!;l0akPt)Plibe#joEd.K)^H&df8\7fDk:>rW&krlN$YY!!)EeVuQ2crW(pWlN"QsnGhVN +Y5a+RK)bKCm/Yci@ci<,-ci8Us +K)a:!m/Yc!lmJs0bmf<=eiW&6E])V=#joDO`K)^H&o`+:YfDk.:j8[1"lN$VXm/Z_W +[f>[oir9#Yli=-em/Zq^MZ8;.R/cORs8UaOlN"d$l2U&Lp&FCZd/Vbuli?#Eli?_Y\GtXjkPp/6K)`F^ +m/Z;Knc.nTWW)quli?_Ym/XWqnc.qUiW&6Eh#Ge%jT*U+K)^H&e,Se8f)P1=r;`erli?bZrrDKfVZ6)b +rW(sXlN"Nro`+"QX8deOK)bNDm/Y`;lN#uF`rGB*pAaL[nc-&tli?&FlN"'eli?k^M>r2-R/cORs8UaO +lN"d$kl9uLpAaL[ci;Ytli?&FlN$VX\c:akk5U&5K)`F^m/Z;KnGhhTWW)quli?bZm/XTpnc.qUirAouarW(sXlN"Nrp]':SWW.SMK)bNDm/Y]:lN$#Ga8bH*q#B^]n,Kirli?&Fli=9ikQ(P]LAul* +RK)URs8U^NlN"g%l2U&Lq#B^]c2ZGrli?&Fli?\X^&R-nj8X`2K)`I_li?2JnGheSWrE&!li?h\m/XNn +nc.qUirA?Fg],k)j8d@&K)^H&eGnk8ec5+=quEbslN$_[r;c?fV#Tl`rrD'YlN"KqqZ#RUVuMAKK)bQE +m/YZ9lN$#Ga8bH*q#B^]n,Kirm/Z/G!!)?cZN'%erW%ZPK)_8=m/[.cfDk.:_Z/m#lN$_[m/YE2f`1== +irAc>gAg.4aT$klK)a@#m/YW8 +nGrIeWrMAbq#C9mnc5Hbmf<@firA?F\GuL,iW,kUK)^H&pAaL[e,Sb7jT!:#lN$_[mJu\T[f>^pir8uY +m/XKmj8f2[K`?Z(RK)XSrr:RLlN"j&l2U)Mq#B^]bl?>qm/Z/Gli?YW`;ecrhuA<.K)`I_m/Z8Jn,M\R +X8`/"m/Zq]m/XKmnc.tVirA?FgAg"/i;gmtK)^H&eGnn9e,Sqli@%bec4t9_uK$% +lN$_[m/YB1f`1==j8\EFoDcf0i;ha7K)^H&]`7K6nc8OeXT.Sdq#C6lo)PNbmf<@fj8\EF\GlR/irGeQK)^H&p]'U\dJrP5jo^pj8],Zm/XWqirK)YK)^H&RfDaTrVtFJli=s'lMp/Mq#Ba^bQ$5pm/Z2HlN$PV`W+ruh#E!+ +K)`L`m/Z5ImJlPRXT/;#m/Zq]mJsQmnc.tVj8\HGg&L"1iW-jqK)^H&ec5":d/W\;qZ*_tlN$_[quH +m/[+beGnk8`;f*%li?h\mJtH1f`1==j8\HGo)Hf2iW.^4K)^H&^&RF!jT"WIli=-e!!)Bdq#Ba^ZN'Ip +m/Z2Hli>`=iW%m;_>f,eK)aF%li>E4o)SUeXT.Veq#C6lo)PNbmf<@fj8\HG\c;[0j8bhPK)^H&q#B[\ +d/WG4k5WL%li?k]mJuVR[f>^pjT#2Zmf9ouiW/lUK)^H&S,_jUr;Y:Hli>!(l2U)Mq>]j_b5^,om/Z5I +li?SUaoC?#g&H[(K)`Oam/Z2HmJlMQXT&8#m/Zt^mJsNlnc.tVjT"QHf`0t2iW-doK)^H&f)P+;cig-fUAsW]rrD0\lN"QsquGjZSc=?m/[(aeGnh7`W,0%m/["_m/Yg0gU&XN\rrD0\lN"TtqZ,dZ +SH"3@K)bWGm/YH3li?5K`rGE+qZ#s`li4Holi?/Ir;c9d]`6pjq>Z'HK)_>?m/[(ae,S_6`rG9&m/["_ +mJtB/g&LC=k5X]Hnc-o7i;hF.K)^H&^AmO"j8\KGlN"'em/["_mJsKko)J%Vk5X]Hf`1.7i;gOjK)^H& +fDk1;cN!M:p].Grm/["_q>g0gU&XN\rrD3]l2\Quq#KXZRfA!>K)bZHli><1li?8La8bK+qu?'alMn?n +li?5KqZ-*c^]33lpA]aEK)_A@m/[%`df8Y6`rG<'li?q_mJt?.g&LC=kPsfInGgl8huM:,K)^H&^AmR# +irA?Eli=3g!!)Bdqu?'aYQ+1nli?5Kl2]H9l2TZA]DmK_K)aI&m/Y?0p&OgeYQ*qhqu?Hlp&LccmJm4e +k5X]H_uK<.lN!=PK)^H&qZ#m^bQ$o/l2Sg(li?q_mJuPP\,Ygqk5Y;Yn,UB+h#R-JK)^H&ScA$Vqu>(D +li>*+l2U)Mqu?'aaT'rnm/Z;Kl2^>ReGn>)e,P%"K)`Ucli?&FlMp2NY5dkhqu?'aYQ+4oli?2Jl2]H9 +n,M2D\Gq0\K)aL'm/Y*+kl:#Mr;Z0ba8alnli?2JlN$DRf`0_, +d/S^tK)`Xdli?#ElMp2NY5dkhr;Z0bY5e+nli?2JlN#N9nc.AE\,V'[K)aO(li>3.p&OgeY5dkhr;ZNl +pAgldm/R+dk5X`I`rGK-mJrOPK)^H&qu?!_aoC`.l2Sd'm/[(amf;SO\Gtmqk5Y;YnGpc4fDtIAK)^H& +T)\-WqZ"qBm/Y3,kl:#Mr;Z3c`rFcmli?2JlN$DRh>c+-ci8UsK)`Xdli?#El2U,NY5dkhr;Z3cXoJ"m +li?2JlN#N9pA`bF[f:sZK)aO(li>0-pAjmeYQ+"jr;ZKkp]-ueli7"ckPsiJe,SA,n,S[PK)^H&qu?$` +aT(T,lMnm(mK!1bmJuJN\c:sqkPtAYnc7/=ciES8K)^H&T)\0Xq>\hAli>-,kl:&Nr;Z0b`rFfnlN$,J +lN$AQk5Wd.cMrLrK)`Xdm/Z)El2U)MYQ"V&mf<:cmf9Hho`+4WkPsiJf)G^Md/^KPK)^H&gAgL>aT(u7 +p&M8qmf<:cpAk!hTE"6X!!)3^lN#N9h>m-IOT0q4K)bcKli>-,li?>N`W,B,r;Z3ckPr*mlN$,Jq>g'd +f)O(smJhekl9rKmJl\UaoKTaK)^H&_>ij%i;`'AlN"0h +!<;Ngr;Z3cX8hhllN$/KlN#`?q#JhCZ2]FUK)aR)li>-,pAjjdYQ+(lr;ZHjq>d,eli7"ckl9rKh#Gt+ +oDjsPK)^H&r;Z*`aT(Q+li4p'nGrLemf;MM])V'rkl:DXo)R_K`W5B*K)^H&T`=?Yq#A_@lN#',k5XrO +r;Z3c`;eWmlN$/Kl2^5Oo`)o2b5[(nK)`^fli>rCl2U&LYlFb'nGrLemf9Egp&F=Xkl9oJi;`HMdK$QP +K)^H&g]-U?a8bl6o`2/pnc8Ufo`4ggTE"3Wl2TuJj8[I+o`1$PK)^H&rVu3aa8bH*li4p'nc8UfmJuDL +])V'rl2UJXo)RhN_uT-'K)^H&T`=?Yq#A_@lN#',k5XuPr;Z0b`;eWmlN$2LklC,Np]&/3ao?tmK)`^f +li>rCkl9rKZ2ae&o`4pimJs9ep&F=Xl2TuJl2U)MeGucPK)^H&g]-U?`rGf6oDl#no`4pioDnagT)\*V +l2TuJl2Sm+pAg0PK)^H&rVu3a`rG?)m/Os&o`4pimJuAK])V'rl2UJXo)S%T^] +li>3.irAcRr;Z-a_uJQmlN$/Kl2^2Nrr9e7`W(PiK)`agli>oBkPslKZ2a_$p]16lm/X0dpAaFYkl9oJ +l2U&Lf)VoPK)^H&h#H^@`;fW5oDkrlp]16lo)SXfTE"3W!<;<`l2^)KaT2,:MZ8;.K)biMli>!(li?DP +ZiBCmjSujllN$/KpAjgcli4d$jo9r4K)_PEli?e[cN!52b5^#lm/Y$'h>cd@kl9oJm/I(c_#VCQK)^H& +_uK''hZ)d=li=g*eTE"H^r;`DglMpqblMp)K +nc&Xjs8U";quDNPK)^H&s8VEc_Z/s&mJjNmmJu;I]Dq0sl2UGWoDnF]!W`9#^B!?pK)^H&UAsQ[pA`D; +li>6/ec5%;_>i?klN$2LklC8R"9AK%!!'h8_Z,5fK)`dhli>lAk5XcJZN'Cnm/X*bp]'OZl2TuJp&EkK +gAn2PK)^H&h>cgA_Z0H4o)PH`nGrLfT)\*Vs8VEbklCDV]E%m1LAul*K)blNli=p&li?GQ[/]Lnj8Zdl +lN$2Lo`4Xbp&DN%j8X`2K)_SFli?bZbl@#0bl?;pm/Xs%hZ)mAlMp&JpAagd_uRRPK)^H&`W,9)h#HL9 +li=BlnGhkUVuQMklN$5MkQ(>Vh#Q72VZ28JK)a^-li=j$qZ-0eUAs]_rW&MhlN$tbm/Q8LpA_`)rr@`P +K)^H&!<;Bc_#Na$mf0]pm/Z/G^&R?tlMpJVp&Oje\H(OeK)^H&U]9Z\p&E89li>90fDk4<_#Ni@jo=ZIZiBOpm/X'aq#BUZlMp)Kp]&tJhZ0JPK)^H&hZ)pB_#O93nc5Ea +n,WIgScA!Urr;?bl2^SY])_j1K)^H&K)b0;^]3X#mf0]pmJu5G^&RBul2UAUpAjsf])^XdK)^H&V#Tc] +o`*/8li>90fDk7=^]33klN$2Ll2^SYo)Ql4])RB^K)`jjli>f?jo=WH[/][rm/X$`q#BX[lMp,Lp]&nH +jT(nPK)^H&huE$C^]402nGoBbmf<@fScA!Urr;Bcl2^SY]`@s0K)^H&K)b0;^]3U"n,Kirm/Z,F^&RBu +lMpGUp]1'g]`?acK)^H&V#Tc]o`*,7li><1g&LF>^Am-kl2^,Ll2^VZnGpi7[JtjYK)`jjm/Yl?jT"QH +[/]^sm/X!_q>]^[lMp,Lq#AtHk5_%PK)^H&huE'D^&S!1nGoEcmJm4eSc@sTrr;Bcl2^VZ^&\!/K)^H& +K)b3<^&RF!n,Klsm/Z)E^AmHulMpGUq#L0h_#W!bK)^H&V>ol^oDd#6li><1g&LF>^Am-kl2^,LlN$\Z +nGpr:ZN#OVK)`mkli>c>jT"QH[/]^sm/X!_q>]^[lMp/Mp]&kGl2[7PK)^H&i;`-D^&S!1n,TBdmJm7e +SH%jSrr;Edl2^SY`;oK/K)^H&KDtoOm/Xj"lN$GS\GtsshZ(=il2^/Mnc8Icp]&24d/S^tK)_\Ili?YW +bQ$l.cMuVumJsp"i;`'Bli65Mp]'a`eGucPK)^H&a8bK+gAg45li=Hno`+:YU]:2jl2^,Ll2^SYfDt@? +PlH@8K)ag0lN"Ttr;c`=j8\EF +[f?%#m/Wm\qu>p]lMp,Lp&E\Fo)OmPK)^H&iW&6E]Dqg0mf9Bfm/[1dT)\'Ur;Z6cl2^MWb5gr0K)^H& +K`D&PmJsm!lN$JT])V0uh#G1il2^/Mn,W:bp&EA=`rCYjK)__Jli?VVb5^c-ci;f#mJsiuirA9Dli62L +p&FR_hZ0JPK)^H&aT(T,g&L+4lN"Bnp&FF[U&Y#il2^/MklCDVf`:dIMuSD/K)ag0li=WsrW)BeX8hPe +rr8Vjl2^_]nc.hRo`*JBir=W1K)^Q)rW)Be\c;!rnc-6$m/YrA_>id#li6DRqZ-9gecB3h>cjB])Ugjl2^/MklCAUnc7bOT)XEBK)`smli>]TfDsn1K)^H&L&_,Pmf9oulN$MU]Dq:!g],+i +l2^/Mmf<4boDdGC^]/ocK)_bKli?SUaoCZ,d/Vr%mJsftj8\EFli62Lo)J:]mJrOPK)^H&b5^f.fDjk1 +lN"EopAaO\T`=rilN$8NklC;ShuNZSK)^H&K)am2li=QqrW)?dXT.\grVrMilN$e]o)IqSo)IVJg&H[( +K)^T*r;cig$li6AQquH9ej8cReK)^H&W;l5bn,LK/lN#?4h>cmC\c:^ilN$8N +klC8RoDnC]P5g.6K)a!nm/Y`;iW&3D\Gu:&mJrp[r;Z'_li62Lnc.YMq#>sGK)^H&j8\KH[Jp4,m/X9g +mK!4cT`=^'dklC2Pl2]63K)^H&L]@8PnGousli?YW]Dq:!g],.jlN$8Nm/[(bn,MYQYQ'4SK)_hM +li?MSa8bK+dJr&&mJsftjT"NGli62Ln,N%\p&L*PK)^H&bQ$o/f)O\.lN"Kqp]'X]TE"ojl2^2Nk5arM +mJueWK)^H&K)ap3li=Hn!!)?cYQ+"jr;WJjl2^Y[o`+(Smf2\Tci8UsK)^W+quH6e[K#Omo`)T(mJtu@ +_uK!%m/QDPquH0bmJsBhK)^H&WW2;bn,LE-li>K6hZ*'F[f>Ihl2^2Nk5alKq>^NqK)^H&K)a'pli>T9 +huE$C\c;F(n,T$Zrr;6`m/Q5Km/Qn^kPp/6K)^H&jo=ZIZiB@lYQ+(lqZ!8hl2^Y[o`+(Sm/Qn^`W(Pi +K)^Z,qZ-0eZiB@lo`)W)mf;#?`;f*&li6;OqZ)HPK)^H&X8hJcmf1<,li>K6huE-F[f>Lil2^/MjoFNC +K)^H&K)a*qlN#K8huE$C\c;I)mf8pYs8V?ali6)Ibl<:pK)^H&k5X`IZiB=kZ2a:nq>[2hl2^VZp&F+R +WrI\NK)^]-q>g'dZiB=kp&D`*n,V)?`;f*&m/QAOqZ)HPK)^H&X8hJcmf1<,lN#E6huE0G[K#Chl2^2N +jT+EBK)^H&K)a*qlN#K8hZ)pB])VR*n,T!Ys8V?am/Q,Hc2WCqK)^H&k5XcJZMsq)li=r2-K)_nOli?GQ`W,6(eGnJ,n,Tiq +k5X`Im/Q)Gk5U&5K)^H&cN!21eGnD*lN"Qsq>]paS,`NglN$;OirI@(K)^H&K)b$6lN"6j!<;?bZiBLp +q#@)glN$\ZpAa.QX8deOK)^`.q#L!dZ2a+ipA_l,n,V&>`W,6(m/Q;Mq>cBPK)^H&XT.Vem/P')lN#H7 +i;`9H[/]=hlN$;OiW/-@K)^H&K)a-rli>N7hZ)mA]Dq^,n,SsX!<;?bm/Q&Fc2WCqK)^H&kPslKZ2ak( +li=Emn,W4_V#T][pAamei;ftZK)^H&MuWPPo`2/pli?bZ^]3d'ec3Yhl2^2NklCMZMZ8;.K)_tQli?AO +`;f0(eGnM-n,Tfpkl9oJm/Q#EkPp/6K)^H&ci<>3df8/'li=ZtqZ$$bS,WHgl2^5OhuM(&K)^H&K)b'7 +li=9is8VEc[/]Uqp]%)iklCGWq#B7PXT*nPK)^c/p]0seY5dhgpA_o-n,V#=a8bB(mJlAMq#HK6h>cd@]`7m/n,SpW!!)of\p&Fgei;fqYK)^H&MuWPPo`2,oli?e[_#Np)e,RMhklC,Nk5b>Y +M>r2-K)`"RlN$8N_uK''ec4Y/nGoiolMp)KmJl)Ek5U&5K)^H&d/WD3df8,&li=]uqu?0dRfEBflN$>P +huM%%K)^H&K)b*8lN"0hrr;]@QX8deOK)^i1p&OddXT.Vep]&)0n,Ur;b5^Z* +m/Q5Kq>cBPK)^H&YQ*nglMnd%li>T9j8\TKZ2a1jkQ'uLhuMp>K)^H&K)a6ulN#?4g]-U?^&S$1nGo*Z +quH'`m/Q#Ebl<:pK)^H&lMp/MYQ+S$li=QqnGr4]WW2,]o`+aei;fnXK)^H&NW8\Pp&M/nli?h\_>j$* +df7Mjk5alKk5bAZM#W),K)`%SlN$5M_>im&f)Oe1nc5lnmJl>LmJl)Ejo9r4K)^H&df8V5d/Vi"m/Xj" +r;Zc +q#A52nGpu:bl?i+mJl8JqZ)HPK)^H&YlF"hl2SU"m/Y`;jT"`MYQ+%jk5aoLhZ2d_o)JXfh>jSUK)^H&NrSbP +p].8mli?k]_uK3+dJqJkk5aoLj8f&WM#W),K)`(Tli?8L_>ij%fDjt4n,TZln,MPNmJl#Cjo9r4K)^H& +df8Y6ci;`!li=d"rr;KgScAKcmJuYSh>ke"K)^H&K)b0:li=0fr;Z*`]DqC$o)GfkjoFuPr;YURWrI\N +K)^l2o`4aeW;l2aq>\A4nGpr9cN!#,mJl5IqZ)HPK)^H&YlF%ikl8Hum/Ycol^qZ"P7nGpl7dJr;.mJl/GquDNPK)^H&ZN'7kk5W6sli>]<1f`1==^]+<6nGo3]o`4L^m/PlAbQ!1oK)^H&mf2SQX8i%rm/Xm# +nGr(YYlEebn,NCeh#OGSK)^H&OoOtPq>d>km/["_`W,H.cMu>mjT+ZIiW/lVL];u+K)`1WlN$)I^AmR# +g&L78nGoZjp&F+Rm/Pi@jSsi3K)^H&ec4t9bl?;pm/Xs%!<;QhT`=Wanc8%Vg]5OtK)^H&K)b9=li='c +q>]g^^]3g(nGfcnjT+`Ks8UjSWW.SMK)^u5nc8OeUAsT\qu=\9nGpi6e,SP1li5oDquDNPK)^H&[/]Im +jSusom/Yi>kl:/QX8hkmjoF`Ig]6F8K)^H&K)aF%li>6/fDk4<_#Np)TE"N`o)S+Vg]5OtK)^H&K)b<> +li=$bq>]g^_uK-)n,K]njT+]J!<:aQWrI\NK)_#6nGrIeU&XK[qu=eli6AQX8hnnjT+ZIg&U77K)^H&K)aF%li>6/fDk4<_uK]9nGo9_nc8:^m/P`=bl<:p +K)^H&nGheSWW2eom/Y'(mJu_UZiB+em/P`=WrI\NK)_&7n,W@dU&XK[qu=e3.f)P+;`;ff:nGo<`nGr4^m/P]< +bl<:pK)^H&nGhhTW;lYmm/Y*)mJu_U[/]4fm/I%cf`8&PK)^H&PQ1+Pr;`Jim/[(aaoCc/c2ZDqjT+WH +h>mEQM#W),K)`:ZlN#uF^&RI"gAgL=mJs]OVli5T;jo9r4K)^H&f`17;b5^&mm/Y*)rW)HgU]9f` +p&OFYfDs.qK)^H&K)bB@lN!m`p]'X]`;f3)nGfrsjT+TG!!([PWrI\NK)_)8mf<=eScA*Xr;Xn=m/YH3 +f`1%5lMo]@qZ)HPK)^H&[f>[oir?[kmJtu@li6>PXT/.sjT+TGfDt%5K)^H&K)aL'li>0-ec5":`rGu; +n,TBdm/Zn]lMp&J!<;Qhbl<:pK)^H&o)J"UVuQMkm/Y0+li?PT\GtUilMpkal2UhanGoThK)^H&Q2g7P +rW&Mhm/[+bb5^f.cMuVuj8eKFkPtV_pAk'jM#W),K)`=[lN#rE]`7@!g]-X?li=-er;YjYlMp&Js8VQg +k5U&5K)^H&g&L@?2g]-@8lMp&Jrr;]mq>cBPK)^H&\Gtgoir?[k +li>i@m/QDPXT/8!jT+TGkQ(V^n,VVNK)^H&K)aR)l2\s+ec4t9a8c)r2-K)`@\lN#oD]Dq6uh#Ha@lN"'err;'[l2TuJrVu?ek5U&5K)^H&gAgI=aT'fjli>*+ +r;c9dXoISbr;c$\klC\^n,U`5K)^H&K)bKClN!d]p]'R[a8bH*nc-<&j8eBCr;c3brVu?eX8deOK)_2; +li7"cS,_gTrr:.@lN#92huDa;kPscHrVuTlq>cBPK)^H&\c:sqi;^IilN#c@mJlDNYQ"S&jT+KDkQ(P\ +nGq_OK)^H&K)aU*lN#!*ec4q8aoD8=mJsHjk5bJ]kPs`Gr;Z9ec2WCqK)^H&o`+4WV>p;ilN#',klC;S +^Am6okPtG[m/[(anGoWiK)^H&QiHCP!!&Jfli@(cbQ$c+dJr8,i;i'@klCV\p]1-jM>r2-K)`I_klBZA +]Dq3th>cmBkQ%shr;bpZkPscHqu?0dk5U&5K)^H&h>c^>a8aZhli>0-quH*aZiB(drW)-]klCV\nGpi6 +K)^H&K)bQEkl@R[pAaIZaoCN(o`)i/huMs?qZ-'bqZ$'cX8deOK)_8=l2[7Pli@(cbQ$`*df8G/huMs? +klCS[p]1-jM>r2-K)`I_l2]`A]Dq3th>cmBk5_sjqZ,aYkPscHqZ$'ck5U&5K)^H&h>ca?`rFNfm/Y9. +quH$_])UXf!!)3^kQ(JZnGpi6K)^H&K)bTFkl@OZp&FCZaoCK'p&E&3h>la=q>fsaqZ$'cX8deOK)_;> +kl@+Nm/[1dbQ$])e,SY3h>la=kQ(JZp]1-jM>r2-K)`L`klBW@])V-th>cmBjoE$npAj@Vkl9iHq>]pa +kPp/6K)^H&hZ)j@`W+Eem/Y9.quH$_]Dp^f!!)6_kQ(GYn,Uc6K)^H&K)bTFl2[UZp&FCZaoCK'p&E)4 +h#Q[=q#Kmaq>]paXT*nPK)_;>l2UhaR/cLQ!<:7Bj8da1li5`?kl9iHp]($hq#HoBmJl5I^]3s,kQ'iHkQ(AWnGqbPK)^H&K)a^-l2\g'e,Sb7b5_A>klAKug]6R?l2^kaQiHFQ!<:7BirI[1mJkrAkPs]F +p]($hq#Hb%cm/Z#CmJl2H_Z03-l2^#Ik5b8VnGqbPK)^H&K)aa.l2\d&df8\7b5_A> +k5`U'f)YjNlMp#IpAaX_cMrLrK)^H&q#BUZUAslcm/YVnc8C`nGoZjK)^H&S,_aR +s8SGcm/R.dbQ$Q%fDkFAf)Y%7k5b5Uq#L3jMZ8;.K)`Oal2]Z?\c;$shZ*!ChZ1q$li?>OkPs]FpAaX_ +kPp/6K)^H&i;`'B_uJ0bm/Yprr;9`k5b5UnGpl7K)^H&K)bZHl2[OXo`+:Yb5^?!r;Y4F +ec=n5p&OX`pAaX_XT*nPK)_A@l2^h`QiHFQ!<:7BgAp+1p]&_CkPs]Fp&Fgfp]-6PK)^H&^]3R!g]+ha +m/Z#CmJko@eGnb5li?5Kk5b2Tn,V\PK)^H&K)ag0l2\^$df8\7b5_A>huM:,e,]IIli6,Jp&FL]ci8Us +K)^H&qZ#g\T`=W`m/Y?0g&V*Pg&KP%kPt/SoDnO`n,TTjK)^H&Sc@sTrVr2`m/Y?0f)Xh1q#AhDkPs]F +o`+^ep]-6PK)^H&^]3R!g]+e`m/Z&DmJkcLk5b/Sn,V\PK)^H&K)ag0l2\^$dJrS6bQ%J? +f`:%3cN*kBm/Q5KoDe=\ci8UsK)^H&qu>m\T`=W`m/Y?0g&V!Mir@=)k5Y&RoDnL_nGo]kK)^H&T)\$T +rVr2`m/Y?0e,\V1rr::Ek5XTEoDeXep]-6PK)^H&_#NX!g]+e`li>uDmJkQ6m/Pf?n,VPLkQ(2Rn,V_Q +K)^H&K)aj1l2\[#dJrP5bl@S@ec>(:aoM8;m/Q8Lo)J1Zd/S^tK)^H&qu>p]TE"N_li>90g&UmJm/P3. +jT"iPo`4R_n,TWkK)^H&T)\'Ur;W&^mJm4ebl>uhq>^Eorr;`ncN*&+kQ(/Qq>g6iN;nM0K)`[eklBH; +\,Ygqi;`3EcN*e@rW)rtec>4?jT"EDnc/(Yl2QA8K)^H&j8\?D_>hm^m/YB1quG4Hq>^Eorr9tid#g&JP]li?#EmJlbX!<8kqnc7bNk5b&Pn,V_QK)^H&K)am2 +l2\X"d/WG4c2[\ANWAbPn,MPNnGhtXd/S^tK)^H&rVu*^T)\B]li><1g&S>Wj8\WLpAj^_n,TWkK)^H& +T`=6Vqu;r]mK!7ec2Y9RdK&>-k5b#Oq>g6iN;nM0K)`^fklBE:\,YaoirAEGQ2pUYirA0Amf2bVlMlJ9 +K)^H&jT"KF^]2[\lN#61quDfYoDe=[k5arMn,Ul9K)^H&K)bfLl2[CTo)J"UcMuSuZ2inan,W4`mf2bV +YQ'4SK)_MDl2^\\PlL1PrW(7D\,b%ZiW&*AmJm%`p&L*PK)^H&_uJs$f`/D[li?&FmJiIPpAj1PkQ(#M +n,VbRK)^H&K)as4klAKuci<>3cN!eBOT=tPnGh\PmJlYUdJnguK)^H&rr;3_ScA6[li>?2mfZ]Zmf<=ecN!>5s8U:CfDsh/k5aoLqZ-9hNrO_2K)`agl2]H9[f>[o +irAEGmfmJlVTli2S:K)^H&jo=TG^AlOZli>?2quH?hrVr_pmf2kXk5alKmf:f9K)^H& +K)blNl2[=Rnc.qUcN!>5rVu?e[fG=cmK!(`m/QMSYlB=TK)_SFl2^VZPlL1PrW(7Dmf<=dc2cMthuDj> +m/Qq_o`1$PK)^H&`;f*&f)N/Xm/Z/GmJlVTr;Wl!rW(dSjoFcJmJuVRK)^H&K)b!5lN"TtcN!83cN!eB +oDnghWW;AboDdqQm/QJRe,P%"K)^H&s8VBbRfDmWm/YH3mf<:cnGp-#h>cjBq>fm^mJsNlK)^H&UAsNZ +p]$HWn,WFfcN!;4r;Y+Dh>l@2joF]HquH?hO8jh3K)`gil2]B7[K#UoirAEGmK!1bXoJG%h#HL:lMp;Q +m/M\;K)^H&kPsfI]`6:Wm/YH3quHB3quHB3mK!+`oDlT*g]-R>quH!]mf9WmK)^H&V#T][pA^?Vn,WCecicU;kl:&NmJheB3quH[i&jT"rRjoFWFmJtc:K)^H&K)b-:R/c[Uli>B3mK!(_o`2f.g&L=;r;c']mJsQmK)^H&V#T`\p&C3T +nGrLfciXWK)__Jl2^JVP5k%Pr;b1DmJuhXg&U@;ec4b3jo>8Znc4gPK)^H&aT(N*df6]Sm/Z2H +mJlSSo)HQ,p]'.NjoFNCmJu\TK)^H&K)b-9l2\Bpc2[,1ci]OVjo=`Kec17$K)^N( +rrDBcQiHOSli>B3mJuhXr;b"@df8J1rrD0\mJsTnK)^H&VZ5o]o`(*SnGrIecijT"WJmf.n=K)^H&lMp,L\c9qSli>B3r;cBg +n,LT3f`1dIjoFKBmJtf;K)^H&K`D&PliXWK)__Jl2^JV +P5k%PquG(CmJuYShuN9Id/W2-irAuXnGnaPK)^H&aoCW+dJpTRli?,Hm/QJRmJkN5n,MDIjT+aXirAEHf)L@%K)^Q)rW)rW)HgP5g.6K)`smlN#<3[/]Fl +jo=]ImJuPPec>(:j8\3@iW&K)^H&li68N\,X\Pli>E4r;cBgkPsWDrr2rubQ%M?jT+6=mf:r= +K)^H&LB%2PmJrOPmf2VRd/WM6mf3.`jT,;[!!(%=jT#;\iW&?H[/YaXK)_eLl2^DTOoOtPqZ,"CmJuGM +jo>A]rr2ru`rG-#i;`fWnGnaPK)^H&b5^`,d/UHPlN$)IlMp;QjT"TIh#HI8jT+3B3 +mf;hVU]9EUr;Y^Tm/XWqK)^H&XoISbn,JLLo)SUeciRRmJs`rK)^H&XoISbn,JIKoDn^fcN!A6c2YiajT*s5m/WIPK)^H&d/W;0bl=sJ +m/Z;Kl2U5QX8hGajT*s5m/ZbXK)^H&K)bEAkQ%shb5^i/cMmkEnGndQ!!)-]f`1==gAcd)K)^f0pAjaa +OoOeJm/YH3mf;kWVZ5`Xq>]@Pm/XZrK)^H&Y5d_dmJi7IoDn^fcN!>5cMtucjT*p4m/WIPK)^H&d/W>1 +bQ"jIm/Z;Kl2U2PXT.ScjT*p4m/ZbXK)^H&K)bEAklA$hb5^f.ci3tFn,SaRrrD3^f)P.B3mf;kWVZ5`Xq>]=OmJscsK)^H&YQ*edmJi7IoDn[eciB3!!)KgQN-pakQ'05mJtu@ +K)^H&NrSbPoDjsPm/QDPci5RK*0bklB34 +mJu#AK)^H&O8nhPo`1$Pli6>PcN!;4o)G`ij8eoRh>cmC\c79]K)`.Vk5aiJNrSbPq#J_?mJtW6bl?`( +eGoRKmJrURK)^H&eGn\3aoAUFm/Z>Lkl:&NY5dqij8dX.mJunZK)^H&K)bQEk5_adaoC]-cicmC\c79]K)`1Wk5afINrSbPp]/Y?mJtW6 +c2Zf(eGoRKmJrURK)^H&ec4e4aT&LEli?8LkPsuNY5e"kirII+mJuq[K)^H&K)bWGk5_[baoC]-ci4"F +mf8pYq#K^\d/WM6h#E!+K)_#6nGr:`N;r5Dli>?2mf;qYXT.;\p&EhImJsiuK)^H&[/]:hl2QeDo`4ae +cN!>5d/VGlirIO-rr;BdR/_dB3!<;KfT)\Qcli>B3mJu&BK)^H&P5k%PpAg0PlMp2NcimJtZ7d/W,+dJs4GmJrXSK)^H&fDk"6`rE7Bli?;MkPsrMYQ+1nirIC)mJuq[K)^H&K)bZH +k5_XaaT(T,d/X.Gmf9*^o`4C[bl@)2h>`*,K)_)8mf<.`MZ;uAli>?2mf;tZYlE\_o)IJEmJsm!K)^H& +[f>LjkPpPAp&OgecN!>5dJqYpiW.@*rVu9cRK%m=K)aL'k5`L$Y5dhglMp#HmJsKkpAa(ObQ$u1pA]aE +K)^H&qZ#aZX8g6?li>H5s8VKeV>p,emf:Q2mJu)CK)^H&PlL1Pq>cBPl2U)Mcili?>Njo=cLYlFLuhuLn! +mK!"]K)^H&K)b`JkQ%X_a8bK+dJs4Gmf99cnGr%YaoCc/hZ&3-K)_,9mK!+aM#Z`>li>?2mJuq[[K#.b +n,M,AmJsp"K)^H&\,Y[mjSt2=pAjmecN!;4e,S&"huM%%r;Z0bRfA!>K)aO(klAU#Y5dhglMouGmJsNl +q>]@QaT(Z.p]#jFK)^H&qu>m\WW1!
  • K6rr;?cX8hVgnc6`1m/Z&DK)^H&QiHCPquDNPkl9uLciB3m/Zk[\,Y=cmf1u?mJss#K)^H&])Upnj8Y&;p]0secN!83ec4D(h>kb!qu?$`SH"3@K)aX+kQ&Eu +XoI_fli6&Gm/XKmrVt^S`W,<*q>Z'HK)^H&rr;0^VuOd:li>K6rVu6bYQ*qho)Qc0m/Z)EK)^H&R/cIP +rW%ZPkl9uLc2[23p]%l*h#QgAf`1@>^AifbK)`F^kQ'WBMuWPPo`38:mJtf;h>c:2b5_>ip'i;\E/ +K)_8=l2^haK`C68li><1mK!%^^&QmglMoN:mJt!$K)^H&]Dq'piW"f8q#L$ec2[23f)OY-h#POrqZ#s` +SH"3@K)a[,kQ&BtXT.Vem/Q)Fm/XTp!!(jU_#Nd%qYu0IK)^H&!<;6_V>nO7li>N7qu?$`[f>LjpAi#/ +m/Z,FK)^H&RfDUP!!%ZOkPslKc2[/2q>\2/h#Q^>f`1==^]/ocK)`L`kQ'Q@M?!DPoDm/9lN#Ws^]`7!l +p]/&.mJu5GK)^H&S,_[PK)b!5m/YB1l2^e_`;eKjkPs06mJt$%K)^H&^&Rg-fbl?r.g]-F9 +f`9"kq>]j_Sc=fFR^&RL#qYu0IK)^H&kl@LY`;f0(eGoCFklAU# +huNTR]`7@!ir=W1K)_A@klCb`K)b!5li><1klC__`W+Tkk5X'5m/Xs%K)^H&^AmEth>`?3q>g*ec2[#. +h#HR;f`8tjq>]g^T)XEBK)ad/klA?qWrMGdmJl,EkQ&^(o`3tO]Dq6uqu;9JK)^N(rrD]XYaT(#qqZ+8.m/Z/GK)^H&Sc@mRs8R]Njo=]Jbl?l,!<:1@ec=h3fDk4<_#K#dK)`UckQ'H=M#[>P +o)R#7jT+9>mJk`;_>j<1m/WdYK)^H&iW&-B])Sf1m/ZPRi;_m=c2[A8j8c^im/[(aK)^H&K`D&PlN!XY +_uK*(eGo@EjT*R*g&V'O\Gtprj8X`2K)_DAklC__K)as4li>90kQ(GZfDj;"iW%L/m/Y!&K)^H&_#NX! +g]**0qZ-0ebl?W%k5Y#Pdf@/_q#B^]TDsNCK)aj1klA9oWrMDcmf22Ei;hL0mJuAL[f>^pr;VBKK)^Q) +rW)9bT`;q0li>T9q#B1Nh>bn'!!'G,m/Z2HK)^H&TE"*TrVqKLjo=ZIbl?l,pAj%Ld/`,)f)P+;_>f,e +K)`[ekQ'B;M#[>Pnc6o6h>lg?p&ED>^An!.m/WdYK)^H&j8\ + +grestore % PSGState +newpath % image +127.8 -.15 mo +127.8 174.75 li +160.05 174.75 li +160.05 -.15 li +gsave % PSGState +clp +[1 0 0 -1 0 174.6 ] concat +/0 map_csa setcolorspace +[32.25 0 0 174.9 127.8 -.150398 ] concat +snap_to_device +Adobe_AGM_Image/AGMIMG_filter currentfile /ASCII85Decode filter /RunLengthDecode filter ddf +bdict +/ImageType 1 +/Width 215 +/Height 1166 +/ImageMatrix[215 0 0 -1166 0 1166 ] +/MultipleDataSources true +/BitsPerComponent 8 +/Decode[0 1 0 1 0 1 ] +/DataSource [ +[AGMIMG_filter 215 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 215 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 215 string /readstring cvx /pop cvx] cvx +] +/NComponents 3 +/HostSepColorImage false +/SkipImageProc {false} +/Operator /image +edict +img +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&c2ReC\,V'[o`"pjqYu0I +Z2Xh'e,P%"K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)_tQ!!(XNK)a@# +!!'8'K)b`J!!%lU[K#Cikl687h#HO;_>im%RK)OPrW%ZP`W+ZmjSsi3m/Pf?^&O>smf;_TQN+]!dfB"> +K)as4df@VlNW8\Ph>jDP\,XYPK)a^-bQ-AsLB%2PciCEPY5d#Po`1$Pec3_kk5U&5r;Xk=^]1/1h>lg@ +RK(M2`rPZ0K)bHB`rO9^T)[mPhZ2"&!VP:$s2G#U!;ulHrrMfKZ2a1j_Z86equ6]ih=U`Ls4.27!7CfJ +n(.E]s4%(_!:p0JrrVZ?r20Mks1SK\rrVZ?r;Q_ms5!b4!7UrJpsf>fs18:0s4@8NpoXSfs189^s8N#u +pn@`M!7V"urrE&Ss2=rP!;ccGrrE&,s6K]q!9!nMrrE%ls6fs/!5&9Cs2Y3/!0mNCs0_pos,@!P!5/BP +s0MaP!9=-Ps4[LZ!;HMIs8E#(!7ChJs478(!36(Js0)J'!/(=Ks/c:Vs6Tcqs2tE&!20ALs/c:rs+p^P +!3uUPs0)IP!8.@Ps474P!!!"Os8W+t!8[[Qs4dV!!4MpQs0Vk!!0@0Ss.o_Zs.B>P!5\`Ps2P)P!9jKP +s6ou_!:p/Vs6K`q!6bDVs2=uq!2TYXs3UfHs8E#krrE-"iW/rWO8nhPh>dQUrW)Wk!cNTr;bIMk5XQDiW&9E_Z/*cmf3+_joD7XlMp;Q#6=f)!W`9%!V-6H +s60O_s-!EP!!rW*!<<*$!<<-$nc7MGklB?8\c;*u#6=f)!W`9%!V-6^s6K^L!3lL_s6fsf!WE-#"9&?- +!s/N+!#0!W`9%!8%8K!:BiPrrE)g!!iT,!X&`4 +#71_9#RUe@"p>#0!W`9%!8%88!:Bfbs6p!o!$2t29#6kA8!s/N)!!**#fDk(8`rFEcnc8Xi +#Qk26#n.4Q&J>!T#n[[V$OR%@!s&GWs8)c\!!!.qs7cQa!<*!)!sAf7$k*XY&cNCL&J#9X$3^S8![)enc8Xi$3LD8#n.4Q&J5Wg$5*p]$k!CG"Tnc+eGne6!!LaMaT(c1'`e=;"UGPJ'Gqf1+!;aO ++]>2`!0;,jG?is69Rb +*LOA:k5XuP%06J2"pYMJ(E=SH/M]6`3]> +2`!0;,g?;R!!++-l2U,Mbl@25'*/.:"pttZ+"&g(5tb$T=^"p.;VV6=s6K^e!Z'Cjs7?9\!##A7!sT)F +(EY"[3C-;7<`rU.<`7!%ID_uK6, +'*/+;#n7Uk-8[q[=ClDqItE<)J)pXhs6BXc;YI[$lMpAS'*/+;#n7Uk-8[q[=ClDqItE<)J&VH`!:p0k +;YHjbnGj4'!,*iDg6b`K7\Tls6BXc;YKDU]Dq@#&ci";$POI*0gSZFEIa+>UT1K"m/P]; +li7&*VSiGns6p"$!c@3li7(f:?oOmn,MkW&-2h9$POI-3(mb.PchmRip42Ur;cM+"fiYCPJRqdGXB`\Gu.#q#CF>f<>5D!"f56"UGVT,VhbmFcifFg$/,(\,Y^n!YWEJk5W[*n,O%$ +!sJr@(F1b(>]l12`S'MIq:bl*s69Rc'#XU]s7?9[!"f56"UGVT,VhbmFcifFg$/,(\,ZC,mJm;$_u$b> +n,N^p!X9&G*@X!B#@i7Q\'Et#pU:+c!!*;/nGgE+n,O"#!X9&G*@X!B@t0uWcJe3cir@R/kPtVfZ-!%2 +s6p""!,fUD2>%&e`X:=k5YSc2gaT`s187" +!"K)5#S%Rl/j3-MLo%i9kNW#is5s@a!]PJdf)O_/n,Nq#!sfAO+>,fUD2>%&e`XgLo)IkQ!s1E.j1#'a +!;HO'!sT,E)C.+.>]u:5aP+!#k5bG\!WkOM\Gu$u%0HeB&/lfM7U1,"Y/o>es24ls!!33blJ_cqs6p!t +!sT,E)C.+.>]u:5aP+f:lMolE!WkOM])V7"%KZ_9$kjU/3DF%6R^UN#[/]Rpnc/[kM7W`V!"K&4"Ul%a +-ok"4J"!gkiVNSds53kX!K$.Bd/WS8%KZ_9$kjU/3DF%6R^UN#e,SG-huEcYM8]Ghs6p!u!X&c='d,1p +<,RJd^X_JRs7cTW!!<:#anrgPn,Nju":,JP+>?#ZDMP"%!S->>s5!_X!`I/;q#B^\h#HjD%KZb=%M^*? +5?)NUUVG@Aa8bT-h>dWZ;T\gNs8E#j!"T)3"Ubq],r8%sGEJuIgZl3HlN$DS!XYOs_#Np)%fl_8$PF@( +1Ik_pOfZUXlM(=ns4RGS$)%1`s3q#DL +*[s3IAUp>\cJ\-!s766P!!*5=_>j$*&-2q>$PXX24ATO=S[Zo&mf0crf)PgS_>+&Qs7$("!eVngmHo(gN0n,LT3!A`r`s8W,i!"f55"U>MR,;2AdEf6j2f&uW"])V*si;`m6lH0(s!"f55 +"U>MR,;2AdEf6j2f&uW"rVsV3bQ%Z!lMU\Ks5a4N!"T)2"UG_Z,r\G(H^:qYh!Wc9cbQ%;: +qu@6.!KV,j'\c:dli;`o[37H.Pnc0+" +!sT)F*@X'HBS<"hdJ!UYs2G$?!BAR,s3grI +s5j=Vs5O(K!"8l2"qDFp2G@h>V8M$$s8N&N!;ZZW!87DJ!;QU'!<`T:(F1n4BniJ%g:RC@!;lims5j=8 +s7$'t!!;$6R!9X=Ts7--u!<`W9'dP\5CP\t0hRigV!:0^Ws5sC;s7-.!![f`;$OnGhYOhuE6I +%0?\<%MpHM:2>`eaPZIQs4%)%!:BgP!;uoes7$'Z!"Au5#7_Os2GS%FWlX)d^]3j)kQ(#Mk5aH?nc/mq +!sfMX-94m+Cl>@8i:"J]fDtLBqu>gZi;`?J%06P:&fN)W:i)&jaPcOFs5F"1!:9aK!;c`Ys7-.!!@8i:"J]q>fCQm/Q5KjT"]L%KHS5#nS"&3`BpSXN9>h_#N*gq>]sakQ']Dmf3e!!soMW-TY1D +Mlb"XnEKu*s4RJ:s6B[a!9F1K!"B#4#nS"&3`BpSXN9>h_Z0Z9g&U@:kQ'`Eq#L-h%KcnE&fiJci9j!<;3]k5aZEmf3h""q;1c.m6mNO0-R_n+cMSci;c#jo=uRo)RqQmf3h""q;1c.m6mNO0-R_ +n+b-,pA`nJjo=KDkl1Y_n,Nt#!sT5M+"fi]FHNfNiU?TYs5X1U!9F1C!9aCO!"T,5"qD@i/jWT]Og*$f +n+ln]`rFfojT#5[klBoHn,Nt#!sT5M+"fi]FHNfNiU?Tms6]jA!9F1C!:p0as6p!t!X/l@(aCk,?$M^B +cJlY>li?SVhuDp@kl:,P$N^J<%i?NJ7U:8*ZN8A2_#N3jl2UMXklBrIn,Nn!"UP\V,;_kqGaGb^inXRq +s4m\4s60O]s6fpW!"Au3"Ubq_-TF_-J"*sq^Amm,klBQ>klC#KnGiXm!sK&=&f`8Y8n*:>\C&%jh>m-H +m/Q;MlMpAS%0?V8$PFF,3(dY0S%-l,s4dS1!8[\D!;cces8)cc!"8o3#7VFj/O!'KL7u;os69UX!87D< +!:0[T!"8o3#7VFj/O!'KL7u<[s1nZl!9O7Rs6B[Ns7$'t!X&`;(*>+l;J_)]^"<;Is5*h0s6B[_s7--[ +!"Ar1":>YV+u2PhF,m9<^Ama(mJti +JtK[&_>jN7i;h7)m/ZYUqZ-?j%06P8$PXR13_sIAT=`Lbs5JtK[& +o)Hu7i;hI/qu?$`nc/+Z%0?S8%2Bp:5?Df`W5@61s7QEM!71]5!;-Bl@9akc@6s6TdD +!6tQ3!<<)ls7$(!!X/f;'H]"r>Bl@9akc@!s6fsY!6tQ3!;$6\!"&c2#7M:g0LK&hP68&2hcR9huLt#p&Ojfp&FO^%KQY:%Mg6C7q$e5[a*k#_#NBorrC7B +m/ZhZnGj%"!s];O+u)SrI$qFgiU?UBaT(/uh#HmDm/ZhZnc0.$!XB/L,r8,(J=sL'jmph!nGhGIaT(Z. +s8Vinnc0.$!XB/L,r8,(J=sL'jmp4elN$YZaT(Z.p&FR_%0?S9%2C0F8S*FF]%#gAo"b:a!9F1As6]m[ +s764#!X&c<(*b\/AqQhkf'2e[s6'F@!6>-5!;QWfs764#!X&c<(*b\/AqQhkf'2eAs7?--!;6B` +!!E?+#RqOU,;i)*K;-'1l1;^ji;i9Fg]-[Ap&FXa%KQV:%2gHL9PB3W_V+5Ij8\$:huLds!!)Hfp&FXa +%KQV:%2gHL9PB3W_V+5I_>jE5jT*=#mJuq[p]16m%KQV:%2gHL9PB3W_V+5I_>iEnpA`P?mJuq[o`,I& +!s]5N,rSM4LShuDmIooHec4S.cN!Y=mf<%\o`,I&!s]5N,rSM4LShuDmInO!r;Y^U`;f9+pAY-mo`,I& +!s]5N,rSM4LShuDmIn?qi;ioX`rGK-p&F^c%KQ\;%i6HK:25Q_`8'bTp&E89i;hL0mJlSSpAagd%KQ\; +%i6HK:25Q_`8'bTcN!M9i;gdqmJut\p&GR'":#GR,;r;3LT&/HmJ+KskQ(GZ_uK-)pAaje%KQY:%2U9J +:MY```SU"Wrr9n9iW.m9j8\NIpAaje%KQY:%2U9J:MY```SU"WfDk.9iW-gpp]1$gpAaje%KQY:%2U9J +:MY```SU"W_#NBoqu=_:mJut\p](d)!s]5L,<&D5M5SAMmeHAQd/W&)e,Sk9mJut\p](d)!s]5L,<&D5 +M5SAMmeG!*p]'1P_#Ng&!<;fnp](d)!s]5L,<&D5M5SAMmeFWuj8f/Z_#Ng&pAapg%KQV9%2U6I9503\ +`np.Xqu=_:iW.a5jT"WJpAapg%KQV9%2U6I9503\`np.XeGnt:iW-^mpAjsgpAapg%KQV9%2U6I9503\ +`np.X_>im&p&Mi,mJut\q>^m(!X9#K+uW)-M5\DrhX:4;_Z/TqjT!s6mJut\q>_$,!X9#K+uW)-M5\GN +meQe;s5j:?!58F#!;?Hh!"T)3"q)4k2G7_?W5d]^q>A,0p&OI[^&RL#pAb!i!W`B-$4IRj1.c/7Vo@K\ +_#NBomJkQ5mJut\qZ%'+!sT/I+>QN%LSr,In)aT)s5F$us7cQ]!;?Hi!"Ar2"q2.f1.c/7Vo@K\_#OE7 +j8cjmmK!"]!<;or$j$S?'Hf/$AVHu!h=&/ZiW/]Pa8bN,pAb!i$j$S?'Hf/$AVHu!h='e3e,SD-cif+Ur0qHiW0#Y^&RI"pAb$j$3C>: +&g&i!@tLMop&E27iW.X2jT"TIpAb$j$3C>:&g&i!@tLMocN!G7iW-UjpAjpfpAb'k#Qb2;&03>i@=c&j +irJ]NaoC]-pAb'k#Qb2;&03>i@=dVAec4Y0bl@24li?bZr;[*)"ptn^/ONrt_#O?4irH^kli7%cp](3m +#6=r5&f`Jg>e9sr!;lf2s6KaZs8E!'!<`Z@*%aE\n,LW3j8d^0k5XcJpAb*l#6=r5&f`Jg>fcs:s5X0j +s7HBe!;?F!!!!'%#S.k)5?bYuk5bM^\,YdppAYF!!!33-%i[#`>58-8s5a79s4mY@!;?F!!!!'%#S.k) +5?cJ7lMorG\,ZI.mJut\#64f.#nIh"3k54[!;6E$s6KaZrs/T+":5ST-T_:]d]pAYfj^\,YdppAYBt!*u%29qns5sCJs31N.!;6?o"q;7hhZ):/k5`I#oDe(U +p&>(#&g4X_joDjil2^kap\t:%&g4X_joG)S_Z/m$p&>(#&g6B;d/W5.cN!//l2^MW!>$$=As2P*&!7q2.s69UVrr--s60Ncs8)c\!4;dn!;unps69UZs1SHs!8dau +s60O2s5j:E!4W!us60Nks7QHa!2ok^!!!#,s6'IHs1n["!8@J-s60O!s6'FI!4;b+!9sQ]s7?!5AL1s5js53k= +!5JQqs6K`rs8)f_!2BMe!;?K(s5j=Ms0Vgm!9F12s5j=&s4dS@!5/@1s6'HUrr<&e!4`'m!;HMns6TgR +s31N,!7:bos6Ka*s7H?S!3-"os6K`rs5sBUs6Ka[s24m"!8@Ios6Tg4s6K^J!4)Xns6Tfss6p$`!20AZ +!!*&1s5sCBs1\O#!87D3s5sBos5j:J!4r4+!:Ko[s7QHf!4r3n!:9`ms6]mHs4RG9!5niks6]m!rrE)_ +!1j,i!:Kp!s6'ITs6Td#s6]m=s5a4D!4`'ks6]lus7ZNa!1j/_!;Z],s6'IIs0_mp!9*t4s6'I!s4mYB +!5&72!9jKRs8N)g!5&9p!:p/ks6TgPs3q#2!6Y>js6Tg)s8)cY!2KSjs6Tg"s5sCZs.]P\!;6B6s6'I3 +s2k<.!7(W6s6'Has7$'U!58Eu!<)tfs6]mds1nZu!8RUhs6]m=s6'FG!4Djhs6]m#s7?-1!;6DUs82lf!6>-&!9O7Is24m(!7_&As5j<\s6BXO!6G3&!0[BP!;uo=s5j=8s1/0s +!8dbBs5js6'I7s1/0r!8mhCs6'Hes5!13`4s2>!,s+::F +s2=uZs.98P!9=-Ps2G#Z!;HMFs6Td,!7:b1s6fsC!2ok/s2k?As+::1s2k>os+p^P!7LqPs0)IP!;Z\P +s474p!9*s0s8;oD!4`'qs1/0V!;leJs5!5AK#s6B[O!13`#s4.2=s+::4s4ICls,I'P!9=-Ps0VgZ!;HMFs4[M,!7:at +s4RIPs/H%P!.t6qs4m\/s+::Cs4m[]s6Tcjs4m\Ks+::'s4m\$s+::Ns4m[Rs/5nQ!!*%Ns3:T%!8%7& +s7H?L!3lKns5sCY!/^`os5*h8s+:::s5*gfs-*KP!:TuPs1AtU!;ukKs3L`'!7h+$s7ZKN!3Z@gs0Vgb!:Tr>s4dS4!6G1mrr<&Y!29Fn +s53nQs+::!s53n*s+::Hs53mXs.o\P!<3%Ps3(Gu!8RU+s763G!4Dirs6'IV!0.#qs4m\:s+::8s4m[h +s-*KP!:BiPs186d!:BfmrrWT2!g$3UD1 +!TjBRs/l;(&deaC!TjCUs+::#rr`rA"9JVd!71[srsJf'gm&NX"9\f.!TsH\s/>r(qqRGM#6Y/3!WhHa +s8R]Nci4=Kgm&NX"9\f.!TsI8s+::Frr`#"*!6!;!!29`YlC?q"8B#>!rDrt!Ug$b!/^`qrr`#"*!6!; +!!29`iW"N0mf*@\N!\GC\Gqlp!q_EXn,W"ZOoN,p!q_EXi;i-BK)as4!pOq6i;g^oNW0(EGR!sDkl@1P +m/P3-!pOq6i;h^6K)bB@!pP:@i;g:cRK!?QJd1TBo`1$P_#FK#Jd106k5U&5kl1_ZIgG$6^&O2o!r.6N +p&OI[QN+Go!r.6NiW/EHK)a^-!N-Ce!6+tmrr]/.!!)*\T)Yqm!N-Ce!;?GEs4.,Mg)K)Qc2WCqr;QfO +)rq!rs.oYqg)K)Qrr7TMbl7^s5ii!rs+::BrrLes+::9rrV@q +!p0Kls-!B`k@Oef!:p2Ps6Td3rrW(K$g%H;s+::ErrW(K$g%Gis.95lqgf.=!<3%Ps2G!=\JOE/gAcd) +m/I*s(Zte)s-3Na\JOc9pAg0P]`/#t2!4l!s+::2rrMCAk5`0pMuNhC2#74?!1!Sirr@i;!:9`;s4RDP +LZ\ZVs+:7Os+fb;T)Yei!U^li!;6ADs3UcHmMb9hcMrLrp\t9^)X%1!s.B;kQfeAKs+:9jrrADK!8.=' +s6]gdQfe@Rs-EZcmO.H'q>cBPm/PN6!U_?!!6kIps7uZqmO.2uV>m7h!L*ZN!;leJs2b3@PQL+MeGk.# +n,EEQ!pTcfs-WfemNClsr;_TP^]+?&+R&m_s+::5rrMO1klA3mNrK-B!VZTd!0@/frrJ5_l2^#IK)aX+ +!KdEJ!5SVgrrV=#!9sQPs/c5$jr*C`nc+4@e,KI2)PhG!27`;bGh"98DX9^2VK +s/5kthG!27p&BXDci4(AQ3?IQcMrLrpAY3hQ3?IQVuN@g!r/&al2^kaK)b3;gA_3'.d@#Ns+:7Oe10_` +S,]Jf!RrUa!;$5Bs3^iIpPS59bQ!1oq#:BhMWt2;s.KAmpPS59r;VBKa8Z1f+R9$Ws+::=rrLLilN"'e +QN%!5+R]=/!/CNfrrMe@o)Jakq#K:OK)as4!VLm4!!!&q!4VufrrMe@p]13l!!2lqOT2`g!rfqMlN$,J +K)aX+!rfqMlN"a#K`;)P^Ao&8!1Ekhrr_\l;\86pnGe+?eGfX=Y#>nt!6P7ms82fum]KJ"lN![ZV#LPJ +A/,44!;ZYHs6TdDrr^h_'a*b%^&Nog"kI3!!rr>g!1*YhrrV+^"R6!Ss+::&rrV+^"R6!,s+::MrrV+^ +"R5uZs/5kuk=#F:!;?GEs3CWGk=#F:!71[ss7QBnk=#F:!3#phrrLnDkPtV_K)`gi!Sg--!87C(s6Tad +gdUE,ZN$3i!q'q,nGr@bMZ:?h!q'q,klB`CK)am2!q'q,klA?qMuNgZ')DUt!0dGgrrK26klC&LK)aO( +!NZpu!6"nhrrM@Wkl@7RWW*"`9BcHKs+::;s5j7]ktC7@\GqTh!p!;]p]0jbOoMih!p!;]klBuJK)aX+ +!p!;]klAU#L&V5"3rnLFRfBJh!R)sI@:s+p[VqoKfV!:0]Ps0)G(qoKfA!:Tr>s6TdOrrM4fklA$hPQ([F?Le*k +!/plgrrM4fklBcDK)aj1!rJo'klABrMZ3bTW!`G&mJrOPZ2Xn&W!_bhmJhe!9!m/s5j7`rr)GM!p]iss,I$]rr)GM!rDuf!0[Airri?" +q:@:b!:'T9s6TdUrri?"q:@:b!3Z?irri?"q:@:g!;lhPs1nX:rV5lJl2]]@K)b$6"9&#aQKeIZs,[0^ +rV5lJp]0mcOT2fi"T8&^cPu-Lkl687hZ!`Vq!HBHl2\[#LAqARq!HB-)sREls/uA)r:fR-H0PD"s+::$ +rri8om*p=G!6Y=ns8;m"r:fR-H0PC)s.oYtp$12/'']Jos+:9orri#[fVoMK!7_%#s760mp$12/'']J! +s-s#ko]Xl><:'\b!/:HirrhuXf"G&J!8[[,s69Odo]Xl><9aIls-!Bco]FT2NX5@Zo`1$P\c2j*k0g`! +#jVKQs+::;s7QBqo]FT2NX4qNWrJXi"Q[e5OZ_q0K)`dh"Q[e5OZ_q0gAcd)li.+Kbd3EolN"9kPlCpF +aK(54$2";n!/plhrrq?%X,CWtli?)GK)aj1"lRJ&MeEF`!5/>irrq8rUP!26rW)?dQ2e/i"l@+kK4cq) +!:BfDGN27 +&d%G#rVqKLbPqnA"p+&jeGk.#pAYKtn_1:)?90>A"p+&jXoG!m$N0GJZA;gJ,Rt"Zn,WCeLB#6m +$2!2iP[m',&Hr4$!8da-s6Talo\mKJA3hOS"TdohUAq4m$2!2iP[m',&Hr4$!;c_Is3UcOkK9E;9.:S\ +!UKg6s+::Frs7f1T5mRR'aFd+!36'krs7f1T5mRR'aFd,!!!"Os2P'Dd]@st2&Zf(lN#]>K)b6<#L]]( +;`,I#"7#ros-r$GYg+3$3KJm +q#>sGci4/n:b`do!pTd5s+::ErrmXD0c16!l2[jaT)Sps2'*/.l2ZG9`W$'E2'*/.l2]QcBP]`/$R$j#VniW"N0j8T0$$j#Vn])R]g!>#D1!:TuPs0DY* +&-V4tli2S:g&D'a"R,p)s+:7Ors.`fSc>Yg!!h]fp&BXDci3tMkQ&p.K)bQE!!;BbVZ37f!!;Bbrr7TM +`W#o>klB?8K)b3;!!;EcRfBAe!!;Eco)F=Ad/O(Il2]$-K)bTFl2[UZTE"0Vqu;9J`rG<(eGk.#mJlGO +XoF[dmK!1cLB"pdl2]]@K)am2l2\0-K)bQElisG +`rGE+dJngumJlPRWrJ@amJm4eKE&UamJtu@K)am2mJsTnMuWPPpAg0PZN'@nj8X`2g&LL@]`3T`!<;Kf +Q2df_mf;bTK)a0smf:B-K)bQEmf9![T)\9[pA]aE`W,E-ci8Usm/QPTPQ.W^nGqkSK)a3tnGpK,K)bTF +nGo*ZTE"E]o`'OC`rGQ/c2WCqmJl\VVZ2q]nc8XgK)`L`nc78@K)am2nc5lnMuWPPquDNPZN'LrhuA<. +g&LXD\Gq0\!<;ZkOT29ZoDn+TK)a0soDl`-K)bQEoDk?[T)\E_o)F=A`W,Q1bQ!1om/Q_YNrQ*Yo`4.S +K)a3to`2c,K)bTFo`1BZTE"QanGe+?`rG]3ao?tmmJlk[U&UDXp&OpgK)`L`p&NP@K)am2pAh5nMuWPP +!!%ZOZN'Y!g])m*g&LgIZi>XW!<;foN;ojVp]0CTK)a0sq#J)-K)bQEq#H][T)\TdmJhe<`W,c7`W(Pi +m/Qn^M>sRTq>fLSK)a3tqZ+2,K)bTFqZ)fZTE"cglMlJ9`rGo9_uG>gmJm%`SH"lSqZ-9gK)`L`quFt@ +K)am2quESnMuW\TrVqKLZN'h&f)L@%g&LsMYQ'4S!<;rsM#XFRr;baTK)a0sr;aA-K)bQEr;_u[T)\`h +l2QA8`W,l:_Z,5fm/R"aLB"7QrW(dSK)a3trW'D,K)bTFrW&#ZTE"ljkPp/6`rH#<_#K#dmJm.cRK&QP +rrDQgK)`L`rrC1@K)am2rrAenMuWeWqYu0IZN'q)e,P%"g&M'PXT*nP!ri6#L&\+OrrCmTK)a0srrBM- +K)bQE!!&&ZT)Scjk5U&5`W#o<^]/ocm/I%cKE%qN!!(dRK)a3t!!'D+K)bTF!!&#YTDnlkjo9r4`r?#= +^AifbK)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3; +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H&K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&m/M\;K)^H& +K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)^H&K)b3;K)^H& +K)a3tJ,~> + +grestore % PSGState +newpath % image +-.15 139.5 mo +-.15 174.75 li +128.1 174.75 li +128.1 139.5 li +gsave % PSGState +clp +[1 0 0 -1 0 174.6 ] concat +/0 map_csa setcolorspace +[128.25 0 0 35.25 -.15 -.150398 ] concat +snap_to_device +Adobe_AGM_Image/AGMIMG_filter currentfile /ASCII85Decode filter /RunLengthDecode filter ddf +bdict +/ImageType 1 +/Width 855 +/Height 235 +/ImageMatrix[855 0 0 -235 0 235 ] +/MultipleDataSources true +/BitsPerComponent 8 +/Decode[0 1 0 1 0 1 ] +/DataSource [ +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +[AGMIMG_filter 855 string /readstring cvx /pop cvx] cvx +] +/NComponents 3 +/HostSepColorImage false +/SkipImageProc {false} +/Operator /image +edict +img +_uK''ec5FEi;hL0eH#UL[f>^pj8X`2K)_GBklC\^K)as4li>90kQ(GZfDj;"iW%L/m/Y!&K)^H&_#NX! +g]**0qZ-0ebl?W%k5Y#Pdf@/_q#B^]TDsNCK)aj1klA9oWrMDcmf22Eh>lC3lN$)J[K#Uor;VBKK)^T* +r;c0aT`;q0li>T9q#B1Nh>bn'!!'G,m/Z2HK)^H&TE"*TrVqKLjo=ZIbl?l,pAj%Ld/`,)f)P+;_>f,e +K)`[ekQ'B;L]@8Pnc6l5h#RERoDnghqZ"h@]`7d,li<^YK)^H&jT"ED\GrQ.m/ZSShZ)C3rVuKip&F.S +klA'ili@"aK)^H&L]@8Pm/WdY_Z0!'ec5CDh#RERoDnRac2[kE[/]ImjSsi3K)_MDkQ(P\K)ap3li>90 +klB`Drr:"=h>c%*m/Y$'K)^H&_Z/g"gAcs.quH6ebl>idrr2rua8ijPp]'U\T`9WDK)ap3kQ&-mWW2;b +n,M8Eb5hPAh>lg@Z2a1krVqKLK)^W+quH*aTDue.li>W:p&C-Srr9>)m/Z5IK)^H&T`=6Vqu;9JjT"QH +b5^c-VZ>NPec5":_Z,5fK)`^fklBE:L]@8PnGp`3aT0E_])VO)m/WgZK)^H&jT"HE\,WH-lN$GSg]+2P +li=3gm/[.cK)^H&M#[>PmJrjY_Z/p%fDkLCP5tR]ZN':ljo9r4K)_PEkQ(M[K)ap3lN#*-lidXT.Yfrr7TM +K)^`.q#Kj`Sc?S,lN#Q:oDb*Vqu$)K)^H&`rG6&f)LO*quH0c +aT'KbciCEPp&F@YU]5rGK)b'7kQ&!iW;l/`nc.5@X8qkmV>ol^!<7ZNK)^c/p]0jbRfC5(lN#T;nGf*\ +p&D;sli?5KK)^H&V#TZZp]#jFj8\EFa8bW/YQ3/Pe,Sb7`W(PiK)`jjklB96LB%2PmJt9,ciDMpYlFCr +liid#g&LL?U&aicZ2a.jkPp/6 +K)_\IklCGWK)aj1lN"p(o)Q)sd/VPom/Y-*K)^H&aT(H(eGk7&rW)?d`W+Y5n:sU&XK[!<7ZNK)^i1p&O[aRK()&lN#Wj60[/eMPdf8Y6`rCYjK)`plklB34L&_,PmJt*'eH"2$XT.qmlid,eli;Y;K)^l2o`4UaR/ar$l2]T=l2Rgbn,KWlli?8LK)^H&VuPr\p&BXDiW&0C_uKH2[K+SP +df8Y6`rCYjK)`smkQ'*3K`D&Pli=j$fDsY+W;lJhli/aT'Zfli>*+K)^H& +b5^]+dJnn"rrDBc^Almeh#O>PoDe.WV>l/IK)b3;kl@peVZ5o]o`*,7\,cO/R/cOR!!%ZOK)^o3oDnRb +QN+]!l2]W>i;^Fikl7jdlN$5MK)^H&W;l)^oDaFBi;`'B]Dhj2]`?(PdJrM4aT$klK)a!nklB-2KDtoO +lN"Qsh>lF5V#U&dlN!g^K)^H&m/Q;MYQ(I!l2^MW`W*[Q!<8Abm/[.dK`?Z(OT4nPpAgKY^AmHuh#H72 +^B!HsYQ*nglMlJ9K)_hMklC;SK)ad/l2\Eq!<9e6`W+?clN#$+K)^H&bQ$f,d/Sau!!)of\p&Dr0`;oi9Q2g7Prr@`PK)^u5nc8FbPlJJtl2]W>h#G=nj8Z:^li?>N +K)^H&WrM;`nc+4@huDsA]Dqa-aoK6Wd/WG4aT$klK)a-rk5`j.K)b*9[/]7gjT(nPo)J%VVZ28JK)b?? +k5_XaV#T][pA_o-aoM>=Q2g7Prr@`PK)_&7n,W4`PlJDrlN#c@eGn/$!ri6#g]+DUli?AOK)^H&XoIPa +nGe+?hZ)mA]DqU)fDl!Q!!'S0ci<>3ao?tmK)a0sk5`g-K)YiNlN"0hl2^8Q!ri6#QiHUUlic]Y]`76shZ)"'r;cfrj8dg3XoI_fli2S: +K)_tQkQ()OK)a^-l2\KsoDeahrVtpY[K"SQli>0-K)^H&ci<2/c2WCq!<;ca?^&R!irrDusrW',$cN!83ao?tmK)a6ukQ&g+K)blNl2[=RrrDusrW%oWnGhkUVuMAKK)bHB +kQ%U^UAsKYq#@/irrDusrW)3_PQ1+PrW%ZPK)_/:m/[%aOT2rml2]`AK)_qPli?DPK)^H&YlEnem/M\; +h>ca?^&N]acN!52b5[(nK)a:!kQ&d*K)blNl2[=RK)b??li=!aK)^H&o`++TW;iRkl2^Y[K)_#6nGrLf +LAul*QiHCPr;_oY])V$qi;\E/X8hPem/M\;K)`(TkQ'uLK)aX+l2\QuK)a*qm/Yli=$bK)^H&p&F7VVZ3@i +klCS[K)_#6nGrIeL];u+R/cIPrrA&Y\c:ppiW"N0X8hMdmJhe6/ +K)^H&ec4h5a8^bkrVu-_Sc=US!<("=rW(mV^Amm,huE6IqZ)HP +K)_>?kPtS_N;pHgklB`Cq>UHnaT)5>a8ackp&O"Mli?JRK)^H&[/]:hl2QA8g]-L^-ghuE$Cbl<:pK)aF%k5`R&K)bfLklBN=!<1%=rW)ruTE"E]pAaR\li='cK)^H&q#BOXV#R+fklCV\ +ir9#Xa8c&;iW$[mnGqVLnc8OeM#W),S,_[PMuU?fklB`Cqu6Zqa8c&;aT'omnGqVLli?JRK)^H&[/]=i +kl687gAgC;_>iWspAh/lr;Z-ajT"QHc2WCqK)aF%klA^&K)bcKkl@R[qZ-QpU]9]]q#Ba]li=*dK)^H& +q#BRYU]6tdklCY]WrMenj8Zsqm/Z5Io)SUeM>r2-S,_^Q!<7uW\Gtdnj8['tp&N88g]-O=k5XcJn,J"> +K)`7YklBlGK)aR)klAR"k5Y,TW;lhrl2]uHli><1K)^H&fDk(8`;bGhr;Z!]VZ6Jmr;`Ynl2^\\mJlMQ +X8deOK)bZHkl@IXT)\'Ur;WkuoDmtP_uJj!l2U>Tq>cBPK)_DAkQ(Y_MuU9dl2]lE`W,Q1bQ$AtjoFZG +li?MSK)^H&[f>Okk5U&5g&L=;_>i]uoDkljrr;*\l2U)Mc2WCqK)aL'kQ&R$K)b`Jl2[a^q#L9lW;klX +s8VKdlN"$dK)^H&qu>j[U&U_al2^b^XT.kljo<:!irJEFo)SRdMZ8;.T)\!Srr7oV\,Y^nj8[*uo)R#7 +h>cL8li68NnGe+?K)`=[kQ'`EK)aL'l2\g'rW)lsli6MUdJr,)r;YXSmJlJPcMrLrK)aR)kQ&L"K)b]I +l2\g'q>fj]q#L6kdJr,)r;YXSmJlJPXT*nPK)bcKkQ%:USc@sTrVt">q>fj]nc7hPm/PuDr;YXSmJlbX +q#Hg!a +n,UuUmjT"HDmf;nXn,V/Ap&M])mf2SQnc+4@ +K)`C]kQ'ZCK)aL'l2]$-p]1'hnc/(Yg&KP%h#QmClN#92K)^H&g]-I;_>f,eq>]a\cMmpn;XFJSs7lZi +!8RUY!<)uds6K`fs+:9&s8Du^!1s4\s6B[`s3goJdSfH4nc/(Ykl:>UXT7eho`4aeMuSD/T`=6Vqu;TS +[K#OmjT"QG!Ram5!:g*Y!8RVH!4i0us6KaUs+:9&s1/0o!94$1s4@;:!7(TFW@IWBoDnO`n,VDHc2cPu +nGheSd/S^tK)aX+kQ&EuK)bZHlN#61!N@R6!;-[>mnGi.]pAg0PK)_PEkQ(M[MuU3bl2]rGm/I.ID$fD+pAaU^iW&?H\,c$ulN$MU +K)^H&])V!piW"N0fDk+9d/O1-D$fq:nc8C`n,VGIblHGtnGheSd/S^tK)aX+klAKuK)bZHl2]32!on,( +kQ(>Vq#L0iiW#qYquH6dlN"*fK)^H&rr;3_Sc>2ZlN$qaeGfUAPpGJlp]'[^l2U\]U&a``p&OddNW4V1 +UAsHXq>ZBQ[/]Fljo=`J!qV[&joG/Umf;GKm/XQpnc.nToDaFBK)`I_klBZAK)aF%lN#?4!qV[&p&OU_ +p]'[^jT!C'fDtIAlN#?4K)^H&h>c^>^Aifbq#BX[df0CCX>o5?q#C0jpAj=TVuZVno)J"UYQ'4SK)blN +l2[=RS,_dSrr:OK!r&cUirJlSn,V_QrVrMjo)JC`p&L*PK)_SFl2^VZMuU0alN$&Hmf*@_X>o5?q#Bg` +jo=ZI[/fdtlN$PVK)^H&]Dq-rhuA<.f)P"8eGfXBUc8SO!:9d_s6fsOs2Y2k!;$6U!7Ln!s+::-s60Ns +s+::Gs69U6rr_kg3!S=AqZ$Blp&O=VV?$AkoDe(UYlB=TK)YiNkl@4QS,_aRs8U[M"7rPs+:9Gs60OYs,6o`s6B[Is7-*krSie^h>mEPn,VbRkQ%sioDe(Uo`'OCK)`OaklBT? +K)aC$lN#N9"9%5=,kD$&!;c`b!:'U(!7h/As69U4s+:9&s53k@!5/>`s7cQZ!7q/PrSie^h>mEPqZ-hY\bZhY\bZ[NE60eO5!<3#e!:g*+!7V#>s6B[7s+:9&s5F"C!4i,]s7ZKY!8[YUmm5;#rr;oso)S=\TE+Zc +o)J"UZN#OVK`D&Plit_!:p/Js0;Ui +!9jIYrrA.g!;QTP!<)u@s69UTs6Ka[s+:9&s2+g$!8.='s3q#6!9!kWOQZ\i!;QTM!94%Cs69UTs6Ka9 +s+:9&s5a4F!4MoZs7QEX!9!kWON%:i!;QTM!6Y?9!;$9^s6K`ls+:9+s82lc!0mMNs6B[DrrCEf!!*&c +!;c`j!9aF&s69UUs8)fd!0[A6s/Q+`!:g)Is0;Ui!9jIZrrCEf!!*&c!;c`Q!65'(!;$6V!;QSGs+:9g +s60O9s+::"s6B[DrrCF/!94%Zs6Ka^s5*h6s60LJ!;$6V!7q1%s+::4s60Nls+::Ds6B[ErrM"#k5YS` +!<;0]!<<#umK!1birHmpq#L!do)J%V[/YaXM#[>Pn,S[PR/cIPir9&:+m/h,rrE)]!!*&b!;ulk!:9d% +s6B[Us82le!0[A6s/Q+a!:^#Hs0;Ui!9jI[rrM"#k5YS`!<;0]!<;?br;YdWr;Xb9lN$MUli?h\K)^H& +_uK!%fDgI&e,S_6j8T/Q,j57.s8;o\!<<)A!87D7s6B[Vs6Ka:s+:9&s5s@G!4DiYs7QEX!9=([od&`$ +qZ#aZs8W*!bQ,BWq>g'doDe.W[/YaXM?!DPn,S[PR/cIPj8T/Q,j57)s6'I_s4m\C!5AL!!;$6g!:^&P +s+:9Os60OQs,6o^s6B[Ks8;lsS`p.Js69U`s31Q>s2=s'!;$6V!;ZYHs+:9is60O7s+::"s6B[FrrAVS +!<)ros69U`s31Pqs5s@I!;$6V!8%7&s+::6s60Njs+::Ds6B[FrrAVS!;?HX!<2uu!6tSWs7u`d!;$6V +!4DiYs,-jP!:^&Ps-WiP!9=(Z/*R',s6B[as5!bH!4i-r!:p0g!:TuPs+:9Qs60OOs,6o^s6B[Ks8;ls +/*R',s6B[as3C]>s24m'!:p0V!;ZYHs+:9js60O6s+::"s6B[Frr=S6!<)rns6B[as3C\qs5j:I!:p0V +!8%7&s+::7s60Nis+::Ds6B[GrrAbW!:g*V!<3#G!4`(+!:^'\s6K`ns+:90s7ZNb!0I5Js6B[GrrAbW +!:g*V!<3#U!:p3#s6B[Vs8;re!0dG7s/uCd!:BfEs0;Ui!9jI]rrAbW!:g*V!<3#G!;?H1s6B[Vs6Ka] +s+:9&s2Y0(!7_%#s3q#6!9O4]lPo'gr;ZHimK!4cdf@ksjo=WHoDe.WfDgI&K)b-9klA!gK)bNDlN$&H +!UC]h!:^$V!<2uus3gtWs8)fd!;$6W!4DiYs,I'P!;$8Ps-WiP!9O4]lPo'gnGhnVrVtdUoDlB#lN$PV +r;cPs-NcP!9a@`lp1a=!:'UU!;ZZT!;HQ"s6B[Vs8E#e!0mM8s02Of!:0ZCs02Oi!9jFbs6N#R +l2^,Lo)SUdg&U[C_Z/p%oDe.WqYu0IK)`smklB03K)a:!li?8L!r@-Jl2^Y[nGi.]p]&tJci<)+lN$PV +li>]ij%o)J%Vqu;9JK)a$okQ'$1K)a:!li?;M"8o#-!UBa\s6fp^!;6BJ!7(W)s6KaVs6Ka=s+:9&s6]jM +!3cESs7H?X!9sLcr2(#+lN$&Hp]13kqu>IPYlFY%n,W%Zli=NpK)^r4o)SIaNW5@Fli?>N!rg@_klBfE +q>g-ejoG5XYQ*ngoDegjmJrOPK)`1WkQ'lIMuU$]li?>N!WL7B*9dIas7u`es5*hFs2"a$!;$6W!;leJ +s+:9ps6'I0s+::!s6KaNrrW2C*9dIus6]j_!;$6J!6tQ(s6B[Vs6Ka=s+:9&s6fpN!3Z?Rs7H?X!:'Rb +mm?4s+:9&s7--P!3H3Ps7?9X!:0Xc +k#1@Bf)PIDjoDI^rW)?doDe+V\c79]PlL1Pq#Hs/uCj!:'RcXXX>7!6Y?)!:9a#s6KaWs6B[`s+:9&s3L`/!6tOqs3Uf7!:'RbXX`K6q#AhC +k5`[)iW&6EoDe+Vg])m*K)bB@kQ%[`K)bEAmf;\R!q0t4kQ'05p&F4UWW2tum/ZeYlN"KqK)_,9mK!+a +M#Wb?mf3@fm/I.UD$fD+aoCZ,rW&qtlN$SW!!)?cQiD[;\,YXljo:8=Y5dqjli.(UD$^4,!6P9)!:0[" +s6B[Ws6B[`s+:9&s3Uf0!6kIps3L`8!:0Xdrma?u!;HNBs6'I)s5F"D!;-s7$*hs6]gfrma?u!6P9,!<)tts6B[W +rr<&b!1s+:9&s7H?S!3-!Ms7$'Z!:'Rdm$0O7klB96p&F7VW;lktm/ZeY +l2\EqK)_2;li?q`L],ts6B[Vs6B[@s+:9&s7ZKU!2ojKs60L^!8mhC!7h,Cs60N\rr<&c!;$6V +!5&8_s-`oP!<)tPs,6pV!;lfXs6Ka.s69Ra!2fe^!;-9ks6BZQs+:9_s5sCAs,6o/s8N&b!6bE,!9jHs +s69UVs69Ras+:9&s4%)3!6P7ms.TJZ!;HNDs60O's5`s-s&P!!!"Os+::4s6Ka/s60NZs6B[Xs8W,b!1Nq>s1SHq!9!m8s+::Ms6Ka/ +s60OIs1SHu!;$6V!!*%Ns+::%s5sC&s+:9Es6Ka[s4757!6+ups6KaWs69UAs+:9&s7lWX!2TXHs24m' +!7h,Es60NYrrE)c!;$6U!58Das-s&P!.t6&s5j:I!6kK-!!*%os6KaYs8W,a!1X"?s1SHr!8mg7s+::M +s6Ka0s60OHs1JBt!;-!;$6V!94$1s+::Ms6'HSs+:9fs6Ka:s7u][!29Gls69UUs6B[#s+:9Es6'I[s+:9& +s5a4H!7(W0!<3"ks6B[\s82i^!1s4Bs24m$!8.=0s+::Ls6Ka2s69UGs1/0q!;$6Y!<)tPs+::+s60Nu +s+:9Ds6Ka\s4@;9!5niks6B[Vs6B[Es+:9&s8N&_!1j.As2+g&!7q2Gs69TXs8Du`!:p0U!5\\es.TJW +!;c_Is+::3s6Ka2s69U`s.KDX!;ZZks6BZWs+:9gs60O9s,6o/s8Dua!7(W0!9O6ks6B[Us6fsd!/CN* +s4mY=!5JPcs.KDY!;QTGs69U%s4dS>!:p0U!9=*2s+::Ns60NRs+:9fs6Ka:s7u][!29Gks6B[Us6B[$ +s+:9Fs60OZs+:9&s5a4H!7(W0!<3"ks6B[\s8)c]!2':Cs2=s%!8%7/s+::Ks6Tg3s69UGs1/0p!:p0Z +!;lhPs+::,s69Tts+:9Cs6Tg]s4@;9!5niks69UTs6B[Gs+:9&s8W,a!1X"?s2"a&!7q2Gs69TXs8Du_ +!:p0U!5ebfs.]PY!;QSGs+::2s6Tg3s6B[`s.B>W!;c`ks6BZXs+:9is60O7s,6o/s8;oa!7(W1!9F0i +s6B[Us6p$d!/LT+s5*e?!58Das.B>Y!;QTGs6B[%s4[M=!:p0U!9F03s+:7Ns60NQs+:9es6Tg;s7u]\ +!20Ais6B[Us6B[%s+:9Hs60OXs+:9&s5X.H!7(W1!<)qis6B[]s7u]\!20@Ds2P*'!7h+-s+::Ks6Tg3 +s6B[Gs1&*p!:p0Z!;lhPs+::.s60Nrs+:9Cs6Ka]s4@;:!5ecis69UTs6KaHs+:9&s69TPs+:9es6Ka; +s7u]\!20Ais69UTs6Ka&s+:9Hs69UXs+:9&s5X.G!71]2!<)qis69U]s7lW\!20@Ds2P*(!7_%,s+::K +s6B[3s6B[Gs0r$n!;$6\!;lhPs+::/s69Tqs+:9Cs6B[]s4@;:!5echs69UUs6KaHs+:9'rr<&b!1Is6BZXs82i]!;$6W!5ebfs/#b\!;6ADs+::2s6B[3s6B[`s.98U!;ulls6K`Ys+:9ls60O4 +s,6o/s8;o_!7:c3!9F0hs69UUs7$*e!/LT+s5F"B!4r2^s.B>W!;c`Is6B[%s4RG;!;$6W!9F03s+LFP +!:'WPs+:9es6B[;s7u]\!20Ahs69UUs6Ka&s+:9Js60OVs+:9&s5X.F!7:c3!<)qhs69U^s7lW\!20@D +s2b6)!7Ut+s+::Ks6B[3s6B[Gs0r$n!;$6\!;lhPs+::0s60Nps+:9Bs6B[^s4@;;!5\]fs69UVs6KaH +s+:9)s8E#b!13_;s1n[#!87DJs6K`Xs8)c\!;-T[Zli>`=qZ#j]TE"]dlN$SWm/Y$'K)_eLl2^DT +K)^H&rr30#ccG;Frp'OM!7Lo5!;ukds6B[as7cQ\!20@Ds2tB,!7:b(s-WfirQiRJq>TpaqZ#m^df8V5 +j8ZLdlN$SWnc8RfL];u+j8\BE\,V'[]Di*7cTFa3H%,&Yli?q_f`17;_>i*dlN$SWli?/IK)^W+quH-b +Q2cI9h>[]YcTFa3H%,&Yli>`=qZ#j]TE"]dlN$SWli=s'K)_hMklC;SK)^H&#ljr(cTFa3H%,&Yli>K6 +lN$k_S,_dSrr;`mlii*dlN$SWli?/IK)^W+quH0cPlH@8h>[NG=o89bs6B[=s8)c]!2';d +s6B[Ws6Ka's+:9Ms69USs+:9&rr`;tPRm]ml2U&Le,S_6r;W5cli@%bq#BX[U&T`Ebl?o-ci8q'Rfi'cli?_Y +lN$&HK)^Z,qZ-'bPlH@8hugX8hDanGe+?K)YoNW$M9@ +l2U&Le,S_6r;W5cli@%bq#BX[U&T`Ec2[#.cMrh&S,WQgW$M9@nGi@blN#E6lN#uFZiB@lp&FO^qZ)HP +K)b!5klA-kK)`Rb!rgA&qZ,m\lN$k_f`17;_>i'clN$YYlN$&HK)^`.q#KpbP5g.6i;WlXb;fA!l2U&L +gAh$LlN!RWp]'OZpAaFY_uG>gXT.Mbn,J">KDtrN!R!J"!9sOL!7Uu6!;ukcs6B[bs7lW[!29FEs3CZ/ +!6tP%s.0/lrng3MqZ--cq>]a\eGnh7j8ZIclN$YYnGrFdM#W),kPscH[/YaX^]+E8ha[nJ!9jIK!<)rM +s6B[$s4./8!;?HY!9O64s,-jP!:^&Ps+::0rr`8X7gAhjkl9rKg].-MlN!RWp]'OZpAaFY_uG>gXT.Mb +n,J">L&V5RoNh7mkl9rKeGne6rVr>dlN$tbq#BX[U&T`Eci<50bls8)c\!20Ads69UXs6B['s+:9Qs69UOs+:9)rrW+h!;HQYs6B[7s69U_s-iuQ!!*&n +s6BZZs+:9ss69U-s,6oKrrN%gpAja`q>]a\eGne6jSuRdl2^PXnc8LdM>r2-kl9oJZN#OV_>aT9fcp+i +l2U)MrVtLLlN"g%eGnh7p]'LYk5U&5N;rVPo)OmPK)am2!rgjsp&O@Wli>f?q>]a\T`=`clN$\Zl2\d& +K)`"RklC,NK)^T*"9-st!;?KXs6Ka7s6B[`s-`oQ!!*&os69TYs+:9ts60O,s,6oLrrMLko`4R_q#BX[ +eGnh7jSuOcl2^VZnGrCcM>r2-lMp)KZ2]FU_>aQ'>P/!\s6B[as4@;:!5eccs69UZs69UHs+:91s7QHb +!0@/3s5X+[m9B5`l2U&Lh#I3MlN!UXpAaCXq#BUZ`;bGhYQ*hem/M\;L]7DLQi7!Z!9sOL!7_&7!<)qc +s69UZs69TYs+:9us69U+s,6oMrrMk\oDnI^q#BX[eGnh7jSuOcl2^VZnGrCcM>r2-lMp,LYlB=T_Z'Z2 +Qh1:Bs6B[as4@;:!5eccs69UZs69UHs+:91s7QHc!07)2s5j7^qmRF6!9sOM!8RVMs6BZXs7ZKX!;QTZ +!6"nhs02Of!:0Z:s+p[VqmRFA!;6EWs6Ka8s6B[`s-`oP!;QTZ!2BLFs3gr3!6P8!s.TGoqmRF6!;$6b +s6Ka8s6B[Gs0D[i!;QTa!;Z\Ps+:::s60Nfs+:9hrrW/;,k:s"s6B[bs4@;:!5eccs69UZs6B[Hs+:93 +s7?N +Y5a+R`;]r5X>gFT!:'UM!<<)Ms6Ka&s3q#6!;QT[!9O64s,[3P!;?JPs+::5rr_tr3!SpRlMp/Mh>d9M +li<^Yp&F=Xq#BX[_uG>gZ2a(hl2QA8M#RPHWAskWoDn1VlN#K8lN$qaR/cIPq>]^[U&T`EeGnb5a8_(t +U&P2aWAsDJp&FaclN#K8lN$&HZ2a+iq>]paqZ)HPK)b6]^[_uG>gZiB7ikl687L]7MI +Pp?>0oDn1Vl2]E8lN$qaQiHCPq>]^[U&T`Eec4k6`rCtsT`5)`PpGo#p&Facl2]E8lN$&HYlF%iq>]pa +qZ)HPK)b9=kl@jcK)`[e!on,(nc8"Ul2]B7lN"m'df8V5qu>m\jo9r4OoOtPp]-6PK)am2!on,(nc8"U +l2]`Ap]'OZUAslclN$h^klAX$K)`1WklBrIK)^T*"645)!:p3Vs69U7s6B[bs-NcP!!!#rs60NWs+::$ +s60O's,6oKrrK)Knc8C`p&F=Xec4q8k5V[cl2^e_mK!+aM#W),n,MVPXT*nP_#FG7.e3T)s6B[8s6B[' +s3gr4!<)r]!9O64s-!EP!;QVPs+::1rrK)Knc7tTlN#iBp]'OZUAslcl2^e_kQ&O#K)`4XklBoHK)^Q) +!n'sHo)S(UlN#K8lN$tbQiHCPrW)uukQ%:UK)aF%klA^&MuTCK!Ram:!;?Hcs6B[8s6B[Is02Of!<<)d +!;lhPs+::>s60Nbs+:9drrLPGnc7tTlN#K8lN"m'df8P3s8V9_jSsi3P5k%Pq#Hl2[mbK)`Xd!W.97!:'UN!!!#Ls6B[(s3^kn!9=*2s-*KP +!;Z\Ps+::1rrN"EnGqkSlN#lCpAaFYU]9rcciCo^K)`7YklBlGK)^Q)!rI?Fnc7tTlN#K8lMpqbQN-=P +j8bhPK)aI&klA[%MuTCK!W.96!;QTds6B[8s6B[Js0)IP!;unPs+::?s69Tas+:9drrN"En,VeSli7"c +ec4q8`W+?cciE,+K)_&7n,W=cM#W),ir9&VI...%s6B[Cs7ZKY!2KScs3Lb^s+:9Ys69UGs+:9)rrVS* +!:^'Ss6B[8s6K^cs-NcP!9F3Ps+::'s60O$s,6oKrrMM)n,W7`oDe+Vec4t9kPqdddfB@IL&Zc)nc.hR +WrI\N_#FH&DX[Yks6Tgd!7h,9!6+uds3Lc*s+:98s6fsb!/UZ,s5O%ZdSfN6li68NiW&TNli;XXV]s7?9V!7h,9 +!9aBds3guI!/:H)s763S!3-!Ms1nX8W@I?:li6>PrrCULli>$)df7Yoir=W1Q2g7Pr;_TPK)aj1!N@R; +!:0[N!9*tNs6K`\s7H?J!:'UQ!;uoKs6B[*s3gqs!8da-s-NcP!<3%Ps+::5rrN)\rVu9c +lMp/Mj8\cOlN!d]o`*D@]`3T`\c:ppiW"N0M>mVTk5G;[!:KpQs6B[9s6K^c!1Ks+:9&s7cQY +!2KRGs1A=!!:0[T!;ccIs6B[,s4%)$!8.='s-iuR!<<(Ns+::,s6]mQs6B[Hs763U!2okjs4@=[s+:9` +s6B[@s+:9&s8W,e!:0[N!7q2s6B[bs+:9&s5!_B!:0[N!9X=Os6K``s7ZKG +!4DiYs1JBt!8[[,s+::Ns6TgPs6B[9s6fse!1a)S!:^&Ps+::.s6BZrs,6oFs6Tgcs6fpQ!7q2:!:0Zj +s4RJJs+:9&s7lW[!29FEs1Als4[P's+:9?s6B[as+:9&s4mYA!:0[N +!9aCRs60N^s7cQJ!4)WVs1SHu!8RU+s+::Ms6TgPs6B[s+:9&s8N&c!:'UM!8mh?!;lhhs60OV!07)2s5!:9aN!:'U]s5*gVs7cQY!2KRGs1eU"!8@I)s+::Ks6KaPs69UGs5X1V +!2BMX!!*%Ns+::1s69Tos,6oCs6Tdd!:9aN!9O7:!:Trps60OHs+:9&s82i]!2':Cs1&*q!:9aY!;6ES +s4m\"s4757!6+tis.98U!;ukKs+::)s6B[Os69UMs8DuQ!3?.ps69TYs+:9ds69U@s1&*l!9O64s+::K +s6BZUs+:9[s69UPs7QHb!:0[;!7(Vus5sC"s+:9Cs6B[]s+:9&s4IA:!:TsO!:BgS!<<)c!3H5!s5jY!;QSGs+::$s6'IWs5O+Ls8N)g!;ul_!3lM'!9=-P +s+:9fs6Ka:s+:9&s7cQW!;HNR!:g*W!;uli!;?Jts5F%Vs+:9&s5a4H!4;cas,m?P!;?Kfs5O+Ls6]mb +s6B[Us1eTn!9=*2s+::Ls6K`Ts+:9Ws5j=Ys7$*Z!:p0W!;ul_!7:c*s5s7-0^!;ulT!;-s0Mae!;ule!:U!\s6Ka`s6B[3 +s5X.s02OP!:Bj_s69U\s6B[4s60L?!58Das.TJ[!;?GEs+::!s1eX1s7u`c!;c`]!4`(( +!9aEPs+:9gs6Tg9s+:9&s7H?,!;ZZ[!;c`h!;6E&s5*hOs+:9&s5j:J!4)W_s,R-P!6P<>s69UZs6KaW +s2P)s!8da-s+::Ns6K`Rs+:9Ts3gu7!;ul^!;QT\!7Ci1s53mis+:9Fs6KaZs+:9&s3gq]!;ulm!:g-b +s6K`qs7cTY!1Nq>s2=s(!7_%#s+::Bs1JF4s60OYs7ZNe!4i-f!;?GEs+::5s6Tfks,6o:s7QH6!<<)` +!;QT\!;$62s53n5s+:9&s8W,d!1"!;6BY!7Lo;s5!a`s+:9Gs6TgYs+:9&s3(GP!;-?`s6Tg(s6]mW!0[A6s2G$*!7Ln!s+::s+::6s6Tfjs,6o4s82l%!;$6X!;-<tP!7V#>s6Ka7 +s7H?I!42]Ws.o\]!;-;Cs+:9ns1&.'!:p0V!65'*!:g,Ps+:9js6Ka6s+:9&s6Tcg!:p0c!;$92s4m\C +s+:9&s60LL!3lK]s+ULP!9!qXs3q&>s6KaYs3q#)!7Ut"s+::t +!:0Z:s+::7s6Tfis,6o1s8N)Z!;ulJ!:g*T!;?HCs4m\'s+:9&s6TfPs+:9Js56s+:9&s6BXO!3Q9Zs+::Ls6]mUs53nCs6Ka[s53k/!6tOqs+LFP +!:KoPs+:9Bs7-0^s7u]S!:'UN!87DN!87FPs+:9Ks6KaUs+:9&s1n[*!:9aK!;li^s6Ka=s4[PO!/LT+ +s2k<-!71[ss+::1s7-0Vs5F%Ds8)fe!87D'!9F03s+:::s6K`fs,6o/s8)cg!:'UE!:'UL!;QTWs3gtj +s+:9)s8E#e!0mM8s.02_!:p0cs5O+Es69U@s7lZL!3#pLs/5n`!:g)@s+:9cs7HBWs5sC\!:'UL!8db- +!;unPs+:9ms6Ka3s+:9&s53kP!9X=E!9aCZ!:U!Ns31Q's+:9&s6K^P!3H3Ys+::Gs7lZWs5sCFs69U[ +s6fp3!6P7ms+ULP!:TuPs+:9?s7lZas7cQV!9aCI!9X=P!8IRPs+:9Ks6TgUs+:9&s-`oP!9O7F!:9a/ +!!!"Os+:9ms6Tg3s+:9&s1A+k +s+ULP!:TuPs+:9&s7?9[!9*so!8ddPs+:9Ks6TgUs+:9&s-E]S!<3#Zs.9:Cs+:9ms6Tg3s+:9&s1&*u +!9*tU!2KVPs+:9&s6K^P!3H3Ys+:9qs7ZNMs5O*n!6+tis+^RP!:TuPs+:9&s6p!^!8dal!8mjPs+:9L +s6KaTs+:9&s-!EV!;lfWs.B>ls+:9&s2tB.!7(Urs+:9*s8;qq!8RU+s+::;s6K`es,6o/s.B>P!5JTP +s+:9*s8;re!0dG7s+:9es2"cq!29FEs/>ta!:^#?s+:9&s5X-T!<)qLs+:9ns6Ka2s+:9&s+^RP!2onP +s+:9&s6TdP!3H3Ys+:9Cs5X0r!5ebfs+^RP!:TuPs+:9&s2"`P!9O9Ps+:9Ls6TgTs+:9&s+::2s/,kn +s+:9&s2tB/!6tOqs+:9*s8;qu!8.='s+::;s6Tfes,6o/s.98P!6,#Ps+:9*s8;rf!0[A6s+:9ds2+j# +!1X"?s/>tb!:Tr>s+:9&s5O'Y!;QSGs+:9ns6Tg2s+:9&s+ULP!3Q=Ps+:9&s6]jQ!3?-Xs+:9Bs5a7$ +!5/>`s+gXP!:^&Ps+:9&s1nZP!9jKPs+:9Ms6KaSs+:9&s+::1s/c:os+:9&s3(H/!6tOqs+:9)s8E#& +!7Ut"s+::s+:9&s5F!] +!;-;Cs+:9os6Ka1s+:9&s+LFP!3lOPs+:9&s6]jQ!3?-Xs+:9@s5sC,!4MoZs+gXP!:^&Ps+:9&s1\NP +!:KoPs+:9Ms6KaSs+:9&s+::/s0D^qs+:9&s3(H/!6tOqs+:9'rr<&,!7(Urs+::!-!0dG7s/H%c!:Kl=s+:9&s53jc!:Kl=s+:9os6]m1s+:9&s+:9[ +!6kIps+::s60O7!3Q9Qs+p^P!:p2Ps+:9&s1JBP +!;HPPs+:9Ns6TgRs+:9&s+::-s1SKss+:9&s31N1!6bCos+:9&s8W,7!6+tis+::=s6Tfcs,6o/s-`oP +!7q4Ps+:9,s8)ff!0I54s+:9_s2Y39!/gf.s/Q+d!:Bfs6K`bs,6o/s-s6Tfbs,6o/s,[3P!9O9Ps+:9-s7u`f!0@/3s+:9Ps8E#os7?<[s+:9&s/Z1e!:9`; +s+:9&s3CZD!;ZZe!6tOqs+:9qs6Tg/s+:9&s+::?s8E#os7?;ls+:9&s6p!T!3#pUs+:9&s+:9&s,$dP +!;->Ps+:9&s+:9&s+:9Os6]mQs+:9&s+:9&s+:9&s3:T3!6P7ms+:9&s+:9&s+::>s6]lbs,6o/s+:9& +s+:9-s7u`g!07)2s+:9&s+:9&s/Z1f!:0Z:s+:9&s+:9&s+:9rs6Tg.s+:9&s+:9&s+:9&s7$'U!2ojT +s+:9&s+:9&s,-jP!;->Ps+:9&s+:9&s+:9Ps6TgPs+:9&s+:9&s+:9&s3CZ3!6P7ms+:9&s+:9&s+::? +s6Tfas,6o/s+:9&s+:9.s7lZf!07)2s+:9&s+:9&s/c7f!:0Z:s+:9&s+:9&s+:9rs6Tg.s+:9&s+:9& +s+:9&s7$'V!2fdSs+:9&s+:9&s,-jP!;6DPs+:9&s+:9&s+:9Ps6]mPs+:9&s+:9&s+:9&s3L`4!6G1l +s+:9&s+:9&s+::@s6Tf`s,6o/s+:9&s+:9/s7cTf!0.#1s+:9&s+:9&s/l=g!:'T9s+:9&s+:9&s+:9s +s6Tg-s+:9&s+:9&s+:9&s7--V!2fdSs+:9&s+:9&s,6pP!;?JPs+:9&s+:9&s+:9Qs6]mOs+:9&s+:9& +s+:9&s3L`5!6>+ks+:9&s+:9&s+::@s6]l`s,6o/s+:9&s+:9/s7cTg!0$r0s+:9&s+:9&s/l=h!9sN8 +s+:9&s+:9&s+:9ss6]m-s+:9&s+:9&s+:9&s7--W!2]^Rs+:9&s+:9&s,6pP!;?JPs+:9&s+:9&s+:9Q +s6]mOs+:9&s+:9&s+:9&s3L`5!6>+ks+:9&s+:9&s+::@s6]l`s,6o/s+:9&s+:9/s7cTg!0$r0s+:9& +s+:9&s/l=h!9sN8s+:9&s+:9&s+:9ss6]m-s+:9&s+:9&s+:9&s7--W!2]^Rs+:9&s+:9&s,6pP!;?JP +s+:9&s+:9&s+:9Qs6]mOs+:9&s+:9&s+:9&s3CZ6!65%js+:9&s+:9&s+::?s6p#as,6o/s+:9&s+:9. +s7lZi!/pl/s+:9&s+:9&s/c7i!9jH7s+:9&s+:9&s+:9rs6p$.s+:9&s+:9&s+:9&s7$'X!2TXQs+:9& +s+:9&s,-jP!;?JPs+:9&s+:9&s+:9Ps6fsPs+:9&s+:9&s+:9&s3CZ5!6>+ks+:9&s+:9&s+::?s6p#a +s,6o/s+:9&s+:9.s7lZi!/pl/s+:9&s+:9&s/c7i!9jH7s+:9&s+:9&s+:9rs6p$.s+:9&s+:9&s+:9& +s7$'X!2TXQs+:9&s+:9&s,-jP!;HPPs+:9&s+:9&s+:9Os7$*Qs+:9&s+:9&s+:9&s3:T6!65%js+:9& +s+:9&s+::>s7$)bs,6o/s+:9&s+:9-s7u`k!/gf.s+:9&s+:9&s/Z1j!9aB6s+:9&s+:9&s+:9qs7-0/ +s+:9&s+:9&s+:9&s6fpY!2KRPs+:9&s+:9&s+p^P!;QVPs+:9&s+:9&s+:9Ns766Rs+:9&s+:9&s+:9& +s3(H8!6"nhs+:9&s+:9&s+::tn!9=*2s+:9& +s+:9&s+:9ns7lZ2s+:9&s+:9&s+:9&s6Td]!2':Ls+:9&s+:9&s+LFP!<3%Ps+:9&s+:9&s+:9Js8;rV +s+:9&s+:9&s+:9&s2b6=!5JPcs+:9&s+:9&s+:9&s,6o/s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9& +s+:9&s+:9&s+:9&s+:9&s+:9&s+:9/s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9& +s+:9&s+:9&s+:9&s,6o/s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9& +s+:9/s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s+:9&s,6o/s+:9& +s+:9&s+:9Hs*t~> + +grestore % PSGState +newpath % image +grestore % PSGState +%ADOBeginClientInjection: EndPageContent "AI11EPS" +userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse +%ADOEndClientInjection: EndPageContent "AI11EPS" +% page clip +grestore +grestore % PSGState +Adobe_AGM_Core/AGMCORE_save get restore +%%PageTrailer +[/EMC AI11_PDFMark5 +[/NamespacePop AI11_PDFMark5 +Adobe_AGM_Image/page_trailer get exec +Adobe_CoolType_Core/page_trailer get exec +Adobe_AGM_Core/page_trailer get exec +currentdict Adobe_AGM_Utils eq {end} if +%%Trailer +Adobe_AGM_Image/doc_trailer get exec +Adobe_CoolType_Core/doc_trailer get exec +Adobe_AGM_Core/doc_trailer get exec +%%EOF +%AI9_PrintingDataEnd + +userdict /AI9_read_buffer 256 string put +userdict begin +/ai9_skip_data +{ + mark + { + currentfile AI9_read_buffer { readline } stopped + { + } + { + not + { + exit + } if + (%AI9_PrivateDataEnd) eq + { + exit + } if + } ifelse + } loop + cleartomark +} def +end +userdict /ai9_skip_data get exec +%AI9_PrivateDataBegin +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(R) 11.0 +%%AI8_CreatorVersion: 11.0.0 +%%For: (----- -----) () +%%Title: (reHa.eps) +%%CreationDate: 5/11/2006 9:36 AM +%AI9_DataStream +%Gb"-6l&I%2FY?,Q+MauZ%YE2Tmir[EPN7>pKrCKp@6t:?[[2!jl=CB +%bPSd;5CECnrUS"\n*Y\qqJ5lgp&4p^q"F+P5MXS'?[qlu3+r(jqo/*MgW/@O&)Y,#FPf:soO7\%Sc!CJi@O0ms-Cu\p?p,5T>,^M +%'qG=!e^(s`mm#5Zr>5+g2ijRp_-OrY9>%$,s5WHak,7sm_a+7FqnN$K\*nhDqX+7Om@2/"*^BQ>&-'E&]='.=4JX"q;?-:NgM\1k +%L4]gqVJWB]*V2'HjMTRkri>IVGBRNK^4,t_)t!UYc_'(,J+qFhU!W7Wq>&d;^]*9R +%#Bu;[qQn/b:V;hL,:ah,!^pqChj<_jdjH53f3GJUc$6 +%aSt/uU]-UlKP1;Vl1(>$G5oOrIe3BihnFI9#)B(-H`;aHU(m2D>]P8kl1Ij@a0m!sm/PE1r5VU?QOA&g2?)r'r&Kf4F'8.a]#NWM +%NSi;EITtG%mI<`Fo4_KcLNOWOlT./0lgV-]4!(fYEPuA,&W[gg7Al1k*]B%')#f4RnZZT@_j1I%>o*?M=n%g=&\gIM]8fWN*q=d@ +%O\au+k$-t0ibS+oGcH4"f5NeM_SblRn0]93c_XF\hr-r]:HSh'$@gL1lYu@8pg!S-hr-r]:[ErDMn?ua_OpJep]l8,c\5H^1$(L4 +%_sl(C-Q[=kib(;FFRqWC4I/*/pleM8Vrn5WYI.SA3'V`1M8kYB>4^*Z%!X +%J)W3XJ8i*&Ens;LI!cB0l+3C-dHJ0:S*)*8MaB@Zc7P)@h]InB?^V.[DI+\[T9!n4&(BicpY5e!cS)hShPe)mH1#s.\;MTFGU\F( +%cf`+.\pM=Ye%lCgJ60>MJZodOoWXd+kD.aAYn"*kpS>\uVhZGCgXTNZ.s&aYC0;>E_V[[096jMPIhdG(X(h?WprtHO]l!S?n=*d5 +%cgSbiILQCo*sT@R+KoM=YJP4,bqm*F^\J&2Y:G):Ie2lEi:l1h^C#;oS]Y-23%in"/H%pQ(u>e&]S]f"p*&"[7"Jlfgoe6dOHT+o]ud:0:/]]6f4[nMYOPE@J70YCs9@YSM>W +%fZu+c,`E.Z>gO9o"(TcSbR,,=Rt7sQ$lEN#/@IEaM#qL]j@<`iB*6AB^#(]J!r"E@LcJqIVu(D=#L-%.T3$G_FdeE"=Q3tpHFhd`s,)k+Wj:h-*^W"lBg>\hP/=u'b3f%nQArU1C$!`pZqO9RE$S'LE4V.S"$I3s"^CS`S;a79 +%T?[)F*7dHek`WdNLt;*uiMh" +%YKbD42p(NRdY,:f_Wk/o-H4:9/`6*oj1LUX\%a:@RCMShe#7S2e1p4]8ENjLtiu/Y:g=h_Z`: +%X8#]JlJ:ZC\L3`!@4&B_1`,l8@BTP_)n"W:jft*dhaXLrdCV;!$snA4 +%D-Bt$4R!+f]cW5s3lekjS**@'lMT)tXjQXGDK]&b"XUFpYUp3U\Zl]2GLjiiTo7mp5h[Ge`nfdn9iH(,]?&C)$/Q*$l&3S(GFNcu +%A49$8I<]j=]QM/<0s2kD#jIk<:kpF+Z)r-Y<9A.p:`/*?AYWM"T?o6aPXW\PQ4A/edad.HR(3lVpemYGH=#-BTe@h5<)lWiqt/b.AO[XlSG,J1XDhhYqk<&LnPeZlt?XFa#'TWh3-M$#o;ld]lcY@.U#T"?lMWq4[sqO9,Jf%JFV +%WEmLlXko?r#Q@VUX`6+MJ#qKdXEALkoN]?k\s@KtT:Zq%O9sZa8%mpYYg;Kb(_ +%aKgfp3#u^_72t.$h2<<(n^.eWmtNIeWRhbH1O+1Gp/r=U'@sI+k:`(SV2,bKTKi.Qun8&bVeU:1+1*;WY"FJ.`"8Pl5dU +%)g6E])Qi%>Fs<;&TX%"t@)XUd^a/e_:GeJKni*%:M!T53:@6^?[-Q:]>NN7YVB('!Ek@?2Pm>WjQoacS(+lhZD"Kl)4K@3on3?2a +%LaB+;3Q(6P>g4co4'+.o_5K%9tLQ +%.a[+KYUdH``X%*m[VL$T%'"%eG1FORa>()W)3[7=JY`0JK=4-KYI`@6@#JP(Z_9FO:#od]?$bn5D831+uH5^ocT3ZYsK',;D?e92F@:;1mZP1AV76c9)8V!5fL@7+"H(Q>B5&X(NmWKXVad:M*hG+Q!?CFl>*NM.tX#+5hB.lsc2 +%a][nO@d3:jDHMs?ogi_ZY?Eig7^GoKJJQf&\r%nqr%3h?:efLD;P=Fm4K*#H@i7*p'302&7f7t>]ra?)BM(cEW'_`'c?>ru7$_[6 +%Tu;r&WP'c,W? +%Of\tqJmU`']_`$\Y2mpjrO3XBL&k?qNV0=_n)(kZ>.tGake#_7Ieruu*QO;i#@IE"4e2$(*QEok^%s%)2gk.r\"DX&J,Jg8o63EG +%pUg0DYPrG9lMYWCmsk$,dl7$mgW+MFIJiWKHoA\8qX*=40>I>\md%o;5P]dnIsh4Z:Z&ndlLS4>iob7ZpZ#&D"!1d`qJ&rL5(A4f^3fJ>j5\nTMY!=H?erKrr4Di5rU0>[QX"A'n7hnhf\=SSApO@Km@1:D]`.>g2db^MoZuLn +%a6XQ6JD]&Ss8MfPpO@Mer:MA&s36leVR\5Wk.AYu]m9Q7HdVW#CG*+\rpK`?Dt!L;]@K2TB^+9\Rrr24hg^+Lec#N$lVJ-BY3aUR +%_hn9HRs/5UU]'?HRno)g-0u^Ls8)9Gj/5+iHG%;6AG?p9378*tTbB$s]K^lBg\5XDI/Gm]RJV[;^8RgegXdMg_jJeT>YMZ$*oHqa +%mGjPJGQ"mU^]sKOoHuj`]lgCDIX^Gjq8X#L^Np"#iMZF"pPUu&5/$slj#7nUS:#9_gt2;l=*LkIoBt/dhn;(XL[Hi97V\-&UME6F +%_U7s`J[QU05['(UGm*,NXH1W24a'=BdQRNY_C#e??GR68YrE^\5R>[-9j^EU9cEY+7'2\S6*'6bGWibb??85(a8*4bf->IG5b!h` +%h5c$ukH4']WS>"bLO-&"HEMfL1dt>#Fji6S1GiSt2f!JJMmdHf[VIjoA]]dN[Q?(mU +%I6[F(^ArI>%`M6RmEcB]0Fm]Y_!iAbEid8mCr^uE`c7NhAR+2kMlE63#t1Yi"5.4Tk%TAI0'72Wk@SVpINIWcT'(5[^uL\Q[F@j] +%FA'@WbIGd>ZE+H)rd&G5StE?gA5AcV$L?h2hL7cdDD;4AcP-^?gDf_fN!MZu\1B +%ZO\']"id6inYfkqapo])p&O-[ZnmZn#U@s=pbaac'oXL/kN2bS]>+\J0[<&7_hbcr"(P[qAQ-BT*aj`RH@^@0@"*jALRDmc`p1.8 +%bIW3Q5?+:l<-'os@tgXI#E6*jlDgl,WdnZ#.+`Lef`jWtCB1lHX92Q2cph[NXd4uJVln@7el7L,$r=2EMJIUZoa^jfpB(g=m$nRZ +%:O?ab2)MhN"'kh%*"'>$/a7D38QfKEed36go*Q-rC0_(Ne?7'PX0mKrX$Hoh@.$W$:SH_nnPjn\csS<<*5g:BD"fXH*R&oC^ehld +%W0`C5\%2Od(\7lXm]nA?E[\tK.d(i'D@`sW$5fHD7]M"OlX9'K(rI62&sO]p8-OrjA\4_HrNX/_JM7.PUnh;Ecp$]&r^N9o)/]Iu +%$Z&)`0,r0;hTUc2>PP7f]X/2SV1Z88+h6Y8lWF2R1[!r9^JMR_`JTairla)=gg;80tSM\`#>%oo1[%C_7`gV'N4*Ip9 +%-J;T.fj,?ZY6JmERsNds'+F16ds?,JXFkpZnij[4j`Xf0j,H-;ZCP%3N7BV//^3;V1HWuh;`plS4KQpg_3*iGs]oO!+E[a9O&M/B[#Y!J-FpHefI\&BA3^eO!JI"DM;M0oK-%s7F](aO'a"j#-qA82*ReH+'4 +%J9Y'Z_@#4=#9[^g#S.R[\,ck@#6_42_H4Q7/qEO6J06I0(agGf!t\)W%R;cg+J'=LG-q02>=\bR*f11>#RTm40``+f+t,QT9E67: +%Jc]fUOZ%\Z7&)(1;\1ZeM;1fn8pf9@9jq7L7s$/IIV$HQfa66/!!-j<<_?\W:dJP@8pFc2`!I#&8=TZl6NVrT.<7`YM\S=*"Z<*' +%3#!J>i!P.GdMcA(*TB]0[>:jqf-@H>N`II/93dmp2Khup(@>.'aBoP'Yc>f[^7,&)Qn$q?f1p:JPUAbf0kA_mg9UqmE:!0;";-FVnMhf"sLAU8M/ad&hi/,2LVCV?"NokeKTu3tWU8hEYEpPb7O?+45]2d/Gh-Y.7?3OmdeRMSoh,-stq=sdU,:4(R_?AHR/bJ:-;\BKL +%*GmXmd5=dh#,ht&WF%%]C;mL\mncQO9h\9etcKT&fhL2?*E9KSJV"KGle"/q+(%)"u& +%e_K7/([qs&kl^O<<:qGh6rXds8=E'u)'geQ,&0R-QP:-3;FjM26rahA"eMP&.bN,^p-]um>JmJrEVc'&G:83GMW^8;JjdqXjJeTg +%MV^r4plUjFWd@%jl\t:4dV@APBrr4]3]"ba7&FU0ORWe0Ep,5YbsadV7,q8.;&*_#[:M7mA7[WMPm:2&=>=20J;+"hP[d^Sf@&4o +%R5e;p@JPU'(mSN3MBOuL,T2nZ=INZDL*[b#C$o;a>f2^6b;LL!kk.\BB"N*:$)n>V=&pr[ocf?^SmInaH%Tm\e2l2TZ%=$$;Rs0b +%gnK3_bd7so_Q9SP7`W%8MI7-+q]T&,LISf6""79Bj%E2:K:-/+N#,n6C;b94ja?-,&&>6.B6Q&d`2MEF_fhYq5$qN5-*"\qq],ET +%$'50O,f\R-\HO%:OXcsT_3GH*f<7F=p=#MO&$J22!(Hf,=ENS*1oNGmD9E5D>R(tD!h'9O!CYu#0!KI._"3XKYIr(rM9hJ0c/MmH +%U)DX'.Q1;JK#]bWb@.9#Y>,oF;)$W(T(s?SDF,2%D25o]GZ3P/:ke"uCjK,d<,l?sKpag,R9E$RVIT6(:]\Un>dI> +%%nI/R"d>Y*Lli5oqMB8]1I^AMZ_C&jL/,N5gI\*RT[0[*%#7=e+.MPKL"/o@Hoj:pJctk[)JG"?j2M +%TJAt'[%G.`I?A.""lm,cC5M'nq'>_a-gJC!/UN02-6QSOI'EapX5S^8AAaEAnH.5-R=sT9a8h+6.gWj;noc9$QD=kk5\Es0`-htS +%'HRQ0-[sPQV(?J=9dV!]fg\+dYV0CNn=Bmi)d`'$Qtq:\-]$NUEY]O87qIYXL,;? +%21l2fXdFb^mD_-2V><\^T6\q$T!g37X]:s$@r:"#UMV +%>V<*3Lt]g(WcQm^ih`t"<%jeFSQhXjR9re(%Q;?gb@-ubVKK%of1fm^k?DR=kdo'Nc+D8KR!YBP1Ul!Dco'1,_.=m;MV!E^KWWWj +%f7U5^YU2t@M0WCRarl>mCo]pOFgO?^NpcQ*BUH\&]:lZ-6nT5mmZtpfd!0iWH-f.OQ%@P\%ti3GhqJk',_TlnM4jl=B&PH-V+aNN +%N4tFrBgj$*D3@@#*+mor$Vf2E'6^TO.o>:P;5B@EO$^^@fkAh2TnO)E7cUZ=QA8`6+Cq1-X$H,m73rInOXQ?"1/[Bi&m?Inra!;,Po6%5U"JR#)>#WEh2L&5Ar$o4G6mKn>inh[(L+\K_Gt.4nfE#L(-&.k2%REn.;= +%[1Pbo"Ne<8&8l>4Z1[/h=]!VuWfGUp&;;A2+e6J#8sU0t8!R\KC1oDn,*&L4Ha"l=N/r2G0'e]9YDgf64W"o(r[`:!f<^K0`X@"= +%%jsQ&>sB=1cGKh"\8sPMBD$frPkW4hn]9enG?E[P;),I:p<#PA3d&;T8F5BRi1eE-L1Xf).(naVY9ED&*P66E*JrA"#Z7bD4BOUJ +%=WsZZUR2E"VF<,gB!ESr,h(dJOXA1$6Zku(YCR91J&ok^hI61)X]hMIKS$9Xa1/h4;9 +%3"(J`rJM(JgG)1&A+[.eeXB@UH9e]K:g9GiK;U,"2HlLuROjgoVHa;Pj9$!kX`gB65q>FK>0'tu:>hm8YUkSR+jOKD#g=I90c([@ +%;+0i2J_1QtKSnP#.nR46BPg9E.b\.?[+r9N3D7A$)cJ\nDGT)_Z:T2h^m`XC&iM:Z=l$N/Zq:hj[$bb5oBPPintiD)l&9D`.L%\PLD<\?H8ml)OlN?/M7r1# +%5"F3,a55I;E:L(N98Gk6*?WC.GFp=JqrU-.G8Y@?k+0hEcg@ +%No1ng?n10e6u"m3e_mO%&[dEDL"Qrl:';KO+X(8G$p3$m6<8_:#?_R.*CR[M.jA:579C4c +%PDOK(F-G+i'O.!=NB)#2!F7nA5+A'r\P:^aYf'5gOYl>2UQaD?_H?ML/8\J18G[`Ld9CY+p!/7*>Xh`GBkEhhl\php@M+G\L+u(U +%CA_RtNQfGh`U7[5-EetH/oB^n\i*G0-ds:4(luAmRJb*?Lf+'K!"fYr*mWBr&k/U?6TDYK[<#*lBC,8d!^,\m+adLgKP? +%goGL7Me4WB**RiBGGnH0!D(>?^QSA>Uo>u'Ut9&d@Z(fPK\.cmFs4."Z#/^m("nAp6Gtc+Ng"*+&_i/p;KP061KfXg?GmGh*1"uN +%>V?7nJ:]IJI.'?&2%#5hXXm)RPE:d?E[,0n4Z0!c'hqR#2V.%_<'OC^/50Vb@nN#bN!^:[pI0d6lQOU]F6b2g<#WrNg(715U0*U- +%%j8;-XjK0dCSDXPnprl2eIA>@aGNWlMQ)FTNUfgrMdfnd:c#C0DX<:\Ke]ti2D3L>T4=Gq"<[ZhnFjf'G(l5@>P=-%Uj?RlCNs(GD)9]gG1`#c%3B\"]Jod[unQH0s%YA +%+gPA5b13*&[O`Q%@`orgQIrHS;(=VI03/]Sc?:_H=uE$TW)CH(.YVVF`#C->'0-smE]$n[C/d&WQ&&K5E#IcUls?F-]#a(h]_^*cE$pkgm_\)WAm2*1uV<$.=UU+[L7CDrRtALTuU[&0JD5X9V(sh +%\A,PYBX;P]e9]^NCLafh\eXP?3o`WrK4n +%i5tA6O(h&j3iUhD!E/:o%@\",^IH=3RP;[>hjYYp4o3-u8,uR6E5\0iQH\Ko)_tJF8n2VpN"PngC"`*P7j;5:S.kTZ:nO0p(KrD[ +%#e/.p`MRKl#m)/605[rjQZFB>K1S9TZ&17D36k5W,jSS@r.RhAiEYk>SA[9(k.qtg!OC(**<`9\P?_PX/T7iC_V[jnEh,iW$Z%G1 +%Ij'u[h'-iZ8Xd6u)utRg&%#M(eCAh@TD[Ue?a.!tZL@:Bo'JQH;g'eun`(tTsLi7]0daJbJ#=lq_!.*Xc]N,rB# +%A!1mS=OK_H6jI0i[GWr:(7;n=LD^W/*F_(&@8qj5JF!K.%Hio;;h8].)tT +%a5-2pDq*3NCGsh8'io0f0qM(?k3.!8%5F9fXm1'f72IjNb]a0PSK5aNFGNp/*t7PQm;Wm`"_T+4L.M-D*%sLD-4KXiWPY)VXN^h# +%?-`<:KjQ3R%%1KHoQu^F.h0=4;XnNcJ=Z:ssT$rB5B=0[u$*@!$<\&.+U]f>TojD^sRCNA@.qgPidCNQeD22(0) +%>!nAQ*@U,t,\K5;*=fTN`UVP>qZkOcL!SXJ$Y$DjL.\\d4r)F-+NSKE\CLZ/jD:T#+(#CD[C3$nOQUY8pb6bPEN:/pi +%D8/h1H$PD4f&M\]BL_O)Cm38s1Fjsh`pHIPBr4rc;o`M6eF]i>B$'uQg,DN=8_TVIkqQ&!7/*Ugc1R`"0tq2Qb6hu[I%B^\Q90$= +%l:kKB[+..kq>rdCo.Xp^-'3HMJ8>%l.EOHGa$.tt_74@NV>&IA6bQt-cr1FN)_XW;SsWda<9#Daj$[bg:lU]KFNsu\;N-$M@C[+<2*tJbTG`;i>Y6X`OmQi9lE^*(lT4qK +%_X/i=rhd!X<7X3t[7Hs)MP;J+ZaLbY;%9:[kd*%"_fElH*:l!2+<(MVN=@,?dF!'_&E1U!4APD)?tHl%jm+N#L"e[WmY6@i9"es< +%\qt<8mh!@%jfg"D?$^6aBmW[NO>@4tS$RQHIi8t6Omsj +%Qs!09k01@9[RPc8FE4&CZJ0m96'&$Hou*%EEr'[MG3-:V/pdU'ZiZ/RJI1s6F/jd`J\^mM5Q`NEG"3*O=("$=;!C<Pe^uOk]-aMeG,quJ`a9m +%o88'Se/`7M,>dup="Op*L8[*[g+QuI67U9Ke-pnV,eAsQe-[pkY"GM=*B>V":"^*-o`WU$Y"?P_mF]g)Y4So7:I*;1'Mgt\n0sKTd0)cOIh"tVLi+LD\en1A>W@ +%m9RZc$0+]33gQpd&40fTDdAPG(O.V@aVD9r+tVu1U'gKHKltDIPQl_aB;ddVM$D(/L,%tQh$u[qP:,6kHA@h?,7,#a)p6\-11kYQ +%5B:jmQr?ib=`S@5i%.`.7eg-n&PbE5@>M1beKV%T4133&_r9F^(AS%m%d0A^([$_F40_!q-'V1OL'ReSWg3R^1QV5"2T;IX$)fYZ7`A&'H'8$[St2U]/Ac+Sa%XkPSb]Jl#^:(%u&/WE^_D3M0q[t.\S%` +%@a2l3JJS6L[n?leh)p:gY0KsJ***V:egg5>O2sVf2?=Uu+rdPkU3\n9/Z?!QTpLols*\QBD!)dn%G1ko]&n +%j4-3E;UGpPh$ITd=erdCeJ?CMfQ5?@VS?:OdabuDK1ImUma@&IdA58pNaCfLFU%#:rOk_1rA2,\]6F__s?_e +%&R^,e/IA;a)*+9nQ73+"[7Bd&Fo,&^hgjg89[I5W.7PfC7<5qur=`IQHO_sf8Ki09@L(Z%HOY5p7fKsSrEo?fS\>p)$-qV?60R\k +%[5%@MMh(:a\:U9=r_n1d7HjC]]fC2,fq\G[\4$*UH9;$dT]k;pYf;E@(2NA^?[fF&:4E\8ifVN5Sg&Q#N*<>CBR=2a,B8m?b_%ZsTJl8MQ\c13L@^L%k4Iafdc/ +%`#pcC^S"F@AU.CC!R^C*6K#q%k%+;BSc=E3gfqZ+;*.5obp$DK%sGHXTYgG"fjPE,HB43Aes4\McG +%mH/,\q:`BQL&E"o/_`8#e+qf@@$`Yo&WO[H`kb,r`e&._)[F9NF&jP#e=J;;gtfEK^@:jlUM#qi^k[n`4/HtH"iO1XWq+TE9@:HJ +%g#^?33f$&]?RU-pHJj?qYQ,VDJd#3;_csHb"WuN^Kg7ZZS0ChWLPHeRm!m1F&!0.BF@2T%5.SsRS4B`6#[I8pQ.WUTlg,-ND-;" +%fOR)IU#pm\2^&H^!kY/gife6=;A:RZ[2JTpWf8A+%9,E?X5\+n4KaJfp$f$u*`p4r]2;^ajUf#+p^>BDa'<$hQPt(1AK3_$=hn>t +%!.(R[rT*YT5EI8^L!/)D'N[PBGLbC[9_X1(/2)hqf0ksBCneL]Z/%I$-jbUFG#7G*a8L=,5"[,oN/.C!D\`-U +%`;`ZTGcP+V$:]/l@6ia.(LToVG`R'-@J3@BC;QfS]ja7KUN5!-,[oNW4M/YPIk/@D'd[_=ANMTEh,A0N7mfSDPFO)W'jUXHuXAGak48K63=L5T7dp@!:h#sr-]3!fpgnd11<^ef&e9rcIQ\*ZDH\"!FbYuD9=`"U!^CDPNB2PObAVI^^s'$%ET +%gjiXtA;tQU(mifh!PrXmt):jiNk$jJc>&m +%]@Yq(IWb[uI"]U,S'S<<0Jips3T^ic@_ +%UtJANC'u=n$S1OHaf]E\\19Y8#:\5<+T7PnNdg.8"4#emK/s^8ft\Z,/Q61g:>Q-oP8q0UA:\%W*dWc"'t.M\Vq_26?<0^:%r^#& +%XJGr6fl@II($;e29;DK:WapNb4miN5mUDgV"bW]2\H.qc'rJs(ip-0#%M;-pVDJ:@D*t6W/QB"\)c%Un;s+sP)gA/5Bs9N)23c8#M2#ej%R;Y7fGO"^:J7`-:j--MC=`Ag^L%hjN +%gFQq(2Q7Cc",f`L-VgLt7#<`t&r@rsBKAk\j-il>e3)+Mc6ZS+)a]/uLJ/Y2gN9T,$BG@5m(3^^*S6j\C3`7-K"sk_CC!O9#e'G8 +%b$HYuKhU#N%D2&Me^P32dBM`$SF.$$9J/F:_Ht?L`rXC?n[m2&0lq#0-a4,`nB'D$ROaf56@t[e]_N[tG+gfeRk,\-ZoQRflRY0/ +%Q/H9aJ?E`pPTaGf"YCg=I0nVJ#[gtD(paE>:JiOHLHHKL`1]AG#\m.g3,cWfdaB7Xi:HdCHmR%iTP9st8$EBs&qdoKG!X*WY/J\m +%e-ZH\,0:Rm;e^i;_SC-%TI()Q0o+"6C=$CQ%NBOK6*q?+Y[g*9Jsf,]'gfE^"t[\9$Y]0@XE"bU;"IJZiq#&tik +%F.jm-I3W/%[0p1eAZ6\%I,SIuc5$^/R)OHK!=]`<+E"C!>UA>T0h(A.0gelV+h"()@]CR`$(b2+0XfBDP7?K?10A&L=L2OTDI&!rbJ$@?Eh+"O\a#rKX3NEA4qG[opBd?oX6H*&LoL!OIoK6p'frNDF2I?AnJ\F +%m$LrF<2=bkgMEU?_4!&^7I9]hXRiVk.<(7F`>,R\O1-/hYF'b+R#&Bma`7s=W`2_2aL+E]bGoZh!Z5GcY:dhpKMs6lmG'0*O]in[ +%<@aAp;DC2^36dW1(I;f]W=hsSYP(qQ$V^ccT7]?+2>$ZS"4N\.'eG&3OV2]r^_3`%UtF9?Y/P*3$ZA@51lHKlOpU9<*FhcZLbSu? +%m%Rm8M2`qbn&46l*5qVY=M.OjI*kb+=_e9[SRiHCc6TU`EJf]qY_].V>jeEV>/qPu5 +%Kb1"L7G(IjF_`uQL44J@gJuX!AWDWt'OL$FEHlK1AK@b2D%q-#NP=2+^l2bWUM.=h,0RshJZ@LA,(W*.:7R4U19WMVVqC(k1mD\o +%id_9WbaD`&n%gd$!p8r0RuHs\JBgYFA]J%NR5gkQq\`\cPbBWgb%5NTK3j1ub)-]l3N"ZG/8NOOaBJ:_bX?Ja"8hA45< +%P#PChoMe\f&KsUcWd:`P%MVGWigD8_BVmE4KdTE9!EEc!R*i1%j8,pDl:fb':cJ>lh[C#_h_dS!iL84Po],R\ol*H-`.8DbTC^8l +%#T/\//-LD1=)M8&`*!RnN^kDNM3*/ZnDAG/i4\/YgELnlj^1eu-d]!h>C?*bpNX:2n>6gin,dG(r!;^KX(2.Ap>g4@LdX`jrGqYt"T"%[ +%]0Q-EERjNmS3\KNm#X30]'Z`uMbI.uDkn)e:b45`U8$(7jG/X$:5=F@ +%^0'/u`Ko.lUmQO]asWR(LD>P.lS[tGFfZXZ1;`0Xbr[a/k^:VV>XjW+KlTlLrGgqdXIb7-c5n2hnegp!"H1BlaG.UNf`CpH!+3no +%Y3++DhLhjc&n04cW3eQig.Ye51SlHP/MuR.I#)9;R`XB^q8""SdV:ZcX_h#TB/GS1W,Q./RjRj"Nr2ZRiH^ISdUH`*O%qKJOeQ!R.B0Db$!_[:R3ktN0RK4F4KCAIF6 +%l'qT76*-UJeh.s\6KZc?FagT2rKmmh%onNS1#.Hiq,uBGnTO)IbaD5FKn%RtI(6]iN^Jk:m>t06\>5a]%A]_L;aQd[$>WV,8dWO, +%3OLDNI8q]jgT=']f3mm,VWlGSeBkl"X%pOnnQS'ZdBX%p`]G*>ek<=ZWo4[>cRgiZO=9HpV +%%2maKYDP-_iZ,S]3@N:n?MPKO*#uQY5'Eq^l +%HR<5u@kLG0p+&Tr7>c]dhS_B90b-mi"CG.dA_laY#I#U7fTW,Y/b3tJT*NKZ?R:LcGS3-a<+-i"3^WRKNR3"U]OtXLC0aqFUHd#D +%&Tcj^2mTe#H-5PdMfcg9$:tc):clZZ6_jSq8WGq7*d*]i:U]u'h?dA`mCiIS1`ri#7jXXQfk.[aF7IpPPa$gfk;au+h)`+`'o,L. +%fGraK>ULYTlSjWl/,!r$Kt`De7sH`R?3NohTjTCt=lD@a^Q5'h"uN8OO\.dbPK,*ukuj*?[n'qc8_WG +%/-="8H-XIB``Op#/asT*9=)9Ri.fOjQ-grfti->jd][rgsr&;gB(:BqG*J`MVerMa1iTg +%44dejVOaQ,=44G`U*#ul17d_2$K[9$t8opRX2RI%DfHCNW!Ha.m*K1F=8O]SlU$8`oOIZA6-EK$KmGShZdWMPrVo&-Jf@UZ@C +%"9c?T`bY;(&:548bF/!3?d$l5QDnc4O&bVTb8X1Q1\LN1QDuR47SfAN:=G\*,(m='B.$U0m(Gut0\WjLfE1ujWG75d]^R6gRjeoH +%#KJP5/(:*"2BZ/rC?GV3`K(^B.RpFYYXAbc$J;WVL:G;3nqD=!?B2)eH38J<5Y'qgMKoH%[l";2_s'nZ$dk9P=%$>YZ7'!e[!AAq +%@^0YNYCAB5'h1d%@o(JabIGE"@RL@q2DH7^7Xu_@JnX>=.c7O@<;\F/RWe#ef&I:Fa1mj4 +%IP"(>ZS(KbruNiRa/:3\kT4X[Pd_^+nbQ[Jf0)86mcs;Oh-db9"59W^6'"sAN@3J"U2^T2Y'&E`9:BVT#!MfB%ZBL0K3*$oO5fTX +%iHPER@Lm<"Nc1Io +%V<[mWnqG'&Q4ib.Zl%JK`565YXB)S!(b6N.A21E7Y;/'f!G06FWruCe&C"0E0sjG:;=SY5*7*XiBdKc,Jn1,*8o8UU-;^/bipWq$`Z-N>Ihcd6:LOfQU:^XDf7aRY;kPmgs%V0JO7&gY.b'*h:DCY/EV/[,&^b*R/d7b_cQd+3JJ]O3`Q'O\E]m\:TgEkj_FgcWZ"?( +%K30"q8Pq4r9YSJfC&O[9=&Jo"pY6Nu`paap5$;'+Pfq-bdcLTu3nIt\&\M!$Rcp!ULE^!> +%7'fV\iiS5(B(^^;-f=+dQe49h-HUZ(P1TFH_nR;4^Q%8L,PgA%I`*@C'$3A'q`Dj!Q!4KB*G%-"9uL;-fT8Pbj+85t"6*"c,UsXS +%pJ+u_-7V!W]UGh1K5nP+6W<"'pZh0WTq(kXmZ?38WpZC-F*<)Z*mQbMF<1_5\Tdh0>=doke2\'*m!tY/:35SR./*6[fKc(PSldgr +%Jhe]OOQUV9ep%5 +%NMbNFg5VucB\EuaVJY[ZV&0uW`khT)A91G'O]D#"_l>_*Xpdf_gO;-Em=up`aSG[nS$:H@Ea'_IqRm4j\`B9o'V'H\KX2%e'8TD[ +%"`5(T?@ij`A6\.p?eh:IGpZ,)5BR*NU(A^-a%W7!L.q\=$h+[ZJA3Mn6Re*C$/7@K1"WeF;3A%DA$Io\DG#f#%O\p8\nhaZ[Xg%%OC\PYe1i)IeWO[A'`)/(0SS#I%8_6qVR`'Wmi\jG!icVk*lT,!ctiog.m_/^XkO2mmU4ta +%$EuU=J6a"I!4"+/])oBEOq81tFp#OLLYHCE>mIldpPMYFLBr(4Uql,U3+)&\i*$akH5Te9h\GWd*aaNVKoms#S7/4#,\VHV'_,a< +%n_u^Gr&nY<1_D_i@WctKW\_sFbTW`3*6;K4JWG+J/d%gJB7eR!"%M.q.b/Xm?]6J!*fP)u=mc"=5`,Y*oe"-le +%5]E"jae0ko$IV-XM]m,:=ilFo45g7 +%i$o2Hof1c>,s_3^?q2O)L?aGeVUuO&kQJNd!/"4d^-kdpY2Hu+**RK8Vh&R#e=2:[fG0"/Tu[;fD+^?tB6NRUNZH^jBKDJ0^'2.Y +%JauU36b<=sGHXb=+bKsH@L3CV2k)oG_pd0`61lEX9d1keLg#mn?sWq/D(A$Y"t:p-Ec(s$Z4E9=!@Et%?BZ".LuQ)\TG493NMKNt +%UdDEA>`sD\.+XB(p&MsG!*Z?:Y^Ri/q1fQ%l\gOY27);9mE36MG$KHu"HtZ"@@k77i\,O]M?p0nm:9bOQ(!8#.QilF?L!;b060%I#CP#c: +%$#UV)kURb/P,=TCjDkF;1]VCD0Ejj$9ePm?R2:S*p)u#-5YDg8,2d5TcJjIZEhP$JOJS6c((F^2+I8[YB`Le?!A&6cM?U1/JL`p# +%KgJfGuAPp&\%0h*@0/Y^8"0jGK%]rP4P.\.h^/R@<=k1GY)\Ia:GA>J?n#=;V' +%gH,ntFTBoS<:,uB@s&`\WnAEJ"_kYf/4^>a$MNb-8(G2AF20jAkjaJ?k:1VT\Kc5#m+:Ipj[X>,colH"]5-7>*Z2`Sjp_+L/2eC+ +%HLA,oNkauVgQ'&9ptLhDmJ,Frs)5O0:F,J[B^+_V\]2N!_6s7VVu3m&(ATG3M[sWeW]Z$mDUQu*f0WHqQ_D% +%AZdehF_4j7p?O075Ut'BRuXPpC3?nK;G=XpCdFqgJcpX.CXCMNC),HRbW7O[:W""2N%ZGY*,2L^Q,b?QOcV@kQ.h)5+/p#CI"Z:S<+HKe1'Om)G?lEE[#C.?YK\Bn([NjkJ5>.0>ga7TQVHoAZeLlhp[KeXgCA\We(PJX +%_e"_E_+_LpS)6='JX3s!S)6='6-OfZ2nuPR#/'<.Wb<2J?=4Qk\Y&V$I-0?[gjA&9Zf%u=lakD&n(E,]3:JN"=VMTr8lJdaA".Ze +%S!2K:FQf>r>OmZ0O(hAKR:4m&g7h2t='8L2EU!n3.]0/COs15?3Dmgb3Dma`'bXA49Ed.-oSnco?'?Qp80:):)P*Y/YL%FEEtsL# +%S>B(/N2o_i-S*f1(tf?Y8p,*QTRlOPJR"I7TClu+J*sY.K0$1Ue5=.9(Bt1<67@'pM?=VkCoI4.[]uME)(JLWY_^qmk=aa)M@48Q +%/lY)=;j!CZbp=i=\#0>ULmp_G*6]T?8m2FW%$qSoQPiX9Mq"HC9 +%4<\>+U1QPp'01;W'VaFVMacX1oaY".8&;hTK6@DmD6-+`4Vqbm91R!U,=C^oFTW%OQju4#apb66u<.Lm0F%.D)l07OBFr +%1?Cu4Zot,':&MU_Z<*#MEY1h\K@CI5mp2@JaZTI$`b;E&T;%H?Mp-(_fABd`p*fI_)L8H)f/Cg7)BG&UYFUON&LYNS@u#3F0M\br$dmAE+0opfV0:=TbU+9m)+l)^j>^A0j.nN>01U`8d\oj/926.IY.//^U'NkW +%&f,QJ$.mm?6":bC3XXo!J]2QJ+X`aaG@jed9F>Zg0MsieLa_hhOfP-AB3E'hb6V]@1"hIOl7$F&VQ\4fS`j,c88 +%O\nBp`$o6MaK?J^DSYI1/$S.KT!!bf1h%b$W_H;'X.=co+`jb6E#.iQ1Y!Ko.GV#&+L;g8:J"u+4Y`:gCpn#X*@YC_8:b4jeJ22B +%SPYD(&FmT:$C#"L*Jf+`5fg&Q`-EVThb#Gp-AF7RKpC:Y9``O&E.OEl3HL!t'iH-2dK14F7$2?Yllh`IiG=LjPZbgNm3cUur;5oI +%bXGdNS1GX;+s=.H`'TUo8h;HOK(1^R +%Zo,\rZD9?o+?gL&\5l5]=sX^(7&Q=B2,.E;"L^UZfJnS%&q$oP"HlcJfd)j-Hif"tK`oH)nPq#O6p#_+V\gooUuP<:g.+;QjK* +%Bl?^@bh!!!4qdL9!`kh=("096oa8^`VdD0jfAs!-J2sfFGLlDe;:9E164@EUXu*,0NNEg>:fTeuD!MPflDFuki0ai:,1o+p%:7:+ +%N,>jY7]d3G$sKJN_0WGQif>eE.nZ6]029Ud:7oG:OQ17[eIn4>--!#%TBH9KU6nteTPZFHm(8DbC?X#0*C]*+&KdD3jRC)pbN&3ONW(+O0?J*j]VLnoN?8k.uqOi4CU$?/gmK+]/O-?0lb8SO?\[NnaR +%OMXuf$F5tOqNqTX71=A`JJL)2(\FgQ+(mCO9DR/#p;&A.6/UC;X.#M:bYuPoVmSTnSEA-0kC@sS=]VD(gRMq=p[8r'11,d&RRr:QSR=hp,SPXto!fDWq7/u1]Yh,576#MMiZi:6)L0a5 +%$`jA81]t!25W2!OX9-,A!'f_!PFr>m:eVZt?a[BL-Wkfa==\E`'B9T];Og?kO5q"qulC\Vg34_=7G^rc9 +%b"5^;O/r=2&JD$TB/!EA>DNRkU!"Tm3S<*9g'/0['G&P;+j(:[/?o<=XZt8eo%5gnab^aG;q(DKKX&2jk,TN2B4$/fqM3@a?'9lr +%#f+q$JP.GNKEmXlngk#!-#(2jLR1%.0U3"ln2q%+[;,&r38,3a.ZL4r)SD!*"e!.reG>Qd&60\/C6^S40![CRee2TsNVOF_-F#7= +%S>euEk'0fL&YtFK=kp,KhQm$_Z:NA<@W:",^i?kp23:@6N=N':*k+Sm5M6VQEA:5Jc]IouZ7:M5d@.)!Zt)\paH/>_K]l*1j[JI) +%O<[Y.OlD=q8D_@\Grmb^%_f*J7.r640]h6QHO4kJEmL_IJ"%@o"Gq*;"U&)[@MH`C'8m4.2ZCILs(/S\*8C428u.C>OK;5P&>As5!Xs4p*]Kq#,)!9&;Dg%e%=jR+6`i_,m1CuQ>/f&[S% +%:0m*PZ[:IL_oks;P']%GCl5s*-2"'mSeTN"P'OAJaU8;X2;sE)QUj@qii3kT(idr^4'R5o2rWmSVoO(5%H%V(tDX@i:@1J!q999E:a1?A;KL]KCl4dIAjQR[phDNk'E-l4(&)%YOR5q:e-adZl6'&Y8SSd%q +%4o$.CS+Lsmh9GhV8k70HH*3sF-X,X94W=40Y^0>i\e,<%cGZkmpY(H\^Y\=>2b^m*4hamVg#r1;hW(q_!,164lQuF-[eGruaS+\3 +%bkNMocU8JWI`GT-<6[VD4+t6M,/AH9oW$\UhJTWiuC +%BJKPp>PNl&_Apj4Juf9+65.0_9ELijZ95sdJ18r5Pr]-l>XT+kg7[gF-J[_)%BH>FegZ@tNe$L,S%$.?[?JU@q,iScrr6Rl>1h6un7j,\6X[CtVAa7V_`J +%`f]jrSn*p%S=_s_S+qjgY")1I'Jga\,'BAi2XCGDa!kU^l8EJ!`l4DOANQjD6-3.24"/YijBl\o;5@'>p^]=b(-1[L!HRkY!\T#] +%!Peo#d/Xjk?uk#tFEFL:*fsWR-I74Cp=S\q`6>)U5[J$Z?T1h!>hujJ;d"WrcGE]CL3a*1ClNSAH +%EB;h$q.`6$R;-A#1CIBS081,<2N?4!oVbWNoA9Z]:@R5\?C]roR0"-hc[V10J)qb^+S8jOQ`1+sQY+6:`YjeI\pD"S +%Ou8r6U,-:XP-att8f(9OD%3e]S\TC\/%>h0aBR(:`R;6Th-sKYPB6lj-XVTDCU-^*>Ys9JV\FJYl:GGI%NKoJXrt(NDH"o`?[X9DmM+KhQ($.5U +%+3C8;N1.Wg+7q>Keda_hN;AI$\"pfL(*W=,"tmDU"$9X0fsBN94Ge&E4\DZ;m#l%E9$2=",\N&]@k8m4`6uVUUlL-SO@c7,5p20: +%.IN_biX.o;.sr,a,o9,:8Kqn<#,qdYWc7calUdZ^\.\$ChUM::rr<2!n^k>61e!fUn/!NKAuCl>:Mouj'JmAf"R2J`4$#Ein)^7R(Hf@-JYB$;^+VKOP$obM`W]K7#`]Ed +%[=,d4alAs37[9%/C,SW=0DrESpc\9E7!Et&\ULhiRSf5:,0@3^rV':GErhj@Z9.CI][fZ";(u2%L5k$#GLj_rbkAEabO-[jcBrE7AX:_'6;&)hIoWZ%ef*.2m/KB;lG)Cg) +%W%^R,$+V.X1Mb!V!b`M19K+ut>-PNLdBl,:O5CHO\l,965cQjg4mgW0(J^9o0;kY,$l-="[7a;9;FR6'0g0N`"Eo!d">JM14gtso +%KY>-OU25\g6]Xi,P`?^mXWjV`8ipKUS!\5t!\fYSS74i?!mXjc-:X4$/^Ve;VDMbDkg@JWQIs_K?Q;&1XC["'mTu#]9s&/F;2`,p +%>kZeHBH&GmlVYE3WX^gY'B."e(iVi#ZB;4u>cOAm*+uR1PuOW0+HONn9%;JPFW2NCgN'''[iTHNr`/[eQ^5aca]kC^@s:d/SIj;rC(mFNa&q=:taDU;nmS'.j7>ukD"FJZ0>eW6odJCGH\s:Vlr(" +%cR8M`KYVt-j1l_Q)bp41l1*(g0c"LH^,-XP4C4p>7rqf_/gY%Wp +%99C\U;cT2\s!X5o84ee#S&N:K55rCoq)aI<;dVba!W2-qlL/'rT]D6eIl+?Y*0Y!^B]Ahpc1A-DBMs5JY_7Yd5>@m((e0Ko4B7'i +%iq[LLmEa;BpHsM'+F3=r([%aA/reQ6"?f%T13=g0;`<&hNrO#H8P2Dk%A>WYR'Xi__paX1DT"A!-jILu"H)0;7>M9@;*cY%n24r- +%.=LA.KT?Kj2S^4Lc`@`'*[TKKRdXQO']IcUjqoJ6,+@t,#uWn+XcBL +%V03Q8>/I)='T%]eW0drk&;'[FkYK]nV_9>AL2g#T!HEK.`i8E2d;l@4CT^L= +%FGHIXWO5%rk7jVlRP!((c4J^.0kU+ZK>[EI$$Q90/CSF%4p(CBRl'Ie(pInK@E9@[Gmb$a%CC?7M6":#D;;ET1i)-[->mVY[O,m- +%imR1rN5QH@bNHU`Te*&rR9P>-MZVS>q/ +%N$\3p@9*0[,L@*Ug-)-ubUM6GCEoYcQdh5PdKb=D9^8N=B+Z+.pmsW/fLM11oUF>aZH=l3]V8EqYtE0q;FK<%CFn*(:f*&\)PN>T>%+7E3M\`0u.GM1eMH +%i"jf:=-Rk^G1IkpK'r*8Iq=^m7E/"V@?VgVL%n_\P]<"fU*+@>$[Ik;2-Elkog?)AQ +%c".LVQfRP(b/\LAW->G.C5;]VVi:Ur.Z0cH6,O0]P8k7mAPFM#I<<(Q7''UW.;B]"6-)0bM_NEC\0.#J.\p5F3QI>(^#RZ1\gg+2 +%&uNu#ETSF!Zt3d?gCAMKl^AjbPR+[%NlZp:h>@(>\C,h<83VM"7.`B/s-^sqLe$S#:uG?Um31IkU:-'/?8_j"5LSG6jMZ*`X3Sa_?65`C'D5m5$2HQ6 +%XT9Z+A;VTA"GT-u1ftut`LOj^oF=YBPhE9S!dmO*B1l)j#-i=T9G*+$E)?_RlBU#85l'8?`T%lZC@P2K(YQC@d`$D!JZ<-:>(N1n +%a\PeHZ_7`e=:oVO]("qZYG<6%7("_ZiqNOiY5cc8&:H]SV]9l(aA_e)Zs+erE'JO/e8ECr([*U-0q6gc&=%3d7d\>*Eh2W*UT=i-/%#_M-eN`-Ps_\?PE1BNLW3Jj`]ThJKAmf-/L4& +%GM1k*Y[:dnFA^Ok_II,kKK-C0gjXepEc?h7UI.qlf_6gFT-RWU)*.q>Fc&."h_dDNsh];UT;*m6@Z=]'+NW@2DPNFDa*JQcZ_Ksd4<3kdis +%^0JLr6"/hK(c`$p[&31on9F05R@e2UD6[#8"ge1)K=KqB@h;3D"Lr1'"@igVS3p*F*G/tL*5^dWP3SPsm+AOJT +%?&d-3I&e72W.rC;BgTX)Wl]P8c:5a,*k`J\MUSO9SKI/g`M>oJ]Rm\4O?"a@>A?Zsf$WSK4^.B$!-/q$9o[Z?]VaXU)qa(3i8?c^ +%i*&b18W_9S.gtt%_?YDfi>=b'$Qsg865W"A[4&m<+Mn1'X=GibiRH-?.uehp?RRY#".^XXN^0LOfVnj#'8dDD1>l)jPpbX\OL]n0 +%RGp6C=kT)jPS,gH=J6MI#iSkjI;7rdnKf&gPEloeCN,;2k8_IF:*5^>pF64#)'\D4EdVUI@j[)/+2)(_@^U_WF7NTAYlRaU_1%E(ZHJtZG#mHFQjC,RrPO1LT9ShB<6AJ-[Z^n#?EaATO%0$MM",d`WiUp +%q"(1s`gjU'M&fi80)D3$?ba>TmG$6bd7=u.^qdD(1kb(&-BVHF]<_fuI!;_61gBpO6\O-RW;R_[j_MQ&+OG"[X")5uVe1(-&HBMC +%F(Z2N$2'oFs&%-1IJ!j^a"*s>l@%,b7U2S.(&Es]IH`Ba9ZlhT'Tnh'p7f61r8UW4iaB/]\B`b7CoScS`'mk;7-gPlQ"\]=.?0Ok +%R,,CN)A;`AXQ1BE/Rl\]QI-I,/,LX@[(IpiZI1VlQ7e>fY"d?u'LC+Z.&3WuFftX6BmVn*5)BSiE48lV_iN*j +%3nZ^kQA8QEcIs;;Ug7O*$2SRA&Y"pc#.$A5L0'-l5=9AD4P]rsTT&rV6%?R-A'B^X`E$#MKcRG/R>YUJR`rp@%Aue"dbSsUs,p+RdEMPBg0("fFJWY. +%E?nU\3JO0UeQ.>+jfB`tN'q(3,T>*N1@+:Ir^'2'`*lQ4B;1*;ZpDK09e6Q:_a/s1!.:P+(PN^7GHNhLX18MJQZdbrAT4GsgQN>_nKZ`bQ/4@9nCIL4U\.OdP!IK_=0=h61eS\/f4Q/`MKAf6-k$(Spu]?V])TP6J+Mb\IsCqN:M?BSHq+(l:oS?2<&[dV)qrLFJ`sNh +%DJS7?-GF\'Wi&BO:W'MbL:hVh?bLoX':\Wp)lDdmHFc[D2l_,_Pd`Mi>8+J'nMcEkq=">`pW^`SO70f.s5D4phS8qUEms/<\3fZ$ +%U+A?K[TMON+f6Q%[61;*a7^9AXO4tE7)p@qnguT%%.mO[>oaht]P&89J?)aSF5#i*<\[FfmQ!YW&IEVgZ\c_3.['IE-<+Ip2ZY@T>P +%pt8usb?P_WAFtlgT9;AbISBa*!&=jk,04:k#pDgaYk%pP+j=(VcsRU!SI9H`*[iq9aW_Bf-B1V;R66ep,s$j#LqQ,"!AFuB$YmYQ +%c(:Oo4?fh@H-!m5*rY[VbaV.?\dT]6f.M^&g<5()Du'3F\Kium82JN\r/8Mnc:#E(2L6M"ee=iV1T/lWSBj=d1!fa?bu_W1hVL_,W>R-m&9uZd7QC#Uje._G'`A/YHZ6tL78&[sf:rE2RY_cp@5Vst!jH+ij"fhN +%_!Qi@YfKFmf)\I:0!!7X:cIiO^,(qNc#"??Ts`utZ)e$,@@skgWY4PE1gMD+Ptk=K%?dajNhf_9Lqu%fN.E%u>j%#>IK=2cG-NHD +%ORB2pI?db2W58BOc4JN`cuIuS;WSEr'=q,h6,j.qpT8mIH_=CYtd=EX-[TO8I8c%QNMsqDAERBXt5TOGA#m$1[L;MI[g+I'Akj<"Yg/:_DN)=\oRC&iJ +%N#\o\X_@EQAk_N9jF\0D?looS9m1B*qiZIVXpNAGfpAtS5/n$l"LK!-5(]&'RHEWt9m_X6U,ngfL)'Qc:r,\N4^>5QA5]dDR1%P4N3cjo7q.toR)GDQIY,D-:8Kn2r:IXGtUJ@/MgarfN-Z&+".Iso64j,S@fI= +%Z%mC4YM3Otl4.@ia8oDtZd:t:p.s_l4TqG%bCB@;Uhh46A#&pj0"9\EIGL20a]O=GAh[.CsKucs>r%=c%V)HIggGXON +%kR%!)OKA3Or"EGhb8Wodc[dZS$/h1"FaW=_()=8?'<6kb#EFri\5J2l+\@7p=]TjSXA"kL[8L$@>FI:3\2s[LTbL9tls*go-RUL.VYU_p7eec@PI,%AG,d;UlCV>5E`t2D3hV$>GZ')R'%+;RoMB%a8A#!DPBo?PUSUQhr6Frq7h]_k'J(+<9%-K +%":[G4:6M._kBZkCXgGT4MMIQCPiRF!Ed:e/Pp?S4&$Z(Q1<@Vs4"r&7e7C[gK&q?PcastFU16Hm5d\?3RUlRI2uAToiB*T/G@pLIIW$F;gS?_TTSuYbVS"[HH^ET$[?IL +%*&h3XF258S/2u@Zg#Z'5,@H*+_/>0>\&D>$U8gXaG+_dY%_>lLebTPYXV$b1V81$Dq^U$_C;?'N%N7"c@]Bh1L:c$"iObE2F$X/C +%c1n.j?DfNTEeUhj`)"G"f?!RRBQ'M<4l#m=+R-E!8tX6j;^Lqu1%%nOOO5s%J/0W4qWNqO%K/\pbF&A43OU4)N+ +%6al`pE'[dA1=)?cQ$`!"P5!I9oLX.BgjJY,]Z->)%*XuVg@qVVa^9e>RRQhm8YC_7+.Nbn-U/?1Vr'U60E$(IB1W"$c3M,/=;NK& +%Y5W?E#C*NR9+g@6cUC+CRj-*=4P@98qN-aVIb+..'?*#>dE(b7pr0);f[K"[r<0Adh#2UdS'i\W3Od\>*fB>'gn,mJ/)]KT,0J-c +%0:$u4?t`'c"QC&\9(me-:NCH=O`g!Np/%A_3k9f4?OH@LTgB6J,cd(ie1jhC03-,FV'emG\7ce%cue97d6KU5bY3-Y1WpI6Mg"$o +%2L:r]_qW8J?AVe38?c;k,):ocEDX\HcTI&O_QT5r*ubH3BK06gj&(r$U)(tt!'5ngK#EgTcH[_X1a9k5fKJ`OkkRhW]l)0,k`]Q,5o]CF5[iA'TPaQV:?prF9a&C4l(G6*XM]FJB"%%f-V +%l&!dLW#gqYUQ/n&cd#pGqAlZA&:u]"BFZ%sO8Ph4YV"j9$C[Zm)3's?NkgVU[*`jJU4H$VDJ"N9:5jES;o.N1Ab%cK5>]aC68QOc +%9uK17.`+>ZPf3\P-2oCZ/6:b/Hf,>/WiE&n25<7Ufu;=gRW&e.E2%`2,s:DXY'h]a??Gr2S6c?.P//J2W2=XG:.WX?q$l2i?%d7i +%\$uH7lp/^@o/B*@iiP+`_\A!QIreobl2gZNkKA3ZIZdrii@M$+kX=P9L5\DMqhAu)Vi/j(l\De18q559pT]p==8!.6cH1oFF?P;L +%@Z\Xm)^tofiM#8#kin*3>R5_[8#!NabVO8*nAuK]I/iV9+5X[-o]Fu]5P^.sDti/E^&$i7oNf`!rTa'R:QHUSrUg*XQIk#BGk:IS +%LW;?gH[LTWn*pW>&9W2XnLd'&i\M*@8YPjsrI=a-hu=5^qu;:Es)?lNs5O#Bs&X4?eK',<+2?Ccr0IA5Ndd"<;2=jX_1*3ra#eLE +%?Yf0Og/bc;ln,MG*jnjZ= +%3D>VFps'k,oB+lha#>*Tr9!PKT3oL^[lb=lO719g!OP,je[,k+#jYB;gVA6_%Ec5`*=GR@X2 +%XsK:1Se+D6Dq&9PgUe-128[r>O4TdMICji!\U2ZX;XVh[(G3@q*(+1FYLOp&*\0V%-kQDCbY&oTN`EF]a*K-eNF@21Yh#3PV>`k)YgBkE!IBm2\GONMg&=?p_:#`n[)K2)+V7RI0l5XMkZn_>94;Z +%$[@/L6]]EWK)6WN])Sd^cg`/?lCo0TZ,.Ns\C;gKhP-7XWt>OH1j1r"#Ibf>TX#JL7]KnThJoOYEidDuUhLcORbG>dH?tMk7YdkP +%kKt,TXb;&:e^9C>5-;+X>XANW4cKZKYQ58tdD0c*!9<7C`M7?IAnaF+)QEaP-ZgJGG]fJieKlXP#2[6.4k[uSkFr^.SMAMecnj$Oou%3=4J`ugb+"$L:ERMo&oTg*fl +%^*B$2Q?X)Q7_"6qXl&oK[>1Z@%LrJZ)Aj#F;B?[18pDS/(p=uiV'Do?FW9r((<<0eT0GU1W+?"!)'6IX28iN`%D8M$Z.MA.Db@e7 +%LKbji_lk()A]ci/g:_s66P[2QS`L_N*Bo!73[@V>F%-H/$>=4^.*=l12r#p3_5dXX_qgLrY2;X&CELra*.`#Q7;G@uE>c*JI[P%gF(N.k1IU$,YO +%ZQAnRB`_rrg%e=erHY9Tc%Z(SaSGChmo"W1*ciF6'0iJsh6c^ZgLor%I>[B(Y1'2]m=h9CdiP5r[h&GQg$.0#2a^*8o,(HgVpb@3 +%"`+k[Wj.eX*ZgaN"jZt<8!+c$!p0Ts"En/`SC^jX)N?3Y&1b9X`Z7uAFJ,+X5#/p)VA#6aOnBNeh*VV +%)NWo7p^gQ>+==Slg&VI@>ufWJi,(3UUYM9m$.-X$Uu?[6;s:6u&iI[=iMk!mmS"_U%[&!?:1W.S/"*c$q@0O$VCYC#<&=rtNr%&@ +%#UgX<^iUQ!"CaYqO(^g>.U!c[=EO%*VJ@;#V!J:KM+8-`4(A-Y0QqQG)RLA&`X6D2f]iU\39i4RNnT1N?$$r&!j^nV^$$$l^$7Sg +%a0A"mJ[Gk,%_IUW=JWkMj3ZcK"-;eB@Kc5)_@PD0)!Lg8)`V>5cdPuRK*_^)""hXVA'smGTIri]cB=J(?O(\;(:MO5([k0M7nF)d +%#KI0'V9g$7cYO.8)$;im?&?^VK0GUh+BZO[+_W5_E=F?/r^AY7HBtjN-n_L+`n%O/?s7>r-]s]1HG1aD-rJ17u]bE6^48h&iaFJt"C`'CYJRKCJP"N06 +%1Cs[\rqh_`()[u%4*OEnfsg.<]5HcaR2NhKO:6/lr;HYMJ+E90gu\kA#I/f_I*36bI)^EaiMq"4f,_lcjm52qJ,J,Pe6R,RSoUu, +%dKsNbu;m",u"gD*H=r*LFfU"F=F1=Y'R.oE@\g6j9SYO7] +%rE=$h3N@6KQENK#pUK^)e]iOEdZ:uBicVhSh0Ft2k?q?j-%)Y@\,QZfIZV=Jf#O@"B$'\<'mQVP6[1=4UOW71 +%)[JqV]@U+5pC2*4pl;,rrPS9&+4j,c;?qFn-%D]glZ`4i^ZU*SiSY?O/KZdO]BMF)b),etcZ,PH(an0/*d,.0VdJ?"0`o3@"HSQV +%R+JdMYmS!qDY=U_LO%&8kY%\&$Oa`&--I&"iNS6ODOPXi?`d2qV_7CmC5B)f]'RTP%N:o>H"?1>S;E-H54p+T +%$m-s)!LFSBRg[/uce1Ni]$YQj1Q;o`E8o-A^Q0s#N'>7u]Vh$[-YuB4:[-b)Gs6\S4m2k[/b=RICT6UCq +%eT=ONjDG%KFSjlb6JQB)J&F;"Rb]L*Y_KYROmHm]F@k_qS&R,R8Vf=n-3*O/@tot;[SQ;nH6)JGUu7[)2^Kdi51WFD]mX&q))G>m +%cp41pC80Yr1[Q0k0]^6V.l0t;^23kFCKBfNlMpT7%0PnD0Ljqe\qo__7+`iM)1=-DHX,:T[q;7Q%Xi1HI&bb0ru)umIO&#arPW+T +%i'>_-oH3eH5&-Trgm6%c*)1VEnK8ChYcaL@TKk$]6[^nhJC-OJN`S*JWlZVgC=DOq +%FNMA*#-#spZ,Q_"L%N.*$gEb6@p6^dqLU2K)RsPqrA"?1':Li#4S,*lD^Escem?>P"$:^2pIJQS'Dge6A-0ucs)T?--9pIKr_T51 +%Md7aEgOd',=bY>b)XRnmX`=-"%9%#9lk.cbVhEc;4^*cpHc,41rL,/i-8j'BKbB#-48I`iN('mC,3MB3%5G7`YU:@hnUYshI[#"3 +%>JGd,l+_q(ksqLHA\)8l3f/dJ(&TUA&FU@(Dm4_#_W;Y>m4nmc#9m6al3p2l&FXbm`FUtYGhJMWOsjGV("gE0rY68Uggd1=(^u34 +%7_`aug$Dan=Tc[!RF?pt@J5@29Y+D>P7@dqkHIDXWkYal;\4U[[tk"D3Y!c^rSJl^5D)6cEVF+sqctN"ct?.o8Kf +%QT.,Dn3sbk0t1?'^!=)m](`$0Q^4p@0BKXr2]Jj)\S&IuISe&KFAD!KWBRp/d1;]"5!I@c"R6D99dYO2HHYKnY4+fO^"^h[p0.>Q +%O5Y74(_:(O_(kUJ\rF9[g"53>do`M,`\Qr)"g'\T>OUVG`r9>Z@FcI)m%;ncQ#s2pe+`SWH63:AAQ6b!>5eZ+$f5ZF,3Z?+6g3!J +%r*u7dDXI3VT;@jkk^HW^4OMkMB9M@Q^muIH%V,a`ibNQhnRf3OSN88']tc:dpo(eh0r]?r_G0\8d@)?;-4caC=UM\m.eHs*jt0]q +%@*E-\Y[(eG0VhB$gr@9-!Gp[L\,b+T-$6G*=-DDkqq]]f]$.F=fWZbn!]0cF'_ +%9GO>MDmijtqJF0!UAlV'_AJ)rIMq3)KBGfY_Io--6YcS2Ht`YoF[Lf/]EfHoJFQm"8?F7L@":!!YdJGiQa%Zo;,t%grmMsDV$/UJ +%C<>nPmY`[pA1p16bEmYSZFQZ\gP),1R6V"+]s,#O?IrC)[`Z-L$Ee3ZD1Znc4D^]eX=>$3+\Lg@YaG\ekdhC)ea/RJ,E&`D9,;1)nZKiukXjLNC@IdS8s2SS?'LdQf(=sb#[CW*_r`,P*QnLlW"#1F*pC>KRV)s1j1J`V-[au5-gN/TQ-`40Wa>iNGe +%>qYZQF5jV9DnBcT2rBA?mZcS!edmf.,4t%%V0UjbPHp5.p9pF4uTIM_1#)_ +%U!IABll^tbI@/,3MiUT@4H\_=j(dIDA'_mU[r"@Dm+L3Q\iNt9gotCu_%?r5CGm1U.OP5)YAC`>l,LX\MsoZj7@66Z4.9oh.r3#R +%c&s=.3Bi?@,J6=m$p9c:iGhC4+2GrD)Hg5_^l1a-WJ4dN#U(=YYeSfX+k6Oeia.s^]U2L_\l!$1"g]uBm5PJN!\'[&XH<1QTt3\@ +%btHjQb_&7]n4R&l]EtuG@IDrs($mX8hQ(WZO3I#lAA_DL3aEd#RFDgRoRD0LKYb_!G7.0sC;J"^G?7Z&Z"Ci/Wk]_GhIM=$Lr$$_ +%K*,ptJt8J&E"`ia0$0mW"XEcT(pg=VPU2QEoGLikOC5"Zq6U:OKUZIW]6-1!_70tP>O',K)8VuFpHYl-s&Bt=fHf9ZS1SSK:3:nJu:jc`&<@R8O^0K@dqeasoS6iVFaF*sM9pYAMuT;7Nl/d1.KL9/jd45ot7B+7m^(+^D%K +%&p"Y_O2?&U`OhXh'akkE-EDD0NrT'jS.0WOH"*Pf+(;U/*J.$J1hbF'=V:\P,-R6$LqF1.1g%#5n+c:qI9<5n938WFul=4$,V@\KujT!`\10`=J\u?X1kF->\GkN=UpZVNsPM3^B +%O5N#SZLAh-[)0nA6%0:#_u6$_&ZnX%YTWAMUu=Sj#E'uqBG[?*Qlp7-9Q1k-@EQd +%2R7faK$`qr+RFdD7XHKA:?cU=hCR4bLYUgN4.Pl&+j9$HiA\8O0&1h+I8;M+FdpFlC,V-6ouRBIH/;p+o'\^8mb?W)s)3,3ZM!pn +%q7(oK'8.ho%E[#:7:l%+I-0;SRC=,JIEgb]Yi!HkNu\)U?/3,SY:`GR`VP>kL?>pH[,e`@DV334]D6I@Fl$6ZKi9&Ga]&C`,Hk"# +%MWc9Hg\GGOIW"!<9Kfbi:ud75O!J#e1n,0AM4bq-[la16#25lH('V.H[nZ\#MK,!3]+j-kr.>82>7UWuempI=cJGS$!40o`O4BO( +%D7/JkIJSe?]+T2!#`i/ADhbmSXSiuk[D*8_-.Pc47rf,S5&[ACd[#q4!sKQNmHI +%+lAs:2o^-`5!(*;"&$C[oKE7)2DEF6e2\:L`0cZu,io;GDahVN8QOr^[pXlh#g3ui':jc3T6->g6)KD\Dr7#giWK,O*Q``/?Knd> +%8N**\q`0(_PE#ek4i2b+"D/B7@m31GgpYaq:XI=_?;U/Da<:4>T'"/`Jt'-OjRH3:mq(SMi(RU*4EXB7 +%_PQAapbS58!s%&>a5c%rJ(8L#O2o;RT\t6-SuLW]pIk`"/G/ONuB+q +%`l4$%St^rZ!6\\!CN:,P'eJCi+7`r%J+I-Vqrdntl,+I1(`ptbhguVeA@C0e,Z"!VSB,r +%RO:*QKW_qp]:f1.d.,+3/=Jqb/ApJ8[rqu2q/bNONONQ'J(Y?BVlY5YgL2c4Dqgk%pM_Z.Zc+<[R4V1)-0rE>k_WJ<@9^'b72OPM +%7UFi_jBm)pbcn@op;rX%]o;]2;Fe;s8Q;sF8(>!0a5GBD8c0`--$dO)43+H3\[(PDbS-Ia)rMC2culALf::K*GrHuJ$:'>f@o=Bp +%j"ELUpH2TKP+E#F?0-:-%3^ +%2;Nr_nk1@p:@5NRCDLilipVH#JL&CiaQdMa<``M3]%W_*jUZW;f=S/p$_^Qk4YH`Z+VXIST9eBCO8!Fe`0f%2h\Sln)XZU4-TY<( +%15VT..,EltQXgU`rl@bjK?%s4/jCQHD8ufbVa550(uX"e&8g2Y(^2h>%.Ulg#LLM&26TLcO.j?Y)UGtUnXQV[1QprE=KaW'9!0FI +%m?5tLRk]\\]lg06^3+:680`]O.T4TY\:s2aEt0"hgB;`7@$#NcaR1pla#n3VVt.K:hlsGi\c>iOC$AZb)d)8dluO3@S>g%O;gCel;gnQ(OlZs:AVN+O0qo5)@gQI0_]9;b'VN+7^Y*c#*??]7b'fjZU]s$8P*$4t;#J[UuL$+DpRkY#*<*O/+@bb;>E,;Eeo +%3^5JjY-N67ibl>rW[t`>m",BR`o;M)QL(;Tc11r171^s$-8V^BbI_bij::AFt-^mTB7 +%10s;3A^B+NQU&09HD-=Zm`qdCuJ"8I&&)&<+2R@Pc'4#M$BFCACOn0cZT'5eQid7"'6PR4iO\O'4Lnaj`Z5mU"/FG$U;/ZA5 +%/0.Muk$WUHd@H2>-Jpbu/gh_$aHNi:Q#9+C28g$OF!0ciVd-FQFa +%d.%*QE8to5lCBGmA\*=F0Ln=")6"idcns"!)/qseoAn\%4)_Ings!>iMp:W6]*JAGjfr+Wi'+I.QK>+k43Xf8:Cm'a\g1t!=S'HG +%(MfVQo";sqN%jeC9(Zi;.kN)Gh5%XufqSmRO-V00)m\>JZkQfR.CS)lPe +%[N2dB\>L@8c9">2`72k)0ep(F6-O9d@$'WABTT-/r5UA\QS]d#qOZj06Jp7>*o/bN_2UVQnJEFSLG6I<6d:VCqOCg^Et#XLqHrh+ +%Fi_a3T"`m>Znjh4bjC@6T,$@/9B<#kVD40\\N$h\T,NWY"W=OruIDT@_q/D.h?&ZJMR^@f3n'.u.G[!OTZ\IV\ +%a,R#N1k/\rO6S+Kiu)J.1u+GN]UA=?Z;uf?$+sWS:OZOf@H3e0k>OG%/M??YQNq,p>caD2p;KW#7M>(9i^K=&S(\<%LMN=62=Odf +%V;nJ(:kA"+`A833=Rm9d3CI+tr)L.P4b'./S[''iGmg@Ek7Ag+H.:n87#tY*%utsBSHhYJ +%mgd7(oC=@bc10*6WtsEpZp)6p4YPie\JAs_;m[V+WAQ8q3cJXWeQF&5Y8ZD76*o1S@fJlH9+71(@l@T+"a-D'`X=h8KTu4mo=MLh +%QH.III/,l6b1Ck=h`E'-dYIFNV00/L,^iVla1AjkHe!(FT(MPH`LYN59"\IE`C8Yi*g$O*pl`1YdD9YE$Y4H$5L$esb<9NT@FT +%T"j)E\@W:Gp"jrQKk2>$arl>.(Xo$"EufN\O'D2hd.9/"&*#2dGp1ic>rVf%m_="BlNb5gSVt6p+Z3u7Q96V#`akS!dZV9TX97b=PJ&"rlmKU3ICO/>X>5):iL>@I&cXNhPJaTc2M7&h_K:Xn>q>IGsg=LDHY:ri5P&;nJd.rqhB91 +%]Q;^,d<5W2doO[XnZ8$h&7&C:SD5H6O6(K^@^gY%T:> +%epCtcSS9-*CNH`K%er80dSGo$e^=EX7Pk4jl0&>;e'Y#:6:]W2^UjqDU>lj6hYLABL<[GJ8N:IM9\lKArWXF&8Hb +%ZVtfhn8h._al0inKQmHQ>F;!`k8'rXebtp1ob0-*8ab=r4e!\[fibZmFIUA3Cd5.EG?HW43P2S#1teq$)d742OIO%7&a(gqr_Z)1 +%0^u.snB3PF]%P3h7\/@VUX!qb*l[!^Y]9VbV,TdB7@Nm3P/U$e^bq@2];T=inkAZ?O.H"X$C$fr@ZcH\[Msc#N:cr +%lpE]Phc&rF9ui_j*n][T.sG.W(Lac\_`)A?/b$.@leJq:mt>t\hBtltf@nqi_&Dbrj9MV=dZj/6V[H'ia$@NT,W*E(f0A$-St5S. +%T6LAo:O)&(bjG&9&UKuUEc2el(PpNR)?VcWl:API.kU:/qV7f4^6*:+J=#/mo9Qa.aPu76a8@p#*Jq'H +%GiGp]if;l6Si#Ud[]I#($$go6ELmBLIW6FQ^,4/@5ISebY1b+&H\C_`r4[m18S0*;PM:E=1C%qUU\Q_Oo3;Q1GU8QI!`"A;DkmBu-7&eDVoJrc@Y=oZLXhiT*69!Gh8bs5FQq=,+/uQLPs;X%dNVAUH"4F_Djd[X,$u +%=L6PWoa,1[<9k4Cf1M-@Q&_DCfh*8H60D_DKBh,>SbUWD.qIX42m2>#Gd.qYren`TXPM]HB*.Nt.\K"[#ZN(Emg"GY*T*EVR)FgZ?%ceu; +%k/4,9Kc2XJaksX_gaeHQN&^@k$hk.FhDfu?&)1uipX..o]D(0r/YD`S*\I3;U@2u=V1r'+2d!"6okPf:<4n)f]iT/]Kl;DCiIVr$U-m,\8iCbEHXhg0I,OB4,^$IJTCe#]m1= +%s-j`-YQqM_j(GuY?sKbPlr`([4mtY??/G#?GaI$#2B;ZFV`-341>?FY9,M7F&]2TV,t%J&_p@(Jf7U],h"@U35^]$Wl-H<40#;QR +%qG.'X0u#AS[s@[/E?6R=bI(XD^#A8meU3mso5#_mcTK:?-aF\qamP-@Dt`\lhV=sT0!3ut,O9ralb.;U-ePPLbbhbUM66C+W3Xlg +%-g;S]Y&!(/eK?%a,RqM9-rdtCbWfNY!;Y,YYC!^Sgg:SDYQ3f)mOQB:nZkK);/;6`88(7DHk,FZuokS7Wk(]J&YR]HC[i!f>L& +%G!Jtg!cqP.:,7VQ?ZO($rVeUXi@Dm^9L:=/mmSS;mPW>e(Y[bMNAUWM@N<@mS;EF:D,#_TmQ+/9J_[u:B_Yh7F%OI(U_XfX4n6`$ +%k0,_HQWB$OH'(P!Hd8qaR;l +%K5nMm^UnX$>L337He=lb>PK1d;_BT:H(I5/U%VM\D3A_#F1W^QpjUm1YFFYf1THa@[OIeZ?5U.8#S]^(fK.-^`H3P0);5%)KosXH +%EJMsnKo>WH1=]2pKMF*"CPXc4MY6p+5uk!Vd(EH0.FG/:_t@V/Oi\iDJC=U=0?T]@66d< +%(&EYBCN[@Ku5C;MKQh*qMhpuDg'_Z9,:+j7$WaN2anNmjV(R-)sEV?`\Nm-P)Jj3(?9=%9WVaUKb`6a +%M$r6iQ_r<#NJh]uLk2R0Q<#s2;mG,;O>2c/TUfYu;tCNjVhBit#sUKjp)s9KOT$Og\qa,V&F3Q/Qs"(bX@Mu*N*)/dS0SE,lS'"= +%VZ,u\oOIXT)VlC2Dg\T&k@po#5#=.gaDhWQc38n*159r5>4X +%L\LE,E.5LqXkpE"*b4&Op4]=bq;)M2>M_h+r#?'sZ_%)a-!SuD?hYr)G]a++:;W>"\cHbGb=."Ve:39`F1Y.P+Q:N45KQ>krjl\e3" +%XQ3LFl7R29(^A`rV?sH%0_D=Xb0[&=N_^Vj%pu)W);O(OA`YC62aRr@u26>#/_o##\=uAstMrK#([ahr-9=:qBd^WTsEFg\h3Et=@20676 +%eJrb)kP2YJfe[^G)+NdP_dm!eD]*_B(KUR*GmbGW\n'g.Gh47hqd,8C:"p+/ppJnh&VVapnB&YDo_Pg^beB-P/7C:,?.QR)DgJ_g7XQiFRf`Eq1kU3Vq0M7A9Q:#eE*0\GM1P2?FP9/]PdI+HMf\AqrX2OSbAOGs2F$u\?WKe +%\*qS^%?+;L3N3.#l[7g4BT"A8`4Fe#lH@atA\OEgT4,-'I`1'g\GHYk20Et=XB8C[2oXW7>Z[Qak-9>K&Sn<)'=%S)kN2T_jnUOE(\te&Zq]JlaMUNA\ZOJlS.@D3PL4%*-KCj`po\c: +%NYq'uVnm2egm2S[]f0Q>.]RYhp*]J/.i]VX4cFU`fJ8OCaBr#SYKQP@%b]bb)n=tbN5!8#@uqIIRHZa9"h/1(95$_MHqoH5NT?\pn,`>,U6o0+ +%AddfbE:h0"D'm9Lk*>G)b@bZfhLTaVCT=9n2lI8i&4J"T3Yj.a1jfL@]0;\2D9$8/ra_uGGcY/2GT_E$!StP!TncT,gE&q'P/1#I4)ph2)kYe.lWUA.D?Q+u9 +%psMmg0@:9[:2(s,_:g>>)33];(DZJi1j6#`it'I@.jI'SbfPI&ok*q\.F'#YH[Y^AT-8V"c@nI+NDo"-co8a,Wj$QNHrN26FJnra +%Tk3MjAk".1YtH+`WPRNk6X>9qVOhEO:$hr\2HPj.)D.eA,_\?A3jR3%1QT4'il%TRpC=oD3I]]nqehhqdE<"=HZ.f-O*fIk>'rZ. +%d,G`4`/96uSuCbHZXj4^mM/u/iHoieFTN-A$o"s+qT4":q`*J,7O$6;!dg5()eh"LMHQ7$h=E00J,#Fg?8ue2_ADof`a)_nA,&hr +%5c4RaV*h>`E7HPMDOYNSeQl*Sh6?1i`N8Zdc$$Y[/8q^nbhBc5f\3Ftmu,]OV=H7HheYBc+.AIfp3`_qdXBi>6>5%Zr`@;BnqWhr +%bH;:uD7OF\"+g5(%=;PPf[aIkg3bQcXXuQLbNrSlo16]']'[r7%=4K^U5\Cs:k='P:+r8HfZ]$$mTB"]okecjm\Hf]uX +%J5uK64h5O&fJ`2`.N?W=8G\)/X6<\4djDPIWO<2J-b=e:_)bK0m3787$n8tqB]0q%Ja4;CSSPAQkHKj6GJdEc +%*K4[C2*r.!or1?7kE0$#&(;1`0$`J%,e<'OMOq8qrZB"C0Q68L*Z)F8j3'6fls;)T!E,>tFWPTmPVfOmZg5dq'RR]e)R7d64-eu? +%qd/F>20Bo4*%SW;/p6;Ibd(E,4AEXjoZ$7KH#HZ-U"Mo`[rb+L2/@O&8M9@UTPGm,W!1!8&6$bsF(CTibjKa0_Vfd?E))3B]69W[ +%eD.e6188WqcSIn:b@SpLnNr%^X9eC&4P./,Ikd%35Mb,JB%mo23?gU,U$QA"kK$P8egA1p+`4@l[r`UHk?8e.L?EX0+(P?.qtj.M +%gL\/Q,9@#F4k+4N42@)(K2^o1GU$5.ROcSm?(U&b8Y;U]l#o#4V5cY9pPa6Q!fP`:<[oVj/#U=oEf,':M.'q@?.ML=H#LD(c;h)4 +%$"$=@@QTBN8%+N560'-BPWlL=VC@P$Z=V0]X\a$Z=_;D$;VpiZ?2Ue`l&e_&0df#kF\+bhTA'S:8X&JAV?uFF*Pt:8=iTgfkCGN5 +%V:09jiDG&M9l +%(kkOhN-+$#chDC8i!CJX&I(LLU(E4I3DoQOY/-RuSV1j4"YDMh^b43B+bML3)+ND.[&/bW,:_ +%V+p#rCei$ZfL-hCg\B8,#%:CE@\iQ3"]IeCVoQXuc!ij.orKm,H-\7D/d2YWUhBd;QH&b$dKPiopZbhCCKhkk=@)+BlHPVrZ; +%-bm.kHq2PKk0&@X_ql^t9t-]i.cE%bh^4,sS^t6Zs'NYGO"gd',<""d^4p@ad"b'TGaaX#C/<;u6+sm&rYYN]g=LQ2i4f#2iU@sT +%MUc=Q4BjM;+^>9C@MZ-<6a6%A&&J6lPWD%XG2$Wg)-X)NHkiOi44:FVgq"nB=;PO1)W^:!!5$$_6]^ZGg#sT^=n?q,PADZjS"3^Qdin7NRF2W)\BLn!A1jKF_]"VK=eqpr2XM.cN3!>PEd](3H1s,'G`E[,0EoEP]([q&W.X +%$Fc'I^8[Z\YF45<-#I3f?"G='mrIIkAs8$sNWHV)8R5UB9=l-iGB7\?nD-hC]D*U/ +%GJte056*h74?QNlGBL=WZ<'aZo\c_o2jsUgd9d%UUGu0_Zo55&g+fnGg=/:%Zb5XrB6cB#T('6q5>(+nL?iaJpa +%&)+oVaa@-\8S2ns8MUrpVrIlas-W!24).@WS0[n[kSLe<8\Gq6paA/3p"G`'@:jN(gMD/[gKZ#@\'t00&7bUs1miEQg[a^3pVoI# +%L".g"ra^K8lfoI-[eq%&HqSerK5K>jQ7_L>GQ4`&idFH]3.'U>cWG/p`A:]Q6?u&JR;^O@:A7Jo?!>rs[sIb>ht68!1OK(@hMouI +%[EttT$2E`0["KjZYauEf$J;W^b6iScM=5On!;0J%RumE`dUbne]X3-?TCN[(+,AnFQbe"EPg@G!VgQA-riR8Dq[0ua3LB*:a;m27 +%Q7Ea%fidX's70h372\gg\;[".G*@FHI(R:,oo/@2o69VF%+ZsI+0/U$51X:PqhB.%lhepPX8:G_,b!@K:Gd(%qok!\a)2=aL?Vc0 +%rtYmm!sP=L\\$&D/n)+K:j301cBT@3^+f7*pKR?J$Y.LHEFJc_dFOT=(B0FV*aGPR/+qGN@OZG;@X:Y;S!]9)R\,_n2qtm4]4^jB +%4cWqmkfZAcB)@.M]?>aOM/-!iM_83kh51EY*P'A[?)$fIra?b;X(gMf?M7D_I_3JN0^Lq!apksQOnV^^hmP1m*naQ6U/r+NX:f[m +%^MdqAF]QtE2c>mZ:@t'^6-#m/rJ,1IQNQlmE0i9,O5ZDD.uZ0bZ1%?FBL7M1cIDFoKN;=-^sj0O!of)d_-j=2a$kq(>lshmsr^4+O,nVL*.8)dZ.a^Kje*7h.7&<4RLF$ +%3IPaA,p-[q/L[Y?.'`qHT#ePr`Ua/rVqZ%]ahA!OI?33U+ujp7E/GBJJC&$&$7fLjlNgC(-/$\KI +%Va/cRbh@\Tmj@hEir?/'s70Oqpp^8brqTpjJ*2m-qiA1/M?l7J8$oLAZ3:qZaC"m!mNU8[:lB7XRV[MG04L#_69iX%=GKeIW@"U0\(YR#'Y;30h4(lED +%Hm[K0]VQP>V/"L'$b);4)DrQcs4$PL`h5(#ElWPG6t@8cpWB>`iZ@h3iZMD(FG)rV]FPrj:nAd(-4st@ie]_E'nm%"!t)dWSU:6g +%VFr<^'Zj't*i0g6^Vm(1c%"=1rRCNA2/Sam=h>eC/''m]S.o@$WMGGr,X%hmbPQ3?DO$j#7=mkhdgd6W_0-+a$fnqUs-rG;Q'Mdm +%I;e%.VruS`)rkkF/XB6c`T2qq$*2N]CfKNB8+j33__NoU>2'Baq67:@N5'3S*3@aRmt4PnTD]0/_>!(FSG0h:FQPlZ;X;fKFZtSl +%1%*)3<#64l^U!i'/*"6Z^j]KE"#Y[lZIB;q07EZ6+8T3@L;bLP,[+J2&EErkPO!t8kO+;;Qs]GDd1>O[2lPnNTZ6:u&dER@37C)T +%cC_'aetJP4d*8dE$jqG,3N4`<0:9nds"#XP5E/$An4d@>s3dO`o6#/P2l7=VetBUQD5[p#\!G#4d%>^LDm)4A#''n+)orbLDkOl4 +%p=\[j;0$InQO`D3Aao4O.daOf=VNVP[=? +%F-p"u]s6s`J*)01Utqe%_q`fa2%*;/^4M-EP#XUJ4aJo!q6Ll_5=FC_OO&7'nTXskh9Y]5EAT(F,h@G)n+LtpgH&ebB[qOlp,i;d +%O4!E7o2t%<5A/Hn_3cV1P;cD7,q!45f3_E..R\`1YNk)bj0-nmpDB+g-[B.h]d*5sTD^7]a/J`uWToh"ea@.-p>e?m--5g:`'h$^*Dt5iJ)@LiYi+p*u^Ks.m4&=?*=^id(%#7#LLdP4h-gtkrW\?FG(W#pIQ`WpY[#5WJ +%`'a%t,k8A>LL9UHFZcD%[GbXW<;Ve4*rG02["0fin;lu/fD;=lFJ$b9qa63u1YsFaT\'8_MMH=#KB"[Y`;4D3m[BgI-5T9UHUIE+rnAOpo&'A_ +%J+t\sn=T^1^\DaF?`^;.;"Y7rVNVQT,_u,DP`fs1mG=QRL&5fb^]32?p](,QIf,6krf@*Nq!mhP"n)EFs+T0;]TDS@%5WG&\+u%J +%CA501m!%ors%rmoT59;(M.]t(8_uPd+`d'2Q&*70ZpF[O7et*#qa.;]Od[W0af2q5!rjYM;,Vttk_;LkHOHjghtdN@Y-J172[t&] +%i,A.P^h\%'#4/\M6[!=paW@aWSbJEl,t'V8h>!i(D;3'.iM2W:l0785o5O&0Bl7;YU&Pc6p1g-Z8oY +%Y/'miI$`Q(/9>***aIVKdI5$678].)8KF>jissdG)t"jGeFDh[>U^p>&X:?f/uY:rQLG[o7E#!!g8RRfL#5;S(uu0dldWsuO\R8R +%LUcKFp`hs;b!i"h:lH/7WiCX"H1]n6#C&cu1cFnNjl_0=%LBrN?UE9<19AaDHkui6Ng[h!c')U-6-%(a<<8.!367>:/Q'1OTO?2l +%:*lZW$DtPEK69Gq"'i.9d]'T[^Y,`Bc<8bIS\/A!V +%))!g76=g,12KG!^G-$hc#F;W8hI<@snNqaJDeuE(6,U^M4-bF&3,ba)+RH.(6B&da7#Lu+.u\hs$EB&#";4hEM]p +%@>lhFs'219l3%>X)4fXJf9m&t7,3^O8@l$PCrR +%C[tN(DWG]]26kI*Q!.[SLP+dkGk"S(f;X(H0#di#L&4tcIe\>(UE3Xd]]k?%-&aZOYb6.KSk3`$'p*G!($L\?dqUoj]=_fS)+mB[#^WDACW48"D#nsc0lq[/\e\dQt;8-.k#[R!&'nSh8-S7T:Z(TcZqHD=hTn_gZe.4O=kJcS&r\0#0C=kq9mfD]&u:(sYfVgWnJ;.G3ni[0F#LD&7(e-QlqIfB?VqRF$OR@]XAV%f=*rSU07j +%o[_8TX")rW:se!a&SC:0[ekt/i[Z(*7Ub%=W/.Sg6-^Hjg8S_)l&C"Jl5*>OUr5ZoG+*h"+Ne#f]+E==4'Ke*G4T,lKfZ#cN$l\+ +%kh!DceebK8A(;*p;Nf?+.3rO?af^OS%_BIR=sSc?1&Hqp\h!hrf3h.WVM[X&h6ph7qG]EbSif*pS/`,V;ut>h\[bQ+;HhET"^=&@ +%;Qud7Qk0g5d!?BWgWP6d$Hgjsrc?UB2T/(K+]HVZ1o9`4J4s[iGO]TNV`@L('Ea*jjJOE^<<@HmFH!AnK#FgN+'hpEgof,"XE5'_ +%;,C=VV3slS#O7Fn8XPNG#;DHlbcP1j"lms21BjKLA9@PH?7:>N=9JsT&W"Al#qsR@=Xh22^*Lo1%Dudk9-$Q:E=WDbdtG_dVDou+ +%Bu.WUlLG8r,hI#+EkS<(>H@uh:t(t5$[iC\dCPe]WWsrk@0)+l^".uG-[Ji +%_;0ENMM-7BrKO_u6:gAUpMC?8PZ&9,4'i2gQ8QET/g^h,'4*(8_q>NB$O>#lX_->jll.Ts+:>U&X +%Jq\#E(lt=eF6^?8GYkugI\MYd3EX?6N2BTnnebi7Q9X'3M"DUeWP^:0.+^1B+:h+:*I,W/f;UB8ORG/;b$hH8U[b9:0PfaVUYApn +%I`f?E*;g7b>E%6//soo*V]jnI_GSBE>#IWdPZ^g;dd]^7G4-PbRi-ateu=TZ,c41?dhBh5bf?]D'P.`DB@-<0QVX/'"]7fEnmR/j +%iXj"W*^s9b-^3l:Tr&Tr54(I85D%1Q&KAM?&s52EMa/GU"rd^*aZL?-)U(oh2iZI3WkkQ#SRYBa#r@;8j\`)mWJ2i2Wo>E..]N,5 +%N8Q,Ve*410APsUs;Yh=A("iA$b?[!gXAJ&M9EfGf6\c"183Nu=25N%-oWBXo+%aAl9n6CI'O]o"EbTD)K:ln'Z*T#,=1]*adB1,4aoA;]#\#a_c`Co:2lOk9^C5-sMdooRYECSpTG +%<(u1m3n:r@ba!fUCp;)d)g$['L'k]tf:U9,]<#UfOf#i&Pr0JL1dc>-1?ClRn:MMHH0P[Dcg!c"nHnpXR +%.ijpQYIW,`Mdk59gJ=A"FQ>>$Ruo-GbVh$EFOrpEkH32]_L=of'HrS0KXOZM +%Cg1NEZ0.mPOt;h`0pFu%MNBa[<"cd4A6&1%SPhd:[^/C^Lo=m^S^T#RTQN;@uf +%l4DQIjcetlm^,`p^suS\$YrSnCPF_$%Ze!P@?7:[,M"VdO-mn*sPA;sb]:X$QNqmA+ +%a"@b\W3ZA3k8`IqS597JUd-@3bu"#'?*=a.f2&9]G%2aYPl5f9_N70`#]g#gJok[#Jf^YPe`Wteo1g[5F7:$1q6R`7?!nrq,KQ-] +%'r@QDjb0?C:BRb"&h4T;5jZWFZSU`-X\W498G=W/04Z"dV\A/'kX:q;B:rA.u"[C8fB.YE+V8??j3&Ee2jd/4V7RG/TYPP_tLYCh1(%dK3<9f;^-34Ri0"D`65eWFYkdt2i2_cU2mT_$#W#rZI:e!o+eKJYD]qVk\*5s,:/&sTj;:>N:`>FX&rWasVF+h09*k?BVV/d7_i[fZ2%?@1 +%':%-?IHjHR62DEOlrIj?<2'?tQ"!e^OQo2VLDR_J,LBddd_+TWD]I +%r*oWA4,l':i\2FMX*4fMC.X>hVO)TG&.n.jT +%`.B]k\C6;(&;C:&rA@Q`4U7N-XL5)W#Qm-XTi:Xc2@!3No&6.LAQ[_8J;/j)/kq1u`JOZR\6-r1V4/eOFUH@NraP_u.C3aan$?3] +%A:=MOS-GC1Y\k-A!rXiIoeqCA112!u@eBE\7+6bZXVN:I$P5`f\YQ2Z3n>K?AV5[l]I[6N/D(4.$5-HHEW#>4J::bR^9\)T$2/12'clpmRfZ1-6C#lP' +%eA]:Fh*+/I"C6L*>\nq]k%4>Ml/Z8E+GecNH:?DYrJZIb%Tm[;%_EC4`NX*8c?+"_29IKAWgu1k/8?9Q?'$St[o5Lql+=%LGJ%hg +%7Q:*Z,9pB=0,`*cI>SX[:&V%N73GKVab\`la@HU+YhWT=hDC:tpSW7n'CguCBensQ?^gi%:R"$Ye2tK@]L#Ed"UCZ-Rj+j9LK0LI +%=B4eCh)u/FKR:CATJo/f)k:qW0)3aPX<^;D^$0uN10*;]@@RnX;,TPm["2n,CdmrjT(d7o-@KJ@Wdgl4Z/!ga$\A@YW.aP>+rDDZ"n--F3ajRn6K8i7SrF#I+/Kc&BnC%C1X/@S@O\k*?-l.&^E6s=ELmF'\ +%&]GiHCQpGRp=H_Lq"r7%Fd;[-mU] +%Y;6Gr:A:bgTd,d066B(?QKQM5!<&Pl..g'HG=PG9n9)L!!OrQJ0p[_@$nraMM_F.^Qg7j^;(>i3@H-W4NmaG150PSs?>0-5;/H,OHY+VnZ=)R0cJjiKI!!If3#4&Nk3ifd'j]'\_[r"+ZEKXg9mk,5 +%)-4u(kjtfV_I/Ke*X$kscr1DN[K<@J"c4O-hTV,ll9pR-fr7MrT.+A*i"jDREn6do$"Je9bkHJ'+L+`XLJ\`/#bGu7RDaP(>+Ag* +%Yp(5@+P%_\kn3+C93-El,ScJO?M@>Bi.*$fO[_E`QR2O0]u1a(PN=D?'(4k='PqrCkd3%YC_hEY`RUQNHF@`3]4ps1AY=ZET6[;IPHM/6aLMp,8$h?mO4 +%&2\B+2-b`]&aM;+1=-TRiB6I>1Nf%lqMqbJ#El+Jb3O.sXMRq.o4->nRN!YLh'+sbYH2CQ`?``[n,0+mRO?d%H_LYmYeq;?BhTnBGH+6Y&`T."/c@8Mp9u( +%<8d<;VKJf@Eh+W6hCq`7Mdq^mROLrh8#WGP&E.i/57^eWs,7SR9*&*o],0ge5F[Gh;l\U+_d.__A&8M1UbjYZSS;d2ECB3OKtPTT +%ID^9TEP\9-(REaZ&S0N_;m_lE7&MS$Q#h=]]M&ISRn0;%C:i2aO-mDI_1mio;[o<9Z +%l)6BZKMdj:r:28/T!aZO\[5BS@>H\D%( +%1Yg;2%1W:k+W*-.0$EpYcjojZ7h30dfBMdIkd50W*@7peT'BZ5eeBB1Pi1PYZ*Y>A'@QipO&_7sBqne^_sh1[8Uea>kU54cfCC7& +%=Z67Y!t5e]/]eoqLF?Bk*?-2Eh[u_#$\h2po;732,E@td^naFT^H5;+0]LX5N+=sf=b+L7*esqlof!q-oXm$RX*u5[Z:42//T\XoCKV^;;jOgEPhCH#S=ET]GA0>g2-/f&?X@dI!J9GL\n2'X64M3-rLiHg&\N"S_Jhf9U]=XkftnuiQ/,3A0bVS? +%a&3rOmL7N937)MX^V[C#:_kTl&7'13U*q7q?qpca"P],T1Yh'U(sf/sTdOYm"CD"\h[=[3,j8e-H++1-i-2N9`p'`ZMd7K5dr%iE +%BdV7DNS!`dP+i7b,A*V`)-rn&YW<2APM*[K^L;us!'t4.Y(T/6BHmuCd+$h.Qh]IIJkN$Ob]856R8HE`"PI2`T1I%W;!SRB6&2)ER=fga+;m$Fo=sW37mg_sV92U-652o2#>l<>+K;Csl_mZ7SubfslhD9ZHnRn9q7@eHE!"[!a0nk+)un1!X#STW +%cg7>^XOAs-An-i/)GGrind"$JSPN+.;hQd=N?[M!*u)!PkYl1b9J1ub`./?n_Y4p!7/?.9&D31gXnDECJ^Gm/Q#C[i.8f6La(@Gs +%R^TUIBHde&Vjek^=gN4T7$9Z_UuiA],(4aacf9^'%/^Nk#gF%n"/DU>+B8_k163)%1Ka-eht$>*87%fD%aL)+_$B2b_\Th(;2'RE +%*6'AK[gk;hfU6WO+X^6,j&;XHVYq*jH]_MZRaC8*Bl[Oc9T:BT!]8_F'6WG5Wba@Cq3T+/:10d;[iFYk:pLZi$iDJ]/pLrES^@dB +%TR]AN$IVJP5s7'Z3X"%FU)8LA[-4(4jrifZ=e]\/KgSo*Ij#2bd3&h1[O`VcXN#r:W+YWGZ>C'ZT_\`($(C"+JTcfnZKAb=R!5\7ZR0mWB-M?,#?G%;9=8V.V2I^0KA'iP6_F +%@,,b_AGeb[KD]_g+&in9i_:2R`5*=J\eE%;FK@VWQ/9W'.QI2i(.O3O%44Od\?0Q;_@T]_'VU;cP?>os*>^(3`^FNu3Zc6\B@$eX +%;#&!Bm1k<[;.R'U!7a+4SB/AruL91Tpn5&:j1T1qR`q;Y4imS-0'WT0%.:rr;<^W?B,?ncaOQ8M&3p]^)Q=/ +%(9C\*(s,CsjKNq9"JmN@*H%#Oj@Rr.6.2])6)B96HHLN-8X(T1,>+7\D\,@JCo=h\QnV8_`ec0,9iP7CZ&n&d?83il(E[c6BV]4n +%KI::. +%;H\nD1d=+Oek\"nULt>]j"rI*H.Ke`M#>=73eRckXX',VP*70uCqYrWWW:%WIePC[Di\Z+'!h(A.h.i33@n_:.t'P4Z'66ZU?lYD +%fbdA8D-EArn9b2'Ip;/.RGb[P8JXc_P]rXC?KA%#_W5miK?ieYL[nCZJL;dH\bT'8Pc>JcaE$p!6^fo*Y//Ggd%X[VV;L')U.5[gO^t\5R%K"NX'uRhl<2cP07=?+":*5GfZ,\uJ1eS^ +%lZjJpGn(6K0gHIaMnIK="/@"eotHr.cLkFT*oq>[1T)6!W87nOr% +%%W.A]g!]Ac+NfeP4+(l,5lu5#3RlS=lG5jmJd>3>+*[9Q*bRY;OB2at+NCq53DGl3QMCUqcZ7%e:AaJ1PAkdt79tOMo,%4et"D+EFbA89l:5[)oo01Y3 +%lF13Y12BtTU6h!kN`F"`(bAsfc@3\0kF'_Tg1%(d$]u=ON7-0AA]SqN_^`I55RTj@dD'a/C8HZDn&b6XdN.MUM0biSOj6(dmP%u$ +%"ku"$#Q;JI683j&oQtiYkiP9j@]m/[%]8a<*l8V"`$=gBMYFai3:FC)M,J=:=V_;CH0tVc&f?2i`_,Sg1Z1E:DI>%/T$tPj?*8EF/=Dp%Z$33o"Bul[Vn$,2 +%e>DG8o0>NqP+]Z8NoK80gZmiE,\RuS]S@5n-K5p:Cri&+?1.s=(U`%IG)!JoQ@C4P(oa]n;K$sNOnl?Le5'8b_imb!.C.;rYLb`E +%oFk=2?4Q:p^[$Ql1AkDd&enL0o!>Ts5k2>hX[2%>%]#ai/o*r=46>]@]Aq,YKW2Z9)'>kpEa&)iC8.]Bnb9B=POe\;Kr9bi1msLpEO!0s0Uk@m+:LIJ3B+R2!iWSFoPH@0&*5q(>t+kq>XCtK[\AQ+E\WK?j(jK +%oj]95r$E=;;ut>m]gE"8"0lO)<0\jJRZj=j#S`N="T>0^h3_/;eESOq3-hD_B/d[< +%98,p:=X^JA@qJID+k#U?+GU14E>3%OKg$4:,uF"EOKTSfOQScDJQ%#U6RKWlND=ti9+*ua^-R)bk2Rjk;49#<]^JV +%l:0T5p`h=J9YDh[-LFO[>_e`B[>bpbZQ'RE_m">RpeEfU.p%Cdb`--TK1(-b,-VTkR=;]fhoZ'+Gb+VE0/djMC*UMl +%Vg=U@Ig[Y:$suCeCQj7=_5H0bZB35%^'pC-@SQD((HWU'P3J3KAZSXBK<2Bh>S_BnLp6q0if/R"KCbC"$(M"@7>D@>_aV`P@%bUX +%TW*t25nHMXG[i'']Bj>:q[AQq(:qgNZHul8lm/;S2W:Rg"XFk**Xol`ut[!_I^F]mC"b[(*im5Le/\g%s;%'e4-^(d4ZnDOBLe/]%^7N*V-;:>IOsd +%9cG%7Ks"C,!Ed0"a$?q`:f'L'^"t9.Kkh"Y>Z-!_Oj4g2Y_Y.Z=.?>;=96^n>(`u#'aOfhR0bH=b/"^4S#*:glWFR$3*(PQ"M-Xe +%!D6sbM^E!dq@du1oXFZV^&Z*V2FA"D9!335C_Za`CD0Z_LNqIXNYT?\)`2/P[8'ca$kT"2eKkUcc0;cL:!H'39I2a/967L%eM9EA +%Z.qB,U*u[PG+ur0=tcdm#K/p/HLc5!Vu+ucig&-Tl'$r +%:&/lMbs"Mg"A)#eJ_L6N0f6IlMb5W'UQ,4WXeo?%>nL:k9YK7-F"cimJRm=VP5[#ba6;hD'%):<0/;^^SRkQ]m32r?aKiR)qj'[? +%+gmD(J%;XIZ,Zo'/9h.76.621CdW^c2IlcNF_0Qpjl"IQLc8Am<"=_,o/`-!6\c+/&MZu+CS8X9[?"`a@8t7@&'@q(pi0^;+Xbda +%%UT@uVlCdlo)cVP7hZo)+G4)!V++Ag!f2NY^d_<0Es2'0cF&q&$c!Ki@%ZQ%!+JsPN;eJ]",:u]_jI0pS04bQd?M+7 +%_I/MIcQgs_J!^hSrP_gY:]Y>86('61+GCSOI>V&l6Q`KbM=_E.5P=;Q*P#,Y&YDI6aaOu,i7fZMbYnVkZ&kR^C-)VD:dr$]Z8YTS +%IA0W4LM>he4(R=B(JG$=eg:he"'`TVb]5udGP,OjG0Z0b=4$T";0.;1UH+!NSrTcrX#)3:t=`AtMDb*%'i! +%DJR&U/B%R>RT]'O(?M.Yi+S%_+AU./e]rdeaK'?!PLSj3Fjh[@911f&1GG:RHuWs+DJ$Sf;Da,cA.l0G!7 +%1(g6*rWqKaARodJXE==R!Z$JuUg+>Kd*1aU[OD;`0Z%1I_XqcXU"PjpnhYTS5t_DK^3d7/B](WojlS"9jmHJsH$U5u4/3^Hgi'EN +%&Grk(:g98b#WgHlb?>RV'IFQ=PY8!82)(t]onu"6l'T!0,de1$1E&n_'Z71%i$"Ya53QB)!Z"`g?mjT^?o*$GUPXtpLJG9Ul+ouB +%s'jZf9P/7Y%^Rn=+MSXeLoS(![GU2/@&uWdSQ5.(lPF`47K:c/mXOH]dR8RsB)K?N(RKlF!i!99R=s,okS^FS9N#t=!7ijEc62UI +%8K#He[^4Wo:i;:>W65hC*(t*#((ej:,V&>"44QM![m_#:+o8>_6T<28"-&""8A8$R=Mc92*C)oC]EqdIJU3_hLmWtG&%K_#f7Aca +%._.WUG:=PrdPLY0@#Yp_!d.1-eSr';[.pBW<2'GT+#]a.\gFZ:uY_:?Si.Z,)g^ +%C.*!)rYR""/TKP:3(FL_k1/#/cSPHZ<'ui`%GiN.0PfQ5(RC_.c%rJ[V`=6F&>:PkJBkn\i2]VB_-Ts9@\hDG*EFN:RhMPc#F\Xq +%+JZ?DT9':CT0<`$c!!F7 +%A),QuJdM=JWhiG'f^2If4CqIC9>s6E3th?MV+DMsbqnuRWrH&%I[l93#]Gm#0tW()C6c_B-NA(Q!:;OAn1[\73AmpIK:uV'UL#@\ +%#"L$+cN_"Hq.!.LUpG.t4Ro>LY-8UsL^DFCAaqKaM3)4uC.Drj"(d"+O)R`N.j!s)A0t?j'Q-1"1jEi[V2Ae4aiT;nL!=DuUuK(J +%X=cf_IVLue(u?Y?Z,`K]8"3+kYVO7;e:3&R4$oUJb;_/V49FCPZj#\G0'h(g]l>SE1Qo>rqhM7,3ChQRN5unXe&BI%:SA9d^e!E6BhVDXd9G. +%G&7*4(hmF%F2XPNoR*$Zb`=nY8"RC:560\V5tF1]"NH;+=g_>/,;[>)>kC$Ak;f&`&_G'P85Wf3<*QssU6(N\co<.8Where"KSF#GW';aq3j:m*$q +%[&/;M[Hc.GLW9G'SIYCrV<$1ec/fh,h#!F\=+-M0a1cZ.On"/n?'Y^5j[4kS"bpp0We-%oHnj,?Y`,L'MObF"Fg8e;]o[bi_>A\P +%;\ulM+UjTPjAmnuidpePB]=OXbP3dt$[A'QP.MFalN"(^QjVSY=D(rT+VYS3N_LpI/U\CX'HKTPlB\oachoSc34jjA]i6QhkoMug +%dgO^*1'@g)J@dCo +%DQ*3;_rA^$d*/quX>NB$02qo'Z]0G,N7V<,ef;&=+!'*)#)d&+!PKCd-orMVf#B%=%=QeWrP@j+<)ploSZjM6!#Gq5/>Zg@IF8N[ +%J6odnC6J4sdh3ub'2pBl<)UN_U2ULoG6YIFi"g<)&udRbd`&"+Te%qJfm9:ba$+7.3*K,jQtt^'Aj)Ub:2HU1il%j`afQ]Ppr&78 +%]jnmZ]3?Y<@,=$XE[Urjp^g@PNLe/WZrYR8&@H#bATU\r;)+YoVDU0AcuBiXD#gAOVG24Z5rHO;g^ckS:!t/g/Bi+Bh5PE6mPFmq +%di?oP*9"8J:)nO^'0Q-iT`h#+&VC1G`[T"f^R&g9@(DLQG'-]Hi"Y/Sd[cKdh1FLQW%:D=YH.iNa;"N%?e2:$j(Y/3D9aEq:p^]g +%[B[4l>5+>ak(;I9,TYa5c>mc0M5tS5jm51uO8[!oec-5'L%!j>W,Ob9+eSUhI0#Eb9^:A3:d2,$g!8m'H]Db8\u+S/`8]B(X^h%h7K\ +%6\K#=N]+tWodm1c)mZ\P8KK`;U-ke;MjZXA=go4_c4Tk?lZIlbERKEbNFm%:16i9.(-c?)a$.=AKgKRQ@&IC,opKNh)D@P%*u:6; +%8u&X)Xb'@\)V*ZA?/lbM$4"&Y$ZGb8GBIOF<*)0$0FK#d@;%"*/m,B/iTS$Pd8b_Q-ShVQ4n#s3k'Ej/3"+de1NS"htcd?6@\*T),q +%o#(H[V*cX%'Va!LB1"&a;PT4hAPTV(#UCm(0^FPr&OiJ"VKU1n#=(M*3gDVHO)=0S3[:'@PPMeh@r%Bp6b?=YH5Y#3>&JgRXPKE# +%VooU#BFe*1+5tQcP(<&CBM=2W/M]+O6/6-*?Ag[Io7rE/"HtGa.@NAC4AA7U?a/BP@:bt9&_%-(Q6K*>"sa+O]V>JXMqL=GC&pnF +%Qq=^2O#n(?p.CW<_/6P0*p%7S!jI#5*=7bI(1=*kOpSEpofB`1UA7W)![C)0N"k@TA2CYHRFA-;(Ydn0iXYf"c=G9:iHKc">CG\! +%eWrbpZpk>)]p80)8sEB$0=CE_&X7l!)0E(D])I82g`':G+lCi?;.m`+Lq +%`eY9;5''Ys1TnDCB*WOO0fh3)6mL87#9)*E^o(q&,1U=bJE7i:$q'2IZ86T:Er3Ei$n6J@O1atGfc4^SO,"2[=AE!"O5(G2G*3K* +%ele-K1:)O>ZLA`&6"^GaVQssOS''Z_Ws%\5@cs:k&;H_a+1j,X^KN:d+ma;^(^+:\VE3puP7R@LcIO*hG%NUe[M'EQ]kVu[+;LTB +%fh/]2Ntc_A#$o9h9W*aoT]%"g:ZJ-9:>.eYe^[;eGSu<4 +%3.Wj?mSsDl!"$se`Qjg-,Q;R1KODN'hGGOGB(@I1p$>ZQbbn#o6uShBf4dj@ZCX)[jWO1"BH4+r$-YH3CiQ7U4qsJu^[Nk>P9&7J +%;b>,rN.=@l*;AB;O&ZB7`^;+NXf9I\RBNS0H"t32K+L"0J>a$j3U=&@%Ek:qAZG[rl@UaMUVeqG$o8'#YFQ.Fq_rR2o@-.e`E3\7N:0skIVG&!9 +%>@N,Mf_68k;rTCBJ^l/"`:d[g_Pb])>a4R$=,eRl&N'o;bKV"p<.=I=WH[h:FsrZ"oH:&CctE\_L`q;.+-e;tBZ^ZqHguUu!/&0' +%HF^fUId#8^'k1-3AK8,'e"nleCiS#<3os4o$3Ltq>Cj&"9Lg?V0MJH6!HPuuE0rte,!SA!eDOq\:'m(f^A]U[Eo5N=_02 +%(\1:"9FNN-@Io)J4;'J4&gSo+.(`?1)B?s78X,\kRfaT2+.U!ki)>[b`(u7C>&Kcu36Q$[24^nVE@$S/Csaqun+<&pft+BH-j@I8 +%VCr^#As00^1"Pc>S<7JA-H507OeCRBku&[R9%Q*EN,aZ.1dH@k2Z+CocYP*u"`^\0*.3s.9PNSGgB![r(M(2s$k!Y2oT-j=`IX[= +%V-uG[kt)!%=Rn$lgD50^d%I*`+4Q4_R/Ma[@I$0C",%\j)Wc,KEXq=Sq=I,I$(P4DUQam`'L_F0G3%r)T3 +%cgV?MGY[oXV'L.t1.'B,P&As)3q2_A<=OuK9/GVA/f8:0HQe79$ujG#dQp#ip%Xc53:N`b8sn?NPSq%iNh0==8I=0DS;i^;>_hh%6hX=<"2IiN$otVjb5Js_W-J"l!Co"p49Wn0N2u6-EEQ^q^D>4T=tobH+IkThI!Hf[Se':$TSOo,jSDX&<0Y)?aCYeV +%bbY*f-&^+f[Kc(LJ:jBcE9($bL>&_K'QbD%S@ql>S:ER"s(\(J$5pgQC8adNb43]5+p*=3X&Zj +%QU/_)5t/(.!oO'eq6a.nb0"WX>8_Se:jHfY.E"AROnp8(#ECoj +%B+UlV!86gN7UNJi0183$l((kI3I('PT]0X)Uc^&$7PB[%F+6pb#Ra7/Y;u&@68I?]4JXeI2=&'4$1nHp*gdMqg>OC858c9'dU=N#5h&025ZiCc5IFlik,)_jeR+SbUD: +%``HSoU8Ku&@Q;UE_g;Z\>*tL>r"4%*7m(!eA.cQ_([8m4hZT?`c!&-&3ZLUNJ-c2t_Y&@LmSLVD6b]c62AF,hKL$Fn +%B1TYT,Y^\eilI>n%R>8SFq4Q+mQc6rq9kc!,a3J/,&.8fr6hJAo!3NNI?WEh6bSM!KTI7K,qK!M0/fRij@_6O%\oZ*B9&7)4b414WHjOPjR7]#5rZCd!V"T3XMJj.YCiG]GhM +%(_h]@$AcNRD`uNOdfeT'#_C0cbH=9\CS0NDM<'GhKFTuDfd9-;%^r3/D>.^Apo#i]BaN8JPeN]fos*Np0*DU?\NJ[A"H[%lU^4T9 +%=T_GfD*_'a;:X\"V:6PtrHF=MI/&iuqJXY]5_fX."QhliUC +%XOl\qQ'ceO)1qP,J0C8Cr6AII*"VVYLQ"^C+;@cn^k+YI54s#)RXIf*cd1qd^\<0R0K4$OV +%:&lJdP"jo2pYT(jF=V++!ea)9pchZDR$^eUKa6kA=079?#ZMM1jL(p'AY>#)R4Q8gc&1sDD#g0b_=CTinI_NO-TJ.p'slXDor1=V +%Z?TFWb%CN+56FOY(;gk0G6Bm4Gc21amj)AW.%F]Ve$G\sd,T(u&42daYr>lQ%$<_He2ljm2^kLEYd\#W^`PHabVhOU_kGp\g0f%? +%nNj:]+jf0/3$X_0Ol>]GLGe#H6k" +%[ZE;]>5OV2eRVir9Ao]Njr9u&fu\+rM%]e!Bn.lLR-0n-OF+3HTF3Cr?Fe`;op_o/`hcV)f!k[TWqC!sWeCpF.KdQMqK?)-`E7Pu +%QZ[^%>TqOo>fcQB'PO]7dU(adf7>$3",V`R\>:3Z_tPsT/=\4=>UeE4!D_D(QF +%=YU.^.TSP_W"lsPMi'fDd.gJ##nGDu-jie=cF[TWL+sQF%*oLfbcfrR&D\]hIGfCkS!ns*"S=[mM'E(YiFs[K$1PuK-3R'VqM3`N +%^\U5<4t.I:&>$eN^]6ka$gsYelK9<1Nh,81S#AS.<%&7SKR4+L,W97I)jm!Y1+"I^mg7%Y&bToe3VVb4O``oTehsK*-<2'1T#FpB +%?)iD@j+VgoEHuf'O>sLDl=9;\k]RXR^!WUM!V8*V;"m#:IH`s_2PCj:j?p$G4)24\qXL6,3W2/),BSXB^J7&h$=??$teLkVJV_5(&Pb,il/o5K//L?mg +%9G?]->\\]sAuLEK7]qSg=d;FWpD4@-^]LPHtB9:o;=MJH3GH\\_ni:[e#kjP)pm +%gCR?j,oG6>BiL6a\J#aMEPE'B!^a1]RfGMrV`?l`-sn63rB+U/;^"DDZ+h\G05_qsJa1(;^m-&&6 +%C8Q4[SUEsp$9Ai^hlMF3;%>>mO$;<^nh0'O.Y?(MHlL$a\($a-n0<2-C+M +%:lS5(6:W+^`CEtWiG;AgegE:.@MLk_AT^lE,%`>a]?g.[D_o"E6*QqA[u>bYF99Cu>3)F64feocc['[[j1H)dB`4-r[V6D;f_CH/ +%:Fi$ZStW0^)b.ARP)iWqqf$80aeZ;-=RVnc>93n16`OS'"b*B81ccR19nhK;RAtn;,#09AiWlWaKI$sD8ra&W%5ErlO +%,i7@?-!FoopSMTdW"?TO=rq^F0fpUeee&F0W^K'OMM20.<7bo[hkA"^S]SqCmQjbqq/@7-G&!5kEgi28V-aj_ATVsdPX#h6Ei>$# +%;1Zpr[)2gcN'DL>Wb)+MP[6ff"q@t)^"kL0j>)cO#]V=%8i1(pK\tT^jM;97J^i*ZouU>>EU"aj5."4OK8>KM6Qpa(>I?,EC7[,8 +%(f`b3-)13/mQNla@u?41$:4.`'hZherFO-D\mO.Ei`*W?iOO/^*#,hM*?5ieL-gTF%iSbS>tRQIF/jm(Y%+)[b;r3^Am_oheAC]m +%1EMg$HIIthA##%im-2Y^<)M*a1e`"8XX(:?O?l3^3hj3UooPqLdIGSo'pAX\LTG_5pnKSUu&o68US]:t5aQ;Ze`t +%X/ru*bB,uAC9gnZ,'ZYV+*Es2U.3G^:2S+X2LD)0a-sJLF\gaYF +%4%O%VTp::CaU]$TpkK:RVQO_tl=&;1AF8@<.=^QS<*-EGl8bBQ+<^b'-iq/:)p>NE.MMYMV/A]<3hS*idh#.1:hH+V2-&rPAPK2h +%08+hLei]'Kl3,1AZas_cI]PJ&MbZ5oJLr,UQ^kR0^Fa,,guT(u>)$K&9b^iEr3k*N3`3F-7LCrj?[*$fS!rX']_OsGGFj+@n!r.lCn*.5O]UiE?R`qg*?!rM8sLQ +%0]6&r0po'Iik[tE`ZYS)2.tX;+>i.qQq<&OU?>:_b1QW1/kgQ9`D&?=U&l-=[^0)F +%\Ttn2]Dp5UKBh`jHBZ6(N*HQ8I@Mre4,iG+LTN':NI7L1:H>5':p>m_VPG+j?7X_DH'C6!&:[fG;)JRAQ7Z.I+Nc9?X:\9*G4W4+ +%n#?M>O8\#CVVruge1_F9AcpuGj[ZBi?o_MZ*QenEAT*"ZMW%6]%aU/0W2`h@HX%u1da:K&=Y=m@8lT:G81NK\qS18_oc7"Mc1b;7=,,'YQt6'Am/)EM6>/RfthTu +%f(=rAH3j.V?j5%$6++)aOF^D@XT9-4,D^s>i$4=rs-(@>=Vi2YY,<*.p]kV=q7`tV(SbG)GlH:T)cfW9mH +%ctXVNB],q!A`$A3nC"VI:"rdY.ePII.]PRC\hBGoU1LZS>g_o.@]^,Sq^U](fB8CarVt@?DS)2[gND/\!WGGL8cj7!EKAJ9>h4Oe +%&nK240cQEe*#*+F[YcaeWWiF9pUJGgaAoh_d)e;K$2,#$Zq7E +%%+2][O_JUJcJce[FdO5&r0Xl&iJ>+eESttE]A24::!P@XI%i6?dlUIF&;NML66rSMM%ndhWe%BsP@dfD_*hl.Huc<_b_0i$o4DWE +%,=gs[6:JuGaa=Y?-/!16C,Q;eO!+9W9>jg3Z5'gR)B.kf'[.'V>q36_/JqM).lZj +%$Gj3<8NE^DA'!l2`Q\HSFdWBuW[Y.UBPN5l"o2#NGZ$1iqWRUl7hmD^W3_9Yfgn&Dc8,?*KK7dA"<%R!74MeC!Dhsq2t8]E/@4W- +%:#>plKH`lE[WMN6D94h#jrR6hgJ+XUaS*YImE.0.9!EFqKk";+Ues$8D=`XD/h%(F4EFr"YE>riJB]M(""ALHX,kJHOUg;\]![lM +%Gtdjc+P9]eA,&3\,)U/'59act1&f7S,n\&"aHc,B#<[^r,09YV[rG\SJV5&EKRFE`SBW&fO?5K_fdP0\-DF`[IIES9>%(6?L*Rt7 +%GV#h$4_]ka1&J3lOnt_uF?)PVjgY3M2,&,?\]Xhe0j);GEtBU%J_Xan2n4!PUnJfdn8OWhaAk]Bmpkr_O:7>+gfrsK4JqrKK>"V. +%V^]oSQt)ueN!9BcF>26S28CaeWK>F8A+n*MJj@J",&E?[=nsu/bc/G[cD#`M1;FI+m"_>%T^\[MO7(A2_<+9"cJis[fP-b\L+kg +%WAmH(oIYY&Oud#c&?S96S1+nuQRViS/HZE>W;Ou2U(=1dApu;?!%8P$gKDN(OXg)mds+AR`#`iTp_(H8kdPP)!GDTI'`>J4mUe(H +%j(4D>6s*+8pK5H7=)W5).:bACG3_4FHa!+YcS/D!hY(1jS$H3BWpk.T=R(l" +%hJq&)'VGr9K:rsJ8u>L!W;8t`R&;SGFn6A+&V5@s`!EY?k\J/7n]/=5fT>K)r,+mWBeT)NfnpFDV]KcQpaO_DF"Q??RobCl=?n:Wdfu +%CgCkS+G?`^oOsGfa&IgJeOn%L2RV@7*;MQ(\qrY@#[X"Q(h31ViE*jlE?5*H0C(>#)l`dMmg-95qM(\%;]D@l>^a$l7]P,epMt0' +%i%f#B6\R"Qokgs/?H3.4Dr;!5C=$)*3PF0Ld!4W3RhBJ^ON%E+@pr3@X/dk)i`nOnL;&mHL'VDWM\$N@n>0DJ\9A;+G=pqb]#_(NSHN?Zpm+R4X`Iihe+&:oaq]^h- +%LT;<1hTZdU\no+)g_TLYNCO3aga`?9%A]EG?Dm,<"k9b639;BMLRH)4",*&Y26IfB^H/qW1:PM6_8g_C'j3-Zf%s+kZP&VO3#'-# +%OQ0VLA/X'1).>hT^3k7iqhDp_3$GNdIZ936MI:b'#_)r+&fuLL`_'J:*S;0tiY'Hcg'a(bSge?kd]nBXIA[u=R=srJ(?/S.AqnJ> +%pLXb_s4q<(ZOuDej5*;Sg8JAS/hoN\aGQ4S'/&W%DI'Bq2,VHa\OB=qUB^`()sZ +%8reT*JlR%S6g0)*SHb:^;kb7j:3Pk+f5jFP<-l=)OaWr35JR2"PB+;me_ +%]=s87LT/O/H9fs]i."[g'VnB[En;QCMlE&Z<\N^m*kTXkAUjY5L4qUl\>>(i)j0>1)N)S"4mLW@WN^sN!R4,-<,kf]D;r0&:>eCp +%#ITY(?Q?>QgFU.XFN5-<)\A1aqbFC*lMtE?Ji'_6^^a]0LF63T>NWp8+r,M.S*nNoC!]hg5[V#QR,"3JrtQN2iAR +%B>4)af,4Hl!jI8o$pf0Ep2Ep$fL-SS?#Te,`_##1B_'M+AN&J5;1-U17k/1_hcteZ^s_qXd.phmKr@QmSOK3$[%C0"e=ZK2,k'Q, +%eI7sqf\>XC=i8;7JIR\]+I6QYP'nmE#emkFQh?MDOCBoIY>e@G-/!PHA4m+t(a^U/*`I).s7VhC93#76ERCBcY:Z_ae3n,=-.8S, +%aXUB'E=fga881%UHl9c@N;W*Y=1)r7;ArKhEiE3Z/2P/us12p=ebPbXl+) +%^.8R;/#g"PZY#8/3H`-tbbS^@WYfZ?8shh`E@T[SkoX-jD7PBn+#"Uq42`$`eV'U^Lq_LMcajl]l*Ohs7._bo#3\u=oS.]K0CUqheO^igA@!E5i)_7&iJd>'0nm$@bNFJ/ksFY&$bJW'oW +%WpLL).-Y.f!T(U-8C^dkhD9bfB\ue2qbC?p#k_e8ErBDK=t+*1nJoI];$8X/&HP3s/:@4E7?jeJ``.C*d']olpcX#G7+B\sqTI`o +%C0>i+#FkdQ&3D>@;/'0'Z9+ZI-3ONXb%S^5?)#&baD"j3/jN:=i\>p_V'T%F +%_:sOoaK"I_n3H&?'[M.;T9VsH4_%1/&,!rVN;.%D(!o\nbdm8I`rmjr2]&0QKb;;>6^fL!pu@r1,-62#-pSAiTl+(430<4ULoirQ +%af,D][U;?:=aN&-WsERA?bg$g0?=WgE3;XJJXJiHBn7:Q"+'L[f2J`T.f@#F'4>24I.7tW@X_!Xg!`Ig&:]:.\4"DtpgQH=H(WN@uh]8s$s$bD8j&[46"(^>L(3/Ei[6nla4QE%1nJb,Qe0!2*a'14X`Z-SD!'hK"2_V7`EXf@WYHUkH!dK7SH%suWYnh($6OqBj6M"3(N@@a6TVK%7RH)4o=VFP2:0K>%M +%MD!"I@qP':k-n0Hd!h0ZP\_)"h/UG-1cD4'Z`)Q-iPR*Ne.i3`)!pu1$rr`0'LLB$G(I?_7`e>p/kJn9miDr;TQRRqfEaB7*3#96 +%3VRg>#,KB-FQt$J#jnabIlW;X'1m4,C1:b(7&)O(>NW5Q(@9DV*`"!@1W`+F?6,ag``/=s1+Mki8aNCW;:4ucL_gS56gkEV#*\=(.C3?,bb@e<\4nfFTUpN]ng*olt]&?"8?'>/\0d8#U*$&#/*=BApuT%%4#N[+aP$8U7m$,1f*?+5^sMLZ\V$B +%B]Ul,2FCmM$I+BiW^$"DJmZh)q`n'oKM5e%&NjR,rU=%^>cX`/L_1luRIhr=h(\sC\2\or%]!-5^gk;R:QXDg%$GD3+$2UmNp-iG +%".OL+08BVi&u$P;9sk`<6tbH<'H-*O1kn6b*_lQ?TQ_@!mQ]S!0kqf0RBSkOaS^4>CdS49ko:Zcn,QtN'FBePY_Po;F_IJU06%Lh +%F&YJUohQitfoaEDfSX2uh3gnMCQK8MU(\B5dgDUWQVn-+n-8;$\-ofZfX8Qa#BJ[Li&*#/`QMZU/kJjdaM#=SA+Vr1%r9K2$FfD) +%FKEBr)b)`.V`Z,&<1L(K`.At][jCYmm`8>p@>l3IGsD?Yh,a`i%$!,?gS#,uXl&6Oa,YSY0PNLT+E^ZFp6i.GBrmc"aVdGnJR?.u +%Lg6(ZTJTj3cop7X0m$cO[g6f9-d"hc\Q9frHM+nh\?Qg&E2/IU+g[\("nX;4!S>>KVC0m0i%-!b3#W8"ErYXP;Qg=C35egkoH@kS90OqJMb4;s_iB)j=bK[`$loH2 +%4JWG:/=4Ibm7&*]H9C:MBNu[Ga]:_144//9jN/SN"]IsU,$pr[3kEl3.Mt468^qS8N4cgfA)ohLjI-gD1[6N:%il>$n>DE/NhI[9 +%#3teFBnl_"ecdX+icaKJ9_+L`LQ5eN[Tk;L4*`4g>ph(G<\s,TDh3iaN+eV'[XnW4Cg8]kB6VE+-PV +%jceCRkFVus>=!Sc*;.:oJA;uE]iK]U?=3C\F<;-,c%:M._a!&ENp[$Z!u.9#E1E&k0:&^N'1e'`U"\=hI1I=$/+(_7jAf;k2hL<> +%6GI>JgZI'?KM0oX9Gc\Ejp/hu40m(;VUYQB`X!75Y?QL=.,K1dN#km`E;WPfG^\8ck^>jH[;=t#MIPY-F0X(Ghda^T=Jp`'LBh*c +%[%:eDid&^i8=26C#@T>22:)bGLU0[6\*b5%4p9?.\;l3R$oJHJXtS@7Q=pVl&gqlRl8lqG2ec"P$f67I^%gV^+!^LlH.=)R8!NTW +%0?;-g1W+/ZeI<[qelOS+9'g*UV6&\A^+$&Z'r/gJXgi*J(>U5q#,>t$F@K8R_"S&'bQh+R;ff(TI3p3L*53g/T[(5^)k1UPnM9$P +%VG59TV-dU'*4ueRW>^$'Urfn.qQM5G4n(BKdB4Pe(d.5<@PbZ8Eo5r]kL,)fXCBpr\3S=nlZD`'aMLfn5VSO$bUa)QAaD3`=-.ZC +%%R)VQ@Zd7ZUI2i+&Pe;:Xn:';u"q@`?DH +%[![o:`N8#m,'f&R$\a]ub_\M0jB=+]X"STA(ZT'TUHTtnP\b-]Q[K;!#LlV+13:N>XN5V&cY<M8@2[`G/\h`A0N5W;cOp@/u\` +%*Q!JY$e#F8V..%P"26`I7CiDG;cYhB%(Ol-AhsEd`J_0Rc4\u6B!Eb**s58&#EDdDp_*FYnOF5`oj'eQL4kt&"WFg-Ea12Z>>t;[ +%$m(DZ&ebh8(7d5\HOLs<$B\CU/i!Wl.AtT._T!4S9C9UG^'SY'C[Amt8J/Ke8sP\n9L+r/.CX:oLq6Y/4qQKO)6p.d01OFeMiY@G +%6u!:Fa(BujG\HZ2=Ie-BofWL_.rI/!M\f=!DFt!E%RLi*rd4K&,UdVpift,W(dI9BMZ?]pA4(20[Ku:^)nOnXPiu^_Q\,UT#,O?h#K17%BEg^J[9C_sAQP=ljGj+@:1W\rZ+P8/@Fo.4$;.o%;D[PU`Qr;A#/5*SGqLO.kpX\3A"R +%N9Mf?`ka(?)[,;I=RV%)$-fAZbn_/X1Q;BeJf$d>WH24KD7\d1paOI +%QS=b3E./ET'T6ngh8#9_0*AojnJ&h!N"DK?X5uUPX!IrK*I$;^&3o=DGGef+0Jdfe9h+djX6[UY*P +%Cf-3Rmn,r[e`(e?$`^'lGobb^I!m9`9YGu%fUK&K8m[>c=#c`-?I/:6dFZY4Ah9O)XD*)(,X!&_pC.E +%_')X?GYXb\,%0B.+iT3`T/lAK$nc8P>^8k@$N7o!OnsM`SL=C8*E<2Ybt(f=l+=9KiYUK?PRc>P)^>Q(*M<`qpD[bB/'S[4`NS4( +%68Lk]Pcrf+I3%.aFT(X?2@cQ,[G/q4`hsc]K;ba`Mf/V!:N0Y6#"Jc:^L8OLDloAF_JuE_Pk%7UZ5tCA:>jU58$;>Z+p[a+QsPXZ[X1j&7f9\9G`Ude4@e?n-#Dgk.mNVRpHQTLtQ5Z=LIc6J^![%ZKYEB.`;a09GZFdCsXAaVC_M,&&g>=EO*ZO)jA6o +%^b1d/H)rtT/pB.W5\I3VR&hWj0DeGL;$Fq%`P:caLL4U'#,/bO!f8E\+@Rh\i +%8pd_JRBn:=D_>_5<&uZ`5JjhJ8OHM!-+Z4b=5IIqE72:]lLmE@j+B'RfEVXo +%a@Y^0q^1H<\]&O?*H8pA0>=EY5m?fJ'KE_WX.sJfG@FDfXS&>u"UPZB^2AEo3F"n6?:XcF@im*8i"3j;#N@Xs^nd'SeLYDgI42/4 +%,gj"oDM]3FOGWd2VB4PR92sdWAXDar[^'$nn]+u/?2KJ8(HMYhNCYJe">:7toek&rc(W9Ap^GdrU:`#bA=+:5q2!YNQi-/c;9;,7 +%>msemfch@eX@/\$XW%05N0jht&6#c26pC]:@iPu?VXU2Z"^Fs%.#Hm@E)m$&Z9(2U_GArpEfdUt^GGIHh!r@'4Z_8$LT@;t!n74D?$/49 +%p)CO)E<'lLSh1\3rIeZ+S+I\9,:aJLn.":WD@eXiaTeFh$Lid)=75dh`a4)#bf-b)j::\q-A"rm&JJ30!_"^B,$#Ck'9+FW!CJf[Y6rg:\ikhF=:U"*/.k97'&*2g]nVh0>:r2=&3u1+pIfb(_'[ +%`g\Y=fpi--<@^R\*3i(RK*Ri$(17lLMMop]Tc75/h.##WWc1-K#Hp +%:VbUl2-0h3=BabTOm[rUrV.]=LM4.b\";d30/94e]ckmWmoS;3M(idM@KD6?o1Jnu#']nT%7ANTMDc$C[9glI'3-A?hOpBhSI<(U +%C!!]?@+)Rn2H7&g'(gT$K(\XG'@i?[i\=*"ZHCKE.qXTX,_!HP98jsRBXeg\Z;UVRVU?2[\pcR+NX2(5p!>0u@aJ-E8PC4d8]EB3 +%7mDGO7@s[u\2;>_:J+E*[l1&:jro1],'6fWRJ/dm,>TeGPR)&0:S[dXbMYR)KHHB[IMANIl7-6hf6t5pJRbemha2>: +%^56^fX0pT&5E=`N93t8[58;#e./@q5AD98VVP>D6`-.X6]B.$VeVOn60T@*U[$FuQ29]K'Z[A!O.q$?:`"4B^$SY=If +%#&J&t+tc8[a^Hu$2^T0U5#!'.Ll)BPT>!$*PVFh6m2L?T%N[N-Jp<5%7>t)@1upA8#/+/9(KP*%H-V-=qGNrgja^Hl8]R^pf9Dij"%p4bM.,r]a$as$P)WNHO%LG1HQBLXhoO:'o"^h)Bs!"RfN05Du +%O-18S(&W;In=mJ#rVBEa.pA>0*f(HiSR[RP"M'GKDffIN4[q/r;XT4I`4N%;'RRf[XaT1Wrbp%s*33GN&K->$pk-AI+h;&c8U;TAf8YSeCN_"-@ +%"mN9<#.XV.g_/kp=HY\W0R?F*`#p4jDD_WT/[I]Y_*&d41M`Rj'^HW=-'Fs.4P +%]cPBlaUKQ0#b_H3-q$D>hMF7W_)E6.T<;RH=R%u+kQuX#8A0%kQl_4VEN&+&,0Y<<=_-4^juh2;4+0.%NSFdHTBkVE!f(5c?P8E1 +%TJIr!Pj%:-h#dPtp!iCQHsh_:I4/Oi6?8%/@=j@:p"rPRaOFLi?RkDip9([LB*F7%V_KqJ?#[ +%$L$\A]!cBrWGMc.p`e5krU4'pdqpg!$gq\]SAKog%0`)]qh(*X@CLB>6CZ6'2#.6K#oB,.#E1No4"o$aVKs2U7??:-PQ[XJ;c/lj +%9/EEpb6r_VffIV,eu_UgQ>36'E1A/Ld?Q6Mi.>XjmA:o-Vb3h%VAM[j+Ri$3>/h9rQ,\6:]+RKH:>;XI(aA0t9<"u+u#;h:;R[LnEeWd^R5/?6-MR$!AN`/7#(^DWJuFOK'0?P<6SIp"fmMdUVQa^\&,rg#?Ai=`5DR(!R`?b$aS=KLhb^\j8N? +%PH%hRJmaQT*q;X&U+]*(G1`G%Gl6N5@XLkVpMHgPP-0oO7Qih)_\M@6feE)H.TU!%JB_$BNBN*EjCJHXRI][DWk^U=n=?GHP]$Jn +%-7DH(19*tq<=5QkjpP.,W&7u0btuDSlU#)_dfRbFMM%k5:'o#G"T"JG^.HM<\_o(D4u&^5,Q04L`53*/1j4(Pe"=;fd,AKjo.Bqf +%`8\ki2d73,MS9M8Vt4q7BaT*IJ5H3#Qjg>8VHIRVlfnK9PHTVTZA%qb7hS.`bU/IOXU`l*p5W7N_#D(Ro^,m.h>*o1,gL3c9"K[W +%J8E@Kq^Ldch(j!/J$E>O7h<2#kWJ&ki+]'V&eH".Rm>.=;0U?@rfX$T+n81"Q;[s-IF"cI5I2toA%\1lpJI<(]G4LA2-#C +%/mh]t]#RerQ.GDse&A0+/0-olW]%aei4:h$;tMq%KN+RjNp*AsC2F3qS'teL[8m:qA3;eK5ab]-X)<.$.Pbs3W:3>m'n'Te+4i*> +%dj/.P1a*2]b'0%g"=?sSk3W^[1&foNU+?N8>p5UMZ:e-5'[KkVCbDh=WBbHhf"tCjnIlKaWS"O_kq4=.j@KB4Aoj2&]bNgH@4N-C +%ms(EJ++B>AMM@0taT9;%SfX`)Ml`[=%jUTOG*5MmNn[uA<]V3il8#V6rO.]YZh(VK+j]iP6D%#J2;sogkIQ6LF!t3dSh`:PJ4:^$ +%$AT:1M1sJ,cQ`Wb+;$OX-`lBn2f>Z8Ous9!AlE,j1n,VVibBS<'7ra1S*gsTOG1m+#T-H;0jnE]<:T(05+P#]@>BtGPSQr(SXL8h +%YZIdL!&+i&o![r:t,4.(i$Z3,L;A1Ggf]o! +%VqBDYeRR0i&.D+LVBf6!&WA'!!2lBe:=`*/)$ts%94kCf5LeLPf+7++kt(mLc4[F?2uns^EH1MTj:FF3;nR!0g7U\NKD/isSkB(_ +%QT+b_lE#lV!(I+u4-*347Ho&;rEe2=:kZ*4%\"psdBd]q:u)C[h'I#5!$+M%n.Su0-PFRK4X!LMLpai`#9'&qKlW`#LBnY0uRp_:mp86lX9 +%Xk(Ei%N;2a>NO;XiuXj=4Pl+\]1&K^N9iA[*E_-ap\AX6XGDHNR;`%Z9f>b-jI46-,*#hB&KjC9G(="0p-d-CRF=:r@FRrWM*n9i_!.0!bcXt?-*NWdD:_/V3r+@_T1-hT_1BMBVhH.f;\u[GBi_k4H +%BT6o`#@MBW$VW*BH?94Q.M4Ot,8iZ+pZUHNSK]/nUEcbJ_JU7?^F+rs4Q#;-BsOJO,[?eLl">_1-^i^s=?i-O6O*dc#ns@-=[Y9< +%F@oJib^:hl*1KBNG9UW#j.O6p7KBi?[n[WAghW[#@Vi'7)355N.o`M3SOuZuD?q1aT!.b=/6TFXb;a_Ph!Ihl7-8$)J0^AR$i)LX +%,=b\c=M"RS^-!V,O?kfGdSpC`Cdt7j?lco_*"YTsa^tAtCgnRm,]le+p'2@fKE&T#ZWR +%^ef2@oglAsogZJHWDM:B4!*MN;OkQ;n?UO\mf=QJrG7XPV]+9QQ5'[Ttm:= +%F,iml^sMHK3f;:%9&=$_9,C3ncHS;i1p3ZAZ=;4W)FD#mNaa7ciRfHd`Q4S^):lE%q@^Z*WVgq/<4BrCBd.C4ZpkVbn)LgdfnNS] +%(7(etnE*@.W,$8j8CsQDL+Xf<%G+Q^M**iG=K#\Q#M`f]4.CgmqQ2ARK4mp)1\K`_.)N2 +%EHkMf-Oh>3CG(:>c&$RZr6%][]c0Mn#V+B6Q@oc%F).QE""+Edo_+XAc`$IfBDH)u-!\$Eas=kbnTF)P)qI$<;dsM!4jW3WJtaCX +%02$nh1Fq[@/2B+%1k@TsX]T,[\l&54f[El"1&,nYgkuc@EcbI.Wc[S<5;kOs+Jrb]B-%JfRX;RQm50gaf(`cr@7L>VbDVqNAc9TS +%7?P13KWAuh;`W+2!GX=`kKn>*)FRla>j,IW>2$@F!:g/kNC!sJ(4l.jjm8>hTOB$Zi$ABR).j*p;k>;bkJI+`8ML;.#?C*?kGiXk +%lTj8nQoAe@\\2O^Wa(N00E_.6+=(PCQ=Bb#'/:FSlpEG:O@/<*8moRMLn7V'H^h8PYdV'X@SM>ToYBD^87^VmRru?b]:2Xq@(J^9 +%k#Kf6568?.1]4TVE(\+eGQL^0+U<\q*-Ik8_t.Bp[L>&nsQ9I\7\J(.ZE=]\>$"[DlZK +%9c"Cr9DaN*q-TX5+NJ9Jp-a"fDWN;/qq9$:T(4H!/g``j\sTh^=B13PQRT]$_B/>cH>c6K0I+YQTVhs0$09uL\j4IC5U@rjUPkhC +%>NTZM+S+'U!Md)=&etWj%$BUBjR]nXQ_,>Y=K>/Epc&Ph!Wt!uE-YeZ*t&i."L=&QR$&sNZLUEsMi$,\c@1BpGrC-_CmL:pN5)D. +%PuM![fdqFG&&n.7c\)(]@*,p@b,-+OBl[3%P3m+j@ +%La"4dgRumPFJ%6"+OPNN[H=%_Hk/B^M)sGm^:Q92r*&#D@9ESD^tcgdjg)qpi3-`+L#=F$ACr^&lSJo%OFdPk]//6gTiKu>mNlH>=!]YUD!1VK6".+pOkt>[Hb%fW2_`?#R3H++EAT0-gHEgu3'grH8Zak\D,nJWN:lK3U-k)SN)bt8^9qq8sP%+^p-p48k!6u#\5:CUuQ3,4+KUN-N-s"ZkMHY[i!G.?-:VOQi]l)fe@O$pdd#JU0 +%.22d_U%lmp"s*>$i3Ya"2#]$KgDa]8,)F/eW)p;\KaDp-TOtSY\[T_BXMOPReQ-&lN9#5Ec:]R;cc/7\#Nfi[ro,8X8=eW]ks=)[33%.4Hma/W[Cit/@`?Z*'[#Zc=;^-CC/db6fo$D9=3E3IXYH7pNftB8l=,W/_J2Y +%`Y*&'If1OoNi:^o9aCi8?(6Z)&-b'L-6_B'g2TV8:HO];G2T1)g'kD2K#V\_dVba#>1B:[=QN\L;J:Od-2?c:54\eH7.Wc,pF+t: +%-&L)bWX`(Z"?<)[ic[n`=]jld_JI_jeAQP?TmA:NK*2Ss7s3$l'J!d3.;^'qS\fN9&'ZQgX4Y4k_u8B#/GM5tn0@oRf-hhl7!i]@ +%-YO!t;_Fguju@PC_W_P3Y\U=A;A`O4(N3>E"+l$VhJ&_"4L1S\E=Ffp%HhK/!aem*)/QX=j5:`h.3ed'ERe(N\L!td/idWd(6RsC1r^F@/s\Ao1'+T"%T(Y=4P;gGT>\IC>M+pTj/=-&E/$$F6SBDV1N +%@>5[9HDgUInUNP`;MRlE)#Im#3TV?dWBWJiJOH)pRBOGlMMYel4+7R)Y*YE$XDufXi&c*6k9"\DZI;m`p_J=EPlQJ.Dsj`+#a^U, +%[1rU\+OSBG\d3QN72C\f[p)rCI#hA^6tn4*+>\R,M)doD]SL01:A'J>7CtgUdsUF_-Nr)(,[JQb?KcW8(7?dp:m>Vq80iZL'!:.3 +%6Lqp8K_m&m"e%Ahs!\0G7@a6PiWo%4EnR\:?(ikqAF`H&*aYJsHoSJ3G9JY&%nlTjXI9s#GDY:a,dEu#>NGol4CB:b1&+EL&f(q#MJZY@/=4g_]S^@e\p0.hNS(6N`P(XfdV@K'&H'#UY'-p13;3XIbi5:+BJi1*n0o +%Rm^5\t$SUlRi8Fg/s'Cn^ip3)`+:VMZi?#?JGc[o^k0$H#g&o=DTaa:8XjUCcRF[!4s>XInA`a +%I1:aG(H!:+@M7?M`Sq@akYIE7oo=7GNDXM%%"T,sm3P(9Pc`&'As>&eUT(9Y/pASI*nB6Qg*NWu4:?s;L;;?iREDJH2(A(">qLnU +%$W1pfQ3dBmn7c,j$6m?ckYJ1Lf$%.tb2e.`Mba'=X\Ns"oiMB3Np^OkOG6\uM%L&EXRmIC\S:4=@4"KPUt/p7;g#uq,(F`sAOe!u +%QEa?gF4%b4ecraFKO.ZK8(@&r3%Q6k\s?N@OB.U_H1]["`@7HSBC/en="s+YGScOn[uD]7eo6WEDbP7,LSq;AC)#^OZQ5XD_T,O +%,m<;09+X4!A)d[eQIM>6[*XS3Slp\)UHYt.H`&/I3pXP"C]I<-+XX^o6_hSn0=Dab\NDe)KHp3uL_]*^MM-gS'Q6:8Vu +%0K=mXi:ZOOOX8AP?ggs]qmM[i.ed?/D.[g7bO*E*6Hk!DsU-cC(@c4/NNS`pm". +%@2AZ:AB5XA=]Y;K)9AunFV,gLpouMB=RqBsr.-Z_f=6gU1cF)3EJnK>G_QE%2O5i:*Mj+C@\rP`<9,`%Icq^@2TZY0S\O-og80FR2.[oK:?e!k"EdgW;_!J=)Lu0"CAc+c`81^Q]^J +%O.tq3*fdgl'GiRtN:BVCKP.(&Z?P1ic%naO9>)cn?Fe_NV%t/!/*L6-B2+(t)?&`ols(aFGZ%/'h5VMMnkA*\5Ae!Ho35I1dlX]F +%*;J/sr**Q<%+6o)\\f[nf^t"b2%t^,(7W'*?SrLLNBatccWf,MA\1'$.AV?rQ,KK=#3T-H!=(]eAdS?"*QmR;B +%3`p"A-./q*.po>X0X;Ppb2tbL932OXlr0Ug0l)4$@le^%HhTDU3JaFokH9cQF0_i%1iLMJ2UZeU"%.X!Sb^s(HG`*4mKZVFP_0!$d;!jLi,tnMWHfM<(G7/mVaa7,Z;r:(sk\ak\FP +%fI1j;aThTR1tGKl8m?85#06BHk6lgmY9%_l.qNohI.N`2\k15:STQWQgu,("qrt3nT4dEo6h)amcZquF'VpR.=ik*mWPOtSk+R&0 +%\/O-knEojBdfe'[,oAG/AI9C[X]\Q)%+LlU_*af!28:t5G"C`uq,I8#r>%f(M5\8;lk4%#-"\]-q:>7#\;`fF73J.42tE,mNhSU, +%_63sH&.L\O:6,HlEHXTe$A4CoB5;Ku[k"1`J2BeQo&$U6FN-pZ04^qW]g(,5C;<&4cY&;t&EfMWGR: +%nFItOS5>jPQ_\#0cTUB-#'VbnV"bEpD>\(Ma/aKH9]71qqRe_EpH?TcFOW/&fZlZ5i.tM?C-hhXULb#qP +%R"H6L8ZfUM>4.)Jp@MK)ZAW0khsfMb?*'-WLPs-be'>LM)4kKLO3i/aQr[lZiTOq398])M=^=)K4BIg,?f>.`j%XOKH>"o3Yc.>HKB=K@'6cJ9s.<#b'cq#[D':>b8oM-s( +%]44O$e+A]P?;hj_hr5G#l19(`ND4X[!j@0=6Ke)=cZ&ZT!\;[+]]+=83DX2:,@q5Zec==)*,aj>RCBkN_-,!f=CcMGfVFL`9kefn +%A?WQ(CVtBV<1f70K?q`4mqf,_rGrhISU9^4T>HNo^_!-=/"[#t5#tZ\kGd_WpsXgrck/bCo$[9ah0FNI5MplP@^m]_+4=5b+MrcY +%*IAgLF-&u8K=Tj;\Kiqo<=I+RXSM5mf&`K.;^8"^=n9h8-&h1%eP@q6034W).JtdYle;l<1Hu&p07D[O1&i88[:6[7qI57`@L^_t +%A7^H25bMqa6W"XYGbc+Ea*(Z:aZ;":>#k-`c?[']`B?c(Bt:jB:gNU/9Q3Y.S*S_MCJGEd&jY?AdWH\m0U$%bA?%)qRnInXi?W6, +%Xil:o90MH9L12Ma[b9%0Vn*$6RnFAu5)&F*7o'$GH/UR@VCYT6J;IAItJ'=[M!&WhoDQHJc3t?5,fm40e]8GH6LlefdK*i/0i%SAQgk3(q5IFkJ+KTSc8T9=C:TrADj)0rc.=G))2'1hs&V)NJkh%r99j;-_bS"I$G"Rn(c +%740C6LhsqG-#.mB$t?iS7YEH;n45G@B+E#@T9+q95B()Y+6OJ!Fg%-I9;+p<-4/@XNg77gDmC[[N3K4cY6UZDmOuIsR*r'.%?dS= +%Len-W",$n'Vek3\i%*08$Qkae,#["f(.hKgq+sRDd\H.\p2@fn-Pif$'=m4oeRrF+^#WbFrqXYU/,L*=3XQEEHWUXF.[1af09L33 +%Uj/&i$':A.OATaP_B2b79Qoif%:"bcJ]Bb*,6Wr]S73P"diMB"KUtN;9q`qR2dK'04-RquEShFs)#;&P!e8-hW6jLaODgd`]qSim +%-pki+DJ2=BQ+^Zp@P-rF_!k/c$E6NmqV2KJ^a`"iM\3;t+ET@D5p:P(G^o#@QEO=OQl7]BX77F^\Z\A>,Tl=fiM/6X%pp#M_l[Ls +%QYtNk.b>A;*U58Z42JpeF3?mB2402]9R_K!Y4Nqth8&5O]b``9E_Q4ZEMp$bK#0]!kmCTBOrCN3Z!(/J[+j5q/PN/]hQenEmOf-& +%ANmHR_rsF_^CJ'l#l4qM=C>3fA>lMr(+Y#:L/;[43 +%1LZ_DYG9N:$m@MAq`R%XfP'aa](\EIc.258M:&dG:]pK6(Ej(56*Go[%hDjJn5j#o;$NA^g*q9.h2s`(Bl^48]_,9bL9UJ1P'stOCnlhA!b`58%Dm['#N6^F +%q[1u.5g94Hkb6MVe?/ekQ1eUCW<)+'dU^UT7gtcJ.GMeT/pQ&]R:'58r`phTc)Nn.j$MVBc;4TXAZSIFPK0FUEQR].1@.;:T@V2Z5M.-'i:`$MlS:32*g+XcpaQ5SoWb;=KfDCusbaj.c2TCM7=nP3/e!)s4pn2UE2'gQgT?,?,BM?NZ# +%g1?>A]]c_bZj1%BN?0+VE[.QEjZ<1TJ37!DcIjHMQq%slkZZ\efD`hZ2D@Mb6Mr(a<\,takuMtH'dd\TihMWsd9IqgU5je5,@N-Q +%n@MCT2q+VSF-M2%TAe5oFY-H2V/c5uilC;_)H0Ro?TIA^+Naj%kTp3DAQ\JrOc%Mp+3[JC8SF^WSGX?+IU<#_iXW[nDQ2\K4K7@],CI>qO>I^R-Yp@[B]_?gZhAjY*n$I=&MJ +%b65V5&:kDKq+I4;&nX4h^+35hpfg2=\70sje'jIj%g<#OWoG%$c2FmqQ.PUDYl5K"KO(\]LA;?Z%Adu^H`4]ZO\nS!&3%J,psV[k +%QF>8Kf6\Z?I+"SCCqD*ZF;\1:jO!^8?T.2;$o1VMffBMOX+CXQZ'^Akg<"JLd25e5$BBY;pdka1iO +%76Y4;M):5!T0BW0i*mImZeAk8`fX!VV8g5+(nEo&P2PpEI31*ORG^c"87SRGLSp3"%&u/1Xt_Xs(HcVn0Y"*$,#]UXZ^R0)B4A/; +%^Bh`YCN*S++ElThnrr+Mi#OOI3:@c_0KTI?>X1pT+87@bGE,c"NQlQOHeFa8F:^_fn#S]jI?!\tA"8BYmUXu)1Brnj'fHpX>r19c +%2*"q]')Hk.B0Eo%GicEZdUBk9P(ak$O"U\J\ZE_,EicC@.K/De&kpJ;-`o"drF>S=Dm!%#K;&N8QWe@Q*OiSZEP;rY"/`AbgQiPS +%cJ.2;8?,l:HnD^bc]>7W<$q9)3Jci)H?a`$aP.D?qfT#pTfVUoV`NC=e"U;XQsQ]8%.4O],osl*J5RD-hL:B=#/L-dYOGbL/E@_s +%Jb.,@#o0AWEhZ3EYY;q6le3'*Wua`b!Y2.IM%a48+fREZr)l:s?n0SZ;!8T^TQr.nG--3JdTopD%,JTOhl[P4FPH5n.bBY.b`Q8hRu6=h3rH:YX*e+!@Z0KGSrk2/;*FNMQir,'`% +%'CL-P.`D/CYP's7.Jj`CbZ%?bRIbGM*C3+-jL8:umY?:OZiYau`M;bDOZV366X3OHGBh@$QWf48`SaX/F3fakiH_3\l?T#"'YCWh +%6BAZiF)-*)&_oA?EqNnY9@TK(X,_[M]duru`^aK=Mn%o%RP35QZ8=A'B5EIjIJV_^QSL+QD2(,fIG'Z0+7-7gNE_t84?#6KI"dCf +%6Vr\++&@gbpi0N(a&%Ko65jS`3l=os/"f"@)?=]3fcS3EO4e!l_b,Yso#$t]n!)ME4RRb.o8I7hD-!%n\/6"\r/@H`T>-u<"gOK# +%MgVTg*[?];kD_['Sp1#nHONsqI*Xls5XHO%`.El!oQfK9rH%<]T$+^);gVmrkMfu'r.N+KKgYBTMXW_L$ThUXkFMm.'CUV5Y4r%ZGX&7P]Lq!XfZm%bU9U\)YtpcN3:k +%aV5P>D?9"ENbTYQnbN'-r9]tq6H6q@Eh&SZkD]Q["5+ooo6TJGgP94a2E*"1e<+=fco-.&(SN.r[ib:W0R>t?))B7:)!OKb%0j?4 +%d33JQK0s5TamjV9TOWC`b5H5_6SSY'^Cg!])"<@?it$P3EbCoW^Z74:XB&s@*oDfb!k5)cm`[QXF8pO_4q\[E36.Yt#0qhY+r4$$ +%8ao8]Z?@DqT2Xfs,M@ZS@B_Y20l\DOD])@B)/K%R_b2ERP.;QAF^l&`>-IMIW(65L=SFB#Lr`S)XQQ/"_Ar!&ORc]-4@kSCA#1N= +%pJ3arf':B#rVlVl*$*$.-%j:s`K3NO03j,0.gpo4,Vp9_6G*tPVNFNik?T*dF<^u3kaTX_`hJ?LAZX)U+Z$)859Do3\1.!CnOL=J +%$"WH\f&uEt9$Zjj2=J0#aD%8KnW=P1/]meY@Qi!Fp7l$q;U_Psp_Q=BUbDb=Crl'>'o+O0`01*Z03MU?r+d)%JSh:7ChR9Mk/(Ud +%@[OV7[7aUP3O)P'%md14@Rc[.=Lo+QpJAhs'f$Le96?`!Bp,G?P6qDgD6,u(]dtK2V:so=gTPe.H?Q!3orJOI#E^ZS1F%J8f$k$?F6q;gO14J.s&*,B-`&-!$lsDICDee`/B*atsr:sF+;XF@BMeI!9r#(J&)R]A8 +%h4?b;eSu2>>Mq#fp)25ESf>Ggnf^j6p^pdKiZS4qIR>MfRo(rHlG)ar;JH>@0t"kW$f\c!L5o]a,l@"k`K!5 +%+/L_8YgK(2g(*h?rkVb[,R&sQ"6J+@OMJ0aP_KE4TTV6fb@R`R<'d#3Z^N7mm9?CVmm`c%")rcB"i;l]_u?mda&F>[ +%"ZiIfGk;\C.%!6:X0[[oV+F"^(e%[dLqlfGBS!<%r$gVA_=<0C6K+YB<]C\N=Fa\A$7Q1E(WC\scq0Cb!;RW65h[,uQ?ar'JMSR- +%;a_)fo"$dJ%rE'F,07bHm,fbbk!AZOr2r,T"puN(_Vg4&0GOk&TN"bFag$;l1j--9"S'$:\+drrA7P,VGU=\rr^>dKi%HhT>Lf/\ +%8/FRAW`b+Zh,:Y(cqQee$.(g>a<#s6"-sCU`$iF*@:>;epLOaS0Fmf'((k'VE88J:*MsYh"TO4`#Ph>nj/&.;)+t4[>F)cD]?t?j'`VSsTVhn.DA6f+5K*R+H@Iu2T;`KO#4X])51Q7) +%nk,:P[@OTQXV13r<$$q(dVokcV:#\LZfMPt"bHT]LdDNA^1m6O"?>1eMHtG8ZNlf$=hf=jkL1/[h]m*97_S%RrCpe^UU(ef"':\4 +%N)%5JaeDX,%ucK@^-?u!439JhP_4AhmZMWV8r^bQPa3;#XeC!u#J[i>c@=7"F20e[N8K\n_V&e(s_C&73VqNIY'qj+r3XsZ%0Y-m(aIuG"(QFeeUIMBE*9.,U%h(M[99\PnQ +%%n0$^u[ +%(pb@o_c_cC(L:%^,.)^'M8lHNd2F#1aU$[I5B#2/g\O=V,F8bk9j:)I9feNITr2pVFh.V<&dm&?X48MJ7fS2VT7RbYiKGqRWU[5. +%`U6)82dL,qJJ,!g/Z@>cP"dMT-lT35r7iVf(S)2-"#FMNVud%7*r'n3Dg$dh;oMd0?>P'JUk^]IM1`I%?Y#nas +%mj1UFJJ]J_@J0^ipG%I3Rl1C@jcF`Q_JLn;GZJF3DS_]Tc?ZLV-8f6VG,b='C],*%H\m8Z]JK@6$Tk-gN=D06=H4+R +%l)";q`)cN3_W@H^XY3uB9*f7[V'*J[#.,@'%X/qb69E@#5Z^hNJt0\uq7"Fp2+)Ho)l&JUU;`^-DHR3mcP+E>3]TE%n +%HC;7?A9bePT+;'DVXG6T"b\S`*5'#OX1S?mqX+:Ls76bNqk(Y'a1qH@5Q-p5rUo(Jko]m/c$)BZ<$tug;2?+*n4TBj`="H+E(A3g +%s1J,>S+.&"8UQe4U5hpK=R4i,B)UGpIW!d7pg_rNq0*=-XC;Nh$'.Ig@\NeD6@_LFhc=n"nlPjKVZ1MChTj+os7J&/>tO(UWk0EN +%3P5V8Y[+_k6!3a7C[pM)kEd8,s0EeKO(@e%U2dbt,H"E`$MbZ.KQDHCLn9I[s*tRC)FLq-$':+_o6p@BI/DY[J+<&ZC<'(IYUn1P +%c0"A$Tk9"N6K7PBa3[dCd:LjahLHK<;r54ODh!,s0:kt,<98+V00SoO9/Dj.[a;/@FkS"##9#n]`rs#_n=5 +%mp1i)Is^W;IbH!=@i*u/qtG\g5;#8&',LcGo@k)AlegRrS"I*hfbCZMKQU&2`^N^XmZBd7*;*[q],4oTp>4\S4QD3W.^p\?PM;R< +%?gQsq\?sK:^R1'NqYE/>LWg*r*I@ZD/qnDkhJ[)#HhX8Lr9`[^pXojgqLPLcrGc'loCrLU2kYKR^"A>mIf@#VYBfo/?t9ipji;?I +%fe0@`^"5e,pteGhq:j5Fn'b;^'p0f9Tmpsf"(*=_7UUtTd=1[rI/VfHJ+GINQeZ'G!S +%?SO;,F,a`i0!5puU?:i.U.#%L7=Y3h4+HeLHZNno/K2@?6i#'h2Cgr +%Dt!YL:S3$12bqS^h]!gn;D.`f1oV8\o;26I\+fmYrIDX-GlODNs2VnQ:Oi=ms8@Eq[463H\\`P-=uMAAnna%J.n(rr^\4o4rpa&7 +%H>sbph2(UlF-1P,GMg#UIeO`:VomTA9B!S]11POr#/i//VJ?e#s8W+\s2R9S>0qdRZGX%qNHP5(iVM1+8*s7d#lVK\kR(9O"-([R +%Mp:fce@0f%q%,9Y=EM_i`N_#T:1?fT@ba!340*K3N+WL@,9_klI_GRiPFa,hj:=Q$nc#$"(PeS<0(S>9*Hsh2RWm?SipbRcnOBpc +%_HlKtlVRUlMiFtJiU+V'qb@\o`[3tO:SfWCQEO#E,kMJ[bpua`.0:iQSVs!o)?0!qen-*&Vp.CY8/aE++Cus-&U&Qbrr$T8!^sNS,cu[Ck +%o-.A=plcb5D4/+^a#M*m*d4,j??`!I#L/;RWp4tL)%Ahq^L$hokO>tI+*u.;9`@.ecYlA.jC@Sq50E&Sl!C1GgbKmB5gS7`p6op_ +%QI3[#gkfo*?d.]!8cG4NgbSCYH"SkpDsZ$,1@[3sgbSQcIFN[X3A9+[!Sr0A):%s9BjrDc(-/itnt84Er9'@#`a0Y*Na$iSbIM1n +%3L=e3XIj^WGlQ(]dt6oM\UIm%q71'cs!^>56_XE,)1ctPNf.k?2Us6a#UoF7E8eNUq9F)DU-]cR'X'l-"1i0Q!*6m`Z'u0q;Si-R +%0gG,+[n;)J9chU0l5o]'lcsWZ9Rccm_CqNPnr3jAsbPC:6dOjNf3pnP^V]:9p +%``'0;kN*WD7>L7NTI8nEqrPNUrcTiahf!H-o4EQY@dt-c*YtY_r0J5GEUiUjrq^,mYnC:/M6:/Ia2R0UQ(I$I]QbJROM#guMp_Rs +%=Ja\p5%`@A+PN3odQJs)&KC4ZBHtGs?4?,0s/RO1aGTE'5=f.WifKlaI*>X1KK>[l6XN\J%mU;D$qmd)mFgc9%J0pr/>8t0kSUGa+ +%;n.5Jn<*SWR-,Ya)`q?]J3LP6Y_7IJ +%f5P4XJN8S5Ra!D'KXb-ri/H4AR@#f.0hbLVVK2H6'U/"&(ZD.paJYFI]"-_5W@@1L3#,P2,RU')5m41i+W?&3?5CT5]fI`s00$hL6"JP3X2eb8dn[oWKU`qOIm+K'30YhY?cc&be0=(E8mCuARJX?g%GlY"!Gn8VU?FtS:P@54&P#qnOQ[mroB[a[RamNZ8W:_*) +%I:j-aYF&n)&9G0X_7TZHSPhAV1f7`BBLA$s6OB8Q2-F9V=4WacV#W;B7C0t!Ai=UrEV/U?!oeN2b\D2F +%L8nVGL4mt]Z5o>).n0d\LJKgiQ"K@8?kG50lrFME;#N.#:BA]7m361)>G\-L0Q.QJ@P_=Gg1SJ`KU"mPgnB`7W'D,Tnk_uZMeH1R +%j@^VfC3;%tVfa$#%2Gcobg3SA%Oq*c`4[3'nj+[A!k[MLEubOp8]GD%fhO)@mdI'UDu,C5]`"omsaSi)qnD +%]3mhRg.Os(h^'&.Dmh`@&AU/HpYdEDL0SQ\,UXtPkq[/R:W-PFFEBEsR**2192)"TD=12YA[C7E"YS50_7+:($["Epg"a![HtHa' +%!(V'880XML,VEsqAIXCaRu5[K9J(3-'KqAgFTXRcLctGIlC%DF*q37d0rBg%r@S#`1totu]VR[,B")@GiXHALi,lP6C7Ug14u/YFe")\mDtmV^osI,$]d_#a,X)@%5u"&F6++#?e)hT#ATi?fYjJM4]:f9k13]A!l3d"43+TE)g@-OXpb5US5^# +%#t?!d/i6oaSf[1*N.:2h()*,mYZ[=DP4W(Y\u8s_s3pu8fXB^?9KnCX_70MckjQ(WljW3QO?c"CiQ-0; +%OR?lSq&]&3On[[rj%DM-XfFlR)nXGBiL90=38777F +%"-sG6P5$"iLV8jjOVBX3b>4Q%/dp/ko!*;(bNHF2OI1I`GhT%&_`/=5FL]V,@rH8_^fhnb5AVt!-;@D,&2&t@9X^?U,L5t?dU(BR +%MDP)`eXuSG\e7HX[8WV?(nt"\RIOL6PX2/2L[8aT_d4Y!<]&bLGD!k#or'n/`94"!0=BTDMajAmkGF/BS:1djeWCL@e\`r;5*aZO +%%6kfFX3Fh)=HAd$Ke>\CPJN"J9>MY*)G@*,(CQFu(5=Sc:a-VO3M4l9ZhjN5$JI`Hp$",[N:nTjG@(0lqq%MN=`rot6Or.J(Hine+.E(d*Yeso +%HTBq2HTESAPO9^17c$<)0m&l/WC["KaSd+>ju`/pS$kUrhE@c='A&8JQaAF&ZWZ!g%!PF()cFG"5>nbI$_LlmI'I>p:6>@uQhC0b +%;UGDY0#]tTqcTQGX8Po&]3"lUDmcd@=8R6&H*$`8hJ-utXnJBf;m>6LXnMGZC4C&NHaU>T=8Q,S3*(BUDmceC> +%=RG_CeXk)=i77h6#r.q8ZnqGkT0KOQEmEh"':7Q[mITMkIdWk=[J-:pqdU)mX1c3Ug=OZOrEOIe[dE*Q#,[oa#iK)n`.[mGJu3Fb +%cuG+l[n:[Ha5i7rhg&I#3cs\uMW.AVB_L='p@pmQ[-pCiArV35rcRNeTf@4&XT&(,YYctBSbFUKIe^t8>9r(Oo)aM6(_GW%p4,CM +%STg+3@\^6L?XMue:34s-hO-LIk:$E"JjX`&,JX9@3:Cr,YOq"sGb]WLJ-=iMo3?))JKEPQaiW(>2Kec44i]>_q>?_qmlU!ilq=PX +%(hC"!H9@5lQK9u4eX(X5O9bj5S9h9*a-uss]cSui>n?_J:T^_`F\F$K^Nep$0.)[sF0G@6m-=2=`E^q>^_F\]1$cm;6t`eAq`QrX +%UUttY_GJ5BO<67oj3u<8[bfa>h+ROJ"0-"84]g4r`I;W]=;pM9KW>pdEMk0(NpFB]_bQ`DpAHqjEsF6Lp-*u[!KTrXpF%$uq_ec$ +%J5!`T@gT&]k:rS&+[/!n1Fd5o!CL_odFc=(5\\G015`tinQ00'FenXnJ'"U5fOp.D'nRSB%5U;EY! +%*$Wh9le"Y&N[!Ggr=RfZ/bo28E=[ja8aC-5(%oU;VOcc/FOs5&c0N+^K+#G:C<0Q"Vb[Q)dYcdC6f(iRQF,9D]8BPa1]]`X([R&L*HhR\W.8_!pKiaVrZN%'DrW0I5eBaCi=O=DiYW +%`'0LfE-TOHjm`^jngQ +%0/8lR]XK@1VX=Yc`mcLf-Xi<,E"NAC6(6E9oc?-1/;#Qp:*LL3hbV'"L7W[!#*d<0lNQ>?5H;D+fgCs;QPRBT%76A +%0V[uTXp]:/KWktL:M\mO\H5kL8lnX+3L3*TKk-p8bUai8UJW%5mWXA')+BW6TadH"d2*E/J7EoG5baJIED;!kJ(3LT1Lb$71s+ZG2T3Q^(Z)LkcV($08_^`O.SI:U8A$V!E[/OQtn?,(D'(6bKq\faf038\e.7 +%[mh=QbZMEX(3)Crh41`@P%g88;R#tU9Zi\:$Qtc-/1cW;1'o#AnkPL)iHo$F\WjL[TBlk#cR0%UOg$@q6uMV*@$hMpAuL=1Y@T,FtpPM.eL:PI">/sUjs:&tkanNP%q#2PHN1X]S=%5E1jP/-X^0iZe3OS+KE-p.>CnFB?Tf[P.aL21BC0((-&%:`XOJFRnu808NB:B6tZHA$FD':%184AV3t^lF35:>2-N]7n_)\"TH\+Bib3 +%=d(&l4'o\GP?'3*`M*r8"@Z1S4@Jn79g`3m.qc'Csu%P1#Klc!,iI@_jK2m7@oX!L!rL7)h1bJ+8/K:,s& +%_HKuoA5uJbCfS5;KNY,=FPrUh4\hiJF.*Dn%:/01_B@;UM)a+g^/QQ9EP7eu&'fkqfJbE`]7`F:TWABD.-)bE?lFFE#Y$6sK:BZ$9C/0u:j?ES4Q7*r\?U-2B%H'/jdKe'-rf0_eAe<8 +%V,H]kQS8@:iB_u"f[m+)8\cVl&_!PIG'ee\_)J-P-`7QNnhaiCFWB= +%(7f4uhik3!hN\#`4;:Y"'Kre(6[_]j;$4<6G7^+kbu-_94%&Q#jk^+n\=Wc`b-O/:U.guSPZ@[fa%.EZCW;6#Uh +%]$Vl\6q]Jd&0r:M[,`l]o]OV`Y:]Rd)KI-8h3\q9Ub1h7Kj]s8C/F`,pV_qi`J)3;*hTSFE779bTXt';N*m__/-4gfN,X!1G`^$1 +%T(S/:?-^]bMF]`N/bd.!fq4+S")q+jq[;H#r&NMPh2X_:/]:@T8l2'1$;D^4G\M=GKSE.7dr7JB`t<1$*CkNM51Fj^Z@u=+YGb=h +%h'4N_Em!4Ri%d6ZA]0\#7S43\h/H@jWakV)]t&-H%'+u^RLHkKn<+X\kg>jE.9*n*D.$a-LZBWrkV6sf<:c5.#SZ#3U2cc7)G&I! +%E?"F-C?ak9O$p;G^T.)#S+UMM2fD4K++924Z=6p_ZS:ssn<:VKYUr>bHN,ONBf=:G@AD5R0]AP+6/OjV*hNdE^3^;>`FbGaMJ>]9 +%+SCFD/A^(@'Z".i3ttL/rXJ-r6DlH,;Jb.>d,/+G^$`NNnU3eW0>d4g`EpRUS=Yf:O^ouh1Mph[iX[]:Hf*+7!LRl*@H8Ta'@YF\ +%#>6>HAHqoaNBKAP&q=_Y`G@4B)+k3e7t`40*6e`E>8"P^EC$p+!TY8[qnL=22Q2J +%>E_F`\63#E*SXP:`VD@saui2c+#2*8$+seU@dFm<"b:#[@]!nVTn=&n'5E.84/D_u=.=+c&6\6(qhp$@gn2!mkE-J\607#JX_uGP +%EVK8sbFse^$#9WWA+$7oS::3PKQ2`1&24.cb9K@29mEmbhV8KO4+;u0Mb?f.(c@:bVl#Ee<&X>@Sa,tg>[L.[Q*4]lBe)'rU9FbN +%rXfh)/fj@ii'dC96`HDZ4SH_V@Y0bRYh<$3$%g@ka1-u:]sif_nEd<\77;uOM)H3d'=K8:alb!3*.02925U-rlHr@8dbTd0;X=_m +%"mX+KSQE4oZEg$uOsoQqLLG_S`fNX?BJi7Sl&q^h9&;q!3:&(tRRa5qq\a&l8D&k=#_A.';e'NuXDXXD0Yj%hKE46]QDk30#0F+i77HmGDT/\'jtc]qP';Rk)iPTu-)c'KEZ6[7-4E(Ki\9$O$?RX` +%n!ci*%X?@%?aV_YWp3=gTlb;];LXYhVc/f(CQR55#S,2uiB.to.OH^GT98\l6&0M]\QB!F2Zu4j![W!K+604kV/W$Jbs_(j=S([p +%8;,69gtRIZ8hkr_r0jGX+9e=I@H>Y\gsa/IQci_R5/l>%g.eZ)q+:89;$liT_ZLc4E6VHA!:qbW\pu12Z:6Y+p.Ia?P/'F@'7s>P +%.'boJNoBn+2MX^sJVeobfR>rK`rkH0!A-[`gAq=c:jcH]d[,i*()f4qcD+6'V;AWs3IE^@f9)>6FSb*.:Nmiiu!ta#QfnffW/h!;-@rMA1Ku2,25)K0" +%i-Gu2Ze5,qUR$mAOn6HP6I?g3JFZnu-&[XXV!;j[N<(\IM\J4JGr!GlU-o84RE6on'hgjH8X!o?bo(AW25WR'6USRA>6#,Y80u)F%Ag[CYSMTs?!tllP2V$TNfUQ*?)`]`$`RnjTYpr1#BF&/.dEA0&\If6?""(ZW;mXAQ9G%'gbXu/2S&#iFPd;0#X@NF>+E^Jub#/U)h+.^(`N3G*3jsdCm6K +%N_s\dWZ,is>mOBe1bVr;n<%>`&DH/N,-%glq84jAHERnX6PY-'%cEB/)ZQP['jXQRs&b\9WcdT6iich@VGj)k.]-As*36f@5*ijm +%#U7-5BVMP8;D9K6An2L8*4*TrM^bLlBjAShfY%!lV\H`dVnM=@l^))0WudUF0kfKZOnsSng"W!J.Z/rtT+UXE-]grTl%X2nPG[-D +%YsR9&I,Y[9^r-WfAon4%VOR%2j?;Tt+OO'J@sl_L208#hO5Kd5W-b#*4dP.iE%dma"..G&(]""a4.5SI%$&B4@9UUb0Eb#ABJAd- +%1t"8DhbTea,-it^0?J)qg_a_[gJ?[PX"knU,9nF.SD_p8o#=:IbhK<\q3/U0Fd3oc9k"S9'WNeB$=aWEkK?+:M%PuQgk+40SQM,K +%r5?&'o=FctGquW7?m'oG4Hs8#6GL<=!IhDYA5**tijPK+6S(D.haf\Np&I02WsEbJ(C!/+CR/C5VoYVOSc_q5a%n[Wi3i]E&FW/j +%,]&VAS!#0GE1\.Sfa)E1,&H8k\\Sd#4G28uAFD6c0p=d?ha.5t7W[%\+_:9a''(c#He%qqmloWr6lr'R5p(>7SCS&XS(kmPOJ8X3 +%=+ek^hkO+_ZFV=%S&^suT&!@P8KLM)3\dbh4[-";9O_%&"1f?a3rnSGc&W)"6'qg>WEsG1$1Cf["IA(!ijrMX@C(Xn.Tb^9T^QJFB+re +%?=@d[gQ&2.3SiIBiHnK;F>P,eF'l%:lq&nD,$4ZMs76hj'um(iDs=:6*E6#+8\ +%06p]`V<@VA'.B%q=H-$EJqk\fE:ZDi[MRLtS[>:4qHjL(&F-#n/o]Ot7U!&!*oX(jj`4&=p\/TDMd>n6.Ke(P`R'QJ&K\YO!`SMg +%9p!n74GY;i.L7,5juu955$4hV+NW!NI&#+U\..rDa@P.7WBGG(Zag5H,1J3$O'oRn.2+R:%&OD`7]61d2-s.9A"cMF=(+l4M^M@H +%[CM*$l=/[Nm(tKsm3NiSg)U!iDa! +%Q9g$EhafuC3tO>\MZ9ogKnruknjfIXfdSZt+:jTs'r2':`c_3Z/*5\%JFh)2Ffm]qfRZu8Tk%Z^l`*ii0eg3As0]$K5qIVjYtb7&_>e0l!@KAl\''0]dpN"E;eD5pa#pPoMAo:e=f2PfTV6[ef*/j\2 +%hlk[s?c`[^G\etS96G@8JV#`:(B\"P*CG!uG*,54XJe4=Y$X?U<$HZ^r^pX64Gg"r7K^/`-tFJ]e!e[Oi8B3!i.gPVaI)reoT,T_ +%,"L1U,.!mfEM7lZ=WH1M7OfB7.Q`oP4Le$MlG[S>eok?M'O\smMVMIj$pCP81=dJSfgBMm0cj4K#A&rs`+IX6fi2+?8HP?N*P,%X +%6j=AFQ2a+B[<_2U@uQ2i<"l4iA6BY!;BIH9UN=r5J[t2dU"N`O=D?j_6mJIQmQ']UW=q*Gkq=0\`mIrM>=5J$'n_(_66N-qBkP55 +%&MH8benM6MUfLk`+YcqaIuLDU6E2@G+BC`Kq6,IKrCaHFpojBkLQhW-QfZNV-&fC)9S318Z"[:`\81?OdA?k +%^k%6t$PC1>5;8pNqDEhVQ7)#Bc<%8-Uj:GdF*F]!nhh!L"#^5Z,P*_m7*'Pn(;43k`GGa@$":#3"d"gS"dB=+<7LS%dtc4HT,`Ta +%R]TeUrkduWaU,7:8TMPg3?.t_OL&5p]%nL&/;CS?_7BbnC]Ba?N4&JT/ZuFrG\Y\h-qK4b.8:4]n&_1UT98! +%K-h]U>NAnTF&Pj7XWl9MX?(Y^?PiiGL.K_\+fMNd;0Wpf0a)_/EWpjq0J4IWK:BWRI:lO@%7=f#!G(?(@Bjum-YDWa_FFh+3->de +%Ng-#NH%\kcM+*W,j?Oblh,p=u[kJhsMqXb9gHH@D'C(&`kK?\PCf#arGohm8#O&.a1@mbQ'5]MD6d4d,M"K%[/0^.p@Yo$5:u\L- +%\LgjD!9gOc[[\mTP+B&0.STM[f6X,OM0eETdo9#"Jf2p,!AP8>P#09g]H`Nl/j?-[b!*i#LL`D%M:4c;.eK$t4H-06o\fSafobH[ +%oO?($Y+O_O_;9EU19LHsqD,WA[':QirEr;BW*Z83l]d+bnuL>beHgsKlcNEce.O<7]/MIH/iV%V;M-#HrOO^J/B1T6 +%4Du9m]EC0>69,qI.AJ>XY(fr.T\#W/A2qu[)fG[#Q;/1jeTL296b0J9E#:,NoHpA&4q04WO$N4JKZ52h>r&Pmr([`.TQfhXE&MG" +%keT>$PN>)ZCGfD`IU>h$G.8;$;nkMa-=msB$o5V<)F?CCDb=9X#s1.n@]Ii?@U1e]4_%fEPbMkq7QLs<">:FJCY$qu,TJNg1MfOh\MahsEA+!^t4q.#oQW"@87:4$scBN5%d]tTM(l4S4r-E#%.E=:p_Fml^M/`(q +%[auc5=24@@;nUUU2"i[[;@G/tWdJ/J7*rpt%'SD//A2X(GpYsOYGmJRcPj7/Z5M1h2D(_iRhCqW^TSGcDb#n7MYif-rs0"ej/u3M +%=L^(6jAc=*^nNKV+K&(jDPqIf#[g3iFVS[LU(LK^E:&b+qHBMQa&o?P.Y7_qM3+@&Kk*%_^9qDUQGAA$RmF8\;iua);uEp'Af/Of +%m-:JdlZcQp1hi1*S)MC\`nX9n%7[s_islk,MJ,))5Z\s&WiSI<-^GJa+Z<3!_3IfM?)dB +%2d*X(?T/*A7`7bWX_o1hd;23X2`.)08lHNR0S1r#4J]0nMas+l_uhB+f"lHg7B.<@:=t"4ZB:-n72:f2hcC`tdEt'*m^bn6(SF(l +%-MGK93cDcdlj5#FOZoG*=]T@VCfC:*N\4SABg^-lm;N:U4"W^]R"\!PO:tPrUE[bQKQ=[,7kh#d#(Tl^3M$-oVB/&ELNR5O\q`eR +%qj;.SQoE%Bn%k2BiB0D8(-@pVe!Pu3h/ter_2IA_>&MR\")O)=K;>\u^&5s-LOsYsN&k3q.2e*(u!G8Eu)=Ih?]t[Vn +%_`=r)\DFhd.BKV3)qM`R\2g9D/E)0C>)5XTh2KJ]_;(;7>*PkL/1V:o0^)VH$X#C.52FuiH2H_H#5E9mN_5b6XCK5umh'&I,4]-[ +%"ULdPn,&tS3s?p.H2/2BFkN-(5V%HJZ*FOrV%,aV>8f.XB+(As(/orB5s9bK"$!L*n/n2m-3Q<84^fM#HGMtmS +%%CA>\"$l/,!an,6aSI7]T'TeR'F(7UTNBSXQDKoS)S!n:-+kR*)9_f7;]AVAjUYbE@\.$d$@sJ[.#oX;X!B]mU&d-"p!@10JYCRE +%L;GXd[k3g*%]=k7R7KZ=/Dcq'K/#TKDnccT5!p,JH:.S\oF6NdkA=VR"WOKR61DWV-s/W$`=-1NnO+FB._E&1r"ViI@?&0U$$uG.gV:[iahkB$(T2-lkbq-)X+DY7;3eF/j\ETf_EFqT^9N-AerMDoM;W0NnuP`o +%PUO)'RuP4mZ3/>48ul,.n0_6SU\@XNHk`j`Ao+m1Q$>$dK"cU>@\5JZR6nt/;_5KAKf&$/NO#=6'$b+:5t]%K8.'(WRnF1@:LXQs +%bR(ZX?Zk^U%IdDalFK.Thp?\FBU%aQ(H]&Qm?jXC;4Lj"9Z]W]5XG&mZBIs))[iH)-icQKr+flRL.W +%ES"0Aj)^be6O'b0gSqhA]W92gFZ;3P&M%ne@/8]9_een7(,^P!q249/mf3u`*4T$)C+ALbO=&r4/?`%3ZY#,k.g=%R_(O7)H^c(n +%jgl(E=qZo8Iai.5CBh,B'5^F]pH1"Q!u)Vj1jXG&_:`_b0nF&G>6(57/e!@%@U3",N`k"+/Uf0B)/_^oefOgm(<`?XM5m9PBDIcf +%jc_\gaHqS8q7o[>n:Y7N2M4$pq:us#KIfI@K@46$U![N4'.`W`/,Em,i1f?4hWC4rK.3U2OFq#=J#;=$?E2&ni71KOaFcpuGSHI0 +%+kEC?')Tq%d4EEq6ob8",ZYks80co:(#=W)$Ha6OU4[nRlpsC*Jr\CYhN#Ndh^4k+g_QQ#&^kl30E@"o9E=WD0DdU+'ISP'J&f,8 +%^]9e>e5=%TGVsH\PWA""9V^8YLo90Ek,e'?ju'iqq$:;FoXkK3].t@nm]JUna@%/YOi1He*I0G/Wj725Fs5hsck_snWg]]_/p8f^ +%-cZ6=(/(Lh/qLp +%qsEHMnfZCm[WlJC&s.,!+LF,n.R!S.I5JNUAg/8j5*32+'gqb0O4Z`d.OpaF#8g'hU6QeG\jS$@MofJ.AR.*lOeL]aG[f>R0e#qQX[1*o6"UL0f3gs- +%Z=!>r.q\dNQBtTm?!^3JgS^Ig$Prmr*L*85/T[kPT[36&`g]>bF;J4JXcI)8d*:$NHR$cHJZuk0Y#kR87[.:C<1k,pUoaWs[dH^6 +%:$\oa9h:2C(b7O#`<(NHpUO^>^a%E(D[,1f*&e?I8]%jkV?8RbEMG6U)dD*0FfA6Hor4qYMU/-9*D*p;W7_Yo_pD][PM;Tufbd%'@cdl=!-FH$-I_+hAHOI.hR.6&AeDE#DjHMV +%oY/Z#RkmW+99Ves"::S*W5FB![_X0ZD'M(6_R7X'%9gK#S^09K1KQ!dG9>%mX4AbF^GV3[%hK5rOVZQm&WuS1kkhQ0jQr+oGnN&=*'hU?\mJ]q)s,)YjX;Y[FY_q1,P;Qn+]slIXmUc"[ZIC>21O4f-7)GPCSYR/j[EC:]R09ig15=bU39nm\=M?T!#.0VA0-15rQPoQGM3g4L,fI7J*5G-uV&4:3&*0I^3[N;`kDilkN6.YJZo+86+$'iAjCBiM4)WZQCck +%c-m?r8#mCTq*25cG[l-Ha$%9=nu_isJ2C$l,MSq1J-ScCGDLr0'Bj*4,%kh)+FAn@<$PJtgR(:S"`6V+qnlVYHC_PIIR0e? +%cu%qjP`ahACUhNSJ;MD^m#OUY?pfjQOc32Y#cD^LNtGE]bWoIMQMg5QJ+`pB<,-#&FKmQZIBehekgRbqnN6C4XDum#:+7B1]-.1; +%dE'H]f@F3'?bfH`$kV@.H4$Cc"f%q`hlOmE:lf*lr#`WOIa&[:dW%DNctfdag8'h4E.SU_kQ\3JiZ4JBg7:i+3>sV?pEuUi#WJI? +%3/bJ49,gE,AqLq/QOWbcRD'OEoS7+ID%(r!Q6jhX(P!V+P49ODY?:,t5h."26^JIk>0T[G]:aDHD$FQ4tR,4E2%>NDPrGfGFJ0kGos*,>u.OsunUq6 +%'/V&?CbdZnqduNDXeG%iM(+boB)/5k"48b"1.AE?W+p8-ed[@;+L*@/FC2FF_g%&kq:paOI!#)Z$E],1c]l`lHRHlbRY?lHVAS1' +%MIOR0bB'qNA)2m^+Wa6d10=qFDKY>)(&]AuT@]mDC$q$/gN]Wr#r\fpnuhnLU;7T*Vm"/3noFFWR_&=#[2jRmME_^;962P)'ekES +%kc80\[_SRuL)B$&/aeY:*NFMinK@X>#`F#-YM\VjieuUH']':'?d&_8U&9St1>_LO6iN!Z-oNMS6bb0lj-+QpUW?jm.[F/IJ')?* +%5HoiMDktkRr8d=M:1q$9Ku/R&!ZFj(&>)s*.4W:-agMiQ6Gq5AbeCT:@cI^@$Med!'3@d'k83jnr/;-NL6tesC@=CWEE6465_1%Z +%O0BE%s+[@Y:b=(83[j2=i[^)"#YXSG5.Gb8NTK\Bk7WrtY2dV_CJ`[4<[=@nX"U9Z$Jl6W$31KZM,dpuq3@")]c<2'*o);48U>+, +%%YMK";8Hp#(o]X'7]u>2kh]kSX]D>k+r]nb+&RU8[\]pk?%+,^fl=i*4no5\#dBdSLEKdpF^fe+\a3pL +%A7[V#SoX(:$,:CYmNh_3'j[d2=C-Og$u7M(c$7VdIXuRlcg[k"hmkT +%SHmD-T"ZE"-B%uPQ"J,Ac)U7U!a]cY5,]+*78fCB*\A/rWYU?n_Y3I&oB$u+H``Tihdt`q\oIR$j%Z?jfSK2#$JG*A;EOl0;TlZJ +%YMBH$T+um!GGdeGK?!YX6MNF,QOAB'Y?Rq451)Yhn%tk3W=lok<;P^YF>sUbR,aG(#5nN8_hq>KEO&&&kp5=<];X;_8fKenN.O!3 +%1Ha9-PA9teWc>*2h1>NV'-ZT9&C%2ic1i!i%lA2[2N:CplRfA<"hr>uJS"sp1[n,Kf?fYDkRDlWZB4f6$51W!'r,521G+07M'=@b +%eZCBb_fTQM<#%uTMq96jNT??M&l5dDRD<:MLKK1RpkBl(E8l3a78cPeqsm?+ObSF8c!8A"VTDR:ZHMKT`>j<\Z7s.Y45?B[-rikd4^@P/NWr3SA''\;jR9tL$HXNmY/ODiMCQt?o^^Y1+lTacS6AV!ef-crW?`YGXY`+A]W7[kD58s<$nU[[?*^F66^8MY"NZ:WhP%=dH^=(tg@RqS\`3j:QFoI0@ +%/-.pckKTg5^\KBr&BYUXG1q+>+a+'LL`+Y/;eO&p@Js`BaM%(.5r(S#d4K@ontpf!'8*Yeg0UZ7/MU_.D%62tI`E.BJJ>t;?+^21Cu\.(;=i-Y=+)OiT2%Ma]c=^o"r?%MYf +%at`N6/EdG#imLkGn$u[CM*Z40=V6IPPubZFP[9&oaA#;-2&)p\T[0e?n8?9`%ELs[FYbbH0Ju,Citb&C#r<1\fDs@)GUA!&m(Cr6 +%R6MS^<)d0f4qr9g*oHq4-EdPb7.Z+^OjY[au!N'$q+3J;2K1OW:).\GSZn,P]oj'976E9_U1qe$9Wm< +%6P+a+gZh'.mX;bR,smg.D@C:V=\d:Ai5HXO!,t[:H45[^;Z[(eGOu,)]rjS\7dUpB#H?-G@NdYHnf<79n66f'2Fp)2K)c@%"Ph'c +%`362"CuA?V2Hr_ML8^"mE04="Se,hSH:j`%I`N#L3JfRUOt'aq<3o/$[%4m8XP'oVUTBbtW?tY4N@p5p>R8"*UCB9:nkR8T#C!B8 +%aZPJbD +%X00D*fL9uEi^2aB4@1N.eLcC9O,7JhpjU)?2MX8BJhW8IcSPEs-qJn0LHlV+gdjCFG#8F2Njcut?ToR4r\^=[WOe#13n#_NT:]?uhM1kGf.OTZ:-`VP"YXPRJ@K>r8l!:.OJNI6*,#udg=`IVMp9RYRE$qQFR?Mh&\a;^1&%o;=EK5!sYQN/o +%J,]MQil]gHfkp?X@-FCXU'>0X!@OgAW`G&m*#p_6mY2LA*)[4:&VZ6pDjFUl8BA(QAS?Ca>>RTdf4I=s/aJXodu^DK8X=esq.1Ul +%92J)]!eOH*"(nDI*\7\sb8PUR0sf;6SR:h,4oRXr4Bf-o9=hJ^ +%TK+$mK+SiGCrR-!=P[R1#X@BY&3$Z4*Yak_L_82kh,HP=o?Y*62EW&4hA13YpRa?+?4a,:D0bdL*oNMKgNXrG4aHSm.l2ah:1N+< +%q#>@"0)(>0BhonT3tS>)]&-Mh"Rb4c#u"+>%[m\R9jJM=W\i*8hUDAchof4&Z5@&L.[KCO^S#&+-mb;N%`W,9GOa(^O=llb$KL@" +%An>5/[A^qZ`j1L$-Mc.go9N'@b"G-sIomg@nnh+_5SU%`+Xmh^7>$Gr`:=W(S?7Gi>(`o(.=*Z<]oT\Vc$Y=J#pF'g3*g7o@fl,n +%fh&$Ar'sV-:68eXmfUY'mAFki,QA[^%KDOUX4:YXkOL)@TXu&sL%U`lR&Z@?XkN%_Si%H7RamG,WT1Cb=:.;oPeA!D.P^-o%EN9o +%lRI=M8K+J+M+@Y"[&I3-rDo=g6R=CV6A.4^hVbW<-Cu@.TJmk)+/>"XHHEaA(:*!L8a@ApO)@[1M2HK\]Isk=-0O8emYj55Vf:gJ +%ASl8C-,ouk2(Anm=h2Os-_i$3_2GZe\3h+P#a/o6D2#2/[g]k)i\Q__7g'Fqg1;6^$SLB#>&[>,+D<"=N1r"6FboiTJr6!.0FQJY +%';fEJH8)fE*NS,J"P)-pql;/l#Nh-uQPSnZ<(1_C#;Ir8*_]N;?u_XXb;,N^E3.f=LheD9L\BEIDhn(t_[aWI,e +%`'d.H2@enOs"$.!I@;p72,j*GtXW"+/ad9)Z`20@j4U5A:L3 +%$DIsa=)FC+7Nd#@lco>7\5?^?^#H*.)L+(7>1q?8[FHQp;VTo)nNA=;;O_EZ;n6<0S>7+B1ABaeRCT6kgG-"2 +%llRM8_0_m!]d7`[NI)L=%!"oi"''2D#'`9c4[_V;V+[s>!"fGC