%%
%% This is file `snapshot.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% snapshot.dtx 
%% 
%% Copyright 1999-2003, 2004, 2010, 2012, 2020 American Mathematical Society.
%% 
%% American Mathematical Society
%% Technical Support
%% Publications Technical Group
%% 201 Charles Street
%% Providence, RI 02904
%% USA
%% tel: (401) 455-4080
%%      (800) 321-4267 (USA and Canada only)
%% fax: (401) 331-3842
%% email: tech-support@ams.org
%% 
%% This work 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 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is the American Mathematical
%% Society.
%% 
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{snapshot}[2020/06/17 v2.14]
\let\@xp=\expandafter \let\@nx=\noexpand
\def\str@cmp#1#2\str@cmp#3{%
  \if #1#3\else F\@car\fi \str@cmp#2\str@cmp
}
\def\string@equal#1#2{%
  \str@cmp#1\relax\str@cmp#2{\relax\@gobbletwo}\@nil TT%
}
\newcommand{\RequireVersions}[2][]{}%

\renewcommand{\RequireVersions}[1][]{%
    \def\snap@check{\snap@compare@versions}%
    \toks@{#1}%
    \afterassignment\snap@storem
    \let\@let@token=
}

\@onlypreamble\RequireVersions
\def\snap@storem{%
    \ifx\@let@token\bgroup \else
        \PackageError{snapshot}{Expected a `\@charlb' character here}\@ehc
        \@xp\@gobblefour
    \fi
    \futurelet\@let@token\snap@branch
}
\let\snap@check\@gobble
\def\snap@finish{\toks@\bgroup}
\def\snap@branch{%
    \ifx\@let@token\egroup
        \@xp\snap@finish
    \else\ifx\@let@token *%
        \let\reserved@c\snap@store@version
    \else\ifx\@let@token\@sptoken
        \lowercase{\def\reserved@c} {\futurelet\@let@token\snap@branch}%
    \else
        \let\reserved@c\snap@store@error
    \fi\fi\fi
    \reserved@c
}
\def\snap@store@error#1{%
    \PackageError{snapshot}{Expected '*' here, not '#1'}\@ehc
}

\@onlypreamble\snap@store@error
\def\snap@store@version #1#2#3#4{%
    \@xp\snap@store@b\csname snapx@#2\endcsname{#2}{#3}{#4}%
}

\@onlypreamble\snap@store@version

\let\snapshotApplication\@empty

\ifx\OmegaVersion\@@undefined \else
    \edef\snapshotApplication{%
        \ifx\AlephVersion\@@undefined
            {Omega}\space\space\space
            {0000/00/00 v\OmegaVersion}%
        \else
            {Aleph}\space\space\space
            {0000/00/00 v\OmegaVersion-\AlephVersion}%
        \fi
    }%
\fi

\ifx\ptexversion\@@undefined\else
    \edef\snapshotApplication{%
        {pTeX}\space\space\space\space
        {0000/00/00 v\number\ptexversion
         \ifx\ptexminorversion\undefined \u \else.\number\ptexminorversion\fi
         \ifx\ptexrevision\undefined \u \else\ptexrevision\fi}%
    }%
    \ifx\uptexversion\@@undefined
        \ifx\epTeXversion\@@undefined\else
            \edef\snapshotApplication{%
                {epTeX}\space\space\space
                {0000/00/00 v\number\epTeXversion}%
            }%
        \fi
    \else
        \ifx\epTeXversion\@@undefined
            \edef\snapshotApplication{%
                {upTeX}\space\space\space
                {0000/00/00 v\number\uptexversion
                 \ifx\uptexrevision\undefined \u \else\uptexrevision\fi}%
            }%
        \else
            \edef\snapshotApplication{%
                {eupTeX}\space\space
                {0000/00/00 v\number\uptexversion
                 \ifx\uptexrevision\undefined \u \else\uptexrevision\fi
                 --\number\epTeXversion}%
            }%
        \fi
    \fi
\fi

