%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
% This is file 'xwatermark.sty', version 1.5.2d, October 23, 2012.           %
%                                                                            %
% This package puts user-specified watermarks (graphics and arbitrary        %
% texts) on select pages of documents. See package documentation             %
% for further details.                                                       %
%                                                                            %
% This work (ie, all the files in the xwatermark manifest) may be            %
% distributed and/or modified under the conditions of the LaTeX              %
% Project Public License, either version 1.3 of this license or any          %
% later version. The latest version of this license is in                    %
% http://www.latex-project.org/lppl.txt and version 1.3 or later             %
% is part of all distributions of LaTeX version 2005/12/01 or later.         %
%                                                                            %
% The LPPL maintenance status of this software is 'author-maintained'.       %
%                                                                            %
% This software is provided 'as it is', without warranty of any kind,        %
% either expressed or implied, including, but not limited to, the            %
% implied warranties of merchantability and fitness for a particular         %
% purpose.                                                                   %
%                                                                            %
% Copyright (c) 2009-2012 Ahmed Musa (amusa22@gmail.com).                    %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%

\@ifpackageloaded{catoptions}{%
  \@ifpackagelater{catoptions}{2012/10/14}{}{%
    \@latex@error{Loaded version of 'catoptions' package is
      not current}\@ehd
  }%
}{%
  \RequirePackage{catoptions}[2012/10/14]%
}
\UseNormalCatcodes
\StyleFilePurpose{A dynamic watermarking scheme}
\StyleFileRCSInfo
$Id: xwatermark.sty,v 1.5.2d 2012/10/23 09:00:00 Ahmed Musa Exp $
\ProvidesPackage{xwatermark}[\StyleFileInfo]
\NeedsTeXFormat{LaTeX2e}[2011/06/27]
\SetStyleFileMessages[xwm@]{info}{warn}{err}
\robust@def*\xwm@@err#1#2#3{\xwm@err{#1}{#2}\@gobble}
\cptloadpackages{%
  fix-cm||2006/03/24;
  picture||2008/11/26;
  graphicx||1999/02/16;
  atbegshi||2008/07/31;
  fancyhdr;
  atveryend||2010/03/24;
  ltxkeys;
  framed||2007/10/04
}
\AtEndOfPackage{\BeforeStartOfDocument{%
  \ifcsndefTF{ver@hyperref.sty}{}{\usepackage{hyperref}}%
}}

