%%
%% This is file `mfpic.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% mfpic.dtx  (with options: `tex')
%% 
%% -------------------------------------------------------------------
%% 
%% Copyright 2002--2012, Daniel H. Luecking
%% 
%% Mfpic may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License, either version 1.3c of this license or (at
%% your option) any later version. The latest version of this license is in
%%    <http://www.latex-project.org/lppl.txt>
%% and version 1.3c or later is part of all distributions of LaTeX version
%% 2008/12/01 or later.
%% 
%% Mfpic has maintenance status "author-maintained". The Current Maintainer
%% is Daniel H. Luecking. There are several Base Interpreters associated
%% with mfpic: plain TeX, LaTeX, plain Metafont and plain MetaPost.
%% 
\ifx\mfpfileversion\UndEfInEd\else\expandafter\endinput\fi%
{%
  \catcode\lq\.12 \catcode\lq\/12%
  \gdef\mfpfileversion{1.10}%
  \gdef\mfpfiledate{2012/12/03}%
  \gdef\mfpicversion{110}%
}%
\let\mfpsaveplus\+%
\let\+\tabalign%
{%
  \catcode61\space12\relax% 61=equal sign
  \catcode32=10\relax%      32=space
  \catcode13=5 %            13=EOL
  \catcode96=12 %           96=left quote
  \catcode`\@=11
  \gdef\MFPsavecodes{%
    \edef\mfp@restoreNLC{\newlinechar\number\newlinechar\relax}%
    \edef\mfp@restoreELC{\endlinechar\number\endlinechar\relax}%
    \edef\mfp@restoreSPA{\catcode32=\number\catcode32\relax}%
    \edef\mfp@restoreEOL{\catcode13=\number\catcode13\relax}%
    \edef\mfp@restoreALL{\mfp@restorecode{=}\mfp@restorecode{@}%
      \mfp@restorecode{$}\mfp@restorecode{:}\mfp@restorecode{;}%
      \mfp@restorecode{.}\mfp@restorecode{,}\mfp@restorecode{!}%
      \mfp@restorecode{?}\mfp@restorecode{(}\mfp@restorecode{)}%
      \mfp@restorecode{[}\mfp@restorecode{]}\mfp@restorecode{<}%
      \mfp@restorecode{>}\mfp@restorecode{*}\mfp@restorecode{/}%
      \mfp@restorecode{+}\mfp@restorecode{-}\mfp@restorecode{"}%
      \mfp@restorecode{'}\mfp@restorecode{_}\mfp@restorecode{`}%
      \mfp@restoreEOL\mfp@restoreSPA\catcode10=\number\catcode10
      \mfp@restoreNLC\mfp@restoreELC}}%
  \gdef\mfp@restorecode#1{\catcode`\string#1=\number\catcode`#1\relax}%
  \ifx\@makeother\UndEfInEd \gdef\@makeother#1{\catcode`#1=12\relax}\fi
  \gdef\MFPsanitize{\endlinechar13 \newlinechar10
    \catcode10=12 \catcode13=5 \catcode`\$=3 \catcode`\ =10
    \@makeother\:\@makeother\;\@makeother\.\@makeother\,%
    \@makeother\!\@makeother\?\@makeother\(\@makeother\)%
    \@makeother\[\@makeother\]\@makeother\>\@makeother\<%
    \@makeother\/\@makeother\*\@makeother\+\@makeother\-%
    \@makeother\'\@makeother\"\@makeother\_\@makeother\`%
    \@makeother\=\@makeother\@}%
}%
\MFPsavecodes\MFPsanitize
\catcode`@11
\chardef\mfp@ctrlJ 10 \chardef\mfp@ctrlM 13
\newif\ifmfpicdebug
\ifx\mfpicdebug\UndEfInEd \mfpicdebugfalse
\else \mfpicdebugtrue
\fi
\def\mfp@DBlog#1{%
  \ifmfpicdebug{\let\@msgbreak\mfp@errbrk\wlog{Mfpic debug: #1}}\fi}%
\def\mfp@msg#1{%
  {\newlinechar\mfp@ctrlJ\def\@nl{^^J}\immediate\write16{#1}}}%
\def\mfp@spaces{\space\space\space\space\space\space}%
\def\mfp@msgbrk{^^J\mfp@spaces\space}%
\def\mfp@errbrk{\mfp@msgbrk\mfp@spaces}%
\def\mfp@warnbrk{\mfp@errbrk\space\space}%
\def\Mfpic@msg#1{{\let\@msgbreak\mfp@msgbrk\mfp@msg{Mfpic: #1}}}%
\def\Mfpic@warn#1{%
  {\let\@msgbreak\mfp@warnbrk\mfp@msg{\@nl Mfpic warning: #1}}}%
\def\mfp@errmsg#1#2{{\newlinechar\mfp@ctrlJ\let\@msgbreak\mfp@errbrk
   \errhelp{#2}\errmessage{Mfpic error: #1}}}%
\def\mfp@lineno{line \number\inputlineno\space in the TeX source}%
\let\@xp\expandafter
\def\@XP{\@xp\@xp\@xp}%
\long\def\@firstoftwo#1#2{#1}%
\long\def\@secondoftwo#1#2{#2}%
\def\mfp@ifdefined#1{%
  \ifx#1\UndEfInEd \@xp\@secondoftwo
  \else\ifx#1\relax \@XP\@secondoftwo
  \else \@XP\@firstoftwo
  \fi\fi}%
\mfp@ifdefined\@empty{}{\def\@empty{}}%
\mfp@ifdefined\@gobble{}{\def\@gobble#1{}}%
\mfp@ifdefined\@firstofone{}{\long\def\@firstofone#1{#1}}%
\mfp@ifdefined\on@line{}%
  {\def\on@line{ on input line \number\inputlineno}}%
\let\mfp@enddef\@empty
\long\def\mfp@gobbledef#1\mfp@enddef{}%
\def\mfp@ifundefined#1{\mfp@ifdefined#1\mfp@gobbledef\@empty}%
\mfp@ifundefined\@ifundefined
  \def\@ifundefined#1{%
    \@xp\ifx\csname #1\endcsname\relax \@xp\@firstoftwo
    \else \@xp\@secondoftwo
    \fi}%
\mfp@enddef
\mfp@ifundefined\g@addto@macro
  \long\def\g@addto@macro#1#2{%
    \begingroup
      \toks@\@xp{#1#2}%
      \xdef#1{\the\toks@}%
    \endgroup}%
\mfp@enddef
\mfp@ifundefined\g@prependto@macro
  \long\def\g@prependto@macro#1#2{%
    \begingroup
      \toks@{#2}\toks2\@xp{#1}%
      \xdef#1{\the\toks@\the\toks2}%
    \endgroup}%
\mfp@enddef
\newif\ifmfp@latex \mfp@latexfalse
\mfp@ifdefined\documentstyle
 {\ifx \amstexloaded@\relax % amstex loaded, or a bad check for it
    \ifx\NoBlackBoxes\UndEfInEd % amstex not loaded
      \mfp@DBlog{LaTeX detected.}\mfp@latextrue
    \else % most likely amstex loaded
      \mfp@DBlog{AmS-TeX detected.}%
    \fi
  \else % amstex not loaded
    \mfp@DBlog{LaTeX detected.}\mfp@latextrue
  \fi}%
 {\mfp@DBlog{Neither LaTeX nor AmS-TeX detected.}}%
\newif\ifmfp@latexe \mfp@latexefalse
\mfp@ifdefined\documentclass
  {\mfp@latexetrue \mfp@DBlog{LaTeX2e detected.}}%
  {\mfp@DBlog{Not LaTeX2e.}}%
\newif\ifmfp@pdf \mfp@pdffalse
\mfp@ifdefined\pdfoutput
 {\mfp@DBlog{PdfTeX detected...}%
  \ifnum\pdfoutput<1 \mfp@DBlog{...with dvi output.}%
  \else \mfp@pdftrue \mfp@DBlog{...with PDF output.}%
  \fi}%
 {\mfp@DBlog{Not pdfTeX.}}%
\ifmfp@latex \else \let\@@par\endgraf \fi
\def\mfp@restorepar{\let\par\@@par}%
\mfp@ifdefined\@namedef{}%
  {\def\@namedef#1{\@xp\def\csname #1\endcsname}}%
\mfp@ifdefined\@namelet{}%
  {\def\@namelet#1{\@xp\let\csname #1\endcsname}}%
\mfp@ifdefined\@nameuse{}%
  {\def\@nameuse#1{\csname #1\endcsname}}%
\mfp@ifundefined\@bsphack
  \@nameuse{newskip}\@savsk
  \@nameuse{newcount}\@savsf
  \def\@bsphack{\relax
    \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi}%
  \def\@esphack{\relax
    \ifhmode \spacefactor\@savsf
    \ifdim\@savsk>\z@ \ignorespaces
    \fi\fi}%
\mfp@enddef
\mfp@DBlog{Defining test for previous definitions of macros.}%
\def\mfp@testdef#1{%
  \ifx#1\UndEfInEd
  \else\ifx#1\relax
    \Mfpic@warn{\string#1 was previouly defined to be \string\relax.}%
  \else
    \Mfpic@warn{\string#1 is already defined.}%
  \fi\fi}%
\mfp@testdef\newdef
\def\newdef#1{\mfp@testdef#1\def#1}%
\newdef\newlet#1{\mfp@testdef#1\let#1}%
\newdef\mfp@useMP@error{%
  \mfp@errmsg {Command \mfp@b usemetapost too late}%
   {It is too late to select the metapost option.^^J%
    It must be selected before the \opengraphsfile command.^^J%
    If you proceed, the metafont option will be assumed.}}%
\def\mfp@nooutput@error#1{%
  \mfp@errmsg {No output file has been opened}%
   {You have tried to used a command, #1, that requires an output^^J%
    file to be opened with the \opengraphsfile command, which^^J%
    was either not issued or was not successful.}}%
\newdef\mfp@noMP@error#1{%
  \mfp@errmsg {Metafont does not support #1, use MetaPost}%
   {Metafont doesn't support #1. Perhaps you forgot to turn on^^J%
    MetaPost support by using the metapost option or issuing the^^J%
    command \usemetapost. For now, I will ignore it.}}%
\newdef\mfp@noMF@warn#1{%
  \Mfpic@warn
    {Metapost does not support \string#1, it will be ignored.}}%
\def\mfp@afteropen@error#1{%
  \mfp@errmsg{Improper use of command \string#1\on@line}%
   {You must issue the command #1 prior to \opengraphsfile.
    It will be ignored now.}}%
\newdef\mfp@end{%
  \mfp@errmsg {Unexpected token \string\mfp@end}%
   {If you get this message but did not misuse the command^^J%
    \mfp@end, it could mean you have unbalanced braces.}}%
\newdef\mfp@nofile@error#1{%
  \mfp@errmsg{No data file: #1}%
  {The data file you tried to plot was not found.}}%
\newdef\mfp@nodata@error#1{%
  \mfp@errmsg{Empty data file: #1}%
  {The data file contained only empty lines and comments.}}%
\newdef\mfp@justify@error{%
    \mfp@errmsg{Invalid justification parameter for text label}%
     {The optional argument for an mfpic text label must be^^J%
      one of B, b, c or t, followed by^^J%
      one of l, r or c, optionally followed by an angle.}}%
\newdef\mfp@untilwarn{%
  \Mfpic@warn{\mfp@b mfploop without \string\mfpuntil!\@nl}}%
\newlet\ifmfpmpost\iffalse
\newdef\mfp@mposttrue {\global\let\ifmfpmpost\iftrue}%
\newdef\mfp@mpostfalse{\global\let\ifmfpmpost\iffalse}%
\newdef\mfp@ifmpost{%
  \ifmfpmpost\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
\newdef\usemetafont{\mfp@mpostfalse
  \nomplabels
  \def\preparemfpicgraphic##1{}%
  \def\setmfpicgraphic##1{\mfp@graphfont\char\mfp@count}%
  \def\getmfpicoffset##1{\gdef\mfpicllx{0}\gdef\mfpiclly{0}}}%
\newdef\mfp@ifopengraphsfile{\mfp@ifdefined\mfp@filename}%
\newdef\mfmode#1{\edef\mfp@mode{#1}%
  \mfp@ifopengraphsfile%
  {\mfp@afteropen@error\mfmode}%
  {\mfp@ifmpost{\mfp@noMF@warn\mfmode}{}}}%
\newdef\mfresolution#1{\edef\mfp@resolution{#1}%
  \mfp@ifopengraphsfile%
  {\mfp@afteropen@error\mfresolution}%
  {\mfp@ifmpost{\mfp@noMF@warn\mfresolution}{}}}%
\newdef\setmfvariable#1{%
  \mfp@sp@def\mfp@tempa{#1}\@setmfvariable\mfp@tempa}%
\newdef\@setmfvariable#1#2#3{%
  \mfp@ifopengraphsfile%
    {\mfcmd{set#1 (#2) #3}}%
    {\mfp@nooutput@error\setmfvariable}}%
\newdef\setmfboolean{\@setmfvariable{boolean}}%
\newdef\setmfnumeric{\@setmfvariable{numeric}}%
\newdef\setmfpair   {\@setmfvariable{pair}}%
\newdef\setmfcolor  {\@setmfvariable{color}}%
\newdef\globalsetmfvariable#1#2#3{%
  \mfp@sp@def\mfp@tempa{#1}%
  \mfp@ifopengraphsfile
  {\mfcmd{\ifx\mfp@tempa\mfp@C gsetcolor \else gsetvariable (#1) \fi
    (#2) #3}}%
  {\mfp@nooutput@error\globalsetmfvariable}}%
\newlet\setmpvariable\setmfvariable
\newlet\globalsetmpvariable\globalsetmfvariable
\newlet\ifin@mfpicenv\iffalse
\newdef\mfp@local{\relax\ifin@mfpicenv\else\global\fi}%
\newdef\mfp@let{\mfp@local\let}%
\newdef\mfp@def{\mfp@local\def}%
\newdef\mfp@T{true}%
\newdef\mfp@F{false}%
\newdef\mfp@C{color}%
\newdef\usecenteredcaptions{\mfp@let\ifmfp@centcapt\iftrue}%
\newdef\nocenteredcaptions {\mfp@let\ifmfp@centcapt\iffalse}%
\nocenteredcaptions
\newdef\useraggedcaptions{\mfp@let\mfp@capsettings\mfp@raggedcap}%
\newdef\noraggedcaptions{\mfp@let\mfp@capsettings\mfp@justifiedcap}%
\newdef\mfp@raggedcap{%
  \ifmfp@latex
    \ifmfp@centcapt \centering \else \raggedright \fi
  \else
    \rightskip 0pt plus 1fil\relax
    \ifmfp@centcapt
      \leftskip 0pt plus 1fil
      \parfillskip 0pt plus 1fil\relax
    \fi
    \def\\{\unskip\hbox{}\penalty-\@M\ignorespaces}%
  \fi}%
\def\mfp@justifiedcap{%
  \ifmfp@centcapt
    \leftskip 0pt plus 0.5fil
    \rightskip 0pt plus -0.5fil
    \parfillskip 0pt plus 1fil\relax
  \fi
  \def\\{\unskip\hbox{}\hfil\penalty-\@M\ignorespaces}}%
\noraggedcaptions
\newdef\mfp@makeoption#1#2#3#4{%
  \newdef#1{\mfp@let#4\iftrue
    \mfp@ifopengraphsfile{\setmfboolean{#3}\mfp@T}{}}%
  \newdef#2{\mfp@let#4\iffalse
    \mfp@ifopengraphsfile{\setmfboolean{#3}\mfp@F}{}}%
  #2}%
\mfp@makeoption\clipmfpic\noclipmfpic{clipall}\ifmfp@clip
\mfp@makeoption\usetruebbox\notruebbox{truebbox}\ifmfp@truebbox
\newdef\usemplabels{\mfp@let\ifmfp@mplabels\iftrue
  \mfp@ifopengraphsfile
    {\mfp@ifmpost{}%
     {\mfp@noMP@error{mplabels}\global\let\ifmfp@mplabels\iffalse}}{}}%
\newdef\nomplabels{\mfp@let\ifmfp@mplabels\iffalse}%
\newdef\@ifmplabels{%
  \ifmfp@mplabels\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
\nomplabels
\newdef\mp@mksharpother{\@ifmplabels{\@makeother\#}{}}%
\mfp@makeoption%
  \overlaylabels\nooverlaylabels{overlaylabels}\ifmfp@overlabels
\mfp@makeoption%
  \clearsymbols\noclearsymbols{clearsymbols}\ifmfp@clearsym
\mfp@makeoption\stopshipping\resumeshipping{noship}\ifmfp@noship
\newlet\noship\stopshipping
\newlet\ifmfp@readlog\iffalse
\newdef\mfpreadlog{%
  \mfp@ifopengraphsfile
  {\mfp@afteropen@error\mfpreadlog}{\global\let\ifmfp@readlog\iftrue}}%
\newdef\mfpicllx{0}%
\newdef\mfpiclly{0}%
\newdef\normal@setmfpgraphic#1{%
  \preparemfpicgraphic{#1}\setmfpicgraphic{#1}\getmfpicoffset{#1}}%
\newdef\nofile@setmfpgraphic#1{%
 {\edef\mfp@tempa{#1}%
  \vbox to 0pt{\vss
    \rlap{\kern2pt \mfpdraftfont \mfp@sanitized\mfp@tempa}\kern 2pt}}}%
\mfp@ifdefined\strip@prefix{}{\def\strip@prefix#1>{}}%
\newdef\mfp@sanitized{\@xp\strip@prefix\meaning}%
\newlet\@setmfpicgraphic\normal@setmfpgraphic
\usemetafont
\newdef\setfilename#1#2{#1.#2}%
\newdef\setfilenametemplate#1{%
  \begingroup
    \def\_{\mfp@p j}%
    \def\#{\mfp@p c}%
    \let\@nl\relax
    \xdef\mfp@settemplate{\@nl setoutputtemplate "#1";\@nl}%
    \let\number\relax
    \let\mfp@count\relax
    \let\mfp@filename\relax
    \def\_{\mfp@filename}%
    \def\#{\number\mfp@count}%
    \xdef\setfilename##1##2{#1}%
  \endgroup
}%
\newif\ifmfpicdraft
\newlet\ifmfp@draft\iffalse
\newlet\ifmfp@final\iffalse
\newlet\ifmfp@nowrite\iffalse
\newdef\mfpicdraft{%
  \mfp@ifopengraphsfile{\global\mfpicdrafttrue}%
   {\global\let\ifmfp@draft\iftrue}}%
\newdef\mfpicfinal{%
  \mfp@ifopengraphsfile{\global\mfpicdraftfalse}%
    {\global\let\ifmfp@final\iftrue}}%
\newdef\mfpicnowrite{%
  \mfp@ifopengraphsfile{\mfp@afteropen@error\mfpicnowrite}%
    {\global\let\ifmfp@nowrite\iftrue}}%
\newdef\usemetapost{%
  \mfp@ifopengraphsfile{\mfp@mpostfalse\mfp@useMP@error}%
   {\mfp@mposttrue \@usemetapost}}%
\ifmfp@latexe
  \InputIfFileExists{mfpic.cfg}{}{}%
  \ProcessOptions*\relax
  \mfp@ifmpost{\usemetapost}{}%
  \AtEndDocument{\mfp@closegraphsfile}%
\else
  \mfp@msg{}\Mfpic@msg{\mfpfiledate\space v\mfpfileversion.\@nl}%
  \newdef\mfp@useMP#1#2#3#4#5{%
    \mfp@ifdefined#1{}{%
      \InputIfFileExists{#2}{}{%
        \InputIfFileExists{#3}{}{%
          \mfp@errmsg{Files not found: #1, #2}%
            {One of the two named files is necessary
             for mfpic, but neither was found.}}}}%
    \global\let\setmfpicgraphic\mfp@includeMPS
    \gdef\getmfpicoffset##1{\xdef\mfpicllx{#4}\xdef\mfpiclly{#5}}}%
  \ifmfp@pdf
    \newdef\mfp@includeMPS#1{\convertMPtoPDF{#1}{1}{1}}%
    \newdef\@usemetapost{%
      \mfp@useMP\convertMPtoPDF{supp-pdf.mkii}{supp-pdf.tex}%
        \MPllx\MPlly}%
  \else
    \newdef\mfp@includeMPS#1{\epsfbox{#1}}%
    \newdef\@usemetapost{%
      \mfp@useMP\epsfbox{epsf.tex}{epsf.sty}\epsfllx\epsflly}%
  \fi
\fi
\mfp@DBlog{Handlers for optional parameters.}%
\mfp@ifundefined\@ifnextchar
  \long\def\@ifnextchar#1#2#3{%
    \let\reserved@d#1%
    \def\reserved@a{#2}%
    \def\reserved@b{#3}%
    \futurelet\@let@token\@ifnch}%
  \def\@ifnch{%
    \ifx\@let@token\@sptoken
      \let\reserved@c\@xifnch
    \else
      \ifx\@let@token\reserved@d
        \let\reserved@c\reserved@a
      \else
        \let\reserved@c\reserved@b
      \fi
    \fi
    \reserved@c}%
  {%
    \def\:{\global\let\@sptoken= }\: % makes \@sptoken a space token
    \def\:{\@xifnch}\@xp\gdef\: {\futurelet\@let@token\@ifnch}%
  }%
\mfp@enddef
\def\mfp@tempa#1{%
  \def\mfp@sp@def##1##2{%
    \futurelet\mfp@next\mfp@sp@d##2\@nil\@nil#1\@nil\relax##1}%
  \def\mfp@sp@d{%
    \ifx\mfp@next\@sptoken \@xp\mfp@sp@b
    \else \@xp\mfp@sp@b\@xp#1%
    \fi}%
  \def\mfp@sp@b#1##1 \@nil{\mfp@sp@c##1}}%
\mfp@tempa{ }%
\def\mfp@sp@c#1\@nil#2\relax#3{\mfp@toks{#1}\edef#3{\the\mfp@toks}}%
\def\mfp@iftoken#1#2{\@ifnextchar#1{\@firstoftwo{#2}}}%
\def\mfp@ifstar#1#2#3{\mfp@iftoken*{#1{#2}}{#1{#3}}}%
\def\mfp@ifend{\mfp@iftoken\mfp@end}%
\def\mfp@ifendorcomma#1#2#3{\mfp@ifend{#1}{\mfp@iftoken,{#2}{#3}}}%
\mfp@ifundefined\@ifstar
  \def\@ifstar#1{\@ifnextchar*{\@firstoftwo{#1}}}%
\mfp@enddef
{%
\catcode`Q3 \catcode`\~12
\gdef\mfp@ifempty#1{\if~#1~\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
\gdef\mfp@ifexist#1{\if~#1~\@xp\@gobble\else\@xp\@firstofone\fi}%
\gdef\mfp@emptysub#1#2{\if~#1~#2\else#1\fi}%
\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}%
\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}%
}%
\newdef\mfp@defaultopt#1#2{%
  \@ifnextchar[{\mfp@ifemptyopt{#1}{#2}}{#1{#2}}}%]
\newdef\mfp@ifemptyopt#1#2[#3]{\mfp@ifempty{#3}{#1{#2}}{#1{#3}}}%
\newdef\mfp@nullopt#1{\@ifnextchar[{\mfp@getopt{#1}}{#1{}}}%
\newdef\mfp@getopt#1[#2]{#1{#2}}%
\mfp@DBlog{Direct output to Metafont/Post file.}%
{%
  \catcode\mfp@ctrlM\active%
  \gdef\@activectrlM{^^M}%
  \gdef\mfp@obeylines{\catcode\mfp@ctrlM\active\let^^M\relax}%
}%
\newdef\mfp@keeplines{\newlinechar\mfp@ctrlM
  \endlinechar\newlinechar \mfp@obeylines}%
\newdef\mfsrc {\mfp@write\mfp@src\mfsrc}%
\newdef\mfcmd {\mfp@write\mfp@cmd}%
\newdef\mflist{\mfp@write\mfp@wlist}%
\newdef\mfp@write{\begingroup\mfp@keeplines \let\@nl\@activectrlM}%
\newdef\mfp@src#1#2{%
  \mfp@ifopengraphsfile{\immediate\write\mfp@out{#2}}%
    {\mfp@nooutput@error{#1}}\endgroup}%
\newdef\mfp@cmd#1{\mfp@src\mfcmd{#1;}}%
\newdef\mfp@wlist#1{\mfp@src\mflist{(#1);}}%
\def\mfp@safe@activestrue{%
  \mfp@ifdefined\@safe@activestrue\@safe@activestrue{}}%
\def\mfp@safe@activesfalse{%
  \mfp@ifdefined\@safe@activesfalse\@safe@activesfalse{}}%
\edef\mfp@p{\@xp\@gobble\string\%}%   percent (%)
\edef\mfp@s{\@xp\@gobble\string\#}%   sharp (#)
\edef\mfp@b{\@xp\@gobble\string\\}%   backslash (\)
\newdef\mfp@d{--------------}%
\mfp@ifdefined\two@digits{}%
  {\def\two@digits#1{\ifnum#1<10 0\fi\number#1}}%
{%
  \mfp@ifdefined\normalmonth
  {\let\month\normalmonth\let\year\normalyear}{}%
  \count@\time \divide\count@ by 60
  \xdef\mfp@now{\number\year/\two@digits\month/\two@digits\day
    \space at \two@digits\count@:}%
  \multiply\count@ by -60 \advance\count@\time
  \xdef\mfp@now{\mfp@now\two@digits\count@}%
}%
\mfp@DBlog{Declarations used with data and graphs files.}%
\newwrite\mfp@out
\newread\mfp@graph
\newlet\mfp@data\mfp@graph
\newcount\mfp@count
\newcount\mfp@linetype
\newcount\mfp@sequence
\newtoks\mfp@toks
\newtoks\mfp@verbtex
\newif\ifmfp@switch
\let\MFPbegingroup\begingroup
\let\MFPendgroup\endgroup
\newdef\mfp@versioninfo{%
  \mfp@p\space\mfp@filename.m\mfp@ifmpost{p}{f}, %
    generated by Mfpic, v\mfpfileversion\space\mfpfiledate,\@nl
  \mfp@p\space from TeX source "\jobname" on \mfp@now\@nl
  numeric mfpicversion; mfpicversion := \mfpicversion;\@nl}%
\newdef\mfp@init@outfile{%
  if unknown mode: mode := localfont; fi\@nl
  if unknown mag: mag := \number\mag/1000; fi\@nl
  if unknown grafbase: input grafbase; fi\@nl\@nl}%
\newdef\mfp@versioncheck{%
  if unknown grafbaseversion: grafbaseversion := 0; fi\@nl
  if grafbaseversion <> mfpicversion :\@nl
     GBmsg "Bad mfpic installation: mfpic and grafbase %
       versions do not match.";\@nl
  fi\@nl}%
\newdef\mfp@openfile{%
  \ifmfp@nowrite \else \mfp@msg{}%
    \Mfpic@msg{Initializing \mfp@filename\mfp@ext.}%
    \immediate\openout\mfp@out=\mfp@filename\mfp@ext\relax
    \Mfpic@msg{Don't forget to process \mfp@filename\mfp@ext!}%
    \Mfpic@msg{Apply \mfp@progname\space to \mfp@filename\mfp@ext%
      \mfp@ifmpost{}{, then gftopk to the resulting gf file}.}%
    \Mfpic@msg{Then reprocess this file "\jobname".\@nl}%
  \fi}%
\mfp@ifundefined\IfFileExists
  \def\IfFileExists#1{\openin\mfp@graph=#1\relax
    \ifeof\mfp@graph \@xp\@secondoftwo
    \else \immediate\closein\mfp@graph \@xp\@firstoftwo
    \fi}%
  \def\InputIfFileExists#1#2{\IfFileExists{#1}{#2\input #1\relax}}%
\mfp@enddef
\newdef\mfp@checkoutput#1#2#3{%
  \IfFileExists{\setfilename\mfp@filename{#1}}%
   {\global\mfpicdraftfalse #2}%
   {\global\mfpicdrafttrue #3\mfp@msg{}%
    \Mfpic@msg{No file \setfilename\mfp@filename{#1}.}%
   }}%
\newdef\mfp@checkMPoutput{\mfp@checkoutput{\number\mfp@count}{}{}}%
\newdef\mfp@checkMFoutput{\mfp@checkoutput{tfm}%
  {\global\font\mfp@graphfont\mfp@filename\relax}%
  {\global\let\mfp@graphfont\mfp@dummy}}%
\newdef\mfp@MPextras{\mfp@toks\@xp{\every@tlabel}%
  \mfsrc{%
    if unknown Apricot: input dvipsnam.mp; fi\@nl
    verbatimtex\@nl
    \ifmfp@verbtex \the\mfp@verbtex\@nl \fi
    \relax\@nl
    \noexpand\input mfpicdef.tex\relax\@nl
    \def\noexpand\MFPeverylabel{\the\mfp@toks}\@nl
    etex;\@nl
    \mfp@ifdefined\mfp@settemplate\mfp@settemplate{}%
  }%
  \global\mfp@verbtexfalse \global\mfp@verbtex{}%
  \@ifmplabels\usemplabels{}%
  \ifmfp@truebbox \usetruebbox \fi
  \ifmfp@overlabels \overlaylabels \fi}%
\def\mfp@MFextras{%
    \mfp@ifdefined\mfp@resolution%
    {GBresolution := \mfp@resolution;\@nl}{}%
    \mfp@ifdefined\mfp@mode{mode := \mfp@mode;\@nl}{}}%
\def\mfp@dospecials{\do\$\do\&\do\#\do\^\do\_\do\%\do\~}%
\mfp@DBlog{Macros to open and close graphs files.}%
\newdef\opengraphsfile{\@bsphack
  \begingroup
    \let\do\@makeother
    \mfp@dospecials\@opengraphsfile}%
\newdef\@opengraphsfile#1{%
    \xdef\mfp@tempa{#1}%
  \endgroup
  \mfp@ifopengraphsfile%
   {\Mfpic@warn
     {\@nl An attempt has been made to open a graph file, %
      \mfp@sanitized\mfp@tempa\@msgbreak
      while another, \mfp@filename, is still open. \@msgbreak
      Closing \mfp@filename.}\mfp@closegraphsfile}%
   {}%
  \xdef\mfp@filename{\mfp@sanitized\mfp@tempa}%
  \xdef\mfp@progname{meta\mfp@ifmpost{pos}{fon}t}%
  \xdef\mfp@ext{.m\mfp@ifmpost{p}{f}}%
  \mfp@ifmpost\mfp@checkMPoutput\mfp@checkMFoutput
  \mfp@openfile
  \ifmfp@draft \global\mfpicdrafttrue  \fi
  \ifmfp@final \global\mfpicdraftfalse \fi
  \ifmfp@nowrite \gdef\mfp@src##1##2{\endgroup}\fi
  \mfsrc{\mfp@versioninfo \mfp@ifmpost{}\mfp@MFextras
    \mfp@init@outfile \mfp@versioncheck}%
  \mfp@ifmpost\mfp@MPextras{}%
  \ifmfp@clip     \clipmfpic       \fi
  \ifmfp@clearsym \clearsymbols    \fi
  \ifmfp@noship   \stopshipping    \fi
  \ifmfp@readlog  \mfp@readlogfile \fi
  \@esphack}%
\newdef\closegraphsfile{%
  \mfp@ifopengraphsfile{}{\mfp@nooutput@error\closegraphsfile}%
  \mfp@closegraphsfile}%
\newdef\mfp@closegraphsfile{%
  \mfp@ifopengraphsfile
   {\ifmfp@nowrite \else
      \mfsrc{\@nl end.}\immediate\closeout\mfp@out
    \fi \global\let\mfp@filename\UndEfInEd}{}}%
\edef\mfpicvalue{\string\mfpicvalue}%
\newdef\mfp@cmdname{%
  mfpic-\ifin@mfpicenv\number\mfp@count\fi-\@xp\@gobble\string}%
\newdef\assignmfvalue{\mfp@assign\@empty}%
\newdef\globalassignmfvalue{\mfp@assign\global}%
\newdef\mfp@assign#1#2#3{%
  #1\edef#2{%
    \@ifundefined{\mfp@cmdname#2}{???}{\@nameuse{\mfp@cmdname#2}}}%
  \@ifundefined{\mfp@cmdname#2}%
    {\mfp@msg{}\Mfpic@msg{No value for \string#2\ifin@mfpicenv\space
    in mfpic figure \number\mfp@count\fi.\@nl}}%
    {}%
  \mfsrc{%
    \@ifmplabels{\@nl verbatimtex #1\def\string#2{#2} etex;\@nl}{}%
    message "\string\mfpicvalue";\@nl
    message "\mfp@cmdname#2";\@nl
    show #3;\@nl
    message "";}}%
\newlet\assignmpvalue\assignmfvalue
\newlet\globalassignmpvalue\globalassignmfvalue
\newdef\strip@gtgt>> #1\mfp@end{#1}%
\newdef\mfp@readlogfile{%
  \openin\mfp@data=\mfp@filename.log\relax
  \ifeof\mfp@data \Mfpic@msg{No file \mfp@filename.log.}%
  \else
    {%
      \mfp@resetwhitespace \endlinechar -1
      \catcode`\>12
      \def\@mfpicvalue{\mfpicvalue}%
      \message{< Mfpic: Reading \mfp@filename.log}%
      \mfp@readloglines
      \message{>}%
    }%
  \fi  \closein\mfp@data}%