\ifx\snapshotApplication\@empty
    \ifx\XeTeXversion\@@undefined\else
        \edef\snapshotApplication{%
            {XeTeX}\space\space\space
            {0000/00/00 v\number\XeTeXversion
             \ifx\XeTeXrevision\undefined\else\XeTeXrevision\fi}%
        }%
    \fi
\fi

\ifx\snapshotApplication\@empty
    \ifx\luatexversion\@@undefined\else
        \begingroup
            \@tempcnta\luatexversion
            \divide\@tempcnta by 100
            \edef\@tempa{\the\@tempcnta}%
            \multiply\@tempcnta by 100
            \@tempcntb\luatexversion
            \advance\@tempcntb by -\@tempcnta
            \edef\@tempa{\@tempa.\the\@tempcntb.\luatexrevision}%
            \xdef\snapshotApplication{%
                {luaTeX}\space\space
                {0000/00/00 v\@tempa}%
            }%
        \endgroup
    \fi
\fi

\ifx\snapshotApplication\@empty
    \ifx\pdftexversion\@@undefined \else
        \begingroup
            \ifx\eTeXversion\@@undefined
                \@tempswafalse
            \else
                \@tempswatrue
            \fi
            \@tempcnta\pdftexversion
            \divide\@tempcnta by 100
            \edef\@tempa{\the\@tempcnta}%
            \multiply\@tempcnta by 100
            \@tempcntb\pdftexversion
            \advance\@tempcntb by -\@tempcnta
            \ifnum\@tempcntb > 39
                \@tempswafalse
            \fi
            \edef\@tempa{\@tempa.\the\@tempcntb.\pdftexrevision}%
            \xdef\snapshotApplication{%
                \if@tempswa
                    {pdfeTeX}\space
                \else
                    {pdfTeX}\space\space
                \fi
                {0000/00/00 v\@tempa}%
            }%
        \endgroup
    \fi
\fi

\ifx\snapshotApplication\@empty
    \ifx\eTeXversion\@@undefined \else
        \edef\snapshotApplication{%
            {eTeX}\space\space\space\space
            {0000/00/00 v\number\eTeXversion
            \ifx\eTeXrevision\undefined
                \ifx\eTeXminorversion\undefined\else.\number\eTeXminorversion\fi
            \else
                \eTeXrevision
            \fi
            }%
        }%
    \fi
\fi
\ifx\snapshotApplication\@empty
    \edef\snapshotApplication{%
        {TeX}\space\space\space\space\space
        {1990/03/25 v3.x}%
    }%
