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