\newdef\mfp@readloglines{%
  \read\mfp@data to \mfp@tempa
  \ifeof\mfp@data
  \else
    \ifx\mfp@tempa\@mfpicvalue
      \read\mfp@data to \mfp@tempa
      \read\mfp@data to \mfp@tempb
      \@XP\xdef\@nameuse\mfp@tempa{\@xp\strip@gtgt\mfp@tempb\mfp@end}%
    \fi
    \@xp\mfp@readloglines
  \fi}%
\mfp@DBlog{Using dummy font's dimensions, to spare TeX registers.}%
\font\mfp@dummy=dummy scaled 1042
\fontdimen100\mfp@dummy0pt
\newcount\mfp@fdc
\mfp@fdc22
\newdef\newfdim#1{%
  \global\advance\mfp@fdc1
  \xdef#1{\fontdimen\number\mfp@fdc\mfp@dummy}%
  \wlog{\string#1=\fontdimen\number\mfp@fdc\mfp@dummy}}%
\mfp@DBlog{A box register for whole labeled graph, %
    and a temporary one.}%
\newbox\@wholegraph
\newbox\@textbox
\newdef\tb@ht{\ht\@textbox}%
\newdef\tb@dp{\dp\@textbox}%
\newdef\tb@wd{\wd\@textbox}%
\newbox\@alltlabels
\newbox\@backtext
\newfdim\@tlabelstop
\newfdim\@tlabelsbot
\newfdim\@tlabelsleft
\mfp@DBlog{Internal dimension parameters for graph dimensions...}%
\newfdim\@graphright
\newfdim\@graphleft
\newfdim\@graphtop
\newfdim\@graphbot
\mfp@DBlog{...and dimension parameters for tlabel positioning.}%
\newfdim\tb@raise
\newfdim\tb@moveright
\newfdim\tb@totalht
\newfdim\tlabel@hadj
\newfdim\tlabel@vadj
\newfdim\tlabel@sep
\newfdim\tlpath@sep
\tlabel@hadj0pt
\tlabel@vadj0pt
\tlabel@sep0pt
\tlpath@sep0pt
\mfp@DBlog{User level dimension parameters, with default settings.}%
\newfdim\mfpicunit
\newfdim\@mfpicunit % internal version
\newfdim\pointsize
\newfdim\shadespace
\newfdim\polkadotspace
\newfdim\hatchspace
\newfdim\headlen
\newfdim\axisheadlen
\newfdim\sideheadlen
\newfdim\hashlen
\newfdim\dashlen
\newfdim\dashspace
\newfdim\dotsize
\newfdim\griddotsize
\newfdim\dotspace
\newfdim\symbolspace
\mfpicunit1pt
\pointsize2pt
\shadespace1pt
\polkadotspace10pt
\hatchspace3pt
\headlen3pt
\axisheadlen5pt
\sideheadlen0pt
\hashlen4pt
\dashlen4pt
\dashspace4pt
\dotsize0.5pt
\griddotsize0.5pt
\dotspace3pt
\symbolspace5pt
\newdef\save@mfpicdimens{%
  \edef\restore@mfpicdimens{%
    \mfpicunit \the\mfpicunit
    \pointsize \the\pointsize
    \shadespace \the\shadespace
    \polkadotspace \the\polkadotspace
    \hatchspace \the\hatchspace
    \headlen \the\headlen
    \axisheadlen \the\axisheadlen
    \sideheadlen \the\sideheadlen
    \hashlen \the\hashlen
    \dashlen \the\dashlen
    \dashspace \the\dashspace
    \dotsize \the\dotsize
    \griddotsize \the\griddotsize
    \dotspace \the\dotspace
    \symbolspace \the\symbolspace
    \tlabel@hadj \the\tlabel@hadj
    \tlabel@vadj \the\tlabel@vadj
    \tlabel@sep \the\tlabel@sep
    \tlpath@sep \the\tlpath@sep}}%
\newdimen\mfp@scratch
\newdimen\mfpframesep
\newdimen\mfpframethickness
\newdimen\mfpicheight
\newdimen\mfpicwidth
\newskip\mfpiccaptionskip
\mfpframethickness0.4pt
\mfpframesep2pt
\mfpiccaptionskip\medskipamount
\def\mfpicnumber#1{\global\mfp@count#1\relax}%
\newdef\mfpaddto#1#2{\mfp@scratch#1pt \advance\mfp@scratch#2pt
  \edef#1{\strip@pt\mfp@scratch}}%
\newdef\mfpmultiply#1#2{\mfp@scratch#1pt \mfp@scratch#2\mfp@scratch
  \edef#1{\strip@pt\mfp@scratch}}%
\mfp@ifundefined\strip@pt
  \begingroup
    \lccode`\/`\p
    \lccode`\?`\t
    \lowercase{%
  \endgroup
  \def\rem@pt#1.#2/?}{#1\ifnum#2>\z@.#2\fi}%
  \def\strip@pt{\@xp\rem@pt\the}%
\mfp@enddef
\newdef\pointdef#1(#2,#3){%
  \@ifundefined{#1} {}{\Mfpic@warn{\mfp@b#1  already defined.}}%
  \@ifundefined{#1x}{}{\Mfpic@warn{\mfp@b#1x already defined.}}%
  \@ifundefined{#1y}{}{\Mfpic@warn{\mfp@b#1y already defined.}}%
  \@namedef{#1}{(#2,#3)}\@namedef{#1x}{#2}\@namedef{#1y}{#3}}%
\newdef\setmfarray#1#2{\mfsrc{setarray (#1) (#2)}\mfp@writedata}%
\newlet\setmparray\setmfarray
\newdef\pairarray{\setmfarray{pair}}%
\newdef\numericarray{\setmfarray{numeric}}%
\newdef\colorarray{\setmfarray{color}}%
\newdef\rgbcolorarray{\setmfarray{rgbcolor}}%
\newdef\cmykcolorarray{\setmfarray{cmykcolor}}%
\newdef\globalsetmfarray#1#2{\mfsrc{gsetarray (#1)(#2)}\mfp@writedata}%
\newlet\globalsetmparray\globalsetmfarray
\newdef\lightershade{\shadespace1.2\shadespace}%
\newdef\darkershade{\shadespace.83333\shadespace}%
\newdef\dashlineset{\dashlen4pt \dashspace4pt }%
\newdef\dotlineset{\dashlen1pt \dashspace2pt }%
\let\ifpointfill\iftrue
\newdef\pointfilltrue{\mfp@let\ifpointfill\iftrue}%
\newdef\pointfillfalse{\mfp@let\ifpointfill\iffalse}%
\newdef\mfpfor#1{\begingroup\mfsrc{for #1:}}%
\newdef\endmfpfor{\mfsrc{endfor}\endgroup}%
\newdef\mfploop{%
  \begingroup\mfsrc{forever:}\let\@nountil\mfp@untilwarn}%
\newdef\mfpuntil#1{\mfcmd{exitif #1}\let\@nountil\@empty}%
\newdef\endmfploop{\@nountil\endmfpfor}%
\newdef\mfpwhile#1{\begingroup\mfcmd{forever: exitif not(#1)}}%
\newlet\endmfpwhile\endmfpfor
\newdef\plr#1{map (polar) (#1)}%
\newdef\midpoint#1{(0.5[#1])}%
\mfp@DBlog{Tests to control multiple prefix commands.}%
\newif\if@mfpstart\@mfpstarttrue
\newif\if@mfprend\@mfprendtrue
\newdef\mfp@storepath{\mfsrc{\@nl store (curpath)}}%
\newdef\mfp@first{\relax
  \if@mfpstart \mfp@storepath \@mfprendtrue \@mfpstartfalse\fi}%
\newdef\mfp@rendmac{\mfp@first \@mfprendfalse \mfsrc}%
\newdef\mfp@modmac{\mfp@first\mfp@autorend\mfsrc}%
\newdef\mfp@autorend{\if@mfprend\@xp\mfp@render\fi}%
\newdef\mfp@addmac{\mfp@first \mfsrc}%
\newdef\mfp@render{\draw[]}%
\newdef\setrender{\mfp@def\mfp@render}%
\newdef\mfp@figmacbase{\mfp@first \mfp@autorend \@mfpstarttrue}%
\newdef\mfp@figmac{\mfp@figmacbase\mfcmd}%
\newdef\mfp@listmac#1{\mfp@figmacbase\mfsrc{#1}\mfp@writedata}%
\newdef\mfp@writedata{\mfp@iftoken\datafile{\mfp@writefile}{\mflist}}%
\newdef\mfp@writefile{%
  \mfp@ifopengraphsfile
    {\mfp@processfile{\mfp@rwdata}}{\mfp@nooutput@error\datafile}}%
\newdef\mftitle#1{\@bsphack\mfp@title\mftitle{#1}\@esphack}%
\newdef\tmtitle#1{\mfp@title\tmtitle{#1}\wlog{\the\mfp@toks}{#1}}%
\newdef\mfp@title#1#2{\mfp@toks{#2}%
    \mfp@write\mfp@src#1{mftitle "\the\mfp@toks";}}%
\newdef\mfp@processfile#1#2{%
  \openin\mfp@data=#2\relax
  \ifeof\mfp@data \mfp@nofile@error{#2}%
  \else
    \mfp@DBlog{Opening file #2 for data.}%
    {%
      \mfp@resetwhitespace  \mfp@setcomment
      \mfp@skipblanklines
      \ifeof\mfp@data
        \mfp@nodata@error{#2}%
      \else
        \message{< Mfpic: Reading #2}%
        #1%
        \message{>}%
      \fi
      \@xp
    }\@xp\mfp@linetype\number\mfp@linetype\relax
    \mfp@DBlog{Closing file #2.}%
  \fi
  \closein\mfp@data}%
\newdef\mfp@resetwhitespace{\mfp@restorepar
  \endlinechar`\^^M \catcode`\^^M5 \catcode`\ 10 \catcode`\^^I10 }%
\newdef\mfp@skipcomments{\read\mfp@data to \mfp@temp
  \ifx\mfp@temp\@empty \@xp\mfp@skipcomments\fi}%
\newdef\mfp@skipblanklines{\mfp@skipcomments
  \ifeof\mfp@data
  \else\ifx\mfp@temp\mfp@par \@XP\mfp@skipblanklines
  \fi\fi}%
\newdef\mfp@nextdatum{\@xp\parse@data\mfp@temp\mfp@end}%
\newdef\mfp@rwdata{\mfp@count1 \mfp@sequence1
  \def\sequence{\number\mfp@sequence}%
  \edef\mfp@temp{\mfp@temp\space}%
  \edef\mfp@buffer{(\mfp@nextdatum}\mfp@rwdataloop}%
\newdef\mfp@rwdataloop{%
  \read\mfp@data to \mfp@temp
  \ifx\mfp@temp\mfp@par
    \mfcmd{\mfp@buffer)}%
  \else
    \ifx\mfp@temp\@empty
    \else
      \edef\mfp@temp{\mfp@temp\space}%
      \advance\mfp@sequence1
      \edef\mfp@buffer{\mfp@buffer\mfp@join}%
      \ifnum\mfp@count<\mfpdataperline\relax \advance\mfp@count1
      \else \mfsrc{\mfp@buffer}\mfp@count1 \def\mfp@buffer{}%
      \fi
      \edef\mfp@buffer{\mfp@buffer\mfp@nextdatum}%
    \fi
    \@xp\mfp@rwdataloop
  \fi}%
\newdef\pen#1{\mfcmd{\@nl resizedrawpen (#1)}}%
\newlet\penwd\pen \newlet\drawpen\pen
\newdef\shadewd#1{\setmfnumeric{shadewd}{#1}}%
\newdef\polkadotwd#1{\setmfnumeric{polkadotwd}{#1}}%
\newdef\hatchwd#1{\setmfnumeric{hatchwd}{#1}%
  \setmfvariable{pen}{hatchpen}{pencircle scaled hatchwd}}%
\newdef\dashpattern#1{\mfsrc{save #1; dashpat (#1)}\mfp@writedata}%
\newdef\settension#1{\setmfnumeric{default_tension}{#1}}%
\newcount\tl@vpos \newcount\tl@hpos
\newdef\mfp@tlh@l{-1}%
\newdef\mfp@tlh@c{0}%
\newdef\mfp@tlh@r{1}%
\newdef\mfp@tlv@B{-1}%
\newdef\mfp@tlv@b{0}%
\newdef\mfp@tlv@c{1}%
\newdef\mfp@tlv@t{2}%
\newdef\tl@rot{}\tl@vpos-1 \tl@hpos-1
\newdef\tlabeljustify#1{\mfp@ifexist{#1}{\mfp@justify#1\mfp@end}}%
\newdef\mfp@justify#1#2\mfp@end{\mfp@local\mfp@vconv{#1}%
  \mfp@ifexist{#2}{\mfp@@justify#2\mfp@end}}%
\newdef\mfp@@justify#1#2\mfp@end{\mfp@local\mfp@hconv{#1}%
  \mfp@local\edef\tl@rot{#2}%
  \@ifmplabels{}%
   {\mfp@ifexist{#2}%
     {\Mfpic@warn{Rotation of labels is not supported without the %
        mplabels\@msgbreak option. Rotation setting\on@line\space
        may be ignored.}}%
   }}%
\newdef\mfp@vconv#1{%
  \@ifundefined{mfp@tlv@#1}%
   {\tl@vpos-1 \mfp@justify@error}%
   {\tl@vpos\@nameuse{mfp@tlv@#1}\relax}}%
\newdef\mfp@hconv#1{%
  \@ifundefined{mfp@tlh@#1}%
   {\tl@hpos-1 \mfp@justify@error}%
   {\tl@hpos\@nameuse{mfp@tlh@#1}\relax}}%
\newdef\tlpathjustify#1{%
  \mfp@ifexist{#1}{\tlp@justify#1\mfp@end}}%
\newdef\tlp@justify#1#2\mfp@end{\mfp@def\tlpath@v{#1}%
  \mfp@ifexist{#2}{\tlp@@justify#2\mfp@end}}%
\newdef\tlp@@justify#1#2\mfp@end{%
  \mfp@def\tlpath@h{#1}\mfp@def\tlpath@r{#2}}%
\tlpathjustify{cc}%
\newdef\tlpointsep#1{\mfp@local\tlabel@sep#1\relax
  \setmfnumeric{label_sep}{\the\tlabel@sep}}%
\newdef\tlpathsep#1{\mfp@local\tlpath@sep#1\relax
  \setmfnumeric{labelpath_sep}{\the\tlpath@sep}}%
\newdef\tlabelsep#1{\tlpointsep{#1}\tlpathsep{#1}}%
\newdef\tlabeloffset#1#2{%
  \mfp@local\tlabel@hadj#1\relax \mfp@local\tlabel@vadj#2\relax
  \setmfpair{label_adjust}%
    {(\the\tlabel@hadj,\the\tlabel@vadj)}}%
\newdef\everytlabel{\afterassignment\mfp@everytlabel\mfp@toks}%
\newdef\mfp@everytlabel{\mfp@local\edef\every@tlabel{\the\mfp@toks}%
  \mfp@ifmpost
   {\mfp@ifopengraphsfile
     {\mfcmd{verbatimtex\@nl
        \def\noexpand\MFPeverylabel{\the\mfp@toks} etex}}%
     {}}%
   {}}%
\newdef\every@tlabel{}%
\newdef\extra@endtlabel{}%
\newdef\pinumber{3.14159}%
\newdef\headshape#1#2#3{\mfcmd{\@nl headshape (#1, #2, #3)}}%
\newdef\mfp@arr@b#1{\edef\mfp@hlocate{#1}}%
\newdef\mfp@arr@c#1{\edef\mfp@hcolour{#1}}%
\newdef\mfp@arr@l#1{\edef\mfp@hlength{#1}}%
\newdef\mfp@arr@r#1{\edef\mfp@hrotate{#1}}%
\newlet\mfp@arr@f\mfp@arr@b
\newlet\mfp@arr@s\mfp@arr@l
\newdef\mfp@arc@s{pps}%
\newdef\mfp@arc@t{ppp}%
\newdef\mfp@arc@p{\ifmfp@switch plr\fi}%
\newdef\mfp@arc@a{\ifmfp@switch alt\fi}%
\newdef\mfp@arc@c{cp\ifmfp@switch s\fi}%
\newdef\mfp@arc@r{pp (\mfp@T)}%
\newdef\mfp@arc@q{pp (\mfp@F)}%
\newdef\mfpdefinecolor#1#2#3{\setmfcolor{#1}{#2(#3)}}%
\newdef\mfp@defclr#1#2#3{%
  \setmfcolor{#1}{\mfp@ifempty{#2}{#3}{#2(#3)}}}%
\newdef\mfp@newcolorcmd#1{%
  \@namedef{#1\mfp@C}{\mfp@nullopt{\mfp@defclr{#1\mfp@C}}}}%
\mfp@newcolorcmd{draw}\mfp@newcolorcmd{fill}\mfp@newcolorcmd{tlabel}%
\mfp@newcolorcmd{hatch}\mfp@newcolorcmd{head}\mfp@newcolorcmd{point}%
\def\backgroundcolor{\mfp@nullopt{\mfp@defclr{background}}}%
\newdef\dashedlines{\mfp@local\mfp@linetype0
  \mfp@def\mfp@setstyle{\gendashed{getdashpat \number\mfp@linetype}}}%
\dashedlines
\newdef\coloredlines{%
  \mfp@ifmpost
   {\mfp@local\mfp@linetype0
    \mfp@def\mfp@setstyle{\draw[getcolor \number\mfp@linetype]}}%
   {\Mfpic@warn{You can't use \mfp@b coloredlines in %
      Metafont.\@msgbreak Using \dashedlines instead}%
    \dashedlines}}%
\newdef\pointedlines{\mfp@local\mfp@linetype0
  \mfp@def\mfp@setstyle{\plot{getsymbol \number\mfp@linetype}}}%
\newdef\datapointsonly{\mfp@local\mfp@linetype0
  \mfp@def\mfp@setstyle{\relax
    \plotnodes{getsymbol \number\mfp@linetype}}}%
\newdef\reconfigureplot#1{\mfsrc{setdata#1}\mfp@writedata}%
\newdef\defaultplot#1{\mfcmd{default#1}}%
\newdef\mfplinetype#1{\mfp@local\mfp@linetype#1\relax}%
\newlet\mfplinestyle\mfplinetype
\mfplinetype{0}%
\newdef\mfp@lshift{0}\newdef\mfp@bshift{0}%
\newdef\mfp@rshift{0}\newdef\mfp@tshift{0}%
\newdef\axismargin#1#2{\setmfnumeric{#1axis}{#2}%
  \mfp@local\@namedef{mfp@#1shift}{#2}}%
\newdef\setaxismargins#1#2#3#4{\axismargin l{#1}\axismargin b{#2}%
  \axismargin r{#3}\axismargin t{#4}}%
\newdef\setallaxismargins#1{\setaxismargins{#1}{#1}{#1}{#1}}%
\def\mfp@axis@x{0}%
\def\mfp@axis@y{1}%
\def\mfp@axis@l{2}%
\def\mfp@axis@b{3}%
\def\mfp@axis@r{4}%
\def\mfp@axis@t{5}%
\def\mfp@getaxis#1#2\mfp@end#3{%
  \@ifundefined{mfp@axis@#1}%
   {\mfp@errmsg {Invalid axis letter "#1"}%
    {The command #3 requires an axis to be designated by one of^^J%
     the following letters: x, y, l, b, r, or t. If you proceed, ^^J%
     x will be assumed.}\def\mfp@axisnum{0}\def\mfp@axisletter{x}}%
   {\edef\mfp@axisnum{\@nameuse{mfp@axis@#1}}\def\mfp@axisletter{#1}}%
  \edef\mfp@defaultheadlen{%
    \the\ifnum\mfp@axisnum>1 \sideheadlen\else \axisheadlen\fi}}%
\newdef\setaxismarks#1#2{\setmfnumeric{#1tick}{#2}}%
\newdef\setxmarks#1{\setaxismarks x{#1}}%
\newdef\setymarks#1{\setaxismarks y{#1}}%
\newdef\setbordermarks#1#2#3#4{\setaxismarks l{#1}\setaxismarks b{#2}%
  \setaxismarks r{#3}\setaxismarks t{#4}}%
\newdef\setallbordermarks#1{\setbordermarks{#1}{#1}{#1}{#1}}%
\newdef\mfp@smdata#1{\mfp@def\mfp@smoothness{#1}%
  \mfp@nullopt{\mfp@def\mfp@tension}}%
\newdef\smoothdata{\mfp@smdata{s}}%
\newdef\unsmoothdata{\mfp@smdata{p}\@empty}%
\unsmoothdata% default
\newdef\using#1#2{\mfp@def\parse@data#1\mfp@end{#2}}%
\newdef\usingpairdefault{\using{##1 ##2 ##3}{(##1,##2)}}%
\newdef\usingnumericdefault{\using{##1 ##2}{##1}}%
\usingpairdefault
\newdef\mfpdataperline{5}%
\newdef\mfp@par{\par}\newdef\mfp@join{,}%
\newcount\mfp@commentchar \mfp@commentchar`\%%
\newdef\makepercentother{\@makeother\%}%
\newdef\makepercentcomment{\catcode`\%14 }%
\newdef\mfpdatacomment#1{\mfp@local\mfp@commentchar`#1}%
\newdef\mfp@setcomment{\makepercentother\catcode\mfp@commentchar14 }%
\newdef\fdef{\begingroup\@makeother\#\mfp@keeplines\mfp@fdef}%
\newdef\mfp@fdef#1#2#3{\mfcmd{\@nl save #1;\@nl
  vardef #1 (expr #2) = \@nl #3\@nl enddef}\endgroup}%
\newdef\mfp@additions{}%
\newdef\mfp@grafmacs{%
  \newdef\rect##1{\mfp@figmac{rect (##1)}}%
  \newdef\regpolygon##1##2##3##4{%
    \mfp@figmac{regularpolygon (##1) (##2) (##3; ##4;)}}%
  \def\circle{\mfp@switchfalse\mfp@defaultopt\mfp@arccircle{p}}%
  \newdef\ellipse{\mfp@defaultopt\mfp@ellipse{0}}%
  \newdef\quarterellipse##1{\mfp@figmac{quarterellipse (##1)}}%
  \newdef\halfellipse##1{\mfp@figmac{halfellipse (##1)}}%
  \newdef\fullellipse##1{\mfp@figmac{fullellipse (##1)}}%
  \newdef\sector##1{\mfp@figmac{sector (##1)}}%
  \newdef\arc{\mfp@iftoken*{\arccomplement\mfp@arc}{\mfp@arc}}%
  \newdef\pshcircle{\mfp@ifstar\mfp@pshcircle\mfp@F\mfp@T}%
  \newdef\hypergeodesic{\mfp@ifstar\mfp@hypergeodesic{UHP}{UD}}%
  \newdef\lines{\mfp@listi{polyline}\mfp@F}%
  \newdef\polygon{\mfp@listi{polyline}\mfp@T}%
  \newdef\computedspline{\mfp@listi{dospline}\mfp@F}%
  \newdef\closedcomputedspline{\mfp@listi{dospline}\mfp@T}%
  \newdef\qspline{\mfp@listi{qspline}\mfp@F}%
  \newdef\closedqspline{\mfp@listi{qspline}\mfp@T}%
  \newdef\cspline{\mfp@listi{cspline}\mfp@F}%
  \newdef\closedcspline{\mfp@listi{cspline}\mfp@T}%
  \newdef\qbeziers{\mfp@listi{qbezier}\mfp@F}%
  \newdef\closedqbeziers{\mfp@listi{qbezier}\mfp@T}%
  \newdef\cbeziers{\mfp@listi{cbezier}\mfp@F}%
  \newdef\closedcbeziers{\mfp@listi{cbezier}\mfp@T}%
  \newdef\fcnspline{\mfp@listi{fcnspline}\mfp@F}%
  \newdef\periodicfcnspline{\mfp@listi{fcnspline}\mfp@T}%
  \newlet\closedpolyline\polygon
  \newlet\polyline\lines
  \newdef\curve{\mfp@curve{curve}\mfp@F}%
  \newdef\cyclic{\mfp@curve{curve}\mfp@T}%
  \newdef\convexcurve{\mfp@curve{ccurve}\mfp@F}%
  \newdef\convexcyclic{\mfp@curve{ccurve}\mfp@T}%
  \newdef\mfbezier{\mfp@curve{bezier}\mfp@F}%
  \newdef\closedmfbezier{\mfp@curve{bezier}\mfp@T}%
  \newlet\closedcurve\cyclic
  \newlet\closedconvexcurve\convexcyclic
  \newdef\fcncurve{\mfp@nullopt\mfp@fcncurve}%
  \newdef\turtle{\mfp@listmac{turtle}}%
  \newdef\function{\mfp@fcn{function}s}%
  \newdef\parafcn{\mfp@fcn{parafcn}s}%
  \newdef\plrfcn{\mfp@fcn{plrfcn}s}%
  \newdef\btwnfcn{\mfp@btwn{btwnfcn}}%
  \newdef\btwnplrfcn{\mfp@btwn{btwnplrfcn}}%
  \newdef\belowfcn{\mfp@fcn{belowfcn}p}%
  \newdef\plrregion{\mfp@fcn{plrregion}p}%
  \def\levelcurve{\mfp@fcn{levelset}p}%
  \newdef\DEgraph{\mfp@fcn{odeRKIV}s}%
  \newdef\DEtrajectory{\mfp@fcn{xyRKIV}s}%
  \newdef\brownianmotion##1{\mfp@figmac{brownianpath (##1)}}%
  \newdef\browniangraph##1{\mfp@figmac{browniangraph (##1)}}%
  \newdef\randomwalk##1{\mfp@figmac{randomwalk(##1)}}%
  \newdef\plotdata{\mfp@nullopt\mfp@plotdata}%
  \newdef\datafile{\mfp@nullopt\mfp@datafile}%
  \newdef\store##1##2{\mfp@rendmac{stored (##1)}##2}%
  \newdef\norender{\mfp@first\@mfprendfalse}%
  \newlet\mfobj\mfp@figmac \newlet\mpobj\mfobj
  \newdef\mfpimage{\mfp@defaultopt\mfp@image{(0,0)}}%
  \newdef\endmfpimage{\mfcmd{\@nl concludeimage}}%
  \newdef\putmfpimage##1{\mfsrc{\@nl putimage (##1)}\mfp@writedata}%
  \newdef\cutoffafter {\mfp@modi{cutoffafter}}%
  \newdef\cutoffbefore{\mfp@modi{cutoffbefore}}%
  \newdef\trimpath##1{\mfp@getdimens##1,,\mfp@end
    \mfp@modi{trimmedpath}\mfp@thedimens}%
  \newdef\partpath{\mfp@modi{partialpath}}%
  \newdef\subpath{\mfp@modi{gsubpath}}%
  \newdef\draw{\mfp@nullopt{\mfp@clroptrend{drawn}}}%
  \newdef\doubledraw{\mfp@defaultopt\mfp@doubledraw{2penwd}}%
  \newdef\dashed{\mfp@optrendi{DASHED}{\the\dashlen,\the\dashspace}}%
  \newdef\dotted{\mfp@optrendi{dotted}{\the\dotsize,\the\dotspace}}%
  \newdef\gendashed{\mfp@rendi{gendashed}}%
  \newdef\zigzag{\mfp@rendi{zigzag}}%
  \newdef\sinewave {\mfp@defaultopt{\mfp@wiggle{sinewave}}1}%
  \newdef\coil{\mfp@defaultopt{\mfp@wiggle{corkscrew}}1}%
  \newlet\corkscrew\coil
  \newdef\plot{%
    \mfp@optrendii{doplot}{\the\pointsize,\the\symbolspace}}%
  \newdef\plotnodes{\mfp@optrendii{plotnodes}{\the\pointsize}}%
  \newdef\showcontrols{\mfp@optrendii{showcontrols}{\the\pointsize}}%
  \newdef\bclosed{\mfp@nullopt{\mfp@close b}}%
  \newdef\sclosed{\mfp@nullopt{\mfp@close s}}%
  \newdef\lclosed{\mfp@close l{}}%
  \newdef\cbclosed{\mfp@close{cb}{}}%
  \newdef\qbclosed{\mfp@close{qb}{}}%
  \newlet\uclosed\bclosed
  \newdef\makesector{\mfp@modmac{makesector}}%
  \newdef\tess{\mfp@rendi{tess}}%
  \newdef\shade{\mfp@optrendi{shade}{\the\shadespace}}%
  \newdef\polkadot{\mfp@optrendi{polkadot}{\the\polkadotspace}}%
  \newdef\thatch{\mfp@defaultopt\mfp@thatch{\the\hatchspace,0}}%
  \newdef\lhatch{\mfp@defaultopt\mfp@lhatch{\the\hatchspace}}%
  \newdef\rhatch{\mfp@defaultopt\mfp@rhatch{\the\hatchspace}}%
  \newdef\xhatch{\mfp@defaultopt\mfp@xhatch{\the\hatchspace}}%
  \newlet\hatch\xhatch
  \newdef\gradient{\mfp@rendi{axialgradient}}%
  \newdef\areagradient{\mfp@rendi{areagradient}}%
  \newdef\radialgradient{\mfp@rendi{radialgradient}}%
  \newdef\gfill{\mfp@nullopt{\mfp@clroptrend{filled}}}%
  \newdef\gclear{\mfp@rendmac{unfilled}}%
  \newdef\gclip{\mfp@rendmac{Clip}}%
  \newdef\reversepath{\mfp@addmac{reverse}}%
  \newlet\reverse\reversepath
  \newdef\xyswappath{\mfp@modmac{xyswappedpath}}%
  \newdef\rotatepath{\mfp@modi{rotatedpath}}%
  \newdef\shiftpath{\mfp@modi{shiftedpath}}%
  \newdef\scalepath{\mfp@modi{scaledpath}}%
  \newdef\xscalepath{\mfp@modi{xscaledpath}}%
  \newdef\yscalepath{\mfp@modi{yscaledpath}}%
  \newdef\xslantpath{\mfp@modi{xslantedpath}}%
  \newlet\slantpath\xslantpath
  \newdef\yslantpath{\mfp@modi{yslantedpath}}%
  \newdef\reflectpath{\mfp@modi{reflectedpath}}%
  \newdef\transformpath{\mfp@modi{transformedpath}}%
  \newdef\parallelpath{\mfp@modi{parapath}}%
  \newdef\randomizepath{\mfp@modi{randompath}}%
  \newdef\randomlines{\mfp@modi{randomlines}}%
  \newdef\interpolatepath{\mfp@modi{interpolatedpath}}%
  \newdef\arccomplement{\mfp@modmac{arccomplement}}%
  \newdef\arrowhead{\mfp@ifstar\mfp@arrowhead\mfp@T\mfp@F}%
  \def\arrow{\mfp@ifstar\mfp@arrow{x}{}}%
  \newdef\arrowtail##1{\mfp@arr 0{tailpath (##1)}}%
  \newdef\arrowmid##1{\mfp@arr{0.5}{midpath (##1)}}%
  \newdef\coords{\mfsrc{\@nl bcoords\@nl}}%
  \newdef\endcoords{\mfsrc{\@nl ecoords\@nl}}%
  \newdef\applyT##1{\mfsrc{\@nl hide(apply_t (##1))}}%
  \def\rotate##1{\applyT{rotated ##1}}%
  \newdef\rotatearound##1##2{%
    \applyT{rotatedaround (##1, ##2)}}%
  \newdef\turn{\mfp@defaultopt\mfp@turn{(0,0)}}%
  \newdef\reflectabout##1##2{\applyT{reflectedabout (##1, ##2)}}%
  \let\mirror\reflectabout
  \newdef\shift##1{\applyT{shifted ##1}}% pair.
  \def\scale##1{\applyT{scaled ##1}}% same scaling
  \newdef\xscale##1{\applyT{xscaled ##1}}%
  \newdef\yscale##1{\applyT{yscaled ##1}}%
  \newdef\zscale##1{\applyT{zscaled ##1}}%
  \newdef\xslant##1{\applyT{xslant ##1}}%
  \newdef\yslant##1{\applyT{yslant ##1}}%
  \newdef\zslant##1{\applyT{zslant ##1}}%
  \newdef\boost##1{\applyT{boost ##1}}%
  \newdef\xyswap{\applyT{xyswap}}%
  \newdef\xaxis{\mfp@defaultopt{\mfp@simple{xaxis}}{\the\axisheadlen}}%
  \newdef\yaxis{\mfp@defaultopt{\mfp@simple{yaxis}}{\the\axisheadlen}}%
  \newdef\axes{\mfp@defaultopt {\mfp@simple{axes}}{\the\axisheadlen}}%
  \newdef\axis{\mfp@nullopt\mfp@axis}%
  \newdef\axisline##1{\mfp@figmac{axisline.##1}}%
  \newdef\doaxes{\mfp@nullopt\mfp@doaxes}%
  \newdef\border{\mfp@figmac{borderrect}}%
  \newdef\axismarks##1{\mfp@defaultopt{\mfp@marks{##1}}{\the\hashlen}}%
  \newdef\xmarks{\axismarks x}%
  \newdef\ymarks{\axismarks y}%
  \newdef\lmarks{\axismarks l}%
  \newdef\bmarks{\axismarks b}%
  \newdef\rmarks{\axismarks r}%
  \newdef\tmarks{\axismarks t}%
  \def\grid{\mfp@defaultopt{\mfp@simplei{vargrid}}{\the\griddotsize}}%
  \newlet\gridpoints\grid \newlet\lattice\grid
  \newdef\gridlines{\mfp@simple{gridlines}}%
  \newdef\vgridlines{\mfp@simple{vgridlines}}%
  \newdef\hgridlines{\mfp@simple{hgridlines}}%
  \newdef\plrgrid{\mfp@simple{polargrid}}%
  \newdef\plrgridpoints{%
    \mfp@defaultopt{\mfp@simplei{polargridpoints}}{\the\griddotsize}}%
  \newdef\gridarcs{\mfp@simple{gridarcs}}%
  \newdef\gridrays{\mfp@simple{gridrays}}%
  \newdef\plrpatch{\mfp@simple{polarpatch}}%
  \newdef\vectorfield{%
    \mfp@defaultopt{\mfp@vectorfield{}}{\the\headlen}}%
  \newdef\plrvectorfield{%
    \mfp@defaultopt{\mfp@vectorfield{plr}}{\the\headlen}}%
  \newdef\point{\mfp@defaultopt\mfp@point{\the\pointsize}}%
  \newdef\plotsymbol{\mfp@defaultopt\mfp@plotsymbol{\the\pointsize}}%
  \newdef\plottext{\begingroup\mfp@resetwhitespace\mp@mksharpother
    \mfp@defaultopt\mfp@plottext{cc}}%
  \newdef\tile{\mfp@simple{tile}}%
  \newdef\endtile{\mfcmd{\@nl endtile}}%
  \newdef\patharr##1{\begingroup
    \mfsrc{hide(numeric ##1; path ##1[]; ##1 = 0)}%
    \def\mfp@storepath{\mfsrc{\@nl store (##1[incr ##1])}}%
    \setrender{}}%
  \newdef\endpatharr{\endgroup}%
  \newdef\connect{\mfp@figmac{begingroup; save mfpicnexus}%
    \patharr{mfpicnexus}}%
  \newdef\endconnect{\endpatharr
    \mfcmd{\@nl mkpoly (\mfp@F, mfpicnexus)\@nl endgroup}%
    \mfp@checklatexenv{connect}{\aftergroup\@mfpstarttrue}{}}%
  \newlet\piechart\mfppiechart
  \newdef\piewedge{\mfp@defaultopt\mfp@piewedge{d}}%
  \newlet\barchart\mfpbarchart
  \newlet\bargraph\barchart
  \newlet\histogram\barchart
  \newlet\gantt\barchart
  \newdef\chartbar##1{\mfp@figmac{chartbar[##1]}}%
  \newlet\graphbar\chartbar
  \newlet\histobar\chartbar
  \newlet\ganttbar\chartbar
  \newdef\gbrace##1{\mfp@figmac{mkbrace(##1)}}%
}% end \mfp@grafmacs
\def\mfp@abc#1#2#3#4#5#6#7#8/{#6#3#1#2#6#7#6#4#5}%
\@namedef{\mfp@abc STAGGER LEE/}{%
\mfpic[20]{-2}{2}{-3}{3}%
  \tile{peter, 1pt, 10, 10, false}%
    \penwd{1pt}%
    \draw[rgb(1,0,0)]\lines{(0,0), (5,5), (10,0)}%
    \pointcolor{rgb(0,.8,0)}%
    \point[3pt]{(2.5,7.5)}%
  \endtile
  \draw\tess{peter}\gfill[rgb(1,1,0)]\ellipse{(0,0),2,3}%
\endmfpic}%
\newdef\mfppiechart{\mfp@defaultopt\mfp@piechart{c}}%
\newdef\mfpbarchart{\mfp@defaultopt\mfp@barchart{0,1,1}}%
\newlet\mfpbargraph\mfpbarchart
\newlet\mfphistogram\mfpbarchart
\newlet\mfpgantt\mfpbarchart
\newdef\mfp@arc{\mfp@switchtrue\mfp@defaultopt\mfp@arccircle{s}}%
\newdef\arc@or@circle{\ifmfp@switch arc\else circle\fi}%
\newdef\mfp@arccircle#1#2{%
  \@ifundefined{mfp@arc@#1}%
   {\Mfpic@warn{Invalid option; ignoring \mfp@b\arc@or@circle\space
      command.}%
    \mfp@figmac{fallbackpath(\ifmfp@switch\mfp@F\else\mfp@T\fi) (#2)}}%
   {\mfp@figmac{\arc@or@circle\@nameuse{mfp@arc@#1} (#2)}}}%
\newdef\mfp@ellipse#1#2{\mfp@figmac{ellipse (#2, #1)}}%
\newdef\mfp@pshcircle#1#2{\mfp@figmac{pshcircle (#1, #2)}}%
\newdef\mfp@hypergeodesic#1#2{\mfp@figmac{#1geodesic (#2)}}%
\newdef\mfp@curve#1#2{\mfp@nullopt{\mfp@@curve{#1}{#2}}}%
\newdef\mfp@@curve#1#2#3{%
  \mfp@listmac{\mfp@ifempty{#3}{#1}{t#1 (#3)} (#2)}}%
\newdef\mfp@fcncurve#1{%
  \mfp@listmac{\mfp@ifempty{#1}{fcncurve}{functioncurve (#1)}}}%
\newdef\mfp@fcn#1#2{%
  \mfp@defaultopt{\mfp@dotension{\mfp@@fcn{#1}}}{#2}}%
\newdef\mfp@@fcn#1#2#3{%
  \mfp@figmac{\mfp@t#1 (\mfp@sval) (#2) (#3)}}%
\newdef\mfp@btwn#1{%
  \mfp@defaultopt{\mfp@dotension{\mfp@@btwn{#1}}}p}%
\newdef\mfp@@btwn#1#2#3#4{%
  \mfp@figmac{\mfp@t#1 (\mfp@sval) (#2) (#3) (#4)}}%
\newdef\mfp@dotension#1#2{\mfp@@dotension#2\mfp@end#1}%
\newdef\mfp@@dotension#1#2\mfp@end{\def\mfp@t{}%
  \if p#1\relax \let\mfp@sval\mfp@F
  \else \let\mfp@sval\mfp@T
    \mfp@ifexist{#2}{\def\mfp@t{t}\edef\mfp@sval{\mfp@sval, #2}}%
  \fi}%
\newdef\mfp@plotdata#1{\mfp@processfile{\mfp@doplots{#1}}}%
\newdef\mfp@doplots#1{\mfp@setstyle
  \advance\mfp@linetype1 \mfp@figmacbase
  \mfp@@datafile{#1}\mfp@ifenddata{}{\mfp@doplots{#1}}}%
\newdef\mfp@ifenddata{%
  \ifeof\mfp@data \@xp\@firstoftwo
  \else \mfp@skipcomments
    \ifx\mfp@temp\mfp@par \@XP\@firstoftwo
    \else \@XP\@secondoftwo
    \fi
  \fi}%
\newdef\mfp@datafile#1{%
  \mfp@figmacbase\mfp@processfile{\mfp@@datafile{#1}}}%
\newdef\mfp@@datafile#1{%
  \mfp@ifempty{#1}%
    {\mfp@dodatafile\mfp@smoothness\mfp@tension}%
    {\mfp@dodatafile#1}\mfp@end}%
\newdef\mfp@dodatafile#1#2\mfp@end{%
  \mfsrc{%
    \if s#1 \mfp@ifempty{#2}{curve }{tcurve (#2) }%
    \else polyline
    \fi (\mfp@F)}\mfp@rwdata}%
\newdef\mfp@image#1#2{\mfsrc{\@nl makeimage (#2, #1)}}%
\newdef\mfp@getdimens#1,#2,#3\mfp@end{%
  \mfp@scratch \@ifmtarg{#1}{\z@}{#1}\relax
  \edef\mfp@thedimens{\the\mfp@scratch}%
  \@ifmtarg{#3}{}{\mfp@scratch \@ifmtarg{#2}{\z@}{#2}\relax}%
  \edef\mfp@thedimens{\mfp@thedimens,\the\mfp@scratch}}%
\newdef\mfp@doubledraw#1{%
  \mfp@nullopt{\mfp@clroptrendi{doubledraw}{#1}}}%
\newdef\mfp@wiggle#1#2{\mfp@rendi{#1 (#2)}}%
\newdef\mfp@rendi#1#2{\mfp@rendmac{#1 (#2)}}%
\newdef\mfp@rendii#1#2#3{\mfp@rendmac{#1 (#3, #2)}}%
\newdef\mfp@optrendi#1{\mfp@defaultopt{\mfp@rendi{#1}}}%
\newdef\mfp@optrendii#1{\mfp@defaultopt{\mfp@rendii{#1}}}%
\newdef\mfp@modi#1#2{\mfp@modmac{#1 (#2)}}%
\newdef\mfp@listi#1#2{\mfp@listmac{#1 (#2)}}%
\newdef\mfp@clropt#1#2{\mfp@ifempty{#1}{#2}{\mfp@C#2 (#1)}}%
\newdef\mfp@clroptrend#1#2{\mfp@rendmac{\mfp@clropt{#2}{#1}}}%
\newdef\mfp@clroptrendi#1#2#3{\mfp@rendmac{\mfp@clropt{#3}{#1} (#2)}}%
\newdef\mfp@simple#1#2{\mfcmd{\@nl #1 (#2)}}%
\newdef\mfp@simplei#1#2#3{\mfcmd{\@nl #1 (#2, #3)}}%
\newdef\mfp@close#1#2{\mfp@modmac{#1closed\mfp@ifexist{#2}{t (#2)}}}%
\newdef\mfp@thatch#1{\mfp@nullopt{\mfp@clroptrendi{thatch}{#1}}}%
\newdef\mfp@lhatch#1{\mfp@thatch{#1,-45}}%
\newdef\mfp@rhatch#1{\mfp@thatch{#1,45}}%
\newdef\mfp@xhatch#1{\mfp@nullopt{\mfp@clroptrendi{xhatch}{#1}}}%
\newdef\mfp@arrowhead#1#2{\mfp@arr 0{Gheadpath (#1) (#2)}}%
\newdef\mfp@arrow#1{\mfp@arr 0{headpath#1}}%
\newdef\mfp@arr#1#2{\mfp@arr@c{}\mfp@arr@l{\the\headlen}%
  \mfp@arr@b{#1}\edef\mfp@hcommand{#2}\mfp@arr@r{0}\mfp@@arr}%
\newdef\mfp@@arr{\@ifnextchar[{\mfp@arropt}{\mfp@doarrow}}%
\newdef\mfp@arropt[#1]{%
  \mfp@ifexist{#1}{\mfp@@arropt#1\mfp@end}\mfp@@arr}%
\newdef\mfp@@arropt#1#2\mfp@end{%
  \mfp@ifempty{#2}%
   {\Mfpic@warn{Arrow option #1 has no value\on@line; %
      it will be ignored.}}%
   {\@ifundefined{mfp@arr@#1}%
     {\Mfpic@warn{Arrow option #1 invalid \on@line; %
        it will be ignored}}%
     {\@nameuse{mfp@arr@#1}{#2}}%
   }}%
\newdef\mfp@doarrow{%
  \mfp@addmac{\mfp@clropt{\mfp@hcolour}{\mfp@hcommand} (\mfp@hlength, %
    \mfp@hrotate, \mfp@hlocate)}}%
\newdef\mfp@turn#1#2{\rotatearound{#1}{#2}}%
\newdef\mfp@axis#1#2{\mfp@getaxis#2{(none)}\mfp@end\axis
  \mfp@addmac{headpath (\mfp@emptysub{#1}{\mfp@defaultheadlen}, 0, 0)}%
  \axisline{\mfp@axisletter}}%
\newdef\mfp@doaxes#1#2{%
  \def\mfp@@axis##1{\mfp@axis{#1}{##1}\mfp@@doaxis}%
  \mfp@@doaxis#2\mfp@end}%
\newdef\mfp@@doaxis{\mfp@ifend{}\mfp@@axis}%
\newdef\mfp@marks#1#2{\mfsrc{\@nl #1marks (#2)}\mfp@writedata}%
\newdef\mfp@vectorfield#1#2#3#4#5{%
  \mfcmd{#1vectorfield (#2, #3) (#4) (#5)}}%
\newdef\mfp@point#1{%
  \mfsrc{\@nl pointd (#1, \ifpointfill\mfp@T\else\mfp@F\fi)}%
  \mfp@writedata}%
\newdef\mfp@plotsymbol#1#2{%
  \mfsrc{\@nl plotsymbol (#2, #1)}\mfp@writedata}%
\newdef\mfp@plottext#1#2#3{\tlabeljustify{#1}%
  \def\tl@points{#3}\mfp@toks{#2}\mfp@thelabel\endgroup}%
\newdef\mfp@piechart#1{\mfp@@piechart#1\mfp@end}%
\newdef\mfp@@piechart#1#2\mfp@end#3{% #3 = center,radius
  \mfsrc{\@nl piechart(\if a#1 \else-\fi1, %
      \mfp@emptysub{#2}{90}, #3)}\mfp@writedata}%
\newdef\mfp@piewedge#1{\mfp@@piewedge#1\mfp@end}%
\newdef\mfp@@piewedge#1#2\mfp@end#3{% #3=number
  \mfp@figmac{(piewedge[#3]%
    \mfp@ifexist{#2}%
     {\if #1x shifted (#2*piedirection[#3])%
      \else\if #1s shifted (#2)%
      \else\if #1m shifted (#2 - piecenter)%
      \fi\fi\fi})}}%
\newdef\mfp@barchart#1#2{%
  \mfsrc{\@nl barchart (#1, \if h#2\mfp@F\else\mfp@T\fi)}%
  \mfp@writedata}%
\newdef\everymfpic{\afterassignment\@everymfpic\mfp@toks}%
\newdef\everyendmfpic{\afterassignment\@everyendmfpic\mfp@toks}%
\newdef\@everymfpic{\edef\every@mfpic{\the\mfp@toks}}%
\newdef\@everyendmfpic{\edef\every@endmfpic{\the\mfp@toks}}%
\everymfpic{}\everyendmfpic{}%
\newdef\mfpic{\mfp@defaultopt\@mfpicA{1}}%
\newdef\@mfpicA#1{\mfp@defaultopt{\@mfpic{#1}}{#1}}%
\newdef\@mfpic#1#2#3#4#5#6{%
  \save@mfpicdimens
  \begingroup % ended near end of \endmfpic
  \@mfpicunit\mfpicunit
  \mfp@safe@activestrue
  \mfp@ifopengraphsfile{}%
   {\ifmfp@nowrite\else \mfp@nooutput@error\mfpic
      \def\mfp@src##1##2{\endgroup}%
    \fi}%
  \mfp@DBlog{Starting mfpic \number\mfp@count \on@line.}%
  \@xp\let\@xp\@tcurr\the\font
  \let\ifin@mfpicenv\iftrue
  \let\par\@empty
  \nullfont
  \mfp@grafmacs
  \mfp@additions
  \edef\xfactor{#1}\edef\yfactor{#2}%
  \edef\xmin{#3}\edef\xmax{#4}\edef\ymin{#5}\edef\ymax{#6}%
  \mfp@setconv
  \mfp@inittlabels
  \@xconv\xmax\@graphright
  \@yconv\ymax\@graphtop
  \@graphleft 0pt
  \@graphbot  0pt
  \mfsrc{\@nl \mfp@p\mfp@d\mfp@d<\number\mfp@count>\@nl
    unitlen := \the\@mfpicunit\mfp@s;\@nl
    xscale := #1; yscale := #2;\@nl
    bounds (#3, #4, #5, #6);\@nl
    \@nl
    beginmfpic(\number\mfp@count); \mfp@p\space\mfp@lineno.
    \mfp@ifmpost
     {\@nl verbatimtex \relax
      \MFPbegingroup\font\noexpand\MFPcfont=\fontname\@tcurr\relax
      etex;}{}}%
  \newdef\tlabel{\mfp@nullopt\mfp@label}%
  \newdef\startbacktext{\let\mfp@restoreOL\@empty
    \mfp@ifmpost
     {\ifmfp@overlabels
        \let\mfp@restoreOL\overlaylabels\nooverlaylabels
      \fi \setmfboolean{underlaylabels}{\mfp@T}}{}%
    \setbox\@wholegraph \box\@alltlabels
    \setbox\@alltlabels \vbox{\hbox{}}}%
  \newdef\stopbacktext{%
    \setbox\@backtext  \box\@alltlabels
    \setbox\@alltlabels\box\@wholegraph
    \mfp@ifmpost{\setmfboolean{underlaylabels}{\mfp@F}}{}%
    \mfp@restoreOL}%
  \newdef\tlabelrect{\mfp@labelpath{rect}{0}}%
  \newdef\tlabeloval{\mfp@labelpath{oval}{1}}%
  \newdef\tlabelellipse{\mfp@labelpath{ellipse}{1}}%
  \newdef\tlabelcircle{%
    \mfp@iftoken*{\tlabelellipse*[1]}{\tlabelellipse[1]}}%
  \newdef\tlabels{\begingroup
    \mfp@resetwhitespace\mp@mksharpother \mfp@labels}%
  \newlet\axislabels\mfp@axislabels
  \let\mfp@docaption\@empty
  \newdef\tcaption{\mfp@defaultopt\mfp@caption{1.2,1.0}}%
  \every@mfpic}% End of \@mfpic
\newdef\mfp@setconv{%
  \def\@xconv##1##2{% ##1 = coord. ##2 = dimension register or fdim
  {\mfp@scratch=##1\@mfpicunit
    \advance\mfp@scratch by -\xmin\@mfpicunit
    \mfp@scratch=\xfactor\mfp@scratch
    \global ##2=\mfp@scratch}}%
  \def\@yconv##1##2{% ditto
  {\mfp@scratch=##1\@mfpicunit
    \advance\mfp@scratch by -\ymin\@mfpicunit
    \mfp@scratch=\yfactor\mfp@scratch
    \global ##2=\mfp@scratch}}}%
\newdef\mfp@inittlabels{%
  \setbox\@alltlabels\vbox{\hbox{}}%
  \setbox\@backtext\vbox{\hbox{}}%
  \@tlabelsbot  \maxdimen
  \@tlabelstop -\maxdimen
  \@tlabelsleft \maxdimen}%
\newdef\mfp@label#1{\begingroup\mfp@resetwhitespace\mp@mksharpother
  \tlabeljustify{#1}\@ifnextchar({\mfp@label@}{\mfp@label@@}}%
\newdef\mfp@label@(#1,#2){\mfp@label@@{(#1,#2)}}%
\newdef\mfp@label@@#1#2{\def\tl@points{#1}\mfp@toks{#2}\mfp@thelabel
  \endgroup\extra@endtlabel}%
\newdef\mfp@thelabel{\@ifmplabels\mp@tlabel\tex@tlabel}%
\newdef\mfp@btex#1{btex \noexpand\MFPtext{#1} etex}%
\newdef\mfp@setMPpos{%
  \edef\mfp@MPpos{%
    \ifcase\tl@hpos .5\or 1\else 0\fi, % horizontal
    \ifcase\tl@vpos0\or .5\or 1\else 0\fi, % vertical
    \ifnum \tl@vpos<0 \mfp@T\else\mfp@F\fi,  % true=Baseline
    \mfp@emptysub{\tl@rot}{0}}}%
\newdef\mp@tlabel{\mfp@setMPpos
  \mfcmd{\@nl newgblabel(\mfp@MPpos)(\mfp@btex{\the\mfp@toks})\@nl
    (\tl@points)}}%
\newdef\set@textbox#1{%
  \setbox\@textbox\vbox{\def\\{\cr}\mfp@restorepar
    \mfp@safe@activesfalse\@tcurr\every@tlabel
    \halign{##\hfil\cr#1\crcr}}}%
\newdef\tex@tlabel{\@xp\@textlabel\tl@points\mfp@end}%
\newdef\@textlabel{\mfp@ifendorcomma{}\@textlabel\@@textlabel}%
\newdef\@@textlabel(#1,#2){\tex@@tlabel{#1}{#2}\@textlabel}%
\newdef\tex@@tlabel#1#2{%
  \set@textbox{\the\mfp@toks}%
  \mfp@scratch\tb@ht \advance\mfp@scratch\tb@dp
  \tb@totalht\mfp@scratch
  \@xconv{#1}\mfp@scratch
  \begingroup
    \ifcase\tl@hpos \advance\mfp@scratch -0.5\tb@wd % center
    \or \advance\mfp@scratch -\tb@wd                % right
        \advance\mfp@scratch -\tlabel@sep
    \else \advance\mfp@scratch \tlabel@sep          % left (default)
    \fi
    \advance\mfp@scratch \tlabel@hadj
    \ifdim \mfp@scratch<\@tlabelsleft
      \@tlabelsleft\mfp@scratch
    \fi
    \tb@moveright\mfp@scratch
  \endgroup
  \@yconv{#2}\mfp@scratch
  \begingroup
    \ifcase\tl@vpos \advance\mfp@scratch \tb@totalht
      \advance\mfp@scratch \tlabel@sep             % bottom
    \or \advance\mfp@scratch 0.5\tb@totalht        % center
    \or \advance\mfp@scratch -\tlabel@sep          % top
    \else \advance\mfp@scratch \tb@ht              % baseline (default)
    \fi
    \advance\mfp@scratch \tlabel@vadj
    \ifdim \mfp@scratch>\@tlabelstop
      \@tlabelstop\mfp@scratch
    \fi
    \tb@raise\mfp@scratch
  \endgroup
  \begingroup
    \ifcase\tl@vpos \advance\mfp@scratch \tlabel@sep % bottom
    \or \advance\mfp@scratch -0.5\tb@totalht       % center
    \or \advance\mfp@scratch -\tb@totalht
        \advance\mfp@scratch -\tlabel@sep          % top
    \else \advance\mfp@scratch -\tb@dp             % baseline (default)
    \fi
    \advance\mfp@scratch \tlabel@vadj
    \ifdim \mfp@scratch<\@tlabelsbot
      \@tlabelsbot\mfp@scratch
    \fi
  \endgroup
  \global \setbox\@alltlabels
    \vtop{\unvbox\@alltlabels
      \vbox to 0pt{\kern-\tb@raise
        \hbox{\kern\tb@moveright\box\@textbox}\vss}}%
}% End \tex@@tlabel
\newdef\mfp@labels#1{\let\extra@endtlabel\mfp@dolabel
  \mfp@dolabel#1\mfp@end}%
\newdef\mfp@dolabel{\mfp@ifend\endgroup\tlabel}%
\newdef\mfp@labelpath#1#2{\mfp@figmacbase
  \begingroup % ended in \tlabelpath@
  \def\mfp@name{#1}\def\mfp@param{#2}%
    \mfp@ifstar\mfp@tlpath\mfp@switchtrue\mfp@switchfalse}%
\newdef\mfp@tlpath#1{#1\mfp@defaultopt\mfp@@tlpath\mfp@param}%
\newdef\mfp@@tlpath#1{\edef\mfp@param{#1}%
  \mfp@defaultopt\mfp@tlpath@{\tlpath@v\tlpath@h\tlpath@r}}%
\newdef\mfp@tlpath@#1{\mfp@resetwhitespace\mp@mksharpother
  \tlabeljustify{#1}\@ifnextchar({\@tlabelpath}{\@@tlabelpath}}%
\newdef\@tlabelpath(#1,#2){\@@tlabelpath{(#1,#2)}}%
\newdef\@@tlabelpath#1#2{%
  \def\tl@points{#1}\mfp@toks{#2}\tlabelpath@}%
\newdef\tlabelpath@{\@ifmplabels{}{\measure@textbox{\the\mfp@toks}}%
  \mfp@setMPpos
  \mfcmd{text\mfp@name x (\mfp@MPpos)\@nl
    (\@ifmplabels{origin, \mfp@btex{\the\mfp@toks}}{\tb@ll, \tb@ur}, %
      \mfp@param) (\tl@points)}%
  \ifmfp@switch\else \mfp@thelabel\fi \endgroup}%
\newdef\measure@textbox#1{\set@textbox{#1}%
  \mfp@scratch-\tb@dp
  \edef\tb@ll{(0, \the\mfp@scratch)}%
  \edef\tb@ur{(\the\tb@wd, \the\tb@ht)}}%
\newdef\mfp@axislabels#1{%
    \begingroup % ended in \mfp@(@)doaxislabel
      \mfp@resetwhitespace
      \tl@vpos1 \tl@hpos0
      \let\mfp@xcoord\@firstofone \let\mfp@ycoord\@firstofone
      \mfp@getaxis#1\relax\mfp@end\axislabels
      \ifcase\mfp@axisnum\relax
        \tl@vpos2 \def\mfp@ycoord{0}\or
        \tl@hpos1 \def\mfp@xcoord{0}\or
        \tl@hpos1\edef\mfp@xcoord{\mfp@lshift}%
            \mfpaddto\mfp@xcoord\xmin\or
        \tl@vpos2\edef\mfp@ycoord{\mfp@bshift}%
            \mfpaddto\mfp@ycoord\ymin\or
        \tl@hpos-1 \edef\mfp@xcoord{-\mfp@rshift}%
            \mfpaddto\mfp@xcoord\xmax\or
        \tl@vpos0 \edef\mfp@ycoord{-\mfp@tshift}%
            \mfpaddto\mfp@ycoord\ymax
      \fi
      \ifx\@firstofone\mfp@xcoord
        \edef\mfp@ycoord##1{\mfp@ycoord}%
      \else
        \edef\mfp@xcoord##1{\mfp@xcoord}%
      \fi \mp@mksharpother\mfp@nullopt\mfp@@axislabels}%
\newdef\mfp@@axislabels#1#2{%
  \tlabeljustify{#1}\mfp@doaxislabel#2,\mfp@end}%
\newdef\mfp@doaxislabel{%
  \mfp@ifendorcomma\endgroup\mfp@doaxislabel\mfp@@doaxislabel}%
\newdef\mfp@@doaxislabel#1{\mfp@toks{#1}%
  \mfp@ifendorcomma\endgroup\mfp@doaxislabel\mfp@mkaxislabel}%
\newdef\mfp@mkaxislabel#1,{%
  \@ifmtarg{#1}{}%
    {\edef\tl@points{(\mfp@xcoord{#1},\mfp@ycoord{#1})}\mfp@thelabel}%
  \mfp@doaxislabel}%
\newdef\mfp@caption#1{\begingroup\mfp@resetwhitespace
  \mfp@@caption#1\mfp@end}%
\long\def\mfp@@caption#1,#2\mfp@end#3{\endgroup
  \def\mfp@docaption{%
    \setbox\@textbox
      \hbox{\def\\{\hskip\@M\p@\let\\\relax}\mfp@restorepar
       \mfp@safe@activesfalse\@tcurr#3}%
    \mfp@scratch\wd\@wholegraph
    \ifdim\tb@wd>#1\mfp@scratch
      \setbox\@textbox
      \hbox{%
        \vbox{%
          \hsize#2\mfp@scratch \mfp@restorepar
          \leftskip0pt \rightskip0pt\relax
          \mfp@capsettings
          \mfp@safe@activesfalse
          \noindent\@tcurr #3%
        }% End vbox.
      }% End hbox.
    \fi
    \ifdim \mfp@scratch<\tb@wd \mfp@scratch\tb@wd \fi
    \global\setbox\@wholegraph
    \vbox{\hbox to \mfp@scratch{\hss\box\@wholegraph\hss}%
      \nointerlineskip \vskip\mfpiccaptionskip
      \hbox to \mfp@scratch{\hss\box\@textbox\hss}}% End vbox.
  }% End \mfp@docaption.
}% End \mfp@@caption.
\def\mfp@adjustdim#1#2#3#4{%
  \mfp@scratch#1\relax \advance\mfp@scratch-#4 bp
  \ifdim\mfp@scratch#2#3\relax #3\mfp@scratch \fi
  #1\mfp@scratch}%
\mfp@DBlog{Definition of closure of mfpic environment.}%
\newdef\endmfpic{\every@endmfpic
  \mfsrc{%
    \mfp@ifmpost{\@nl verbatimtex \relax\MFPendgroup\space etex;}{}\@nl
    endmfpic; \mfp@p\space(\number\mfp@count) \mfp@lineno.\@nl
    \mfp@p\mfp@d\mfp@d\mfp@d\@nl}%
  \ifmfpicdebug\wlog{}\wlog{Mfpic: ENTERED endmfpic.}\wlog{}\fi
  \ifmfp@noship \else
    \global\setbox\@wholegraph
    \vbox{%
      \ifmfpicdraft
        \vbox to \@graphtop{\vss
          \hbox to \@graphright{%
            \kern2pt \mfpdraftfont\#\number\mfp@count\hss}%
          \kern2pt}%
      \else
        \mfp@ifmpost{\vbox}{\vbox to \@graphtop}%
         {\vss
          \edef\@graphfilename{%
            \setfilename\mfp@filename{\number\mfp@count}}%
          \mfp@ifmpost
           {\IfFileExists{\@graphfilename}{}%
             {\Mfpic@msg{No graph file: \@graphfilename\space.}%
              \let\@setmfpicgraphic\nofile@setmfpgraphic}%
            \hbox}%
           {\hbox to \@graphright}%
            {\@xp\@setmfpicgraphic\@xp{\@graphfilename}\hss}%
          \kern0pt
        }% End vbox
      \fi
    }%% End \setbox\@wholegraph \vbox
    \mfp@ifmpost
     {\@graphright\wd\@wholegraph
      \@graphtop\ht\@wholegraph}{}%
    \ifmfpicdebug
      \wlog{Mfpic debug: Dimensions of wholegraph before labels %
        are added, and before truebbox adjustments:}%
      \wlog{Mfpic: graphleft  = \the\@graphleft}%
      \wlog{Mfpic: graphright = \the\@graphright}%
      \wlog{Mfpic: graphtop   = \the\@graphtop}%
      \wlog{Mfpic: graphbot   = \the\@graphbot}%
      \wlog{Mfpic: graphwd    = \the\wd\@wholegraph}%
      \wlog{Mfpic: graphht    = \the\ht\@wholegraph}%
      \wlog{Mfpic: graphdp    = \the\dp\@wholegraph}%
      \wlog{}%
    \fi
    \ifmfpicdebug
      \wlog{Mfpic debug: Dimensions of alltlabels, before %
        truebbox adjustments:}%
      \mfp@scratch\mfpicllx bp\relax
      \wlog{Mfpic: mfpicllx     = \the\mfp@scratch}%
      \mfp@scratch\mfpiclly bp\relax
      \wlog{Mfpic: mfpiclly     = \the\mfp@scratch}%
      \wlog{Mfpic: tlabelsleft  = \the\@tlabelsleft}%
      \wlog{Mfpic: tlabelstop   = \the\@tlabelstop}%
      \wlog{Mfpic: tlabelsbot   = \the\@tlabelsbot}%
      \wlog{}%
    \fi
    \ifdim\@tlabelsleft < \maxdimen
      \setbox\@alltlabels\vtop to 0pt{%
        \kern \mfpiclly bp
        \moveleft \mfpicllx bp \box\@alltlabels\vss}%
      \setbox\@backtext  \vtop to 0pt{%
        \kern \mfpiclly bp
        \moveleft \mfpicllx bp \box\@backtext  \vss}%
      \mfp@adjustdim\@tlabelsleft <\@graphleft \mfpicllx
      \mfp@adjustdim\@tlabelstop  >\@graphtop  \mfpiclly
      \mfp@adjustdim\@tlabelsbot  <\@graphbot  \mfpiclly
      \ifmfpicdraft\else
        \setbox\@wholegraph
          \vtop{\offinterlineskip
            \box\@backtext\kern-\ht\@wholegraph
            \unvbox\@wholegraph\box\@alltlabels}%
      \fi
    \fi
    \ifmfpicdebug
      \wlog{Mfpic debug: Dimensions of alltlabels after %
        truebbox adjustments:}%
      \wlog{Mfpic: tlabelsleft  = \the\@tlabelsleft}%
      \wlog{Mfpic: tlabelstop   = \the\@tlabelstop}%
      \wlog{Mfpic: tlabelsbot   = \the\@tlabelsbot}%
      \wlog{}%
    \fi
    \mfp@scratch\@graphtop
    \advance\mfp@scratch by -\@graphbot
    \global \setbox\@wholegraph
    \vbox to \mfp@scratch{\vss
      \hbox{\kern-\@graphleft\box\@wholegraph}%
      \kern-\@graphbot}% End vbox.
    \ifmfpicdebug
      \wlog{Mfpic debug: Dimensions of wholegraph after %
        labels are added:}%
      \wlog{Mfpic: graphleft  = \the\@graphleft}%
      \wlog{Mfpic: graphright = \the\@graphright}%
      \wlog{Mfpic: graphtop   = \the\@graphtop}%
      \wlog{Mfpic: graphbot   = \the\@graphbot}%
      \wlog{Mfpic: graphwd    = \the\wd\@wholegraph}%
      \wlog{Mfpic: graphht    = \the\ht\@wholegraph}%
      \wlog{Mfpic: graphdp    = \the\dp\@wholegraph}%
      \wlog{}%
    \fi
    \mfp@docaption
    \ifmfpicdebug
      \wlog{Mfpic debug: Values after tcaption added:}%
      \wlog{Mfpic: graphleft  = \the\@graphleft}%
      \wlog{Mfpic: graphright = \the\@graphright}%
      \wlog{Mfpic: graphtop   = \the\@graphtop}%
      \wlog{Mfpic: graphbot   = \the\@graphbot}%
      \wlog{Mfpic: graphwd    = \the\wd\@wholegraph}%
      \wlog{Mfpic: graphht    = \the\ht\@wholegraph}%
      \wlog{Mfpic: graphdp    = \the\dp\@wholegraph}%
      \wlog{}%
    \fi
    \global\mfpicheight\ht\@wholegraph
    \global\mfpicwidth\wd\@wholegraph
    \ifmfpicdraft
      \setbox\@wholegraph
      \hbox{\@mfpframed{-\mfpframethickness}{\box\@wholegraph}}%
    \fi
    \global\setbox\@wholegraph\box\@wholegraph
    \global \advance\mfp@count1
  \fi % \ifmfp@noship
  \endgroup % Begun near start of \@mfpic
  \ifmfp@noship \else
    \mfp@ifdefined\s@vemfpic
      {\global\setbox\s@vemfpic\box\@wholegraph}%
      {\leavevmode\box\@wholegraph}%
    \global\let\s@vemfpic\UndEfInEd
  \fi
  \restore@mfpicdimens
  \mfp@checklatexenv{mfpic}{\@ignoretrue}{}%
  \global\let\in@mfpicenv\iffalse
  \ignorespaces
}% endmfpic
\ifmfp@latex
  \newdef\mfp@checklatexenv#1#2#3{%
    \def\mfp@tempa{#1}\ifx\mfp@tempa\@currenvir #2\else #3\fi}%
\else
  \newdef\mfp@checklatexenv#1#2#3{#3}%
\fi
\ifmfp@latex
  \newlet\newsavepic\newsavebox
\else
  \newdef\newsavepic#1{%
    \mfp@ifdefined{#1}%
     {\mfp@errmsg{Command \string #1 already defined}%
       {You have used \newsavepic with an already defined or an^^J%
        improper control sequence. Replace #1 with another name.^^J%
        If you proceed, \newsavepic will be ignored.}}%
     {\@nameuse{newbox}#1}}%
\fi
\newlet\newpic\newsavepic
\newdef\savepic#1{\relax
   \mfp@ifdefined{#1}{\gdef\s@vemfpic{#1}}%
   {\mfp@errmsg{Box \string#1 undefined}%
    {You tried to save a picture in a box which had not been^^J%
     previously allocated. Use \newsavepic to allocate a box.}}}%
\newdef\usepic#1{\leavevmode \copy#1\relax}%
\newdef\mfpframed{\mfp@defaultopt\@mfpframed\mfpframesep}%
\newdef\mfpframe{\mfp@defaultopt\@mfpframe\mfpframesep}%
\newdef\@mfpframed#1#2{\@mfpframe{#1}#2\endmfpframe}%
\newdef\@mfpframe#1{%
  \leavevmode\hbox\bgroup
    \mfpframesep#1\relax
    \vrule width\mfpframethickness
    \vtop\bgroup
      \vbox\bgroup
        \hrule height\mfpframethickness
        \kern\mfpframesep
        \hbox\bgroup \kern\mfpframesep \ignorespaces}%
\newdef\endmfpframe{\unskip
          \kern\mfpframesep
        \egroup % end hbox
      \egroup % end vbox
      \kern\mfpframesep
      \hrule height\mfpframethickness
    \egroup % end vtop
    \vrule width\mfpframethickness
  \egroup}% end hbox
\mfp@ifdefined\framed{}{\let\framed\mfpframed}%
\def\mfpverbtex{\futurelet\mfp@next\@mfpverbtex}%
\def\@mfpverbtex{%
  \begingroup
    \@makeother\#\@makeother\%\mfp@keeplines
    \afterassignment\mfp@writetex\global\mfp@toks}%
\newif\ifmfp@verbtex
\def\mfp@writetex{%
  \mfp@ifopengraphsfile
   {\mfp@ifmpost
      {\mfcmd{verbatimtex\@nl\the\mfp@toks\@nl\mfp@p\@nl etex}}%
      {\mfp@noMP@error\mfpverbtex}%
    \global\mfp@verbtexfalse\global\mfp@verbtex{}}%
   {\edef\mfp@tempa{\the\mfp@verbtex\the\mfp@toks}%
    \global\mfp@verbtex\@xp{\mfp@tempa}%
    \global\mfp@verbtextrue}%
  \endgroup
}%
\mfpicnumber{1}%
\mfp@ifdefined\mfpdraftfont{}{\newdef\mfpdraftfont{\tt}}%
\mfp@DBlog{Punctuation, etc., will revert to old catcodes now.}%
\let\+\mfpsaveplus
\mfp@restoreALL%
\InputIfFileExists{mfpic.usr}{}{}%
\endinput
%%
%% End of file `mfpic.tex'.