\fi
\def\@fmtextension{fmt}
\def\@tfmextension{tfm}
\edef\snapx@package{.\@pkgextension}
\edef\snapx@class{.\@clsextension}
\edef\snapx@format{.\@fmtextension}
\edef\snapx@tfm{.\@tfmextension}
\long\def\snapx@ignore{}
\let\snapx@application=\snapx@ignore
\let\snapx@file=\@empty
\let\snapx@end\@@end
\expandafter\let\csname snapx@-------\endcsname\snapx@end
\def\snap@store@b#1#2#3#4{%
    \ifx#1\snapx@end
        \@xp\snap@finish
    \else
        \ifx#1\relax \let#1\@empty\fi
        \def\@tempa##1 ##2 ##3\@nil{##1 ##2}%
        \ifx#1\snapx@application
            \@xp\xdef\csname rqv@#3#1\endcsname{\@tempa#4 v?.? ? \relax\@nil}%
        \else
            \xdef\rqv@list{\rqv@list{#3#1}}%
            \@xp\xdef\csname rqv@#3#1\endcsname{\@tempa#4 v?.? ? \relax\@nil}%
            \snap@intest{#3}{#1}%
            \ifx#1\snapx@format \snap@check{#3.fmt}\else
                \edef\@tempa{\@nx\string@equal{snapshot.sty}{#3#1}}%
                \if\@tempa \snap@selfcheck \fi
            \fi
        \fi
    \fi
    \futurelet\@let@token\snap@branch
}

\@onlypreamble\snap@store@b
\def\snap@write{\immediate\write\snap@out}
\let\snap@out\sixt@@n % fallback, probably never used
\DeclareOption{dep}{%
    \def\snap@write{\immediate\write\snap@out}%
}
\DeclareOption{log}{%
    \let\snap@write\typeout
}
\let\snap@intest=\@gobbletwo
\DeclareOption{test}{\def\snap@intest{True}}
\DeclareOption{tfm}{%
    \typeout{Option 'tfm' not implemented yet [1999/09/23]}%
}
\def\snap@mismatch@warning#1#2#3{\PackageWarningNoLine{#1}{#2}}
\def\snap@mismatch{\snap@mismatch@warning}
\DeclareOption{error}{%
    \def\snap@mismatch{\PackageError}%
    \def\snap@selfcheck{\snap@selfcheck@a}%
    \ifx\snap@select\@empty \let\snap@select\snap@select@all \fi
}
\DeclareOption{warning}{%
    \def\snap@mismatch{\snap@mismatch@warning}%
    \def\snap@selfcheck{\snap@selfcheck@a}%
    \ifx\snap@select\@empty \let\snap@select\snap@select@all \fi
}
\def\snap@select@all#1#2 #3#4 #5\@nil{#1#2 #3#4}
\let\snap@select\@empty
\def\snap@seldate#1#2 #3\@nil{#1#2}%
\def\snap@selversion#1#2 #3{\snap@select@version #3}%
\def\snap@selmajor#1#2 #3{\snap@select@major #3}%
\DeclareOption{date}{\let\snap@select=\snap@seldate}
\def\snap@select@version#1{%
  \ifodd 0#11 \@xp\snap@sva\@xp#1\else\@xp\snap@select@version\fi
}
\def\snap@sva#1.#2 #3\@nil{#1.#2}
\def\snap@select@major#1{%
  \ifodd 0#11 \@xp\snap@svm\@xp#1\else\@xp\snap@select@major\fi
}
\def\snap@svm#1.#2\@nil{#1}
\DeclareOption{version}{\let\snap@select\snap@selversion}
\DeclareOption{major-version}{\let\snap@select\snap@selmajor}
\def\snap@bbinfo{01}
\DeclareOption{bbinfo}{\def\snap@bbinfo{00}}
\let\snap@splitter=?
\AtBeginDocument{%
    \xdef\@filelist{\@filelist\snap@splitter}%
}
\let\snap@selfcheck\@empty
\let\snap@selfcheck@a\@empty
\DeclareOption{self-warning}{%
    \def\snap@selfcheck{%
        \begingroup
            \def\snap@mismatch{\snap@mismatch@warning}%
            \snap@selfcheck@a
        \endgroup
    }
}
\ExecuteOptions{warning}
\ProcessOptions\relax
\edef\snap@restore@extensions{%
    \def\@nx\@pkgextension{\@pkgextension}%
    \def\@nx\@clsextension{\@clsextension}%
}
\def\snap@pad#1#2#3#4#5#6#7#8#9{\snap@pad@a{#1#2#3#4#5#6#7#8#9}}
\def\snap@pad@a#1#2#3#4#5\@nil{\snap@pad@b#1#2#3#4\space\@nil}
\def\snap@pad@b#1\space#2\@nil#3{\def#3{#2}}
\def\snap@trim@version#1#2 #3{#1#2 \snap@trim@b #3}
\def\snap@trim@b#1{\ifodd 0#11 v#1\@xp\snap@trim@c\fi \snap@trim@b}
\def\snap@trim@c#1#2 #3\@nil{#2}
\let\rqv@list=\@empty
\edef\@tempc#1\fmtname{#1\fmtname}\@tempc
\def\@tempa#1,\fmtname.fmt,#2#3\@nil{#2}
\edef\@tempb{\@nx\@tempa,\@filelist,\fmtname.fmt,}

\if ?\@tempb?\@nil
    \edef\@filelist{\fmtname.fmt,\@filelist}%
    \def\@tempc{LaTeX2e}%
    \@xp\edef\csname ver@\fmtname.fmt\endcsname{%
        \fmtversion\space
        v\ifx\@tempc\fmtname 2.e\else ?.?\fi
    }%
\fi
\listfiles
\def\snap@doit#1{%
    \begingroup
        \ifx\delimiter#1\delimiter \else
            \filename@parse{#1}%
            \let\@tempd\@empty
            \ifx\filename@ext\relax
                \def\@tempa{file}\def\@tempb{~~~}%
            \else\ifx\filename@ext\@pkgextension
                \def\@tempa{package}\let\@tempb\@empty
            \else\ifx\filename@ext\@clsextension
                \def\@tempa{class}\def\@tempb{~~}%
            \else\ifx\filename@ext\@fmtextension
                \def\@tempa{format}\def\@tempb{~}%
            \else\ifx\filename@ext\@tfmextension
                \def\@tempa{tfm}\def\@tempb{~~~~}%
            \else
                \def\@tempa{file}%
                \edef\@tempd{.\filename@ext}%
                \def\@tempb{~~~}%
            \fi\fi\fi\fi\fi
            \@xp\let\@xp\@tempe
            \csname ver@\filename@base %
                \ifx\filename@ext\relax\else.\filename@ext\fi\endcsname
            \ifx\@tempe\@empty \let\@tempe\relax \fi
            \edef\@tempe{%
                \ifx\@tempe\relax 0000/00/00 v0.0%
                \else
                    \@xp\@xp\@xp\snap@trim@version\@xp\@tempe\space v0.0 v0.0 \@nil
                \fi
            }%
            \edef\@tempc{\filename@area\filename@base\@tempd}% full file name
            \@xp\snap@pad\@tempc\space~~~~~~~~~~~~~~~~\@nil\@tempd
            \let~\space
            \snap@write{\space\space *{\@tempa}\@tempb{\@tempc}\@tempd{\@tempe}}%
        \fi
        \aftergroup\snap@doit
    \endgroup
}
\def\snap@bracify#1#2,{%
  \ifx\@empty#1\expandafter\@gobble\else {#1#2}\fi \snap@bracify
}
\def\snap@splitter@a{%
    \iffalse{{\fi }}% close current file name, end definition
    \xdef\specific@files{%
        \iffalse}\fi
        \specific@files
        \expandafter\@gobble\string % discard one closing brace
}
\def\snap@fdcheck#1{%
    \ifx\delimiter#1%
        \@xp\@gobble
    \else
        \snap@fda#1\@empty.fd\@empty ?\@nil
    \fi
    \snap@fdcheck
}

