texlive[57600] Master/texmf-dist: l3 (2feb21)

commits+karl at tug.org commits+karl at tug.org
Tue Feb 2 23:16:14 CET 2021


Revision: 57600
          http://tug.org/svn/texlive?view=revision&revision=57600
Author:   karl
Date:     2021-02-02 23:16:13 +0100 (Tue, 02 Feb 2021)
Log Message:
-----------
l3 (2feb21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
    trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3packages/README.md
    trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.ins
    trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.ins
    trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.ins
    trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins
    trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.ins
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def
    trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2018-04-12.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2021-02-02 22:16:13 UTC (rev 57600)
@@ -7,6 +7,11 @@
 
 ## [Unreleased]
 
+## [2021-02-02]
+
+### Added
+- `\c_zero_str`
+
 ## [2021-01-09]
 
 ### Added
@@ -826,7 +831,8 @@
 - Step func­tions have been added for dim vari­ables,
   e.g. `\dim_step_in­line:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2021-01-09...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2021-02-02...HEAD
+[2021-02-02]: https://github.com/latex3/latex3/compare/2021-01-09...2021-02-02
 [2021-01-09]: https://github.com/latex3/latex3/compare/2020-12-07...2021-01-09
 [2020-12-07]: https://github.com/latex3/latex3/compare/2020-12-05...2020-12-07
 [2020-12-05]: https://github.com/latex3/latex3/compare/2020-12-03...2020-12-05

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2021-02-02 22:16:13 UTC (rev 57600)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2021-01-09
+Release 2021-02-02
 
 Overview
 --------
@@ -68,11 +68,11 @@
 Please report specific issues with LaTeX3 code there; more general
 discussion should be directed to the [LaTeX-L list](#Discussion).
 
-The LaTeX3 Project
+The LaTeX Project
 ------------------
 
 Development of LaTeX3 is carried out by
-[The LaTeX3 Project](https://www.latex-project.org/latex3/).
+[The LaTeX Project](https://www.latex-project.org/latex3/).
 
 The development team can be contacted
 by e-mail: <latex-team at latex-project.org>; for general LaTeX3 discussion
@@ -80,6 +80,6 @@
 
 -----
 
-<p>Copyright (C) 1998-2012,2015-2021 The LaTeX3 Project <br />
+<p>Copyright (C) 1998-2012,2015-2021 The LaTeX Project <br />
 <a href="http://latex-project.org/">http://latex-project.org/</a> <br />
 All rights reserved.</p>

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: interfaces3.tex
 
-Copyright (C) 1990-2011,2017-2021 The LaTeX3 Project
+Copyright (C) 1990-2011,2017-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -47,7 +47,7 @@
 
 \title{The \LaTeX3 Interfaces}
 \author{%
- The \LaTeX3 Project\thanks
+ The \LaTeX{} Project\thanks
    {%
      E-mail:
        \href{mailto:latex-team at latex-project.org}
@@ -54,7 +54,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2021-01-09}
+\date{Released 2021-02-02}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -1,4 +1,4 @@
-% Copyright 2019-2020 The LaTeX3 Project
+% Copyright 2019-2021 The LaTeX Project
 
 \providecommand*{\lastissue}{12}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -18,7 +18,7 @@
 
 \section{Welcome to \LaTeX3}
 
-Momentum is again starting to build behind the \LaTeX3 project. For the
+Momentum is again starting to build behind The \LaTeX{} Project. For the
 last few releases of \TeX~Live, the experimental programming foundation for
 \LaTeX3 has been available under the name \package{expl3}. Despite large
 warnings that the code would probably change in the future, we wanted to show
@@ -90,7 +90,7 @@
 these latter two in recent times.) There will also be a version of the
 \package{siunitx} package written in \package{expl3}, in parallel to the
 current \LaTeXe\ version. These developments will provide improvements to
-everyday \LaTeX\ users who haven't even heard of the \LaTeX3 Project.
+everyday \LaTeX\ users who haven't even heard of The \LaTeX{} Project.
 
 Looking towards the long term, \LaTeX3 as a document preparation system needs
 to be written almost from scratch. A high-level user syntax needs to be

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -32,7 +32,7 @@
 cases where the code base has required attention. It has also attracted new
 programmers to using \LaTeX3 ideas, some more than others! Bruno Le Floch has
 over the past few months made many useful contributions to \LaTeX3, and we are
-very pleased that he has recently joined the \LaTeX3 Project.
+very pleased that he has recently joined The \LaTeX{} Project.
 
 Bruno has taken a particular interest in improving the performance and
 reliability of the \pkg{expl3} language. This has already resulted in new
@@ -46,7 +46,7 @@
 Bang' improvements to \LaTeX3. The aim of the Big Bang was to address a number
 of long-standing issues with the \LaTeX3 code base. Development has taken place
 over many years, with the status of some of the resulting code being less
-than clear, even to members of The \LaTeX3 Project! At the same time, different
+than clear, even to members of The \LaTeX{} Project! At the same time, different
 conventions had been applied to different parts of the code, which made reading
 some of the code rather `interesting'. A key part of the Big Bang has been to
 address these issues, cleaning up the existing code and ensuring that the

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -1136,7 +1136,7 @@
 Please contact us via the \texttt{latex-l} mailing list to register your module prefixes and package names; we ask that you avoid using package names that begin with \texttt{l3...}\ since \pkg{expl3} packages use this internally.
 Some authors have started using the package prefix \texttt{lt3...}\ as a way of indicating their package builds on \pkg{expl3} in some way but is not maintained by the \LaTeX3 team.
 
-In the prefix database at present, some thirty package prefixes are registered by fifteen separate individuals (unrelated to the \LaTeX3 project\Dash the number of course grows if you include packages by members of the team).
+In the prefix database at present, some thirty package prefixes are registered by fifteen separate individuals (unrelated to The \LaTeX{} Project\Dash the number of course grows if you include packages by members of the team).
 These packages cover a broad range of functionality:
 \begin{description}
 \item[\ctanpkg{acro}] Interface for creating (classes of) acronyms
@@ -1304,7 +1304,7 @@
 
 The middle layers, however, where the rubber meets the road, are still  at the level of prototypes and ideas (templates, \pkg{ldb}, galley, \pkg{xor} and all the good stuff) that need to be revised and further developed to arrive at a \LaTeX3 environment that can stand on its own and that is to where we want to return in 2014.
 
-An overview on this can be found in the answer to "What can *I* do to help the \LaTeX3 project?"\ on Stack Exchange,\footnote{\url{http://tex.stackexchange.com/questions/45838}}
+An overview on this can be found in the answer to "What can *I* do to help The \LaTeX{} Project?"\ on Stack Exchange,\footnote{\url{http://tex.stackexchange.com/questions/45838}}
 which is reproduced below in slightly abridged form.
 This is of course not the first time that we have discussed such matters, and you can find similar material in other publications such as those at \url{http://latex-project.org}; e.g., the architecture talk given at the TUG 2011 conference.
 
@@ -1315,7 +1315,7 @@
 \end{center}
 
 \newpage
-\section{What can you do for the \LaTeX3 project?}
+\section{What can you do for The \LaTeX{} Project?}
 \textbf{By Frank Mittelbach}
 
 My vision of \LaTeX3 is really a system with multiple layers that provide interfaces for different kinds of roles. These layers are
@@ -1335,7 +1335,7 @@
 \item The Designer (typography and layout)
 \item The Author (content)
 \end{itemize}
-As a consequence the \LaTeX3 Project needs different kinds of help depending on what layer or role we are looking at.
+As a consequence The \LaTeX{} Project needs different kinds of help depending on what layer or role we are looking at.
 
 The "Author" is using, say, list structures by specifying something like \verb"\begin{itemize} \item" in his documents. Or perhaps by writing \Verb|<ul> ... </ul>| or whatever the UI representation offers to him.
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,62 +6,64 @@
 acro,acro,Clemens Niederberger,https://github.com/cgnieder/acro/,https://github.com/cgnieder/acro.git,https://github.com/cgnieder/acro/issues,2013-03-16,2020-04-14,
 akshar,akshar,Vu Van Dung,https://github.com/joulev/akshar,https://github.com/joulev/akshar.git,https://github.com/joulev/akshar/issues,2020-05-27,2020-05-27,
 algobox,algobox,Julien Rivaud,,,,2018-06-13,2018-06-13,
-alignment,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-alloc,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Internal only but reserved
-ampersand,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+alignment,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+alloc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Internal only but reserved
+ampersand,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 apfs,apfontspec,Qing Lee,https://github.com/CTeX-org/apfontspec,https://github.com/CTeX-org/apfontspec.git,https://github.com/CTeX-org/apfontspec/issues,2020-05-17,2020-05-17,
 arch,archaeologie,Lukas C. Bossert,http://www.biblatex-archaeologie.de,https://github.com/LukasCBossert/biblatex-archaeologie.git,https://github.com/LukasCBossert/biblatex-archaeologie/issues,2017-03-24,2017-03-24,
 array,hobby,Andrew Stacey,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby/issues,2013-03-16,2020-10-29,
-atsign,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+atsign,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 avm,langsci-avm,Felix Kopecky,https://ctan.org/pkg/langsci-avm,https://github.com/langsci/langsci-avm,https://github.com/langsci/langsci-avm/issues,2020-03-11,2020-03-11,
-backend,l3backend,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-04,2019-06-04,
-backslash,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+backend,l3backend,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-04,2019-06-04,
+backslash,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 bearwear,bearwear,Ulrike Fischer,https://github.com/u-fischer/bearwear,https://github.com/u-fischer/bearwear,https://github.com/u-fischer/bearwear/issues,2020-04-24,2020-04-24,
-bool,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-box,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+bitset,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-12-26,2020-12-26,
+bool,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+box,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02,
 cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21,
-catcode,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-cctab,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+catcode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+cctab,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 cellprops,cellprops,Julien Rivaud,,,,2018-06-13,2018-06-13,
-char,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+char,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 chemformula,chemformula,Clemens Niederberger,https://github.com/cgnieder/chemformula/,https://github.com/cgnieder/chemformula.git,https://github.com/cgnieder/chemformula/issues,2013-03-16,2020-04-14,
 chemmacros,chemmacros,Clemens Niederberger,https://github.com/cgnieder/chemmacros/,https://github.com/cgnieder/chemmacros.git,https://github.com/cgnieder/chemmacros/issues,2013-03-16,2020-04-14,
 chemnum,chemnum,Clemens Niederberger,https://github.com/cgnieder/chemnum/,https://github.com/cgnieder/chemnum.git,https://github.com/cgnieder/chemnum/issues,2013-03-16,2020-04-14,
-chk,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Currently internal-only but reserved
-circumflex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+chk,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Currently internal-only but reserved
+circumflex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 classics,classics,Eduardo C. Lourenço de Lima,,,,2013-03-16,2013-03-16,
-clist,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-codedoc,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Somewhat experimental: may change
-coffin,"l3kernel,xcoffins",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-colon,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-color,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+clist,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+cmd,ltcmd,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-01-20,
+codedoc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Somewhat experimental: may change
+coffin,"l3kernel,xcoffins",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+colon,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+color,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 conteq,conteq,Joachim Breitner,https://github.com/nomeata/conteq,https://github.com/nomeata/conteq.git,https://github.com/nomeata/conteq/issues,2013-05-26,2013-05-27,
 cookingunits,cooking-units,Ben Vitecek,https://github.com/Vidabe/cooking-units,https://github.com/Vidabe/cooking-units.git,https://github.com/Vidabe/cooking-units/issues,2018-09-26,2018-09-26,
-cs,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+cs,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 csvsim,csvsimple,Thomas F. Sturm,https://github.com/T-F-S/csvsimple,https://github.com/T-F-S/csvsimple.git,https://github.com/T-F-S/csvsimple/issues,2020-02-19,2020-02-19,
 ctex,ctex,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2014-03-08,2014-03-08,
 ctuthesis,ctuthesis,Tom Hejda,https://github.com/tohecz/ctuthesis,https://github.com/tohecz/ctuthesis.git,https://github.com/tohecz/ctuthesis/issues,2015-07-26,2015-07-26,
-debug,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2017-07-15,2017-07-15,
+debug,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2017-07-15,2017-07-15,
 denisbdoc,denisbdoc,Denis Bitouzé,https://github.com/dbitouze/denisbdoc,git@github.com:dbitouze/denisbdoc.git,,2020-05-13,2020-05-13,
 deriv,derivative,Simon Jensen,,,,2019-07-24,2019-07-24,
 diffcoeff,diffcoeff,Andrew Parsloe,,,,2019-08-26,2019-08-26,
-dim,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-document,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
-dollar,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-driver,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+dim,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+document,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
+dollar,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+driver,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 dry,dry,Michiel Helvensteijn,,,,2013-01-18,2013-01-18,
 ducksay,ducksay,Jonathan P. Spratte,https://github.com/Skillmon/ltx_ducksay,git@github.com:Skillmon/ltx_ducksay.git,https://github.com/Skillmon/ltx_ducksay/issues,2019-06-07,2019-06-07,
 duckuments,duckuments,Jonathan P. Spratte,https://github.com/Skillmon/ltx_duckuments,git@github.com:Skillmon/ltx_duckuments.git,https://github.com/Skillmon/ltx_duckuments/issues,2019-06-07,2019-06-07,
-e,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-else,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+e,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+else,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 emoji,emoji,Xiangdong Zeng,https://github.com/stone-zeng/latex-emoji,https://github.com/stone-zeng/latex-emoji.git,https://github.com/stone-zeng/latex-emoji/issues,2020-03-08,2020-03-08,
 emojicite,emojicite,Leon Sixt,https://github.com/berleon/emojicite,https://github.com/berleon/emojicite.git,https://github.com/berleon/emojicite/issues/,2020-04-14,2020-04-20,
-empty,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+empty,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 enotez,enotez,Clemens Niederberger,https://github.com/cgnieder/enotez/,https://github.com/cgnieder/enotez.git,https://github.com/cgnieder/enotez/issues,2013-03-16,2020-04-14,
-etex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-exp,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-expl,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+etex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+exp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+expl,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 exsheets,exsheets,Clemens Niederberger,https://bitbucket.org/cgnieder/exsheets/,git@bitbucket.org:cgnieder/exsheets.git,https://bitbucket.org/cgnieder/exsheets/issues,2013-03-16,2013-03-16,
 extblx,biblatex-ext,Moritz Wemheuer,https://github.com/moewew/biblatex-ext/,https://github.com/moewew/biblatex-ext.git,https://github.com/moewew/biblatex-ext/issues,2020-02-09,2020-02-09,
 exwf,exwrapfig,Takuto Asakura,https://github.com/wtsnjp/exwrapfig,https://github.com/wtsnjp/exwrapfig.git,https://github.com/wtsnjp/exwrapfig/issues,2018-06-07,2018-06-07,
@@ -68,10 +70,10 @@
 fdu,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
 fdudoc,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
 fdulogo,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
-fi,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-file,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-filehook,ltfilehook,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2020-10-01,
-flag,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
+fi,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+file,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+filehook,ltfilehook,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2020-10-01,
+flag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
 fltr,newlfm,Paul Thomson,,,,2013-01-29,2013-01-29,
 fmdug,dashundergaps,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex.git,https://github.com/FrankMittelbach/fmitex/issues,2018-06-24,2018-06-24,
 fmuft,unicodefonttable,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex.git,https://github.com/FrankMittelbach/fmitex/issues,2020-02-17,2020-02-17,
@@ -79,151 +81,151 @@
 fnpct,fnpct,Clemens Niederberger,https://github.com/cgnieder/fnpct/,https://github.com/cgnieder/fnpct.git,https://github.com/cgnieder/fnpct/issues,2013-03-16,2020-04-14,
 fontsizes,fontsizes,Julien Rivaud,,,,,2018-06-13,
 fontspec,fontspec,Will Robertson,https://github.com/wspr/fontspec,https://github.com/wspr/fontspec.git,https://github.com/wspr/fontspec/issues,2013-03-16,2013-03-16,
-fp,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-galley,l3galley,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+fp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+galley,l3galley,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 gatherenum,gatherenum,Julien Rivaud,,,,2018-06-13,2018-06-14,
 getree,genealogytree,Thomas F. Sturm,https://github.com/T-F-S/genealogytree,https://github.com/T-F-S/genealogytree.git,https://github.com/T-F-S/genealogytree/issues,2020-02-19,2020-02-19,
 ghsystem,ghsystem,Clemens Niederberger,https://github.com/cgnieder/ghsystem/,https://github.com/cgnieder/ghsystem.git,https://github.com/cgnieder/ghsystem/issues,2013-03-16,2020-04-14,
 graph,lt3graph,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
-group,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+group,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 gtl,gtl,Bruno Le Floch,https://github.com/blefloch/latex-gtl,https://github.com/blefloch/latex-gtl.git,https://github.com/blefloch/latex-gtl/issues,2015-09-22,2015-09-22,
 gzt,gzt,Denis Bitouzé,https://github.com/dbitouze/gzt,git@github.com:dbitouze/gzt.git,,2020-05-13,2020-05-13,
-hash,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-hbox,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-hcoffin,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+hash,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+hbox,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+hcoffin,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 hobete,hobete,Tobias Görlach,http://www.disk0s1.de,,,2012-11-07,2012-11-07,
-hook,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-03,2019-06-03,
-hyp,hyperref,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/hyperref.git,https://github.com/latex3/hyperref/issues,2020-11-27,2020-11-27,
-if,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-inf,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-insert,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-int,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-intarray,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-04-06,2018-04-06,
-ior,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-iow,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+hook,lthooks,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2019-06-03,2021-01-20,
+hyp,hyperref,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/hyperref.git,https://github.com/latex3/hyperref/issues,2020-11-27,2020-11-27,
+if,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+inf,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+insert,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+int,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+intarray,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-04-06,2018-04-06,
+ior,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+iow,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 jiazhu,jiazhu,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2020-05-17,2020-05-17,
-kernel,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-keys,"l3kernel,l3keys2e",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-keyval,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+kernel,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+keys,"l3kernel,l3keys2e",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+keyval,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16,
-left,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,https://github.com/phst/lualatex-math.git,https://github.com/phst/lualatex-math/issues,2012-11-07,2012-11-07,
-log,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-lua,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-luatex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-mark,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-marks,l3kernel/xmarks,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-02-17,2020-02-17,
-math,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-max,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+luatex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+mark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+marks,l3kernel/xmarks,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-02-17,2020-02-17,
+math,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+max,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 mcrule,multicolrule,Karl Hagen,https://github.com/polysyllabic/multicolrule,https://github.com/polysyllabic/multicolrule.git,https://github.com/polysyllabic/multicolrule/issues,2018-12-24,2018-12-24,
 mermap,mercatormap,Thomas F. Sturm,https://github.com/T-F-S/mercatormap,https://github.com/T-F-S/mercatormap.git,https://github.com/T-F-S/mercatormap/issues,2020-02-19,2020-02-19,
 metrix,metrix,Tobias Weh,https://github.com/tweh/metrix,git@github.com:tweh/metrix.git,https://github.com/tweh/metrix/issues,2020-10-31,2019-10-09,
 mhchem,mhchem,Martin Hensel,,,,2014-02-05,2014-02-05,
 minibox,minibox,Will Robertson,,https://github.com/wspr/will2e.git,https://github.com/wspr/will2e/issues,2020-04-24,2020-04-24,
-minus,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+minus,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 mix,media9,Alexander Grahn,,https://gitlab.com/agrahn/media9,https://gitlab.com/agrahn/media9/issues,2013-01-18,2020-04-15,
-mode,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+mode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 morewrites,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
-msg,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+msg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 msvg,media4svg,Alexander Grahn,,https://gitlab.com/agrahn/media4svg,https://gitlab.com/agrahn/media4svg/issues,2020-04-15,2020-04-15,
-muskip,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+muskip,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 namedef,namedef,Phelype Oleinik,https://github.com/PhelypeOleinik/namedef,https://github.com/PhelypeOleinik/namedef.git,https://github.com/PhelypeOleinik/namedef/issues,2020-06-22,2020-06-22,
-nan,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+nan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 nicematrix,nicematrix,François Pantigny,,,,2019-12-19,2019-12-19,
-nil,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-no,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+nil,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+no,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,2012-11-07,2012-11-07,
-novalue,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+novalue,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 nwejm,nwejm,Denis Bitouzé,https://github.com/dbitouze/nwejm,git@github.com:dbitouze/nwejm.git,,2020-05-13,2020-05-13,
 ocgbase,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
 ocgxii,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
-one,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-or,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+one,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+or,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 overleaf,overleaf,Overleaf,https://www.overleaf.com/about,,support+tex-dev@overleaf.com,2020-05-27,2020-05-27,
-parameter,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+parameter,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 pbs,media9,Alexander Grahn,,https://gitlab.com/agrahn/media9,https://gitlab.com/agrahn/media9/issues,2016-02-26,2020-04-15,
-pdf,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
-pdfmanagement,l3pdfmanagement,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-11-27,2020-11-27,
+pdf,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
+pdfmanagement,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-11-27,2020-11-27,
 pdfoverlay,pdfoverlay,David Purton,https://github.com/dcpurton/pdfoverlay,https://github.com/dcpurton/pdfoverlay.git,https://github.com/dcpurton/pdfoverlay/issues,2020-06-22,2020-06-22,
-pdftex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-peek,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-percent,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+pdftex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+peek,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+percent,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 pgf,pgf,The PGF/TikZ Team,https://pgf-tikz.github.io,https://github.com/pgf-tikz/pgf,https://github.com/pgf-tikz/pgf/issues,2020-07-03,2020-07-03,
-pi,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+pi,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 pkgploader,pkgploader,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
 platex,platex,Japanese TeX Development Community,https://github.com/texjporg/platex,https://github.com/texjporg/platex.git,https://github.com/texjporg/platex/issues,2020-09-30,2020-09-30,
 polyglossia,polyglossia,Arthur Reutenauer,https://www.polyglossia.org/,https://github.com/reutenauer/polyglossia,https://github.com/reutenauer/polyglossia/issues,2019-09-03,,
 prelim,prelim2e,Marei Peischl,https://github.com/TeXhackse/prelim2e,https://github.com/TeXhackse/prelim2e.git,https://github.com/TeXhackse/prelim2e/issues,2020-11-24,2020-11-24,
-prg,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+prg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
-prop,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+prop,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24,
-ptex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
+ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
 ptxcd,ptxcd, Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates
 qrbill,qrbill,Marei Peischl,https://github.com/peiTeX/qrbill,https://github.com/peiTeX/qrbill.git,https://github.com/peiTeX/qrbill/issues,2020-06-27,2020-06-27,
-quark,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+quark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 randomwalk,randomwalk,Bruno Le Floch,https://github.com/blefloch/latex-randomwalk,https://github.com/blefloch/latex-randomwalk.git,https://github.com/blefloch/latex-randomwalk/issues,2013-03-16,2015-09-22,
-recursion,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-ref,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-12-24,2020-12-24,
-regex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2018-04-06,
-reverse,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-right,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+recursion,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+ref,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-12-24,2020-12-24,
+regex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2018-04-06,
+reverse,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+right,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 rivbook,rivbook,Julien Rivaud,,,,2018-06-13,2018-06-14,
 rivmath,rivmath,Julien Rivaud,,,,2018-06-13,2018-06-13,
-scan,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+scan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 scontents,scontents,Pablo González,https://github.com/pablgonz/scontents,git@github.com:pablgonz/scontents.git,https://github.com/pablgonz/scontents/issues,2019-12-05,2019-12-05,
 sdaps,sdaps,Benjamin Berg,https://sdaps.org,https://github.com/sdaps/sdaps-class.git,https://github.com/sdaps/sdaps-class/issues,2020-02-17,2020-02-17,
-seq,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-shipout,ltshipout,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2020-10-01,
+seq,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+shipout,ltshipout,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2020-10-01,
 siunitx,siunitx,Joseph Wright,https://github.com/josephwright/siunitx,https://github.com/josephwright/siunitx.git,https://github.com/josephwright/siunitx/issues,2012-11-04,2012-11-04,
 skel,skeldoc,Magnus Lie Hetland,https://github.com/mlhetland/skeldoc.sty,https://github.com/mlhetland/skeldoc.sty.git,https://github.com/mlhetland/skeldoc.sty/issues,2021-01-04,2021-01-04,
-skip,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-sort,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
-space,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+skip,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+sort,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
+space,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,2018-06-25,2018-06-25,
 stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,2014-02-26,2014-02-26,
-stop,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-str,"l3kernel,l3str,l3str-format",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+stop,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+str,"l3kernel,l3str,l3str-format",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 substances,substances,Clemens Niederberger,https://github.com/cgnieder/substances/,https://github.com/cgnieder/substances.git,https://github.com/cgnieder/substances/issues,2013-03-16,2020-04-14,
-sys,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-09-07,2015-09-08,
-tag,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
+sys,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-09-07,2015-09-08,
+tag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
 tasks,tasks,Clemens Niederberger,https://github.com/cgnieder/tasks/,https://github.com/cgnieder/tasks.git,https://github.com/cgnieder/cgnieder/tasks/issues,2013-03-16,2020-04-14,
 tcobox,tcolorbox,Thomas F. Sturm,https://github.com/T-F-S/tcolorbox,https://github.com/T-F-S/tcolorbox.git,https://github.com/T-F-S/tcolorbox/issues,2020-02-19,2020-02-19,
-term,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-text,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15,
+term,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15,
 tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,2018-09-26,2018-09-26,
-tilde,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tl,"l3kernel,l3tl-analysis,l3tl-build",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-tmpa,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tmpb,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-token,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+tilde,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+tl,"l3kernel,l3tl-analysis,l3tl-build",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+tmpa,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+tmpb,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+token,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 twmk,menukeys,Tobias Weh,https://github.com/tweh/menukeys,git@github.com:tweh/menukeys.git,https://github.com/tweh/menukeys/issues,2020-10-31,2020-10-31,“classic” L2 package using only some expl3 code
 ufcombo,combofont,Ulrike Fischer,https://github.com/u-fischer/combofont,https://github.com/u-fischer/combofont,https://github.com/u-fischer/combofont/issues,2020-04-24,2020-04-24,
 ufgrid,returntogrid,Ulrike Fischer,https://github.com/u-fischer/returntogrid,https://github.com/u-fischer/returntogrid,https://github.com/u-fischer/returntogrid/issues,2020-04-24,2020-04-24,
 uftag,tagpdf,Ulrike Fischer,,,,2018-07-15,2018-07-15,
 um,unicode-math,Will Robertson,https://github.com/wspr/unicode-math,https://github.com/wspr/unicode-math.git,https://github.com/wspr/unicode-math/issues,2013-03-16,2013-03-16,
-underscore,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+underscore,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 unravel,unravel,Bruno Le Floch,https://github.com/blefloch/latex-unravel,https://github.com/blefloch/latex-unravel.git,https://github.com/blefloch/latex-unravel/issues,2015-09-22,2015-09-22,
-uptex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
-use,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-utex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
-vbox,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-vcoffin,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+uptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
+use,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+utex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
+vbox,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+vcoffin,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 withargs,withargs,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
 witharrows,witharrows,François Pantigny,,,,2019-12-19,2019-12-19,
 xeCJK,xecjk,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-05-26,2013-05-26,
-xetex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-xfrac,xfrac,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-xparse,xparse,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+xetex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+xfrac,xfrac,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+xparse,xparse,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,2013-03-16,2013-03-16,
 xpeek,xpeek,Joel C. Salomon,,,,2013-03-16,2013-03-16,
 xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
 xsb,xsavebox,Alexander Grahn,,https://gitlab.com/agrahn/xsavebox,https://gitlab.com/agrahn/xsavebox/issues,2016-02-26,2020-04-15,
 xsim,xsim,Clemens Niederberger,https://github.com/cgnieder/xsim/,https://github.com/cgnieder/xsim.git,https://github.com/cgnieder/xsim/issues,2020-04-14,2020-04-14,
-xtemplate,xtemplate,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+xtemplate,xtemplate,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 yoin,yoin,Tom Hejda,https://github.com/tohecz/yoin,https://github.com/tohecz/yoin.git,https://github.com/tohecz/yoin/issues,2016-02-22,2016-02-22,
-zero,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+zero,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 zhlipsum,zhlipsum,Xiangdong Zeng,https://github.com/stone-zeng/zhlipsum,https://github.com/stone-zeng/zhlipsum.git,https://github.com/stone-zeng/zhlipsum/issues,2018-06-14,2018-06-14,
 zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
 zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16,

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File:l3prefixes.tex
 
-Copyright (C) 2019 The LaTeX3 Project
+Copyright (C) 2019,2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: l3styleguide.tex
 
-Copyright (C) 2011,2012,2014-2021 The LaTeX3 Project
+Copyright (C) 2011,2012,2014-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -25,7 +25,7 @@
   The \LaTeX3 kernel: style guide for code authors%
 }
 \author{%
-  The \LaTeX3 Project\thanks
+  The \LaTeX{} Project\thanks
     {%
       E-mail:
       \href{mailto:latex-team at latex-project.org}%
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2021-01-09}
+\date{Released 2021-02-02}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: l3syntax-changes.tex
 
-Copyright (C) 2011,2012,2017-2021 The LaTeX3 Project
+Copyright (C) 2011,2012,2017-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -25,7 +25,7 @@
   Syntax changes in \LaTeX3 functions%
 }
 \author{%
-  The \LaTeX3 Project\thanks
+  The \LaTeX{} Project\thanks
     {%
       E-mail:
       \href{mailto:latex-team at latex-project.org}%
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2021-01-09}
+\date{Released 2021-02-02}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: l3term-glossary.tex
 
-Copyright (C) 2018-2021 The LaTeX3 Project
+Copyright (C) 2018-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -25,7 +25,7 @@
   Glossary of \TeX{} terms used to describe \LaTeX3 functions%
 }
 \author{%
-  The \LaTeX3 Project\thanks
+  The \LaTeX{} Project\thanks
     {%
       E-mail:
       \href{mailto:latex-team at latex-project.org}%
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2021-01-09}
+\date{Released 2021-02-02}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: source3.tex
 
-Copyright (C) 1990-2012,2017-2021 The LaTeX3 Project
+Copyright (C) 1990-2012,2017-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -46,7 +46,7 @@
 
 \title{The \LaTeX3 Sources}
 \author{%
- The \LaTeX3 Project\thanks
+ The \LaTeX{} Project\thanks
    {%
      E-mail:
        \href{mailto:latex-team at latex-project.org}
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2021-01-09}
+\date{Released 2021-02-02}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: source3body.tex
 
-Copyright (C) 1990-2012,2014-2020 The LaTeX3 Project
+Copyright (C) 1990-2012,2014-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2021-02-02 22:16:13 UTC (rev 57600)
@@ -7,6 +7,12 @@
 
 ## [Unreleased]
 
+## [2021-02-02]
+
+### Changed
+- Freeze the `xparse` code, and move the development to the LaTeX2e
+  repository as `ltcmd`.
+
 ## [2020-10-27]
 
 ### Changed
@@ -113,7 +119,8 @@
 - Switch to ISO date format
 - Improve cross-module use of internal functions
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-27...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2021-02-02...HEAD
+[2021-02-02]: https://github.com/latex3/latex3/compare/2020-10-27...2021-02-02
 [2020-10-27]: https://github.com/latex3/latex3/compare/2020-10-05...2020-10-27
 [2020-10-05]: https://github.com/latex3/latex3/compare/2020-05-15...2020-10-05
 [2020-05-15]: https://github.com/latex3/latex3/compare/2020-05-14...2020-05-15

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2021-02-02 22:16:13 UTC (rev 57600)
@@ -1,7 +1,7 @@
 LaTeX3 High-Level Concepts
 ==========================
 
-Release 2020-10-27
+Release 2021-02-02
 
 Overview
 --------
@@ -8,7 +8,7 @@
 
 The `l3packages` collection contains implementations for aspects of the
 LaTeX3 kernel, dealing with higher-level ideas such as the Designer Interface.
-The packages here are considered broadly stable (The LaTeX3 Project does not
+The packages here are considered broadly stable (The LaTeX Project does not
 expect the interfaces to alter radically). These packages are build on LaTeX2e
 conventions at the interface level, and so may not migrate in the current form
 to a stand-alone LaTeX3 format.
@@ -51,7 +51,7 @@
 demonstration of the power of the template concept and also a useful addition
 to the available functionality in LaTeX2e.
 
-`xparse`
+`xparse` (deprecated)
 -------
 
 The `xparse` package provides a high-level interface for declaring document
@@ -58,6 +58,11 @@
 commands, e.g., a uniform way to define commands taking optional arguments,
 optional stars (and others), mandatory arguments and more.
 
+The development of `xparse` moved to the
+[LaTeX2e repository](https://github.com/latex3/latex2e) as `ltcmd`, which is
+preloaded in the LaTeX format, and the code for `xparse` in this repository
+contains only the deprecated argument types `G`, `l`, and `u`.
+
 `xtemplate`
 -----------
 
@@ -90,11 +95,11 @@
 Please report specific issues with LaTeX3 code there; more general
 discussion should be directed to the [LaTeX-L list](#Discussion).
 
-The LaTeX3 Project
+The LaTeX Project
 ------------------
 
 Development of LaTeX3 is carried out by
-[The LaTeX3 Project](https://www.latex-project.org/latex3/).
+[The LaTeX Project](https://www.latex-project.org/latex3/).
 
 The development team can be contacted
 by e-mail: <latex-team at latex-project.org>; for general LaTeX3 discussion
@@ -102,6 +107,6 @@
 
 -----
 
-<p>Copyright (C) 1998-2012,2015-2020 The LaTeX3 Project <br />
+<p>Copyright (C) 1998-2012,2015-2021 The LaTeX Project <br />
 <a href="http://latex-project.org/">http://latex-project.org/</a> <br />
 All rights reserved.</p>

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: expl3.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2021-01-09}%
+\def\ExplFileDate{2021-02-02}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -43,7 +43,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -74,13 +74,13 @@
 %     arguments.
 % \end{itemize}
 % This system is being used as the basis for \TeX{} programming within
-% the \LaTeX3 project. Note that the language is not intended for either
+% The \LaTeX{} Project. Note that the language is not intended for either
 % document mark-up or style specification. Instead, it is intended that
 % such features will be built on top of the conventions described here.
 %
 % This document is an introduction to the ideas behind the \pkg{expl3}
 % programming interface. For the complete documentation of the programming
-% layer provided by the \LaTeX3 Project, see the accompanying
+% layer provided by The \LaTeX{} Project, see the accompanying
 % \texttt{interface3} document.
 %
 % \end{abstract}
@@ -1006,9 +1006,9 @@
 % primitives. In particular, third-party authors may significantly
 % extend the primitive coverage requirements.
 %
-% \section{The \LaTeX3 Project}
+% \section{The \LaTeX{} Project}
 %
-% Development of \LaTeX3 is carried out by The \LaTeX3 Project:
+% Development of \LaTeX3 is carried out by The \LaTeX{} Project:
 % \url{https://www.latex-project.org/latex3/}.
 %
 % \begin{thebibliography}{1}
@@ -1030,7 +1030,7 @@
 %
 %   \bibitem{tub:MR97-1}
 %     Frank Mittelbach and Chris Rowley.
-%     \newblock \enquote{The \LaTeX3 Project}.
+%     \newblock \enquote{The \LaTeX{} Project}.
 %     \newblock \emph{TUGboat},
 %     Vol.\,18, No.\,3, pp.\,195--198, 1997.
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File l3.ins
 
-Copyright (C) 2011,2012,2014-2021 The LaTeX3 Project
+Copyright (C) 2011,2012,2014-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 
 \preamble
 
-Copyright (C) 1990-2021 The LaTeX3 Project
+Copyright (C) 1990-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -151,7 +151,7 @@
 \def\MetaPrefix{--}
 \preamble
 
-Copyright (C) 1990-2021 The LaTeX3 Project
+Copyright (C) 1990-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3basics.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -1293,7 +1293,7 @@
 %   \end{texnote}
 % \end{function}
 %
-% \subsection{Debugging support}
+% \section{Debugging support}
 %
 % \begin{function}[added = 2017-07-16, updated = 2017-08-02]{\debug_on:n, \debug_off:n}
 %   \begin{syntax}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3bootstrap.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3box.dtx
 %
-% Copyright (C) 2005-2021 The LaTeX3 Project
+% Copyright (C) 2005-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3candidates.dtx
 %
-% Copyright (C) 2012-2021 The LaTeX3 Project
+% Copyright (C) 2012-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3cctab.dtx
 %
-% Copyright (C) 2018-2021 The LaTeX3 Project
+% Copyright (C) 2018-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,8 +2,8 @@
 %
 %% File: l3clist.dtx
 %
-% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project
-%           (C) 2012-2021 The LaTeX3 Project
+% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
+%           (C) 2012-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3coffins.dtx
 %
-% Copyright (C) 2010-2021 The LaTeX3 Project
+% Copyright (C) 2010-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3color-base.dtx
 %
-% Copyright (C) 2011,2012,2014,2016-2021 The LaTeX3 Project
+% Copyright (C) 2011,2012,2014,2016-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3debug.dtx
 %
-% Copyright (C) 2019-2021 The LaTeX3 Project
+% Copyright (C) 2019-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3deprecation.dtx
 %
-% Copyright (C) 2017-2021 The LaTeX3 Project
+% Copyright (C) 2017-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3doc.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
 \askforoverwritefalse
 \preamble
 
-Copyright (C) 1990-2021 The LaTeX3 Project
+Copyright (C) 1990-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -79,7 +79,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File l3dosctrip.dtx
 %
-% Copyright (C) 2012,2014-2021 The LaTeX3 Project
+% Copyright (C) 2012,2014-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -55,7 +55,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3expan.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3file.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -548,7 +548,7 @@
 %   The maximum number of characters in a line to be written
 %   by the \cs{iow_wrap:nnnN}
 %   function. This value depends on the \TeX{} system in use: the standard
-%   value is $78$, which is typically correct for unmodified \TeX{}live
+%   value is $78$, which is typically correct for unmodified \TeX{} Live
 %   and \hologo{MiKTeX} systems.
 % \end{variable}
 %
@@ -771,7 +771,7 @@
 %     \cs{file_get_mdfive_hash:nN} \Arg{file name} \meta{tl var}
 %   \end{syntax}
 %   Sets the \meta{tl var} to the result of applying
-%   \cs{file_mdfive_hash:n} to the \meta{file}. If the file is not found, 
+%   \cs{file_mdfive_hash:n} to the \meta{file}. If the file is not found,
 %   the \meta{tl var} will be set to \cs{q_no_value}.
 % \end{function}
 %
@@ -791,7 +791,7 @@
 %     \cs{file_get_size:nN} \Arg{file name} \meta{tl var}
 %   \end{syntax}
 %   Sets the \meta{tl var} to the result of applying
-%   \cs{file_size:n} to the \meta{file}. If the file is not found, 
+%   \cs{file_size:n} to the \meta{file}. If the file is not found,
 %   the \meta{tl var} will be set to \cs{q_no_value}.
 %   This is not available in older versions of \XeTeX{}.
 % \end{function}
@@ -817,7 +817,7 @@
 %     \cs{file_get_timestamp:nN} \Arg{file name} \meta{tl var}
 %   \end{syntax}
 %   Sets the \meta{tl var} to the result of applying
-%   \cs{file_timestamp:n} to the \meta{file}. If the file is not found, 
+%   \cs{file_timestamp:n} to the \meta{file}. If the file is not found,
 %   the \meta{tl var} will be set to \cs{q_no_value}.
 %   This is not available in older versions of \XeTeX{}.
 % \end{function}
@@ -1647,7 +1647,7 @@
 %   This is the \enquote{raw} number of characters in a line which
 %   can be written to the terminal.
 %   The standard value is the line length typically used by
-%   \TeX{}Live and \hologo{MiKTeX}.
+%   \TeX{} Live and \hologo{MiKTeX}.
 %    \begin{macrocode}
 \int_new:N  \l_iow_line_count_int
 \int_set:Nn \l_iow_line_count_int { 78 }
@@ -2488,10 +2488,10 @@
   }
 \cs_new:Npx \__kernel_file_name_expand_group:nw #1
   {
-    \c_left_brace_str 
+    \c_left_brace_str
     \exp_not:N \__kernel_file_name_expand_loop:w
      #1
-     \c_right_brace_str 
+     \c_right_brace_str
   }
 \exp_last_unbraced:NNo
   \cs_new:Npx \__kernel_file_name_expand_space:w \c_space_tl
@@ -2527,7 +2527,7 @@
 %   Spaces need to be trimmed from the start of the name and from the end of
 %   any extension. However, the name we are passed might not have an extension:
 %   that means we have to look for one. If there is no extension, we still use
-%   the standard trimming function but deliberately prevent any spaces being 
+%   the standard trimming function but deliberately prevent any spaces being
 %   removed at the end.
 %    \begin{macrocode}
 \cs_new:Npn \__kernel_file_name_trim_spaces:n #1
@@ -3040,7 +3040,7 @@
 \cs_new_protected:Npn \file_get_hex_dump:nnnN #1#2#3#4
   {
     \file_get_hex_dump:nnnNF {#1} {#2} {#3} #4
-      { \tl_set:Nn #4 { \q_no_value } } 
+      { \tl_set:Nn #4 { \q_no_value } }
   }
 \prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4
   { T , F , TF }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3flag.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-assign.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-assign} package\\
 %   Floating point expressions}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-aux.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-basics.dtx
 %
-% Copyright (C) 2011-2014,2016-2021 The LaTeX3 Project
+% Copyright (C) 2011-2014,2016-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-basics} package\\
 %   Floating point arithmetic}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-convert.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-expo.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-expo} package\\
 %   Floating point exponential-related functions}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-extended.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-extended} package\\
 %   Manipulating numbers with extended precision, for internal use}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-logic.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-logic} package\\
 %   Floating point conditionals}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-parse.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-parse} package\\
 %   Floating point expression parsing}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-random.dtx
 %
-% Copyright (C) 2016-2021 The LaTeX3 Project
+% Copyright (C) 2016-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-random} package\\
 %   Floating point random numbers}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-round.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-traps.dtx
 %
-% Copyright (C) 2011-2014,2016-2021 The LaTeX3 Project
+% Copyright (C) 2011-2014,2016-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-traps} package\\
 %   Trapping floating-point exceptions}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-trig.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -33,7 +33,7 @@
 % \title{The \textsf{l3fp-trig} package\\
 %   Floating point trigonometric functions}
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -41,7 +41,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3fparray.dtx
 %
-% Copyright (C) 2018-2021 The LaTeX3 Project
+% Copyright (C) 2018-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3int.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -919,7 +919,7 @@
 %   code and so should only be used for short-term storage.
 % \end{variable}
 %
-% \subsection{Direct number expansion}
+% \section{Direct number expansion}
 %
 % \begin{function}[EXP, added = 2018-03-27]{\int_value:w}
 %   \begin{syntax}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3intarray.dtx
 %
-% Copyright (C) 2017-2021 The LaTeX3 Project
+% Copyright (C) 2017-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -157,7 +157,7 @@
 %
 % While \LuaTeX{}'s memory is extensible, other engines can
 % \enquote{only} deal with a bit less than $4\times 10^6$ entries in all
-% \tn{fontdimen} arrays combined (with default \TeX{}Live settings).
+% \tn{fontdimen} arrays combined (with default \TeX{} Live settings).
 %
 % \end{documentation}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3kernel-functions.dtx
 %
-% Copyright (C) 2018-2021 The LaTeX3 Project
+% Copyright (C) 2018-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3keys.dtx
 %
-% Copyright (C) 2006-2021 The LaTeX3 Project
+% Copyright (C) 2006-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3legacy.dtx
 %
-% Copyright (C) 2019-2021 The LaTeX3 Project
+% Copyright (C) 2019-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3luatex.dtx
 %
-% Copyright (C) 2010-2021 The LaTeX3 Project
+% Copyright (C) 2010-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3msg.dtx
 %
-% Copyright (C) 2009-2021 The LaTeX3 Project
+% Copyright (C) 2009-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3names.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3prg.dtx
 %
-% Copyright (C) 2005-2021 The LaTeX3 Project
+% Copyright (C) 2005-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -353,6 +353,8 @@
 %   check that the \meta{boolean} really is a boolean variable.
 % \end{function}
 %
+% \subsection{Scratch booleans}
+%
 % \begin{variable}{\l_tmpa_bool, \l_tmpb_bool}
 %   A scratch boolean for local assignment. It is never used by
 %   the kernel code, and so is safe for use with any \LaTeX3-defined

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3prop.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3quark.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -260,7 +260,7 @@
 %   \cs[no-index]{\meta{type}_map_break:}.
 % \end{function}
 %
-% \section{An example of recursion with quarks}
+% \subsection{An example of recursion with quarks}
 % \label{sec:l3quark:quark-example}
 %
 % Quarks are mainly used internally in the \pkg{expl3} code to define

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3regex.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3seq.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,8 +2,8 @@
 %
 %% File: l3skip.dtx
 %
-% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project
-%           (C) 2012-2021 The LaTeX3 Project
+% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
+%           (C) 2012-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File l3sort.dtx
 %
-% Copyright (C) 2012-2021 The LaTeX3 Project
+% Copyright (C) 2012-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3str-convert.dtx
 %
-% Copyright (C) 2013-2021 The LaTeX3 Project
+% Copyright (C) 2013-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3str.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -815,7 +815,7 @@
 %
 % \section{Constant token lists}
 %
-% \begin{variable}[added = 2015-09-19]
+% \begin{variable}[added = 2015-09-19,updated=2020-12-22]
 %   {
 %     \c_ampersand_str,
 %     \c_atsign_str,
@@ -828,7 +828,8 @@
 %     \c_hash_str,
 %     \c_percent_str,
 %     \c_tilde_str,
-%     \c_underscore_str
+%     \c_underscore_str,
+%     \c_zero_str
 %   }
 %   Constant strings, containing a single character token, with category
 %   code $12$.
@@ -1943,7 +1944,8 @@
 %     \c_hash_str,
 %     \c_percent_str,
 %     \c_tilde_str,
-%     \c_underscore_str
+%     \c_underscore_str,
+%     \c_zero_str
 %   }
 %   For all of those strings, use \cs{cs_to_str:N} to get characters with
 %   the correct category code without worries
@@ -1960,6 +1962,7 @@
 \str_const:Nx \c_percent_str     { \cs_to_str:N \% }
 \str_const:Nx \c_tilde_str       { \cs_to_str:N \~ }
 \str_const:Nx \c_underscore_str  { \cs_to_str:N \_ }
+\str_const:Nx \c_zero_str        { 0 }
 %    \end{macrocode}
 % \end{variable}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3sys.dtx
 %
-% Copyright (C) 2015-2021 The LaTeX3 Project
+% Copyright (C) 2015-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3text-case.dtx
 %
-% Copyright (C) 2020,2021 The LaTeX3 Project
+% Copyright (C) 2020,2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3text-purify.dtx
 %
-% Copyright (C) 2020,2021 The LaTeX3 Project
+% Copyright (C) 2020,2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3text.dtx
 %
-% Copyright (C) 2020,2021 The LaTeX3 Project
+% Copyright (C) 2020,2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3tl-analysis.dtx
 %
-% Copyright (C) 2011-2021 The LaTeX3 Project
+% Copyright (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3tl.dtx
 %
-% Copyright (C) 1990-2021 The LaTeX3 Project
+% Copyright (C) 1990-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -1453,12 +1453,14 @@
   { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
 \cs_new_protected:Npn \tl_gset:Nx #1#2
   { \__kernel_tl_gset:Nx #1 {#2} }
-\cs_generate_variant:Nn \tl_set:Nn  {         NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , cf }
 \cs_generate_variant:Nn \tl_set:Nx  { c }
-\cs_generate_variant:Nn \tl_set:Nn  { c, co , cV , cv , cf }
-\cs_generate_variant:Nn \tl_gset:Nn {         NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:No  { c }
+\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , cf }
 \cs_generate_variant:Nn \tl_gset:Nx { c }
-\cs_generate_variant:Nn \tl_gset:Nn { c, co , cV , cv , cf }
+\cs_generate_variant:Nn \tl_gset:No { c }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3token.dtx
 %
-% Copyright (C) 2005-2021 The LaTeX3 Project
+% Copyright (C) 2005-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -414,7 +414,7 @@
 %   verbatim-like material at the document level as they are not of categories
 %   \meta{letter} (catcode~$11$) or \meta{other} (catcode~$12$). Each entry in
 %   the sequence consists of a single escaped token, for example |\\| for the
-%   backslash or |\{| for an opening brace.^^A \}
+%   backslash or |\{| for an opening brace. ^^A \}
 %   Escaped tokens should be added to the sequence when they are defined for
 %   general document use.
 % \end{variable}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3unicode.dtx
 %
-% Copyright (C) 2018-2021 The LaTeX3 Project
+% Copyright (C) 2018-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2021-01-09}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: l3keys2e.dtx
 %
-% Copyright (C) 2009,2011-2020 The LaTeX3 Project
+% Copyright (C) 2009,2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -54,7 +54,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -62,7 +62,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -139,7 +139,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2020-10-27}{}
+\ProvidesExplPackage{l3keys2e}{2021-02-02}{}
   {LaTeX2e option processing using LaTeX3 keys}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: l3keys2e.ins
 
-Copyright (C) 2009,2011,2012,2016,2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2009,2011,2012,2016,2017,2019-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -23,7 +23,7 @@
 
 \preamble
 
-Copyright (C) 2009-2020 The LaTeX3 Project
+Copyright (C) 2009-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 %
 %% File: xfp.dtx
 %
-% Copyright (C) 2017-2020 The LaTeX3 Project
+% Copyright (C) 2017-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -56,7 +56,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -64,7 +64,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -167,7 +167,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfp}{2020-10-27}{}
+\ProvidesExplPackage{xfp}{2021-02-02}{}
   {L3 Floating point unit}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: xfp.ins
 
-Copyright (C) 2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2017,2019-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -23,7 +23,7 @@
 
 \preamble
 
-Copyright (C) 2017-2020 The LaTeX3 Project
+Copyright (C) 2017-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -3,7 +3,7 @@
 %% File: xfrac.dtx
 % 
 % Copyright (C) 2004,2008-2010 Morten Hoegholm
-%           (C) 2011,2012,2014-2020 The LaTeX3 Project
+%           (C) 2011,2012,2014-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -57,7 +57,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -65,7 +65,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -535,7 +535,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfrac}{2020-10-27}{}
+\ProvidesExplPackage{xfrac}{2021-02-02}{}
   {L3 Experimental split-level fractions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -3,7 +3,7 @@
 File: xfrac.ins
 
 Copyright (C) 2004,2008-2010 Morten Hoegholm
-          (C) 2011,2012,2016,2017,2019,2020 The LaTeX3 Project
+          (C) 2011,2012,2016,2017,2019-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -25,7 +25,7 @@
 \preamble
 
 Copyright (C) 2004,2008-2010 Morten Hoegholm
-          (C) 2011-2020 The LaTeX3 Project
+          (C) 2011-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -3,8 +3,8 @@
 %% File: xparse.dtx
 %
 % Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%           (C) 2004-2008 Frank Mittelbach, The LaTeX3 Project
-%           (C) 2009-2020 The LaTeX3 Project
+%           (C) 2004-2008 Frank Mittelbach, The LaTeX Project
+%           (C) 2009-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -59,7 +59,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -67,7 +67,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -928,7 +928,7 @@
 % \begin{function}{\GetDocumentCommandArgSpec, \GetDocumentEnvironmentArgSpec}
 %   \begin{syntax}
 %     \cs{GetDocumentCommandArgSpec} \meta{function}
-%     \cs{GetDocumentEnvironmentArgSpec} \meta{environment}
+%     \cs{GetDocumentEnvironmentArgSpec} \Arg{environment}
 %   \end{syntax}
 %   These functions transfer the current argument specification for the
 %   requested \meta{function} or \meta{environment} into the token list
@@ -942,7 +942,7 @@
 %   {\ShowDocumentCommandArgSpec,  \ShowDocumentEnvironmentArgSpec}
 %   \begin{syntax}
 %     \cs{ShowDocumentCommandArgSpec} \meta{function}
-%     \cs{ShowDocumentEnvironmentArgSpec} \meta{environment}
+%     \cs{ShowDocumentEnvironmentArgSpec} \Arg{environment}
 %   \end{syntax}
 %   These functions show the current argument specification for the
 %   requested \meta{function} or \meta{environment} at the terminal. If
@@ -970,927 +970,127 @@
 % \section{\pkg{xparse} implementation}
 %
 %    \begin{macrocode}
-%<@@=xparse>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*2ekernel>
-\everyjob\expandafter{\the\everyjob
-  \message{xparse <2020-03-03>}%
-}
-\ExplSyntaxOn
-%</2ekernel>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{xparse}{2020-10-27}{}
-  {L3 Experimental document command parser}
-%    \end{macrocode}
-%
-% \subsection{Package options}
-%
-% \begin{variable}{\l_@@_options_clist}
-% \begin{variable}{\l_@@_log_bool}
-%   Key--value option to log information: done by hand to keep dependencies
-%   down.
-%    \begin{macrocode}
-\clist_new:N \l_@@_options_clist
-\DeclareOption* { \clist_put_right:NV \l_@@_options_clist \CurrentOption }
-\ProcessOptions \relax
-\keys_define:nn { xparse }
-  {
-    log-declarations .bool_set:N = \l_@@_log_bool ,
-    log-declarations .initial:n  = false
-  }
-\keys_set:nV { xparse } \l_@@_options_clist
-\bool_if:NF \l_@@_log_bool
-  { \msg_redirect_module:nnn { LaTeX / xparse } { info } { none } }
-%</package>
-%    \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \subsection{Catcode regime check}
-%
-%    \begin{macrocode}
-%<*core>
-\if_charcode:w xx
-  \cs_gset:Npn \@@_file_end_hook: { }
-\else
-  \ExplSyntaxOn
-  \cs_gset:Npn \@@_file_end_hook: { \ExplSyntaxOff }
-\fi:
-%</core>
-%    \end{macrocode}
-%
-% \subsection{Reload check}
-%
-% A simple reload check.
-%    \begin{macrocode}
-%<*core>
-\cs_if_exist:NT \NewDocumentCommand
-  { \file_input_stop: }
-%</core>
-%    \end{macrocode}
-%
-%  Load the core code. We use \tn{input} here as there can be
-%  an issue if the user has |openin_any = p| with older binaries.
-%    \begin{macrocode}
 %<*2ekernel|package>
-\input xparse-generic.tex ~
-%</2ekernel|package>
 %    \end{macrocode}
 %
-% \subsection{Variables and constants}
-%
 %    \begin{macrocode}
-%<*core>
+%<@@=cmd>
 %    \end{macrocode}
 %
-% \begin{variable}{\l_@@_arg_spec_tl}
-%   Holds the argument specification after normalization of shorthands.
-%    \begin{macrocode}
-\tl_new:N \l_@@_arg_spec_tl
-%    \end{macrocode}
-% \end{variable}
+% This package file, along with the frozen versions in
+% \pkg{xparse-2018-04-12}, \pkg{xparse-2020-10-01}, and
+% |xparse-generic.tex|, is intended to work across different \LaTeX{}
+% releases, respected the minimum \pkg{expl3} version required by
+% \pkg{xparse}.
 %
-% \begin{variable}{\l_@@_args_tl}
-%   Token list variable for grabbed arguments.
-%    \begin{macrocode}
-\tl_new:N \l_@@_args_tl
-%    \end{macrocode}
-% \end{variable}
+% We can't use the \pkg{latexrelease} mechanism with \cs{DeclareRelease}
+% here because cases of rolling forwards or backwards differ, due to the
+% prefix change from |xparse| to |cmd|, so we do our own checks to
+% ensure the right version is loaded.
 %
-% \begin{variable}{\l_@@_args_i_tl, \l_@@_args_ii_tl}
-%   Hold the modified arguments when dealing with default values or
-%   processors.
-%    \begin{macrocode}
-\tl_new:N \l_@@_args_i_tl
-\tl_new:N \l_@@_args_ii_tl
-%    \end{macrocode}
-% \end{variable}
+% All this loading assumes that if \pkg{latexrelease} should be loaded,
+% it is before \pkg{xparse}.  The other way around was not tested at all
+% and is likely to break.
 %
-% \begin{variable}{\l_@@_current_arg_int}
-%   The number of the current argument being set up: this is used to
-%   make sure there are at most 9 arguments, then for creating the
-%   expandable auxiliary functions and knowing how many arguments the
-%   code function should take.
-%    \begin{macrocode}
-\int_new:N \l_@@_current_arg_int
-%    \end{macrocode}
-% \end{variable}
+% In releases prior to 2020-10-01, \cs{NewDocumentCommand} is undefined,
+% so \pkg{xparse} was not loaded, thus we can load the full version from
+% \pkg{xparse-2018-04-12}.  Otherwise we will load only the deprecated
+% argument types from \pkg{xparse-2020-10-01}.  If we're in |2ekernel|
+% mode, it means rolling forward so load only the code code from
+% |xparse-generic.tex|.
 %
-% \begin{variable}{\l_@@_defaults_bool, \l_@@_defaults_tl}
-%   The boolean indicates whether there are any argument with default
-%   value other than |-NoValue-|; the token list holds the code to
-%   determine these default values in terms of other arguments.
+% In |2ekernel| mode we anticipate the definition of two macros to parse
+% dates so that we can compare \cs{fmtdate} properly.
 %    \begin{macrocode}
-\bool_new:N \l_@@_defaults_bool
-\tl_new:N \l_@@_defaults_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_environment_bool}
-%   Generating environments uses the same mechanism as generating functions.
-%   However, full processing of arguments is always needed for environments,
-%   and so the function-generating code needs to know this.
-%   This variable is also used at run time to give correct error messages.
-%    \begin{macrocode}
-\bool_new:N \l_@@_environment_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_environment_str}
-%   Name of the environment, used at definition time and at run time.
-%    \begin{macrocode}
-\str_new:N \l_@@_environment_str
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_expandable_bool}
-%   Used to indicate if an expandable command is begin generated, as this
-%   affects both the acceptable argument types and how they are implemented.
-%    \begin{macrocode}
-\bool_new:N \l_@@_expandable_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_expandable_aux_name_tl}
-%   Used to create pretty-printing names for the auxiliaries: although the
-%   immediate definition does not vary, the full expansion does and so it
-%   does not count as a constant.
-%    \begin{macrocode}
-\tl_new:N \l_@@_expandable_aux_name_tl
-\tl_set:Nn \l_@@_expandable_aux_name_tl
+%<*2ekernel>
+\def\@parse at version#1/#2/#3#4#5\@nil{%
+  \@parse at version@dash#1-#2-#3#4\@nil}
+\def\@parse at version@dash#1-#2-#3#4#5\@nil{%
+  \if\relax#2\relax\else#1\fi#2#3#4 }
+%</2ekernel>
+\ExplSyntaxOn
+\cs_if_free:NTF \NewDocumentCommand
   {
-    \l_@@_function_tl \c_space_tl
-    ( arg~ \int_use:N \l_@@_current_arg_int )
+    \ExplSyntaxOff
+    \ifnum\expandafter
+        \@parse at version\fmtversion//00\@nil <
+        \@parse at version 2020-10-01//00\@nil
+      \RequirePackage{xparse-2018-04-12}
+    \else
+%<2ekernel>      \@@@@input xparse-generic.tex ~
+%<package>      \RequirePackage{xparse-2020-10-01}
+    \fi
+    \file_input_stop:
   }
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_grabber_int}
-%   Used (in exceptional cases) to get unique names for grabbers used by
-%   expandable commands.
 %    \begin{macrocode}
-\int_new:N \g_@@_grabber_int
-%    \end{macrocode}
-% \end{variable}
 %
-% \begin{variable}{\l_@@_fn_tl}
-%   For passing the pre-formed name of the auxiliary to be used as the
-%   parsing function.
-%    \begin{macrocode}
-\tl_new:N \l_@@_fn_tl
+% In case \cs{NewDocumentCommand} is already defined, we're either in
+% \LaTeX{} 2020-10-01 or later.  In the former case, the code loaded in
+% the kernel has the |__xparse| prefix, so we'll load
+% \pkg{xparse-2020-10-01}, otherwise we'll continue in |xparse.sty|,
+% which contains the final remains of \pkg{xparse} with the |__cmd|
+% prefix.  To check that we simply look at an internal command with the
+% |__cmd| prefix.
 %    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_fn_code_tl}
-%   For passing the pre-formed name of the auxiliary that contains the
-%   actual code.
-%    \begin{macrocode}
-\tl_new:N \l_@@_fn_code_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_function_tl}
-%   Holds the control sequence name of the function currently being
-%   defined: used to avoid passing this as an argument and to avoid repeated
-%   use of \cs{cs_to_str:N}.
-%    \begin{macrocode}
-\tl_new:N \l_@@_function_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_grab_expandably_bool}
-%   When defining a non-expandable command, indicates whether the
-%   arguments can all safely be grabbed by expandable grabbers.  This is
-%   to support abuses of \pkg{xparse} that use protected functions
-%   inside csname constructions.
-%    \begin{macrocode}
-\bool_new:N \l_@@_grab_expandably_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_obey_spaces_bool}
-%   For trailing optionals.
-%    \begin{macrocode}
-\bool_new:N \l_@@_obey_spaces_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_last_delimiters_tl}
-%   Holds the delimiters (first tokens) of all optional arguments since
-%   the previous mandatory argument, to warn about cases where it would
-%   be impossible to omit optional arguments completely because the
-%   following mandatory argument has the same delimiter as one of the
-%   optional arguments.
-%    \begin{macrocode}
-\tl_new:N \l_@@_last_delimiters_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_long_bool}
-%   Used to indicate that an argument is long, on a per-argument basis.
-%    \begin{macrocode}
-\bool_new:N \l_@@_long_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_m_args_int}
-%   The number of \texttt{m} arguments: if this is the same as the total
-%   number of arguments, then a short-cut can be taken in the creation of
-%   the grabber code.
-%    \begin{macrocode}
-\int_new:N \l_@@_m_args_int
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_prefixed_bool}
-%   When preparing the signature of non-expandable commands, indicates
-%   that the current argument is affected by a processor or by |+|
-%   (namely is long).
-%    \begin{macrocode}
-\bool_new:N \l_@@_prefixed_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_process_all_tl, \l_@@_process_one_tl, \l_@@_process_some_bool}
-%   When preparing the signature, the processors that will be applied to
-%   a given argument are collected in \cs{l_@@_process_one_tl}, while
-%   \cs{l_@@_process_all_tl} contains processors for all arguments.  The
-%   boolean indicates whether there are any processors (to bypass the
-%   whole endeavour otherwise).
-%    \begin{macrocode}
-\tl_new:N \l_@@_process_all_tl
-\tl_new:N \l_@@_process_one_tl
-\bool_new:N \l_@@_process_some_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_saved_args_tl}
-%   Stores \cs{l_@@_args_tl} to deal with space-trimming of
-%   \texttt{b}-type arguments.
-%    \begin{macrocode}
-\tl_new:N \l_@@_saved_args_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_signature_tl}
-%   Used when constructing the signature (code for argument grabbing) to
-%   hold what will become the implementation of the main function.
-%   When arguments are grabbed (at point of use of the command/environment),
-%   it also stores the code for grabbing the remaining arguments.
-%    \begin{macrocode}
-\tl_new:N \l_@@_signature_tl
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-%   {\l_@@_some_obey_spaces_bool, \l_@@_some_long_bool, \l_@@_some_short_bool}
-%   These flags are set while normalizing the argument specification.
-%   The \texttt{obey_spaces} one is used to detect when |!| is used on
-%   an argument that is not a trailing optional argument.
-%   The other two are used to check whether all short arguments appear
-%   before long arguments: this is needed to grab arguments expandably.
-%   As soon as the first long argument is seen (other than
-%   \texttt{t}-type, whose long status is ignored) the
-%   \texttt{some_long} flag is set.  The \texttt{some_short} flag is
-%   used for expandable commands, to know whether to define a short
-%   auxiliary too.
-%    \begin{macrocode}
-\bool_new:N \l_@@_some_obey_spaces_bool
-\bool_new:N \l_@@_some_long_bool
-\bool_new:N \l_@@_some_short_bool
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_tmp_prop, \l_@@_tmpa_tl, \l_@@_tmpb_tl}
-% \begin{macro}{\@@_tmp:w}
-%   Scratch space.
-%    \begin{macrocode}
-\prop_new:N \l_@@_tmp_prop
-\tl_new:N \l_@@_tmpa_tl
-\tl_new:N \l_@@_tmpb_tl
-\cs_new_eq:NN \@@_tmp:w ?
-%    \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \subsection{Declaring commands and environments}
-%
-% \begin{macro}{\@@_declare_cmd:Nnn, \@@_declare_expandable_cmd:Nnn}
-% \begin{macro}{\@@_declare_cmd_aux:Nnn}
-% \begin{macro}
-%   {\@@_declare_cmd_internal:Nnnn, \@@_declare_cmd_internal:cnxn}
-%   The main functions for creating commands set the appropriate flag then
-%   use the same internal code to do the definition.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd:Nnn
   {
-    \bool_set_false:N \l_@@_expandable_bool
-    \@@_declare_cmd_aux:Nnn
-  }
-\cs_new_protected:Npn \@@_declare_expandable_cmd:Nnn
-  {
-    \bool_set_true:N \l_@@_expandable_bool
-    \@@_declare_cmd_aux:Nnn
-  }
-%    \end{macrocode}
-%  The first stage is to log information, both for the user in the log and
-%  for programmatic use in a property list of all declared commands.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd_aux:Nnn #1#2#3
-  {
-    \cs_if_exist:NTF #1
+    \ExplSyntaxOff
+    \cs_if_exist:NF \@@_start:nNNnnn
       {
-        \__kernel_msg_info:nnxx { xparse } { redefine-command }
-          { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+        \RequirePackage{xparse-2020-10-01}
+        \file_input_stop:
       }
-      {
-        \bool_lazy_or:nnT
-          { \cs_if_exist_p:c { \cs_to_str:N #1 ~ code } }
-          { \cs_if_exist_p:c { \cs_to_str:N #1 ~ defaults } }
-          {
-            \__kernel_msg_warning:nnx { xparse } { unsupported-let }
-              { \token_to_str:N #1 }
-          }
-        \__kernel_msg_info:nnxx { xparse } { define-command }
-          { \token_to_str:N #1 } { \tl_to_str:n {#2} }
-      }
-    \bool_set_false:N \l_@@_environment_bool
-    \@@_declare_cmd_internal:Nnnn #1 {#2} {#3} { }
   }
+\ExplSyntaxOff
 %    \end{macrocode}
-%   At definition time, the variable \cs{l_@@_fn_tl} is only used for error messages.
-%   The real business of defining a document command starts with setting up
-%   the appropriate name, then normalizing the argument specification to get rid of
-%   shorthands.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd_internal:Nnnn #1#2#3#4
-  {
-    \tl_set:Nx \l_@@_function_tl { \cs_to_str:N #1 }
-    \tl_set:Nx \l_@@_fn_tl
-      { \exp_not:c { \l_@@_function_tl \c_space_tl } }
-    \@@_normalize_arg_spec:n {#2}
-    \exp_args:No \@@_prepare_signature:n \l_@@_arg_spec_tl
-    \@@_declare_cmd_code:Nnn #1 {#2} {#3}
-    #4
-    \@@_break_point:n {#2}
-  }
-\cs_generate_variant:Nn \@@_declare_cmd_internal:Nnnn { cnx }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
-% \begin{macro}{\@@_break_point:n}
-%   A marker used to escape from creating a definition if necessary.
 %    \begin{macrocode}
-\cs_new_eq:NN \@@_break_point:n \use_none:n
+%</2ekernel|package>
 %    \end{macrocode}
-% \end{macro}
 %
-% \begin{macro}{\@@_declare_cmd_code:Nnn}
-% \begin{macro}
-%   {\@@_declare_cmd_code_aux:Nnn, \@@_declare_cmd_code_expandable:Nnn}
-%   The appropriate auxiliary is called.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd_code:Nnn
-  {
-    \bool_if:NTF \l_@@_grab_expandably_bool
-      { \@@_declare_cmd_code_expandable:Nnn }
-      { \@@_declare_cmd_code_aux:Nnn }
-   }
-%    \end{macrocode}
-%   Standard functions call \cs{@@_start:nNNnnn}, which receives the
-%   argument specification, an auxiliary used for
-%   grabbing arguments, an auxiliary containing the code, and then the
-%   signature, default arguments, and processors.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd_code_aux:Nnn #1#2#3
-  {
-    \cs_generate_from_arg_count:cNnn
-      { \l_@@_function_tl \c_space_tl code }
-      \cs_set_protected:Npn \l_@@_current_arg_int {#3}
-    \cs_set_protected_nopar:Npx #1
-      {
-        \bool_if:NTF \l_@@_environment_bool
-          {
-            \@@_start_env:nnnnn { \exp_not:n {#2} }
-              { \l_@@_environment_str }
-          }
-          {
-            \@@_start:nNNnnn { \exp_not:n {#2} }
-              \exp_not:c { \l_@@_function_tl \c_space_tl }
-              \exp_not:c { \l_@@_function_tl \c_space_tl code }
-          }
-          { \exp_not:o \l_@@_signature_tl }
-          {
-            \bool_if:NT \l_@@_defaults_bool
-              { \exp_not:o \l_@@_defaults_tl }
-          }
-          {
-            \bool_if:NT \l_@@_process_some_bool
-              { \exp_not:o \l_@@_process_all_tl }
-          }
-      }
-  }
-%    \end{macrocode}
-%   Expandable functions and functions whose arguments can be grabbed
-%   expandably call \cs{@@_start_expandable:nNNNNn}, which receives the
-%   argument specification, four auxiliaries (two for grabbing arguments, one for
-%   the code, and one for default arguments), and finally the signature.
-%   Non-expandable functions that take this branch should nevertheless
-%   be protected, as well as their \texttt{code} function.  They will
-%   only be expanded in contexts such as constructing a csname.
-%   The two grabbers (named after the function with one or two spaces)
-%   are needed when there are both short and long arguments; otherwise
-%   the same grabber is included twice in the definition.  If all
-%   arguments are long or all are short the (only) grabber is defined
-%   correspondingly to be long/short.  Otherwise two grabbers are
-%   defined, one long, one short.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cmd_code_expandable:Nnn #1#2#3
-  {
-    \exp_args:Ncc \cs_generate_from_arg_count:NNnn
-      { \l_@@_function_tl \c_space_tl code }
-      { cs_set \bool_if:NF \l_@@_expandable_bool { _protected } :Npn }
-      \l_@@_current_arg_int {#3}
-    \bool_if:NT \l_@@_defaults_bool
-      {
-        \use:x
-          {
-            \cs_generate_from_arg_count:cNnn
-              { \l_@@_function_tl \c_space_tl defaults }
-              \cs_set:Npn \l_@@_current_arg_int
-              { \exp_not:o \l_@@_defaults_tl }
-          }
-      }
-    \bool_if:NTF \l_@@_expandable_bool
-      { \cs_set_nopar:Npx } { \cs_set_protected_nopar:Npx } #1
-      {
-        \exp_not:N \@@_start_expandable:nNNNNn
-          { \exp_not:n {#2} }
-          \exp_not:c { \l_@@_function_tl \c_space_tl }
-          \exp_not:c
-            {
-              \l_@@_function_tl \c_space_tl
-              \bool_if:NT \l_@@_some_short_bool
-                { \bool_if:NT \l_@@_some_long_bool { \c_space_tl } }
-            }
-          \exp_not:c { \l_@@_function_tl \c_space_tl code }
-          \bool_if:NTF \l_@@_defaults_bool
-            { \exp_not:c { \l_@@_function_tl \c_space_tl defaults } }
-            { ? }
-          { \exp_not:o \l_@@_signature_tl }
-      }
-    \bool_if:NTF \l_@@_some_long_bool
-      {
-        \bool_if:NT \l_@@_some_short_bool
-          {
-            \cs_set_nopar:cpx { \l_@@_function_tl \c_space_tl \c_space_tl }
-              ##1##2 { ##1 {##2} }
-          }
-        \cs_set:cpx
-      }
-      { \cs_set_nopar:cpx }
-          { \l_@@_function_tl \c_space_tl } ##1##2 { ##1 {##2} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
+% In older releases, the prefix was |xparse|, but since the 2021 Spring
+% release of \LaTeXe, the core code is included in the kernel, and this
+% file only holds the deprecated argument specifiers |G|, |l|, and |u|.
+% To match the prefix in the \LaTeXe{} kernel, so that the deprecated
+% types work if |xparse.sty| is loaded, the prefix has changed to |cmd|.
 %
-% \begin{macro}{\@@_declare_env:nnnn}
-% \begin{macro}{\@@_declare_env_internal:nnnn}
-%   The lead-off to creating an environment is much the same as that for
-%   creating a command: issue the appropriate message, store the argument
-%   specification then hand off to an internal function.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_env:nnnn #1#2
-  {
-    \str_set:Nx \l_@@_environment_str {#1}
-    \str_set:Nx \l_@@_environment_str
-      { \tl_trim_spaces:o { \l_@@_environment_str } }
-    \cs_if_exist:cTF { \l_@@_environment_str }
-      {
-        \__kernel_msg_info:nnxx { xparse } { redefine-environment }
-          { \l_@@_environment_str } { \tl_to_str:n {#2} }
-      }
-      {
-        \__kernel_msg_info:nnxx { xparse } { define-environment }
-          { \l_@@_environment_str } { \tl_to_str:n {#2} }
-      }
-    \bool_set_false:N \l_@@_expandable_bool
-    \bool_set_true:N \l_@@_environment_bool
-    \exp_args:NV \@@_declare_env_internal:nnnn
-      \l_@@_environment_str {#2}
-  }
+%<*package>
 %    \end{macrocode}
-%   Creating a document environment requires a few more steps than creating
-%   a single command. In order to pass the arguments of the command to the
-%   end of the function, it is necessary to store the grabbed arguments.
-%   To do that, the function used at the end of the environment has to be
-%   redefined to contain the appropriate information. To minimize the amount
-%   of expansion at point of use, the code here is expanded now as well as
-%   when used.
-%   The last argument of \cs{@@_declare_cmd_internal:Nnnn} is only run
-%   if the definition succeeded.  In package mode this ensures that the
-%   original definition of the environment is not changed if the
-%   definition fails for any reason.  This also avoids an error when
-%   defining the \verb*|end aux | function when the user asks for more
-%   than $9$ arguments.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_env_internal:nnnn #1#2#3#4
-  {
-    \@@_declare_cmd_internal:cnxn { environment~ #1 } {#2}
-      {
-        \cs_set_nopar:Npx \exp_not:c { environment~ #1 ~end~aux }
-          {
-            \exp_not:N \exp_not:N \exp_not:c { environment~ #1~end~aux~ }
-            \exp_not:n { \exp_not:o \l_@@_args_tl }
-          }
-        \exp_not:n {#3}
-      }
-      {
-        \cs_set_nopar:cpx { environment~ #1 ~end }
-          { \exp_not:c { environment~ #1 ~end~aux } }
-        \cs_generate_from_arg_count:cNnn
-          { environment~ #1 ~end~aux~ } \cs_set:Npn
-          \l_@@_current_arg_int {#4}
-        \cs_set_eq:cc {#1}       { environment~ #1 }
-        \cs_set_eq:cc { end #1 } { environment~ #1 ~end }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
 %
-% \subsection{Structure of \pkg{xparse} commands}
-%
-% \begin{macro}{\@@_start_env:nnnnn, \@@_start:nNNnnn}
-%   For error messages that occur during run-time when getting arguments
-%   of environments it is necessary to keep track of the environment
-%   name.  We begin non-expandable commands with a token equal to
-%   \cs{scan_stop:}, whose name gives a reasonable error message if the
-%   command is used inside a csname and protects against
-%   \texttt{f}-expansion.  This is useless for environments since
-%   \cs{begin} is already not expandable.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_start_env:nnnnn #1#2
-  {
-    \cs_if_exist_use:N \conditionally at traceoff
-    \str_set:Nn \l_@@_environment_str {#2}
-    \bool_set_true:N \l_@@_environment_bool
-    \@@_start_aux:ccnnnn
-      { environment~ \l_@@_environment_str \c_space_tl }
-      { environment~ \l_@@_environment_str \c_space_tl code }
-      {#1}
-  }
-\cs_new_protected:Npx \@@_start:nNNnnn #1#2#3
-  {
-    \exp_not:n { \cs_if_exist_use:N \conditionally at traceoff }
-    \exp_not:c { xparse~function~is~not~expandable }
-    \exp_not:n { \bool_set_false:N \l_@@_environment_bool }
-    \exp_not:N \@@_start_aux:NNnnnn
-    #2 #3 {#1}
-  }
+\ProvidesExplPackage{xparse}{2021-02-02}{}
+  {L3 Experimental document command parser}
 %    \end{macrocode}
-% \end{macro}
 %
-% \begin{macro}{\@@_start_aux:NNnnnn, \@@_start_aux:ccnnnn}
-%   This sets up a few variables to minimize the boilerplate code
-%   included in all \pkg{xparse}-defined commands.  It then runs the
-%   grabbers~|#4|.  Again, the argument specification |#1| is only for
-%   diagnostics.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_start_aux:NNnnnn #1#2#3#4#5#6
-  {
-    \tl_clear:N \l_@@_args_tl
-    \tl_set:Nn \l_@@_fn_tl {#1}
-    \tl_set:Nn \l_@@_fn_code_tl {#2}
-    \tl_set:Nn \l_@@_defaults_tl {#5}
-    \tl_set:Nn \l_@@_process_all_tl {#6}
-    #4 \@@_run_code:
-  }
-\cs_generate_variant:Nn \@@_start_aux:NNnnnn { cc }
-%    \end{macrocode}
-% \end{macro}
+% \subsection{Package options}
 %
-% \begin{macro}{\@@_run_code:}
-%   After arguments are grabbed, this function is responsible for
-%   inserting default values, running processors, and finally running
-%   the code.
+% \begin{variable}{\l_@@_options_clist}
+% \begin{variable}{\l_@@_log_bool}
+%   Key--value option to log information: done by hand to keep dependencies
+%   down.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_run_code:
+\clist_new:N \l_@@_options_clist
+\DeclareOption* { \clist_put_right:NV \l_@@_options_clist \CurrentOption }
+\ProcessOptions \relax
+\keys_define:nn { ltcmd }
   {
-    \tl_if_empty:NF \l_@@_defaults_tl { \@@_defaults: }
-    \tl_if_empty:NF \l_@@_process_all_tl { \@@_args_process: }
-    \cs_if_exist_use:N \conditionally at traceon
-    \exp_after:wN \l_@@_fn_code_tl \l_@@_args_tl
+    log-declarations .bool_set:N = \l_@@_log_bool ,
+    log-declarations .initial:n  = false
   }
+\keys_set:nV { ltcmd } \l_@@_options_clist
+\bool_if:NF \l_@@_log_bool
+  { \msg_redirect_module:nnn { LaTeX / ltcmd } { info } { none } }
 %    \end{macrocode}
-% \end{macro}
+% \end{variable}
+% \end{variable}
 %
-% \begin{macro}{\@@_defaults:}
-% \begin{macro}{\@@_defaults_def:, \@@_defaults_def:nn, \@@_defaults_def:nnn}
-% \begin{macro}{\@@_defaults_aux:,  \@@_defaults_error:w}
-%   First construct \cs{@@_tmp:w} (see below) that will receive
-%   the arguments found so far and determine default values for any
-%   missing argument.  Then call it repeatedly until the set of
-%   arguments stabilizes.  Since that could lead to an infinite loop we
-%   only call it up to nine times, the maximal number needed for
-%   stabilization if there is a chain of arguments that depend on each
-%   other.  If that fails to stabilize raise an error.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_defaults:
-  {
-    \@@_defaults_def:
-    \tl_set_eq:NN \l_@@_args_i_tl \l_@@_args_tl
-    \@@_defaults_aux: \@@_defaults_aux: \@@_defaults_aux:
-    \@@_defaults_aux: \@@_defaults_aux: \@@_defaults_aux:
-    \@@_defaults_aux: \@@_defaults_aux: \@@_defaults_aux:
-    \@@_defaults_error:w
-    \q_recursion_stop
-    \tl_set_eq:NN \l_@@_args_tl \l_@@_args_i_tl
-  }
-\cs_new_protected:Npn \@@_defaults_aux:
-  {
-    \tl_set:Nx \l_@@_args_ii_tl
-      { \exp_after:wN \@@_tmp:w \l_@@_args_i_tl }
-    \tl_if_eq:NNT \l_@@_args_ii_tl \l_@@_args_i_tl
-      { \use_none_delimit_by_q_recursion_stop:w }
-    \tl_set_eq:NN \l_@@_args_i_tl \l_@@_args_ii_tl
-  }
-\cs_new_protected:Npn \@@_defaults_error:w \q_recursion_stop
-  {
-    \__kernel_msg_error:nnx { xparse } { loop-in-defaults }
-      { \@@_environment_or_command: }
-  }
-%    \end{macrocode}
-%   To construct \cs{@@_tmp:w}, first go through the arguments
-%   found and the corresponding defaults, building a token list with
-%   |{#|\meta{arg number}|}| for arguments found in the input (whose
-%   default will not be used) and otherwise
-%   |{|\cs{exp_not:n}\Arg{default}|}| for arguments whose default will
-%   be used.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_defaults_def:
-  {
-    \tl_clear:N \l_@@_tmpa_tl
-    \int_zero:N \l_@@_current_arg_int
-    \@@_tl_mapthread_function:NNN \l_@@_args_tl \l_@@_defaults_tl
-      \@@_defaults_def:nn
-    \cs_generate_from_arg_count:NNVo \@@_tmp:w \cs_set:Npn
-      \l_@@_current_arg_int \l_@@_tmpa_tl
-  }
-\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNVo }
-\cs_new_protected:Npn \@@_defaults_def:nn
-  {
-    \int_incr:N \l_@@_current_arg_int
-    \exp_args:NV \@@_defaults_def:nnn \l_@@_current_arg_int
-  }
-\cs_new_protected:Npn \@@_defaults_def:nnn #1#2#3
-  {
-    \tl_put_right:Nx \l_@@_tmpa_tl
-      {
-        {
-          \exp_not:N \exp_not:n
-            {
-              \tl_if_novalue:nTF {#2}
-                { \exp_not:o {#3} }
-                { \exp_not:n { ## #1 } }
-            }
-        }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_args_process:}
-% \begin{macro}{\@@_args_process_loop:nn, \@@_args_process_aux:n}
-%   Loop through arguments (stored in \cs{l_@@_args_tl}) and the
-%   corresponding processors (in \cs{l_@@_process_all_tl})
-%   simultaneously, apply all processors for each argument and store the
-%   result back into \cs{l_@@_args_tl}.  To allow processors to depend
-%   on other arguments, for every processor define a temporary auxiliary
-%   that receives all arguments \cs{l_@@_args_tl}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_args_process:
-  {
-    \tl_clear:N \l_@@_args_ii_tl
-    \@@_tl_mapthread_function:NNN
-      \l_@@_args_tl
-      \l_@@_process_all_tl
-      \@@_args_process_loop:nn
-    \tl_set_eq:NN \l_@@_args_tl \l_@@_args_ii_tl
-  }
-\cs_new_protected:Npn \@@_args_process_loop:nn #1#2
-  {
-    \tl_set:Nn \ProcessedArgument {#1}
-    \tl_if_novalue:nF {#1}
-      { \tl_map_function:nN {#2} \@@_args_process_aux:n }
-    \tl_put_right:No \l_@@_args_ii_tl
-      { \exp_after:wN { \ProcessedArgument } }
-  }
-\cs_new_protected:Npn \@@_args_process_aux:n #1
-  {
-    \cs_generate_from_arg_count:NNnn \@@_tmp:w \cs_set:Npn
-      { \tl_count:N \l_@@_args_tl } {#1}
-    \exp_args:NNNo \exp_after:wN \@@_tmp:w \l_@@_args_tl
-      { \ProcessedArgument }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_start_expandable:nNNNNn}
-%   This is called for all expandable commands.  |#6| is the signature,
-%   responsible for grabbing arguments.  |#5| is used to determine
-%   default values (or is |?| if there are none).  |#4| is the code to run.
-%   |#2|~and~|#3| are functions (named after the command) that grab a single
-%   argument in the input stream (|#3|~is~short).  The argument specification |#1| is
-%   only used by diagnostic functions.
-%    \begin{macrocode}
-\cs_new:Npn \@@_start_expandable:nNNNNn #1#2#3#4#5#6
-  { #6 \@@_end_expandable:NNw #5 #4 \q_@@ #2#3 }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_end_expandable:NNw}
-% \begin{macro}[EXP]{\@@_end_expandable_aux:w}
-% \begin{macro}[EXP]{\@@_end_expandable_aux:nNNNN}
-% \begin{macro}[EXP]{\@@_end_expandable_defaults:nnnNNn}
-% \begin{macro}[EXP]{\@@_end_expandable_defaults:nnw}
-% \begin{macro}[EXP]{\@@_end_expandable_defaults:nw}
-%   Followed by a function |#1| to determine default values (or |?| if
-%   there are no defaults), the code
-%   |#2|, arguments that have been grabbed, then \cs{q_@@} and two generic
-%   grabbers.  The idea to find default values is similar to the
-%   non-expandable case but we cannot define an auxiliary function, so
-%   at every step in the loop we need to go through all arguments
-%   searching for which ones started out as |-NoValue-| and replacing
-%   these by the newly computed values.  In fact we need to keep track
-%   of three versions of all arguments: the original version, the
-%   previous version with default values, and the currently built
-%   version (first argument of \cs{@@_end_expandable_defaults:nnnNNn}).
-%    \begin{macrocode}
-\cs_new:Npn \@@_end_expandable:NNw #1#2
-  { \@@_end_expandable_aux:w #1#2 \prg_do_nothing: }
-\cs_new:Npn \@@_end_expandable_aux:w #1#2#3 \q_@@
-  { \exp_args:No \@@_end_expandable_aux:nNNNN {#3} #1 #2 }
-\cs_new:Npn \@@_end_expandable_aux:nNNNN #1#2#3#4#5
-  {
-    \token_if_eq_charcode:NNT ? #2 { \exp_after:wN \use_iv:nnnn }
-    \@@_end_expandable_defaults:nnnNNn {#1} { } {#1} #2#3
-      { } { } { } { } { } { } { } { } { } { }
-      {
-        \__kernel_msg_expandable_error:nnf
-          { xparse } { loop-in-defaults }
-          { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N #4 } }
-        \use_iv:nnnn
-      }
-    \q_stop
-  }
-\cs_new:Npn \@@_end_expandable_defaults:nnnNNn #1#2#3#4#5#6
-  {
-    #6
-    \str_if_eq:nnTF {#1} {#2}
-      { \use_i_delimit_by_q_stop:nw { #5 #1 } }
-      {
-        \exp_args:No \@@_tl_mapthread_function:nnN
-          { #4 #1 } {#3}
-          \@@_end_expandable_defaults:nnw
-        \@@_end_expandable_defaults:nnnNNn { } {#1} {#3} #4 #5
-      }
-  }
-\cs_new:Npn \@@_end_expandable_defaults:nnw #1#2
-  {
-    \tl_if_novalue:nTF {#2}
-      { \exp_args:No \@@_end_expandable_defaults:nw {#1} }
-      { \@@_end_expandable_defaults:nw {#2} }
-  }
-\cs_new:Npn \@@_end_expandable_defaults:nw
-    #1#2 \@@_end_expandable_defaults:nnnNNn #3
-  { #2 \@@_end_expandable_defaults:nnnNNn { #3 {#1} } }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \subsection{Normalizing the argument specifications}
 %
-% The goal here is to expand aliases and check that the argument
-% specification is valid before the main parsing run.  If it is not
-% valid the entire set up is abandoned to avoid any strange internal
-% errors.  A function is provided for each argument type that will grab
-% any extra data items and call the loop function after performing the
-% following checks and tasks.
-% \begin{itemize}
-%   \item Check that each argument has the correct number of data items
-%     associated with it, and that where a single character is required,
-%     one has actually been supplied.
-%   \item Check that processors and the markers~|+| and~|!| are followed
-%     by an argument for which they make sense, and are not redundant.
-%   \item Check the absence of forbidden types for expandable commands,
-%     namely \texttt{G}/\texttt{v} always, and \texttt{l}/\texttt{u}
-%     after optional arguments (\pkg{xparse} may have inserted braces
-%     due to a failed search for an optional argument).
-%   \item Check that no optional argument is followed by a mandatory
-%     argument with the same delimiter, as otherwise the optional
-%     argument could never be omitted.
-%   \item Keep track in \cs{l_@@_some_long_bool} and
-%     \cs{l_@@_some_short_bool} of whether the command has some
-%     long/short arguments.
-%   \item Keep track in \cs{l_@@_grab_expandably_bool} of whether all
-%     arguments are \texttt{m}/\texttt{l}/\texttt{u} type and short
-%     arguments appear before long ones, in which case they can be
-%     grabbed expandably just as safely as they could be grabbed
-%     nonexpandably.  Regardless of that, arguments of expandable
-%     commands will be grabbed expandably and arguments of environments
-%     will not (because the list of arguments built by non-expandable
-%     grabbing is used to pass them to the end-environment code).
-% \end{itemize}
-% Further checks happen at the end of the loop:
-% \begin{itemize}
-% \item that there are at most $9$ arguments;
-% \item that an expandable command does not end with an optional
-%   argument (this case is detected by using the fact that
-%   \cs{l_@@_last_delimiters_tl} is cleared by every mandatory argument
-%   and filled by every optional argument).
-% \end{itemize}
-%
-% \begin{macro}{\@@_normalize_arg_spec:n}
 % \begin{macro}{\@@_normalize_arg_spec_loop:n}
 %   Loop through the argument specification, calling an auxiliary
 %   specific to each argument type.  If any argument is unknown stop the
 %   definition.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_normalize_arg_spec:n #1
-  {
-    \int_zero:N \l_@@_current_arg_int
-    \tl_clear:N \l_@@_last_delimiters_tl
-    \tl_clear:N \l_@@_arg_spec_tl
-    \bool_set_true:N \l_@@_grab_expandably_bool
-    \bool_set_false:N \l_@@_obey_spaces_bool
-    \bool_set_false:N \l_@@_long_bool
-    \bool_set_false:N \l_@@_some_obey_spaces_bool
-    \bool_set_false:N \l_@@_some_long_bool
-    \bool_set_false:N \l_@@_some_short_bool
-    \@@_normalize_arg_spec_loop:n #1
-      \q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop
-    \int_compare:nNnT \l_@@_current_arg_int > 9
-      {
-        \__kernel_msg_error:nnxx { xparse } { too-many-arguments }
-          { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-        \@@_bad_def:wn
-      }
-    \bool_if:NT \l_@@_expandable_bool
-      {
-        \tl_if_empty:NF \l_@@_last_delimiters_tl
-          {
-            \__kernel_msg_error:nnxx { xparse } { expandable-ending-optional }
-              { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
-            \@@_bad_def:wn
-          }
-      }
-    \bool_if:NT \l_@@_expandable_bool
-      { \bool_set_true:N \l_@@_grab_expandably_bool }
-    \bool_if:NT \l_@@_environment_bool
-      { \bool_set_false:N \l_@@_grab_expandably_bool }
-  }
-\cs_new_protected:Npn \@@_normalize_arg_spec_loop:n #1
-  {
-    \quark_if_recursion_tail_stop:n {#1}
-    \int_incr:N \l_@@_current_arg_int
-    \cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w }
-      {
-        \bool_lazy_any:nTF
-          {
-            { \str_if_eq_p:nn {#1} { G } }
-            { \str_if_eq_p:nn {#1} { g } }
-            { \str_if_eq_p:nn {#1} { l } }
-            { \str_if_eq_p:nn {#1} { u } }
-          }
-          {
-            \__kernel_msg_error:nnxx { xparse } { xparse-argument-type }
-              { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-          }
-          {
-            \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
-              { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-          }
-        \@@_bad_def:wn
-      }
-  }
-%</core>
-%<*package>
 \cs_gset_protected:Npn \@@_normalize_arg_spec_loop:n #1
   {
     \quark_if_recursion_tail_stop:n {#1}
@@ -1897,180 +1097,32 @@
     \int_incr:N \l_@@_current_arg_int
     \cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w }
       {
-        \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
+        \__kernel_msg_error:nnxx { ltcmd } { unknown-argument-type }
           { \@@_environment_or_command: } { \tl_to_str:n {#1} }
         \@@_bad_def:wn
       }
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_normalize_type_d:w,
-%     \@@_normalize_type_e:w,
-%     \@@_normalize_type_g:w,
-%     \@@_normalize_type_o:w,
-%     \@@_normalize_type_O:w,
-%     \@@_normalize_type_r:w,
-%     \@@_normalize_type_s:w,
-%   }
+% \begin{macro}{\@@_normalize_type_g:w}
 %   These argument types are aliases of more general ones, for example
-%   with the default argument |-NoValue-|.  To easily insert that marker
-%   expanded in the definitions we call \cs{@@_tmp:w} with the argument
-%   |-NoValue-|.  For argument types that need additional data, check
-%   that the data is present (not \cs{q_recursion_tail}) before
-%   proceeding.
+%   with the default argument |-NoValue-|.
 %    \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
-  {
-    \cs_new_protected:Npn \@@_normalize_type_d:w ##1##2
-      {
-        \quark_if_recursion_tail_stop_do:nn {##2} { \@@_bad_arg_spec:wn }
-        \@@_normalize_type_D:w {##1} {##2} {#1}
-      }
-    \cs_new_protected:Npn \@@_normalize_type_e:w ##1
-      {
-        \quark_if_recursion_tail_stop_do:nn {##1} { \@@_bad_arg_spec:wn }
-        \@@_normalize_type_E:w {##1} { }
-      }
-    \cs_new_protected:Npn \@@_normalize_type_o:w
-      { \@@_normalize_type_D:w [ ] {#1} }
-    \cs_new_protected:Npn \@@_normalize_type_O:w
-      { \@@_normalize_type_D:w [ ] }
-    \cs_new_protected:Npn \@@_normalize_type_r:w ##1##2
-      {
-        \quark_if_recursion_tail_stop_do:nn {##2} { \@@_bad_arg_spec:wn }
-        \@@_normalize_type_R:w {##1} {##2} {#1}
-      }
-    \cs_new_protected:Npn \@@_normalize_type_s:w
-      { \@@_normalize_type_t:w * }
-  }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-%</core>
-%<*package>
 \cs_new_protected:Npx \@@_normalize_type_g:w
   { \exp_not:N \@@_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_normalize_type_>:w,
-%     \@@_normalize_type_+:w,
-%     \@@_normalize_type_!:w,
-%   }
-%   Check that these prefixes have arguments, namely that the next token
-%   is not \cs{q_recursion_tail}, and remember to leave it after the
-%   looping macro.  Processors are forbidden in expandable commands.
-%   If all is good, store the prefix in the cleaned up
-%   \cs{l_@@_arg_spec_tl}, and decrement the argument number as prefixes
-%   do not correspond to arguments.
-%    \begin{macrocode}
-\cs_new_protected:cpn { @@_normalize_type_>:w } #1#2
-  {
-    \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn }
-    \bool_if:NT \l_@@_expandable_bool
-      {
-        \__kernel_msg_error:nnxx { xparse } { processor-in-expandable }
-          { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
-        \@@_bad_def:wn
-      }
-    \tl_put_right:Nx \l_@@_arg_spec_tl { > { \tl_trim_spaces:n {#1} } }
-    \int_decr:N \l_@@_current_arg_int
-    \bool_set_false:N \l_@@_grab_expandably_bool
-    \@@_normalize_arg_spec_loop:n {#2}
-  }
-\cs_new_protected:cpn { @@_normalize_type_+:w } #1
-  {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
-    \bool_if:NT \l_@@_long_bool
-      {
-        \__kernel_msg_error:nnxx { xparse } { two-markers }
-          { \@@_environment_or_command: } { + }
-        \@@_bad_def:wn
-      }
-    \bool_set_true:N \l_@@_long_bool
-    \int_decr:N \l_@@_current_arg_int
-    \@@_normalize_arg_spec_loop:n {#1}
-  }
-\cs_new_protected:cpn { @@_normalize_type_!:w } #1
-  {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
-    \bool_if:NT \l_@@_obey_spaces_bool
-      {
-        \__kernel_msg_error:nnxx { xparse } { two-markers }
-          { \@@_environment_or_command: } { ! }
-        \@@_bad_def:wn
-      }
-    \bool_set_true:N \l_@@_obey_spaces_bool
-    \bool_set_true:N \l_@@_some_obey_spaces_bool
-    \int_decr:N \l_@@_current_arg_int
-    \@@_normalize_arg_spec_loop:n {#1}
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     \@@_normalize_type_D:w,
-%     \@@_normalize_type_E:w,
-%     \@@_normalize_type_G:w,
-%     \@@_normalize_type_t:w,
-%   }
-% \begin{macro}{\@@_normalize_E_unique_check:w}
+% \begin{macro}{\@@_normalize_type_G:w}
 %   Optional argument types.  Check that all required data is present
 %   (and consists of single characters if applicable) and check for
-%   forbidden types for expandable commands.  For \texttt{E}-type
-%   require that there is at least one embellishment, that each one is a
-%   single character, and that there aren't more optional arguments than
-%   embellishments; also remember that each embellishment counts as one
-%   argument for \cs{l_@@_current_arg_int}.  Then in each case
+%   forbidden types for expandable commands.  Then in each case
 %   store the data in \cs{l_@@_arg_spec_tl}, and
 %   for later checks store in \cs{l_@@_last_delimiters_tl} the tokens
 %   whose presence determines whether there is an optional argument (for
 %   braces store |{}|, seen later as an empty delimiter).
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_normalize_type_D:w #1#2#3
-  {
-    \quark_if_recursion_tail_stop_do:nn {#3} { \@@_bad_arg_spec:wn }
-    \@@_single_token_check:n {#1} \@@_allowed_token_check:N #1
-    \@@_single_token_check:n {#2}
-    \@@_add_arg_spec:n { D #1 #2 {#3} }
-    \tl_put_right:Nn \l_@@_last_delimiters_tl {#1}
-    \bool_set_false:N \l_@@_grab_expandably_bool
-    \@@_normalize_arg_spec_loop:n
-  }
-\cs_new_protected:Npn \@@_normalize_type_E:w #1#2
-  {
-    \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn }
-    \tl_if_blank:nT {#1} { \@@_bad_arg_spec:wn }
-    \tl_map_function:nN {#1} \@@_single_token_check:n
-    \tl_map_function:nN {#1} \@@_allowed_token_check:N
-    \@@_normalize_E_unique_check:w #1 \q_nil \q_stop
-    \int_compare:nNnT { \tl_count:n {#2} } > { \tl_count:n {#1} }
-      { \@@_bad_arg_spec:wn }
-    \@@_add_arg_spec:n { E {#1} {#2} }
-    \tl_put_right:Nn \l_@@_last_delimiters_tl {#1}
-    \bool_set_false:N \l_@@_grab_expandably_bool
-    \int_add:Nn \l_@@_current_arg_int { \tl_count:n {#1} - 1 }
-    \@@_normalize_arg_spec_loop:n
-  }
-\cs_new_protected:Npn \@@_normalize_E_unique_check:w #1#2 \q_stop
-  {
-    \quark_if_nil:NF #1
-      {
-        \tl_if_in:nnT {#2} {#1} { \@@_bad_arg_spec:wn }
-        \@@_normalize_E_unique_check:w #2 \q_stop
-      }
-  }
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_normalize_type_G:w #1
   {
     \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
@@ -2079,46 +1131,16 @@
     \tl_put_right:Nn \l_@@_last_delimiters_tl { { } }
     \@@_normalize_arg_spec_loop:n
   }
-%</package>
-%<*core>
-\cs_new_protected:Npn \@@_normalize_type_t:w #1
-  {
-    \quark_if_recursion_tail_stop_do:Nn #1 { \@@_bad_arg_spec:wn }
-    \@@_single_token_check:n {#1} \@@_allowed_token_check:N #1
-    \tl_put_right:Nx \l_@@_arg_spec_tl
-      {
-        \bool_if:NT \l_@@_obey_spaces_bool { ! }
-        t \exp_not:n {#1}
-      }
-    \tl_put_right:Nn \l_@@_last_delimiters_tl {#1}
-    \bool_set_false:N \l_@@_grab_expandably_bool
-    \bool_set_false:N \l_@@_obey_spaces_bool
-    \bool_set_false:N \l_@@_long_bool
-    \@@_normalize_arg_spec_loop:n
-  }
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_normalize_type_l:w,
-%     \@@_normalize_type_m:w,
-%     \@@_normalize_type_R:w,
-%     \@@_normalize_type_u:w
-%     \@@_normalize_type_v:w
-%   }
+% \begin{macro}{\@@_normalize_type_l:w,\@@_normalize_type_u:w}
 %   Mandatory arguments.  First check the required data is present,
 %   consists of single characters where applicable, and that the argument
-%   type is allowed for expandable commands if applicable.  For the
-%   \texttt{m} and \texttt{R} argument types check that they do not
-%   follow some optional argument with that delimiter as otherwise the
-%   optional argument could not be omitted.  Then save data in
+%   type is allowed for expandable commands if applicable.  Then save data in
 %   \cs{l_@@_arg_spec_tl}, count the mandatory argument, and empty the
 %   list of last delimiters.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_normalize_type_l:w
   {
     \@@_normalize_check_lu:N l
@@ -2125,26 +1147,6 @@
     \@@_add_arg_spec_mandatory:n { l }
     \@@_normalize_arg_spec_loop:n
   }
-%</package>
-%<*core>
-\cs_new_protected:Npn \@@_normalize_type_m:w
-  {
-    \@@_delimiter_check:nnn { } { m } { \iow_char:N \{ }
-    \@@_add_arg_spec_mandatory:n { m }
-    \@@_normalize_arg_spec_loop:n
-  }
-\cs_new_protected:Npn \@@_normalize_type_R:w #1#2#3
-  {
-    \quark_if_recursion_tail_stop_do:nn {#3} { \@@_bad_arg_spec:wn }
-    \@@_single_token_check:n {#1} \@@_allowed_token_check:N #1
-    \@@_single_token_check:n {#2}
-    \@@_delimiter_check:nnn {#1} { R/r } { \tl_to_str:n {#1} }
-    \bool_set_false:N \l_@@_grab_expandably_bool
-    \@@_add_arg_spec_mandatory:n { R #1 #2 {#3} }
-    \@@_normalize_arg_spec_loop:n
-  }
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_normalize_type_u:w #1
   {
     \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
@@ -2152,368 +1154,15 @@
     \@@_add_arg_spec_mandatory:n { u {#1} }
     \@@_normalize_arg_spec_loop:n
   }
-%</package>
-%<*core>
-\cs_new_protected:Npn \@@_normalize_type_v:w
-  {
-    \@@_normalize_check_gv:N v
-    \@@_add_arg_spec_mandatory:n { v }
-    \@@_normalize_arg_spec_loop:n
-  }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_normalize_type_b:w}
-%   This argument type is not allowed for commands.  This is only
-%   allowed at the end of the argument specification, hence we check
-%   that |#1| is the end.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_normalize_type_b:w #1
-  {
-    \bool_if:NF \l_@@_environment_bool
-      {
-        \__kernel_msg_error:nnxx
-          { xparse } { invalid-command-arg }
-          { \@@_environment_or_command: } { b }
-        \@@_bad_def:wn
-      }
-    \tl_clear:N \l_@@_last_delimiters_tl
-    \@@_add_arg_spec:n { b }
-    \quark_if_recursion_tail_stop:n {#1}
-    \__kernel_msg_error:nnxx { xparse } { arg-after-body }
-      { \@@_environment_or_command: }
-      { \tl_to_str:n {#1} }
-    \@@_bad_def:wn
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_single_token_check:n}
-%   Checks that the argument is a single (non-space) token (possibly
-%   surrounded by spaces), and aborts the definition otherwise.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_single_token_check:n #1
-  {
-    \tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nF
-      {
-        \__kernel_msg_error:nnxx { xparse } { not-single-token }
-          { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-        \@@_bad_def:wn
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_allowed_token_check:N}
-%   Some tokens are now allowed as delimiters for some argument types,
-%   notably implicit begin/end-group tokens (|\bgroup|/|\egroup|).
-%   The major problem with these tokens is that for |\peek_...| functions,
-%   a literal~|{|$_1$. is virtually indistinguishable from a |\bgroup| or
-%   other token which was |\let| to a~|{|$_1$, and the same goes
-%   for~|}|$_2$.  All other tokens can be easily distingushed from their
-%   implicit counterparts by grabbing them and looking at the string
-%   length (see \cs{@@_token_if_cs:NTF}), but for begin/end group tokens
-%   that is not possible without the risk of mistakenly grabbing the
-%   entire brace group (potentially leading to a~\texttt{!~Runaway argument}
-%   error) or trying to grab a |}|$_2$, leading to a~\texttt{!~Argument
-%   of~\dots~has an extra~\}}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_allowed_token_check:N #1
-  {
-    \token_if_eq_meaning:NNTF #1 \c_group_begin_token
-        { \use:n }
-        {
-          \token_if_eq_meaning:NNTF #1 \c_group_end_token
-            { \use:n }
-            { \use_none:n }
-        }
-      {
-        \__kernel_msg_error:nnxxx
-          { xparse } { forbidden-implicit-group-token }
-          { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-          {
-            \token_if_eq_meaning:NNTF #1 \c_group_begin_token
-              { begin } { end }
-          }
-        \@@_bad_def:wn
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_normalize_check_gv:N, \@@_normalize_check_lu:N}
-%   Called for arguments that are always forbidden, or forbidden after
-%   an optional argument, for expandable commands.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_normalize_check_gv:N #1
-  {
-    \bool_if:NT \l_@@_expandable_bool
-      {
-        \__kernel_msg_error:nnxx
-          { xparse } { invalid-expandable-argument-type }
-          { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
-        \@@_bad_def:wn
-      }
-    \bool_set_false:N \l_@@_grab_expandably_bool
-  }
-\cs_new_protected:Npn \@@_normalize_check_lu:N #1
-  {
-    \bool_if:NT \l_@@_expandable_bool
-      {
-        \tl_if_empty:NF \l_@@_last_delimiters_tl
-          {
-            \__kernel_msg_error:nnxx
-              { xparse } { invalid-after-optional-expandably }
-              { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
-            \@@_bad_def:wn
-          }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_delimiter_check:nnn}
-%   Called for \texttt{m} and \texttt{R} arguments.  Checks that the
-%   leading token does not coincide with the token denoting the presence
-%   of a previous optional argument.  Instead of dealing with braces for
-%   the \texttt{m}-type we use an empty delimiter to denote that case.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_delimiter_check:nnn #1#2#3
-  {
-    \tl_map_inline:Nn \l_@@_last_delimiters_tl
-      {
-        \tl_if_eq:nnT {##1} {#1}
-          {
-            \__kernel_msg_warning:nnxx { xparse } { optional-mandatory }
-              {#2} {#3}
-          }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_bad_arg_spec:wn, \@@_bad_def:wn}
-%   If the argument specification is wrong, this provides an escape from
-%   the entire definition process.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_bad_arg_spec:wn #1 \@@_break_point:n #2
-  {
-    \__kernel_msg_error:nnxx { xparse } { bad-arg-spec }
-      { \@@_environment_or_command: } { \tl_to_str:n {#2} }
-  }
-\cs_new_protected:Npn \@@_bad_def:wn #1 \@@_break_point:n #2 { }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_arg_spec:n, \@@_add_arg_spec_mandatory:n}
-%   When adding an argument to the argument specification, set the
-%   \texttt{some_long} or \texttt{some_short} booleans as appropriate
-%   and clear the booleans keeping track of |+| and |!| markers.
-%   Before that, test for a short argument following some long
-%   arguments: this is forbidden for expandable commands and prevents
-%   grabbing arguments expandably.
-%
-%   For mandatory arguments do some more work, in particular complain if
-%   they were preceeded by~|!|.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_arg_spec:n #1
-  {
-    \bool_lazy_and:nnT
-      { ! \l_@@_long_bool }
-      { \l_@@_some_long_bool }
-      {
-        \bool_if:NT \l_@@_expandable_bool
-          {
-            \__kernel_msg_error:nnx { xparse } { inconsistent-long }
-              { \iow_char:N \\ \l_@@_function_tl }
-            \@@_bad_def:wn
-          }
-        \bool_set_false:N \l_@@_grab_expandably_bool
-      }
-    \bool_if:NTF \l_@@_long_bool
-      { \bool_set_true:N \l_@@_some_long_bool }
-      { \bool_set_true:N \l_@@_some_short_bool }
-    \tl_put_right:Nx \l_@@_arg_spec_tl
-      {
-        \bool_if:NT \l_@@_long_bool { + }
-        \bool_if:NT \l_@@_obey_spaces_bool { ! }
-        \exp_not:n {#1}
-      }
-    \bool_set_false:N \l_@@_long_bool
-    \bool_set_false:N \l_@@_obey_spaces_bool
-  }
-\cs_new_protected:Npn \@@_add_arg_spec_mandatory:n #1
-  {
-    \bool_if:NT \l_@@_some_obey_spaces_bool
-      {
-        \__kernel_msg_error:nnxx { xparse } { non-trailing-obey-spaces }
-          { \@@_environment_or_command: } { \tl_to_str:n {#1} }
-        \@@_bad_def:wn
-      }
-    \tl_clear:N \l_@@_last_delimiters_tl
-    \@@_add_arg_spec:n {#1}
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Preparing the signature: general mechanism}
-%
-% \begin{macro}{\@@_prepare_signature:n}
-% \begin{macro}{\@@_prepare_signature:N}
-% \begin{macro}{\@@_prepare_signature_bypass:N}
-%   Actually creating the signature uses the same loop approach as
-%   normalizing the signature. There are first a number of variables which need
-%   to be set to track what is going on. Many of these variables are unused
-%   when defining expandable commands.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_prepare_signature:n #1
-  {
-    \int_zero:N \l_@@_current_arg_int
-    \bool_set_false:N \l_@@_long_bool
-    \bool_set_false:N \l_@@_obey_spaces_bool
-    \int_zero:N \l_@@_m_args_int
-    \bool_set_false:N \l_@@_defaults_bool
-    \tl_clear:N \l_@@_defaults_tl
-    \tl_clear:N \l_@@_process_all_tl
-    \tl_clear:N \l_@@_process_one_tl
-    \bool_set_false:N \l_@@_process_some_bool
-    \tl_clear:N \l_@@_signature_tl
-    \@@_prepare_signature:N #1 \q_recursion_tail \q_recursion_stop
-    \bool_if:NF \l_@@_expandable_bool { \@@_flush_m_args: }
-  }
-%    \end{macrocode}
-%  The main looping function does not take an argument, but carries out the
-%  reset on the processor boolean. This is split off from the rest of the
-%  process so that when actually setting up processors the flag-reset can
-%  be bypassed.
-%
-%  For each known argument type there is an appropriate function to actually
-%  do the addition to the signature. These are separate for expandable and
-%  standard functions, as the approaches are different.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_prepare_signature:N
-  {
-    \bool_set_false:N \l_@@_prefixed_bool
-    \@@_prepare_signature_bypass:N
-  }
-\cs_new_protected:Npn \@@_prepare_signature_bypass:N #1
-  {
-    \quark_if_recursion_tail_stop:N #1
-    \use:c
-      {
-         @@_add
-         \bool_if:NT \l_@@_grab_expandably_bool { _expandable }
-         _type_  \token_to_str:N #1 :w
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \subsection{Setting up a standard signature}
 %
-% Each argument-adding function appends to the signature a grabber (and
-% for some types, the delimiters or default value), except the one for
-% \texttt{m} arguments.  These are collected and added to the signature
-% all at once by \cs{@@_flush_m_args:}, called for every other argument
-% type.  All of the functions then call the loop function
-% \cs{@@_prepare_signature:N}.  Default values of arguments are
-% collected by \cs{@@_add_default:n} rather than being stored with the
-% argument; this function and \cs{@@_add_default:} are also responsible
-% for keeping track of \cs{l_@@_current_arg_int}.
-%
-% \begin{macro}{\@@_add_type_+:w}
-%   Making the next argument long means setting the flag. The \texttt{m}
-%   arguments are recorded here as
-%   this has to be done for every case where there is then a long argument.
-%    \begin{macrocode}
-\cs_new_protected:cpn { @@_add_type_+:w }
-  {
-    \@@_flush_m_args:
-    \bool_set_true:N \l_@@_long_bool
-    \bool_set_true:N \l_@@_prefixed_bool
-    \@@_prepare_signature_bypass:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_!:w}
-%   Much the same for controlling trailing optional arguments.
-%    \begin{macrocode}
-\cs_new_protected:cpn { @@_add_type_!:w }
-  {
-    \@@_flush_m_args:
-    \bool_set_true:N \l_@@_obey_spaces_bool
-    \bool_set_true:N \l_@@_prefixed_bool
-    \@@_prepare_signature_bypass:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_>:w}
-%   When a processor is found, the processor code is stored.  It will be
-%   used by \cs{@@_args_process:} once arguments are all found. Here too
-%   the loop calls \cs{@@_prepare_signature_bypass:N} rather than
-%   \cs{@@_prepare_signature:N} so that the flag is not reset.
-%    \begin{macrocode}
-\cs_new_protected:cpn { @@_add_type_>:w } #1
-  {
-    \@@_flush_m_args:
-    \bool_set_true:N \l_@@_prefixed_bool
-    \bool_set_true:N \l_@@_process_some_bool
-    \tl_put_left:Nn \l_@@_process_one_tl { {#1} }
-    \@@_prepare_signature_bypass:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_b:w}
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_b:w
-  {
-    \@@_flush_m_args:
-    \@@_add_default:
-    \@@_add_grabber:N b
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_D:w}
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_D:w #1#2#3
-  {
-    \@@_flush_m_args:
-    \@@_add_default:n {#3}
-    \@@_add_grabber:N D
-    \tl_put_right:Nn \l_@@_signature_tl { #1 #2 }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_E:w}
-%   The \texttt{E}-type argument needs a special handling of default
-%   values.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_E:w #1#2
-  {
-    \@@_flush_m_args:
-    \@@_add_default_E:nn {#1} {#2}
-    \@@_add_grabber:N E
-    \tl_put_right:Nn \l_@@_signature_tl { {#1} }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\@@_add_type_G:w}
 %   For the \texttt{G} type, the grabber and the default are added to the
 %   signature.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_add_type_G:w #1
   {
     \@@_flush_m_args:
@@ -2535,65 +1184,13 @@
     \@@_add_grabber:N l
     \@@_prepare_signature:N
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_add_type_m:w}
-%   The \texttt{m} type is special as short arguments which are not
-%   post-processed are simply counted at this stage. Thus there is a check
-%   to see if either of these cases apply. If so, a one-argument grabber
-%   is added to the signature. On the other hand, if a standard short
-%   argument is required it is simply counted at this stage, to be
-%   added later using \cs{@@_flush_m_args:}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_m:w
-  {
-    \@@_add_default:
-    \bool_if:NTF \l_@@_prefixed_bool
-      { \@@_add_grabber:N m }
-      { \int_incr:N \l_@@_m_args_int }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_R:w}
-%   The \texttt{R}-type argument is very similar to the \texttt{D}-type.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_R:w #1#2#3
-  {
-    \@@_flush_m_args:
-    \@@_add_default:n {#3}
-    \@@_add_grabber:N R
-    \tl_put_right:Nn \l_@@_signature_tl { #1 #2 }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_type_t:w}
-%   Setting up a \texttt{t} argument means collecting one token for the test,
-%   and adding it along with the grabber to the signature.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_t:w #1
-  {
-    \@@_flush_m_args:
-    \@@_add_default:
-    \@@_add_grabber:N t
-    \tl_put_right:Nn \l_@@_signature_tl {#1}
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\@@_add_type_u:w}
 %   At the set up stage, the \texttt{u} type argument is identical to the
 %   \texttt{G} type except for the name of the grabber function.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_add_type_u:w #1
   {
     \@@_flush_m_args:
@@ -2602,282 +1199,25 @@
     \tl_put_right:Nn \l_@@_signature_tl { {#1} }
     \@@_prepare_signature:N
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_add_type_v:w}
-%   At this stage, the \texttt{v} argument is identical to \texttt{l}
-%   except that since the grabber may fail to read a verbatim argument
-%   we need a default value.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_v:w
-  {
-    \@@_flush_m_args:
-    \exp_args:No \@@_add_default:n \c_novalue_tl
-    \@@_add_grabber:N v
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_flush_m_args:}
-%   As \texttt{m} arguments are simply counted, there is a need to add
-%   them to the token register in a block. As this function can only
-%   be called if something other than \texttt{m} turns up, the flag can
-%   be switched here.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_flush_m_args:
-  {
-    \int_compare:nNnT \l_@@_m_args_int > 0
-      {
-        \tl_put_right:Nx \l_@@_signature_tl
-          { \exp_not:c { @@_grab_m_ \int_use:N \l_@@_m_args_int :w } }
-        \tl_put_right:Nx \l_@@_process_all_tl
-          { \prg_replicate:nn { \l_@@_m_args_int } { { } } }
-      }
-    \int_zero:N \l_@@_m_args_int
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_grabber:N}
-%   To keep the various checks needed in one place, adding the grabber
-%   to the signature is done here.  The only questions are whether the
-%   grabber should be long or not, and whether to obey spaces.  The
-%   \cs{l_@@_obey_spaces_bool} boolean can only be \texttt{true} for
-%   trailing optional arguments.  In that case spaces will not be
-%   ignored when looking for that optional argument.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_grabber:N #1
-  {
-    \tl_put_right:Nx \l_@@_signature_tl
-      {
-        \exp_not:c
-          {
-            @@_grab_ #1
-            \bool_if:NT \l_@@_long_bool { _long }
-            \bool_if:NT \l_@@_obey_spaces_bool { _obey_spaces }
-            :w
-          }
-      }
-    \bool_set_false:N \l_@@_long_bool
-    \bool_set_false:N \l_@@_obey_spaces_bool
-    \tl_put_right:Nx \l_@@_process_all_tl
-      { { \exp_not:o \l_@@_process_one_tl } }
-    \tl_clear:N \l_@@_process_one_tl
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_default:n, \@@_add_default:, \@@_add_default_E:nn}
-%   Store the default value of an argument, or rather code that gives
-%   that default value (it may involve other arguments).  This is
-%   \cs{c_novalue_tl} for arguments with no actual default or with
-%   default |-NoValue-|; and (in a brace group) \cs{prg_do_nothing:}
-%   followed by a default value for others.  For \texttt{E}-type
-%   arguments, pad the defaults |#2| with some \cs{c_novalue_tl}
-%   until there are as many as embellishments~|#1|.  These functions are
-%   also used when defining expandable commands.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_default:n #1
-  {
-    \tl_if_novalue:nTF {#1}
-      { \@@_add_default: }
-      {
-        \int_incr:N \l_@@_current_arg_int
-        \bool_set_true:N \l_@@_defaults_bool
-        \tl_put_right:Nn \l_@@_defaults_tl { { \prg_do_nothing: #1 } }
-      }
-  }
-\cs_new_protected:Npn \@@_add_default:
-  {
-    \int_incr:N \l_@@_current_arg_int
-    \tl_put_right:Nn \l_@@_defaults_tl { \c_novalue_tl }
-  }
-\cs_new_protected:Npn \@@_add_default_E:nn #1#2
-  {
-    \tl_map_function:nN {#2} \@@_add_default:n
-    \prg_replicate:nn
-      { \tl_count:n {#1} - \tl_count:n {#2} }
-      { \@@_add_default: }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \subsection{Setting up expandable types}
 %
-% The approach here is not dissimilar to that for standard types, but fewer types
-% are supported. There is
-% also a need to define the per-function auxiliaries: this is done here, while
-% the general grabbers are dealt with later.
-%
-% \begin{macro}{\@@_add_expandable_type_+:w}
-%   We have already checked that short arguments are before long
-%   arguments, so \cs{l_@@_long_bool} only changes from \texttt{false}
-%   to \texttt{true} once (and there is no need to reset it after each
-%   argument).  Also knock back the argument count because |+| is not an
-%   argument.  Continue the loop.
-%    \begin{macrocode}
-\cs_new_protected:cpn { @@_add_expandable_type_+:w }
-  {
-    \bool_set_true:N \l_@@_long_bool
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_expandable_type_D:w}
-% \begin{macro}{\@@_add_expandable_type_D_aux:NNNn}
-% \begin{macro}{\@@_add_expandable_type_D_aux:NNN}
-% \begin{macro}{\@@_add_expandable_type_D_aux:NN}
-%   The set up for \texttt{D}-type arguments involves constructing a
-%   rather complex auxiliary which is used
-%   repeatedly when grabbing. There is an auxiliary here so that the
-%   \texttt{R}-type can share code readily: |#1| is |D| or~|R|.
-%   The |_aux:NN| auxiliary is needed if the two delimiting tokens are
-%   identical: in contrast to the non-expandable route, the grabber here
-%   has to act differently for this case.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_type_D:w
-  { \@@_add_expandable_type_D_aux:NNNn D }
-\cs_new_protected:Npn \@@_add_expandable_type_D_aux:NNNn #1#2#3#4
-  {
-    \@@_add_default:n {#4}
-    \tl_if_eq:nnTF {#2} {#3}
-      { \@@_add_expandable_type_D_aux:NN #1 #2 }
-      { \@@_add_expandable_type_D_aux:NNN #1 #2 #3 }
-    \@@_prepare_signature:N
-  }
-\cs_new_protected:Npn \@@_add_expandable_type_D_aux:NNN #1#2#3
-  {
-    \bool_if:NTF \l_@@_long_bool
-      { \cs_set:cpx }
-      { \cs_set_nopar:cpx }
-      { \l_@@_expandable_aux_name_tl } ##1 ##2 #2 ##3 \q_@@ ##4 #3
-      { ##1 {##2} {##3} {##4} }
-    \@@_add_expandable_grabber:nn {#1}
-      {
-        \exp_not:c  { \l_@@_expandable_aux_name_tl }
-        \exp_not:n { #2 #3 }
-      }
-  }
-\cs_new_protected:Npn \@@_add_expandable_type_D_aux:NN #1#2
-  {
-    \bool_if:NTF \l_@@_long_bool
-      { \cs_set:cpx }
-      { \cs_set_nopar:cpx }
-      { \l_@@_expandable_aux_name_tl } ##1 #2 ##2 #2
-      { ##1 {##2} }
-    \@@_add_expandable_grabber:nn { #1_alt }
-      {
-        \exp_not:c  { \l_@@_expandable_aux_name_tl }
-        \exp_not:n {#2}
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_expandable_type_E:w}
-% \begin{macro}{\@@_add_expandable_type_E_aux:n}
-%   For each embellishment, use \cs{@@_get_grabber:NN} to obtain an
-%   auxiliary delimited by that token and store a pair constituted of
-%   the auxiliary and the token in \cs{l_@@_tmpb_tl}, before appending
-%   the whole set of these pairs to the signature, and an equal number
-%   of |-NoValue-| markers (regardless of the default values of
-%   arguments).  Set the current argument appropriately.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_type_E:w #1#2
-  {
-    \@@_add_default_E:nn {#1} {#2}
-    \tl_clear:N \l_@@_tmpb_tl
-    \tl_map_function:nN {#1} \@@_add_expandable_type_E_aux:n
-    \@@_add_expandable_grabber:nn
-      { E \bool_if:NT \l_@@_long_bool { _long } }
-      {
-        { \exp_not:o \l_@@_tmpb_tl }
-        {
-          \prg_replicate:nn { \tl_count:n {#1} }
-            { { \c_novalue_tl } }
-        }
-      }
-    \@@_prepare_signature:N
-  }
-\cs_new_protected:Npn \@@_add_expandable_type_E_aux:n #1
-  {
-    \@@_get_grabber:NN #1 \l_@@_tmpa_tl
-    \tl_put_right:Nx \l_@@_tmpb_tl
-      { \exp_not:o \l_@@_tmpa_tl \exp_not:N #1 }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_add_expandable_type_l:w}
 %   Reuse type \texttt{u}, thanks to the fact that \TeX{} macros whose
 %   parameter text ends with |#| in fact end up being delimited by an
 %   open brace.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_add_expandable_type_l:w
   { \@@_add_expandable_type_u:w ## }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_add_expandable_type_m:w}
-%   Unlike the standard case, when working expandably each argument is always
-%   grabbed separately.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_type_m:w
-  {
-    \@@_add_default:
-    \@@_add_expandable_grabber:nn
-      { m \bool_if:NT \l_@@_long_bool { _long } } { }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_expandable_type_R:w}
-%   The \texttt{R}-type is very similar to the \texttt{D}-type
-%   argument, and so the same internals are used.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_type_R:w
-  { \@@_add_expandable_type_D_aux:NNNn R }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_expandable_type_t:w}
-%   An auxiliary delimited by |#1| is built now.  It will be used to
-%   test for the presence of that token.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_type_t:w #1
-  {
-    \@@_add_default:
-    \@@_get_grabber:NN #1 \l_@@_tmpa_tl
-    \@@_add_expandable_grabber:nn { t }
-      {
-        \exp_not:o \l_@@_tmpa_tl
-        \exp_not:N #1
-      }
-    \@@_prepare_signature:N
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\@@_add_expandable_type_u:w}
 %   Define an auxiliary that will be used directly in the signature.  It
 %   grabs one argument delimited by |#1| and places it before \cs{q_@@}.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_add_expandable_type_u:w #1
   {
     \@@_add_default:
@@ -2890,403 +1230,11 @@
       { \exp_not:c  { \l_@@_expandable_aux_name_tl } }
     \@@_prepare_signature:N
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_add_expandable_grabber:nn}
-%   This is called for all arguments to place the right grabber in the
-%   signature.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_expandable_grabber:nn #1#2
-  {
-    \tl_put_right:Nx \l_@@_signature_tl
-      { \exp_not:c { @@_expandable_grab_ #1 :w } #2 }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_get_grabber:NN}
-% \begin{macro}{\@@_get_grabber_auxi:NN}
-% \begin{macro}{\@@_get_grabber_auxii:NN}
-%   Given a token |#1|, defines an expandable function delimited by that
-%   token and stores it in the token list~|#2|.  The function is named
-%   after the token, unless that function name is already taken by some
-%   other grabber (this can happen in the rare case where delimiters
-%   with different category codes are used in the same document): in
-%   that case use a global counter to get a unique name.  Since the
-%   grabbers are not named after \pkg{xparse} commands they should not
-%   be used to get material from the input stream.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_get_grabber:NN #1#2
-  {
-    \cs_set:Npn \@@_tmp:w ##1 #1 {##1}
-    \exp_args:Nc \@@_get_grabber_auxi:NN
-      { @@_grabber_ \token_to_str:N #1 :w } #2
-  }
-\cs_new_protected:Npn \@@_get_grabber_auxi:NN #1#2
-  {
-    \cs_if_eq:NNTF \@@_tmp:w #1
-      { \tl_set:Nn #2 {#1} }
-      {
-        \cs_if_exist:NTF #1
-          {
-            \int_gincr:N \g_@@_grabber_int
-            \exp_args:Nc \@@_get_grabber_auxi:NN
-              {
-                @@_grabber_
-                - \int_use:N \g_@@_grabber_int :w
-              }
-              #2
-          }
-          { \@@_get_grabber_auxii:NN #1 #2 }
-      }
-  }
-\cs_new_protected:Npn \@@_get_grabber_auxii:NN #1#2
-  {
-    \cs_set_eq:NN #1 \@@_tmp:w
-    \tl_set:Nn #2 {#1}
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \subsection{Grabbing arguments}
 %
-% All of the grabbers follow the same basic pattern. The initial
-% function stores in \cs{l_@@_signature_tl} the code to grab further
-% arguments, defines (the function in) \cs{l_@@_fn_tl} that will grab
-% the argument, and calls it.
-%
-% Defining \cs{l_@@_fn_tl} means determining whether to use
-% \cs{cs_set:Npn} or \cs{cs_set_nopar:Npn}, and for optional arguments
-% whether to skip spaces. Once the argument is found, \cs{l_@@_fn_tl}
-% calls \cs{@@_add_arg:n}, responsible for calling processors and
-% grabbing further arguments.
-%
-% \begin{macro}
-%   {
-%     \@@_grab_b:w,
-%     \@@_grab_b_long:w,
-%     \@@_grab_b_obey_spaces:w,
-%     \@@_grab_b_long_obey_spaces:w,
-%     \@@_grab_b_aux:NNw,
-%     \@@_grab_b_end:Nw
-%   }
-%   This uses the well-tested code of \texttt{D}-type arguments,
-%   skipping the peeking step because the \texttt{b}-type argument is
-%   always present, and adding a cleanup stage at the end by hijacking
-%   the signature.  The clean-up consists of properly
-%   dealing with \cs{l_@@_args_tl} and also putting back the \cs{end}
-%   that served as an end-delimiter: this \cs{end} receives the
-%   environment name as its argument and is run normally.  The
-%   \texttt{D}-type code stores the argument found (body of the
-%   environment) as a brace group in \cs{l_@@_args_tl} and depending on
-%   the presence of a prefix~|!| we trim spaces or not before adding
-%   this braced argument into the saved \cs{l_@@_args_tl}.
-%   The strange \verb*|\begin | control sequence is there for display
-%     purposes only: it has to look like |\begin| in the terminal but
-%       not to delimited arguments.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_b:w
-  { \@@_grab_b_aux:NNw \cs_set_protected_nopar:Npn \tl_trim_spaces:n }
-\cs_new_protected:Npn \@@_grab_b_long:w
-  { \@@_grab_b_aux:NNw \cs_set_protected:Npn \tl_trim_spaces:n }
-\cs_new_protected:Npn \@@_grab_b_obey_spaces:w
-  { \@@_grab_b_aux:NNw \cs_set_protected_nopar:Npn \exp_not:n }
-\cs_new_protected:Npn \@@_grab_b_long_obey_spaces:w
-  { \@@_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
-\cs_new_protected:Npn \@@_grab_b_aux:NNw #1#2#3 \@@_run_code:
-  {
-    \@@_grab_D_aux:NNnN \begin \end {#3} #1
-    \tl_put_left:Nn \l_@@_signature_tl { \@@_grab_b_end:Nw #2 }
-    \tl_set_eq:NN \l_@@_saved_args_tl \l_@@_args_tl
-    \tl_clear:N \l_@@_args_tl
-    \exp_args:Nc \l_@@_fn_tl { begin ~ }
-  }
-\cs_new_protected:Npn \@@_grab_b_end:Nw #1#2 \@@_run_code:
-  {
-    \tl_set:Nx \l_@@_args_tl
-      {
-        \exp_not:V \l_@@_saved_args_tl
-        { \exp_after:wN #1 \l_@@_args_tl }
-      }
-    #2
-    \@@_run_code:
-    \end
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_D:w}
-% \begin{macro}{\@@_grab_D_long:w}
-% \begin{macro}{\@@_grab_D_obey_spaces:w}
-% \begin{macro}{\@@_grab_D_long_obey_spaces:w}
-%   The generic delimited argument grabber. The auxiliary function does
-%   a peek test before calling \cs{@@_grab_D_call:Nw}, so that the
-%   optional nature of the argument works as expected.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_D:w #1#2#3 \@@_run_code:
-  {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \@@_peek_nonspace_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_D_long:w #1#2#3 \@@_run_code:
-  {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \@@_peek_nonspace_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_D_obey_spaces:w #1#2#3 \@@_run_code:
-  {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
-      \@@_peek_meaning_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_D_long_obey_spaces:w #1#2#3 \@@_run_code:
-  {
-    \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
-      \@@_peek_meaning_remove:NTF
-  }
-%    \end{macrocode}
-% \begin{macro}{\@@_grab_D_aux:NNnNN}
-% \begin{macro}{\@@_grab_D_aux:NNnN}
-%   This is a bit complicated. The idea is that, in order to check for
-%   nested optional argument tokens (\texttt{[[...]]} and so on) the
-%   argument needs to be grabbed without removing any braces at all. If
-%   this is not done, then cases like |[{[}]| fail. So after testing for
-%   an optional argument, it is collected piece-wise. Inserting a quark
-%   prevents loss of braces, and there is then a test to see if there are
-%   nested delimiters to handle.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5
-  {
-    \@@_grab_D_aux:NNnN #1#2 {#3} #4
-    #5 #1
-      { \@@_grab_D_call:Nw #1 }
-      { \@@_add_arg:o \c_novalue_tl }
-  }
-%    \end{macrocode}
-%   Inside the \enquote{standard} grabber, there is a test to see if the
-%   grabbed argument is entirely enclosed by braces. There are a couple of
-%   extra factors to allow for: the argument might be entirely empty, and
-%   spaces at the start and end of the input must be retained around a brace
-%   group. Also notice that a \emph{blank} argument might still contain
-%   spaces.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_D_aux:NNnN #1#2#3#4
-  {
-    \tl_set:Nn \l_@@_signature_tl {#3}
-    \exp_after:wN #4 \l_@@_fn_tl ##1 #2
-      {
-        \tl_if_in:nnTF {##1} {#1}
-          { \@@_grab_D_nested:NNnN #1 #2 {##1} #4 }
-          {
-            \tl_if_blank:oTF { \use_none:n ##1 }
-              { \@@_add_arg:o { \use_none:n ##1 } }
-              {
-                \str_if_eq:eeTF
-                  { \exp_not:o { \use_none:n ##1 } }
-                  { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } }
-                  { \@@_add_arg:o { \use_ii:nn ##1 } }
-                  { \@@_add_arg:o { \use_none:n ##1 } }
-              }
-          }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\@@_grab_D_nested:NNnN}
-% \begin{macro}{\@@_grab_D_nested:w}
-% \begin{macro}{\l_@@_nesting_a_tl}
-% \begin{macro}{\l_@@_nesting_b_tl}
-% \begin{macro}{\q_@@}
-%   Catching nested optional arguments means more work. The aim here is
-%   to collect up each pair of optional tokens without \TeX{} helping out,
-%   and without counting anything. The code above will already have
-%   removed the leading opening token and a closing token, but the
-%   wrong one. The aim is then to work through the material grabbed
-%   so far and divide it up on each opening token, grabbing a closing
-%   token to match (thus working in pairs). Once there are no opening
-%   tokens, then there is a second check to see if there are any
-%   opening tokens in the second part of the argument (for things
-%   like |[][]|). Once everything has been found, the entire collected
-%   material is added to the output as a single argument. The only tricky part
-%   here is ensuring that any grabbing function that might run away is named
-%   after the function currently being parsed and not after \pkg{xparse}. That
-%   leads to some rather complex nesting! There is also a need to prevent the
-%   loss of any braces, hence the insertion and removal of quarks along the
-%   way.
-%    \begin{macrocode}
-\tl_new:N \l_@@_nesting_a_tl
-\tl_new:N \l_@@_nesting_b_tl
-\quark_new:N \q_@@
-\cs_new_protected:Npn \@@_grab_D_nested:NNnN #1#2#3#4
-  {
-    \tl_clear:N \l_@@_nesting_a_tl
-    \tl_clear:N \l_@@_nesting_b_tl
-    \exp_after:wN #4 \l_@@_fn_tl ##1 #1 ##2 \q_@@ ##3 #2
-      {
-        \tl_put_right:No \l_@@_nesting_a_tl { \use_none:n ##1 #1 }
-        \tl_put_right:No \l_@@_nesting_b_tl { \use_i:nn #2 ##3 }
-        \tl_if_in:nnTF {##2} {#1}
-          {
-            \l_@@_fn_tl
-              \q_nil ##2 \q_@@ \ERROR
-          }
-          {
-            \tl_put_right:Nx \l_@@_nesting_a_tl
-              { \@@_grab_D_nested:w \q_nil ##2 \q_stop }
-            \tl_if_in:NnTF \l_@@_nesting_b_tl {#1}
-              {
-                \tl_set_eq:NN \l_@@_tmpa_tl \l_@@_nesting_b_tl
-                \tl_clear:N \l_@@_nesting_b_tl
-                \exp_after:wN \l_@@_fn_tl \exp_after:wN
-                  \q_nil \l_@@_tmpa_tl \q_nil \q_@@ \ERROR
-              }
-              {
-                \tl_put_right:No \l_@@_nesting_a_tl
-                  \l_@@_nesting_b_tl
-                \@@_add_arg:V \l_@@_nesting_a_tl
-              }
-          }
-      }
-    \l_@@_fn_tl #3 \q_nil \q_@@ \ERROR
-  }
-\cs_new:Npn \@@_grab_D_nested:w #1 \q_nil \q_stop
-  { \exp_not:o { \use_none:n #1 } }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\@@_grab_D_call:Nw}
-%   For \texttt{D} and \texttt{R}-type arguments, to avoid losing any
-%   braces, a token needs to be inserted before the argument to be grabbed.
-%   If the argument runs away because the closing token is missing then this
-%   inserted token shows up in the terminal. Ideally, |#1| would therefore be
-%   used directly, but that is no good as it will mess up the rest of the
-%   grabber. Instead, a copy of |#1| with an altered category code is used,
-%   as this will look right in the terminal but will not mess up the grabber.
-%   The only issue then is that the category code of |#1| is unknown. So there
-%   is a quick test to ensure that the inserted token can never be matched by
-%   the grabber. (This assumes that the open and close delimiters are not the
-%   same character with different category codes, but that really should not
-%   happen in any sensible document-level syntax.)
-%   An exception is when |#1| is a control sequence token, in which case the
-%   character-token treatment is no good because if hit with \cs{token_to_str:N}
-%   it would add sputios tokens to the argument. In this case a different
-%   branch is taken. The token inserted is then the same \meta{csname} as |#1|,
-%   but with a space appended, so that the grabber don't see it as another
-%   of the same delimiter.
-%    \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_grab_D_call:Nw #1
-  {
-    \token_if_eq_catcode:NNTF + #1
-      {
-        \exp_after:wN \exp_after:wN \exp_after:wN
-          \l_@@_fn_tl \char_generate:nn { `#1 } { 11 }
-      }
-      {
-        \@@_token_if_cs:NTF #1
-          {
-            \exp_after:wN \l_@@_fn_tl
-            \cs:w \cs_to_str:N #1 ~ \cs_end:
-          }
-          {
-            \exp_after:wN \l_@@_fn_tl
-            \token_to_str:N #1
-          }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     \@@_grab_E:w, \@@_grab_E_long:w,
-%     \@@_grab_E_obey_spaces:w, \@@_grab_E_long_obey_spaces:w
-%   }
-% \begin{macro}{\@@_grab_E:nnNN}
-% \begin{macro}{\@@_grab_E_loop:NnN}
-% \begin{macro}{\@@_grab_E_finalise:}
-%   Everything here needs to point to a loop.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_E:w #1#2 \@@_run_code:
-  {
-    \@@_grab_E:nnNN {#1} {#2}
-      \cs_set_protected_nopar:Npn
-      \@@_peek_nonspace_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_E_long:w #1#2 \@@_run_code:
-  {
-    \@@_grab_E:nnNN {#1} {#2}
-      \cs_set_protected:Npn
-      \@@_peek_nonspace_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_E_obey_spaces:w #1#2 \@@_run_code:
-  {
-    \@@_grab_E:nnNN {#1} {#2}
-      \cs_set_protected_nopar:Npn
-      \@@_peek_meaning_remove:NTF
-  }
-\cs_new_protected:Npn \@@_grab_E_long_obey_spaces:w #1#2 \@@_run_code:
-  {
-    \@@_grab_E:nnNN {#1} {#2}
-      \cs_set_protected:Npn
-      \@@_peek_meaning_remove:NTF
-  }
-%    \end{macrocode}
-%   A loop is needed here to allow a random ordering of keys. These are
-%   searched for one at a time, with any not found needing to be tracked:
-%   they can appear later. The grabbed values are held in a property list
-%   which is then turned into an ordered list to be passed back to the user.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_E:nnNN #1#2#3#4
-  {
-    \exp_after:wN #3 \l_@@_fn_tl ##1##2##3
-      {
-        \prop_put:Nnn \l_@@_tmp_prop {##1} {##3}
-        \@@_grab_E_loop:NnN #4 { } ##2 \q_recursion_stop
-      }
-    \prop_clear:N \l_@@_tmp_prop
-    \tl_set:Nn \l_@@_signature_tl {#2}
-    \cs_set_protected:Npn \@@_grab_E_finalise:
-      {
-        \tl_map_inline:nn {#1}
-          {
-            \prop_get:NnNF \l_@@_tmp_prop {####1} \l_@@_tmpb_tl
-              { \tl_set_eq:NN \l_@@_tmpb_tl \c_novalue_tl }
-            \tl_put_right:Nx \l_@@_args_tl
-              { { \exp_not:V \l_@@_tmpb_tl } }
-          }
-        \l_@@_signature_tl \@@_run_code:
-      }
-    \@@_grab_E_loop:NnN #4 { } #1 \q_recursion_tail \q_recursion_stop
-  }
-\cs_new_protected:Npn \@@_grab_E_loop:NnN #1#2#3#4 \q_recursion_stop
-  {
-    \cs_if_eq:NNTF #3 \q_recursion_tail
-      { \@@_grab_E_finalise: }
-      {
-        #1 #3
-          { \l_@@_fn_tl #3 {#2#4} }
-          { \@@_grab_E_loop:NnN #1 {#2#3} #4 \q_recursion_stop }
-      }
-  }
-\cs_new_protected:Npn \@@_grab_E_finalise: { }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_grab_G:w}
 % \begin{macro}{\@@_grab_G_long:w}
 % \begin{macro}{\@@_grab_G_obey_spaces:w}
@@ -3295,8 +1243,6 @@
 %   Optional groups are checked by meaning, so that the same code will
 %   work with, for example, \ConTeXt{}-like input.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_grab_G:w #1 \@@_run_code:
   {
     \@@_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
@@ -3349,173 +1295,11 @@
       { \@@_add_arg:n {##1} }
     \l_@@_fn_tl
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\@@_grab_m:w}
-% \begin{macro}{\@@_grab_m_long:w}
-%   Collecting a single mandatory argument is quite easy.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_m:w #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_protected_nopar:Npn \l_@@_fn_tl ##1
-      { \@@_add_arg:n {##1} }
-    \l_@@_fn_tl
-  }
-\cs_new_protected:Npn \@@_grab_m_long:w #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_protected:Npn \l_@@_fn_tl ##1
-      { \@@_add_arg:n {##1} }
-    \l_@@_fn_tl
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_m_1:w}
-% \begin{macro}{\@@_grab_m_2:w}
-% \begin{macro}{\@@_grab_m_3:w}
-% \begin{macro}{\@@_grab_m_4:w}
-% \begin{macro}{\@@_grab_m_5:w}
-% \begin{macro}{\@@_grab_m_6:w}
-% \begin{macro}{\@@_grab_m_7:w}
-% \begin{macro}{\@@_grab_m_8:w}
-% \begin{macro}{\@@_grab_m_9:w}
-% \begin{macro}{\@@_grab_m_aux:Nnnnnnnnn}
-%   Grabbing 1--8 mandatory arguments is done by giving 8--1 known
-%   arguments to a 9-argument function that stores them in
-%   \cs{l_@@_args_tl}.  For simplicity, grabbing 9 mandatory arguments
-%   is done by grabbing 5 then 4 arguments.
-%    \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_grab_m_aux:Nnnnnnnnn #1#2#3#4#5#6#7#8#9
-  {
-    \tl_put_right:No \l_@@_args_tl
-      { #1 {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} }
-    \l_@@_signature_tl \@@_run_code:
-  }
-\cs_new_protected:cpn { @@_grab_m_1:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nnnnnnn { } { } { } { } { } { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_2:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nnnnnn { } { } { } { } { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_3:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nnnnn { } { } { } { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_4:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nnnn { } { } { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_5:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nnn { } { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_6:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:nn { } { }
-  }
-\cs_new_protected:cpn { @@_grab_m_7:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \use_none:n { }
-  }
-\cs_new_protected:cpn { @@_grab_m_8:w } #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \exp_after:wN \cs_set_eq:NN \l_@@_fn_tl \@@_grab_m_aux:Nnnnnnnnn
-    \l_@@_fn_tl \prg_do_nothing:
-  }
-\cs_new_protected:cpx { @@_grab_m_9:w }
-  {
-    \exp_not:c { @@_grab_m_5:w }
-    \exp_not:c { @@_grab_m_4:w }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_R:w, \@@_grab_R_long:w}
-% \begin{macro}{\@@_grab_R_aux:NNnN}
-%  The grabber for \texttt{R}-type arguments is basically the same as
-%  that for \texttt{D}-type ones, but always skips spaces (as it is mandatory)
-%  and has a hard-coded error message.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_R:w #1#2#3 \@@_run_code:
-  { \@@_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected_nopar:Npn }
-\cs_new_protected:Npn \@@_grab_R_long:w #1#2#3 \@@_run_code:
-  { \@@_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn }
-\cs_new_protected:Npn \@@_grab_R_aux:NNnN #1#2#3#4
-  {
-    \@@_grab_D_aux:NNnN #1 #2 {#3} #4
-    \@@_peek_nonspace_remove:NTF #1
-      { \@@_grab_D_call:Nw #1 }
-      {
-        \__kernel_msg_error:nnxx { xparse } { missing-required }
-          { \@@_environment_or_command: }
-          { \token_to_str:N #1 }
-        \@@_add_arg:o \c_novalue_tl
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_t:w}
-% \begin{macro}{\@@_grab_t_obey_spaces:w}
-% \begin{macro}{\@@_grab_t_aux:NNw}
-%   Dealing with a token is quite easy. Check the match, remove the
-%   token if needed and add a flag to the output.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_t:w
-  { \@@_grab_t_aux:NNw \@@_peek_nonspace_remove:NTF }
-\cs_new_protected:Npn \@@_grab_t_obey_spaces:w
-  { \@@_grab_t_aux:NNw \@@_peek_meaning_remove:NTF }
-\cs_new_protected:Npn \@@_grab_t_aux:NNw #1#2#3 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#3}
-    \exp_after:wN \cs_set_protected:Npn \l_@@_fn_tl
-      {
-        #1 #2
-          { \@@_add_arg:n { \BooleanTrue } }
-          { \@@_add_arg:n { \BooleanFalse } }
-      }
-    \l_@@_fn_tl
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_grab_u:w}
 % \begin{macro}{\@@_grab_u_long:w}
 % \begin{macro}{\@@_grab_u_aux:nnN}
@@ -3522,8 +1306,6 @@
 %   Grabbing up to a list of tokens is quite easy: define the grabber,
 %   and then collect.
 %    \begin{macrocode}
-%</core>
-%<*package>
 \cs_new_protected:Npn \@@_grab_u:w #1#2 \@@_run_code:
   { \@@_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
 \cs_new_protected:Npn \@@_grab_u_long:w #1#2 \@@_run_code:
@@ -3535,651 +1317,11 @@
       { \@@_add_arg:n {##1} }
     \l_@@_fn_tl
   }
-%</package>
-%<*core>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\@@_grab_v:w}
-% \begin{macro}{\@@_grab_v_long:w}
-% \begin{macro}{\@@_grab_v_aux:w}
-% \begin{macro}{\@@_grab_v_group_end:}
-% \begin{variable}{\l_@@_v_arg_tl}
-%   The opening delimiter is the first non-space token, and is never
-%   read verbatim.  This is required by consistency with the case where
-%   the preceding argument was optional and absent: then \TeX{} has
-%   already read and tokenized that token when looking for the optional
-%   argument.  The first thing is thus to check is that this delimiter
-%   is a character, and to distinguish the case of a left brace (in that
-%   case, \cs{group_align_safe_end:} is needed to compensate for the
-%   begin-group character that was just seen).  Then set verbatim
-%   catcodes with \cs{@@_grab_v_aux_catcodes:}.
-%
-%   The group keep catcode changes local, and
-%   \cs{group_align_safe_begin/end:} allow to use a character
-%   with category code~$4$ (normally |&|) as the delimiter.
-%   It is ended by \cs{@@_grab_v_group_end:}, which smuggles
-%   the collected argument out of the group.
-%    \begin{macrocode}
-\tl_new:N \l_@@_v_arg_tl
-\cs_new_protected:Npn \@@_grab_v:w
-  {
-    \bool_set_false:N \l_@@_long_bool
-    \@@_grab_v_aux:w
-  }
-\cs_new_protected:Npn \@@_grab_v_long:w
-  {
-    \bool_set_true:N \l_@@_long_bool
-    \@@_grab_v_aux:w
-  }
-\cs_new_protected:Npn \@@_grab_v_aux:w #1 \@@_run_code:
-  {
-    \tl_set:Nn \l_@@_signature_tl {#1}
-    \group_begin:
-      \group_align_safe_begin:
-        \tex_escapechar:D = 92 \scan_stop:
-        \tl_clear:N \l_@@_v_arg_tl
-        \peek_remove_spaces:n
-          {
-            \peek_meaning_remove:NTF \c_group_begin_token
-              {
-                \group_align_safe_end:
-                \@@_grab_v_bgroup:
-              }
-              {
-                \peek_N_type:TF
-                  { \@@_grab_v_aux_test:N }
-                  { \@@_grab_v_aux_abort:n { } }
-              }
-          }
-  }
-\cs_new_protected:Npn \@@_grab_v_group_end:
-  {
-        \group_align_safe_end:
-        \exp_args:NNNo
-      \group_end:
-    \tl_set:Nn \l_@@_v_arg_tl { \l_@@_v_arg_tl }
-  }
-%    \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_v_aux_test:N}
-% \begin{macro}
-%   {
-%     \@@_grab_v_aux_loop:N,
-%     \@@_grab_v_aux_loop:NN,
-%     \@@_grab_v_aux_loop_end:
-%   }
-%   Check that the opening delimiter is a character, setup category codes,
-%   then start reading tokens one by one, keeping the delimiter as an argument.
-%   If the verbatim was not nested, we will be grabbing one character
-%   at each step. Unfortunately, it can happen that what follows the
-%   verbatim argument is already tokenized. Thus, we check at each step
-%   that the next token is indeed a \enquote{nice}
-%   character, \emph{i.e.}, is not a character with
-%   category code $1$ (begin-group), $2$ (end-group)
-%   or $6$ (macro parameter), nor the space character,
-%   with category code~$10$ and character code~$32$,
-%   nor a control sequence.
-%   The partially built argument is stored in \cs{l_@@_v_arg_tl}.
-%   If we ever meet a token which we cannot grab (non-N-type),
-%   or which is not a character according to
-%   \cs{@@_grab_v_token_if_char:NTF}, then we bail out with
-%   \cs{@@_grab_v_aux_abort:n}. Otherwise, we stop at the first
-%   character matching the delimiter.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_v_aux_test:N #1
-  {
-    \@@_grab_v_token_if_char:NTF #1
-      {
-        \@@_grab_v_aux_put:N #1
-        \@@_grab_v_aux_catcodes:
-        \@@_grab_v_aux_loop:N #1
-      }
-      { \@@_grab_v_aux_abort:n {#1} #1 }
-  }
-\cs_new_protected:Npn \@@_grab_v_aux_loop:N #1
-  {
-    \peek_N_type:TF
-      { \@@_grab_v_aux_loop:NN #1 }
-      { \@@_grab_v_aux_abort:n { } }
-  }
-\cs_new_protected:Npn \@@_grab_v_aux_loop:NN #1#2
-  {
-    \@@_grab_v_token_if_char:NTF #2
-      {
-        \token_if_eq_charcode:NNTF #1 #2
-          { \@@_grab_v_aux_loop_end: }
-          {
-            \@@_grab_v_aux_put:N #2
-            \@@_grab_v_aux_loop:N #1
-          }
-      }
-      { \@@_grab_v_aux_abort:n {#2} #2 }
-  }
-\cs_new_protected:Npn \@@_grab_v_aux_loop_end:
-  {
-    \@@_grab_v_group_end:
-    \@@_add_arg:x { \tl_tail:N \l_@@_v_arg_tl }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_v_bgroup:}
-% \begin{macro}{\@@_grab_v_bgroup_loop:}
-% \begin{macro}{\@@_grab_v_bgroup_loop:N}
-% \begin{variable}{\l_@@_v_nesting_int}
-%   If the opening delimiter is a left brace, we keep track of
-%   how many left and right braces were encountered so far in
-%   \cs{l_@@_v_nesting_int} (the methods used for optional
-%   arguments cannot apply here), and stop as soon as it reaches~$0$.
-%
-%   Some care was needed when removing the opening delimiter, which
-%   has already been assigned category code~$1$: using
-%   \cs{peek_meaning_remove:NTF} in the \cs{@@_grab_v_aux:w}
-%   function would break within alignments. Instead, we first
-%   convert that token to a string, and remove the result as a
-%   normal undelimited argument.
-%    \begin{macrocode}
-\int_new:N \l_@@_v_nesting_int
-\cs_new_protected:Npx \@@_grab_v_bgroup:
-  {
-    \exp_not:N \@@_grab_v_aux_catcodes:
-    \exp_not:n { \int_set:Nn \l_@@_v_nesting_int { 1 } }
-    \exp_not:N \@@_grab_v_aux_put:N \iow_char:N \{
-    \exp_not:N \@@_grab_v_bgroup_loop:
-  }
-\cs_new_protected:Npn \@@_grab_v_bgroup_loop:
-  {
-    \peek_N_type:TF
-      { \@@_grab_v_bgroup_loop:N }
-      { \@@_grab_v_aux_abort:n { } }
-  }
-\cs_new_protected:Npn \@@_grab_v_bgroup_loop:N #1
-  {
-    \@@_grab_v_token_if_char:NTF #1
-      {
-        \token_if_eq_charcode:NNTF \c_group_end_token #1
-          {
-            \int_decr:N \l_@@_v_nesting_int
-            \int_compare:nNnTF \l_@@_v_nesting_int > 0
-              {
-                \@@_grab_v_aux_put:N #1
-                \@@_grab_v_bgroup_loop:
-              }
-              { \@@_grab_v_aux_loop_end: }
-          }
-          {
-            \token_if_eq_charcode:NNT \c_group_begin_token #1
-              { \int_incr:N \l_@@_v_nesting_int }
-            \@@_grab_v_aux_put:N #1
-            \@@_grab_v_bgroup_loop:
-          }
-      }
-      { \@@_grab_v_aux_abort:n {#1} #1 }
-  }
-%    \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_v_aux_catcodes:}
-% \begin{macro}{\@@_grab_v_aux_abort:n}
-%   The approach for short verbatim arguments is to make the end-line
-%   character a macro parameter character: this is forbidden by the
-%   rest of the code. Then the error branch can check what caused the
-%   bail out and give the appropriate error message.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_v_aux_catcodes:
-  {
-    \cs_set_eq:NN \do \char_set_catcode_other:N
-    \dospecials
-    \tex_endlinechar:D = `\^^M \scan_stop:
-    \bool_if:NTF \l_@@_long_bool
-      { \char_set_catcode_other:n { \tex_endlinechar:D } }
-      { \char_set_catcode_parameter:n { \tex_endlinechar:D } }
-  }
-\cs_new_protected:Npn \@@_grab_v_aux_abort:n #1
-  {
-    \@@_grab_v_group_end:
-    \exp_after:wN \exp_after:wN \exp_after:wN
-      \peek_meaning_remove:NTF \char_generate:nn { \tex_endlinechar:D } { 6 }
-      {
-        \__kernel_msg_error:nnxxx { xparse } { verbatim-newline }
-          { \@@_environment_or_command: }
-          { \tl_to_str:N \l_@@_v_arg_tl }
-          { \tl_to_str:n {#1} }
-        \@@_add_arg:o \c_novalue_tl
-      }
-      {
-        \__kernel_msg_error:nnxxx { xparse } { verbatim-tokenized }
-          { \@@_environment_or_command: }
-          { \tl_to_str:N \l_@@_v_arg_tl }
-          { \tl_to_str:n {#1} }
-        \@@_add_arg:o \c_novalue_tl
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_v_aux_put:N}
-%   Storing one token in the collected argument. Most tokens are
-%   converted to category code $12$, with the exception of active
-%   characters, and spaces (not sure what should be done for those).
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_v_aux_put:N #1
-  {
-    \tl_put_right:Nx \l_@@_v_arg_tl
-      {
-        \token_if_active:NTF #1
-          { \exp_not:N #1 } { \token_to_str:N #1 }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_grab_v_token_if_char:NTF}
-%   This function assumes that the escape character is printable.
-%   Then the string representation of control sequences is at least
-%   two characters, and \cs{str_tail:n} only removes the escape
-%   character. Macro parameter characters are doubled by
-%   \cs{tl_to_str:n}, and will also yield a non-empty result,
-%   hence are not considered as characters.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_v_token_if_char:NTF #1
-  { \str_if_eq:eeTF { } { \str_tail:n {#1} } }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_add_arg:n, \@@_add_arg:V, \@@_add_arg:o, \@@_add_arg:x}
-%   When an argument is found it is stored, then further arguments are
-%   grabbed by calling \cs{l_@@_signature_tl}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_add_arg:n #1
-  {
-    \tl_put_right:Nn \l_@@_args_tl { {#1} }
-    \l_@@_signature_tl \@@_run_code:
-  }
-\cs_generate_variant:Nn \@@_add_arg:n { V , o , x }
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Grabbing arguments expandably}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_D:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_D:NNNwNNn}
-% \begin{macro}[EXP]{\@@_expandable_grab_D:NNNwNNnnn}
-% \begin{macro}[EXP]{\@@_expandable_grab_D:Nw}
-% \begin{macro}[EXP]{\@@_expandable_grab_D:nnNNNwNN}
-%   The first step is to grab the first token or group. The generic grabbers
-%   \cs{\meta{function}}\verb*| | and \cs{\meta{function}}\verb*| | are just after \cs{q_@@}, we go and find
-%   them (and use the long one).
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_D:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_D:NNNwNNn #1 \q_@@ #2 #3 } }
-%    \end{macrocode}
-%   We then wish to test whether |#7|, which we just grabbed, is exactly |#2|.
-%   A preliminary test is whether their string representations coincide, then
-%   expand the only grabber function we have, |#1|, once: the two strings below
-%   are equal if and only if |#7| matches |#2| exactly.\footnote{It is obvious
-%   that if \texttt{\#7} matches \texttt{\#2} then the strings are equal. We
-%   must check the converse. The right-hand-side of \cs{str_if_eq:onTF} does
-%   not end with \texttt{\#3}, implying that the grabber function took
-%   everything as its arguments. The first brace group can only be empty if
-%   \texttt{\#7} starts with \texttt{\#2}, otherwise the brace group preceding
-%   \texttt{\#7} would not vanish. The third brace group is empty, thus the
-%   \cs{q_@@} that was used by our grabber \texttt{\#1} must be the one
-%   that we inserted (not some token in \texttt{\#7}), hence the second brace
-%   group contains the end of \texttt{\#7} followed by \texttt{\#2}. Since this
-%   is \texttt{\#2} on the right-hand-side, and no brace can be lost there,
-%   \texttt{\#7} must contain nothing else than its leading \texttt{\#2}.}
-%   The preliminary test is needed as |#7| could validly contain
-%   \tn{par} (because a later mandatory argument could be long) and our
-%   grabber may be short.  If
-%   |#7| does not match |#2|, then the optional argument is missing, we use the
-%   default |-NoValue-|, and put back the argument |#7| in the input stream.
-%
-%   If it does match, then interesting things need to be done. We will grab the
-%   argument piece by piece, with the following pattern:
-%   \begin{quote}
-%     \meta{grabber} \Arg{tokens} \\
-%     ~~\cs{q_nil} \Arg{piece 1} \meta{piece 2} \cs{ERROR} \cs{q_@@}\\
-%     ~~\cs{q_nil} \meta{input stream}
-%   \end{quote}
-%   The \meta{grabber} will find an opening delimiter in \meta{piece 2}, take
-%   the \cs{q_@@} as a second delimiter, and find more material delimited
-%   by the closing delimiter in the \meta{input stream}. We then move the part
-%   before the opening delimiter from \meta{piece 2} to \meta{piece 1}, and the
-%   material taken from the \meta{input stream} to the \meta{piece 2}. Thus,
-%   the argument moves gradually from the \meta{input stream} to the
-%   \meta{piece 2}, then to the \meta{piece 1} when we have made sure to find
-%   all opening and closing delimiters. This two-step process ensures that
-%   nesting works: the number of opening delimiters minus closing delimiters in
-%   \meta{piece 1} is always equal to the number of closing delimiters in
-%   \meta{piece 2}. We stop grabbing arguments once the \meta{piece 2} contains
-%   no opening delimiter any more, hence the balance is reached, and the final
-%   argument is \meta{piece 1} \meta{piece 2}.
-%   The indirection via \cs{@@_tmp:w} allows to insert |-NoValue-| expanded.
-%    \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
-  {
-    \cs_new:Npn \@@_expandable_grab_D:NNNwNNn ##1##2##3##4 \q_@@ ##5##6##7
-      {
-        \str_if_eq:nnTF {##2} {##7}
-          {
-            \str_if_eq:onTF
-              { ##1 { } { } ##7 ##2 \q_@@ ##3 }
-              { { } {##2} { } }
-          }
-          { \use_ii:nn }
-          {
-            ##1
-              { \@@_expandable_grab_D:NNNwNNnnn ##1##2##3##4 \q_@@ ##5##6 }
-              \q_nil { } ##2 \ERROR \q_@@ \ERROR
-          }
-          { ##4 {#1} \q_@@ ##5 ##6 {##7} }
-      }
-  }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-%    \end{macrocode}
-%   At this stage, |#7| is \cs{q_nil} \Arg{piece 1} \meta{more for piece 1},
-%   and we want to concatenate all that, removing \cs{q_nil}, and keeping the
-%   opening delimiter |#2|. Simply use \cs{use_ii:nn}. Also, |#8| is
-%   \meta{remainder of piece 2} \cs{ERROR}, and |#9| is \cs{ERROR} \meta{more
-%   for piece 2}. We concatenate those, replacing the two \cs{ERROR} by the
-%   closing delimiter |#3|.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_D:NNNwNNnnn #1#2#3#4 \q_@@ #5#6#7#8#9
-  {
-    \exp_args:Nof \@@_expandable_grab_D:nnNNNwNN
-      { \use_ii:nn #7 #2 }
-      { \@@_expandable_grab_D:Nw #3 \exp_stop_f: #8 #9 }
-    #1#2#3 #4 \q_@@ #5 #6
-  }
-\cs_new:Npn \@@_expandable_grab_D:Nw #1#2 \ERROR \ERROR { #2 #1 }
-%    \end{macrocode}
-%   Armed with our two new \meta{pieces}, we are ready to loop. However, we
-%   must first see if \meta{piece 2} (here |#2|) contains any opening
-%   delimiter |#4|. Again, we expand |#3|, this time removing its whole output
-%   with \cs{use_none:nnn}. The test is similar to \cs{tl_if_in:nnTF}. The
-%   token list is empty if and only if |#2| does not contain the opening
-%   delimiter. In that case, we are done, and put the argument (from which we
-%   remove a spurious pair of delimiters coming from how we started the loop).
-%   Otherwise, we go back to looping with
-%   \cs{@@_expandable_grab_D:NNNwNNnnn}. The code to deal with brace stripping
-%   is much the same as for the non-expandable case.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_D:nnNNNwNN #1#2#3#4#5#6 \q_@@ #7#8
-  {
-    \exp_args:No \tl_if_empty:oTF
-      { #3 { \use_none:nnn } #2 \q_@@ #5 #4 \q_@@ #5 }
-      {
-        \tl_if_blank:oTF { \use_none:nn #1#2 }
-          { \@@_put_arg_expandable:ow { \use_none:nn #1#2 } }
-          {
-            \str_if_eq:eeTF
-              { \exp_not:o { \use_none:nn #1#2 } }
-              { { \exp_not:o { \use_iii:nnnn #1#2 \q_nil } } }
-              { \@@_put_arg_expandable:ow { \use_iii:nnn #1#2 } }
-              { \@@_put_arg_expandable:ow { \use_none:nn #1#2 } }
-          }
-            #6 \q_@@ #7 #8
-      }
-      {
-        #3
-          { \@@_expandable_grab_D:NNNwNNnnn #3#4#5#6 \q_@@ #7 #8 }
-          \q_nil {#1} #2 \ERROR \q_@@ \ERROR
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_D_alt:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_D_alt:NNwNNn}
-% \begin{macro}[EXP]{\@@_expandable_grab_D_alt:Nwn}
-%   When the delimiters are identical, nesting is not possible and a simplified
-%   approach is used. The test concept here is the same as for the case where
-%   the delimiters are different but there cannot be any nesting.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_D_alt:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_D_alt:NNwNNn #1 \q_@@ #2 #3 } }
-\cs_set_protected:Npn \@@_tmp:w #1
-  {
-    \cs_new:Npn \@@_expandable_grab_D_alt:NNwNNn ##1##2##3 \q_@@ ##4##5##6
-      {
-        \str_if_eq:nnTF {##6} {##2}
-          {
-            \str_if_eq:onTF
-              { ##1 { } ##6 ##2 ##2 }
-              { { } ##2 }
-          }
-          { \use_ii:nn }
-          {
-            ##1
-              { \@@_expandable_grab_D_alt:NNwn ##4 ##5 ##3 \q_@@ }
-              ##6 \ERROR
-          }
-          { ##3 {#1} \q_@@ ##4 ##5 {##6} }
-      }
-  }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-\cs_new:Npn \@@_expandable_grab_D_alt:NNwn #1#2#3 \q_@@ #4
-  {
-    \tl_if_blank:oTF { \use_none:n #4 }
-      { \@@_put_arg_expandable:ow { \use_none:n #4 } }
-      {
-        \str_if_eq:eeTF
-          { \exp_not:o { \use_none:n #4 } }
-          { { \exp_not:o { \use_ii:nnn #4 \q_nil } } }
-          { \@@_put_arg_expandable:ow { \use_ii:nn #4 } }
-          { \@@_put_arg_expandable:ow { \use_none:n #4 } }
-      }
-        #3 \q_@@ #1 #2
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_E:w, \@@_expandable_grab_E_long:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_aux:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_test:nnw}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_loop:nnnNNw}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_find:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_find:nnw}
-% \begin{macro}[EXP]{\@@_expandable_grab_E_end:nnw}
-%   We keep track of long/short by placing the appropriate grabber as
-%   the third token after \cs{q_@@}; it is eventually removed by the
-%   \texttt{end:nnw} auxiliary.  The \texttt{aux:w} auxiliary will be
-%   called repeatedly with two arguments: the set
-%   of pairs \meta{parser} \meta{token}, and the set of arguments found
-%   so far (initially all |{-NoValue-}|).  At each step, grab what
-%   follows in the input stream then call the \texttt{loop:nnnNNw}
-%   auxiliary to compare it with each possible embellishment in turn.
-%   This auxiliary's |#1| is what was found in the input, |#2| collects
-%   \meta{parser} \meta{token} pairs that did not match, |#3| collects
-%   the corresponding arguments found previously, |#4| and |#5| is the
-%   current pair, |#6| is the remaining pairs, |#7| is empty or two
-%   \cs{q_nil}, and |#8| is the current argument.  If none of the pairs
-%   matched (determined by \cs{quark_if_nil:NTF}) then call the
-%   \texttt{end} auxiliary to stop looking for embellishments,
-%   remembering to put what was grabbed in the input back where it
-%   belongs, and storing the arguments found just before \cs{q_@@}.  If
-%   the current argument |#8| is not |-NoValue-| or if the input |#1|
-%   does not match |#5| (see \texttt{t}-type arguments below for a
-%   similar \cs{str_if_eq:onTF} test) then carry on the loop.
-%   Otherwise, we found a new embellishment: grab the corresponding
-%   argument in the input using the \texttt{find:w} auxiliary.  To avoid
-%   losing braces around that auxiliary's argument we include a
-%   space, which will be eliminated in the next loop through
-%   embellishments.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_E:w #1 \q_@@ #2#3
-  { \@@_expandable_grab_E_aux:w #1 \q_@@ #2 #3 #3 }
-\cs_new:Npn \@@_expandable_grab_E_long:w #1 \q_@@ #2#3
-  { \@@_expandable_grab_E_aux:w #1 \q_@@ #2 #3 #2 }
-\cs_new:Npn \@@_expandable_grab_E_aux:w #1 \q_@@ #2#3#4
-  { #2 { \@@_expandable_grab_E_test:nnw #1 \q_@@ #2 #3 #4 } }
-\cs_new:Npn \@@_expandable_grab_E_test:nnw #1#2#3 \q_@@ #4#5#6#7
-  {
-    \@@_expandable_grab_E_loop:nnnNNw {#7} { } { }
-      #1 \q_nil \q_nil \q_nil \q_mark #2 \q_nil
-    #3 \q_@@ #4 #5 #6
-  }
-\cs_new:Npn \@@_expandable_grab_E_loop:nnnNNw
-    #1#2#3#4#5#6 \q_nil #7 \q_mark #8
-  {
-    \quark_if_nil:NTF #4
-      { \@@_expandable_grab_E_end:nnw {#1} {#3} }
-      {
-        \tl_if_novalue:nTF {#8}
-          { \str_if_eq:onTF { #4 { } #1 #5 } {#5} }
-          { \use_ii:nn }
-            { \@@_expandable_grab_E_find:w { #2 #4 #5 #6 } {#3} ~ }
-            {
-              \@@_expandable_grab_E_loop:nnnNNw
-                {#1} { #2 #4 #5 } { #3 {#8} }
-                #6 \q_nil #7 \q_mark
-            }
-      }
-  }
-\cs_new:Npn \@@_expandable_grab_E_find:w #1 \q_@@ #2#3#4
-  { #4 { \@@_expandable_grab_E_find:nnw #1 \q_@@ #2 #3 #4 } }
-\cs_new:Npn \@@_expandable_grab_E_find:nnw #1#2#3 \q_nil #4 \q_@@ #5#6#7#8
-  { \@@_expandable_grab_E_aux:w {#1} { #2 {#8} #3 } #4 \q_@@ #5 #6 #7 }
-\cs_new:Npn \@@_expandable_grab_E_end:nnw #1#2#3 \q_@@ #4#5#6
-  { #3 #2 \q_@@ #4 #5 {#1} }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_m:w, \@@_expandable_grab_m_long:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_m_aux:wNn}
-%   The mandatory case is easy: find the auxiliary after the \cs{q_@@},
-%   and use it directly to grab the argument, then correctly position
-%   the argument before \cs{q_@@}.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_m:w #1 \q_@@ #2#3
-  { #3 { \@@_expandable_grab_m_aux:wNn #1 \q_@@ #2 #3 } }
-\cs_new:Npn \@@_expandable_grab_m_long:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_m_aux:wNn #1 \q_@@ #2 #3 } }
-\cs_new:Npn \@@_expandable_grab_m_aux:wNn #1 \q_@@ #2#3#4
-  { #1 {#4} \q_@@ #2 #3 }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_R:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_R_aux:NNNwNNn}
-%   Much the same as for the \texttt{D}-type argument, with only the lead-off
-%   function varying.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_R:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_R_aux:NNNwNNn #1 \q_@@ #2#3 } }
-\cs_set_protected:Npn \@@_tmp:w #1
-  {
-    \cs_new:Npn \@@_expandable_grab_R_aux:NNNwNNn ##1##2##3##4 \q_@@ ##5##6##7
-      {
-        \str_if_eq:nnTF {##7} {##2}
-          {
-            \str_if_eq:onTF
-              { ##1 { } { } ##7 ##2 \q_@@ ##3 }
-              { { } {##2} { } }
-          }
-          { \use_ii:nn }
-          {
-            ##1
-              { \@@_expandable_grab_D:NNNwNNnnn ##1##2##3##4 \q_@@ ##5##6 }
-              \q_nil { } ##2 \ERROR \q_@@ \ERROR
-          }
-          {
-            \__kernel_msg_expandable_error:nnff
-              { xparse } { missing-required }
-              { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##5 } }
-              { \tl_to_str:n {##2} }
-            ##4 {#1} \q_@@ ##5 ##6 {##7}
-          }
-      }
-  }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_R_alt:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_R_alt_aux:NNwNNn}
-%   When the delimiters are identical, nesting is not possible and a simplified
-%   approach is used. The test concept here is the same as for the case where
-%   the delimiters are different.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_R_alt:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_R_alt_aux:NNwNNn #1 \q_@@ #2#3 } }
-\cs_set_protected:Npn \@@_tmp:w #1
-  {
-    \cs_new:Npn \@@_expandable_grab_R_alt_aux:NNwNNn ##1##2##3 \q_@@ ##4##5##6
-      {
-        \str_if_eq:nnTF {##6} {##2}
-          {
-            \str_if_eq:onTF
-              { ##1 { } ##6 ##2 ##2 }
-              { { } ##2 }
-          }
-          { \use_ii:nn }
-          {
-            ##1
-              { \@@_expandable_grab_D_alt:NNwn ##4 ##5 ##3 \q_@@ }
-              ##6 \ERROR
-          }
-          {
-            \__kernel_msg_expandable_error:nnff
-              { xparse } { missing-required }
-              { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##4 } }
-              { \tl_to_str:n {##2} }
-            ##3 {#1} \q_@@ ##4 ##5 {##6}
-          }
-      }
-  }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_expandable_grab_t:w}
-% \begin{macro}[EXP]{\@@_expandable_grab_t_aux:NNwn}
-%   As for a \texttt{D}-type argument, here we compare the grabbed tokens using
-%   the only parser we have in order to work out if |#2| is exactly equal to
-%   the output of the grabber.
-%    \begin{macrocode}
-\cs_new:Npn \@@_expandable_grab_t:w #1 \q_@@ #2#3
-  { #2 { \@@_expandable_grab_t_aux:NNwn #1 \q_@@ #2 #3 } }
-\cs_new:Npn \@@_expandable_grab_t_aux:NNwn #1#2#3 \q_@@ #4#5#6
-  {
-    \str_if_eq:onTF { #1 { } #6 #2 } {#2}
-      { #3 { \BooleanTrue } \q_@@ #4 #5 }
-      { #3 { \BooleanFalse } \q_@@ #4 #5 {#6} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}[EXP]{\@@_expandable_grab_u:w}
 %   It turns out there is nothing to do: this is followed by an
 %   auxiliary named after the function, that does everything.
@@ -4188,993 +1330,10 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP]
-%   {\@@_put_arg_expandable:nw, \@@_put_arg_expandable:ow}
-%   A useful helper, to store arguments when they are ready.
 %    \begin{macrocode}
-\cs_new:Npn \@@_put_arg_expandable:nw #1#2 \q_@@ { #2 {#1} \q_@@ }
-\cs_generate_variant:Nn \@@_put_arg_expandable:nw { o }
+%</package>
 %    \end{macrocode}
-% \end{macro}
 %
-% \subsection{Argument processors}
-%
-% \begin{macro}{\@@_bool_reverse:N}
-%   A simple reversal.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_bool_reverse:N #1
-  {
-    \bool_if:NTF #1
-      { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
-      { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_split_list_seq, \l_@@_split_list_tl}
-% \begin{macro}{\@@_split_list:nn}
-% \begin{macro}{\@@_split_list_multi:nn, \@@_split_list_multi:nV}
-% \begin{macro}{\@@_split_list_single:Nn}
-%   Splitting can take place either at a single token or at a longer
-%   identifier. To deal with single active tokens, a two-part procedure is
-%   needed.
-%    \begin{macrocode}
-\seq_new:N \l_@@_split_list_seq
-\tl_new:N \l_@@_split_list_tl
-\cs_new_protected:Npn \@@_split_list:nn #1#2
-  {
-    \tl_if_single:nTF {#1}
-      {
-        \token_if_cs:NTF #1
-          { \@@_split_list_multi:nn {#1} {#2} }
-          { \@@_split_list_single:Nn #1 {#2} }
-      }
-      { \@@_split_list_multi:nn {#1} {#2} }
-  }
-\cs_new_protected:Npn \@@_split_list_multi:nn #1#2
-  {
-    \seq_set_split:Nnn \l_@@_split_list_seq {#1} {#2}
-    \tl_clear:N \ProcessedArgument
-    \seq_map_inline:Nn \l_@@_split_list_seq
-      { \tl_put_right:Nn \ProcessedArgument { {##1} } }
-  }
-\cs_generate_variant:Nn \@@_split_list_multi:nn { nV }
-\group_begin:
-\char_set_catcode_active:N \^^@
-\cs_new_protected:Npn \@@_split_list_single:Nn #1#2
-  {
-    \tl_set:Nn \l_@@_split_list_tl {#2}
-    \group_begin:
-    \char_set_lccode:nn { `\^^@ } { `#1 }
-    \tex_lowercase:D
-      {
-        \group_end:
-        \tl_replace_all:Nnn \l_@@_split_list_tl { ^^@ }
-      }   {#1}
-     \@@_split_list_multi:nV {#1} \l_@@_split_list_tl
-   }
-\group_end:
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{variable}
-%
-% \begin{macro}{\@@_split_argument:nnn}
-% \begin{macro}{\@@_split_argument_aux:nnnn}
-% \begin{macro}[EXP]{\@@_split_argument_aux:n}
-% \begin{macro}[rEXP]{\@@_split_argument_aux:wn}
-%   Splitting to a known number of items is a special version of splitting
-%   a list, in which the limit is hard-coded and where there will always be
-%   exactly the correct number of output items. An auxiliary function is
-%   used to save on working out the token list length several times.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_split_argument:nnn #1#2#3
-  {
-    \@@_split_list:nn {#2} {#3}
-    \exp_args:Nf \@@_split_argument_aux:nnnn
-      { \tl_count:N \ProcessedArgument }
-      {#1} {#2} {#3}
-  }
-\cs_new_protected:Npn \@@_split_argument_aux:nnnn #1#2#3#4
-  {
-    \int_compare:nNnF {#1} = { #2 + 1 }
-      {
-        \int_compare:nNnTF {#1} > { #2 + 1 }
-          {
-            \tl_set:Nx \ProcessedArgument
-              {
-                \exp_last_unbraced:NnNo
-                  \@@_split_argument_aux:n
-                  { #2 + 1 }
-                  \use_none_delimit_by_q_stop:w
-                  \ProcessedArgument
-                  \q_stop
-              }
-            \__kernel_msg_error:nnxxx { xparse } { split-excess-tokens }
-              { \tl_to_str:n {#3} } { \int_eval:n { #2 + 1 } }
-              { \tl_to_str:n {#4} }
-          }
-          {
-            \tl_put_right:Nx \ProcessedArgument
-              {
-                \prg_replicate:nn { #2 + 1 - (#1) }
-                  { { \exp_not:V \c_novalue_tl } }
-              }
-          }
-      }
-  }
-%    \end{macrocode}
-%   Auxiliaries to leave exactly the correct number of arguments in
-%   \cs{ProcessedArgument}.
-%    \begin{macrocode}
-\cs_new:Npn \@@_split_argument_aux:n #1
-  { \prg_replicate:nn {#1} { \@@_split_argument_aux:wn } }
-\cs_new:Npn \@@_split_argument_aux:wn #1 \use_none_delimit_by_q_stop:w #2
-  {
-    \exp_not:n { {#2} }
-    #1
-    \use_none_delimit_by_q_stop:w
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_trim_spaces:n}
-%   This one is almost trivial.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_trim_spaces:n #1
-  { \tl_set:Nx \ProcessedArgument { \tl_trim_spaces:n {#1} } }
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Access to the argument specification}
-%
-% \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n}
-% \begin{macro}{\@@_get_arg_spec_error_aux:n}
-%   Provide an informative error when trying to get the argument
-%   specification of a non-\pkg{xparse} command or environment.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_get_arg_spec_error:N #1
-  {
-    \bool_set_false:N \l_@@_environment_bool
-    \tl_set:Nn \l_@@_fn_tl {#1}
-    \@@_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 }
-  }
-\cs_new_protected:Npn \@@_get_arg_spec_error:n #1
-  {
-    \bool_set_true:N \l_@@_environment_bool
-    \str_set:Nx \l_@@_environment_str {#1}
-    \@@_get_arg_spec_error_aux:n
-      { \cs_if_exist:cTF { \l_@@_environment_str } }
-  }
-\cs_new_protected:Npn \@@_get_arg_spec_error_aux:n #1
-  {
-    #1
-      {
-        \__kernel_msg_error:nnx { xparse } { non-xparse }
-          { \@@_environment_or_command: }
-      }
-      {
-        \__kernel_msg_error:nnx { xparse } { unknown }
-          { \@@_environment_or_command: }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_get_arg_spec:NTF}
-%   If the command is not an \pkg{xparse} command, complain.  If it is,
-%   its second \enquote{item} is the argument specification.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_get_arg_spec:NTF #1#2#3
-  {
-    \@@_cmd_if_xparse:NTF #1
-      {
-        \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } }
-        #2
-      }
-      {#3}
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_get_arg_spec:N}
-% \begin{macro}{\@@_get_arg_spec:n}
-% \begin{variable}{\ArgumentSpecification}
-%   Recovering the argument specification is now trivial.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_get_arg_spec:N #1
-  {
-    \@@_get_arg_spec:NTF #1 { }
-      { \@@_get_arg_spec_error:N #1 }
-  }
-\cs_new_protected:Npn \@@_get_arg_spec:n #1
-  {
-    \exp_args:Nc \@@_get_arg_spec:NTF
-      { environment~ \tl_to_str:n {#1} }
-      { }
-      { \@@_get_arg_spec_error:n {#1} }
-  }
-\tl_new:N \ArgumentSpecification
-%    \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_arg_spec:N}
-% \begin{macro}{\@@_show_arg_spec:n}
-%   Showing the argument specification simply means finding it and then
-%   calling the \cs{tl_show:N} function.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_show_arg_spec:N #1
-  {
-    \@@_get_arg_spec:NTF #1
-      { \tl_show:N \ArgumentSpecification }
-      { \@@_get_arg_spec_error:N #1 }
-  }
-\cs_new_protected:Npn \@@_show_arg_spec:n #1
-  {
-    \exp_args:Nc \@@_get_arg_spec:NTF
-      { environment~ \tl_to_str:n {#1} }
-      { \tl_show:N \ArgumentSpecification }
-      { \@@_get_arg_spec_error:n {#1} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Utilities}
-%
-% \begin{macro}{\@@_check_definable:nNT, \@@_check_definable_aux:nN}
-%   Check that a token list is appropriate as a first argument of
-%   \cs{NewDocumentCommand} and similar functions and otherwise
-%   produce an error.  First trim whitespace to allow for spaces around
-%   the actual command to be defined.  If the result has multiple
-%   tokens, it is not a valid argument.  The single token is a control
-%   sequence exactly if its string representation has more than one
-%   character (using \cs{token_to_str:N} rather than \cs{tl_to_str:n}
-%   to avoid problems with macro parameter characters, and setting
-%   \cs{tex_escapechar:D} to prevent it from being non-printable).
-%   Finally, check for an active character: this is done by lowercasing
-%   the token to fix its character code (arbitrarily to that of~|?|)
-%   and comparing the result to an active~|?|.  Both control sequences
-%   and active characters are valid arguments, and non-active character
-%   tokens are not.  In all cases, the group opened to keep assignments
-%   local must be closed.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_check_definable:nNT #1
-  { \tl_trim_spaces_apply:nN {#1} \@@_check_definable_aux:nN }
-\group_begin:
-  \char_set_catcode_active:n { `? }
-  \cs_new_protected:Npn \@@_check_definable_aux:nN #1#2
-    {
-      \group_begin:
-      \tl_if_single_token:nTF {#1}
-        {
-          \int_set:Nn \tex_escapechar:D { 92 }
-          \exp_args:Nx \tl_if_empty:nTF
-            { \exp_args:No \str_tail:n { \token_to_str:N #1 } }
-            {
-              \exp_args:Nx \char_set_lccode:nn
-                { ` \str_head:n {#1} } { `? }
-              \tex_lowercase:D { \tl_if_eq:nnTF {#1} } { ? }
-                { \group_end: \use_iii:nnn }
-                { \group_end: \use_i:nnn }
-            }
-            { \group_end: \use_iii:nnn }
-        }
-        { \group_end: \use_ii:nnn }
-      {
-        \__kernel_msg_error:nnxx { xparse } { not-definable }
-          { \tl_to_str:n {#1} } { \token_to_str:N #2 }
-      }
-      {
-        \__kernel_msg_error:nnxx { xparse } { not-one-token }
-          { \tl_to_str:n {#1} } { \token_to_str:N #2 }
-      }
-    }
-\group_end:
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_token_if_cs:NTF}
-%   Based on the definition of \cs{@@_check_definable_aux:nN} above, but
-%   only checks for an actual control sequence (\emph{i.e.},
-%   \cs[no-index]{\meta{anything}}). \cs{tex_escapechar:D} is
-%   temporarily changed to a known value and then it checks if
-%   |\string#1| contains more than one character: if it does, it's a
-%   control sequence.  This test differs from \cs{token_if_cs:NTF} for
-%   example in \verb|\token_if_cs:NTF \c_group_begin_token {T}{F}|,
-%   where \cs{token_if_cs:NTF} returns false.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_token_if_cs:NTF #1
-  {
-    \group_begin:
-      \int_set:Nn \tex_escapechar:D { 92 }
-      \exp_args:Nx \tl_if_empty:nTF
-          { \exp_args:No \str_tail:n { \token_to_str:N #1 } }
-        { \group_end: \use_ii:nn }
-        { \group_end: \use_i:nn }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_tl_mapthread_function:NNN, \@@_tl_mapthread_function:nnN}
-% \begin{macro}{\@@_tl_mapthread_loop:w}
-%   Analogue of \cs{seq_mapthread_function:NNN} for token lists.
-%    \begin{macrocode}
-\cs_new:Npn \@@_tl_mapthread_function:NNN #1#2#3
-  {
-    \exp_after:wN \exp_after:wN
-    \exp_after:wN \@@_tl_mapthread_loop:w
-    \exp_after:wN \exp_after:wN
-    \exp_after:wN #3
-    \exp_after:wN #1
-    \exp_after:wN \q_recursion_tail
-    \exp_after:wN \q_mark
-    #2
-    \q_recursion_tail
-    \q_recursion_stop
-  }
-\cs_new:Npn \@@_tl_mapthread_function:nnN #1#2#3
-  {
-    \@@_tl_mapthread_loop:w #3
-      #1 \q_recursion_tail \q_mark
-      #2 \q_recursion_tail \q_recursion_stop
-  }
-\cs_new:Npn \@@_tl_mapthread_loop:w #1#2#3 \q_mark #4
-  {
-    \quark_if_recursion_tail_stop:n {#2}
-    \quark_if_recursion_tail_stop:n {#4}
-    #1 {#2} {#4}
-    \@@_tl_mapthread_loop:w #1#3 \q_mark
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_cmd_if_xparse:NTF}
-% \begin{macro}{\@@_cmd_if_xparse_aux:N}
-%   To determine whether the command is an \pkg{xparse} command check
-%   that its |arg_spec| is empty (this also excludes non-macros) and
-%   that its |replacement_spec| starts with either \cs{@@_start:nNNnnn}
-%   (non-expandable command) or \cs{@@_start_expandable:nNNNNn}
-%   (expandable command) or \cs{@@_start_env:nnnnn} (environment).
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_cmd_if_xparse:NTF #1
-  {
-    \exp_args:Nf \str_case_e:nnTF
-      {
-        \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
-          {
-            \exp_last_unbraced:Nf \@@_cmd_if_xparse_aux:w
-              { \cs_replacement_spec:N #1 } ~ \q_stop
-          }
-      }
-      {
-        { \token_to_str:N \@@_start:nNNnnn } { }
-        { \token_to_str:N \@@_start_expandable:nNNNNn } { }
-        { \token_to_str:N \@@_start_env:nnnnn } { }
-      }
-  }
-\cs_new:Npn \@@_cmd_if_xparse_aux:w #1 ~ #2 \q_stop {#1}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_nonspace:NTF, \@@_peek_nonspace_remove:NTF, \@@_peek_nonspace_aux:nNNTF}
-%   Collect spaces in a loop, and put the collected spaces back in the
-%   false branch of a call to \cs{peek_meaning:NTF} or
-%   \cs{peek_meaning_remove:NTF}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_nonspace:NTF
-  { \@@_peek_nonspace_aux:nNNTF { } \@@_peek_meaning:NTF }
-\cs_new_protected:Npn \@@_peek_nonspace_remove:NTF
-  { \@@_peek_nonspace_aux:nNNTF { } \@@_peek_meaning_remove:NTF }
-\cs_new_protected:Npn \@@_peek_nonspace_aux:nNNTF #1#2#3#4#5
-  {
-    \peek_meaning_remove:NTF \c_space_token
-      { \@@_peek_nonspace_aux:nNNTF { #1 ~ } #2 #3 {#4} {#5} }
-      { #2 #3 { #4 } { #5 #1 } }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_meaning:NTF, \@@_peek_meaning_remove:NTF}
-% \begin{macro}{\@@_peek_cs_check_equal:NNN, \@@_peek_meaning_aux:NNTF, \@@_peek_true_remove:NNw}
-%   Peek ahead for a token with a given meaning.  In case the search
-%   token is a control sequence, also check that the \meta{csname} is
-%   the same as the control sequence peeked at.  This extra verification
-%   is necessary when the command is delimited by control sequence tokens
-%   (as opposed to character tokens), and we want the the exact same
-%   control sequence to match.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_meaning:NTF
-  { \@@_peek_meaning_aux:NNTF \c_false_bool }
-\cs_new_protected:Npn \@@_peek_meaning_remove:NTF
-  { \@@_peek_meaning_aux:NNTF \c_true_bool }
-\cs_new_protected:Npn \@@_peek_meaning_aux:NNTF #1#2#3#4
-  {
-    \tl_set:Nn \l_@@_tmpa_tl {#3}
-    \tl_set:Nn \l_@@_tmpb_tl {#4}
-    \peek_meaning:NTF #2
-      {
-        \token_if_eq_meaning:NNTF #2 \c_group_begin_token
-          { \@@_peek_true_remove:Nw #1 }
-          {
-            \@@_token_if_cs:NTF #2
-              { \@@_peek_cs_check_equal:NNN #1 #2 }
-              { \@@_peek_true_remove:Nw #1 }
-          }
-      }
-      { \l_@@_tmpb_tl }
-  }
-\cs_new_protected:Npn \@@_peek_cs_check_equal:NNN #1#2#3
-  {
-    \str_if_eq:nnTF {#2} {#3}
-      { \@@_peek_true_remove:Nw #1 }
-      { \l_@@_tmpb_tl }
-    #3
-  }
-\cs_new_protected:Npn \@@_peek_true_remove:Nw #1
-  {
-    \bool_if:NTF #1
-      {
-        \tex_afterassignment:D \l_@@_tmpa_tl
-        \cs_set_eq:NN \@@_tmp:w
-      }
-      { \l_@@_tmpa_tl }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macro}{\@@_environment_or_command:}
-% \begin{variable}{\c_@@_ignore_def_tl}
-%   Two texts used in several messages.
-%    \begin{macrocode}
-\cs_new:Npn \@@_environment_or_command:
-  {
-    \bool_if:NTF \l_@@_environment_bool
-      { environment ~ ' \l_@@_environment_str ' }
-      {
-        command ~ '
-        \exp_args:Nf \tl_trim_spaces:n
-          { \exp_after:wN \token_to_str:N \l_@@_fn_tl }
-        '
-      }
-  }
-\tl_const:Nn \c_@@_ignore_def_tl
-  { \\ \\ LaTeX~will~ignore~this~entire~definition. }
-%    \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% Some messages intended as errors when defining commands/environments.
-%    \begin{macrocode}
-\__kernel_msg_new:nnnn { xparse } { arg-after-body }
-  { In~the~definition~of~#1,~b~(body)~argument~must~be~last. }
-  {
-    The~'body'~argument~type~is~followed~by~'#2'~in~the~argument~
-    specification~of~the~#1.~This~is~not~allowed.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { bad-arg-spec }
-  { Bad~argument~specification~'#2'~for~#1. }
-  {
-    The~argument~specification~provided~was~not~valid:~
-    one~or~more~mandatory~pieces~of~information~were~missing.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { command-already-defined }
-  { Command~'#1'~already~defined! }
-  {
-    You~have~used~#2~
-    with~a~command~that~already~has~a~definition. \\ \\
-    The~existing~definition~of~'#1'~will~not~be~altered.
-  }
-\__kernel_msg_new:nnnn { xparse } { command-not-yet-defined }
-  { Command ~'#1'~not~yet~defined! }
-  {
-    You~have~used~#2~
-    with~a~command~that~was~never~defined.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { environment-already-defined }
-  { Environment~'#1'~already~defined! }
-  {
-    You~have~used~\NewDocumentEnvironment
-    with~an~environment~that~already~has~a~definition. \\ \\
-    The~existing~definition~of~'#1'~will~not~be~altered.
-  }
-\__kernel_msg_new:nnnn { xparse } { environment-not-yet-defined }
-  { Environment~'#1'~not~yet~defined! }
-  {
-    You~have~used~\RenewDocumentEnvironment
-    with~an~environment~that~was~never~defined.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { expandable-ending-optional }
-  {
-    Argument~specification~'#2'~for~expandable~command~'#1'~
-    ends~with~optional~argument.
-  }
-  {
-    Expandable~commands~must~have~a~final~mandatory~argument~
-    (or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~
-    argument~with~expandable~commands.
-  }
-\__kernel_msg_new:nnnn { xparse } { inconsistent-long }
-  { Inconsistent~long~arguments~for~expandable~command~'#1'. }
-  {
-    The~arguments~for~an~expandable~command~must~not~involve~short~
-    arguments~after~long~arguments.~You~have~tried~to~mix~the~two~types.
-  }
-\__kernel_msg_new:nnnn { xparse } { invalid-command-arg }
-  { Argument~type~'#2'~not~available~for~#1. }
-  {
-    The~letter~'#2'~can~only~be~used~in~environment~argument~
-    specifications,~not~for~commands.
-    \\ \\
-    LaTeX~will~ignore~this~entire~definition.
-  }
-\__kernel_msg_new:nnnn { xparse } { invalid-expandable-argument-type }
-  { Argument~type~'#2'~not~available~for~expandable~command~'#1'. }
-  {
-    The~letter~'#2'~specifies~an~argument~type~which~cannot~be~used~
-    in~an~expandable~command.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { invalid-after-optional-expandably }
-  {
-    Argument~type~'#2'~not~available~after~optional~argument~
-    for~expandable~command~'#1'.
-  }
-  {
-    The~letter~'#2'~specifies~an~argument~type~which~cannot~be~used~
-    in~an~expandable~command~after~an~optional~argument.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { non-trailing-obey-spaces }
-  { Prefix~'!'~used~before~mandatory~argument~'#2'~of~#1. }
-  {
-    The~prefix~'!'~can~only~apply~to~trailing~optional~arguments.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { not-definable }
-  { First~argument~of~'#2'~must~be~a~command. }
-  {
-    The~first~argument~of~'#2'~should~be~the~document~command~that~will~
-    be~defined.~The~provided~argument~'#1'~is~a~character.~Perhaps~a~
-    backslash~is~missing?
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { not-one-token }
-  { First~argument~of~'#2'~must~be~a~command. }
-  {
-    The~first~argument~of~'#2'~should~be~the~document~command~that~will~
-    be~defined.~The~provided~argument~'#1'~contains~more~than~one~
-    token.~Perhaps~a~backslash~is~missing?
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { not-single-token }
-  {
-    Argument~delimiter~'#2'~for~the~#1~should~be~
-    a~single~non-space~token.
-  }
-  {
-    The~argument~specification~provided~was~not~valid:~in~a~place~
-    where~a~single~token~is~required,~LaTeX~found~'#2'.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { forbidden-implicit-group-token }
-  { Argument~delimiter~'#2'~for~the~#1~is~not~allowed. }
-  {
-    The~argument~specification~provided~was~not~valid:~the~implicit~
-    #3-group~token~'#2'~is~not~allowed~as~an~argument~delimiter.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { processor-in-expandable }
-  { Argument~processor~'>{#2}'~cannot~be~used~for~the~expandable~command~'#1'. }
-  {
-    The~argument~specification~for~#1~contains~a~processor~function:~
-    this~is~only~supported~for~standard~robust~commands.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { too-many-arguments }
-  { Too~many~arguments~in~argument~specification~'#2'~of~#1. }
-  {
-    The~argument~specification~provided~has~more~than~9~arguments.~
-    This~cannot~be~implemented.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { two-markers }
-  { Two~'#2'~apply~to~the~same~argument~in~argument~specification~of~#1. }
-  {
-    The~argument~specification~provided~has~two~markers~'#2'~applying~
-    to~the~same~argument;~these~are~redundant.
-  }
-\__kernel_msg_new:nnnn { xparse } { unknown-argument-type }
-  { Unknown~argument~type~'#2'~for~the~#1. }
-  {
-    The~letter~'#2'~does~not~specify~a~known~argument~type.
-    \c_@@_ignore_def_tl
-  }
-\__kernel_msg_new:nnnn { xparse } { xparse-argument-type }
-  { Deprecated~argument~type~'#2'~for~the~#1~requires~xparse. }
-  {
-    The~letter~'#2'~specifies~a~known~argument~type~that~requires~
-    the~xparse~package.
-    \c_@@_ignore_def_tl
-  }
-%    \end{macrocode}
-%
-% Errors when using commands/environments.  The \texttt{if-boolean}
-% message is always used in expandable errors.  The
-% \texttt{loop-in-defaults} and \texttt{missing-required} messages can
-% be expandable or not expandable.
-%    \begin{macrocode}
-\__kernel_msg_new:nnn { xparse } { if-boolean }
-  { Invalid~use~\iow_char:N\\IfBooleanTF~{#1} }
-\__kernel_msg_new:nnnn { xparse } { loop-in-defaults }
-  { Defaults~of~#1~have~circular~dependency. }
-  {
-    The~default~values~of~two~or~more~arguments~of~the~#1~
-    depend~on~each~other~in~a~way~that~cannot~be~resolved.
-  }
-\__kernel_msg_new:nnnn { xparse } { missing-required }
-  { Missing~required~argument~for~#1. }
-  {
-    The~current~#1~expects~an~argument~starting~with~'#2'.~
-    LaTeX~did~not~find~it,~and~will~insert~a~default~value~to~be~processed.
-  }
-\__kernel_msg_new:nnnn { xparse } { non-xparse }
-  { \str_uppercase:n #1~not~defined~using~xparse. }
-  {
-    You~have~asked~for~the~argument~specification~for~the~#1,~
-    but~this~was~not~defined~using~xparse.
-  }
-\__kernel_msg_new:nnnn { xparse } { split-excess-tokens }
-  { Too~many~'#1'~tokens~when~trying~to~split~argument. }
-  {
-    LaTeX~was~asked~to~split~the~input~'#3'~
-    at~each~occurrence~of~the~token~'#1',~up~to~a~maximum~of~#2~parts.~
-    There~were~too~many~'#1'~tokens.
-  }
-\__kernel_msg_new:nnnn { xparse } { unknown }
-  { Unknown~document~#1. }
-  {
-    You~have~asked~for~the~argument~specification~for~the~#1,~
-    but~it~is~not~defined.
-  }
-\__kernel_msg_new:nnnn { xparse } { verbatim-newline }
-  { Verbatim~argument~of~#1~ended~by~end~of~line. }
-  {
-    The~verbatim~argument~of~the~#1~cannot~contain~more~than~one~line,~
-    but~the~end~
-    of~the~current~line~has~been~reached.~You~may~have~forgotten~the~
-    closing~delimiter.
-    \\ \\
-    LaTeX~will~ignore~'#2'.
-  }
-\__kernel_msg_new:nnnn { xparse } { verbatim-tokenized }
-  { The~verbatim~#1~cannot~be~used~inside~an~argument. }
-  {
-    The~#1~takes~a~verbatim~argument.~
-    It~may~not~appear~within~the~argument~of~another~function.~
-    It~received~an~illegal~token \tl_if_empty:nF {#3} { ~'#3' } .
-    \\ \\
-    LaTeX~will~ignore~'#2'.
-  }
-%    \end{macrocode}
-%
-% Intended more for information.
-%    \begin{macrocode}
-\__kernel_msg_new:nnn { xparse } { define-command }
-  {
-    Defining~command~#1~
-    with~sig.~'#2'~\msg_line_context:.
-  }
-\__kernel_msg_new:nnn { xparse } { define-environment }
-  {
-    Defining~environment~'#1'~
-    with~sig.~'#2'~\msg_line_context:.
-  }
-\__kernel_msg_new:nnn { xparse } { redefine-command }
-  {
-    Redefining~command~#1~
-    with~sig.~'#2'~\msg_line_context:.
-  }
-\__kernel_msg_new:nnn { xparse } { redefine-environment }
-  {
-    Redefining~environment~'#1'~
-    with~sig.~'#2'~\msg_line_context:.
-  }
-\__kernel_msg_new:nnn { xparse } { optional-mandatory }
-  {
-    Since~the~mandatory~argument~'#1'~has~the~same~delimiter~'#2'~
-    as~a~previous~optional~argument,~it~will~not~be~possible~to~
-    omit~all~optional~arguments~when~calling~this~command.
-  }
-\__kernel_msg_new:nnn { xparse } { unsupported-let }
-  {
-    The~command~'#1'~was~undefined~but~not~the~associated~commands~
-    '#1~code'~and/or~'#1~defaults'.~Maybe~you~tried~using~
-    \iow_char:N\\let.~This~may~lead~to~an~infinite~loop.
-  }
-%    \end{macrocode}
-%
-% \subsection{User functions}
-%
-% The user functions are more or less just the internal functions
-% renamed.
-%
-% \begin{macro}{\BooleanFalse}
-% \begin{macro}{\BooleanTrue}
-%   Design-space names for the Boolean values.
-%    \begin{macrocode}
-\cs_new_eq:NN \BooleanFalse \c_false_bool
-\cs_new_eq:NN \BooleanTrue  \c_true_bool
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\NewDocumentCommand}
-% \begin{macro}{\RenewDocumentCommand}
-% \begin{macro}{\ProvideDocumentCommand}
-% \begin{macro}{\DeclareDocumentCommand}
-%   The user macros are pretty simple wrappers around the internal ones.
-%   There is however a check that the first argument is a single token,
-%   possibly surrounded by spaces (hence the strange \cs{use:nnn}), and
-%   is definable.
-%    \begin{macrocode}
-\cs_new_protected:Npn \NewDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \NewDocumentCommand
-      {
-        \cs_if_exist:NTF #1
-          {
-            \__kernel_msg_error:nnxx { xparse } { command-already-defined }
-              { \use:nnn \token_to_str:N #1 { } }
-              { \token_to_str:N \NewDocumentCommand }
-          }
-          { \@@_declare_cmd:Nnn #1 {#2} {#3} }
-      }
-  }
-\cs_new_protected:Npn \RenewDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \RenewDocumentCommand
-      {
-        \cs_if_exist:NTF #1
-          { \@@_declare_cmd:Nnn #1 {#2} {#3} }
-          {
-            \__kernel_msg_error:nnxx { xparse } { command-not-yet-defined }
-              { \use:nnn \token_to_str:N #1 { } }
-              { \token_to_str:N \RenewDocumentCommand }
-          }
-      }
-  }
-\cs_new_protected:Npn \ProvideDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \ProvideDocumentCommand
-      { \cs_if_exist:NF #1 { \@@_declare_cmd:Nnn #1 {#2} {#3} } }
- }
-\cs_new_protected:Npn \DeclareDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \DeclareDocumentCommand
-      { \@@_declare_cmd:Nnn #1 {#2} {#3} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\NewDocumentEnvironment}
-% \begin{macro}{\RenewDocumentEnvironment}
-% \begin{macro}{\ProvideDocumentEnvironment}
-% \begin{macro}{\DeclareDocumentEnvironment}
-%   Very similar for environments.
-%    \begin{macrocode}
-\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
-  {
-    \cs_if_exist:cTF {#1}
-      { \__kernel_msg_error:nnx { xparse } { environment-already-defined } {#1} }
-      { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
-  }
-\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
-  {
-    \cs_if_exist:cTF {#1}
-      { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
-      { \__kernel_msg_error:nnx { xparse } { environment-not-yet-defined } {#1} }
-  }
-\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
-  { \cs_if_exist:cF {#1} { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} } }
-\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
-  { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\NewExpandableDocumentCommand}
-% \begin{macro}{\RenewExpandableDocumentCommand}
-% \begin{macro}{\ProvideExpandableDocumentCommand}
-% \begin{macro}{\DeclareExpandableDocumentCommand}
-%   The expandable versions are essentially the same as the basic
-%   functions.  The strange \cs{use:nnn} is there in case |#1| is
-%   surrounded with spaces, as can happen with usual document catcodes
-%   in \cs{RenewExpandableDocumentCommand} |{| |\!| |}| \ldots{}
-%    \begin{macrocode}
-\cs_new_protected:Npn \NewExpandableDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \NewExpandableDocumentCommand
-      {
-        \cs_if_exist:NTF #1
-          {
-            \__kernel_msg_error:nnxx { xparse } { command-already-defined }
-              { \use:nnn \token_to_str:N #1 { } }
-              { \token_to_str:N \NewExpandableDocumentCommand }
-          }
-          { \@@_declare_expandable_cmd:Nnn #1 {#2} {#3} }
-      }
-  }
-\cs_new_protected:Npn \RenewExpandableDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \RenewExpandableDocumentCommand
-      {
-        \cs_if_exist:NTF #1
-          { \@@_declare_expandable_cmd:Nnn #1 {#2} {#3} }
-          {
-            \__kernel_msg_error:nnxx { xparse } { command-not-yet-defined }
-              { \use:nnn \token_to_str:N #1 { } }
-              { \token_to_str:N \RenewExpandableDocumentCommand }
-          }
-      }
-  }
-\cs_new_protected:Npn \ProvideExpandableDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \ProvideExpandableDocumentCommand
-      {
-        \cs_if_exist:NF #1
-          { \@@_declare_expandable_cmd:Nnn #1 {#2} {#3} }
-      }
- }
-\cs_new_protected:Npn \DeclareExpandableDocumentCommand #1#2#3
-  {
-    \@@_check_definable:nNT {#1} \DeclareExpandableDocumentCommand
-      { \@@_declare_expandable_cmd:Nnn #1 {#2} {#3} }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\IfBooleanT, \IfBooleanF, \IfBooleanTF}
-%   The logical \meta{true} and \meta{false} statements are just the
-%   normal \cs{c_true_bool} and \cs{c_false_bool} so \cs{bool_if:NTF} is
-%   almost enough.  However, this code-level function blows up badly
-%   when passed invalid input.  We want \cs{IfBooleanTF} to accept a
-%   single (non-space) token equal to \cs{c_true_bool} or
-%   \cs{c_false_bool}, possibly surrounded by spaces.  If the input is
-%   blank or multiple items, jump to the error and pick the false
-%   branch.  If the input, ignoring spaces (we do this by omitting
-%   braces in the \cs{tl_if_single_token:nF} test), is not a single
-%   token then jump to the error as well.  It is then safe to compare
-%   the token to the two booleans, picking the appropriate branch.  If
-%   neither matches, we jump to the error as well.
-%    \begin{macrocode}
-\cs_new:Npn \IfBooleanTF #1
-  {
-    \tl_if_single:nF {#1}
-      { \prg_break:n { \use:n } }
-    \tl_if_single_token:nF #1
-      { \prg_break:n { \use:n } }
-    \token_if_eq_meaning:NNT #1 \c_true_bool
-      { \prg_break:n { \use_ii:nnn } }
-    \token_if_eq_meaning:NNT #1 \c_false_bool
-      { \prg_break:n { \use_iii:nnn } }
-    \prg_break:n { \use:n }
-    \prg_break_point:
-    {
-      \__kernel_msg_expandable_error:nnn { xparse } { if-boolean } {#1}
-      \use_ii:nn
-    }
-  }
-\cs_new:Npn \IfBooleanT #1#2 { \IfBooleanTF {#1} {#2} { } }
-\cs_new:Npn \IfBooleanF #1 { \IfBooleanTF {#1} { } }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\IfNoValueT, \IfNoValueF, \IfNoValueTF}
-%   Simple re-naming.
-%    \begin{macrocode}
-\cs_new_eq:NN \IfNoValueF  \tl_if_novalue:nF
-\cs_new_eq:NN \IfNoValueT  \tl_if_novalue:nT
-\cs_new_eq:NN \IfNoValueTF \tl_if_novalue:nTF
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\IfValueT, \IfValueF, \IfValueTF}
-%   Inverted logic.
-%    \begin{macrocode}
-\cs_new:Npn \IfValueF { \tl_if_novalue:nT }
-\cs_new:Npn \IfValueT { \tl_if_novalue:nF }
-\cs_new:Npn \IfValueTF #1#2#3 { \tl_if_novalue:nTF {#1} {#3} {#2} }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ProcessedArgument}
-%   Processed arguments are returned using this name, which is reserved
-%   here although the definition will change.
-%    \begin{macrocode}
-\tl_new:N \ProcessedArgument
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ReverseBoolean, \SplitArgument, \SplitList, \TrimSpaces}
-%   Simple copies.
-%    \begin{macrocode}
-\cs_new_eq:NN \ReverseBoolean \@@_bool_reverse:N
-\cs_new_eq:NN \SplitArgument  \@@_split_argument:nnn
-\cs_new_eq:NN \SplitList      \@@_split_list:nn
-\cs_new_eq:NN \TrimSpaces     \@@_trim_spaces:n
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ProcessList}
-%   To support \cs{SplitList}.
-%    \begin{macrocode}
-\cs_new_eq:NN \ProcessList \tl_map_function:nN
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\GetDocumentCommandArgSpec}
-% \begin{macro}{\GetDocumentEnvironmentArgSpec}
-% \begin{macro}{\ShowDocumentCommandArgSpec}
-% \begin{macro}{\ShowDocumentEnvironmentArgSpec}
-%   More simple mappings, with a check that the argument is a single
-%   control sequence or active character.
-%    \begin{macrocode}
-\cs_new_protected:Npn \GetDocumentCommandArgSpec #1
-  {
-    \@@_check_definable:nNT {#1} \GetDocumentCommandArgSpec
-      { \@@_get_arg_spec:N #1 }
-  }
-\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \@@_get_arg_spec:n
-\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1
-  {
-    \@@_check_definable:nNT {#1} \ShowDocumentCommandArgSpec
-      { \@@_show_arg_spec:N #1 }
-  }
-\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \@@_show_arg_spec:n
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%    \begin{macrocode}
-\@@_file_end_hook:
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%</core>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*2ekernel>
-\ExplSyntaxOff
-%</2ekernel>
-%    \end{macrocode}
-%
 % \end{implementation}
 %
 % \PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: xparse.ins
 
-Copyright (C) 2000-2012,2016,2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2000-2012,2016,2017,2019-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -23,7 +23,7 @@
 
 \preamble
 
-Copyright (C) 2009-2020 The LaTeX3 Project
+Copyright (C) 2009-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -42,8 +42,7 @@
 
 \keepsilent
 
-\generate{\file{xparse-generic.tex}{\from{xparse.dtx}{core}}
-          \file{xparse.sty}{\from{xparse.dtx}{package}}
+\generate{\file{xparse.sty}{\from{xparse.dtx}{package}}
           \file{xparse.ltx}{\from{xparse.dtx}{2ekernel}}}
 
 \endbatchfile

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -3,8 +3,8 @@
 %% File: xtemplate.dtx
 %
 % Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
-%           (C) 2004-2010 Frank Mittelbach, The LaTeX3 Project
-%           (C) 2011-2020 The LaTeX3 Project
+%           (C) 2004-2010 Frank Mittelbach, The LaTeX Project
+%           (C) 2011-2021 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -55,7 +55,7 @@
 % }
 %
 % \author{^^A
-%  The \LaTeX3 Project\thanks
+%  The \LaTeX{} Project\thanks
 %    {^^A
 %      E-mail:
 %        \href{mailto:latex-team at latex-project.org}
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-10-27}
+% \date{Released 2021-02-02}
 %
 % \maketitle
 %
@@ -682,7 +682,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xtemplate}{2020-10-27}{}
+\ProvidesExplPackage{xtemplate}{2021-02-02}{}
   {L3 Experimental prototype document functions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.ins	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.ins	2021-02-02 22:16:13 UTC (rev 57600)
@@ -2,7 +2,7 @@
 
 File: xtemplate.ins
 
-Copyright (C) 2000-2012,2016,2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2000-2012,2016,2017,2019-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@
 
 \preamble
 
-Copyright (C) 2011-2020 The LaTeX3 Project
+Copyright (C) 2011-2021 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -56,7 +56,7 @@
 %% l3legacy.dtx  (with options: `package')
 %% l3deprecation.dtx  (with options: `package,kernel')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -69,7 +69,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-01-09}%
+\def\ExplFileDate{2021-02-02}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -3705,12 +3705,14 @@
   { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
 \cs_new_protected:Npn \tl_gset:Nx #1#2
   { \__kernel_tl_gset:Nx #1 {#2} }
-\cs_generate_variant:Nn \tl_set:Nn  {         NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , cf }
 \cs_generate_variant:Nn \tl_set:Nx  { c }
-\cs_generate_variant:Nn \tl_set:Nn  { c, co , cV , cv , cf }
-\cs_generate_variant:Nn \tl_gset:Nn {         NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_set:No  { c }
+\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Nf }
+\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , cf }
 \cs_generate_variant:Nn \tl_gset:Nx { c }
-\cs_generate_variant:Nn \tl_gset:Nn { c, co , cV , cv , cf }
+\cs_generate_variant:Nn \tl_gset:No { c }
 \cs_new_protected:Npn \tl_put_left:Nn #1#2
   {
     \__kernel_tl_set:Nx #1
@@ -5368,6 +5370,7 @@
 \str_const:Nx \c_percent_str     { \cs_to_str:N \% }
 \str_const:Nx \c_tilde_str       { \cs_to_str:N \~ }
 \str_const:Nx \c_underscore_str  { \cs_to_str:N \_ }
+\str_const:Nx \c_zero_str        { 0 }
 \str_new:N \l_tmpa_str
 \str_new:N \l_tmpb_str
 \str_new:N \g_tmpa_str

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `generic,loader')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-01-09}%
+\def\ExplFileDate{2021-02-02}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `2ekernel,loader')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-01-09}%
+\def\ExplFileDate{2021-02-02}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2021-02-02 22:16:13 UTC (rev 57600)
@@ -9,7 +9,7 @@
 -- l3sys.dtx  (with options: `package,lua')
 -- l3token.dtx  (with options: `package,lua')
 -- 
--- Copyright (C) 1990-2021 The LaTeX3 Project
+-- Copyright (C) 1990-2021 The LaTeX Project
 -- 
 -- It may be distributed and/or modified under the conditions of
 -- the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `package,loader')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2021-01-09}%
+\def\ExplFileDate{2021-02-02}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3debug.dtx  (with options: `package')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3deprecation.dtx  (with options: `package,patches')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3doc.dtx  (with options: `class')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3docstrip.dtx  (with options: `program')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88591')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885910')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885911')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885913')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885914')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885915')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885916')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88592')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88593')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88594')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88595')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88596')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88597')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88598')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88599')
 %% 
-%% Copyright (C) 1990-2021 The LaTeX3 Project
+%% Copyright (C) 1990-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% l3keys2e.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2009-2020 The LaTeX3 Project
+%% Copyright (C) 2009-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3keys2e}{2020-10-27}{}
+\ProvidesExplPackage{l3keys2e}{2021-02-02}{}
   {LaTeX2e option processing using LaTeX3 keys}
 \cs_generate_variant:Nn \clist_put_right:Nn { Nv }
 \cs_generate_variant:Nn \keys_if_exist:nnT  { nx }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% xfp.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2017-2020 The LaTeX3 Project
+%% Copyright (C) 2017-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{xparse}
-\ProvidesExplPackage{xfp}{2020-10-27}{}
+\ProvidesExplPackage{xfp}{2021-02-02}{}
   {L3 Floating point unit}
 \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
 \NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -7,7 +7,7 @@
 %% xfrac.dtx  (with options: `package')
 %% 
 %% Copyright (C) 2004,2008-2010 Morten Hoegholm
-%%           (C) 2011-2020 The LaTeX3 Project
+%%           (C) 2011-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -34,7 +34,7 @@
     \endinput
   }
 \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\ProvidesExplPackage{xfrac}{2020-10-27}{}
+\ProvidesExplPackage{xfrac}{2021-02-02}{}
   {L3 Experimental split-level fractions}
 \keys_define:nn { xfrac }
   {

Added: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2018-04-12.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2018-04-12.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2018-04-12.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -0,0 +1,2402 @@
+%%
+%% This is file `xparse-2018-04-12.sty', generated from
+%% xparse.dtx  (with options: `core,package', on 2021-01-20)
+%% then adapted and frozen for compatibility.  Development of
+%% xparse.dtx will continue in the LaTeX2e kernel as ltcmd.dtx.
+%% 
+%% Copyright (C) 2009-2021 The LaTeX Project
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "l3packages bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: xparse.dtx
+\RequirePackage{expl3}[2018-04-12]
+\@ifpackagelater{expl3}{2018-04-12}
+  {}
+  {%
+    \PackageError{xparse}{Support package l3kernel too old}
+      {%
+        Please install an up to date version of l3kernel\MessageBreak
+        using your TeX package manager or from CTAN.\MessageBreak
+        \MessageBreak
+        Loading xparse will abort!%
+      }%
+    \endinput
+  }
+% \ProvidesExplPackage{xparse}{2021-01-09}{}
+%   {L3 Experimental document command parser}
+\expandafter\protected at xdef\csname ver at xparse.sty\endcsname
+  {2021-01-09 L3 Experimental document command parser}
+\ExplSyntaxOn
+\clist_new:N \l__xparse_options_clist
+\DeclareOption* { \clist_put_right:NV \l__xparse_options_clist \CurrentOption }
+\ProcessOptions \relax
+\keys_define:nn { xparse }
+  {
+    log-declarations .bool_set:N = \l__xparse_log_bool ,
+    log-declarations .initial:n  = false
+  }
+\keys_set:nV { xparse } \l__xparse_options_clist
+\bool_if:NF \l__xparse_log_bool
+  { \msg_redirect_module:nnn { LaTeX / xparse } { info } { none } }
+\tl_new:N \l__xparse_arg_spec_tl
+\tl_new:N \l__xparse_args_tl
+\tl_new:N \l__xparse_args_i_tl
+\tl_new:N \l__xparse_args_ii_tl
+\int_new:N \l__xparse_current_arg_int
+\bool_new:N \l__xparse_defaults_bool
+\tl_new:N \l__xparse_defaults_tl
+\bool_new:N \l__xparse_environment_bool
+\str_new:N \l__xparse_environment_str
+\bool_new:N \l__xparse_expandable_bool
+\tl_new:N \l__xparse_expandable_aux_name_tl
+\tl_set:Nn \l__xparse_expandable_aux_name_tl
+  {
+    \l__xparse_function_tl \c_space_tl
+    ( arg~ \int_use:N \l__xparse_current_arg_int )
+  }
+\int_new:N \g__xparse_grabber_int
+\tl_new:N \l__xparse_fn_tl
+\tl_new:N \l__xparse_fn_code_tl
+\tl_new:N \l__xparse_function_tl
+\bool_new:N \l__xparse_grab_expandably_bool
+\bool_new:N \l__xparse_obey_spaces_bool
+\tl_new:N \l__xparse_last_delimiters_tl
+\bool_new:N \l__xparse_long_bool
+\int_new:N \l__xparse_m_args_int
+\bool_new:N \l__xparse_prefixed_bool
+\tl_new:N \l__xparse_process_all_tl
+\tl_new:N \l__xparse_process_one_tl
+\bool_new:N \l__xparse_process_some_bool
+\tl_new:N \l__xparse_saved_args_tl
+\tl_new:N \l__xparse_signature_tl
+\bool_new:N \l__xparse_some_obey_spaces_bool
+\bool_new:N \l__xparse_some_long_bool
+\bool_new:N \l__xparse_some_short_bool
+\prop_new:N \l__xparse_tmp_prop
+\tl_new:N \l__xparse_tmpa_tl
+\tl_new:N \l__xparse_tmpb_tl
+\cs_new_eq:NN \__xparse_tmp:w ?
+\cs_new_protected:Npn \__xparse_declare_cmd:Nnn
+  {
+    \bool_set_false:N \l__xparse_expandable_bool
+    \__xparse_declare_cmd_aux:Nnn
+  }
+\cs_new_protected:Npn \__xparse_declare_expandable_cmd:Nnn
+  {
+    \bool_set_true:N \l__xparse_expandable_bool
+    \__xparse_declare_cmd_aux:Nnn
+  }
+\cs_new_protected:Npn \__xparse_declare_cmd_aux:Nnn #1#2#3
+  {
+    \cs_if_exist:NTF #1
+      {
+        \__kernel_msg_info:nnxx { xparse } { redefine-command }
+          { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+      }
+      {
+        \bool_lazy_or:nnT
+          { \cs_if_exist_p:c { \cs_to_str:N #1 ~ code } }
+          { \cs_if_exist_p:c { \cs_to_str:N #1 ~ defaults } }
+          {
+            \__kernel_msg_warning:nnx { xparse } { unsupported-let }
+              { \token_to_str:N #1 }
+          }
+        \__kernel_msg_info:nnxx { xparse } { define-command }
+          { \token_to_str:N #1 } { \tl_to_str:n {#2} }
+      }
+    \bool_set_false:N \l__xparse_environment_bool
+    \__xparse_declare_cmd_internal:Nnnn #1 {#2} {#3} { }
+  }
+\cs_new_protected:Npn \__xparse_declare_cmd_internal:Nnnn #1#2#3#4
+  {
+    \tl_set:Nx \l__xparse_function_tl { \cs_to_str:N #1 }
+    \tl_set:Nx \l__xparse_fn_tl
+      { \exp_not:c { \l__xparse_function_tl \c_space_tl } }
+    \__xparse_normalize_arg_spec:n {#2}
+    \exp_args:No \__xparse_prepare_signature:n \l__xparse_arg_spec_tl
+    \__xparse_declare_cmd_code:Nnn #1 {#2} {#3}
+    #4
+    \__xparse_break_point:n {#2}
+  }
+\cs_generate_variant:Nn \__xparse_declare_cmd_internal:Nnnn { cnx }
+\cs_new_eq:NN \__xparse_break_point:n \use_none:n
+\cs_new_protected:Npn \__xparse_declare_cmd_code:Nnn
+  {
+    \bool_if:NTF \l__xparse_grab_expandably_bool
+      { \__xparse_declare_cmd_code_expandable:Nnn }
+      { \__xparse_declare_cmd_code_aux:Nnn }
+   }
+\cs_new_protected:Npn \__xparse_declare_cmd_code_aux:Nnn #1#2#3
+  {
+    \cs_generate_from_arg_count:cNnn
+      { \l__xparse_function_tl \c_space_tl code }
+      \cs_set_protected:Npn \l__xparse_current_arg_int {#3}
+    \cs_set_protected_nopar:Npx #1
+      {
+        \bool_if:NTF \l__xparse_environment_bool
+          {
+            \__xparse_start_env:nnnnn { \exp_not:n {#2} }
+              { \l__xparse_environment_str }
+          }
+          {
+            \__xparse_start:nNNnnn { \exp_not:n {#2} }
+              \exp_not:c { \l__xparse_function_tl \c_space_tl }
+              \exp_not:c { \l__xparse_function_tl \c_space_tl code }
+          }
+          { \exp_not:o \l__xparse_signature_tl }
+          {
+            \bool_if:NT \l__xparse_defaults_bool
+              { \exp_not:o \l__xparse_defaults_tl }
+          }
+          {
+            \bool_if:NT \l__xparse_process_some_bool
+              { \exp_not:o \l__xparse_process_all_tl }
+          }
+      }
+  }
+\cs_new_protected:Npn \__xparse_declare_cmd_code_expandable:Nnn #1#2#3
+  {
+    \exp_args:Ncc \cs_generate_from_arg_count:NNnn
+      { \l__xparse_function_tl \c_space_tl code }
+      { cs_set \bool_if:NF \l__xparse_expandable_bool { _protected } :Npn }
+      \l__xparse_current_arg_int {#3}
+    \bool_if:NT \l__xparse_defaults_bool
+      {
+        \use:x
+          {
+            \cs_generate_from_arg_count:cNnn
+              { \l__xparse_function_tl \c_space_tl defaults }
+              \cs_set:Npn \l__xparse_current_arg_int
+              { \exp_not:o \l__xparse_defaults_tl }
+          }
+      }
+    \bool_if:NTF \l__xparse_expandable_bool
+      { \cs_set_nopar:Npx } { \cs_set_protected_nopar:Npx } #1
+      {
+        \exp_not:N \__xparse_start_expandable:nNNNNn
+          { \exp_not:n {#2} }
+          \exp_not:c { \l__xparse_function_tl \c_space_tl }
+          \exp_not:c
+            {
+              \l__xparse_function_tl \c_space_tl
+              \bool_if:NT \l__xparse_some_short_bool
+                { \bool_if:NT \l__xparse_some_long_bool { \c_space_tl } }
+            }
+          \exp_not:c { \l__xparse_function_tl \c_space_tl code }
+          \bool_if:NTF \l__xparse_defaults_bool
+            { \exp_not:c { \l__xparse_function_tl \c_space_tl defaults } }
+            { ? }
+          { \exp_not:o \l__xparse_signature_tl }
+      }
+    \bool_if:NTF \l__xparse_some_long_bool
+      {
+        \bool_if:NT \l__xparse_some_short_bool
+          {
+            \cs_set_nopar:cpx { \l__xparse_function_tl \c_space_tl \c_space_tl }
+              ##1##2 { ##1 {##2} }
+          }
+        \cs_set:cpx
+      }
+      { \cs_set_nopar:cpx }
+          { \l__xparse_function_tl \c_space_tl } ##1##2 { ##1 {##2} }
+  }
+\cs_new_protected:Npn \__xparse_declare_env:nnnn #1#2
+  {
+    \str_set:Nx \l__xparse_environment_str {#1}
+    \str_set:Nx \l__xparse_environment_str
+      { \tl_trim_spaces:o { \l__xparse_environment_str } }
+    \cs_if_exist:cTF { \l__xparse_environment_str }
+      {
+        \__kernel_msg_info:nnxx { xparse } { redefine-environment }
+          { \l__xparse_environment_str } { \tl_to_str:n {#2} }
+      }
+      {
+        \__kernel_msg_info:nnxx { xparse } { define-environment }
+          { \l__xparse_environment_str } { \tl_to_str:n {#2} }
+      }
+    \bool_set_false:N \l__xparse_expandable_bool
+    \bool_set_true:N \l__xparse_environment_bool
+    \exp_args:NV \__xparse_declare_env_internal:nnnn
+      \l__xparse_environment_str {#2}
+  }
+\cs_new_protected:Npn \__xparse_declare_env_internal:nnnn #1#2#3#4
+  {
+    \__xparse_declare_cmd_internal:cnxn { environment~ #1 } {#2}
+      {
+        \cs_set_nopar:Npx \exp_not:c { environment~ #1 ~end~aux }
+          {
+            \exp_not:N \exp_not:N \exp_not:c { environment~ #1~end~aux~ }
+            \exp_not:n { \exp_not:o \l__xparse_args_tl }
+          }
+        \exp_not:n {#3}
+      }
+      {
+        \cs_set_nopar:cpx { environment~ #1 ~end }
+          { \exp_not:c { environment~ #1 ~end~aux } }
+        \cs_generate_from_arg_count:cNnn
+          { environment~ #1 ~end~aux~ } \cs_set:Npn
+          \l__xparse_current_arg_int {#4}
+        \cs_set_eq:cc {#1}       { environment~ #1 }
+        \cs_set_eq:cc { end #1 } { environment~ #1 ~end }
+      }
+  }
+\cs_new_protected:Npn \__xparse_start_env:nnnnn #1#2
+  {
+    \cs_if_exist_use:N \conditionally at traceoff
+    \group_align_safe_begin:
+    \str_set:Nn \l__xparse_environment_str {#2}
+    \bool_set_true:N \l__xparse_environment_bool
+    \__xparse_start_aux:ccnnnn
+      { environment~ \l__xparse_environment_str \c_space_tl }
+      { environment~ \l__xparse_environment_str \c_space_tl code }
+      {#1}
+  }
+\cs_new_protected:Npx \__xparse_start:nNNnnn #1#2#3
+  {
+    \exp_not:c { xparse~function~is~not~expandable }
+    \exp_not:n { \cs_if_exist_use:N \conditionally at traceoff }
+    \exp_not:N \group_align_safe_begin:
+    \exp_not:n { \bool_set_false:N \l__xparse_environment_bool }
+    \exp_not:N \__xparse_start_aux:NNnnnn
+    #2 #3 {#1}
+  }
+\cs_new_protected:Npn \__xparse_start_aux:NNnnnn #1#2#3#4#5#6
+  {
+    \tl_clear:N \l__xparse_args_tl
+    \tl_set:Nn \l__xparse_fn_tl {#1}
+    \tl_set:Nn \l__xparse_fn_code_tl {#2}
+    \tl_set:Nn \l__xparse_defaults_tl {#5}
+    \tl_set:Nn \l__xparse_process_all_tl {#6}
+    #4 \__xparse_run_code:
+  }
+\cs_generate_variant:Nn \__xparse_start_aux:NNnnnn { cc }
+\cs_new_protected:Npn \__xparse_run_code:
+  {
+    \tl_if_empty:NF \l__xparse_defaults_tl { \__xparse_defaults: }
+    \tl_if_empty:NF \l__xparse_process_all_tl { \__xparse_args_process: }
+    \group_align_safe_end:
+    \cs_if_exist_use:N \conditionally at traceon
+    \exp_after:wN \l__xparse_fn_code_tl \l__xparse_args_tl
+  }
+\cs_new_protected:Npn \__xparse_defaults:
+  {
+    \__xparse_defaults_def:
+    \tl_set_eq:NN \l__xparse_args_i_tl \l__xparse_args_tl
+    \__xparse_defaults_aux: \__xparse_defaults_aux: \__xparse_defaults_aux:
+    \__xparse_defaults_aux: \__xparse_defaults_aux: \__xparse_defaults_aux:
+    \__xparse_defaults_aux: \__xparse_defaults_aux: \__xparse_defaults_aux:
+    \__xparse_defaults_error:w
+    \q_recursion_stop
+    \tl_set_eq:NN \l__xparse_args_tl \l__xparse_args_i_tl
+  }
+\cs_new_protected:Npn \__xparse_defaults_aux:
+  {
+    \tl_set:Nx \l__xparse_args_ii_tl
+      { \exp_after:wN \__xparse_tmp:w \l__xparse_args_i_tl }
+    \tl_if_eq:NNT \l__xparse_args_ii_tl \l__xparse_args_i_tl
+      { \use_none_delimit_by_q_recursion_stop:w }
+    \tl_set_eq:NN \l__xparse_args_i_tl \l__xparse_args_ii_tl
+  }
+\cs_new_protected:Npn \__xparse_defaults_error:w \q_recursion_stop
+  {
+    \__kernel_msg_error:nnx { xparse } { loop-in-defaults }
+      { \__xparse_environment_or_command: }
+  }
+\cs_new_protected:Npn \__xparse_defaults_def:
+  {
+    \tl_clear:N \l__xparse_tmpa_tl
+    \int_zero:N \l__xparse_current_arg_int
+    \__xparse_tl_mapthread_function:NNN \l__xparse_args_tl \l__xparse_defaults_tl
+      \__xparse_defaults_def:nn
+    \cs_generate_from_arg_count:NNVo \__xparse_tmp:w \cs_set:Npn
+      \l__xparse_current_arg_int \l__xparse_tmpa_tl
+  }
+\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNVo }
+\cs_new_protected:Npn \__xparse_defaults_def:nn
+  {
+    \int_incr:N \l__xparse_current_arg_int
+    \exp_args:NV \__xparse_defaults_def:nnn \l__xparse_current_arg_int
+  }
+\cs_new_protected:Npn \__xparse_defaults_def:nnn #1#2#3
+  {
+    \tl_put_right:Nx \l__xparse_tmpa_tl
+      {
+        {
+          \exp_not:N \exp_not:n
+            {
+              \tl_if_novalue:nTF {#2}
+                { \exp_not:o {#3} }
+                { \exp_not:n { ## #1 } }
+            }
+        }
+      }
+  }
+\cs_new_protected:Npn \__xparse_args_process:
+  {
+    \tl_clear:N \l__xparse_args_ii_tl
+    \__xparse_tl_mapthread_function:NNN
+      \l__xparse_args_tl
+      \l__xparse_process_all_tl
+      \__xparse_args_process_loop:nn
+    \tl_set_eq:NN \l__xparse_args_tl \l__xparse_args_ii_tl
+  }
+\cs_new_protected:Npn \__xparse_args_process_loop:nn #1#2
+  {
+    \tl_set:Nn \ProcessedArgument {#1}
+    \tl_if_novalue:nF {#1}
+      { \tl_map_function:nN {#2} \__xparse_args_process_aux:n }
+    \tl_put_right:No \l__xparse_args_ii_tl
+      { \exp_after:wN { \ProcessedArgument } }
+  }
+\cs_new_protected:Npn \__xparse_args_process_aux:n #1
+  {
+    \cs_generate_from_arg_count:NNnn \__xparse_tmp:w \cs_set:Npn
+      { \tl_count:N \l__xparse_args_tl } {#1}
+    \exp_args:NNNo \exp_after:wN \__xparse_tmp:w \l__xparse_args_tl
+      { \ProcessedArgument }
+  }
+\cs_new:Npn \__xparse_start_expandable:nNNNNn #1#2#3#4#5#6
+  {
+    \group_align_safe_begin:
+    #6 \__xparse_end_expandable:NNw #5 #4 \q__xparse #2#3
+  }
+\cs_new:Npn \__xparse_end_expandable:NNw #1#2
+  { \__xparse_end_expandable_aux:w #1#2 \prg_do_nothing: }
+\cs_new:Npn \__xparse_end_expandable_aux:w #1#2#3 \q__xparse
+  { \exp_args:No \__xparse_end_expandable_aux:nNNNN {#3} #1 #2 }
+\cs_new:Npn \__xparse_end_expandable_aux:nNNNN #1#2#3#4#5
+  {
+    \token_if_eq_charcode:NNT ? #2 { \exp_after:wN \use_iv:nnnn }
+    \__xparse_end_expandable_defaults:nnnNNn {#1} { } {#1} #2#3
+      { } { } { } { } { } { } { } { } { } { }
+      {
+        \__kernel_msg_expandable_error:nnf
+          { xparse } { loop-in-defaults }
+          { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N #4 } }
+        \use_iv:nnnn
+      }
+    \q_stop
+  }
+\cs_new:Npn \__xparse_end_expandable_defaults:nnnNNn #1#2#3#4#5#6
+  {
+    #6
+    \str_if_eq:nnTF {#1} {#2}
+      { \use_i_delimit_by_q_stop:nw { \group_align_safe_end: #5 #1 } }
+      {
+        \exp_args:No \__xparse_tl_mapthread_function:nnN
+          { #4 #1 } {#3}
+          \__xparse_end_expandable_defaults:nnw
+        \__xparse_end_expandable_defaults:nnnNNn { } {#1} {#3} #4 #5
+      }
+  }
+\cs_new:Npn \__xparse_end_expandable_defaults:nnw #1#2
+  {
+    \tl_if_novalue:nTF {#2}
+      { \exp_args:No \__xparse_end_expandable_defaults:nw {#1} }
+      { \__xparse_end_expandable_defaults:nw {#2} }
+  }
+\cs_new:Npn \__xparse_end_expandable_defaults:nw
+    #1#2 \__xparse_end_expandable_defaults:nnnNNn #3
+  { #2 \__xparse_end_expandable_defaults:nnnNNn { #3 {#1} } }
+\cs_new_protected:Npn \__xparse_normalize_arg_spec:n #1
+  {
+    \int_zero:N \l__xparse_current_arg_int
+    \tl_clear:N \l__xparse_last_delimiters_tl
+    \tl_clear:N \l__xparse_arg_spec_tl
+    \bool_set_true:N \l__xparse_grab_expandably_bool
+    \bool_set_false:N \l__xparse_obey_spaces_bool
+    \bool_set_false:N \l__xparse_long_bool
+    \bool_set_false:N \l__xparse_some_obey_spaces_bool
+    \bool_set_false:N \l__xparse_some_long_bool
+    \bool_set_false:N \l__xparse_some_short_bool
+    \__xparse_normalize_arg_spec_loop:n #1
+      \q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop
+    \int_compare:nNnT \l__xparse_current_arg_int > 9
+      {
+        \__kernel_msg_error:nnxx { xparse } { too-many-arguments }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+    \bool_if:NT \l__xparse_expandable_bool
+      {
+        \tl_if_empty:NF \l__xparse_last_delimiters_tl
+          {
+            \__kernel_msg_error:nnxx { xparse } { expandable-ending-optional }
+              { \iow_char:N \\ \l__xparse_function_tl } { \tl_to_str:n {#1} }
+            \__xparse_bad_def:wn
+          }
+      }
+    \bool_if:NT \l__xparse_expandable_bool
+      { \bool_set_true:N \l__xparse_grab_expandably_bool }
+    \bool_if:NT \l__xparse_environment_bool
+      { \bool_set_false:N \l__xparse_grab_expandably_bool }
+  }
+\cs_new_protected:Npn \__xparse_normalize_arg_spec_loop:n #1
+  {
+    \quark_if_recursion_tail_stop:n {#1}
+    \int_incr:N \l__xparse_current_arg_int
+    \cs_if_exist_use:cF { __xparse_normalize_type_ \tl_to_str:n {#1} :w }
+      {
+        \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+  }
+\cs_set_protected:Npn \__xparse_tmp:w #1
+  {
+    \cs_new_protected:Npn \__xparse_normalize_type_d:w ##1##2
+      {
+        \quark_if_recursion_tail_stop_do:nn {##2} { \__xparse_bad_arg_spec:wn }
+        \__xparse_normalize_type_D:w {##1} {##2} {#1}
+      }
+    \cs_new_protected:Npn \__xparse_normalize_type_e:w ##1
+      {
+        \quark_if_recursion_tail_stop_do:nn {##1} { \__xparse_bad_arg_spec:wn }
+        \__xparse_normalize_type_E:w {##1} { }
+      }
+    \cs_new_protected:Npn \__xparse_normalize_type_o:w
+      { \__xparse_normalize_type_D:w [ ] {#1} }
+    \cs_new_protected:Npn \__xparse_normalize_type_O:w
+      { \__xparse_normalize_type_D:w [ ] }
+    \cs_new_protected:Npn \__xparse_normalize_type_r:w ##1##2
+      {
+        \quark_if_recursion_tail_stop_do:nn {##2} { \__xparse_bad_arg_spec:wn }
+        \__xparse_normalize_type_R:w {##1} {##2} {#1}
+      }
+    \cs_new_protected:Npn \__xparse_normalize_type_s:w
+      { \__xparse_normalize_type_t:w * }
+  }
+\exp_args:No \__xparse_tmp:w { \c_novalue_tl }
+\cs_new_protected:Npx \__xparse_normalize_type_g:w
+  { \exp_not:N \__xparse_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
+\cs_new_protected:cpn { __xparse_normalize_type_>:w } #1#2
+  {
+    \quark_if_recursion_tail_stop_do:nn {#2} { \__xparse_bad_arg_spec:wn }
+    \bool_if:NT \l__xparse_expandable_bool
+      {
+        \__kernel_msg_error:nnxx { xparse } { processor-in-expandable }
+          { \iow_char:N \\ \l__xparse_function_tl } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+    \tl_put_right:Nx \l__xparse_arg_spec_tl { > { \tl_trim_spaces:n {#1} } }
+    \int_decr:N \l__xparse_current_arg_int
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+    \__xparse_normalize_arg_spec_loop:n {#2}
+  }
+\cs_new_protected:cpn { __xparse_normalize_type_+:w } #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \bool_if:NT \l__xparse_long_bool
+      {
+        \__kernel_msg_error:nnxx { xparse } { two-markers }
+          { \__xparse_environment_or_command: } { + }
+        \__xparse_bad_def:wn
+      }
+    \bool_set_true:N \l__xparse_long_bool
+    \int_decr:N \l__xparse_current_arg_int
+    \__xparse_normalize_arg_spec_loop:n {#1}
+  }
+\cs_new_protected:cpn { __xparse_normalize_type_!:w } #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \bool_if:NT \l__xparse_obey_spaces_bool
+      {
+        \__kernel_msg_error:nnxx { xparse } { two-markers }
+          { \__xparse_environment_or_command: } { ! }
+        \__xparse_bad_def:wn
+      }
+    \bool_set_true:N \l__xparse_obey_spaces_bool
+    \bool_set_true:N \l__xparse_some_obey_spaces_bool
+    \int_decr:N \l__xparse_current_arg_int
+    \__xparse_normalize_arg_spec_loop:n {#1}
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_D:w #1#2#3
+  {
+    \quark_if_recursion_tail_stop_do:nn {#3} { \__xparse_bad_arg_spec:wn }
+    \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1
+    \__xparse_single_token_check:n {#2}
+    \__xparse_add_arg_spec:n { D #1 #2 {#3} }
+    \tl_put_right:Nn \l__xparse_last_delimiters_tl {#1}
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_E:w #1#2
+  {
+    \quark_if_recursion_tail_stop_do:nn {#2} { \__xparse_bad_arg_spec:wn }
+    \tl_if_blank:nT {#1} { \__xparse_bad_arg_spec:wn }
+    \tl_map_function:nN {#1} \__xparse_single_token_check:n
+    \tl_map_function:nN {#1} \__xparse_allowed_token_check:N
+    \__xparse_normalize_E_unique_check:w #1 \q_nil \q_stop
+    \int_compare:nNnT { \tl_count:n {#2} } > { \tl_count:n {#1} }
+      { \__xparse_bad_arg_spec:wn }
+    \__xparse_add_arg_spec:n { E {#1} {#2} }
+    \tl_put_right:Nn \l__xparse_last_delimiters_tl {#1}
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+    \int_add:Nn \l__xparse_current_arg_int { \tl_count:n {#1} - 1 }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_E_unique_check:w #1#2 \q_stop
+  {
+    \quark_if_nil:NF #1
+      {
+        \tl_if_in:nnT {#2} {#1} { \__xparse_bad_arg_spec:wn }
+        \__xparse_normalize_E_unique_check:w #2 \q_stop
+      }
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_G:w #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \__xparse_normalize_check_gv:N G
+    \__xparse_add_arg_spec:n { G {#1} }
+    \tl_put_right:Nn \l__xparse_last_delimiters_tl { { } }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_t:w #1
+  {
+    \quark_if_recursion_tail_stop_do:Nn #1 { \__xparse_bad_arg_spec:wn }
+    \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1
+    \tl_put_right:Nx \l__xparse_arg_spec_tl
+      {
+        \bool_if:NT \l__xparse_obey_spaces_bool { ! }
+        t \exp_not:n {#1}
+      }
+    \tl_put_right:Nn \l__xparse_last_delimiters_tl {#1}
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+    \bool_set_false:N \l__xparse_obey_spaces_bool
+    \bool_set_false:N \l__xparse_long_bool
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_l:w
+  {
+    \__xparse_normalize_check_lu:N l
+    \__xparse_add_arg_spec_mandatory:n { l }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_m:w
+  {
+    \__xparse_delimiter_check:nnn { } { m } { \iow_char:N \{ }
+    \__xparse_add_arg_spec_mandatory:n { m }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_R:w #1#2#3
+  {
+    \quark_if_recursion_tail_stop_do:nn {#3} { \__xparse_bad_arg_spec:wn }
+    \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1
+    \__xparse_single_token_check:n {#2}
+    \__xparse_delimiter_check:nnn {#1} { R/r } { \tl_to_str:n {#1} }
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+    \__xparse_add_arg_spec_mandatory:n { R #1 #2 {#3} }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_u:w #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \__xparse_normalize_check_lu:N u
+    \__xparse_add_arg_spec_mandatory:n { u {#1} }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_v:w
+  {
+    \__xparse_normalize_check_gv:N v
+    \__xparse_add_arg_spec_mandatory:n { v }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_b:w #1
+  {
+    \bool_if:NF \l__xparse_environment_bool
+      {
+        \__kernel_msg_error:nnxx
+          { xparse } { invalid-command-arg }
+          { \__xparse_environment_or_command: } { b }
+        \__xparse_bad_def:wn
+      }
+    \tl_clear:N \l__xparse_last_delimiters_tl
+    \__xparse_add_arg_spec:n { b }
+    \quark_if_recursion_tail_stop:n {#1}
+    \__kernel_msg_error:nnxx { xparse } { arg-after-body }
+      { \__xparse_environment_or_command: }
+      { \tl_to_str:n {#1} }
+    \__xparse_bad_def:wn
+  }
+\cs_new_protected:Npn \__xparse_single_token_check:n #1
+  {
+    \tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nF
+      {
+        \__kernel_msg_error:nnxx { xparse } { not-single-token }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+  }
+\cs_new_protected:Npn \__xparse_allowed_token_check:N #1
+  {
+    \token_if_eq_meaning:NNTF #1 \c_group_begin_token
+        { \use:n }
+        {
+          \token_if_eq_meaning:NNTF #1 \c_group_end_token
+            { \use:n }
+            { \use_none:n }
+        }
+      {
+        \__kernel_msg_error:nnxxx
+          { xparse } { forbidden-implicit-group-token }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+          {
+            \token_if_eq_meaning:NNTF #1 \c_group_begin_token
+              { begin } { end }
+          }
+        \__xparse_bad_def:wn
+      }
+  }
+\cs_new_protected:Npn \__xparse_normalize_check_gv:N #1
+  {
+    \bool_if:NT \l__xparse_expandable_bool
+      {
+        \__kernel_msg_error:nnxx
+          { xparse } { invalid-expandable-argument-type }
+          { \iow_char:N \\ \l__xparse_function_tl } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+    \bool_set_false:N \l__xparse_grab_expandably_bool
+  }
+\cs_new_protected:Npn \__xparse_normalize_check_lu:N #1
+  {
+    \bool_if:NT \l__xparse_expandable_bool
+      {
+        \tl_if_empty:NF \l__xparse_last_delimiters_tl
+          {
+            \__kernel_msg_error:nnxx
+              { xparse } { invalid-after-optional-expandably }
+              { \iow_char:N \\ \l__xparse_function_tl } { \tl_to_str:n {#1} }
+            \__xparse_bad_def:wn
+          }
+      }
+  }
+\cs_new_protected:Npn \__xparse_delimiter_check:nnn #1#2#3
+  {
+    \tl_map_inline:Nn \l__xparse_last_delimiters_tl
+      {
+        \tl_if_eq:nnT {##1} {#1}
+          {
+            \__kernel_msg_warning:nnxx { xparse } { optional-mandatory }
+              {#2} {#3}
+          }
+      }
+  }
+\cs_new_protected:Npn \__xparse_bad_arg_spec:wn #1 \__xparse_break_point:n #2
+  {
+    \__kernel_msg_error:nnxx { xparse } { bad-arg-spec }
+      { \__xparse_environment_or_command: } { \tl_to_str:n {#2} }
+  }
+\cs_new_protected:Npn \__xparse_bad_def:wn #1 \__xparse_break_point:n #2 { }
+\cs_new_protected:Npn \__xparse_add_arg_spec:n #1
+  {
+    \bool_lazy_and:nnT
+      { ! \l__xparse_long_bool }
+      { \l__xparse_some_long_bool }
+      {
+        \bool_if:NT \l__xparse_expandable_bool
+          {
+            \__kernel_msg_error:nnx { xparse } { inconsistent-long }
+              { \iow_char:N \\ \l__xparse_function_tl }
+            \__xparse_bad_def:wn
+          }
+        \bool_set_false:N \l__xparse_grab_expandably_bool
+      }
+    \bool_if:NTF \l__xparse_long_bool
+      { \bool_set_true:N \l__xparse_some_long_bool }
+      { \bool_set_true:N \l__xparse_some_short_bool }
+    \tl_put_right:Nx \l__xparse_arg_spec_tl
+      {
+        \bool_if:NT \l__xparse_long_bool { + }
+        \bool_if:NT \l__xparse_obey_spaces_bool { ! }
+        \exp_not:n {#1}
+      }
+    \bool_set_false:N \l__xparse_long_bool
+    \bool_set_false:N \l__xparse_obey_spaces_bool
+  }
+\cs_new_protected:Npn \__xparse_add_arg_spec_mandatory:n #1
+  {
+    \bool_if:NT \l__xparse_some_obey_spaces_bool
+      {
+        \__kernel_msg_error:nnxx { xparse } { non-trailing-obey-spaces }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+    \tl_clear:N \l__xparse_last_delimiters_tl
+    \__xparse_add_arg_spec:n {#1}
+  }
+\cs_new_protected:Npn \__xparse_prepare_signature:n #1
+  {
+    \int_zero:N \l__xparse_current_arg_int
+    \bool_set_false:N \l__xparse_long_bool
+    \bool_set_false:N \l__xparse_obey_spaces_bool
+    \int_zero:N \l__xparse_m_args_int
+    \bool_set_false:N \l__xparse_defaults_bool
+    \tl_clear:N \l__xparse_defaults_tl
+    \tl_clear:N \l__xparse_process_all_tl
+    \tl_clear:N \l__xparse_process_one_tl
+    \bool_set_false:N \l__xparse_process_some_bool
+    \tl_clear:N \l__xparse_signature_tl
+    \__xparse_prepare_signature:N #1 \q_recursion_tail \q_recursion_stop
+    \bool_if:NF \l__xparse_expandable_bool { \__xparse_flush_m_args: }
+  }
+\cs_new_protected:Npn \__xparse_prepare_signature:N
+  {
+    \bool_set_false:N \l__xparse_prefixed_bool
+    \__xparse_prepare_signature_bypass:N
+  }
+\cs_new_protected:Npn \__xparse_prepare_signature_bypass:N #1
+  {
+    \quark_if_recursion_tail_stop:N #1
+    \use:c
+      {
+         __xparse_add
+         \bool_if:NT \l__xparse_grab_expandably_bool { _expandable }
+         _type_  \token_to_str:N #1 :w
+      }
+  }
+\cs_new_protected:cpn { __xparse_add_type_+:w }
+  {
+    \__xparse_flush_m_args:
+    \bool_set_true:N \l__xparse_long_bool
+    \bool_set_true:N \l__xparse_prefixed_bool
+    \__xparse_prepare_signature_bypass:N
+  }
+\cs_new_protected:cpn { __xparse_add_type_!:w }
+  {
+    \__xparse_flush_m_args:
+    \bool_set_true:N \l__xparse_obey_spaces_bool
+    \bool_set_true:N \l__xparse_prefixed_bool
+    \__xparse_prepare_signature_bypass:N
+  }
+\cs_new_protected:cpn { __xparse_add_type_>:w } #1
+  {
+    \__xparse_flush_m_args:
+    \bool_set_true:N \l__xparse_prefixed_bool
+    \bool_set_true:N \l__xparse_process_some_bool
+    \tl_put_left:Nn \l__xparse_process_one_tl { {#1} }
+    \__xparse_prepare_signature_bypass:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_b:w
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N b
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_D:w #1#2#3
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:n {#3}
+    \__xparse_add_grabber:N D
+    \tl_put_right:Nn \l__xparse_signature_tl { #1 #2 }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_E:w #1#2
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default_E:nn {#1} {#2}
+    \__xparse_add_grabber:N E
+    \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_G:w #1
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:n {#1}
+    \__xparse_add_grabber:N G
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_l:w
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N l
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_m:w
+  {
+    \__xparse_add_default:
+    \bool_if:NTF \l__xparse_prefixed_bool
+      { \__xparse_add_grabber:N m }
+      { \int_incr:N \l__xparse_m_args_int }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_R:w #1#2#3
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:n {#3}
+    \__xparse_add_grabber:N R
+    \tl_put_right:Nn \l__xparse_signature_tl { #1 #2 }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_t:w #1
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N t
+    \tl_put_right:Nn \l__xparse_signature_tl {#1}
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_u:w #1
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N u
+    \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_v:w
+  {
+    \__xparse_flush_m_args:
+    \exp_args:No \__xparse_add_default:n \c_novalue_tl
+    \__xparse_add_grabber:N v
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_flush_m_args:
+  {
+    \int_compare:nNnT \l__xparse_m_args_int > 0
+      {
+        \tl_put_right:Nx \l__xparse_signature_tl
+          { \exp_not:c { __xparse_grab_m_ \int_use:N \l__xparse_m_args_int :w } }
+        \tl_put_right:Nx \l__xparse_process_all_tl
+          { \prg_replicate:nn { \l__xparse_m_args_int } { { } } }
+      }
+    \int_zero:N \l__xparse_m_args_int
+  }
+\cs_new_protected:Npn \__xparse_add_grabber:N #1
+  {
+    \tl_put_right:Nx \l__xparse_signature_tl
+      {
+        \exp_not:c
+          {
+            __xparse_grab_ #1
+            \bool_if:NT \l__xparse_long_bool { _long }
+            \bool_if:NT \l__xparse_obey_spaces_bool { _obey_spaces }
+            :w
+          }
+      }
+    \bool_set_false:N \l__xparse_long_bool
+    \bool_set_false:N \l__xparse_obey_spaces_bool
+    \tl_put_right:Nx \l__xparse_process_all_tl
+      { { \exp_not:o \l__xparse_process_one_tl } }
+    \tl_clear:N \l__xparse_process_one_tl
+  }
+\cs_new_protected:Npn \__xparse_add_default:n #1
+  {
+    \tl_if_novalue:nTF {#1}
+      { \__xparse_add_default: }
+      {
+        \int_incr:N \l__xparse_current_arg_int
+        \bool_set_true:N \l__xparse_defaults_bool
+        \tl_put_right:Nn \l__xparse_defaults_tl { { \prg_do_nothing: #1 } }
+      }
+  }
+\cs_new_protected:Npn \__xparse_add_default:
+  {
+    \int_incr:N \l__xparse_current_arg_int
+    \tl_put_right:Nn \l__xparse_defaults_tl { \c_novalue_tl }
+  }
+\cs_new_protected:Npn \__xparse_add_default_E:nn #1#2
+  {
+    \tl_map_function:nN {#2} \__xparse_add_default:n
+    \prg_replicate:nn
+      { \tl_count:n {#1} - \tl_count:n {#2} }
+      { \__xparse_add_default: }
+  }
+\cs_new_protected:cpn { __xparse_add_expandable_type_+:w }
+  {
+    \bool_set_true:N \l__xparse_long_bool
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_D:w
+  { \__xparse_add_expandable_type_D_aux:NNNn D }
+\cs_new_protected:Npn \__xparse_add_expandable_type_D_aux:NNNn #1#2#3#4
+  {
+    \__xparse_add_default:n {#4}
+    \tl_if_eq:nnTF {#2} {#3}
+      { \__xparse_add_expandable_type_D_aux:NN #1 #2 }
+      { \__xparse_add_expandable_type_D_aux:NNN #1 #2 #3 }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_D_aux:NNN #1#2#3
+  {
+    \bool_if:NTF \l__xparse_long_bool
+      { \cs_set:cpx }
+      { \cs_set_nopar:cpx }
+      { \l__xparse_expandable_aux_name_tl } ##1 ##2 #2 ##3 \q__xparse ##4 #3
+      { ##1 {##2} {##3} {##4} }
+    \__xparse_add_expandable_grabber:nn {#1}
+      {
+        \exp_not:c  { \l__xparse_expandable_aux_name_tl }
+        \exp_not:n { #2 #3 }
+      }
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_D_aux:NN #1#2
+  {
+    \bool_if:NTF \l__xparse_long_bool
+      { \cs_set:cpx }
+      { \cs_set_nopar:cpx }
+      { \l__xparse_expandable_aux_name_tl } ##1 #2 ##2 #2
+      { ##1 {##2} }
+    \__xparse_add_expandable_grabber:nn { #1_alt }
+      {
+        \exp_not:c  { \l__xparse_expandable_aux_name_tl }
+        \exp_not:n {#2}
+      }
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_E:w #1#2
+  {
+    \__xparse_add_default_E:nn {#1} {#2}
+    \tl_clear:N \l__xparse_tmpb_tl
+    \tl_map_function:nN {#1} \__xparse_add_expandable_type_E_aux:n
+    \__xparse_add_expandable_grabber:nn
+      { E \bool_if:NT \l__xparse_long_bool { _long } }
+      {
+        { \exp_not:o \l__xparse_tmpb_tl }
+        {
+          \prg_replicate:nn { \tl_count:n {#1} }
+            { { \c_novalue_tl } }
+        }
+      }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_E_aux:n #1
+  {
+    \__xparse_get_grabber:NN #1 \l__xparse_tmpa_tl
+    \tl_put_right:Nx \l__xparse_tmpb_tl
+      { \exp_not:o \l__xparse_tmpa_tl \exp_not:N #1 }
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_l:w
+  { \__xparse_add_expandable_type_u:w ## }
+\cs_new_protected:Npn \__xparse_add_expandable_type_m:w
+  {
+    \__xparse_add_default:
+    \__xparse_add_expandable_grabber:nn
+      { m \bool_if:NT \l__xparse_long_bool { _long } } { }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_R:w
+  { \__xparse_add_expandable_type_D_aux:NNNn R }
+\cs_new_protected:Npn \__xparse_add_expandable_type_t:w #1
+  {
+    \__xparse_add_default:
+    \__xparse_get_grabber:NN #1 \l__xparse_tmpa_tl
+    \__xparse_add_expandable_grabber:nn { t }
+      {
+        \exp_not:o \l__xparse_tmpa_tl
+        \exp_not:N #1
+      }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_u:w #1
+  {
+    \__xparse_add_default:
+    \bool_if:NTF \l__xparse_long_bool
+      { \cs_set:cpn }
+      { \cs_set_nopar:cpn }
+      { \l__xparse_expandable_aux_name_tl } ##1 \q__xparse ##2 ##3 ##4 #1
+      { ##1 {##4} \q__xparse ##2 ##3 }
+    \__xparse_add_expandable_grabber:nn { u }
+      { \exp_not:c  { \l__xparse_expandable_aux_name_tl } }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_grabber:nn #1#2
+  {
+    \tl_put_right:Nx \l__xparse_signature_tl
+      { \exp_not:c { __xparse_expandable_grab_ #1 :w } #2 }
+  }
+\cs_new_protected:Npn \__xparse_get_grabber:NN #1#2
+  {
+    \cs_set:Npn \__xparse_tmp:w ##1 #1 {##1}
+    \exp_args:Nc \__xparse_get_grabber_auxi:NN
+      { __xparse_grabber_ \token_to_str:N #1 :w } #2
+  }
+\cs_new_protected:Npn \__xparse_get_grabber_auxi:NN #1#2
+  {
+    \cs_if_eq:NNTF \__xparse_tmp:w #1
+      { \tl_set:Nn #2 {#1} }
+      {
+        \cs_if_exist:NTF #1
+          {
+            \int_gincr:N \g__xparse_grabber_int
+            \exp_args:Nc \__xparse_get_grabber_auxi:NN
+              {
+                __xparse_grabber_
+                - \int_use:N \g__xparse_grabber_int :w
+              }
+              #2
+          }
+          { \__xparse_get_grabber_auxii:NN #1 #2 }
+      }
+  }
+\cs_new_protected:Npn \__xparse_get_grabber_auxii:NN #1#2
+  {
+    \cs_set_eq:NN #1 \__xparse_tmp:w
+    \tl_set:Nn #2 {#1}
+  }
+\cs_new_protected:Npn \__xparse_grab_b:w
+  { \__xparse_grab_b_aux:NNw \cs_set_protected_nopar:Npn \tl_trim_spaces:n }
+\cs_new_protected:Npn \__xparse_grab_b_long:w
+  { \__xparse_grab_b_aux:NNw \cs_set_protected:Npn \tl_trim_spaces:n }
+\cs_new_protected:Npn \__xparse_grab_b_obey_spaces:w
+  { \__xparse_grab_b_aux:NNw \cs_set_protected_nopar:Npn \exp_not:n }
+\cs_new_protected:Npn \__xparse_grab_b_long_obey_spaces:w
+  { \__xparse_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
+\cs_new_protected:Npn \__xparse_grab_b_aux:NNw #1#2#3 \__xparse_run_code:
+  {
+    \__xparse_grab_D_aux:NNnN \begin \end {#3} #1
+    \tl_put_left:Nn \l__xparse_signature_tl { \__xparse_grab_b_end:Nw #2 }
+    \tl_set_eq:NN \l__xparse_saved_args_tl \l__xparse_args_tl
+    \tl_clear:N \l__xparse_args_tl
+    \exp_args:Nc \l__xparse_fn_tl { begin ~ }
+  }
+\cs_new_protected:Npn \__xparse_grab_b_end:Nw #1#2 \__xparse_run_code:
+  {
+    \tl_set:Nx \l__xparse_args_tl
+      {
+        \exp_not:V \l__xparse_saved_args_tl
+        { \exp_after:wN #1 \l__xparse_args_tl }
+      }
+    #2
+    \__xparse_run_code:
+    \end
+  }
+\cs_new_protected:Npn \__xparse_grab_D:w #1#2#3 \__xparse_run_code:
+  {
+    \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__xparse_peek_nonspace_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_D_long:w #1#2#3 \__xparse_run_code:
+  {
+    \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
+      \__xparse_peek_nonspace_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_D_obey_spaces:w #1#2#3 \__xparse_run_code:
+  {
+    \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn
+      \__xparse_peek_meaning_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_D_long_obey_spaces:w #1#2#3 \__xparse_run_code:
+  {
+    \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn
+      \__xparse_peek_meaning_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_D_aux:NNnNN #1#2#3#4#5
+  {
+    \__xparse_grab_D_aux:NNnN #1#2 {#3} #4
+    #5 #1
+      { \__xparse_grab_D_call:Nw #1 }
+      { \__xparse_add_arg:o \c_novalue_tl }
+  }
+\cs_new_protected:Npn \__xparse_grab_D_aux:NNnN #1#2#3#4
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#3}
+    \exp_after:wN #4 \l__xparse_fn_tl ##1 #2
+      {
+        \tl_if_in:nnTF {##1} {#1}
+          { \__xparse_grab_D_nested:NNnN #1 #2 {##1} #4 }
+          {
+            \tl_if_blank:oTF { \use_none:n ##1 }
+              { \__xparse_add_arg:o { \use_none:n ##1 } }
+              {
+                \str_if_eq:eeTF
+                  { \exp_not:o { \use_none:n ##1 } }
+                  { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } }
+                  { \__xparse_add_arg:o { \use_ii:nn ##1 } }
+                  { \__xparse_add_arg:o { \use_none:n ##1 } }
+              }
+          }
+      }
+  }
+\tl_new:N \l__xparse_nesting_a_tl
+\tl_new:N \l__xparse_nesting_b_tl
+\quark_new:N \q__xparse
+\cs_new_protected:Npn \__xparse_grab_D_nested:NNnN #1#2#3#4
+  {
+    \tl_clear:N \l__xparse_nesting_a_tl
+    \tl_clear:N \l__xparse_nesting_b_tl
+    \exp_after:wN #4 \l__xparse_fn_tl ##1 #1 ##2 \q__xparse ##3 #2
+      {
+        \tl_put_right:No \l__xparse_nesting_a_tl { \use_none:n ##1 #1 }
+        \tl_put_right:No \l__xparse_nesting_b_tl { \use_i:nn #2 ##3 }
+        \tl_if_in:nnTF {##2} {#1}
+          {
+            \l__xparse_fn_tl
+              \q_nil ##2 \q__xparse \ERROR
+          }
+          {
+            \tl_put_right:Nx \l__xparse_nesting_a_tl
+              { \__xparse_grab_D_nested:w \q_nil ##2 \q_stop }
+            \tl_if_in:NnTF \l__xparse_nesting_b_tl {#1}
+              {
+                \tl_set_eq:NN \l__xparse_tmpa_tl \l__xparse_nesting_b_tl
+                \tl_clear:N \l__xparse_nesting_b_tl
+                \exp_after:wN \l__xparse_fn_tl \exp_after:wN
+                  \q_nil \l__xparse_tmpa_tl \q_nil \q__xparse \ERROR
+              }
+              {
+                \tl_put_right:No \l__xparse_nesting_a_tl
+                  \l__xparse_nesting_b_tl
+                \__xparse_add_arg:V \l__xparse_nesting_a_tl
+              }
+          }
+      }
+    \l__xparse_fn_tl #3 \q_nil \q__xparse \ERROR
+  }
+\cs_new:Npn \__xparse_grab_D_nested:w #1 \q_nil \q_stop
+  { \exp_not:o { \use_none:n #1 } }
+\cs_new_protected_nopar:Npn \__xparse_grab_D_call:Nw #1
+  {
+    \token_if_eq_catcode:NNTF + #1
+      {
+        \exp_after:wN \exp_after:wN \exp_after:wN
+          \l__xparse_fn_tl \char_generate:nn { `#1 } { 11 }
+      }
+      {
+        \__xparse_token_if_cs:NTF #1
+          {
+            \exp_after:wN \l__xparse_fn_tl
+            \cs:w \cs_to_str:N #1 ~ \cs_end:
+          }
+          {
+            \exp_after:wN \l__xparse_fn_tl
+            \token_to_str:N #1
+          }
+      }
+  }
+\cs_new_protected:Npn \__xparse_grab_E:w #1#2 \__xparse_run_code:
+  {
+    \__xparse_grab_E:nnNN {#1} {#2}
+      \cs_set_protected_nopar:Npn
+      \__xparse_peek_nonspace_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_E_long:w #1#2 \__xparse_run_code:
+  {
+    \__xparse_grab_E:nnNN {#1} {#2}
+      \cs_set_protected:Npn
+      \__xparse_peek_nonspace_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_E_obey_spaces:w #1#2 \__xparse_run_code:
+  {
+    \__xparse_grab_E:nnNN {#1} {#2}
+      \cs_set_protected_nopar:Npn
+      \__xparse_peek_meaning_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_E_long_obey_spaces:w #1#2 \__xparse_run_code:
+  {
+    \__xparse_grab_E:nnNN {#1} {#2}
+      \cs_set_protected:Npn
+      \__xparse_peek_meaning_remove:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_E:nnNN #1#2#3#4
+  {
+    \exp_after:wN #3 \l__xparse_fn_tl ##1##2##3
+      {
+        \prop_put:Nnn \l__xparse_tmp_prop {##1} {##3}
+        \__xparse_grab_E_loop:NnN #4 { } ##2 \q_recursion_stop
+      }
+    \prop_clear:N \l__xparse_tmp_prop
+    \tl_set:Nn \l__xparse_signature_tl {#2}
+    \cs_set_protected:Npn \__xparse_grab_E_finalise:
+      {
+        \tl_map_inline:nn {#1}
+          {
+            \prop_get:NnNF \l__xparse_tmp_prop {####1} \l__xparse_tmpb_tl
+              { \tl_set_eq:NN \l__xparse_tmpb_tl \c_novalue_tl }
+            \tl_put_right:Nx \l__xparse_args_tl
+              { { \exp_not:V \l__xparse_tmpb_tl } }
+          }
+        \l__xparse_signature_tl \__xparse_run_code:
+      }
+    \__xparse_grab_E_loop:NnN #4 { } #1 \q_recursion_tail \q_recursion_stop
+  }
+\cs_new_protected:Npn \__xparse_grab_E_loop:NnN #1#2#3#4 \q_recursion_stop
+  {
+    \cs_if_eq:NNTF #3 \q_recursion_tail
+      { \__xparse_grab_E_finalise: }
+      {
+        #1 #3
+          { \l__xparse_fn_tl #3 {#2#4} }
+          { \__xparse_grab_E_loop:NnN #1 {#2#3} #4 \q_recursion_stop }
+      }
+  }
+\cs_new_protected:Npn \__xparse_grab_E_finalise: { }
+\cs_new_protected:Npn \__xparse_grab_G:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+      \__xparse_peek_nonspace:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_long:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+      \__xparse_peek_nonspace:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_obey_spaces:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+      \peek_meaning:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_long_obey_spaces:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+      \peek_meaning:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_aux:nNN #1#2#3
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN #2 \l__xparse_fn_tl ##1
+      { \__xparse_add_arg:n {##1} }
+    #3 \c_group_begin_token
+      { \l__xparse_fn_tl }
+      { \__xparse_add_arg:o \c_novalue_tl }
+  }
+\cs_new_protected:Npn \__xparse_grab_l:w #1 \__xparse_run_code:
+  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__xparse_grab_l_long:w #1 \__xparse_run_code:
+  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__xparse_grab_l_aux:nN #1#2
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN #2 \l__xparse_fn_tl ##1##
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\cs_new_protected:Npn \__xparse_grab_m:w #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_protected_nopar:Npn \l__xparse_fn_tl ##1
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\cs_new_protected:Npn \__xparse_grab_m_long:w #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_protected:Npn \l__xparse_fn_tl ##1
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\cs_new_protected_nopar:Npn \__xparse_grab_m_aux:Nnnnnnnnn #1#2#3#4#5#6#7#8#9
+  {
+    \tl_put_right:No \l__xparse_args_tl
+      { #1 {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} }
+    \l__xparse_signature_tl \__xparse_run_code:
+  }
+\cs_new_protected:cpn { __xparse_grab_m_1:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nnnnnnn { } { } { } { } { } { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_2:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nnnnnn { } { } { } { } { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_3:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nnnnn { } { } { } { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_4:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nnnn { } { } { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_5:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nnn { } { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_6:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:nn { } { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_7:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \use_none:n { }
+  }
+\cs_new_protected:cpn { __xparse_grab_m_8:w } #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN \cs_set_eq:NN \l__xparse_fn_tl \__xparse_grab_m_aux:Nnnnnnnnn
+    \l__xparse_fn_tl \prg_do_nothing:
+  }
+\cs_new_protected:cpx { __xparse_grab_m_9:w }
+  {
+    \exp_not:c { __xparse_grab_m_5:w }
+    \exp_not:c { __xparse_grab_m_4:w }
+  }
+\cs_new_protected:Npn \__xparse_grab_R:w #1#2#3 \__xparse_run_code:
+  { \__xparse_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__xparse_grab_R_long:w #1#2#3 \__xparse_run_code:
+  { \__xparse_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__xparse_grab_R_aux:NNnN #1#2#3#4
+  {
+    \__xparse_grab_D_aux:NNnN #1 #2 {#3} #4
+    \__xparse_peek_nonspace_remove:NTF #1
+      { \__xparse_grab_D_call:Nw #1 }
+      {
+        \__kernel_msg_error:nnxx { xparse } { missing-required }
+          { \__xparse_environment_or_command: }
+          { \token_to_str:N #1 }
+        \__xparse_add_arg:o \c_novalue_tl
+      }
+  }
+\cs_new_protected:Npn \__xparse_grab_t:w
+  { \__xparse_grab_t_aux:NNw \__xparse_peek_nonspace_remove:NTF }
+\cs_new_protected:Npn \__xparse_grab_t_obey_spaces:w
+  { \__xparse_grab_t_aux:NNw \__xparse_peek_meaning_remove:NTF }
+\cs_new_protected:Npn \__xparse_grab_t_aux:NNw #1#2#3 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#3}
+    \exp_after:wN \cs_set_protected:Npn \l__xparse_fn_tl
+      {
+        #1 #2
+          { \__xparse_add_arg:n { \BooleanTrue } }
+          { \__xparse_add_arg:n { \BooleanFalse } }
+      }
+    \l__xparse_fn_tl
+  }
+\cs_new_protected:Npn \__xparse_grab_u:w #1#2 \__xparse_run_code:
+  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__xparse_grab_u_long:w #1#2 \__xparse_run_code:
+  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__xparse_grab_u_aux:nnN #1#2#3
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#2}
+    \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\tl_new:N \l__xparse_v_arg_tl
+\cs_new_protected:Npn \__xparse_grab_v:w
+  {
+    \bool_set_false:N \l__xparse_long_bool
+    \__xparse_grab_v_aux:w
+  }
+\cs_new_protected:Npn \__xparse_grab_v_long:w
+  {
+    \bool_set_true:N \l__xparse_long_bool
+    \__xparse_grab_v_aux:w
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux:w #1 \__xparse_run_code:
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \group_begin:
+      \tex_escapechar:D = 92 \scan_stop:
+      \tl_clear:N \l__xparse_v_arg_tl
+      \peek_remove_spaces:n
+        {
+          \peek_meaning_remove:NTF \c_group_begin_token
+            {
+              \group_align_safe_end:
+              \__xparse_grab_v_bgroup:
+            }
+            {
+              \peek_N_type:TF
+                { \__xparse_grab_v_aux_test:N }
+                { \__xparse_grab_v_aux_abort:n { } }
+            }
+        }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_group_end:
+  {
+        \exp_args:NNNo
+      \group_end:
+    \tl_set:Nn \l__xparse_v_arg_tl { \l__xparse_v_arg_tl }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_test:N #1
+  {
+    \__xparse_grab_v_token_if_char:NTF #1
+      {
+        \__xparse_grab_v_aux_put:N #1
+        \__xparse_grab_v_aux_catcodes:
+        \__xparse_grab_v_aux_loop:N #1
+      }
+      { \__xparse_grab_v_aux_abort:n {#1} #1 }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_loop:N #1
+  {
+    \peek_N_type:TF
+      { \__xparse_grab_v_aux_loop:NN #1 }
+      { \__xparse_grab_v_aux_abort:n { } }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_loop:NN #1#2
+  {
+    \__xparse_grab_v_token_if_char:NTF #2
+      {
+        \token_if_eq_charcode:NNTF #1 #2
+          { \__xparse_grab_v_aux_loop_end: }
+          {
+            \__xparse_grab_v_aux_put:N #2
+            \__xparse_grab_v_aux_loop:N #1
+          }
+      }
+      { \__xparse_grab_v_aux_abort:n {#2} #2 }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_loop_end:
+  {
+    \__xparse_grab_v_group_end:
+    \__xparse_add_arg:x { \tl_tail:N \l__xparse_v_arg_tl }
+  }
+\int_new:N \l__xparse_v_nesting_int
+\cs_new_protected:Npx \__xparse_grab_v_bgroup:
+  {
+    \exp_not:N \__xparse_grab_v_aux_catcodes:
+    \exp_not:n { \int_set:Nn \l__xparse_v_nesting_int { 1 } }
+    \exp_not:N \__xparse_grab_v_aux_put:N \iow_char:N \{
+    \exp_not:N \__xparse_grab_v_bgroup_loop:
+  }
+\cs_new_protected:Npn \__xparse_grab_v_bgroup_loop:
+  {
+    \peek_N_type:TF
+      { \__xparse_grab_v_bgroup_loop:N }
+      { \__xparse_grab_v_aux_abort:n { } }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_bgroup_loop:N #1
+  {
+    \__xparse_grab_v_token_if_char:NTF #1
+      {
+        \token_if_eq_charcode:NNTF \c_group_end_token #1
+          {
+            \int_decr:N \l__xparse_v_nesting_int
+            \int_compare:nNnTF \l__xparse_v_nesting_int > 0
+              {
+                \__xparse_grab_v_aux_put:N #1
+                \__xparse_grab_v_bgroup_loop:
+              }
+              { \__xparse_grab_v_aux_loop_end: }
+          }
+          {
+            \token_if_eq_charcode:NNT \c_group_begin_token #1
+              { \int_incr:N \l__xparse_v_nesting_int }
+            \__xparse_grab_v_aux_put:N #1
+            \__xparse_grab_v_bgroup_loop:
+          }
+      }
+      { \__xparse_grab_v_aux_abort:n {#1} #1 }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_catcodes:
+  {
+    \cs_set_eq:NN \do \char_set_catcode_other:N
+    \dospecials
+    \tex_endlinechar:D = `\^^M \scan_stop:
+    \bool_if:NTF \l__xparse_long_bool
+      { \char_set_catcode_other:n { \tex_endlinechar:D } }
+      { \char_set_catcode_parameter:n { \tex_endlinechar:D } }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_abort:n #1
+  {
+    \__xparse_grab_v_group_end:
+    \exp_after:wN \exp_after:wN \exp_after:wN
+      \peek_meaning_remove:NTF \char_generate:nn { \tex_endlinechar:D } { 6 }
+      {
+        \__kernel_msg_error:nnxxx { xparse } { verbatim-newline }
+          { \__xparse_environment_or_command: }
+          { \tl_to_str:N \l__xparse_v_arg_tl }
+          { \tl_to_str:n {#1} }
+        \__xparse_add_arg:o \c_novalue_tl
+      }
+      {
+        \__kernel_msg_error:nnxxx { xparse } { verbatim-tokenized }
+          { \__xparse_environment_or_command: }
+          { \tl_to_str:N \l__xparse_v_arg_tl }
+          { \tl_to_str:n {#1} }
+        \__xparse_add_arg:o \c_novalue_tl
+      }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_aux_put:N #1
+  {
+    \tl_put_right:Nx \l__xparse_v_arg_tl
+      {
+        \token_if_active:NTF #1
+          { \exp_not:N #1 } { \token_to_str:N #1 }
+      }
+  }
+\cs_new_protected:Npn \__xparse_grab_v_token_if_char:NTF #1
+  { \str_if_eq:eeTF { } { \str_tail:n {#1} } }
+\cs_new_protected:Npn \__xparse_add_arg:n #1
+  {
+    \tl_put_right:Nn \l__xparse_args_tl { {#1} }
+    \l__xparse_signature_tl \__xparse_run_code:
+  }
+\cs_generate_variant:Nn \__xparse_add_arg:n { V , o , x }
+\cs_new:Npn \__xparse_expandable_grab_D:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_D:NNNwNNn #1 \q__xparse #2 #3 } }
+\cs_set_protected:Npn \__xparse_tmp:w #1
+  {
+    \cs_new:Npn \__xparse_expandable_grab_D:NNNwNNn ##1##2##3##4 \q__xparse ##5##6##7
+      {
+        \str_if_eq:nnTF {##2} {##7}
+          {
+            \str_if_eq:onTF
+              { ##1 { } { } ##7 ##2 \q__xparse ##3 }
+              { { } {##2} { } }
+          }
+          { \use_ii:nn }
+          {
+            ##1
+              { \__xparse_expandable_grab_D:NNNwNNnnn ##1##2##3##4 \q__xparse ##5##6 }
+              \q_nil { } ##2 \ERROR \q__xparse \ERROR
+          }
+          { ##4 {#1} \q__xparse ##5 ##6 {##7} }
+      }
+  }
+\exp_args:No \__xparse_tmp:w { \c_novalue_tl }
+\cs_new:Npn \__xparse_expandable_grab_D:NNNwNNnnn #1#2#3#4 \q__xparse #5#6#7#8#9
+  {
+    \exp_args:Nof \__xparse_expandable_grab_D:nnNNNwNN
+      { \use_ii:nn #7 #2 }
+      { \__xparse_expandable_grab_D:Nw #3 \exp_stop_f: #8 #9 }
+    #1#2#3 #4 \q__xparse #5 #6
+  }
+\cs_new:Npn \__xparse_expandable_grab_D:Nw #1#2 \ERROR \ERROR { #2 #1 }
+\cs_new:Npn \__xparse_expandable_grab_D:nnNNNwNN #1#2#3#4#5#6 \q__xparse #7#8
+  {
+    \exp_args:No \tl_if_empty:oTF
+      { #3 { \use_none:nnn } #2 \q__xparse #5 #4 \q__xparse #5 }
+      {
+        \tl_if_blank:oTF { \use_none:nn #1#2 }
+          { \__xparse_put_arg_expandable:ow { \use_none:nn #1#2 } }
+          {
+            \str_if_eq:eeTF
+              { \exp_not:o { \use_none:nn #1#2 } }
+              { { \exp_not:o { \use_iii:nnnn #1#2 \q_nil } } }
+              { \__xparse_put_arg_expandable:ow { \use_iii:nnn #1#2 } }
+              { \__xparse_put_arg_expandable:ow { \use_none:nn #1#2 } }
+          }
+            #6 \q__xparse #7 #8
+      }
+      {
+        #3
+          { \__xparse_expandable_grab_D:NNNwNNnnn #3#4#5#6 \q__xparse #7 #8 }
+          \q_nil {#1} #2 \ERROR \q__xparse \ERROR
+      }
+  }
+\cs_new:Npn \__xparse_expandable_grab_D_alt:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_D_alt:NNwNNn #1 \q__xparse #2 #3 } }
+\cs_set_protected:Npn \__xparse_tmp:w #1
+  {
+    \cs_new:Npn \__xparse_expandable_grab_D_alt:NNwNNn ##1##2##3 \q__xparse ##4##5##6
+      {
+        \str_if_eq:nnTF {##6} {##2}
+          {
+            \str_if_eq:onTF
+              { ##1 { } ##6 ##2 ##2 }
+              { { } ##2 }
+          }
+          { \use_ii:nn }
+          {
+            ##1
+              { \__xparse_expandable_grab_D_alt:NNwn ##4 ##5 ##3 \q__xparse }
+              ##6 \ERROR
+          }
+          { ##3 {#1} \q__xparse ##4 ##5 {##6} }
+      }
+  }
+\exp_args:No \__xparse_tmp:w { \c_novalue_tl }
+\cs_new:Npn \__xparse_expandable_grab_D_alt:NNwn #1#2#3 \q__xparse #4
+  {
+    \tl_if_blank:oTF { \use_none:n #4 }
+      { \__xparse_put_arg_expandable:ow { \use_none:n #4 } }
+      {
+        \str_if_eq:eeTF
+          { \exp_not:o { \use_none:n #4 } }
+          { { \exp_not:o { \use_ii:nnn #4 \q_nil } } }
+          { \__xparse_put_arg_expandable:ow { \use_ii:nn #4 } }
+          { \__xparse_put_arg_expandable:ow { \use_none:n #4 } }
+      }
+        #3 \q__xparse #1 #2
+  }
+\cs_new:Npn \__xparse_expandable_grab_E:w #1 \q__xparse #2#3
+  { \__xparse_expandable_grab_E_aux:w #1 \q__xparse #2 #3 #3 }
+\cs_new:Npn \__xparse_expandable_grab_E_long:w #1 \q__xparse #2#3
+  { \__xparse_expandable_grab_E_aux:w #1 \q__xparse #2 #3 #2 }
+\cs_new:Npn \__xparse_expandable_grab_E_aux:w #1 \q__xparse #2#3#4
+  { #2 { \__xparse_expandable_grab_E_test:nnw #1 \q__xparse #2 #3 #4 } }
+\cs_new:Npn \__xparse_expandable_grab_E_test:nnw #1#2#3 \q__xparse #4#5#6#7
+  {
+    \__xparse_expandable_grab_E_loop:nnnNNw {#7} { } { }
+      #1 \q_nil \q_nil \q_nil \q_mark #2 \q_nil
+    #3 \q__xparse #4 #5 #6
+  }
+\cs_new:Npn \__xparse_expandable_grab_E_loop:nnnNNw
+    #1#2#3#4#5#6 \q_nil #7 \q_mark #8
+  {
+    \quark_if_nil:NTF #4
+      { \__xparse_expandable_grab_E_end:nnw {#1} {#3} }
+      {
+        \tl_if_novalue:nTF {#8}
+          { \str_if_eq:onTF { #4 { } #1 #5 } {#5} }
+          { \use_ii:nn }
+            { \__xparse_expandable_grab_E_find:w { #2 #4 #5 #6 } {#3} ~ }
+            {
+              \__xparse_expandable_grab_E_loop:nnnNNw
+                {#1} { #2 #4 #5 } { #3 {#8} }
+                #6 \q_nil #7 \q_mark
+            }
+      }
+  }
+\cs_new:Npn \__xparse_expandable_grab_E_find:w #1 \q__xparse #2#3#4
+  { #4 { \__xparse_expandable_grab_E_find:nnw #1 \q__xparse #2 #3 #4 } }
+\cs_new:Npn \__xparse_expandable_grab_E_find:nnw #1#2#3 \q_nil #4 \q__xparse #5#6#7#8
+  { \__xparse_expandable_grab_E_aux:w {#1} { #2 {#8} #3 } #4 \q__xparse #5 #6 #7 }
+\cs_new:Npn \__xparse_expandable_grab_E_end:nnw #1#2#3 \q__xparse #4#5#6
+  { #3 #2 \q__xparse #4 #5 {#1} }
+\cs_new:Npn \__xparse_expandable_grab_m:w #1 \q__xparse #2#3
+  { #3 { \__xparse_expandable_grab_m_aux:wNn #1 \q__xparse #2 #3 } }
+\cs_new:Npn \__xparse_expandable_grab_m_long:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_m_aux:wNn #1 \q__xparse #2 #3 } }
+\cs_new:Npn \__xparse_expandable_grab_m_aux:wNn #1 \q__xparse #2#3#4
+  { #1 {#4} \q__xparse #2 #3 }
+\cs_new:Npn \__xparse_expandable_grab_R:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_R_aux:NNNwNNn #1 \q__xparse #2#3 } }
+\cs_set_protected:Npn \__xparse_tmp:w #1
+  {
+    \cs_new:Npn \__xparse_expandable_grab_R_aux:NNNwNNn ##1##2##3##4 \q__xparse ##5##6##7
+      {
+        \str_if_eq:nnTF {##7} {##2}
+          {
+            \str_if_eq:onTF
+              { ##1 { } { } ##7 ##2 \q__xparse ##3 }
+              { { } {##2} { } }
+          }
+          { \use_ii:nn }
+          {
+            ##1
+              { \__xparse_expandable_grab_D:NNNwNNnnn ##1##2##3##4 \q__xparse ##5##6 }
+              \q_nil { } ##2 \ERROR \q__xparse \ERROR
+          }
+          {
+            \__kernel_msg_expandable_error:nnff
+              { xparse } { missing-required }
+              { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##5 } }
+              { \tl_to_str:n {##2} }
+            ##4 {#1} \q__xparse ##5 ##6 {##7}
+          }
+      }
+  }
+\exp_args:No \__xparse_tmp:w { \c_novalue_tl }
+\cs_new:Npn \__xparse_expandable_grab_R_alt:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_R_alt_aux:NNwNNn #1 \q__xparse #2#3 } }
+\cs_set_protected:Npn \__xparse_tmp:w #1
+  {
+    \cs_new:Npn \__xparse_expandable_grab_R_alt_aux:NNwNNn ##1##2##3 \q__xparse ##4##5##6
+      {
+        \str_if_eq:nnTF {##6} {##2}
+          {
+            \str_if_eq:onTF
+              { ##1 { } ##6 ##2 ##2 }
+              { { } ##2 }
+          }
+          { \use_ii:nn }
+          {
+            ##1
+              { \__xparse_expandable_grab_D_alt:NNwn ##4 ##5 ##3 \q__xparse }
+              ##6 \ERROR
+          }
+          {
+            \__kernel_msg_expandable_error:nnff
+              { xparse } { missing-required }
+              { \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##4 } }
+              { \tl_to_str:n {##2} }
+            ##3 {#1} \q__xparse ##4 ##5 {##6}
+          }
+      }
+  }
+\exp_args:No \__xparse_tmp:w { \c_novalue_tl }
+\cs_new:Npn \__xparse_expandable_grab_t:w #1 \q__xparse #2#3
+  { #2 { \__xparse_expandable_grab_t_aux:NNwn #1 \q__xparse #2 #3 } }
+\cs_new:Npn \__xparse_expandable_grab_t_aux:NNwn #1#2#3 \q__xparse #4#5#6
+  {
+    \str_if_eq:onTF { #1 { } #6 #2 } {#2}
+      { #3 { \BooleanTrue } \q__xparse #4 #5 }
+      { #3 { \BooleanFalse } \q__xparse #4 #5 {#6} }
+  }
+\cs_new_eq:NN \__xparse_expandable_grab_u:w \prg_do_nothing:
+\cs_new:Npn \__xparse_put_arg_expandable:nw #1#2 \q__xparse { #2 {#1} \q__xparse }
+\cs_generate_variant:Nn \__xparse_put_arg_expandable:nw { o }
+\cs_new_protected:Npn \__xparse_bool_reverse:N #1
+  {
+    \bool_if:NTF #1
+      { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
+      { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
+  }
+\seq_new:N \l__xparse_split_list_seq
+\tl_new:N \l__xparse_split_list_tl
+\cs_new_protected:Npn \__xparse_split_list:nn #1#2
+  {
+    \tl_if_single:nTF {#1}
+      {
+        \token_if_cs:NTF #1
+          { \__xparse_split_list_multi:nn {#1} {#2} }
+          { \__xparse_split_list_single:Nn #1 {#2} }
+      }
+      { \__xparse_split_list_multi:nn {#1} {#2} }
+  }
+\cs_new_protected:Npn \__xparse_split_list_multi:nn #1#2
+  {
+    \seq_set_split:Nnn \l__xparse_split_list_seq {#1} {#2}
+    \tl_clear:N \ProcessedArgument
+    \seq_map_inline:Nn \l__xparse_split_list_seq
+      { \tl_put_right:Nn \ProcessedArgument { {##1} } }
+  }
+\cs_generate_variant:Nn \__xparse_split_list_multi:nn { nV }
+\group_begin:
+\char_set_catcode_active:N \^^@
+\cs_new_protected:Npn \__xparse_split_list_single:Nn #1#2
+  {
+    \tl_set:Nn \l__xparse_split_list_tl {#2}
+    \group_begin:
+    \char_set_lccode:nn { `\^^@ } { `#1 }
+    \tex_lowercase:D
+      {
+        \group_end:
+        \tl_replace_all:Nnn \l__xparse_split_list_tl { ^^@ }
+      }   {#1}
+     \__xparse_split_list_multi:nV {#1} \l__xparse_split_list_tl
+   }
+\group_end:
+\cs_new_protected:Npn \__xparse_split_argument:nnn #1#2#3
+  {
+    \__xparse_split_list:nn {#2} {#3}
+    \exp_args:Nf \__xparse_split_argument_aux:nnnn
+      { \tl_count:N \ProcessedArgument }
+      {#1} {#2} {#3}
+  }
+\cs_new_protected:Npn \__xparse_split_argument_aux:nnnn #1#2#3#4
+  {
+    \int_compare:nNnF {#1} = { #2 + 1 }
+      {
+        \int_compare:nNnTF {#1} > { #2 + 1 }
+          {
+            \tl_set:Nx \ProcessedArgument
+              {
+                \exp_last_unbraced:NnNo
+                  \__xparse_split_argument_aux:n
+                  { #2 + 1 }
+                  \use_none_delimit_by_q_stop:w
+                  \ProcessedArgument
+                  \q_stop
+              }
+            \__kernel_msg_error:nnxxx { xparse } { split-excess-tokens }
+              { \tl_to_str:n {#3} } { \int_eval:n { #2 + 1 } }
+              { \tl_to_str:n {#4} }
+          }
+          {
+            \tl_put_right:Nx \ProcessedArgument
+              {
+                \prg_replicate:nn { #2 + 1 - (#1) }
+                  { { \exp_not:V \c_novalue_tl } }
+              }
+          }
+      }
+  }
+\cs_new:Npn \__xparse_split_argument_aux:n #1
+  { \prg_replicate:nn {#1} { \__xparse_split_argument_aux:wn } }
+\cs_new:Npn \__xparse_split_argument_aux:wn #1 \use_none_delimit_by_q_stop:w #2
+  {
+    \exp_not:n { {#2} }
+    #1
+    \use_none_delimit_by_q_stop:w
+  }
+\cs_new_protected:Npn \__xparse_trim_spaces:n #1
+  { \tl_set:Nx \ProcessedArgument { \tl_trim_spaces:n {#1} } }
+\cs_new_protected:Npn \__xparse_get_arg_spec_error:N #1
+  {
+    \bool_set_false:N \l__xparse_environment_bool
+    \tl_set:Nn \l__xparse_fn_tl {#1}
+    \__xparse_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 }
+  }
+\cs_new_protected:Npn \__xparse_get_arg_spec_error:n #1
+  {
+    \bool_set_true:N \l__xparse_environment_bool
+    \str_set:Nx \l__xparse_environment_str {#1}
+    \__xparse_get_arg_spec_error_aux:n
+      { \cs_if_exist:cTF { \l__xparse_environment_str } }
+  }
+\cs_new_protected:Npn \__xparse_get_arg_spec_error_aux:n #1
+  {
+    #1
+      {
+        \__kernel_msg_error:nnx { xparse } { non-xparse }
+          { \__xparse_environment_or_command: }
+      }
+      {
+        \__kernel_msg_error:nnx { xparse } { unknown }
+          { \__xparse_environment_or_command: }
+      }
+  }
+\cs_new_protected:Npn \__xparse_get_arg_spec:NTF #1#2#3
+  {
+    \__xparse_cmd_if_xparse:NTF #1
+      {
+        \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } }
+        #2
+      }
+      {#3}
+  }
+\cs_new_protected:Npn \__xparse_get_arg_spec:N #1
+  {
+    \__xparse_get_arg_spec:NTF #1 { }
+      { \__xparse_get_arg_spec_error:N #1 }
+  }
+\cs_new_protected:Npn \__xparse_get_arg_spec:n #1
+  {
+    \exp_args:Nc \__xparse_get_arg_spec:NTF
+      { environment~ \tl_to_str:n {#1} }
+      { }
+      { \__xparse_get_arg_spec_error:n {#1} }
+  }
+\tl_new:N \ArgumentSpecification
+\cs_new_protected:Npn \__xparse_show_arg_spec:N #1
+  {
+    \__xparse_get_arg_spec:NTF #1
+      { \tl_show:N \ArgumentSpecification }
+      { \__xparse_get_arg_spec_error:N #1 }
+  }
+\cs_new_protected:Npn \__xparse_show_arg_spec:n #1
+  {
+    \exp_args:Nc \__xparse_get_arg_spec:NTF
+      { environment~ \tl_to_str:n {#1} }
+      { \tl_show:N \ArgumentSpecification }
+      { \__xparse_get_arg_spec_error:n {#1} }
+  }
+\cs_new_protected:Npn \__xparse_check_definable:nNT #1
+  { \tl_trim_spaces_apply:nN {#1} \__xparse_check_definable_aux:nN }
+\group_begin:
+  \char_set_catcode_active:n { `? }
+  \cs_new_protected:Npn \__xparse_check_definable_aux:nN #1#2
+    {
+      \group_begin:
+      \tl_if_single_token:nTF {#1}
+        {
+          \int_set:Nn \tex_escapechar:D { 92 }
+          \exp_args:Nx \tl_if_empty:nTF
+            { \exp_args:No \str_tail:n { \token_to_str:N #1 } }
+            {
+              \exp_args:Nx \char_set_lccode:nn
+                { ` \str_head:n {#1} } { `? }
+              \tex_lowercase:D { \tl_if_eq:nnTF {#1} } { ? }
+                { \group_end: \use_iii:nnn }
+                { \group_end: \use_i:nnn }
+            }
+            { \group_end: \use_iii:nnn }
+        }
+        { \group_end: \use_ii:nnn }
+      {
+        \__kernel_msg_error:nnxx { xparse } { not-definable }
+          { \tl_to_str:n {#1} } { \token_to_str:N #2 }
+      }
+      {
+        \__kernel_msg_error:nnxx { xparse } { not-one-token }
+          { \tl_to_str:n {#1} } { \token_to_str:N #2 }
+      }
+    }
+\group_end:
+\cs_new_protected:Npn \__xparse_token_if_cs:NTF #1
+  {
+    \group_begin:
+      \int_set:Nn \tex_escapechar:D { 92 }
+      \exp_args:Nx \tl_if_empty:nTF
+          { \exp_args:No \str_tail:n { \token_to_str:N #1 } }
+        { \group_end: \use_ii:nn }
+        { \group_end: \use_i:nn }
+  }
+\cs_new:Npn \__xparse_tl_mapthread_function:NNN #1#2#3
+  {
+    \exp_after:wN \exp_after:wN
+    \exp_after:wN \__xparse_tl_mapthread_loop:w
+    \exp_after:wN \exp_after:wN
+    \exp_after:wN #3
+    \exp_after:wN #1
+    \exp_after:wN \q_recursion_tail
+    \exp_after:wN \q_mark
+    #2
+    \q_recursion_tail
+    \q_recursion_stop
+  }
+\cs_new:Npn \__xparse_tl_mapthread_function:nnN #1#2#3
+  {
+    \__xparse_tl_mapthread_loop:w #3
+      #1 \q_recursion_tail \q_mark
+      #2 \q_recursion_tail \q_recursion_stop
+  }
+\cs_new:Npn \__xparse_tl_mapthread_loop:w #1#2#3 \q_mark #4
+  {
+    \quark_if_recursion_tail_stop:n {#2}
+    \quark_if_recursion_tail_stop:n {#4}
+    #1 {#2} {#4}
+    \__xparse_tl_mapthread_loop:w #1#3 \q_mark
+  }
+\cs_new_protected:Npn \__xparse_cmd_if_xparse:NTF #1
+  {
+    \exp_args:Nf \str_case_e:nnTF
+      {
+        \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
+          {
+            \exp_last_unbraced:Nf \__xparse_cmd_if_xparse_aux:w
+              { \cs_replacement_spec:N #1 } ~ \q_stop
+          }
+      }
+      {
+        { \token_to_str:N \__xparse_start:nNNnnn } { }
+        { \token_to_str:N \__xparse_start_expandable:nNNNNn } { }
+        { \token_to_str:N \__xparse_start_env:nnnnn } { }
+      }
+  }
+\cs_new:Npn \__xparse_cmd_if_xparse_aux:w #1 ~ #2 \q_stop {#1}
+\cs_new_protected:Npn \__xparse_peek_nonspace:NTF
+  { \__xparse_peek_nonspace_aux:nNNTF { } \__xparse_peek_meaning:NTF }
+\cs_new_protected:Npn \__xparse_peek_nonspace_remove:NTF
+  { \__xparse_peek_nonspace_aux:nNNTF { } \__xparse_peek_meaning_remove:NTF }
+\cs_new_protected:Npn \__xparse_peek_nonspace_aux:nNNTF #1#2#3#4#5
+  {
+    \peek_meaning_remove:NTF \c_space_token
+      { \__xparse_peek_nonspace_aux:nNNTF { #1 ~ } #2 #3 {#4} {#5} }
+      { #2 #3 { #4 } { #5 #1 } }
+  }
+\cs_new_protected:Npn \__xparse_peek_meaning:NTF
+  { \__xparse_peek_meaning_aux:NNTF \c_false_bool }
+\cs_new_protected:Npn \__xparse_peek_meaning_remove:NTF
+  { \__xparse_peek_meaning_aux:NNTF \c_true_bool }
+\cs_new_protected:Npn \__xparse_peek_meaning_aux:NNTF #1#2#3#4
+  {
+    \tl_set:Nn \l__xparse_tmpa_tl {#3}
+    \tl_set:Nn \l__xparse_tmpb_tl {#4}
+    \peek_meaning:NTF #2
+      {
+        \token_if_eq_meaning:NNTF #2 \c_group_begin_token
+          { \__xparse_peek_true_remove:Nw #1 }
+          {
+            \__xparse_token_if_cs:NTF #2
+              { \__xparse_peek_cs_check_equal:NNN #1 #2 }
+              { \__xparse_peek_true_remove:Nw #1 }
+          }
+      }
+      { \l__xparse_tmpb_tl }
+  }
+\cs_new_protected:Npn \__xparse_peek_cs_check_equal:NNN #1#2#3
+  {
+    \str_if_eq:nnTF {#2} {#3}
+      { \__xparse_peek_true_remove:Nw #1 }
+      { \l__xparse_tmpb_tl }
+    #3
+  }
+\cs_new_protected:Npn \__xparse_peek_true_remove:Nw #1
+  {
+    \bool_if:NTF #1
+      {
+        \tex_afterassignment:D \l__xparse_tmpa_tl
+        \cs_set_eq:NN \__xparse_tmp:w
+      }
+      { \l__xparse_tmpa_tl }
+  }
+\cs_new:Npn \__xparse_environment_or_command:
+  {
+    \bool_if:NTF \l__xparse_environment_bool
+      { environment ~ ' \l__xparse_environment_str ' }
+      {
+        command ~ '
+        \exp_args:Nf \tl_trim_spaces:n
+          { \exp_after:wN \token_to_str:N \l__xparse_fn_tl }
+        '
+      }
+  }
+\tl_const:Nn \c__xparse_ignore_def_tl
+  { \\ \\ LaTeX~will~ignore~this~entire~definition. }
+\__kernel_msg_new:nnnn { xparse } { arg-after-body }
+  { In~the~definition~of~#1,~b~(body)~argument~must~be~last. }
+  {
+    The~'body'~argument~type~is~followed~by~'#2'~in~the~argument~
+    specification~of~the~#1.~This~is~not~allowed.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { bad-arg-spec }
+  { Bad~argument~specification~'#2'~for~#1. }
+  {
+    The~argument~specification~provided~was~not~valid:~
+    one~or~more~mandatory~pieces~of~information~were~missing.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { command-already-defined }
+  { Command~'#1'~already~defined! }
+  {
+    You~have~used~#2~
+    with~a~command~that~already~has~a~definition. \\ \\
+    The~existing~definition~of~'#1'~will~not~be~altered.
+  }
+\__kernel_msg_new:nnnn { xparse } { command-not-yet-defined }
+  { Command ~'#1'~not~yet~defined! }
+  {
+    You~have~used~#2~
+    with~a~command~that~was~never~defined.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { environment-already-defined }
+  { Environment~'#1'~already~defined! }
+  {
+    You~have~used~\NewDocumentEnvironment
+    with~an~environment~that~already~has~a~definition. \\ \\
+    The~existing~definition~of~'#1'~will~not~be~altered.
+  }
+\__kernel_msg_new:nnnn { xparse } { environment-not-yet-defined }
+  { Environment~'#1'~not~yet~defined! }
+  {
+    You~have~used~\RenewDocumentEnvironment
+    with~an~environment~that~was~never~defined.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { expandable-ending-optional }
+  {
+    Argument~specification~'#2'~for~expandable~command~'#1'~
+    ends~with~optional~argument.
+  }
+  {
+    Expandable~commands~must~have~a~final~mandatory~argument~
+    (or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~
+    argument~with~expandable~commands.
+  }
+\__kernel_msg_new:nnnn { xparse } { inconsistent-long }
+  { Inconsistent~long~arguments~for~expandable~command~'#1'. }
+  {
+    The~arguments~for~an~expandable~command~must~not~involve~short~
+    arguments~after~long~arguments.~You~have~tried~to~mix~the~two~types.
+  }
+\__kernel_msg_new:nnnn { xparse } { invalid-command-arg }
+  { Argument~type~'#2'~not~available~for~#1. }
+  {
+    The~letter~'#2'~can~only~be~used~in~environment~argument~
+    specifications,~not~for~commands.
+    \\ \\
+    LaTeX~will~ignore~this~entire~definition.
+  }
+\__kernel_msg_new:nnnn { xparse } { invalid-expandable-argument-type }
+  { Argument~type~'#2'~not~available~for~expandable~command~'#1'. }
+  {
+    The~letter~'#2'~specifies~an~argument~type~which~cannot~be~used~
+    in~an~expandable~command.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { invalid-after-optional-expandably }
+  {
+    Argument~type~'#2'~not~available~after~optional~argument~
+    for~expandable~command~'#1'.
+  }
+  {
+    The~letter~'#2'~specifies~an~argument~type~which~cannot~be~used~
+    in~an~expandable~command~after~an~optional~argument.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { non-trailing-obey-spaces }
+  { Prefix~'!'~used~before~mandatory~argument~'#2'~of~#1. }
+  {
+    The~prefix~'!'~can~only~apply~to~trailing~optional~arguments.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { not-definable }
+  { First~argument~of~'#2'~must~be~a~command. }
+  {
+    The~first~argument~of~'#2'~should~be~the~document~command~that~will~
+    be~defined.~The~provided~argument~'#1'~is~a~character.~Perhaps~a~
+    backslash~is~missing?
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { not-one-token }
+  { First~argument~of~'#2'~must~be~a~command. }
+  {
+    The~first~argument~of~'#2'~should~be~the~document~command~that~will~
+    be~defined.~The~provided~argument~'#1'~contains~more~than~one~
+    token.~Perhaps~a~backslash~is~missing?
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { not-single-token }
+  {
+    Argument~delimiter~'#2'~for~the~#1~should~be~
+    a~single~non-space~token.
+  }
+  {
+    The~argument~specification~provided~was~not~valid:~in~a~place~
+    where~a~single~token~is~required,~LaTeX~found~'#2'.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { forbidden-implicit-group-token }
+  { Argument~delimiter~'#2'~for~the~#1~is~not~allowed. }
+  {
+    The~argument~specification~provided~was~not~valid:~the~implicit~
+    #3-group~token~'#2'~is~not~allowed~as~an~argument~delimiter.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { processor-in-expandable }
+  { Argument~processor~'>{#2}'~cannot~be~used~for~the~expandable~command~'#1'. }
+  {
+    The~argument~specification~for~#1~contains~a~processor~function:~
+    this~is~only~supported~for~standard~robust~commands.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { too-many-arguments }
+  { Too~many~arguments~in~argument~specification~'#2'~of~#1. }
+  {
+    The~argument~specification~provided~has~more~than~9~arguments.~
+    This~cannot~be~implemented.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { two-markers }
+  { Two~'#2'~apply~to~the~same~argument~in~argument~specification~of~#1. }
+  {
+    The~argument~specification~provided~has~two~markers~'#2'~applying~
+    to~the~same~argument;~these~are~redundant.
+  }
+\__kernel_msg_new:nnnn { xparse } { unknown-argument-type }
+  { Unknown~argument~type~'#2'~for~the~#1. }
+  {
+    The~letter~'#2'~does~not~specify~a~known~argument~type.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnnn { xparse } { xparse-argument-type }
+  { Deprecated~argument~type~'#2'~for~the~#1~requires~xparse. }
+  {
+    The~letter~'#2'~specifies~a~known~argument~type~that~requires~
+    the~xparse~package.
+    \c__xparse_ignore_def_tl
+  }
+\__kernel_msg_new:nnn { xparse } { if-boolean }
+  { Invalid~use~\iow_char:N\\IfBooleanTF~{#1} }
+\__kernel_msg_new:nnnn { xparse } { loop-in-defaults }
+  { Defaults~of~#1~have~circular~dependency. }
+  {
+    The~default~values~of~two~or~more~arguments~of~the~#1~
+    depend~on~each~other~in~a~way~that~cannot~be~resolved.
+  }
+\__kernel_msg_new:nnnn { xparse } { missing-required }
+  { Missing~required~argument~for~#1. }
+  {
+    The~current~#1~expects~an~argument~starting~with~'#2'.~
+    LaTeX~did~not~find~it,~and~will~insert~a~default~value~to~be~processed.
+  }
+\__kernel_msg_new:nnnn { xparse } { non-xparse }
+  { \str_uppercase:n #1~not~defined~using~xparse. }
+  {
+    You~have~asked~for~the~argument~specification~for~the~#1,~
+    but~this~was~not~defined~using~xparse.
+  }
+\__kernel_msg_new:nnnn { xparse } { split-excess-tokens }
+  { Too~many~'#1'~tokens~when~trying~to~split~argument. }
+  {
+    LaTeX~was~asked~to~split~the~input~'#3'~
+    at~each~occurrence~of~the~token~'#1',~up~to~a~maximum~of~#2~parts.~
+    There~were~too~many~'#1'~tokens.
+  }
+\__kernel_msg_new:nnnn { xparse } { unknown }
+  { Unknown~document~#1. }
+  {
+    You~have~asked~for~the~argument~specification~for~the~#1,~
+    but~it~is~not~defined.
+  }
+\__kernel_msg_new:nnnn { xparse } { verbatim-newline }
+  { Verbatim~argument~of~#1~ended~by~end~of~line. }
+  {
+    The~verbatim~argument~of~the~#1~cannot~contain~more~than~one~line,~
+    but~the~end~
+    of~the~current~line~has~been~reached.~You~may~have~forgotten~the~
+    closing~delimiter.
+    \\ \\
+    LaTeX~will~ignore~'#2'.
+  }
+\__kernel_msg_new:nnnn { xparse } { verbatim-tokenized }
+  { The~verbatim~#1~cannot~be~used~inside~an~argument. }
+  {
+    The~#1~takes~a~verbatim~argument.~
+    It~may~not~appear~within~the~argument~of~another~function.~
+    It~received~an~illegal~token \tl_if_empty:nF {#3} { ~'#3' } .
+    \\ \\
+    LaTeX~will~ignore~'#2'.
+  }
+\__kernel_msg_new:nnn { xparse } { define-command }
+  {
+    Defining~command~#1~
+    with~sig.~'#2'~\msg_line_context:.
+  }
+\__kernel_msg_new:nnn { xparse } { define-environment }
+  {
+    Defining~environment~'#1'~
+    with~sig.~'#2'~\msg_line_context:.
+  }
+\__kernel_msg_new:nnn { xparse } { redefine-command }
+  {
+    Redefining~command~#1~
+    with~sig.~'#2'~\msg_line_context:.
+  }
+\__kernel_msg_new:nnn { xparse } { redefine-environment }
+  {
+    Redefining~environment~'#1'~
+    with~sig.~'#2'~\msg_line_context:.
+  }
+\__kernel_msg_new:nnn { xparse } { optional-mandatory }
+  {
+    Since~the~mandatory~argument~'#1'~has~the~same~delimiter~'#2'~
+    as~a~previous~optional~argument,~it~will~not~be~possible~to~
+    omit~all~optional~arguments~when~calling~this~command.
+  }
+\__kernel_msg_new:nnn { xparse } { unsupported-let }
+  {
+    The~command~'#1'~was~undefined~but~not~the~associated~commands~
+    '#1~code'~and/or~'#1~defaults'.~Maybe~you~tried~using~
+    \iow_char:N\\let.~This~may~lead~to~an~infinite~loop.
+  }
+\cs_new_eq:NN \BooleanFalse \c_false_bool
+\cs_new_eq:NN \BooleanTrue  \c_true_bool
+\cs_new_protected:Npn \NewDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \NewDocumentCommand
+      {
+        \cs_if_exist:NTF #1
+          {
+            \__kernel_msg_error:nnxx { xparse } { command-already-defined }
+              { \use:nnn \token_to_str:N #1 { } }
+              { \token_to_str:N \NewDocumentCommand }
+          }
+          { \__xparse_declare_cmd:Nnn #1 {#2} {#3} }
+      }
+  }
+\cs_new_protected:Npn \RenewDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \RenewDocumentCommand
+      {
+        \cs_if_exist:NTF #1
+          { \__xparse_declare_cmd:Nnn #1 {#2} {#3} }
+          {
+            \__kernel_msg_error:nnxx { xparse } { command-not-yet-defined }
+              { \use:nnn \token_to_str:N #1 { } }
+              { \token_to_str:N \RenewDocumentCommand }
+          }
+      }
+  }
+\cs_new_protected:Npn \ProvideDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \ProvideDocumentCommand
+      { \cs_if_exist:NF #1 { \__xparse_declare_cmd:Nnn #1 {#2} {#3} } }
+ }
+\cs_new_protected:Npn \DeclareDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \DeclareDocumentCommand
+      { \__xparse_declare_cmd:Nnn #1 {#2} {#3} }
+  }
+\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
+  {
+    \cs_if_exist:cTF {#1}
+      { \__kernel_msg_error:nnx { xparse } { environment-already-defined } {#1} }
+      { \__xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }
+  }
+\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
+  {
+    \cs_if_exist:cTF {#1}
+      { \__xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }
+      { \__kernel_msg_error:nnx { xparse } { environment-not-yet-defined } {#1} }
+  }
+\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
+  { \cs_if_exist:cF {#1} { \__xparse_declare_env:nnnn {#1} {#2} {#3} {#4} } }
+\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
+  { \__xparse_declare_env:nnnn {#1} {#2} {#3} {#4} }
+\cs_new_protected:Npn \NewExpandableDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \NewExpandableDocumentCommand
+      {
+        \cs_if_exist:NTF #1
+          {
+            \__kernel_msg_error:nnxx { xparse } { command-already-defined }
+              { \use:nnn \token_to_str:N #1 { } }
+              { \token_to_str:N \NewExpandableDocumentCommand }
+          }
+          { \__xparse_declare_expandable_cmd:Nnn #1 {#2} {#3} }
+      }
+  }
+\cs_new_protected:Npn \RenewExpandableDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \RenewExpandableDocumentCommand
+      {
+        \cs_if_exist:NTF #1
+          { \__xparse_declare_expandable_cmd:Nnn #1 {#2} {#3} }
+          {
+            \__kernel_msg_error:nnxx { xparse } { command-not-yet-defined }
+              { \use:nnn \token_to_str:N #1 { } }
+              { \token_to_str:N \RenewExpandableDocumentCommand }
+          }
+      }
+  }
+\cs_new_protected:Npn \ProvideExpandableDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \ProvideExpandableDocumentCommand
+      {
+        \cs_if_exist:NF #1
+          { \__xparse_declare_expandable_cmd:Nnn #1 {#2} {#3} }
+      }
+ }
+\cs_new_protected:Npn \DeclareExpandableDocumentCommand #1#2#3
+  {
+    \__xparse_check_definable:nNT {#1} \DeclareExpandableDocumentCommand
+      { \__xparse_declare_expandable_cmd:Nnn #1 {#2} {#3} }
+  }
+\cs_new:Npn \IfBooleanTF #1
+  {
+    \tl_if_single:nF {#1}
+      { \prg_break:n { \use:n } }
+    \tl_if_single_token:nF #1
+      { \prg_break:n { \use:n } }
+    \token_if_eq_meaning:NNT #1 \c_true_bool
+      { \prg_break:n { \use_ii:nnn } }
+    \token_if_eq_meaning:NNT #1 \c_false_bool
+      { \prg_break:n { \use_iii:nnn } }
+    \prg_break:n { \use:n }
+    \prg_break_point:
+    {
+      \__kernel_msg_expandable_error:nnn { xparse } { if-boolean } {#1}
+      \use_ii:nn
+    }
+  }
+\cs_new:Npn \IfBooleanT #1#2 { \IfBooleanTF {#1} {#2} { } }
+\cs_new:Npn \IfBooleanF #1 { \IfBooleanTF {#1} { } }
+\cs_new_eq:NN \IfNoValueF  \tl_if_novalue:nF
+\cs_new_eq:NN \IfNoValueT  \tl_if_novalue:nT
+\cs_new_eq:NN \IfNoValueTF \tl_if_novalue:nTF
+\cs_new:Npn \IfValueF { \tl_if_novalue:nT }
+\cs_new:Npn \IfValueT { \tl_if_novalue:nF }
+\cs_new:Npn \IfValueTF #1#2#3 { \tl_if_novalue:nTF {#1} {#3} {#2} }
+\tl_new:N \ProcessedArgument
+\cs_new_eq:NN \ReverseBoolean \__xparse_bool_reverse:N
+\cs_new_eq:NN \SplitArgument  \__xparse_split_argument:nnn
+\cs_new_eq:NN \SplitList      \__xparse_split_list:nn
+\cs_new_eq:NN \TrimSpaces     \__xparse_trim_spaces:n
+\cs_new_eq:NN \ProcessList \tl_map_function:nN
+\cs_new_protected:Npn \GetDocumentCommandArgSpec #1
+  {
+    \__xparse_check_definable:nNT {#1} \GetDocumentCommandArgSpec
+      { \__xparse_get_arg_spec:N #1 }
+  }
+\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \__xparse_get_arg_spec:n
+\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1
+  {
+    \__xparse_check_definable:nNT {#1} \ShowDocumentCommandArgSpec
+      { \__xparse_show_arg_spec:N #1 }
+  }
+\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__xparse_show_arg_spec:n
+%% 
+%%
+%% End of file `xparse-2018-04-12.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2018-04-12.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -0,0 +1,174 @@
+%%
+%% This is file `xparse-2020-10-01.sty', generated from
+%% xparse.dtx  (with options: `package', on 2021-01-20)
+%% then adapted and frozen for compatibility.  Development of
+%% xparse.dtx will continue in the LaTeX2e kernel as ltcmd.dtx.
+%% 
+%% Copyright (C) 2009-2021 The LaTeX Project
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "l3packages bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: xparse.dtx
+\RequirePackage{expl3}[2018-04-12]
+\@ifpackagelater{expl3}{2018-04-12}
+  {}
+  {%
+    \PackageError{xparse}{Support package l3kernel too old}
+      {%
+        Please install an up to date version of l3kernel\MessageBreak
+        using your TeX package manager or from CTAN.\MessageBreak
+        \MessageBreak
+        Loading xparse will abort!%
+      }%
+    \endinput
+  }
+% \ProvidesExplPackage{xparse}{2021-01-09}{}
+%   {L3 Experimental document command parser}
+\expandafter\protected at xdef\csname ver at xparse.sty\endcsname
+  {2021-01-09 L3 Experimental document command parser}
+\ExplSyntaxOn
+\clist_new:N \l__xparse_options_clist
+\DeclareOption* { \clist_put_right:NV \l__xparse_options_clist \CurrentOption }
+\ProcessOptions \relax
+\keys_define:nn { xparse }
+  {
+    log-declarations .bool_set:N = \l__xparse_log_bool ,
+    log-declarations .initial:n  = false
+  }
+\keys_set:nV { xparse } \l__xparse_options_clist
+\bool_if:NF \l__xparse_log_bool
+  { \msg_redirect_module:nnn { LaTeX / xparse } { info } { none } }
+\input xparse-generic.tex ~
+\cs_gset_protected:Npn \__xparse_normalize_arg_spec_loop:n #1
+  {
+    \quark_if_recursion_tail_stop:n {#1}
+    \int_incr:N \l__xparse_current_arg_int
+    \cs_if_exist_use:cF { __xparse_normalize_type_ \tl_to_str:n {#1} :w }
+      {
+        \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
+          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
+        \__xparse_bad_def:wn
+      }
+  }
+\cs_new_protected:Npx \__xparse_normalize_type_g:w
+  { \exp_not:N \__xparse_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
+\cs_new_protected:Npn \__xparse_normalize_type_G:w #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \__xparse_normalize_check_gv:N G
+    \__xparse_add_arg_spec:n { G {#1} }
+    \tl_put_right:Nn \l__xparse_last_delimiters_tl { { } }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_l:w
+  {
+    \__xparse_normalize_check_lu:N l
+    \__xparse_add_arg_spec_mandatory:n { l }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_normalize_type_u:w #1
+  {
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+    \__xparse_normalize_check_lu:N u
+    \__xparse_add_arg_spec_mandatory:n { u {#1} }
+    \__xparse_normalize_arg_spec_loop:n
+  }
+\cs_new_protected:Npn \__xparse_add_type_G:w #1
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:n {#1}
+    \__xparse_add_grabber:N G
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_l:w
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N l
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_type_u:w #1
+  {
+    \__xparse_flush_m_args:
+    \__xparse_add_default:
+    \__xparse_add_grabber:N u
+    \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_add_expandable_type_l:w
+  { \__xparse_add_expandable_type_u:w ## }
+\cs_new_protected:Npn \__xparse_add_expandable_type_u:w #1
+  {
+    \__xparse_add_default:
+    \bool_if:NTF \l__xparse_long_bool
+      { \cs_set:cpn }
+      { \cs_set_nopar:cpn }
+      { \l__xparse_expandable_aux_name_tl } ##1 \q__xparse ##2 ##3 ##4 #1
+      { ##1 {##4} \q__xparse ##2 ##3 }
+    \__xparse_add_expandable_grabber:nn { u }
+      { \exp_not:c  { \l__xparse_expandable_aux_name_tl } }
+    \__xparse_prepare_signature:N
+  }
+\cs_new_protected:Npn \__xparse_grab_G:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+      \__xparse_peek_nonspace:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_long:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+      \__xparse_peek_nonspace:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_obey_spaces:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+      \peek_meaning:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_long_obey_spaces:w #1 \__xparse_run_code:
+  {
+    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+      \peek_meaning:NTF
+  }
+\cs_new_protected:Npn \__xparse_grab_G_aux:nNN #1#2#3
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN #2 \l__xparse_fn_tl ##1
+      { \__xparse_add_arg:n {##1} }
+    #3 \c_group_begin_token
+      { \l__xparse_fn_tl }
+      { \__xparse_add_arg:o \c_novalue_tl }
+  }
+\cs_new_protected:Npn \__xparse_grab_l:w #1 \__xparse_run_code:
+  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__xparse_grab_l_long:w #1 \__xparse_run_code:
+  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__xparse_grab_l_aux:nN #1#2
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#1}
+    \exp_after:wN #2 \l__xparse_fn_tl ##1##
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\cs_new_protected:Npn \__xparse_grab_u:w #1#2 \__xparse_run_code:
+  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__xparse_grab_u_long:w #1#2 \__xparse_run_code:
+  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__xparse_grab_u_aux:nnN #1#2#3
+  {
+    \tl_set:Nn \l__xparse_signature_tl {#2}
+    \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
+      { \__xparse_add_arg:n {##1} }
+    \l__xparse_fn_tl
+  }
+\cs_new_eq:NN \__xparse_expandable_grab_u:w \prg_do_nothing:
+%% 
+%%
+%% End of file `xparse-2020-10-01.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% xparse.dtx  (with options: `core')
 %% 
-%% Copyright (C) 2009-2020 The LaTeX3 Project
+%% Copyright (C) 2009-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -232,6 +232,7 @@
 \cs_new_protected:Npn \__xparse_start_env:nnnnn #1#2
   {
     \cs_if_exist_use:N \conditionally at traceoff
+    \group_align_safe_begin:
     \str_set:Nn \l__xparse_environment_str {#2}
     \bool_set_true:N \l__xparse_environment_bool
     \__xparse_start_aux:ccnnnn
@@ -241,8 +242,9 @@
   }
 \cs_new_protected:Npx \__xparse_start:nNNnnn #1#2#3
   {
+    \exp_not:c { xparse~function~is~not~expandable }
     \exp_not:n { \cs_if_exist_use:N \conditionally at traceoff }
-    \exp_not:c { xparse~function~is~not~expandable }
+    \exp_not:N \group_align_safe_begin:
     \exp_not:n { \bool_set_false:N \l__xparse_environment_bool }
     \exp_not:N \__xparse_start_aux:NNnnnn
     #2 #3 {#1}
@@ -261,6 +263,7 @@
   {
     \tl_if_empty:NF \l__xparse_defaults_tl { \__xparse_defaults: }
     \tl_if_empty:NF \l__xparse_process_all_tl { \__xparse_args_process: }
+    \group_align_safe_end:
     \cs_if_exist_use:N \conditionally at traceon
     \exp_after:wN \l__xparse_fn_code_tl \l__xparse_args_tl
   }
@@ -342,7 +345,10 @@
       { \ProcessedArgument }
   }
 \cs_new:Npn \__xparse_start_expandable:nNNNNn #1#2#3#4#5#6
-  { #6 \__xparse_end_expandable:NNw #5 #4 \q__xparse #2#3 }
+  {
+    \group_align_safe_begin:
+    #6 \__xparse_end_expandable:NNw #5 #4 \q__xparse #2#3
+  }
 \cs_new:Npn \__xparse_end_expandable:NNw #1#2
   { \__xparse_end_expandable_aux:w #1#2 \prg_do_nothing: }
 \cs_new:Npn \__xparse_end_expandable_aux:w #1#2#3 \q__xparse
@@ -364,7 +370,7 @@
   {
     #6
     \str_if_eq:nnTF {#1} {#2}
-      { \use_i_delimit_by_q_stop:nw { #5 #1 } }
+      { \use_i_delimit_by_q_stop:nw { \group_align_safe_end: #5 #1 } }
       {
         \exp_args:No \__xparse_tl_mapthread_function:nnN
           { #4 #1 } {#3}
@@ -1278,26 +1284,24 @@
   {
     \tl_set:Nn \l__xparse_signature_tl {#1}
     \group_begin:
-      \group_align_safe_begin:
-        \tex_escapechar:D = 92 \scan_stop:
-        \tl_clear:N \l__xparse_v_arg_tl
-        \peek_remove_spaces:n
-          {
-            \peek_meaning_remove:NTF \c_group_begin_token
-              {
-                \group_align_safe_end:
-                \__xparse_grab_v_bgroup:
-              }
-              {
-                \peek_N_type:TF
-                  { \__xparse_grab_v_aux_test:N }
-                  { \__xparse_grab_v_aux_abort:n { } }
-              }
-          }
+      \tex_escapechar:D = 92 \scan_stop:
+      \tl_clear:N \l__xparse_v_arg_tl
+      \peek_remove_spaces:n
+        {
+          \peek_meaning_remove:NTF \c_group_begin_token
+            {
+              \group_align_safe_end:
+              \__xparse_grab_v_bgroup:
+            }
+            {
+              \peek_N_type:TF
+                { \__xparse_grab_v_aux_test:N }
+                { \__xparse_grab_v_aux_abort:n { } }
+            }
+        }
   }
 \cs_new_protected:Npn \__xparse_grab_v_group_end:
   {
-        \group_align_safe_end:
         \exp_args:NNNo
       \group_end:
     \tl_set:Nn \l__xparse_v_arg_tl { \l__xparse_v_arg_tl }
@@ -1610,7 +1614,6 @@
       { #3 { \BooleanTrue } \q__xparse #4 #5 }
       { #3 { \BooleanFalse } \q__xparse #4 #5 {#6} }
   }
-\cs_new_eq:NN \__xparse_expandable_grab_u:w \prg_do_nothing:
 \cs_new:Npn \__xparse_put_arg_expandable:nw #1#2 \q__xparse { #2 {#1} \q__xparse }
 \cs_generate_variant:Nn \__xparse_put_arg_expandable:nw { o }
 \cs_new_protected:Npn \__xparse_bool_reverse:N #1

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% xparse.dtx  (with options: `2ekernel')
 %% 
-%% Copyright (C) 2009-2020 The LaTeX3 Project
+%% Copyright (C) 2009-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,11 +19,31 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: xparse.dtx
-\everyjob\expandafter{\the\everyjob
-  \message{xparse <2020-03-03>}%
-}
+\def\@parse at version#1/#2/#3#4#5\@nil{%
+  \@parse at version@dash#1-#2-#3#4\@nil}
+\def\@parse at version@dash#1-#2-#3#4#5\@nil{%
+  \if\relax#2\relax\else#1\fi#2#3#4 }
 \ExplSyntaxOn
-\input xparse-generic.tex ~
+\cs_if_free:NTF \NewDocumentCommand
+  {
+    \ExplSyntaxOff
+    \ifnum\expandafter
+        \@parse at version\fmtversion//00\@nil <
+        \@parse at version 2020-10-01//00\@nil
+      \RequirePackage{xparse-2018-04-12}
+    \else
+      \@@input xparse-generic.tex ~
+    \fi
+    \file_input_stop:
+  }
+  {
+    \ExplSyntaxOff
+    \cs_if_exist:NF \__cmd_start:nNNnnn
+      {
+        \RequirePackage{xparse-2020-10-01}
+        \file_input_stop:
+      }
+  }
 \ExplSyntaxOff
 %% 
 %%

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% xparse.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2009-2020 The LaTeX3 Project
+%% Copyright (C) 2009-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -32,141 +32,163 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xparse}{2020-10-27}{}
+\ExplSyntaxOn
+\cs_if_free:NTF \NewDocumentCommand
+  {
+    \ExplSyntaxOff
+    \ifnum\expandafter
+        \@parse at version\fmtversion//00\@nil <
+        \@parse at version 2020-10-01//00\@nil
+      \RequirePackage{xparse-2018-04-12}
+    \else
+      \RequirePackage{xparse-2020-10-01}
+    \fi
+    \file_input_stop:
+  }
+  {
+    \ExplSyntaxOff
+    \cs_if_exist:NF \__cmd_start:nNNnnn
+      {
+        \RequirePackage{xparse-2020-10-01}
+        \file_input_stop:
+      }
+  }
+\ExplSyntaxOff
+\ProvidesExplPackage{xparse}{2021-02-02}{}
   {L3 Experimental document command parser}
-\clist_new:N \l__xparse_options_clist
-\DeclareOption* { \clist_put_right:NV \l__xparse_options_clist \CurrentOption }
+\clist_new:N \l__cmd_options_clist
+\DeclareOption* { \clist_put_right:NV \l__cmd_options_clist \CurrentOption }
 \ProcessOptions \relax
-\keys_define:nn { xparse }
+\keys_define:nn { ltcmd }
   {
-    log-declarations .bool_set:N = \l__xparse_log_bool ,
+    log-declarations .bool_set:N = \l__cmd_log_bool ,
     log-declarations .initial:n  = false
   }
-\keys_set:nV { xparse } \l__xparse_options_clist
-\bool_if:NF \l__xparse_log_bool
-  { \msg_redirect_module:nnn { LaTeX / xparse } { info } { none } }
-\input xparse-generic.tex ~
-\cs_gset_protected:Npn \__xparse_normalize_arg_spec_loop:n #1
+\keys_set:nV { ltcmd } \l__cmd_options_clist
+\bool_if:NF \l__cmd_log_bool
+  { \msg_redirect_module:nnn { LaTeX / ltcmd } { info } { none } }
+\cs_gset_protected:Npn \__cmd_normalize_arg_spec_loop:n #1
   {
     \quark_if_recursion_tail_stop:n {#1}
-    \int_incr:N \l__xparse_current_arg_int
-    \cs_if_exist_use:cF { __xparse_normalize_type_ \tl_to_str:n {#1} :w }
+    \int_incr:N \l__cmd_current_arg_int
+    \cs_if_exist_use:cF { __cmd_normalize_type_ \tl_to_str:n {#1} :w }
       {
-        \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
-          { \__xparse_environment_or_command: } { \tl_to_str:n {#1} }
-        \__xparse_bad_def:wn
+        \__kernel_msg_error:nnxx { ltcmd } { unknown-argument-type }
+          { \__cmd_environment_or_command: } { \tl_to_str:n {#1} }
+        \__cmd_bad_def:wn
       }
   }
-\cs_new_protected:Npx \__xparse_normalize_type_g:w
-  { \exp_not:N \__xparse_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
-\cs_new_protected:Npn \__xparse_normalize_type_G:w #1
+\cs_new_protected:Npx \__cmd_normalize_type_g:w
+  { \exp_not:N \__cmd_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
+\cs_new_protected:Npn \__cmd_normalize_type_G:w #1
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
-    \__xparse_normalize_check_gv:N G
-    \__xparse_add_arg_spec:n { G {#1} }
-    \tl_put_right:Nn \l__xparse_last_delimiters_tl { { } }
-    \__xparse_normalize_arg_spec_loop:n
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
+    \__cmd_normalize_check_gv:N G
+    \__cmd_add_arg_spec:n { G {#1} }
+    \tl_put_right:Nn \l__cmd_last_delimiters_tl { { } }
+    \__cmd_normalize_arg_spec_loop:n
   }
-\cs_new_protected:Npn \__xparse_normalize_type_l:w
+\cs_new_protected:Npn \__cmd_normalize_type_l:w
   {
-    \__xparse_normalize_check_lu:N l
-    \__xparse_add_arg_spec_mandatory:n { l }
-    \__xparse_normalize_arg_spec_loop:n
+    \__cmd_normalize_check_lu:N l
+    \__cmd_add_arg_spec_mandatory:n { l }
+    \__cmd_normalize_arg_spec_loop:n
   }
-\cs_new_protected:Npn \__xparse_normalize_type_u:w #1
+\cs_new_protected:Npn \__cmd_normalize_type_u:w #1
   {
-    \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
-    \__xparse_normalize_check_lu:N u
-    \__xparse_add_arg_spec_mandatory:n { u {#1} }
-    \__xparse_normalize_arg_spec_loop:n
+    \quark_if_recursion_tail_stop_do:nn {#1} { \__cmd_bad_arg_spec:wn }
+    \__cmd_normalize_check_lu:N u
+    \__cmd_add_arg_spec_mandatory:n { u {#1} }
+    \__cmd_normalize_arg_spec_loop:n
   }
-\cs_new_protected:Npn \__xparse_add_type_G:w #1
+\cs_new_protected:Npn \__cmd_add_type_G:w #1
   {
-    \__xparse_flush_m_args:
-    \__xparse_add_default:n {#1}
-    \__xparse_add_grabber:N G
-    \__xparse_prepare_signature:N
+    \__cmd_flush_m_args:
+    \__cmd_add_default:n {#1}
+    \__cmd_add_grabber:N G
+    \__cmd_prepare_signature:N
   }
-\cs_new_protected:Npn \__xparse_add_type_l:w
+\cs_new_protected:Npn \__cmd_add_type_l:w
   {
-    \__xparse_flush_m_args:
-    \__xparse_add_default:
-    \__xparse_add_grabber:N l
-    \__xparse_prepare_signature:N
+    \__cmd_flush_m_args:
+    \__cmd_add_default:
+    \__cmd_add_grabber:N l
+    \__cmd_prepare_signature:N
   }
-\cs_new_protected:Npn \__xparse_add_type_u:w #1
+\cs_new_protected:Npn \__cmd_add_type_u:w #1
   {
-    \__xparse_flush_m_args:
-    \__xparse_add_default:
-    \__xparse_add_grabber:N u
-    \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
-    \__xparse_prepare_signature:N
+    \__cmd_flush_m_args:
+    \__cmd_add_default:
+    \__cmd_add_grabber:N u
+    \tl_put_right:Nn \l__cmd_signature_tl { {#1} }
+    \__cmd_prepare_signature:N
   }
-\cs_new_protected:Npn \__xparse_add_expandable_type_l:w
-  { \__xparse_add_expandable_type_u:w ## }
-\cs_new_protected:Npn \__xparse_add_expandable_type_u:w #1
+\cs_new_protected:Npn \__cmd_add_expandable_type_l:w
+  { \__cmd_add_expandable_type_u:w ## }
+\cs_new_protected:Npn \__cmd_add_expandable_type_u:w #1
   {
-    \__xparse_add_default:
-    \bool_if:NTF \l__xparse_long_bool
+    \__cmd_add_default:
+    \bool_if:NTF \l__cmd_long_bool
       { \cs_set:cpn }
       { \cs_set_nopar:cpn }
-      { \l__xparse_expandable_aux_name_tl } ##1 \q__xparse ##2 ##3 ##4 #1
-      { ##1 {##4} \q__xparse ##2 ##3 }
-    \__xparse_add_expandable_grabber:nn { u }
-      { \exp_not:c  { \l__xparse_expandable_aux_name_tl } }
-    \__xparse_prepare_signature:N
+      { \l__cmd_expandable_aux_name_tl } ##1 \q__cmd ##2 ##3 ##4 #1
+      { ##1 {##4} \q__cmd ##2 ##3 }
+    \__cmd_add_expandable_grabber:nn { u }
+      { \exp_not:c  { \l__cmd_expandable_aux_name_tl } }
+    \__cmd_prepare_signature:N
   }
-\cs_new_protected:Npn \__xparse_grab_G:w #1 \__xparse_run_code:
+\cs_new_protected:Npn \__cmd_grab_G:w #1 \__cmd_run_code:
   {
-    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
-      \__xparse_peek_nonspace:NTF
+    \__cmd_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+      \__cmd_peek_nonspace:NTF
   }
-\cs_new_protected:Npn \__xparse_grab_G_long:w #1 \__xparse_run_code:
+\cs_new_protected:Npn \__cmd_grab_G_long:w #1 \__cmd_run_code:
   {
-    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
-      \__xparse_peek_nonspace:NTF
+    \__cmd_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+      \__cmd_peek_nonspace:NTF
   }
-\cs_new_protected:Npn \__xparse_grab_G_obey_spaces:w #1 \__xparse_run_code:
+\cs_new_protected:Npn \__cmd_grab_G_obey_spaces:w #1 \__cmd_run_code:
   {
-    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
+    \__cmd_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
       \peek_meaning:NTF
   }
-\cs_new_protected:Npn \__xparse_grab_G_long_obey_spaces:w #1 \__xparse_run_code:
+\cs_new_protected:Npn \__cmd_grab_G_long_obey_spaces:w #1 \__cmd_run_code:
   {
-    \__xparse_grab_G_aux:nNN {#1} \cs_set_protected:Npn
+    \__cmd_grab_G_aux:nNN {#1} \cs_set_protected:Npn
       \peek_meaning:NTF
   }
-\cs_new_protected:Npn \__xparse_grab_G_aux:nNN #1#2#3
+\cs_new_protected:Npn \__cmd_grab_G_aux:nNN #1#2#3
   {
-    \tl_set:Nn \l__xparse_signature_tl {#1}
-    \exp_after:wN #2 \l__xparse_fn_tl ##1
-      { \__xparse_add_arg:n {##1} }
+    \tl_set:Nn \l__cmd_signature_tl {#1}
+    \exp_after:wN #2 \l__cmd_fn_tl ##1
+      { \__cmd_add_arg:n {##1} }
     #3 \c_group_begin_token
-      { \l__xparse_fn_tl }
-      { \__xparse_add_arg:o \c_novalue_tl }
+      { \l__cmd_fn_tl }
+      { \__cmd_add_arg:o \c_novalue_tl }
   }
-\cs_new_protected:Npn \__xparse_grab_l:w #1 \__xparse_run_code:
-  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
-\cs_new_protected:Npn \__xparse_grab_l_long:w #1 \__xparse_run_code:
-  { \__xparse_grab_l_aux:nN {#1} \cs_set_protected:Npn }
-\cs_new_protected:Npn \__xparse_grab_l_aux:nN #1#2
+\cs_new_protected:Npn \__cmd_grab_l:w #1 \__cmd_run_code:
+  { \__cmd_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__cmd_grab_l_long:w #1 \__cmd_run_code:
+  { \__cmd_grab_l_aux:nN {#1} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__cmd_grab_l_aux:nN #1#2
   {
-    \tl_set:Nn \l__xparse_signature_tl {#1}
-    \exp_after:wN #2 \l__xparse_fn_tl ##1##
-      { \__xparse_add_arg:n {##1} }
-    \l__xparse_fn_tl
+    \tl_set:Nn \l__cmd_signature_tl {#1}
+    \exp_after:wN #2 \l__cmd_fn_tl ##1##
+      { \__cmd_add_arg:n {##1} }
+    \l__cmd_fn_tl
   }
-\cs_new_protected:Npn \__xparse_grab_u:w #1#2 \__xparse_run_code:
-  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
-\cs_new_protected:Npn \__xparse_grab_u_long:w #1#2 \__xparse_run_code:
-  { \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected:Npn }
-\cs_new_protected:Npn \__xparse_grab_u_aux:nnN #1#2#3
+\cs_new_protected:Npn \__cmd_grab_u:w #1#2 \__cmd_run_code:
+  { \__cmd_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
+\cs_new_protected:Npn \__cmd_grab_u_long:w #1#2 \__cmd_run_code:
+  { \__cmd_grab_u_aux:nnN {#1} {#2} \cs_set_protected:Npn }
+\cs_new_protected:Npn \__cmd_grab_u_aux:nnN #1#2#3
   {
-    \tl_set:Nn \l__xparse_signature_tl {#2}
-    \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
-      { \__xparse_add_arg:n {##1} }
-    \l__xparse_fn_tl
+    \tl_set:Nn \l__cmd_signature_tl {#2}
+    \exp_after:wN #3 \l__cmd_fn_tl ##1 #1
+      { \__cmd_add_arg:n {##1} }
+    \l__cmd_fn_tl
   }
+\cs_new_eq:NN \__cmd_expandable_grab_u:w \prg_do_nothing:
 %% 
 %%
 %% End of file `xparse.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2021-02-02 22:14:49 UTC (rev 57599)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2021-02-02 22:16:13 UTC (rev 57600)
@@ -6,7 +6,7 @@
 %%
 %% xtemplate.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2011-2020 The LaTeX3 Project
+%% Copyright (C) 2011-2021 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xtemplate}{2020-10-27}{}
+\ProvidesExplPackage{xtemplate}{2021-02-02}{}
   {L3 Experimental prototype document functions}
 \tl_const:Nn \c__xtemplate_code_root_tl      { template~code~>~ }
 \tl_const:Nn \c__xtemplate_defaults_root_tl  { template~defaults~>~ }



More information about the tex-live-commits mailing list.