\newletcs\xwm@nil\relax
\new@def*\xwm@nnil{\xwm@nil}
\AtBeginShipoutInit
\cptnewvariables{box}[xwm@box]{a,b}\relax
\cptnewvariables{count}[xwm@]{cnta}[\z@pt]
\cptnewvariables{if}[xwm@]{pdf,swa,swb,foregrd,wall,putmark}[false]
\newletcs\xwm@catch@nil\relax
\new@def*\xwm@catchtonil#1\xwm@catch@nil{\def\stuff{#1}}
\xwm@putmarktrue
\cptnewvariables{write}[xwm@]{wrt}\relax
\robust@def*\AtShipoutAlwaysUpperLeft#1{%
  \AtBeginShipout{\AtBeginShipoutUpperLeft{#1}}%
}
\robust@def*\xwm@secstopagerange#1{%
  % To do: what of if a chapter, instead of another section,
  % comes after section.
  \begingroup
  \ifblankTF{#1}{}{%
    \def\@do##1##2,##3\@nil##4{%
      \ifstrcmpTF\do{##1}{}{%
        \csn@xdef{xwm@sec@page@end@\detokenize{##4}}{##2}%
        \do{##1}{##2},##3\@nil
      }%
    }%
    \def\do##1##2,##3\@nil{%
      \ifstrcmpTF\do{##1}{}{%
        \csn@xdef{xwm@sec@page@start@\detokenize{##1}}{##2}%
        \@do##3\@nil{##1}%
      }%
    }%
    \do#1,\do\do,\@nil
  }%
  \endgroup
}
\new@def*\xwm@seclist{}
\AtEndDocument{%
  \immediate\write\@auxout{%
    \string\xwm@secstopagerange{%
      \xwm@seclist\ifx\xwm@seclist\@empty\else,\fi
      {10000}{\lastdocpage}%
    }%
  }%
}
\robust@def*\xwm@recordsecno{%
  \xdef\xwm@seclist{%
    \xwm@seclist\ifx\xwm@seclist\@empty\else,\fi
    {\thesection}{\thepage}%
  }%
}
\edef\reserved@a{%
  % To do: do the same for chapter.
  \def\noexpand\@seccntformat##1{%
    \unexpanded\expandafter{\@seccntformat{#1}}%
    \unexpanded{\protect\xwm@recordsecno}%
  }%
}
\reserved@a
\new@def*\xwm@boxframestack{}
\robust@def*\xwm@pushboxframe{%
  \xdef\xwm@boxframestack{%
    \fboxrule=\the\fboxrule\relax
    \fboxsep=\the\fboxsep\relax
    \xwm@nil{\expandcsonce\xwm@boxframestack}%
  }%
}
\robust@def*\xwm@popboxframe{%
  \begingroup
  \def\reserved@a##1\xwm@nil{\endgroup
    ##1\gdef\xwm@boxframestack
  }%
  \expandafter\reserved@a\xwm@boxframestack
}
\robust@def\xwm@stripallouterbraces#1#2{%
  \edef#2{\unexpanded\cptthreexp{\xwm@str@pallouterbraces#1\strip@nil}}%
}
\robust@def\xwm@str@pallouterbraces#1\strip@nil{%
  \romannumeral\ifbracedTF{#1}{%
    \expandafter\ifnullTF\expandafter{\@gobble#1}{%
      \expandafter\@gobble\xwm@str@pallouterbraces#1\strip@nil
    }{0 #1}%
  }{0 #1}%
}
\robust@def\xwm@stripallouterbracesincs#1{%
  \expandafter\xwm@stripallouterbraces\expandafter{#1}#1%
}
\new@def*\xwmremoveleadparsers#1#2{%
  \s@expandarg\ifbracedTF{#2}{%
    \unexpanded\expandafter{#2}%
  }{%
    \unexpanded\expandafter{\romannumeral
      \expandafter\xwm@removeleadparsers#2\noboundary{#1}}%
  }%
}
\new@def*\xwm@removeleadparsers#1#2\noboundary#3{%
  \ifcondTF\if\string#1\string#3\fi{%
    \xwm@removeleadparsers#2\noboundary{#3}%
  }{%
    0 #1#2%
  }%
}
\robust@def*\xwm@ifxcolorloaded{%
  \ifcsndefTF{ver@xcolor.sty}\@iden{%
    \xwm@err{'xcolor' package not loaded}\@ehd
  }%
}
\robust@def*\xwmdefinecolor{%
  \xwm@ifxcolorloaded{%
    \let\reserved@e\definecolor
    \cpt@testopt\xwm@definecolor{}%
  }%
}
\robust@def*\xwmcolorlet{%
  \xwm@ifxcolorloaded{%
    \let\reserved@e\colorlet
    \cpt@testopt\xwm@definecolor{}%
  }%
}
\robust@def*\xwm@definecolor[#1]#2{%
  \@ifundefinedcolor{#2}{%
    \reserved@e[#1]{#2}%
  }{%
    \xwm@err{Color name '#2' already defined}\@ehd
  }%
}
\robust@def*\xwmdefinecolorset{\cpt@testopt\xwm@definecolorset{x}}
\robust@def*\xwm@definecolorset[#1]{%
  \cpt@testpnopt{\xwm@d@finecolorset{#1}}{1}%
}
\robust@def*\xwm@d@finecolorset#1(#2)#3{%
  \xwm@ifxcolorloaded{%
    \begingroup
    \cptemptifycsset{\xwm@tempb,\xwm@tempc,\xwm@tempd,\xwm@tempe}%
    \def\xwm@tempa##1,##2,##3,##4,##5\@nil{%
      \ifblankTF{##4}{%
        \xwm@err{Incomplete color format in
          \string\xwmdefinecolorset}\@ehd
      }{%
        \def\xwm@tempf{##1}%
      }%
    }%
    \cpt@stfalse\cpt@csvnormalize[;]{#3}%
    \def\do##1;{%
      \ifnot@nil{##1}{%
        \xwm@tempa##1,,,,\@nil
        \xifinsetTF{,\xwm@tempf,}{,\xwm@tempd,}{%
          \edef\xwm@tempe{\csliststack,\xwm@tempe\xwm@tempf}%
        }{%
          \edef\xwm@tempd{\csliststack,\xwm@tempd\xwm@tempf}%
          \@ifundefinedcolor{#1\xwm@tempf#2}{%
            \edef\xwm@tempb{\csliststack;\xwm@tempb##1}%
          }{%
            \edef\xwm@tempc{\csliststack;\xwm@tempc#1\xwm@tempf#2}%
          }%
        }%
        \do
      }%
    }%
    \expandafter\do\normalized@list;\@nil;%
    \ifcsemptyTF\xwm@tempe{}{%
      \xwm@err{Color names '\expandcsonce\xwm@tempe' multiply
        \MsgBrk submitted to \string\xwmdefinecolorset}\@ehd
    }%
    \ifcsemptyTF\xwm@tempc{}{%
      \xwm@err{Color names '\expandcsonce\xwm@tempc' already in use}\@ehd
    }%
    \ifcsemptyTF\xwm@tempb{}{%
      \cptexpandarg{\xglobal\definecolorset{rgb}{#1}{#2}}
        {\expandcsonce\xwm@tempb}%
    }%
    \endgroup
  }%
}
\DefSuffixChecker\xwm@suffixcheck{*}{+}{'}
\robust@def*\xwmifitemsinTF{%
  \begingroup\xwm@swatrue\cpt@testopt\xwm@itemsin\@ne
}
\robust@def*\xxwmifitemsinTF{%
  \begingroup\xwm@swatrue\cpt@testopt\xwm@xitemsin\@ne
}
\robust@def*\xwmifitemsinFT{%
  \begingroup\xwm@swafalse\cpt@testopt\xwm@itemsin\@ne
}
\robust@def\xwm@xitemsin[#1]#2#3{%
  \cptexpandtwoargs{\xwm@itemsin[#1]}{#2}{#3}%
}
\robust@def\xwm@itemsin[#1]#2#3{%
  \begingroup
  \afterassignment\xwm@catchtonil\@tempcnta=#1\xwm@catch@nil
  \if\relax\cptoxdetok\stuff\relax
    \ifnum\numexpr#1<\@ne
      \xwm@err{Invalid number '\the#1'\relax
        \MsgBrk for command \string\xwmifitemsinTF}\@ehd
    \fi
  \else
    \xwm@err{Token '\detokenize{#1}' not an integer}\@ehd
  \fi
  \endgroup
  \lowercase{%
    \edef\xwm@tempa{\unexpanded{#2}}%
    \edef\xwm@tempb{\unexpanded{#3}}%
  }%
  \cpt@sttrue\cpt@csvnormalize[,]\xwm@tempb
  \def\xwm@nritems{0}%
  \def\xwm@items{}%
  \def\csv@do##1{%
    \xifinsetFT{,\detokenize{##1}}{,\cptoxdetok\xwm@tempb}{}{%
      \edef\xwm@items{%
        \expandcsonce\xwm@items\ifx\xwm@items\@empty\else,\fi
        \unexpanded{##1}%
      }%
      \edef\xwm@nritems{\the\numexpr\xwm@nritems+1}%
      \ifnum\xwm@nritems>\numexpr#1-1\relax\loopbreak\fi
    }%
  }%
  \csv@@parse*[,]\xwm@tempa
  \expandafter\endgroup
  \csname
    @\ifnum\xwm@nritems>\numexpr#1-1\relax
      \ifxwm@swa first\else second\fi
    \else
      \ifxwm@swa second\else first\fi
    \fi
  oftwo\endcsname
}
\robust@def*\xwm@hyphenpagerange#1#2#3{%
  \xifinsetTF{\detokenize{\xwmgetpagenumber}}{\cptoxdetok{#1}}{%
    \xwm@swbtrue
  }{%
    \xifinsetTF{\detokenize{\lastdocpage}}{\cptoxdetok{#1}}{%
      \xwm@swbtrue
    }{%
      \xwm@swbfalse
    }%
  }%
  \protected@edef#2{#1}\def#3{}%
  \begingroup
  \catcode`\-=12\relax
  \cptscantokens#2%
  \postgroupdef#2\endgroup
  \oifinsetTF{-}{#2}{%
    \expandafter\xwm@splitpagerange#2\xwm@nil{#2}{#3}%
  }{%
    \ifblankTF{#1}{%
      \xwm@err{Empty page range for watermark:
        ^^J||\expandcsonce\xwm@currwatermark||.^^J}\@ehd
    }{%
      \protected@edef#3{#1}%
    }%
  }%
}
\robust@def*\xwm@splitpagerange#1-#2\xwm@nil#3#4{%
  \def#3{#1}\def#4{#2}%
  \ifinsetTF{-}{#2}{%
    \xwm@err{Too many hyphens in page range '#1-#2'
      \MsgBrk of watermark:^^J||\expandcsonce\xwm@currwatermark||}\@ehd
  }{%
    \ifblankTF{#1}{%
      \xwm@warn{No start-page in page-range of watermark:
        ^^J||\expandcsonce\xwm@currwatermark||.^^JI have used the
        default start-page '\xwm@defaultfirstpage'
        instead}%
      \def#3{\xwm@defaultfirstpage}%
      \xwm@swafalse
    }{%
      \xwm@swatrue
    }%
    \ifblankTF{#2}{%
      \xwm@warn{No end-page for page-range
        of watermark:^^J||\expandcsonce\xwm@currwatermark||
        ^^JI have used the default end-page
        '\xwm@defaultlastpage' instead}%
      \def#4{\xwm@defaultlastpage}%
      \xwm@swafalse
    }{%
      \xwm@swatrue
    }%
    \ifxwm@swa
      \ifnum\numexpr#1=\numexpr#2\relax\else
        \ifnum\numexpr#1<\numexpr#2\relax\else
          \ifxwm@swb\else
            \xwm@err{Watermark start-page '#1' is greater
              than end-page '#2'}\@ehd
          \fi
        \fi
      \fi
    \fi
  }%
}
\let\xwm@papercenter\relax
\ifdefTF\pdfoutput{%
  \ifnum\pdfoutput<\@ne\xwm@pdffalse\else\xwm@pdftrue\fi
}{%
  \xwm@pdffalse
}
\new@def*\xwm@allowedcoordunits{%
  em,ex,in,pt,pc,cm,mm,dd,cc,nd,nc,bp,sp,\paperwidth,%
  \paperheight,\textwidth,\textheight,\hsize,\vsize,%
  \columnwidth,\linewidth
}
\robust@def*\xwm@checkcoordunit#1{%
  \oifinset@sp@TF,{#1}{\xwm@allowedcoordunits}{}{%
    \xwm@err{Invalid coordinate unit '#1'}{%
      Allowed coordinate units are:
      ^^J||\xwm@allowedcoordunits||^^J}%
  }%
}
\robust@def*\xwm@defaultunits#1#2{%
  \begingroup
  \@defaultunits\@tempdima\dimexpr#1\p@\relax\@nnil
  \edefpass#2{\endgroup\def\noexpand#2{\the\@tempdima}}%
}
\robust@def*\xwm@getposition#1#2#3{%
  \begingroup
  \@defaultunits\@tempdima\dimexpr#1#3\p@\relax\@nnil
  \edef\xwm@tempa{\the\dimexpr0.5\paperwidth+\@tempdima\relax}%
  \@defaultunits\@tempdima\dimexpr#2#3\p@\relax\@nnil
  \edef\xwm@tempb{\the\dimexpr-0.5\paperheight+\@tempdima\relax}%
  \cptexpanded{\endgroup
    \csn@def{\cptremovescape#1@a}{\xwm@tempa}%
    \csn@def{\cptremovescape#2@a}{\xwm@tempb}%
  }%
}
\cptrobustify{%
  \fbox,\framebox,\makebox,\rotatebox,\scalebox,\raisebox
}
\new@def*\xwm@relax{\relax}
\robust@def*\xwm@settextalign#1{%
  \ifmacroTF{#1}{}{\cpt@notcserr{#1}}%
  \begingroup
  \cptexpandmacro{#1}\xwm@tempa
  \cptexpandargonce{\endgroup\xwm@stripallouterbraces}\xwm@tempa#1%
  \ltxkeys@trimspacesincs{#1}%
  \cptexpandsecond{\def\reserved@a##1}{#1}##2##3\xwm@nil{%
    \def\reserved@a{##2}%
    \ifxTF\reserved@a\xwm@nnil{%
      \cpt@err{Invalid value '#1' for textalign}\@ehd
      \def#1{xwm@relax}%
    }{%
      \def#1{##2}%
    }%
  }%
  \cptexpandsecond{\reserved@a
    center{center},\centering{center},right{flushright},
    \flushright{flushright},\raggedleft{flushright},
    left{flushleft},\flushleft{flushleft},\raggedright{flushleft},
    justified{xwm@relax},\relax{xwm@relax},xwm@relax{xwm@relax}%
  }{#1}{\xwm@nil}\xwm@nil
}
\robust@def*\xwm@getalign#1{%
  \ifmacroTF{#1}{%
    \csn@edef{xwm@\expandafter\@gobblethree\string#1}{%
      \xifstrcmpTF{#1}{\relax}{relax}{#1}%
    }%
  }{%
    \cpt@notcserr{#1}%
  }%
}
% 'boxalign' may be in the format 't-l, t-r, b-l, b-r, c, s'
% or 'top-left, top-right, etc':
\robust@def*\xwm@setboxalign#1{%
  \ifmacroTF{#1}{}{\cpt@notcserr{#1}}%
  \begingroup
  \toks@{}%
  \cptexpandarg\lowercase{\def\noexpand\reserved@a{#1}}%
  % We don't want the format 't-l' mixed with 'top-left':
  \def\xwm@tempa{}\def\xwm@tempb{}%
  \def\xwm@resa##1-{%
    \ifstrcmpTF{##1}{\xwm@nil}{}{%
      \ifinsetTF{,##1,}{,top,left,right,bottom,center,justified,}{%
        \edef\xwm@tempa{\csliststack,\xwm@tempa##1}%
      }{%
        \ifinsetTF{,##1,}{,l,r,b,t,c,s,}{%
          \edef\xwm@tempb{\xwm@tempb##1}%
        }{%
          \toks@\expandafter{\the\toks@##1}%
        }%
      }%
      \xwm@resa
    }%
  }%
  \expandafter\xwm@resa\reserved@a-\xwm@nil-%
  \s@expandarg\ifnullTF{\the\toks@}{}{%
    \xwm@err{'boxalign' has invalid or inconsistent
      \MsgBrk values '#1'}\@ehd
  }%
  \ifcsnullTF\xwm@tempa{}{%
    \ifcsnullTF\xwm@tempb{}{%
      \xwm@err{Invalid values '#1' for 'boxalign':
        \MsgBrk possibly a mixture of styles}\@ehd
    }%
  }%
  \def\xwm@tempc{}%
  \ifcsnullTF\xwm@tempa{}{%
    \def\xwm@resa##1##2##3\xwm@nil##4{%
      \ifblankTF{##3}{}{%
        \ifinsetFT{,##1,}{,##4,}{}{%
          \xifinsetTF{##2}{\xwm@tempc}{}{%
            \edef\xwm@tempc{\xwm@tempc##2}%
          }%
        }%
        \xwm@resa##3\xwm@nil{##4}%
      }%
    }%
    \cptexpandarg
      {\xwm@resa{center}{c}{justified}{s}{left}{l}{right}{r}%
      {top}{t}{bottom}{b}\xwm@mil\xwm@mil\xwm@nil}\xwm@tempa
  }%
  \ifcsnullTF\xwm@tempb{}{%
    \def\siso@do##1{%
      \ifinsetFT{,##1,}{,l,r,b,t,c,s,}{}{%
        \xifinsetTF{##1}{\xwm@tempc}{}{%
          \edef\xwm@tempc{\xwm@tempc##1}%
        }%
      }%
    }%
    \simpleexpandarg\siso@@loop\xwm@tempb
  }%
  \ifcsnullTF\xwm@tempc{%
    \xifblankTF{#1}{%
      \def\xwm@tempc{s}%
    }{%
      \xwm@err{Invalid entries '#1' for 'boxalign'}\@ehd
    }%
  }{%
    \begingroup
    \cpt@cnta\z@pt
    \def\siso@do##1{\advance\cpt@cnta\@ne}%
    \s@expandarg\siso@@loop\xwm@tempc
    \ifnum\cpt@cnta>2\relax
      \xwm@err{More than two entries '#1' for 'boxalign'}\@ehd
    \fi
    \endgroup
  }%
  \let#1=\xwm@tempc
  \postgroupdef#1\endgroup
}
\robust@def*\xwm@notenddocerr{%
  \xwm@err{Wrong location of end-of-document command}\@ehd
}
\robust@def*\AfterEndOfDocument{\grightaddtocs\xwm@afterenddoc}
\new@def*\xwm@afterenddoc{}
\robust@def*\AfterLastPageOfDocument{%
  \grightaddtocs\xwm@afterlastpage
}
\new@def*\xwm@afterlastpage{}
\AtEndDocument{%
  \let\xwm@aft@renddoc\AtVeryEnd@AtVeryEndDocumentHook
  \def\AtVeryEnd@AtVeryEndDocumentHook{%
    \let\AfterEndOfDocument\@firstofone
    \xwm@afterenddoc\xwm@aft@renddoc
    \let\AfterEndOfDocument\xwm@notenddocerr
    \undefcs\xwm@afterenddoc
    \undefcs\xwm@aft@renddoc
  }%
  \let\xwm@afterl@stpage\AtVeryEnd@AfterLastShipoutHook
  \def\AtVeryEnd@AfterLastShipoutHook{%
    \let\AfterLastPageOfDocument\@firstofone
    \xwm@afterlastpage\xwm@afterl@stpage
    \let\AfterLastPageOfDocument\xwm@notenddocerr
    \undefcs\xwm@afterlastpage
    \undefcs\xwm@afterl@stpage
  }%
}
\robust@def*\xwmnewlabel{\xwm@newlabel{xwmr}}
\robust@def*\xwm@newlabel#1#2#3{%
  \begingroup
  \ifcsndefFT{#1@#2}{}{%
    \gdef\xwm@multiplelabels{%
      \ltxmsg@warn{There were multiply-defined labels}%
    }%
    \ltxmsg@warn{Label '#2' multiply defined}%
  }%
  \csn@gdef{#1@#2}{#3}%
  \endgroup
}
\let\xwm@multiplelabels\relax
\BeforeStartOfDocument{%
  \global\let\xwm@multiplelabels\relax
}
\robust@def*\xwm@lbtestdef#1#2#3{%
  \begingroup
  \def\xwm@tempa{#3}%
  \expandafter\ifx\csname#1@#2\endcsname\xwm@tempa\else
    \gdef\xwm@lbtestsw{00}\fi
  \endgroup
}
\begingroup
\makeatletter
\InputIfFileExists{\jobname.xwm}{}{}
\endgroup
\if@filesw
  \immediate\openout\xwm@wrt=\jobname.xwm
  \immediate\write\xwm@wrt{\relax}
\fi
\AfterLastPageOfDocument{%
  \if@filesw
    \begingroup
    \advance\c@page\m@one
    \xwmlabel{xwmlastpage}%
    \endgroup
  \fi
  \immediate\closeout\xwm@wrt
  \let\xwm@newlabel\xwm@lbtestdef
  \gdef\xwm@lbtestsw{01}%
  \begingroup
  \makeatletter
  \InputIfFileExists{\jobname.xwm}{}{}%
  \endgroup
  \if@filesw
    \ifx\xwm@multiplelabels\relax
      \if\xwm@lbtestsw
        \ltxmsg@warn{Label(s) may have changed.
          Rerun to get cross-references right}%
      \fi
    \else
      \xwm@multiplelabels
    \fi
  \fi
}
\new@def*\xwm@labelcarr#1#2#3\xwm@nil{\ifblankTF{#3}{}{#2}}
\new@def*\xwmgetpagenumber#1{%
  \ifcsndefTF{xwmr@#1}{%
    \cptsevenxp\xwm@labelcarr
      \usename{xwmr@#1}\xwm@defaultfirstpage\xwm@nil
  }{%
    \xwm@defaultfirstpage
  }%
}
\new@def*\lastdocpage{\xwmgetpagenumber{xwmlastpage}}
\robust@def*\xwmlabel#1{%
  \@bsphack
  \begingroup
  \@onelevel@sanitize\@currentlabelname
  \edef\@currentlabelname{%
    \expandafter\strip@period\@currentlabelname\relax.\relax\@@@
  }%
  \immediate\write\@auxout{%
    \string\newlabel{#1}{{\@currentlabel}{\thepage}%
    {\@currentlabelname}{\@currentHref}{}}%
  }%
  \immediate\write\xwm@wrt{%
    \string\xwmnewlabel{#1}{{\@currentlabel}{\thepage}%
    {\@currentlabelname}{\@currentHref}{}}%
  }%
  \endgroup
  \@esphack
}
\robust@def*\DeclareWatermarkParser#1{%
  \begingroup
  \xwm@stripallouterbraces{#1}\xwm@tempa
  \xdef\xwm@watermarkparser{\cptoxdetok\xwm@tempa}%
  \endgroup
}
\DeclareWatermarkParser{;}
\robust@def*\xwm@put{\leavevmode\put}
\new@edef*\xwm@defaultfileext{\ifxwm@pdf pdf\else eps\fi}
\new@def*\xwm@picfilesread{}
\robust@def*\xwm@fileextfn#1#2{%
  \ifcsndefFT{#2picfile}{}{%
    \def\xwm@tempb##1##2{%
      \xwm@warn{Default file extension '##1'\MsgBrk
        substituted for invalid '#1' in\MsgBrk
        ##2 mode. I'll later confirm the\MsgBrk
        existence of \usename{#2picfile}.##1%
      }%
    }%
    \ifcsnnullTF{#2picfile}{%
      \csn@edef{#2picfileext}{}%
    }{%
      \xifinsetTF{,\usename{#2picfile},}{,\xwm@picfilesread,}{%
        \xwm@swbfalse
      }{%
        \xwm@swbtrue
        \cptgxaddtolist*\xwm@picfilesread{\usename{#2picfile}}%
      }%
      \aftercsname\xwm@stripallouterbracesincs{#2picfileext}%
      \ifdefboolTF{xwm@pdf}{%
        \xifinsetTF{,\usename{#2picfileext},}{,pdf,png,jpeg,jpg,mps,}{}{%
          \csn@def{#2picfileext}{pdf}%
          \ifxwm@swb\xwm@tempb{pdf}{pdf}\fi
        }%
      }{%
        \xifinsetTF{,\usename{#2picfileext},}{,eps,ps,}{}{%
          \csn@def{#2picfileext}{eps}%
          \ifxwm@swb\xwm@tempb{eps}{dvi}\fi
        }%
      }%
    }%
  }%
}
\ltxkeys@boolkey[XWM]{main}[xwm@]{disablegeometry}[true]{%
  \BeforeStartOfDocument{%
    \ifxwm@disablegeometry
      \ifdefFT\geometry{}{%
        \geometry{pass}%
        \xwm@info{On your request (ie, 'disablegeometry=true')
          \MsgBrk I have disabled the features of the
          \MsgBrk 'geometry' package}%
      }%
    \fi
  }%
}
\new@def*\xwm@gr@phicsoptions{}
\robust@def*\GraphicsOptions#1{\gdef\xwm@gr@phicsoptions{#1}}
\ltxkeys@definekeys*[XWM]{main}[xwm@]{%
  disable-geometry=true/\setaliaskey{disablegeometry};
  printwatermark=true;
  print-watermark=true/\setaliaskey{printwatermark};
  allownesting=true;
  showpagecenter=true/\ifdefboolTF{xwm@showpagecenter}
    {\wmk@showpagecentertrue\wlp@showpagecentertrue}{};
  show-page-center=true/\setaliaskey{showpagecenter};
  showpapercenter=true/\setaliaskey{showpagecenter};
  usedummymarks=true;
  use-dummy-marks=true/\setaliaskey{usedummymarks};
  defaultfirstpage=1;
  default-first-page=1/\setaliaskey{defaultfirstpage};
  defaultlastpage=\xwmgetpagenumber{xwmlastpage};
  default-last-page=\xwmgetpagenumber{xwmlastpage}/
    \setaliaskey{defaultlastpage};
  frontpagestyle=empty;
  front-page-style=empty/\setaliaskey{frontpagestyle};
  watermarkparser={;}/\DeclareWatermarkParser{#1};
  watermark-parser={;}/\setaliaskey{watermarkparser};
  resetpaperorigin=true/\ifxwm@resetpaperorigin\pdfhorigin\z@pt
    \pdfvorigin\z@pt\hoffset\z@pt\voffset\z@pt\fi;
  reset-paper-origin=true/\setaliaskey{resetpaperorigin};
}
\ltxkeys@biboolkeys+[XWM]{main}[xwm@]{draft,final}[true]
  {}{}{\ltxkeys@keyvalerr}
\ltxkeys@makeoptionkeys[XWM]{main}
\BeforeStartOfDocument{%
  \ifxwm@printwatermark
    \cptreplaceoneelement\XWM@main@initialkeyvals
      {printwatermark=false}{printwatermark=true}%
  \fi
}
\robust@def*\xwm@defcommonkeys#1{%
  \begingroup
  \endlinechar\m@one
  \expandafter\endgroup\xwm@defc@mmonkeys{#1}%
}
\robust@def*\xwm@defc@mmonkeys#1#2{%
  \csn@def{#1@commonkeys}##1{#2}%
  \AtEndOfPackage{\letcsntocs{#1@commonkeys}\relax}%
}
\xwm@defcommonkeys{xwm-1}{%
  minmark=true;
  onepageonly=true;
  prange=true;
  tmark=true;
  pmark=true;
  graphicsoptions={}/
    \ifbracedTF{##1}{%
      \aftercsname{\xwm@stripallouterbraces{##1}}{#1graphicsoptions}
    }{%
      \cpt@err{Values of key 'graphicsoptions' not braced}\@ehd
    };
  GraphicsOptions=/
    \ifdocstartedTF{%
      \xwm@err{\noexpand\GraphicsOptions
        is a command, not a key.\MsgBrk
        Maybe you meant 'graphicsoptions'}\@ehd
    }{};
  picontoptext=true;
  picture-on-top-text=true/\setaliaskey{picontoptext};
  pic-on-top-text=true/\setaliaskey{picontoptext};
  textontoppic=true/\setaliaskey{picontoptext}[false];
  text-on-top-picture=true/\setaliaskey{picontoptext}[false];
  text-on-top-pic=true/\setaliaskey{picontoptext}[false];
  draftboxcolor=blue;
  draft-box-color=blue/\setaliaskey{draftboxcolor};
  textcolor=gray!25;
  text-color=gray!25/\setaliaskey{textcolor};
  color=gray!25/\setaliaskey{textcolor};
  textangle=0;
  text-angle=0/\setaliaskey{textangle};
  angle=0/\setaliaskey{textangle};
  textscale=1;
  text-scale=1/\setaliaskey{textscale};
  scale=1/\setaliaskey{textscale};
  textalign=center/\aftercsname\xwm@settextalign{#1textalign};
  text-align=center/\setaliaskey{textalign};
  align=center/\setaliaskey{textalign};
  showpagecenter=true/\ifdefboolTF{#1showpagecenter}{%
    \usename{#1showpagecentertrue}}{\usename{#1showpagecenterfalse}};
  show-page-center=true/\setaliaskey{showpagecenter};
  showpapercenter=true/\setaliaskey{showpagecenter};
  fontsize=1cm/\aftercsname{\xwm@defaultunits{##1}}{#1fontsize};
  fontseries=b;
  fontfamily=bch;
  \needvalue{picfile}=/\aftercsname\xwm@stripallouterbracesincs{#1picfile}
    \ifcsnnullTF{#1picfile}{\usename{#1pmarkfalse}}{\usename{#1pmarktrue}
    \usename{#1minmarktrue}};
  \needvalue{picture-file}=/\setaliaskey{picfile};
  picfileext=\xwm@defaultfileext/\xwm@fileextfn{##1}{#1};
  pic-file-ext=\xwm@defaultfileext/\setaliaskey{picfileext};
  picangle=0;
  picture-angle=0/\setaliaskey{picangle};
  picscale=1;
  picture-scale=1/\setaliaskey{picscale};
  picbb=0 0 100 100;
  picture-bb=0 0 100 100/\setaliaskey{picbb};
  pic-bounding-box=0 0 100 100/\setaliaskey{picbb};
  picxpos=\z@pt;
  picture-xpos=0/\setaliaskey{picxpos};
  picture-x-position=0/\setaliaskey{picxpos};
  picypos=\z@pt;
  picture-ypos=0/\setaliaskey{picypos};
  picture-y-position=0/\setaliaskey{picypos};
  mark=DRAFT/\setaliaskey{textmark};
  textmark=DRAFT/
    \aftercsname\xwm@stripallouterbracesincs{#1textmark}
    \ifcsnnullTF{#1textmark}{%
      \usename{#1tmarkfalse}
    }{%
      \usename{#1tmarktrue}
    };
  text-mark=DRAFT/\setaliaskey{textmark};
  firstpage=true/\ifdefboolFT{#1firstpage}{}{\usename{#1minmarktrue}};
  first-page=true/\setaliaskey{firstpage};
  allpages=true/\ifdefboolFT{#1allpages}{}{\usename{#1minmarktrue}};
  oddpages=true/\ifdefboolFT{#1oddpages}{}{\usename{#1minmarktrue}};
  evenpages=true/\ifdefboolFT{#1evenpages}{}{\usename{#1minmarktrue}};
  page=1/
    \ifinsetTF{-}{##1}{%
      \xwm@err{I found '-' in '##1' for key 'page',
        \MsgBrk but 'page' doesn't take page-range}\@ehd
    }{%
      \ifnum\numexpr##1=\z@pt\else\usename{#1onepageonlytrue}
      \usename{#1minmarktrue}\fi
    };
  pages=1-1/
    \aftercsname\xwm@stripallouterbracesincs{#1pages}
    \aftercsname\xifstrcmpTF{#1pages}{0-0}{}{%
      \usename{#1prangetrue}\usename{#1minmarktrue}
    }
    \cptexpandsecond\xwm@hyphenpagerange{\cptmakecs{#1pages}
      \cptmakecs{#1pagestart}\cptmakecs{#1pageend}};
  pagex={1}/
    \ifbracedTF{##1}{}{%
      \xwm@err{Value of key 'pagex' must be braced}\@ehd
    };
  boxalign=/\ifblankTF{##1}{}
    {\aftercsname\xwm@setboxalign{#1boxalign}};
  box-align=/\setaliaskey{boxalign};
}
\robust@def*\xwm@adddefkeys{%
  \begingroup
  \endlinechar\m@one
  \cpt@testopt\xwm@addd@fkeys{}%
}
\robust@def\xwm@addd@fkeys[#1]#2#3#4#5{%
  \def\xwm@tempa{\endgroup#4}%
  \expandafter\expandafter\expandafter\xwm@tempa
    \expandafter\expandafter\expandafter
    {\csname#2@commonkeys\endcsname{#3}#1#5}%
}
\xwm@adddefkeys[;]{xwm-1}{wmk@}
  {\ltxkeys@definekeys*[XWM]{watermark}[wmk@]}{%
  textwidth=\paperheight;
  text-width=\paperheight/\setaliaskey{textwidth};
  width=\paperheight/\setaliaskey{textwidth};
  textheight=\paperwidth;
  text-height=\paperwidth/\setaliaskey{textheight};
  height=\paperwidth/\setaliaskey{textheight};
  \needvalue{picheight}=;
  pic-height=/\setaliaskey{picheight};
  picture-height=/\setaliaskey{picheight};
  \needvalue{picwidth}=;
  picture-width=/\setaliaskey{picwidth};
  textxpos=0;
  text-xpos=0/\setaliaskey{textxpos};
  text-x-position=0/\setaliaskey{textxpos};
  xpos=0/\setaliaskey{textxpos};
  textypos=0;
  text-ypos=0/\setaliaskey{textypos};
  text-y-position=0/\setaliaskey{textypos};
  ypos=0/\setaliaskey{textypos};
  coordunit=mm/\xwm@checkcoordunit{#1};
  coord-unit=mm/\setaliaskey{coordunit};
  position-unit=mm/\setaliaskey{coordunit};
}
\ltxkeys@makeoptionkeys*[XWM]{watermark}
\xwm@adddefkeys[;]{xwm-1}{wlp@}
 {\ltxkeys@definekeys*[XWM]{wallpaper}[wlp@]}{%
  textheight=\wlp@tileysize;
  text-height=\wlp@tileysize/\setaliaskey{textheight};
  textwidth=\wlp@tilexsize;
  text-width=\wlp@tilexsize/\setaliaskey{textwidth};
  picheight=\wlp@tileysize;
  picture-height=\wlp@tileysize/\setaliaskey{picheight};
  picwidth=\wlp@tilexsize;
  picture-width=\wlp@tilexsize/\setaliaskey{picwidth};
  tilexsize=.25\paperwidth;
  tile-xsize=.25/\setaliaskey{tilexsize};
  tileysize=.25\paperheight;
  tile-ysize=.25/\setaliaskey{tileysize};
  wpxoffset=\z@pt;
  wallpaper-xoffset=\z@pt/\setaliaskey{wpxoffset};
  wpyoffset=\z@pt;
  wallpaper-yoffset=\z@pt/\setaliaskey{wpyoffset};
  tilexoffset=\z@pt;
  tile-xoffset=\z@pt/\setaliaskey{tilexoffset};
  tileyoffset=\z@pt;
  tile-yoffset=\z@pt/\setaliaskey{tileyoffset};
  tileno=4;
  tilenumber=4/\setaliaskey{tileno};
  tile-number=4/\setaliaskey{tileno};
  number-of-tiles=4/\setaliaskey{tileno};
  squaretiles=true;
  square-tiles=true/\setaliaskey{squaretiles};
}
\ltxkeys@makeoptionkeys*[XWM]{wallpaper}
\ltxkeys@definekeys*[XWM]{fancypagenos}[pgn@]{%
  textalign=center/\xwm@settextalign\pgn@textalign;
  text-align=center/\setaliaskey{textalign};
  align=center/\setaliaskey{textalign};
  boxalign=/\ifblankTF{#1}{}{\xwm@setboxalign\pgn@boxalign};
  box-align=center/\setaliaskey{boxalign};
  textangle=0;
  text-angle=0/\setaliaskey{textangle};
  angle=0/\setaliaskey{textangle};
  picangle=0;
  picture-angle=0/\setaliaskey{picangle};
  textwidth=.25\textwidth;
  text-width=.25/\setaliaskey{textwidth};
  width=.25\hsize/\setaliaskey{textwidth};
  textheight=.25\textheight;
  text-height=.25/\setaliaskey{textheight};
  height=.25\vsize/\setaliaskey{textheight};
  textxpos=\z@pt;
  x-position=0/\setaliaskey{textxpos};
  xposition=0/\setaliaskey{textxpos};
  xpos=\z@pt/\setaliaskey{textxpos};
  textypos=\z@pt;
  y-position=0/\setaliaskey{textypos};
  yposition=0/\setaliaskey{textypos};
  ypos=\z@pt/\setaliaskey{textypos};
  textcolor=blue;
  text-color=blue/\setaliaskey{textcolor};
  color=blue/\setaliaskey{textcolor};
  textscale=2.5;
  text-scale=2.5/\setaliaskey{textscale};
  scale=2.5/\setaliaskey{textscale};
  coordunit=mm/\xwm@checkcoordunit{#1};
  coord-unit=mm/\setaliaskey{coordunit};
  position-unit=mm/\setaliaskey{coordunit};
  fontfamily=bch;
  fontseries=m;
  format=\fbox;
  framerule=.4\p@;
  framesep=3\p@;
  fontsize=12\p@/\xwm@defaultunits{#1}\pgn@fontsize;
  cfoot;
  center-footer=/\setaliaskey{cfoot};
  footer-center=/\setaliaskey{cfoot};
  rfoot;
  right-footer=/\setaliaskey{rfoot};
  footer-right=/\setaliaskey{rfoot};
  lfoot;
  left-footer=/\setaliaskey{lfoot};
  footer-left=/\setaliaskey{lfoot};
  chead;
  center-header=/\setaliaskey{chead};
  header-center=/\setaliaskey{chead};
  rhead;
  right-header=/\setaliaskey{rhead};
  header-right=/\setaliaskey{rhead};
  lhead;
  left-header=/\setaliaskey{lhead};
  header-left=/\setaliaskey{lhead};
  headruleheight=.4\p@;
  headrule-height=.4\p@/\setaliaskey{headruleheight};
  headruledepth=.4\p@;
  headrule-depth=.4\p@/\setaliaskey{headruledepth};
  headrulewidth=\headwidth;
  headrule-width=\headwidth/\setaliaskey{headrulewidth};
  headrulesep=2\p@;
  headrule-sep=2\p@/\setaliaskey{headrulesep};
  headrule-separation=2\p@/\setaliaskey{headrulesep};
  headrulecolor=blue;
  headrule-color=blue/\setaliaskey{headrulecolor};
  footruleheight=.4\p@;
  footrule-height=.4\p@/\setaliaskey{footruleheight};
  footruledepth=.4\p@;
  footrule-depth=.4\p@/\setaliaskey{footruledepth};
  footrulewidth=\headwidth;
  footrule-width=\headwidth/\setaliaskey{footrulewidth};
  footrulesep=2\p@;
  footrule-sep=2\p@/\setaliaskey{footrulesep};
  footrule-separation=2\p@/\setaliaskey{footrulesep};
  footrulecolor=cyan;
  footrule-color=blue/\setaliaskey{footrulecolor};
  hfoffsetleft=.5;
  hfoffset-left=.5/\setaliaskey{hfoffsetleft};
  hfoffsetright=.5;
  hfoffset-right=.5/\setaliaskey{hfoffsetright};
  style=\thepage;
  printstyle=\thepage/\setaliaskey{style};
  sendtoback=true;
}
\ltxkeys@makeoptionkeys*[XWM]{fancypagenos}
\ltxkeys@definekeys*[XWM]{fancypagenos}[pgn@]{%
  showpagenos=true/\ifpgn@showpagenos\global\pgn@showpagenostrue\fi;
  showpagenumbers=true/\setaliaskey{showpagenos};
  show-page-numbers=true/\setaliaskey{showpagenos};
  show-pagenos=true/\setaliaskey{showpagenos};
  show-pageno=true/\setaliaskey{showpagenos};
  showonpageone=true;
  show-on-page-one=true/\setaliaskey{showonpageone};
  showheadrule=true;
  show-headrule=true/\setaliaskey{showheadrule};
  showfootrule=true;
  show-footrule=true/\setaliaskey{showfootrule};
}
\BeforeStartOfDocument{%
  \ifpgn@showpagenos
    \cptreplaceoneelement\XWM@fancypagenos@initialkeyvals
      {showpagenos=false}{showpagenos=true}%
  \fi
}
\robust@def*\PrintWatermark{\global\xwm@printwatermarktrue}
\ltxkeys@declareoption*{%
  \ltxkeys@getpvalnopad
  \xwm@warn{Unknown option '\CurrentKey' with
    value '\InnocentVal' ignored}%
}
\ltxkeys@executeoptions[XWM]<main>{%
  printwatermark=true,disablegeometry=false
}\relax
\ltxkeys@processoptions*[XWM]<main,watermark,wallpaper,%
  fancypagenos>\relax
\new@def*\xwm@samplemarkkeys{%
  firstpage,lastpage,allpages,oddpages,evenpages,
  picscale,picture-scale,
  picfile,picture-file,
  picfileext,pic-file-ext,
  picangle,picture-angle,
  picbb,picture-bb,pic-bounding-box,
  picxpos,picture-xpos,picture-x-position,
  picypos,picture-ypos,picture-y-position,
  showpagecenter,show-page-center,
  picontoptext,picture-on-top-text,pic-on-top-text,
  textontoppic,text-on-top-picture,text-on-top-pic=true,
  pic-height,picture-height,
  picwidth,picture-width,
  squaretiles,square-tiles,
  tilexsize,tile-xsize,
  tileysize,tile-ysize,
  wpxoffset,wallpaper-xoffset,
  wpyoffset,wallpaper-yoffset,
  tilexoffset,tile-xoffset,
  tileyoffset,tile-yoffset,
  tileno,tilenumber,tile-number,number-of-tiles
}
\new@def*\xwm@pagespecifiers{%
  % '=' is needed here to create uniqueness; eg, to avoid confusing
  % ',page' with ',pages'.
  page=,pages=,pagex=,firstpage,lastpage,allpages,oddpages,evenpages,%
  section=,sections=,sectionx=%
}
\robust@def*\xwm@decidedetok#1{%
  \ifntypeTF{#1}{%
    \ifmacroTF{#1}{%
      \let\xwm@detoktype\cptoxdetok
    }{%
      \let\xwm@detoktype\detokenize
    }%
  }{%
    \let\xwm@detoktype\detokenize
  }%
}
\robust@def*\xwm@decidexp#1{%
  \ifntypeTF{#1}{%
    \ifmacroTF{#1}{%
      \let\xwm@exptype\expandcsonce
    }{%
      \let\xwm@exptype\unexpanded
    }%
  }{%
    \let\xwm@exptype\unexpanded
  }%
}
\robust@def*\newwatermark#1{%
  \xwm@wallfalse
  \ifstrcmpTF{#1}\dummywatermark{%
    \xwm@err{'\string\dummywatermark' in front of
      \string\newwatermark}{First comment out or
      remove '\string\dummywatermark'.}%
  }{%
    \def\xwm@forelist{\xwm@forewmklist}%
    \def\xwm@backlist{\xwm@backwmklist}%
    \xwm@suffixcheck\xwm@newwatermark{#1}%
  }%
}
\robust@def*\xnewwatermark{%
  \xwm@suffixcheck{\cpt@teststpm{\cpt@testopt\cpt@xnewwatermark{}}}%
}
\robust@def*\xwm@ltxcmds{%
  \centering,\flushright,\flushleft,\raggedright,%
  \raggedleft,\fbox,\framebox,\makebox,\rotatebox,%
  \scalebox,\raisebox,\color,\textcolor,\usecsn,%
  \newcommand,\lastdocpage
}
\robust@def*\xwm@relaxltxcmds{%
  \def\ltxkeys@do##1{\let##1=\relax}%
  \ltxkeys@parse*1\xwm@ltxcmds
}
\robust@def*\cpt@xnewwatermark[#1]#2{%
  \begingroup
  \xwm@relaxltxcmds
  \cptexpanded{%
    \endgroup
    \newwatermark\ifcpt@st*\fi\ifcpt@pm'\fi
    [\expandcstwice{#1}]{\expandcstwice{#2}}%
  }%
}
\robust@def*\newwallpaper#1{%
  \xwm@walltrue
  \ifstrcmpTF{#1}\dummywallpaper{%
    \xwm@err
      {'\string\dummywallpaper' in front of \string\newwallpaper}%
      {First comment out or remove '\string\dummywallpaper'.}%
  }{%
    \def\xwm@forelist{\xwm@forewalllist}%
    \def\xwm@backlist{\xwm@backwalllist}%
    \xwm@suffixcheck\xwm@newwatermark{#1}%
  }%
}
\robust@def*\xnewwallpaper{%
  \cpt@teststpm{\cpt@testopt\cpt@xnewwallpaper{}}%
}
\robust@def*\cpt@xnewwallpaper[#1]#2{%
  \begingroup
  \xwm@relaxltxcmds
  \cptexpanded{%
    \endgroup
    \newwallpaper\ifcpt@st*\fi\ifcpt@pm'\fi
    [\expandcstwice{#1}]{\expandcstwice{#2}}%
  }%
}
\robust@def*\xwm@newwatermark{%
  \def\siso@do##1{\catcode`##1\string=12}%
  \cpt@teststpm{%
    \let\ifxwm@foregrd\ifcpt@st
    \cpt@testopt{%
      \begingroup
      \expandafter\siso@@loop\expandafter
        {\xwm@watermarkparser,;|-=!'"*}%
      \expandafter\endgroup\xwm@n@wwatermark
    }{}%
  }%
}
\robust@def\xwm@n@wwatermark[#1]#2{%
  \ifdefboolTF{cpt@pm}{}{\xwm@n@ww@termark{#1}{#2}}%
}
\robust@def\xwm@n@ww@termark#1#2{%
  \xwm@decidexp{#1}%
  \edef\xwm@currattrib{\xwm@exptype{#1}}%
  \cpt@sttrue\cpt@kvnormalize[,]\xwm@currattrib
  \xwm@decidexp{#2}%
  \edef\xwm@currmark{\xwm@exptype{#2}}%
  \xwm@decidedetok{#2}%
  \xwm@swafalse
  \xifinsetTF{\detokenize{\newwatermark}}{\xwm@detoktype{#2}}{%
    \xwm@swatrue
  }{%
    \xifinsetTF{\detokenize{\newwallpaper}}{\xwm@detoktype{#2}}{%
      \xwm@swatrue
    }{}%
  }%
  \ifxwm@swa
    \ifxwm@allownesting\else
      \xwm@err{Nested '\string\newwatermark' or
        '\string\newwallpaper'\MsgBrk
        while option 'allownesting' is false}\@ehd
    \fi
  \fi
  \ifdefboolTF{xwm@wall}{}{%
    \xwmifitemsinFT[1]{%
      squaretiles,square-tiles,tilexsize,tile-xsize,%
      tileysize,tile-ysize,wpxoffset,wallpaper-xoffset,%
      wpyoffset,wallpaper-yoffset,tilexoffset,tile-xoffset,%
      tileyoffset,tile-yoffset,tileno,tilenumber,%
      tile-number,number-of-tiles%
    }{#1}{}{%
      \xwm@@err{'\xwm@items' not admissible for
        \MsgBrk non-wallpaper watermarks}\@ehd
    }%
  }%
  \ifdefboolTF{xwm@allownesting}{}{%
    \cpt@choicefdfalse
    \def\csv@do##1{%
      \xifinsetFT{,\detokenize{##1}}{,\xwm@detoktype{#2}}{}{%
        \def\xwm@tempa{##1}%
        \cpt@choicefdtrue\loopbreak
      }%
    }%
    \csv@@parse*[,]\xwm@samplemarkkeys
    \ifcpt@choicefd
      \xwm@err{Illegal location of '\xwm@tempa'.
        \MsgBrk The following keys are not allowed in
        \MsgBrk mandatory/second argument of
        \MsgBrk '\string\newwatermark' or '\string\newwallpaper':
        ^^J||\xwm@samplemarkkeys||}\@ehd
    \fi
  }%
  \xifinsetFT\xwm@watermarkparser{\xwm@detoktype{#2}}{}{%
    \xwm@err{Watermark parser '\xwm@watermarkparser' appears in
      the following watermark.\MsgBrk Enclose your token
      '\xwm@watermarkparser' in braces:^^J||\unexpanded{#2}||}\@ehd
  }%
  \xxwmifitemsinTF[1]\xwm@pagespecifiers{\expandcsonce\xwm@currattrib}{%
    \xxwmifitemsinTF[2]\xwm@pagespecifiers{\expandcsonce\xwm@currattrib}{%
      \xwm@err{Too many page specifiers '\xwm@items' for watermark:
        ^^J||\expandcsonce\xwm@currattrib||}{%
        Only one page specifier is allowed in watermark.}%
    }{}%
  }{%
    \xwm@err{No page specifier for watermark:
      ^^J||\expandcsonce\xwm@currmark||}\@ehd
  }%
  \ifcsnullTF\xwm@currattrib{%
    \ifcsnullTF\xwm@currmark{}{%
      \xwm@@err{No attributes for watermark:
        ^^J||\expandcsonce\xwm@currmark||}\@ehd
    }%
  }{%
    \xwm@makecurrmark
  }%
  \edef\reserved@a{%
    \ifxwm@foregrd\expandcsonce\xwm@forelist\else
      \expandcsonce\xwm@backlist\fi
  }%
  \expandafter\edef\reserved@a{%
    \expandafter\ifdefined\reserved@a\expandcstwice\reserved@a\fi
    \expandcsonce\xwm@currwatermark
  }%
}
\robust@def*\xwm@avoidtwopagespecs{%
  \if\xwm@pagespecfd
    \xwm@err{Two page specifiers in watermark attributes:
      ^^J||\cptoxdetok\xwm@currattrib||}\@ehd
  \else
    \def\xwm@pagespecfd{00}%
  \fi
}
\robust@def*\xwm@addcurrmark#1{%
  % Local group is in effect.
  % If the current mark is already on current page, ignore it. This, eg,
  % avoids 'pagex={1,1,2},textmark=X' making two entries for 'X' on page 1.
  \letcstocsn\reserved@a{xwm@mark@@\romannumeral#1}%
  \ifx\reserved@a\xwm@currattrib\else
    \xifinsetTF{\detokenize{textmark=}}{\cptoxdetok\xwm@currattrib}{%
      \@tempswafalse
      \ifx\xwm@currmark\@empty\else
        \xwm@err{Duplicate textmark in ||\cptoxdetok\xwm@currmark||}
          {I found textmark earlier in the mandotory argument of
            \noexpand\newwatermark, and now I find textmark key in the
            attribute list.}%
      \fi
    }{%
      \@tempswatrue
    }%
    \edef\xwm@tempb{%
      page=\number#1,\expandcsonce\xwm@currattrib,%
      \if@tempswa textmark={\expandcsonce\xwm@currmark}\fi
    }%
    \edef\xwm@currwatermark{%
      % {<page.no>}{<curr.mark>}
      \expandcsonce\xwm@currwatermark{\number#1}{\expandcsonce\xwm@tempb}%
    }%
    \gletcsntocs{xwm@mark@@\romannumeral#1}\xwm@currattrib
  \fi
}
\robust@def*\xwm@getpagespec#1{%
  \ifinsetTF{,#1,}{,page,pages,pagex,section,sections,sectionx,}{%
    % \xwm@ifpagespec has shown that #1 is in \xwm@currattrib. We
    % need to confirm that '#1=' is in \xwm@currattrib.
    \xifinsetTF{,\detokenize{#1=}}{,\cptoxdetok\xwm@currattrib}{%
      \def\xwm@tempa##1#1=##2,##3\xwm@nil{%
        \ifblankTF{##2}{%
          \xwm@warn{Key '#1' has an empty value; '1' assumed}\@ehd
          \def\xwm@currpages{1}%
        }{%
          \ifinsetTF{,#1,}{,pages,sections,}{%
            \ifinsetTF{,}{##2}{%
              \xwm@err{Key '#1' doesn't accept comma-separated
                \MsgBrk page numbers: use a hyphen}\@ehd
            }{}%
          }{%
            \ifinsetTF{,#1,}{,pagex,sectionx,}{%
              \ifinsetTF{-}{##2}{%
                \xwm@err{Key '#1' doesn't accept hyphen-separated
                  \MsgBrk page numbers: use commas}\@ehd
              }{}%
            }{}%
          }%
          \def\xwm@currpages{##2}%
        }%
        \edef\xwm@currattrib{\unexpanded{##1,##3}}%
      }%
      \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
    }{%
      \xwm@err{Key '#1' doesn't have '=' and a value}\@ehd
    }%
  }{%
    \xwm@getpagespec@a{#1}%
  }%
  \kv@@normalize*\xwm@currattrib
}
\robust@def*\xwm@getpagespec@a#1{%
  \xifinsetTF{,\detokenize{#1=true},}{,\cptoxdetok\xwm@currattrib,}{%
    \def\xwm@tempa##1#1=true,##2\xwm@nil{%
      \edef\xwm@currattrib{\unexpanded{##1,##2}}%
    }%
    \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
  }{%
    \xifinsetTF{,\detokenize{#1=false},}{,\cptoxdetok\xwm@currattrib,}{%
      \def\xwm@tempa##1#1=false,##2\xwm@nil{%
        \edef\xwm@currattrib{\unexpanded{##1,##2}}%
      }%
      \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
    }{%
      \def\xwm@tempa##1#1,##2\xwm@nil{%
        \edef\xwm@currattrib{\unexpanded{##1,##2}}%
      }%
      \expandafter\xwm@tempa\xwm@currattrib,\xwm@nil
    }%
  }%
}
\robust@def*\xwm@ifpagespec#1{%
  \@expandtwoargs\cpt@in{,\detokenize{#1}}{,\cptoxdetok\xwm@currattrib}%
  \ifdefboolTF{cpt@in}\@iden\@gobble
}
\robust@def*\xwm@normalizedoublecomma#1{%
  \def\xwm@tempa##1,,##2\normal@nil{%
    \ifblankTF{##2}{%
      \edef#1{\unexpanded{##1}}%
    }{%
      \xwm@tempa##1,##2\normal@nil
    }%
  }%
  \expandafter\xwm@tempa#1,,\normal@nil
}
\robust@def*\xwm@makecurrmark{%
  \begingroup
  \edef\xwm@lastpage{\lastdocpage}%
  \def\xwm@currwatermark{}%
  \def\xwm@pagespecfd{01}%
  \xwm@ifpagespec{page=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{page}%
    \xwm@addcurrmark\xwm@currpages
  }%
  \xwm@ifpagespec{pages=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{pages}%
    \xwm@hyphenpagerange\xwm@currpages\xwm@pagestart\xwm@pageend
    \xwm@cnta\numexpr\xwm@pagestart\relax
    \cptloop
      \xwm@addcurrmark\xwm@cnta
      \advance\xwm@cnta\@ne
      \ifnum\xwm@cnta<\numexpr\xwm@pageend+1\relax
    \cptrepeat
  }%
  \xwm@ifpagespec{pagex=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{pagex}%
    \expandafter\cptfor\xwm@currpages\dofor{%
      \xwm@addcurrmark{##1}%
    }%
  }%
  \xwm@ifpagespec{firstpage}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{firstpage}%
    \xwm@addcurrmark{1}%
  }%
  \xwm@ifpagespec{lastpage}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{lastpage}%
    \xwm@addcurrmark\xwm@lastpage
  }%
  \xwm@ifpagespec{allpages}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{allpages}%
    \xwm@cnta\@ne
    \cptloop
      \xwm@addcurrmark\xwm@cnta
      \advance\xwm@cnta\@ne
      \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
    \cptrepeat
  }%
  \xwm@ifpagespec{evenpages}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{evenpages}%
    \xwm@cnta\@ne
    \cptloop
      \ifodd\xwm@cnta\else
        \xwm@addcurrmark\xwm@cnta
      \fi
      \advance\xwm@cnta\@ne
      \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
    \cptrepeat
  }%
  \xwm@ifpagespec{oddpages}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{oddpages}%
    \xwm@cnta\z@pt
    \cptloop
      \ifodd\xwm@cnta
        \xwm@addcurrmark\xwm@cnta
      \fi
      \advance\xwm@cnta\@ne
      \ifnum\xwm@cnta<\numexpr\xwm@lastpage+1\relax
    \cptrepeat
  }%
  % Incomplete concept. To be refined later. Basically, I want to get page
  % range from section numbers. The work to be done next is actually in
  % formatting \xwm@seclist and completing \xwm@convertsecstopagerange and
  % \xwm@convertsecstopagerange@hyphen.
  \xwm@ifpagespec{section=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{section}%
    \xwm@convertsecstopagerange\xwm@currpages
    \xwm@addcurrmark\xwm@currpages
  }%
  \xwm@ifpagespec{sections=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{sections}%
    \xwm@convertsecstopagerange@hyphen\xwm@currpages
    \xwm@hyphenpagerange\xwm@currpages\xwm@pagestart\xwm@pageend
    \xwm@cnta\numexpr\xwm@pagestart\relax
    \cptloop
      \xwm@addcurrmark\xwm@cnta
      \advance\xwm@cnta\@ne
      \ifnum\xwm@cnta<\numexpr\xwm@pageend+1\relax
    \cptrepeat
  }%
  \xwm@ifpagespec{sectionx=}{%
    \xwm@avoidtwopagespecs
    \xwm@getpagespec{sectionx}%
    \xwm@convertsecstopagerange\xwm@currpages
    \expandafter\cptfor\xwm@currpages\dofor{%
      \xwm@addcurrmark{##1}%
    }%
  }%
  \if\xwm@pagespecfd\else
    \xwm@err{No page specifier in watermark attributes:
      ^^J||\cptoxdetok\xwm@currattrib||}\@ehd
  \fi
  \postgroupdef\xwm@currwatermark\endgroup
}
% \xwm@convertsecstopagerange{<section.range>}
\robust@def*\xwm@convertsecstopagerange#1{%
  \begingroup
  \def\xwm@tempa{}%
  \expandafter\cptfor#1\dofor{%
    \letcstocsn\reserved@a{xwm@sec@page@start@\detokenize{##1}}%
    \letcstocsn\reserved@b{xwm@sec@page@end@\detokenize{##1}}%
    \ifx\reserved@a\undefined
      \def\reserved@a{1}%
    \fi
    \ifx\reserved@b\undefined
      \def\reserved@b{1}%
    \fi
    % To do:
    % To build the page range for each section, loop from section start
    % (page start) to section end (page end).
    \xifinsetTF{,\reserved@a,}{,\xwm@tempa,}{}{%
      \edef\xwm@tempa{%
        \xwm@tempa\ifx\xwm@tempa\@empty\else,\fi\reserved@a
      }%
    }%
  }%
  \let#1\xwm@tempa
  \postgroupdef#1\endgroup
}
% \xwm@convertsecstopagerange@hyphen{<section.range>}
\robust@def*\xwm@convertsecstopagerange@hyphen#1{%
  \begingroup
  \def\xwm@tempa{}%
  \def\csv@do##1{%
    \letcstocsn\reserved@a{xwm@sec@page@start@\detokenize{##1}}%
    \ifx\reserved@a\undefined
      \def\reserved@a{1}%
    \fi
    \xifinsetTF{-\reserved@a-}{-\xwm@tempa-}{}{%
      \edef\xwm@tempa{%
        \xwm@tempa\ifx\xwm@tempa\@empty\else-\fi\reserved@a
      }%
    }%
  }%
  \csv@@parse*[-]#1%
  \let#1\xwm@tempa
  \postgroupdef#1\endgroup
}
\robust@def*\dummywatermark#1{%
  \ifstrcmpTF{#1}\newwatermark{%
    \xwm@err
      {'\string\newwatermark' in front of \string\dummywatermark}%
      {First comment out or remove '\string\newwatermark'.}%
  }{%
    \ifdefboolTF{xwm@usedummymarks}\newwatermark\xwm@dummywatermark
    #1%
  }%
}
\robust@def*\dummywallpaper#1{%
  \ifstrcmpTF{#1}\newwallpaper{%
    \xwm@err
      {'\string\newwallpaper' in front of \string\dummywallpaper}%
      {First comment out or remove '\string\newwallpaper'.}%
  }{%
    \ifdefboolTF{xwm@usedummymarks}\newwallpaper\xwm@dummywatermark
    #1%
  }%
}
\robust@def*\xwm@dummywatermark{%
  \cpt@teststpm{\cpt@testopt\xwm@d@mmywatermark{}}%
}
\robust@def*\xwm@d@mmywatermark[#1]#2{}
\robust@def*\UseDummyWatermarks{\global\xwm@usedummymarkstrue}
\robust@def*\DiscardDummyWatermarks{\global\xwm@usedummymarksfalse}
\DiscardDummyWatermarks
\robust@def*\DiscardAllWatermarks{%
  \global\let\newwatermark\dummywatermark
  \global\xwm@usedummymarksfalse
}
\robust@def*\xwmsuspendwatermark{\xwm@putmarkfalse}
\robust@def*\xwmresumewatermark{\xwm@putmarktrue}
\newletcs\xwmwatermarkoff\xwmsuspendwatermark
\newletcs\xwmwatermarkon\xwmresumewatermark

\robust@def*\xwm@putbothmarks{%
  \ifdefboolFT{xwm@putmark}{}{%
    \ifdefFT\xwm@watermarklist{}\xwm@textpicmark@a
    \ifdefFT\xwm@wallpaperlist{}\xwm@wallpaper@a
  }%
}
\chardef\xwm@nowatermarksignal\z@pt
\AtBeginShipout{%
  \endlinechar13 \catcode13=5\relax
  \catcode`\ =10\relax
  \catcode`\\\z@pt
  \catcode`\{\@ne
  \catcode`\}\tw@
  \ifdefboolTF{xwm@printwatermark}{%
    \let\xwm@watermarklist\xwm@backwmklist
    \let\xwm@wallpaperlist\xwm@backwalllist
    \AtBeginShipoutUpperLeft{%
      \xwm@foregrdfalse
      \xwm@putbothmarks
    }%
    \let\xwm@watermarklist\xwm@forewmklist
    \let\xwm@wallpaperlist\xwm@forewalllist
    \AtBeginShipoutUpperLeftForeground{%
      \xwm@foregrdtrue
      \xwm@putbothmarks
    }%
  }{%
    \ifnum\xwm@nowatermarksignal<\@ne
      \edef\xwm@nowatermarksignal{\the\numexpr\xwm@nowatermarksignal+1}%
      \xwm@info{'printwatermark=false': no watermark printed}%
    \fi
  }%
}
\robust@def*\xwm@perpagestate{%
  page=0,
  pagex={0},
  pages=0-0,
  minmark=false,
  onepageonly=false,
  prange=false,
  tmark=false,
  pmark=false,
  firstpage=false,
  allpages=false,
  oddpages=false,
  evenpages=false,
  showpagecenter=false,
  textmark=DRAFT,
  textalign=center,
  boxalign=,
  textcolor=gray!55,
  fontfamily=bch,
  textangle=0,
  picangle=0,
  fontsize=1cm,
  fontseries=b,
  textscale=1,
  picscale=1,
  picheight=,
  picwidth=,
  picbb=0 0 100 100,
  picfileext,
  picontoptext=false,
  graphicsoptions={},
}
\robust@edef*\xwm@perpagewmkstate{%
  \expandcsonce\xwm@perpagestate,
  \unexpanded{%
    height=\paperwidth,
    width=\paperheight,
    textxpos=0,
    textypos=0,
    picxpos=\z@pt,
    picypos=\z@pt,
    coordunit=mm
  }%
}
\robust@edef*\xwm@perpagewallstate{%
  \expandcsonce\xwm@perpagestate,
  \unexpanded{%
    tilexsize=.5\paperwidth,
    tileysize=.5\paperheight,
    wpxoffset=\z@pt,
    wpyoffset=\z@pt,
    textmark=,
    picfile=,
    tilexoffset=\z@pt,
    tileyoffset=\z@pt,
    tileno=4,
    squaretiles=false
  }%
}
\robust@def*\xwm@textpicmark@a{%
  \ifcsnullTF\xwm@watermarklist{%
    \ifdefboolTF{xwm@foregrd}{}{%
      \ifdefboolFT{xwm@printwatermark}{}{%
        \ifdefboolTF{xwm@draft}{%
          \ifdefboolTF{wmk@showpagecenter}{}{%
            \ifnumcmpFT\c@page=\@ne{}{%
              \cptexpandargonce{\ltxkeys@setkeys[XWM]{watermark}}%
                \xwm@perpagewmkstate
              \wmk@tmarktrue\wmk@pmarkfalse
              \cptdimdef\wmk@textxpos@a{0.5\paperwidth}%
              \cptdimdef\wmk@textypos@a{-0.5\paperheight}%
              \xwm@textpicmark@c
              \xwm@info{'printwatermark' and 'draft' are 'true'
                \MsgBrk but no watermark(s): watermark
                \MsgBrk printed on page 1 only}%
            }%
          }%
        }{%
          \ifnum\c@page=\@ne
            \xwm@info{'printwatermark=true' and 'draft=false'
              \MsgBrk but no watermark(s)}%
          \fi
        }%
      }%
    }%
  }{%
    \xwm@processmarks\xwm@watermarklist{%
      \xwm@setwatermarkkeys{watermark}{wmk}{##2}%
      \ifdefboolFT{wmk@minmark}{}\xwm@textpicmark@c
    }%
  }%
}
\robust@def*\xwm@wallpaper@a{%
  \ifcsnullTF\xwm@wallpaperlist{}{%
    \xwm@processmarks\xwm@wallpaperlist{%
      \xwm@setwatermarkkeys{wallpaper}{wall}{##2}%
      \ifdefboolFT{wlp@minmark}{}\xwm@wallpaper@c
    }%
  }%
}
\robust@def*\xwm@setwatermarkkeys#1#2#3{%
  \ltxkeys@getkeynames{#3}%
  \cptexpandsecond{%
    \ltxkeys@setkeys[XWM]{#1}%
  }{%
    [\ltxkeys@keynames]{\expandcsnonce{xwm@perpage#2state}}%
  }%
  \edef\xwm@currwatermark{\unexpanded{#3}}%
  \ifblankTF{#3}{}{\ltxkeys@setkeys[XWM]{#1}{#3}}%
}
\robust@def*\xwm@processmarks#1#2{%
  \def\xwm@pr@cessmarks##1##2{%
    \ifstrcmpTF{##1}{\@nil}{}{%
      \ifnumcmpTF##1=\c@page{#2}{%
        \edef#1{\expandcsonce#1\unexpanded{{##1}{##2}}}%
      }%
      \xwm@pr@cessmarks
    }%
  }%
  \cptexpandsecondonce{\def#1{}\xwm@pr@cessmarks}{#1}{\@nil}{}%
}
\ltxkeys@disablekeys*[XWM]{main}{printwatermark,disablegeometry}
\BeforeStartOfDocument{%
  \unless\ifxwm@printwatermark
    \xwm@info{*** printwatermark=false: no watermark printed}%
  \fi
}
\newcommand\xwm@papercenter{%
  \color{red}\noindent
  \xwm@put(0,-0.5\paperheight){\line(1,0){\paperwidth}}%
  \xwm@put(0.5\paperwidth,0){\line(0,-1){\paperheight}}%
  \xwm@put(0.5\paperwidth,-0.5\paperheight){\circle{10}}%
  \normalcolor
}
\robust@def*\xwm@textbox#1{%
  \begingroup
  \let\nxp\noexpand
  \let\mcs\cptmakecs
  \edef\xwm@curralign{\expandcsnonce{#1@textalign}}%
  \cptexpanded{\endgroup
    \xwm@put(\mcs{#1@textxpos@a},\mcs{#1@textypos@a}){%
      \nxp\leavevmode\nxp\@killglue\noindent
      \nxp\makebox(0,0)[\expandcsnonce{#1@boxalign}]{%
        \nxp\rotatebox[origin=c]{\mcs{#1@textangle}}{%
          \nxp\scalebox{\mcs{#1@textscale}}{%
            \nxp\parbox[c][\mcs{#1@textheight}]%
              [c]\mcs{#1@textwidth}{%
              \nxp\color{\mcs{#1@textcolor}}%
              \cptdimdef\mcs{#1@fontsize@a}{\mcs{#1@fontsize}}%
              \cptdimdef\mcs{#1@fontsize@a}%
                {1.5\p@*\mcs{#1@fontsize@a}}%
              \nxp\fontfamily\mcs{#1@fontfamily}%
              \nxp\fontseries\mcs{#1@fontseries}%
              \nxp\fontsize\mcs{#1@fontsize}\mcs{#1@fontsize@a}%
              \nxp\selectfont
              \nxp\leavevmode
              \nxp\begin{\xwm@curralign}%
              \mcs{#1@textmark}%
              \nxp\end{\xwm@curralign}%
            }%
          }%
        }%
      }%
    }%
  }%
  \@killglue\normalcolor
}
% See also \xwmgetpicturesize.
\robust@def*\xwm@getgrafsize#1{%
  \ifcsnnullTF{#1@picwidth}{%
    \ifcsnnullTF{#1@picheight}{%
      \edef\pic@size{scale=\cptmakecs{#1@picscale}}%
    }{%
      \xwm@err{You have supplied picture height
        but not width}\@ehd
    }%
  }{%
    \ifcsnnullTF{#1@picheight}{%
      \xwm@err{You have supplied picture width
        but not height}\@ehd
    }{%
      \edef\pic@size{width=\cptmakecs{#1@picwidth},%
        height=\cptmakecs{#1@picheight}}%
    }%
  }%
}
\robust@def*\xwm@picmark{%
  \xwm@findpicfile\wmk@picfile\wmk@picfileext
  \xwm@getgrafsize{wmk}%
  \cptpassexpanded{%
    \setbox\xwm@boxa=\hbox{%
      \noexpand\includegraphics[\ifxwm@pdf viewport\else
      bb\fi=\wmk@picbb,\pic@size,clip,\wmk@graphicsoptions,%
      \xwm@gr@phicsoptions]{\xwm@filefound}%
    }%
  }%
  \cptdimdef\widthofcurrpic{\wd\xwm@boxa}%
  \cptdimdef\heightofcurrpic{\ht\xwm@boxa}%
  \cptdimdef\depthofcurrpic{\dp\xwm@boxa}%
  \xwm@makedraftbox
  \xwm@put(\wmk@picxpos@a,\wmk@picypos@a){%
    \rotatebox[origin=c]\wmk@picangle{%
      \cptexpandsecond{\makebox(0,0)}{[\wmk@boxalign]{%
        \ifdefboolTF{xwm@draft}{\xwm@draftbox{wmk}}{\copy\xwm@boxa}%
      }%
    }%
  }}%
}
\robust@def*\xwm@makedraftbox{%
  \fboxsep\p@\fboxrule.4\p@
  \cptdimdef\xwm@tempa{(\ht\xwm@boxa+\dp\xwm@boxa
    -2\fboxsep-2\fboxrule)/2}%
  \cptdimdef\xwm@tempb{\wd\xwm@boxa-2\fboxsep-2\fboxrule}%
  \setbox\@tempboxa\hbox{\color@begingroup
    \ttfamily\color{red}\Large (draft mode)\color@endgroup}%
  \setbox\xwm@boxb=\hb@xt@\xwm@tempb{%
    \xwmstrut\xwm@tempa\z@pt
    \hb@xt@\xwm@tempb{\hss\unhbox\@tempboxa\hss}%
    \xwmstrut\z@pt\xwm@tempa
  }%
}
\robust@def*\xwm@draftbox#1{%
  \begingroup
  \color{\usename{#1@draftboxcolor}}\fbox{\copy\xwm@boxb}%
  \endgroup
}
\newcommand*\xwm@textpicmark@c{%
  \xwm@getposition\wmk@textxpos\wmk@textypos\wmk@coordunit
  \xwm@getposition\wmk@picxpos\wmk@picypos\wmk@coordunit
  \ifdefboolTF{wmk@picontoptext}{%
    \ifdefboolFT{wmk@tmark}{}{\xwm@textbox{wmk}}%
    \ifdefboolFT{wmk@pmark}{}\xwm@picmark
  }{%
    \ifdefboolFT{wmk@pmark}{}\xwm@picmark
    \ifdefboolFT{wmk@tmark}{}{\xwm@textbox{wmk}}%
  }%
  \ifdefboolFT{wmk@showpagecenter}{}\xwm@papercenter
}
\AtBeginDocument{%
  \ifdefTF\Ginput@path{%
    \xdef\xwm@inputpath{\Ginput@path\xwm@inputpath}%
    \ifxTF\Ginput@path\input@path{}{%
      \ifdefFT\input@path{}{%
        \xdef\xwm@inputpath{\input@path\xwm@inputpath}%
      }%
    }%
  }{%
    \ifdefFT\input@path{}{%
      \xdef\xwm@inputpath{\input@path\xwm@inputpath}%
    }%
  }%
}
\new@def*\xwm@inputpath{}
\robust@def*\watermarkpaths{%
  \cpt@testst{\cpt@testopt\xwm@w@termarkpaths{}}%
}
\robust@def*\xwm@w@termarkpaths[#1]{%
  \cpt@testpnopt{\xwm@w@term@rkpaths#1}{}
}
\robust@def*\xwm@w@term@rkpaths#1(#2)#3{%
  \cpt@useemptytrue
  \def\xwm@tempa{#3}%
  \ifdefboolTF{cpt@st}{%
    \ifbracedTF{#3}{\xwm@stripallouterbraces{#3}\xwm@tempa}{}%
    \def\csv@do##1{%
      \ifbracedTF{##1}{%
        \xwm@stripallouterbraces{##1}\xwm@tempa
      }{%
        \def\xwm@tempa{##1}%
      }%
      \cptexpandarg{\grightaddtocs\xwm@inputpath}{{#1\xwm@tempa#2}}%
    }%
    \csv@@parse*[,]\xwm@tempa
  }{%
    \xifinsetFT{,}{\cptoxdetok\xwm@tempa}{}{%
      \xwm@err{Input path '#3' contains comma:
        \MsgBrk Commas can appear only in the argument
        \MsgBrk of star (*) variant of \string\watermarkpaths}\@ehd
    }%
    \def\tsv@do##1{%
      \ifbracedTF{##1}{%
        \cptexpandarg{\grightaddtocs\xwm@inputpath}{{#1\@iden##1#2}}%
      }{%
        \xwm@err{Input path '##1' needs outer braces}\@ehd
      }%
    }%
    \tsv@@parse*\xwm@tempa
  }%
}
\newletcs\watermarkpath=\watermarkpaths
\new@def*\xwmifeofTF#1{\ifcondTF\ifeof#1\fi}
\robust@def*\pdfiffileexistsTF#1{%
  \ifcondFT\if\pdffilesize{#1}\relax\fi
}
\robust@def*\xwmiffileexistsTF#1{%
  \openin\@inputcheck#1\@space
  \xwmifeofTF\@inputcheck{%
    \ifcsnullTF\xwm@inputpath{%
      \@secondoftwo
    }{%
      \xwm@iffileonpath{#1}%
    }%
  }{%
    \closein\@inputcheck
    \edef\xwm@filefound{#1}%
    \@firstoftwo
  }%
}
\robust@def*\xwmiffileexistsFT#1{%
  \xwmiffileexistsTF{#1}\@secondoftwo\@firstoftwo
}
\robust@def*\xwm@iffileonpath#1{%
  \let\xwm@pathfound\@empty
  \cpt@choicefdfalse
  \def\tsv@do##1{%
    \xwm@stripallouterbraces{##1}\xwm@tempa
    \openin\@inputcheck\xwm@tempa#1\@space
    \xwmifeofTF\@inputcheck{}{%
      \let\xwm@pathfound\xwm@tempa
      \edef\xwm@filefound{\xwm@tempa#1}%
      \closein\@inputcheck
      \cpt@choicefdtrue\loopbreak
    }%
  }%
  \tsv@@loop*\xwm@inputpath
  \ifdefboolTF{cpt@choicefd}%
}
\robust@def*\xwm@nofileerr#1#2{%
  \message{%
    ^^J! Package xwatermark Error: File '#1.#2' not found.
    ^^J^^JType x to quit, or <RETURN> to proceed,
    ^^Jor enter new name (default extension: #2):^^J
  }%
  \begingroup
  \endlinechar-1\global\read-1 to\@gtempa
  \endgroup
  \ifcsnullTF\@gtempa{}{%
    \oifstrcmpTF\@gtempa{x}{%
      \stop
    }{%
      \oifstrcmpTF\@gtempa{X}{%
        \stop
      }{%
        \filename@parse\@gtempa
        \edef#1{\filename@area\filename@base}%
        \edef#2{\ifxTF\filename@ext\relax{#2}{\filename@ext}}%
        \xwm@findpicfile{#1}{#2}%
      }%
    }%
  }%
}
\robust@def*\xwm@findpicfile#1#2{%
  \let\xwm@filefound\@empty
  \edef\xwm@filegiven{#1.#2}%
  \ifdefboolTF{xwm@pdf}{%
    \xwm@f@ndpicfile{#1}{#2}{pdf,png,jpeg,mps}%
  }{%
    \xwm@f@ndpicfile{#1}{#2}{eps,ps}%
  }%
  \ifcsnullFT\xwm@filefound{}{\xwm@nofileerr{#1}{#2}}%
}
\robust@def*\xwm@f@ndpicfile#1#2#3{%
  \xwm@swafalse
  \xwmiffileexistsTF{#1.#2}{%
    \xwm@swbtrue
  }{%
    \xwm@swbfalse
    \def\csv@do##1{%
      \xwmiffileexistsFT{#1.##1}{}{%
        \xwm@swatrue\loopbreak
      }%
    }%
    \csv@@loop[,]{#3}%
  }%
  \ifdefboolTF{xwm@swb}{}{%
    \ifdefboolTF{xwm@swa}{%
      \xwm@warn{File '\xwm@filegiven' doesn't exist
        \MsgBrk on given path(s) '\xwm@inputpath',
        \MsgBrk but I have found \xwm@filefound'}%
    }{%
      \let\xwm@filefound\@empty
      \let\xwm@pathfound\@empty
    }%
  }%
}
\robust@def*\xwm@wallpaper@c{%
  \ifdefboolTF{wlp@picontoptext}{%
    \xwm@textwallpaper
    \xwm@picwallpaper
  }{%
    \xwm@picwallpaper
    \xwm@textwallpaper
  }%
  \ifdefboolFT{wlp@showpagecenter}{}\xwm@papercenter
}
\robust@def*\xwm@textwallpaper{%
  \ifdefboolFT{wlp@tmark}{}{%
    \ifdefboolTF{wlp@squaretiles}\xwm@sqtexttiles\xwm@texttiles
  }%
}
\robust@def*\xwm@picwallpaper{%
  \ifdefboolFT{wlp@pmark}{}{%
    \ifdefboolTF{wlp@squaretiles}\xwm@sqpictiles\xwm@pictiles
  }%
}
\robust@def*\xwm@dotiling{\xwm@makedraftbox\xwm@dotiling@a}
\robust@def*\xwm@dotiling@a{%
  \let\tiley\wlp@wpyoffset
  \cptwhiledim\tiley<\paperheight-\wlp@wpyoffset\do{%
    \cptdimdef\xwm@tempa{-\paperheight+\tiley}%
    \let\tilex\wlp@wpxoffset
    \cptwhiledim\tilex<\paperwidth-\wlp@wpxoffset\do{%
      \leavevmode\@killglue
      \xwm@put(\tilex,\xwm@tempa){\rotatebox[origin=c]
        \xwm@currangle{%
        \cptexpandsecond{\makebox(0,0)}{[\wlp@boxalign]}{%
          \ifdefboolTF{xwm@draft}{\xwm@draftbox{wlp}}{\copy\xwm@boxa}%
        }%
      }}%
      \cptdimadd\tilex{\wlp@tilexsize+\wlp@tilexoffset}%
    }%
    \cptdimadd\tiley{\wlp@tileysize+\wlp@tileyoffset}%
  }%
}
\robust@def*\xwm@toofewtiles#1{%
  \ifnum\numexpr#1<4\relax
    \xwm@err{Too few square wallpapers '#1';
      \MsgBrk minimum expected: 4}\@ehd
  \fi
}
\robust@def*\xwm@texttiles{%
  \setbox\xwm@boxa=\hbox{%
    \resizebox\wlp@tilexsize\wlp@tileysize
      {\color{\wlp@textcolor}\wlp@textmark}%
  }%
  \let\xwm@currangle\wlp@textangle
  \xwm@dotiling
}
\robust@def*\xwm@sqtexttiles{%
  \xwm@toofewtiles\wlp@tileno
  \cptdimdef\wlp@tilexsize{\paperwidth/\wlp@tileno}%
  \let\wlp@tileysize\wlp@tilexsize
  \setbox\xwm@boxa=\hbox{%
    \resizebox\wlp@tilexsize\wlp@tileysize
      {\color{\wlp@textcolor}\wlp@textmark}%
  }%
  \let\xwm@currangle\wlp@textangle
  \xwm@dotiling
}
\robust@def*\xwm@tilepicbox{%
  \xwm@findpicfile\wlp@picfile\wlp@picfileext
  \setbox\xwm@boxa=\hbox{%
    \cptexpandsecond\includegraphics{%
      [\ifxwm@pdf viewport\else bb\fi=\wlp@picbb,
      width=\the\dimexpr\wlp@tilexsize,height=
      \the\dimexpr\wlp@tileysize,clip,
      \wlp@graphicsoptions,\xwm@gr@phicsoptions]%
    }{\xwm@filefound}%
  }%
}
\robust@def*\xwm@pictiles{%
  \xwm@tilepicbox
  \let\xwm@currangle\wlp@picangle
  \xwm@dotiling
}
\robust@def*\xwm@sqpictiles{%
  \xwm@toofewtiles\wlp@tileno
  \cptdimdef\wlp@tilexsize{\paperwidth/\wlp@tileno}%
  \let\wlp@tileysize\wlp@tilexsize
  \xwm@tilepicbox
  \let\xwm@currangle\wlp@picangle
  \xwm@dotiling
}
\robust@def*\xwmsetbox#1#2#3#4{%
  \begingroup
  \setbox1\hbox{\color@begingroup#4\color@endgroup}%
  \setbox\@tempboxa\hbox to#1\textwidth{%
    \setbox0\vtop{%
      \ignorespaces#4\vskip\dimexpr#3\textheight/2\relax
    }%
    \cptdimdef\x{(#1\textwidth-\wd1)/2\relax}%
    \hskip\x\box0\hskip-\x
  }%
  \ht\@tempboxa=\dimexpr#2\textheight/2\relax
  \noindent\box\@tempboxa
  \endgroup
}
\robust@def*\xwmstrut#1#2{%
  \relax\unskip
  \ifhmode\nobreak\fi
  \begingroup
  \setbox\@tempboxa=\hbox{\vrule\@height#1\@depth#2\@width\z@pt}%
  \ifmmode\copy\@tempboxa\else\unhcopy\@tempboxa\fi
  \endgroup
}
\robust@def*\xwmgetpicturesize{\cpt@testopt\xwm@getpicsize{}}
\robust@def*\xwm@getpicsize[#1]#2{%
  \begingroup
  \edef\Ginput@path{%
    \usecsifdef\Ginput@path\usecsifdef\xwm@inputpath
    \usecsifdef\input@path
  }%
  \setbox\xwm@boxa=\hbox{\includegraphics[#1]{#2}}%
  % See also \widthofcurrpic.
  \cptdimdef\widthofpic{\wd\xwm@boxa}%
  \cptdimdef\heightofpic{\ht\xwm@boxa}%
  \cptdimdef\depthofpic{\dp\xwm@boxa}%
  \cptdimdef\totalheightofpic{\ht\xwm@boxa+\dp\xwm@boxa}%
  \let\\\cpt@csexit
  \cptexpanded{\endgroup
    \\\widthofpic\\\heightofpic\\\depthofpic\\\totalheightofpic
  }%
}
% #1=optional text to be printed as watermark
% #2=sundry fixed keys
% #3=variable keys, separated by semicolon (set-1;...;set-n)
% Each set-i has the syntax <key1=val1,...,keyn=valn>
\robust@def*\repeatwatermarks{%
  \cpt@teststpm{\cpt@testopt\xwm@repeatwatermarks{}}%
}
\robust@def\xwm@repeatwatermarks[#1]#2#3{%
  \edef\cpt@tempa{\csv@@loop\ifcpt@st*\fi}%
  \def\csv@do##1{%
    \ifblankTF{##1}{}{\newwatermark[#2,##1]{#1}}%
  }%
  \ifdefboolTF{cpt@pm}{}{\cpt@tempa[;]{#3}}%
}
\ltxkeys@definekeys*[XWM]{boxedminipage}[xwmbmp@]{%
  width=\textwidth;
  textcolor=black;
  framecolor=black;
  framesep=3\p@;
  framerule=0.4\p@;
  height=\z@pt;
  depth=\z@pt;
  textalign=justified/\xwm@settextalign\xwmbmp@textalign;
  innerpos=c;
}
\robust@def*\xwmboxedminipage{\cpt@testopt\xwm@boxedminipage{}}
\begingroup
\catcode`\|=\catcode`\%
\robust@gdef*\xwm@boxedminipage[#1]{%
  \ltxkeys@launchkeys[XWM]{boxedminipage}{#1}%
  \xwm@stripallouterbracesincs\xwmbmp@width
  \xwm@stripallouterbracesincs\xwmbmp@textcolor
  \leavevmode\@pboxswfalse
  \begingroup
  \color{\xwmbmp@framecolor}%
  \xifstrcmpTF\xwmbmp@innerpos{b}{%
    \vbox
  }{%
    \xifstrcmpTF\xwmbmp@innerpos{t}{%
      \vtop
    }{%
      \ifdefboolTF{mmode}{%
        \vcenter
      }{%
        \@pboxswtrue $\vcenter |$
      }%
    }%
  }%
  {\ifnum`}=0\fi
    \hsize\xwmbmp@width\relax
    \hrule\@height\xwmbmp@framerule
    \hbox{\ifnum`}=0\fi
      \vrule\@width\xwmbmp@framerule
      \kern\xwmbmp@framesep\relax
      \vbox{\ifnum`}=0\fi
        \vskip\xwmbmp@framesep\relax
  \cptdimdef\reserved@a{\hsize-(\xwmbmp@framerule+\xwmbmp@framesep)*2}%
  \hsize\reserved@a\relax
  \textwidth\reserved@a\relax
  \columnwidth\reserved@a\relax
  \@parboxrestore
  \c@mpfootnote\z@pt
  \let\@footnotetext\@mpfootnotetext
	\let\@listdepth\@mplistdepth\@mplistdepth\z@pt
	\@minipagerestore\@minipagetrue
	\everypar{\global\@minipagefalse\everypar{}}%
  \leavevmode\@killglue
  \xwmstrut\xwmbmp@height\z@pt
  \noindent\color{\xwmbmp@textcolor}%
  \begin\xwmbmp@textalign
  \ignorespaces
}
\robust@gdef*\endxwmboxedminipage{%
  \end\xwmbmp@textalign
  \xwmstrut\z@pt\xwmbmp@depth
  \ifvoid\@mpfootins\else
    \vskip\skip\@mpfootins\footnoterule\unvbox\@mpfootins
  \fi
  \vskip\xwmbmp@framesep\relax
  \ifnum`{=0\fi}%
  \kern\xwmbmp@framesep\relax
  \vrule\@width\xwmbmp@framerule
  \ifnum`{=0\fi}%
  \hrule\@height\xwmbmp@framerule
  \ifnum`{=0\fi}%
  \if@pboxsw\m@th$\fi |$
  \leavevmode\@killglue
  \endgroup
  \@ignoretrue
}
\endgroup

\ltxkeys@definekeys*[XWM]{minipage}[xwmmp@]{%
  width=\paperwidth;
  textcolor=black;
  framecolor=black;
  framesep=3\p@;
  framerule=0.4\p@;
  height=\z@pt;
  depth=\z@pt;
  textalign=center/\xwm@settextalign\xwmmp@textalign;
  text-align=center/\setaliaskey{textalign};
  framebox=true;
  insertframe=true/\setaliaskey{framebox};
  insert-frame=true/\setaliaskey{framebox};
}
\robust@def*\xwmminipage{\cpt@testopt\xwm@minipage{}}
\robust@def\xwm@minipage[#1]#2{%
  \ltxkeys@launchkeys[XWM]{minipage}{#1}%
  \xwm@stripallouterbracesincs\xwmmp@width
  \xwm@stripallouterbracesincs\xwmmp@textcolor
  \xwm@pushboxframe
  \fboxsep\xwmmp@framesep\fboxrule\xwmmp@framerule\relax
  \cptdimdef\xwmmp@boxwidth{\xwmmp@width-2\fboxsep-2\fboxrule}%
  \def\xwm@printbox{%
    \color{\xwmmp@framecolor}%
    \ifxwmmp@framebox\fbox{\fi
      \usebox\xwm@boxa
    \ifxwmmp@framebox}\fi
    \xwm@popboxframe
  }%
  \@killglue\noindent
  \begin{lrbox}\xwm@boxa
  \@killglue\noindent
  \begin{minipage}[c][\height][s]\xwmmp@boxwidth
  \@killglue\noindent
  \xwmstrut\xwmmp@height\z@pt
  \begin\xwmmp@textalign
  \textcolor{\xwmmp@textcolor}{#2}\relax
  \end\xwmmp@textalign
  \xwmstrut\z@pt\xwmmp@depth
  \end{minipage}%
  \@ignoretrue\@killglue
  \end{lrbox}%
  \@ignoretrue\@killglue\noindent
  \xwm@printbox
  \normalcolor
  \@ignoretrue
}
\ltxkeys@definekeys*[XWM]{colorbox}[xwmcbx@]{%
  width=\textwidth;
  height=\z@pt;
  depth=\z@pt;
  framebox=true;
  insertframe=true/\setaliaskey{framebox};
  insert-frame=true/\setaliaskey{framebox};
  textcolor=black;
  fillcolor=white;
  outerframecolor=black;
  outer-frame-color=black/\setaliaskey{outerframecolor};
  innerframecolor=black;
  inner-frame-color=black/\setaliaskey{innerframecolor};
  framesep=3\p@;
  framerule=0.4\p@;
  textalign=center/\xwm@settextalign\xwmcbx@textalign;
  align=center/\setaliaskey{textalign};
  text-align=center/\setaliaskey{textalign};
}
\robust@def*\xwmcolorbox{\cpt@testopt\xwm@colorbox{}}
\robust@def\xwm@colorbox[#1]#2{%
  \ltxkeys@launchkeys[XWM]{colorbox}{#1}%
  \xwm@pushboxframe
  \fboxsep\xwmcbx@framesep\fboxrule\xwmcbx@framerule\relax
  \removelastskip\noindent
  \fcolorbox{\xwmcbx@outerframecolor}{\xwmcbx@fillcolor}{%
    \cptexpandsecond\xwmminipage{[textalign=\xwmcbx@textalign,
    framesep=\xwmcbx@framesep,framerule=\xwmcbx@framerule,
    framecolor=\xwmcbx@innerframecolor,width=\xwmcbx@width,
    height=\xwmcbx@height,depth=\xwmcbx@depth,
    textcolor=\xwmcbx@textcolor,framebox=true]}{#2}%
  }%
  \xwm@popboxframe
  \removelastskip
  \normalcolor
}
\ltxkeys@definekeys*[XWM]{makecolorbox}[xwmmbx@]{%
  width=\textwidth;
  height=\z@pt;
  depth=\z@pt;
  framebox=true;
  textcolor=black;
  fillcolor=white;
  outerframecolor=black;
  outer-frame-color=black/\setaliaskey{outerframecolor};
  innerframecolor=black;
  inner-frame-color=black/\setaliaskey{innerframecolor};
  framesep=3\p@;
  framerule=0.4\p@;
  textalign=center/\xwm@settextalign\xwmmbx@textalign;
  align=center/\setaliaskey{textalign};
  text-align=center/\setaliaskey{textalign};
  boxalign=center/\xwm@settextalign\xwmmbx@boxalign;
}
\robust@def*\makecolorbox{\cpt@testopt\xwm@makecolorbox{}}
\robust@def*\xwm@makecolorbox[#1]#2{%
  \ltxkeys@launchkeys[XWM]{makecolorbox}{#1}%
  \begin{\xwmmbx@boxalign}%
  \makebox[\z@pt][c]{%
    \xwmstrut\xwmmbx@height\z@pt
    \xwm@pushboxframe
    \fboxsep\xwmmbx@framesep\fboxrule\xwmmbx@framerule\relax
    \fcolorbox{\xwmmbx@outerframecolor}{\xwmmbx@fillcolor}{%
      \cptexpandsecond\xwmminipage{[textalign=\xwmmbx@textalign,
      framesep=\xwmmbx@framesep,framerule=\xwmmbx@framerule,
      framecolor=\xwmmbx@innerframecolor,width=\xwmmbx@width,
      height=\xwmmbx@height,depth=\xwmmbx@depth,
      textcolor=\xwmmbx@textcolor,framebox=
      \thebool@normal{xwmmbx@framebox}]}{#2}%
    }%
    \xwm@popboxframe
    \xwmstrut\z@pt\xwmmbx@depth
  }%
  \end{\xwmmbx@boxalign}%
  \removelastskip
  \normalcolor
}
\ltxkeys@definekeys*[XWM]{shade}[xwmshd@]{%
  width=\hsize;
  leftadjust=\z@pt;
  indent=\z@pt;
  fillcolor=gray!75;
  framecolor=black;
  framesep=3\p@;
  framerule=0.4\p@;
  height=\z@pt;
  depth=\z@pt;
  textalign=justified/\xwm@settextalign\xwmshd@textalign;
  textcolor=black
}
\robust@def*\xwm@frameshade{%
  \def\FrameCommand{%
    \clubpenalty\@m\widowpenalty\@m
    \noindent\kern\xwmshd@leftadjust
    \fboxrule\xwmshd@framerule\fboxsep\xwmshd@framesep\relax
    \fcolorbox{\xwmshd@framecolor}{\xwmshd@fillcolor}%
  }%
  \parindent\z@pt\finalhyphendemerits\z@pt
  \cptdimdef\xwm@tempa{\xwmshd@width-(\xwmshd@framesep
    +\xwmshd@framerule+\xwmshd@indent)}%
  \color{\xwmshd@textcolor}%
  \MakeFramed{%
    \hsize\xwm@tempa\FrameRestore\@setminipage
  }%
  \xwmstrut\xwmshd@height\z@pt
  \begin\xwmshd@textalign
}
\robust@def*\xwmshade{\cpt@testopt\xwm@shade{}}
\robust@def*\xwm@shade[#1]{%
  \ltxkeys@launchkeys[XWM]{shade}{#1}%
  \xwm@frameshade
}
\robust@def*\endxwmshade{%
  \end\xwmshd@textalign
  \xwmstrut\z@pt\xwmshd@depth
  \par\unskip\endMakeFramed\@ignoretrue
}
\ltxkeys@definekeys*[XWM]{fadingtext}[fad@]{%
  textcolor=white;
  boxcolor=black;
  scale=1;
  letterwidth=5mm;
  barcolor=yellow;
  height=\z@pt;
  depth=\z@pt
}
\newcommand*\xwmfadingtext[2][]{%
  \ltxkeys@launchkeys[XWM]{fadingtext}{#1}%
  \begingroup
  \@tempcnta\z@pt
  \def\siso@do##1{%
    \advance\@tempcnta\@ne
    \csn@xdef{fade@\romannumeral\@tempcnta}{\cpttrimspace{##1}}%
  }%
  \siso@@loop{#2}%
  \def\colbox##1{%
    \color{.!80}%
    \colorbox{.}{{%
      \color{\fad@textcolor!\the\numexpr100-\@tempcnta/\icol*10\relax}%
      \ifnum\icol=\@ne
        \kern\dimexpr\fad@letterwidth/50\relax
      \fi
      \makebox[\fad@letterwidth]{##1}%
      \ifnum\icol<\@tempcnta
        \scalebox\fad@scale{\textcolor{\fad@barcolor}{$|$}}%
      \else
        \scalebox\fad@scale{\phantom{$|$}}%
        \kern\dimexpr-\fad@letterwidth/10\relax
      \fi
    }}%
  }%
  \color{\fad@boxcolor}%
  \chardef\icol\z@pt
  \cptdotimes\@tempcnta{%
    \cptpushnumber\icol
    \colbox{\scalebox\fad@scale
      {\xwmstrut\fad@height\fad@depth
      \usename{fade@\romannumeral\icol}}}%
  }%
  \endgroup
}
\cptonlypreamble{%
  \dummypagenos,\fancypagenos,
  \FancyPageNumbers,\NoFancyPageNumbers
}
\newcommand*\dummypagenos[1][]{}
\newcommand*\fancypagenos[1][]{%
  \ifblankTF{#1}{}{\AtBeginDocument{\xwm@fancypagenos{#1}}}%
}
\robust@def*\NoFancyPageNumbers{%
  \AfterStartOfDocument{\global\pgn@showpagenosfalse}%
}
\robust@def*\FancyPageNumbers{%
  \AfterStartOfDocument{\global\pgn@showpagenostrue}%
}
\robust@def*\xwm@fancypagenos#1{%
  \ltxkeys@launchkeys[XWM]{fancypagenos}{#1}%
  \xwm@getposition\pgn@textxpos\pgn@textypos\pgn@coordunit
  \ifnumcmpFT\c@page=\@ne{}{%
    \AfterStartOfDocument{\thispagestyle{\xwm@frontpagestyle}}%
  }%
  \pagestyle{fancyplain}%
  \fancyhf{}%
  \cfoot{\pgn@cfoot}\rfoot{\pgn@rfoot}%
  \lfoot{\pgn@lfoot}\chead{\pgn@chead}%
  \rhead{\pgn@rhead}\lhead{\pgn@lhead}%
  \ifpgn@showheadrule
    \def\headrule{{%
      \color{\pgn@headrulecolor}%
      \hrule\@height\pgn@headruleheight\@depth\pgn@headruledepth
        \@width\headwidth\vspace{\pgn@headrulesep}%
      \hrule\@height\pgn@headruleheight\@depth\pgn@headruledepth
        \@width\headwidth\vspace{-\pgn@headrulesep}%
    }}%
  \else
    \let\headrule\relax
  \fi
  \ifpgn@showfootrule
    \def\footrule{{%
      \color{\pgn@footrulecolor}%
      \hrule\@height\pgn@footruleheight\@depth\pgn@footruledepth
        \@width\headwidth\vspace{\pgn@footrulesep}%
      \hrule\@height\pgn@footruleheight\@depth\pgn@footruledepth
        \@width\headwidth\vspace{\pgn@footrulesep}%
    }}%
  \else
    \let\footrule\relax
  \fi
  \xwm@gethfoffset\pgn@hfoffsetleft\pgn@hfoffsetright
  \fancyhfoffset[R,L]\xwm@hfoffset
  \AtBeginShipout{%
    \ifdefboolTF{pgn@sendtoback}{%
      \AtBeginShipoutUpperLeft{%
        \xwm@f@ncyp@genos
      }%
    }{%
      \AtBeginShipoutUpperLeftForeground{%
        \xwm@f@ncyp@genos
      }%
    }%
  }%
}
\cptnewswitch{xwm@fancy}
\robust@def*\xwm@f@ncypagenos{%
  \def\pgn@textmark{%
    \begingroup
    \fboxrule\pgn@framerule\fboxsep\pgn@framesep\relax
    \pgn@format{\normalfont\pgn@style}%
    \endgroup
  }%
  \cptswitchtrue{xwm@fancy}%
  \xwm@textbox{pgn}%
  \cptswitchfalse{xwm@fancy}%
}
\robust@def*\xwm@f@ncyp@genos{%
  \ifboolFT{pgn@showpagenos}{}{%
    \ifnumcmpTF\c@page=\@ne{%
      \ifdefboolTF{pgn@showonpageone}\xwm@f@ncypagenos\relax
    }{%
      \xwm@f@ncypagenos
    }%
  }%
}
\robust@def*\xwm@gethfoffset#1#2{%
  \begingroup
  \def\temp@err{%
    \xwm@err{Only digits (without units) are allowed\MsgBrk
      in the values of 'hfoffsetleft' and 'hfoffsetright'}\@ehd
  }%
  \xifblankTF{#1}{}{%
    \xxwmifitemsinTF\xwm@allowedcoordunits{#1}\temp@err{}%
  }%
  \xifblankTF{#2}{}{%
    \xxwmifitemsinTF\xwm@allowedcoordunits{#2}\temp@err{}%
  }%
  \def\xwm@tempc##1##2{%
    \xifblankTF{##1}{\def##2{1}}{\def##2{##1}}%
    \ifdim##2\p@>\p@\def##2{1}\fi
  }%
  \xwm@tempc{#1}\xwm@tempa\xwm@tempc{#2}\xwm@tempb
  \def\xwm@tempc##1{%
    \xifinsetFT{.}{##1}{}{%
      \def\xwm@tempd####1.####2\xwm@nil{\def##1{.####2}}%
      \cptexpandsecond\xwm@tempd{##1}\xwm@nil
    }%
  }%
  \xwm@tempc\xwm@tempa\xwm@tempc\xwm@tempb
  \cptpassexpanded{%
    \endgroup\def\noexpand\xwm@hfoffset{%
      \the\dimexpr\xwm@tempa\marginparsep+%
      \xwm@tempb\marginparwidth\relax
    }%
  }%
}
\robust@redef*\Gin@ii[#1]#2{%
  \ifstrcmpTF{[}{#2}{%
    \Gin@iii[#1][%
  }{%
    \begingroup
    \@tempswafalse
    \toks@{\Ginclude@graphics{#2}}%
    \ltxkeys@setkeys{Gin}{#1}%
    \Gin@esetsize
    \the\toks@
    \endgroup
  }%
}
\robust@redef*\Grot@box@kv[#1]#2#3{%
  \@begin@tempboxa\hbox{#3}%
  \Grot@x\dimexpr\width/2\relax
  \Grot@y\dimexpr(\height-\depth)/2\relax
  \ltxkeys@setkeys{Grot}{#1}%
  \setbox\z@pt\box\@tempboxa
  \Grot@setangle{#2}%
  \Grot@box
  \@end@tempboxa
}

\endinput

%%% End of file xwatermark.sty %%%