\def\snap@fda#1.fd\@empty#2#3\@nil{%
    \if ?#2%
        \xdef\specific@files{\specific@files {#1}}%
    \else
        \xdef\general@files{\general@files {#1.fd}}%
    \fi
}
\let\general@files\@empty
\let\specific@files\@empty
\newcommand{\SpecialInput}[1]{%
    \xdef\specific@files{\specific@files{#1}}%
    \@@input#1\relax
}
\def\@dofilelist{%
    \snap@restore@extensions
    \xdef\general@files{\@xp\snap@bracify \@filelist \@empty,\@empty,}%
    \let\snap@splitter\snap@splitter@a
    \xdef\general@files{\general@files}%
    \let\@tempa\specific@files
    \global\let\specific@files\@empty
    \@xp\snap@fdcheck\@tempa{\delimiter}%
    \ifx\rqv@list\@empty \else
        \rqv@compare@lists
    \fi
    \ifx\snap@write\typeout \else
        \newwrite\snap@out
        \immediate\openout\snap@out=\jobname.dep \relax
    \fi
    \snap@write{\string\RequireVersions\@charlb}%
    \snap@write{\space\space *{application}%
        \snapshotApplication
    }%
    \@xp\snap@doit\general@files{\delimiter\aftergroup\@gobble\@gobble}%
    \ifx\specific@files\@empty \else
        \snap@specific
    \fi
    \snap@write{\@charrb}%
    \ifx\snap@write\typeout \else
        \immediate\closeout\snap@out
        \typeout{Dependency list written on \jobname.dep.}%
    \fi
}
\def\snap@specific{%
    \snap@write{ \space *{-------}{Document-specific files:}{----}}%
    \@xp\snap@doit\specific@files{\delimiter\aftergroup\@gobble\@gobble}%
}
\def\rqv@condense#1{%
    \@xp\ifx\csname ver@#1\endcsname\N \else
        \edef\L{\L{#1}}%
        \@xp\let\csname ver@#1\endcsname=\N
    \fi
    \rqv@condense
}

\def\rqv@condend{\endcsname ?\fi
    \@xp\@xp\@xp\@gobbletwo\csname @xp\iftrue}
\def\rqv@overloaded#1{%
    \snap@mismatch{snapshot}{^^J%
        File #1 loaded though not in \noexpand\RequireVersions list%
    }\@ehc
}
\def\rqv@notloaded#1{%
    \snap@mismatch{snapshot}{^^J%
        File #1 [\csname rqv@#1\endcsname] required but not loaded%
    }\@ehc
}
\def\rqv@set#1{\@xp\let\csname ver@#1\endcsname\N \rqv@set}
\def\rqv@test#1{\csname ver@#1\endcsname{#1}\rqv@test}
\def\rqv@compare@lists{%
    \begingroup
        \def\N{1}%
        \let\L\@empty
        \@xp\rqv@condense\rqv@list\rqv@condend
        \global\let\rqv@list=\L
        \def\N{2}%
        \let\L\@empty
        \@xp\rqv@condense\general@files\rqv@condend
        \global\let\general@files=\L
        \def\T{\@firstoftwo{\endcsname\@empty\@gobbletwo}}%
        \let\N\rqv@overloaded \@xp\rqv@set\general@files \T
        \let\N\@gobble
        \@xp\rqv@set\rqv@list \T
        \@xp\rqv@test\general@files{\endcsname\csname @gobbletwo}%
        \let\N\rqv@notloaded
        \@xp\rqv@set\rqv@list \T
        \let\N\@gobble
        \@xp\rqv@set\general@files \T
        \@xp\rqv@test\rqv@list{\endcsname\csname @gobbletwo}%
    \endgroup
}
\AtBeginDocument{%
    \@ifundefined{ver@amsgen}{}{%
        \@xp\let\csname ver@amsgen.sty\@xp\endcsname
                        \csname ver@amsgen\endcsname
    }%
}
\def\ProvidesFile#1{%
    \def\snap@checker{\snap@check{#1}}%
    \begingroup
        \aftergroup\snap@checker
        \catcode`\ 10
        \ifnum\endlinechar < 256
            \ifnum \endlinechar>\m@ne
                \catcode\endlinechar 10
            \fi
        \fi
        \@makeother\/%
        \@makeother\&%
        \kernel@ifnextchar[{\snap@providesfile{#1}}{\snap@providesfile{#1}[]}%
}
\def\snap@graphic@test#1#2#3\@nil{r\if G#1#2\else X\fi}
\def\snap@providesfile#1[#2]{%
        \wlog{File: #1 #2}%
        \edef\@tempa{#2}%
        \if\@xp\snap@graphic@test\@tempa @@\@nil
            \snap@record@graphic#1\relax #2 (type ??)\@nil
        \else
            \@xp\xdef\csname ver@#1\endcsname{#2}%
        \fi
    \endgroup
}
\def\snap@record@graphic#1\relax #2(type #3)#4\@nil{%
    \expandafter\xdef\csname ver@#1\endcsname{%
        Graphic%
        \if\snap@bbinfo :bb=\Gin@llx/\Gin@lly/\Gin@urx/\Gin@ury\fi
        \space v0.0%
    }%
}
\def\@pr@videpackage [#1]{%
    \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}%
    \ifx\@currext\@clsextension
        \typeout{Document Class: \@gtempa\space#1}%
    \else
        \wlog{Package: \@gtempa\space#1}%
    \fi
    \snap@check{\@currname.\@currext}%
}
\def\snap@selfcheck@a{\snap@check{snapshot.sty}}
\def\@nofmt#1.fmt.#2 {#1 }
\def\snap@mismatch@a#1#2#3{%
    \snap@mismatch{snapshot}{^^J%
        \space\space Required version #2 of \@nofmt#1.fmt. and^^J%
        \space\space provided version #3 do not match%
    }\@ehc
}
\def\snap@compare@versions#1{%
    \begingroup
        \@ifundefined{rqv@#1}{}{%
            \edef\0{\csname rqv@#1\endcsname}%
            \edef\1{\csname ver@#1\endcsname}%
            \edef\1{\@xp\snap@trim@version\1 v0.0 v0.0 \@nil}%
            \edef\@tempa{\@xp\snap@select\0 v0.0 v0.0 \@nil}%
            \edef\@tempb{\@xp\snap@select\1 v0.0 v0.0 \@nil}%
            \ifx\@tempa\@tempb \else
                \edef\@tempd{\@nx\snap@mismatch@a{#1}{\@tempa}{\@tempb}}%
                \@xp\@tempd
            \fi
        }%
    \endgroup
    \snap@test@abort
}
\let\snap@test@abort=\@empty
\ifx\snap@select\@empty
    \let\snap@compare@versions\@gobble
    \let\snap@check\@gobble
\fi
\providecommand{\controldates}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifx\snap@intest\@gobbletwo \endinput \fi
\def\restore@some@catcodes{}
\def\save@some@catcodes{%
    \edef\restore@some@catcodes{%
        \catcode\number`\@=\number\catcode`\@
        \catcode\number`\"=\number\catcode`\"
        \catcode\number`\^=\number\catcode`\^
        \catcode\number`\_=\number\catcode`\_
        \relax
    }%
}
\def\snap@intest#1#2{%
    \message{^^J}%
    \begingroup
        \edef\0{#1#2}%
        \def\9{latex209.def}%
        \ifx\0\9\global\@compatibilitytrue \fi
        \ifx#2\snapx@format
            \def\snap@test@abort{\endgroup}%
        \else
            \edef\N{%
                \noexpand\snap@intest@b{#1#2}%
                    {#1}{\@xp\@gobble#2\@empty}%
                    {\csname rqv@#1#2\endcsname}}%
            \expandafter\endgroup\N
        \fi
}
\def\snap@intest@b#1#2#3#4{%
    \def\@currname{#2}%
    \def\@currext{#3}%
    \begingroup
        \lccode`\/=`\0\relax\lowercase{\endgroup
            \ifnum\snap@seldate#4 00 0\@nil>\z@
                }% matches \lowercase
                \save@some@catcodes
                \@@input #1 \relax
                \restore@some@catcodes
            \else
                \snap@specialtest{#1}{#4}%
            \fi
}
\def\snap@specialtest#1#2{%
    \fake@input{#1}%
}
\def\fake@input#1{%
    \begingroup
        % Ensure that outer \foo or unmatched braces don't trip us up
        \catcode`\\=12
        \catcode`\{=12
        \catcode`\}=12
        \endinput
    \def\G{\@car\endgroup}%
    \expandafter\futurelet\expandafter\?\expandafter\G\@@input#1 \relax\@nil
}
\let\snap@test@abort=\endinput
\let\snap@selfcheck=\@empty
\def\snap@finish{%%
    \endgroup
    \message{^^J}%
    \def\X##1{##1,\X}%
    \edef\@filelist{\@xp\X\rqv@list{\@gobbletwo}}%
    \def\X##1,?{##1}\edef\@filelist{\@xp\X\@filelist ?}%
    \@dofilelist
    \@@end
}
\def\snap@mismatch#1#2#3{}
\renewcommand{\RequireVersions}[2][]{%
    \begingroup
        \makeatletter
        \def\snap@check{\snap@compare@versions}%%
        \let\snapx@tfm=\snap@ignore
        \def\ProvidesLanguage##1{\ProvidesFile{##1.ldf}}%
        \iffalse{\fi \futurelet\@let@token\snap@branch #2}%
    \endgroup
}
\endinput
%%
%% End of file `snapshot.sty'.
