% The Complex Hyperbolic Geometry of the Moduli Space of Cubic Surfaces
%
% Daniel Allcock, James A. Carlson and Domingo Toledo
%
% a plain tex file


\def\fr#1{\{{#1}\}}
\def\hr{\bigskip\hrule\bigskip}

%%%% Lowtex macros for our cubics paper %%%%

%
%
%                           Zero.tex 
%                       November 14, 1989
%                     revised May 22, 1993 
% 
%                       James A. Carlson
%                       Math Department 
%                       University of Utah
%
%
%     These macros are part of the Lowtex package.  They can be
%     used by anyone any way they want, except, naturally, they
%     can't be sold (who'd want to anyway).  The core of the xref 
%     part is due to Paul Burchard, and the ttverbatim part is from 
%     somewhere, but just where, I don't know.
%
%     See the file "ExampleZero.tex" for an illustration of how
%     zero.tex is used.
% 
%
% ====================================================================== 
 

% ====================================================================== 
%
%                    Part 1: adapted from style.tex
%
% ====================================================================== 
 
% SPACING 
 
\baselineskip=14pt     % spacing between lines 
\parskip=6pt           % spacing between paragraphs 
\parindent=20pt        % paragraph indentation 
 
 
% PAGE NUMBERS 
 
\def\pagenumbers{\footline={\hss\tenrm\folio\hss}} 
 
 
% DATE 
 
\def\today{\ifcase\month\or January\or February\or March\or April\or May\or 
June\or July\or August\or September\or October\or November\or December\fi 
\space\number\day, \number\year} 
 
 
% HEADINGS: 

\font\bigbold=cmbx10 scaled 1800 
\font\medbold=cmbx10 scaled 1300 
 
\def\CCheading#1{ \cheading{\bigbold #1}  } 
\def\Cheading#1{  \cheading{\medbold #1}  }
\def\cheading#1{  \centerline{{\bf #1}}   } 
 
\def\subheading#1{\goodbreak\medskip\noindent{\bf #1}\nobreak}
  
\def\section#1 
   {\goodbreak\bigskip 
   {\noindent\hglue-1.5pt\newsection\ \bf#1} 
   \nobreak 
} 
 
% STUFF FOR NUMBERING SECTIONS: 
 
\newcount\aREGISTER  % create register 
 
\def\newsection{ 
       \global\advance\aREGISTER by1        % increment section register 
       \global\bREGISTER=0                   % set subsection register to 0 
       \global\equationREGISTER=0            % set equationregister to 0         
       {${{\bf\the\aREGISTER}}.\ $}          % display section register 
       } 
                     
\def\sectionno{\the\aREGISTER}  % returns current section number
 
% LISTS: 
 
\def\list{ 
      \vglue8pt 
      \begingroup 
      \parindent=1cm 
      \parskip=3pt 
      \baselineskip=10pt   % CLOSER SPACING IN LISTS 
      \resetitemregister 
      \vglue0pt plus5pt 
      \interlinepenalty=20 
      \def\i{\item{$\newitem $.\ }}   % produces   1. <item> 
      \def\j{\item{$\newitem $)\ }}}  % produces   1) <item> 
    
\def\endlist{ 
      \par\endgroup\goodbreak\vglue0pt plus5pt minus1pt} 
       
\newcount\itemregister  % create register to number lists 
 
\def\resetitemregister{\itemregister=0} % initialize register to 0 
 
\def\newitem{ 
      {\global\advance\itemregister by1} % increment the register 
      \the\itemregister}                 % display its contents 

\def\itemno{\the\itemregister}
 
% PROCLAIM 
 
\def\proclaim#1 
  {\medbreak 
   \smallskip 
   \noindent 
   {\bf \newproc.}\ {\bf#1}\   
   \begingroup\sl\penalty80} 
 
\def\endproclaim{\endgroup\smallskip\goodbreak} 
 
\def\pproclaim#1   %% plain proclaim: like proclaim, but no numbering
  {\medbreak 
   \smallskip 
   \noindent 
   {\bf#1}\   
   \begingroup\sl\penalty80} 
 
\def\endpproclaim{\endgroup\smallskip\goodbreak}  
 
% There are two levels of numbering, controlled by 
% 
%   \aREGISTER				(primary) 
%   \bREGISTER    (secondary) 
 
% Use \newproc to advance the bREGISTER and display 
% the label 
%                 aREGISTER.bREGISTER 
% 
 
 
\newcount\bREGISTER 
 
\def\proclabel{{\the\aREGISTER}.{\the\bREGISTER}} 
 
\def\newproc{\global\advance\bREGISTER by 1 
     \proclabel 
                     }           
              

 
% EQUATION NUMBERS 
 
\def\eqn{\eqno {(\newequation)} } 
 
\newcount\equationREGISTER 
 
\def\eqlabel{{\the\aREGISTER}.{\the\equationREGISTER}}
 
\def\newequation{ 
    \global\advance\equationREGISTER by 1 
    \eqlabel
} 
 

 
% FOOTNOTES: 
   
 
\def\nfootnote#1{ 
    \begingroup 
    \parindent=10pt 
    \baselineskip=9pt 
    \global\advance\footnoteregister by 1 
    \footnote{~$^{\the\footnoteregister}$}{#1}%
\endgroup}%
     
\newcount\footnoteregister 
 
% DISPLAY: 
 
\def\display{ 
        \par 
        \bigskip 
        \begingroup 
        \smallskip 
        %\penalty70 
        \baselineskip=10pt 
        %\parindent=2cm  
        \narrower 
        \noindent} 
         
\def\enddisplay{\smallskip\endgroup\bigskip\par}  
 
        
% COMMENT: 
 
\def\comment#1{} 
 

% ==================================================================
%
%       Part 2: adapted from  xref.tex
%       Macros for cross-referencing, thanks to Paul Burchard
%
% ====================================================================


\def\ifundefined#1{\expandafter\ifx\csname #1\endcsname\relax}

%\newwrite\LOWTEXauxfile
\newwrite\LOWTEXerrormsg

\def\begindoc{%
\relax 
\def \LOWTEXREFintro {1}
\def \LOWTEXREFsmoothModuliSec {2}
\def \LOWTEXREFstdcycliceq {{2}.{1}.{1}}
\def \LOWTEXREFcyclic {2.1}
\def \LOWTEXREFmodule {2.2}
\def \LOWTEXREFeqDefOfHermitianForm {{2}.{3}.{1}}
\def \LOWTEXREFhermform {2.3}
\def \LOWTEXREFeigenspacedecomposition {{2}.{4}.{1}}
\def \LOWTEXREFZisIsometricEmbedding {{2}.{4}.{2}}
\def \LOWTEXREFdecomp {2.4}
\def \LOWTEXREFZlemma {2.5}
\def \LOWTEXREFZisIsometry {{2}.{5}.{1}}
\def \LOWTEXREFsignatureLemma {2.6}
\def \LOWTEXREFdefofh {{2}.{7}.{1}}
\def \LOWTEXREFfivemodule {2.7}
\def \LOWTEXREFuniversalsurface {{2}.{8}.{1}}
\def \LOWTEXREFuniversalthreefold {{2}.{8}.{2}}
\def \LOWTEXREFuniversalfamilies {2.8}
\def \LOWTEXREFsheaves {2.9}
\def \LOWTEXREFmonodromy {2.10}
\def \LOWTEXREFstdModelForMonodromy {2.11}
\def \LOWTEXREFmoduloThetaHomomorphisms {{2}.{12}.{1}}
\def \LOWTEXREFfinitespace {2.12}
\def \LOWTEXREFmonotheorem {2.14}
\def \LOWTEXREFcomplexhyp {2.15}
\def \LOWTEXREFperiodmapzero {2.16}
\def \LOWTEXREFgroupG {2.17}
\def \LOWTEXREFdefOfSmoothModuliSpaces {2.18}
\def \LOWTEXREFhyperplanes {2.19}
\def \LOWTEXREFsmoothmodulitheorem {2.20}
\def \LOWTEXREFstableModuliSec {3}
\def \LOWTEXREFGIT {3.1}
\def \LOWTEXREFdefMarkingOfSmoothSurface {3.2}
\def \LOWTEXREFdefinitionFox {3.3}
\def \LOWTEXREFdefinitionFoxsemistable {3.4}
\def \LOWTEXREFstructureofstablediscr {3.5}
\def \LOWTEXREFeqnForLocalBranchedCoveringMap {{3}.{6}.{1}}
\def \LOWTEXREFcoordinatesOnMstableforms {3.6}
\def \LOWTEXREFstructureOfSemistableDiscr {3.7}
\def \LOWTEXREFlocalCoordinatesForMarkedSemistableForms {3.8}
\def \LOWTEXREFdefFramingOfSmooth {3.9}
\def \LOWTEXREFdefinitionFstableforms {3.10}
\def \LOWTEXREFabstactpermap {{3}.{11}.{1}}
\def \LOWTEXREFabstractformulaperiodmap {3.11}
\def \LOWTEXREFfoo {{3}.{12}.{1}}
\def \LOWTEXREFcongruencesubgroup {3.12}
\def \LOWTEXREFframedmodthetalemma {3.13}
\def \LOWTEXREFfreeAndProper {3.14}
\def \LOWTEXREFtableofmodulispaces {{3}.{15}.{1}}
\def \LOWTEXREFdefinemoduli {3.15}
\def \LOWTEXREFperdiagram {{3}.{16}.{1}}
\def \LOWTEXREFmanyperiodmaps {3.16}
\def \LOWTEXREFcompactifiedPerdiagram {{3}.{17}.{1}}
\def \LOWTEXREFmaintheorem {3.17}
\def \LOWTEXREForbifoldStructuresDifferent {3.18}
\def \LOWTEXREFnewOrbifoldStructures {3.19}
\def \LOWTEXREForbifoldIsomorphismTheorem {3.20}
\def \LOWTEXREFstrategyofproof {3.22}
\def \LOWTEXREFlemmasandproofs {4}
\def \LOWTEXREFformulaForHinLemma {{4}.{1}.{1}}
\def \LOWTEXREFthmHermitianForm {4.1}
\def \LOWTEXREFproofOfZlemma {4.3}
\def \LOWTEXREFsignature {4.4}
\def \LOWTEXREFhomomorphismsSurjective {4.5}
\def \LOWTEXREFuniquenessOfTricuspidalSurface {4.6}
\def \LOWTEXREFproofCoversCoincide {4.8}
\def \LOWTEXREFendProofCoversCoincide {4.9}
\def \LOWTEXREFalternateProofCoversCoincide {4.10}
\def \LOWTEXREFmarkednodallemma {4.11}
\def \LOWTEXREFmarkednodalremark {4.12}
\def \LOWTEXREFsurfaceAutomorphismsLemma {4.13}
\def \LOWTEXREFendproofOfFreenessAndProperness {4.14}
\def \LOWTEXREFlocalmonodromy {5}
\def \LOWTEXREFaonedegen {{5}.{2}.{1}}
\def \LOWTEXREFlocalaone {5.2}
\def \LOWTEXREFsinglecyclicfamily {{5}.{3}.{1}}
\def \LOWTEXREFatwodegen {{5}.{3}.{2}}
\def \LOWTEXREFlocalatwo {5.3}
\def \LOWTEXREFlocalmonodromylemma {5.4}
\def \LOWTEXREFprooflocalmonodromylemma {5.5}
\def \LOWTEXREFmultiplecyclicfamily {{5}.{6}.{1}}
\def \LOWTEXREFmultiplenodes {5.6}
\def \LOWTEXREFmultiplelocalmonodromylemma {5.7}
\def \LOWTEXREFconcreteframings {5.8}
\def \LOWTEXREFstableframeslemma {5.9}
\def \LOWTEXREFfractionaldifferentialsection {6}
\def \LOWTEXREFshortexact {{6}.{1}.{1}}
\def \LOWTEXREFseconddescrip {{6}.{1}.{2}}
\def \LOWTEXREFlocsystem {6.1}
\def \LOWTEXREFtwothirddifferentials {{6}.{2}.{1}}
\def \LOWTEXREFmeromorphicdifferentials {{6}.{2}.{2}}
\def \LOWTEXREFdefinitiontwothirddifferentials {6.2}
\def \LOWTEXREFpushforwardlemma {6.3}
\def \LOWTEXREFgenfracdiff {{6}.{4}.{1}}
\def \LOWTEXREFquickfracdifferentials {6.4}
\def \LOWTEXREFhodgefiltrationtheorem {6.5}
\def \LOWTEXREFcomponentssmoothperiodmap {{6}.{7}.{1}}
\def \LOWTEXREFformulaForPeriodmap {6.7}
\def \LOWTEXREFquicknodalfracdifferentials {6.8}
\def \LOWTEXREFnodalhodgefiltrationtheorem {6.9}
\def \LOWTEXREFhomologydecomp {{6}.{10}.{1}}
\def \LOWTEXREFcomponentsperiod {{6}.{10}.{2}}
\def \LOWTEXREFbeginasymptotic {6.10}
\def \LOWTEXREFlocalaoneasymptotic {6.11}
\def \LOWTEXREFformulaextendedmapconcrete {{6}.{12}.{1}}
\def \LOWTEXREFformulaextendedmap {{6}.{12}.{2}}
\def \LOWTEXREFlemmaextendedmap {6.13}
\def \LOWTEXREFmgroupsection {7}
\def \LOWTEXREFpropertiesForMgroup {7.1}
\def \LOWTEXREFthmReflectionsDistinct {7.3}
\def \LOWTEXREFthmRootInnerProducts {7.4}
\def \LOWTEXREFrootInnerProducts {7.5}
\def \LOWTEXREFlightConeInnerProductMatrix {{7}.{7}.{1}}
\def \LOWTEXREFeSixDiagram {{7}.{7}.{2}}
\def \LOWTEXREFalternateIPmatrix {7.7}
\def \LOWTEXREFTranslationRelations {{7}.{8}.{1}}
\def \LOWTEXREFConjugateOfTranslation {{7}.{8}.{2}}
\def \LOWTEXREFbackgroundOnLorentzianLattices {7.8}
\def \LOWTEXREFthmGotTranslationsOfeIThreeOne {7.10}
\def \LOWTEXREFthmGotAutPlusOfeIThreeOne {7.12}
\def \LOWTEXREFthmGotSeventhReflection {7.17}
\def \LOWTEXREFthmGotTranslationsOfeIFourOne {7.20}
\def \LOWTEXREFthmEqualsAutPlusOfeIFourOne {7.21}
\def \LOWTEXREFthmCongruenceSubgroupGenerators {7.25}
\def \LOWTEXREFthmAlaSiegel {7.26}
\def \LOWTEXREFthmTorsionInCongruenceSubgroup {7.27}
\def \LOWTEXREForthogonalintersectionlemma {7.28}
\def \LOWTEXREFthirtysixsubcollections {{7}.{29}.{1}}
\def \LOWTEXREFdisjointnesslemma {7.30}
\def \LOWTEXREFembeddedlemma {7.31}
\def \LOWTEXREFsmoothspacetheorem {7.32}
\def \LOWTEXREFsecondembeddedlemma {7.33}
\def \LOWTEXREFcuspidaldegenerations {8}
\def \LOWTEXREFlocalMonodromyAtCuspidalForm {8.1}
\def \LOWTEXREFSatakeextension {8.2}
\def \LOWTEXREFinjectivityandsurjectivity {9}
\def \LOWTEXREFlocalimmersionlemma {9.1}
\def \LOWTEXREFdiffpermapseventhirds {{9}.{1}.{1}}
\def \LOWTEXREFglobalinjectivitylemma {9.2}
\def \LOWTEXREFthreefolddiagram {{9}.{2}.{1}}
\def \LOWTEXREFsurjectivitylemma {9.4}
\def \LOWTEXREFCRAStheorem {9.5}
\def \LOWTEXREFnodalmoduliisoprop {9.6}
\def \LOWTEXREFnodalequation {{9}.{7}.{1}}
\def \LOWTEXREFcomaprisonmoduli {9.7}
\def \LOWTEXREFmodulicomparisonlemma {9.8}
\def \LOWTEXREFDMperdiagram {{9}.{9}.{1}}
\def \LOWTEXREFDMmap {9.9}
\def \LOWTEXREFDMiso {9.10}
\def \LOWTEXREFgysinmap {{9}.{11}.{1}}
\def \LOWTEXREFuniversalsurfacesec {10}
\def \LOWTEXREFuniversalmarkedsurface {10.1}
\def \LOWTEXREFtangentbundletheorem {10.2}
\def \LOWTEXREFequivariantisomorphism {10.3}
\def \LOWTEXREFequivariantbundles {10.3}
\def \LOWTEXREFbundleisomorphismlemma {10.4}
\def \LOWTEXREFresiduepairing {{10}.{6}.{1}}
\def \LOWTEXREFspecialcubics {11}
\def \LOWTEXREFbiflectionTransform {11.4}
\def \LOWTEXREFdiagonalSurfacePoint {11.6}
\def \LOWTEXREFonlyOneOrbitofMinusFiveVectors {11.7}
\def \LOWTEXREFfermatSurfacePoint {11.9}
\def \LOWTEXREFtransOnLongRoots {11.13}
\def \LOWTEXREFnotation {12}
\def \LOWTEXREFAllcock {1}
\def \LOWTEXREFAllcockaspherical {2}
\def \LOWTEXREFACT {3}
\def \LOWTEXREFACTfundgp {4}
\def \LOWTEXREFAF {5}
\def \LOWTEXREFAGV {6}
\def \LOWTEXREFBB {7}
\def \LOWTEXREFBourbaki {8}
\def \LOWTEXREFBrieskornSaito {9}
\def \LOWTEXREFBruce {10}
\def \LOWTEXREFBruceWall {11}
\def \LOWTEXREFCarlsonGriffiths {12}
\def \LOWTEXREFCTDiscriminant {13}
\def \LOWTEXREFClemens {14}
\def \LOWTEXREFClemensGriffiths {15}
\def \LOWTEXREFCKM {16}
\def \LOWTEXREFatlas {17}
\def \LOWTEXREFSPLAG {18}
\def \LOWTEXREFDeligneSGA {19}
\def \LOWTEXREFDeligneMostow {20}
\def \LOWTEXREFFeit {21}
\def \LOWTEXREFFox {22}
\def \LOWTEXREFGoreskyMacPherson {23}
\def \LOWTEXREFGriffiths {24}
\def \LOWTEXREFGriffithsHarris {25}
\def \LOWTEXREFHilbert {26}
\def \LOWTEXREFHunt {27}
\def \LOWTEXREFHuntWeintraub {28}
\def \LOWTEXREFLibgober {29}
\def \LOWTEXREFLooijengaLondon {30}
\def \LOWTEXREFLooijenga {31}
\def \LOWTEXREFManin {32}
\def \LOWTEXREFMatsumoto {33}
\def \LOWTEXREFMess {34}
\def \LOWTEXREFMilnor {35}
\def \LOWTEXREFmilnor {36}
\def \LOWTEXREFmostow {37}
\def \LOWTEXREFMumford {38}
\def \LOWTEXREFMumfordEnseignement {39}
\def \LOWTEXREFNaruki {40}
\def \LOWTEXREFOMeara {41}
\def \LOWTEXREFPicard {42}
\def \LOWTEXREFSasakiYoshida {43}
\def \LOWTEXREFSegre {44}
\def \LOWTEXREFSiegel {45}
\def \LOWTEXREFST {46}
\def \LOWTEXREFThurston {47}
\def \LOWTEXREFToledo {48}
\def \LOWTEXREFZeeman {49}

%   \openin\LOWTEXauxfile \jobname-aux
%   \ifeof\LOWTEXauxfile
%      \immediate\write\LOWTEXerrormsg{No auxiliary file yet.}%
%   \else
%      \closein\LOWTEXauxfile\relax
%      \input \jobname-aux
%   \fi
%   \immediate\openout\LOWTEXauxfile=\jobname-aux
%   \immediate\write\LOWTEXauxfile{\relax}%
}

\def\enddoc{%
%   \closeout\LOWTEXauxfile
}

\def\defref#1#2{%
%  \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {#2}%
%      }%
%   }%
%   \LOWTEXwriteref
}

\def\procref#1{%
%   \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {\proclabel}%
%      }%
%   }%
%   \LOWTEXwriteref
}

\def\eqref#1{%
%   \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {\eqlabel}%
%      }%
%   }%
%   \LOWTEXwriteref
}


\def\xref#1{%
   \ifundefined{LOWTEXREF#1}
      \immediate\write\LOWTEXerrormsg{Undefined reference #1.}%
   \else
      \csname LOWTEXREF#1\endcsname
   \fi
}




% ====================================================================
%                              Bibliography
% ====================================================================

\def\bibliography{
  \vfill\eject
  \centerline{{\medbold Bibliography }}
  \bigskip
  \begingroup
  \parindent0.5cm
  }

\def\bibref#1{%
%\xdef\LOWTEXwriteref{%
%\write\LOWTEXauxfile{%
%\def \string\LOWTEXREF #1 {\bibno}%
%}%
%}%
%\LOWTEXwriteref
}

\newcount\bibREG  % create register  

\def\newbibno{%
% update registers:
\global\advance\bibREG by1
\the\bibREG%
}

\def\bibno{\the\bibREG}

\def\bi#1{%
\item{[\newbibno]}\kern-3pt%
\bibref{#1}%
}


\def\endbibliography{
  \endgroup
  }
  
\def\cite#1{[\xref{#1}]}   


%=================================================================
%
%                          Graphics
%
%=================================================================


\def\picture#1by#2(#3){ 
\vbox to #2 { 
  \hrule width #1 height 0pt depth 0pt \vfill \special{picture #3}} 
} 
 
 
\def\scaledpicture#1by#2(#3scaled#4){{ 
\dimen0=#1  \dimen1=#2 
\divide\dimen0 by 1000 \multiply\dimen0 by #4 
\divide\dimen1 by 1000 \multiply\dimen1 by #4 
\picture \dimen0 by \dimen1 (#3 scaled #4)}} 
 
\def\cfigure#1by#2(#3scaled#4offset#5:#6) 
  {\medskip 
   \vglue 2mm minus 2mm 
   $$ 
     \hbox{ 
       \hglue#5 
       {\scaledpicture #1 by #2 (#3 scaled #4)} 
     } 
   $$ 
   \par\nobreak 
   \vglue 4.5mm\nobreak 
   \centerline {\figurelabel \quad #6}\par\goodbreak 
   \vglue 2mm minus 2mm 
   \medskip} 
 
\newcount\figureregister 
\def\figurenumber 
  {\global\advance\figureregister by 1 
    \the\figureregister} 
 
\def\figurelabel 
  {{\bf Figure \figurenumber .}} 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% =====================================================================
%
%                        Symbols.tex
%
% ======================================================================
%
% This file defines abbreviations for commonly used character.  
%
% Examples:
%
%    \g =  Gothic g
%    \G =  blacboard bold G
%    \GG = calligraphic G
%
% Exceptions:
%
% ======================================================================
 
\newfam\meuffam 
\font\tenmeuf=eufm10 
\font\sevenmeuf=eufm7 
\font\fivemeuf=eufm5 
 
\textfont\meuffam=\tenmeuf 
\scriptfont\meuffam=\sevenmeuf 
\scriptscriptfont\meuffam=\fivemeuf 
 
\def\germ{\fam\meuffam\tenmeuf} 
 
 
% ---------------------------------------------------- 
 
% Bbb.tex:

\newfam\msyfam
\font\tenmsy=msbm10
\font\sevenmsy=msbm7
\font\fivemsy=msbm5

\textfont\msyfam=\tenmsy
\scriptfont\msyfam=\sevenmsy
\scriptscriptfont\msyfam=\fivemsy

\def\Bbb{\fam\msyfam\tenmsy} 
 
 
% GERMAN CHARACTERS: 
 
\def\a{{\germ a}} 
\def\b{{\germ b}} 
\def\c{{\germ c}} 
\def\d{{\germ d}} 
\def\e{{\germ e}} 
\def\f{{\germ f}} 
\def\g{{\germ g}} 
\def\h{{\germ h}} 
\def\i{{\germ i}} 
\def\j{{\germ j}} 
\def\k{{\germ k}} 
\def\l{{\germ l}} 
\def\m{{\germ m}} 
\def\n{{\germ n}} 
\def\o{{\germ o}} 
\def\p{{\germ p}} 
\def\q{{\germ q}} 
\def\r{{\germ r}} 
\def\s{{\germ s}} 
\def\t{{\germ t}} 
\def\u{{\germ u}} 
\def\v{{\germ v}} 
\def\w{{\germ w}} 
\def\x{{\germ x}} 
\def\y{{\germ y}} 
\def\z{{\germ z}} 
 
 
% BLACKBOARD BOLD: 
 
\def\A{{\Bbb A}} 
\def\B{{\Bbb B}} 
\def\C{{\Bbb C}} 
\def\D{{\Bbb D}} 
\def\E{{\Bbb E}} 
\def\F{{\Bbb F}} 
\def\G{{\Bbb G}} 
\def\H{{\Bbb H}} 
\def\I{{\Bbb I}} 
\def\J{{\Bbb J}} 
\def\L{{\Bbb L}} 
\def\K{{\Bbb K}} 
\def\M{{\Bbb M}} 
\def\N{{\Bbb N}} 
\def\O{{\Bbb O}} 
\def\P{{\Bbb P}} 
\def\Q{{\Bbb Q}} 
\def\R{{\Bbb R}} 
 
\def\T{{\Bbb T}} 
\def\U{{\Bbb U}} 
\def\V{{\Bbb V}} 
\def\W{{\Bbb W}} 
\def\X{{\Bbb X}} 
\def\Y{{\Bbb Y}} 
\def\Z{{\Bbb Z}} 
 
% CALLIGRAPHIC CHARACTERS: 
 
\def\AA{{\cal A}} 
\def\BB{{\cal B}} 
\def\CC{{\cal C}} 
\def\DD{{\cal D}} 
\def\EE{{\cal E}} 
\def\FF{{\cal F}} 
\def\GG{{\cal G}} 
\def\HH{{\cal H}} 
\def\II{{\cal I}} 
\def\JJ{{\cal J}}
\def\KK{{\cal K}}
\def\LL{{\cal L}} 
\def\MM{{\cal M}} 
\def\NN{{\cal N}} 
\def\OO{{\cal O}} 
\def\PP{{\cal P}} 
\def\QQ{{\cal Q}} 
\def\RR{{\cal R}} 
\def\SS{{\cal S}} 
\def\TT{{\cal T}} 
\def\UU{{\cal U}} 
\def\VV{{\cal V}} 
\def\WW{{\cal W}} 
\def\XX{{\cal X}} 
\def\YY{{\cal Y}} 
\def\ZZ{{\cal Z}} 
 
% END[symbols.tex] %


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% =====================================================================
%
%                              mathdefs.tex
%
% =====================================================================
%
%                     Commonly used mathematical symbols
%  
% =====================================================================
 
\def\Kahler{K\"ahler} 
\def\Poincare{Poincar\'e} 
 
  
%LOGIC: 
 
\def\eqdef{\ \ \smash{ 
   \mathop{=}\limits_{def}}\ \ } 
 
 
% SETS: 
 
\def\id{\mathop{id}\nolimits} 
\def\card{\mathop{\rm card\, }\nolimits} 
 
\def\lset{\{\ }  % for { 
\def\st{\ |\ }   % for | 
\def\rset{\ \}}  % for } 
 
\def\set#1{\lset #1 \rset} 
\def\sett#1#2{\lset #1 \st #2 \rset} 
 
\def\map{\longrightarrow} 
\def\inclusion{\hookrightarrow} 
 
\def\mapleft#1{\ \smash{ 
   \mathop{\longleftarrow}\limits^{#1}}\ } 
\def\mapright#1{\ \smash{ 
   \mathop{\longrightarrow}\limits^{#1}}\ } 
\def\mapdown#1{
  \downarrow\ \llap{#1}  }
\def\mapse#1{
  \rlap{#1}\ \searrow}
   
\def\matspace{\def\normalbaselines{\baselineskip20pt 
   \lineskip3pt \lineskiplimit3pt }} 
 
 
% CATEGORICALS: 
 
\def\ker{\mathop{\rm ker\, }\nolimits} 
\def\im{\mathop{\rm im\, }\nolimits} 
\def\cok{\mathop{\rm coker\, }\nolimits} 
 
\def\Hom{\mathop{\rm Hom}\nolimits} 
\def\End{\mathop{\rm End}\nolimits} 
\def\Ext{\mathop{\rm Ext}\nolimits} 
\def\Tor{\mathop{\rm Tor}\nolimits} 
 
 
% ALGEBRA: 
 
\def\dim{\mathop{\rm dim\, }\nolimits} 
 
\def\deg{\mathop{\rm deg\, }\nolimits} 
 
% transposes: 
 
\def\tr{{}^t\kern-0.9pt} %transpose: use for "b" 
 
\def\Tr{{}^T\kern-0.9pt} %transpose: use for "b" 
 
\def\wedges{\wedge \dots \wedge} 
 
 
% "ANALYSIS": 
 
\def\max{\mathop{\rm max}\nolimits} 
\def\min{\mathop{\rm min}\nolimits} 
 
\def\dirlim{\ \smash{ 
   \mathop{\rm{lim}}\limits_{\rightarrow}}\ } 
 
\def\invlim{\ \smash{ 
   \mathop{\rm{lim}}\limits_{\leftarrow}}\ } 
 
\def\approxle{ 
       \mathop{  
       \hbox{$ 
       {  \lower0.5ex\hbox{$<$}  
              \atop  
           \raise0.25ex\hbox{$\sim$}   
       } 
             $} 
               } 
              } 
 
\def\del{\partial} 
 
\def\exp{\mathop{\rm exp}\nolimits} 
 
 
% CONSTANTS: 
 
\def\half{{1\over 2}} 
 
 
% DOTS: 
 
\def\commadots{\ ,\ldots ,\ } 
 
\def\hdot{^*} 
\def\lowdot{_*} % THESE NEED IMPROVEMENT 
 
% -------------------------------------- 
 
\def\sumprime {\mathop{{\sum}'}} 
\def\sumpprime {\mathop{{\sum}''}} 
 
%========================================= 
 
\def\rank{\mathop{{\rm rank}}\nolimits} 
\def\genus{\mathop{{\rm genus}}\nolimits} 
\def\perp{^\bot} 


\def\numeq{
\vcenter{
\hbox{
\vbox{
  \hbox{$\approx$}%
  \kern-8.6pt%
  \hbox{$\sim$}%
     }%vbox
     }%hbox
       }%vcenter
      \,\,%
} 

% END[mathdefs.tex] %

% Additions:

\def\proof{\noindent{\bf Proof:}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



% This is PiCTeX, Version 1.1   9/21/87
 
% CAVEAT: The PiCTeX manual often has a more lucid explanation
%   of any given topic than you will find in the internal documentation
%   of the macros.
 
% PiCTeX's commands can be classified into two groups: (1) public (or
%   external), and (2) private (or internal). The public macros are
%   discussed at length in the manual. The only discussion of the private
%   macros is the internal documentation. The private macros all have
%   names beginning with an exclamation point (!) of category code 11. 
%   Since in normal usage "!" has category code 12, these macros can't
%   be accessed or modified by the general user.
 
% The macros are organized into thematically related groups. For example,
%   the macros dealing with dots & dashes are all in the DASHPATTERN group.
%   The table below shows which macros are in which groups. The table
%   covers all public macros, and many (but not all) of PiCTeX's upper level
%   private macros. Following the table, the various groups are listed
%   in the order in which they appear in the table.
 
% *********************** TABLE OF GROUPS OF MACROS **********************
 
% HACKS:  Utility macros
%    \PiC
%    \PiCTeX
%    \placevalueinpts 
%    \!!loop 
%    \!cfor
%    \!copylist
%    \!ecfor
%    \!etfor
%    \!getnext
%    \!getnextvalueof
%    \!ifempty
%    \!ifnextchar
%    \!leftappend
%    \!listaddon 
%    \!loop
%    \!lop
%    \!mlap
%    \!not
%    \!removept
%    \!rightappend
%    \!tfor 
%    \!vmlap
%    \!wlet
 
% ALLOCATION:  Allocates registers
 
% AREAS: Deals with plot areas 
%    \axis
%    \grid 
%    \invisibleaxes
%    \normalgraphs 
%    \plotheading 
%    \setplotarea
%    \visibleaxes
 
% ARROWS:  Draws arrows
%    \arrow
%    \betweenarrows
 
% BARS:  Draws bars
%    \putbar 
%    \setbars
 
% BOXES:  Draws rectangles
%    \frame
%    \putrectangle 
%    \rectangle
%    \shaderectangleson
%    \shaderectanglesoff
 
% CURVES:  Upper level plot commands
%    \hshade 
%    \plot 
%    \sethistograms
%    \setlinear
%    \setquadratic
%    \vshade
 
% DASHPATTERNS:  Sets up dash patterns
%    \findlength 
%    \setdashes 
%    \setdashesnear
%    \setdashpattern
%    \setdots 
%    \setdotsnear 
%    \setsolid
%    \!dashingoff
%    \!dashingon
 
% DIVISION:  Does long division of dimension registers
%    \Divide 
%    \!divide
 
% ELLIPSES:  Draws ellipses and circles
%    \circulararc 
%    \ellipticalarc 
 
% RULES:  Draws rules, i.e., horizontal & vertical lines
%    \putrule 
%    \!putdashedhline
%    \!putdashedvline
%    \!puthline 
%    \!putsolidhline  
%    \!putsolidvline  
%    \!putvline
 
% LINEAR ARC:  Draws straight lines -- solid and dashed
%    \inboundscheckoff
%    \inboundscheckon
%    \!advancedashing 
%    \!drawlinearsegment
%    \!initinboundscheck
%    \!linearsolid
%    \!lineardashed
%    \!ljoin
%    \!plotifinbounds     
%    \!start 
 
% LOGTEN:  Log_10 function
%    \!logten
 
% PICTURES:  Basic setups for PiCtures; \put commands
%    \accountingoff
%    \accountingon
%    \beginpicture
%    \endpicture    
%    \endpicturesave 
%    \lines
%    \multiput
%    \put 
%    \setcoordinatemode
%    \setcoordinatesystem
%    \setdimensionmode
%    \stack 
%    \Lines
%    \Xdistance
%    \Ydistance
%    \!dimenput
%    \!ifcoordmode
%    \!ifdimenmode
%    \!setcoordmode
%    \!setdimenmode
%    \!setputobject
   
% PLOTTING:  Things to do with plotting
%    \dontsavelinesandcurves
%    \replot
%    \savelinesandcurves 
%    \setplotsymbol
%    \writesavefile 
%    \!plot
 
% PYTHAGORAS:  Euclidean distance function
%    \placehypotenuse 
%    \!Pythag
 
% QUADRATIC ARC:  Draws a quadratic arc
%    \!qjoin 
 
% ROTATIONS:  Handles rotations
%    \startrotation 
%    \stoprotation
%    \!rotateaboutpivot
%    \!rotateonly
 
% SHADING:  Handles shading
%    \setshadegrid 
%    \setshadesymbol
%    \!lshade
%    \!qshade
%    \!starthshade
%    \!startvshade  
 
% TICKS:  Draws ticks on graphs
%    \gridlines
%    \loggedticks
%    \nogridlines
%    \ticksin
%    \ticksout
%    \unloggesticks
 
% ***************** END OF TABLE OF GROUPS OF MACROS ********************


\catcode`!=11 %  ***** THIS MUST NEVER BE OMITTED
% *******************************
% *** HACKS  (Utility macros) ***
% *******************************
 
% ** User commands
% **   \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
% **   \PiCTeX{\PiC\kern-.11em\TeX}
% **   \placevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
  
% ** Internal commands
% **   \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION}
% **   \!tfor NAME := LIST \do {BODY}
% **   \!etfor NAME:= LIST \do {BODY}
% **   \!cfor NAME := LIST \do {BODY}
% **   \!ecfor NAME:= LIST \do {BODY}
% **   \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION}
% **   \!getnext\\ITEMfrom\LIST
% **   \!getnextvalueof\DIMEN\from\LIST
% **   \!copylist\LISTMACRO_A\to\LISTMACRO_B
% **   \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B
% **   \!listaddon ITEM LIST
% **   \!rightappendITEM\withCS\to\LISTMACRO
% **   \!leftappendITEM\withCS\to\LISTMACRO
% **   \!lop\LISTMACRO\to\ITEM
% **   \!loop ... repeat
% **   \!!loop ... repeat
% **   \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE}
% **   \!mlap{...}  
% **   \!vmlap{...}
% **   \!not{TEK if-CONDITION}

% ** First, here are the the PiCTeX logo, and the syllable PiC:
\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
\def\PiCTeX{\PiC\kern-.11em\TeX}

% ** The following macro expands to parameter #2 or parameter #3 according to
% ** whether the next non-blank character following the macro is or is not #1. 
% ** Blanks following the macro are gobbled.
\def\!ifnextchar#1#2#3{%
  \let\!testchar=#1%
  \def\!first{#2}%
  \def\!second{#3}%
  \futurelet\!nextchar\!testnext}
\def\!testnext{%
  \ifx \!nextchar \!spacetoken 
    \let\!next=\!skipspacetestagain
  \else
    \ifx \!nextchar \!testchar
      \let\!next=\!first
    \else 
      \let\!next=\!second 
    \fi 
  \fi
  \!next}
\def\\{\!skipspacetestagain} 
  \expandafter\def\\ {\futurelet\!nextchar\!testnext} 
\def\\{\let\!spacetoken= } \\  %  ** set \spacetoken to a space token
 
 
% ** Borrow the "tfor" macro from Latex:
% **   \!tfor NAME := LIST \do {BODY}
% **   if, before expansion, LIST = T1 ... Tn,  where each  Ti  is a token
% **   or  {...},  then executes  BODY  n  times, with  NAME = Ti  on the
% **   i-th iteration.  Works for  n=0.
\def\!tfor#1:=#2\do#3{%
  \edef\!fortemp{#2}%
  \ifx\!fortemp\!empty 
    \else
    \!tforloop#2\!nil\!nil\!!#1{#3}%
  \fi}
\def\!tforloop#1#2\!!#3#4{%
  \def#3{#1}%
  \ifx #3\!nnil
    \let\!nextwhile=\!fornoop
  \else
    #4\relax
    \let\!nextwhile=\!tforloop
  \fi 
  \!nextwhile#2\!!#3{#4}}
 
 
% **   \!etfor NAME:= LIST\do {BODY}
% **   This is like \!cfor, but LIST is any balanced token list whose complete
% **     expansion has the form  T1 ... Tn
\def\!etfor#1:=#2\do#3{%
  \def\!!tfor{\!tfor#1:=}%
  \edef\!!!tfor{#2}%
  \expandafter\!!tfor\!!!tfor\do{#3}}
 
 
% **   modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop.
% **   \!cfor NAME := LIST \do {BODY}
% **     if, before expansion, LIST = a1,a2,...an, then executes  BODY n times,
% **     with  NAME = ai  on the i-th iteration.  Works for  n=0.
\def\!cfor#1:=#2\do#3{%
  \edef\!fortemp{#2}%
  \ifx\!fortemp\!empty 
  \else
    \!cforloop#2,\!nil,\!nil\!!#1{#3}%
  \fi}
\def\!cforloop#1,#2\!!#3#4{%
  \def#3{#1}%
  \ifx #3\!nnil
    \let\!nextwhile=\!fornoop 
  \else
    #4\relax
    \let\!nextwhile=\!cforloop
  \fi
  \!nextwhile#2\!!#3{#4}}
 
 
% **   \!ecfor NAME:= LIST\do {BODY}
% **   This is like \!cfor, but LIST is any balanced token list whose complete
% **     expansion has the form  a1,a2,...,an.
\def\!ecfor#1:=#2\do#3{%
  \def\!!cfor{\!cfor#1:=}%
  \edef\!!!cfor{#2}%
  \expandafter\!!cfor\!!!cfor\do{#3}}
 
 
\def\!empty{}
\def\!nnil{\!nil}
\def\!fornoop#1\!!#2#3{}
 
 
% **  \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION}
\def\!ifempty#1#2#3{%
  \edef\!emptyarg{#1}%
  \ifx\!emptyarg\!empty
    #2%
  \else
    #3%
  \fi}
 
% **  \!getnext\\ITEMfrom\LIST
% **    \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk}
% **    This routine sets \ITEM to item1, and cycles \LIST to
% **    \\{item2}\\{item3}...\\{itemk}\\{item1}
\def\!getnext#1\from#2{%
  \expandafter\!gnext#2\!#1#2}%
\def\!gnext\\#1#2\!#3#4{%
  \def#3{#1}%
  \def#4{#2\\{#1}}%
  \ignorespaces}
 
 
% ** \!getnextvalueof\DIMEN\from\LIST
% **   Similar to !getnext.  
% **   \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ... 
% **   \DIMEN is a dimension register
% **   Works also for counts
%
\def\!getnextvalueof#1\from#2{%
  \expandafter\!gnextv#2\!#1#2}%
\def\!gnextv\\#1#2\!#3#4{%
  #3=#1%
  \def#4{#2\\{#1}}%
  \ignorespaces}
 
 
% ** \!copylist\LISTMACROA\to\LISTMACROB
% **   makes the replacement text of LISTMACRO B identical to that of
% **   list macro A.
\def\!copylist#1\to#2{%
  \expandafter\!!copylist#1\!#2}
\def\!!copylist#1\!#2{%
  \def#2{#1}\ignorespaces}
 
 
% **  \!wlet\CSA=\CSB
% **  lets control sequence \CSB = control sequence \CSA, and writes a
% **    message to that effect in the log file using plain TEK's \wlog
\def\!wlet#1=#2{%
  \let#1=#2 
  \wlog{\string#1=\string#2}}
 
% ** \!listaddon ITEM LIST
% ** LIST <-- LIST \\ ITEM
\def\!listaddon#1#2{%
  \expandafter\!!listaddon#2\!{#1}#2}
\def\!!listaddon#1\!#2#3{%
  \def#3{#1\\#2}}
 
% **  \!rightappendITEM\to\LISTMACRO
% **    \LISTMACRO --> \LISTMACRO\\{ITEM}
%\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2}
%\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}}
 
 
% **  \!rightappendITEM\withCS\to\LISTMACRO
% **    \LISTMACRO --> \LISTMACRO||CS||{ITEM}
\def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3}
\def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}}
 
 
% **  \!leftappendITEM\withCS\to\LISTMACRO
% **    \LISTMACRO --> CS||{ITEM}||\LISTMACRO
\def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3}
\def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}}
 
 
% **  \!lop\LISTMACRO\to\ITEM
% **    \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ...
% **    item1 --> \ITEM
\def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2}
\def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}}
 
 
% **  \!placeNUMBER\of\LISTMACRO\in\ITEM
% **    the NUMBERth item of \LISTMACRO --> replacement text of \ITEM
%\def\!place#1\of#2\in#3{\def#3{\outofrange}%
%{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}}
 
 
% **  Following code converts a commalist to a list macro, with all items 
% **    fully expanded.
%\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list}
 
 
% ** \!loop ... repeat
% ** This is exactly like TEX's \loop ... repeat.  It can be used in nesting
% ** two loops, without puting the inner one inside a group.
\def\!loop#1\repeat{\def\!body{#1}\!iterate}
\def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next}
 
% ** \!!loop ... repeat
% ** This is exactly like TEX's \loop ... repeat.  It can be used in nesting
% ** two loops, without puting the inner one inside a group.
\def\!!loop#1\repeat{\def\!!body{#1}\!!iterate}
\def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next}
%  (\multiput uses \!!loop)
 
% ** \!removept{DIMENREG}{\CS}
% ** Defines the control sequence CS to be the value (in points) in the
% ** dimension register DIMENREG (but without the "pt" TEK usually adds)
% ** E.g., after  \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3
\def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}}
{\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}}

% ** \pladevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
\def\placevalueinpts of <#1> in #2 {%
  \!removept{#1}{#2}}
 
% ** \!mlap{...}  \!vmlap{...}
% ** Center  ...  in a box of width 0.
\def\!mlap#1{\hbox to 0pt{\hss#1\hss}}
\def\!vmlap#1{\vbox to 0pt{\vss#1\vss}}
 
% ** \!not{TEK if-CONDITION}
% ** By a TEK if-CONDITION is meant something like 
% **     \ifnum\N<0,   or   \ifdim\A>\B
% ** \!not produces an if-condition which is false if the original condition
% ** is true, and true if the original condition is false.
\def\!not#1{%
  #1\relax
    \!switchfalse
  \else
    \!switchtrue
  \fi
  \if!switch
  \ignorespaces}
 

% *******************
% *** ALLOCATIONS ***
% *******************

% This section allocates all the registers PiCTeX uses. Following
% each allocation is a string of the form  ....N.D...L......... ;
% the various letters show which sections of PiCTeX make explicit
% reference to that register, according to the following code:
 
%   H Hacks
%   A Areas
%   W arroWs
%   B Bars
%   X boXes
%   C Curves
%   D Dashpattterns
%   V diVision
%   E Ellipses
%   U rUles
%   L Linear arc
%   G loGten
%   P Pictures
%   O plOtting
%   Y pYthagoras
%   Q Quadratic arc
%   R Rotations
%   S Shading
%   T Ticks

% Turn off messages from TeX's allocation macros
\let\!!!wlog=\wlog              % "\wlog" is defined in plain TeX
\def\wlog#1{}    

\newdimen\headingtoplotskip     %.A.................
\newdimen\linethickness         %.A..X....U........T
\newdimen\longticklength        %.A................T
\newdimen\plotsymbolspacing     %......D...L....Q...
\newdimen\shortticklength       %.A................T
\newdimen\stackleading          %.A..........P......
\newdimen\tickstovaluesleading  %.A................T
\newdimen\totalarclength        %......D...L....Q...
\newdimen\valuestolabelleading  %.A.................

\newbox\!boxA                   %.AW...............T
\newbox\!boxB                   %..W................
\newbox\!picbox                 %............P......
\newbox\!plotsymbol             %..........L..O.....
\newbox\!putobject              %............PO...S.
\newbox\!shadesymbol            %.................S.

\newcount\!countA               %.A....D..UL....Q.ST
\newcount\!countB               %......D..U.....Q.ST
\newcount\!countC               %...............Q..T
\newcount\!countD               %...................
\newcount\!countE               %.............O....T
\newcount\!countF               %.............O....T
\newcount\!countG               %..................T
\newcount\!fiftypt              %.........U.........
\newcount\!intervalno           %..........L....Q...
\newcount\!npoints              %..........L........
\newcount\!nsegments            %.........U.........
\newcount\!ntemp                %............P......
\newcount\!parity               %.................S.
\newcount\!scalefactor          %..................T
\newcount\!tfs                  %.......V...........
\newcount\!tickcase             %..................T

\newdimen\!Xleft                %............P......
\newdimen\!Xright               %............P......
\newdimen\!Xsave                %.A................T
\newdimen\!Ybot                 %............P......
\newdimen\!Ysave                %.A................T
\newdimen\!Ytop                 %............P......
\newdimen\!angle                %........E..........
\newdimen\!arclength            %..W......UL....Q...
\newdimen\!areabloc             %.A........L........
\newdimen\!arealloc             %.A........L........
\newdimen\!arearloc             %.A........L........
\newdimen\!areatloc             %.A........L........
\newdimen\!bshrinkage           %.................S.
\newdimen\!checkbot             %..........L........
\newdimen\!checkleft            %..........L........
\newdimen\!checkright           %..........L........
\newdimen\!checktop             %..........L........
\newdimen\!dimenA               %.AW.X.DVEUL..OYQRST
\newdimen\!dimenB               %....X.DVEU...O.QRS.
\newdimen\!dimenC               %..W.X.DVEU......RS.
\newdimen\!dimenD               %..W.X.DVEU....Y.RS.
\newdimen\!dimenE               %..W........G..YQ.S.
\newdimen\!dimenF               %...........G..YQ.S.
\newdimen\!dimenG               %...........G..YQ.S.
\newdimen\!dimenH               %...........G..Y..S.
\newdimen\!dimenI               %...BX.........Y....
\newdimen\!distacross           %..........L....Q...
\newdimen\!downlength           %..........L........
\newdimen\!dp                   %.A..X.......P....S.
\newdimen\!dshade               %.................S.
\newdimen\!dxpos                %..W......U..P....S.
\newdimen\!dxprime              %...............Q...
\newdimen\!dypos                %..WB.....U..P......
\newdimen\!dyprime              %...............Q...
\newdimen\!ht                   %.A..X.......P....S.
\newdimen\!leaderlength         %......D..U.........
\newdimen\!lshrinkage           %.................S.
\newdimen\!midarclength         %...............Q...
\newdimen\!offset               %.A................T
\newdimen\!plotheadingoffset    %.A.................
\newdimen\!plotsymbolxshift     %..........L..O.....
\newdimen\!plotsymbolyshift     %..........L..O.....
\newdimen\!plotxorigin          %..........L..O.....
\newdimen\!plotyorigin          %..........L..O.....
\newdimen\!rootten              %...........G.......
\newdimen\!rshrinkage           %.................S.
\newdimen\!shadesymbolxshift    %.................S.
\newdimen\!shadesymbolyshift    %.................S.
\newdimen\!tenAa                %...........G.......
\newdimen\!tenAc                %...........G.......
\newdimen\!tenAe                %...........G.......
\newdimen\!tshrinkage           %.................S.
\newdimen\!uplength             %..........L........
\newdimen\!wd                   %....X.......P....S.
\newdimen\!wmax                 %...............Q...
\newdimen\!wmin                 %...............Q...
\newdimen\!xB                   %...............Q...
\newdimen\!xC                   %...............Q...
\newdimen\!xE                   %..W.....E.L....Q.S.
\newdimen\!xM                   %..W.....E......Q.S.
\newdimen\!xS                   %..W.....E.L....Q.S.
\newdimen\!xaxislength          %.A................T
\newdimen\!xdiff                %..........L........
\newdimen\!xleft                %............P......
\newdimen\!xloc                 %..WB.....U.......S.
\newdimen\!xorigin              %.A........L.P....S.
\newdimen\!xpivot               %................R..
\newdimen\!xpos                 %..........L.P..Q.ST
\newdimen\!xprime               %...............Q...
\newdimen\!xright               %............P......
\newdimen\!xshade               %.................S.
\newdimen\!xshift               %..W.........PO...S.
\newdimen\!xtemp                %............P......
\newdimen\!xunit                %.AWBX...EUL.P..QRS.
\newdimen\!xxE                  %........E..........
\newdimen\!xxM                  %........E..........
\newdimen\!xxS                  %........E..........
\newdimen\!xxloc                %..WB....EU.........
\newdimen\!yB                   %...............Q...
\newdimen\!yC                   %...............Q...
\newdimen\!yE                   %..W.....E.L....Q...
\newdimen\!yM                   %..W.....E......Q...
\newdimen\!yS                   %..W.....E.L....Q...
\newdimen\!yaxislength          %.A................T
\newdimen\!ybot                 %............P......
\newdimen\!ydiff                %..........L........
\newdimen\!yloc                 %..WB.....U.......S.
\newdimen\!yorigin              %.A........L.P....S.
\newdimen\!ypivot               %................R..
\newdimen\!ypos                 %..........L.P..Q.ST
\newdimen\!yprime               %...............Q...
\newdimen\!yshade               %.................S.
\newdimen\!yshift               %..W.........PO...S.
\newdimen\!ytemp                %............P......
\newdimen\!ytop                 %............P......
\newdimen\!yunit                %.AWBX...EUL.P..QRS.
\newdimen\!yyE                  %........E..........
\newdimen\!yyM                  %........E..........
\newdimen\!yyS                  %........E..........
\newdimen\!yyloc                %..WB....EU.........
\newdimen\!zpt                  %.AWBX.DVEULGP.YQ.ST

\newif\if!axisvisible           %.A.................
\newif\if!gridlinestoo          %..................T
\newif\if!keepPO                %...................
\newif\if!placeaxislabel        %.A.................
\newif\if!switch                %H..................
\newif\if!xswitch               %.A................T

\newtoks\!axisLaBeL             %.A.................
\newtoks\!keywordtoks           %.A.................

\newwrite\!replotfile           %.............O.....

\newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. 
Replace NEW KEYWORD in the indicated response by the keyword that 
should have been specified.}    %.A.................

% The following commands assign alternate names to some of the 
% above registers.  "\!wlet"  is defined in  Hacks.
\!wlet\!!origin=\!xM                   %.A................T
\!wlet\!!unit=\!uplength               %.A................T
\!wlet\!Lresiduallength=\!dimenG       %.........U.........
\!wlet\!Rresiduallength=\!dimenF       %.........U.........
\!wlet\!axisLength=\!distacross        %.A................T
\!wlet\!axisend=\!ydiff                %.A................T
\!wlet\!axisstart=\!xdiff              %.A................T
\!wlet\!axisxlevel=\!arclength         %.A................T
\!wlet\!axisylevel=\!downlength        %.A................T
\!wlet\!beta=\!dimenE                  %...............Q...
\!wlet\!gamma=\!dimenF                 %...............Q...
\!wlet\!shadexorigin=\!plotxorigin     %.................S.
\!wlet\!shadeyorigin=\!plotyorigin     %.................S.
\!wlet\!ticklength=\!xS                %..................T
\!wlet\!ticklocation=\!xE              %..................T
\!wlet\!ticklocationincr=\!yE          %..................T
\!wlet\!tickwidth=\!yS                 %..................T
\!wlet\!totalleaderlength=\!dimenE     %.........U.........
\!wlet\!xone=\!xprime                  %....X..............
\!wlet\!xtwo=\!dxprime                 %....X..............
\!wlet\!ySsave=\!yM                    %...................
\!wlet\!ybB=\!yB                       %.................S.
\!wlet\!ybC=\!yC                       %.................S.
\!wlet\!ybE=\!yE                       %.................S.
\!wlet\!ybM=\!yM                       %.................S.
\!wlet\!ybS=\!yS                       %.................S.
\!wlet\!ybpos=\!yyloc                  %.................S.
\!wlet\!yone=\!yprime                  %....X..............
\!wlet\!ytB=\!xB                       %.................S.
\!wlet\!ytC=\!xC                       %.................S.
\!wlet\!ytE=\!downlength               %.................S.
\!wlet\!ytM=\!arclength                %.................S.
\!wlet\!ytS=\!distacross               %.................S.
\!wlet\!ytpos=\!xxloc                  %.................S.
\!wlet\!ytwo=\!dyprime                 %....X..............


% Initial values for registers
\!zpt=0pt                              % static
\!xunit=1pt
\!yunit=1pt
\!arearloc=\!xunit
\!areatloc=\!yunit
\!dshade=5pt
\!leaderlength=24in
\!tfs=256                              % static
\!wmax=5.3pt                           % static
\!wmin=2.7pt                           % static
\!xaxislength=\!xunit
\!xpivot=\!zpt
\!yaxislength=\!yunit 
\!ypivot=\!zpt
\plotsymbolspacing=.4pt
  \!dimenA=50pt \!fiftypt=\!dimenA     % static

\!rootten=3.162278pt                   % static
\!tenAa=8.690286pt                     % static  (A5)
\!tenAc=2.773839pt                     % static  (A3)
\!tenAe=2.543275pt                     % static  (A1)

% Initial values for control sequences
\def\!cosrotationangle{1}      %................R..
\def\!sinrotationangle{0}      %................R..
\def\!xpivotcoord{0}           %................R..
\def\!xref{0}                  %............P......
\def\!xshadesave{0}            %.................S.
\def\!ypivotcoord{0}           %................R..
\def\!yref{0}                  %............P......
\def\!yshadesave{0}            %.................S.
\def\!zero{0}                  %..................T

% Reset TeX to report allocations
\let\wlog=\!!!wlog
%  *************************************
%  ***  AREAS: Deals with plot areas ***
%  *************************************
%
%  ** User commands
%  **   \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
%  **      to TOP YCOORD
%  **   \axis BOTTOM-LEFT-TOP-RIGHT  [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
%  **      [LABEL {label}] [TICKS] /
%  **   \visibleaxes
%  **   \invisibleaxes
%  **   \plotheading {HEADING}
%  **   \grid {# of columns} {# of rows}
%  **   \normalgraphs 
  
%  **  \normalgraphs
%  **    Sets defaults for graph setup. See Subsection 3.4 of manual.
\def\normalgraphs{%
  \longticklength=.4\baselineskip
  \shortticklength=.25\baselineskip
  \tickstovaluesleading=.25\baselineskip
  \valuestolabelleading=.8\baselineskip
  \linethickness=.4pt
  \stackleading=.17\baselineskip
  \headingtoplotskip=1.5\baselineskip
  \visibleaxes
  \ticksout
  \nogridlines
  \unloggedticks}
%
% **  \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
% **    to TOP YCOORD
% **  Reserves space in PICBOX for a rectangular box with the indicated
% **   coordinates.  Must be specified before calls to  \axis, 
% **   \grid, \plotheading.
% **  See Subsection 3.1 of the manual.
\def\setplotarea x from #1 to #2, y from #3 to #4 {%
  \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin
  \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin
  \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin
  \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin
  \!initinboundscheck
  \!xaxislength=\!arearloc  \advance\!xaxislength -\!arealloc
  \!yaxislength=\!areatloc  \advance\!yaxislength -\!areabloc
  \!plotheadingoffset=\!zpt
  \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}}
     [bl] (\!arealloc,\!areabloc)}
%
% ** \visibleaxes, \invisibleaxes 
% ** Switches for setting visibility of subsequent axes.
% ** See Subsection 3.2 of the manual.
\def\visibleaxes{%
  \def\!axisvisibility{\!axisvisibletrue}}
\def\invisibleaxes{%
  \def\!axisvisibility{\!axisvisiblefalse}}
%
% ** The next few macros enable the user to fix up an erroneous keyword
% **   in the \axis command.
%  \newhelp is in ALLOCATIONS
%  \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. 
%  Replace NEW KEYWORD in the indicated response by the keyword that 
%  should have been specified.}

\def\!fixkeyword#1{%
  \errhelp=\!keywordhelp
  \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}}

%  \newtoks\!keywordtoks    In ALLOCATIONS.
\!keywordtoks={enter `i\fixkeyword}

\def\fixkeyword#1{%
  \!nextkeyword#1 }

% ** \axis BOTTOM-LEFT-TOP-RIGHT  [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
% **   [LABEL {label}] [TICKS] /
% ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be
% ** specified. Axis is drawn along the indicated edge of the current
% ** plot area, shifted if the SHIFTEDTO option is used, visible or
% ** invisible according the selected option, with an optional LABEL,
% ** and optional TICKS (see ticks.tex for the options avialabel with
% ** TICKS). The TICKS option must be the last one specified. The \axis
% ** MUST be terminated with a / followed by a space.
% ** See Subsection 3.2 of the manual for more information.

% ** The various options of the \axis command are processed by the
% ** \!nextkeyword macro defined below. For example, 
% ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'.
\def\axis {%
  \def\!nextkeyword##1 {%
    \expandafter\ifx\csname !axis##1\endcsname \relax
      \def\!next{\!fixkeyword{##1}}%
    \else
      \def\!next{\csname !axis##1\endcsname}%
    \fi
    \!next}%
  \!offset=\!zpt
  \!axisvisibility
  \!placeaxislabelfalse
  \!nextkeyword}

% ** This and the various macros that follow handle the keyword
% ** specifications on the \axis command
% ** See Subsection 3.2 of the manual.
\def\!axisbottom{%
  \!axisylevel=\!areabloc
  \def\!tickxsign{0}%
  \def\!tickysign{-}%
  \def\!axissetup{\!axisxsetup}%
  \def\!axislabeltbrl{t}%
  \!nextkeyword}

\def\!axistop{%
  \!axisylevel=\!areatloc
  \def\!tickxsign{0}%
  \def\!tickysign{+}%
  \def\!axissetup{\!axisxsetup}%
  \def\!axislabeltbrl{b}%
  \!nextkeyword}

\def\!axisleft{%
  \!axisxlevel=\!arealloc
  \def\!tickxsign{-}%
  \def\!tickysign{0}%
  \def\!axissetup{\!axisysetup}%
  \def\!axislabeltbrl{r}%
  \!nextkeyword}

\def\!axisright{%
  \!axisxlevel=\!arearloc
  \def\!tickxsign{+}%
  \def\!tickysign{0}%
  \def\!axissetup{\!axisysetup}%
  \def\!axislabeltbrl{l}%
  \!nextkeyword}

\def\!axisshiftedto#1=#2 {%
  \if 0\!tickxsign
    \!axisylevel=\!M{#2}\!yunit
    \advance\!axisylevel -\!yorigin
  \else
    \!axisxlevel=\!M{#2}\!xunit
    \advance\!axisxlevel -\!xorigin
  \fi
  \!nextkeyword}

\def\!axisvisible{%
  \!axisvisibletrue  
  \!nextkeyword}

\def\!axisinvisible{%
  \!axisvisiblefalse
  \!nextkeyword}

\def\!axislabel#1 {%
  \!axisLaBeL={#1}%
  \!placeaxislabeltrue
  \!nextkeyword}

\expandafter\def\csname !axis/\endcsname{%
  \!axissetup % This could done already by "ticks"; if so, now \relax
  \if!placeaxislabel
    \!placeaxislabel
  \fi
  \if +\!tickysign %                 ** (A "top" axis)
    \!dimenA=\!axisylevel
    \advance\!dimenA \!offset %      ** dimA = top of the axis structure
    \advance\!dimenA -\!areatloc %   ** dimA = excess over the plot area
    \ifdim \!dimenA>\!plotheadingoffset
      \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area
    \fi
  \fi}

% ** \grid {c} {r} 
% ** Partitions the plot area into c columns and r rows; see Subsection 3.3
% ** of the manual.
% ** (Other grid patterns can be drawn with the TICKS option of the \axis 
% ** command.
\def\grid #1 #2 {%
  \!countA=#1\advance\!countA 1
  \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} /
  \!countA=#2\advance\!countA 1
  \axis left   invisible ticks length <\!zpt> andacross quantity {\!countA} / }

% ** \plotheading{HEADING}
% ** Places HEADING centered above the top of the plotarea (and above
% ** any top axis ticks marks, tick labels, and axis label); see
% ** Subsection 3.3 of the manual.
\def\plotheading#1 {%
  \advance\!plotheadingoffset \headingtoplotskip
  \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset>
    (\!arealloc,\!areatloc)}

% ** From here on, the routines are internal.
\def\!axisxsetup{%
  \!axisxlevel=\!arealloc
  \!axisstart=\!arealloc
  \!axisend=\!arearloc
  \!axisLength=\!xaxislength
  \!!origin=\!xorigin
  \!!unit=\!xunit
  \!xswitchtrue
  \if!axisvisible 
    \!makeaxis
  \fi}

\def\!axisysetup{%
  \!axisylevel=\!areabloc
  \!axisstart=\!areabloc
  \!axisend=\!areatloc
  \!axisLength=\!yaxislength
  \!!origin=\!yorigin
  \!!unit=\!yunit
  \!xswitchfalse
  \if!axisvisible
    \!makeaxis
  \fi}

\def\!makeaxis{%
  \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis)
    \beginpicture
      \!setdimenmode
      \setcoordinatesystem point at {\!zpt} {\!zpt}   
      \putrule from {\!zpt} {\!zpt} to
        {\!tickysign\!tickysign\!axisLength} 
        {\!tickxsign\!tickxsign\!axisLength}
    \endpicturesave <\!Xsave,\!Ysave>}%
    \wd\!boxA=\!zpt
    \!placetick\!axisstart}

\def\!placeaxislabel{%
  \advance\!offset \valuestolabelleading
  \if!xswitch
    \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
      <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel)
    \advance\!offset \!dp  % ** advance offset by the "tallness"
    \advance\!offset \!ht  % ** of the label
  \else
    \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
      <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel)
  \fi
  \!axisLaBeL={}}


% *******************************
% *** ARROWS  (Draws arrows)  ***
% *******************************
%
% ** User commands
% **  \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
% **    [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
% **  \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO

% ** \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
% **    [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
% ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO).  The arrow head
% ** is constructed two quadratic arcs, which extend back a distance
% ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft.
% ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD
% ** LENGTH apart, while half-way back they are a distance MID FRACTION*
% ** ARROW HEAD LENGTH apart. <XSHIFT,YSHIFT> is optional, and has
% ** its usual interpreation. See Subsection 5.4 of the manual.

\def\arrow <#1> [#2,#3]{%
  \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }}

\def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {%
%
% ** convert to dimensions
  \!xloc=\!M{#8}\!xunit   
  \!yloc=\!M{#9}\!yunit
  \!dxpos=\!xloc  \!dimenA=\!M{#6}\!xunit  \advance \!dxpos -\!dimenA
  \!dypos=\!yloc  \!dimenA=\!M{#7}\!yunit  \advance \!dypos -\!dimenA
  \let\!MAH=\!M%                         ** save current c/d mode
  \!setdimenmode%                        ** go into dimension mode
%
  \!xshift=#4\relax  \!yshift=#5\relax%  ** pick up shift
  \!reverserotateonly\!xshift\!yshift%   ** back rotate shift
  \advance\!xshift\!xloc  \advance\!yshift\!yloc
%
% **  draw shaft of arrow
  \!xS=-\!dxpos  \advance\!xS\!xshift
  \!yS=-\!dypos  \advance\!yS\!yshift
  \!start (\!xS,\!yS)
  \!ljoin (\!xshift,\!yshift)
%
% ** find 32*cosine and 32*sine of angle of rotation
  \!Pythag\!dxpos\!dypos\!arclength
  \!divide\!dxpos\!arclength\!dxpos  
  \!dxpos=32\!dxpos  \!removept\!dxpos\!!cos
  \!divide\!dypos\!arclength\!dypos  
  \!dypos=32\!dypos  \!removept\!dypos\!!sin
% 
% ** construct arrowhead
  \!halfhead{#1}{#2}{#3}%                ** draw half of arrow head
  \!halfhead{#1}{-#2}{-#3}%              ** draw other half
%
  \let\!M=\!MAH%                         ** restore old c/d mode
  \ignorespaces}
%
% ** draw half of arrow head
  \def\!halfhead#1#2#3{%
    \!dimenC=-#1%                
    \divide \!dimenC 2 %                 ** half way back
    \!dimenD=#2\!dimenC%                 ** half the mid width
    \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM)
    \!dimenC=-#1%                        ** all the way back
    \!dimenD=#3\!dimenC
    \!dimenD=.5\!dimenD%                 ** half the full width
    \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE)
    \!start (\!xshift,\!yshift)
    \advance\!xM\!xshift  \advance\!yM\!yshift
    \advance\!xE\!xshift  \advance\!yE\!yshift
    \!qjoin (\!xM,\!yM) (\!xE,\!yE) 
    \ignorespaces}


% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO
% **   Makes things like <--- text --->, using arrow heads from TeX's fonts.
% **   See Subsection 5.4 of the manual.
\def\betweenarrows #1#2 from #3 #4 to #5 #6 {%
  \!xloc=\!M{#3}\!xunit  \!xxloc=\!M{#5}\!xunit%   
  \!yloc=\!M{#4}\!yunit  \!yyloc=\!M{#6}\!yunit%           
  \!dxpos=\!xxloc  \advance\!dxpos by -\!xloc
  \!dypos=\!yyloc  \advance\!dypos by -\!yloc
  \advance\!xloc .5\!dxpos
  \advance\!yloc .5\!dypos
%
  \let\!MBA=\!M%           ** save current coord\dimen mode
  \!setdimenmode%          ** express locations in dimens
  \ifdim\!dypos=\!zpt
    \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi
    \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc}
  \else
    \ifdim\!dxpos=\!zpt
      \ifdim\!dypos<\!zpt \!dypos=-\!dypos \fi
      \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc}
    \fi
  \fi
  \let\!M=\!MBA%           ** restore previous c/d mode
  \ignorespaces}

% ** Subroutine for left-right between arrows 
\def\!lrarrows#1#2{% #1=width, #2=text
  {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}%
   \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB
   \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE
   \hbox to #1{$\mathord\leftarrow\mkern-6mu
     \cleaders\copy\!boxA\hfil
     \mkern-6mu\mathord-$%
     \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em
     $\mathord-\mkern-6mu
     \cleaders\copy\!boxA\hfil
     \mkern-6mu\mathord\rightarrow$}}}

% ** Subroutine for up-down between arrows 
\def\!udarrows#1#2{% #1=width, #2=text
  {\setbox\!boxB=\hbox{#2}%
   \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}%
   \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2
   \vbox to #1{\offinterlineskip
      \vskip .05556\!dimenE
      \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE
      \cleaders\copy\!boxA\vfil
      \vskip-\!dimenE\copy\!boxA
      \vskip\!dimenE\copy\!boxB\vskip.4em
      \copy\!boxA\vskip-\!dimenE
      \cleaders\copy\!boxA\vfil
      \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss}
      \vskip .05556\!dimenE}}}


% ***************************
% *** BARS  (Draws bars)  ***
% ***************************
%
% ** User commands:
% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
% **   to XEND YEND
% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
% **   [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
% **   [endlabels  ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]


% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
% **   to XEND YEND
% ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between
% **   (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle
% **   is determined by those two plot positions; its other
% **   dimension "breadth" is specified by the dimension BREADTH.
% ** See Subsection 4.2 of the manual.
\def\putbar#1breadth <#2> from #3 #4 to #5 #6 {%
  \!xloc=\!M{#3}\!xunit  \!xxloc=\!M{#5}\!xunit%   
  \!yloc=\!M{#4}\!yunit  \!yyloc=\!M{#6}\!yunit%           
  \!dypos=\!yyloc  \advance\!dypos by -\!yloc
  \!dimenI=#2  
% 
  \ifdim \!dimenI=\!zpt %            ** If 0 breadth
    \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line
  \else %                            ** Else, put in a rectangle
    \let\!MBar=\!M%                  ** save current c/d mode
    \!setdimenmode %                 ** go into dimension mode
    \divide\!dimenI 2
    \ifdim \!dypos=\!zpt             
      \advance \!yloc -\!dimenI %    ** Equal y coordinates
      \advance \!yyloc \!dimenI
    \else
      \advance \!xloc -\!dimenI %    ** Equal x coordinates
      \advance \!xxloc \!dimenI
    \fi
    \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc}
    \let\!M=\!MBar %                 ** restore c/d mode
  \fi
  \ignorespaces}


% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
% **   [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
% **   [endlabels  ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]
% ** This command puts PiCTeX into the bar graph drawing mode described
% **   in Subsection 4.4 of the manual.
\def\setbars#1breadth <#2> baseline at #3 = #4 {%
  \edef\!barshift{#1}%
  \edef\!barbreadth{#2}%
  \edef\!barorientation{#3}%
  \edef\!barbaseline{#4}%
  \def\!bardobaselabel{\!bardoendlabel}%
  \def\!bardoendlabel{\!barfinish}%
  \let\!drawcurve=\!barcurve
  \!setbars}
\def\!setbars{%
  \futurelet\!nextchar\!!setbars}
\def\!!setbars{%
  \if b\!nextchar
    \def\!!!setbars{\!setbarsbget}%
  \else 
    \if e\!nextchar
      \def\!!!setbars{\!setbarseget}%
    \else
      \def\!!!setbars{\relax}%
    \fi
  \fi
  \!!!setbars}
\def\!setbarsbget baselabels (#1) {%
  \def\!barbaselabelorientation{#1}%
  \def\!bardobaselabel{\!!bardobaselabel}%
  \!setbars}
\def\!setbarseget endlabels (#1) {%
  \edef\!barendlabelorientation{#1}%
  \def\!bardoendlabel{\!!bardoendlabel}%
  \!setbars}

% ** \!barcurve
% ** Draws a bargraph with preset values of barshift, barbreadth,
% ** barorientation (x or y) and barbaseline (coordinate)
\def\!barcurve #1 #2 {%
  \if y\!barorientation
    \def\!basexarg{#1}%
    \def\!baseyarg{\!barbaseline}%
  \else
    \def\!basexarg{\!barbaseline}%
    \def\!baseyarg{#2}%
  \fi
  \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg}
    {\!baseyarg} to {#1} {#2}
  \def\!endxarg{#1}%
  \def\!endyarg{#2}%
  \!bardobaselabel}

\def\!!bardobaselabel "#1" {%
  \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg}
  \!bardoendlabel}
 
\def\!!bardoendlabel "#1" {%
  \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg}
  \!barfinish}

\def\!barfinish{%
  \!ifnextchar/{\!finish}{\!barcurve}}
 

% ********************************
% *** BOXES (Draws rectangles) ***
% ********************************
%
% ** User commands:
% **   \putrectangle [<XSHIFT,YSHIFT>] corners at  XCOORD1 YCOORD1
% **     and  XCOORD2 YCOORD2 
% **   \shaderectangleson
% **   \shaderectanglesoff
% **   \frame [<SEPARATION>] {TEXT}
% **   \rectangle <WIDTH> <HEIGHT>
%
%
% **  \putrectangle [<XSHIFT,YSHIFT>] corners at XCOORD1 YCOORD1 
% **    and  XCOORD2 YCOORD2 
% **  Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2)
% **  Lines have thickness \linethickness, and overlap at the corners.
% **  The optional field  <XSHIFT,YSHIFT>  functions as with a \put command.
% **  See Subsection 4.2 of the manual.
\def\putrectangle{%
  \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }}
\def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {%
%
% ** get locations
  \!xone=\!M{#3}\!xunit  \!xtwo=\!M{#5}\!xunit%   
  \!yone=\!M{#4}\!yunit  \!ytwo=\!M{#6}\!yunit%           
  \ifdim \!xtwo<\!xone
    \!dimenI=\!xone  \!xone=\!xtwo  \!xtwo=\!dimenI
  \fi
  \ifdim \!ytwo<\!yone
    \!dimenI=\!yone  \!yone=\!ytwo  \!ytwo=\!dimenI
  \fi
  \!dimenI=#1\relax  \advance\!xone\!dimenI  \advance\!xtwo\!dimenI
  \!dimenI=#2\relax  \advance\!yone\!dimenI  \advance\!ytwo\!dimenI
  \let\!MRect=\!M%                  ** save current coord/dimen mode
  \!setdimenmode
%
% ** shade rectangle if appropriate
  \!shaderectangle
%
% ** draw horizontal edges
  \!dimenI=.5\linethickness
  \advance \!xone  -\!dimenI%       ** adjust x-location to overlap corners
  \advance \!xtwo   \!dimenI%       ** ditto
  \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone} 
  \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo} 
%
% ** draw vertical edges
  \advance \!xone   \!dimenI%       ** restore original x-values
  \advance \!xtwo  -\!dimenI% 
  \advance \!yone  -\!dimenI%       ** adjust y-location to overlap corners
  \advance \!ytwo   \!dimenI%       ** ditto
  \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo} 
  \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo} 
%
  \let\!M=\!MRect%                  ** restore coord/dimen mode
  \ignorespaces}
 
% ** \shaderectangleson 
% **   Subsequent rectangles will be shaded according to 
% **   the current shading pattern.  Affects \putrectangle, \putbar,
% **   \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual.
\def\shaderectangleson{%     
  \def\!shaderectangle{\!!shaderectangle}%
  \ignorespaces}
% ** \shaderectanglesoff 
% **    Suppresses  \shaderectangleson.  The default.
\def\shaderectanglesoff{%
  \def\!shaderectangle{}%
  \ignorespaces}

\shaderectanglesoff
 
% ** The following internal routine shades the current rectangle, when
% **   \!shaderectangle = \!!shaderectangle . 
\def\!!shaderectangle{%
  \!dimenA=\!xtwo  \advance \!dimenA -\!xone
  \!dimenB=\!ytwo  \advance \!dimenB -\!yone
  \ifdim \!dimenA<\!dimenB
    \!startvshade (\!xone,\!yone,\!ytwo)
    \!lshade      (\!xtwo,\!yone,\!ytwo)
  \else
    \!starthshade (\!yone,\!xone,\!xtwo)
    \!lshade      (\!ytwo,\!xone,\!xtwo)
  \fi
  \ignorespaces}
  
% ** \frame [<SEPARATION>] {TEXT}
% ** Draws a frame of thickness linethickness about the box enclosing
% **   TEXT; the frame is separated from the box by a distance of
% **   SEPARATION.  The result is an hbox with the same baseline as TEXT.
% **   If <SEPARATION> is omitted, you get the effect of <0pt>.
% ** See Subsection 4.2 of the manual.
\def\frame{%
  \!ifnextchar<{\!frame}{\!frame<\!zpt> }}
\long\def\!frame<#1> #2{%
  \beginpicture
    \setcoordinatesystem units <1pt,1pt> point at 0 0 
    \put {#2} [Bl] at 0 0 
    \!dimenA=#1\relax
    \!dimenB=\!wd \advance \!dimenB \!dimenA
    \!dimenC=\!ht \advance \!dimenC \!dimenA
    \!dimenD=\!dp \advance \!dimenD \!dimenA
    \let\!MFr=\!M
    \!setdimenmode
    \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC}
    \!setcoordmode
    \let\!M=\!MFr
  \endpicture
  \ignorespaces}
 
% ** \rectangle <WIDTH> <HEIGHT>
% ** Constructs a rectangle of width WIDTH and heigth HEIGHT. 
% ** See Subsection 4.2 of the manual.
\def\rectangle <#1> <#2> {%
  \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}}


% *********************************************
% ***  CURVES  (Upper level \plot commands) ***
% *********************************************
%
% ** User commands
% **   \plot  DATA  /
% **   \plot  "FILE NAME"
% **   \setquadratic
% **   \setlinear
% **   \sethistograms
% **   \vshade  ...
% **   \hshade  ...

% \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear
% or piecewise quadratic curves, depending on the setting of \!drawcurve.
% See Subsections 4.3-4.5, 5.1, 5.2 of the manual.
\def\plot{%
  \!ifnextchar"{\!plotfromfile}{\!drawcurve}}
\def\!plotfromfile"#1"{%
  \expandafter\!drawcurve \input #1 /}

% Command to set piecewise quadratic mode
% See Subsections 5.1, 7.3, and 7.4 of the manual.
\def\setquadratic{%
  \let\!drawcurve=\!qcurve
  \let\!!Shade=\!!qShade
  \let\!!!Shade=\!!!qShade}

% Command to set piecewise linear mode
% See Subsections 5.1, 7.3, and 7.4 of the manual.
\def\setlinear{%
  \let\!drawcurve=\!lcurve
  \let\!!Shade=\!!lShade
  \let\!!!Shade=\!!!lShade}

% Command to set histogram mode
% See Subsection 4.3 of the manual.
\def\sethistograms{%
  \let\!drawcurve=\!hcurve}

% Commands to cycle through list of coordinates in piecewise quadratic 
% interpolation mode
\def\!qcurve #1 #2 {%
  \!start (#1,#2)
  \!Qjoin}
\def\!Qjoin#1 #2 #3 #4 {%
  \!qjoin (#1,#2) (#3,#4)             % \!qjoin  is defined in QUADRATIC
  \!ifnextchar/{\!finish}{\!Qjoin}}

% Commands to cycle through list of coordinates in piecewise linear 
% interpolation mode
\def\!lcurve #1 #2 {%
  \!start (#1,#2)
  \!Ljoin}
\def\!Ljoin#1 #2 {%
  \!ljoin (#1,#2)                    % \!ljoin  is defined in LINEAR
  \!ifnextchar/{\!finish}{\!Ljoin}}

\def\!finish/{\ignorespaces}

% Command to cycle through list of coordinates in histogram mode
\def\!hcurve #1 #2 {%
  \edef\!hxS{#1}%
  \edef\!hyS{#2}%
  \!hjoin}
\def\!hjoin#1 #2 {%
  \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2}
  \edef\!hxS{#1}%
  \!ifnextchar/{\!finish}{\!hjoin}}


% \vshade: See Subsection 7.3 of the manual.
\def\vshade #1 #2 #3 {%
  \!startvshade (#1,#2,#3)
  \!Shadewhat}

% \hshade: See Subsection 7.4 of the manual.
\def\hshade #1 #2 #3 {%
  \!starthshade (#1,#2,#3)
  \!Shadewhat}

% Commands to cycle through coordinates and optional "edge effect"
% fields while shading.
\def\!Shadewhat{%
  \futurelet\!nextchar\!Shade}
\def\!Shade{%
  \if <\!nextchar
    \def\!nextShade{\!!Shade}%
  \else
    \if /\!nextchar
      \def\!nextShade{\!finish}%
    \else
      \def\!nextShade{\!!!Shade}%
    \fi
  \fi
  \!nextShade}
\def\!!lShade<#1> #2 #3 #4 {%
  \!lshade <#1> (#2,#3,#4)                 % \!lshade is defined in SHADING
  \!Shadewhat}
\def\!!!lShade#1 #2 #3 {%
  \!lshade (#1,#2,#3)
  \!Shadewhat} 
\def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {%
  \!qshade <#1> (#2,#3,#4) (#5,#6,#7)      % \!qshade is defined in SHADING
  \!Shadewhat}
\def\!!!qShade#1 #2 #3 #4 #5 #6 {%
  \!qshade (#1,#2,#3) (#4,#5,#6)
  \!Shadewhat} 

% ** Set default interpolation mode
\setlinear


%  ********************************************
%  *** DASHPATTERNS (Sets up dash patterns) ***
%  ********************************************

%  **  User commands:
%  **    \setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
%  **    \setdots <INTRADOT_DISTANCE>
%  **    \setdotsnear <INTRADOT_DISTANCE> for <ARC LENGTH>
%  **    \setdashes <DASH/SKIP_DISTANCE>
%  **    \setdashesnear <DASH/SKIP_DISTANCE> for <ARC LENGTH>
%  **    \setsolid
%  **    \findlength {CURVE CMDS}
 
%  **  Internal commands:
%  **    \!dashingon
%  **    \!dashingoff
 
%  **  Dash patterns are specified by a balanced token list whose complete
%  **    expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces
%  **    an arc of length DIMEN1, a skip of length DIMEN2, an arc of length
%  **    DIMEN3, a skip of length DIMEN4, ... .  Any number of DIMEN values may
%  **    be given. The pattern is repeated as many times (perhaps fractional)
%  **    as necessary to draw the curve. 
%  **  A dash pattern remains in effect until it is overridden by a call to
%  **    \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes, 
%  **    \setdashesnear ... , or \setsolid.
%  **  Solid lines are the default.
 
 
%  **  \def\setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
%  **  The following routine converts a balanced list of tokens whose
%  **  complete expansion has the form  DIMEN1,DIMEN2, ... , DIMENk  into 
%  **  three list macros that are used in drawing dashed rules and curves:
%  **    !Flist:   \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ...
%  **    !Blist:   ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1}
%  **    !UDlist:  \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...;
%  **  calculates \!leaderlength := DIMEN1 + ... + DIMENk; and
%  **  sets the curve drawing routines to dash mode.
%  **  Those lists are used by the curve drawing routines.
%  **  Dimenj ... may be given as an explicit dimension (e.g., 5pt), or
%  **  as an expression involving a dimension register (e.g., -2.5\dimen0).
%  **  See Subsection 6.2 of the manual
\def\setdashpattern <#1>{%
  \def\!Flist{}\def\!Blist{}\def\!UDlist{}%
  \!countA=0
  \!ecfor\!item:=#1\do{%
    \!dimenA=\!item\relax
    \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist%
    \advance\!countA  1
    \ifodd\!countA
      \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist%
      \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist%
    \else 
      \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist%
      \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist%
    \fi}%
  \!leaderlength=\!zpt
  \def\!Rule##1{\advance\!leaderlength  ##1}%
  \def\!Skip##1{\advance\!leaderlength  ##1}%
  \!Flist%
  \ifdim\!leaderlength>\!zpt 
  \else
    \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces
    \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces
    \!leaderlength=24in
  \fi
  \!dashingon}   
 
 
%  **  \!dashingon  -- puts the curve drawing routines into dash mode
%  **  \!dashingoff -- puts the curve drawing routines into solid mode
%  **  These are internal commands, invoked by \setdashpattern and \setsolid
\def\!dashingon{%
  \def\!advancedashing{\!!advancedashing}%
  \def\!drawlinearsegment{\!lineardashed}%
  \def\!puthline{\!putdashedhline}%
  \def\!putvline{\!putdashedvline}%
%  \def\!putsline{\!putdashedsline}%
  \ignorespaces}% 
\def\!dashingoff{%
  \def\!advancedashing{\relax}%
  \def\!drawlinearsegment{\!linearsolid}%
  \def\!puthline{\!putsolidhline}%
  \def\!putvline{\!putsolidvline}%
%  \def\!putsline{\!putsolidsline}%
  \ignorespaces}
 
 
%  **  \setdots <LENGTH>  --  sets up a dot/skip pattern where dot (actually
%  **    the current plotsymbol) is plunked down once for every LENGTH 
%  **    traveled along the curve.  LENGTH defaults to 5pt.
%  **    See Subsection 6.1 of the manual.
\def\setdots{%
  \!ifnextchar<{\!setdots}{\!setdots<5pt>}}
\def\!setdots<#1>{%
  \!dimenB=#1\advance\!dimenB -\plotsymbolspacing
  \ifdim\!dimenB<\!zpt
    \!dimenB=\!zpt
  \fi
\setdashpattern <\plotsymbolspacing,\!dimenB>}
 
% ** \setdotsnear <LENGTH> for <ARC LENGTH>
% ** sets up a dot pattern where the dots are approximately LENGTH apart,
% ** the total length of the pattern is ARC LENGTH, and the pattern
% ** begins and ends with a dot. See Subsection 6.3 of the manual.
\def\setdotsnear <#1> for <#2>{%
  \!dimenB=#2\relax  \advance\!dimenB -.05pt  
  \!dimenC=#1\relax  \!countA=\!dimenC 
  \!dimenD=\!dimenB  \advance\!dimenD .5\!dimenC  \!countB=\!dimenD
  \divide \!countB  \!countA
  \ifnum 1>\!countB 
    \!countB=1
  \fi
  \divide\!dimenB  \!countB
  \setdots <\!dimenB>}
 
%  **  \setdashes <LENGTH>  --  sets up a dash/skip pattern where the dash
%  **    and the skip are each of length LENGTH (the dash is formed by
%  **    plunking down the current plotsymbol over an arc of length LENGTH
%  **    and so may actually be longer than LENGTH.  LENGTH defaults to 5pt.
%  **    See Subsection 6.1 of the manual.
\def\setdashes{%
  \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}}
\def\!setdashes<#1>{\setdashpattern <#1,#1>}
 
% ** \setdashesnear ...
% ** Like \setdotsnear; the pattern begins and ends with a dash.
% ** See Subsection 6.3 of the manual.
\def\setdashesnear <#1> for <#2>{%
  \!dimenB=#2\relax  
  \!dimenC=#1\relax  \!countA=\!dimenC 
  \!dimenD=\!dimenB  \advance\!dimenD .5\!dimenC  \!countB=\!dimenD
  \divide \!countB  \!countA
  \ifodd \!countB 
  \else 
    \advance \!countB  1
  \fi
  \divide\!dimenB  \!countB
  \setdashes <\!dimenB>}
 
%  **  \setsolid  --  puts the curve drawing routines in "solid line" mode,
%  **    the default mode.  See Subsection 6.1 of the manual.
\def\setsolid{%
  \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}%  
  \def\!UDlist{\\{24in}\\{\!zpt}}%
  \!dashingoff}  
\setsolid

%  **  \findlength {CURVE CMDS}
%  **  PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising
%  **  CURVE CMDS without plotting anything, but stashes the length
%  **  of the phantom curve away in \totalarclength.
%  **  See Subsection 6.3 of the manual.
\def\findlength#1{%
  \begingroup
    \setdashpattern <0pt, \maxdimen>
    \setplotsymbol ({})  
    \dontsavelinesandcurves
    #1%
  \endgroup
  \ignorespaces}


% *************************************************************
% *** DIVISION  (Does long division of dimension registers) ***
% *************************************************************
 
% ** User command:
% **   \Divide {DIVIDEND} by {DIVISOR} forming {RESULT}
  
% ** Internal command
% **   \!divide{DIVIDEND}{DIVISOR}{RESULT}
 
% **  \!divide DIVIDEND [by] DIVISOR [to get] ANSWER
% **  Divides the dimension DIVIDEND by the dimension DIVISOR, placing the 
% **  quotient in the dimension register ANSWER.  Values are understood to 
% **  be in points.  E.g.  12.5pt/1.4pt=8.92857pt.
% **  Quotient is accurate to 1/65536pt=2**[-16]pt
% **  |DIVISOR| should be < 2048pt (about 28 inches).
\def\!divide#1#2#3{%
  \!dimenB=#1%                      **  dimB  holds current remainder (r)
  \!dimenC=#2%                      **  dimC  holds divisor (d)
  \!dimenD=\!dimenB%                **  dimD  holds quotient q=r/d for this 
  \divide \!dimenD \!dimenC%        **    step, in units of scaled pts
  \!dimenA=\!dimenD%                **  dimA  eventually holds answer (a)
  \multiply\!dimenD \!dimenC%       **  r <-- r - dq
  \advance\!dimenB -\!dimenD%       **  First step complete. Have integer part
%                                   **  of a, and corresponding remainder.
  \!dimenD=\!dimenC%                **  Temporarily use dimD to hold |d|
    \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD 
  \fi
  \ifdim\!dimenD<64pt%              **  Branch on the magnitude of |d|
    \!divstep[\!tfs]\!divstep[\!tfs]%
  \else 
    \!!divide
  \fi
  #3=\!dimenA\ignorespaces}

% **  The following code handles divisors  d  with 
% **    (1)  .88in =  64pt <= d <  256pt =  3.54in
% **    (2) 3.54in = 256pt <= d < 2048pt = 28.34in
% **  Anything bigger than that may result in an overflow condition.
% **  For our purposes, we should never even see case (2).
\def\!!divide{%
  \ifdim\!dimenD<256pt
    \!divstep[64]\!divstep[32]\!divstep[32]%
  \else 
    \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]%
    \!dimenA=2\!dimenA
  \fi}
 
 
% **  The following macro does the real long division work.
\def\!divstep[#1]{%                 **  #1 = "B"
  \!dimenB=#1\!dimenB%              **  r <-- B*r
  \!dimenD=\!dimenB%                **  dimD  holds quotient q=r/d for this 
    \divide \!dimenD by \!dimenC%   **    step, in units of scaled pts
  \!dimenA=#1\!dimenA%              **  a <-- B*a + q
    \advance\!dimenA by \!dimenD%
  \multiply\!dimenD by \!dimenC%    **  r <-- r - dq
    \advance\!dimenB by -\!dimenD}
 
% **  \Divide:  See Subsection 9.3 of the manual.
\def\Divide <#1> by <#2> forming <#3> {%
  \!divide{#1}{#2}{#3}}


% *********************************************
% *** ELLIPSES (Draws ellipses and circles) ***
% *********************************************
 
% ** User commands
% **   \ellipticalarc  axes ratio A:B  DEGREES degrees from XSTART YSTART 
% **      center at XCENTER YCENTER 
% **   \circulararc DEGREES degrees from XSTART YSTART 
% **      center at XCENTER YCENTER 
 
% ** Internal command
% **   \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS}
 
 
% **   \ellipticalarc  axes ratio A:B  DEGREES degrees from XSTART YSTART 
% **      center at XCENTER YCENTER 
% **    Draws a elliptical arc starting at the coordinate point (XSTART,YSTART).
% **    The center of the ellipse of which the arc is a segment is at 
% **      (XCENTER,YCENTER).
% **    The arc extends through an angle of DEGREES degrees (may be + or -).
% **    A:B is the ratio of the length of the xaxis to the length of
% **      the yaxis of the ellipse
% **    Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2}
% **      must be < 512pt (about 7in).
% **    Doesn't modify the dimensions (ht, dp, wd) of the PiCture under
% **      construction.
 
% ** \circulararc  --  See Subsection 5.3 of the manual.
\def\circulararc{%
  \ellipticalarc axes ratio 1:1 }

% ** \ellipticalarc  --  See Subsection 5.3 of the manual.
\def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {%
  \!angle=#3pt\relax%                    ** get angle
  \ifdim\!angle>\!zpt 
    \def\!sign{}%                        ** counterclockwise
  \else 
    \def\!sign{-}\!angle=-\!angle%       ** clockwise
  \fi
  \!xxloc=\!M{#6}\!xunit%                ** convert CENTER to dimension
  \!yyloc=\!M{#7}\!yunit     
  \!xxS=\!M{#4}\!xunit%                  ** get STARTing point on rim of ellipse
  \!yyS=\!M{#5}\!yunit
  \advance\!xxS -\!xxloc%                ** make center of ellipse (0,0)
  \advance\!yyS -\!yyloc
  \!divide\!xxS{#1pt}\!xxS %             ** scale point on ellipse to point on 
  \!divide\!yyS{#2pt}\!yyS %                 corresponding circle
%
  \let\!MC=\!M%                          ** save current c/d mode
  \!setdimenmode%                        ** go into dimension mode
%
  \!xS=#1\!xxS  \advance\!xS\!xxloc
  \!yS=#2\!yyS  \advance\!yS\!yyloc
  \!start (\!xS,\!yS)%
  \!loop\ifdim\!angle>14.9999pt%         ** draw in major portion of ellipse 
    \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM) 
    \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE)
    \!xM=#1\!xxM  \advance\!xM\!xxloc  \!yM=#2\!yyM  \advance\!yM\!yyloc
    \!xE=#1\!xxE  \advance\!xE\!xxloc  \!yE=#2\!yyE  \advance\!yE\!yyloc
    \!qjoin (\!xM,\!yM) (\!xE,\!yE)
    \!xxS=\!xxE  \!yyS=\!yyE 
    \advance \!angle -15pt
  \repeat
  \ifdim\!angle>\!zpt%                   ** complete remaining arc, if any
    \!angle=100.53096\!angle%            ** convert angle to radians, divide
    \divide \!angle 360 %                **   by 2, and multiply by 32
    \!sinandcos\!angle\!!sin\!!cos%      ** get 32*sin & 32*cos
    \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM) 
    \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE)
    \!xM=#1\!xxM  \advance\!xM\!xxloc  \!yM=#2\!yyM  \advance\!yM\!yyloc
    \!xE=#1\!xxE  \advance\!xE\!xxloc  \!yE=#2\!yyE  \advance\!yE\!yyloc
    \!qjoin (\!xM,\!yM) (\!xE,\!yE)
  \fi
%
  \let\!M=\!MC%                          ** restore c/d mode
  \ignorespaces}%                        **   if appropriate
 
 
%  ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG)
%  ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to
%  ** (XXREG,YYREG).  Uses \!dimenA & \!dimenB as scratch registers.
\def\!rotate(#1,#2)by(#3,#4)to(#5,#6){% 
  \!dimenA=#3#1\advance \!dimenA -#4#2%   ** Rcos(x+t)=Rcosx*cost - Rsinx*sint
  \!dimenB=#3#2\advance \!dimenB  #4#1%   ** Rsin(x+t)=Rsinx*cost + Rcosx*sint
  \divide \!dimenA 32  \divide \!dimenB 32 
  #5=\!dimenA  #6=\!dimenB
  \ignorespaces}
\def\!sin{4.17684}%                       ** 32*sin(pi/24) (pi/24=7.5deg)
\def\!cos{31.72624}%                      ** 32*cos(pi/24)
 
 
%  ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS}
%  **   Computes the 32*sine and 32*cosine of a small ANGLE expressed in 
%  **   radians/32 and puts these values in the replacement texts of 
%  **   \SINCS and \COSCS
\def\!sinandcos#1#2#3{%
 \!dimenD=#1%                **  angle is expressed in radians/32: 1pt = 1/32rad
 \!dimenA=\!dimenD%          **  dimA will eventually contain 32sin(angle)in pts
 \!dimenB=32pt%              **  dimB will eventually contain 32cos(angle)in pts
 \!removept\!dimenD\!value%  **  get value of 32*angle, without "pt"
 \!dimenC=\!dimenD%          **  holds 32*angle**i/i! in pts
 \!dimenC=\!value\!dimenC \divide\!dimenC by 64 %   ** now 32*angle**2/2
 \advance\!dimenB by -\!dimenC%                     ** 32-32*angle**2/2
 \!dimenC=\!value\!dimenC \divide\!dimenC by 96 %   ** now 32*angle**3/3!
 \advance\!dimenA by -\!dimenC%                     ** now 32*(angle-angle**3/6)
 \!dimenC=\!value\!dimenC \divide\!dimenC by 128 %  ** now 32*angle**4/4!
 \advance\!dimenB by \!dimenC%
 \!removept\!dimenA#2%                              ** set 32*sin(angle)
 \!removept\!dimenB#3%                              ** set 32*cos(angle)
 \ignorespaces}


% *****************************************************************
% ***  RULES  (Draws rules, i.e., horizontal & vertical lines)  ***
% *****************************************************************

% **  User command:
% **    \putrule [<XDIMEN,YDIMEN>] from  XCOORD1 YCOORD1 
% **      to  XCOORD2 YCOORD2 

% **  Internal commands:
% **    \!puthline [<XDIMEN,YDIMEN>]    (h = horizontal)
% **      Set by dashpat to either: \!putsolidhline  or \!putdashedhline
% **    \!putvline [<XDIMEN,YDIMEN>]    (v = vertical)
% **      Either:  \!putsolidvline  or  \!putdashedvline


% **  \putrule [<XDIMEN,YDIMEN>] from XCOORD1 YCOORD1
% **    to XCOORD2 YCOORD2
% **  Draws a rule -- dashed or solid depending on the current dash pattern --
% **    from (X1,Y1) to (X2,Y2).  Uses TEK's  \hrule & \vrule & \leaders  
% **    constructions to handle horizontal & vertical lines efficiently both
% **    in terms of execution time and space in the DVI file.  
% **  See Subsection 4.1 of the manual.
\def\putrule#1from #2 #3 to #4 #5 {%
  \!xloc=\!M{#2}\!xunit  \!xxloc=\!M{#4}\!xunit%   
  \!yloc=\!M{#3}\!yunit  \!yyloc=\!M{#5}\!yunit%           
  \!dxpos=\!xxloc  \advance\!dxpos by -\!xloc
  \!dypos=\!yyloc  \advance\!dypos by -\!yloc
%
  \ifdim\!dypos=\!zpt
    \def\!!Line{\!puthline{#1}}\ignorespaces
  \else
    \ifdim\!dxpos=\!zpt
      \def\!!Line{\!putvline{#1}}\ignorespaces
    \else 
       \def\!!Line{}
    \fi
  \fi
  \let\!ML=\!M%           ** save current coord\dimen mode
  \!setdimenmode%         ** express locations in dimens
  \!!Line%
  \let\!M=\!ML%           ** restore previous c/d mode
  \ignorespaces}
 
 
% **  \!putsolidhline [<XDIMEN,YDIMEN>]
% **  Place horizontal solid line
\def\!putsolidhline#1{%
  \ifdim\!dxpos>\!zpt 
    \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc}
  \else 
    \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc}
  \fi
  \ignorespaces}
 
% **  \!putsolidvline [shifted <XDIMEN,YDIMEN>]
% **  Place vertical solid line
\def\!putsolidvline#1{%
  \ifdim\!dypos>\!zpt 
    \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc}
  \else 
    \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc}
  \fi
  \ignorespaces}
 
\def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}}
\def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}}
 
 
% **  \!putdashedhline [<XDIMEN,YDIMEN>]
% **  Place dashed horizontal line
\def\!putdashedhline#1{%
  \ifdim\!dxpos>\!zpt 
    \!DLsetup\!Flist\!dxpos
    \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc}
      #1[l] at {\!xloc} {\!yloc} 
  \else 
    \!DLsetup\!Blist{-\!dxpos}
    \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}}
      #1[r] at {\!xloc} {\!yloc} 
  \fi
  \ignorespaces}
 
% **  \!putdashedhline [<XDIMEN,YDIMEN>]
% **  Place dashed vertical line
\def\!putdashedvline#1{%
  \!dypos=-\!dypos%            ** vertical leaders go from top to bottom
  \ifdim\!dypos>\!zpt 
    \!DLsetup\!Flist\!dypos 
    \put{\vbox{\vbox to \!totalleaderlength{\!vleaders}
      \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc} 
  \else 
    \!DLsetup\!Blist{-\!dypos}
    \put{\vbox{\!vpartialpattern\!Ltrunc
      \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc} 
  \fi
  \ignorespaces}
 

% **  The rest of the macros in this section are subroutines used by 
% **  \!putdashedhline and \!putdashedvline.
\def\!DLsetup#1#2{%            ** Dashed-Line set up
  \let\!RSlist=#1%             ** set !Rule-Skip list
  \!countB=#2%                 ** convert rule length to integer (number of sps)
  \!countA=\!leaderlength%     ** ditto, leaderlength
  \divide\!countB by \!countA% ** number of complete leader units
  \!totalleaderlength=\!countB\!leaderlength
  \!Rresiduallength=#2%
  \advance \!Rresiduallength by -\!totalleaderlength%  \** excess length
  \!Lresiduallength=\!leaderlength
  \advance \!Lresiduallength by -\!Rresiduallength
  \ignorespaces}
 
\def\!hleaders{%
  \def\!Rule##1{\vrule height\linethickness width##1}%
  \def\!Skip##1{\hskip##1}%
  \leaders\hbox{\!RSlist}\hfill}
 
\def\!hpartialpattern#1{%
  \!dimenA=\!zpt \!dimenB=\!zpt 
  \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}%
  \def\!Skip##1{#1{##1}\hskip\!dimenD}%
  \!RSlist}
 
\def\!vleaders{%
  \def\!Rule##1{\hrule width\linethickness height##1}%
  \def\!Skip##1{\vskip##1}%
  \leaders\vbox{\!RSlist}\vfill}
 
\def\!vpartialpattern#1{%
  \!dimenA=\!zpt \!dimenB=\!zpt 
  \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}%
  \def\!Skip##1{#1{##1}\vskip\!dimenD}%
  \!RSlist}
 
\def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength}
\def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength}
 
\def\!trunc#1#2#3{%          
  \!dimenA=\!dimenB         
  \advance\!dimenB by #1%
  \!dimenD=\!dimenB  \ifdim\!dimenD#2#3\!dimenD=#3\fi
  \!dimenC=\!dimenA  \ifdim\!dimenC#2#3\!dimenC=#3\fi
  \advance \!dimenD by -\!dimenC}
 

%  ****************************************************************
%  ***  LINEAR ARC  (Draws straight lines -- solid and dashed)  ***
%  ****************************************************************
 
%  **  User commands
%  **    \inboundscheckoff
%  **    \inboundscheckon
   
%  **  Internal commands 
%  **    \!start (XCOORD,YCOORD)
%  **    \!ljoin (XCOORD,YCOORD)
%  **    \!drawlinearsegment  --  set by \dashpat to either
%  **      \!linearsolid  or  \!lineardashed
%  **    \!advancedashing     --  set by \dashpat to either
%  **       \relax  or  \!!advancedashing
%  **    \!plotifinbounds     --  set by \inboundscheck off/on to either
%  **       \!plot  or  \!!plotifinbounds
%  **    \!initinboundscheck  --  set by \inboundscheck off/on to either
%  **       \relax  or  \!!initinboundscheck
 
 
%  \plotsymbolspacing  ** distance between consecutive plot positions
%  \!xS                ** starting x
%  \!yS                ** starting y
%  \!xE                ** ending   x
%  \!yE                ** ending   y
%  \!xdiff             ** x_end - x_start
%  \!ydiff             ** y_end - y_start
%  \!distacross        ** how far along curve next point to be plotted is
%  \!arclength         ** approximate length of arc for current interval
%  \!downlength        ** remaining length for "pen" to be down    
%  \!uplength          ** length for "pen" to be down    
%  \!intervalno        ** counts segments to curve
%  \totalarclength     ** cumulative distance along curve
%  \!npoints           ** approximately  (arc length / plotsymbolspacing)
 
%  **  Calls -- \!Pythag, \!divide, \!plot
 
 
%  **  \!start (XCOORD,YCOORD)
%  **  Sets initial point for linearly (or quadratically) interpolated curve
\def\!start (#1,#2){%
  \!plotxorigin=\!xorigin  \advance \!plotxorigin by \!plotsymbolxshift
  \!plotyorigin=\!yorigin  \advance \!plotyorigin by \!plotsymbolyshift
  \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit
  \!rotateaboutpivot\!xS\!yS
  \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}..
%                                 ** Routine will draw dashed line with pen
%                                 ** down for dimen1, up for dimen2, ...
  \!getnextvalueof\!downlength\from\!!UDlist
  \!distacross=\!zpt%             ** 1st point goes at start of curve
  \!intervalno=0 %                ** initialize interval counter
  \global\totalarclength=\!zpt%   ** initialize distance traveled along curve
  \ignorespaces}
 

%  **  \!ljoin (XCOORD,YCOORD) 
%  **  Draws a straight line starting at the last point specified
%  **    by the most recent \!start, \!ljoin, or \!qjoin, and
%  **    ending at (XCOORD,YCOORD).
\def\!ljoin (#1,#2){%
  \advance\!intervalno by 1
  \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit
  \!rotateaboutpivot\!xE\!yE
  \!xdiff=\!xE \advance \!xdiff by -\!xS%**  xdiff = xE - xS
  \!ydiff=\!yE \advance \!ydiff by -\!yS%**  ydiff = yE - yS
  \!Pythag\!xdiff\!ydiff\!arclength%     **  arclength = sqrt(xdiff**2+ydiff**2) 
  \global\advance \totalarclength by \!arclength%
  \!drawlinearsegment%   ** set by dashpat to \!linearsolid or \!lineardashed
  \!xS=\!xE \!yS=\!yE%   ** shift ending points to starting points
  \ignorespaces}
 
 
% **  The following routine is used to draw a "solid" line between (xS,yS)
% **  and (xE,yE).  Points are spaced nearly every  \plotsymbolspacing length
% **  along the line.  
\def\!linearsolid{%
  \!npoints=\!arclength
  \!countA=\plotsymbolspacing
  \divide\!npoints by \!countA%      ** now #pts =. arclength/plotsymbolspacing
  \ifnum \!npoints<1 
    \!npoints=1 
  \fi
  \divide\!xdiff by \!npoints
  \divide\!ydiff by \!npoints
  \!xpos=\!xS \!ypos=\!yS
%
  \loop\ifnum\!npoints>-1
    \!plotifinbounds
    \advance \!xpos by \!xdiff
    \advance \!ypos by \!ydiff
    \advance \!npoints by -1
  \repeat
  \ignorespaces}
 
 
% ** The following routine is used to draw a dashed line between (xS,yS)
% ** and (xE,yE). The dash pattern continues from the previous segment.
\def\!lineardashed{%
% **
  \ifdim\!distacross>\!arclength
    \advance \!distacross by -\!arclength  %nothing to plot in this interval
%
  \else
%
    \loop\ifdim\!distacross<\!arclength
%     ** plot point, interpolating linearly in x and y
      \!divide\!distacross\!arclength\!dimenA%  ** dimA = across/arclength
      \!removept\!dimenA\!t%  ** \!t holds value in dimA, without the "pt"
      \!xpos=\!t\!xdiff \advance \!xpos by \!xS
      \!ypos=\!t\!ydiff \advance \!ypos by \!yS
      \!plotifinbounds
      \advance\!distacross by \plotsymbolspacing
      \!advancedashing
    \repeat  
%
    \advance \!distacross by -\!arclength%    ** prepare for next interval 
  \fi
  \ignorespaces}
 
 
\def\!!advancedashing{%
  \advance\!downlength by -\plotsymbolspacing
  \ifdim \!downlength>\!zpt
  \else
    \advance\!distacross by \!downlength
    \!getnextvalueof\!uplength\from\!!UDlist
    \advance\!distacross by \!uplength
    \!getnextvalueof\!downlength\from\!!UDlist
  \fi}
 
 
% ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual.
\def\inboundscheckoff{%
  \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}%
  \def\!initinboundscheck{\relax}\ignorespaces}
\def\inboundscheckon{%
  \def\!plotifinbounds{\!!plotifinbounds}%
  \def\!initinboundscheck{\!!initinboundscheck}%
  \!initinboundscheck\ignorespaces} 
\inboundscheckoff
 
% ** The following code plots the current point only if it falls in the
% ** current plotarea.  It doesn't matter if the coordinate system has
% ** changed since the plotarea was set up.  However, shifts of the plot
% ** are ignored (how the plotsymbol stands relative to its plot position is
% ** unknown anyway).
\def\!!plotifinbounds{%
  \ifdim \!xpos<\!checkleft
  \else
    \ifdim \!xpos>\!checkright
    \else
      \ifdim \!ypos<\!checkbot
      \else
         \ifdim \!ypos>\!checktop
         \else
           \!plot(\!xpos,\!ypos)
         \fi 
      \fi
    \fi
  \fi}
 
 
\def\!!initinboundscheck{%
  \!checkleft=\!arealloc     \advance\!checkleft by \!xorigin
  \!checkright=\!arearloc    \advance\!checkright by \!xorigin
  \!checkbot=\!areabloc      \advance\!checkbot by \!yorigin
  \!checktop=\!areatloc      \advance\!checktop by \!yorigin}
 

% *********************************
% *** LOGTEN  (Log_10 function) ***
% *********************************
%
% ** \!logten{X}
% ** Calculates log_10 of X.  X and LOG10(X) are in fixed point notation.
% **  X must be positive; it may have an optional `+' sign; any number
% **  of digits may be specified for X.  The absolute error in LOG10(X) is
% **  less than .0001 (probably < .00006).  That's about as good as you
% **  hope for, since TEX only operates to 5 figures after the decimal
% **  point anyway.

%  \!rootten=3.162278pt       **** These are values are set in ALLOCATIONS
%  \!tenAe=2.543275pt  (=A5)
%  \!tenAc=2.773839pt  (=A3)
%  \!tenAa=8.690286pt  (=A1)

\def\!logten#1#2{%
  \expandafter\!!logten#1\!nil
  \!removept\!dimenF#2%
  \ignorespaces}

\def\!!logten#1#2\!nil{%
  \if -#1%
    \!dimenF=\!zpt
    \def\!next{\ignorespaces}%
  \else
    \if +#1%
      \def\!next{\!!logten#2\!nil}%
    \else
      \if .#1%
        \def\!next{\!!logten0.#2\!nil}%
      \else
        \def\!next{\!!!logten#1#2..\!nil}%
      \fi
    \fi
  \fi
  \!next}

\def\!!!logten#1#2.#3.#4\!nil{%
  \!dimenF=1pt %                 ** DimF holds log10 original argument
  \if 0#1%                      
    \!!logshift#3pt %            ** Argument < 1
  \else %                        ** Argument >= 1
    \!logshift#2/%               ** Shift decimal pt as many places
    \!dimenE=#1.#2#3pt %         **   as there are figures in #2
  \fi %                          ** Now dimE holds revised X want log10 of
  \ifdim \!dimenE<\!rootten%          ** Transform X to XX between sqrt(10) 
    \multiply \!dimenE 10 %           **   and 10*sqrt(10)
    \advance  \!dimenF -1pt
  \fi
  \!dimenG=\!dimenE%                  ** dimG <- (XX + 10)
    \advance\!dimenG 10pt
  \advance\!dimenE -10pt %            ** dimE <- (XX - 10)
  \multiply\!dimenE 10 %              ** dimE = 10*(XX-10)
  \!divide\!dimenE\!dimenG\!dimenE%   ** Now dimE=10t==10*(XX-10)/(XX+10)
  \!removept\!dimenE\!t%              ** !t=10t, with "pt" removed
  \!dimenG=\!t\!dimenE%               ** dimG=100t**2
  \!removept\!dimenG\!tt%             ** !tt=100t**2, with "pt" removed
  \!dimenH=\!tt\!tenAe%               ** dimH=10*a5*(10t)**2 /100
    \divide\!dimenH 100
  \advance\!dimenH \!tenAc%           ** ditto + 10*a3
  \!dimenH=\!tt\!dimenH%              ** ditto * (10t)**2 /100
    \divide\!dimenH 100   
  \advance\!dimenH \!tenAa%           ** ditto + 10*a1
  \!dimenH=\!t\!dimenH%               ** ditto * 10t / 100
    \divide\!dimenH 100 %             ** Now dimH = log10(XX) - 1
  \advance\!dimenF \!dimenH}%         ** dimF = log10(X)

\def\!logshift#1{%
  \if #1/%
    \def\!next{\ignorespaces}%
  \else
    \advance\!dimenF 1pt 
    \def\!next{\!logshift}%
  \fi 
  \!next}
 
 \def\!!logshift#1{%
   \advance\!dimenF -1pt
   \if 0#1%
     \def\!next{\!!logshift}%
   \else
     \if p#1%
       \!dimenF=1pt
       \def\!next{\!dimenE=1p}%
     \else
       \def\!next{\!dimenE=#1.}%
     \fi
   \fi
   \!next}


% ***********************************************************
% *** PICTURES (Basic setups for PiCtures; \put commands) ***
% ***********************************************************
 
% **  User Commands:
% **    \beginpicture
% **    \endpicture    
% **    \endpicturesave <XREG,YREG>
% **    \setcoordinatesystem units <XUNIT,YUNIT> point at XREF YREF
% **    \put {OBJECT} [ORIENTATION] <XSHIFT,YSHIFT> at XCOORD YCOORD
% **    \multiput {OJBECT} [ORIENTATION] <XSHIFT,YSHIFT>) at
% **      XCOORD YCOORD
% **      *NUMBER_OF_TIMES DXCOORD DYCOORD  /
% **    \accountingon
% **    \accountingoff
% **    \stack [ORIENTATION] <LEADING> {LIST OF ITEMS}
% **    \lines [ORIENTATION] {LINES}
% **    \Lines [ORIENTATION] {LINES}
% **    \setdimensionmode
% **    \setcoordinatemode
% **    \Xdistance
% **    \Ydistance
  
% **  Internal commands:
% **    \!setputobject{OBJECT}{[ORIENTATION]<XSHIFT,YSHIFT>}
% **    \!dimenput{OBJECT}[ORIENTATION]<XSHIFT,YSHIFT>(XDIMEN,YDIMEN)
% **    \!setdimenmode
% **    \!setcoordmode
% **    \!ifdimenmode
% **    \!ifcoordmode
  
 
% **  \beginpicture
% **  \endpicture
% **  \endpicturesave <XREG,YREG>
% **    \beginpicture ... \endpicture  creates an hbox.  Objects are
% **    placed in this box using the \put command and the like (see below).
% **    The location of an object is specified in terms of coordinate system(s)
% **    established by \setcoordinatesystem.  Each coordinate system (there
% **    might be just one) specifies the length of 1 horizontal unit, the length
% **    of 1 vertical unit, and the coordinates of a "reference point".  The
% **    reference points of various coordinate systems will be in the same
% **    physical location.  The macros keep track of the size of the objects
% **    and their locations. The resulting hbox is the smallest hbox which
% **    encloses all the objects, and whose TEK reference point is the point
% **    on the left edge of the box closest vertically to the PICTEX reference
% **    point. Using \endpicturesave, you can (globally) save the distance TEK's
% **    reference point is to the right (respectively, up from) PICTEX's 
% **    reference point in the dimension register \XREG (respectively \YREG). 
% **    You can then \put the picture OBJECT into a larger picture so that its
% **    reference point is at (XCOORD,YCOORD) with the command
% **      \put {picture OBJECT} [Bl] <\XREG, \YREG> at  XCOORD YCOORD 

% **  \beginpicture : See Subsection 1.1 of the manual.
\def\beginpicture{%
  \setbox\!picbox=\hbox\bgroup%
  \!xleft=\maxdimen  
  \!xright=-\maxdimen
  \!ybot=\maxdimen
  \!ytop=-\maxdimen}
 
% **  \endpicture : See Subsection 1.1 of the manual.
\def\endpicture{%
  \ifdim\!xleft=\maxdimen%  ** check if nothing was put in picbox
    \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt 
  \fi
  \global\!Xleft=\!xleft \global\!Xright=\!xright
  \global\!Ybot=\!ybot \global\!Ytop=\!ytop
  \egroup%
  \ht\!picbox=\!Ytop  \dp\!picbox=-\!Ybot
  \ifdim\!Ybot>\!zpt
  \else 
    \ifdim\!Ytop<\!zpt
      \!Ybot=\!Ytop
    \else
      \!Ybot=\!zpt
    \fi
  \fi
  \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}}
 
% **  \endpicturesave : See Subsection 8.4 of the manual.
\def\endpicturesave <#1,#2>{%
  \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces}
 
 
% **   \setcoordinatesystem units <XUNIT,YUNIT> 
% **     point at XREF YREF  
% **   Each of `units <XUNIT,YUNIT>' and `point at XREF YREF' 
% **     are optional.
% **   Unit lengths must be given in dimensions (e.g., <10pt,1in>).
% **     Default unit lengths are 1pt, 1pt, or previous unit lengths.
% **   Reference point is specified in current units (e.g., 3 5 ). 
% **     Default reference point is 0 0 , or previous reference point.
% **   Unit lengths and reference points obey TEX's scoping rules.
% **   See Subsection 1.2 of the manual.
\def\setcoordinatesystem{%
  \!ifnextchar{u}{\!getlengths }
    {\!getlengths units <\!xunit,\!yunit>}}
\def\!getlengths units <#1,#2>{%
  \!xunit=#1\relax
  \!yunit=#2\relax
  \!ifcoordmode 
    \let\!SCnext=\!SCccheckforRP
  \else
    \let\!SCnext=\!SCdcheckforRP
  \fi
  \!SCnext}
\def\!SCccheckforRP{%
  \!ifnextchar{p}{\!cgetreference }
    {\!cgetreference point at {\!xref} {\!yref} }}
\def\!cgetreference point at #1 #2 {%
  \edef\!xref{#1}\edef\!yref{#2}%
  \!xorigin=\!xref\!xunit  \!yorigin=\!yref\!yunit  
  \!initinboundscheck % ** See linear.tex
  \ignorespaces}
\def\!SCdcheckforRP{%
  \!ifnextchar{p}{\!dgetreference}%
    {\ignorespaces}}
\def\!dgetreference point at #1 #2 {%
  \!xorigin=#1\relax  \!yorigin=#2\relax
  \ignorespaces}

 
%  ** \put {OBJECT} [XY] <XDIMEN,YDIMEN> at (XCOORD,YCOORD)
%  **   `[XY]' and `<XDIMEN,YDIMEN>' are optional.
%  **   First OBJECT is placed in an hbox (the "objectbox") and then a
%  **     "reference point" is assigned to the objectbox as follows:
%  **     [1] first, the reference point is taken to be the center of the box;
%  **     [2] next, centering is overridden by the specifications
%  **           X=l -- reference point along the left edge of the objectbox
%  **           X=r -- reference point along the right edge of the objectbox
%  **           Y=b -- reference point along the bottom edge of the objectbox
%  **           Y=B -- reference point along the Baseline of the objectbox
%  **           Y=t -- reference point along the top edge of the objectbox;
%  **     [3] finally the reference point is shifted left by XDIMEN, down
%  **           by YDIMEN  (both default to 0pt).
%  **   The objectbox is placed within PICBOX with its reference point at  
%  **     (XCOORD,YCOORD). 
%  **   If OBJECT is a saved box, say  box0, you have to write
%  **     \put{\box0}...   or  \put{\copy0}...
%  **   The objectbox is void after the put.
%  **   See Subsection 2.1 of the manual.
\long\def\put#1#2 at #3 #4 {%
  \!setputobject{#1}{#2}%
  \!xpos=\!M{#3}\!xunit  \!ypos=\!M{#4}\!yunit  
  \!rotateaboutpivot\!xpos\!ypos%
  \advance\!xpos -\!xorigin  \advance\!xpos -\!xshift
  \advance\!ypos -\!yorigin  \advance\!ypos -\!yshift
  \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
  \!doaccounting\ignorespaces}
 
%  **   \multiput etc.  Like  \put.  The objectbox is not voided until the
%  **     termininating /, and is placed repeatedly with:
%  **     XCOORD YCOORD -- the objectbox is put down with its reference point
%  **       at (XCOORD,YCOORD);
%  **     *N DXCOORD DYCOORD -- each of N times the current
%  **       (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the
%  **       objectbox is put down with its reference point at (xcoord,ycoord)
%  **       (This specification has to follow an XCOORD YCOORD pair)
%  **     See Subsection 2.2 of the manual.
\long\def\multiput #1#2 at {%
  \!setputobject{#1}{#2}%
  \!ifnextchar"{\!putfromfile}{\!multiput}}
\def\!putfromfile"#1"{%
  \expandafter\!multiput \input #1 /}
\def\!multiput{%
  \futurelet\!nextchar\!!multiput}
\def\!!multiput{%
  \if *\!nextchar
    \def\!nextput{\!alsoby}%
  \else
    \if /\!nextchar
      \def\!nextput{\!finishmultiput}%
    \else
      \def\!nextput{\!alsoat}%
    \fi
  \fi
  \!nextput}
\def\!finishmultiput/{%
  \setbox\!putobject=\hbox{}%
  \ignorespaces}
 
%  **   \!alsoat XCOORD YCOORD 
%  **     The objectbox is put down with reference point at XCOORD,YCOORD
\def\!alsoat#1 #2 {%
  \!xpos=\!M{#1}\!xunit  \!ypos=\!M{#2}\!yunit  
  \!rotateaboutpivot\!xpos\!ypos%
  \advance\!xpos -\!xorigin  \advance\!xpos -\!xshift
  \advance\!ypos -\!yorigin  \advance\!ypos -\!yshift
  \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
  \!doaccounting
  \!multiput}
 
% **   \!alsoby*N DXCOORD DYCOORD
% **     N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD),
% **     and the current (shifted, oriented) OBJECT is put down.
\def\!alsoby*#1 #2 #3 {%
  \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit 
  \!rotateonly\!dxpos\!dypos
  \!ntemp=#1%
  \!!loop\ifnum\!ntemp>0
    \advance\!xpos by \!dxpos  \advance\!ypos by \!dypos
    \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
    \advance\!ntemp by -1
  \repeat
  \!doaccounting 
  \!multiput}
 
% **  \accountingoff : Suspends PiCTeX's accounting of the aggregate
% **    size of the picture box.
% **  \accounting on : Reinstates accounting.
% **  See Subsection 8.2 of the manual.
\def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces}
\def\accountingoff{\def\!doaccounting{}\ignorespaces}
\accountingon
\def\!!doaccounting{%
  \!xtemp=\!xpos  
  \!ytemp=\!ypos
  \ifdim\!xtemp<\!xleft 
     \!xleft=\!xtemp 
  \fi
  \advance\!xtemp by  \!wd 
  \ifdim\!xright<\!xtemp 
    \!xright=\!xtemp
  \fi
  \advance\!ytemp by -\!dp
  \ifdim\!ytemp<\!ybot  
    \!ybot=\!ytemp
  \fi
  \advance\!ytemp by  \!dp
  \advance\!ytemp by  \!ht 
  \ifdim\!ytemp>\!ytop  
    \!ytop=\!ytemp  
  \fi}
 
\long\def\!setputobject#1#2{%
  \setbox\!putobject=\hbox{#1}%
  \!ht=\ht\!putobject  \!dp=\dp\!putobject  \!wd=\wd\!putobject
  \wd\!putobject=\!zpt
  \!xshift=.5\!wd   \!yshift=.5\!ht   \advance\!yshift by -.5\!dp
  \edef\!putorientation{#2}%
  \expandafter\!SPOreadA\!putorientation[]\!nil%
  \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces}
 
\def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift}
 
\def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3}
 
\def\!SPOreviseshift{%
  \if l\!orientation 
    \!xshift=\!zpt
  \else 
    \if r\!orientation 
      \!xshift=\!wd
    \else 
      \if b\!orientation
        \!yshift=-\!dp
      \else 
        \if B\!orientation 
          \!yshift=\!zpt
        \else 
          \if t\!orientation 
            \!yshift=\!ht
          \fi 
        \fi
      \fi
    \fi
  \fi}
 
 
%  **  \!dimenput{OBJECT} <XDIMEN,YDIMEN> [XY] (XLOC,YLOC)
%  **    This is an internal put routine, similar to \put, except that
%  **    XLOC=distance right from reference point, YLOC=distance up from
%  **    reference point. XLOC and YLOC are dimensions, so this routine
%  **    is completely independent of the current coordinate system. 
%  **    This routine does NOT do ROTATIONS.
\long\def\!dimenput#1#2(#3,#4){%
  \!setputobject{#1}{#2}%
  \!xpos=#3\advance\!xpos by -\!xshift
  \!ypos=#4\advance\!ypos by -\!yshift
  \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
  \!doaccounting\ignorespaces}
 
 
%  ** The following macros permit the picture drawing routines to be used 
%  ** either in the default "coordinate mode", or in "dimension mode".
%  **   In coordinate mode  \!M(1.5,\!xunit)    expands to  1.5\!xunit
%  **   In dimension  mode  \!M(1.5pt,\!xunit)  expands to  1.5pt
%  ** Dimension mode is useful in coding macros.
%  ** Any special purpose picture macro that sets dimension mode should 
%  ** reset coordinate mode before completion.
%  ** See Subsection 9.2 of the manual.
\def\!setdimenmode{%
  \let\!M=\!M!!\ignorespaces}
\def\!setcoordmode{%
  \let\!M=\!M!\ignorespaces}
\def\!ifcoordmode{%
  \ifx \!M \!M!}
\def\!ifdimenmode{%
  \ifx \!M \!M!!}
\def\!M!#1#2{#1#2} 
\def\!M!!#1#2{#1}
\!setcoordmode
\let\setdimensionmode=\!setdimenmode
\let\setcoordinatemode=\!setcoordmode

%  ** \Xdistance{XCOORD}, \Ydistance{YCOORD}  are the horizontal and
%  **   vertical distances from the origin (0,0) to the point
%  **   (XCOORD,YCOORD)  in the current coordinate system.
%  ** See Subsection 9.2 of the manual.
\def\Xdistance#1{%
  \!M{#1}\!xunit
  \ignorespaces}
\def\Ydistance#1{%
  \!M{#1}\!yunit
  \ignorespaces}

% ** The following macros -- \stack, \line, and \Lines -- are useful for
% **   annotating PiCtures. They can be used outside the \beginpicture ...
% **   \endpicture environment.

% ** \stack [POSITIONING] <LEADING> {VALUESLIST}
% ** Builds a vertical stack of the values in VALUESLIST. Values in
% ** VALUESLIST are separated by commas.  In the resulting stack, values are
% ** centered by default, and positioned flush left (right) if 
% ** POSITIONING = l (r).  Values are separated vertically by LEADING,
% ** which defaults to \stackleading.
% ** See Subsection 2.3 of the manual.
\def\stack{%
  \!ifnextchar[{\!stack}{\!stack[c]}}
\def\!stack[#1]{%
  \let\!lglue=\hfill \let\!rglue=\hfill
  \expandafter\let\csname !#1glue\endcsname=\relax
  \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}}
\def\!!stack<#1>#2{%
  \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{%
    \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}%
    \!lop\!valueslist\to\!value
    \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1%
    \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}%
  \ignorespaces}

% ** \lines [POSITIONING] {LINES}
% ** Builds a vertical array of the lines in LINES. Each line in LINES
% ** is terminated by a \cr.  In the resulting array, lines are
% ** centered by default, and positioned flush left (right) if 
% ** POSITIONING = l (r).  The lines in the array are subject to TeX's
% ** usual spacing rules: in particular the baselines are ordinarily an equal
% ** distance apart. The baseline of the array is the baseline of the
% ** the bottom line.
% ** See Subsection 2.3 of the manual.
\def\lines{%
  \!ifnextchar[{\!lines}{\!lines[c]}}
\def\!lines[#1]#2{%
  \let\!lglue=\hfill \let\!rglue=\hfill
  \expandafter\let\csname !#1glue\endcsname=\relax
  \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}%
  \ignorespaces}

% ** \Lines [POSITIONING] {LINES}
% ** Like \lines, but the baseline of the array is the baseline of the
% ** top line.  See Subsection 2.3 of the manual.
\def\Lines{%
  \!ifnextchar[{\!Lines}{\!Lines[c]}}
\def\!Lines[#1]#2{%
  \let\!lglue=\hfill \let\!rglue=\hfill
  \expandafter\let\csname !#1glue\endcsname=\relax
  \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}%
  \ignorespaces}


% *********************************************
% *** PLOTTING (Things to do with plotting) ***
% *********************************************
 
% **  User commands
% **    \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] <XSHIFT,YSHIFT>)
% **    \savelinesandcurves on "FILE_NAME"
% **    \dontsavelinesandcurves
% **    \writesavefile {MESSAGE}
% **    \replot {FILE_NAME}
 
% **  Internal command
% **    \!plot(XDIMEN,YDIMEN)
 
% **  \setplotsymbol ({PLOTSYMBOL} [ ] < , >)
% **  Save PLOTSYMBOL away in an hbox for use with curve plotting routines
% **  See Subsection 5.2 of the manual.
\def\setplotsymbol(#1#2){%
  \!setputobject{#1}{#2}
  \setbox\!plotsymbol=\box\!putobject%
  \!plotsymbolxshift=\!xshift 
  \!plotsymbolyshift=\!yshift 
  \ignorespaces}
 
\setplotsymbol({\fiverm .})%       ** initialize plotsymbol
 
 
% **  \!plot is either \!!plot (when no lines and curves are being saved) or
% **                   \!!!plot (when   lines and curves are being saved)
 
% **  \!!plot(XDIMEN,YDIMEN)
% **  Places the current plotsymbol a horizontal distance=XDIMEN-xorigin 
% **    and a vertical distance=YDIMEN-yorigin from the current
% **    reference point.  
\def\!!plot(#1,#2){%
  \!dimenA=-\!plotxorigin \advance \!dimenA by #1%    ** over
  \!dimenB=-\!plotyorigin \advance \!dimenB by #2%    ** up
  \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
  \ignorespaces}
 
% **  \!!!plot(XDIMEN,YDIMEN)
% **  Like \!!plot, but also saves the plot location in units of 
% **    scaled point, on file `replotfile'
\def\!!!plot(#1,#2){%
  \!dimenA=-\!plotxorigin \advance \!dimenA by #1%    ** over
  \!dimenB=-\!plotyorigin \advance \!dimenB by #2%    ** up
  \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
  \!countE=\!dimenA
  \!countF=\!dimenB
  \immediate\write\!replotfile{\the\!countE,\the\!countF.}%
  \ignorespaces}


% ** \savelinesandcurves on "FILE_NAME"
% **   Switch to save locations used for plotting lines and curves
% **   (No advantage in saving locations for solid lines; however
% **   replotting curve locations speeds things up by a factor of about 4. 
% ** \dontsavelinesandcurves
% **   Terminates \savelinesandcurves. The default.
% ** See Subsection 5.6 of the manual.
\def\savelinesandcurves on "#1" {%
  \immediate\closeout\!replotfile
  \immediate\openout\!replotfile=#1%
  \let\!plot=\!!!plot}

\def\dontsavelinesandcurves {%
  \let\!plot=\!!plot}
\dontsavelinesandcurves

% ** \writesavefile {MESSAGE}
% ** The message is preceded by a "%", so that it won't interfere
% ** with replotting.
% ** See Subsection 5.6 of the manual.
{\catcode`\%=11\xdef\!Commentsignal{%}}
\def\writesavefile#1 {%
  \immediate\write\!replotfile{\!Commentsignal #1}%
  \ignorespaces}

% ** \replot "FILE_NAME"
% **   Replots the locations saved earlier under \savelinesandcurves
% **   on "FILE_NAME"
% ** See Subsection 5.6 of the manual.
\def\replot"#1" {%
  \expandafter\!replot\input #1 /}
\def\!replot#1,#2. {%
  \!dimenA=#1sp
  \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA
  \futurelet\!nextchar\!!replot}
\def\!!replot{%
  \if /\!nextchar 
    \def\!next{\!finish}%
  \else
    \def\!next{\!replot}%
  \fi
  \!next}
% **************************************************
% ***  PYTHAGORAS  (Euclidean distance function) ***
% **************************************************

% ** User command:
% **   \placehypotenuse for <dimension1> and <dimension2> in <register> 

% ** Internal command:
% **   \!Pythag{X}{Y}{Z}
% **     Input X,Y are dimensions, or dimension registers.
% **     Output Z == sqrt(X**2+Y**2) must be a dimension register.
% **     Assumes that |X|+|Y| < 2048pt (about 28in).
 
% ** Without loss of generality, suppose  x>0, y>0.  Put s = x+y,
% **   z = sqrt(x**2+y**2). Then  z = s*f,  where  f = sqrt(t**2 + (1-t)**2)
% **   = sqrt((1+tau**2)/2), where  t = x/s  and  tau = 2(t-1/2) .
 
% ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD.
% ** Uses the \!removept macro   (e.g., 123.45pt --> 123.45)
% ** Uses registers \!dimenE--\!dimenI.
\def\!Pythag#1#2#3{%
  \!dimenE=#1\relax                                     
  \ifdim\!dimenE<\!zpt 
    \!dimenE=-\!dimenE 
  \fi%                                            ** dimE = |x|
  \!dimenF=#2\relax
  \ifdim\!dimenF<\!zpt 
    \!dimenF=-\!dimenF 
  \fi%                                            ** dimF = |y|
  \advance \!dimenF by \!dimenE%                  ** dimF = s = |x|+|y|
  \ifdim\!dimenF=\!zpt 
    \!dimenG=\!zpt%                               ** dimG = z = sqrt(x**2+y**2)
  \else 
    \!divide{8\!dimenE}\!dimenF\!dimenE%          ** now dimE = 8t = (8|x|)/s
    \advance\!dimenE by -4pt%                     ** 8tau = (8t-4)*2
      \!dimenE=2\!dimenE%                         **   (tau = 2*t - 1)
    \!removept\!dimenE\!!t%                       ** 8tau, without "pt"
    \!dimenE=\!!t\!dimenE%                        ** (8tau)**2, in pts
    \advance\!dimenE by 64pt%                     ** u = [64 + (8tau)**2]/2
    \divide \!dimenE by 2%                        **   [u = (8f)**2]
    \!dimenH=7pt%                                 ** initial guess g at sqrt(u)
    \!!Pythag\!!Pythag\!!Pythag%                  ** 3 iterations give sqrt(u)
    \!removept\!dimenH\!!t%                       ** 8f=sqrt(u), without "pt"
    \!dimenG=\!!t\!dimenF%                        ** z = (8f)*s/8
    \divide\!dimenG by 8
  \fi
  #3=\!dimenG
  \ignorespaces}

\def\!!Pythag{%                                   ** Newton-Raphson for sqrt
  \!divide\!dimenE\!dimenH\!dimenI%               ** v = u/g
  \advance\!dimenH by \!dimenI%                   ** g <-- (g + u/g)/2
    \divide\!dimenH by 2}

% **  \placehypotenuse for <XI> and <ETA> in <ZETA>
% **  See Subsection 9.3 of the manual.
\def\placehypotenuse for <#1> and <#2> in <#3> {%
  \!Pythag{#1}{#2}{#3}}


% **********************************************
% *** QUADRATIC ARC  (Draws a quadratic arc) ***
% **********************************************
 
% **  Internal command
% **    \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
 
% **  \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
% **  Draws an arc starting at the (last) point specified by the most recent
% **  \!qjoin, or \!ljoin, or \!start  and passing through (X_1,Y_1), (X_2,Y_2).
% **  Uses quadratic interpolation in both  x  and  y:  
% **    x(t), 0 <= t <= 1, interpolates  x_0, x_1, x_2  at  t=0, .5, 1
% **    y(t), 0 <= t <= 1, interpolates  y_0, y_1, y_2  at  t=0, .5, 1
 
\def\!qjoin (#1,#2) (#3,#4){%
  \advance\!intervalno by 1
  \!ifcoordmode
    \edef\!xmidpt{#1}\edef\!ymidpt{#2}%
  \else
    \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}%
    \!dimenA=#2\relax \edef\!xmidpt{\the\!dimenA}%
  \fi
  \!xM=\!M{#1}\!xunit  \!yM=\!M{#2}\!yunit   \!rotateaboutpivot\!xM\!yM
  \!xE=\!M{#3}\!xunit  \!yE=\!M{#4}\!yunit   \!rotateaboutpivot\!xE\!yE
%
% ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2
  \!dimenA=\!xM  \advance \!dimenA by -\!xS%   ** dimA = I = xM - xS
  \!dimenB=\!xE  \advance \!dimenB by -\!xM%   ** dimB = II = xE-xM
  \!xB=3\!dimenA \advance \!xB by -\!dimenB%   ** b=3I-II
  \!xC=2\!dimenB \advance \!xC by -2\!dimenA%  ** c=2(II-I)
%
% ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2
  \!dimenA=\!yM  \advance \!dimenA by -\!yS%   
  \!dimenB=\!yE  \advance \!dimenB by -\!yM%  
  \!yB=3\!dimenA \advance \!yB by -\!dimenB%  
  \!yC=2\!dimenB \advance \!yC by -2\!dimenA% 
%
% ** Use Simpson's rule to calculate arc length over [0,1/2]:
% **   arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)]
% ** with f(t) = sqrt(x'(t)**2 + y'(t)**2).
  \!xprime=\!xB  \!yprime=\!yB%          ** x'(t) = b + 2ct
  \!dxprime=.5\!xC  \!dyprime=.5\!yC%    ** dt=1/4 ==> dx'(t) = c/2
  \!getf \!midarclength=\!dimenA
  \!getf \advance \!midarclength by 4\!dimenA
  \!getf \advance \!midarclength by \!dimenA
  \divide \!midarclength by 12
%
% ** Get arc length over [0,1].
  \!arclength=\!dimenA
  \!getf \advance \!arclength by 4\!dimenA
  \!getf \advance \!arclength by \!dimenA
  \divide \!arclength by 12%             ** Now have arc length over [1/2,1]
  \advance \!arclength by \!midarclength
  \global\advance \totalarclength by \!arclength
%
%
% ** Check to see if there's anything to plot in this interval
  \ifdim\!distacross>\!arclength 
    \advance \!distacross by -\!arclength%   ** nothing 
%
  \else
    \!initinverseinterp%  ** initialize for inverse interpolation on arc length
    \loop\ifdim\!distacross<\!arclength%     ** loop over points on arc 
      \!inverseinterp%    ** find  t  such that arc length[0,t] = distacross,
%                         **   using inverse quadratic interpolation
%                         ** now evaluate x(t)=(c*t + b)*t + a
      \!xpos=\!t\!xC \advance\!xpos by \!xB
        \!xpos=\!t\!xpos \advance \!xpos by \!xS
%                                             ** evaluate y(t)
      \!ypos=\!t\!yC \advance\!ypos by \!yB
        \!ypos=\!t\!ypos \advance \!ypos by \!yS
      \!plotifinbounds%                       ** plot point if in bounds
      \advance\!distacross \plotsymbolspacing%** advance arc length for next pt
      \!advancedashing%                       ** see "linear"
    \repeat  
%
    \advance \!distacross by -\!arclength%    ** prepare for next interval 
  \fi
%
  \!xS=\!xE%              ** shift ending points to starting points
  \!yS=\!yE
  \ignorespaces}
 
 
% ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances
% **   x'(t) and y'(t)
\def\!getf{\!Pythag\!xprime\!yprime\!dimenA%
  \advance\!xprime by \!dxprime
  \advance\!yprime by \!dyprime}
 
 
% ** \!initinverseinterp -- initializes for inverse quadratic interpolation
% ** of arc length provided  1/3 < midarclength/arclength < 2/3; otherwise
% ** initializes for inverse linear interpolation.
\def\!initinverseinterp{%
  \ifdim\!arclength>\!zpt
    \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where  r 
%                                               **  = midarclength, s=arclength
% **  Test for  w  out of range:  w<1/3  or w>2/3
    \ifdim\!dimenE<\!wmin \!setinverselinear
    \else 
      \ifdim\!dimenE>\!wmax \!setinverselinear
      \else%                                    ** w  in range: initialize
        \def\!inverseinterp{\!inversequad}\ignorespaces
%
% **     Calculate the coefficients  \!beta  and  \!gamma  of the quadratic
% **                    t = \!beta*v + \!gamma*v**2
% **     taking the values  t=0, 1/2, 1  at  v=0, w==r/s, 1  respectively:
% **        \!beta = (1/2 - w**2)/[w(1-w)] 
% **        \!gamma = 1 - beta.
%
         \!removept\!dimenE\!Ew%           **  8w, without "pt"
         \!dimenF=-\!Ew\!dimenE%           **  -(8w)**2
         \advance\!dimenF by 32pt%         **  32 - (8w)**2
         \!dimenG=8pt 
         \advance\!dimenG by -\!dimenE%    **  8 - 8w
         \!dimenG=\!Ew\!dimenG%            **  (8w)*(8-8w)
         \!divide\!dimenF\!dimenG\!beta%   **  beta = (32-(8w)**2)/(8w(8-8w))
%                                          **       = (1/2 - w**2)/(w(1-w))
         \!gamma=1pt
         \advance \!gamma by -\!beta%      **  gamma = 1-beta
      \fi%       ** end of the \ifdim\!dimenE>\!wmax
    \fi%         ** end of the \ifdim\!dimenE<\!wmin
  \fi%           ** end of the \ifdim\!arclength>\!zpt
  \ignorespaces}
 
 
% ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note
% ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1.  This routine
% ** calculates an approximation to AL^{-1}(distance across/arclength),
% ** using the assumption that AL^{-1} is quadratic.  Specifically, 
% ** it finds  t  such that
% **    AL^{-1}(v) =. t = v*(\!beta + \!gamma*v)
% ** where  \!beta  and  \!gamma  are set by \!initinv, and where
% ** v=distance across/arclength
\def\!inversequad{%
  \!divide\!distacross\!arclength\!dimenG%   ** dimG = v = distacross/arclength
  \!removept\!dimenG\!v%                     ** v, without "pt"
  \!dimenG=\!v\!gamma%                       ** gamma*v
  \advance\!dimenG by \!beta%                ** beta + gamma*v
  \!dimenG=\!v\!dimenG%                      ** t = v*(beta + gamma*v)
  \!removept\!dimenG\!t}%                    ** t, without "pt"
 
 
% ** When  w <= 1/3  or  w >= 2/3, the following routine writes (using
% ** plain TEK's \wlog command) a warning message on the user's log file,
% ** and initializes for inverse linear interpolation on arc length.
\def\!setinverselinear{%
  \def\!inverseinterp{\!inverselinear}%
  \divide\!dimenE by 8 \!removept\!dimenE\!t
  \!countC=\!intervalno \multiply \!countC 2
  \!countB=\!countC     \advance \!countB -1
  \!countA=\!countB     \advance \!countA -1
  \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted 
    doesn't lie in the}%
  \wlog{ middle third of the arc between the \the\!countA th 
    and \the\!countC th points:}%
  \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length 
    \the \!countA\space to \the\!countC]=\!t.}%
  \ignorespaces}
 
% **  Inverse linear interpolation
\def\!inverselinear{% 
  \!divide\!distacross\!arclength\!dimenG
  \!removept\!dimenG\!t}


% **************************************
% **  ROTATIONS  (Handles rotations) ***
% **************************************
 
% ** User commands
% **   \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
% **   \stoprotation

% **   \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
% ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT) 
% ** by the angle with the give COS and SIN. Both fields are optional.
% ** [COS,SIN] defaults to previous value, or (1,0).
% ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0)
% ** You can't change the coordinate system in the scope of a rotation.
% ** See Subsection 9.1 of the manual.
\def\startrotation{%
  \let\!rotateaboutpivot=\!!rotateaboutpivot
  \let\!rotateonly=\!!rotateonly
  \!ifnextchar{b}{\!getsincos }%
    {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }}
\def\!getsincos by #1 #2 {%
  \edef\!cosrotationangle{#1}%
  \edef\!sinrotationangle{#2}%
  \!ifcoordmode 
    \let\!ROnext=\!ccheckforpivot
  \else
    \let\!ROnext=\!dcheckforpivot
  \fi
  \!ROnext}
\def\!ccheckforpivot{%
  \!ifnextchar{a}{\!cgetpivot}%
    {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }}
\def\!cgetpivot about #1 #2 {%
  \edef\!xpivotcoord{#1}%
  \edef\!ypivotcoord{#2}%
  \!xpivot=#1\!xunit  \!ypivot=#2\!yunit
  \ignorespaces}
\def\!dcheckforpivot{%
  \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}}
\def\!dgetpivot about #1 #2 {%
  \!xpivot=#1\relax  \!ypivot=#2\relax
  \ignorespaces}
  

% ** Following terminates rotation.
% ** See Subsection 9.1 of the manual.
\def\stoprotation{%
  \let\!rotateaboutpivot=\!!!rotateaboutpivot
  \let\!rotateonly=\!!!rotateonly
  \ignorespaces}
 
% ** !!rotateaboutpivot{XREG}{YREG}
% ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt)
% ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt)
% ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD
\def\!!rotateaboutpivot#1#2{%
  \!dimenA=#1\relax  \advance\!dimenA -\!xpivot
  \!dimenB=#2\relax  \advance\!dimenB -\!ypivot
  \!dimenC=\!cosrotationangle\!dimenA
    \advance \!dimenC -\!sinrotationangle\!dimenB
  \!dimenD=\!cosrotationangle\!dimenB
    \advance \!dimenD  \!sinrotationangle\!dimenA
  \advance\!dimenC \!xpivot  \advance\!dimenD \!ypivot
  #1=\!dimenC  #2=\!dimenD
  \ignorespaces}

% ** \!!rotateonly{XREG}{YREG}
% ** Like \!!rotateaboutpivot, but with a pivot of  (0,0)
\def\!!rotateonly#1#2{%
  \!dimenA=#1\relax  \!dimenB=#2\relax 
  \!dimenC=\!cosrotationangle\!dimenA
    \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB
  \!dimenD=\!cosrotationangle\!dimenB
    \advance \!dimenD  \!rotsign\!sinrotationangle\!dimenA
  #1=\!dimenC  #2=\!dimenD
  \ignorespaces}
\def\!rotsign{}
\def\!!!rotateaboutpivot#1#2{\relax}
\def\!!!rotateonly#1#2{\relax}
\stoprotation

\def\!reverserotateonly#1#2{%
  \def\!rotsign{-}%
  \!rotateonly{#1}{#2}%
  \def\!rotsign{}%
  \ignorespaces}


% **********************************
% *** SHADING  (Handles shading) ***
% **********************************

% **  User commands
% **    \setshadegrid [span <SPAN>] [point at XSHADE YSHADE] 
% **    \setshadesymbol [<LS, RS, BS, TS>] ({SHADESYMBOL}
% **      <XDIMEN,YDIMEN> [ORIENTATION])

% **  Internal commands:
% **    \!startvshade  (xS,ybS,ytS)
% **    \!starthshade  (yS,xlS,xrS)
% **    \!lshade [<LS,RS,BS,TS>]
% **       ** when shading vertically:
% **       [the region from (xS,ybS,ytS) to] (xE,ybE,ytE)
% **       ** when shading horizontally:
% **       [the region from (yS,xlS,xrS) to] (yE,xlE,xrE)
% **    \!qshade [<LS,RS,BS,TS>]
% **       ** when shading vertically:
% **       [the region from (xS,ybS,ytS) to] (xM,ybM,ytM)  (xE,ybE,ytE)
% **       ** when shading horizontally:
% **       [the region from (yS,xlS,xrS) to] (yM,xlM,xrM)  (yE,xlE,xrE)
% **    \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
% **    \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}


% **  The shading routine can operate either in a "vertical mode" or a
% **  "horizontal mode".  In vertical mode, the region to be shaded is specified
% **  in the form
% **                 {(x,y): xl <= x <= xr  &  yb(x) <= y <= yt(x)}
% **  where  yb  and  yt  are functions of  x.  In horizontal mode, the region
% **  is specified in the form
% **                 {(x,y): yb <= y <= yt  &  xl(y) <= x <= xr(y)}.
% **  The functions  yb  and  yt  may be either both linear or both quadratic;
% **  similarly for  xl  and  xr.  A region with say, piecewise quadratic bottom
% **  and top boundaries, can be shaded by consecutive (vertical) \!qshades,
% **  proceeding from left to right.  Similarly, a region with piecewise     
% **  quadratic left and right boundaries can be shaded by consecutive
% **  (horizontal) \!qshades, proceeding from bottom to top.  More complex
% **  regions can be shaded by partitioning them into appropriate subregions,
% **  and shading those.
    
% **  Shading is accomplished by placing a user-selected shading symbol at
% **  those points of a regular grid which fall within the region to be
% **  shaded.  This region can be "shrunk" so that a largish shading symbol
% **  will not extend outside it.  Shrinking is accomplished by specifying
% **  shrinkages for the left, right, bottom, and top boundaries, in a manner
% **  discussed further below.

% **  \shades and \!joins MUST NOT be intermingled.  Finish drawing a curve
% **  before starting to shade a region, and finish shading a region before
% **  starting to draw a curve.


% **  \setshadegrid [span <SPAN>] [point at XSHADE YSHADE] 
% **  The shading symbol is placed down on the points of a grid centered
% **  at the coordinate point (XSHADE,YSHADE).  The grid points are of the
% **  form (j*SPAN,k*SPAN), with  j+k  even.  SPAN is specified
% **  as a dimension.
% **  (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none)
% **  SPAN defaults to previous span (or 5pt if none)
% **  See Subsection 7.2 of the manual.
\def\setshadegrid{%
  \!ifnextchar{s}{\!getspan }
    {\!getspan span <\!dshade>}}
\def\!getspan span <#1>{%
  \!dshade=#1\relax
  \!ifcoordmode 
    \let\!GRnext=\!GRccheckforAP
  \else
    \let\!GRnext=\!GRdcheckforAP
  \fi
  \!GRnext}
\def\!GRccheckforAP{%
  \!ifnextchar{p}{\!cgetanchor }
    {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }}
\def\!cgetanchor point at #1 #2 {%
  \edef\!xshadesave{#1}\edef\!yshadesave{#2}%
  \!xshade=\!xshadesave\!xunit  \!yshade=\!yshadesave\!yunit
  \ignorespaces}
\def\!GRdcheckforAP{%
  \!ifnextchar{p}{\!dgetanchor}%
    {\ignorespaces}}
\def\!dgetanchor point at #1 #2 {%
  \!xshade=#1\relax  \!yshade=#2\relax
  \ignorespaces}

% **  \setshadesymbol  [<LS, RS, BS, TS>] ({SHADESYMBOL}
% **    <XDIMEN,YDIMEN> [ORIENTATION])
% **  Saves SHADESYMBOL away in an hbox for use with shading routines.
% **  A shade symbol will not be plotted if its plot position comes within
% **    distance LS of the left boundary,  RS of the right boundary,  TS of the
% **    top boundary,  BS of the bottom boundary.  These parameters have 
% **    default values that should work in most cases (see below).
% **    To override a default value, specify the replacement value
% **    in the appropriate subfield of the shrinkages field.
% **    0pt may be coded as  "z" (without the quotes).  To accept a
% **    default value, leave the field empty.  Thus
% **      [,z,,5pt]  sets  LS=default, RS=0pt, BS=default, TS=5pt .
% **    Skipping the shrinkages field accepts all the defaults.
% **  See Subsection 7.1 of the manual.
\def\setshadesymbol{%
  \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }}

\def\!setshadesymbol <#1,#2,#3,#4> (#5#6){%
% **  set the shadesymbol
  \!setputobject{#5}{#6}%                        
  \setbox\!shadesymbol=\box\!putobject%
  \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift
%
% **  set the shrinkages
  \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge
  \!override\!dimenA{#1}\!lshrinkage%         
  \!dimenA=\!wd \advance \!dimenA -\!xshift%   ** default RS = width - xshift
    \advance\!dimenA \!smidge%                                  - smidge
    \!override\!dimenA{#2}\!rshrinkage
  \!dimenA=\!dp \advance \!dimenA \!yshift%    ** default BS = depth + yshift
    \advance\!dimenA \!smidge%                                  - smidge
    \!override\!dimenA{#3}\!bshrinkage
  \!dimenA=\!ht \advance \!dimenA -\!yshift%   ** default TS = height - yshift
    \advance\!dimenA \!smidge%                                  - smidge
    \!override\!dimenA{#4}\!tshrinkage
  \ignorespaces}
\def\!smidge{-.2pt}%

% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}
% ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN,
% ** according to the following rules:
% **   REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN
% **   REPLACEMENT DIMEN z:     DIMEN <-- 0pt
% **   otherwise:               DIMEN <-- REPLACEMENT DIMEN
% ** DIMEN must be a dimension register
\def\!override#1#2#3{%
  \edef\!!override{#2}% 
  \ifx \!!override\empty
    #3=#1\relax
  \else
    \if z\!!override
      #3=\!zpt
    \else
      \ifx \!!override\!blankz
        #3=\!zpt
      \else
        #3=#2\relax
      \fi
    \fi
  \fi
  \ignorespaces}
\def\!blankz{ z}

\setshadesymbol ({\fiverm .})%       ** initialize plotsymbol
%                                    ** \fivesy ^^B  is a small cross


% ** \!startvshade [at] (xS,ybS,ytS)
% ** Initiates vertical shading mode
\def\!startvshade#1(#2,#3,#4){%
  \let\!!xunit=\!xunit%
  \let\!!yunit=\!yunit%
  \let\!!xshade=\!xshade%
  \let\!!yshade=\!yshade%
  \def\!getshrinkages{\!vgetshrinkages}%
  \let\!setshadelocation=\!vsetshadelocation%
  \!xS=\!M{#2}\!!xunit
  \!ybS=\!M{#3}\!!yunit
  \!ytS=\!M{#4}\!!yunit
  \!shadexorigin=\!xorigin  \advance \!shadexorigin \!shadesymbolxshift
  \!shadeyorigin=\!yorigin  \advance \!shadeyorigin \!shadesymbolyshift
  \ignorespaces}
 
% ** \!starthshade [at] (yS,xlS,xrS)
% ** Initiates horizontal shading mode
\def\!starthshade#1(#2,#3,#4){%
  \let\!!xunit=\!yunit%
  \let\!!yunit=\!xunit%
  \let\!!xshade=\!yshade%
  \let\!!yshade=\!xshade%
  \def\!getshrinkages{\!hgetshrinkages}%
  \let\!setshadelocation=\!hsetshadelocation%
  \!xS=\!M{#2}\!!xunit
  \!ybS=\!M{#3}\!!yunit
  \!ytS=\!M{#4}\!!yunit
  \!shadexorigin=\!xorigin  \advance \!shadexorigin \!shadesymbolxshift
  \!shadeyorigin=\!yorigin  \advance \!shadeyorigin \!shadesymbolyshift
  \ignorespaces}


% **  \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
% **  Consider the lattice with points  ANCHOR + j*SPAN. This routine determines
% **  the index  k  of the smallest lattice point >= LOCATION, and sets
% **  LATTICE LOCATION = ANCHOR + k*SPAN.
% **  INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg.
\def\!lattice#1#2#3#4#5{%
  \!dimenA=#1%                        ** dimA = ANCHOR
  \!dimenB=#2%                        ** dimB = SPAN  (assumed > 0pt)
  \!countB=\!dimenB%                  ** ctB  = SPAN, as a count
%
% ** Determine index of smallest lattice point >= LOCATION
  \!dimenC=#3%                        ** dimC = LOCATION
  \advance\!dimenC -\!dimenA%         ** now dimC = LOCATION-ANCHOR
  \!countA=\!dimenC%                  ** ctA = above, as a count
  \divide\!countA \!countB%           ** now ctA = desired index, if dimC <= 0
  \ifdim\!dimenC>\!zpt
    \!dimenD=\!countA\!dimenB%        ** (tentative k)*span
    \ifdim\!dimenD<\!dimenC%          ** if this is false, ctA = desired index
      \advance\!countA 1 %            ** if true, have to add 1
    \fi
  \fi
%
  \!dimenC=\!countA\!dimenB%          ** lattice location = anchor + ctA*span
    \advance\!dimenC \!dimenA
  #4=\!countA%                        ** the desired index
  #5=\!dimenC%                        ** corresponding lattice location
  \ignorespaces}


% ** \!qshade [with shrinkages] [[LS,RS,BS,TS]]
% ***** during vertical shading:
% **    [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE)
% ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where 
% **   yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE)
% **   yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE)
% ** xS,ybS,ytS are either given by \!startvshade or carried over
% **   as the ending values of the immediately preceding \!qshade.
% ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The
% **   values set there can be overridden, for the course of this \!qshade
% **   only, in the same manner as overrides are specified for
% **   \setshadesymbol.
% ***** during horizontal shading:
% **    [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE)
\def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){%
  \!xM=\!M{#2}\!!xunit
  \!ybM=\!M{#3}\!!yunit
  \!ytM=\!M{#4}\!!yunit
  \!xE=\!M{#6}\!!xunit
  \!ybE=\!M{#7}\!!yunit
  \!ytE=\!M{#8}\!!yunit
  \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for
  \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2
  \def\!getylimits{\!qgetylimits}%
  \!shade{#1}\ignorespaces}
 
% ** \!lshade ... (xE,ybE,ytE)
% ** This is like \!qshade, but the top and bottom boundaries are linear,
% ** rather than quadratic.
\def\!lshade#1(#2,#3,#4){%
  \!xE=\!M{#2}\!!xunit
  \!ybE=\!M{#3}\!!yunit
  \!ytE=\!M{#4}\!!yunit
  \!dimenE=\!xE  \advance \!dimenE -\!xS%   ** xE-xS
  \!dimenC=\!ytE \advance \!dimenC -\!ytS%  ** ytE-ytS
  \!divide\!dimenC\!dimenE\!ytB%            ** ytB = (ytE-ytS)/(xE-xS)
  \!dimenC=\!ybE \advance \!dimenC -\!ybS%  ** ybE-ybS
  \!divide\!dimenC\!dimenE\!ybB%            ** ybB = (ybE-ybS)/(xE-xS)
  \def\!getylimits{\!lgetylimits}%
  \!shade{#1}\ignorespaces}
 
% **  \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C}
% **  Finds  B  and  C  such that the quadratic  y = Y0 + B(x-X0) + C(x-X0)**2
% **  passes through (X1,Y1) and (X2,Y2):  when X0=0=Y0, the formulas are:
% **                   B = S1 - X1*C,   C = (S2-S1)/X2
% **  with
% **                 S1 = Y1/X1,   S2 = (Y2-Y1)/(X2-X1).
\def\!getcoeffs#1#2#3#4#5#6#7#8{% 
  \!dimenC=#4\advance \!dimenC -#2%            ** dimC=Y1-Y0
  \!dimenE=#3\advance \!dimenE -#1%            ** dimE=X1-X0
  \!divide\!dimenC\!dimenE\!dimenF%            ** dimF=S1
  \!dimenC=#6\advance \!dimenC -#4%            ** dimC=Y2-Y1
  \!dimenH=#5\advance \!dimenH -#3%            ** dimH=X2-X1
  \!divide\!dimenC\!dimenH\!dimenG%            ** dimG=S2
  \advance\!dimenG -\!dimenF%                  ** dimG=S2-S1
  \advance \!dimenH \!dimenE%                  ** dimH=X2-X0
  \!divide\!dimenG\!dimenH#8%                  ** C=(S2-S1)/(X2-X0)
  \!removept#8\!t%                             ** C, without "pt"
  #7=-\!t\!dimenE%                             ** -C*(X1-X0)
  \advance #7\!dimenF%                         ** B=S1-C*(X1-X0)
  \ignorespaces}
 
 
\def\!shade#1{%
% ** Get LS,RS,BS,TS for this panel
  \!getshrinkages#1<,,,>\!nil% %       ** now effective LS=dimE, RS=dimF,
%                                      **   BS=dimG, TS=dimH
  \advance \!dimenE \!xS%              ** now dimE=xS+LS
  \!lattice\!!xshade\!dshade\!dimenE%  ** set parity=index of left-mst x-lattice
    \!parity\!xpos%                    **   point >= xS+LS, xpos=its location
  \!dimenF=-\!dimenF%                  ** set dimF=xE-RS
    \advance\!dimenF \!xE
%               
  \!loop\!not{\ifdim\!xpos>\!dimenF}%  ** loop over x-lattice points <= xE-RS
    \!shadecolumn%                 
    \advance\!xpos \!dshade%           ** move over to next column
    \advance\!parity 1%                ** increase index of x-point
  \repeat
%
  \!xS=\!xE%                           ** shift ending values to starting values
  \!ybS=\!ybE
  \!ytS=\!ytE
  \ignorespaces}
 
 
\def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
  \!override\!lshrinkage{#2}\!dimenE
  \!override\!rshrinkage{#3}\!dimenF
  \!override\!bshrinkage{#4}\!dimenG
  \!override\!tshrinkage{#5}\!dimenH
  \ignorespaces}
\def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
  \!override\!lshrinkage{#2}\!dimenG
  \!override\!rshrinkage{#3}\!dimenH
  \!override\!bshrinkage{#4}\!dimenE
  \!override\!tshrinkage{#5}\!dimenF
  \ignorespaces}
 
 
\def\!shadecolumn{%
  \!dxpos=\!xpos
  \advance\!dxpos -\!xS%            ** dx = x - xS
  \!removept\!dxpos\!dx%            ** ditto, without "pt"
  \!getylimits%                     ** get top and bottom y-values
  \advance\!ytpos -\!dimenH%        ** less TS
  \advance\!ybpos \!dimenG%         ** plus BS
  \!yloc=\!!yshade%                 ** get anchor point for this column
  \ifodd\!parity 
     \advance\!yloc \!dshade
  \fi
  \!lattice\!yloc{2\!dshade}\!ybpos%
    \!countA\!ypos%                 ** ypos=smallest y point for this column
  \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos%      ** over
  \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t)
    \!setshadelocation%             ** vmode: xloc=xpos, yloc=ypos 
%                                   ** hmode: xloc=ypos, yloc=xpos 
    \!rotateaboutpivot\!xloc\!yloc%
    \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc%    ** over
    \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc%    ** up
    \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA
    \advance\!ypos 2\!dshade
  \repeat
  \ignorespaces}
 
\def\!qgetylimits{%
  \!dimenA=\!dx\!ytC              
  \advance\!dimenA \!ytB%         ** yt(t)=ytS + dx*(Bt + dx*Ct)
  \!ytpos=\!dx\!dimenA
  \advance\!ytpos \!ytS
  \!dimenA=\!dx\!ybC              
  \advance\!dimenA \!ybB%         ** yb(t)=ybS + dx*(Bb + dx*Cb)
  \!ybpos=\!dx\!dimenA
  \advance\!ybpos \!ybS}
 
\def\!lgetylimits{%
  \!ytpos=\!dx\!ytB%              ** yt(t)=ytS + dx*Bt
  \advance\!ytpos \!ytS
  \!ybpos=\!dx\!ybB%              ** yb(t)=ybS + dx*Bb
  \advance\!ybpos \!ybS}
 
\def\!vsetshadelocation{%         ** vmode: xloc=xpos, yloc=ypos 
  \!xloc=\!xpos
  \!yloc=\!ypos}
\def\!hsetshadelocation{%         ** hmode: xloc=ypos, yloc=xpos 
  \!xloc=\!ypos
  \!yloc=\!xpos}


% **************************************
% *** TICKS  (Draws ticks on graphs) ***
% **************************************

% ** User commands
% **   \ticksout
% **   \ticksin
% **   \gridlines
% **   \nogridlines
% **   \loggedticks
% **   \unloggesticks
% ** See Subsection 3.4 of the manual

% ** The following is an option of the \axis command
% **   ticks 
% **     [in] [out] 
% **     [long] [short] [length <LENGTH>] 
% **     [width <WIDTH>]
% **     [andacross] [butnotacross] 
% **     [logged] [unlogged] 
% **     [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ]
% **     [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by
% **       LOC_INCREMENT]
% ** See Subsection 3.2 of the manual for the rules.

% ** The various options of the  tick  field are processed by the
% ** \!nextkeyword  command defined below.
% ** For example, `\!nextkeyword short '  expands to  `\!ticksshort',
% ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'.

\def\!axisticks {%
  \def\!nextkeyword##1 {%
    \expandafter\ifx\csname !ticks##1\endcsname \relax
      \def\!next{\!fixkeyword{##1}}%
    \else
      \def\!next{\csname !ticks##1\endcsname}%
    \fi
    \!next}%
  \!axissetup
    \def\!axissetup{\relax}%
  \edef\!ticksinoutsign{\!ticksinoutSign}%
  \!ticklength=\longticklength
  \!tickwidth=\linethickness
  \!gridlinestatus
  \!setticktransform
  \!maketick
  \!tickcase=0
  \def\!LTlist{}%
  \!nextkeyword}

\def\ticksout{%
  \def\!ticksinoutSign{+}}
\def\ticksin{%
  \def\!ticksinoutSign{-}}
\ticksout

\def\gridlines{%
  \def\!gridlinestatus{\!gridlinestootrue}}
\def\nogridlines{%
  \def\!gridlinestatus{\!gridlinestoofalse}}
\nogridlines

\def\loggedticks{%
  \def\!setticktransform{\let\!ticktransform=\!logten}}
\def\unloggedticks{%
  \def\!setticktransform{\let\!ticktransform=\!donothing}}
\def\!donothing#1#2{\def#2{#1}}
\unloggedticks

% ** \!ticks/ : terminates read of tick options
\expandafter\def\csname !ticks/\endcsname{%
  \!not {\ifx \!LTlist\empty}
    \!placetickvalues
  \fi
  \def\!tickvalueslist{}%
  \def\!LTlist{}%
  \expandafter\csname !axis/\endcsname}

\def\!maketick{%
  \setbox\!boxA=\hbox{%
    \beginpicture
      \!setdimenmode
      \setcoordinatesystem point at {\!zpt} {\!zpt}   
      \linethickness=\!tickwidth
      \ifdim\!ticklength>\!zpt
        \putrule from {\!zpt} {\!zpt} to
          {\!ticksinoutsign\!tickxsign\!ticklength}
          {\!ticksinoutsign\!tickysign\!ticklength}
      \fi
      \if!gridlinestoo
        \putrule from {\!zpt} {\!zpt} to
          {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength}
      \fi
    \endpicturesave <\!Xsave,\!Ysave>}%
    \wd\!boxA=\!zpt}
  
\def\!ticksin{%
  \def\!ticksinoutsign{-}%
  \!maketick
  \!nextkeyword}

\def\!ticksout{%
  \def\!ticksinoutsign{+}%
  \!maketick
  \!nextkeyword}

\def\!tickslength<#1> {%
  \!ticklength=#1\relax
  \!maketick
  \!nextkeyword}

\def\!tickslong{%
  \!tickslength<\longticklength> }

\def\!ticksshort{%
  \!tickslength<\shortticklength> }

\def\!tickswidth<#1> {%
  \!tickwidth=#1\relax
  \!maketick
  \!nextkeyword}

\def\!ticksandacross{%
  \!gridlinestootrue
  \!maketick
  \!nextkeyword}

\def\!ticksbutnotacross{%
  \!gridlinestoofalse
  \!maketick
  \!nextkeyword}

\def\!tickslogged{%
  \let\!ticktransform=\!logten
  \!nextkeyword}

\def\!ticksunlogged{%
  \let\!ticktransform=\!donothing
  \!nextkeyword}

\def\!ticksunlabeled{%
  \!tickcase=0
  \!nextkeyword}

\def\!ticksnumbered{%
  \!tickcase=1
  \!nextkeyword}

\def\!tickswithvalues#1/ {%
  \edef\!tickvalueslist{#1! /}%
  \!tickcase=2
  \!nextkeyword}

\def\!ticksquantity#1 {%
  \ifnum #1>1
    \!updatetickoffset
    \!countA=#1\relax
    \advance \!countA -1
    \!ticklocationincr=\!axisLength
      \divide \!ticklocationincr \!countA
    \!ticklocation=\!axisstart
    \loop \!not{\ifdim \!ticklocation>\!axisend}
      \!placetick\!ticklocation
      \ifcase\!tickcase
          \relax %  Case 0: no labels
        \or
          \relax %  Case 1: numbered -- not available here
        \or
          \expandafter\!gettickvaluefrom\!tickvalueslist
          \edef\!tickfield{{\the\!ticklocation}{\!value}}%
          \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
      \fi
      \advance \!ticklocation \!ticklocationincr
    \repeat
  \fi
  \!nextkeyword}

\def\!ticksat#1 {%
  \!updatetickoffset
  \edef\!Loc{#1}%
  \if /\!Loc
    \def\next{\!nextkeyword}%
  \else
    \!ticksincommon
    \def\next{\!ticksat}%
  \fi
  \next}    
      
\def\!ticksfrom#1 to #2 by #3 {%
  \!updatetickoffset
  \edef\!arg{#3}%
  \expandafter\!separate\!arg\!nil
  \!scalefactor=1
  \expandafter\!countfigures\!arg/
  \edef\!arg{#1}%
  \!scaleup\!arg by\!scalefactor to\!countE
  \edef\!arg{#2}%
  \!scaleup\!arg by\!scalefactor to\!countF
  \edef\!arg{#3}%
  \!scaleup\!arg by\!scalefactor to\!countG
  \loop \!not{\ifnum\!countE>\!countF}
    \ifnum\!scalefactor=1
      \edef\!Loc{\the\!countE}%
    \else
      \!scaledown\!countE by\!scalefactor to\!Loc
    \fi
    \!ticksincommon
    \advance \!countE \!countG
  \repeat
  \!nextkeyword}

\def\!updatetickoffset{%
  \!dimenA=\!ticksinoutsign\!ticklength
  \ifdim \!dimenA>\!offset
    \!offset=\!dimenA
  \fi}

\def\!placetick#1{%
  \if!xswitch
    \!xpos=#1\relax
    \!ypos=\!axisylevel
  \else
    \!xpos=\!axisxlevel
    \!ypos=#1\relax
  \fi
  \advance\!xpos \!Xsave
  \advance\!ypos \!Ysave
  \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos
  \ignorespaces}

\def\!gettickvaluefrom#1 #2 /{%
  \edef\!value{#1}%
  \edef\!tickvalueslist{#2 /}%
  \ifx \!tickvalueslist\!endtickvaluelist
    \!tickcase=0
  \fi}
\def\!endtickvaluelist{! /}

\def\!ticksincommon{%
  \!ticktransform\!Loc\!t
  \!ticklocation=\!t\!!unit
  \advance\!ticklocation -\!!origin
  \!placetick\!ticklocation
  \ifcase\!tickcase
    \relax % Case 0: no labels
  \or %      Case 1: numbered
    \ifdim\!ticklocation<-\!!origin
      \edef\!Loc{$\!Loc$}%
    \fi
    \edef\!tickfield{{\the\!ticklocation}{\!Loc}}%
    \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
  \or %      Case 2: labeled
    \expandafter\!gettickvaluefrom\!tickvalueslist
    \edef\!tickfield{{\the\!ticklocation}{\!value}}%
    \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
  \fi}

\def\!separate#1\!nil{%
  \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil}
\def\!!separate-#1\!nil{%
  \def\!sign{-}%
  \!!!!separate#1..\!nil}
\def\!!!separate#1\!nil{%
  \def\!sign{+}%
  \!!!!separate#1..\!nil}
\def\!!!!separate#1.#2.#3\!nil{%
  \def\!arg{#1}%
  \ifx\!arg\!empty
    \!countA=0
  \else
    \!countA=\!arg
  \fi
  \def\!arg{#2}%
  \ifx\!arg\!empty
    \!countB=0
  \else
    \!countB=\!arg
  \fi}
 
\def\!countfigures#1{%
  \if #1/%
    \def\!next{\ignorespaces}%
  \else
    \multiply\!scalefactor 10
    \def\!next{\!countfigures}%
  \fi
  \!next}

\def\!scaleup#1by#2to#3{%
  \expandafter\!separate#1\!nil
  \multiply\!countA #2\relax
  \advance\!countA \!countB
  \if -\!sign
    \!countA=-\!countA
  \fi
  #3=\!countA
  \ignorespaces}

\def\!scaledown#1by#2to#3{%
  \!countA=#1\relax%                          ** get original #
  \ifnum \!countA<0 %                         ** take abs value,
    \def\!sign{-}%                            **   remember sign
    \!countA=-\!countA
  \else
    \def\!sign{}%
  \fi
  \!countB=\!countA%                          ** copy |#|
  \divide\!countB #2\relax%                   ** integer part (|#|/sf)
  \!countC=\!countB%                          ** get sf * (|#|/sf)
    \multiply\!countC #2\relax
  \advance \!countA -\!countC%                ** ctA is now remainder
  \edef#3{\!sign\the\!countB.}%               ** +- integerpart.
  \!countC=\!countA %                         ** Tack on proper number
  \ifnum\!countC=0 %                          **   of zeros after .
    \!countC=1
  \fi
  \multiply\!countC 10
  \!loop \ifnum #2>\!countC
    \edef#3{#3\!zero}%
    \multiply\!countC 10
  \repeat
  \edef#3{#3\the\!countA}%                    ** Add on rest of remainder
  \ignorespaces}

\def\!placetickvalues{%
  \advance\!offset \tickstovaluesleading
  \if!xswitch
    \setbox\!boxA=\hbox{%
      \def\\##1##2{%
        \!dimenput {##2} [B] (##1,\!axisylevel)}%
      \beginpicture 
        \!LTlist
      \endpicturesave <\!Xsave,\!Ysave>}%
    \!dimenA=\!axisylevel
      \advance\!dimenA -\!Ysave
      \advance\!dimenA \!tickysign\!offset
      \if -\!tickysign
        \advance\!dimenA -\ht\!boxA
      \else
        \advance\!dimenA  \dp\!boxA
      \fi
    \advance\!offset \ht\!boxA 
      \advance\!offset \dp\!boxA
    \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA)
  \else
    \setbox\!boxA=\hbox{%
      \def\\##1##2{%
        \!dimenput {##2} [r] (\!axisxlevel,##1)}%
      \beginpicture 
        \!LTlist
      \endpicturesave <\!Xsave,\!Ysave>}%
    \!dimenA=\!axisxlevel
      \advance\!dimenA -\!Xsave
      \advance\!dimenA \!tickxsign\!offset
      \if -\!tickxsign
        \advance\!dimenA -\wd\!boxA
      \fi
    \advance\!offset \wd\!boxA
    \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt)
  \fi}


\normalgraphs
\catcode`!=12 %  *****  THIS MUST NEVER BE OMITTED




%%%%%%%%  PARA MACROS %%%%%%%%%

\newcount\paraREGISTER % create register

\def\para 
   {\goodbreak\bigskip
   %\noindent\hglue-1.5pt
   \global\advance\paraREGISTER by1
   \global\equationREGISTER=0
   { (\the\aREGISTER.\the\paraREGISTER)\ } 
}

\def\pararef#1{%
%   \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {\the\aREGISTER.\the\paraREGISTER}%
%      }%
%   }%
%   \LOWTEXwriteref
}

\def\pararefer#1{$(\xref{#1})$}

\def\proclaim#1 
  {\medbreak 
   %%\smallskip 
   \noindent 
   {\bf \para}\kern-5pt{\bf#1}\   
   \begingroup\sl\penalty80}

\def\eqlabel{{\the\aREGISTER}.{\the\paraREGISTER}.{\the\equationREGISTER}}

\def\eqn{\eqno {(\newequation)} }

\def\newsection{ 
       \global\advance\aREGISTER by1        % increment section register 
       \global\bREGISTER=0                   % set subsection register to 0 
       \global\equationREGISTER=0            % set equationregister to 0
       \global\paraREGISTER=0                % set paragraph register to 0
       {${{\bf\the\aREGISTER}}.\ $}          % display section register 
       } 
       
\def\procref#1{%
%   \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {\the\aREGISTER.\the\paraREGISTER}%
%      }%
%   }%
%   \LOWTEXwriteref
}


%%%%%%%% END OF NEW PARA MACROS %%%%%%%%


% HEADING MATERIAL
\def\abstract#1//{
\bigskip
\begingroup
\baselineskip=11pt
\noindent{\bf Abstract.}
\noindent{\rm#1}
\endgroup }

\def\address{
\medskip
\begingroup
\obeylines
\parskip=0pt
\parindent=0pt
\baselineskip=12pt
\bf}

\def\endaddress{\endgroup}

% PROCLAMATIONS ETC.
\def\remark{
  \noindent
  {\bf Remark.\ }
 }

\def\nremark#1 
  {\medbreak 
   \smallskip 
   \noindent 
   {\bf \newproc.}\ {\bf#1}\   
   \begingroup\penalty80} 
 
\def\endnremark{\endgroup\smallskip\goodbreak} 

\def\proof{\noindent{\bf Proof:}\ }

% CROSS-REFERENCES AND CITATIONS
\def\secref#1{%
%   \xdef\LOWTEXwriteref{%
%      \write\LOWTEXauxfile{%
%         \def \string\LOWTEXREF #1 {\sectionno}%
%      }%
%   }%
%   \LOWTEXwriteref
}

\def\eqrefer#1{$(\xref{#1})$}

% FONTS
\def\emph#1/{{\sl #1}}

% INNER PRODUCTS
% the symplectic pairing on the 3rd integral cohomology of the threefold 
\def\sympl{\Omega}
\def\symplip#1#2{\sympl\left(#1,#2\right)}
% \hip and \ip are Jim's and Daniel's notations for the same inner
% product: the one on the the 3rd integral cohomology of the threefold.
\def\hip#1/#2/{h(#1,\, #2 )\;}
\def\ip#1#2{\hip #1/#2/}
\def\ipblank{h}       %  for suppressing arguments to \ip
% the Hodge-theoretic hermitian inner product. 
\def\hiptwo#1/#2/{h'(#1,\, #2 )\;}

% families of all (resp. all smooth, all stable, all semistable)
% cubic forms
\def\forms{{\CC}}
\def\smoothforms{\CC_0}
\def\stableforms{{\CC_s}}
\def\semistableforms{{\CC_{ss}}}
% as above but for marked cubic forms
\def\mforms{{\MM}}
\def\msmoothforms{{\MM_0}}
\def\mstableforms{{\MM_s}}
\def\msemistableforms{{\MM_{ss}}}
% as above but for framed cubic forms
\def\fforms{{\FF}}
\def\fsmoothforms{{\FF_0}}
\def\fstableforms{{\FF_s}}
\def\fsemistableforms{{\FF_{ss}}}

% universal cubic surface, marked cubic surface, and threefold
\def\unisurface{{\cal S}}
\def\munisurface{{{\cal S}^m}}
\def\unithreefold{{\cal T}}

% SINGULAR PARTS OF THE ABOVE SPACES
% the cubic forms of 0 discriminant: all of them, the stable ones
% and the semistable ones.
\def\polydiscr{\Delta}
\def\stablepolydiscr{\Delta_s}          %%stable forms in discr
\def\semistablepolydiscr{\Delta_{ss}}   %%semistable forms in discr
% the projectivization of the forms of 0 discriminant
\def\discr{{P\Delta}}
% the sets of singular points of the surfaces in the universal families:
% the singular points of the nodal surfaces and the singular points of
% the cuspidal surfaces
\def\stablesingular{{\Sigma_s}}
\def\semistablesingular{{\Sigma_{ss}}}



% period maps; the generic symbol, followed by the period maps
% for smooth and stable surfaces in each of the unmarked, marked
% and framed cases. Then the extensions of the period maps to
% the compactification of the moduli space in the unmarked and
% marked cases.
\def\permap{g}
\def\smoothpermap{{\permap}_0}
\def\stablepermap{{\permap}_s}
\def\msmoothpermap{{\permap}_0^m}
\def\mstablepermap{{\permap}_s^m}
\def\fsmoothpermap{{\permap}_0^f}
\def\fstablepermap{{\permap}_s^f}
\def\mcompactpermap{{\permap}_*}
\def\compactpermap{{\permap}_*}

% moduli spaces of cubic forms (resp. the smooth,  stable, or
% semistable ones)
\def\moduli{M}
\def\smoothmoduli{M_0}
\def\stablemoduli{M_s}
\def\semistablemoduli{M_{ss}}
\def\nodalmoduli{M_{nod}}
% as above but for marked forms
\def\mmoduli{M^m}
\def\msmoothmoduli{M_0^m}
\def\mstablemoduli{M_s^m}
\def\msemistablemoduli{M_{ss}^m}
% as above but for framed forms
\def\fmoduli{M^f}
\def\fsmoothmoduli{M_0^f}
\def\fstablemoduli{M_s^f}

%Deligne-Mostow spaces and maps
\def\smoothsextuples{(\P^1)^{(6)}_0}
\def\stablesextuples{(\P^1)^{(6)}_s}
\def\DMsmoothmoduli{M(6)_0}
\def\DMmoduli{M(6)_s}
\def\DMmmoduli{M(6)_s^m}
\def\DMmsmoothmoduli{M(6)_0^m}
\def\DMfmoduli{M(6)_s^f}
\def\DMfsmoothmoduli{M(6)_0^f}

\def\comparisonmap{\phi}
\def\DMpermap{g'}


% Eisenstein things
\def\Eisenstein{\EE}
\def\w{\omega}           % cube root of 1
\def\wbar{{\bar\w}}      % other cube root of 1
\def\baromega{\wbar}	 % ditto

% LATTICES AND RELATED THINGS
\def\eI#1,#2{{\rm I}_{#1,#2}^\Eisenstein}   % Lorentzian lattices over \eisen
\def\autp{\aut^+}               % gp of spinor norm +1 aut's
\def\root{r}   			% a root vector

% GROUPS AND REPRESENTATIONS
\def\weyl{W}         % weyl group
\def\artin{{\cal A}}        % artin group
\def\mono{\Gamma}               % monodromy group
\def\monotheta{\Gamma_\theta}   % congruence  subgroup thereof
\def\monorep{\rho}              % modnodromy representation
\def\SO{{\rm SO}}	% special orthogonal group
\def\SU{{\rm SU}}	% special unitary group
\def\Sp{{\rm Sp}}	% symplectic group
\def\diag{\mathop{\rm diag}\nolimits}

% DERIVATIVES
\def\pder#1/#2/{{\partial #1 \over \partial #2 }}
\def\oder#1/#2/{{ d #1 \over  d #2 }}

% SOME THINGS FOR FRACTIONAL DIFFERENTIALS
% covariant differentiaion wrt Gauss-Manin connection
\def\der#1/#2/{ { d #1/ d #2 }}
% divergence
\def\divergence#1/{ \nabla\kern-2.5pt\cdot\kern-2.5pt{#1}\kern1pt }
% fractional part of a rational number
\def\fr#1{{\{#1\}}}
% related to the Koszul complex
\def\BBL#1{\BB\kern-1.5pt\left[#1\right]}
% standard n-1 form on projective n-space
\def\pvol{\Omega}
% "degree of q"? 
\def\dq{{q}}

% MISC PAPER-SPECIFIC NOTATION
% projectivization `functor'
\def\proj{P}
% the branched covering transformaation
\def\covtrans{\sigma}
% the local system on the complement of a surface in P3
\def\locsyst{{\LL}}   
% isometry from the hermitian lattice of the basepoint 3fold and the
% the standard hermitian lattice
\def\isometry{\phi}  
% the "finite vector space functor" for surfs and 3folds
\def\vs{V}      
% a vanishing cycle
\def\vanishing{v}  

% GENERAL MATH STUFF
% quick delimeters
\def\[{\left[}
\def\]{\right]}
% roman-text math symbols
\def\div{\mathop{\rm div}\nolimits}
\def\projj{\mathop{Proj}}
\def\mod{\mathop{\rm mod}\nolimits}
\def\dmod{\mathop{\rm mod}\nolimits}
\def\Aut{\mathop{\rm Aut}\nolimits}
\def\aut{\Aut}
\def\res{\mathop{\rm res}\nolimits}
\def\image{\mathop{\rm image}\nolimits}
\def\kernel{\mathop{\rm ker}\nolimits}
\def\im{\mathop{\rm Im}\nolimits}
\def\cokernel{\mathop{{\rm coker}}}
% misc
\def\comp{\circ}
\def\sett#1#2{\{\ #1\, :\, #2 \ \}}
\def\commadots{,\ldots,}
\def\smallmatrix#1#2#3#4{\left({#1\atop #3}\;{#2\atop #4}\right)}
\let\tensor=\otimes     
\let\equivalent=\equiv%         
\let\isomorphism=\cong  
\let\sset=\subset
\def\wedges{\wedge \cdots \wedge}
\def\setminus{-}

% STUFF USED WHILE EDITING BUT NO LONGER NEEDED
%\def\here{\bigskip ****************** Here ***************** \bigskip }
%\def\here{}
\def\hide#1{}
%\def\hr{\bigskip\hrule\bigskip}
%\def\rmapdown#1{
% \phantom{#1} \big\downarrow\ \phantom{#1} \llap{\hbox{$#1$}}  }
%\def\lmapdown#1{
%   \rlap{\hbox{$#1$}} \phantom{#1}\ \big\downarrow\ \phantom{#1}}
%
% EMPTY BOX 
% external width, external height, line thickness
\def\drawbox#1#2#3{\hbox{%
\vrule height#2 depth0pt width#3\kern-#3%
\raise#2\hbox{\vrule height0pt depth#3 width#1}\kern-#1%
\vrule height#3 depth0pt width#1\kern-#3%
\vrule height#2 depth0pt width#3%
}}
\def\checkbox{\drawbox{2ex}{2ex}{.15ex}\hbox{$\,$}}


%-------------------------------------------------------------------%
%                           PAPER BEGINS                            %
%-------------------------------------------------------------------%

\magnification=1100
\overfullrule=0pt
\begindoc



\Cheading{The Complex Hyperbolic Geometry of the}
\Cheading{ Moduli Space of Cubic Surfaces}
\bigskip

\cheading{Daniel Allcock, James A. Carlson, and Domingo Toledo}
\vskip0.3truein

\centerline{{\sl To Herb Clemens on his 60th birthday }}

%\cheading{Version 5, October 8, 1997}

%\centerline{ Print Date: \today }

%\centerline{July 22, 1999}

%\centerline{June 2000}

\footnote{}{\noindent
First author partially supported by an NSF postdoctoral
fellowship.  Second and third authors partially supported by NSF grants DMS 9625463
and DMS 9900543.
 Third author partially supported by the IHES.}

\vskip10pt
\begingroup

{\bf Contents}
\vskip10pt

\parskip=0pt
\baselineskip=11pt
\item{\xref{intro}.} Introduction
\item{\xref{smoothModuliSec}.} Moduli of smooth cubic surfaces
\item{\xref{stableModuliSec}.} Moduli of stable cubic surfaces
\item{\xref{lemmasandproofs}.} Proofs of lemmas
\item{\xref{localmonodromy}.} Topology of nodal degenerations
\item{\xref{fractionaldifferentialsection}.} 
Fractional differentials and extension of the period map
\item{\xref{mgroupsection}.} The monodromy group and hyperplane configuration
\item{\xref{cuspidaldegenerations}.} Cuspidal degenerations
\item{\xref{injectivityandsurjectivity}.} Proof of the main theorem
\item{\xref{universalsurfacesec}.} The universal cubic surface
\item{\xref{specialcubics}.} Automorphisms of cubic surfaces
\item{\xref{notation}.} Index of notation

\endgroup



\section{Introduction}
\secref{intro}

A classical theorem of great beauty describes the connection
between cubic curves and hyperbolic geometry: the moduli
space of the former is a quotient of the
complex hyperbolic line (or real hyperbolic
plane).  
The purpose of this paper is to exhibit a similar
connection for cubic surfaces:  their space of moduli
is a quotient of complex hyperbolic
four-space.   We will make a precise statement below.

The theorem for cubic curves can be established using
periods of integrals, or, in modern
language, Hodge structures.  Indeed, the classifying space for the Hodge structure
on the first cohomology of a cubic curve is uniformized by the
upper half plane, isomorphic to the complex hyperbolic line;
the monodromy group of the universal family of cubic curves is
isomorphic to $SL(2,\Z)$; and the {\sl period map} that assigns
to a cubic curve its Hodge structure defines an isomorphism
between the moduli space of smooth cubic curves and the
quotient of the upper half plane by $PSL(2,\Z)$. This
isomorphism holds in several categories: 
analytic spaces,  orbifolds, and
quasi-projective algebraic varieties.


For cubic surfaces the second cohomology
is generated by the classes of algebraic cycles,
and so the natural period map is constant.  Nonetheless,
we can still use Hodge theory to study their moduli
by considering instead the cohomology of a suitable
cyclic branched cover of projective space.   Constructions of this kind
go back at least to Picard
\cite{Picard}. To describe more fully the one used here, 
consider a cubic surface $S$ in $\P^3$, and 
let $T$ be the triple cover
of $\P^3$ branched along $S$.  It is a cyclic cubic
threefold, that is, a hypersurface in
$\P^4$ of degree three invariant under an action of a certain cyclic group of order
$3$.  We then establish the following.  First, the map that
assigns to a smooth cyclic cubic threefold $T$ its Hodge structure may
be regarded as a map from the moduli space to a quotient of the
complex hyperbolic 4-space $\C H^4$ by the action a certain discrete group
$\Gamma$.   Second, this group, which is the monodromy group for the middle cohomology
of the threefold, is generated by complex reflections. Moreover, it admits a
natural surjection to the Weyl group $W(E_6)$, the
famous group of the 27 lines on a cubic surface, and its
projectivization, written $P\Gamma$,
 acts on $\C H^4$ in the same way
as does $PU(4,1,\Eisenstein)$.  The latter is the projective unitary group of the standard
unimodular Hermitian form of signature $(4,1)$ over the ring
$\Eisenstein$ of Eisenstein integers (the integers in $\Q
(\sqrt{-3})$).  Third, the period map that associates to a cubic
surface $S$ the Hodge structure of $H^3(T)$ maps the moduli space of
smooth cubic surfaces to the complement of an explicit closed
subvariety of $P\Gamma\backslash\C H^4$, namely, the projection of the
set of mirrors of the generating complex reflections of
$\mono$.  This map is an isomorphism of analytic spaces. Just as in the case
of cubic curves, it is also an isomorphism of orbifolds. See \S\xref{smoothModuliSec}
for the detailed statements, and \S\xref{mgroupsection} for the identification of
$\mono$.

For a still more precise statement and a still closer analogy to
the case of cubic curves, we consider in
\S\xref{stableModuliSec} cubic surfaces which are {\sl stable}
in the sense of geometric invariant theory.  As is well known, these
 are either smooth or have
 nodes (ordinary double points) as singularities.  Then our main
theorem (\xref{maintheorem}) establishes an analytic
isomorphism between the moduli space of
stable cubic surfaces and $P\Gamma\backslash\C H^4$.  
Since a cubic curve is stable if and only if it is
non-singular, our result
is strictly analogous to the classical one for cubic curves (compare $P\Gamma$  with
$PSL(2,\Z)$).  The identification asserted in the category of analytic
spaces can also be stated for schemes and orbifolds.  For the latter one
must use a structure on $P\Gamma\backslash\C H^4$
different from that which comes naturally from the underlying
analytic space.  See
\pararefer{orbifoldStructuresDifferent}--\pararefer{orbifoldIsomorphismTheorem}
for a discussion.  One can also consider the geometric invariant theory
compactification of the moduli space.  The period map extends to this 
space and defines an analytic isomorphism with the Satake
compactification of the ball quotient.

Although a holomorphic map from the moduli space of cubic surfaces to
$PU(4,1,\Eisenstein)\backslash\C H^4$ which is
generically of
maximum rank appears already in
\cite{CTDiscriminant}, the monodromy group $\Gamma$ was not
determined there.
Its determination
in \S\xref{mgroupsection} relies on
results of Libgober \cite{Libgober} and techniques developed in 
\cite{Allcock} to study a class of groups that includes $\mono$.  The
isomorphism of the moduli space of smooth cubic surfaces with the quotient of
the complement of the mirrors in $\C H^4$ by $\Gamma$ then
follows from a combination of fairly standard techniques in complex geometry and
the Torelli theorem of Clemens and Griffiths
\cite{ClemensGriffiths} for cubic threefolds as described
in our announcement \cite{ACT}.


The proof of the more refined theorem on moduli of stable cubic
surfaces follows the general lines of the argument in \cite{ACT}, except that new
technical subtleties arise in proving that the period map is an
isomorphism on the divisor corresponding to nodal surfaces.  We found
it best to establish the theorem by using the identification of the latter divisor with
the moduli space of six points in $\P^1$ in combination with the theorem
of Deligne and Mostow which gives a complex hyperbolic structure to this space
\cite{DeligneMostow}.  The resulting complex hyperbolic manifold is easily identified with
the divisor of mirrors in
$P\Gamma\backslash\C H^4$.  See \S\xref{injectivityandsurjectivity} for details on this point, and
see \pararefer{strategyofproof} for a sketch of the proof of the main
theorem.  For a more elementary approach to establishing the isomorphism on the nodal
divisor, one could further develop the calculus of fractional
differentials of \S\xref{fractionaldifferentialsection} so as to include a
proof of Lemma~\xref{localimmersionlemma} on all equisingular strata.
We plan to use this approach in future papers devoted to the complex
hyperbolic geometry of the moduli spaces of del Pezzo surfaces and
cubic threefolds.

By Theorem~8.4 of \cite{Allcock}, 
the monodromy group $\Gamma$ is not one of the discrete
groups considered by Mostow \cite{mostow} or 
Deligne and Mostow \cite{DeligneMostow}; however, it contains some
of their groups in a natural way.  We have already appealed to the
fact that divisor of nodal surfaces is uniformized by the first group
of the list for $N=6$ in \S14.4 of  \cite{DeligneMostow}, which 
is the same as the first group
of Thurston's list
\cite{Thurston}.  Similarly, the codimension
two subspace of  surfaces with two
nodes is uniformized by  the first group of their list for $N=5$, which 
 is the second group on Thurston's list and is also 
the group studied by Picard in
\cite{Picard}.

In addition to the proof of the main theorem we have included a few
other results.  In \S\xref{mgroupsection} we study the
configuration of hyperplanes in $\C H^4$ consisting of the mirrors of
$\mono$.  It has the remarkable property that whenever two hyperplanes
intersect, they do so at right angles.  This allows one to prove that
the moduli space of smooth cubic surfaces has contractible universal
cover (see \cite{Allcockaspherical}).  We also show that the set of
mirrors in $\C H^4$ splits into $36$ families indexed in a natural way
by the $36$ reflections of the Weyl group.  Any two mirrors in
one of these families are disjoint.  See
\pararefer{orthogonalintersectionlemma}--\pararefer{disjointnesslemma}
for more details.  From these facts it is easy to identify the
toroidal compactification of $\proj\monotheta\backslash\C H^4$ with
Naruki's cross-ratio variety  \cite{Naruki}, where $\monotheta$ is
the congruence subgroup of $\mono$ introduced in
\pararefer{congruencesubgroup}.  We do not, however, pursue these
details.

In Theorem~\xref{tangentbundletheorem} we establish a simple but
remarkable fact: the
universal smooth cubic surface lies naturally in the projective tangent bundle
to the moduli space of smooth cubic surfaces.  As a consequence
we are able in \S\xref{specialcubics} to find the points of $\C H^4$ corresponding to the
most symmetric surfaces.  This suggests the most natural
way to prove the theorem:  invert the
period map by finding automorphic forms on $\C H^4$ realizing the
universal surface in the tangent bundle to the corresponding quotient
of $\C H^4$. See
\cite{AF} for a different family of automorphic forms, yielding an
embedding of the space of marked cubic surfaces into $\C P^9$. 

The results presented here grew out of our interest in the fundamental
group of the space of smooth cubic surfaces.  It had been
studied earlier by  Libgober
\cite{Libgober}, who discovered that it was a quotient
of the  Artin group of $E_6$, and much more recently by  
Looijenga \cite{Looijenga}, who found a presentation for it.
Looijenga's work, which is a major step forward, solves in principle the problem of
determining the kernel of Libgober's surjection 
from the Artin group of $E_6$. Our methods give a different insight into the structure
of the fundamental group of the space of smooth cubic surfaces, one based on the fact that
it is commensurable with the fundamental group of the complement of a totally geodesic
divisor in a locally symmetric variety.  These results therefore follow the pattern
established in
\cite{Mess} and \cite{Toledo}.
In \cite{ACTfundgp} we will use this fact to prove
that this fundamental group is not a lattice in any Lie group.  In
particular, the moduli space of smooth cubic surfaces is not the
quotient of any bounded symmetric domain by any lattice.  In other
words, removal of a divisor from the locally symmetric variety is
essential to any description of the moduli space of smooth surfaces.




We remark that moduli space of smooth cubic surfaces is the complement
of a totally geodesic divisor in a locally symmetric variety in more
that one way.  Using the period map for configurations of six lines in
$\P^2$ \cite{Matsumoto}, one sees that our moduli space is also the
complement of a totally geodesic divisor in a locally symmetric
variety for $\SO(2,4)$.  The present situation is thus analogous to
that of the moduli space for genus $2$ curves, which is the complement
of totally geodesic divisor in two different locally symmetric
varieties, one for $\SU(3,1)$, and
another for $\Sp(4,\R)$%
% (which is locally isomorphic to $\SO(2,3)$)
; see \cite{HuntWeintraub}.

An alternative approach to our theorem, developed by Hunt and van Geemen, is
discussed in
\cite{Hunt}.  The differential equations satisfied by our period
map (analogous to the hypergeometric equation) have been obtained by Sasaki and Yoshida
\cite{SasakiYoshida}.  


We would like to explicitly record here our indebetedness to two papers that have been
essential to this work, both in terms of their technical content and in terms of 
foundation and inspiration that they provide for further developments:
the  papers of Clemens and Griffiths \cite{ClemensGriffiths} and of Deligne and Mostow
\cite{DeligneMostow}.   We also thank H. Clemens, M. Kapovich, J. Koll\'ar, Paul
Roberts and particularly E. Looijenga for very useful discussions.









\section{Moduli of smooth cubic surfaces}
\secref{smoothModuliSec}

The aim of this section is to construct the period map for the
moduli space of smooth cubic surfaces and to state our main
results concerning this space.  In the next section we will
give more complete results which also treat
the structure of the moduli space of stable cubic surfaces.
We have gathered together the proofs of various lemmas in
section~\xref{lemmasandproofs}.

\para
The period
map is defined by associating to a cubic surface
$S\subset
\P^3$ the Hodge structure of a cyclic triple cover $T$ of $\P^3$ which is branched along
$S$.  For technical reasons we need to consider not only the
surface $S$ but also a cubic form $F$ defining it.  Let
$(X_0,X_1,X_2,X_3)$ denote homogeneous coordinates for $\P^3$
and let $(X_0,X_1,X_2,X_3,Y)$ denote homogeneous coordinates for
$\P^4$.   We write $\forms$ for the set of all nonzero cubic
forms in $X_0,\ldots,X_3$. Each
$F\in\forms$ defines a cubic surface
$S$ in $\P^3$ and also a threefold
$$
  T = \{ (X_0,\ldots,X_3,Y)\in\P^4:Y^3 - F(X_0,X_1,X_2 ,X_3) = 0 \}
   \eqn
   \eqref{stdcycliceq}
$$
in $\P^4$. This is the triple cover of $\P^3$ branched over $S$, 
and we denote by $p:T\map
\P^3$ the covering map.   
{\sl Throughout the paper, whenever we have a cubic form $F$ in mind we
implicitly define the surface $S$ and threefold $T$ in this
manner}. We will also use the analogous implicit definitions for
$S'$ and $T'$ in terms of a form $F'\in\forms$, etc.  
Fix a primitive cube root of unity $\omega$, and let
$\sigma$ be the automorphism of $\P^4$ defined by
$$
\sigma (X_0,X_1,X_2 ,X_3, Y) = (X_0,X_1,X_2 ,X_3, \omega Y)\;.
$$
It leaves $T$ invariant and generates its group of
branched covering transformations over $\P^3$.  These choices of
$\P^3$, $\P^4$ and $\sigma$ will be fixed throughout the paper,
and $T$ will be called the cyclic cubic threefold associated to
$F$.  Let $\smoothforms$ denote the subspace of $\forms$ consisting of
forms which define surfaces $S$ in $\P^3$ which are smooth 
(as schemes). Thus
$\smoothforms$ is the complement of
the discriminant hypersurface $\polydiscr$.  In order to define the period map we need to
study the cohomology of $T$ for $F\in\smoothforms$, the corresponding
monodromy over $\smoothforms$, and the way the Hodge structure
of $T$ varies with $F$.
\pararef{cyclic}

\para
We begin with the study of cohomology.  First, $H^3 (T,\Z)$ is a free $\Z$-module
of rank 10.  This is standard and can be checked by computing
Euler characteristics.  See, for example, formula 8.2 of
\cite{CTDiscriminant}.   
Since $H^3(\P^3,\Z) = 0$, the induced transformation $\sigma^*$
on $H^3(T,\Z)$ fixes no vector except $0$.  (We will usually
suppress the asterisk and write $\covtrans$ for $\covtrans^*$.)
Thus its minimal polynomial is $t^2 + t + 1$, which is 
also the minimal polynomial of $\w$.
Taking $\w$ to act as $\sigma$, and setting 
$\Eisenstein = \Z[\omega]$, the ring
of Eisenstein integers, we see that $H^3(T,\Z)$ 
carries the structure of an $\Eisenstein$-module.
This $\Eisenstein$-module, which we denote by
$\Lambda(T)$, is free of rank five.  Freeness follows from
the fact that the ring of Eisenstein integers is a principal ideal domain.
\pararef{module}


\para
The symplectic form $\Omega$ on $H^3(T,\Z)$, given by the cup
product and evaluation on the fundamental cycle, defines a
$\Z$-bilinear form $h$ on $\Lambda (T)$ by the formula
$$
    h(x,y) = -{\symplip{\theta x}{y} + \theta\symplip{x}{y} \over 2 }\; .
    \eqn\eqref{eqDefOfHermitianForm}
$$
This formula is interpreted as follows: the first $\theta$ is the
endomorphism $\sigma -
\sigma^{-1}$ and  the second $\theta$ is the important Eisenstein integer $\omega - \omega^{-1} =
\sqrt{-3}$.  Theorem~\xref{thmHermitianForm} shows
that $h$ is actually a unimodular hermitian form over
$\Eisenstein$, $\Eisenstein$-linear in its first argument 
and antilinear in its
second. If $v\in \Lambda(T)$ then we
define the norm of $v$ as $\ip{v}{v}$.
\pararef{hermform}

\para
To compute the signature of $h$, we consider the hermitian form
on $H^3(T,\C)$ defined by
$$
   h'(\alpha,\beta) = \theta\int_T \alpha \wedge \bar\beta .
$$
With respect to it we have an orthogonal decomposition
$$
  H^3(T,\C) = H^3_\omega (T) \oplus H^3_\baromega (T)
\eqn
\eqref{eigenspacedecomposition}
$$
into the eigenspaces of $\sigma$ corresponding to its eigenvalues $\omega$ and $\baromega$
repectively.  Since
$\sigma$ is defined on the real vector space $H^3(T,\R)$, the two
eigenspaces are exchanged by complex conjugation and so both are
five-dimensional.  Now consider the map
$$
Z =  \pi_\baromega \circ\iota: \Lambda (T) \map H^3_\baromega (T)
\eqn\eqref{ZisIsometricEmbedding}
$$
where $\iota :\Lambda (T)\to \Lambda(T)\otimes_\Z\C\cong  H^3(T,\C)$ is the natural inclusion
and
$\pi_\baromega$ is the projection $H^3(T,\C)\to
H^3_\baromega(T)$.
\pararef{decomp}

\proclaim{Lemma.}
$Z$ is an isometric embedding. 
\endproclaim
\procref{Zlemma}

The proof appears in \pararefer{proofOfZlemma}. Hereafter we will identify $\Lambda
(T)$ with the lattice $Z(\Lambda(T))\subset H^3_\baromega (T)$.
We also write $Z$ for the extension of this map
$\Lambda(T)\tensor_\Eisenstein\C\to H_{\wbar}^3$ and observe that
another way to state Lemma~\xref{Zlemma} to say that
$$
Z:(\Lambda (T)\otimes_\EE\C ,\sigma, h)\to (H^3_\baromega (T) ,\baromega, h')
\eqn\eqref{ZisIsometry}
$$
is an isomorphism of all the displayed structures.  It follows
that the signature of $h$ on $\Lambda(T)$ is the same as
signature of $h'$ on $H^3_\baromega$.  The signature of $h'$ on
$H^3_\wbar$ can be determined by Hodge-theoretic calculations,
carried out in \pararefer{signature} 
with the following result.


\proclaim{Lemma.}
$H^3_\wbar=H^{2,1}_\wbar\oplus H^{1,2}_\wbar$; the first summand
is one-dimensional, and $h'$ is negative-definite there; the
second sumand is four-dimensional, and $h'$ is positive-definite
there. In particular, the signatures of $h$ on $\Lambda(T)$ and $h'$ on
$H^3_\wbar$ are $(4,1)$.
\endproclaim
\procref{signatureLemma}

\para
According to Theorem~7.1 of \cite{Allcock}, there is a unique isometry class of
five-dimensional free $\EE$-modules endowed with a unimodular
hermitian form of signature $(4,1)$.  Let $\Lambda$ be the standard
such lattice $\Eisenstein^{4,1}$, namely the free module
$\Eisenstein^5$ with the hermitian form $h$ defined by 
$$
h(x,y) = -x_0 \bar y_0 + x_1 \bar y_1 + \cdots + x_4 \bar y_4.
\eqn
\eqref{defofh}
$$
Then $\Lambda (T)$ is isometric to $\Lambda $. Moreover,
$\Lambda \otimes_\EE\C$ is
$\C^{\,4,1}$, the complex five-space
endowed with the hermitian form given by the same formula. It follows that the pair $(H^3_\baromega (T),
\Lambda (T))$ is isometric to the pair $(\C^{\,4,1}, \Lambda )$.  
\pararef{fivemodule}

\para 
We are now in a position to  study 
the monodromy of $\Lambda(T)$ over the space of cubic forms.
Over
$\forms$ is defined a universal family
$\unisurface\subset\forms\times\P^3$ of surfaces
$$
\unisurface = \{ (F,(X_0,X_1,X_2, X_3))\in \forms\times\P
^3:F(X_0,X_1,X_2, X_3) = 0 \}
\eqn
\eqref{universalsurface}
$$  
and a universal family of cyclic cubic
threefolds
$$
\unithreefold =\{(F,(X_0,X_1,X_2, X_3,Y))\in \forms\times\P^4 : Y^3 -
F(X_0,X_1,X_2, X_3) = 0\}.
\eqn
\eqref{universalthreefold}
$$ 
We write $\pi$ for either of the projections $\unisurface\to\forms$ or
$\unithreefold\to\forms$, since  context will identify the intended
map.  Note that \eqrefer{universalthreefold} is the
global version of 
\eqrefer{stdcycliceq}.  Observe also that the total spaces $\unisurface$
and $\unithreefold$ are smooth varieties.  This is easily checked by
differentiating the defining equations of $\unisurface$ and
$\unithreefold$ with respect to the coefficients of $F$ and observing
that the simultaneous vanishing of all partial derivatives with
respect to these coefficients implies that $X_0=\cdots =X_3 =
0$. We write $\unisurface_0$ and $\unithreefold_0$ for the
locally trivial fibrations which are the restrictions of
$\unisurface$ and $\unithreefold$ to $\smoothforms$.
\pararef{universalfamilies}

\para The family $\unithreefold_0$ gives rise to the sheaf $R^3\pi_*(\Z)$
over $\smoothforms$.  Recall that it is the sheaf associated to the
presheaf $U\to H^3(\pi^{-1}(U),\Z)$.  The automorphism $\sigma$
acts on it, and we claim that 1 is not an eigenvalue for
any $U$.  Indeed, if $U$ is contractible then
$H^3(U\times\P^3,\Z)=0$, and so $\covtrans$ fixes no
elements of $H^3(\pi^{-1}(U),\Z)$ other than zero. Reasoning as in
\pararefer{module}, we see that $R^3\pi_*(\Z)$ is a sheaf of
$\Eisenstein$-modules.  
Defining a hermitian form $h$ as in
\eqrefer{eqDefOfHermitianForm}, we see that $R^3\pi_*(\Z)$ is a
sheaf over $\smoothforms$ of unimodular hermitian
$\Eisenstein$-modules.  We denote it by
$\Lambda(\unithreefold_0)$.  Let $H^3(\unithreefold)$ denote the
sheaf $R^3\pi_*(\C)$ over $\forms$, and denote by
$H^3_\baromega (\unithreefold)$ the subsheaf of
$H^3(\unithreefold)$ consisting of eigenvectors with eigenvalue
$\baromega$.
Over $\smoothforms$ the sheaf
$H^3_{\wbar}(\unithreefold_0)$ is a  local system
vector spaces,  hermitian of signature $(4,1)$.
\pararef{sheaves}

\para
Fix a basepoint $F_0\in\smoothforms$. Its associated threefold
$T_0$ is the fiber of $\unithreefold$ over
$F_0$.  Then we have the monodromy representation
$$
\monorep _0 :\pi_1 (\smoothforms , F_0)\to 
\Aut(\Lambda (T_0)).
$$
If $P$ denotes projectivization (passage to the associated projective
space or projective linear group), we obtain a representation
$$
\proj\monorep _0:\pi_1(\smoothforms ,F_0)\to \proj \Aut(\Lambda(T_0)).
$$
Let $\mono _0$ and $\proj\mono_0$ denote the images of
$\monorep _0$ and $\proj\monorep_0$, and let
$\tilde\smoothforms$ denote the covering space of $\smoothforms$
corresponding to $\ker(\proj\monorep _0 )$.  Then
$\tilde\smoothforms$ is a Galois cover of $\smoothforms$ with
Galois group $\proj\mono_0$.  In
\pararefer{defFramingOfSmooth}
we will give a convenient concrete model of this covering space.
Over $\tilde\smoothforms$ the flat
bundle of projective spaces obtained by pulling back
$P(H^3_\baromega )(\unithreefold)$ is trivial: it is canonically
isomorphic (by parallel translation) to the base
$\tilde\smoothforms$ times the fiber at one point. 
\pararef{monodromy}
  

\para
It will be convenient to have a standard model for the monodromy
representation and for the period map which will be introduced
below.  To this end, let us fix once and for all an isometry $\isometry :\Lambda
(T_0)\to\Lambda $. This choice
induces an isomorphism of
$\mono _0$ with the subgroup
$
\mono =
\isometry
\mono _0
\isometry ^{-1}
$ 
of $\Aut (\Lambda )$, which we call {\sl the monodromy group},
and it induces a representation $\monorep :\pi_1(\smoothforms
,F_0)\to \Aut (\Lambda)$ with image $\mono$ which we call {\sl
the monodromy representation}.  It is clear that $\monorep$
depends (by conjugacy) on the choice of $\isometry$; however, we will
see in \pararefer{monotheorem} that $\mono$ is independent of this choice.
\pararef{stdModelForMonodromy}

\para
To describe $\mono$ precisely we will make use of the finite vector
space obtained by reducing $\Lambda$ modulo $\theta=\sqrt{-3}$. 
It is easy to see that $\Eisenstein / \theta\Eisenstein$ is
the field $\F_3$ of three elements.  Thus
$\Lambda /\theta\Lambda $ is a five-dimensional vector
space over $\F_3$ which we denote by $\vs$.  Since $\F_3$ has no
non-trivial  automorphisms, the hermitian form $h$ reduces to a quadratic
form $q$ on $\vs$.   Since
$h$ is unimodular, $q$ is non-degenerate.  
We will never consider automorphisms of $\vs$ that do
not preserve $q$, so we sometimes write $\aut(\vs)$ for $\aut(\vs,q)$.
This is an orthogonal group, and the spinor norm homomorphism $\nu$
defined on it takes values in
$\F^*_3/(\F^*_3)^2=\{\pm1\}\cong \Z/2\Z$.  See \S55 of \cite{OMeara}
for background.  Explictly, if
$g\in\Aut\vs$, then $g$ may be expressed as a product of reflections in vectors
$v_1,\cdots ,v_k\in\vs$, and  
its spinor norm $\nu(g)$ 
is defined to be the square class of  $q(v_1)\cdots q(v_k)$.
We therefore have
homomorphisms
$$
\Aut(\Lambda , h)\to \Aut(\vs,q)
\mathop{\to}^\nu 
\Z/2\Z.
\eqn\eqref{moduloThetaHomomorphisms}
$$ 
By Lemma~\xref{homomorphismsSurjective}, both of these maps are surjective.
We define $\autp(\vs)$
to be the kernel of $\nu$ and $\Aut^+(\Lambda )$ to be the
kernel of the composition. By
the lemma these subgroups have index two in $\aut(\vs)$ and
$\Aut(\Lambda )$.
\pararef{finitespace}

\para
We can now state
our first main result: the identification of $\mono$. The proof occupies most
of section~\xref{mgroupsection}. If
$\zeta$ is a root of unity then the $\zeta$-reflection in a vector $v$
with
$h(v,v)\ne 0$ is the linear isometry which multiplies $v$ by
$\zeta$ and fixes
$v^\bot$ pointwise. An explicit formula for this map is
$$
x\mapsto x- (1-\zeta){\ip{x}{v}\over\ip{v}{v}}\;.
$$
These transformations are called complex
reflections, and complex reflections of orders 2, 3 and 6 are
sometimes called biflections, triflections, and hexflections.
A vector of $\Lambda$ with norm~1 (resp.~2) is called a short
(resp. long) root, and it is easy to see that  hexflections
in  short roots are isometries of $\Lambda$, as are
biflections in long roots.

\proclaim{Theorem.} The monodromy group $\mono$ is the group $\Aut^+
(\Lambda )$.  It coincides with the subgroup of
$\Aut(\Lambda )$ generated by the
hexflections in the short roots of $\Lambda $.  
Moreover, the inclusion of $\mono$ in
$\Aut^+(\Lambda )$  induces an isomorphism
$\proj\mono\cong\proj\Aut(\Lambda )$.
\endproclaim
\procref{monotheorem}

The normality of $\autp(\Lambda)$  in $\aut (\Lambda)$ 
justifies our claim in \pararefer{stdModelForMonodromy}
that $\mono$ is independent of $\phi$.

\para
Next we will define the period map from $\tilde\smoothforms$ to
complex hyperbolic 4-space.
If $W$ is a complex vector space of dimension $n+1$ with a
hermitian form $h$ of signature $(n,1)$, we let $\C H (W)$, the
{\sl complex hyperbolic space} of $W$, denote the space of
negative lines: the space of one-dimensional subspaces of $W$ on
which $h$ is negative definite.  The space $\C H(W)$ is an open
subset of $P(W)$ and is biholomorphic to the unit ball in
$\C^{\,n}$.  If $W =
\C^{\,n,1}$ we write $\C H^n$ for $\C H (W)$.
\pararef{complexhyp}

\para 
For each $F\in\smoothforms$, we have seen in
Lemma~\xref{signatureLemma} that $H^{2,1}_\baromega(T)\subset
H^3_\baromega (T)$ is a negative line, hence an element of $\C
H(H^3_\baromega(T))$.  By \pararefer{monodromy}, the flat bundle $\C H (H^3_\baromega
(T))$ trivializes over $\tilde\smoothforms$, so by parallel
translation we can regard the collection of all
the $H^{2,1}_\baromega (T)$ as points in $\C H(H^3_\baromega
(T_0))$. The assignment
$$
\left(\tilde F\in\tilde\smoothforms\right)
\mapsto 
\hbox{ parallel translate of} \ 
H^{2,1}_\baromega ( T)\in\C H(H^3_\baromega (T_0))
$$ 
defines a map
$$
\permap _0 :\tilde\smoothforms\to\C H (H^3_\baromega (T_0))\;.
$$ 
It is $P\monorep
_0$-equivariant, and it is holomorphic since the Hodge filtration varies
holomorphically  (see also
\pararefer{formulaForPeriodmap}).  Our choice of
$\phi:\Lambda(T_0)\to \Lambda$ in
\pararefer{stdModelForMonodromy} induces an isometry $\C
H(H^3_\baromega (T_0))\to \C H^4$. Composing with $\permap_0$
yields a holomorphic map
$$
\permap :\tilde\smoothforms\to\C H^4
$$
which we call the period map.  Formulas for this map will be given 
in \pararefer{abstractformulaperiodmap} and \pararefer{formulaForPeriodmap}.
  
\pararef{periodmapzero}

\para 
Finally, we turn our attention to the moduli space of cubic
surfaces.  The general linear group $GL(4,\C)$ operates on the
left on $\forms$ in the standard way: $(gF)(X) = F(g^{-1}X)$.
This induces standard actions of $GL(4,\C)$ on $\unisurface$ and
$\unithreefold$ by $g(F,X) = (gF,gX)$ and $g(F,(X,Y)) =
(gF,(gX,Y))$, respectively.  Let $D\subset GL(4,\C)$ be the
subgroup consisting of scalar matrices whose diagonal entries are a cube
root of unity.  Then $D$ is a central subgroup, cyclic of order
three, which acts trivially on $\forms$ and also on
$\unisurface$.  The action of $D$ on $\unithreefold$ can be
described by observing that each element of $D$ acts on the
$\P^4$ containing the cubic threefolds in the same manner as
some power of the branched covering transformation $\covtrans$.
Let $G = GL(4,\C)/D$.  Then $G$ acts effectively on $\forms$ and
on $\unisurface$, preserving the subspace $\smoothforms$.  We
will see in \pararefer{defFramingOfSmooth} that the action on $\smoothforms$ lifts
to an action of $G$ on $\tilde\smoothforms$.
\pararef{groupG}  

\para
It is known (see \pararefer{GIT}) that $G$ acts properly
and with finite isotropy groups on $\smoothforms$.  Thus the
quotient $G\backslash\smoothforms$ is an analytic space and indeed a
complex analytic orbifold.  It is also true \pararefer{freeAndProper} that
$G$ acts freely and properly on
$\tilde\smoothforms$, so that $G\backslash\tilde\smoothforms$ is a complex
analytic manifold and the orbit map 
$\tilde\smoothforms\to G\backslash\tilde\smoothforms$ 
is a principal
$G$-bundle.
Our moduli spaces are
$$
\smoothmoduli = G\backslash\smoothforms\hbox{\qquad and\qquad}\fsmoothmoduli =
G\backslash\tilde\smoothforms.
$$
$\smoothmoduli$ is the moduli space of smooth cubic surfaces,
and 
$\fsmoothmoduli$ will be discussed in
\pararefer{definemoduli} as the moduli space of ``framed''
smooth cubic surfaces. 
Since a
bounded holomorphic function on $G$ is constant, the period map $\permap$
is constant on $G$-orbits.  Consequently it descends to a
holomorphic map
$$
\permap :\fsmoothmoduli = G\backslash\tilde\smoothforms \to \C H^4 .
$$
By the equivariance of the $P\Gamma$-actions on domain and range, this descends
further, to a holomorphic map
$$ 
\permap:\smoothmoduli =G\backslash\smoothforms\to
P\Gamma\backslash\C H^4.
$$
\pararef{defOfSmoothModuliSpaces}

\para
We can now state our main theorem
concerning moduli of smooth cubic surfaces.  
This is a special case of our more general results for stable
cubic surfaces, which appear in the next section.
Write $\RR$ for the set of short roots of $\Lambda$,
and observe that for each $r\in\RR$ there is a natural
inclusion $\C H(r^\bot)\subset\C
H^4$ induced by the inclusion of $r^\bot$ into $\Lambda$. 
The short roots define the hyperplane arrangement 
$$
\HH=\bigcup_{r\in\RR}\C H(r^\bot)\sset\C H^4\;,
$$
and it is obvious that $\HH$ is preserved by $P\mono$.
Of course $\C H^4 \setminus\HH$ is a
complex manifold, and we regard $P\mono\backslash (\C
H^4 \setminus\HH)$ as equipped with the orbifold structure that 
arises naturally from its description as a quotient of a
manifold by a discrete group.
\pararef{hyperplanes} 

\proclaim{Theorem.} 
The period map $\permap$ induces isomorphisms
$\fsmoothmoduli
\map \C H^4\setminus \HH$ and $\smoothmoduli\map
P\mono\backslash(\C H^4\setminus\HH)$.
The first is an isomorphism of complex manifolds and the
second is an isomorphism of complex analytic orbifolds.
\endproclaim
\procref{smoothmodulitheorem}


\section{Moduli of stable cubic surfaces}
\secref{stableModuliSec}


To prove Theorem~\xref{smoothmodulitheorem} and its extensions,
Theorems~\xref{maintheorem} and~\xref{orbifoldIsomorphismTheorem}, 
we consider the moduli of cubic
surfaces equipped with extra structure, as well as suitable compactifications 
of these spaces.  In this section we introduce these structures and state 
the main results of the paper, which concern the moduli space of stable cubic
surfaces and its Geometric Invariant Theory (GIT) compactification. As in
section~\xref{smoothModuliSec} we have gathered the proofs of
various lemmas in section~\xref{lemmasandproofs}.

\para To compactify the moduli spaces of
section~\xref{smoothModuliSec}, we will need the notions of stability
and semi-stability from GIT, specialized to cubic forms in
four variables.  Background for the claims here can be found in
\cite{Mumford}, particularly p. 80, and in \cite{MumfordEnseignement},
particularly p. 51.  A form is {\sl stable} if its orbit under
$SL(4,\C)$ is closed and its isotropy group is finite.  A cubic form
is stable if and only if its zero scheme is either smooth or has only
ordinary double points.  (Ordinary double points, also called nodes or
$A_1$ singularities, are locally analytically equivalent to the
singularity defined by $x^2 + y^2 + z^2 =0$.)  We write $\stableforms$
for the space of stable cubic forms and $\stablepolydiscr$ for
$\polydiscr\cap\stableforms$.  A form is called semi-stable if the
closure of its $SL(4,\C)$-orbit does not contain $0$.  A cubic form is
semi-stable if and only if its zero scheme has no singularities
besides nodes and cusps. (The latter are locally analytically
equivalent to $x^2 + y^2 + z^3 = 0$ and are also called $A_2$
singularities.)  For a proof that these are the semi-stable cubic
forms in four variables see \S19 of \cite{Hilbert}.  We write
$\semistableforms$ for the space of semi-stable cubic forms and
$\semistablepolydiscr$ for $\polydiscr\cap\semistableforms$.
The only closed $SL(4,\C)$-orbit in
$P(\semistablepolydiscr-\stablepolydiscr)$ is the orbit of
$X_0^3-X_1X_2X_3$; therefore the closure of the orbit of any
semistable cubic surface with a cusp contains this particular
tricuspidal surface. Although this last fact is known (see for example the introduction
to \cite{Naruki}), we have not found a proof in the literature
and therefore provide one in
\pararefer{uniquenessOfTricuspidalSurface}.  
\pararef{GIT}

\para
We now develop the  notion of a marking of a cubic surface in terms of cohomology. 
It is equivalent to the one
used by Naruki in \cite{Naruki}.  Let $L$
denote the lattice
$\Z^{1,6}$, namely
$\Z^7$ with the bilinear form $x_0y_0-x_1y_1-\cdots-x_6y_6$. Let
$\eta\in L$ denote the norm $3$ vector $(-3,1,1,1,1,1,1)$. It is known
\cite{Manin} that if
$S$ is a smooth cubic surface, then the lattice $L(S)=H^2(S,\Z)$
is isometric to $L$ by an isometry that takes the hyperplane
class $\eta(S)$ to $\eta$.  Define a marking of a cubic form
$F\in\smoothforms$ to be an isometry $m:L(S)\to L$ which takes
$\eta (S)$ to $\eta$.  We can now define the space $\msmoothforms$
of marked smooth cubic forms. As a set, it is the collection of all
markings of all smooth cubic forms.  To give it the structure of
a complex manifold, let $L(\unisurface_0)$  be the sheaf
$R^2\pi_*(\Z)$ over $\smoothforms$, where
$\pi:\unisurface_0\to\smoothforms$ is the universal smooth cubic
surface of \pararefer{universalfamilies}. Observe that the
stalk of $L(\unisurface_0)$ over $F$ is canonically isomorphic
to $L(S)$.  The set $\msmoothforms$ is therefore in natural
one-to-one correspondence with the subsheaf of
$\Hom(L(\unisurface_0),\smoothforms\times L)$ consisting of
homomorphisms which carry each stalk isometrically to $L$ in
such a way as to identify the hyperplane class with $\eta$.
This one-to-one correspondence defines the structure
of a complex manfold on $\msmoothforms$.  
We write
$p:\msmoothforms\map\smoothforms$ for the natural projection.  Now observe that the
action of $G$ on forms defined in
\pararefer{groupG} extends naturally to $\msmoothforms$: if $g\in G$ and $m\in
\msmoothforms$ is a marking of $F$, then $m\circ g^*$ is a marking of $gF$.  Observe also
that the group $\aut(L,\eta)$, which is isomorphic to the Weyl group
$W(E_6)$, acts on $\msmoothforms$: if $w\in
\aut(L,\eta)$ and $m\in \msmoothforms$ is a marking of $F$, then
$w\circ m$ is also a marking of $F$.  These two group actions
commute.  It is clear that $\msmoothforms$ is a covering space of
$\smoothforms$ with Galois group $\aut(L,\eta)\cong W(E_6)$. It
is classical that the monodromy of $\msmoothforms$ on
$L(\unisurface_0)$ over some $F\in\smoothforms$ realizes every
isometry of $(L(S),\eta(S))$.  
Therefore $\msmoothforms$ coincides with the covering
space of $\smoothforms$ corresponding to the subgroup of
$\pi_1(\smoothforms)$ that is the kernel of the monodromy of
$L(\unisurface_0)$. Thus $\msmoothforms$ is
connected. 
\pararef{defMarkingOfSmoothSurface}

\para
We define the space $\mstableforms$ of marked stable
cubic forms to be the Fox completion of $\msmoothforms$ over
$\stableforms$.  More precisely, in the terminology of \cite{Fox},
$p:\mstableforms\map\stableforms$ is the completion of the spread  
$p:\msmoothforms\map\stableforms$, where $p$ is as defined in
\pararefer{defMarkingOfSmoothSurface}.  Formally, a point of
$\mstableforms$ lying over $F\in\stableforms$ is a function $m$
which assigns to each neighborhood $W$ of $F$ a connected component $m(W)$
of $p^{-1}(W-\polydiscr)$ in such a way that if $W'\sset W$ then
$m(W')\sset m(W)$.  It is clear that $m$ is determined by its values
at connected neighborhoods of $F$.  In our setting it is also true
that $m$ is determined by its value on a fixed suitably chosen
neighborhood of $F\in\forms$.  Indeed, let $W$ be a connected neighborhood of
$F\in\stableforms$ with the property that for any connected
neighborhood $W'$ of $F$, $W'\sset W$, the inclusion
$W'\setminus\polydiscr\sset W\setminus\polydiscr$ induces a
surjection on fundamental groups.
%
% the following replaces the commented-out block below it.
Then $m(W)$ is a component of the preimage of $W-\polydiscr$; if
$W'\sset W$ is any connected neighborhood of $F$ then the preimage of
$W'$ in $m(W)$ is connected, so that $m(W')$ is uniquely
determined. The existence of such $W$ follows from the discussion below.
%, and let $m_1\in
%p^{-1}(W_1\setminus\polydiscr)$.  We can then define $m(W) = \{m_2\in
%p^{-1}(W\setminus\polydiscr) : m_1^{-1}m_2:L(S_2)\map L(S_1) \hbox{ is
%parallel translation along some path in $W_1\setminus\polydiscr$ from
%$F_2$ to $F_1$}\}$.  It is easy to check that $m(W)$ is a connected
%component of $p^{-1}(W\setminus\polydiscr)$, and that $m(W)$ is a
%Galois covering of $W\setminus\polydiscr$ with Galois group isomorphic
%to the monodromy image of $\pi_1(W\setminus\polydiscr)$.
\pararef{definitionFox}

\para
  In the same manner we define the space
$\msemistableforms$ of marked semi-stable forms to be the Fox completion of
$\msmoothforms$ over $\semistableforms$.  This space naturally
contains $\mstableforms$, and these completions carry natural
topologies (see \S2 of \cite{Fox}) and  natural complex manifold structures (see
\pararefer{coordinatesOnMstableforms} 
and \pararefer{localCoordinatesForMarkedSemistableForms} below). 
We will sometimes refer to a point of $\msemistableforms$ lying
over $F\in\semistableforms$ as a marking of $F$.    Because of
the intrinsic nature of the Fox completion, the actions of $G$
and $\aut(L,\eta) = W(E_6)$ on $\msmoothforms$ 
extend to $\mstableforms$ and $\msemistableforms$.
\pararef{definitionFoxsemistable}


\para
To understand the Fox completions we must understand the
inclusions $\stablepolydiscr\to\stableforms$ and
$\semistablepolydiscr\to\semistableforms$ as well as the local
monodromy of $\msmoothforms$ near a point of $\stablepolydiscr$
or $\semistablepolydiscr$.  Let us begin by studying
$\stablepolydiscr$.  A cubic surface can have at most four
nodes, and the space $\stablepolydiscr^k$ of cubic forms with
exactly $k\geq 1$ nodes and no other singularities has
codimension $k$ in $\forms$. If $F_0\in\stablepolydiscr^k$, then
$\polydiscr$ is a locally normal crossing divisor at $F_0$.
That is, there are local analytic coordinates
$z_1,\cdots,z_{20}$ for $\forms$ centered at $F_0$ such that
$\polydiscr$ has local equation $z_1\cdots z_k = 0$ at $F_0$.
In particular, $\stablepolydiscr^1$ is smooth; it also accounts
for all of the smooth points of $\polydiscr$.  These facts can be checked by
referring to the normal forms and slices described in 
\cite{Bruce}.  
%
%
%; most of these were known to Salmon \cite{Salmon} and
%Schl\"afli \cite{Schlafli}.
%
%
It follows from this description
that any $F_0\in\stablepolydiscr^k$ has a neighborhood $W$
with $\pi_1(W-\polydiscr)\isomorphism\Z^k$, with natural
generators for the local fundamental group defined by
positively-oriented meridians linking the $k$ components of
$\polydiscr$ at $F_0$. 
If $F\in W-\polydiscr$, then the monodromy of $\msmoothforms$
over $W-\polydiscr$ acts on $L(S)$, and it is well-known that this
group is generated by the reflections in the vanishing
cycles associated to the nodes of $F$. Since distinct nodes
have orthogonal vanishing cycles, the image of
$\pi_1(W-\polydiscr)$ is a group of the form $(\Z/2)^k$. 
\pararef{structureofstablediscr}

\para
According to the foregoing discussion,
 the restriction of the covering map to each component
$\vs$ of the preimage of $W-\polydiscr$ is
equivalent to the map
$$
(y_1,\ldots,y_{20})\mapsto(z_1,\ldots,z_{20})=
(y_1^2,\ldots,y_k^2,y_{k+1},\ldots,y_{20})
\eqn\eqref{eqnForLocalBranchedCoveringMap}
$$
on the complement of the set $y_1\cdots y_k=0$ in some neighborhood of
0 in $\C^{20}$. The
Fox completion adjoins  to $\vs$ a copy of the set $y_1\cdots y_k=0$
and extends the projection map
in the obvious way. 
This makes it clear that $\mstableforms$ is a topological
manifold and that the branched covering map
$\mstableforms\to\stableforms$ is a local homeomorphism on the
preimage of $\stablepolydiscr^k$ for each $k$. It is also clear that
$\mstableforms$ has a unique complex manifold structure
compatible with these structures; this is given by  coordinate
charts like the $y_i$ on the left side of 
\eqrefer{eqnForLocalBranchedCoveringMap}.
\pararef{coordinatesOnMstableforms}

\para
Now we will discuss the structure of $\semistablepolydiscr$ in
$\semistableforms$.  A cubic surface has at most three cusps; a
tricuspidal surface has no other singularities; a cubic surface
with two cusps can have at most one node; and one with a single cusp can have
at most two nodes.  The space $\semistablepolydiscr^{a,b}$ of cubic
forms with exactly $a$ nodes and $b$ cusps, and no other singularities, has
codimension $a + 2b$ in $\forms$.  Note that
$\semistablepolydiscr^{k,0}$ coincides with the space
$\stablepolydiscr^k$ introduced in \pararefer{structureofstablediscr}.  If
$F\in\semistablepolydiscr^{0,1}$, then there are coordinates
centered at $F$ in which $\polydiscr$ has local equation $z_1^3 -
z_2^2 = 0$.  Thus, if $W$ is a suitable small neighborhood of $F$,
then $\pi_1(W\setminus\polydiscr)\cong B_3$, where $B_3$ denotes the
classical braid group on three strands.  If
$F\in\semistablepolydiscr^{a,b}$, then in a neighborhood of $F$ one
can describe $\polydiscr$ as the transverse intersection of $a$ smooth
hypersurfaces of the form $\stablepolydiscr^1$ and $b$ smooth hypersurfaces
containing a codimension one stratum of cusps of the form
$\semistablepolydiscr^{0,1}$.  Thus, if $W$ is a small neighborhood of
$F$, then $\pi_1(W\setminus\polydiscr)\cong\Z^a\times B_3^b$.
The facts about $\semistablepolydiscr$ used here may be checked by
referring to  \cite{Bruce}.
\pararef{structureOfSemistableDiscr}

\para
The monodromy action of this group $\Z^a\times B_3^b$ on the
restriction of $L(\unisurface_0)$ to $W-\polydiscr$ is generated
by the reflections in the roots in the spaces of vanishing
cycles of the singularities of $F$. These form a root system
of type $A_1^aA_2^b$, so the local monodromy group is
$(\Z/2)^a\times S_3^b$.  In order to describe a neighborhood of
a point of $\msemistableforms$ lying over $F$, we first recall a
fact about the natural action of $S_3$ on
$A=\{(u_1,u_2,u_3)\in\C^3:u_1+u_2+u_3=0\}$. The quotient
$B=A/S_3$ is isomorphic (as an analytic space) to $\C^2$.
Furthermore, the three involutions of $S_3$ act by reflections
across the hyperplanes $u_1=u_2$, $u_2=u_3$ and $u_3=u_1$, and
$S_3$ acts freely away from the union $D$ of these
mirrors. Finally, there are coordinates $(v_1,v_2)$ on $B$ such
that the image of the mirrors under the natural map $j:A\to B$
is the variety $E$ defined by $v_1^3-v_2^2=0$. From this it
follows that $j:A\to B$ is the Fox completion of the covering
map $(A-D)\to (B-E)$. We can now determine the local structure
of the Fox completion $\msemistableforms$. Since
$F\in\polydiscr_{ss}^{a,b}$, we may choose a neighborhood $W$ of
$F$ that is isomorphic to a neighborhood of 0 in
$$
\underbrace{\C\times\cdots\times\C}_{\hbox{$a$ factors}}
\times
\underbrace{B\times\cdots\times B}_{\hbox{$b$ factors}}
\times
\,\C^{20-a-2b}
$$
in such a way that $W-\polydiscr$ corresponds to the intersection of
a neighborhood of 0 with
$$
\bigl(\C-\{0\}\bigr)\times\cdots\times\bigl(\C-\{0\}\bigr)
\times
(B-E)\times\cdots\times(B-E)
\times
\C^{20-a-2b}
\;.
$$
Then a component $\vs$ of the preimage of $W-\polydiscr$ in $\msmoothforms$
is a copy of the intersection of
$$ 
\bigl(\C-\{0\}\bigr)\times\cdots\times\bigl(\C-\{0\}\bigr)
\times
(A-D)\times\cdots\times(A-D)
\times
\C^{20-a-2b}
$$
with a neighborhood of the origin in $\C^{20}$.
Moreover, the projection to $\smoothforms$ is given by squaring each
of the first $a$ coordinates, applying $j$ to each factor $A$, and
acting by the identity of $\C^{20-a-2b}$. Passing to the Fox
completion of $\vs\to W-\polydiscr$ over $W$ enlarges $\vs$ to a
neighborhood of the origin in 
$$
\C\times\cdots\times\C\times
A\times\cdots\times A\times
\C^{20-a-2b}
$$ in the obvious way, and we see that each component of the preimage
of $W$ in $\msemistableforms$ is homeomorphic to a neighborhood of 0
in $\C^{20}$. As in the stable case, there is a unique complex
manifold structure on $\msemistableforms$ compatible with the various
structures already present. Finally, the preimage of
$\semistablepolydiscr$ in $\msemistableforms$ may be described in
local analytic coordinates as the intersection of a suitable
neighborhood of the origin with the hyperplanes associated to the root
system $A_1^a\oplus A_2^b$.
\pararef{localCoordinatesForMarkedSemistableForms}

\para
In a similar way we define a new structure called a {\sl framing}.
Recall from \pararefer{module}, \pararefer{fivemodule} and \pararefer{sheaves} the
definitions of the $\Eisenstein$-lattices $\Lambda(T)$ and $\Lambda$
and the sheaf $\Lambda(\unithreefold_0)$ over $\smoothforms$.  By a
framing of a smooth form $F\in \smoothforms$ we mean a projective
equivalence class $Pf$, where $f:\Lambda(T)\to\Lambda$ is an isometry;
to form a projective equivalence class we identify isometries
that differ by multiplication by a unit of $\Eisenstein$.  Now define
the space $\fsmoothforms$ of framed smooth cubic forms as follows.  As
a set, $\fsmoothforms$ is the collection of all framings of all smooth
cubic forms.  Since the stalk of $\Lambda(\unithreefold_0)$ at
$F\in\smoothforms$ is canononically isomorphic to $\Lambda(T)$,
 the set $\fsmoothforms$ is
in natural one-to-one correspondence with the subsheaf of
$PHom(\Lambda(\unithreefold_0),\smoothforms\times
\Lambda)$ consisting of projective equivalence classes of
homomorphisms that are isometries on each stalk.  We use this
one-to-one correspondence to view $\fsmoothforms$ a complex
manifold.  In computations we will often work with isometries
rather than equivalence classes and leave it to the reader to check
that the results depend only on the equivalence class.  We may also
denote $Pf$ simply by $f$. The action of $g\in GL(4,\C)$ on
$\smoothforms$ defined in \pararefer{groupG} lifts to an action of
$GL(4,\C)$ on $\unithreefold_0$, and this induces an action of $G$ on
$\fsmoothforms$. Explicitly, if $g\in GL(4,\C)$ and $Pf$ is a framing
of $F\in\smoothforms$, then $P(f\circ g^*)$ is a framing of $gF$ that
depends only on the image of $g$ in $G$.  Here we have used the fact that an
element of $D$ acts on $\unithreefold_0$ by a power of the branched
covering transformation $\covtrans$ which induces the scalar $\w$ on
$\Lambda(\unithreefold_0)$.  Similarly, if $w\in P\aut(\Lambda)$ then
$w\circ Pf$ is a framing of $F$.  Thus commuting actions of
$G$ and $P\aut(\Lambda)$ on $\fsmoothforms$ are defined.  Moreover, it is clear that
$\fsmoothforms$ is a covering space of $\smoothforms$ with Galois
group $P\aut(\Lambda)$.  Indeed, since 
$P\Gamma=P\aut \Lambda$ by Theorem~\xref{monotheorem},
this space coincides with the covering
$\tilde\smoothforms$ introduced in \pararefer{monodromy}, and so
$\fsmoothforms$ is connected.  \pararef{defFramingOfSmooth}

\para We define the space $\fstableforms$ of framed stable forms to be
the Fox completion of $\fsmoothforms$ over $\stableforms$. We call a
preimage  of $F\in\stableforms$ in $\fstableforms$ a framing of $F$, and
we call
an element of $\fstableforms$ a framed stable form.  As before, the
Fox completion can be understood in terms of the local structure of
$\stablepolydiscr$ and the local monodromy groups.  Imitating the
case of
marked surfaces, we take for each $F_0$ in $\stablepolydiscr^k$ a neighborhood
$W$ of $F_0$ in $\smoothforms$ such that $\pi_1(W-\polydiscr)\isomorphism
\Z^k$.  By \pararefer{localmonodromylemma} and
\pararefer{multiplelocalmonodromylemma}, the image of the local
fundamental group in $P\mono$ is a group $(\Z/6)^k$, so that the
restriction of the covering map $\fsmoothforms\to\smoothforms$ is just
like \eqrefer{eqnForLocalBranchedCoveringMap} but with
$y_1^2,\ldots,y_k^2$ replaced by $y_1^6,\ldots,y_k^6$. Passing to the
Fox completion adjoins the set $y_1\cdots y_k=0$ in the same way as
before, and $\fstableforms$ is a complex manifold in a natural way. In
particular, $\fstableforms$ is a cover of $\stableforms$ with sixfold
branching over each component of the preimage of $\stablepolydiscr^1$,
whereas $\mstableforms$ has only twofold branching there.  Since the Fox
completion of $\fsmoothforms$ over $\semistableforms$ is not an
analytic space and not even locally compact, there is no
reasonable notion of a framed semistable form.
\pararef{definitionFstableforms}

\para The introduction of $\fsmoothforms$ allows us to give an
explicit expression for the period map $\tilde\smoothforms\to\C H^4$
introduced in \pararefer{periodmapzero}.  To this end, observe
that the choice of $F_0$
and $\phi$ in \pararefer{monodromy} and 
\pararefer{stdModelForMonodromy} defines a basepoint for
$\fsmoothforms$ and hence defines an isomorphism between
$\tilde\smoothforms$ and $\fsmoothforms$.  If $Pf\in \fsmoothforms$ lies over
$F\in\smoothforms$ and is represented by an isometry $f:\Lambda(T)\map\Lambda$,
then $(f\otimes 1)\circ
Z^{-1}:H^3_\baromega(T)\map \Lambda\otimes_\Eisenstein\C = \C^{\,4,1}$ is
an isometry.  Here $Z$ is
as in \eqrefer{ZisIsometry}. Let
$$
f_* : P(H^3_\baromega)\mapright{\cong} P(\C^{\,4,1})
$$ 
be the resulting identification of projective spaces. Then 
the value of the period map at $Pf$ is given by the formula
$$
\permap(Pf) = f_*(H^{2,1}_\baromega) \in \C H^4\subset P(\C^{\,4,1}).
\eqn
\eqref{abstactpermap}
$$
We will give an even more explicit formula in terms of integrals in
\pararefer{formulaForPeriodmap}.
\pararef{abstractformulaperiodmap}

\para
Next we explain the relation between $\fstableforms$ and
$\mstableforms$.  Recall the definition in
\pararefer{finitespace} of the $\F_3$-vector space $\vs$ and its
quadratic form, and let
$$
   \monotheta
     = \ker 
      \bigl(
         \Aut(\Lambda) \map \Aut(\vs)
      \bigr)  = \ker \bigl( \mono \map \Aut^+(\vs) \bigr) . 
$$
The  subscript $\theta$ reflects the fact that $\monotheta$ is the
level $\theta$ congruence subgroup of $\mono$.  By
\pararefer{homomorphismsSurjective} and
\pararefer{monotheorem}, $\mono$ maps surjectively to
$\Aut^+(\vs)$, so there is an exact sequence
$$
1\map\monotheta\map\mono\map\Aut^+(\vs)\map 1.
\eqn\eqref{foo}
$$ 
The center of $\autp(\vs)$ is trivial because the central
involution of $\vs$ has spinor norm $-1$. The center of
$\mono=\autp(\Lambda)$ consists of the cube roots of unity
acting as scalars, all of which lie in $\monotheta$.
Furthermore, $P\Aut^+(\vs)=P\Aut(\vs)$.
Therefore by projectivizing \eqrefer{foo} we obtain another exact sequence
$$
1\map P\monotheta\map P\mono \map P\Aut(\vs)\map 1.
$$
According to \cite{atlas}, p.~26, $P\Aut(\vs)=PGO_5(3)$ is
isomorphic to the Weyl group $W(E_6)$.  Therefore
$P\monotheta\backslash\fsmoothforms$ and $\msmoothforms$ are
covering spaces of $\smoothforms$ with isomorphic Galois
groups. This suggests the next result, 
whose proof appears in
\pararefer{proofCoversCoincide}--\pararefer{endProofCoversCoincide}
(but see also \pararefer{alternateProofCoversCoincide}).
\pararef{congruencesubgroup}

\proclaim{Lemma.} The spaces 
$\monotheta\backslash\fsmoothforms$ and $\msmoothforms$ are isomorphic as covering spaces of
$\smoothforms$.  The spaces  
$\monotheta\backslash\fstableforms$ and 
$\mstableforms$ are isomorphic as branched covering spaces of $\stableforms$.
Both of these isomorphisms are $G$-equivariant.
\endproclaim
\procref{framedmodthetalemma}

\proclaim{Lemma.}
$G$ acts freely and properly on $\mstableforms$,
$\fstableforms$, and, in particular, on
$\tilde\smoothforms=\fsmoothforms\sset\fstableforms$.
\endproclaim
\procref{freeAndProper}

\noindent
The proof appears in \pararefer{markednodallemma}--\pararefer{endproofOfFreenessAndProperness}.

\para
Now we gather together all of the moduli spaces considered in this
paper:
$$
\def\put#1{\rlap{$#1$}\phantom{\mmoduli}}
\eqalign{
\put{\fsmoothmoduli}&=G\backslash\fsmoothforms,\cr
\put{\msmoothmoduli}&=G\backslash\msmoothforms,\cr
\put{\smoothmoduli}&=G\backslash\smoothforms,\cr
}
\qquad
\eqalign{
\put{\fstablemoduli}&=G\backslash\fstableforms,\cr
\put{\mstablemoduli}&=G\backslash\mstableforms,\cr
\put{\stablemoduli}&=G\backslash\stableforms,\cr
}
\qquad
\eqalign{
\cr
\put{\mmoduli}&=PG\backslash\backslash P\msemistableforms,\cr
\put{\moduli}&=PG\backslash\backslash P\semistableforms\;.\cr
}
\eqn
\eqref{tableofmodulispaces}
$$ These are the moduli spaces of framed smooth surfaces, framed
stable surfaces, marked smooth surfaces, etc.  We introduced
$\smoothmoduli$ and $\fsmoothmoduli$ in
\pararefer{defOfSmoothModuliSpaces}. By
Lemma~\xref{freeAndProper}, $G$ acts freely on $\msmoothforms$,
$\mstableforms$, $\fsmoothforms$ and $\fstableforms$, so that
$\msmoothmoduli$, $\mstablemoduli$, $\fsmoothmoduli$ and
$\fstablemoduli$ are complex manifolds. From geometric invariant theory,
we know that $G$ acts
properly on $\stableforms$.  Therefore $\stablemoduli$ and its subspace
$\smoothmoduli$ are analytic spaces and even complex analytic
orbifolds.  The space $\moduli = PG\backslash\backslash
P\semistableforms$ is defined to be $SL(4,\C)\backslash\backslash
P\forms$, the geometric invariant theory quotient of
$P\semistableforms$ by $SL(4,\C)$.  By definition this is
$P\semistableforms$ modulo the equivalence
relation closure (in $P\semistableforms$) of 
$PSL(4,\C)$-orbits, or equivalently of $PG$-orbits.  GIT implies
that the quotient by this equivalence relation is a projective variety
whose graded coordinate ring is the ring of $G$-invariant polynomials on
$\forms$. GIT also implies that points of $\moduli$ correspond to the
closed orbits of $PG$ in $P\semistableforms$.  By
Lemma~\xref{uniquenessOfTricuspidalSurface}, $\moduli$ is the union of
$\stablemoduli$ with the equivalence class of $X_0^3 - X_1X_2X_3$.
The space $\mmoduli$ is the following GIT quotient.  Let $p:P\mforms\map
P\forms$ be the natural projection.  It is easy to see that
$p^*\OO(1)$ is an ample line bundle on $P\mforms$ and that there are
commuting actions of $W(E_6)$ and $SL(4,\C)$ on $p^*\OO (1)$.  It
is also easy to see that
$m\in\mforms$ is stable (respectively semistable) with respect to the
action of $SL(4,\C)$ on $\mforms$ and the linearized line bundle
$p^*\OO(1)$ if and only if $F=p(m)\in\forms$ is stable (respectively
semi-stable) with respect to the action of $SL(4,\C)$ on $\forms$ and
the linearized line bundle $\OO(1)$.  Thus the previously defined
spaces $\mstableforms$ and $\msemistableforms$ coincide with the spaces
of stable and semi-stable elements of $\mforms$ 
for this particular linearization
of the $SL(4,\C)$-action on $\mforms$.  We therefore define $\mmoduli
= PG\backslash\backslash P\msemistableforms =
SL(4,\C)\backslash\backslash P\msemistableforms$ using this
linearization of the $SL(4,\C)$-action.  
%The descriptions and
%characterizations of $\mmoduli$ analogous to the ones just discussed
%for $\moduli$ also hold.  
Because the actions of $P\mono$ and $G$ commute, the spaces of
\eqrefer{tableofmodulispaces} fit into the commutative diagram
$$
\matrix{
\fsmoothmoduli&\longrightarrow&\fstablemoduli\cr
\downarrow&&\downarrow\cr
\msmoothmoduli&\longrightarrow&\mstablemoduli&\longrightarrow&\mmoduli\cr
\downarrow&&\downarrow&&\downarrow\cr
\smoothmoduli&\longrightarrow&\stablemoduli&\longrightarrow&\moduli\rlap{$\;$,}\cr
}
$$
where the horizontal maps are inclusions and the vertical maps
are coverings or branched coverings.  There is no space
$\moduli^f$ because, as explained in
\pararefer{definitionFstableforms}, there is no reasonable space
${\fforms}_{ss}$.

\pararef{definemoduli}

\para
Recall from \pararefer{periodmapzero} the definition of the period map
$\permap :\fsmoothforms\map
\C H^4$.  
Using the Riemann
extension theorem and the fact that
$\C H^4$ is a bounded domain in $\C^{\,4}$, we see that
$\permap$  extends to a map
$\fstableforms
\map
\C H^4$.  
Since $\permap$ is constant on $G$-orbits in $\fsmoothforms$, 
so is the extension.  Consequently there is  a  holomorphic quotient map
$\fstablemoduli\map \C H^4$ which we denote by the same symbol
$\permap$ and refer to as a period map.  
Dividing by the $\monotheta$ and $\mono$-actions and
using Lemma~\xref{framedmodthetalemma}, we obtain period maps
corresponding to the horizontal arrows of the following
commutative diagram. 
$$
\matrix{
 & \fstablemoduli  & \map & \C H^4 \cr
 & \downarrow &   & \downarrow  \cr
 & \mstablemoduli & \map & P\monotheta\backslash\C H^4 \cr
 & \downarrow &   & \downarrow  \cr
 & \stablemoduli & \map & P\mono\backslash\C H^4 \cr
}
\eqn
\eqref{perdiagram}
$$
(The vertical maps are branched covers.)
We can now state our main theorem.  In it
we write $\HH^k$ for the set of points of $\C H^4$ that
lie on exactly $k$ components of the hyperplane arrangement $\HH$
introduced in \pararefer{hyperplanes}. In particular, $\HH^0=\C
H^4-\HH$. 
\pararef{manyperiodmaps}

\proclaim{Theorem.}
The top map of \eqrefer{perdiagram} is an isomorphism of complex manifolds, and
the other horizontal maps are isomorphisms of analytic
spaces. Furthermore, for each $k=0,\ldots,4$, the period map carries
the framed cubic forms with $k$ nodes and no other singularities onto
$\HH^k$. Finally, the maps of the bottom two rows of \eqrefer{perdiagram} extend to
isomorphisms of compact analytic spaces as in the diagram below.
$$
\matrix{
 & \mmoduli & \map & \overline{P\monotheta\backslash\C H^4} \cr
 & \downarrow\hfil &   & \downarrow  \cr
 & \moduli\phantom{^m} & \map & \overline{P\mono\backslash\C H^4} \cr
}
\eqn
\eqref{compactifiedPerdiagram}
$$
The bars indicate the Satake
compactifications of the two ball quotients.
\endproclaim
\procref{maintheorem}

\para
We have shown that $\fstablemoduli$, with its natural complex manifold
structure, is isomorphic to $\C H^4$. As mentioned in
\pararefer{definemoduli}, $\mstablemoduli$ is a complex manifold and
$\stablemoduli$ is a complex orbifold. Theorem~\xref{maintheorem}
shows that $\mstablemoduli$ and $\stablemoduli$ are isomorphic as
analytic spaces to the ball quotients $P\monotheta\backslash\C H^4$
and $P\mono\backslash\C H^4$. 
As quotients of $\C H^4$ by discrete groups, the latter spaces are also orbifolds. 
However, the
analytic space isomorphisms are {\it not} orbifold isomorphisms. To
see this for $\mstablemoduli$, one need only observe that (as an
orbifold) $P\monotheta\backslash\C H^4$ is not a manifold. Indeed,
$P\monotheta$ contains
elements with fixed points in $\C H^4$ (see for example
\pararefer{thmCongruenceSubgroupGenerators}). To see the non-isomorphism for
$\stablemoduli$, one uses the fact that there exists a nodal cubic surface $S$ with no
symmetries. Since $S$ has no symmetries, the corresponding point of $\stablemoduli$ is a
manifold point. But because $S$ has a node, the corresponding point of
$P\mono\backslash\C H^4$ lies in the image of a hyperplane of
$\HH$. Such a point is not a manifold point of the orbifold
$P\mono\backslash\C H^4$ because $P\mono$ contains the hexflections
which fix the hyperplane pointwise.
\pararef{orbifoldStructuresDifferent}

\para
Despite the foregoing discussion, we can define orbifold stuctures on the analytic spaces 
$P\monotheta\backslash\C H^4$ and  $P\mono\backslash\C H^4$ so that the 
two lower
horizontal maps in \eqrefer{perdiagram} are orbifold isomorphisms.  
 The idea, say for $P\mono\backslash\C H^4$, is to start with the
complex hyperbolic orbifold $P\mono\backslash\C H^4$ and replace the generic
points of the image of $\HH$, which are orbifold points with local group
$\Z/6$, by ordinary manifold points. To make this precise, and to deal with
the non-generic points of the image of $\HH$, consider
$x\in P\mono\backslash\C H^4$ and let $y$ be a point in $\C H^4$ lying
over the point of $P\mono\backslash\C H^4$ that corresponds to $x$. Write
$H$ for  the stabilizer of $y$ in $P\mono$ and
$N$ for the normal subgroup of $H$ generated by the reflections in the
short roots of $\Lambda$ whose mirrors pass through $y$. Choose a
small $H$-invariant neighborhood $U$ of $y$ and observe that the normality
of $N$ implies that the map $U\to U/H$ factors as the composition
$$
U\to U/N \to (U/N)/(H/N) = U/H\;.
$$
Observe that $U/N$ may be viewed as a complex manifold, since $N$ is
generated by reflections in orthogonal hyperplanes. Ignore the orbifold structure on
$U/N$, regarding it instead 
as neighborhood $V$ of $0$ in $\C^4$.  Then take the natural map
from
$V$ to $V/(H/N)$ to a neighborhood of $x$ in $P\mono\backslash\C H^4$ as
an orbifold chart for $P\mono\backslash\C H^4$.   It is easy to see that
these charts are compatible with each other.  Consequently they equip
$P\mono\backslash\C H^4$ with a complex analytic orbifold structure. For
$P\monotheta\backslash\C H^4$ we apply exactly the same
construction.   The only difference is that $N$ will be a product
of $(\Z/3)$'s rather than $(\Z/6)$'s. It is even true that under
this new orbifold structure, $P\monotheta\backslash\C H^4$ is a
manifold; this follows from
Lemma~\xref{thmTorsionInCongruenceSubgroup}. Finally, we note
that away from the image of $\HH$, the new orbifold structure
coincides with the old one.
\pararef{newOrbifoldStructures}

\proclaim{Theorem.}
Let $P\mono\backslash\C H^4$ and
$P\monotheta\backslash\C H^4$ be given the orbifold
structures just defined, and let 
$\stablemoduli$ and
$\mstablemoduli$ be given their natural orbifold
structures.  Then the two lower maps of \eqrefer{perdiagram} are orbifold 
isomorphisms.
\endproclaim
\pararef{orbifoldIsomorphismTheorem}

\para
We note that although $\stablemoduli$ is an orbifold and not a
manifold, its orbifold fundamental group $\pi_1(\stablemoduli)$
is trivial. The description of $\stablemoduli$ in
terms of $P\mono\backslash\C H^4$ shows that
$\pi_1(\stablemoduli)$ equals the orbifold fundamental group
$\pi_1(P\mono\backslash\C H^4)=P\mono$, modulo the relations
 ``reflections in the short roots of $\Lambda$ are
trivial.'' By \pararefer{propertiesForMgroup} and
\pararefer{thmEqualsAutPlusOfeIFourOne}, these reflections generate $P\mono$.  Therefore
$\pi_1(\stablemoduli)$ is trivial. In the same way, it follows from
\pararefer{thmCongruenceSubgroupGenerators} that the orbifold (indeed manifold)
$\mstablemoduli$ is also simply connected.

\para Here now is the strategy for the proofs of 
Theorems~\xref{maintheorem} and~\xref{orbifoldIsomorphismTheorem} to be given in 
sections~\xref{lemmasandproofs}--\xref{injectivityandsurjectivity}.
First, we have to establish the various claims made in this section and
the previous one that are required for our constructions to make
sense.  The material of section~\xref{smoothModuliSec} up to
\pararefer{monotheorem} is verified in order in
\pararefer{thmHermitianForm}--\pararefer{homomorphismsSurjective}.
This allows one to establish Lemma~\xref{localmonodromylemma}, which
gives the local monodromy of $\Lambda(\unithreefold_0)$ near a nodal surface. Then all
of section~\xref{mgroupsection} follows, justifying
\pararefer{monotheorem}. The remaining claims of section~\xref{smoothModuliSec} are 
subsumed in more precise statements in
section~\xref{stableModuliSec}. The foundational 
results of section~\xref{stableModuliSec} needed to verify that these statements make sense
are proved in
\pararefer{uniquenessOfTricuspidalSurface}--\pararefer{endproofOfFreenessAndProperness},
leaving only the proofs of
Theorems~\xref{maintheorem} and~\xref{orbifoldIsomorphismTheorem}.  These
occupy section~\xref{injectivityandsurjectivity}, which is divided
into four subsections.  The first subsection proves that
$\smoothmoduli\to P\mono\backslash(\C H^4\setminus \HH)$ is an
isomorphism, and consists of three steps: (1) a local computation,
Lemma~\xref{localimmersionlemma}, which relies on some material on
fractional differentials developed in section~\xref{fractionaldifferentialsection}; (2) the Torelli theorem of
Clemens and Griffiths for cubic threefolds;  (3) the existence of the
extension of $\permap$ to $\moduli\to\overline{P\mono\backslash\C
H^4}$, which is obtained in section~\xref{cuspidaldegenerations} by
studying the period map near cuspidal surfaces.  The second subsection
proves that
$\permap:(\stablemoduli\setminus\smoothmoduli)\map\proj\mono\backslash\HH$
is a homeomorphism by appealing to a theorem of Deligne and Mostow and
some facts proved in sections~\xref{localmonodromy}--\xref{mgroupsection}.  The
third subsection gives the remaining simple details to complete the
proof of Theorem~\xref{maintheorem}.  The fourth subsection proves
Theorem~\xref{orbifoldIsomorphismTheorem}.  \pararef{strategyofproof}


\section{Proofs of lemmas}
\secref{lemmasandproofs}

We now give the the statements and/or proofs of various lemmas
used in the two preceding sections.

\proclaim{Lemma.} 
Let $M$ be a free $\Eisenstein$-module whose underlying
$\Z$-module is equipped with a unimodular symplectic form 
$\sympl$. Then the function 
$$ 
\ip{x}{y}=-{\symplip{\theta x}{y}+\theta\symplip{x}{y}\over2}
\eqn\eqref{formulaForHinLemma}
$$
is an $\Eisenstein$-valued unimodular Hermitian form on $M$
(linear in its first argument and antilinear in its second).
\endproclaim \procref{thmHermitianForm}


\proof
We first we show that $\ip{x}{y}\in\Eisenstein$ for all $x,y\in
M$. Because $\sympl$ is $\Z$-valued, 
$\ip{x}{y}=a/2+\theta b/2$ for some $a,b\in\Z$. Since
$\Eisenstein$ consists of the numbers of this form with
$a\equivalent b\; (\dmod2)$, it suffices to show that $\symplip{\theta
x}{y}\equivalent \symplip{x}{y}\,(\dmod 2)$. This amounts to showing
that $\symplip{\theta x-x}{y}$ is even, which is true
because $\theta-1=2\w$.

\para
Next we show that $\ip{x}{y}=\overline{\ip{y}{x}}$. To do this,
consider $\sympl$ to be defined by $\R$-linear extension on all
of $M\tensor\R$, and $\ipblank$ to be
defined on all of $M\tensor\R$ by the formula
\eqrefer{formulaForHinLemma}. The imaginary part of $\ip xy$
is $-\theta\, \symplip{x}{y}/2$, which obviously changes sign under exchange
of $x$ and $y$.  The real part is $-\symplip{\theta x}{y}/2$, so it
suffices to show $\symplip{\theta x}{y}=\symplip{\theta y}{x}$:
$$\eqalign{
\symplip{\theta x}{y}
&=\symplip{\covtrans x-\covtrans^{-1}x}{y} 
 =\symplip{\covtrans x}{y}-\symplip{\covtrans^{-1}x}{y} \cr
&=\symplip{x}{\covtrans^{-1}y}-\symplip{x}{\covtrans y}   
 =\symplip{x}{\covtrans^{-1}y-\covtrans y} \cr
&=\symplip{x}{-\theta y} 
 =\symplip{\theta y}{x}.
\cr}$$
Now we prove $\C$-linearity in the
first variable. Since $\R$-linearity follows from that of
$\sympl$, it suffices to prove that $\ip{\theta x}{y}=\theta\ip
xy$:
$$\eqalign{
\ip{\theta x}{y}
&= -{1\over2}\Bigl(\symplip{-3x}{y}+\theta\symplip {\theta x}{y}\Bigr)
 = -{1\over2}\Bigl(-3\symplip{x}{y}+\theta\symplip {\theta x}{y}\Bigr)\cr
&= -{\theta\over2}\Bigl(\theta\symplip{x}{y}+\symplip {\theta x}{y}\Bigr)
 = \theta\ip xy.
\cr}$$
Finally, we show that $h$ is unimodular. 
Suppose $x\in M\tensor\R$ satisfies $\ip{x}{y}\in\Eisenstein$ for all
$y\in M$; we must prove $x\in M$. For each $y\in M$,
$\ip{x}{y}\in\Eisenstein$ implies that the imaginary part of
$\ip{x}{y}$ is an integral multiple of $\theta/2$, so that
$\symplip{x}{y}\in\Z$. Since $\sympl$ is unimodular, $x\in M$.

\subheading{Proof of Lemma~\xref{Zlemma}}

\para
Let $\xi\in H^3(T,\Z)$ and introduce the
temporary notation $\Theta = \sigma - \sigma^{-1}$, viewed as an
operator on cohomology.  On $H^3_\w(T,\C)$, $\sigma$ acts as scalar
multiplication by $\w$, and on $H^3_\wbar(T,\C)$ it acts by
$\wbar$. It follows that $\Theta(\xi_\w)=\theta\xi_\w$ and
$\Theta(\xi_\wbar)=-\theta\xi_\wbar$. By definition, $\hip\xi/\xi/=
-{1\over2}\symplip{\Theta\xi}{\xi}-{\theta\over2}\symplip{\xi}{\xi}$.
Using the antisymmetry of $\sympl$ and the properties of $\Theta$
given above, we find
$$\eqalign{
\hip \xi/\xi/
&= -\symplip{\theta\xi_\w-\theta\xi_\wbar}{\xi_\w+\xi_\wbar}/2\cr
&=-(\theta/2)\left[\symplip{\xi_\w}{\xi_\wbar}-
        \symplip{\xi_\wbar}{\xi_w}\right]\cr
&=-\theta\symplip{\xi_\w}{\xi_\wbar}.
\cr}$$
 Next we compute
$$
\hiptwo Z(\xi)/Z(\xi)/
=\theta\int_T \xi_\wbar\wedge\overline{\xi_\wbar}
=\theta\int_T \xi_\wbar\wedge\xi_\w
=\theta\,\symplip{\xi_\wbar}{\xi_\w}
=-\theta\,\symplip{\xi_\w}{\xi_\wbar}.
$$
This completes the proof.
\pararef{proofOfZlemma}

\subheading{Proof of Lemma~\xref{signatureLemma}}

\para
Suppose $F\in\smoothforms$. Since $\sigma$ is holomorphic, the
Hodge decomposition refines the eigenspace decomposition. It is
well-known that $H^{3,0}(T)$ and $H^{0,3}(T)$ vanish. Because
$\sigma$ is defined on $H^3(T,\R)$, $H^3_\w$ and $H^3_\wbar$
have the same dimension, so each has dimension~5.  In \S5 of \cite{CTDiscriminant}
it is proved that $H^{2,1}_\wbar$ is one dimensional.  In  
Theorem~\xref{hodgefiltrationtheorem}  we will prove this fact again using
suitable fractional differentials.  From this the Hodge numbers of $H^3_\wbar$  are
determined: 
$$
  \dim H^{2,1}_\baromega = 1, \qquad \dim H^{1,2}_\baromega = 4 .
$$
From the Hodge numbers we obtain the signature of $h'$.
Let $\phi$ be a nonzero vector in $H^{2,1}_\baromega(T)$.
Then the inner product $h'(\phi,\phi)$ is a sum of integrals
which in local coordinates have the form
$$
   \theta \int_T |f|^2 dx\wedge dy \wedge \bar dz
            \wedge \bar dx \wedge \bar dy \wedge dz
   =
   \theta \int_T |f|^2 dx\wedge \bar dx 
             \wedge dy \wedge \bar dy
             \wedge dz \wedge \bar dz .
$$
The last expression is negative, so $h'$ is negative-definite on
$H^{2,1}_\baromega$; a similar computation shows that it is
positive-definite on  $H^{1,2}_\baromega$.  Consequently the signature of
$h'$ on $H^3_\wbar$ is $(4,1)$.
\pararef{signature}



\proclaim{Lemma.}
Both maps of \eqrefer{moduloThetaHomomorphisms} are surjective.
\endproclaim
\procref{homomorphismsSurjective}

\proof
It is trivial to check that $\nu$ takes both possible
values. Since $\aut(\vs)$ is generated by reflections in its
elements of nonzero norm, it suffices to show that such
reflections are induced by automorphisms of $\Lambda$. 
One verifies directly that each nonisotropic vector of $\vs$ is
the image of a lattice vector of norm $\pm1$ or $\pm2$. 
Biflections (order 2 reflections) in such  vectors 
preserve $\Lambda$ and reduce to the desired automorphisms of $\vs$.

\proclaim{Lemma.}
The cubic form $F=X_0^3-X_1X_2X_3$ represents the unique closed
$SL(4,\C)$ orbit in $P(\semistableforms-\stableforms)$.
\endproclaim
\pararef{uniquenessOfTricuspidalSurface}

\para
\proof
By p.~51 of \cite{MumfordEnseignement} or \S19 of \cite{Hilbert}, $F$ 
is semistable, since
$S$ has three cusps and no other singularities. Now suppose
$F'\in\semistableforms-\stableforms$; we will show that the
closure $K$ of its orbit contains $F$. Since
$F'\notin\stableforms$, the surface $S'$ has an $A_2$ 
singularity at a point $p$. We may choose affine coordinates $x_0$, $x_2$,
$x_3$ centered at
$p$, such that $S$ has local equation
$Q(x_0,x_2,x_3)+C(x_0,x_2,x_3)$, where $Q$ (resp. $C$) is a
quadratic (resp. cubic) form. Since $p$ is an $A_2$ 
singularity, $Q$ is  a quadratic form of rank $2$. Therefore,
by a linear change of coordinates we may suppose that $Q=-x_2x_3$. 
Passing to homogeneous
coordinates, we find that  $F'=-X_1X_2X_3+C(X_0,X_2,X_3)$. We let
$t$ approach $\infty$ in the 1-parameter group
$\diag[1,t^2,t^{-1},t^{-1}]$.  In the limit all terms of $C$ 
vanish except
the $X_0^3$ term, say $bX_0^3$.  Therefore $K$ contains the
form $bX_0^3-X_1X_2X_3$. If $b=0$ then a further degeneration
shows that $0\in K$, which  is impossible. Therefore
$b\neq0$.  By rescaling $X_0$ we may take $b=1$, which proves
$F\in K$.

\subheading{Proof of Lemma~\xref{framedmodthetalemma}}

\para
Choose a basepoint $F$ of $\smoothforms$. Our goal is to show
that the kernel of the monodromy representation of
$\pi_1(\smoothforms,F)$ on $L(S)$ coincides with the kernel of
the monodromy representation on the five-dimensional vector
space $\vs(T)=\Lambda(T)/\theta \Lambda(T)$ over $\F_3$. The
first step is to
build a 5-dimensional $\F_3$ vector space from $L(S)$; we
shall call it $V(S)$. To this end let
$L_0(S)$ be the primitive cohomology $\eta(S)^\bot$ in $L(S)$;
it is well-known to be a copy of the root lattice $-E_6$ of
determinant $3$.  Write $L_0'(S)$ for the lattice dual to
$L_0(S)$ and recall from \cite{Bourbaki} VI~\S4, exercise 2, that
$L_0(S)/3L_0'(S)$ is a nondegenerate quadratic space of
dimension five over
$\F_3$. This is our space $\vs(S)$.  Inner products are computed by reducing the
inner products of lattice vectors modulo $3$.  One observes that
$\aut(L(S),\eta(S))$ acts faithfully on both $L_0(S)$ and $\vs(S)$.
\pararef{proofCoversCoincide}

\para
Now we show that the monodromy representations of
$\pi_1(\smoothforms,F)$ on $\vs(S)$ and $\vs(T)$ are
equivalent. By the discussion of
\pararefer{propertiesForMgroup}, the fundamental group is the
image of the Artin group $\artin(E_6)$ with the six standard
generators mapping to meridians $\mu_1,\ldots,\mu_6$ of
$\polydiscr$. The monodromy action on $L(T)$ is well-known: each
$\mu_i$ maps to the reflection in some root $r_i$ (a norm $-2$
vector) of $L_0$. Furthermore, the $r_i$ may be taken to form a
simple root system of type $-E_6$, so that $r_i$ and $r_j$ have
inner product $1$ or $0$ according to whether the corresponding
vertices of the Dynkin diagram a joined or not. The images $\bar
r_i$ of the $r_i$ in $\vs(S)$ span $\vs(S)$ and have the same
mutual inner products as the $r_i$, and all of them have
norm $1$.  Now, by 
\pararefer{rootInnerProducts} the $\mu_i$ act on $\Lambda(T)$ by
hexflections in lattice vectors $r_i'$ of norm $1$, with
pairwise inner products given by the same rule. Therefore the $\mu_i$
act on $\vs(S)$ by the biflections in the images $\bar r_i'$ of
the $r_i'$. Since the $\bar r_i'$ have the same inner product
matrix as the $\bar r_i$, the map $\bar r_i\mapsto\bar r_i'$ defines an
isometry from $\vs(S)$ to $\vs(T)$. The monodromy
representations on $\vs(S)$ and $\vs(T)$ are now visibly
equivalent.  
\pararef{endProofCoversCoincide}

\subheading{Alternate proof (sketch) for Lemma~\xref{framedmodthetalemma}}

\para A longer but more satisfying proof can be given by constructing
a natural isometry from $\vs(S)$ to $\vs(T)$ that identifies the
monodromy representations of $\pi_1(\smoothforms,F)$ on them.  We
begin by building a map $k:L_0(S)\to \vs(T)$. If $\alpha\in L_0(S)$,
consider its Poincar\'e dual $\hat\alpha\in H_2(S,\Z)$. Since
$\hat\alpha$ is a primitive homology class of $S\sset T$ and $T$ has
no primitive second homology, $\hat\alpha$ bounds a 3-chain
$\hat\beta$ in $T$. Since $\hat\beta$, $\sigma_*^{-1}(\hat\beta)$ and
$\sigma_*(\hat\beta)$ all have the same boundary,
$\hat\gamma=\sigma_*^{-1}\hat\beta-\sigma_*\hat\beta$ represents an
element of $H_3(T,\Z)$. We let $\gamma\in \Lambda(T)=H^3(T,\Z)$ be the
Poincar\'e dual of $\hat\gamma$, and define $k(\alpha)$ as the
reduction of $\gamma$ modulo $\theta$. Despite the ambiguity in the
choice of $\hat\beta$, this map is well-defined, because if we
replaced $\hat\beta$ by some other chain $\hat\beta'$ then the
corresponding $\gamma'$ would differ from $\gamma$ by an element of
$(\sigma^*-(\sigma^*)^{-1}) \Lambda(T)=\theta \Lambda(T)$. One can
show by an explicit geometric construction and computation of
intersection numbers that $k$ vanishes on $3L_0'(S)$ and that the
induced map $\bar k:\vs(S)=L_0(S)/3L_0'(S)\to \vs(T)$ is an isometry.
In fact, once one shows that $k$ is non-zero, simple equivariance and
irreducibility arguments force $k$ to descend to an isomorphism $\bar
k:\vs(S)=L_0(S)/3L_0'(S)\to \vs(T)$ of $\pi_1(\smoothforms,
F)$-modules.   A comparison of the determinants of $\vs(S)$ and
$\vs(T)$ then shows that $\bar k$ must be an isometry.
\pararef{alternateProofCoversCoincide}



\subheading{Proof of Lemma~\xref{freeAndProper}}


By Lemma~\xref{framedmodthetalemma} the claims for
$\fstableforms$ follow from those for $\mstableforms$.  Since the
properness of the $G$-action on $\mstableforms$ follows from
that of the action on $\stableforms$, it suffices to show
that $G$ acts freely on $\mstableforms$.  Freeness follows from the next
two lemmas.

\proclaim{Lemma.} Let $m\in\mstableforms$ lie over $F\in\stableforms$.
Then $m$ determines: 

\item{i.} A bijection $b_m$ between the set of
nodes $\{p_1,\cdots,p_k\}$ (if any) of $S$ and a set
$\{b_m(p_1),\cdots,b_m(p_k)\}$ of mutually orthogonal sublattices of $L$,
each generated by a root $r_i$.  We write $R_i=b_m(p_i)$ and $R =
R_1\oplus\cdots\oplus R_k$.

\item{ii.} An isometric embedding 
$i_m:(L(S),\eta(S))\map (L,\eta)$ with image the orthogonal complement of
$R$.

\endproclaim
\procref{markednodallemma}

\proof If $m\in\msmoothforms$, then the first assertion is vacuous and
the second assertion is the definition of a marked smooth form.  If
$m$ lies over $F\in\stablepolydiscr^k$, $k>0$, then $m$ may be
regarded as a choice of component $C$ of the preimage in $\msmoothforms$
of $W-\polydiscr$, where $W$ is as in \pararefer{definitionFox}.  Picard-Lefschetz
theory tells us first that
$L(\unisurface)|_{W\setminus\polydiscr}$ has mutually orthogonal rank-one local
subsystems  of vanishing cycles, $\VV_1,\cdots,\VV_k$, each in
natural one-to-one correspondence with the nodes $p_1,\cdots,p_k$ of
$S$, and second that there is a constant subsystem $\II = \VV\perp$ of rank $7-k$ of
invariant cohomology, where $\VV = \VV_1\oplus\cdots\oplus\VV_k$ is
the vanishing cohomology.  Moreover, there is a deformation retraction
$r:\unisurface|_{W}\map S$ such that the constant system $\II$ is trivialized by the
isomorphism
$(W\setminus\polydiscr)\times L(S)\map\II|_{W\setminus\polydiscr}$
defined by $(F_1,x)\map i_{F_1}^*r^*x$, where $F_1\in
W\setminus\polydiscr$ and $i_{F_1}:S'\map\unisurface$ is the inclusion
of the fiber $S'$ over $F_1$.  We choose $F_1\in W-\polydiscr$, and a
marking $m_1:(L(S_1),\eta(S_1))\to(L,\eta)$ of $F_1$ that lies in $C$.
Then $C$ consists of the markings $m_2:(L(S_2),\eta(S_2))\to(L,\eta)$
of forms $F_2\in W-\polydiscr$ that may be obtained by parallel
transport of $m_1$ along paths in $W-\polydiscr$.  Since parallel
translation preserves every subsystem, it follows that
$m_1^{-1}m_2(\VV_i) = \VV_i$ for $i=1,\cdots,k$, and $m_1^{-1}m_2|_\II
= id$. Therefore $m_1(\VV_i)=m_2(\VV_i)$ for each $i$.  We denote this
common value by $b_m(p_i)$ and observe that these give mutually
orthogonal sublattices of $L$, each generated by the image of a
vanishing cycle, hence generated by a root.  This proves the first
assertion of the lemma.  The second assertion follows because $m_1$
and $m_2$ give the same isometric embedding of $L(S)$ in $L$.  Thus we
take $i_m$ to be be the common value of $m_1$ and $m_2$.

\para
\remark
The previous lemma suggests that a point $m\in\mstableforms$
lying over $F\in\stablepolydiscr$ should be described by a pair $(b_m,i_m)$.  This is
almost the case.  The only difficulty is that $b_m$ and $i_m$ cannot in general
be prescribed
independently.  Since a complete discussion would take us too far afield, we 
mention only the fact that for $k=1,2,3$, $i_m$ does determine $b_m$.  For $k=4$,
this is not the case, and in addition $b_m$ must satisfy some relations imposed
by $i_m$.
\pararef{markednodalremark}



 



\proclaim{Lemma.}
Suppose $F\in\stableforms$ and that $g\in G$ fixes $F$, acting
trivially on $H^2(S,\Z)$. If $F$ is singular, suppose in addition
 that $g$ fixes each node of $S$. Then $g$ is the identity.
\endproclaim
\procref{surfaceAutomorphismsLemma}

\para
\proof
It suffices to prove that $g$ induces the identity on $S$.  To this end, we
will use some easily verified facts about Poincar\'e duality on $S$ and the
homology classes of the lines on $S$.  First, since $S$ is a rational
homology manifold, there is a Poincar\'e duality isomorphism $H^2(S,\R)\cong
H_2(S,\R)$.  
As in
\cite{Zeeman}, this isomorphism is actually defined on the level of $\Z$-modules:
it is the transport to $S$ via  a resolution of singularities $\bar S
\map S$ of the standard Poincar\'e duality isomorphism on $\bar S$.
More precisely, it is the composition $H^2(S)\map
H^2(\bar S)\map H_2(\bar S)\map H_2(S)$, where $\bar S
\map S$ is the blow-up of the nodes.
 This map is injective, and its image has
index 1, 2, 4, 8 or 8 according to whether $S$ has 0, 1, 2, 3 or 4 nodes.
\pararef{endproofOfFreenessAndProperness} 

Let $l$ be a line on $S$, and let $[l]$ denote its homology class in
$H_2(S,\Z)$.  Then there are three cases to consider:


\item{1.} The line $l$ does not contain a node of $S$.  Then $l$ has
self-intersection 
$-1$ in the usual sense: the Poincar\'e dual $\lambda$ of its homology class has square
$-1$.  It follows that the line is rigid in its homology class: it is the unique algebraic
curve in $[l]$.

\item{2.} The line $l$ contains exactly one node of $S$.  Then $l$ still has
negative  self-intersection, and is rigid in its homology class.  More
precisely, there is a cohomology class $\lambda$ with $\lambda^2=-2$ that is Poincar\'e dual to 
$2 [l]$.  It is easy to verify that $l$ itself is not in the image of
the Poincar\'e duality map $H^2(S,\Z)\to H_2(S,\Z)$.  See the related example on p.
181 of 
\cite{Zeeman}.

\item{3.}  The line $l$ contains two nodes of $S$.  Then $l$ has zero
self-intersection.   More precisely, there is a cohomology class $\lambda$
which is Poincar\'e dual to $2 [l]$, and $\lambda^2 = 0$.  


  We now return to the proof 
that $g$ is the identity on $S$.  The key point is that $g$ preserves all the
lines of $S$:  lines of type 1 or 2 are preserved because they are rigid in
their homology class, and 
$g$ acts as the identity on $H^2(S,\Z)$.  Lines of type 3 are preserved
because $g$ fixes each node. 

To complete the proof, we examine cases according to
singularities of $S$.  First, if $S$ is smooth, and if
$l_1,\cdots,l_6$ are six disjoint lines on $S$, then $S$ can be blown
down to $\P^2$ with the $l_i$ mapping to points $p_i$ in general
position.  Since $S\setminus (l_1\cup\cdots\cup l_6) \isomorphism
\P^2\setminus \{p_1,\cdots,p_6\}$, $g$ induces an automorphism of
$\P^2 \setminus \{p_1,\cdots ,p_6\}$ which by Hartogs' theorem extends
to an automorphism of $\P^2$.  This extension fixes six points in
general position, hence is the identity of $\P^2$, and so $g$ is the
identity on $S$.  If $S$ has one node $q$, then projection from $q$
defines a birational map of $S$ to $\P^2$ that blows $q$ up to a
non-singular conic $C\subset\P^2$ and contracts the six lines
$l_1,\cdots,l_6$ through $q$ to points $p_1,\cdots,p_6$ on $C$.  The
map $g$ of $\P^3$ preserving $S$ again induces  a map of $\P^2
\setminus \{p_1,\cdots,p_6\}$ preserving $C$.  It extends as before
to an automorphism of $\P^2$ preserving $C$ and fixing
$p_1,\cdots,p_6$, hence is the identity.  If $S$ has $k=2,$ 3 or 4
nodes then we choose one, say $q$; projecting $S$ to $\P^2$ from $q$ as
before blows $q$ up to a non-singular conic $C\subset\P^2$.  Now there
are only $7-k$ lines in $S$ through $q$.  The map induced by $g$
extends to all of $\P^2$, preserves $C$, and fixes the corresponding
$7-k$ points on $C$.  Since $7-k\ge 3$, this map is the identity on
$C$, hence on $\P^2$, hence $g$ is the identity on $S$.

\para
\remark
The only stable surface admitting a nontrivial automorphism
acting trivially on cohomology is the 4-nodal surface. The
nontrivial automorphisms which act trivially there are just
those that permute the nodes in two orbits of size two.


\section{Topology of nodal degenerations}
\secref{localmonodromy}

\para 
In order to extend the period map to the various spaces
considered in \eqrefer{tableofmodulispaces} and to prove our
Theorem~\xref{maintheorem}, we must understand the behavior of
the period map near cubic forms $F_0\in\semistablepolydiscr$.  To this
end we must understand the topology of the family
$\unithreefold\mapright{\pi}\forms$ of \pararefer{universalfamilies}
near $F_0$, as well as the local structure of the
sheaf $\Lambda(\unithreefold)$.  In this section we
will study these problems for  $F_0\in\stablepolydiscr$
(the nodal case).  The cuspidal case will be treated in
\S\xref{cuspidaldegenerations}.



\para
Consider first a surface with a single node defined by $F_0\in\stablepolydiscr^1$.  Then
$F_0$ has a fundamental system of neighborhoods $U$ in $\forms$ of the form $U =
U_0\times D$ where $U_0$, biholomorphic to a ball, is a neighborhood
of $F_0$ in $\stablepolydiscr^1$ and $D$ is biholomorphic to the disk
$\{z:|z|<1\}\subset\C$.  The families $\unisurface|_U$ and
$\unithreefold|_U$ are topologically equivalent as families over $U$ to
$U_0\times(\unisurface|_D)$ and $U_0\times(\unithreefold|_D)$,
respectively.  See \S I1.11 of \cite{GoreskyMacPherson}.  
Because of this it will be
enough to study families parametrized by a disk transverse to
$\stablepolydiscr^1$ at $F_0$.  Let $p\in \P^3$ be the unique singular
point of $F_0$.  Then there is a closed ball $B$ centered at $p$ and an
$\epsilon>0$ so that all fibers $\unisurface_t$ are transverse to
$\partial B$ for $t\in \bar D_\epsilon$, where $D_\epsilon =
\{|t|<\epsilon\}\subset D$.  Moreover, there is a decomposition
$$
\unisurface|_{ D_\epsilon} = \unisurface' \cup \unisurface'',
$$ where $\unisurface' =( \unisurface|_{ D_\epsilon})\cap (D\times B)$
and $\unisurface'' = (\unisurface|_{ D_\epsilon})\cap( D\times
\overline{\P^3\setminus B})$, such that $\unisurface''$ is
topologically trivial, and such that the interior of $\unisurface'$ is
biholomorphically equivalent to a neighborhood of the origin in the
family
$$
x^2 + y^2 + z^2 = t.
\eqn
  \eqref{aonedegen}
$$
We take $F$ to be the cubic form associated to a point of $D_\epsilon^*$. Then the family $\unisurface|_{D_\epsilon^*}$ over the punctured disk
$D_\epsilon^*$ is homotopy equivalent to the family over the circle with fiber $S$
and with geometric monodromy $\phi:S\map S$, where $S = S' \cup S''$, 
$S'=S\cap B$, $S''=S\cap\overline{\P^3-B}$, $\phi|_{S''} = id$,
$S'$ is the Milnor fiber of $x^2 + y^2 + z^2 = 0$, and $\phi|_{S'}$ is the monodromy of the
corresponding Milnor fibration.  See
\S3 of \cite{DeligneSGA} or \S2 and \S3 of \cite{LooijengaLondon} for more details.
\pararef{localaone}

\para
Given this discussion, we can understand the topology of $\unithreefold|_D$,
where
$D$ is a disk transverse to $\stablepolydiscr^1$ as above.  Pulling back along the
projection
$\pi:\unithreefold|_D\map D\times
\P^3$, we obtain a decomposition 
$$
\unithreefold|_{D_\epsilon} = \unithreefold' \cup \unithreefold'',
\eqn
\eqref{singlecyclicfamily}
$$
where $\unithreefold''$ is topologically trivial and the interior of $\unithreefold'$
is biholomorphic to a neighborhood of the origin in the family
$$
x^2 + y^2 +z^2 + w^3 = t\;,
\eqn
  \eqref{atwodegen}
$$ 
with $\sigma$ acting by multiplication of $w$ by $\omega$.  Moreover, the
family $\unithreefold|_{D_\epsilon^*}$ over the punctured disk is
homotopy equivalent to the family over the circle with fiber $T$ and
monodromy $\psi:T\map T$ where $T = T'\cup T''$, $\psi|_{T''} = id$,
$T'$ is diffeomorphic to the Milnor fiber of $x^2 + y^2 + z^2 + w^3 =
0$, and $\psi|_{T'}$ is the monodromy of the corresponding Milnor
fibration.  Recall that the {\sl vanishing homology} of the family
$\unithreefold|_D$ is the image of $H_3(T',\Z)$ in $H_3(T,\Z)$ and
that the {\sl vanishing cohomology} $V$ is the subspace of $H^3(T,\Z)$
which is Poincar\'e dual to the vanishing homology.  The space $T'$
itself is the space of (geometric) vanishing cycles, cf. \S3 of
\cite{DeligneSGA}.  Let $\Psi$ denote the monodromy transformation
$\psi^*$ on cohomology. It is clear that $\Psi$ acts $\Eisenstein$-linearly
on $\Lambda(T)$, and that $\covtrans$ preserves $V$, so that $V$ is an
$\Eisenstein$-submodule of $\Lambda(T)$.
\pararef{localatwo}        


  



\proclaim{Lemma.}  Let $F_0\in\stablepolydiscr^1$. Then the vanishing
cohomology $V$ for the family \eqrefer{singlecyclicfamily} has rank
one as an $\EE$-submodule of $\Lambda(T)$, with a generator $\delta$
satisfying $h(\delta,\delta) = 1$.  The monodromy tranformation $\Psi$
acts on $V$ by multiplication by $-\omega$ and on
the subspace $V\perp \subset \Lambda(T)$ by the identity. Therefore
$\Psi$ is the complex $(-\w)$-reflection in $\delta$.
\endproclaim
\procref{localmonodromylemma}

\para \proof\ The monodromy tranformation $\Psi$ on cohomology is $\psi^*$,
where $\psi:T\map T$ and
$T = T' \cup T''$ and $\psi$ preserves the decomposition, as in \pararefer{localatwo}.
Now $T'\cap T'' = \partial T'$ is the boundary of the Milnor fiber, and for the singularity
\eqrefer{atwodegen} it is well-known to
be a homology sphere, and in fact is a sphere.  See the first example in \S9 of 
\cite{Milnor}. From the Meyer-Vietoris sequence it is then clear that 
$$
H^3(T,\Z) = H^3(T',\Z) \oplus H^3(T'',\Z) = V\oplus V\perp
$$
is a direct sum decomposition over $\Z$, orthogonal with respect to
the symplectic pairing, and that $\Psi$ acts as the
identity on the second summand.  The action of $\Psi$ on the first summand
is well known, and can be derived  from the Sebastiani-Thom theorem
\cite{ST}. Note first that the space $V(k)$ of vanishing cycles for the
degeneration of zero-dimensional varieties $z^k = t$ is the $\Z$-module
spanned by the differences of roots $a_i - a_{i+1}$.   Taken with a
counterclockwise ordering of the solution set $\sett{ a_i(t) }{ i =
0\ldots k-1}$ of
$z^k = re^{i\theta}$ on the circle of radius $r^{1/k}$, the monodromy
transformation on $\VV(k)$ is given by cyclic shift: $\Psi(a_i -
a_{i+1}) = a_{i+1} - a_{i+2}$ (indices  viewed modulo $k$).
For a sum of powers $z_1^{k_1} + \cdots + z_n^{k_n}$, the space of vanishing cycles
is isomorphic to the tensor product $V(k_1) \otimes \cdots \otimes V(k_n)$ and
the monodromy transformation is the tensor product of the monodromy
transformations:
$$
  \Psi = \Psi_1 \otimes \cdots \otimes \Psi_n .
$$
In our case we may write the monodromy transformation as
$$
  \Psi = (-1)\otimes(-1)\otimes(-1)\otimes\omega .
$$
Thus $V$ has rank 2 and $\Psi$ has order six. The action of
$\sigma:T\to T$ with respect to this basis of $V$ is evident from
\eqrefer{atwodegen}, namely
$$
\sigma = 1\otimes 1\otimes\ 1\otimes\omega\;.
$$
Thus $\Psi$ is a complex $(-\w)$-reflection.  Since this module is a direct
summand of $\Lambda(T)$, any generator
$\delta$ (there are six of them) must satisfy $h(\delta,\delta) = \pm 1$.  At the end
of the next paragraph we will show that $h(\delta,\delta)=1$, thereby concluding the
proof of the lemma.
\pararef{prooflocalmonodromylemma}


\para
Suppose now that $F_0\in\stablepolydiscr^k$, where $k = 2, 3, 4$, so that
$F_0$ has
$k$ nodes and no other singularities.  This situation is a straightforward
generalization of the case $k=1$ which has just been considered. A
transversal to
$\stablepolydiscr^k$ at $F_0$ is of the form
$D_\epsilon^k$, and it parametrizes a family $F_{t_1,\cdots,t_k}$ which in $k$
disjoint balls is defined by equations of the form \eqrefer{aonedegen}.  The
family $\unithreefold|_{D_\epsilon^k}$ decomposes as 
$$
\unithreefold|_{D_\epsilon^k} = \unithreefold'\cup \unithreefold '',
\eqn
\eqref{multiplecyclicfamily}
$$   
where $\unithreefold''$ is topologically trivial, and the interior of
$\unithreefold'$ is a disjoint union of $k$ open sets, each
biholomorphic to a neighborhood of the origin in the family
\eqrefer{atwodegen}.  Moreover, the family $\unithreefold|_{D_\epsilon^k}$ is
homotopy equivalent to the family over the torus $(S^1)^k$, where the monodromy
$\psi_i:T\map T$ corresponding to the $i$-th factor is supported in  the $i$-th 
 component of $T'$.   Reasoning as in
\pararefer{localatwo} and \pararefer{prooflocalmonodromylemma}, the space
$V\subset H^3(T,\Z)$ of vanishing cycles is of the form $V =
V_1\oplus\cdots\oplus V_k$, where the sum is orthogonal with respect
to $h$, where each $V_i$ is a primitive $\Eisenstein$-submodule of
$H^3(T,\Z)$ of rank one, and where the $i$-th monodromy tranformation $\Psi_i$
acts as multiplication by $-\omega$ on $V_i$. If we choose a generator
$\delta_i$ of $V_i$, it is clear that $h(\delta_i,\delta_i) = \pm 1$.
This value is independent of the choice and also independent of
$i$.  Since the signature of $h$ is $(4,1)$ and there can be up to $4$
independent vanishing cycles $\delta_i$ we see that
$h(\delta_i,\delta_i) = - 1$ is impossible, and so
$h(\delta_i,\delta_i) =1$ for all $i$.  This completes the proof of
Lemma~\xref{localmonodromylemma} and also of the following lemma:
\pararef{multiplenodes}

\proclaim{Lemma.} Let $F_0\in\stablepolydiscr^k$.  The vanishing
cohomology $V$ of the family \eqrefer{multiplecyclicfamily} splits as
an $h$-orthogonal direct sum $V = V_1\oplus\cdots\oplus V_k$ where
each $V_i$ is a free $\Eisenstein$-submodule of $\Lambda(T)$ of rank
one generated by an element $\delta_i$ with $h(\delta_i,\delta_i) =
1$. The monodromy transformation $\Psi_i$ corresponding to the $i$-th
factor of $D_\epsilon^k$ acts on $\Lambda(T)$ by the
$(-\omega)$-reflection in $\delta_i$, and the local monodromy group at
$F_0$ is isomorphic to $(\Z/6\Z)^k$, generated by
$(-\omega)$-reflections in the $\delta_i$.
\endproclaim
\procref{multiplelocalmonodromylemma}

\para 
It is easier to give a concrete description of a framed stable form
than of a marked stable form. Suppose $Pf\in\fstableforms$ lies over
$F\in\stablepolydiscr^k$. By mimicking the proof of
Lemma~\xref{markednodallemma}, with the local system
$\Lambda(\unithreefold)$ in place of $L(\unisurface)$, one shows that
$Pf$ determines (i) a bijection $b_{Pf}$ between the nodes $p_i$ of
$S$ and a collection of mutually orthogonal sublattices $R_i$ of
$\Lambda$, each generated by a short root, and (ii) an isometric
embedding $i_{Pf}$ of $\Lambda(T)$ into the orthogonal complement in
$\Lambda$ of $\oplus R_i$, determined up to scalar
multiplication. Here, by $\Lambda(T)$ we mean $H^3(T,\Z)$ equipped
with the hermitian $\Eisenstein$-module structure defined by the same
formulas as for smooth cubic forms; the arguments of
\pararefer{prooflocalmonodromylemma} and \pararefer{multiplenodes}
show that $\Lambda(T)\isomorphism\Eisenstein^{4-k,1}$. This situation
is simpler than the one for marked forms because $\Lambda(T)$ and all the $R_i$ are
summands of $\Lambda$, and so $P\Aut\Lambda$ acts
transitively on pairs $(b,i)$ satisfying conditions (i) and (ii).
Therefore the various framings of $F$ are in one-to-one correspondence with
such pairs. When  $k=1$, the situation is even simpler: the
framings of $\Lambda$ are just the isometric embeddings
$f:\Lambda(T)\to\Lambda$ modulo scalar multiplication.  Consequently we
can explicitly describe a neighborhood in $\fstableforms$ of a
framed 1-nodal form. For $F_0\in\stablepolydiscr^1$ let $U = U_0\times
D$ be a neighborhood of $F_0$ as in \pararefer{localaone}, let
$\VV\subset \Lambda(\unithreefold|_{U\setminus\polydiscr})$ be the
local system of vanishing cohomology, and let $\II = \VV\perp$ be the
local system of invariant cohomology.  The deformation-retraction
of $\unithreefold|_U$ to $T_0$ induces an isomorphism
$\II\isomorphism(U-\polydiscr)\times\Lambda(T_0)$. Then we have
the following result, whose proof is easy.
\pararef{concreteframings}

\proclaim{Lemma.} Let $F_0$ and $U$ be as above, and suppose
$Pf_0\in\fstableforms$ lies over ${F_0}$ and is represented by the
embedding $f_0:\Lambda(T_0)\to\Lambda$.  Then the component $W$ of
$\fstableforms|_U$ containing $Pf_0$ is $W_0 \cup (W \setminus W_0)$,
where $W_0$ is the component of $\fstableforms|_{U_0}$ containing
$Pf_0$ and $W \setminus W_0$ consists of those $Pf\in\fsmoothforms$
lying over forms $F\in U-U_0$ such that $f|\II_F$ agrees with $f_0$ up
to a scalar factor.
\endproclaim
\procref{stableframeslemma}        








\section{Fractional differentials and extension of the period map }
\secref{fractionaldifferentialsection}

The purpose of this section is to concretely identify the extension of $\permap$ to
the set of nodal surfaces. This requires  reformulating our
description of
$H^3(T,\C)$ and the various structures on it in terms of suitable differentials on
$\P^3$, and an explicit understanding of the period map in terms of these
differentials.  Fractional differentials for double covers of $\P^3$ were
studied by Clemens in \cite{Clemens}.  Their theory, including the relation
of the filtration by order of pole to the Hodge filtration, parallels
that of rational integrals on projective introduced by Griffiths in \cite{Griffiths}.
The same is true of the theory for general cyclic covers, despite
some additional structure (eigenvalue decompositions) and subtleties
($A_k$ singularities occur for $k$-fold covers when the branch locus
acquires a node).

\para
For $F\in\smoothforms$, let
$\locsyst_F$, or simply
$\locsyst$,  denote the sheaf over
$\P^3$ defined by the following exact sequence of sheaves with $\sigma$-action:
$$
0\map\Z\map p_*(\Z)\map\locsyst\map 0.
\eqn
\eqref{shortexact}
$$
The subsheaf $\Z$ is the one on which $\sigma$ acts
as the identity. It is easy to see that $\locsyst|_{\P^3
- S}$ is a local system with fiber $\Z^2$ and that
$\sigma$ acts on it by an automorphism of order $3$. Defining the
action of $\w\in\Eisenstein$ on $\locsyst|_{\P^3\setminus S}$ by
this action of $\sigma$, we see that the sheaf has
the structure of a local system of rank one
$\Eisenstein$-modules. Furthermore, the positive generator of
$\pi_1(\P^3\setminus S)$ acts as multiplication by $\w$.  It is
also easy to see that the sheaf $\locsyst$ is concentrated on
$\P^3
\setminus S$, namely $\locsyst = i_!(\locsyst|_{\P^3\setminus
S})$, where $i:\P^3\setminus S\map \P^3$ is the inclusion and
$i_!$ denotes, as usual, extension by zero.  See, for example, lecture 8 of
\cite{CKM}.  Since
$p:T\map \P^3$ is a finite map, $H^3(T,\Z)\cong
H^3(\P^3,p_*(\Z))$.  From the long exact sequence associated
to \eqrefer{shortexact}, the vanishing of $H^3(\P^3,\Z)$, and the
injectivity of $H^4(\P^3,\Z)\map H^4(T,\Z)$, one obtains an
isomorphism $H^3(\P^3,p_*(\Z))\cong H^3(\P^3,\locsyst)$.
Combining these two isomorphisms we obtain the first natural isomorphism
of $\Eisenstein$-modules displayed below.  The second isomorphism results from the
concentration of $\locsyst$ on $\P^3\setminus S$:
$$
H^3(T,\Z)\cong H^3(\P^3,\locsyst)\cong H^3(\P^3\setminus S, \locsyst).
\eqn
\eqref{seconddescrip}
$$
Of course we also have $H^3(T,\C)\isomorphism
H^3(\P^3,\locsyst\tensor\C)\isomorphism H^3(\P^3\setminus S,\locsyst\tensor\C)$.  
The action of
$\sigma$ decomposes $\locsyst\tensor\C$ into its eigensheaves 
$\locsyst_{\w}$ and $\locsyst_{\wbar}$, consequently giving us alternate
descriptions of $H^3_\w(T)$ and $H^3_\w(T)$ by local systems on $\P^3$.  In
particular $H^3_\wbar(T,\C)\cong H^3(\P^3\setminus S,\locsyst_\wbar)$.
\pararef{locsystem}

\para
Similar considerations apply to sheaf cohomology.  For the sheaves of holomorphic
differential forms $\Omega^j_T$, $j=0,1,2,3$ we have that $H^i(T,\Omega^j)_\wbar
\cong H^i(\P^3,p_*(\Omega^j_T)_\wbar)$. Similarly, for the sheaves 
$\Omega^j_T(\infty S)$ of meromorphic differential $j$-forms on $T$ with poles
(of arbitrary order) only on $S$, we have $H^i(T,\Omega^j_T(\infty S))_\wbar \cong
H^i(\P^3,p_*(\Omega^j_T(\infty S))_\wbar)$.  The sheaves
$p_*(\Omega^j_T)_\wbar$ and $p_*(\Omega^j_T(\infty S))_\wbar$ are no longer
concentrated on $\P^3\setminus S$.  In order to describe these sheaves, let us
introduce the temporary notation $\BB = i_*(\locsyst_\wbar|_{\P^3\setminus S}\tensor
\Omega^j_{\P^3}|_{\P^3\setminus S})$, and  define the following subsheaves of
$\BB$.  First, let 
$\Omega^j_{\P^3}(F^{-1/3})$ denote the subsheaf of
$\BB$ defined by the conditions
(a) $\Omega^j_{\P^3}(F^{-1/3})|_{\P^3\setminus S} = \BB|_{\P^3\setminus S}$, (b) the
stalk of
$\Omega^j_{\P^3}(F^{-1/3})$ at a point $P$ of $S$ 
consists of the
elements of the stalk  of $\BB$ at $P$ which are of the form
$$ 
\alpha w^{2/3} + \beta\wedge dw/w^{1/3}\,,
\eqn
\eqref{twothirddifferentials}
$$ 
where $w$ is a local defining equation of $S$
at $P$, and (c) $\alpha$, $\beta$ are in the stalk of $\Omega^j_{\P^3}$,
$\Omega^{j-1}_{\P^3}$ at $P$.  Observe that the multivalued functions $w^{2/3}$ and
$1/w^{1/3}$ define in a natural way single-valued sections of
$\locsyst_\wbar\tensor\OO_{\P^3}|_{\P^3\setminus S}$ in $U\setminus S$, where $U$
is a neighborhood of $P$ in $\P^3$, and therefore define sections of
$i_*((\locsyst_\wbar\tensor\OO_{\P^3})|_{\P^3\setminus S})$ on $U$.  See for instance
the discussion in \S2 of
\cite{DeligneMostow}.   Thus  the expression \eqrefer{twothirddifferentials} makes
sense.  We also define  $\Omega^j_{\P^3}(F^{-(\infty+ 1/3)})$  
to be the subsheaf of
$\BB$ which equals $\BB$ on $\P^3\setminus S$, and whose stalk at $P\in S$
consists of the elements of the form
 $$
w^{-l} \alpha / w^{1/3} ,
\eqn
\eqref{meromorphicdifferentials}
$$ 
 where $l$ is a
non-negative integer and $w$ and $\alpha$ are as above.  Observe that the
exterior derivative $d$ makes $\Omega^\bullet_{\P^3}(F^{-(\infty + 1/3)})$ into a
complex of sheaves on $\P^3$.  This
complex has a filtration which we call the {\sl pole filtration}: the smallest
filtration for which the expressions
\eqrefer{meromorphicdifferentials} have filtration level $\le l$.   
The complex $\Omega^\bullet_{\P^3}(F^{-1/3})$ can be characterized as the {\sl
subcomplex} of $\Omega^\bullet_{\P^3}(F^{-(\infty + 1/3)})$ consisting of all 
elements $\eta$ of filtration level zero such that $d\eta$ also has filtration
level zero.   
\pararef{definitiontwothirddifferentials}

\proclaim{Lemma.} There are natural
isomorphisms $(p_*(\Omega^\bullet_T))_\wbar \cong \Omega^\bullet_{\P^3}(F^{-1/3})$
and
$(p_*(\Omega^\bullet_T(\infty S)))_\wbar \cong \Omega^\bullet_{\P^3}(F^{-(\infty +
1/3)})$ of complexes of sheaves over $\P^3$.
\endproclaim
\procref{pushforwardlemma}

\proof
Since the cyclic transformation $\sigma$ acts freely on $T\setminus S$, the
isomorphisms over $\P^3\setminus S$ are clear from the definitions of the
objects involved.  At a point $P\in S$, choose local coordinates $x,y,z$
centered at $P$ on $T$ and local coordinates $x,y,w$ centered at $P$ on
$\P^3$ so that $\sigma (x,y,z) = (x,y,\w z)$ and $p(x,y,z) = (x,y,z^3)$.  A
local holomorphic $j$-form on $T$ at $P$ has eigenvalue $\wbar$ if and
only if it is of the form $a z^2 + b z\, dz$, where $a$ and 
$b$ are $\sigma$-invariant forms.  Therefore $a = p^*\alpha$ and $b = p^*\beta_1$ for
suitable local holomorphic forms $\alpha$ and $\beta_1$ on $\P^3$.  Setting $z
= w^{1/3}$ and $\beta = \beta_1/3$ we obtain the expression
\eqrefer{twothirddifferentials} and the first assertion of the lemma follows.  The
second assertion follows by a similar (but slightly longer) calculation.      

\para
 Since $T\setminus S$ is an affine
variety,  $H^*(T \setminus S, \C)$ is the cohomology of the complex of meromorphic
forms on $T$ with poles only on $S$ (complex of global sections on $T$ of
$\Omega^\bullet_T(\infty S)$) and consequently its  summand
 $H^*(T\setminus S,\C)_{\wbar}\cong H^*(T,\C)_\wbar$ is the cohomology of global
sections on $\P^3$ of $\Omega^\bullet_{\P^3}(F^{-(\infty + 1/3)})$.  We write
$\AA^\bullet_{1/3}(\P^3)$ for this complex of global sections.   
Elements of $\AA^\bullet_{1/3}(\P^3)$  are those forms which can be
written as 
$$   
 \phi = \sum { A_J \pvol_J \over F^{l+1/3} } \;,
  \eqn
  \eqref{genfracdiff}
$$
where $l$ is a non-negative integer, and where $\pvol_J = i(\del/\del X_{j_1}) \cdots
i(\del/\del X_{j_q})
\pvol$ for  $J = (j_1 \commadots
j_q)$, where
$$
 \pvol 
  = \sum_k (-1)^k X_k dX_0 \wedges \widehat{dX_k} \wedges dX_3 .
$$
Each $A_J$ is a homogeneous polynomial such that 
the expression \eqrefer{genfracdiff} has degree zero.  Thus the
degree of the denominator equals the degree of the numerator: $3l + 1  = \deg A_J + 4 -
|J|.$  The pole filtration on $\Omega^\bullet_{\P^3}(F^{-(\infty + 1/3)})$ induces
a filtration of the same name on $\AA^\bullet_{1/3}$.  It the smallest filtration for which
all expressions \eqrefer{genfracdiff} have filtration level $\le l$. 
\pararef{quickfracdifferentials}


\proclaim{Theorem.} Let $F\in \smoothforms$.  Then the following statements hold. 


\item{(1)} The cohomology of the complex $\AA^\bullet_{1/3}$ is naturally
isomorphic to $H^\bullet_\wbar (T)$.

\item{(2)} The filtration on $H^3_\wbar(T)$ induced by the pole
filtration on $\AA^\bullet_{1/3}$ agrees with the Hodge filtration in the sense
that a class has pole filtration $l$ if and only if it has Hodge filtration $3-l$.

\item{(3)} $H^{3,0}_\wbar(T) = 0$ and $H^{2,1}_\wbar(T)$ is the one-dimensional
subspace of the five-dimensional space $H^3_\wbar(T)$  spanned by the cohomology class
of
$
\Omega / F^{4/3}
$.

\endproclaim
\procref{hodgefiltrationtheorem}

\proof
The proof of the first statement has just been given. 
The argument for the second part is by now standard, and we sketch the version that
best suits our purposes, following the version in \cite{CarlsonGriffiths} of the
original version of such theorems in \cite{Griffiths}.  For $i=0\commadots 3$ let
$U_i\subset \P^3$ be the set where $\partial F/\partial X_i \ne 0$. 
Since
$F$ is not singular, $\UU = \{U_i\}$ forms an open cover of $\P^3$ by affine open
sets.  The {\v Cech}-deRham bicomplex $C^\bullet(\UU, \Omega^\bullet_{\P^3}(F^{-(\infty +
1/3)}))$ contains both
$\AA^\bullet_{1/3}(\P^3)$ and $C^\bullet(\UU,\Omega^\bullet_{\P^3}(F^{-1/3}))$ as
quasi-isomorphic subcomplexes.  The first subcomplex defines the pole filtration of
$H^3(T)_\wbar$, the second subcomplex defines the Hodge filtration of
$H^3(T)_\wbar$, and the two subcomplexes can be compared inside the larger
complex.  To do this, one uses the argument of \S3b of \cite{CarlsonGriffiths}. 
The only changes needed are to replace the factor $1/(1-l)$ in the definition of
the partial homotopy $H$ at the top of p. 59 by the factor $1/({3\over 2} - l)$,
and to replace the complex of logarithmic forms by our complex
$\Omega^\bullet_{\P^3}(F^{-1/3})$.

For the proof of the third part, simply observe that there is no non-zero form in
$\AA^3_{1/3}$ of pole filtration level $0$, that is, with denominator
$F^{1/3}$ and $J = \emptyset$ in the expression \eqrefer{genfracdiff}. Thus
$H^{3,0}(T)_\wbar = 0$.  Likewise, any form in $\AA^3_{1/3}$ of pole filtration level $1$,
that is, with denominator $F^{4/3}$ in \eqrefer{genfracdiff} and $J = \emptyset$ is a
constant multiple of $\Omega/F^{4/3}$.  This completes the proof of the theorem.

\para
\remark
The reader who would like to verify all the details of the proof we have just
sketched may find it instructive to verify the following fact.  Begin with the
element $\Omega/F^{4/3}$ apply the partial homotopy to find an element
of $C^\bullet(\UU, \Omega^\bullet_{\P^3}(F^{-1/3}))$  cohomologous to the given one in the 
large bicomplex.  The result has components of {\v Cech}-deRham bidegree $(0,3)$ and
$(1,2)$.  Its component of bidegree $(0,3)$ is, up to a constant factor, the {\v Cech}
zero-cochain that to the open set $U_i$ assigns the differential form
$$
{F_i d\Omega_i \pm F_{ii} \Omega \over F^2_i F^{1/3}}
$$
on $U_i$, 
where $F_i = \partial F/\partial X_i$, $F_{ii} = \partial^2 F/\partial X_i^2$,
and where $\Omega_i$ is as defined in \pararefer{quickfracdifferentials}.  Its component
of bidegree $(1,2)$ is a constant multiple of the {\v Cech} one-cochain that to $U_i\cap
U_j$ assigns the differential form
$$
\pm {\Omega_{ij}\over {F_i F_j F^{1/3}}}
$$
on $U_i\cap U_j$.  The last two statements give, in explicit form, the assertion made
about the Hodge filtration of the class of $\Omega/F^{4/3}$.




\para
We are now in a position to give explicit formulas for the period map.  Let $Pf\in
\fsmoothforms$ lie over $F\in\smoothforms$.  Let
$\Lambda' = \Hom_\Z(\Lambda,\Z)$ be the lattice dual to $\Lambda$, and let
$f':\Lambda'\map\Lambda(T)'=H_3(T,\Z) \isomorphism H_3 (\P^3\setminus S,\locsyst')$
be the map dual to $f$, where $\locsyst' = Hom_\Z(\locsyst,\Z)$ is the dual local
system.  Observe that $\Lambda'$ and $H_3(T,\Z)$ are $\Eisenstein$-modules, that
$\locsyst'$ is a local system of $\Eisenstein$-modules, and that $f'$ and the displayed
isomorphisms are $\Eisenstein$-linear.  Moreover, $H^3_\wbar(T)$ is
naturally isomorphic to the subspace $\Hom(H_3(\P^3\setminus S,\locsyst'),\C)_\wbar$ of
$\Hom_\Z(H_3(\P^3
\setminus S,\locsyst'),\C)$ consisting of all homorphisms $\alpha$ so that
$\alpha(\sigma_*(x)) = \wbar \alpha(x)$.  The subspace $\Hom(\Lambda',\C)_\wbar$
defined in the same way is isomorphic to
$\Lambda\tensor_{\Eisenstein}\C\cong\C^{4,1}$.  The one-dimensional subspace
$H^{2,1}_\wbar(T)\subset H^3_\wbar(T) = \Hom(H_3(\P^3\setminus S,\locsyst'),\C)_\wbar$
is generated by the following  function of $x\in H_3(\P^3\setminus S, \locsyst')$: 
$$
  x\map \int_{x} { \Omega \over F^{4/3} } .
$$
Consequently, $\permap(Pf)\in \C H^4$ is the negative line in $\C^{4,1} =
\Hom(\Lambda',\C)_\wbar$ generated by the following function of $x\in \Lambda'$:
$$
x\map \int_{f'(x)} { \Omega \over F^{4/3} } .
$$    
Even more concretely, for a given $Pf_0\in\fsmoothforms$ lying over
$F_0\in\smoothforms$ with zero set $S_0$, choose a tubular neighborhood $N$ of $S_0$ in
$\P^3$, and choose a contractible neighborhood $U\subset \smoothforms$ of $F_0$ so that
$\{F=0\}\subset N$ for all $F\in U$.  Since $\P^3\setminus \bar N$ is a deformation
retract of $\P^3\setminus S_0$, there is a canonical isomorphism
$H_3(\P^3\setminus
\bar N, \locsyst')\cong H_3(\P^3 \setminus S_0,\locsyst')$.  Let
$c_0,\cdots,c_4$ be the $\Eisenstein$-basis of
$H_3(\P^3\setminus\bar N,\locsyst')$ which corresponds, under this isomorphism, to
$f_0'(e_0),\cdots,f_0'(e_4)$, where $e_0,\cdots,e_4$ consists of the first five
elements of the $\Z$-basis $e_0,\cdots,e_4, \w e_0,\cdots, \w e_4$  of
$\Lambda'$ dual to the standard $\Z$-basis $(1,0,\cdots,0),\cdots,(0,\cdots,\w)$ of
$\Lambda $. Let
$\tilde U\subset\fsmoothforms$ be the unique neighborhood of $Pf_0$ that lies
isomorphically over $U\subset\smoothforms$.  Then for $Pf\in \tilde U$ the period map
is 
$$
\permap(Pf) = \left(\int_{c_0} {\Omega\over F^{4/3}}:\cdots : \int_{c_4} {\Omega \over
F^{4/3}}\right).
\eqn
\eqref{componentssmoothperiodmap}
$$  
From this we see immediately that $\permap$ is holomorphic, as
asserted in \pararefer{periodmapzero}. 
\pararef{formulaForPeriodmap}

\para
Now we study the case where the surface $S$ has nodes.  Let 
$F\in\stablepolydiscr$ and let $\Sigma\subset S$ denote the set of nodes of $S$
(the singular set of $S$), and let $\Sigma$ also denote the singular set of
$T$.   We can repeat all the definitions
of \pararefer{locsystem} to \pararefer{quickfracdifferentials}  and
 the proof of Theorem~\xref{hodgefiltrationtheorem} in this context, with only two
exceptions:
$T$ now has singularities, and the sets $U_i = \{\partial F/ \partial X_i \ne 0\}$,
defined and used in the proof of Theorem~\xref{hodgefiltrationtheorem}    
  no longer cover $\P^3$, but cover
$\P^3\setminus\Sigma$.  The proof of Theorem~\xref{hodgefiltrationtheorem} will
then work for the non-compact varieties $T\setminus\Sigma$ and $\P^3\setminus\Sigma$,
but we prefer to reformulate it in terms of compact non-singular varieties as
follows.    Blow up
$\P^4$ at the singular set $\Sigma$ of $T$ and let $\tilde T$ denote the proper
transform of
$T$.  It is easy to check from the local equation $x^2 + y^2 + z^2 +w^3 = 0$ of $T$ at
each point of 
$\Sigma$ that $\tilde T$ is smooth, it is a resolution of singularities of $T$, and
that each component of the exceptional divisor $E$ (the preimage of $\Sigma$ in $\tilde
T$) is a singular quadric (the cone on a non-singular conic).  Moreover the cyclic
transformation
$\sigma$ lifts to $\tilde T$.  Consider the following maps
$$
\matrix{
T\setminus S & \subset & T\setminus\Sigma & = & \tilde T\setminus E & 
\subset \quad\tilde T
\cr
\downarrow & \ & \downarrow \cr 
\P^3\setminus S & \subset & \P^3\setminus \Sigma  }
$$
It is easy to check (using the fact that the links of the singularities of $T$
are spheres) that the top right hand inclusion induces an isomorphism on
$H^3$ with $\Z$ or $\C$ coefficients.  It is clear that the cohomological
formalism used in \pararefer{locsystem}--\pararefer{quickfracdifferentials} applies to the
two vertical arrows and the two left-hand inclusions.  Putting all this together, we
obtain a natural isomorphism of
$H^3(\tilde T)_\wbar$ with the cohomology of the complex $\AA^\bullet_{1/3}$.
\pararef{quicknodalfracdifferentials}
 
\proclaim{Theorem.}
Let $F\in\stablepolydiscr^k$.  Then the following statements hold.

 \item{(1)}  $H^3(\AA^\bullet_{1/3})$ is naturally isomorphic to $H^3_\wbar(\tilde
T)$.

\item{(2)} The filtration on $H^3_\wbar(\tilde T)$ induced by  pole filtration
on  $\AA^\bullet_{1/3}$ agrees with 
 the Hodge filtration on $H^3_\wbar(\tilde T)$, in the sense that a class has pole
filtration
$l$ if and only if it has Hodge filtration
$3-l$.

\item{(3)} $H_\wbar^{3,0}(\tilde T)= 0$ and $H_\wbar^{2,1}(\tilde T)$ is
the one-dimensional subspace of the $5-k$-dimensional space $H_\wbar^3(\tilde T)$ 
spanned by the cohomology class of $
\Omega / F^{4/3} $.

\endproclaim
\procref{nodalhodgefiltrationtheorem}

\proof
The proof of the first statement was just explained in
\pararefer{quicknodalfracdifferentials}.  For the second statement, it is clear that the
obvious modification of the proof of Theorem~\xref{hodgefiltrationtheorem} shows
that the pole filtration on $H^3_\wbar(T\setminus \Sigma)$ agrees with its Hodge
filtration.  Since the inclusion $T\setminus\Sigma\subset\tilde T$ is holomorphic, the
isomorphism $H^3_\wbar(\tilde T)\map H^3_\wbar(\tilde T\setminus E) = 
H^3_\wbar(T\setminus\Sigma)$ carries the Hodge filtration of the first to that of the
last, and therefore must also be an isomorphism of Hodge filtrations.

\para
We  now combine these results with those of the previous section to explicitly 
identify the extension of the period map obtained in \pararefer{manyperiodmaps} to
$\fstableforms|_{\stablepolydiscr^1}$.  Let $F_0\in\stablepolydiscr^1$, and
recall the notation of \pararefer{localaone}.  Let $F\in\smoothforms$ be associated to some point of $D_\epsilon^*$, so that 
$S$ is the corresponding fiber of $\unisurface$.
Note that  the decomposition
$H^3(T,\Z) = V\oplus V\perp$ of \pararefer{prooflocalmonodromylemma} is dual to
the decomposition
$$
H_3(T,\Z) \cong H_3(\P^3 \setminus S,\locsyst') = H_3(B\setminus S,\locsyst')\oplus H_3
(\overline{\P^3 \setminus B}\setminus S,\locsyst'),
\eqn
\eqref{homologydecomp} 
$$
where $\locsyst'$ is the local system on $\P^3\setminus S$ dual to  
$\locsyst$ as in  \pararefer{formulaForPeriodmap} and $B$ is the ball in
\pararefer{localaone}.  In the notation of \pararefer{localaone}, let $N''$ be the
union of the fibers of
$\unisurface''$.  Then $\bar N''$ is a closed tubular neighborhood of $S_0''$ in
$\P^3\setminus B$ and
${\P^3\setminus B}\setminus \bar N''$ is a deformation retract of
$\overline{\P^3\setminus B}\setminus S$.  Choose a basis $c_0, c_1, c_2, c_3$ for the
$\Eisenstein$-module $H_3(\P^3\setminus B \setminus \bar N'',\locsyst')$.  Then
their images in the second summand of \eqrefer{homologydecomp} give a basis that
is independent of $S$ (in other words, constant with respect to the Gauss-Manin
connection) which is also a basis for $t=0$.  Moreover, in analogy with the
choice of basis in \pararefer{formulaForPeriodmap}, we choose this basis so that the
first four elements $c^0, c^1, c^2, c^3$ of the $\Z$-basis of 
$H^3(T'',\Z)$ dual to the $\Z$-basis $c_0,\cdots, c_3, \omega c_0, \cdots, \omega
c_3$ of $H_3(T'',\Z)$ satisfy 
$h(c^0,c^0) = -1$ and
$h(c^i,c^i) = 1$ for
$i>0$.  Next, choose a sector $I$ in the punctured disk $D_\epsilon^*$,
choose a proper annulus $A\subset D_\epsilon^*$, and let $C$ denote the closure
of $A\cap I$.  Let $N'$ be the union of the fibers of $\unisurface'$ lying over
$C$.  Then
$B\setminus S$ deformation retracts to $B\setminus N'$.  Let $c_4$ denote a
generator of the rank one
$\Eisenstein$-module $H_3(B\setminus N',\locsyst')$, and let $c_4$ also denote its
image in the first summand of \eqrefer{homologydecomp}.  Finally, let 
$$
\phi_i(t) = \int_{c_i} {\Omega \over F_t^{4/3}}.
\eqn
\eqref{componentsperiod}
$$
Then we have the following result.
\pararef{beginasymptotic}

\proclaim{Lemma}. For $0\le i \le 3$, $\phi_i(t)$ is holomorphic in $D_\epsilon$, and
$\phi_0(0)\ne 0$.  There exists a holomorphic function $\eta(t)$ in $D_\epsilon$ so that
$\phi_4(t) = t^{1/6}\eta(t)$ for all $t$ in the sector $I$.
\endproclaim
\procref{localaoneasymptotic}

\proof\ It is clear from the formula \eqrefer{componentsperiod} and the choice of
the cycles $c_0,\cdots, c_3$ that the
$\phi_i$ are holomorphic in
$D_\epsilon$ for
$0\le i\le 3$.  Since the vector $(\phi_0(0),\cdots,\allowbreak\phi_3(0))$ spans
the one-dimensional space 
$H^{2,1}_\baromega$, it is not zero.  Therefore $-|\phi_0(0)|^2 + |\phi_1(0)|^2 +
|\phi_2(0)|^2 + |\phi_3|^2 < 0$, and so
$\phi_0(0)\ne 0$. From Lemma~\xref{localmonodromylemma} it is clear that $\phi_4(t^6)$
can be analytically continued to a  single-valued function on $D_\epsilon$.  Since
$(\phi_0(t),\cdots,\phi_4(t))\in
\C^{\,4,1}$ has negative norm, it follows from the first part that $\phi_4(t^6)$ is
bounded, hence holomorphic at $0$.  It follows easily from Lemma~\xref{localmonodromylemma} that
$\phi_4(t) = t^{1/6}\eta(t)$ for some holomorphic function $\eta$ on $D_\epsilon$, and
the proof is complete.

\para
Now let $U=U_0\times D$ be a neighborhood of $F_0\in\stablepolydiscr^1$  as in
\pararefer{localaone}, and let $Pf_0\in\fstableforms$ lie over $F_0$.  Recall from
\pararefer{concreteframings} that
$f_0:\Lambda(T_0)\map \Lambda$ is an isometric embedding with image the orthogonal
complement of a short root.  Assume that this short root is $e^4 = (0,0,0,0,1)\in
\Lambda$, and let $f_0':\Lambda'\map \Lambda(T_0)'\cong
H_3(\P^3\setminus\Sigma,\locsyst') \cong H_3(\overline{\P^3 \setminus B}\setminus
S_0,\locsyst')\cong H_3(\P^3\setminus B \setminus \bar N'',\locsyst')$, where $N''$ is
as in \pararefer{beginasymptotic}.  Let
$e_0,\cdots,e_4$ be the basis of $\Lambda'$ as in
\pararefer{formulaForPeriodmap}.  Then  $f_0'(e_0),\cdots,f_0'(e_3)$ is a basis of
$H_3(\overline{\P^3
\setminus B}\setminus \bar N'',\locsyst')$ as in \pararefer{beginasymptotic}.  Now let
$W$ be the connected component of $Pf_0$ in $\fstableforms|_U$ as
described in Lemma~\xref{stableframeslemma}.  In the notation of
Lemma~\xref{stableframeslemma}, if  $Pf\in W\setminus W_0$, then
$f(e^4)$ is orthogonal to
$\Lambda(T_0)$ and
$f'(e_4)$ is represented, up to a scalar multiple, by $c_4\in H_3(B\setminus
N',\locsyst')$ as in
\pararefer{beginasymptotic}.  Lemma~\xref{localaoneasymptotic} asserts that $\permap$ 
is  single-valued in $W\setminus W_0$ and that for $Pf_0\in W_0$ 
$$
\permap(Pf_0) = \left( \int_{c_0}{\Omega \over F_0^{4/3}}\ ,\cdots,\int_{c_3} {\Omega
\over F_0^{4/3}}\ , \ 0\ \right) .
\eqn
\eqref{formulaextendedmapconcrete}
$$
By  Theorem~\xref{nodalhodgefiltrationtheorem}, the integrand in this expression is
the representative, in $\AA_{1/3}^\bullet$, of $H_\wbar^{2,1}(\tilde T_0)
\sset H_\wbar^3(\tilde T_0) = H_\wbar^3(T_0)$.  Using the isomorphism in $H^3$
induced by the inclusions $T_0\leftarrow T_0\setminus\Sigma = \tilde T_0 \setminus E
\rightarrow
\tilde T_0$, we can regard $f_0$ as defined on $H^3(\tilde T_0)$.  Thus
Lemma~\xref{localaoneasymptotic} asserts that
   $$
\permap(Pf_0) = (f_0)_* (H_\wbar^{2,1}(\tilde T_0))\in 
\C H(\Lambda\tensor_\Eisenstein\C) 
= \C H^4.
\eqn
\eqref{formulaextendedmap}
$$ Since any $Pf_0$ is equivalent, under an automorphism of $\Lambda$,
to one with image the orthogonal complement of $e^4$, this formula for
the period map is valid for any $Pf_0$ lying over
$F_0\in\stablepolydiscr^1$.  Moreover, the maps just used to define the
needed isomorphisms on $H^3$ extend to maps of families over
$\stablepolydiscr^1$.  This is because the threefolds $\tilde T$
for $F$ in $\stablepolydiscr^1$ can be coherently assembled
into a family $\pi:\tilde\unithreefold|_{\stablepolydiscr^1}\to\stablepolydiscr^1$.
To construct it, observe that the singular loci of the
fibers of $\unithreefold$ over $\stablepolydiscr^1$ constitute
a smooth subvariety $\Sigma\sset
\unithreefold|_{\stablepolydiscr^1}\sset \stablepolydiscr^1\times
\P^4$.  Therefore one can form $\tilde\unithreefold\subset
B_\Sigma(\stablepolydiscr^1\times\unithreefold)$, 
the proper transform of $\unithreefold$  in the blow-up of
$\stablepolydiscr^1\times \unithreefold$ along $\Sigma$,
and the resulting variety is smooth.   Write $\Lambda(\tilde\unithreefold)$
for the sheaf $R^3\pi_*(\Z)$, which is a local system over
$\stablepolydiscr^1$.  Using this notation we can state the following
lemma, whose proof is now clear: 

\proclaim{Lemma.}
$\fstableforms|_{\stablepolydiscr^1}$ is isomorphic to the subsheaf of
$PHom(\Lambda(\tilde \unithreefold), \stablepolydiscr^1\times\Lambda)$
consisting of projective equivalence classes of isometric embeddings
onto complements of short roots.  Under this isomorphism the
restriction of the period map $\permap$ to
$\fstableforms|_{\stablepolydiscr^1}$ is given by formula
\eqrefer{formulaextendedmap}.
\endproclaim
\procref{lemmaextendedmap} 

 





















% `angle bracket' inner product, for my funny inner product matrix.
\def\ab#1#2{\langle #1|#2\rangle}      
\def\generate#1{\langle #1\rangle}


\section{The monodromy group and the hyperplane configuration}
\secref{mgroupsection}

\para
The purpose of this section is to prove Theorem~\xref{monotheorem}, which
identifies the monodromy group $\mono$ of the universal family
$\unithreefold_0$ of cubic threefolds.  We begin by listing some of the known
properties of $\Gamma$.
%
\item{1.}
$\mono$ acts by isometries of the 5-dimensional unimodular
$\Eisenstein$-lattice $\Lambda $  defined in 
\pararefer{fivemodule}.
%
\item{2.}
By \pararefer{localmonodromylemma},
$\mono$ is the image of $\pi_1(\smoothforms)$ under a
homomorphism carrying meridians of $\polydiscr$ to
 $(-\omega)$-reflections in norm one vectors in $\Lambda$. This
fact was originally observed in \cite{CTDiscriminant}.
%
\item{3.}
By \pararefer{multiplelocalmonodromylemma} and the existence of a 4-nodal surface,
$P\mono$ contains a group $(\Z/6)^4$.
%Also by \cite{CTDiscriminant}, $\mono$ is Zariski-dense in the
%unitary group of $\C^{\,4,1}$.
%
\item{4.}
There is a surjection from the Artin group $\artin(E_6)$
to $\pi_1(\forms\setminus\polydiscr)$ such that each of the
standard generators of $\artin(E_6)$ maps to a
meridian of $\polydiscr$. This result is due to Libgober
\cite{Libgober}, who states his theorem as a
surjection $\artin(E_6)\to\pi_1( P\forms\setminus\discr)$,
where as usual $P \forms$ denotes the projective space of the space of
cubic forms and $\discr$ denotes the image in $P
\forms$ of $\polydiscr$.  The surjection is
constructed from a map from the complement of the discriminant
in the base space of a universal unfolding of an $E_6$
singularity to the space $\smoothforms$ of smooth
cubic forms.  Since it maps a space with fundamental group $\artin(E_6)$ to
$\smoothforms$, our
statement follows from his argument.
\pararef{propertiesForMgroup}


\para
For our purposes the Artin group is given by the following
generators and relations.  Take one generator for each node of
the $E_6$ Dynkin diagram and declare that the generators $x$ and
$y$ associated to two nodes  braid ($xyx=yxy$) if the nodes are
joined and  commute ($xy=yx$) otherwise. Note that two group
elements which braid are conjugate in the group they generate.
Each Artin
generator acts on $\Lambda $ as a 6-fold reflection,
and we name these reflections $R_1,\ldots,R_6$ according to the
following scheme:
%
% stuff for drawing coxeter diagrams
%
\def\coxHalfedgelength{20pt}
\newdimen\coxEdgelength
\coxEdgelength=\coxHalfedgelength
\multiply\coxEdgelength by 2
\linethickness=.5pt
\def\edgegap{2.5pt}
\def\vertexgap{4pt}
%
\def\boundingbox(#1,#2)(#3,#4){%
\put {\phantom{$\bullet$}} at #1 #2 
\put {\phantom{$\bullet$}} at #3 #4 
}
%
$$ 
\beginpicture
\setcoordinatesystem units 
        <\coxHalfedgelength,\coxHalfedgelength> 
        point at 0 .7
\setplotsymbol ({\vrule width \linethickness height \linethickness})
\plotsymbolspacing=\linethickness
\boundingbox(0,0)(8,-2)
\plot 0 0 8 0 /
\plot 4 0 4 -2 /
\setdots <\coxEdgelength>
\setplotsymbol ({$\bullet$})
\plot 0 0 9 0 /
\plot 4 -2 4 -1 /
\put {$1$} [b] <0pt,\vertexgap> at 0 0  
\put {$2$} [b] <0pt,\vertexgap> at 2 0
\put {$3$} [b] <0pt,\vertexgap> at 4 0
\put {$4$} [b] <0pt,\vertexgap> at 6 0
\put {$5$} [b] <0pt,\vertexgap> at 8 0
\put {$6$} [l] <\vertexgap,0pt> at 4 -2
\endpicture
$$
Now choose one of the short roots in which
$R_i$ is a $(-\w)$-reflection and call it $r_i$.
Our strategy is to
argue that without loss of generality we may take the $r_i$ to
be a specific set of short roots, and then determine the
group $\mono$ generated by the $R_i$.

\proclaim{Lemma.} 
The six reflections $R_i$ are distinct.
\endproclaim
\procref{thmReflectionsDistinct} 

\proof  
% OLD VERSION:
%This follows from the Zariski-density of $\mono$ and the fact
%that adjoining any relation $R_i=R_j$ to $\mono$ (with $i\neq
%j$) reduces $\mono$ to $\Z/6$. To see the latter fact, observe
%that the braid relations imply that if $R_k$ braids with $R_i$
%and commutes with $R_j$, then $R_i=R_j$ implies that
%$R_i=R_j=R_k$. Chasing around the Dynkin diagram, one sees that
%if any two of the $R_i$ coincide then all of them do.
%
Adjoining any relation $R_i=R_j$ to $\mono$ (with $i\neq j$)
reduces $\mono$ to $\Z/6$. To see this, observe that the braid
relations imply that if $R_k$ braids with $R_i$ and commutes
with $R_j$, then $R_i=R_j$ implies that $R_i=R_j=R_k$. Chasing
around the Dynkin diagram, one shows that if any two of the $R_i$
coincide then all of them do.  Since $P\mono$ contains a group
$(\Z/6)^4$, this is impossible.  Therefore the $R_i$ are
distinct. (One could also use the Zariski-density of
$\mono$ in $U(4,1)$, proved in \cite{CTDiscriminant}, instead of
the existence of a subgroup $(\Z/6)^4$.)
%\endproof

\proclaim{Lemma.}
The absolute value of $\ip{r_i}{r_j}$ is $0$ or $1$ according to
whether $R_i$ and $R_j$ commute or braid.
\endproclaim
\procref{thmRootInnerProducts} 

\proof
If $R_i$ and $R_j$ commute, then $r_i$ and $r_j$ are either
orthogonal or proportional.  The latter is impossible by
Lemma~\xref{thmReflectionsDistinct}. 
So suppose that $R_i$ and $R_j$ braid.
Writing $\alpha$ for $\ip{r_i}{r_j}$, we can compute matrices for
the action of the $(-\w)$-reflections  $R_i$ and $R_j$ on the
span of $r_i$ and $r_j$:
$$\eqalign{
R_i:\;
&r_i\mapsto -\w r_i\cr
&r_j\mapsto r_j-(1+\w)\ip{r_j}{r_i}r_i=r_j+\wbar\bar\alpha r_i\cr
R_j:\;
&r_i\mapsto r_i-(1+\w)\ip{r_i}{r_j}r_j=r_i+\wbar\alpha r_j\cr
&r_j\mapsto -\w r_j.\cr
}$$
Multiplying matrices together, we see that the braid relation
requires $|\alpha|=1$. 
%\endproof

\para
Since the $(-\w)$-reflection in $r_i$ is the same as the
$(-\w)$-reflection in any scalar multiple of $r_i$, we may without
loss of generality replace
the $r_i$ by scalar multiples of themselves. Since the $E_6$
diagram is a tree and pairs of the $r_i$ corresponding to non-adjacent
nodes are orthogonal, we may do this
in such a way that the inner product of $r_i$ and $r_j$ is $1$
or 0, according to whether $R_i$ and $R_j$ braid or not.
\pararef{rootInnerProducts}

\para
We have described all the inner products among the $r_i$.
One can now compute the determinant of the span of
$r_2,\ldots,r_6$, which turns out to be $-1$. 
This proves that
the $r_i$ generate $\Lambda $. 
It also implies that $\aut\Lambda $ acts transitively
on configurations of vectors whose inner products are those of
$r_1,\ldots,r_6$.  Indeed, an isometry between two such
configurations extends to an isometry between the lattices they span,
which is to say an isometry of $\Lambda$.
One can also check that the vector $r_1+r_2-r_4-r_5$ is
orthogonal to all the $r_i$, and so it vanishes. This identifies the
expected linear dependence between 6 vectors  spanning a
5-dimensional vector space. 

\para
We are now ready to realize the $r_i$ as explicit vectors. So
far we have described the inner product on $\Lambda $
by \eqrefer{defofh}, but for the arguments below it is better to use the
isometric lattice $\eI4,1$ with inner product matrix
$$ 
A=
\pmatrix{
1& & & & \cr 
 &1& & & \cr 
 & &1& & \cr 
 & & & &1\cr 
 & & &1& \cr 
}.
\eqn\eqref{lightConeInnerProductMatrix}
$$ 
(Blanks indicate zeros.) We regard elements of $\eI4,1$ as
column vectors, where $\ab vw=w^*Av$ and $w^*$ denotes
the conjugate transpose of $w$. The transitivity of $\aut\Lambda
$ on `$E_6$-configurations' implies that we may introduce a
basis for $\Lambda $ with inner product matrix $A$, with respect
to which $r_1,\ldots,r_6$ have the coordinates below. (The
bottom root, $r_7$, will be introduced in
\pararefer{thmGotSeventhReflection}.)
%
$$
\vcenter{
\beginpicture
%\def\coxHalfedgelength{30pt}
%\coxEdgelength=\coxHalfedgelength
%\multiply\coxEdgelength by 2
\linethickness=.5pt
\def\edgegap{2.5pt}
\def\vertexgap{4pt}
\setcoordinatesystem units <32pt,32pt> point at 0 1.5
\setplotsymbol ({\vrule width \linethickness height \linethickness})
\plotsymbolspacing=\linethickness
\boundingbox(0,0)(8,-2)
\plot 0 0 8 0 /
\plot 4 0 4 -2 /
\setplotsymbol ({$\bullet$})
\setdots <64pt>
\plot 0 0 9 0 /
\setdots <32pt>
\plot 4 0 4 -3 /
\put {$\llap{$r_1=$}(1,0,0,0,0)$} [b] <0pt,\vertexgap> at 0 0
\put {$\llap{$r_2=$}(1,0,0,0,1)$} [t] <0pt,-\vertexgap> at 2 0
\put {$\llap{$r_3=$}(0,0,0,1,-\w)$} [b] <0pt,\vertexgap> at 4 0
\put {$\llap{$r_4=$}(0,1,0,0,1)$} [t] <0pt,-\vertexgap> at 6 0
\put {$\llap{$r_5=$}(0,1,0,0,0)$} [b] <0pt,\vertexgap> at 8 0
\put {$r_6=(0,0,1,0,1)$} [l] <\vertexgap,0pt> at 4 -1
\put {$r_7=(0,0,0,0,1)$} [l] <\vertexgap,0pt> at 4 -2
\endpicture
}
\eqn\eqref{eSixDiagram}
$$
%
Now we will determine the group generated by $R_1,\ldots,R_6$, 
first considereing $\generate{R_1,R_2,R_4,R_5}$
and then $\generate{R_1,\ldots,R_5}$. Study of
the latter group leads us to consider
a seventh reflection $R_7$ which plays a key role. 
We determine the group generated by
all the $R_i$ except $R_3$ and then
the group $\mono=\generate{R_1,\ldots,R_7}$ itself.
\pararef{alternateIPmatrix}

\para
We now present some background material from \cite{Allcock},
specialized to the current situation. (We also adapt the
material to work with our convention that a Hermitian form be
linear in its first argument rather than in its second.)  
To begin, write
vectors of $\eI4,1$ in the form $(\lambda;\mu,\nu)$ with
$\lambda\in \Eisenstein^3$ and $\mu,\nu\in\Eisenstein$. 
Two important sublattices
are  $\eI3,1$, which consists of the vectors
$(\lambda_1,\lambda_2,0;\mu,\nu)$, and $\eI1,1$,
which consists of the vectors $(0,0,0;\mu,\nu)$.
We distinguish
the null vector $\rho=(0;0,1)$ and define the height of $v\in\eI
n+1,1$ to be $\ip{v}{\rho}$, which is just the second-to-last
coordinate of $v$.  The matrices 
$$ 
T_{\lambda,z}=\pmatrix{
I_3&\lambda&0\cr
0&1&0\cr
-\lambda^*&z-\lambda^2/2&1\cr} 
$$
define isometries of $\eI 4,1$
that preserve $\rho$. Here $I_3$ is the $3\times3$ identity matrix,
$\lambda$ is a column vector
$(\lambda_1,\lambda_2,\lambda_3)\in\Eisenstein^3$ and $z\in\im\C$
satisfies 
$z-\lambda^2/2\in\Eisenstein$.
We
call these maps translations, and they satisfy the
relations 
$$
\eqalign{
T_{\lambda,z}T_{\lambda',z'}
&=T_{\lambda+\lambda',z+z'+\im\ab{\lambda'}{\lambda}} 
\cr
T_{\lambda,z}^{-1}&=T_{-\lambda,-z}
\cr
[T_{\lambda,z},T_{\lambda',z'}]
&=T_{0,2\im\ab{\lambda}{\lambda'}}.
\cr}
\eqn\eqref{TranslationRelations}
$$
Here $[T,T']=TT'T^{-1}{T'}^{-1}$.  Thus the translations form a Heisenberg group: its center
and commutator subgroup coincide and consist of the central
translations (the translations with $\lambda=0$).  Central translations
are also called unitary transvections. Symmetries of $\eI
4,1$ that fix $\eI 1,1$ pointwise act by conjugation on the translations in the
natural way: if $U$ is such a symmetry then
$$
UT_{\lambda,z}U^{-1}=T_{U(\lambda),z}.
\eqn\eqref{ConjugateOfTranslation}
$$
\pararef{backgroundOnLorentzianLattices}

\para
The sublattice $\eI3,1$ is important because it
contains $r_1,\ldots,r_5$. This implies that $R_1,\ldots,R_5$
preserve $\eI3,1$. Indeed we will see that
$\generate{R_1,\ldots,R_5}$ is almost all of $\aut\eI3,1$. By a
translation of $\eI3,1$ we mean a translation that preserves the
sublattice --- these are the $T_{\lambda,z}$ with
$\lambda=(\lambda_1,\lambda_2,0)$. By
$\autp\eI3,1$ we mean the subgroup of $\autp\eI4,1$ preserving
$\eI3,1$. It is easy to see that this has index 2 in $\aut\eI3,1$.


\proclaim{Lemma.}
The group $\generate{R_1,R_2,R_4,R_5}$ contains all the
translations of $\eI3,1$.
\endproclaim
\procref{thmGotTranslationsOfeIThreeOne} 

\para
\proof
Computation reveals that $R_2^{-1}R_1=T_{\w,0,0;\theta/2}$. By
\eqrefer{ConjugateOfTranslation}, we also have
$T_{-\wbar,0,0;\theta/2}=R_1 T_{\w,0,0;\theta/2} R_1^{-1}$.  By
using $R_5$ and $R_4$ in place of $R_1$ and $R_2$
we obtain the translations $T_{0,\w,0;\theta/2}$ and
$T_{0,-\wbar,0;\theta/2}$.  One may avoid the second computation
by using \eqrefer{ConjugateOfTranslation} where $U$ exchanges
the first two coordinates. By
\eqrefer{TranslationRelations} we have 
$$ 
[T_{\w,0,0;\theta/2},T_{-\wbar,0,0;\theta/2}]=T_{0,0,0;\theta}.
$$
Use of \eqrefer{TranslationRelations} shows that these five translations generate the group of all translations
of $\eI3,1$.
%\endproof

\proclaim{Lemma.}
The group $\generate{R_1,\ldots,R_5}$ coincides with
$\autp\eI3,1$ and acts transitively on the 
primitive null vectors of $\eI3,1$.
\endproclaim
\procref{thmGotAutPlusOfeIThreeOne} 

\para
\proof
\def\groupp{\RR}
Write $\groupp$ for  the group generated by $R_1,\ldots,R_5$.
Because $\groupp$ contains all the translations of $\eI3,1$ and
also the reflections in the short root $r_3$, it contains the
reflections in all the short roots of height $1$ in $\eI3,1$. 
According to the proof of Theorem~6.6 of \cite{Allcock},  the group generated by the
translations and these reflections is $\autp\eI3,1$. 
The arguments of \cite{Allcock} simplify in this case, so we
give a fairly complete sketch the proof here. 

\para
First we argue that $\groupp$ acts transitively on the primitive
null lattices in $\eI3,1$. Given a null vector
$v=(v_1,v_2,0;H,?)$ of height $H$,  we may change $v_1$ and $v_2$ by any elements of
$\Eisenstein H$  by applying a
translation.  Since the covering
radius of $\Eisenstein$ is $1/\sqrt3$, we may suppose further that each of $|v_1|^2$
and $|v_2|^2$ is bounded by $|H|^2/3$.  With $v$ prepared in this
way, the $(-\w)$-reflection in one of the roots
$(0,0,0;1,n\theta-\w)$, where $n\in\Z$, carries $v$ to a vector
of height smaller (in absolute value) than $H$. Repeating this
procedure as needed, we may reduce $H$ until it is $0$, so that
$v$ is a multiple of $\rho$.

\para
Now let $J$ be the group generated by $\groupp$ and the biflection
$B$ in $b=(1,-1,0;0,0)$.  Observe that $B$ normalizes $\groupp$, since
it exchanges the left and right arms of \eqrefer{eSixDiagram}. This
implies that $\groupp$ has index at most two in $J$.  We will show
that $J=\aut\eI3,1$.  First we show that $J$ acts transitively on the
primitive null vectors of $\eI3,1$. Computation reveals that $R_3$
acts on $\eI1,1$ by the matrix
$$ 
\pmatrix{\theta\wbar&\wbar\cr\wbar&0} ,
$$
and one can check that $R_3T_{0,0,0;-\theta}$ acts on $\eI1,1$
by $\smallmatrix{0}{\wbar}{\wbar}{0}$. Call this
transformation $F$ and observe that $F^2$ acts on $\eI1,1$ by
the scalar $\w$. Defining  $B'$ as the biflection in
$b'=(0,0,0;1,1)$, computation reveals that
$$ 
T_{\w,-\w,0;0}\,F\,T_{1,0,0;\theta/2}(b)=-\wbar b'. 
$$
This proves that $B'\in J$. Since $B'$ acts on $\eI1,1$ by the matrix
$\smallmatrix{0}{-1}{-1}{0}$, the transformation $B'F$ acts on $\eI1,1$ by the
scalar $-\wbar$. Consequently, $J$ acts transitively on the
six unit scalar multiples of $\rho$ and hence on the primitive
null vectors of $\eI3,1$.

\para
Since the stabilizer of $\rho$ in
$\aut\eI3,1$ is generated by the translations, the $6$-fold reflections
in $r_1$ and $r_5$, and the biflection $B$, we see that
$J=\aut\eI3,1$. 
Since $\groupp$ is generated
by reflections in short roots, we have
$\groupp\sset\autp\eI3,1$. Above we observed that $\groupp$ has
index $\leq2$ in $J$; therefore $\groupp=\autp\eI3,1$.
This proves the first claim.
To prove the second claim it suffices (because $\groupp$
contains $F^2$) to show that $\rho$ and $-\rho$ are equivalent
under $\groupp$.  They are equivalent since the product of $B$
and the central involution of $\eI1,1$ exchanges them and has
spinor norm $+1$, and so lies in $\groupp$.
%\endproof

\proclaim{Lemma.}
$\mono$ contains the $(-\w)$-reflection $R_7$ in the vector
$r_7=(0,0,1;0,0)$; this  extends the $E_6$ diagram consisting of
the top 6 nodes in \eqrefer{eSixDiagram} to
the full affine $\tilde{E}_6$ diagram pictured there.
\endproclaim
\procref{thmGotSeventhReflection} 

\para
\proof
It suffices to show that $r_7$ is equivalent under $\mono$ to a
multiple of $r_6$. We have $R_6(r_7)=(0,0,-\w;0,\wbar)$. By
applying an element of $\autp\eI3,1\sset\mono$ fixing $r_7$ and carrying
the null vector $(0,0,0;0,\wbar)$ to $(0,0,0;0,-\w)$, we carry
$R_6(r_7)$ to $-\w r_6$.  This completes the proof.
%\endproof

\para
\remark
Looijenga \cite{Looijenga} has obtained a remarkable
presentation of the fundamental group of the space of smooth
cubic surfaces as a quotient of the affine Artin group
$\artin(\tilde{E}_6)$. If one used this presentation, then one
could deduce the lemma immediately, because the
$(-\w)$-reflection in $r_7$ is the only possibility for image of
the seventh Artin generator.  However, we will need both the result
of Lemma~\xref{thmGotAutPlusOfeIThreeOne} and its proof in
Theorem~\xref{thmEqualsAutPlusOfeIFourOne}.

\proclaim{Lemma.}
$\generate{R_1,R_2,R_4,\ldots,R_7}$ contains all the
translations of $\eI4,1$.
\endproclaim
\procref{thmGotTranslationsOfeIFourOne} 

\proof
By the argument of Lemma~\xref{thmGotTranslationsOfeIThreeOne}, with $R_7$ and $R_6$ in place
of $R_1$ and $R_2$ one sees that $\generate{R_6,R_7}$
contains $T_{0,0,\w;\theta/2}$ and
$T_{0,0,-\wbar;\theta/2}$. Together with the result of that lemma,
this proves the claim.
%\endproof

\proclaim{Theorem.}
$\mono$ coincides with $\aut^+\eI4,1$ and acts transitively on
the primitive null vectors and the short roots of $\eI4,1$.
\endproclaim 
\procref{thmEqualsAutPlusOfeIFourOne} 

\proof
The argument is very similar to the proof of
Lemma~\xref{thmGotAutPlusOfeIThreeOne}. As before, it follows
from the proof of Theorem~6.6  of \cite{Allcock}; we sketch the
argument here.

\para 
First we show that $\mono$ acts transitively on the primitive
null vectors of $\eI4,1$.  Given a null vector
$v=(v_1,v_2,v_3;H,?)$ of $\eI4,1$ with $|H|>0$, then as before we
may suppose that each of $|v_1|^2$, $|v_2|^2$ and $|v_3|^2$ is
bounded by $|H|^2/3$. With $v$ prepared in this manner there is
a short root of the form $r=(0,0,0;1,n\theta-\w)$ with $n\in\Z$
such that either $(-\w)$-reflection in $r$ reduces the height of
$v$ or else $r$ is orthogonal to $v$. (The latter case occurs only if
$|v_1|^2=|v_2|^2=|v_3|^2=|H|^2/3$.)  Thus, after applying some
sequence of reflections in $\mono$, we may suppose that either
$H=0$ or else $v$ is orthogonal to some short root $r$ of height
$1$.  In the former case, $v$ is proportional to $\rho$, hence
$\mono$-equivalent to $\rho$ by
Lemma~\xref{thmGotAutPlusOfeIThreeOne}.  In the latter case,
after applying a translation, we may take $r=r_3$. Because $R_3$
braids with $R_6$ and $R_6$ with $R_7$, we see that $v$ is
$\mono$-equivalent to an element of $r_7^\bot=\eI3,1$.  Thus, by
Lemma~\xref{thmGotAutPlusOfeIThreeOne}, $v$ is
$\mono$-equivalent to $\rho$.

\para
The proof that the group generated by $\mono$ and $B$ is all of
$\aut\eI4,1$ is essentially the same as the corresponding part
of the proof of Lemma~\xref{thmGotAutPlusOfeIThreeOne}, and so
is the argument for the conclusion $\mono=\autp\eI4,1$.
The transitivity of $\aut\eI4,1$ on short roots follows from the fact that
the orthogonal complement of any short root is unimodular of
signature $(3,1)$, and hence by Lemma~8.1 of \cite{Allcock} a copy of
$\eI3,1$.
This implies transitivity of $\autp\eI4,1$ on pairs $\pm v$ of
short roots.  Since $v$ and $-v$ are exchanged by biflection
in either we actually have transitivity on short roots.
%\endproof

\para
The monodromy group is now identified  completely. There is
no further need for $\eI4,1$, and we revert to the previous notation,
in which we have $\mono=\autp\Lambda $. 
We now study the congruence subgroup $\monotheta$ --- the kernel
of the natural action of $\mono$ on
$\Lambda /\theta\Lambda $. To this end, recall from \pararefer{congruencesubgroup}
that the quotient of $\mono$ by $\monotheta$ is
isomorphic to the Weyl group $\weyl(E_6)$.

\proclaim{Theorem.}
$\monotheta$ is generated by the triflections in the short roots
of $\Lambda $.
\endproclaim 
\procref{thmCongruenceSubgroupGenerators} 

\proof
Declaring that the standard generators have order 2 reduces
$\artin(E_6)$ to $\weyl(E_6)$. Therefore the normal subgroup
of $\mono$ generated by squares of the $R_i$ has index
$\leq|\weyl(E_6)|$. Since the squares lie in $\monotheta$ and
$\mono/\monotheta\isomorphism\weyl(E_6)$, they must normally
generate all of $\monotheta$. Therefore their conjugates, which are
triflections in the short roots of $\eI4,1$, generate
$\monotheta$. 
%\endproof

\proclaim{Lemma.}
Suppose that $L$ is a free $\Eisenstein$-module and that $g$ is a
nontrivial element of $GL(L)$ which acts trivially on $L/\theta
L$. If $g$ has finite order then its order is $3$ and $L$ is the
direct sum of its eigenlattices.
\endproclaim
\procref{thmAlaSiegel}

\proof
We adapt an argument from \S39 of \cite{Siegel}. Let $g'$ be a power of $g$
that has prime order $p$ and matrix expression $g'=I+\theta^kA$
with respect to some basis for $L$, where $k>0$ and
$A\not\equiv0 \mod \theta$. If $p\neq3$, then $\theta$ does not
divide $p$, and the relation 
$$ 
I=(g')^p=I+p\theta^kA+{p\choose2}\theta^{2k}A^2+\cdots 
$$
yields $A\equiv0$ modulo $\theta$, contrary to the choice of $A$.  
Therefore the order of $g$ is a power of $3$. If $g$
has order $>3$, then there is a power $g'$ of $g$ with order
$9$. In this case we write $L_1$, $L_\w$ and $L_{\wbar}$ for the
eigenlattices of $(g')^3$. Since $g'$ has order $9$, we know
that at least one of $L_\w$ and $L_{\wbar}$ in nontrivial --- say
$L_\w$. Writing $g''$ for the restriction of $g'$ to $L_\w$,
we have $g''=I+\theta^kB$ with respect to some basis of
$L_\w$, where $k>0$ and $B\not\equiv0(\theta)$. Reducing the
relation 
$$ 
\w I=(g'')^3=I+3\theta^kB+3\theta^{2k}B^2+\theta^{3k}B^3 
$$
modulo $3=-\theta^2$ yields the absurdity
$\w\equiv1$ modulo $3$. Therefore the order of $g$ must be $3$.

It remains to show that the
eigenlattices of $g$, say $L_1$, $L_\w$ and $L_{\wbar}$, are
summands of $L$.  Write $\lambda=\lambda_1+\lambda_{\w}+\lambda_{\wbar}$ 
with $\lambda_1$, $\lambda_\w$ and $\lambda_\wbar$ being the
eigencomponents of $\lambda$ in $L\tensor_\Eisenstein\Q(\sqrt{-3})$.
We must show that $\lambda_1\in L_1$, $\lambda_\w\in
L_\w$ and $\lambda_{\wbar}\in L_{\wbar}$.  This follows easily from the fact 
that the three  vectors
$$
\lambda=\lambda_1+\lambda_{\w}+\lambda_{\wbar},
\qquad 
g \lambda=\lambda_1+\w \lambda_{\w} + \wbar \lambda_{\wbar},
\quad\hbox{and}\quad
g^2 \lambda=\lambda_1+\wbar \lambda_{\w} + \w \lambda_{\wbar}
$$
lie in $L$ and the 
hypothesis that the difference of any two of them lies in $\theta L$. 
%\endproof

\proclaim{Lemma.}
Any torsion element of $\monotheta$ is a product of one of the
scalars $1$, $\w$, $\wbar$ with  triflections in
some number of orthogonal short roots. In particular,
$P\monotheta$ acts freely on $\C H^4\setminus\HH$, and
$P\monotheta\backslash\C H^4$ is a complex manifold. 
\endproclaim
\procref{thmTorsionInCongruenceSubgroup}

\proof 
By Theorem~\xref{thmAlaSiegel}, if $g\in\monotheta$ has finite
order then its order is $3$ and $\Lambda $ is the direct sum of its
eigenlattices. Since $\Lambda $ is unimodular, each summand must be
unimodular, so each summand is isomorphic to $\Eisenstein^n$ ($1\leq
n\leq4$) or $\Eisenstein^{n,1}$ ($0\leq n\leq4$). This uses the
classification of unimodular $\Eisenstein$-lattices in low dimensions
--- see \cite{Allcock} or \cite{Feit}. Exactly one of the summands
contains negative-norm vectors, and by multiplying $g$ by one of the
scalars $1$, $\w$ or $\wbar$ we may suppose that $g$ acts trivially on
this summand. Then each of the $\w$- and $\wbar$-eigenlattices has a
basis of mutually orthogonal short roots, so that $g$ is the product
of the $\w$- and $\wbar$-reflections in these roots.  Thus the
stabilizer of a point in $\HH^k$ is $(\Z/3)^k$ acting in the standard
way, and the lemma follows.
%\endproof


The next sequence of results shows that the configuration of geodesic hyperplanes
$\HH$ is quite special.  We begin with the following.

\proclaim{Lemma.} If $H$ and $H'$ are distinct components of $\HH$ and $H\cap
H'\ne\emptyset$, then $H$ and $H'$ are orthogonal.
\endproclaim
\procref{orthogonalintersectionlemma}

\proof
Let $H$ and $H'$ be defined by the equations $h(x,v) = 0$ and
$h(x,v') = 0$, respectively, where $h(v,v) = h(v',v') = 1$.
Since they meet in $\C H^4$, there is a vector of negative norm
orthogonal to both $v$ and $v'$. Since $h$ has signature $(4,1)$,
$v$ and $v'$ span a positive-definite space, which implies that 
their inner product matrix
$$
\pmatrix{1&\ip{v}{v'}\cr  \ip{v'}{v}&1\cr}
$$
is positive definite. That is, $|\ip{v}{v'}|^2<1$.
But this is an integer, so
$h(v,v') = 0$ as claimed.

\para
The set $\RR$ of short roots given in \pararefer{hyperplanes}
projects, under reduction modulo $\theta$, to the set
$\bar\RR\subset\vs$ of vectors of norm one, where $\vs$ is the
finite vector space of \pararefer{finitespace}, which in turn
projects onto $P\bar\RR\subset P\vs$.  It is easy to check that $\bar\RR$ has $72$
elements, or equivalently, that $P\bar\RR$ has $36$ elements
(these are the $36$ \lq\lq minus points" of
\cite{atlas}, p. 26).  Their preimages in $\RR$  gives a partition $\RR =
\RR^1\cup\cdots\cup\RR^{36}$ into $36$ sub-collections which are permuted by $\mono$.
Each sub-collection is preserved and acted on transitively by
$\monotheta$.  There is a corresponding partition, 
$$
\HH = \HH_1\cup\cdots\cup\HH_{36},
\eqn
\eqref{thirtysixsubcollections}
$$
into $36$ disjoint sub-collections
permuted by $\mono$ and each acted on transitively by $\monotheta$.
 
\proclaim{Lemma.} Let $H$ and $H'$ be components of $\HH$ which belong to  the same
sub-collection of the decomposition \eqrefer{thirtysixsubcollections}, and suppose
that $H\ne H'$.  Then
$H\cap H' = \emptyset$.
\endproclaim
\procref{disjointnesslemma}

\proof
We write $H = v\perp$ and $H' = {v'}\perp$ where $v$ and $v'$ are congruent
modulo $\theta$.  Then, modulo $\theta$, $h(v,v') \equiv h(v,v) \equiv 1$.  Thus
$h(v,v')\ne 0$, so by Lemma~\xref{orthogonalintersectionlemma}, $H\cap H' =
\emptyset$.      


\proclaim{Lemma.} Let $H\in \HH$ and let $\mono_H\subset\monotheta$ denote its
stabilizer in $\monotheta$. Then the natural map $P\mono_H\backslash H\map
P\monotheta\backslash\C H^4$ (induced by the injection $H\subset\C H^4$) is injective. 
\endproclaim
\procref{embeddedlemma}

\proof
Let $x, y\in H$ and suppose that there exists
$\gamma\in P\monotheta$ such that $x =
\gamma y$. Then $H\cap\gamma H\ne \emptyset$.  
Since $H$ and $\gamma H$ belong to the
same sub-collection in the decomposition
\eqrefer{thirtysixsubcollections}, Lemma~\xref{disjointnesslemma} implies that $H = \gamma H$, 
so that $\gamma\in P\mono_H$. The lemma follows.



\proclaim{Theorem.} The space $P\monotheta\backslash\C H^4$ is smooth.  The projection
of $\HH$ to $P\monotheta\backslash\C H^4$ consists of $36$ smooth divisors
intersecting transversally.
\endproclaim
\procref{smoothspacetheorem}

\proof
It is clear from Lemmas~\xref{thmTorsionInCongruenceSubgroup} and~\xref{orthogonalintersectionlemma} that the isotropy groups of the action of
$P\monotheta$ on $\C H^4$ are isomorphic to $(\Z/3\Z)^k$, $k\leq4$, acting in the
standard way.  Thus $P\monotheta\backslash \C H^4$ is a smooth manifold.  By the same
token, for each component $H$ of $ \HH$, $\mono_H\backslash H$ is smooth.  By 
Lemma~\xref{embeddedlemma} each component of $P\monotheta\backslash\HH$ is embedded in
$\monotheta\backslash\C H^4$, and by \pararefer{orthogonalintersectionlemma}, any two
components intersect at right angles, hence transversally.

Finally, we record the injectivity lemma analogous to Lemma~\xref{embeddedlemma} for
$P\mono$.   This will be used in 
\S
\xref{injectivityandsurjectivity}

\proclaim{Lemma.} Let $H$ be a component of $ \HH$ and let $\mono_H\subset\mono$ denote
its stabilizer in $\mono$. Then the natural map $P\mono_H\backslash H\map
P\mono\backslash\C H^4$ (induced by the injection $H\subset\C H^4$) is injective.
\endproclaim
\procref{secondembeddedlemma}

\proof. Suppose $h_1,h_2\in
H$, $\gamma\in P\mono$, and $\gamma h_1 = h_2$. We produce  $\gamma'\in
P\mono_H$ such that $\gamma' h_2 = h_2$.  Let $v$ be a short root orthogonal to $H$. 
 Then $v$ and $\gamma v$ are orthogonal short roots, and so $v+\gamma v$ is a long
root.  Let
$A$ be the biflection in this long root and let $\gamma_0 = PA\ (=
P(-A))$.  Then
$\gamma_0\in P\mono$, $\gamma_0 H = \gamma H$ and $\gamma_0$ is the identity on $H\cap
\gamma H$, thus $\gamma_0^{-1}\gamma\in \mono_H$ gives the desired element $\gamma'$,
and so proves the lemma. 


\def\SP{{\P}}
\def\cnodal{\CC_{nodal}}
\def\mnodal{M_{nodal}}
\def\mnodalcompact{M_{nodal,ss}}
\def\refdiv{\RR}
\def\ssmoduli{{M_{ss}}}
\def\monenodal{M_1}






\section{Cuspidal degenerations}
\secref{cuspidaldegenerations}

Our purpose here is to extend the period map $g:\stableforms\to
P\mono\backslash\C H^4$ to a map
$\semistableforms\to\overline{P\mono\backslash\C H^4}$, where
$\overline{P\mono\backslash\C H^4}$ denotes the Satake
compactification of ${P\mono\backslash\C H^4}$.  For this we need some
information on the monodromy of $\Lambda(\unithreefold)$ near points
$F\in\semistablepolydiscr\setminus\stablepolydiscr$.  Instead of doing
a detailed analysis of topology of $\unithreefold$ near a point of
$\semistablepolydiscr\setminus\stablepolydiscr$ analogous to the
discussion of \S\xref{localmonodromy} for points of
$\stablepolydiscr$, we find it expedient to use the results of that
section and \S\xref{mgroupsection} to deduce the needed information on
the local monodromy.  We first prove that the monodromy transformation
corresponding to the loop $\gamma_{\ell,r}$ defined below is a central
translation (as defined in \pararefer{backgroundOnLorentzianLattices}),
hence it has a unique fixed point in $\C H^4\cup
\partial\C H^4$, which lies in $\partial \C H^4$ 
and represents a boundary point of the
Satake compactification.  A simple classical argument based on the
Schwarz lemma and the fact that the hyperbolic length of the loops
$\gamma_{\ell,r}$ tend to $0$ as $r$ tends to $0$ shows that the period map takes
neighborhoods of $F$ to neighborhoods of this fixed point.  This observation
easily yields the desired extension.


 Let $F\in\semistablepolydiscr^{a,b}$, with $b\ge
1$ cusps.  By \pararefer{localCoordinatesForMarkedSemistableForms}, there is a
neighborhood $W$ of $F$ in $\semistableforms$ and a Galois covering
space of $W-\polydiscr$ such that the Fox completion $\tilde{W}$ of this
space over $W$ is isomorphic to
the unit ball in $\C^{20}$.  Moreover, under that isomorphism the preimage
$\tilde\polydiscr$ of $\polydiscr$ maps to the union of the hyperplanes for a root system of
type $A_1^a\oplus A_2^b$, and the Galois group of $\tilde{W}\to W$ to the
group $(\Z/2)^a\times S_3^b$ generated by the reflections in these
hyperplanes. Furthermore, there is a unique point of $\tilde{W}$ lying
over $F$, namely the origin.

Let $\ell$ be a line in $\C^{20}$ that intersects 
$\tilde\polydiscr$ only at the origin. For $0<r<1$ we write $D_{\ell,r}$
for the intersection of $\ell$ with the closed $r$-ball in $\C^{20}$,
and $\gamma_{\ell,r}$ for the (positively oriented) boundary curve of
$D_{\ell,r}$. These loops are all freely homotopic. Choose a form
$F'\in \partial W$ and a point $m'$ of $\tilde{W}$ that lies over $F'$.
Consider the loop $\gamma_{\ell,r}$ passing through $m'$,
viewed as based at $m'$, and write $\bar\gamma$ for the
element of $\pi_1(\bar W-\polydiscr,F') \cong \pi_1( W-\polydiscr,F') $ represented by
the projection of $\gamma_{\ell,r}$. 

\proclaim{Lemma.}
The monodromy action of $\bar{\gamma}^3$ on $\Lambda(T')$ is a central
translation (as defined in \pararefer{backgroundOnLorentzianLattices}).
\endproclaim
\procref{localMonodromyAtCuspidalForm}

\proof
Recall from \pararefer{structureOfSemistableDiscr} that
$\pi_1(W-\polydiscr)\isomorphism\Z^a\times B_3^b$. We will
identify the action of $\pi_1(W-\polydiscr)$ on $\Lambda(T')$ in
terms the actions of the standard generators for the various
$\Z$ and $B_3$ factors, and then compute the action of
$\bar{\gamma}$ by expressing $\bar{\gamma}$ in terms of these
generators. By \pararefer{localmonodromylemma}, each of the
standard generators of $\Z^a\times B_3^b$ maps to the
$(-\w)$-reflection in a short root of $\Lambda(T')$. For each $B_3$ factor, 
 its standard generators $g_1$ and $g_2$ act by the
$(-\w)$-reflections in short roots $s_1$ and $s_2$. Since
$g_1$ and $g_2$ braid,  we may assume that $\ip{s_1}{s_2}=1$ (see 
 \pararefer{thmRootInnerProducts} and \pararefer{rootInnerProducts}.) Observe the
following two facts:

\item{(i.)} For each $B_3$ factor, the corresponding short roots $s_1$ and $s_2$ are
linearly independent.

\item{(ii.)} The roots corresponding to distinct factors of
$\Z\times\cdots\times\Z\times B_3\times\cdots\times B_3$ are orthogonal.

The first fact follows from the fact that the corresponding
reflections, reduced modulo $\theta$, generate a subgroup $S_3$ of the
Weyl group (see \pararefer{congruencesubgroup}).  If $s_1$ and $s_2$ were dependent
then the reflections in them
would generate an abelian group.  The second fact follows from the
fact that the geometric vanishing cycles in $T'$ corresponding to distinct
singularities in $T$ are disjoint.



These facts determine the local
monodromy group.  If $s_1$ and $s_2$ are the roots for a  $B_3$ factor,
it follows from fact (i) that $s_1-s_2$ is a primitive null
vector.  From fact (ii), the $b$ null
vectors obtained in this way are mutually orthogonal. Since the
signature of $\Lambda(T')$ is $(4,1)$, a maximal isotropic
sublattice has dimension 1,  these $b$ vectors must all be
proportional, hence may be assumed to coincide 
(after multiplying the $s_i$ by
suitable  units).  We call this common vector $\rho$.  By the
transitivity of $\aut(\Lambda)$ on the primitive null vectors of
$\Lambda$ (Theorem~\xref{thmEqualsAutPlusOfeIFourOne}), we may
choose a basis for $\Lambda(T')$ with inner product matrix as in
\eqrefer{lightConeInnerProductMatrix}, such that
$\rho=(0,0,0,0,1)$. This is consistent with the use of the
symbol $\rho$ in
\pararefer{backgroundOnLorentzianLattices}. Taking the root for
each $\Z$ factor and the root $s_1$ for each $B_3$ factor, we
obtain up to three mutually orthogonal short roots, which are
also orthogonal to $\rho$. By the choice of the basis of
$\Lambda(T')$ we may take these roots to be the first $a+b$ of
$(1,0,0,0,0)$, $(0,1,0,0,0)$ and $(0,0,1,0,0)$. The remaining
root for each $B_3$ factor is determined by the relation
$s_1-s_2=\rho$. This implies that the hexflections to which the
standard generators of $\Z^a\times B_3^b$ map are among the the
$(-\w)$-reflections in the roots $r_1$, $r_2$, $r_4$, $r_5$,
$r_6$ and $r_7$ that form the 3 ``limbs'' of the affine $\tilde
E_6$ diagram \eqrefer{eSixDiagram}. More specifically, if
$b=1$ then the roots may be taken to be $r_1$ and $r_2$,
together with $r_5$ (resp. $r_5$ and $r_6$) if $F$ has one node
(resp. two nodes). Similarly, if $b=2$ then the roots may be
taken to be $r_1$, $r_2$, $r_4$, $r_5$, together with $r_7$ if
$F$ has a node, and if $b=3$ then the roots are $r_1$, $r_2$,
$r_4$, $r_5$, $r_6$ and $r_7$.

To express $\bar{\gamma}$ in terms of the generators used above, one
recognizes $\bar{\gamma}$ as the square of the ``fundamental element'' 
of the
Artin group 
$$
\artin(A_1^aA_2^b)=\artin(A_1)^a\times\artin(A_2)^b=\Z^a\times B_3^b\;.
$$
To explain this, we follow a suggestion of Ruth Charney. Since
scalar multiplication on $\C^{20}$ commutes with the action of
the Weyl group, and since all the points of $\gamma_{\ell,r}$ are
scalar multiplies of each other, it is clear that $\bar\gamma$
lies in the center of the Artin group.  The fundamenal element
is a certain product of $l$ standard Artin generators, and has
the property that either it or its square generates the
center. (See
\cite{BrieskornSaito}, secs.~5 and ~7.) It follows that $\bar\gamma$ 
is some power
$n$ of the fundamental element. Furthermore, the number $l$
coincides with the number of mirrors. On the other hand, it is
easy to see that $\gamma_{\ell,r}$ is homologous to a sum of
positively-oriented circles, one for each mirror. (Perturb $\ell$ so that 
it meets the
mirrors at
$l$ distinct points.) Since the map $\tilde W\to W$ has
branching of order 2 along the generic points of each mirror, we
see that $\bar\gamma$ is homologous to the sum of $2l$ Artin
generators. By considering the map to $\Z$ that carries each
generator to 1, we see that the only possibility for $n$ is 2.

The fundamental element is the product of the fundamental
elements of the various $\Z$ and $B_3$ factors. The fundamental
element of a $\Z$ factor is the standard generator. The fundamental
element of a $B_3$ factor with standard generators $g_1$ and $g_2$ is
$g_1g_2g_1=g_2g_1g_2$. Now we can compute the monodromy of $\bar{\gamma}$. The square
of the fundamental element of one
$B_3$ factor, say the one where $g_1$ and $g_2$ act as the $(-\w)$-reflections $R_1$ and
$R_2$ in $r_1$ and $r_2$, acts as 
$(R_1R_2R_1)^2=(R_1R_2R_1)(R_2R_1R_2)=(R_1R_2)^3=T_{0,-\theta}$. Here
the last term is the central translation defined in \pararefer{backgroundOnLorentzianLattices}, and the last
equality is obtained by computing matrices for $R_1$ and $R_2$ and
multiplying them together. If there is another $B_3$ factor,  then
similar calculations (or the $S_3$ symmetry of the $\tilde E_6$ diagram) show that the
square of its fundamental element also acts as $T_{0,-\theta}$. ) The squares of the
fundamental elements of the $\Z$ factors act as triflections in the
relevant roots. If no nodes are present then by multiplying together
the fundamental elements of the $B_3$ factors, we see that $\bar{\gamma}$
acts as $T_{0,-b\theta}$. If at least one node is present then $\bar{\gamma}$
acts by the product of $T_{0,-b\theta}$ and either or both of the
$\wbar$-reflections in $r_5$ and $r_7$. In any case, $\bar{\gamma}^3$ acts as
$T_{0,-3b\theta}$, which is a central translation as claimed.  The proof of the lemma
is complete.

\proclaim{Theorem.}
The map $g:\stableforms\to P\mono\backslash\C H^4$ extends to a map from
$\semistableforms$ to the Satake compactification
$\overline{P\mono\backslash\C H^4}$. This carries
$\semistableforms-\stableforms$ to the (unique) boundary point of
$\overline{P\mono\backslash\C H^4}$ and factors as a composition
of holomorphic maps
$$
\semistableforms\to\moduli\to\overline{P\mono\backslash\C H^4}\;
$$
which takes the unique point of $\moduli\setminus\stablemoduli$ to the unique boundary
point of $\overline{P\mono\backslash\C H^4}$. 
\endproclaim
\procref{Satakeextension}

\proof  For the sake of brevity we
write $Q$ for $P\mono\backslash\C H^4$ and $\bar{Q}$ for
$\overline{P\mono\backslash\C H^4}$.
By the transitivity of $\mono$ on the one-dimensional isotropic
sublattices of $\Lambda$ (see \pararefer{thmEqualsAutPlusOfeIFourOne}), the Satake compactification
$\bar{Q}=\overline{P\mono\backslash\C H^4}$ has a unique boundary point,
which we will call $B$. The theorem is a consequence of the following
claim: if $F\in\semistablepolydiscr^{a,b}$, $b\ge 1$, and
$\tilde{W}$ is as above, then for any neighborhood $V$ of $B$ in
$\bar{Q}$, there is a neighborhood $\tilde{U}$
of the origin in $\tilde{W}$ so that, if $U\subset W$ denotes its image under
$\tilde{W}\to W$, then $\permap(U)\subset  V$. 
Assuming this for the moment, since $\bar{Q}$ is an analytic space, the Riemann
extension theorem 
 implies that the period map $\permap$ extends
holomorphically to this neighborhood of $U$ of $F$. By shrinking $V$ we see that
this extension takes $F$ to $B$.  Thus  
$\permap:\stableforms\to Q$ extends to  holomorphic map
$\semistableforms\to\bar{Q}$. Since it carries $\semistableforms-\stableforms$ to $B$,
and since the period map is constant on $G$-orbits in $\smoothforms$, it is also
constant on orbits in $\semistableforms$. This establishes the theorem.

Now we prove the claim. Let $\ell$ be any line through
the origin in $\C^{20}$ that meets $\tilde\polydiscr$ only at the
origin as before, and note that
$\ell\cap\tilde{W}$ is isomorphic to the unit disk in $\C$.  Thus for each such
$\ell$ we may choose a biholomorphism
$\alpha_\ell$ from the usual upper half-plane $H$, modulo the horizontal translation
$\tau:z\mapsto z+1$, to the punctured disk
$(\ell\cap\tilde{W})-\{0\}$. Note that the hyperbolic length of
$\gamma_{\ell,r}$ (with respect to this uniformization) is {\sl independent
of $\ell$}, and decreases monotonically to $0$ as $r\to 0$. Following $\alpha_\ell$ by
the map
$\tilde{W}-\tilde\polydiscr\to W-\polydiscr$, we obtain a map
$\beta_\ell:H/\langle\tau\rangle\to\smoothforms$. 
Fix a deck
transformation $\gamma:\fsmoothforms\to\fsmoothforms$ in the conjugacy class in
$\pi_1(\smoothforms)$ of the projection of $\gamma_{\ell,r}$ to 
$W-\polydiscr\sset\smoothforms$. 
%, and note that this conjugacy class is independent of  $\ell$ and
%$r$.  
Then there is
a lift $\tilde\beta_\ell:H\to\fsmoothforms$ of $\beta_\ell$ under which the action of
$\gamma$ on $\fsmoothforms$ corresponds to that of $\tau$ on
$H$. Applying the period map, the action of $\gamma$ on
$\fsmoothforms$ descends to an action on $\C H^4$, and  $g\circ\tilde\beta_\ell:H\to\C
H^4$ is equivariant with respect to these actions.

Since $\gamma^3$ acts on $\C H^4$ by a unitary transvection (Lemma~\xref{localMonodromyAtCuspidalForm}), it
fixes a unique one-dimensional isotropic sublattice of $\Lambda$,
corresponding to an ideal point $\tilde{B}$ of $\C H^4$. Furthermore, the
sets
$$
N_\varepsilon=\{\,p\in\C H^4 \;|\; d_{\C H^4}(p,\gamma^3(p))<\varepsilon\,\}
$$
are the family of open horoballs centered at $\tilde{B}$, where we
write $d$ for the hyperbolic metric. By the
definition of the Satake compactification, the images of the
$N_\varepsilon$ in $Q$ form a basis of deleted neighborhoods of
$B$ in $\bar{Q}$. Given $\varepsilon>0$, choose $r_0$ small enough so that
the hyperbolic length of each $\gamma_{\ell,r_0}$ is less than
$\varepsilon/3$, and let $\tilde{U}$ be the open $r_0$-ball in
$\C^{20}$. If $x\in \tilde{U}-\tilde\polydiscr$ then we find the loop
$\gamma_{\ell,r}$ containing $x$ and choose a point $y$ in $H$
that is carried to $x$ under the composition of the natural map
$H\to H/\langle\tau\rangle$ and $\alpha_\ell$. Since the
hyperbolic length of $\gamma_{\ell,r}$ is less than  $\varepsilon/3$, we see
 that $d_H(y,\tau^3(y))<\varepsilon$.  By the Schwarz lemma $g\circ\tilde\beta_\ell$
does not increase hyperbolic distance.  Therefore
$g\circ\tilde\beta_\ell(y)\in N_\varepsilon$. Consequently the image of $x$ in
$Q$ lies in the image of $N_\varepsilon$ in $Q$, and $\tilde{U}$ is the desired
neighborhood.  This completes the proof of the theorem.

\section{Proof of the main theorem}
\secref{injectivityandsurjectivity}

The aim of this section is to prove our main results,
Theorems~\xref{maintheorem} and~\xref{orbifoldIsomorphismTheorem}.  
We will follow the strategy described
in \pararefer{strategyofproof}.




\subheading{Isomorphism on $\smoothmoduli$}



\proclaim{Lemma.} The  differential of the
  period map
$\permap:\fsmoothmoduli\map
\C H^4$ is injective.  Therefore $\permap:\fsmoothmoduli\to\C H^4$ is locally
biholomorphic and $\permap:\smoothmoduli\to P\mono\backslash\C H^4$ is an open map.
\endproclaim
\procref{localimmersionlemma}

\proof
Consider  $Pf\in\fsmoothforms$ lying over $F\in\smoothforms$ and a family $F_t = F + tG$
of cubic forms.  Recall that the differential form  
$$
  \phi_t = { \Omega \over (F + tG)^{4/3} }
$$
spans $H^{2,1}_\wbar(T_t)$. 
Note that the corresponding expression \eqrefer{componentssmoothperiodmap} for
$\permap$   can be differentiated under the integral sign so that  the derivative of the
period map is given by the cohomology class of 
$$
  { d \over dt }\phi_t\Big\vert_{t = 0}
     = 
   \hbox{const.}{ G\Omega \over F^{7/3}} .
   \eqn
   \eqref{diffpermapseventhirds}
$$
This vanishes as an element of $T_{g(x)}\C H^4$ if and only if it  lies in
$H^{2,1}_\baromega(T)$.  From Theorem~\xref{hodgefiltrationtheorem} this is the case  if
and only if this expression is cohomologous to a fractional differential with
filtration level one, i.e., with denominator $F^{4/3}$.  By standard arguments as
in
\cite{Griffiths}, this is the case if and only if the numerator
$G$ lies in the Jacobian ideal of
$F$, that is, if and only if it is a tangent vector at $F$ to the orbit of the action of
the general linear group. 
\hide{XXJJ: do we want to talk about how equisingular
defos vanish at nodes?}%
Since the tangent space to $\fsmoothmoduli$ at $Pf$ is canonically
isomorphic to the tangent space to $\smoothforms$ at $F$ modulo the
tangent space to the orbit of $F$, this statement is equivalent to the
injectivity of the differential of $\permap$ on $\fsmoothmoduli$, thus
proving the first assertion of the lemma.  The second assertion is
immediate, and the last assertion is clear from the $P\mono$-equivariance of
$\permap$ and the definition of the quotient topology.

\proclaim{Lemma.} The period map $\permap:\smoothmoduli\to P\mono\backslash\C H^4$ is
injective, and its image is contained in $P\mono\backslash (\C H^4\setminus\HH)$.
\endproclaim
\procref{globalinjectivitylemma}


\proof  Let
$N_0$ denote the moduli space of smooth cubic threefolds (a $10$-dimensional space)  and
let
${{\germ S}}^5$ denote the Siegel upper half space of genus
five (a $15$-dimensional space). The integral symplectic group $\Sp(10,\Z)$ acts
properly discontinuously on
${{\germ S}}^5$ and the Hodge structures of cubic threefolds are classified by
$\proj\Sp(10,\Z)\backslash{{\germ S}}^5$. In other words, the period map for cubic
threefolds defines a holomorphic map $N_0\map \proj\Sp(10,\Z)\backslash{{\germ S}}^5$. 
It fits, with the period map already defined, into a commutative diagram
$$
\normalbaselineskip=18pt
\matrix{
  \smoothmoduli &  \mapright{\permap} & P\mono\backslash\C H^4 \cr
  \downarrow & & 
\downarrow
\cr
  N_0 & \map & \proj\Sp(10,\Z)\backslash{{\germ S}}^5 \cr 
}.
\eqn
\eqref{threefolddiagram}
$$
Indeed,  there is a totally geodesic embedding $\C H^4\map {{\germ S}}^5$ which can be
described as follows:  Let $\sympl$ be the standard unimodular symplectic form on
$\Z^{10}$ and recall that
${{\germ S}}^5$  is the space of Lagrangian subspaces in $\C^{10} = \Z^{10}\otimes\C$ 
 on which  the hermitian form $\sympl(X,\bar Y)$ is positive definite.  If
$\Z^{10} = \Eisenstein^5$ as in \pararefer{module}--\pararefer{decomp}, decompose
$\C^{10}$ into eigenspaces: $\C^{10} = \C_\w^5\oplus \C_\wbar^5$.  Then the embedding
of $\C H^4$ into
${{\germ S}}^5$ in question is the map that assigns to a negative line $l\in \C^{4,1}$
the Lagrangian subspace $\bar l\perp\oplus l\sset\C^{10}$.  From
\eqrefer{eigenspacedecomposition} we see that the diagram \eqrefer{threefolddiagram} is
indeed commutative.  Now the theorem of Clemens and Griffiths
\cite{ClemensGriffiths}
 asserts that the lower horizontal arrow of \eqrefer{threefolddiagram} is injective. 
The next lemma proves  that the left vertical arrow is generically injective.  Thus the
top horizontal arrow is generically injective.  By Lemma~\xref{localimmersionlemma}, the top horizontal arrow is an open map.  Since a
generically injective open map is injective, the first assertion follows.
 
The second assertion is equivalent to the statement that the image of
$\permap:\fsmoothmoduli\to\C H^4$ is contained in $\C H^4\setminus \HH$.  To prove this
equivalent assertion, suppose to the contrary that 
$\permap (x)\in
\HH$ for some $x\in\fsmoothmoduli$.  Then there is a short root $r\in\RR$ so that the
line $\permap(x)$ in $\C^{4,1}$ lies in $r\perp$.  This implies that the Lagrangian
subspace $\permap(x)\perp\oplus\permap(x)\subset\C^{10}$ contains the short root $r$. 
This in turn means that the intermediate Jacobian of the cubic threefold associated to
$x$ has the elliptic curve $\C r/\Eisenstein r$ as a factor.  But the intermediate
Jacobian of a smooth cubic threefold is an irreducible principally polarized abelian
variety \cite{ClemensGriffiths}, so this is impossible, thus completing the proof of the
lemma.



\proclaim{Lemma.} Let $T$ and $T'$ be generic cyclic cubic threefolds
with branch loci $S$ and $S'$.  If $T$ and $T'$ are isomorphic via
an automorphism of projective space, then so are $S$ and $S'$.
\endproclaim


\proof\ If $T$ and $T'$ are generic then each admits just one cyclic
structure, and a cyclic structure determines is branch set.

\proclaim{Lemma.} The extended period map
$\permap:\moduli\to\overline{P\mono\backslash\C H^4}$ is surjective.  Equivalently, the
period map $\permap:\stablemoduli\to P\mono\backslash\C H^4$ is surjective and proper.
\endproclaim
\procref{surjectivitylemma}

\proof  
In Theorem~\xref{Satakeextension} we proved that the extended period map
$\permap:\moduli\map
\overline{P\mono\backslash\C H^4}$ takes the unique strictly
semi-stable point of $M$ to the unique cusp of $\overline{P\mono\backslash\C
H^4}$.   This extension is a holomorphic map of analytic spaces of the same
dimension which, by Lemma~\xref{localimmersionlemma} is generically of maximal
rank, hence of non-zero degree, thus proving the first statement of the lemma.  The
equivalence of the second statement is clear.

Combining Lemmas~\xref{globalinjectivitylemma} and~\xref{surjectivitylemma} with the fact that $\permap$ carries
$\fstableforms-\fsmoothforms$ to $\HH$, we obtain at once the
following theorem, which is easily seen to be equivalent to the main
theorem of \cite{ACT}:

\proclaim{Theorem.} The period map $\permap:\smoothmoduli\to P\mono\backslash(\C
H^4\setminus\HH)$ is an isomorphism of analytic spaces.
\endproclaim
\procref{CRAStheorem}  




\subheading{Homeomorphism on the nodal divisor}

Let $\nodalmoduli=\stablemoduli\setminus\smoothmoduli$, which is the
same as $G\backslash\stablepolydiscr$, the moduli space of cubic
surfaces with nodes but no other singularities.  
Then
$\permap|_{\nodalmoduli}:\nodalmoduli\map\proj\mono\backslash\HH$. 
Let $\Eisenstein^{3,1}\sset\Eisenstein^{4,1}$ be the standard
embedding where the last coordinate is zero, let $\mono'=
\Aut^+(\EE^{3,1})$ be the group of spinor norm one automorphisms, and
let $\mono'\sset\mono$ and $\C H^3\sset\C H^4$ be the consequent
embeddings.  The natural map $P\mono'\backslash\C
H^3\to P\mono\backslash\HH$ is bijective: surjectivity follows from transitivity of
$P\mono$ on shorts roots (Theorem~\xref{thmEqualsAutPlusOfeIFourOne}) and injectivity
follows from Lemma~\xref{secondembeddedlemma}.  Since it is proper, this map is a
homeomorphism. (It is also an  isomorphism of analytic spaces, as are the other
homeomorphisms in this subsection.  We do not, however, need this for the proof.  The
analytic space isomorphism will also be a conseqence of the main theorem.) The aim of
this subsection is to establish the following result:

\proclaim{Proposition.} The map
$\permap|_{\nodalmoduli}:\nodalmoduli\map P\mono\backslash\HH = P\mono'\backslash\C H^3
$ is a homeomorphism.
\endproclaim
\procref{nodalmoduliisoprop}

\para
For the proof we will use the fact that $\nodalmoduli$ is homeomorphic
to the moduli space of stable sextuples of points in $\P^1$, and the fact,
established in the work of
Deligne and Mostow \cite{DeligneMostow},
that the latter space can be identified with
$\proj\mono'\backslash\C H^3$.  To make a more precise statement, let
$\smoothsextuples$ denote the space of unordered sextuples of distinct
points in $\P^1$, and let $\stablesextuples$ denote the space of
unordered sextuples in $\P^1$ with at most double points.  The group
$PGL(2)$ of automorphisms of $\P^1$ acts properly on both these
spaces, and we let $\DMsmoothmoduli =
PGL(2)\backslash\smoothsextuples$ and
$\DMmoduli=PGL(2)\backslash\stablesextuples$ denote the corresponding
quotients. 
Restating Lemma~2 of \cite{BruceWall}, we
 define a homeomorphism
$\comparisonmap:\nodalmoduli\map\DMmoduli$ in the following way.
Let
$\bar\stablepolydiscr$ denote the set of those $F\in\stablepolydiscr$
such that $(0:0:0:1)$ is a node of $S$ and such that the tangent cone
to $S$ at $(0:0:0:1)$ is $X_0X_2 - X_1^2 = 0$.  Let $\bar G$ denote
the subgroup of $G$ that leaving this point and cone invariant. It is
easy to see that the natural map $\bar
G\backslash\bar\stablepolydiscr\to G\backslash\polydiscr$ is a
bijection; this relies on the fact that the symmetry group of a cubic
surface acts transitively on the nodes of the surface. (See the remark on p.~249 of
\cite{BruceWall}.) Since it is proper, this map is a homeomorphism. 
Define
$\bar\comparisonmap:\bar\stablepolydiscr\to\stablesextuples$ as
follows. If $F\in\bar\stablepolydiscr$, then (after possibly replacing
$F$ by a constant multiple) we have
$$
F(X_0,X_1,X_2,X_3) = X_3(X_0X_2 - X_1^2) + F_3(X_0,X_1,X_2)
\eqn
\eqref{nodalequation}
$$ for some cubic form $F_3$ in three variables.  Then
$\bar\comparisonmap(F)$ is the sextuple of zeros of the binary sextic
form $F_3(U^2,UV,V^2)$.  Geometrically, $\bar\comparisonmap(F)$ is the
set of directions of the six lines (counting multiplicities
appropriately) on $S$ through the node $(0:0:0:1)$.  It follows from
Lemma~2 of \cite{BruceWall} that $\bar\comparisonmap(F)$ is stable,
and that $\bar\comparisonmap$ descends to a homeomorphism between $\bar
G\backslash\bar\stablepolydiscr$ and $\DMmoduli$. Defining
$\comparisonmap:\nodalmoduli\to\DMmoduli$ by precomposing with
the identification $\nodalmoduli\isomorphism\bar
G\backslash\bar\stablepolydiscr$, we have proved the following lemma:
\pararef{comaprisonmoduli}  



\proclaim{Lemma.} The map $\comparisonmap:\nodalmoduli\map\DMmoduli$ just defined is
a homeomorphism.
\endproclaim
\procref{modulicomparisonlemma}

\para 
In \cite{DeligneMostow}, Deligne and Mostow
construct a number of period maps from suitable compactifications of
spaces of distinct $N$-tuples of points in $\P^1$ to quotients of
complex hyperbolic $(N-3)$-space by suitable discrete groups.  Among
their constructions is a period map
$\DMpermap:\DMmoduli\map\proj\mono' \backslash\C H^3$, where
$\DMmoduli$ and $\mono'$ are as above.  This is the first example in
the list $N=6$ of \S14.4 of \cite{DeligneMostow}.  Some comments on
the precise form in which we use their results are in order.  First,
we could start from sextic forms in $2$ variables rather than the
space $\forms$ of \pararefer{cyclic} and perform all the constructions
analogous to the ones of our \S\S\xref{smoothModuliSec}--\xref{stableModuliSec}, using the
first cohomology of the triple cover of $\P^1$ branched over a sextuple $x = \langle
x_1,\cdots , x_6\rangle\in\smoothsextuples$. This is a non-singular curve
$C_x$ of genus $4$, with affine equation $ w^3 =
(z-x_1)\cdots(z-x_6)$.  We obtain a period map
$$
\DMpermap:\DMsmoothmoduli\map P\mono'\backslash\C H^3
$$
by assigning to $x$ the space $H_\wbar^{1,0}(C)\sset H_\wbar^1(C)$ spanned by the
differential 
$$ 
{dz \over w} = { dz \over (z - x_1)^{1/3}\cdots (z - x_6)^{1/3} }\;.
$$ 
Proceeding as before, this map extends to Fox completions and fits into a diagram
   analogous to
\eqrefer{perdiagram}:
$$
\matrix{
 & \DMfmoduli  & \map & \C H^3 \cr
 & \downarrow &   & \downarrow  \cr
 & \DMmmoduli & \map & P\monotheta'\backslash\C H^3 \cr
 & \downarrow &   & \downarrow  \cr
 & \DMmoduli & \map & P\mono'\backslash\C H^3 \cr
}
\eqn
\eqref{DMperdiagram}
$$ Here $\DMmmoduli$ is the moduli space of {\sl ordered} stable
sextuples in $\P^1$, and the top and middle horizontal arrows are
shown in \cite{DeligneMostow} to be isomorphisms.  The lower
horizontal arrow is obtained by passing to unordered sextuples, and it
follows that it must also be an isomorphism.  Since the actual groups
are not identified in \cite{DeligneMostow}, we make the following
remark.  It is shown in \cite{DeligneMostow} that the discrete group
of hyperbolic motions in the right middle position of
\eqrefer{DMperdiagram} is a homomorphic image of the pure braid group
on six strands, with the standard generators acting by triflections.
From this, or directly from considerations as in our \S\xref{localmonodromy}, it follows that the discrete group occurring in
the lower right hand corner of \eqrefer{DMperdiagram} is an image of
the braid group on six strands and is generated by hexflections.  From
Lemma~\xref{thmGotAutPlusOfeIThreeOne} it follows that this group
is $\proj\mono'$ as asserted (and, as in Theorem~\xref{thmCongruenceSubgroupGenerators}, that the group in the
middle right hand position is the congruence subgroup
$\proj\monotheta'$).  We thus have the following theorem:
\pararef{DMmap}  




\proclaim{Theorem (Deligne-Mostow \cite{DeligneMostow}).} The period map $\DMpermap$
just described gives an isomorphism $\DMpermap:\DMmoduli\map\proj\mono'\backslash \C
H^3$ of analytic spaces. 
\endproclaim
\procref{DMiso}

The proof of Proposition~\xref{nodalmoduliisoprop} reduces to the following
proposition:



\proclaim{Lemma.} $\DMpermap\comp\comparisonmap = \permap|_{\nodalmoduli}:
\nodalmoduli\map\proj\mono'\backslash\C H^3$.
\endproclaim

\proof It is enough to check that $\DMpermap\comp\comparisonmap =
\permap|_{\nodalmoduli}$ on the open subset $
G\backslash\stablepolydiscr^1$ of $\nodalmoduli =
G\backslash\stablepolydiscr$. If $F\in\stablepolydiscr^1$, then from
Lemma~\xref{lemmaextendedmap} we see that
$\permap(F)\in\proj\mono'\backslash\C H^3$ is the equivalence class of
the line $f_*(H^{2,1}_\wbar(\tilde T))\in\C H^3$, where $f:H^3_\wbar
(\tilde T)\map\C^{3,1}$ is any isometry that maps the projection of the  integral lattice
$H^3(\tilde T,\Z)$ in $H^3_\wbar(\tilde
T)$ isomorphically to the lattice
$\Eisenstein^{3,1}$ in $\C^{3,1}$. Recall from \pararefer{quicknodalfracdifferentials} that
$\tilde T$ is the blow-up of the singular cubic threefold $T$
associated to $F$.  From
\pararefer{DMmap} we see that
$\DMpermap\comp\comparisonmap(F)\in\proj\mono'\backslash\C H^3$ is the equivalence
class of $f_*'(H^{1,0}_\wbar(C_{\comparisonmap(F)}))\in\C H^3$, where
$f':H^1_\wbar( C_{\comparisonmap(F)})\map\C^{3,1}$ is any 
isometry which maps of
the integral lattice
$H^1(C_{\comparisonmap(F)},\Z)$ isomorphically onto
$\Eisenstein^{3,1}$.  Recall that $\comparisonmap(F)\in\DMmoduli$ is represented by
the sextuple of zeros of the binary sextic $F_3(U^2,UV,V^2)$, where $F_3$ is as in
\eqrefer{nodalequation}, and that $C_{\comparisonmap(F)}$ is the triple cover of
$\P^1$ branched along the sextuple $\comparisonmap(F)$.  Thus to prove that
$\DMpermap\comp\comparisonmap (F) = \permap (F)$ it is enough to produce an
isomorphism $H^3_\wbar(\tilde T)\map H^1_\wbar(C_{\comparisonmap(F)})$ that takes the
projection of the integral lattice
$H^3(\tilde T,\Z)$ to the projection of the integral lattice
$H^1(C_{\comparisonmap(F)},\Z)$ and which preserves the Hodge structures.  For this it
is enough to produce an isomorphism
$H^3(\tilde T,\Z)\map H^1(C_{\comparisonmap(F)},\Z)$ which commutes with the actions of
the cyclic automorphisms
$\sigma$ on $\tilde T$ and $C_{\comparisonmap(F)}$, and whose complexification is an
isomorphism of Hodge structures (of bidegree $(-1,-1)$).

The latter is easy to do using the well known structure of cubic hypersurfaces with a
double point.  First observe (see \eqrefer{nodalequation} that the singular threefold
$T\subset\P^4$ has equation
$$
X_3(X_0X_2 - X_1^2) + F_3(X_0,X_1,X_2) - Y^3 = 0.
$$ If $F\in\stablepolydiscr^1$ then the only singular point of $T$ is
$(0:0:0:1:0)$.  Projecting $T$ from this point to the hyperplane $X_3 = 0$, we see that
$\tilde T$ is isomorphic to $B_{C'}\P^3$, the blow-up of $\P^3$ along the curve
$C'\subset\P^3$ which is the complete intersection of the quadric
$X_0X_2 - X_1^2 = 0$ and the cubic $F_3(X_0,X_1,X_2) + Y^3 = 0$.  
See
Lemma~6.5 of \cite{ClemensGriffiths} for more details.  Setting $X_0 =
U^2, X_1 = UV, X_2 = V^2$, we see that $C'$ is isomorphic to the
sextic curve
$$
F_3(U^2,UV,V^2) - Y^3 = 0
$$
in the weighted projective space $\P(1,1,2)$ with homogeneous coordinates
$(U,V,Y)$.   In other words, $C'$ is isomorphic to the curve $C_{\comparisonmap(F)}$, the
cyclic triple cover of $\P^1$ branched along
${\comparisonmap(F)}$.  Let us write simply $C$ for $C_{\comparisonmap(F)} = C'$. Thus
$\tilde T = B_C\P^3$.  Note that the cyclic automorphism
$\sigma$ of $\P^4$ defined in \pararefer{cyclic} induces cyclic group actions on
$\tilde T$, $\P^3$ and $C$.  

Now let $D\subset B_C\P^3$ denote the preimage of $C$ under
$B_C\P^3\map\P^3$.  
Then $D$ is
isomorphic to the projectivized normal bundle of $C$ in $\P^3$,
and the the cyclic
automorphism $\sigma$ acts on it in a natural way. 
We also have natural maps
$$
H^3(\tilde T,\Z) = H^3(B_C\P^3,\Z)\map H^3(D,\Z)\map H^1(C,\Z)
\eqn
\eqref{gysinmap}
$$
where the first arrow is induced by the inclusion of $D$ in $\tilde T =
B_C\P^3$ and the second is the Gysin map (integration over the fiber). 
It is easy to see that both maps are isomorphisms, that they commute with
the action of $\sigma$, that the complexification of the first arrow is an isomorphism
of Hodge structures (of bidegree $(0,0)$), and that the complexification of the second
arrow is an isomorphism of Hodge structures (of bidegree $(-1,-1)$). (See Lemma~3.11
of \cite{ClemensGriffiths} for a related discussion.)  The composition of the two arrows
gives the desired isomorphism
$H^3(\tilde T,\Z)\map H^1(C,\Z)$, thereby completing the proof of the lemma, and of
Proposition~\xref{nodalmoduliisoprop}.           








\subheading{Proof of Theorem~\xref{maintheorem}}

\para
First observe that that Theorem~\xref{CRAStheorem} and
Proposition~\xref{nodalmoduliisoprop} together imply that the
bottom horizontal arrow of \eqrefer{perdiagram} is a homeomorphism.
Since a holomorphic homeomorphism with image a normal analytic space
is biholomorphic, Theorem~\xref{maintheorem} is proved for the
bottom horizontal arrow of \eqrefer{perdiagram}.

Now consider the middle horizontal arrow of \eqrefer{perdiagram}.  Its
restriction to $\msmoothmoduli$ maps $\msmoothmoduli$ to
$\proj\monotheta\backslash(\C H^4-\HH)$ and is a proper open map of degree
one; thus it is an isomorphism.  Using the fact that
$\mstableforms$ is the Fox completion of $\msmoothforms$ over
$\stableforms$ it is easy to see that $\mstablemoduli =
G\backslash\mstableforms$ is the Fox completion of $\msmoothmoduli =
G\backslash\msmoothforms$ over $\stablemoduli =
G\backslash\stableforms$.  Consequently the required isomorphism follows
from 
the uniqueness of the Fox completion.  In more detail, following the
terminology of \cite{Fox}, one checks that $\mstablemoduli$ is a spread
over $\stablemoduli$ (because $\mstableforms$ is a spread over
$\stableforms$) and that it is a complete spread (because of the
completeness of $\mstableforms$ over $\stableforms$).  It is obvious
that $\proj\monotheta\backslash\C H^4$ is the Fox completion of
$\proj\monotheta\backslash(\C H^4\setminus\HH)$ over
$\proj\mono\backslash\C H^4$.  From the extension theorem of \S3 of
\cite{Fox} it follows that there is a map $\proj\monotheta\backslash\C
H^4\map\mstablemoduli$ which restricts on
$\proj\monotheta\backslash(\C H^4\setminus\HH)$ to the inverse of the
restriction of the middle horizontal arrow of \eqrefer{perdiagram} to
$\msmoothmoduli$ and which covers the inverse of the bottom horizontal
arrow of \eqrefer{perdiagram}.  This extension must be a continuous
inverse to the middle horizontal arrow of \eqrefer{perdiagram}. It
follows that the middle horizontal arrow is an isomorphism of complex
manifolds.  

The top horizontal arrow can be handled in the same way: its restriction to
$\fsmoothmoduli$ is an isomorphism onto $\C H^4\setminus\HH$ because the
restrictions of the two top vertical arrows to these spaces are unbranched covers and
the middle arrow is an isomorphism.  The isomorphism on $\fstablemoduli$ is handled by
a similar extension argument for Fox completions. 

The fact that $\permap:\fstablemoduli\to\C H^4$ carries framed
surfaces with exactly $k$ nodes onto $\HH^k$ follows from the
equivariance of the map and the fact that it is biholomorphic.  Finally,
the isomorphisms of \eqrefer{compactifiedPerdiagram} are clear because
the horizontal arrows are holomorphic bijections and the Satake
compactifications are normal analytic spaces \cite{BB}. This
completes the proof of Theorem~\xref{maintheorem}.

  






\noindent{\bf Proof of Theorem~\xref{orbifoldIsomorphismTheorem}:}

\para
We write $\hat Q$ and $\hat Q_\theta$ for the spaces
$P\mono\backslash\C H^4$ and $P\monotheta\backslash\C H^4$
equipped with the orbifold structures defined in
\pararefer{newOrbifoldStructures}. The orbifold isomorphism
$\mstablemoduli\isomorphism\hat Q_\theta$ follows because, as
orbifolds, they are manifolds (\pararefer{definemoduli} and
\pararefer{thmTorsionInCongruenceSubgroup}), and $\permap$ is an
analytic-space isomorphism. The isomorphism
$\stablemoduli\isomorphism\hat Q$ requires a different
technique, which could also be applied to $\hat Q_\theta$. Let
$x\in \stablemoduli$ be represented by a form
$F\in\stablepolydiscr^k\sset\stableforms$, and let
$f\in\fstableforms$ be a framing of $F$. We may choose a small
neighborhood $W$ of $F$ that is invariant under the stabilizer
$J$ of $F$ in $G$. Let $\tilde W$ be the component of the
preimage of $W$ that contains $f$. Because $J$ preserves
$\polydiscr\cap W$, every element of $J$ lifts to an
automorphism of $\tilde W$ preserving the preimage
$\tilde\polydiscr$ of $\polydiscr$. These lifts normalize the
group $N\isomorphism(\Z/6)^k$ of covering transformations of $\tilde W$ over
$W$, yielding a group $H=N.J$ acting on $\tilde W$. Choose a
small 4-dimensional disk $D$ that is transverse at $f$ to the $G$-orbit of $f$
and is invariant under $H$. We will compare the two maps $D\to\C
H^4\to\hat Q$ and $D\to\stableforms\to\stablemoduli$ and observe
that they define the same orbifold structure. The quotient $D/N$
is a complex manifold, its image in $\stableforms$ is a disk
transverse at $F$ to the $G$-orbit of $F$, and by construction
it is $J$-invariant. The orbifold structure of $\stablemoduli$
is given by the quotients of such invariant transverse disks in
$\stableforms$ by the local isotropy groups, so the map to
$(D/N)/(H/N)=(D/N)/J$ is an orbifold chart for
$\stablemoduli$. On the other hand, $D$ projects
biholomorphically to a neighborhood of $\permap(f)$ in $\C H^4$
because $\fstableforms$ is a principal $G$-bundle over $\C
H^4$. By $P\mono$-equivariance, we know that the subgroup $N$ of
$H$ acts on $\C H^4$ by the 6-fold reflections in the components
of $\HH$ that pass through $\permap(f)$. The definition of $\hat
Q$ as an orbifold shows that an orbifold chart for a
neighborhood of $\permap(x)$ is the map from the complex
manifold $D/N$ to $(D/N)/(H/N)=(D/N)/J$. The orbifold
isomorphism is now clear.








\section{The universal cubic surface}
\secref{universalsurfacesec}

\para
In this section we prove a simple but remarkable theorem
which relates two vector bundles over the moduli space of marked
smooth cubic surfacs.  To state it, observe that since $G$ acts freely on
$\mstableforms$ (Lemma~\xref{freeAndProper}), the universal surface
\eqrefer{universalsurface} descends to a universal marked cubic surface 
$\munisurface$ over $\mstablemoduli$.  Its total space is, however, no
longer smooth.  In addition, the trivial $\C^{\,4}$-bundle in whose projective bundle
$\unisurface$ lies (cf. \pararefer{universalfamilies}) descends to a vector bundle $\V$ over
$\mstablemoduli$, and $\munisurface\subset P\V$.  Then we have the following.
\pararef{universalmarkedsurface}

\proclaim{Theorem.} The bundles $T\msmoothmoduli$ and $\V|_{\msmoothmoduli}$ are 
$W(E_6)$-equivariantly isomorphic.
\endproclaim
\procref{tangentbundletheorem}


As a consequence, used in the next section, symmetries
of cubic surfaces are in one-to-one correspondence with
symmetries of the moduli space of marked forms which fix
a point:


\proclaim{Corollary.} For each $F\in\smoothforms$,
the linear action of its isotropy group on $\C^{\,4}$ is isomorphic to the
linear action of the isotropy group of the class of $m$ (resp.  $f$)
on the tangent space to $\msmoothmoduli$ (resp.  $\fsmoothmoduli)$,
where $m\in\mstablemoduli$ (resp. $f\in\fstablemoduli$) lies over $F$.
\endproclaim
\procref{equivariantisomorphism}


The theorem follows from an easily proved lemma. To state it, let $\GG\subset
T\smoothforms$ be the sub-bundle of vectors tangent to the
$G$-orbits, and let $\QQ$ denote the quotient bundle $T\smoothforms/\GG$.  Let $GL(4,\C)$ act on
$\smoothforms\times \C^{\,4}$ as in the formulas of \pararefer{groupG}.
Then we have the following.
\pararef{equivariantbundles}

\proclaim{Lemma.} The bundles $\QQ$ and $\smoothforms\times\C^{\,4}$ are equivariantly isomorphic
$GL(4,\C)$-bundles.
\endproclaim
\procref{bundleisomorphismlemma}


\para
Given the lemma, observe that after lifting the $GL(4,\C)$-action as
in lifting the $G$-action defined in
\pararefer{defMarkingOfSmoothSurface},   
there is an equivariant isomorphism of the bundles lifted to
$\msmoothforms$. Over $\msmoothforms$ there is an isomorphism $\QQ\cong
p^*T\msmoothmoduli$ of $GL(4,\C)$-bundles, where
$p:\msmoothforms\map\msmoothmoduli$ is the orbit map, as well as an
isomorphism $\msmoothforms\times\C^{\,4}\cong p^*\V$ of
$GL(4,\C)$-bundles.  Since these $GL(4,\C)$-equivariant isomorphisms
over $\msmoothforms$ are equivalent to the asserted
$W(E_6)$-equivariant isomorphisms over $\msmoothmoduli$, the lemma
does indeed prove Theorem~\xref{tangentbundletheorem}.  




\para \noindent{\bf Proof of Lemma~\xref{bundleisomorphismlemma}}: For
$F\in\smoothforms$, let
$J_F$, the Jacobian ideal of
$F$, denote the ideal in the polynomial ring
$\C[X_0,\cdots,X_3]$ generated by the partial derivatives of $F$, and let $R_F$ denote the
quotient ring $\C[X_0,\cdots,X_3]/J_F$.  In the notation of \pararefer{equivariantbundles},
$\QQ_F = R^3_F$, and ${\C^{\,4}}^* = R^1_F$; these are the graded pieces of $R_F$ of degrees one
and three respectively.  By a theorem of Macaulay,
 the graded ring $R_F$ satisfies Poincar\'e duality with a fundamental class in 
$R^4_F$. In particular, the pairing
$$
R^1_F\otimes R^3_F\map \C
$$
defined by
$$
P\otimes Q\map \ Res_0 \ {{P Q \,dX_0\wedge\cdots \wedge dX_3}\over{\partial F/\partial X_0
\cdots
\partial F/\partial X_3}}
\eqn
\eqref{residuepairing}
$$
 is a perfect $GL(4,\C)$-invariant pairing.  See \S3d of
\cite{CarlsonGriffiths} for more details. The
$R^i_F$ define
$GL(4,\C)$-bundles $R^i$ over
$\smoothforms$, where $R^1 \cong \smoothforms\times{\C^{\,4}}^*$ and $R^3\cong \QQ$.  The
pairing
\eqrefer{residuepairing} provides a $GL(4,\C)$-equivariant isomorphism between $R^3$ and
${R^{\,1}}^*$, hence the required $GL(4,\C)$-equivariant isomorphism between $\QQ$ and
$\smoothforms\times\C^4$.
  

\section{Automorphisms of Cubic Surfaces}
\secref{specialcubics}

\para
Theorem~\xref{smoothmodulitheorem} identifies the
moduli space $\smoothmoduli$ of  smooth cubic surfaces with
$P\mono\backslash (\C H^4\setminus\HH)$. However, the isomorphism is far from
explicit, and so it is natural to ask which surfaces correspond to which
points of the ball quotient. In this section we solve this
problem for the two most symmetric cubic surfaces, the Fermat
cubic defined in $\P^3$ by $\sum_{i=0}^3X_i^3=0$, and the
diagonal surface defined in $\P^4$ by 
$\sum_{i=0}^4Y_i=\sum_{i=0}^4Y_i^3=0$.
The idea is that smooth symmetric surfaces correspond to points in
$\C H^n\setminus\HH$ with nontrivial stabilizers in $P \mono$. This 
assertion is equivalent
to the isomorphism of orbifolds in Theorem~\xref{smoothmodulitheorem}, and is
in analogy with the case of cubic curves, where the 
curves with symmetry correspond to orbifold points of the moduli space.

\para
To make this last point explicit, suppose that $f\in\fsmoothforms$ lies over $F\in
\smoothforms$ and that
$\alpha\in G$ leaves $F$ invariant.  There is a
unique element
$\hat{\alpha}\in P\mono$ such that $\hat{\alpha} f = \alpha f$, namely,
$\hat{\alpha}=f\circ\alpha^*\circ f^{-1}$, where $\alpha^*$ indicates the action
of $\alpha$ on
$\Lambda(T)$. 
(The uniqueness relies on the fact that both $G$ and $P\mono$ act
freely on $\fsmoothforms$.)
The map $\alpha\mapsto\hat{\alpha}$
defines an isomorphism from the stabilizer in $G$ of $F$ to the
stabilizer in $ P\mono$ of the image of $f$ in
$\C H^4\setminus\HH$ under the period map. We call $\hat\alpha$ the
transform of $\alpha$ (with respect to $f$).

%\para
%The conjugacy class of $\hat{\alpha}$ is
%obviously independent of $f$. Indeed it is even independent of $F$.  The
%key fact here is that the set of fixed points of $\alpha$ in
%$\smoothforms$ is connected.  This is because the fixed point set
%is a linear space of
%cubic forms minus the discriminant locus. Therefore if $\alpha$ preserves
%another element, say $F'$, of $\smoothforms$, then it preserves
%a path in $\smoothforms$ joining $F$ and
%$F'$. Parallel-transport along this path establishes an isometry between pairs
%$(\Lambda(T),\alpha)$ and $(\Lambda(T'),\alpha)$, and so
%the transforms of $\alpha$ determined by $F$ and by $F'$
%are conjugate in $P\Aut(\Lambda)=
%P\mono$. In summary, for every
%$\alpha\in G$ that preserves a smooth cubic form, its transform
%$\hat{\alpha}$ is well-defined up to conjugacy.

\para
The most important kind of symmetry of a cubic surface is a
biflection of $\P^3$. Biflections play a large role in Segre's
investigation, \S\S98-100 of \cite{Segre}, where they are called
harmonic homologies. Segre showed that if a cubic surface admits a
nontrivial symmetry then it admits a biflection, and that in
almost all cases the full group of the surface is generated by
biflections. We now compute the transform of a biflection and
then give explicit coordinates for the images of the diagonal
and Fermat surfaces under the period map.

\proclaim{Lemma.}
If $\alpha\in GL(4,\C)$ is a biflection then any transform $\hat{\alpha}$
of $\alpha$ acts on $\C H^4$ as the biflection in some
long root $r$.
\endproclaim
\procref{biflectionTransform}

\para
\proof
Recall the identification in Theorem~\xref{tangentbundletheorem}
of the tangent bundle to $\msmoothmoduli$ with the
$\C^{\,4}$-bundle $\V$ .  From that identification, and
specifically from \pararefer{equivariantisomorphism}, one sees
that $\alpha$ acts on $\C^{\,4}$ in the same way it acts on the
tangent space to $\msmoothmoduli$, hence in the same way as it acts on
the tangent space to $\C H^4$ at $g(f)$, where $f$ is a framing
of some smooth form preserved by $\alpha$.  Thus $\hat{\alpha}$
acts on $\C H^4$ as a biflection. From
$\hat\alpha=f\circ\alpha^*\circ f^{-1}$, it follows that the action
of $\hat\alpha$ on $\C H^4$ may be represented by an isometry of
$\Lambda$ of order 2. Such an isometry can only be a reflection
of $\Lambda$, and a simple arithmetic argument (Lemma~8.1 of
\cite{Allcock}) shows that any reflection of a unimodular
Eisenstein lattice is a reflection in a lattice vector $r$ of
norm $\pm1$ or $\pm2$. The case of negative norm is excluded
because such reflections do not act on $\C H^4$ as biflections
(each has an isolated fixed point). The case of norm 1 is
excluded because the image of $f$ would, as a fixed point of
$\hat{\alpha}$, lie in $\HH$.  This is impossible because $F$ is
smooth. Thus $r$ must have norm $2$.

\proclaim{Theorem}
There is a single $\mono$-orbit of vectors of $\Lambda$ of norm
$-5$ that are orthogonal to no short roots. The corresponding
point in $P\mono\backslash \C H^4$ is the image under the period map of the
diagonal surface.
\endproclaim
\procref{diagonalSurfacePoint}

\para \proof
Suppose $v\in \Lambda$ has norm $-5$. Then $\Lambda$ contains the
sublattice $v\perp\oplus\langle v\rangle$, and the projections into the
spans of the two summands define an $\Eisenstein$-module
isomorphism (the gluing map) of $(v\perp)'/v\perp$ with
$\langle v\rangle'/\langle v\rangle$. Here the prime indicates
the dual lattice.
The norm of an element of one of these
dual quotients is well-defined modulo $1$, and its sum with the norm of
its image under the gluing map is $0$ modulo $1$. This allows
one to compute the norms (mod $1$) of the elements of
$(v\perp)'/v\perp$. This in turn allows one to verify that
$v\perp\oplus\langle w\rangle$ may be enlarged in an essentially 
unique way to a
unimodular lattice $L$, where $\langle w\rangle$ denotes a 1-dimensional
lattice over $\Eisenstein$ with a generator $w$ of norm $5$. Since
$\Eisenstein^5$ is the only positive-definite unimodular
$\Eisenstein$-lattice in five dimensions,
$L$ is isomorphic to $\Eisenstein^5$. One can reverse the procedure to recover
$v$ from $w$. This establishes a bijection between
$\Aut(\Lambda)$-orbits of norm $-5$ vectors in $\Lambda$ with
$\Aut(\Eisenstein^5)$-orbits of norm $5$ vectors in
$\Eisenstein^5$, the bijection being given by the relation of
having isometric orthogonal complements. 
A trivial calculation shows that there is a unique orbit of norm
5 vectors in $\Eisenstein^5$ that are orthogonal to no short
roots: a representative is $(1,1,1,1,1)$. Therefore, $\aut
\Lambda$ acts with a single orbit on  the norm $-5$ vectors of $\Lambda$
that are orthogonal to no short roots. One can check that
$v=(3,1,1,1,1)$ is orthogonal to no short roots, so it is a
representative for this orbit. Since $\aut
\Lambda=\mono\times\{\pm I\}$, to show that $\mono$ acts
transitively on this $(\aut
\Lambda)$-orbit it suffices to show that $\mono$ contains an
element exchanging $v$ and $-v$. The product of the central
involution and the biflection in any long root of $v\perp$, say
$(0,0,0,1,-1)$, accomplishes this and has spinor
norm $+1$.  Therefore it lies in $\mono$. This proves the first part of
the theorem.
\pararef{onlyOneOrbitofMinusFiveVectors}

\para
Now suppose that $f$ is a framed cubic form whose underlying form $F$
defines a copy of the diagonal surface, which has symmetry group
$S_5$.  Let $x=\permap(f)\in\C H^4$, and observe that it
is stabilized by a
group $\hat S_5$. We may choose coordinates for $x\perp$ in
$\C^{\,4,1}$ as five coordinates which sum to zero, with the ten
biflections given as transpositions of coordinates. With respect to these
coordinates there is a long root of $\Lambda$ proportional to
$r_1=(1,-1,0,0,0)$, and after scaling the coordinate system we may
suppose that $\Lambda$ actually contains this vector. Then $\Lambda$
also contains a long root proportional to $r_2=(0,1,-1,0,0)$; its
inner product with $r_1$ must be a unit of $\Eisenstein$, so that by
replacing this root by a scalar multiple of itself we may suppose that
$\Lambda$ contains $r_2$. Continuing in this fashion we may suppose
that $\Lambda$ contains $r_3=(0,0,1,-1,0)$ and that $r_4=(0,0,0,1,-1)$. These
four roots generate an $A_4$ root lattice. Since it has determinant~5,
which is square-free (indeed prime) in $\Eisenstein$, it is a maximal
integral 4-dimensional $\Eisenstein$-lattice.  Since $\Lambda$ is
unimodular, its orthogonal complement is generated by an element of
norm $-5$. Since $x\notin\HH$, we have established that $x\in\C H^4$
corresponds to one of the norm $-5$ vectors considered above.

%\para
%\remark
%The argument in the first paragraph of the proof, regarding the
%bijection between orbits of norm $-5$ vectors in $\Lambda$ and
%orbits of norm $5$ vectors in $\Eisenstein^5$, generalizes to
%higher dimensions.  If $k\geq0$ and $n$ is a natural number $n$
%for which there exists $\xi\in\Eisenstein$ with
%$\xi\bar\xi\equiv-1$ (mod~$n$), then there is a bijection
%between the orbits of norm $-n$ vectors in $\Eisenstein^{k,1}$
%and the union of the sets of orbits of norm $n$ vectors in all
%isometry classes of positive-definite unimodular
%$\Eisenstein$-lattices of dimension $k+1$. The bijective
%relation remains that of having isometric orthogonal
%complements. Applying this bijection in high dimensions requires
%care, since there may be many different positive-definite
%unimodular $\Eisenstein$-lattices.

\proclaim{Theorem.}
There is a unique $\mono$-orbit of vectors $v\in\Lambda$ of norm
$-3$ which are orthogonal to no short roots. The corresponding
point in $P\mono\backslash \C H^4$ is the image under the period map of the
Fermat cubic.
\endproclaim
\procref{fermatSurfacePoint}

\proof
If $v$ is not primitive then it is a multiple of a norm $-1$ vector,
so that $v\perp\isomorphism\Eisenstein^{4,1}$ contains short roots. 
So suppose $v$ is primitive. As in the previous argument we may
compute the norms modulo 1 of the elements of $(v\perp)'/v\perp$, and in
this way we find that $v\perp$, of determinant~3, has index~3 in a unimodular
lattice. Since the only positive-definite unimodular
$\Eisenstein$-lattice in 4 dimensions is $\Eisenstein^4$,
$v\perp$ is a sublattice of $\Eisenstein^4$ of index 3
containing no short roots.  This implies
that $v\perp$ is isometric to 
$$
D_4(\theta)=\{\,(z_1,\ldots,z_4)\in\Eisenstein^4\>|\>
z_1+z_2+z_3+z_4\equiv 0\;(\hbox{mod}\>\theta)\,\}.
$$
One can classify the unimodular lattices containing
$v\perp\oplus\langle v\rangle$ by considering the possible
gluings of $D_4(\theta)'/D_4(\theta)$ to $\langle
v\rangle'/\langle v\rangle$. Up to isometry of the summands
$v\perp$ and $\langle v\rangle$, there is a unique such
unimodular lattice in which $v$ is orthogonal to no short roots.
If $w$ is another norm $-3$ vector
in $\Lambda$ orthogonal to no short roots, then the arguments
above show that $w\perp$ is isometric to $v\perp$, and the
essential uniqueness of the gluing map shows that the isometry
$w\perp\oplus\langle w\rangle\cong v\perp\oplus\langle v\rangle$
extends to $\Lambda$. We have shown that $\aut \Lambda$ has only
one orbit of primitive norm $-3$ vectors that are orthogonal to
no short roots. One can check that $v=(2-\wbar,1,1,1,1)$ is
orthogonal to no short roots, so it represents this orbit. 
The argument of \pararefer{onlyOneOrbitofMinusFiveVectors} shows that $\mono$ also acts transitively on
these vectors.

\para
Now suppose that $f$ is a framed cubic form with underlying form $F$ defining a
copy of the Fermat surface, and let $x=\permap(f)$ as
before. The stabilizer of $F$ in $G$ is the complex reflection
group $(\Z/3)^3{:}S_4$, generated by the biflections in the long
roots of $D_4(\theta)$. 
Mimicking the previous proof, one can find a
copy of $D_4(\theta)$ in $x\perp$. Since $x\notin\HH$, and since any
4-dimensional enlargement of
$D_4(\theta)$ that is integral contains short roots, 
$D_4(\theta)$ is all of $x\perp$. Therefore
$D_4(\theta)\perp$ is spanned by a vector
of norm $-3$, and indeed one of the sort we have just considered.

%\para
%{\bf Remark:}  Given these theorems it is natural to
%investigate the surfaces associated to other vectors of
%$\Lambda$ of norm $-n$ for small $n$. If $n=2$ or $4$ then an
%argument similar to \pararefer{diagonalSurfacePoint} 
%shows that $v\perp$ contains short roots, so that
%the corresponding surfaces are singular. If $n=1$ then
%$v\perp\cong \Eisenstein^4$ and the corresponding surface is the
%unique one with four nodes. We do not know what happens when $n>5$.

\para
\remark
One can use a known property of cubic surfaces to show that
$P\mono$ provides a counterexample to a natural conjecture
regarding complex reflection groups. It is known that there is a
smooth cubic surface whose symmetry group is not generated by
complex reflections of $\P^3$ (see \cite{Segre}, pp.~151--152). Therefore the stabilizer
in
$P\mono$ of a corresponding point $x$ in $\C H^4$ is not generated by complex
reflections. This occurs despite the fact that $P\mono$ itself is generated
by complex reflections. This phenomenon contrasts sharply with
both real hyperbolic reflection groups and finite complex
reflection groups. In both these settings, the stabilizer in the
reflection group of any vector or point of projective space is
itself generated by reflections.

\para
We observed above that any cubic surface admitting a nontrivial
symmetry admits a biflection. By Lemma~\xref{biflectionTransform} this implies that
the points of $\C H^4$ corresponding to symmetric cubic surfaces
may be found along the orthogonal complements of long roots of
$\Lambda$.  The following theorem shows that all the symmetric surfaces occur along the
orthogonal complement of any chosen long root.

\proclaim{Theorem.}
$\mono$ acts transitively on the long roots of $\Lambda$.
\endproclaim
\procref{transOnLongRoots}

\proof 
The orthogonal complement of such a root $r$ contains a norm
$0$ vector: consider the real part of $h$ and use Meyer's
Theorem \cite{milnor}. Therefore by
Theorem~\xref{thmEqualsAutPlusOfeIFourOne} we may take $r$ to have the
form $(x,y,0;0,z)$ in the coordinates of
\pararefer{alternateIPmatrix}, where $x$ and $y$ are units of
$\Eisenstein$.  Applying elements of $\mono$, we may take $x=y=1$.
Then, applying a translation, we may take $z=0$, completing the
proof.

\section{Notation}
\secref{notation}
%
\settabs\+SYMBOLSYMBO&REFERENCE\cr
%
\+$\Aut^+\vs$, $\Aut^+\Lambda$, $\Aut^+\eI4,1$, $\Aut^+\eI3,1$
\cr
\+&automorphisms of spinor norm $1$; \pararefer{finitespace}
\cr
%
%\+$B_3$
%&braid group on 3 strands; \pararefer{structureOfSemistableDiscr}
%\cr
%
\+$\forms$, $\smoothforms$, $\stableforms$, $\semistableforms$ &space
of nonzero (smooth, stable, semistable) cubic forms;
\pararefer{cyclic} and \pararefer{GIT}
\cr
%
\+$\tilde\smoothforms$
&a cover of $\smoothforms$; \pararefer{monodromy}
\cr
%
\+$\C H(W)$, $\C H^n$
&complex hyperbolic spaces; \pararefer{complexhyp}
\cr
%
\+$D$
&central subgroup of $GL(4,\C)$ of order~3; \pararefer{groupG}
\cr
%
\+$\polydiscr$, $\stablepolydiscr$, $\semistablepolydiscr$,
$\stablepolydiscr^k$, $\semistablepolydiscr^{a,b}$
\cr
\+&the discriminant locus, its stable and semistable parts, 
and
\cr
\+&strata therein; \pararefer{cyclic}, \pararefer{GIT}, \pararefer{structureofstablediscr} and \pararefer{structureOfSemistableDiscr}
\cr
%
\+$\Eisenstein$
&The Eisenstein integers $\Z[\omega]$; \pararefer{module}
\cr
%
\+$\Eisenstein^{n,1}$
&standard $\Eisenstein$-lattice of signature $(n,1)$; \pararefer{fivemodule}
\cr
%
\+$\eta(S)$, $\eta$
&hyperplane class in $L(S)$, and the ``standard copy'' of it in $L$; 
\pararefer{defMarkingOfSmoothSurface}
\cr
%
\+$F$
&a cubic form; determines $S$ and $T$ implicitly; \pararefer{cyclic}
\cr
%
\+$\fsmoothforms$, $\fstableforms$
&space of framed smooth (stable) cubic forms; 
\pararefer{defFramingOfSmooth} and
\pararefer{definitionFstableforms}
\cr
%
\+$G$
&$GL(4,\C)/D$
\cr
%
\+$g_0$, $g$
&period maps; \pararefer{periodmapzero}, \pararefer{defOfSmoothModuliSpaces}, \pararefer{manyperiodmaps} and \S\xref{cuspidaldegenerations}
\cr
%
%\+GIT
%&geometric invariant theory; \pararefer{GIT}
%\cr
%
\+$\mono$, $\monotheta$
&monodromy group and congruence subgroup; \pararefer{stdModelForMonodromy} and 
\pararefer{congruencesubgroup} 
\cr
%
\+$h$
&hermitian form on $\Lambda(T)$; \pararefer{hermform}
\cr
%
\+$h'$
&hermitian form on $H^3(T,\C)$; \pararefer{decomp}
\cr
%
\+$\HH$, $\HH^k$
&hyperplane arrangement in $\C H^4$, and strata therein; 
\pararefer{hyperplanes} and \pararefer{manyperiodmaps}
\cr
%
\+$\eI n,1$
&another coordinate system for $\Eisenstein^{n,1}$; \pararefer{alternateIPmatrix}
\cr
%
\+$id$
&the identity map
\cr
%
\+$L$, $L(S)$, $L(\unisurface)$
&$\Z^{1,6}$, the lattice $H^2(S)\isomorphism L$, and the local system
of these lattices;
\pararefer{defMarkingOfSmoothSurface}
\cr
%
\+$\Lambda$, $\Lambda(T)$, $\Lambda(\unithreefold)$
&$\Eisenstein^{4,1}$, the $\Eisenstein$-lattice associated to $T$, and the
local system of 
\cr
\+&these $\Eisenstein$-lattices; \pararefer{module},
\pararefer{fivemodule}, \pararefer{sheaves}, and for singular $T$,
\pararefer{concreteframings} \cr
%
\+$\moduli$, $\stablemoduli$, $\smoothmoduli$, $\mmoduli$, $\mstablemoduli$,
$\msmoothmoduli$, $\fstablemoduli$, $\fsmoothmoduli$
\cr
\+&moduli spaces; \pararefer{defOfSmoothModuliSpaces} and \pararefer{definemoduli}
\cr
%
\+$\msmoothforms$, $\mstableforms$, $\msemistableforms$
&space of marked smooth (stable, semistable) cubic forms;
\pararefer{defMarkingOfSmoothSurface}--\pararefer{definitionFoxsemistable}
\cr
%
%\+$\nu$
%&the spinor norm; \pararefer{finitespace}
%\cr
%
\+$p$
&projection $T\to\P^3$; \pararefer{cyclic}
\cr
%
\+$\pi$
&projection $\unisurface\to\forms$ or $\unithreefold\to\forms$; \pararefer{universalfamilies}
\cr
%
\+$q$
&quadratic form on $\vs$; \pararefer{finitespace}
\cr
%
\+$\rho_0$, $\rho$
&monodromy representations; \pararefer{monodromy} and
\pararefer{stdModelForMonodromy}
\cr
%
\+$S$, $S'$, etc.
&cubic surface defined by $F$, $F'$, etc.; \pararefer{cyclic}
\cr
%
\+$\unisurface$, $\unisurface_0$
&universal family of (smooth) cubic surfaces; \pararefer{universalfamilies}
\cr
%
\+$\covtrans$
&branched covering transformation $T\to T$; \pararefer{cyclic}
\cr
%
\+$T$, $T'$, etc.
&cyclic cubic threefold defined by $F$, $F'$, etc.; \pararefer{cyclic}
\cr
%
\+$\unithreefold$, $\unithreefold_0$
&universal 
family of (smooth) cyclic cubic threefolds; \pararefer{universalfamilies}
\cr
%
\+$\theta$
&$\w-\wbar=\sqrt{-3}\in\Eisenstein$; \pararefer{hermform}
\cr
%
\+$\vs$, $\vs(S)$, $\vs(T)$
&$\F_3^5$, and finite vector spaces associated to $S$ and $T$; 
\pararefer{finitespace} and \pararefer{proofCoversCoincide}
\cr
%
%\+$(X_0,\ldots,X_3)$, $(X_0,\ldots,X_3,Y)$
%\cr
%\+&homogeneous coordinates on $\C P^3$ and $\C P^4$; \pararefer{cyclic}
%\cr
%
\+$Z$
&isometric embedding $\Lambda(T)\to H^3_\wbar(T,\C)$; \pararefer{ZisIsometricEmbedding}
\cr
%
\+$\w$
&a primitive cube root of unity; \pararefer{cyclic}
\cr
%
\+$\sympl$
&symplectic pairing on $H^3(T,\Z)$; \pararefer{hermform}
\cr






\bibliography




\bi{Allcock} D. Allcock, New complex and quaternion-hyperbolic reflection
groups, \emph Duke Math. Jour./, {\bf 103} (2000), 303--333.

\bi{Allcockaspherical} D. Allcock, Metric curvature of infinite
branched covers, submitted. 
Available at http://\allowbreak www.math.utah.edu/\allowbreak$\sim$allcock  

\bi{ACT} D. Allcock, J. Carlson, and D. Toledo, A complex hyperbolic structure
for moduli of cubic surfaces, \emph C. R. Acad. Sci. Paris/ , t. 326, S\'erie I
(1998), 49--54. 
% alg-geom/9709016.

\bi{ACTfundgp} D. Allcock, J. Carlson, and D. Toledo, An application of complex
hyperbolic geometry to the fundamental group of the space of cubic
surfaces;
in preparation.  

\bi{AF} D. Allcock and E. Freitag, Cubic surfaces and Borcherds
products; submitted.

\bi{AGV}  V.I. Arnold, S.M. Gusein-Zade, and A.N. Varchenko, \emph Singularities of
Differentiable Maps/, vol II, Birkhauser, Boston, 1988.

\bi{BB} W. L. Baily, Jr. and A. Borel, Compactification of arithmetic
quotients of bounded symmetric domains, \emph Ann. Math./, {\bf 84}
(1966) 442--528.

\bi{Bourbaki} N. Bourbaki, \emph Elements de Math\'ematiques, vol XXXIV: Groupes
et Alg\`ebres de Lie/, chapitres 4, 5 et 6, Hermann et Cie, Paris 1968, pp
288.

\bi{BrieskornSaito} E. Brieskorn, K. Saito. Artin-Gruppen und
Coxeter-Gruppen, Invent. Math. 17 (1972), 245--271.

\bi{Bruce}  J. W. Bruce, A stratification of the space of cubic surfaces. Math. Proc.
Cambridge Philos. Soc. 87 (1980), no. 3, 427--441.

\bi{BruceWall} J. W. Bruce, C. T. C. Wall, On the classification of cubic surfaces. 
J. London Math.
Soc. (2) 19 (1979), no. 2, 245--256.

\bi{CarlsonGriffiths} J. Carlson and P. Griffiths, Infinitesimal variations
of Hodge structure and the global Torelli problem. JournŽes de GŽometrie
AlgŽbrique d'Angers, Juillet 1979/Algebraic Geometry, Angers, 1979, pp.
51--76, Sijthoff \& Noordhoff, Alphen aan den Rijn---Germantown, Md., 1980. 

\bi{CTDiscriminant} J. Carlson and D. Toledo, Discriminant complements and
kernels of monodromy representations,  \emph Duke Math. Jour./ {\bf 97} (1999),
621--648. 

\bi{Clemens} C. H. Clemens, Double Solids, \emph Advances in Math./ 47 (1983)
107--230


\bi{ClemensGriffiths} C. H. Clemens and P. A. Griffiths, The intermediate
Jacobian of the cubic threefold, \emph Ann. of Math./ {\bf 95 } (1972), 281--356.

\bi{CKM} H. Clemens, J. Koll\'ar, S. Mori, \emph Higher Dimensional Complex Geometry
/, Ast\'erisque {\bf 166} (1988), Soc. Math. de France.

%\bi{ClemensSchmid}  C. H. Clemens, Degeneration of K\"ahler manifolds. Duke Math. J.
%44 (1977), no. 2, 215--290.

\bi{atlas} J. H. Conway, R. T. Curtis, S. P, Norton, R. A. Parker, R. A. Wilson, \emph
ATLAS of Finite Groups/, Clarendon Press, Oxford, 1985.

\bi{SPLAG} J. H. Conway, N. J. A. Sloane. Sphere Packings,
Lattices and Groups, second edition. Springer-Verlag, 1993.


\bi{DeligneSGA} P. Deligne, Comparaison avec la th\'eorie transcendente, expos\'e XIV in
Groupes de Monodromie en G\'eometrie Algebrique, pp 116-164, LNM 340, Springer Verlag,
Berlin, 1973. 

\bi{DeligneMostow} P. Deligne and G. D. Mostow, Monodromy of hypergeometric
functions and non-lattice integral monodromy, \emph
Publ. Math. I.H.E.S./ {\bf 63} (1986) 5--89.

%\bi{EV} H\'el\`ene Esnault and Eckart Viehweg, Logarithmic de Rham
%complexes and vanishing theorems. {\sl Invent. Math.} {\bf 86} (1986), no. 1,
%161--194.

\bi{Feit} W. Feit, Some lattices over ${Q}(\surd -3)$. J. Algebra 52 (1978), no. 1,
248--263.

\bi{Fox} R. H. Fox,  Covering spaces with
singularities. Algebraic Geometry and Topology; A symposium in honor of S.
Lefschetz pp. 243--257 Princeton University Press, 1957.

\bi{GoreskyMacPherson} M. Goresky and R. MacPherson, \emph Stratified Morse Theory/,
Springer Verlag, Berlin, 1988. 

\bi{Griffiths}  P.A. Griffiths, On the periods of certain rational
integrals: I and II,  \emph Ann. of Math./ {\bf 90} (1969), 460-541.

\bi{GriffithsHarris}  P. Griffiths and J. Harris, \emph Principles of Algebraic
Geometry/, John Wiley and Sons, New York, 1978.

\bi{Hilbert} D. Hilbert, \"Uber die volle Invariantensysteme, \emph Math. Annalen /
{\bf 42} (1893), 313-370. English transl. in \emph Hilbert's invariant
theory papers; Lie Groups: History, Frontiers and Applications, VIII./
Math Sci Press, Brookline, Mass., 1978.

\bi{Hunt} B. Hunt. Higher-dimensional ball quotients, the
invariant quintic fourfold and moduli spaces of cubic surfaces,
preprint 1998, Max-Plank-Institut, Leipzig. \hfil\break
http://personal-homepages.mis.mpg.de/bhunt/preprints.html

\bi{HuntWeintraub} B. Hunt and S. H. Weintraub, Janus-like algebraic vatieties, \emph
Jour. Diff. Geom./ {\bf 39}, (1994), 509--557.  

%\bi{Klein} F. Klein, Gesammelte Mathematische Abhandlungen, vol 2, Springer-Verlag,
%Berlin, 1922.


\bi{Libgober} A. Libgober, On the fundamental group of the space of cubic
surfaces, \emph Math. Zeit./ {\bf 162} (1978), 63--67.

\bi{LooijengaLondon} E. Looijenga, Isolated Singular Points on Complete Intersections,
Cambridge University Press, Cambridge, 1984. 

\bi{Looijenga} E. Looijenga, Affine Artin groups and the fundamental groups of some moduli
spaces, math.AG/ 9801117.

\bi{Manin} Yu. I. Manin, \emph Cubic Forms: Algebra, Geometry, Arithmetic/,
North-Holland, Amsterdam (1974) pp 292.

%\bi{Malgrange} B. Malgrange, Int\'egrales asymptotiques et monodromie, \emph Ann.
%Sci. Ecole Norm. Sup./, ser. 4, tome { \bf 7} (1974), 405--430.

%\bi{Margulis} G. A. Margulis, Quotient groups of discrete subgroups and
%measure theory, \emph Funct. Anal. Appl./ {\bf 12 } (1978), 295--305.

\bi{Matsumoto} K. Matsumoto, T. Sasaki and M. Yoshida, The monodromy of the period map of
a $4$-parameter family of $K3$-surfaces and the hypergeometric function of type $(3,6)$,
\emph Inter. Jour. Math./ {\bf 3} (1992), 1-164.

\bi{Mess} G. Mess, The Torelli group of genus $2$ and $3$ surfaces, \emph Topology/  {\bf
31} (1992), 775-790.

\bi{Milnor} J. Milnor, Singular Points of Complex Hypersurfaces,
Annals of Mathematics Studies, Princeton University Press 1968, pp 122.

\bi{milnor} J. Milnor and D. Husemoller, 
\emph Symmetric Bilinear Forms/, Springer-Verlag, 1973.

\bi{mostow} Mostow, G. D., Generalized Picard lattices arising from half-integral
conditions. \emph Inst. Hautes \'Etudes Sci. Publ. Math./ {\bf 63}
(1986), 91--106.

\bi{Mumford} D. Mumford, J. Fogarty, F. Kirwan, \emph Geometric Invariant Theory/,
Springer-Verlag, Berlin 1994, pp 292.

\bi{MumfordEnseignement} D. Mumford, Stability of projective varieties, 
\emph Enseignement Math\'ematique/ {\bf 23} (1977), pp 39--110.

\bi{Naruki} I. Naruki, Cross ratio variety as a moduli space of cubic
surfaces, \emph Proc. London Math. Soc./ (3) {\bf 45 } (1982), 1-30.

\bi{OMeara} O. T. O'Meara, \emph Introduction to Quadratic
Forms,/ Springer-Verlag, 1963.

\bi{Picard} E. Picard, Sur les fonctions de deux variables ind\'ependantes
analogues aux fonctions modulaires, \emph Acta Math./ {\bf 2} (1883) 114--135.

%\bi{Raghunathan} M. S. Raghunathan, \emph Discrete Subgroups of Lie
%Groups/, Springer Verlag, Berlin 


%\bi{Salmon} G. Salmon, A Treatise on the Analytic Geometry of Three
%Dimensions, 4th ed., Hodges, Figgis and Co., Dublin, 1882.

\bi{SasakiYoshida} T. Sasaki and M. Yoshida, A system of differential
equations in 4 variables of rank 5 invariant under the Weyl group of type
$E_6$, \emph Proc. Japan Acad./ {\bf 75}, Ser. A, No. 7 (1999) 129--133. 

%\bi{Schlafli} L. Schl\"afli, On the distribution of surfaces of the third
%order into species, in reference to the absence or presence of singular
%points, and the reality of their lines, \emph Phil. Trans. Roy. Soc.
%London / {\bf 153} (1863), 193-241, also in \emph Gesamm. Abhandlungen/,
%Band II, pp. 305-360, Birkh\"auser Verlag, Basel, 1953.  

\bi{Segre} B. Segre, The Non-singular Cubic Surfaces, Clarendon Press, Oxford, 1942.

\bi{Siegel} C. L. Siegel, Symplectic Geometry, \emph Am. Jour. Math./ {\bf
65} (1943), 1--86. 

\bi{ST} M. Sebastiani and R. Thom, Un r\'esultat sur la monodromie,
\emph Invent. Math./ {\bf 13} (1971), 90--96.

\bi{Thurston} W. P. Thurston, Shapes of polyhedra, Research Report GCG 7, University of
Minnesota, math.GT/9801088.  


%\bi{Timm} K. Timmerscheidt, Mixed Hodge theory for unitary local
%systems. {\sl J. Reine Angew. Math.} {\bf 379} (1987), 152--171.

\bi{Toledo} D. Toledo, Projective varieties with non-residually finite 
fundamental group, \emph Pub. Math. IHES/ {\bf 77} (1993) 103-119.

\bi{Zeeman} E. C. Zeeman, Dihomology III, A generalization of the
Poincar\'e duality for manifolds, \emph Proc. London Math. Soc. (3) /
{\bf 13} (1963), 155--183. 

\endbibliography

\medskip
\parskip=0pt

\noindent
D. Allcock, Department of Mathematics, Harvard University,
Cambridge, MA, USA.
\hfil\break
{\it allcock@math.harvard.edu}

\noindent
J. Carlson, Department of Mathematics, University of Utah,
Salt Lake City, UT, USA.
\hfil\break
{\it carlson@math.utah.edu}

\noindent
D. Toledo, Department of Mathematics, University of Utah,
Salt Lake City, UT, USA.
\hfil\break
{\it toledo@math.utah.edu}

\enddoc
\end
