texlive[74461] Master/texmf-dist: datatool (5mar25)

commits+karl at tug.org commits+karl at tug.org
Wed Mar 5 22:33:51 CET 2025


Revision: 74461
          https://tug.org/svn/texlive?view=revision&revision=74461
Author:   karl
Date:     2025-03-05 22:33:51 +0100 (Wed, 05 Mar 2025)
Log Message:
-----------
datatool (5mar25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/datatool/CHANGES
    trunk/Master/texmf-dist/doc/latex/datatool/README.md
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-code.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183-page1.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186-page1.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186-page2.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page1.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page2.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page3.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page4.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.png
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.tex
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.html
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.tex
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-autokeys.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-barchart.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-datatooltk.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-dict.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-gidx.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-index.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-mail-merge.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-piechart.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-sort.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-student-scores.pdf
    trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-two-per-row.pdf
    trunk/Master/texmf-dist/source/latex/datatool/datatool.dtx
    trunk/Master/texmf-dist/source/latex/datatool/datatool.ins
    trunk/Master/texmf-dist/tex/latex/datatool/databar.sty
    trunk/Master/texmf-dist/tex/latex/datatool/databib.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datagidx.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datapie.sty
    trunk/Master/texmf-dist/tex/latex/datatool/dataplot.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool.sty
    trunk/Master/texmf-dist/tex/latex/datatool/person.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/datatool/databar-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/databib-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datagidx-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datapie-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/dataplot-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-base-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.def
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-l3fp.def
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-latin1.ldf
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-lua.def
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath-2019-09-27.sty
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.def
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-undetermined.ldf
    trunk/Master/texmf-dist/tex/latex/datatool/datatool-utf8.ldf
    trunk/Master/texmf-dist/tex/latex/datatool/person-2019-09-27.sty

Modified: trunk/Master/texmf-dist/doc/latex/datatool/CHANGES
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/CHANGES	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/CHANGES	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,3 +1,7 @@
+v3.0.1 (2025-03-05):
+
+Adding missing ldf, def and rollback files to datatool.tds.zip
+
 v3.0 (2025-03-03):
 
 Major new released. Rollback to v2.32 provided.

Modified: trunk/Master/texmf-dist/doc/latex/datatool/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/README.md	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/README.md	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,6 +1,6 @@
 # datatool — Tools to load and manipulate data
 
-Version 3.0 (2025-03-03)
+Version 3.0.1 (2025-03-05)
 
 Author: Nicola L. C. Talbot ([dickimaw-books.com](https://www.dickimaw-books.com/))
 

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

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example001.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 1 Regular Expressions with LaTeX3
 % Label: "ex:l3regex"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example002.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 2 Comma-Separated Lists with LaTeX3
 % Label: "ex:l3clist"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example003.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 3 Performing Calculations with LaTeX3
 % Label: "ex:l3fptodec"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example004.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 4 Performing Calculations with LuaLaTeX
 % Label: "ex:directlua"
 % arara: lualatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example005.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 5 Datum Control Sequences
 % Label: "ex:datumcs"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example006.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 6 Datum Tests for Equality
 % Label: "ex:datumifeq"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example007.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 7 Datum Control Sequences to Floating Point Variables
 % Label: "ex:datumfp"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example008.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 8 Localisation Support (en-CA)
 % Label: "ex:enCA"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example009.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 9 Localisation Support (fr-CA)
 % Label: "ex:frCA"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example010.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 10 Icelandic Alphabetic
 % Label: "ex:icelandic"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example011.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 11 IJ-Initial Support
 % Label: "ex:ijinitial"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example012.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 12 Icelandic Sorting and Letter Groups
 % Label: "ex:icelandiclettergroup"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example013.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 13 Test for Integer Value
 % Label: "ex:ifint"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example014.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 14 Test for Real Value
 % Label: "ex:ifreal"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example015.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 15 Test for Currency
 % Label: "ex:ifcurr"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example016.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 16 Test for Numerical
 % Label: "ex:ifnum"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example017.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 17 Test for Strings
 % Label: "ex:ifstr"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example018.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 18 Test for Data Type
 % Label: "ex:ifcasedata"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example019.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 19 Testing if an Element is in a Comma-Separated List
 % Label: "ex:DTLifinlist"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example020.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 20 String Equality Tests
 % Label: "ex:streq"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example021.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 21 String Less Than
 % Label: "ex:strlt"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example022.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 22 String Greater Than
 % Label: "ex:strgt"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example023.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 23 String Between Tests
 % Label: "ex:strcmp"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example024.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 24 Substring Tests
 % Label: "ex:substrif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example025.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 25 Prefix Tests
 % Label: "ex:prefixif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example026.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 26 Suffix Tests
 % Label: "ex:suffixif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example027.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 27 All Upper/Lower Case Tests
 % Label: "ex:ifallcase"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example028.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 28 Numerical Comparisons (Parsed)
 % Label: "ex:DTLifnum"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example029.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 29 Conditionals (l3fp)
 % Label: "ex:l3fpif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example030.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 30 Conditionals (lua)
 % Label: "ex:luaif"
 % arara: lualatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example031.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 31 Conditionals (fp)
 % Label: "ex:fpif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example032.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 32 Conditionals (pgfmath)
 % Label: "ex:pgfmathif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example033.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 33 Numerical/String Comparisons
 % Label: "ex:DTLif"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example034.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 34 Data Type Conditionals for use with ifthen
 % Label: "ex:DTListype"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example035.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 35 Order Conditionals for use with ifthen
 % Label: "ex:DTLiscmp"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example036.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 36 Substring Conditionals for use with ifthen
 % Label: "ex:DTLissubstr"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example037.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 37 Decimal Functions (l3fp)
 % Label: "ex:l3fpcalc"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example038.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 38 Decimal Functions (lua)
 % Label: "ex:luacalc"
 % arara: lualatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example039.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 39 Decimal Functions (fp)
 % Label: "ex:fpcalc"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example040.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 40 Decimal Functions (pgfmath)
 % Label: "ex:pgfmathcalc"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example041.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 41 Formatting and Parsing Currency (No Region)
 % Label: "ex:noregioncurrency"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example042.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 42 Currency Formats (GB Region)
 % Label: "ex:regionGBcurrency"
 % arara: xelatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example043.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 43 Currency Formats (GB and IE Regions)
 % Label: "ex:multiregioncurrency"
 % arara: xelatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example044.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 44 Defining a Currency
 % Label: "ex:defcurr"
 % arara: xelatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example045.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 45 Parsing Dates and Times
 % Label: "ex:parsetemporal"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example046.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 46 Parsing Dates and Times and Reformatting
 % Label: "ex:parsetemporalreformat"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example047.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 47 String Substitution and Splitting
 % Label: "ex:subsplitstr"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example048.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 48 Name or Phrase Initials
 % Label: "ex:initials"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example049.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 49 Word Initial Letter with UTF-8
 % Label: "ex:initialsutf8"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example050.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 50 Word Initial Commands
 % Label: "ex:initialscs"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example051.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 51 CSV List Argument Expansion
 % Label: "ex:incsvlist"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example052.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 52 Formatting CSV Lists
 % Label: "ex:formatlist"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example053.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 53 Elements of a CSV List
 % Label: "ex:listelements"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example054.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 54 Appending, Prepending and Inserting List Elements
 % Label: "ex:listinsert"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example055.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 55 Sorting Lists with \dtlsortlist (Case vs No Case)
 % Label: "ex:sortlistcharcase"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example056.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 56 Sorting Lists with \dtlsortlist (Letter vs Word)
 % Label: "ex:sortlistwordletter"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example057.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 57 Sorting Lists with \dtlsortlist (comma and parenthetical markers)
 % Label: "ex:sortlistcommas"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example058.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 58 Sorting Lists with \DTLsortwordlist (comma and parenthetical markers)
 % Label: "ex:wordsortlistcommas"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example059.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 59 Sorting Lists with \dtlsortlist and UTF-8
 % Label: "ex:sortlistutf8"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example060.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 60 Sorting Lists with \DTLsortwordlist and UTF-8 and No Localisation Support
 % Label: "ex:sortwordlistutf8"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example061.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 61 Sorting Lists with \DTLsortwordlist and UTF-8 and Localisation Support
 % Label: "ex:sortlistutf8locale"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example062.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 62 Sort Word Hook (Roman Numerals)
 % Label: "ex:sortwordhook"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example063.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 63 New Value Expansion
 % Label: "ex:newvalueexpand"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example064.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 64 Trimming New Values
 % Label: "ex:newvaluetrim"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example065.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 65 Creating and Displaying a Database with \\DTLaction
 % Label: "ex:actions"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example066.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 66 Adding New Columns Using Actions
 % Label: "ex:addcolaction"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example067.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 67 Select row action
 % Label: "ex:selectrow"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example068.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 68 Row aggregate actions
 % Label: "ex:rowaggregates"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example069.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 69 Automatically Formatting Values Calculated by Actions
 % Label: "ex:actiondatum"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example070.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 70 Creating a New Database with a Label
 % Label: "ex:newdb"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example071.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 71 Column with No Values
 % Label: "ex:nullcol"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example072.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 72 Display Data with Custom Alignment
 % Label: "ex:displaydbalignspecs"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example073.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 73 Display Data in a Table Omitting Columns
 % Label: "ex:displaydbomit"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example074.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 74 Display Data in a Table with Named Columns
 % Label: "ex:displaydbonly"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example075.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 75 Display Data in a Table with Filtered Rows
 % Label: "ex:displaydbcond"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example076.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 76 Referencing Rows from Displayed Data
 % Label: "ex:displayrowref"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example077.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 77 Inserting a Column at the Start of Displayed Data
 % Label: "ex:displayinsertcol"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example078.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 78 Display Data in a Table with an Extra Column
 % Label: "ex:displaydbpostrow"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example079.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 79 Adjusting the Item Hook to Calculate Totals and Show Negative Numbers in Red
 % Label: "ex:balancesheet"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example080.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 80 Display Two Database Rows Per Tabular Row
 % Label: "ex:displaydbrepeatcols"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example081.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 81 Display Two Database Rows Per Tabular Row (Top to Bottom)
 % Label: "ex:displaydbttb"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example082.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 82 Display Data in a Stripy Table
 % Label: "ex:displaydbstripytable"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example083.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 83 Display Stripy Two Database Rows Per Tabular Row
 % Label: "ex:displaydbstripyrepeatcols"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example084.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 84 Display Two Fields in One Column
 % Label: "ex:displaydbmergefields"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example085.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 85 Displaying Data with Calculations, Filtering and Row Highlighting
 % Label: "ex:displaydbaverages"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example086.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 86 Iterating Over Rows with \DTLmapdata and DTLenvmapdata
 % Label: "ex:mapdata"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example087.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 87 Iterating Over Rows with \DTLmapdata to Append a Column
 % Label: "ex:mapdataedit"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example088.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 88 Display Data in a Table with \DTLforeach
 % Label: "ex:foreachdisplay"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example089.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 89 Using \DTLforeach to Display a Stripy Table
 % Label: "ex:foreachstripy"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example090.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 90 Displaying Data with Row Numbers Using \DTLforeach
 % Label: "ex:foreachinsertcol"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example091.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 91 Using \DTLforeach to Display Data in a Table with a Running Total Column
 % Label: "ex:foreachextracol"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example092.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 92 Editing a Database with \DTLforeach
 % Label: "ex:foreachedit"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example093.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 93 Loops and Alignment
 % Label: "ex:constructtab"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example094.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 94 CSV Data Containing Empty Cells and Missing Final Cells
 % Label: "ex:nullcsv"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example095.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 95 Constructed Data With Missing (Null) Values
 % Label: "ex:nulldb"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example096.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 96 Display Data With Missing (Null) Values Shown as a Dash
 % Label: "ex:displaydbnullmissing"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example097.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 97 Iterating Through Data with Empty or Missing Values
 % Label: "ex:mapnullemptymissing"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example098.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 98 Editing a Row of Data
 % Label: "ex:selectandeditrow"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example099.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 99 Sorting CSV Data Using \DTLsortdata by Organisation, Surname and Forename With No Replacements
 % Label: "ex:sortcsvnorepl"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example100.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 100 Sorting CSV Data Using \DTLsortdata by Organisation, Surname and Forename With Replacements
 % Label: "ex:sortcsvrepl"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example101.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 101 Sorting Data Using \DTLsortdata With Replacements (Null vs Empty)
 % Label: "ex:sortdbrepl"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example102.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 102 Sorting CSV Data Using \DTLsortdata With Language Support
 % Label: "ex:sortlocale"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example103.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 103 Sorting Data Using \DTLsortdata on Age then Surname (Empty or Null Values)
 % Label: "ex:sortcsvage"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example104.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 104 Sorting Data Using \DTLsortdata on Age then Surname (No Empty Sort Values)
 % Label: "ex:sortdbage"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example105.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 105 Sorting Data Using \DTLsortdata by Descending Numeric and Ascending String Values
 % Label: "ex:sortmarksdes"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example106.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 106 Sorting CSV Data Using \dtlsort by Organisation, Surname and Forename With Replacements
 % Label: "ex:dtlsortcsvrepl"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example107.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 107 Loading and Saving Data (Be Careful of Category Codes)
 % Label: "ex:loadcustomers"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example108.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 108 Loading a TSV File
 % Label: "ex:loadtsv"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example109.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 109 Automatically Reformatting Data While Loading a CSV file
 % Label: "ex:auto-reformat-csv"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example110.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 110 Pie Chart
 % Label: "ex:piechart"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example111.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 111 Pie Chart (Action `pie chart')
 % Label: "ex:piechartaction"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example112.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 112 Pie Chart (Filtering)
 % Label: "ex:piechartcondition"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example113.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 113 Separating Segments from a Pie Chart
 % Label: "ex:piechartcutaway"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example114.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 114 Separating a Range of Segments from a Pie Chart
 % Label: "ex:piechartcutaway2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example115.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 115 Separating Individual Consecutive Segments from a Pie Chart
 % Label: "ex:piechartcutaway3"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example116.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 116 Pie Chart (Inner and Outer Labels)
 % Label: "ex:piechartlabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example117.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 117 Pie Chart (Labels Rotated)
 % Label: "ex:piechartrotatelabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example118.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 118 Pie Chart (Percentage Rounding)
 % Label: "ex:piechartpercentlabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example119.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 119 Pie Chart (Changing the Label Format)
 % Label: "ex:piechartlabelfmt"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example120.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 120 Pie Chart (Changing and Referencing the Segment Colours)
 % Label: "ex:piechartcolors"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example121.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 121 Vertical Bar Chart
 % Label: "ex:barchartfruit"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example122.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 122 Vertical Bar Chart (Action `bar chart')
 % Label: "ex:barchartfruitaction"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example123.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 123 Horizontal Bar Chart
 % Label: "ex:barchartprofits"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example124.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 124 Multi Bar Chart
 % Label: "ex:barchartmarks"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example125.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 125 Multi Bar Chart (Action `multibar chart')
 % Label: "ex:barchartmarksaction"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example126.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 126 Bar Chart With Labels
 % Label: "ex:barchartfruitlabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example127.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 127 Bar Chart With Labels (Action `bar chart')
 % Label: "ex:barchartfruitactionlabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example128.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 128 Bar Chart (Filtering)
 % Label: "ex:barchartcondition"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example129.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 129 Horizontal Bar Chart with Labels (Default Alignment)
 % Label: "ex:barchartlabelsdefalign"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example130.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 130 Horizontal Bar Chart with Labels (lower-label-style=same)
 % Label: "ex:barchartlabelsalignsame"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example131.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 131 Horizontal Bar Chart with Labels (lower-label-style=below)
 % Label: "ex:barchartlabelsalignbelow"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example132.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 132 Horizontal Bar Chart with Labels (lower-label-style=above)
 % Label: "ex:barchartlabelsalignabove"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example133.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 133 Horizontal Bar Chart with Upper Labels Over the Bars (negative upper-label-offset)
 % Label: "ex:barchartupperlabelsalign"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example134.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 134 Multi Bar Chart With Group Labels
 % Label: "ex:barchartgrouplabel"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example135.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 135 Bar Chart With Axes
 % Label: "ex:barchartaxes"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example136.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 136 Bar Chart With Rotated Tick Labels
 % Label: "ex:barchartrotateyticlabels"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example137.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 137 Bar Chart With a Limited Set of Custom Colours
 % Label: "ex:barchartclearcols"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example138.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 138 Bar Chart Cycling through the Colour Set
 % Label: "ex:barchartcyclecols"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example139.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 139 Single Colours for Positive and Negative Bars
 % Label: "ex:barchartnegcol"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example140.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 140 Shaded Bar
 % Label: "ex:barcharteverybarshading"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example141.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 141 Hook at Every Bar
 % Label: "ex:barcharteverybarpts"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example142.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 142 Every Bar Hook (Filtering)
 % Label: "ex:barcharteverybar"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example143.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 143 Bar Chart With a Legend
 % Label: "ex:barchartlegend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example144.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 144 Multi Bar Chart With a Legend
 % Label: "ex:barchartgrouplegend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example145.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 145 Scatter Plot (One Database)
 % Label: "ex:growthscatter1"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example146.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 146 Scatter Plot (Two Databases)
 % Label: "ex:growthscatter2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example147.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 147 Scatter Plot (Action)
 % Label: "ex:growthscatteraction"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example148.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 148 Scatter Plot (One Database, Two Sets of Data)
 % Label: "ex:growthscatter4col"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example149.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 149 Scatter Plot (Two Databases, Two Sets of Data)
 % Label: "ex:growthscatter4col2db"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example150.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 150 Scatter Plot (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2db"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example151.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 151 Scatter Plot With Mismatched X and Y Columns
 % Label: "ex:growthscatter6col2db2x3y"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example152.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 152 Scatter Plot with Custom Legend Labels (One Database, Two Sets of Data)
 % Label: "ex:growthscatter4col-legend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example153.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 153 Scatter Plot with Custom and Default Legend Labels (One Database, Two Sets of Data)
 % Label: "ex:growthscatter4col-legend2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example154.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 154 Scatter Plot with an Omitted Legend Label (One Database, Two Sets of Data)
 % Label: "ex:growthscatter4col-legend3"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example155.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 155 Scatter Plot (Two Databases with Name Map)
 % Label: "ex:growthscatter2namemap"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example156.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 156 Scatter Plot with Legend Label Mappings (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbmap"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example157.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 157 Scatter Plot with Legend Label Mappings and Custom formatting (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbmapxy"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example158.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 158 Scatter Plot with Custom Legend Labels (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbmap2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example159.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 159 Scatter Plot with Shifted Legend (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbmap2shiftlegend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example160.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 160 Scatter Plot with Custom Legend (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbmap2customlegend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example161.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 161 Line and Scatter Plot (Two Databases)
 % Label: "ex:growthscatterboth"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example162.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 162 Scatter Plot with Custom Colours and Styles (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbstyles"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example163.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 163 Scatter Plot with the Same Line Colour for Each Stream in a Given Database (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbgroupstyles"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example164.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 164 Scatter Plot with Plot Marks Reset (Two Databases, Multiple Sets of Data)
 % Label: "ex:growthscatter6col2dbresetstyles"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example165.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 165 Setting the Plot Bounds
 % Label: "ex:plotbounds"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example166.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 166 Rounding the Tick Labels
 % Label: "ex:plotround"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example167.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 167 Changing the Axis Style
 % Label: "ex:plotaxisstyle"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example168.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 168 Grid
 % Label: "ex:plotgrid"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example169.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 169 Custom Grid Lines
 % Label: "ex:plotcustomgrid"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example170.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 170 Plot Encapsulated in a Box
 % Label: "ex:plotbox"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example171.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 171 Plot Encapsulated in a Box Without Ticks
 % Label: "ex:plotboxticksnone"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example172.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 172 Positive and Negative Axes
 % Label: "ex:plotxy"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example173.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 173 Extending the Axes
 % Label: "ex:plotxyextend"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example174.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 174 Changing the Tick Label Node Style
 % Label: "ex:plotxynodestyle"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example175.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 175 Side Axes
 % Label: "ex:plotxysideaxes"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example176.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 176 Side-Axes, Extended Axes and Boxed
 % Label: "ex:plotboxextendedsideaxes"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example177.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 177 No Side-Axes, Extended Axes and Boxed
 % Label: "ex:plotboxextendednosideaxes"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example178.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 178 Redefining the Start and End Hooks
 % Label: "ex:plotxyhooks"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example179.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 179 Bibliography Sorted by Author
 % Label: "ex:sortauthor"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example180.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 180 Tabulate Bib Data
 % Label: "ex:bibtable"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example181.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 181 List of Publications Since a Given Year
 % Label: "ex:bibsince"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example182.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 182 Five Most Recent Publications
 % Label: "ex:topnbib"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183-page1.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example183.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 183 Compact Bibliography
 % Label: "ex:compactbib"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example184.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 184 Highlighting a given author
 % Label: "ex:highlightauthor"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example185.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 185 Separate List of Journals and Conference Papers
 % Label: "ex:jcbib"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186-page1.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186-page2.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example186.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 186 Multiple Bibliographies
 % Label: "ex:multibib"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example187.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 187 Creating an Index
 % Label: "ex:index"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example188.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 188 Creating a List of Abbreviations
 % Label: "ex:abbrev"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page1.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page2.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page3.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189-page4.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example189.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 189 Mail Merging
 % Label: "ex:mailmerge"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example190.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 190 Memorial Order of Service
 % Label: "ex:memorial"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example191.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 191 Memorial Order of Service (Shortcuts)
 % Label: "ex:memorial2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example192.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 192 Baptism Order of Service
 % Label: "ex:baptism"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.png
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user-examples/datatool-user-example193.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% This file is embedded in datatool-user.pdf version 3.0 2025-03-03
+% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05
 % Example 193 Baptism Order of Service (Shortcuts and Localisation)
 % Label: "ex:baptism2"
 % arara: pdflatex

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.html
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.html	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.html	2025-03-05 21:33:51 UTC (rev 74461)
@@ -5639,7 +5639,7 @@
 
 Dickimaw Books<br>
 
-<a href="https://www.dickimaw-books.com/">dickimaw-books.com</a></div><!-- end of author --><div class="date">version 3.0 2025-03-03</div><!-- end of date --></header>
+<a href="https://www.dickimaw-books.com/">dickimaw-books.com</a></div><!-- end of author --><div class="date">version 3.0.1 2025-03-05</div><!-- end of date --></header>
 <p>
 <div class="information"><div class="informationtitle"><a href="#glo:sym.information"><span title="Information" class="icon">&#x1f6c8;</span></a></div><!-- end of informationtitle -->
 </div><!-- end of information -->
@@ -5666,7 +5666,7 @@
 <dd>
 Advanced users wishing to know more about the inner workings of all the
 packages provided in the <span class="styfmt">datatool</span> bundle should read
-<span class="qt">&#x201c;Documented Code for datatool v3.0&#x201d;</span>.
+<span class="qt">&#x201c;Documented Code for datatool v3.0.1&#x201d;</span>.
 </dd>
 
 <p>
@@ -9455,7 +9455,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#ex:ijinitial-backref"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:ijinitial"></a>Example 11: IJ-Initial Support <a href="datatool-user-examples/datatool-user-example011.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example011.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example011.png" type="image/png" width="325" height="10">Example document demonstrating how IJ support can be
+<object data="datatool-user-examples/datatool-user-example011.png" type="image/png" width="312" height="10">Example document demonstrating how IJ support can be
 added to commands that fetch an initial letter. Typically the
 preamble code would be placed in a localisation file.</object>
 </div><!-- end of resultbox -->
@@ -10674,7 +10674,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#sec:strbetweenex"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:strcmp"></a>Example 23: String Between Tests <a href="datatool-user-examples/datatool-user-example023.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example023.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example023.png" type="image/png" width="347" height="57">Example document demonstrating string between comparison
+<object data="datatool-user-examples/datatool-user-example023.png" type="image/png" width="349" height="57">Example document demonstrating string between comparison
 commands.</object>
 </div><!-- end of resultbox -->
 
@@ -10863,7 +10863,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#sec:ifallcaseex"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:ifallcase"></a>Example 27: All Upper/Lower Case Tests <a href="datatool-user-examples/datatool-user-example027.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example027.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example027.png" type="image/png" width="145" height="113">Example document demonstrating tests for all upper or
+<object data="datatool-user-examples/datatool-user-example027.png" type="image/png" width="166" height="113">Example document demonstrating tests for all upper or
 lowercase.</object>
 </div><!-- end of resultbox -->
 
@@ -11521,7 +11521,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#sec:DTListypeex"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:DTListype"></a>Example 34: Data Type Conditionals for use with <span class="styfmt">ifthen</span> <a href="datatool-user-examples/datatool-user-example034.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example034.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example034.png" type="image/png" width="290" height="127">Example document demonstrating data type conditionals
+<object data="datatool-user-examples/datatool-user-example034.png" type="image/png" width="269" height="127">Example document demonstrating data type conditionals
 for use in commands like <code class="cmd">\ifthenelse</code>.</object>
 </div><!-- end of resultbox -->
 
@@ -15009,7 +15009,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#ex:sortlistcharcase-backref"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:sortlistcharcase"></a>Example 55: Sorting Lists with <code class="cmd">\dtlsortlist</code> (Case vs No Case) <a href="datatool-user-examples/datatool-user-example055.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example055.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example055.png" type="image/png" width="353" height="26">Example document that sorts a comma-separated list
+<object data="datatool-user-examples/datatool-user-example055.png" type="image/png" width="370" height="26">Example document that sorts a comma-separated list
 using <code class="cmd">\dtlsortlist</code> with the predefined case-sensitive and
 case-insensitive character comparison macros.</object>
 </div><!-- end of resultbox -->
@@ -15027,7 +15027,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#ex:sortlistwordletter-backref"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:sortlistwordletter"></a>Example 56: Sorting Lists with <code class="cmd">\dtlsortlist</code> (Letter vs Word) <a href="datatool-user-examples/datatool-user-example056.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example056.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example056.png" type="image/png" width="305" height="26">Example document that sorts a comma-separated list
+<object data="datatool-user-examples/datatool-user-example056.png" type="image/png" width="324" height="26">Example document that sorts a comma-separated list
 using <code class="cmd">\dtlsortlist</code> with the predefined word and letter comparison macros.</object>
 </div><!-- end of resultbox -->
 
@@ -19864,7 +19864,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#sec:displayrowref"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:displayrowref"></a>Example 76: Referencing Rows from Displayed Data <a href="datatool-user-examples/datatool-user-example076.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example076.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example076.png" type="image/png">An example document that loads data from a CSV file
+<object data="datatool-user-examples/datatool-user-example076.png" type="image/png" width="375" height="127">An example document that loads data from a CSV file
 and references a row.</object>
 </div><!-- end of resultbox -->
 
@@ -37056,7 +37056,7 @@
 <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">&#x1f5ba;</span></a></div><!-- end of resultboxtitle -->
 <a href="#ex:abbrev-backref"><span title="Up" class="icon">&#x2b71;</span></a><a id="ex:abbrev"></a>Example 188: Creating a List of Abbreviations <a href="datatool-user-examples/datatool-user-example188.tex" class="icon"><span title="Download TeX File" class="icon">&#x1f4e5;<sup>&#x1f5b9;</sup></span></a> <a href="datatool-user-examples/datatool-user-example188.pdf" class="icon"><span title="Download PDF" class="icon">&#x1f4e5;<sup>&#x1f5ba;</sup></span></a>
 <p>
-<object data="datatool-user-examples/datatool-user-example188.png" type="image/png" width="388" height="154">Example document demonstrating creating a list of
+<object data="datatool-user-examples/datatool-user-example188.png" type="image/png" width="388" height="151">Example document demonstrating creating a list of
 abbreviations.</object>
 </div><!-- end of resultbox -->
 

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

Modified: trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.tex	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/doc/latex/datatool/datatool-user.tex	2025-03-05 21:33:51 UTC (rev 74461)
@@ -15507,10 +15507,10 @@
 
 \versiondate
 {
-3.0
+3.0.1
 }
 {
-2025-03-03
+2025-03-05
 }
 
 \title{The datatool Bundle: Databases and Data Manipulation}
@@ -15539,7 +15539,7 @@
 \begin{itemdesc}
 Advanced users wishing to know more about the inner workings of all the
 packages provided in the \styfmt{datatool} bundle should read
-\qt{Documented Code for datatool v3.0}.
+\qt{Documented Code for datatool v3.0.1}.
 \end{itemdesc}
 
 \itemtitle{\url{CHANGES}}

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-autokeys.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-barchart.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-datatooltk.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-dict.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-gidx.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-index.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-mail-merge.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-piechart.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-sort.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-student-scores.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/datatool/samples/sample-two-per-row.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/datatool/datatool.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/datatool/datatool.dtx	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/source/latex/datatool/datatool.dtx	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,12 +1,7 @@
 %\iffalse
 % datatool.dtx generated using makedtx version 1.2 (c) Nicola Talbot
 % Command line args:
-%   -doc "datatool-manual.tex"
 %   -macrocode "databib\.bst"
-%   -author "Nicola Talbot"
-%   -codetitle ""
-%   -comment "databib\.bst"
-%   -setambles "databib\.bst=>\nopreamble\nopostamble"
 %   -src "datatool-base.sty\Z=>datatool-base.sty"
 %   -src "datatool-undetermined.ldf\Z=>datatool-undetermined.ldf"
 %   -src "datatool-(utf8|latin1).ldf\Z=>datatool-\1.ldf"
@@ -24,9 +19,14 @@
 %   -src "dataplot.sty\Z=>dataplot.sty"
 %   -src "person.sty\Z=>person.sty"
 %   -src "databib.bst\Z=>databib.bst"
-%   -src "(*-2019-09-27\.sty)\Z=>\1"
+%   -src "(.*-2019-09-27.sty\Z)=>\1"
+%   -setambles "databib\.bst=>\nopreamble\nopostamble"
+%   -doc "datatool-manual.tex"
+%   -author "Nicola Talbot"
+%   -codetitle ""
+%   -comment "databib\.bst"
 %   datatool
-% Created on 2025/3/3 16:09
+% Created on 2025/3/5 16:10
 %\fi
 %\iffalse
 %<*package>
@@ -61,7 +61,7 @@
 \documentclass{article}
 
 \usepackage{doc}
-\CheckSum{37542}
+\CheckSum{61756}
 
 \RecordChanges
 \PageIndex
@@ -129,11 +129,11 @@
 %\DeleteShortVerb{|}
 %\MakeShortVerb{"}
 %
-%\title{Documented Code for datatool v3.0}
+%\title{Documented Code for datatool v3.0.1}
 %\author{Nicola L. C. Talbot\\
 %\url{http://www.dickimaw-books.com/}}
 %
-%\date{2025-03-03}
+%\date{2025-03-05}
 %\maketitle
 %
 %\section{Introduction}
@@ -171,11 +171,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-base-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datatool-base}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datatool-base}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 % Required packages:
 %    \begin{macrocode}
@@ -17288,7 +17288,7 @@
 % Minimal support for undetermined language.
 %\changes{3.0}{2025-03-03}{new}
 %    \begin{macrocode}
-\TrackLangProvidesResource{undetermined}[2025/03/03 v3.0]
+\TrackLangProvidesResource{undetermined}[2025/03/05 v3.0.1]
 %    \end{macrocode}
 % Provide hook to customized:
 %    \begin{macrocode}
@@ -17318,7 +17318,7 @@
 % ISO-8859-1 (Latin-1) strings.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-latin1.ldf}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-latin1.ldf}[2025/03/05 v3.0.1 (NLCT)]
 \ExplSyntaxOn
 \datatool_set_currencysign_from_charcode:ne
   { cent } { "A2 }
@@ -17348,7 +17348,7 @@
 %\changes{3.0}{2025-03-03}{new}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-utf8.ldf}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-utf8.ldf}[2025/03/05 v3.0.1 (NLCT)]
 \ExplSyntaxOn
 %    \end{macrocode}
 %Common numeric and currency formatting symbols.
@@ -17414,7 +17414,7 @@
 %\changes{3.0}{2025-03-03}{new}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-l3fp.def}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-l3fp.def}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %
 %This file provides commands that use l3fp interfaces.
@@ -17872,7 +17872,7 @@
 %\changes{3.0}{2025-03-03}{new}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-lua.def}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-lua.def}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %
 %This file provides commands that use \cs{directlua}.
@@ -18308,7 +18308,7 @@
 % Provided for backward-compatibility.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-fp.def}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-fp.def}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 % Required package:
 %    \begin{macrocode}
@@ -18758,11 +18758,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-fp-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datatool-fp}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datatool-fp}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 % This package is deprecated.
 %    \begin{macrocode}
@@ -18789,7 +18789,7 @@
 % \texttt{datatool-lua.def} are preferable.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{datatool-pgfmath.def}[2025/03/03 v3.0 (NLCT)]
+\ProvidesFile{datatool-pgfmath.def}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 % Required packages:
 %    \begin{macrocode}
@@ -19352,11 +19352,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-pgfmath-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datatool-pgfmath}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datatool-pgfmath}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 % This package is deprecated.
 %    \begin{macrocode}
@@ -19386,11 +19386,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datatool}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datatool}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %\changes{3.0}{2025-03-03}{dropped \sty{xkeyval}}
 % Version 3.0: no longer using \sty{xkeyval}.
@@ -39072,11 +39072,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datagidx-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datagidx}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datagidx}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -47342,11 +47342,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{databib-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{databib}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{databib}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %\changes{3.0}{2025-03-03}{dropped \sty{xkeyval}}
 % Version 3.0: no longer using \sty{xkeyval}.
@@ -51760,11 +51760,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{databar-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{databar}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{databar}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %\changes{3.0}{2025-03-03}{dropped \sty{xkeyval}}
 % Version 3.0: no longer using \sty{xkeyval}.
@@ -55184,11 +55184,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{datapie-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{datapie}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{datapie}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %\changes{3.0}{2025-03-03}{dropped \sty{xkeyval}}
 % Version 3.0: no longer using \sty{xkeyval}.
@@ -56628,11 +56628,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{dataplot-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{dataplot}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{dataplot}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %\changes{3.0}{2025-03-03}{dropped \sty{xkeyval}}
 % Version 3.0: no longer using \sty{xkeyval}.
@@ -63020,11 +63020,11 @@
 % Rollback releases:
 %    \begin{macrocode}
 \DeclareRelease{v2.32}{2019-09-27}{person-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
 %    \end{macrocode}
 % Declare package:
 %    \begin{macrocode}
-\ProvidesPackage{person}[2025/03/03 v3.0 (NLCT)]
+\ProvidesPackage{person}[2025/03/05 v3.0.1 (NLCT)]
 %    \end{macrocode}
 %No longer requires the \sty{ifthen} package. However, \sty{ifthen}
 %is automatically loaded by \sty{datatool-base}, so this will have
@@ -67405,5 +67405,14761 @@
 %</databib.bst>
 %    \end{macrocode}
 %\fi
+%\iffalse
+%    \begin{macrocode}
+%<*databar-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (databar-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{databar}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{dataplot}[=v2.32]
+\newif\ifDTLcolorbarchart
+\DTLcolorbarcharttrue
+\DeclareOption{color}{\DTLcolorbarcharttrue}
+\DeclareOption{gray}{\DTLcolorbarchartfalse}
+\newcommand*{\DTLbarXlabelalign}{left,rotate=-90}
+\newcommand*{\DTLbarYticklabelalign}{right}
+\define at boolkey{databar}[DTL]{verticalbars}[true]{%
+\ifDTLverticalbars
+ \def\DTLbarXlabelalign{left,rotate=-90}%
+ \def\DTLbarYticklabelalign{right}
+\else
+ \def\DTLbarXlabelalign{right}%
+ \def\DTLbarYticklabelalign{center}
+\fi}
+\DTLverticalbarstrue
+\DeclareOption{vertical}{\DTLverticalbarstrue
+ \def\DTLbarXlabelalign{left,rotate=-90}%
+ \def\DTLbarYticklabelalign{right}
+}
+\DeclareOption{horizontal}{\DTLverticalbarsfalse
+ \def\DTLbarXlabelalign{right}%
+ \def\DTLbarYticklabelalign{center}
+}
+\ProcessOptions
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{tikz}
+\newlength\DTLbarchartlength
+\DTLbarchartlength=3in
+\newlength\DTLbarwidth
+\DTLbarwidth=1cm
+\newlength\DTLbarlabeloffset
+\setlength\DTLbarlabeloffset{10pt}
+\newcommand*{\DTLBarXAxisStyle}{-}
+\newcommand*{\DTLBarYAxisStyle}{-}
+\newcounter{DTLbarroundvar}
+\setcounter{DTLbarroundvar}{1}
+\newcommand*{\DTLbardisplayYticklabel}[1]{#1}
+\newcommand*{\DTLdisplaylowerbarlabel}[1]{#1}
+\newcommand*{\DTLdisplaylowermultibarlabel}[1]{#1}
+\newcommand*{\DTLdisplayupperbarlabel}[1]{#1}
+\newcommand*{\DTLdisplayuppermultibarlabel}[1]{#1}
+\newcommand*{\DTLbaratbegintikz}{}
+\newcommand*{\DTLbaratendtikz}{}
+\newif\ifDTLbarxaxis
+\newif\ifDTLbaryaxis
+\newif\ifDTLbarytics
+\newcount\@dtl at barcount
+\newcommand*{\DTLsetbarcolor}[2]{%
+\expandafter\def\csname dtlbar at segcol\romannumeral#1\endcsname{#2}%
+}
+\newcommand*{\DTLgetbarcolor}[1]{%
+\csname dtlbar at segcol\romannumeral#1\endcsname}
+\newcommand*{\DTLdobarcolor}[1]{%
+\expandafter\color\expandafter
+{\csname dtlbar at segcol\romannumeral#1\endcsname}}
+\newcommand*{\DTLdocurrentbarcolor}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{databar}{Can't use
+  \string\DTLdocurrentbarcolor\space outside
+  \string\DTLbarchart}{}%
+\else
+  \expandafter\DTLdobarcolor\expandafter{%
+  \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+\fi}
+\newcommand*{\DTLbaroutlinecolor}{black}
+\newlength\DTLbaroutlinewidth
+\DTLbaroutlinewidth=0pt
+\ifDTLcolorbarchart
+ \DTLsetbarcolor{1}{red}
+ \DTLsetbarcolor{2}{green}
+ \DTLsetbarcolor{3}{blue}
+ \DTLsetbarcolor{4}{yellow}
+ \DTLsetbarcolor{5}{magenta}
+ \DTLsetbarcolor{6}{cyan}
+ \DTLsetbarcolor{7}{orange}
+ \DTLsetbarcolor{8}{white}
+\else
+ \DTLsetbarcolor{1}{black!15}
+ \DTLsetbarcolor{2}{black!25}
+ \DTLsetbarcolor{3}{black!35}
+ \DTLsetbarcolor{4}{black!45}
+ \DTLsetbarcolor{5}{black!55}
+ \DTLsetbarcolor{6}{black!65}
+ \DTLsetbarcolor{7}{black!75}
+ \DTLsetbarcolor{8}{black!85}
+\fi
+\newcommand*{\DTLeverybarhook}{}
+\define at key{databar}{max}{\def\DTLbarmax{#1}}
+\define at key{databar}{length}{\DTLbarchartlength=#1\relax
+}
+\define at key{databar}{maxdepth}{%
+\ifnum#1>0\relax
+ \PackageError{databar}{depth must be zero or negative}{}%
+\else
+ \def\DTLnegextent{#1}%
+\fi}
+\define at choicekey{databar}{axes}[\var\nr]{both,x,y,none}{%
+\ifcase\nr\relax
+ % both
+  \DTLbarxaxistrue
+  \DTLbaryaxistrue
+  \DTLbaryticstrue
+\or
+ % x only
+  \DTLbarxaxistrue
+  \DTLbaryaxisfalse
+  \DTLbaryticsfalse
+\or
+ % y only
+  \DTLbarxaxisfalse
+  \DTLbaryaxistrue
+  \DTLbaryticstrue
+\or
+ % neither
+  \DTLbarxaxisfalse
+  \DTLbaryaxisfalse
+  \DTLbaryticsfalse
+\fi
+}
+\define at key{databar}{variable}{%
+ \def\DTLbarvariable{#1}%
+}
+\define at key{databar}{variables}{%
+ \def\dtlbar at variables{#1}%
+}
+\define at key{databar}{barwidth}{\setlength{\DTLbarwidth}{#1}}
+\define at key{databar}{barlabel}{%
+\def\dtl at barlabel{#1}}
+\def\dtl at barlabel{}
+\define at key{databar}{multibarlabels}{%
+\def\dtl at multibarlabels{#1}}
+\def\dtl at multibarlabels{}
+\define at key{databar}{groupgap}{\def\dtlbar at groupgap{#1}}
+\def\dtlbar at groupgap{1}
+\define at key{databar}{upperbarlabel}{%
+\def\dtl at upperbarlabel{#1}}
+\def\dtl at upperbarlabel{}
+\define at key{databar}{uppermultibarlabels}{%
+\def\dtl at uppermultibarlabels{#1}}
+\def\dtl at uppermultibarlabels{}
+\define at key{databar}{yticpoints}{%
+\def\dtlbar at yticlist{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticlist=\relax
+\define at key{databar}{yticgap}{%
+\def\dtlbar at yticgap{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticgap=\relax
+\define at key{databar}{yticlabels}{%
+\def\dtlbar at yticlabels{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticlabels=\relax
+\define at key{databar}{ylabel}{%
+\def\dtlbar at ylabel{#1}}
+\let\dtlbar at ylabel=\relax
+\newcommand*{\DTLbarchart}[4][\boolean{true}]{%
+{%
+  \undef\DTLbarvariable
+  \undef\DTLbarmax
+  \undef\DTLnegextent
+  \disable at keys{databar}{variables,multibarlabels,%
+    uppermultibarlabels,groupgap}%
+  \setkeys{databar}{#2}%
+  \ifundef{\DTLbarvariable}%
+  {%
+    \PackageError{databar}%
+    {\string\DTLbarchart\space missing variable}%
+    {You haven't use the "variable" key}%
+  }%
+  {%
+    \ifundef{\DTLbarmax}%
+    {%
+      \@sDTLforeach[#1]{#3}{#4}{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \ifundef{\DTLbarmax}%
+        {%
+          \let\DTLbarmax=\dtl at barvar
+        }%
+        {%
+          \let\dtl at old=\DTLbarmax
+          \dtlmax{\DTLbarmax}{\dtl at old}{\dtl at barvar}%
+        }%
+      }%
+      \ifx\dtlbar at yticgap\relax
+      \else
+        \let\dtl at thistick=\dtlbar at yticgap
+        \whiledo{\DTLisFPopenbetween{\dtl at thistick}{0}{\DTLbarmax}}%
+        {%
+          \dtladd{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+        }%
+        \let\DTLbarmax=\dtl at thistick
+      \fi
+    }%
+    {}%
+    \ifundef{\DTLnegextent}%
+    {%
+      \def\DTLnegextent{0}%
+      \@sDTLforeach[#1]{#3}{#4}{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \let\dtl at old=\DTLnegextent
+        \DTLmin{\DTLnegextent}{\dtl at old}{\dtl at barvar}%
+      }%
+      \ifx\dtlbar at yticgap\relax
+      \else
+        \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}%
+        {%
+        \edef\dtl at thistick{0}%
+        \whiledo{\DTLisFPclosedbetween{\dtl at thistick}{\DTLnegextent}{0}}{%
+          \dtlsub{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+        }%
+        \let\DTLnegextent=\dtl at thistick
+        }{}%
+      \fi
+    }%
+    {}%
+    \@dtl at tmpcount=\DTLbarchartlength
+    \dtlsub{\dtl at extent}{\DTLbarmax}{\DTLnegextent}%
+    \dtldiv{\dtl at unit}{\number\@dtl at tmpcount}{\dtl at extent}%
+     \setlength{\dtl at yticlabelwidth}{0pt}%
+     \ifDTLbarytics
+       \ifx\dtlbar at yticlist\relax
+         \ifx\dtlbar at yticgap\relax
+           \@dtl at tmpcount=\DTLmintickgap
+           \divide\@dtl at tmpcount by 65536\relax
+           \dtldiv{\dtl at mingap}{\number\@dtl at tmpcount}{\dtl at unit}%
+           \dtl at constructticklist\DTLnegextent\DTLbarmax
+             \dtl at mingap\dtlbar at yticlist
+         \else
+           \dtl at constructticklistwithgapz
+             \DTLnegextent\DTLbarmax\dtlbar at yticlist\dtlbar at yticgap
+         \fi
+       \fi
+       \ifx\dtlbar at ylabel\relax
+       \else
+         \ifx\dtlbar at yticlabels\relax
+           \@for\dtl at thislabel:=\dtlbar at yticlist\do{%
+             \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                     {\c at DTLbarroundvar}%
+             \ifDTLverticalbars
+               \settowidth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \else
+               \settoheight{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \edef\@dtl at h{\the\dtl at tmplength}%
+               \settodepth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \addtolength{\dtl at tmplength}{\@dtl at h}%
+               \addtolength{\dtl at tmplength}{\baselineskip}%
+             \fi
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \else
+           \@for\dtl at thislabel:=\dtlbar at yticlabels\do{%
+             \ifDTLverticalbars
+               \settowidth{\dtl at tmplength}{%
+                 \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \else
+               \settoheight{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \edef\@dtl at h{\the\dtl at tmplength}%
+               \settodepth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \addtolength{\dtl at tmplength}{\@dtl at h}%
+               \addtolength{\dtl at tmplength}{\baselineskip}%
+             \fi
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \fi
+       \fi
+     \fi
+  \edef\DTLbarchartwidth{\expandafter\number\csname dtlrows@#3\endcsname}
+  \begin{tikzpicture}
+  \ifDTLverticalbars
+    \pgfsetyvec{\pgfpoint{0pt}{\dtl at unit sp}}%
+    \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}%
+  \else
+    \pgfsetxvec{\pgfpoint{\dtl at unit sp}{0pt}}%
+    \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}%
+  \fi
+  \DTLbaratbegintikz
+  \def\@dtl at start{0}%
+  \@sDTLforeach[#1]{#3}{#4}{%
+  \expandafter\let\expandafter\@dtl at bar
+    \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+  \expandafter\DTLconverttodecimal\expandafter
+    {\DTLbarvariable}{\dtl at variable}%
+  \begin{scope}
+   \DTLdocurrentbarcolor
+   \ifDTLverticalbars
+     \fill (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+        -- (\@dtl at bar,\dtl at variable) -- (\@dtl at bar,0) -- cycle;
+   \else
+     \fill (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+        -- (\dtl at variable,\@dtl at bar) -- (0,\@dtl at bar) -- cycle;
+   \fi
+  \end{scope}
+  \begin{scope}
+  \ifdim\DTLbaroutlinewidth>0pt
+   \expandafter\color\expandafter{\DTLbaroutlinecolor}
+   \ifDTLverticalbars
+     \draw (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+        -- (\@dtl at bar,\dtl at variable) -- (\@dtl at bar,0) -- cycle;
+   \else
+     \draw (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+        -- (\dtl at variable,\@dtl at bar) -- (0,\@dtl at bar) -- cycle;
+   \fi
+  \fi
+  \end{scope}
+  \ifDTLverticalbars
+    \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{0}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}},
+       \DTLbarXlabelalign
+    }%
+    \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl at start.5}{0}}%
+  \else
+    \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{0}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}},
+       \DTLbarXlabelalign
+    }%
+    \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl at start.5}}%
+  \fi
+   \expandafter\pgftext\expandafter[\dtl at textopt]{%
+     \DTLdisplaylowerbarlabel{\dtl at barlabel}}
+  \ifDTLverticalbars
+    \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}%
+    {
+      \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}
+      }%
+    }{%
+      \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}
+             {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}}
+      }%
+    }
+    \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}%
+  \else
+    \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}%
+    {
+      \edef\dtl at textopt{right,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}
+      }%
+    }{%
+      \edef\dtl at textopt{left,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}}
+      }%
+    }
+    \edef\DTLendpt{\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}%
+  \fi
+   \expandafter\pgftext\expandafter[\dtl at textopt]{%
+      \DTLdisplayupperbarlabel{\dtl at upperbarlabel}}
+  \def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}%
+    \DTLeverybarhook
+    \edef\@dtl at start{\number\@dtl at bar}%
+  }%
+  \ifDTLbarxaxis
+    \ifDTLverticalbars
+      \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+        (0,0) -- (\DTLbarchartwidth,0);
+    \else
+      \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+        (0,0) -- (0,\DTLbarchartwidth);
+    \fi
+  \fi
+  \ifDTLbaryaxis
+    \ifDTLverticalbars
+      \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+        (0,\DTLnegextent) -- (0,\DTLbarmax);
+    \else
+      \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+        (\DTLnegextent,0) -- (\DTLbarmax,0);
+    \fi
+  \fi
+  \ifx\dtlbar at yticlist\relax
+  \else
+    \@for\dtl at thistick:=\dtlbar at yticlist\do{%
+      \ifDTLverticalbars
+        \pgfpathmoveto{\pgfpointxy{0}{\dtl at thistick}}
+        \pgfpathlineto{
+          \pgfpointadd{\pgfpointxy{0}{\dtl at thistick}}
+                      {\pgfpoint{-\DTLticklength}{0pt}}}
+      \else
+        \pgfpathmoveto{\pgfpointxy{\dtl at thistick}{0}}
+        \pgfpathlineto{
+          \pgfpointadd{\pgfpointxy{\dtl at thistick}{0}}
+                      {\pgfpoint{0pt}{-\DTLticklength}}}
+      \fi
+      \pgfusepath{stroke}
+      \ifx\dtlbar at yticlabels\relax
+         \dtlround{\dtl at thislabel}{\dtl at thistick}
+                 {\c at DTLbarroundvar}%
+      \else
+         \dtl at chopfirst\dtlbar at yticlabels\dtl at thislabel\dtl at rest
+         \let\dtlbar at yticlabels=\dtl at rest
+      \fi
+      \ifDTLverticalbars
+        \edef\dtl at textopt{\DTLbarYticklabelalign,%
+          at={\noexpand\pgfpointadd
+               {\noexpand\pgfpointxy{0}{\dtl at thistick}}
+               {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}},
+          }}%
+      \else
+        \edef\dtl at textopt{\DTLbarYticklabelalign,
+          at={\noexpand\pgfpointadd
+               {\noexpand\pgfpointxy{\dtl at thistick}{0}}
+               {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}}
+          }}%
+      \fi
+      \expandafter\pgftext\expandafter[\dtl at textopt]{%
+        \DTLbardisplayYticklabel{\dtl at thislabel}}
+    }%
+  \fi
+  \ifx\dtlbar at ylabel\relax
+  \else
+    \addtolength{\dtl at yticlabelwidth}{\baselineskip}%
+    \setlength{\dtl at tmplength}{0.5\DTLbarchartlength}
+    \ifDTLverticalbars
+      \pgftext[bottom,center,at={\pgfpointadd
+          {\pgfpointxy{0}{\DTLnegextent}}%
+          {\pgfpoint{-\dtl at yticlabelwidth}{\dtl at tmplength}}},
+          rotate=90]{%
+         \dtlbar at ylabel}
+    \else
+      \pgftext[bottom,center,at={\pgfpointadd
+          {\pgfpointxy{\DTLnegextent}{0}}%
+          {\pgfpoint{\dtl at tmplength}{-\dtl at yticlabelwidth}}}]{%
+         \dtlbar at ylabel}
+    \fi
+  \fi
+  \DTLbaratendtikz
+  \end{tikzpicture}
+  }%
+}%
+}
+\newcommand*{\DTLmultibarchart}[4][\boolean{true}]{%
+{\let\dtlbar at variables=\relax
+\let\DTLbarmax=\relax
+\let\DTLnegextent=\relax
+\disable at keys{databar}{variable,upperbarlabel}%
+\setkeys{databar}{#2}%
+\ifx\dtlbar at variables\relax
+  \PackageError{databar}{\string\DTLmultibarchart\space missing variables setting}{}%
+\else
+  \ifx\DTLbarmax\relax
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \@for\DTLbarvariable:=\dtlbar at variables\do{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \ifx\DTLbarmax\relax
+          \let\DTLbarmax=\dtl at barvar
+        \else
+          \let\dtl at old=\DTLbarmax
+          \dtlmax{\DTLbarmax}{\dtl at old}{\dtl at barvar}%
+        \fi
+      }%
+    }%
+    \ifx\dtlbar at yticgap\relax
+    \else
+      \let\dtl at thistick=\dtlbar at yticgap%
+      \whiledo{\DTLisFPopenbetween{\dtl at thistick}{0}{\DTLbarmax}}{%
+        \dtladd{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+      }%
+      \let\DTLbarmax=\dtl at thistick
+    \fi
+  \fi
+  \ifx\DTLnegextent\relax
+    \def\DTLnegextent{0}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \@for\DTLbarvariable:=\dtlbar at variables\do{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \let\dtl at old=\DTLnegextent
+        \DTLmin{\DTLnegextent}{\dtl at old}{\dtl at barvar}%
+      }%
+    }%
+    \ifx\dtlbar at yticgap\relax
+    \else
+      \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}{%
+      \edef\dtl at thistick{0}%
+      \whiledo{\DTLisFPclosedbetween{\dtl at thistick}{\DTLnegextent}{0}}{%
+        \dtlsub{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+      }%
+      \let\DTLnegextent=\dtl at thistick
+      }{}%
+    \fi
+  \fi
+  \@dtl at tmpcount=\DTLbarchartlength
+  \dtlsub{\dtl at extent}{\DTLbarmax}{\DTLnegextent}%
+  \dtldiv{\dtl at unit}{\number\@dtl at tmpcount}{\dtl at extent}%
+   \setlength{\dtl at yticlabelwidth}{0pt}%
+   \ifDTLbarytics
+     \ifx\dtlbar at yticlist\relax
+       \ifx\dtlbar at yticgap\relax
+         \@dtl at tmpcount=\DTLmintickgap
+         \divide\@dtl at tmpcount by 65536\relax
+         \dtldiv{\dtl at mingap}{\number\@dtl at tmpcount}{\dtl at unit}%
+         \dtl at constructticklist\DTLnegextent\DTLbarmax
+           \dtl at mingap\dtlbar at yticlist
+       \else
+         \dtl at constructticklistwithgapz
+           \DTLnegextent\DTLbarmax\dtlbar at yticlist\dtlbar at yticgap
+       \fi
+     \fi
+     \ifx\dtlbar at ylabel\relax
+     \else
+       \ifx\dtlbar at yticlabels\relax
+         \@for\dtl at thislabel:=\dtlbar at yticlist\do{%
+           \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                   {\c at DTLbarroundvar}%
+           \ifDTLverticalbars
+             \settowidth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+           \else
+             \settoheight{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \edef\@dtl at h{\the\dtl at tmplength}%
+             \settodepth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \addtolength{\dtl at tmplength}{\@dtl at h}%
+             \addtolength{\dtl at tmplength}{\baselineskip}%
+           \fi
+           \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+             \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+           \fi
+         }%
+       \else
+         \@for\dtl at thislabel:=\dtlbar at yticlabels\do{%
+           \ifDTLverticalbars
+             \settowidth{\dtl at tmplength}{%
+               \DTLbardisplayYticklabel{\dtl at thislabel}}%
+           \else
+             \settoheight{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \edef\@dtl at h{\the\dtl at tmplength}%
+             \settodepth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \addtolength{\dtl at tmplength}{\@dtl at h}%
+             \addtolength{\dtl at tmplength}{\baselineskip}%
+           \fi
+           \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+             \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+           \fi
+         }%
+       \fi
+     \fi
+   \fi
+\dtl at xticlabelheight=0pt\relax
+\@dtl at tmpcount=0\relax
+\@for\dtl at thislabel:=\dtl at multibarlabels\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \settoheight{\dtl at tmplength}{\tikz\expandafter\pgftext\expandafter
+    [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl at thislabel}};}%
+  \edef\@dtl at h{\the\dtl at tmplength}%
+  \settodepth{\dtl at tmplength}{\tikz\expandafter\pgftext\expandafter
+    [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl at thislabel}};}%
+  \addtolength{\dtl at tmplength}{\@dtl at h}%
+  \addtolength{\dtl at tmplength}{\baselineskip}%
+  \ifdim\dtl at tmplength>\dtl at xticlabelheight
+    \setlength{\dtl at xticlabelheight}{\dtl at tmplength}%
+  \fi
+}
+\@dtl at tmpcount=0\relax
+\@for\dtl at this:=\dtlbar at variables\do{%
+  \advance\@dtl at tmpcount by 1\relax
+}%
+\edef\DTLbargroupwidth{\number\@dtl at tmpcount}%
+\edef\dtl at n{\expandafter\number\csname dtlrows@#3\endcsname}
+\dtlmul{\dtl at tmpi}{\dtl at n}{\DTLbargroupwidth}
+\dtlsub{\dtl at tmpii}{\dtl at n}{1}%
+\dtlmul{\dtl at tmpii}{\dtl at tmpii}{\dtlbar at groupgap}%
+\dtladd{\DTLbarchartwidth}{\dtl at tmpi}{\dtl at tmpii}
+\begin{tikzpicture}
+\ifDTLverticalbars
+  \pgfsetyvec{\pgfpoint{0pt}{\dtl at unit sp}}%
+  \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}%
+\else
+  \pgfsetxvec{\pgfpoint{\dtl at unit sp}{0pt}}%
+  \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}%
+\fi
+\DTLbaratbegintikz
+\def\@dtl at start{0}%
+\@sDTLforeach[#1]{#3}{#4}{%
+\@dtl at barcount = 1\relax
+\let\dtl at multibar@labels=\dtl at multibarlabels
+\let\dtl at uppermultibar@labels=\dtl at uppermultibarlabels
+\dtlmul{\dtl at multimidpt}{\DTLbargroupwidth}{0.5}%
+\dtladd{\dtl at multimidpt}{\dtl at multimidpt}{\@dtl at start}%
+\@for\DTLbarvariable:=\dtlbar at variables\do{%
+\dtladd{\@dtl at endpt}{\@dtl at start}{1}%
+\expandafter\DTLconverttodecimal\expandafter
+  {\DTLbarvariable}{\dtl at variable}%
+\dtl at chopfirst\dtl at multibar@labels\dtl at thisbarlabel\dtl at rest
+\let\dtl at multibar@labels=\dtl at rest
+\dtl at chopfirst\dtl at uppermultibar@labels\dtl at thisupperbarlabel\dtl at rest
+\let\dtl at uppermultibar@labels=\dtl at rest
+\begin{scope}
+ \expandafter\color\expandafter{\DTLgetbarcolor{\@dtl at barcount}}%
+ \ifDTLverticalbars
+   \fill (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+      -- (\@dtl at endpt,\dtl at variable) -- (\@dtl at endpt,0) -- cycle;
+ \else
+   \fill (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+      -- (\dtl at variable,\@dtl at endpt) -- (0,\@dtl at endpt) -- cycle;
+ \fi
+\end{scope}
+\begin{scope}
+\ifdim\DTLbaroutlinewidth>0pt
+ \expandafter\color\expandafter{\DTLbaroutlinecolor}
+ \ifDTLverticalbars
+   \draw (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+      -- (\@dtl at endpt,\dtl at variable) -- (\@dtl at endpt,0) -- cycle;
+ \else
+   \draw (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+      -- (\dtl at variable,\@dtl at endpt) -- (0,\@dtl at endpt) -- cycle;
+ \fi
+\fi
+\end{scope}
+\dtladd{\@dtl at midpt}{\@dtl at start}{0.5}%
+\ifDTLverticalbars
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{0}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}},
+     \DTLbarXlabelalign
+  }%
+  \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl at midpt}{0}}%
+\else
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{0}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}},
+     \DTLbarXlabelalign
+  }%
+  \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl at midpt}}%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+   \DTLdisplaylowermultibarlabel{\dtl at thisbarlabel}}
+\ifDTLverticalbars
+  \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}
+  {
+    \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}
+    }%
+  }{%
+    \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}
+           {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}}
+    }%
+  }
+  \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}%
+\else
+  \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}
+  {
+    \edef\dtl at textopt{right,
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}
+    }%
+  }{%
+    \edef\dtl at textopt{left,
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}}
+    }%
+  }
+  \edef\DTLendpt{\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+    \DTLdisplayuppermultibarlabel{\dtl at thisupperbarlabel}}
+\def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}%
+\DTLeverybarhook
+  \dtladd{\@dtl at start}{\@dtl at start}{1}%
+  \advance\@dtl at barcount by 1\relax
+}%
+\setlength{\dtl at tmplength}{\DTLbarlabeloffset}%
+\addtolength{\dtl at tmplength}{\dtl at xticlabelheight}%
+\ifDTLverticalbars
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at multimidpt}{0}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\dtl at tmplength}}},
+     \DTLbarXlabelalign
+  }%
+\else
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{0}{\dtl at multimidpt}}
+           {\noexpand\pgfpoint{-\noexpand\dtl at tmplength}{0pt}}},
+     \DTLbarXlabelalign
+  }%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+   \DTLdisplaylowerbarlabel{\dtl at barlabel}}
+  \dtladd{\@dtl at start}{\@dtl at start}{\dtlbar at groupgap}%
+}
+\ifDTLbarxaxis
+  \ifDTLverticalbars
+    \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+      (0,0) -- (\DTLbarchartwidth,0);
+  \else
+    \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+      (0,0) -- (0,\DTLbarchartwidth);
+  \fi
+\fi
+\ifDTLbaryaxis
+  \ifDTLverticalbars
+    \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+      (0,\DTLnegextent) -- (0,\DTLbarmax);
+  \else
+    \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+      (\DTLnegextent,0) -- (\DTLbarmax,0);
+  \fi
+\fi
+\ifx\dtlbar at yticlist\relax
+\else
+  \@for\dtl at thistick:=\dtlbar at yticlist\do{%
+    \ifDTLverticalbars
+      \pgfpathmoveto{\pgfpointxy{0}{\dtl at thistick}}
+      \pgfpathlineto{
+        \pgfpointadd{\pgfpointxy{0}{\dtl at thistick}}
+                    {\pgfpoint{-\DTLticklength}{0pt}}}
+    \else
+      \pgfpathmoveto{\pgfpointxy{\dtl at thistick}{0}}
+      \pgfpathlineto{
+        \pgfpointadd{\pgfpointxy{\dtl at thistick}{0}}
+                    {\pgfpoint{0pt}{-\DTLticklength}}}
+    \fi
+    \pgfusepath{stroke}
+    \ifx\dtlbar at yticlabels\relax
+       \dtlround{\dtl at thislabel}{\dtl at thistick}
+               {\c at DTLbarroundvar}%
+    \else
+       \dtl at chopfirst\dtlbar at yticlabels\dtl at thislabel\dtl at rest
+       \let\dtlbar at yticlabels=\dtl at rest
+    \fi
+    \ifDTLverticalbars
+      \edef\dtl at textopt{\DTLbarYticklabelalign,%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{0}{\dtl at thistick}}
+             {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}},
+        }}%
+    \else
+      \edef\dtl at textopt{\DTLbarYticklabelalign,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at thistick}{0}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}}
+        }}%
+    \fi
+    \expandafter\pgftext\expandafter[\dtl at textopt]{%
+      \DTLbardisplayYticklabel{\dtl at thislabel}}
+  }%
+\fi
+\ifx\dtlbar at ylabel\relax
+\else
+  \addtolength{\dtl at yticlabelwidth}{\baselineskip}%
+  \setlength{\dtl at tmplength}{0.5\DTLbarchartlength}
+  \ifDTLverticalbars
+    \pgftext[bottom,center,at={\pgfpointadd
+        {\pgfpointxy{0}{\DTLnegextent}}%
+        {\pgfpoint{-\dtl at yticlabelwidth}{\dtl at tmplength}}},
+        rotate=90]{%
+       \dtlbar at ylabel}
+  \else
+    \pgftext[bottom,center,at={\pgfpointadd
+        {\pgfpointxy{\DTLnegextent}{0}}%
+        {\pgfpoint{\dtl at tmplength}{-\dtl at yticlabelwidth}}}]{%
+       \dtlbar at ylabel}
+  \fi
+\fi
+\DTLbaratendtikz
+\end{tikzpicture}
+\fi
+}}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</databar-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*databib-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (databib-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{databib}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{datatool}[=v2.32]
+\newcommand*{\dtlbib at style}{plain}
+\define at choicekey{databib.sty}{style}{plain,abbrv,alpha}{%
+\def\dtlbib at style{#1}}
+\ProcessOptionsX
+\newcommand*{\DTLloadbbl}[3][\jobname.bbl]{%
+\bibliographystyle{databib}%
+\if at filesw
+ \immediate\write\@auxout{\string\bibdata{#3}}%
+\fi
+\DTLnewdb{#2}%
+\edef\DTLBIBdbname{#2}%
+\@input@{#1}}
+\newcommand*{\DTLnewbibrow}{\@DTLnewrow{\DTLBIBdbname}}
+\newcommand*{\DTLnewbibitem}[2]{%
+  \@DTLnewdbentry{\DTLBIBdbname}{#1}{#2}}
+\providecommand*{\andname}{and}
+\providecommand*{\ofname}{of}
+\providecommand*{\inname}{in}
+\providecommand*{\etalname}{et al.}
+\providecommand*{\editorname}{editor}
+\providecommand*{\editorsname}{editors}
+\providecommand*{\volumename}{volume}
+\providecommand*{\numbername}{number}
+\providecommand*{\pagesname}{pages}
+\providecommand*{\pagename}{page}
+\providecommand*{\editionname}{edition}
+\providecommand*{\techreportname}{Technical report}
+\providecommand*{\mscthesisname}{Master's thesis}
+\providecommand*{\phdthesisname}{PhD thesis}
+\newcommand*{\DTLbibliography}[2][\boolean{true}]{%
+  \begin{DTLthebibliography}[#1]{#2}%
+  \DTLforeachbibentry[#1]{#2}{%
+    \DTLbibitem \DTLformatbibentry \DTLendbibitem
+  }%
+  \end{DTLthebibliography}%
+}
+\newcommand*{\DTLformatbibentry}{%
+  \@ifundefined{DTLformat\DBIBentrytype}%
+  {%
+    \PackageError{databib}{Don't know how to format bibliography
+    entries of type `\DBIBentrytype'}{}%
+  }%
+  {%
+    \dtl at message{[\DBIBcitekey]}%
+    \DTLstartsentencefalse\DTLmidsentencefalse\DTLperiodfalse
+     \csname DTLformat\DBIBentrytype\endcsname
+  }%
+}
+\newcommand*{\gDTLformatbibentry}{%
+  \@ifundefined{DTLformat\DBIBentrytype}%
+  {%
+    \PackageError{databib}{Don't know how to format bibliography
+    entries of type `\DBIBentrytype'}{}%
+  }%
+  {%
+    \dtl at message{[\DBIBcitekey]}%
+    \global\DTLstartsentencefalse
+    \global\DTLmidsentencefalse
+    \global\DTLperiodfalse
+     \csname DTLformat\DBIBentrytype\endcsname
+  }%
+}
+\newcommand*{\DTLformatthisbibentry}[2]{%
+  \edef\DBIBname{#1}%
+  \edef\DBIBcitekey{#2}%
+  \edtlgetrowforvalue{#1}{\dtlcolumnindex{#1}{CiteKey}}{\DBIBcitekey}%
+  \dtl at gathervalues{#1}{\dtlcurrentrow}%
+  \letcs{\DBIBentrytype}{@dtl at key@EntryType}%
+  \DTLformatbibentry
+}
+\newcommand*{\DTLendbibitem}{}
+\newlength\dtl at widest
+\newcommand*{\DTLcomputewidestbibentry}[4]{%
+\dtl at widest=0pt\relax
+\let#4=\@empty
+\DTLforeachbibentry[#1]{#2}{%
+\settowidth{\dtl at tmplength}{#3}%
+\ifdim\dtl at tmplength>\dtl at widest\relax
+ \dtl at widest=\dtl at tmplength
+ \protected at edef#4{#3}%
+\fi
+}%
+}
+\newcommand*{\DTLforeachbibentry}{%
+\@ifstar\@sDTLforeachbibentry\@DTLforeachbibentry}
+\newcommand*{\@DTLforeachbibentry}[3][\boolean{true}]{%
+  \edef\DBIBname{#2}%
+  \setcounter{DTLbibrow}{0}%
+  \@DTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}{\refstepcounter{DTLbibrow}#3}{}%
+  }%
+}
+\newcommand*{\@sDTLforeachbibentry}[3][\boolean{true}]{%
+  \edef\DBIBname{#2}%
+  \setcounter{DTLbibrow}{0}%
+  \@sDTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}{\refstepcounter{DTLbibrow}#3}{}%
+  }%
+}
+\newcommand{\gDTLforeachbibentry}{%
+\@ifstar\@sgDTLforeachbibentry\@gDTLforeachbibentry}
+\newcommand*{\@gDTLforeachbibentry}[3][\boolean{true}]{%
+  \xdef\DBIBname{#2}%
+  \global\c at DTLbibrow = 0\relax
+  \@DTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at g@gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}%
+    {%
+      \refstepcounter{DTLbibrow}%
+      \global\c at DTLbibrow=\c at DTLbibrow
+      #3%
+    }%
+    {}%
+  }%
+}
+\newcommand*{\@sgDTLforeachbibentry}[3][\boolean{true}]{%
+  \xdef\DBIBname{#2}%
+  \global\c at DTLbibrow = 0\relax
+  \@sDTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at g@gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}%
+    {%
+      \refstepcounter{DTLbibrow}%
+      \global\c at DTLbibrow=\c at DTLbibrow
+      #3%
+    }%
+    {}%
+  }%
+}
+\newcounter{DTLbibrow}
+\def\theHDTLbibrow{\theHDTLrow.bib.\arabic{DTLbibrow}}%
+\newcommand*{\DTLbibfield}[1]{\csname @dtl at key@#1\endcsname}
+\newcommand*{\DTLbibfieldlet}[2]{%
+  \letcs{#1}{@dtl at key@#2}%
+}
+\newcommand*{\DTLifbibfieldexists}[3]{%
+\@ifundefined{@dtl at key@#1}{#3}{%
+\expandafter\DTLifnull\csname @dtl at key@#1\endcsname
+{#3}{#2}}}
+\newcommand*{\DTLifanybibfieldexists}[3]{%
+\@for\dtl at thisfield:=#1\do{%
+\@ifundefined{@dtl at key@\dtl at thisfield}{}{%
+\expandafter\DTLifnull\csname @dtl at key@\dtl at thisfield\endcsname
+{}{%
+\@endfortrue}}}%
+\if at endfor
+ #2%
+\else
+ #3%
+\fi
+\@endforfalse
+}
+\newif\ifDTLperiod
+\newcommand*{\DTLcheckendsperiod}[1]{%
+\dtl at checkendsperiod#1\@nil\relax}
+\def\dtl at checkendsperiod#1#2{%
+\def\@dtl at argi{#1}\def\@dtl at argii{#2}%
+\def\@dtl at period{.}%
+\ifx\@dtl at argi\@nnil
+  \global\DTLperiodfalse
+  \let\@dtl at donext=\relax
+\else
+  \ifx\@dtl at argii\@nnil
+    \ifx\@dtl at argi\@dtl at period
+      \global\DTLperiodtrue
+    \else
+      \global\DTLperiodfalse
+    \fi
+    \let\@dtl at donext=\@gobble
+  \else
+    \let\@dtl at donext=\dtl at checkendsperiod
+  \fi
+\fi
+\@dtl at donext{#2}%
+}
+\newcommand*{\DTLcheckbibfieldendsperiod}[1]{%
+\protected at edef\@dtl at tmp{\DTLbibfield{#1}}%
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}}
+\newif\ifDTLmidsentence
+\newif\ifDTLstartsentence
+\newcommand*{\DTLaddperiod}{\DTLmidsentencefalse\DTLperiodfalse
+\DTLstartsentencetrue
+\ifDTLperiod\else.\fi}
+\newcommand*{\DTLaddcomma}{, \DTLmidsentencetrue
+\DTLperiodfalse\DTLstartsentencefalse}
+\newcommand*{\DTLstartsentencespace}{%
+\ifDTLstartsentence\spacefactor=\sfcode`\.\relax\space
+\fi\DTLstartsentencefalse}
+\newcommand*{\DTLtwoand}{\ \andname\ }
+\newcommand*{\DTLandlast}{, \andname\ }
+\newcommand*{\DTLandnotlast}{, }
+\newcount\@dtl at authorcount
+\newcounter{DTLmaxauthors}
+\setcounter{DTLmaxauthors}{10}
+\newcommand*{\DTLformatauthorlist}{%
+\DTLifbibfieldexists{Author}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Author\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\@dtl at tmpcount=0\relax
+\ifnum\@dtl at authorcount>\c at DTLmaxauthors
+{%
+  \@for\@dtl at author:=\@dtl at key@Author\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformatauthor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount>\c at DTLmaxauthors
+      \DTLandnotlast \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}%
+      \@endfortrue
+    \else
+      \DTLandnotlast \expandafter\DTLformatauthor\@dtl at author
+    \fi
+  \fi
+  }%
+}%
+\else
+  \@for\@dtl at author:=\@dtl at key@Author\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformatauthor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount=\@dtl at authorcount
+      \ifnum\@dtl at authorcount=2\relax
+        \DTLtwoand
+      \else
+        \DTLandlast
+      \fi
+      \expandafter\DTLformatauthor\@dtl at author
+    \else
+      \DTLandnotlast \expandafter\DTLformatauthor\@dtl at author
+    \fi
+  \fi
+  }%
+\fi
+}{}%
+}
+\newcounter{DTLmaxeditors}
+\setcounter{DTLmaxeditors}{10}
+\newcommand*{\DTLformateditorlist}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\@dtl at tmpcount=0\relax
+\ifnum\@dtl at authorcount>\c at DTLmaxeditors
+{%
+  \@for\@dtl at author:=\@dtl at key@Editor\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformateditor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount>\c at DTLmaxeditors
+      \DTLandnotlast \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}%
+      \@endfortrue
+    \else
+      \DTLandnotlast \expandafter\DTLformateditor\@dtl at author
+    \fi
+  \fi
+  }%
+}%
+\else
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformateditor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount=\@dtl at authorcount
+      \ifnum\@dtl at authorcount=2\relax
+        \DTLtwoand
+      \else
+        \DTLandlast
+      \fi
+      \expandafter\DTLformateditor\@dtl at author
+    \else
+      \DTLandnotlast \expandafter\DTLformateditor\@dtl at author
+    \fi
+  \fi
+  }%
+\fi
+,
+\ifnum\@dtl at authorcount=1\relax
+  \editorname
+  \expandafter\DTLcheckendsperiod\expandafter{\editorname}%
+\else
+  \editorsname
+  \expandafter\DTLcheckendsperiod\expandafter{\editorsname}%
+\fi
+}{}%
+}
+\newcommand*{\DTLformatsurnameonly}[4]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty\else#1~\fi
+#2%
+\def\@dtl at tmp{#3}%
+\ifx\@dtl at tmp\@empty
+  \DTLcheckendsperiod{#2}%
+\else
+  , #3%
+  \DTLcheckendsperiod{#3}%
+\fi
+}
+\newcommand*{\DTLformatforenames}[1]{%
+\DTLstartsentencespace
+#1%
+\DTLcheckendsperiod{#1}}
+\newcommand*{\DTLformatabbrvforenames}[1]{%
+\DTLstartsentencespace
+\DTLstoreinitials{#1}{\@dtl at tmp}\@dtl at tmp
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}}
+\newcommand*{\DTLformatvon}[1]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty
+\else
+  #1~%
+\fi
+}
+\newcommand*{\DTLformatsurname}[1]{%
+\DTLstartsentencespace
+#1\DTLcheckendsperiod{#1}}
+\newcommand*{\DTLformatjr}[1]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty
+\else
+  , #1\DTLcheckendsperiod{#1}%
+\fi
+}
+\newcommand*{\DTLformatcrossrefeditor}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\advance\@dtl at authorcount by 1\relax}%
+{\@dtl at tmpcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\ifnum\@dtl at authorcount=1\relax
+ \expandafter\DTLformatsurnameonly\@dtl at author
+\else
+ \advance\@dtl at tmpcount by 1\relax
+ \ifnum\@dtl at tmpcount=1\relax
+    \expandafter\DTLformatsurnameonly\@dtl at author
+  \else
+    \ifnum\@dtl at authorcount=2\relax
+      \ \andname\ \expandafter\DTLformatsurnameonly\@dtl at author
+    \else
+      \ \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}
+    \fi
+    \@endfortrue
+  \fi
+\fi
+}}%
+}{}%
+}
+\newcommand*{\DTLformatvolnumpages}{%
+\DTLifbibfieldexists{Volume}{%
+\DTLstartsentencespace
+\DTLbibfield{Volume}\DTLperiodfalse}{}%
+\DTLifbibfieldexists{Number}{%
+\DTLstartsentencespace
+(\DTLbibfield{Number})\DTLperiodfalse}{}%
+\DTLifbibfieldexists{Pages}{%
+\DTLifanybibfieldexists{Volume,Number}{:}{%
+\DTLstartsentencespace
+\protected at edef\@dtl at pages{0\DTLbibfield{Pages}}%
+\DTLifnumerical{\@dtl at pages}{\pagename}{\pagesname}~}%
+\DTLbibfield{Pages}\DTLperiodfalse}{}%
+}
+\newcommand*{\DTLformatbvolume}{%
+\DTLifbibfieldexists{Volume}{%
+\ifDTLmidsentence
+  \volumename
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\volumename
+\fi
+~\DTLbibfield{Volume}%
+\DTLifbibfieldexists{Series}{\ \ofname\
+{\em\DTLbibfield{Series}}\DTLcheckbibfieldendsperiod{Series}}{%
+\DTLcheckbibfieldendsperiod{Volume}}%
+}{}}
+\newcommand*{\DTLformatchapterpages}{%
+\DTLifbibfieldexists{Chapter}{%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}}{%
+\DTLstartsentencespace
+\chaptername}~\DTLbibfield{Chapter}%
+\DTLifbibfieldexists{Pages}{\DTLaddcomma}{%
+\DTLcheckbibfieldendsperiod{Chapter}}}{}%
+\DTLstartsentencespace
+\DTLformatpages}
+\newcommand*{\DTLformatpages}{%
+\DTLifbibfieldexists{Pages}{%
+\DTLstartsentencespace
+\protected at edef\@dtl at pages{0\DTLbibfield{Pages}}%
+\DTLifnumerical{\@dtl at pages}{\pagename}{\pagesname}~%
+\DTLbibfield{Pages}\DTLcheckbibfieldendsperiod{Pages}}{}%
+}
+\newcommand*{\DTLformatnumberseries}{%
+\DTLifbibfieldexists{Volume}{}{%
+\DTLifbibfieldexists{Number}{%
+\ifDTLmidsentence
+  \numbername
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\numbername
+\fi~\DTLbibfield{Number}%
+\DTLifbibfieldexists{Series}{\ \inname\ \DTLbibfield{Series}%
+\DTLcheckbibfieldendsperiod{Series}}{%
+\DTLcheckbibfieldendsperiod{Number}}%
+}{%
+\DTLifbibfieldexists{Series}{%
+\DTLstartsentencespace
+\DTLbibfield{Series}%
+\DTLcheckbibfieldendsperiod{Series}}{}}%
+}%
+}
+\newcommand*{\DTLformatbookcrossref}{%
+\DTLifbibfieldexists{Volume}{%
+\ifDTLmidsentence
+  \volumename
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\volumename
+\fi
+~\DTLbibfield{Volume}\ \ofname\
+}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ }%
+\DTLifbibfieldexists{Editor}{\DTLformatcrossrefeditor}{%
+\DTLifbibfieldexists{Key}{%
+\DTLbibfield{Key}}{%
+\DTLifbibfieldexists{Series}{%
+{\em\DTLbibfield{Series}}}{}%
+}%
+}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newcommand*{\DTLformatincollproccrossref}{%
+\DTLifbibfieldexists{Editor}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\
+\DTLformatcrossrefeditor
+}{%
+\DTLifbibfieldexists{Key}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ \DTLbibfield{Key}%
+}{%
+\DTLifbibfieldexists{BookTitle}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ \DTLformatbooktitle{\DTLbibfield{BookTitle}}}{}%
+}}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newcommand*{\DTLformatinedbooktitle}{%
+\DTLifbibfieldexists{BookTitle}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\
+\DTLifbibfieldexists{Editor}{%
+\DTLformateditorlist\DTLaddcomma \DTLformatbooktitle{\DTLbibfield{BookTitle}}%
+\DTLcheckbibfieldendsperiod{BookTitle}%
+}{\DTLformatbooktitle{\DTLbibfield{BookTitle}}%
+\DTLcheckbibfieldendsperiod{BookTitle}%
+}}{}}
+\newcommand*{\DTLformatdate}{%
+\DTLifbibfieldexists{Year}{%
+\DTLifbibfieldexists{Month}{%
+\protected at edef\@dtl at tmp{\DTLbibfield{Month}}%
+\ifDTLmidsentence
+  \@dtl at tmp
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\@dtl at tmp
+\fi\
+\DTLmidsentencefalse}{}%
+\DTLstartsentencespace
+\DTLbibfield{Year}}{%
+\DTLifbibfieldexists{Month}{%
+\protected at edef\@dtl at tmp{\DTLbibfield{Month}}%
+\ifDTLmidsentence
+  \@dtl at tmp
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\DTLcheckbibfieldendsperiod{Month}%
+}{}}}
+\newcommand*{\DTLformatarticlecrossref}{%
+\DTLifbibfieldexists{Key}{%
+\ifDTLmidsentence
+ \inname
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\inname
+\fi
+\ {\em\DTLbibfield{Key}}}{%
+\DTLifbibfieldexists{Journal}{%
+\ifDTLmidsentence
+ \inname
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\inname
+\fi
+\ {\em\DTLbibfield{Journal}}}{}}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newrobustcmd*{\DTLpcite}[1]{%
+  \protected at edef\@dtl at tmp{#1}%
+  \cite{\@dtl at tmp}%
+}
+\newcommand*{\DTLbibfieldexists}[1]{%
+\TE at throw\noexpand\dtl at testbibfieldexists{#1}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldexists}[1]{%
+\DTLifbibfieldexists{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLbibfieldiseq}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldiseq{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldiseq}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=0\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldislt}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldislt{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldislt}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=-1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisle}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisle{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisle}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount<1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisgt}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisgt{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisgt}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisge}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisge{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisge}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount>-1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldcontains}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldcontains{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldcontains}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+  =\csname @dtl at key@#1\endcsname
+\expandafter\dtl at testifsubstring\expandafter{\@dtl at tmp}{#2}%
+}{\@dtl at conditionfalse}}
+\newenvironment{DTLthebibliography}[2][\boolean{true}]{%
+\@dtl at tmpcount=0\relax
+\@sDTLforeach[#1]{#2}{}{\advance\@dtl at tmpcount by 1\relax}%
+\begin{thebibliography}{\number\@dtl at tmpcount}
+}{\end{thebibliography}}
+\newcommand*{\DTLmonthname}[1]{%
+\dtl at monthname{#1}}
+\newcommand*{\dtl at monthname}[1]{%
+\ifcase#1%
+\or January%
+\or February%
+\or March%
+\or April%
+\or May%
+\or June%
+\or July%
+\or August%
+\or September%
+\or October%
+\or November%
+\or December%
+\fi}
+\newcommand*{\dtl at abbrvmonthname}[1]{%
+\ifcase#1%
+\or Jan.%
+\or Feb.%
+\or Mar.%
+\or Apr.%
+\or May%
+\or June%
+\or July%
+\or Aug.%
+\or Sept.%
+\or Oct.%
+\or Nov.%
+\or Dec.%
+\fi}
+\newcommand*{\DTLbibitem}{\bibitem{\DBIBcitekey}}
+\newcommand*{\DTLmbibitem}[1]{\bibitem{#1@\DBIBcitekey}}
+\newcommand*{\DTLcustombibitem}[3]{%
+  #1%
+  \if at filesw
+    \immediate\write\@auxout{\string\bibcite{#3}{#2}}%
+  \fi
+  \ignorespaces
+}
+\newcommand*{\DTLformatauthor}[4]{%
+\DTLformatforenames{#4}
+\DTLformatvon{#1}%
+\DTLformatsurname{#2}%
+\DTLformatjr{#3}}
+\newcommand*{\DTLformateditor}[4]{%
+\DTLformatforenames{#4}
+\DTLformatvon{#1}%
+\DTLformatsurname{#2}%
+\DTLformatjr{#3}}
+\newcommand*{\DTLformatedition}[1]{#1 \editionname}
+\newcommand{\DTLformatarticle}{}
+\newcommand{\DTLformatbook}{}
+\newcommand{\DTLformatbooklet}{}
+\newcommand{\DTLformatinbook}{}
+\newcommand{\DTLformatincollection}{}
+\newcommand{\DTLformatinproceedings}{}
+\newcommand{\DTLformatmanual}{}
+\newcommand{\DTLformatmastersthesis}{}
+\newcommand{\DTLformatmisc}{}
+\newcommand{\DTLformatphdthesis}{}
+\newcommand{\DTLformatproceedings}{}
+\newcommand{\DTLformattechreport}{}
+\newcommand{\DTLformatunpublished}{}
+\newcommand*{\DTLacmcs}{ACM Computing Surveys}
+\newcommand*{\DTLacta}{Acta Informatica}
+\newcommand*{\DTLcacm}{Communications of the ACM}
+\newcommand*{\DTLibmjrd}{IBM Journal of Research and Development}
+\newcommand*{\DTLibmsj}{IBM Systems Journal}
+\newcommand*{\DTLieeese}{IEEE Transactions on Software Engineering}
+\newcommand*{\DTLieeetc}{IEEE Transactions on Computers}
+\newcommand*{\DTLieeetcad}{IEEE Transactions on Computer-Aided Design
+of Integrated Circuits}
+\newcommand*{\DTLipl}{Information Processing Letters}
+\newcommand*{\DTLjacm}{Journal of the ACM}
+\newcommand*{\DTLjcss}{Journal of Computer and System Sciences}
+\newcommand*{\DTLscp}{Science of Computer Programming}
+\newcommand*{\DTLsicomp}{SIAM Journal on Computing}
+\newcommand*{\DTLtocs}{ACM Transactions on Computer Systems}
+\newcommand*{\DTLtods}{ACM Transactions on Database Systems}
+\newcommand*{\DTLtog}{ACM Transactions on Graphics}
+\newcommand*{\DTLtoms}{ACM Transactions on Mathematical Software}
+\newcommand*{\DTLtoois}{ACM Transactions on Office Information
+Systems}
+\newcommand*{\DTLtoplas}{ACM Transactions on Programming Languages
+and Systems}
+\newcommand*{\DTLtcs}{Theoretical Computer Science}
+\newcommand{\dtlbst at plain}{%
+  \renewenvironment{DTLthebibliography}[2][\boolean{true}]{%
+  \@dtl at tmpcount=0\relax
+  \@sDTLforeach[##1]{##2}{}{\advance\@dtl at tmpcount by 1\relax}%
+  \begin{thebibliography}{\number\@dtl at tmpcount}%
+  }{\end{thebibliography}}%
+  \renewcommand*{\DTLbibitem}{\bibitem{\DBIBcitekey}}%
+  \renewcommand*{\DTLmbibitem}[1]{\bibitem{##1@\DBIBcitekey}}%
+  \renewcommand*{\DTLformatauthor}[4]{%
+  \DTLformatforenames{##4}
+  \DTLformatvon{##1}%
+  \DTLformatsurname{##2}%
+  \DTLformatjr{##3}}
+  \renewcommand*{\DTLformateditor}[4]{%
+  \DTLformatforenames{##4}
+  \DTLformatvon{##1}%
+  \DTLformatsurname{##2}%
+  \DTLformatjr{##3}}
+  \renewcommand*{\DTLformatedition}[1]{##1 \editionname}%
+  \let\DTLmonthname\dtl at monthname
+  \renewcommand*{\DTLacmcs}{ACM Computing Surveys}
+  \renewcommand*{\DTLacta}{Acta Informatica}
+  \renewcommand*{\DTLcacm}{Communications of the ACM}
+  \renewcommand*{\DTLibmjrd}{IBM Journal of Research and Development}
+  \renewcommand*{\DTLibmsj}{IBM Systems Journal}
+  \renewcommand*{\DTLieeese}{IEEE Transactions on Software Engineering}
+  \renewcommand*{\DTLieeetc}{IEEE Transactions on Computers}
+  \renewcommand*{\DTLieeetcad}{IEEE Transactions on Computer-Aided Design
+of Integrated Circuits}
+  \renewcommand*{\DTLipl}{Information Processing Letters}
+  \renewcommand*{\DTLjacm}{Journal of the ACM}
+  \renewcommand*{\DTLjcss}{Journal of Computer and System Sciences}
+  \renewcommand*{\DTLscp}{Science of Computer Programming}
+  \renewcommand*{\DTLsicomp}{SIAM Journal on Computing}
+  \renewcommand*{\DTLtocs}{ACM Transactions on Computer Systems}
+  \renewcommand*{\DTLtods}{ACM Transactions on Database Systems}
+  \renewcommand*{\DTLtog}{ACM Transactions on Graphics}
+  \renewcommand*{\DTLtoms}{ACM Transactions on Mathematical Software}
+  \renewcommand*{\DTLtoois}{ACM Transactions on Office Information
+Systems}
+  \renewcommand*{\DTLtoplas}{ACM Transactions on Programming Languages
+and Systems}
+  \renewcommand*{\DTLtcs}{Theoretical Computer Science}
+  \renewcommand*{\DTLformatarticle}{%
+    \DTLformatauthorlist
+    \DTLifbibfieldexists{Author}{\DTLaddperiod}{}%
+    \DTLifbibfieldexists{Title}{%
+    \DTLstartsentencespace\DTLbibfield{Title}%
+    \DTLcheckbibfieldendsperiod{Title}%
+    \DTLaddperiod}{}%
+    \DTLifbibfieldexists{CrossRef}{%
+    \DTLformatarticlecrossref
+    \DTLifbibfieldexists{Pages}{\DTLaddcomma}{}%
+    \DTLformatpages
+    \DTLaddperiod
+    }{% no cross ref field
+    \DTLifbibfieldexists{Journal}{\DTLstartsentencespace
+    {\em\DTLbibfield{Journal}}%
+    \DTLcheckbibfieldendsperiod{Journal}%
+    \DTLifanybibfieldexists{Number,Volume,Pages,Month,Year}{%
+    \DTLaddcomma}{\DTLaddperiod}}{}%
+    \DTLformatvolnumpages
+    \DTLifanybibfieldexists{Volume,Number,Pages}{%
+    \DTLifanybibfieldexists{Year,Month}{\DTLaddcomma}{%
+    \DTLaddperiod}%
+    \DTLmidsentencefalse}{}%
+    \DTLformatdate
+    \DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+    }%
+    \DTLifbibfieldexists{Note}{\DTLstartsentencespace\DTLbibfield{Note}%
+    \DTLcheckbibfieldendsperiod{Note}%
+    \DTLaddperiod}{}%
+  }
+\renewcommand*{\DTLformatbook}{%
+  \DTLifbibfieldexists{Author}%
+  {%
+    \DTLformatauthorlist\DTLaddperiod
+  }%
+  {%
+    \DTLformateditorlist
+    \DTLifbibfieldexists{Editor}%
+    {%
+      \DTLaddperiod
+    }%
+    {}%
+  }%
+  \DTLifbibfieldexists{Title}%
+  {%
+    \DTLstartsentencespace
+    \DTLformatbooktitle{\DTLbibfield{Title}}%
+    \DTLcheckbibfieldendsperiod{Title}%
+  }%
+  {}%
+  \DTLifbibfieldexists{CrossRef}%
+  {%
+    \DTLifbibfieldexists{Title}{\DTLaddperiod}{}%
+    \DTLformatbookcrossref
+    \DTLifanybibfieldexists{Edition,Month,Year}%
+    {\DTLaddcomma}%
+    {\DTLaddperiod}%
+  }%
+  {%
+    \DTLifbibfieldexists{Title}%
+    {%
+      \DTLifbibfieldexists{Volume}{\DTLaddcomma}{\DTLaddperiod}%
+    }%
+    {}%
+    \DTLformatbvolume
+    \DTLformatnumberseries
+    \DTLifanybibfieldexists{Number,Series,Volume}{\DTLaddperiod}{}%
+    \DTLifbibfieldexists{Publisher}%
+    {%
+      \DTLstartsentencespace
+      \DTLbibfield{Publisher}%
+      \DTLcheckbibfieldendsperiod{Publisher}%
+      \DTLifbibfieldexists{Address}%
+      {\DTLaddcomma}%
+      {%
+        \DTLifanybibfieldexists{Month,Year}%
+        {\DTLaddcomma}%
+        {\DTLaddperiod}%
+      }%
+    }%
+    {}%
+    \DTLifbibfieldexists{Address}%
+    {%
+      \DTLstartsentencespace
+      \DTLbibfield{Address}%
+      \DTLcheckbibfieldendsperiod{Address}%
+      \DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+    }%
+    {}%
+  }%
+  \DTLifbibfieldexists{Edition}%
+  {%
+    \protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+    \ifDTLmidsentence
+     \@dtl at tmp
+    \else
+     \DTLstartsentencespace\expandafter\MakeUppercase\@dtl at tmp
+    \fi
+    \expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+    \DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+  }%
+  {}%
+  \DTLformatdate
+  \DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+  \DTLifbibfieldexists{Note}%
+  {%
+    \DTLstartsentencespace
+    \DTLbibfield{Note}%
+    \DTLcheckbibfieldendsperiod{Note}%
+    \DTLaddperiod
+  }%
+  {}%
+}%
+\renewcommand*{\DTLformatbooklet}{%
+\DTLifbibfieldexists{Author}{%
+\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{HowPublished}{%
+\DTLstartsentencespace\DTLbibfield{HowPublished}%
+\DTLcheckbibfieldendsperiod{HowPublished}%
+\DTLifanybibfieldexists{Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{\DTLstartsentencespace\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatinbook}{%
+\DTLifbibfieldexists{Author}{%
+\DTLformatauthorlist\DTLaddperiod}{%
+\DTLifbibfieldexists{Editor}{\DTLformateditorlist\DTLaddperiod}{}}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLifbibfieldexists{Title}{%
+\DTLifbibfieldexists{Chapter}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLformatbookcrossref
+}{% no cross ref
+\DTLifbibfieldexists{Title}{%
+\DTLifanybibfieldexists{Chapter,Volume}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifanybibfieldexists{Volume,Series}{%
+\DTLifanybibfieldexists{Chapter,Pages}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifbibfieldexists{Address}{\DTLaddcomma}{}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}}{}%
+}%
+\DTLifanybibfieldexists{Edition,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatincollection}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLformatincollproccrossref
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddcomma}{}%
+\DTLformatchapterpages\DTLaddperiod
+}{% no cross ref entry
+\DTLformatinedbooktitle
+\DTLifbibfieldexists{BookTitle}{%
+\DTLifanybibfieldexists{Volume,Series,Chapter,Pages,Number}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Series,Chapter,Pages}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifanybibfieldexists{Number,Series}{%
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatinproceedings}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLformatincollproccrossref
+\DTLifbibfieldexists{Pages}{\DTLaddcomma}{%
+\DTLaddperiod}%
+\DTLformatpages
+\DTLifbibfieldexists{Pages}{\DTLaddperiod}{}%
+}{% no cross ref
+\DTLformatinedbooktitle
+\DTLifbibfieldexists{BookTitle}{%
+\DTLifanybibfieldexists{Volume,Series,Pages,Number,Address,%
+Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Series,Pages,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifanybibfieldexists{Number,Series}{%
+\DTLifanybibfieldexists{Pages,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatpages
+\DTLifbibfieldexists{Pages}{%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Publisher}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLaddperiod}{}%
+}{%
+\DTLifanybibfieldexists{Publisher,Organization}{%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Publisher,Month,Year}{%
+\DTLaddcomma}{}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmanual}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist
+\DTLaddperiod}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Address}{\DTLaddcomma \DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+}{}%
+\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifbibfieldexists{Author}{%
+\DTLifanybibfieldexists{Organization,Address}{%
+\DTLaddperiod}{\DTLaddcomma}}{%
+\DTLifanybibfieldexists{Organization,Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}}{}%
+\DTLifbibfieldexists{Author}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+}{%
+\DTLifbibfieldexists{Organization}{}{%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}}%
+}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmastersthesis}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifanybibfieldexists{School,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{School}{%
+\DTLstartsentencespace
+\DTLbibfield{School}%
+\DTLcheckbibfieldendsperiod{School}%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmisc}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifbibfieldexists{HowPublished}{\DTLaddperiod}{%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}%
+}%
+\DTLmidsentencefalse}{}%
+\DTLifbibfieldexists{HowPublished}{%
+\DTLstartsentencespace
+\DTLbibfield{HowPublished}%
+\DTLcheckbibfieldendsperiod{HowPublished}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatphdthesis}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifanybibfieldexists{School,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{School}{%
+\DTLstartsentencespace
+\DTLbibfield{School}%
+\DTLcheckbibfieldendsperiod{School}%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatproceedings}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLformateditorlist\DTLaddperiod}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLaddperiod}{}}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifanybibfieldexists{Volume,Number,Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifbibfieldexists{Number}{%
+\DTLifanybibfieldexists{Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Editor}{\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLaddcomma}{\DTLaddperiod}}{}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLaddperiod
+}{}%
+}{% no address
+\DTLifbibfieldexists{Editor}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Publisher,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformattechreport}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifbibfieldexists{Number}{~}{}}{}%
+\DTLifbibfieldexists{Number}{%
+\DTLstartsentencespace
+\DTLbibfield{Number}%
+\DTLcheckbibfieldendsperiod{Number}%
+}{}%
+\DTLifanybibfieldexists{Type,Number}{%
+\DTLifanybibfieldexists{Institution,Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Institution}{%
+\DTLstartsentencespace
+\DTLbibfield{Institution}%
+\DTLcheckbibfieldendsperiod{Institution}%
+\DTLifanybibfieldexists{Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatunpublished}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+}
+\newcommand*{\DTLformatbooktitle}[1]{\emph{#1}}
+\newcommand{\dtlbst at abbrv}{%
+\dtlbst at plain
+\renewcommand*{\DTLformatauthor}[4]{%
+\DTLformatabbrvforenames{##4}
+\DTLformatvon{##1}%
+\DTLformatsurname{##2}%
+\DTLformatjr{##3}}
+\renewcommand*{\DTLformateditor}[4]{%
+\DTLformatabbrvforenames{##4}
+\DTLformatvon{##1}%
+\DTLformatsurname{##2}%
+\DTLformatjr{##3}}
+\let\DTLmonthname\dtl at abbrvmonthname
+\renewcommand*{\DTLacmcs}{ACM Comput.\ Surv.}
+\renewcommand*{\DTLacta}{Acta Inf.}
+\renewcommand*{\DTLcacm}{Commun.\ ACM}
+\renewcommand*{\DTLibmjrd}{IBM J.\ Res.\ Dev.}
+\renewcommand*{\DTLibmsj}{IBM Syst.~J.}
+\renewcommand*{\DTLieeese}{IEEE Trans. Softw.\ Eng.}
+\renewcommand*{\DTLieeetc}{IEEE Trans.\ Comput.}
+\renewcommand*{\DTLieeetcad}{IEEE Trans.\ Comput.-Aided Design
+Integrated Circuits}
+\renewcommand*{\DTLipl}{Inf.\ Process.\ Lett.}
+\renewcommand*{\DTLjacm}{J.~ACM}
+\renewcommand*{\DTLjcss}{J.~Comput.\ Syst.\ Sci.}
+\renewcommand*{\DTLscp}{Sci.\ Comput.\ Programming}
+\renewcommand*{\DTLsicomp}{SIAM J.~Comput.}
+\renewcommand*{\DTLtocs}{ACM Trans.\ Comput.\ Syst.}
+\renewcommand*{\DTLtods}{ACM Trans.\ Database Syst.}
+\renewcommand*{\DTLtog}{ACM Trans.\ Gr.}
+\renewcommand*{\DTLtoms}{ACM Trans.\ Math. Softw.}
+\renewcommand*{\DTLtoois}{ACM Trans. Office Inf.\ Syst.}
+\renewcommand*{\DTLtoplas}{ACM Trans.\ Prog. Lang.\ Syst.}
+\renewcommand*{\DTLtcs}{Theoretical Comput.\ Sci.}
+}
+\newcommand{\dtlbst at alpha}{%
+\dtlbst at plain
+\renewenvironment{DTLthebibliography}[2][\boolean{true}]{%
+\dtl at createalphabiblabels{##1}{##2}%
+\begin{thebibliography}{\@dtl at widestlabel}%
+}{\end{thebibliography}}%
+\renewcommand*{\DTLbibitem}{%
+\expandafter\bibitem\expandafter
+ [\csname dtl at biblabel@\DBIBcitekey\endcsname]{\DBIBcitekey}}%
+\renewcommand*{\DTLmbibitem}[1]{%
+\expandafter\bibitem\expandafter
+ [\csname dtl at biblabel@\DBIBcitekey\endcsname]{##1@\DBIBcitekey}}%
+}
+\newcommand*{\dtl at createalphabiblabels}[2]{%
+\dtl at message{Creating bib labels}%
+\begingroup
+\gdef\@dtl at widestlabel{}%
+\dtl at widest=0pt\relax
+\DTLforeachbibentry[#1]{#2}{%
+\dtl at message{\DBIBcitekey}%
+\DTLifbibfieldexists{Author}{%
+  \dtl at listgetalphalabel{\@dtl at thislabel}{\@dtl at key@Author}%
+}{%
+\DTLifbibfieldexists{Editor}{%
+    \dtl at listgetalphalabel{\@dtl at thislabel}{\@dtl at key@Editor}%
+ }{%
+   \DTLifbibfieldexists{Key}{%
+     \expandafter\dtl at get@firstthree\expandafter
+       {\@dtl at key@Key}{\@dtl at thislabel}%
+   }{%
+     \DTLifbibfieldexists{Organization}{%
+       \expandafter\dtl at get@firstthree\expandafter
+         {\@dtl at key@Organization}{\@dtl at thislabel}%
+   }{%
+       \expandafter\dtl at get@firstthree\expandafter
+         {\DBIBentrytype}{\@dtl at thislabel}%
+   }%
+   }}}%
+\DTLifbibfieldexists{Year}{}{\DTLifbibfieldexists{CrossRef}{%
+\DTLgetvalueforkey{\@dtl at key@Year}{Year}{#2}{CiteKey}{%
+\@dtl at key@CrossRef}}{}}%
+\DTLifbibfieldexists{Year}{%
+\expandafter\dtl at get@yearsuffix\expandafter{\@dtl at key@Year}%
+\expandafter\toks@\expandafter{\@dtl at thislabel}%
+\expandafter\@dtl at toks\expandafter{\@dtl at year}%
+\edef\@dtl at thislabel{\the\toks@\the\@dtl at toks}%
+}{}%
+\let\@dtl at s@thislabel=\@dtl at thislabel
+\@onelevel at sanitize\@dtl at s@thislabel
+\@ifundefined{c at biblabel@\@dtl at s@thislabel}{%
+\newcounter{biblabel@\@dtl at s@thislabel}%
+\setcounter{biblabel@\@dtl at s@thislabel}{1}%
+\expandafter\edef\csname @dtl at bibfirst@\@dtl at s@thislabel\endcsname{%
+\DBIBcitekey}%
+\expandafter\global
+\expandafter\let\csname dtl at biblabel@\DBIBcitekey\endcsname=
+  \@dtl at thislabel
+}{%
+\expandafter\ifnum\csname c at biblabel@\@dtl at s@thislabel\endcsname=1\relax
+ \expandafter\let\expandafter\@dtl at tmp
+   \csname @dtl at bibfirst@\@dtl at s@thislabel\endcsname
+ \expandafter\protected at xdef\csname dtl at biblabel@\@dtl at tmp\endcsname{%
+   \@dtl at thislabel a}%
+\fi
+\stepcounter{biblabel@\@dtl at s@thislabel}%
+\expandafter\protected at xdef\csname dtl at biblabel@\DBIBcitekey\endcsname{%
+   \@dtl at thislabel\alph{biblabel@\@dtl at s@thislabel}}%
+}%
+\settowidth{\dtl at tmplength}{%
+ \csname dtl at biblabel@\DBIBcitekey\endcsname}%
+\ifdim\dtl at tmplength>\dtl at widest
+ \dtl at widest=\dtl at tmplength
+ \expandafter\global\expandafter\let\expandafter\@dtl at widestlabel
+  \expandafter=\csname dtl at biblabel@\DBIBcitekey\endcsname
+\fi
+}%
+\endgroup
+}
+\newcommand*{\dtl at listgetalphalabel}[2]{%
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=#2\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\ifnum\@dtl at authorcount=1\relax
+ \expandafter\dtl at getsinglealphalabel#2{#1}\relax
+\else
+  {%
+  \xdef#1{}%
+  \@dtl at tmpcount=0\relax
+   \def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+   \def\DTLafterinitialbeforehyphen{}\def\DTLinitialhyphen{}%
+   \@for\@dtl at author:=#2\do{%
+     \expandafter\dtl at getauthorinitial\@dtl at author
+     \expandafter\toks@\expandafter{\@dtl at tmp}%
+     \expandafter\@dtl at toks\expandafter{#1}%
+     \xdef#1{\the\@dtl at toks\the\toks@}%
+     \advance\@dtl at tmpcount by 1\relax
+     \ifnum\@dtl at tmpcount>2\relax\@endfortrue\fi
+  }}%
+\fi
+}
+\newcommand*{\dtl at getauthorinitial}[4]{%
+\def\@dtl at vonpart{#1}%
+\ifx\@dtl at vonpart\@empty
+ \DTLstoreinitials{#2}{\@dtl at tmp}%
+\else
+ \DTLstoreinitials{#1 #2}{\@dtl at tmp}%
+\fi}
+\newcommand*{\dtl at getsinglealphalabel}[5]{%
+\def\@dtl at vonpart{#1}%
+\ifx\@dtl at vonpart\@empty
+ \DTLifSubString{#2}{-}{%
+   {\def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+    \def\DTLafterinitialbeforehyphen{}%
+    \def\DTLinitialhyphen{}%
+    \DTLstoreinitials{#2}{\@dtl at tmp}\global\let#5=\@dtl at tmp}%
+   }{%
+   \dtl at getfirstthree{#5}#2{}{}{}{}\@nil
+ }
+\else
+ {\def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+  \def\DTLafterinitialbeforehyphen{}%
+  \def\DTLinitialhyphen{}%
+  \DTLstoreinitials{#1 #2}{\@dtl at tmp}\global\let#5=\@dtl at tmp}%
+\fi
+}
+\def\dtl at getfirstthree#1#2#3#4#5\@nil{%
+  \def#1{#2#3#4}%
+}
+\newcommand*{\dtl at get@firstthree}[2]{%
+\dtl at getfirstthree#2#1{}{}{}{}{}\@nil}
+\newcommand*{\dtl at get@yearsuffix}[1]{%
+\dtl at getyearsuffix#1\@nil\relax\relax}
+
+\def\dtl at getyearsuffix#1#2#3{%
+\def\@dtl at argi{#1}\def\@dtl at argii{#2}%
+\def\@dtl at argiii{#3}%
+\ifx\@dtl at argi\@nnil
+ \def\@dtl at year{}%
+ \let\@dtl at donext=\relax
+\else
+  \ifx\@dtl at argii\@nnil
+    \dtl at ifsingle{#1}{%
+      \def\@dtl at year{#1}%
+      \let\@dtl at donext=\relax
+    }{%
+      \def\@dtl at donext{\dtl at getyearsuffix#1#2#3}%
+    }%
+  \else
+    \ifx\@dtl at argiii\@nnil
+      \dtl at ifsingle{#1}{%
+        \dtl at ifsingle{#2}{%
+          \def\@dtl at year{#1#2}%
+          \let\@dtl at donext=\relax
+        }{%
+          \def\@dtl at donext{\dtl at getyearsuffix#2#3}%
+        }%
+      }{%
+        \def\@dtl at donext{\dtl at getyearsuffix#2#3}%
+      }%
+    \else
+      \def\@dtl at donext{\dtl at getyearsuffix{#2}{#3}}%
+    \fi
+  \fi
+\fi
+\@dtl at donext
+}
+\newcommand*{\DTLbibliographystyle}[1]{%
+\@ifundefined{dtlbst@#1}{\PackageError{databib}{Unknown
+bibliography style `#1'}{}}{\csname dtlbst@#1\endcsname}}
+\DTLbibliographystyle{\dtlbib at style}
+\newcommand*{\DTLmultibibs}[1]{%
+\@for\@dtl at af:=#1\do{%
+\@ifundefined{dtl at aux@\@dtl at af}{%
+\expandafter\newwrite\csname dtl at aux@\@dtl at af\endcsname
+\expandafter\immediate
+\expandafter\openout\csname dtl at aux@\@dtl at af\endcsname=\@dtl at af.aux
+\expandafter\def\csname b@\@dtl at af @*\endcsname{}%
+}{%
+\PackageError{databib}{Can't create auxiliary file `\@dtl at af.aux',
+\expandafter\string\csname dtl at aux@\@dtl at af\endcsname\space
+already exists}{}}}}
+\@onlypreamble{\DTLmultibibs}
+\newcommand*{\DTLcite}{\@ifnextchar[{\@tempswatrue \dtl at citex
+}{\@tempswafalse \dtl at citex[]}}
+\def\dtl at citex[#1]#2#3{%
+\leavevmode\let\@citea\@empty
+\@cite{\@for\@citeb:=#3\do{\@citea
+  \def\@citea{,\penalty \@m \ }%
+  \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+  \if at filesw
+    \@ifundefined{dtl at aux@#2}{%
+      \PackageError{databib}{multibib `#2' not defined}{%
+      You need to define `#2' in \string\DTLmutlibibs}%
+    }{%
+      \expandafter\immediate
+      \expandafter\write\csname dtl at aux@#2\endcsname{%
+        \string\citation{\@citeb}}%
+    }%
+  \fi
+  \@ifundefined{b@#2@\@citeb}{%
+    \hbox{\reset at font\bfseries ?}%
+    \G at refundefinedtrue
+    \@latex at warning{Citation `\@citeb ' on page \thepage \space
+      undefined}%
+  }{%
+    \@cite at ofmt{\csname b@#2@\@citeb \endcsname }%
+  }%
+}}{#1}%
+}
+\newcommand*{\DTLnocite}[2]{%
+\@ifundefined{dtl at aux@#1}{%
+  \PackageError{databib}{multibib `#1' not defined}{%
+  You need to define `#1' in \string\DTLmutlibibs}%
+}{%
+  \@bsphack
+  \ifx\@onlypreamble\document
+    \@for\@citeb:=#2\do{%
+      \edef\@citeb{\expandafter\@firstofone\@citeb}%
+      \if at filesw
+        \expandafter\immediate
+        \expandafter\write\csname dtl at aux@#1\endcsname{%
+          \string\citation{\@citeb}}%
+      \fi
+      \@ifundefined{b@#1@\@citeb}{%
+        \G at refundefinedtrue
+        \@latex at warning{Citation `\@citeb ' undefined}}{}%
+    }%
+  \else
+    \@latex at error{Cannot be used in preamble}\@eha
+  \fi
+  \@esphack
+}%
+}
+\newcommand*{\DTLloadmbbl}[3]{%
+\@ifundefined{dtl at aux@#1}{%
+  \PackageError{databib}{multibib `#1' not defined}{%
+  You need to define `#1' in \string\DTLmutlibibs}%
+}{%
+  \if at filesw
+    \expandafter\immediate\expandafter
+      \write\csname dtl at aux@#1\endcsname{\string\bibstyle{databib}}%
+    \expandafter\immediate\expandafter
+      \write\csname dtl at aux@#1\endcsname{\string\bibdata{#3}}%
+  \fi
+  \DTLnewdb{#2}%
+  \edef\DTLBIBdbname{#2}%
+  \@input@{#1.bbl}%
+}%
+}
+\newcommand*{\DTLmbibliography}[3][\boolean{true}]{%
+\begin{DTLthebibliography}[#1]{#3}%
+\DTLforeachbibentry[#1]{#3}{%
+\DTLmbibitem{#2} \DTLformatbibentry \DTLendbibitem
+}%
+\end{DTLthebibliography}%
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</databib-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datagidx-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datagidx-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datagidx}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{etoolbox}
+\RequirePackage{xkeyval}
+\RequirePackage{mfirstuc}
+\RequirePackage{xfor}
+\RequirePackage{multicol}
+\RequirePackage{textcase}
+\RequirePackage{afterpage}
+\newcommand*{\datagidx at columns}{2}
+\newcommand*{\DTLgidxSetColumns}[1]{%
+  \DTLifint{#1}%
+  {%
+    \def\datagidx at columns{#1}%
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Number of columns must be an integer}%
+    {%
+      You have requested `#1' columns, which can't be parsed as a
+      number%
+    }%
+  }%
+}
+\newcounter{DTLgidxChildCount}
+\def\theHDTLgidxChildCount{\Label.\arabic{DTLgidxChildCount}}
+\newcommand*{\DTLgidxChildCountLabel}{\theDTLgidxChildCount) }
+\newcommand*{\DTLgidxChildStyle}[1]{#1}
+\newcommand*{\datagidx at setchildstyle}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxChildStyle}[1]{##1}%
+  \or
+    \renewcommand*{\DTLgidxChildStyle}[1]{%
+      \DTLgidxChildCountLabel
+    }%
+  \fi
+}
+\newcommand{\datagidx at foreachchild}{%
+  \datagidx at sort@foreachchild
+}
+\newcommand*{\datagidx at setchildsort}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\datagidx at foreachchild}{%
+       \datagidx at sort@foreachchild
+    }%
+  \or
+    \renewcommand*{\datagidx at foreachchild}{%
+       \datagidx at unsort@foreachchild
+    }%
+  \fi
+}
+\newcommand*{\DTLgidxPostName}{ }
+\newcommand*{\DTLgidxPostChildName}{\DTLgidxPostName}
+\newcommand*{\DTLgidxNameCase}[1]{#1}
+\newcommand*{\datagidx at setnamecase}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxNameCase}[1]{##1}%
+  \or
+    \let\DTLgidxNameCase\MakeTextUppercase
+  \or
+    \let\DTLgidxNameCase\MakeTextLowercase
+  \or
+    \let\DTLgidxNameCase\xmakefirstuc
+  \or
+    \let\DTLgidxNameCase\xcapitalisewords
+  \fi
+}
+\newcommand*{\DTLgidxNameFont}[1]{\textnormal{#1}}
+\newcommand*{\DTLgidxPostDescription}{}
+\newcommand*{\datagidx at setpostdesc}[1]{%
+   \ifcase#1\relax
+     \renewcommand*{\DTLgidxPostDescription}{}%
+   \or
+     \renewcommand*{\DTLgidxPostDescription}{.}%
+   \fi
+ }
+\newcommand*{\DTLgidxPreLocation}{\enspace}
+\newcommand*{\datagidx at setprelocation}[1]{%
+   \ifcase#1\relax
+     \renewcommand*{\DTLgidxPreLocation}{}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\enspace}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{ }%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\dotfill}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\hfill}%
+   \fi
+ }
+\newcommand*{\DTLgidxLocation}{\dtldolocationlist}
+\newcommand*{\datagidx at setlocation}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxLocation}{}%
+  \or
+    \renewcommand*{\DTLgidxLocation}{\dtldolocationlist}%
+  \or
+    \renewcommand*{\DTLgidxLocation}{\dtldofirstlocation}%
+  \fi
+}
+\newcommand*{\DTLgidxSee}{%
+  \DTLifnull{\See}%
+  {}%
+  {%
+    \DTLgidxPreLocation
+    \DTLgidxFormatSee{\seename}{\See}%
+  }%
+}
+\newcommand*{\DTLgidxSeeAlso}{%
+  \DTLifnull{\SeeAlso}%
+  {}%
+  {%
+     \DTLgidxFormatSeeAlso{\seealsoname}{\SeeAlso}%
+  }%
+}
+\newcommand*{\DTLgidxChildrenSeeAlso}{%
+  \DTLgidxChildren
+  \DTLgidxSeeAlso
+}
+\newcommand*{\datagidx at setsee}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}%
+      {%
+        , \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \space(\DTLgidxFormatSee{\seename}{\See})%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}%
+      {%
+        . \DTLgidxFormatSee{\xmakefirstuc{\seename}}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \space\DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        ; \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \DTLgidxPreLocation\DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLgidxSymDescSep}{\space}
+\newlength\datagidxsymbolwidth
+\newlength\datagidxlocationwidth
+\newcommand{\DTLgidxFormatDesc}[1]{#1}
+\newcommand*{\DTLgidxSymbolDescription}{%
+  \DTLgidxSymbolDescLeft
+  \DTLgidxSymbolDescRight
+}
+\newcommand*{\DTLgidxSymbolDescLeft}{%
+  \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}%
+}
+\newcommand*{\DTLgidxSymbolDescRight}{%
+  \ifdefempty{\Description}{}%
+  {%
+    \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+  }%
+}
+\newif\if at datagidxsymbolleft
+\@datagidxsymbollefttrue
+\newcommand*{\datagidx at formatsymdesc}[1]{%
+   \ifcase#1\relax
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{\Symbol}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{}%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+           \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{}%
+      \@datagidxsymbolleftfalse
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+        }%
+      }%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription\DTLgidxSymDescSep
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Symbol}{}{(\Symbol)}%
+      }%
+      \@datagidxsymbolleftfalse
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{\Symbol\DTLgidxSymDescSep}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription
+        }%
+      }%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription\DTLgidxSymDescSep
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Symbol}{}{\Symbol}%
+      }%
+      \@datagidxsymbolleftfalse
+   \fi
+ }
+\newcommand*{\DTLgidxSetCompositor}[1]{%
+ \undef\datagidx at docomplist
+ \DeclareListParser{\datagidx at docomplist}{#1}%
+ \def\datagidx at compositor{#1}%
+}
+\DTLgidxSetCompositor{.}
+\newcommand*{\datagidx at do@sort}{\datagidx at sort}
+\newcommand*{\datagidx at optimize@sort}{%
+  \ifdef\datagidx at do@optimize at sort
+  {%
+    \datagidx at sort
+  }%
+  {%
+    \protected at write\@auxout{}{%
+      \string\gdef\string\datagidx at do@optimize at sort{}%
+    }%
+    \global\let\@datagidx at dorerun@warn at sort\@data at rerun@warn at sort
+  }%
+}
+\newif\if at datagidx@warn
+\@datagidx at warntrue
+\newcommand*\@datagidx at dorerun@warn{}
+\AtEndDocument{\if at datagidx@warn\@datagidx at dorerun@warn\fi}
+\newcommand*\@datagidx at dorerun@warn at sort{}
+\AtEndDocument{\if at datagidx@warn\@datagidx at dorerun@warn at sort\fi}
+\newcommand*\@data at rerun@warn at sort{%
+  \PackageWarningNoLine{datagidx}{Rerun required to sort the
+   index/glossary databases}%
+}
+\newcommand*\@data at rerun@warn{%
+  \PackageWarningNoLine{datagidx}{Rerun required to ensure the
+   index/glossary location lists are up-to-date}%
+}
+\newcommand*{\datagidx at do@highopt at optimize}{%
+  \renewcommand*{\datagidx at do@sort}{%
+    \ifcsdef{datagidx at do@highopt at sort@\DTLgidxCurrentdb}%
+    {%
+      \csuse{datagidx at do@highopt at sort@\DTLgidxCurrentdb}%
+    }%
+    {%
+    }%
+    \bgroup
+    \def\dtl at saverawdbhook{%
+      \let\db at col@id at w\@datagidx at db@col at id@w
+      \def\DTLgidxName{\string\DTLgidxName\space}%
+      \def\DTLgidxMac{\string\DTLgidxMac\space}%
+      \def\DTLgidxRank{\string\DTLgidxRank\space}%
+      \def\DTLgidxParen{\string\DTLgidxParen\space}%
+      \def\DTLgidxParticle{\string\DTLgidxParticle\space}%
+      \def\DTLgidxOffice{\string\DTLgidxOffice\space}%
+      \def\DTLgidxSaint{\string\DTLgidxSaint\space}%
+      \def\DTLgidxPlace{\string\DTLgidxPlace\space}%
+      \def\DTLgidxIgnore{\string\DTLgidxIgnore\space}%
+      \def\DTLgidxNameNum{\string\DTLgidxNameNum\space}%
+      \def\DTLgidxSubject{\string\DTLgidxSubject\space}%
+    }%
+    \DTLsaverawdb{\DTLgidxCurrentdb}{\datagidxhighoptfilename\DTLgidxCurrentdb}%
+    \egroup
+  }%
+  \def\newgidx{\datagidx at highopt@newgidx}%
+  \def\newterm{\datagidx at highopt@newterm}%
+}
+\def\@datagidx at db@col at id@w#1\db at col@id at end@\db at col@elt at w#2\db at col@elt at end@\db at col@id at w#3\db at col@id at end@{%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at w\space #1%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at end@\space
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@elt at w\space
+   \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Used\endcsname=#1\space
+     0%
+   \else
+     \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Location\endcsname=#1\space
+     \else
+       \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @CurrentLocation\endcsname=#1\space
+       \else
+         \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Sort\endcsname=#1\space
+           \protect#2%
+         \else
+         #2%
+         \fi
+       \fi
+     \fi
+   \fi
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@elt at end@\space
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at w\space #3%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at end@\space
+}
+\newcommand*{\datagidx at do@highopt at update}[1]{}
+\newcommand*{\datagidxhighoptfilename}[1]{\jobname-#1.gidx}
+\define at choicekey{datagidx.sty}{optimize}[\val\nr]%
+ {off,low,high}[high]%
+ {%
+   \ifcase\nr\relax
+    \renewcommand*{\datagidx at do@sort}{\datagidx at sort}
+   \or
+    \renewcommand*{\datagidx at do@sort}{\datagidx at optimize@sort}
+   \or
+    \datagidx at do@highopt at optimize
+   \fi
+ }
+\define at choicekey{datagidx.sty}{nowarn}[\val\nr]{true,false}[true]%
+{%
+  \ifcase\nr\relax
+    \@datagidx at warnfalse
+  \or
+    \@datagidx at warntrue
+  \fi
+}
+\define at choicekey{datatool.sty}{utf8}{true,false}[true]{%
+  \setbool{@dtl at utf8}{#1}%
+}
+\define at key{datagidx.sty}{columns}%
+{%
+  \DTLgidxSetColumns{#1}%
+}
+\define at choicekey{datagidx.sty}{child}[\val\nr]%
+ {named,noname}%
+ {%
+   \datagidx at setchildstyle\nr
+ }
+\define at choicekey{datagidx.sty}{namecase}[\val\nr]%
+ {nochange,uc,lc,firstuc,capitalise}%
+ {%
+   \datagidx at setnamecase\nr
+ }
+\define at key{datagidx.sty}{namefont}%
+{%
+  \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}%
+}
+\define at key{datagidx.sty}{postname}
+{%
+  \renewcommand*{\DTLgidxPostName}{#1}%
+}
+\define at choicekey{datagidx.sty}{postdesc}[\val\nr]%
+ {none,dot}%
+ {%
+   \datagidx at setpostdesc\nr
+ }
+\define at choicekey{datagidx.sty}{prelocation}[\val\nr]%
+ {none,enspace,space,dotfill,hfill}%
+ {%
+   \datagidx at setprelocation\nr
+ }
+\define at choicekey{datagidx.sty}{location}[\val\nr]%
+ {hide,list,first}%
+ {\datagidx at setlocation\nr}
+\define at choicekey{datagidx.sty}{see}[\val\nr]%
+  {comma,brackets,dot,space,nosep,semicolon,location}%
+  {\datagidx at setsee\nr}
+\define at choicekey{datagidx.sty}{symboldesc}[\val\nr]%
+ {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}%
+ {\datagidx at formatsymdesc\nr}
+\define at key{datagidx.sty}{compositor}%
+{%
+  \DTLgidxSetCompositor{#1}%
+}%
+\DeclareOptionX{final}{%
+  \let\datagidxshowifdraft\@gobble
+}
+\let\datagidxshowifdraft\@gobble
+\DeclareOptionX{draft}{%
+  \let\datagidxshowifdraft\@firstofone
+}
+\define at choicekey{datagidx.sty}{verbose}[\val\nr]%
+ {true,false}[true]%
+ {%
+   \csuse{dtlverbose\val}%
+ }
+\ProcessOptionsX
+\DTLnewdb{datagidx}
+\providecommand*{\seename}{see}
+\providecommand*{\seealsoname}{see also}
+\newcommand*{\DTLgidxSeeTagFont}[1]{\emph{#1}}
+\newcommand*{\DTLgidxFormatSee}[2]{%
+  \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}%
+}
+\newcommand*{\DTLgidxFormatSeeAlso}[2]{%
+  \datagidxdoseealso
+  {%
+    \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}%
+  }%
+}
+\newcommand*{\datagidxdoseealso}[1]{%
+  \datagidxseealsostart
+   #1%
+  \datagidxseealsoend
+}
+\newcommand*{\DTLgidxSeeList}[1]{%
+  \def\datagidx at sep{}%
+  \@for\dtl at thislabel:=#1\do
+  {%
+    \ifx\@xfor at nextelement\@nnil
+      \ifdefempty{\datagidx at sep}%
+      {%
+      }%
+      {%
+         \DTLidxSeeLastSep
+      }%
+    \else
+      \datagidx at sep
+      \let\datagidx at sep\DTLidxSeeSep
+    \fi
+    \DTLidxFormatSeeItem{\dtl at thislabel}%
+  }%
+}
+\newcommand*{\DTLidxFormatSeeItem}[1]{%
+  \DTLgidxFetchEntry{\datagidx at value}{#1}{Name}%
+  \datagidxlink{#1}%
+  {%
+    \datagidx at value
+  }%
+}
+\newcommand*{\DTLidxSeeSep}{, }
+\newcommand*{\DTLidxSeeLastSep}{ \& }
+\newcommand*{\DTLgidxDoSeeOrLocation}{%
+  \DTLifnull\See
+  {%
+     \ifdefempty\Location
+     {%
+     }%
+     {%
+       \DTLgidxPreLocation
+       \DTLgidxLocation
+     }%
+  }%
+  {%
+     \DTLgidxSee
+  }%
+}
+\newcommand*{\datagidx at sortchildren}{%
+  \def\datagidx at sortedlist{}%
+  \@for\Label:=\Children\do
+  {%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\DTLgidxCurrentdb}%
+      {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}%
+      {\Label}%
+    }%
+    \do at getrow
+    \ifdefempty\datagidx at sortedlist
+    {%
+      \edef\datagidx at newsortedlist{{\number\dtlrownum}{\Label}}%
+    }%
+    {%
+      \def\datagidx at newsortedlist{}%
+      \@for\@datagidx at thisval:=\datagidx at sortedlist\do
+      {%
+        \edef\datagidx at thisidx{\expandafter\@firstoftwo\@datagidx at thisval}%
+        \ifnum\datagidx at thisidx>\dtlrownum\relax
+          \ifdefempty\datagidx at newsortedlist
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              {\number\dtlrownum}{\Label},\@datagidx at thisval
+            }%
+          }%
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              ,{\number\dtlrownum}{\Label},\@datagidx at thisval
+            }%
+          }%
+          \@endfortrue
+        \else
+          \ifdefempty\datagidx at newsortedlist
+          {%
+            \edef\datagidx at newsortedlist{%
+              \@datagidx at thisval
+            }%
+          }%
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              ,\@datagidx at thisval
+            }%
+          }%
+        \fi
+      }%
+      \if at endfor
+        \ifdefempty\@forremainder
+        {%
+        }%
+        {%
+          \eappto\datagidx at newsortedlist{,\@forremainder}%
+        }%
+      \else
+        \ifdefempty\datagidx at newsortedlist
+        {%
+          \edef\datagidx at newsortedlist{{\number\dtlrownum}{\Label}}%
+        }%
+        {%
+          \eappto\datagidx at newsortedlist{,{\number\dtlrownum}{\Label}}%
+        }%
+      \fi
+    }%
+    \let\datagidx at sortedlist\datagidx at newsortedlist
+    \@endforfalse
+  }%
+}
+\newcommand{\datagidx at sort@foreachchild}[1]{%
+  \datagidx at sortchildren
+  \@for\@datagidx at thisval:=\datagidx at sortedlist\do
+  {%
+    \edef\Label{\expandafter\@secondoftwo\@datagidx at thisval}%
+    #1%
+  }%
+}
+\newcommand{\datagidx at unsort@foreachchild}[1]{%
+  \@for\Label:=\Children\do
+  {%
+    #1%
+  }%
+}
+\newcommand*{\DTLgidxChildren}{%
+  \bgroup
+    \DTLifnull\Children
+    {}%
+    {%
+      \advance\datagidx at level by 1\relax
+      \datagidxchildstart
+      \let\Parent\Label
+      \datagidx at foreachchild
+      {%
+        \edef\do at getrow{%
+          \noexpand\dtlgetrowforvalue
+          {\DTLgidxCurrentdb}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}%
+          {\Label}%
+        }%
+        \do at getrow
+        \dtlgetentryfromcurrentrow
+          {\Location}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{Location}}%
+        \dtlgetentryfromcurrentrow
+          {\See}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{See}}%
+        \dtlgetentryfromcurrentrow
+          {\SeeAlso}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{SeeAlso}}%
+        \DTLifnull\Location
+        {%
+          \DTLifnull\See
+          {%
+            \DTLifnull\SeeAlso
+            {}%
+            {%
+              \datagidx at displaychild
+            }%
+          }%
+          {%
+            \datagidx at displaychild
+          }%
+        }%
+        {%
+           \datagidx at displaychild
+        }%
+      }%
+      \datagidxchildend
+    }%
+  \egroup
+}
+\newcommand*{\datagidxgetchildfields}{%
+  \dtlgetentryfromcurrentrow
+    {\Name}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Name}}%
+  \dtlgetentryfromcurrentrow
+    {\Description}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Description}}%
+  \dtlgetentryfromcurrentrow
+    {\Symbol}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Symbol}}%
+  \dtlgetentryfromcurrentrow
+    {\Long}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Long}}%
+  \dtlgetentryfromcurrentrow
+    {\Short}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Short}}%
+  \dtlgetentryfromcurrentrow
+    {\Text}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Text}}%
+  \dtlgetentryfromcurrentrow
+    {\Plural}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Plural}}%
+  \dtlgetentryfromcurrentrow
+    {\Short}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Used}}%
+  \dtlgetentryfromcurrentrow
+    {\Children}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Child}}%
+}
+\newcommand*{\datagidx at displaychild}{%
+  \datagidxgetchildfields
+  \datagidxchilditem
+}
+\ifdef{\chapter}
+{%
+  \newcommand*{\datagidx at heading}{\chapter*}
+}%
+{%
+  \newcommand*{\datagidx at heading}{\section*}
+}
+\let\DTLgidxNoHeading\@gobble
+\newcommand*{\datagidx at postheading}{}
+\newcommand*{\datagidx at multicols}{multicols}
+\newcommand*{\datagidx at sort}{%
+  \dtlsort{Sort,FirstId}{\DTLgidxCurrentdb}{\dtlwordindexcompare}%
+}
+\providecommand{\@idxitem}{\par\hangindent 40\p@}
+\newcommand*{\datagidxstart}%
+{%
+  \bgroup
+  \setlength{\parindent}{0pt}%
+  \setlength{\parskip}{0pt plus 0.3pt}%
+  \let\item\@idxitem
+}
+\newcommand*{\datagidxend}{\egroup}
+\newcommand*{\@datagidxtarget}[2]{%
+  \ifdef\hypertarget
+  {%
+    \bgroup
+      \let\glsadd\@gobble
+      \settoheight\dimen@{#2}%
+      \raisebox{\dimen@}{\hypertarget{#1}{}}%
+    \egroup
+  }%
+  {%
+  }%
+  #2%
+}
+\newcommand*{\datagidxtarget}{\@datagidxtarget}
+\newcommand*{\@datagidxlink}[2]{%
+  \ifdef\hyperlink
+  {%
+    \hyperlink{#1}{#2}%
+  }%
+  {%
+    #2%
+  }%
+}
+\newcommand*{\datagidxlink}{\@datagidxlink}
+\newcommand*{\DTLgidxEnableHyper}{%
+  \let\datagidxtarget\@datagidxtarget
+  \let\datagidxlink\@datagidxlink
+}
+\newcommand*{\DTLgidxDisableHyper}{%
+  \let\datagidxtarget\@secondoftwo
+  \let\datagidxlink\@secondoftwo
+}
+\newcommand*{\datagidxgroupsep}{}
+\newcommand*{\datagidxgroupheader}{}
+\newcommand*{\datagidxitem}{}%
+\newcommand*{\datagidxchildstart}{}
+\newcommand*{\datagidxchildend}{}
+\newcommand*{\datagidxchilditem}{}%
+\newcommand*{\datagidxseealsostart}{}
+\newcommand*{\datagidxseealsoend}{}
+\newcommand*{\datagidx at doifsymlocwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxsymbolwidth}%
+  \addtolength{\dtl at tmplength}{-\datagidxlocationwidth}%
+  \settowidth{\dimen@}{\DTLgidxPreLocation}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \if at datagidxsymbolleft
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+  \else
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+  \fi
+  \DTLgidxPreLocation
+  \begin{minipage}[t]{\datagidxlocationwidth}%
+    \datagidxlocalign
+    \let\DTLgidxPreLocation\@empty
+    #3%
+  \end{minipage}%
+}
+\newcommand*{\datagidx at doiflocwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxlocationwidth}%
+  \settowidth{\dimen@}{\DTLgidxPreLocation}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \begin{minipage}[t]{\dtl at tmplength}%
+    \DTLgidxSymbolDescription
+  \end{minipage}%
+  \DTLgidxPreLocation
+  \begin{minipage}[t]{\datagidxlocationwidth}%
+    \datagidxlocalign
+    \let\DTLgidxPreLocation\@empty
+    #3%
+  \end{minipage}%
+}
+\newcommand*{\datagidx at doifsymwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxsymbolwidth}%
+  \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \if at datagidxsymbolleft
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+      #3%
+    \end{minipage}%
+  \else
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+      #3%
+    \end{minipage}%
+  \fi
+}
+\newcommand*{\datagidxlocalign}{\raggedleft}
+\newcommand*{\datagidxsymalign}{\centering}
+\newcommand*{\datagidxsetstyle}[1]{%
+  \ifcsdef{datagidx at style@#1}%
+  {%
+    \csuse{datagidx at style@#1}%
+  }%
+  {%
+    \PackageError{datagidx}{Unknown style `#1'}{}%
+  }%
+}
+\newcommand*{\datagidx at style@index}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \raggedright
+    \let\item\@idxitem
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \datagidx at doifsymlocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \datagidx at doiflocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \datagidx at doiflocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \DTLgidxSymbolDescription
+          \DTLgidxDoSeeOrLocation
+        }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \item
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+    }%
+    \DTLgidxPostName
+    \datagidx at item@body
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \let\item\@idxitem
+  }%
+  \renewcommand*{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \setlength{\dimen@}{\datagidxindent}%
+    \multiply\dimen@ by \datagidx at level\relax
+    \@idxitem\hspace*{\dimen@}%
+    \refstepcounter{DTLgidxChildCount}%
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxChildStyle
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostChildName
+      }%
+    }%
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxseealsostart}%
+  {%
+    \bgroup
+      \setlength{\parindent}{0pt}%
+      \setlength{\parskip}{0pt plus 0.3pt}%
+      \setlength{\dimen@}{\datagidxindent}%
+      \advance\datagidx at level by 1\relax
+      \multiply\dimen@ by \datagidx at level\relax
+      \@idxitem\hspace*{\dimen@}%
+  }%
+  \renewcommand{\datagidxseealsoend}{\egroup}%
+}
+\datagidx at style@index
+\newcommand*{\datagidx at style@indexalign}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}%
+      \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxlocationwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}%
+      \settowidth{\dimen@}{\DTLgidxPreLocation}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+           }%
+         \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+           }%
+         \fi
+      \else
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+         }%
+        \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+         }%
+        \fi
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+          \end{minipage}%
+          \DTLgidxPreLocation
+          \begin{minipage}[t]{\datagidxlocationwidth}%
+          \datagidxlocalign
+           \let\DTLgidxPreLocation\@empty
+           \DTLgidxDoSeeOrLocation
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+           \DTLgidxDoSeeOrLocation
+          \end{minipage}%
+         }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{}%
+  \renewcommand*{\datagidxgroupheader}{}%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+    \datagidx at item@body
+    \par
+    \DTLgidxChildrenSeeAlso
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\dimen@}{\datagidxindent}%
+    \multiply\dimen@ by \datagidx at level\relax
+    \setlength{\dtl at tmplength}{\linewidth}%
+    \addtolength{\dtl at tmplength}{-\dimen@}%
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \edef\item{\noexpand\parshape=1 \the\dimen@ \the\dtl at tmplength}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}%
+           {%
+             \DTLgidxChildStyle
+             {%
+               \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+             }%
+           }%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\dtl at tmplength}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \item
+    \refstepcounter{DTLgidxChildCount}%
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \DTLgidxSymbolDescription
+     \DTLgidxDoSeeOrLocation
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+}
+\newlength\datagidxindent
+\setlength\datagidxindent{10\p@}
+\newlength\datagidxnamewidth
+\newlength\datagidxdescwidth
+\newcommand*{\datagidx at style@align}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}%
+      \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxlocationwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}%
+      \settowidth{\dimen@}{\DTLgidxPreLocation}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+           }%
+         \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+           }%
+         \fi
+      \else
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+         }%
+        \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+           \end{minipage}%
+         }%
+        \fi
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+          \end{minipage}%
+          \DTLgidxPreLocation
+          \begin{minipage}[t]{\datagidxlocationwidth}%
+          \datagidxlocalign
+           \let\DTLgidxPreLocation\@empty
+           \DTLgidxDoSeeOrLocation
+           \DTLgidxChildrenSeeAlso
+          \end{minipage}%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+           \DTLgidxDoSeeOrLocation
+           \DTLgidxChildrenSeeAlso
+          \end{minipage}%
+         }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+     \datagidx at item@body
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}%
+           {%
+             \DTLgidxChildStyle
+             {%
+               \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+             }%
+           }%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \refstepcounter{DTLgidxChildCount}%
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \DTLgidxSymbolDescription
+     \DTLgidxDoSeeOrLocation
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+}
+\newcommand*{\datagidx at style@gloss}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \@tempswatrue
+     \ifdefempty{\Description}%
+     {%
+       \ifdefempty{\Symbol}%
+       {%
+         \ifdefempty{\Location}{\@tempswafalse}{}%
+       }%
+       {}%
+     }%
+     {}%
+     \if at tempswa
+       \DTLgidxSymbolDescription
+       \DTLgidxDoSeeOrLocation
+     \else
+       \mbox{}%
+     \fi
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \def\datagidx at childsep{}%
+    \setcounter{DTLgidxChildCount}{0}%
+  }%
+  \renewcommand{\datagidxchildend}{\DTLgidxPostChild\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \datagidx at childsep
+    \refstepcounter{DTLgidxChildCount}%
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxChildStyle
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostChildName
+      }%
+    }%
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+    \let\datagidx at childsep\DTLgidxChildSep
+  }%
+}
+\newcommand*{\DTLgidxChildSep}{ }
+\newcommand*{\DTLgidxPostChild}{}
+\ifdef\chapter
+{%
+  \newcommand\DTLgidxDictHead{%
+    \chapter{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+  }%
+}%
+{%
+  \newcommand\DTLgidxDictHead{%
+    \section{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+  }%
+}
+\newcommand*{\DTLgidxCategoryNameFont}[1]{#1}
+\newcommand*{\DTLgidxCategorySep}{\space}
+\newcommand*{\DTLgidxSubCategorySep}{\space}
+\newcommand*{\datagidxdictindent}{1em}
+\newcommand{\DTLgidxDictPostItem}{\par}
+\newcommand*{\datagidx at style@dict}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \dimen@=\linewidth
+    \advance\dimen@ by -\datagidxdictindent\relax
+    \dtl at tmplength=\datagidxdictindent\relax
+    \xdef\datagidxdictparshape{%
+      \noexpand\parshape=2 0pt \the\linewidth\space
+       \the\dtl at tmplength\space \the\dimen@\relax
+    }%
+    \datagidx at level=1\relax
+    \raggedright
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \datagidxend
+      \datagidx at postend
+      \DTLgidxDictHead
+      \datagidx at prestart
+      \datagidxstart
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \datagidxdictparshape
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+    }%
+    \DTLgidxPostName
+    \let\datagidx at catsep\@empty
+    \let\datagidx at subcatsep\@empty
+    \DTLgidxSymbolDescription
+    \DTLgidxChildrenSeeAlso
+    \DTLgidxDictPostItem
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+  }%
+  \renewcommand*{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \ifnum\datagidx at level=2\relax
+      \datagidx at catsep
+      \let\datagidx at catsep\DTLgidxCategorySep
+      \let\datagidx at subcapsep\@empty
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxCategoryNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+      \setcounter{DTLgidxChildCount}{0}%
+    \else
+      \datagidx at subcatsep
+      \let\datagidx at subcatsep\DTLgidxSubCategorySep
+      \refstepcounter{DTLgidxChildCount}%
+      \DTLgidxChildCountLabel
+      \DTLgidxPostChildName
+    \fi
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxseealsostart}%
+  {%
+    \bgroup
+      \setlength{\parindent}{0pt}%
+      \setlength{\parskip}{0pt plus 0.3pt}%
+      \setlength{\dimen@}{\datagidxindent}%
+      \advance\datagidx at level by 1\relax
+      \multiply\dimen@ by \datagidx at level\relax
+      \@idxitem\hspace*{\dimen@}%
+  }%
+  \renewcommand{\datagidxseealsoend}{\egroup}%
+}
+\newcommand*{\dtldofirstlocation}{%
+  \@for\dtl at thisloc:=\Location\do{%
+    \ifdefempty\dtl at thisloc
+    {}%
+    {%
+       \expandafter\datagidx at getlocation\dtl at thisloc
+       \datagidxlink{\datagidx at current@target}%
+       {%
+         \datagidx at formatlocation
+            \datagidx at current@format\datagidx at current@locationstring
+       }%
+      \@endfortrue
+    }%
+  }%
+}
+\newcommand*{\datagidx at formatlocation}[2]{%
+  \ifdefempty{#1}%
+  {#2}%
+  {%
+    \ifcsdef{#1}%
+    {%
+      \csuse{#1}{#2}%
+    }%
+    {%
+     \PackageWarning{datagidx}{Unknown format `#1'}%
+      #2%
+    }%
+  }%
+}
+\newcommand*{\dtldolocationlist}{%
+ \DTLifnull{\Location}%
+ {}%
+ {%
+    \def\datagidx at prev@location{-1}%
+    \def\datagidx at prev@locationstring{}%
+    \def\datagidx at prev@format{}%
+    \def\datagidx at prev@locationformat{}%
+    \def\datagidx at prev@prefix{}%
+    \def\datagidx at prev@target{}%
+    \def\datagidx at location@sep{}%
+    \def\datagidx at location@start{-1}%
+    \expandafter\forcsvlist\expandafter\datagidx at parse@location
+      \expandafter{\Location}%
+    \do at prevlocation % tidy up loose ends
+  }%
+}
+\newif\if at dtl@sequential
+\newcommand*\datagidx at getlocdo[1]{%
+  \ifdefempty\datagidx at current@location
+  {}%
+  {%
+    \eappto\datagidx at current@prefix{%
+      \datagidx at current@location\datagidx at compositor
+    }%
+  }%
+  \def\datagidx at current@location{#1}%
+}
+\def\datagidx at getlocation[#1]#2#3{%
+  \def\datagidx at current@locationstring{#2}%
+  \bgroup
+    \datagidx at escapelocationformat
+    \xdef\datagidx at current@locationformat{#2}%
+    \datagidx at clearlocationformat
+    \xdef\datagidx at current@location{#2}%
+  \egroup
+  \let\datagidx at list\datagidx at current@location
+  \def\datagidx at current@prefix{}%
+  \def\datagidx at current@location{}%
+  \let\do\datagidx at getlocdo
+  \expandafter\datagidx at docomplist
+   \expandafter{\datagidx at list}%
+  \def\datagidx at current@format{#1}%
+  \def\datagidx at current@target{#3}%
+}
+\newcommand*{\datagidx at parse@location}[1]{%
+  \datagidx at getlocation#1\relax
+  \ifdefequal{\datagidx at prev@locationstring}{\datagidx at current@locationstring}%
+  {%
+    \ifdefequal{\datagidx at prev@format}{\datagidx at current@format}%
+    {%
+    }%
+    {%
+      \ifdefempty{\datagidx at current@format}%
+      {%
+      }%
+      {%
+        \ifdefempty{\datagidx at prev@format}%
+        {%
+           \let\datagidx at prev@format\datagidx at current@format
+        }%
+        {%
+           \PackageWarning{datagidx}%
+           {%
+              Conflicting location formats `\datagidx at prev@format' and
+              `\datagidx at current@format' for location `\datagidx at current@location'%
+           }%
+        }%
+      }%
+    }%
+  }%
+  {%
+    \@datagidx at parse@location
+  }%
+}
+\newcommand*{\@datagidx at parse@location}{%
+  \@dtl at sequentialtrue
+  \ifdefequal{\datagidx at prev@format}{\datagidx at current@format}%
+  {%
+    \ifdefequal{\datagidx at prev@locationformat}{\datagidx at current@locationformat}%
+    {%
+      \ifdefequal{\datagidx at prev@prefix}{\datagidx at current@prefix}%
+      {%
+      }%
+      {%
+        \@dtl at sequentialfalse
+      }%
+    }%
+    {%
+      \@dtl at sequentialfalse
+    }%
+  }%
+  {%
+    \@dtl at sequentialfalse
+  }%
+  \if at dtl@sequential
+    \ifnumequal{\datagidx at prev@location+1}{\datagidx at current@location}%
+    {%
+       \ifdefequal
+         \datagidx at current@locationformat
+         \datagidx at prev@locationformat
+      {%
+        \@dtl at sequentialtrue
+      }%
+      {%
+             \@dtl at sequentialfalse
+      }%
+    }%
+    {%
+       \@dtl at sequentialfalse
+    }%
+  \fi
+  \if at dtl@sequential
+     \ifnumequal{\datagidx at location@start}{-1}%
+     {%
+       \let\datagidx at location@start\datagidx at prev@location
+       \let\datagidx at location@startval\datagidx at prev@locationstring
+       \let\datagidx at location@format\datagidx at prev@format
+       \let\datagidx at location@target\datagidx at prev@target
+     }%
+     {%
+     }%
+  \else
+    \do at prevlocation
+  \fi
+  \let\datagidx at prev@location\datagidx at current@location
+  \let\datagidx at prev@format\datagidx at current@format
+  \let\datagidx at prev@prefix\datagidx at current@prefix
+  \let\datagidx at prev@locationformat\datagidx at current@locationformat
+  \let\datagidx at prev@locationstring\datagidx at current@locationstring
+  \let\datagidx at prev@target\datagidx at current@target
+}
+\newcommand*{\DTLgidxLocationSep}{, }
+\newcommand*{\DTLgidxLocationF}[2]{%
+  #1\DTLgidxLocationSep#2%
+}
+\newcommand*{\DTLgidxLocationFF}[2]{%
+  #1--#2%
+}
+\newcommand*{\do at prevlocation}{%
+  \ifnumequal{\datagidx at location@start}{-1}%
+  {%
+     \ifdefempty{\datagidx at prev@locationstring}%
+     {}%
+     {%
+       \datagidx at location@sep
+       \datagidxlink{\datagidx at prev@target}%
+       {%
+         \datagidx at formatlocation
+           \datagidx at prev@format\datagidx at prev@locationstring
+       }%
+       \def\datagidx at location@sep{\DTLgidxLocationSep}%
+     }%
+  }%
+  {%
+    \datagidx at location@sep
+    \do at locrange
+    \def\datagidx at location@sep{\DTLgidxLocationSep}%
+    \def\datagidx at location@start{-1}%
+  }%
+}
+\newcommand*{\do at locrange}{%
+  \ifnumgreater{\datagidx at prev@location}{\datagidx at location@start+1}%
+  {%
+     \DTLgidxLocationFF
+       {%
+         \datagidxlink{\datagidx at location@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at location@format\datagidx at location@startval
+         }%
+       }%
+       {%
+         \datagidxlink{\datagidx at prev@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at prev@format\datagidx at prev@locationstring
+         }%
+       }%
+  }%
+  {%
+     \DTLgidxLocationF
+       {%
+         \datagidxlink{\datagidx at location@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at location@format\datagidx at location@startval
+         }%
+       }%
+       {%
+         \datagidxlink{\datagidx at prev@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at prev@format\datagidx at prev@locationstring
+         }%
+       }%
+  }%
+}
+\newcommand*{\datagidx at defaultdatabase}{}
+\newcommand*{\DTLgidxSetDefaultDB}[1]{%
+  \renewcommand*{\datagidx at defaultdatabase}{#1}%
+}
+\define at key{newgloss}{heading}{\renewcommand*{\datagidx at heading}{#1}}
+\define at key{newgloss}{postheading}{%
+  \renewcommand*{\datagidx at postheading}{#1}%
+}
+\newif\ifdatagidxbalance
+\datagidxbalancetrue
+\define at choicekey{newgloss}{balance}[\val\nr]{true,false}[true]{%
+ \ifcase\nr\relax
+   \renewcommand*{\datagidx at multicols}{multicols}%
+   \datagidxbalancetrue
+ \or
+   \renewcommand*{\datagidx at multicols}{multicols*}%
+   \datagidxbalancefalse
+ \fi
+}
+\define at key{newgloss}{sort}{\renewcommand*{\datagidx at sort}{#1}}
+\newcommand*{\datagidx at style}{index}
+\define at key{newgloss}{style}{\renewcommand*{\datagidx at style}{#1}}
+\newif\ifdatagidxshowgroups
+\newcommand*{\datagidx at showgroups}{false}
+\define at choicekey{newgloss}{showgroups}{true,false}[true]%
+{%
+  \renewcommand{\datagidx at showgroups}{#1}%
+}%
+\ifundef\newgidx
+{%
+  \newcommand*{\newgidx}{\datagidx at newgidx}
+}%
+{}
+\@onlypreamble\newgidx
+\newcommand*{\datagidx at highopt@newgidx}[3][]{%
+  \edef\datagidx at indexfilename{\datagidxhighoptfilename{#2}}%
+  \IfFileExists{\datagidx at indexfilename}%
+  {%
+    \input{\datagidx at indexfilename}%
+    \bgroup
+      \setkeys{newgloss}{#1}%
+      \datagidx at newgidx@update{#2}{#3}%
+    \egroup
+  }%
+  {%
+    \datagidx at newgidx[#1]{#2}{#3}%
+  }%
+}
+\newcommand*{\loadgidx}[3][]{%
+  \input{#2}%
+  \bgroup
+    \setkeys{newgloss}{sort={},#1}%
+    \expandafter\datagidx at newgidx@update\expandafter
+      {\dtllastloadeddb}{#3}%
+  \egroup
+  \edef\datagidx at defaultdatabase{\dtllastloadeddb}%
+  \dtlforcolumn{\Label}{\dtllastloadeddb}{Label}%
+  {%
+     \csxdef{datagidxentry@\Label}{\dtllastloadeddb}%
+  }%
+}
+\@onlypreamble\loadgidx
+\newcommand*{\datagidx at newgidx}[3][]{%
+\bgroup
+  \setkeys{newgloss}{#1}%
+  \ifdefempty{\datagidx at defaultdatabase}%
+  {\xdef\datagidx at defaultdatabase{#2}}%
+  {}%
+  \DTLgnewdb{#2}%
+  \DTLaddcolumn{#2}{Label}%
+  \DTLaddcolumn{#2}{Location}%
+  \DTLaddcolumn{#2}{CurrentLocation}%
+  \DTLaddcolumn{#2}{FirstId}%
+  \DTLaddcolumn{#2}{Name}%
+  \DTLaddcolumn{#2}{Text}%
+  \DTLaddcolumn{#2}{Parent}%
+  \DTLaddcolumn{#2}{Child}%
+  \DTLaddcolumn{#2}{Description}%
+  \DTLaddcolumn{#2}{Used}%
+  \DTLaddcolumn{#2}{Symbol}%
+  \DTLaddcolumn{#2}{Long}%
+  \DTLaddcolumn{#2}{Short}%
+  \DTLaddcolumn{#2}{See}%
+  \DTLaddcolumn{#2}{SeeAlso}%
+  \datagidx at newgidx@update{#2}{#3}%
+\egroup
+}
+\newcommand*{\datagidx at newgidx@update}[2]{%
+  \DTLnewrow{datagidx}%
+  \DTLnewdbentry{datagidx}{Glossary}{#1}%
+  \DTLnewdbentry{datagidx}{Title}{#2}%
+  {%
+    \dtlexpandnewvalue
+    \DTLnewdbentry{datagidx}{Heading}{\expandonce\datagidx at heading}%
+    \DTLnewdbentry{datagidx}{PostHeading}{\expandonce\datagidx at postheading}%
+    \DTLnewdbentry{datagidx}{MultiCols}{\expandonce\datagidx at multicols}%
+    \DTLnewdbentry{datagidx}{Sort}{\expandonce\datagidx at sort}%
+    \DTLnewdbentry{datagidx}{Style}{\expandonce\datagidx at style}%
+    \DTLnewdbentry{datagidx}{ShowGroups}{\expandonce\datagidx at showgroups}%
+  }%
+}
+\newcommand*{\newterm at label}{}
+\define at key{newterm}{label}{\renewcommand*{\newterm at label}{#1}}
+\newcommand*{\newterm at parent}{}
+\define at key{newterm}{parent}{\renewcommand*{\newterm at parent}{#1}}
+\newcommand*{\newterm at text}{}
+\define at key{newterm}{text}{\renewcommand*{\newterm at text}{#1}}
+\newcommand*{\newterm at description}{}
+\define at key{newterm}{description}{%
+  \renewcommand*{\newterm at description}{#1}%
+}
+\define at key{newterm}{plural}{\def\newterm at plural{#1}}
+\newcommand*{\newterm at sort}{}
+\define at key{newterm}{sort}{\renewcommand*{\newterm at sort}{#1}}
+\newcommand*{\newterm at symbol}{}
+\define at key{newterm}{symbol}{\renewcommand*{\newterm at symbol}{#1}}
+\newcommand*{\newterm at database}{}
+\define at key{newterm}{database}{\renewcommand*{\newterm at database}{#1}}
+\newcommand*{\newterm at long}{}
+\define at key{newterm}{long}{%
+  \renewcommand*{\newterm at long}{#1}%
+  \def\newterm at longplural{#1s}%
+}
+\newcommand*{\newterm at short}{}
+\define at key{newterm}{short}{%
+  \renewcommand*{\newterm at short}{#1}%
+  \def\newterm at shortplural{#1s}%
+}
+\define at key{newterm}{longplural}{%
+  \def\newterm at longplural{#1}%
+}
+\define at key{newterm}{shortplural}{%
+  \def\newterm at shortplural{#1}%
+}
+\newcommand*{\newterm at see}{}
+\define at key{newterm}{see}{%
+  \renewcommand*{\newterm at see}{#1}%
+}
+\newcommand*{\newterm at seealso}{}
+\define at key{newterm}{seealso}{%
+  \renewcommand*{\newterm at seealso}{#1}%
+}
+\newcommand*{\newterm at defaultshook}{}
+\newcommand*{\newterm at extrafields}{}
+\newcommand*{\DTLgidxAssignList}{%
+  \Name=Name,\Description=Description,\Used=Used,\Symbol=Symbol,%
+  \Long=Long,\Short=Short,\LongPlural=LongPlural,\ShortPlural=ShortPlural,%
+  \Location=Location,\See=See,\SeeAlso=SeeAlso,%
+  \Text=Text,\Plural=Plural,\CurrentLocation=CurrentLocation,%
+  \Label=Label,\Parent=Parent,\Children=Child,\FirstId=FirstId,\Sort=Sort%
+}
+\newcommand*{\datagidxtermkeys}{%
+  name,description,symbol,long,short,see,seealso,text,plural,%
+  label,parent,sort%
+}
+\newcommand*\@datagidx at fieldkey@Name{name}%
+\newcommand*\@datagidx at fieldkey@Description{description}%
+\newcommand*\@datagidx at fieldkey@Symbol{symbol}%
+\newcommand*\@datagidx at fieldkey@Long{long}%
+\newcommand*\@datagidx at fieldkey@Short{short}%
+\newcommand*\@datagidx at fieldkey@See{see}%
+\newcommand*\@datagidx at fieldkey@SeeAlso{seealso}%
+\newcommand*\@datagidx at fieldkey@Text{text}%
+\newcommand*\@datagidx at fieldkey@Plural{plural}%
+\newcommand*\@datagidx at fieldkey@Label{label}%
+\newcommand*\@datagidx at fieldkey@Parent{parent}%
+\newcommand*\@datagidx at fieldkey@Sort{sort}%
+\newcommand*{\newtermaddfield}[4][]{%
+  \ifstrempty{#1}%
+  {%
+    \dtlforcolumn{\datagidx at thisidx}{datagidx}{Glossary}%
+    {%
+      \DTLaddcolumn{\datagidx at thisidx}{#2}%
+    }%
+  }%
+  {%
+    \@for\datagidx at thisidx:=#1\do
+    {%
+      \DTLaddcolumn{\datagidx at thisidx}{#2}%
+    }%
+  }%
+  \expandafter\gdef\csname newterm@#3\endcsname{}%
+  \define at key{newterm}{#3}%
+  {%
+    \expandafter\def\csname newterm@#3\endcsname{##1}%
+  }%
+  \gappto\newterm at defaultshook
+  {%
+    \expandafter\protected at edef\csname newterm@#3\endcsname{#4}%
+  }%
+  \gappto\newterm at extrafields
+  {%
+     \protected at edef\datagidx at value{\csname newterm@#3\endcsname}%
+     \DTLnewdbentry{\newterm at database}{#2}{\expandonce\datagidx at value}%
+  }%
+  \xappto\DTLgidxAssignList
+  {%
+    ,\expandafter\noexpand\csname#2\endcsname=#2%
+  }%
+  \xappto\datagidxtermkeys{,#3}%
+  \expandafter\xdef\csname @datagidx at fieldkey@#2\endcsname{#3}%
+  \xappto\datagidxgetchildfields
+  {%
+    \noexpand\dtlgetentryfromcurrentrow
+     {\expandafter\noexpand\csname#2\endcsname}%
+     {\noexpand\dtlcolumnindex{\noexpand\DTLgidxCurrentdb}{#2}}%
+  }%
+}
+\newcommand*{\newtermlabelhook}{}
+\newcommand*{\DTLgidxNoFormat}[1]{#1}
+\newcommand*{\DTLgidxGobble}[1]{}
+\newcommand*{\DTLgidxStripBackslash}[1]{%
+  \expandafter\@gobble\string#1%
+}
+\newcommand*{\DTLgidxName}[2]{%
+  #1\space #2%
+}
+\newcommand*{\DTLgidxNameNum}[1]{\@Roman{#1}}
+\newcommand*{\datagidx at namenum}[1]{\two at digits{#1}}
+\newcommand*{\DTLgidxPlace}[2]{%
+  #2%
+}
+\newcommand*{\DTLgidxSubject}[2]{%
+  #2%
+}
+\newcommand*{\DTLgidxOffice}[2]{%
+  #2 (#1)%
+}
+\newcommand*{\DTLgidxIgnore}[1]{#1}
+\newcommand*{\DTLgidxMac}[1]{#1}
+\newcommand*{\datagidx at mac}[1]{Mac}
+\newcommand*{\DTLgidxSaint}[1]{#1}
+\newcommand*{\datagidx at saint}[1]{Saint}
+\newcommand*{\DTLgidxRank}[2]{#1~#2}
+\newcommand*{\datagidx at rank}[2]{#2.}
+\newcommand*{\DTLgidxParticle}[2]{#1~#2}
+\newcommand*{\datagidx at particle}[2]{#2.}
+\newcommand*{\datagidx at bothoftwo}[2]{#1#2}
+\newcommand*{\datagidx at person}[2]{#2\noexpand\datatoolpersoncomma #1}
+\newcommand*{\datagidx at place}[2]{#2\noexpand\datatoolplacecomma #1}
+\newcommand*{\datagidx at subject}[2]{#2\noexpand\datatoolsubjectcomma #1}
+\newcommand*{\datagidx at paren}[1]{\noexpand\datatoolparenstart #1}
+\newcommand*{\datagidx at invert}[2]{#2, #1}
+\newcommand*{\DTLgidxParen}[1]{\space(#1)}
+\newcommand*{\datagidxwordifygreek}{%
+  \def\alpha{alpha}%
+  \def\beta{beta}%
+  \def\gamma{gamma}%
+  \def\delta{delta}%
+  \def\epsilon{epsilon}%
+  \def\varepsilon{epsilon}%
+  \def\zeta{zeta}%
+  \def\eta{eta}%
+  \def\theta{theta}%
+  \def\vartheta{theta}%
+  \def\iota{iota}%
+  \def\kappa{kappa}%
+  \def\lambda{lambda}%
+  \def\mu{mu}%
+  \def\nu{nu}%
+  \def\xi{xi}%
+  \def\pi{pi}%
+  \def\varpi{pi}%
+  \def\rho{rho}%
+  \def\varrho{rho}%
+  \def\sigma{sigma}%
+  \def\varsigma{sigma}%
+  \def\tau{tau}%
+  \def\upsilon{upsilon}%
+  \def\phi{phi}%
+  \def\varphi{phi}%
+  \def\chi{chi}%
+  \def\psi{psi}%
+  \def\omega{omega}%
+  \def\Gamma{Gamma}%
+  \def\Delta{Delta}%
+  \def\Theta{Theta}%
+  \def\Lambda{Lambda}%
+  \def\Xi{Xi}%
+  \def\Pi{Pi}%
+  \def\Sigma{Sigma}%
+  \def\Upsilon{Upsilon}%
+  \def\Phi{Phi}%
+  \def\Psi{Psi}%
+  \def\Omega{Omega}%
+}
+\newcommand{\datagidxextendedtoascii}{%
+  \def\AE{AE}%
+  \def\ae{ae}%
+  \def\OE{OE}%
+  \def\oe{oe}%
+  \def\AA{AA}%
+  \def\aa{aa}%
+  \def\L{L}%
+  \def\l{l}%
+  \def\O{O}%
+  \def\o{o}%
+  \def\SS{SS}%
+  \def\ss{ss}%
+  \def\th{th}%
+  \def\TH{TH}%
+  \def\dh{dh}%
+  \def\DH{DH}%
+}
+\newcommand*{\datagidxconvertchars}{%
+  \let~\space
+  \ifdef\andname
+  {%
+    \let\&\andname
+  }%
+  {%
+    \def\&{\expandafter\@gobble\string\&}%
+  }%
+  \def\_{\string_}%
+  \def\${\string$}%
+  \def\#{\expandafter\@gobble\string\#}%
+  \def\%{\expandafter\@gobble\string\%}%
+  \def\{{\expandafter\@gobble\string\{}%
+  \def\}{\expandafter\@gobble\string\}}%
+}
+\@ifl at t@r\fmtversion{2019/10/01}
+{%
+  \newcommand*{\datagidxstripaccents}{%
+   \let\add at accent@\@secondoftwo
+   \let\@text at composite@x\@secondoftwo
+   \let\@tabacckludge\@secondoftwo
+   \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}%
+   \def\IeC##1{\@gobbletwo##1}%
+   \let\UTFviii at two@octets\UTFviii at two@octets at combine
+  }%
+}
+{%
+  \newcommand*{\datagidxstripaccents}{%
+   \let\add at accent@\@secondoftwo
+   \let\@text at composite@x\@secondoftwo
+   \let\@tabacckludge\@secondoftwo
+   \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}%
+   \def\IeC##1{\@gobbletwo##1}%
+  }%
+}
+\providecommand{\newterm}{\datagidx at newterm}
+\@onlypreamble\newterm
+\newcommand{\datagidx at setfieldvalues}[2]{%
+ \def\newterm at name{#2}%
+ \renewcommand*\newterm at label{#2}%
+ \renewcommand*\newterm at text{#2}%
+ \undef\newterm at plural
+ \renewcommand*{\newterm at description}{}%
+ \renewcommand*{\newterm at sort}{#2}%
+ \renewcommand*{\newterm at symbol}{}%
+ \let\newterm at database\datagidx at defaultdatabase
+ \renewcommand*{\newterm at short}{#2}%
+ \undef\newterm at shortplural
+ \renewcommand*{\newterm at long}{#2}%
+ \undef\newterm at longplural
+ \renewcommand*{\newterm at see}{}%
+ \renewcommand*{\newterm at seealso}{}%
+ \renewcommand*{\newterm at parent}{}%
+ \let\datagidx at orgfield\field
+ \def\field##1{\expandafter\noexpand\csname newterm@##1\endcsname}%
+ \newterm at defaultshook
+ \let\field\datagidx at orgfield
+ \setkeys{newterm}{#1}%
+ \bgroup
+   \let\glsadd\@gobble
+   \let\MakeUppercase\DTLgidxNoFormat
+   \let\MakeTextUppercase\DTLgidxNoFormat
+   \let\MakeLowercase\DTLgidxNoFormat
+   \let\MakeTextLowercase\DTLgidxNoFormat
+   \let\acronymfont\DTLgidxNoFormat
+   \let\textrm\DTLgidxNoFormat
+   \let\texttt\DTLgidxNoFormat
+   \let\textsf\DTLgidxNoFormat
+   \let\textsc\DTLgidxNoFormat
+   \let\textbf\DTLgidxNoFormat
+   \let\textmd\DTLgidxNoFormat
+   \let\textit\DTLgidxNoFormat
+   \let\textsl\DTLgidxNoFormat
+   \let\emph\DTLgidxNoFormat
+   \let\textsuperscript\DTLgidxNoFormat
+  \datagidxconvertchars
+   \let\ensuremath\DTLgidxNoFormat
+   \let\DTLgidxParen\@gobble
+   \let\DTLgidxName\@secondoftwo
+   \let\DTLgidxPlace\datagidx at invert
+   \let\DTLgidxSubject\datagidx at invert
+   \let\DTLgidxOffice\@secondoftwo
+   \let\DTLgidxParticle\datagidx at bothoftwo
+   \datagidxwordifygreek
+   \datagidxstripaccents
+   \datagidxextendedtoascii
+   \newtermlabelhook
+   \protected at xdef\newterm at label{\newterm at label}%
+   \let\DTLgidxName\datagidx at person
+   \let\DTLgidxPlace\datagidx at place
+   \let\DTLgidxSubject\datagidx at subject
+   \let\DTLgidxOffice\datagidx at person
+   \let\DTLgidxParen\datagidx at paren
+   \let\DTLgidxMac\datagidx at mac
+   \let\DTLgidxSaint\datagidx at saint
+   \let\DTLgidxIgnore\@gobble
+   \let\DTLgidxRank\datagidx at rank
+   \let\DTLgidxParticle\datagidx at particle
+   \let\DTLgidxNameNum\datagidx at namenum
+   \protected at xdef\newterm at sort{\newterm at sort}%
+ \egroup
+}
+\newcommand*{\datagidx at add@term}[1]{%
+  \global\cslet{datagidxentry@\newterm at label}{\newterm at database}%
+  \DTLnewrow{\newterm at database}%
+  \DTLnewdbentry{\newterm at database}{Name}{#1}%
+  \DTLnewdbentry{\newterm at database}{Used}{0}%
+  {%
+    \dtlexpandnewvalue
+    \DTLnewdbentry{\newterm at database}{Text}{\expandonce\newterm at text}%
+    \DTLnewdbentry{\newterm at database}{Description}{\expandonce\newterm at description}%
+    \DTLnewdbentry{\newterm at database}{Label}{\expandonce\newterm at label}%
+    \DTLnewdbentry{\newterm at database}{Sort}{\expandonce\newterm at sort}%
+    \DTLnewdbentry{\newterm at database}{Symbol}{\expandonce\newterm at symbol}%
+    \DTLnewdbentry{\newterm at database}{Short}{\expandonce\newterm at short}%
+    \DTLnewdbentry{\newterm at database}{Long}{\expandonce\newterm at long}%
+    \ifundef\newterm at plural
+    {%
+      \DTLnewdbentry{\newterm at database}{Plural}{\expandonce\newterm at text s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{Plural}{\expandonce\newterm at plural}%
+    }%
+    \ifundef\newterm at shortplural
+    {%
+      \DTLnewdbentry{\newterm at database}{ShortPlural}{\expandonce\newterm at short s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{ShortPlural}{\expandonce\newterm at shortplural}%
+    }%
+    \ifundef\newterm at longplural
+    {%
+      \DTLnewdbentry{\newterm at database}{LongPlural}{\expandonce\newterm at long s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{LongPlural}{\expandonce\newterm at longplural}%
+    }%
+    \ifdefempty{\newterm at see}%
+     {}%
+     {\DTLnewdbentry{\newterm at database}{See}{\newterm at see}}%
+    \ifdefempty{\newterm at seealso}%
+     {}%
+     {\DTLnewdbentry{\newterm at database}{SeeAlso}{\newterm at seealso}}%
+    \newterm at extrafields
+    \ifdefempty{\newterm at parent}%
+     {}%
+     {%
+       \iftermexists{\newterm at parent}%
+       {%
+         \edef\newterm at parentdatabase{\csuse{datagidxentry@\newterm at parent}}%
+         \ifthenelse{\equal{\newterm at parentdatabase}{\newterm at database}}
+         {%
+           \DTLnewdbentry{\newterm at database}{Parent}{\newterm at parent}%
+           \datagidx at addchild{\newterm at database}{\newterm at parent}{\newterm at label}%
+         }%
+         {%
+           \PackageError{datagidx}%
+           {%
+             Parent entry `\newterm at parent' must belong to the
+             same database as child entry `\newterm at label'%
+           }%
+           {%
+             Parent entry is in database
+             `\newterm at parentdatabase' and child entry is in
+             database `\newterm at database'%
+           }%
+         }%
+       }%
+       {%
+         \PackageError{datagidx}%
+         {%
+            Can't assign parent to `\newterm at label':
+            `\newterm at parent' doesn't exist%
+         }%
+         {}%
+       }%
+     }%
+  }%
+  \global\let\datagidxlastlabel\newterm at label
+  \postnewtermhook
+}%
+\newcommand*{\postnewtermhook}{}
+\newcommand*{\newtermfield}[1]{\csuse{newterm@#1}}
+\newcommand{\ifnewtermfield}[3]{%
+  \ifcsdef{newterm@#1}
+  {%
+    \ifcsempty{newterm@#1}{#3}{#2}%
+  }%
+  {%
+    #3%
+  }%
+}
+\newcommand{\datagidx at newterm}[2][]{%
+  \datagidx at setfieldvalues{#1}{#2}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \iftermexists{\newterm at label}%
+    {%
+      \PackageError{datagidx}{Term `\newterm at label' already
+        exists in database `\newterm at database'}{}%
+    }%
+    {%
+       \datagidx at add@term{#2}%
+    }%
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      add any terms to it.%
+    }%
+  }%
+}
+\newcommand{\datagidx at highopt@newterm}[2][]{%
+  \datagidx at setfieldvalues{#1}{#2}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \edef\dtl at dogetrow{%
+      \noexpand\dtlgetrowindex
+      {\noexpand\dtl at rowidx}%
+      {\newterm at database}%
+      {%
+        \dtlcolumnindex{\newterm at database}{Label}%
+      }%
+      {\newterm at label}}%
+    \dtl at dogetrow
+    \ifx\dtl at rowidx\dtlnovalue
+       \datagidx at add@term{#2}%
+       \csdef{datagidx at do@highopt at sort@\newterm at database}{\datagidx at sort}%
+    \else
+      \global\cslet{datagidxentry@\newterm at label}{\newterm at database}%
+      \global\let\datagidxlastlabel\newterm at label
+    \fi
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      add any terms to it.%
+    }%
+  }%
+}
+\newcommand*{\datagidx at addchild}[3]{%
+  \edef\dtl at dogetrow{%
+    \noexpand\dtlgetrowforvalue
+    {#1}%
+    {%
+      \dtlcolumnindex{\newterm at database}{Label}%
+    }%
+    {#2}}%
+  \dtl at dogetrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at child}%
+    {\dtlcolumnindex{#1}{Child}}%
+  \ifx\datagidx at child\dtlnovalue
+    \edef\datagidx at child{#3}%
+  \else
+    \edef\datagidx at child{\datagidx at child,#3}%
+  \fi
+  \edef\do at update{\noexpand\dtlupdateentryincurrentrow
+    {Child}{\datagidx at child}}%
+  \do at update
+  \dtlrecombine
+}
+\newcommand{\newacro}[3][]{%
+  \newterm
+    [%
+      description={\capitalisewords{#3}},%
+      short={\acronymfont{#2}},%
+      long={#3},%
+      text={\DTLgidxAcrStyle{#3}{\acronymfont{#2}}},%
+      plural={\DTLgidxAcrStyle{#3s}{\acronymfont{#2s}}},%
+      sort={#2},%
+      #1%
+    ]%
+    {\MakeTextUppercase{#2}}%
+}
+\newcommand*{\acronymfont}[1]{#1}
+\newcommand*{\DTLgidxAcrStyle}[2]{#1 (#2)}
+\newcommand{\iftermexists}[3]{%
+  \ifcsdef{datagidxentry@#1}{#2}{#3}%
+}
+\newcommand*{\datagidxdb}[1]{%
+  \csuse{datagidxentry@#1}%
+}
+\newcommand*{\ifentryused}[3]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\dtl at dogetrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {%
+      \dtlcolumnindex{\newterm at database}{Label}%
+    }%
+    {#1}}%
+  \dtl at dogetrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at value}%
+    {\dtlcolumnindex{\newterm at database}{Used}}%
+  \ifnum\datagidx at value=1\relax
+    #2%
+  \else
+    #3%
+  \fi
+}
+\newcommand*{\glsreset}[1]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#1}%
+  }%
+  \do at getrow
+  \dtlreplaceentryincurrentrow
+    {0}{\dtlcolumnindex{\newterm at database}{Used}}%
+  \dtlrecombine
+}
+\newcommand*{\glsunset}[1]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#1}%
+  }%
+  \do at getrow
+  \dtlreplaceentryincurrentrow
+    {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+  \dtlrecombine
+}
+\newcommand*{\glsresetall}[1]{%
+  \def\datagidx at list{}%
+  \dtlforcolumn{\datagidx at label}{#1}{Label}%
+  {%
+    \ifdefempty\datagidx at list
+    {%
+      \let\datagidx at list\datagidx at label
+    }%
+    {%
+      \eappto\datagidx at list{,\datagidx at label}%
+    }%
+  }%
+  \@for\datagidx at thislabel:=\datagidx at list\do
+  {%
+    \glsreset{\datagidx at thislabel}%
+  }%
+}
+\newcommand*{\glsunsetall}[1]{%
+  \def\datagidx at list{}%
+  \dtlforcolumn{\datagidx at label}{#1}{Label}%
+  {%
+    \ifdefempty\datagidx at list
+    {%
+      \let\datagidx at list\datagidx at label
+    }%
+    {%
+      \eappto\datagidx at list{,\datagidx at label}%
+    }%
+  }%
+  \@for\datagidx at thislabel:=\datagidx at list\do
+  {%
+    \glsunset{\datagidx at thislabel}%
+  }%
+}
+\newcount\datagidx at anchorcount
+\newcommand*{\datagidx at formatanchor}[1]{%
+  \ifnum#1<10000
+   0%
+    \ifnum#1<1000
+     0%
+      \ifnum#1<100
+       0%
+        \ifnum#1<10
+         0%
+        \fi
+      \fi
+    \fi
+  \fi
+  \number#1%
+}
+\newcommand*{\@datagidx at escloc}[2]{%
+  \expandafter\string\csname#1\endcsname{\noexpand\number#2}%
+}
+\newcommand*{\datagidx at escapelocation}{%
+  \def\@arabic{\@datagidx at escloc{@arabic}}%
+  \def\@roman{\@datagidx at escloc{@roman}}%
+  \def\@Roman{\@datagidx at escloc{@Roman}}%
+  \def\@alph{\@datagidx at escloc{@alph}}%
+  \def\@Alph{\@datagidx at escloc{@Alph}}%
+}
+\newcommand*{\datagidx at escapelocationformat}{%
+  \def\@arabic##1{arabic}%
+  \def\@roman##1{roman}%
+  \def\@Roman##1{Roman}%
+  \def\@alph##1{alph}%
+  \def\@Alph##1{Alph}%
+}
+\newcommand*{\datagidx at clearlocationformat}{%
+  \let\@arabic\@firstofone
+  \let\@roman\@firstofone
+  \let\@Roman\@firstofone
+  \let\@alph\@firstofone
+  \let\@Alph\@firstofone
+}
+\newcommand*{\DTLgidxAddLocationType}[1]{%
+  \gappto\datagidx at escapelocation{%
+    \expandafter\def\csname#1\endcsname{\@datagidx at escloc{#1}}%
+  }%
+  \gappto\datagidx at escapelocationformat{%
+    \expandafter\def\csname#1\endcsname##1{#1}%
+  }%
+  \gappto\datagidx at clearlocationformat{%
+    \expandafter\let\csname#1\endcsname\@firstofone
+  }%
+}
+\@onlypreamble\DTLgidxAddLocationType
+\newcommand*{\datagidx at target}[4]{%
+  \global\advance\datagidx at anchorcount by 1\relax
+  \edef\@datagidx at target{datagidx.\datagidx at formatanchor\datagidx at anchorcount}%
+  \ifstrempty{#3}
+  {%
+    \datagidx at write@usedentry{#1}{}%
+  }%
+  {%
+    \bgroup
+      \datagidx at escapelocation
+      \def\@arabic{\noexpand\@arabic}%
+      \def\@roman{\noexpand\@roman}%
+      \def\@Roman{\noexpand\@Roman}%
+      \def\@alph{\noexpand\@alph}%
+      \def\@Alph{\noexpand\@Alph}%
+      \protected at edef\@datagidx at dowriteaux{%
+         \noexpand\datagidx at write@usedentry{#1}%
+              {[#2]{#3}{\@datagidx at target}}%
+      }%
+      \@datagidx at dowriteaux
+    \egroup
+  }%
+  \ifdef\hypertarget
+  {%
+    \datagidxshowifdraft
+    {%
+      [\@datagidx at target]%
+      \discretionary{}{}{}%
+    }%
+    \bgroup
+      \let\glsadd\@gobble
+      \settoheight\dimen@{#4}%
+      \raisebox{\dimen@}%
+      {%
+        \datagidxtarget{\@datagidx at target}{}%
+      }%
+    \egroup
+  }%
+  {%
+  }%
+  \datagidxshowifdraft{[#1]\discretionary{}{}{}}%
+  #4%
+}
+\DeclareRobustCommand*{\glsdispentry}[2]{%
+  \DTLgidxFetchEntry{\datagidx at dispentryval}{#1}{#2}%
+  \datagidx at dispentryval
+}
+\DeclareRobustCommand*{\Glsdispentry}[2]{%
+  \DTLgidxFetchEntry{\datagidx at dispentryval}{#1}{#2}%
+  \xmakefirstuc\datagidx at dispentryval
+}
+\newcommand*{\DTLgidxFetchEntry}[3]{%
+  \ifcsdef{datagidxentry@#2}%
+  {%
+  \letcs{\newterm at database}{datagidxentry@#2}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#2}%
+  }%
+  \do at getrow
+  \dtlgetentryfromcurrentrow
+    {#1}%
+    {\dtlcolumnindex{\newterm at database}{#3}}%
+  }%
+  {%
+    \PackageError{datagidx}{No term `#2' defined}{}%
+  }%
+}
+\newcommand*{\datagidx at parse@formatlabel}[1]{%
+  \datagidx at parse@format at label@#1\@endparse at formatlabel@
+}
+\newcommand*\datagidx at parse@format at label@{%
+  \@ifnextchar[{\datagidx at parse@formatlabel@}{\datagidx at parse@formatlabel@[]}%
+}
+\def\datagidx at parse@formatlabel@[#1]#2\@endparse at formatlabel@{%
+  \def\datagidx at format{#1}%
+  \def\datagidx at label{#2}%
+}
+\newcommand*{\@datagidx at use@entry}[1]{%
+  \ifcsundef{datagidxentry@\datagidx at label}
+  {%
+    \PackageError{datagidx}{Entry `\datagidx at label' doesn't exist}{}%
+  }%
+  {%
+    \letcs{\newterm at database}{datagidxentry@\datagidx at label}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {\datagidx at label}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at id}%
+      {\dtlcolumnindex{\newterm at database}{FirstId}}%
+    \DTLifnull\datagidx at id
+    {%
+      \count@=\datagidx at anchorcount\relax
+      \advance\count@ by 1\relax
+      \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\count@}%
+    }%
+    {}%
+    \dtlreplaceentryincurrentrow
+      {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at parent}%
+      {\dtlcolumnindex{\newterm at database}{Parent}}%
+    \dtlrecombine
+    \datagidx at markparent{\newterm at database}{\datagidx at parent}%
+    \datagidx at target{\datagidx at label}{\datagidx at format}%
+      {\csuse{the\DTLgidxCounter}}{#1}%
+  }%
+}
+\newcommand*{\DTLgidxCounter}{page}
+\newcommand*{\datagidx at markparent}[2]{%
+  \ifx#2\dtlnovalue
+  \else
+    \datagidx at target{#2}{}{}{}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {#1}%
+      {\dtlcolumnindex{#1}{Label}}%
+      {#2}}%
+    \do at getrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at id}%
+    {\dtlcolumnindex{\newterm at database}{FirstId}}%
+  \DTLifnull\datagidx at id
+  {%
+    \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+  }%
+  {}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at parent}%
+      {\dtlcolumnindex{#1}{Parent}}%
+  \dtlrecombine
+    \datagidx at markparent{#1}{\datagidx at parent}%
+  \fi
+}
+\newcommand*{\datagidx at write@usedentry}[2]{%
+  \datagidx at do@highopt at update{#1}%
+  \protected at write{\@auxout}{}%
+    {%
+      \string\datagidx at usedentry{#1}{#2}%
+    }%
+  \protected at edef\datagidx at do@usedentry{%
+    \noexpand\datagidx at xusedentry{CurrentLocation}{#1}{#2}%
+  }%
+  \expandafter\ifstrequal\expandafter{\DTLgidxCounter}{page}%
+  {%
+     \expandafter\afterpage\expandafter{\datagidx at do@usedentry}%
+  }%
+  {
+    \datagidx at do@usedentry
+  }%
+}
+\newcommand*{\datagidx at xusedentry}[3]{%
+  \protected at edef\@datagidx at do@xusedentry{%
+     \noexpand\datagidx at usedentry[#1]{#2}{#3}%
+  }%
+  \@datagidx at do@xusedentry
+}
+\newcommand*{\datagidx at usedentry}[3][Location]{%
+  \ifcsundef{datagidxentry@#2}%
+  {%
+    \PackageWarning{datagidx}{No term `#2' defined. Ignoring}%
+  }%
+  {%
+    \letcs{\newterm at database}{datagidxentry@#2}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {#2}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at loc}%
+      {\dtlcolumnindex{\newterm at database}{#1}}%
+    \ifx\datagidx at loc\dtlnovalue
+      \def\datagidx at loc{#3}%
+      \dtlappendentrytocurrentrow{#1}{\expandonce\datagidx at loc}%
+    \else
+      \ifdefempty{\datagidx at loc}%
+      {%
+        \def\datagidx at loc{#3}%
+      }%
+      {%
+        \ifstrempty{#3}%
+        {}%
+        {%
+          \appto\datagidx at loc{,#3}%
+        }%
+      }%
+      \expandafter\dtlreplaceentryincurrentrow\expandafter
+        {\datagidx at loc}%
+        {\dtlcolumnindex{\newterm at database}{#1}}%
+    \fi
+    \dtlrecombine
+  }%
+}
+\newcommand*{\datagidx at save@loc}[2]{%
+ \bgroup
+  \datagidx at escapelocation
+  \xdef\datagidx at tmp{#2}%
+ \egroup
+ \expandafter\xdef\csname datagidx at prev@loc@#1\endcsname{\datagidx at tmp}%
+}
+\newcommand*{\glsadd}[1]{%
+  \NoCaseChange{\@glsadd{#1}}%
+}
+\DeclareRobustCommand*{\@glsadd}[1]{%
+  \ifcsundef{datagidxentry@\datagidx at label}%
+  {%
+    \PackageError{datagidx}{Term `\datagidx at label' doesn't exist}{}%
+  }%
+  {%
+    \datagidx at parse@formatlabel{#1}%
+    \datagidx at target{\datagidx at label}{\datagidx at format}%
+      {\csuse{the\DTLgidxCounter}}{}%
+    \letcs{\newterm at database}{datagidxentry@\datagidx at label}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {\datagidx at label}%
+    }%
+    \do at getrow
+    \dtlreplaceentryincurrentrow
+      {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at id}%
+      {\dtlcolumnindex{\newterm at database}{FirstId}}%
+    \DTLifnull\datagidx at id
+    {%
+      \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+    }%
+    {}%
+    \dtlrecombine
+  }%
+}
+\newcount\datagidx at count
+\newcommand*{\glsaddall}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \edef\datagidx at rowcount{\number\DTLrowcount{#1}}%
+     \datagidx at count=0\relax
+     \loop
+       \advance\datagidx at count by 1\relax
+       \dtlgetrow{#1}{\datagidx at count}%
+      \dtlgetentryfromcurrentrow
+        {\datagidx at label}%
+        {\dtlcolumnindex{#1}{Label}}%
+    \bgroup
+      \undef\hypertarget
+      \datagidx at target{\datagidx at label}{}{}{}%
+    \egroup
+       \dtlreplaceentryincurrentrow
+        {1}{\dtlcolumnindex{#1}{Used}}%
+      \dtlgetentryfromcurrentrow
+        {\datagidx at id}%
+        {\dtlcolumnindex{#1}{FirstId}}%
+      \DTLifnull\datagidx at id
+      {%
+        \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+      }%
+      {}%
+      \dtlrecombine
+     \ifnum\datagidx at count<\datagidx at rowcount
+     \repeat
+  }%
+  {%
+    \PackageError{datagidx}{Database `#1' doesn't exist}{}%
+  }%
+}
+\DeclareRobustCommand*{\glslink}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{#2}%
+  }%
+}
+\DeclareRobustCommand*{\useentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\datagidx at value}%
+  }%
+}
+\DeclareRobustCommand*{\Useentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\xmakefirstuc{\datagidx at value}}%
+  }%
+}
+\DeclareRobustCommand*{\USEentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\MakeTextUppercase{\datagidx at value}}%
+  }%
+}
+\DeclareRobustCommand*{\useentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\datagidx at value}%
+}
+\DeclareRobustCommand*{\Useentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\xmakefirstuc{\datagidx at value}}%
+}
+\DeclareRobustCommand*{\USEentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\MakeTextUppercase{\datagidx at value}}%
+}
+\DeclareRobustCommand*{\gls}[1]{\useentry{#1}{Text}}
+\DeclareRobustCommand*{\glspl}[1]{\useentry{#1}{Plural}}
+\DeclareRobustCommand*{\Gls}[1]{\Useentry{#1}{Text}}
+\DeclareRobustCommand*{\Glspl}[1]{\Useentry{#1}{Plural}}
+\DeclareRobustCommand*{\glsnl}[1]{\useentrynl{#1}{Text}}
+\DeclareRobustCommand*{\glsplnl}[1]{\useentrynl{#1}{Plural}}
+\DeclareRobustCommand*{\Glsnl}[1]{\Useentrynl{#1}{Text}}
+\DeclareRobustCommand*{\Glsplnl}[1]{\Useentrynl{#1}{Plural}}
+\DeclareRobustCommand*{\glssym}[1]{\useentry{#1}{Symbol}}
+\DeclareRobustCommand*{\Glssym}[1]{\Useentry{#1}{Symbol}}
+\newcommand*{\DTLgidxFormatAcr}[3]{%
+  \DTLgidxAcrStyle{\glsdispentry{#1}{#2}}{\useentry{#1}{#3}}%
+}
+\newcommand*{\DTLgidxFormatAcrUC}[3]{%
+  \DTLgidxAcrStyle{\Glsdispentry{#1}{#2}}{\useentry{#1}{#3}}%
+}
+\DeclareRobustCommand*{\acr}[1]{%
+  \ifentryused{#1}%
+  {\useentry{#1}{Short}}%
+  {\DTLgidxFormatAcr{#1}{Long}{Short}}%
+}
+\DeclareRobustCommand*{\acrpl}[1]{%
+  \ifentryused{#1}%
+  {\useentry{#1}{ShortPlural}}%
+  {\DTLgidxFormatAcr{#1}{LongPlural}{ShortPlural}}%
+}
+\DeclareRobustCommand*{\Acr}[1]{%
+  \ifentryused{#1}%
+  {\Useentry{#1}{Short}}%
+  {\DTLgidxFormatAcrUC{#1}{Long}{Short}}%
+}
+\DeclareRobustCommand*{\Acrpl}[1]{%
+  \ifentryused{#1}%
+  {\Useentry{#1}{ShortPlural}}%
+  {\DTLgidxFormatAcrUC{#1}{LongPlural}{ShortPlural}}%
+}
+\define at key{printterms}{database}{\renewcommand*{\newterm at database}{#1}}
+\define at choicekey{printterms}{postdesc}[\val\nr]%
+ {none,dot}%
+ {%
+   \datagidx at setpostdesc\nr
+ }
+\define at choicekey{printterms}{prelocation}[\val\nr]%
+ {none,enspace,space,dotfill,hfill}%
+ {%
+   \datagidx at setprelocation\nr
+ }
+\define at choicekey{printterms}{location}[\val\nr]%
+ {hide,list,first}%
+ {\datagidx at setlocation\nr}
+\define at choicekey{printterms}{symboldesc}[\val\nr]%
+ {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}%
+ {\datagidx at formatsymdesc\nr}
+\define at key{printterms}{columns}%
+{%
+  \DTLgidxSetColumns{#1}%
+}
+\define at choicekey{printterms}{namecase}[\val\nr]%
+ {nochange,uc,lc,firstuc,capitalise}%
+ {%
+   \datagidx at setnamecase\nr
+ }
+\define at key{printterms}{namefont}%
+{%
+  \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}%
+}
+\define at key{printterms}{postname}
+{%
+  \renewcommand*{\DTLgidxPostName}{#1}%
+}
+\define at choicekey{printterms}{see}[\val\nr]%
+  {comma,brackets,dot,space,nosep,semicolon,location}%
+  {\datagidx at setsee\nr}
+\define at choicekey{printterms}{child}[\val\nr]%
+ {named,noname}%
+ {%
+   \datagidx at setchildstyle\nr
+ }
+\define at key{printterms}{symbolwidth}%
+{%
+  \setlength{\datagidxsymbolwidth}{#1}%
+}
+\define at key{printterms}{locationwidth}%
+{%
+  \setlength{\datagidxlocationwidth}{#1}%
+}
+\define at choicekey{printterms}{childsort}[\val\nr]%
+ {true,false}[true]%
+ {%
+   \datagidx at setchildsort\nr
+ }
+\define at choicekey{printterms}{showgroups}{true,false}[true]{%
+ \appto\newterm at styles{showgroups={#1},}%
+}
+\define at key{printterms}{style}{\appto\newterm at styles{style={#1},}}
+\define at key{printterms}{heading}{\appto\newterm at styles{heading={#1},}}
+\define at key{printterms}{postheading}{%
+  \appto\newterm at styles{postheading={#1},}%
+}
+\define at key{printterms}{sort}{\appto\newterm at styles{sort={#1},}}
+\define at choicekey{printterms}{balance}[\val\nr]{true,false}[true]{%
+  \ifcase\nr\relax
+    \appto\newterm at styles{balance=true,}%
+  \or
+    \appto\newterm at styles{balance=false,}%
+  \fi
+}
+\newcommand*{\printterms at condition}{\boolean{true}}
+\define at key{printterms}{condition}{\renewcommand*{\printterms at condition}{#1}}
+\newcommand{\printtermsstartpar}{\par}
+\newcommand*{\printterms at setupmulticol}{%
+ \ifdefempty\datagidx at postheading
+ {%
+   \edef\datagidx at prestart{%
+    \noexpand\datagidx at heading{\noexpand\datagidx at title}%
+    \noexpand\begin{\datagidx at multicols}{\datagidx at columns}%
+   }%
+ }%
+ {%
+   \edef\datagidx at prestart{%
+    \noexpand\datagidx at heading{\noexpand\datagidx at title}%
+    \noexpand\begin{\datagidx at multicols}{\datagidx at columns}%
+    [\noexpand\datagidx at postheading]%
+   }%
+ }%
+ \edef\datagidx at postend{%
+  \noexpand\end{\datagidx at multicols}%
+ }%
+}
+\newcommand*{\printterms at setuptwocol}{%
+ \def\datagidx at prestart{%
+   \twocolumn[\datagidx at heading{\datagidx at title}%
+   \datagidx at postheading]}%
+ \if at twocolumn
+   \def\datagidx at postend{}%
+ \else
+   \def\datagidx at postend{\printtermsrestoreonecolumn}%
+ \fi
+}
+\newcommand{\printtermsrestoreonecolumn}{\onecolumn}
+\newcommand{\printterms}[1][]{%
+\bgroup
+  \let\newterm at database\datagidx at defaultdatabase
+  \let\newterm at styles\@empty
+  \setkeys{printterms}{#1}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \edef\DTLgidxCurrentdb{\newterm at database}%
+    \edef\do at getrow{\noexpand\dtlgetrowforvalue
+      {datagidx}%
+      {\dtlcolumnindex{datagidx}{Glossary}}%
+      {\newterm at database}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at title}%
+      {\dtlcolumnindex{datagidx}{Title}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at heading}%
+      {\dtlcolumnindex{datagidx}{Heading}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at postheading}%
+      {\dtlcolumnindex{datagidx}{PostHeading}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at multicols}%
+      {\dtlcolumnindex{datagidx}{MultiCols}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at sort}%
+      {\dtlcolumnindex{datagidx}{Sort}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at style}%
+      {\dtlcolumnindex{datagidx}{Style}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at showgroups}%
+      {\dtlcolumnindex{datagidx}{ShowGroups}}%
+    \edef\dtl at do@setkeys{\noexpand\setkeys{newgloss}{\expandonce\newterm at styles}}%
+    \dtl at do@setkeys
+    \ifnum\datagidx at columns>1\relax
+       \ifnum\datagidx at columns=2\relax
+        \ifdatagidxbalance
+          \printterms at setupmulticol
+        \else
+          \printterms at setuptwocol
+        \fi
+       \else
+          \printterms at setupmulticol
+       \fi
+    \else
+       \def\datagidx at prestart{}%
+       \def\datagidx at postend{}%
+    \fi
+    \let\@dtl at dbname\DTLgidxCurrentdb
+    \csuse{datagidxshowgroups\datagidx at showgroups}%
+    \datagidxsetstyle{\datagidx at style}%
+    \def\datagidx at labellist{}%
+    \ifnum\datagidx at columns=1\relax
+      \datagidx at heading{\datagidx at title}%
+      \datagidx at postheading
+    \fi
+    \datagidx at do@sort
+    \datagidx at prestart
+    \printtermsstartpar
+    \datagidxstart
+    \let\DTLgidxName\datagidx at invert
+    \let\DTLgidxPlace\datagidx at invert
+    \let\DTLgidxSubject\datagidx at invert
+    \let\DTLgidxOffice\datagidx at invert
+      \DTLgidxForeachEntry
+      {%
+         \datagidxitem
+      }%
+    \datagidxend
+    \datagidx at postend
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      use it.%
+    }%
+  }%
+\egroup
+}
+\def\datagidx at getgroup#1#2\datagidx at endgetgroup{%
+  \dtl at setcharcode{#1}{\count@}%
+  \dtlifintclosedbetween{\count@}{48}{57}%
+  {%
+    \gdef\datagidxcurrentgroup{Numbers}%
+  }%
+  {%
+    \dtlifintclosedbetween{\count@}{97}{122}%
+    {%
+      \advance\count@ by -96\relax
+      \xdef\datagidxcurrentgroup{\@Alph\count@}%
+    }%
+    {%
+      \dtlifintclosedbetween{\count@}{65}{90}%
+      {%
+        \gdef\datagidxcurrentgroup{#1}%
+      }%
+      {%
+        \gdef\datagidxcurrentgroup{Symbols}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLgidxGroupHeaderTitle}[1]{%
+  \ifcsdef{datagidx#1name}
+  {%
+    \csuse{datagidx#1name}%
+  }%
+  {%
+    #1%
+  }%
+}
+\newcommand{\DTLgidxForeachEntry}[1]{%
+  \def\datagidxprevgroup{}%
+  \edef\datagidx at doforeachentry{%
+    \noexpand\DTLforeach*[\expandonce\printterms at condition]{\DTLgidxCurrentdb}%
+     {\expandonce\DTLgidxAssignList}
+  }%
+  \datagidx at doforeachentry
+  {%
+    \DTLifnull{\Parent}%
+    {%
+      \DTLifnull\Location
+      {%
+         \DTLifnull\CurrentLocation
+         {%
+         }%
+         {%
+           \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+         }%
+      }%
+      {%
+        \ifcsdef{datagidx at prev@loc@\Label}%
+        {%
+          \dtlgidx at checklocationchange
+        }%
+        {%
+           \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+        }%
+      }%
+      \datagidx at doifdisplayed
+      {%
+        \edef\datagidx at dowrite{%
+          \noexpand\protected at write\noexpand\@auxout{}%
+          {%
+            \string\datagidx at save@loc{\Label}{\CurrentLocation}%
+          }%
+        }%
+        \datagidx at dowrite
+        \datagidx at level=1\relax
+        \expandafter\datagidx at getgroup\Sort{}\datagidx at endgetgroup
+        #1%
+        \global\let\datagidxprevgroup\datagidxcurrentgroup
+      }%
+    }%
+    {}%
+  }%
+}
+\newcommand*{\dtlgidx at checklocationchange}{%
+  \protected at edef\@prev at location{%
+     \csname datagidx at prev@loc@\Label\endcsname}%
+  \@onelevel at sanitize\@prev at location
+  \protected at edef\@cur at location{\CurrentLocation}%
+  \@onelevel at sanitize\@cur at location
+  \ifdefequal{\@prev at location}{\@cur at location}%
+  {}%
+  {%
+    \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+  }%
+}
+\newcommand{\datagidx at doifdisplayed}[1]{%
+  \DTLifnull{\Location}%
+  {%
+     \DTLifnull{\See}
+     {%
+       \DTLifnull{\SeeAlso}{}%
+       {%
+         #1%
+       }%
+     }%
+     {%
+       \@for\dtl at thislabel:=\See\do
+       {%
+           \iftermexists{\dtl at thislabel}%
+           {%
+             \ifentryused{\dtl at thislabel}%
+             {%
+               #1%
+               \@endfortrue
+             }%
+             {}%
+           }%
+           {%
+           }%
+       }%
+     }%
+  }%
+  {%
+    #1%
+  }%
+}%
+\newcount\datagidx at level
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datagidx-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datapie-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datapie-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datapie}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\newif\ifDTLcolorpiechart
+\DTLcolorpiecharttrue
+\DeclareOption{color}{\DTLcolorpiecharttrue}
+\DeclareOption{gray}{\DTLcolorpiechartfalse}
+\define at boolkey{datapie}[DTL]{rotateinner}[true]{}
+\define at boolkey{datapie}[DTL]{rotateouter}[true]{}
+\DTLrotateinnerfalse
+\DTLrotateouterfalse
+\DeclareOption{rotateinner}{\DTLrotateinnertrue}
+\DeclareOption{norotateinner}{\DTLrotateinnerfalse}
+\DeclareOption{rotateouter}{\DTLrotateoutertrue}
+\DeclareOption{norotateouter}{\DTLrotateouterfalse}
+\ProcessOptions
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{tikz}
+\newlength\DTLradius
+\DTLradius=2cm
+\newcommand*{\DTLinnerratio}{0.5}
+\newcommand*{\DTLouterratio}{1.25}
+\newcommand*\DTLcutawayratio{0.2}
+\newcommand*{\DTLstartangle}{0}
+\newlength\dtl at inneroffset
+\dtl at inneroffset=\DTLinnerratio\DTLradius
+\newlength\dtl at outeroffset
+\dtl at outeroffset=\DTLouterratio\DTLradius
+\newlength\dtl at cutawayoffset
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius
+\newcommand*{\dtl at piecutaways}{}
+\def\dtl at innerlabel{\DTLpievariable}%
+\def\dtl at outerlabel{}%
+\newcounter{DTLpieroundvar}
+\setcounter{DTLpieroundvar}{1}
+\newcommand*{\DTLdisplayinnerlabel}[1]{#1}
+\newcommand*{\DTLdisplayouterlabel}[1]{#1}
+\newcommand*{\DTLpiepercent}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{datapie}{Can't use
+  \string\DTLpiepercent\space outside
+  \string\DTLpiechart}{}%
+\else
+  \csname dtl at piepercent@\romannumeral\@dtl at seg\endcsname
+\fi}
+\newcommand*{\DTLpieatbegintikz}{}
+\newcommand*{\DTLpieatendtikz}{}
+\newcommand*{\DTLsetpiesegmentcolor}[2]{%
+\expandafter\def\csname dtlpie at segcol\romannumeral#1\endcsname{#2}%
+}
+\newcommand*{\DTLgetpiesegmentcolor}[1]{%
+\csname dtlpie at segcol\romannumeral#1\endcsname}
+\newcommand*{\DTLdopiesegmentcolor}[1]{%
+\expandafter\color\expandafter
+{\csname dtlpie at segcol\romannumeral#1\endcsname}}
+\newcommand*{\DTLdocurrentpiesegmentcolor}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{datapie}{Can't use
+  \string\DTLdocurrentpiesegmentcolor\space outside
+  \string\DTLpiechart}{}%
+\else
+  \expandafter\DTLdopiesegmentcolor\expandafter{%
+  \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+\fi}
+\newcommand*{\DTLpieoutlinecolor}{black}
+\newlength\DTLpieoutlinewidth
+\DTLpieoutlinewidth=0pt
+\ifDTLcolorpiechart
+ \DTLsetpiesegmentcolor{1}{red}
+ \DTLsetpiesegmentcolor{2}{green}
+ \DTLsetpiesegmentcolor{3}{blue}
+ \DTLsetpiesegmentcolor{4}{yellow}
+ \DTLsetpiesegmentcolor{5}{magenta}
+ \DTLsetpiesegmentcolor{6}{cyan}
+ \DTLsetpiesegmentcolor{7}{orange}
+ \DTLsetpiesegmentcolor{8}{white}
+\else
+ \DTLsetpiesegmentcolor{1}{black!15}
+ \DTLsetpiesegmentcolor{2}{black!25}
+ \DTLsetpiesegmentcolor{3}{black!35}
+ \DTLsetpiesegmentcolor{4}{black!45}
+ \DTLsetpiesegmentcolor{5}{black!55}
+ \DTLsetpiesegmentcolor{6}{black!65}
+ \DTLsetpiesegmentcolor{7}{black!75}
+ \DTLsetpiesegmentcolor{8}{black!85}
+\fi
+\define at key{datapie}{start}{\def\DTLstartangle{#1}}
+\define at key{datapie}{radius}{\DTLradius=#1\relax
+\dtl at inneroffset=\DTLinnerratio\DTLradius
+\dtl at outeroffset=\DTLouterratio\DTLradius
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius}
+\define at key{datapie}{innerratio}{%
+\def\DTLinnerratio{#1}%
+\dtl at inneroffset=\DTLinnerratio\DTLradius}
+\define at key{datapie}{outerratio}{%
+\def\DTLouterratio{#1}%
+\dtl at outeroffset=\DTLouterratio\DTLradius}
+\define at key{datapie}{cutawayratio}{%
+\def\DTLcutawayratio{#1}%
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius}
+\define at key{datapie}{inneroffset}{%
+\dtl at inneroffset=#1}
+\define at key{datapie}{outeroffset}{%
+\dtl at outeroffset=#1}
+\define at key{datapie}{cutawayoffset}{%
+\dtl at cutawayoffset=#1}
+\define at key{datapie}{cutaway}{%
+\renewcommand*{\dtl at piecutaways}{#1}}
+\define at key{datapie}{variable}{%
+\def\DTLpievariable{#1}}
+\define at key{datapie}{innerlabel}{%
+\def\dtl at innerlabel{#1}}
+\define at key{datapie}{outerlabel}{%
+\def\dtl at outerlabel{#1}}
+\newcommand*{\DTLpiechart}[4][\boolean{true}]{%
+\bgroup
+  \let\DTLpievariable=\relax
+  \setkeys{datapie}{#2}%
+  \ifx\DTLpievariable\relax
+    \PackageError{datapie}%
+    {\string\DTLpiechart\space missing variable}{}%
+  \else
+    \def\dtl at total{0}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \let\dtl at oldtotal=\dtl at total
+      \expandafter\DTLconverttodecimal\expandafter
+        {\DTLpievariable}{\dtl at variable}%
+      \dtladd{\dtl at total}{\dtl at variable}{\dtl at total}%
+    }%
+    \expandafter\DTLconverttodecimal\expandafter
+      {\DTLstartangle}{\@dtl at start}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \expandafter\DTLconverttodecimal\expandafter
+        {\DTLpievariable}{\dtl at variable}%
+      \dtl at computeangles
+        {\csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+        {\dtl at variable}%
+      \expandafter\@dtl at seg\expandafter=
+        \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+      \dtlmul{\dtl at tmp}{\dtl at variable}{100}%
+      \let\dtl at old=\dtl at tmp
+      \dtldiv{\dtl at tmp}{\dtl at old}{\dtl at total}%
+      \expandafter\dtlround
+        \csname dtl at piepercent@\romannumeral\@dtl at seg\endcsname\dtl at tmp
+        \c at DTLpieroundvar
+    }%
+    \@for\dtl at row:=\dtl at piecutaways\do{%
+      \expandafter\@dtl at set@off\dtl at row-\relax
+    }%
+    \let\dtl at start=\DTLstartangle
+    \begin{tikzpicture}
+      \DTLpieatbegintikz
+      \@sDTLforeach[#1]{#3}{#4}%
+      {%
+        \expandafter\@dtl at seg\expandafter=
+        \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+        \edef\dtl at start{%
+          \csname dtl at sang@\romannumeral\@dtl at seg\endcsname}%
+        \edef\dtl at extent{%
+          \csname dtl at angle@\romannumeral\@dtl at seg\endcsname}%
+        \dtladd{\dtl at endangle}{\dtl at start}{\dtl at extent}%
+        \edef\dtl at angle{%
+           \csname dtl at cut@angle@\romannumeral\@dtl at seg\endcsname}%
+        \let\dtl at old=\dtl at angle
+        \dtl at truncatedecimal\dtl at angle
+        \ifnum\dtl at angle>180\relax
+          \dtlsub{\dtl at angle}{\dtl at old}{360}%
+          \dtl at truncatedecimal\dtl at angle
+        \fi
+        \edef\dtl at cutlen{%
+          \csname dtl at cut@len@\romannumeral\@dtl at seg\endcsname
+        }%
+        \edef\@dtl at shift{(\dtl at angle:\dtl at cutlen)}%
+        \dtlmul{\dtl at angle}{\dtl at extent}{0.5}%
+        \dtladd{\dtl at midangle}{\dtl at angle}{\dtl at start}%
+        \begin{scope}[shift={\@dtl at shift}]%
+        \fill[color=\DTLgetpiesegmentcolor\@dtl at seg] (0,0) --
+        (\dtl at start:\DTLradius)
+        arc (\dtl at start:\dtl at endangle:\DTLradius) -- cycle;
+        \ifdim\DTLpieoutlinewidth>0pt\relax
+          \draw[color=\DTLpieoutlinecolor,%
+                line width=\DTLpieoutlinewidth]
+          (0,0) -- (\dtl at start:\DTLradius)
+          arc (\dtl at start:\dtl at endangle:\DTLradius) -- cycle;
+        \fi
+        \dtl at truncatedecimal\dtl at midangle
+        \ifDTLrotateinner
+          \dtlifnumopenbetween{\dtl at midangle}{90}{270}%
+          {%
+            \let\@dtl at next\@firstoftwo
+          }%
+          {%
+             \dtlifnumlt{\dtl at midangle}{-90}%
+             {\let\@dtl at next\@firstoftwo}%
+             {\let\@dtl at next\@secondoftwo}%
+          }%
+          \@dtl at next
+          {%
+            \dtlsub{\dtl at labelangle}{\dtl at midangle}{180}%
+            \dtl at truncatedecimal\dtl at labelangle
+            \edef\dtl at innernodeopt{anchor=east,rotate=\dtl at labelangle}%
+          }%
+          {%
+            \edef\dtl at innernodeopt{anchor=west,rotate=\dtl at midangle}%
+          }%
+        \else
+          \edef\dtl at innernodeopt{anchor=center}%
+        \fi
+        \ifDTLrotateouter
+           \dtlifnumopenbetween{\dtl at midangle}{90}{270}%
+           {%
+             \let\@dtl at next\@firstoftwo
+           }%
+           {%
+              \dtlifnumlt{\dtl at midangle}{-90}%
+              {\let\@dtl at next\@firstoftwo}%
+              {\let\@dtl at next\@secondoftwo}%
+           }%
+           \@dtl at next
+           {%
+             \dtlsub{\dtl at labelangle}{\dtl at midangle}{180}%
+             \dtl at truncatedecimal\dtl at labelangle
+             \edef\dtl at outernodeopt{anchor=east,rotate=\dtl at labelangle}%
+           }%
+           {%
+             \edef\dtl at outernodeopt{anchor=west,rotate=\dtl at midangle}%
+           }%
+        \else
+          \dtlifnumeq{\dtl at midangle}{45}
+          {%
+            \let\@dtl at next\@firstoftwo
+          }%
+          {%
+            \dtlifnumgt{\dtl at midangle}{315}
+            {%
+              \let\@dtl at next\@firstoftwo
+            }%
+            {%
+              \dtlifnumopenbetween{\dtl at midangle}{-45}{45}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \let\@dtl at next\@secondoftwo
+              }%
+            }%
+          }%
+          \@dtl at next
+          {%
+            \edef\dtl at outernodeopt{anchor=west}%
+          }%
+          {%
+            \dtlifnumopenbetween{\dtl at midangle}{45}{135}%
+            {%
+              \let\@dtl at next\@firstoftwo
+            }%
+            {%
+              \dtlifnumeq{\dtl at midangle}{135}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \let\@dtl at next\@secondoftwo
+              }%
+            }%
+            \@dtl at next
+            {%
+              \edef\dtl at outernodeopt{anchor=south}%
+            }%
+            {%
+              \dtlifnumopenbetween{\dtl at midangle}{135}{225}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \dtlifnumeq{\dtl at midangle}{225}%
+                {%
+                  \let\@dtl at next\@firstoftwo
+                }%
+                {%
+                  \dtlifnumeq{\dtl at midangle}{-135}%
+                  {%
+                    \let\@dtl at next\@firstoftwo
+                  }%
+                  {%
+                    \dtlifnumlt{\dtl at midangle}{-135}%
+                    {%
+                      \let\@dtl at next\@firstoftwo
+                    }%
+                    {%
+                      \let\@dtl at next\@secondoftwo
+                    }%
+                  }%
+                }%
+              }%
+              \@dtl at next
+              {%
+                \edef\dtl at outernodeopt{anchor=east}%
+              }%
+              {%
+                \edef\dtl at outernodeopt{anchor=north}%
+              }%
+            }%
+          }%
+        \fi
+        \edef\@dtl at dolabel{%
+          \noexpand\draw (\dtl at midangle:\the\dtl at inneroffset)
+             node[\dtl at innernodeopt]{%
+           \noexpand\DTLdisplayinnerlabel{\noexpand\dtl at innerlabel}};
+        }%
+        \@dtl at dolabel
+        \edef\@dtl at dolabel{%
+          \noexpand\draw (\dtl at midangle:\the\dtl at outeroffset)
+            node[\dtl at outernodeopt]{%
+          \noexpand\DTLdisplayouterlabel{\noexpand\dtl at outerlabel}};
+        }%
+        \@dtl at dolabel
+        \end{scope}%
+      }%
+      \DTLpieatendtikz
+    \end{tikzpicture}%
+  \fi
+\egroup
+}
+\newcommand*{\dtl at computeangles}[2]{%
+  \dtlifnumgt{\@dtl at start}{180}%
+  {%
+    \let\dtl at old=\@dtl at start
+    \dtlsub{\@dtl at start}{\dtl at old}{360}%
+  }%
+  {}%
+  \dtlifnumlt{\@dtl at start}{-180}%
+  {%
+    \let\dtl at old=\@dtl at start
+    \dtladd{\@dtl at start}{\dtl at old}{360}%
+  }%
+  {}%
+  \expandafter\edef\csname dtl at sang@\romannumeral#1\endcsname{%
+     \@dtl at start}%
+  \dtlmul{\dtl at angle}{360}{#2}%
+  \let\dtl at old=\dtl at angle
+  \dtldiv{\dtl at angle}{\dtl at old}{\dtl at total}%
+  \expandafter\let\csname dtl at angle@\romannumeral#1\endcsname=\dtl at angle
+  \let\dtl at old=\@dtl at start
+  \dtladd{\@dtl at start}{\dtl at old}{\dtl at angle}%
+  \expandafter\def\csname dtl at cut@angle@\romannumeral#1\endcsname{0}%
+  \expandafter\def\csname dtl at cut@len@\romannumeral#1\endcsname{0cm}%
+}
+\def\@dtl at set@off#1-#2\relax{%
+  \ifstrempty{#2}%
+  {%
+    \@@dtl at set@off{#1}%
+  }%
+  {%
+    \@@dtl at set@offr#1-#2\relax
+  }%
+}
+\newcommand*{\@@dtl at set@off}[1]{%
+  \edef\dtl at old{\csname dtl at angle@\romannumeral#1\endcsname}%
+  \dtlmul{\dtl at angle}{\dtl at old}{0.5}%
+  \let\dtl at old=\dtl at angle
+  \edef\dtl at sang{\csname dtl at sang@\romannumeral#1\endcsname}%
+  \dtladd{\dtl at angle}{\dtl at old}{\dtl at sang}%
+  \expandafter\edef\csname dtl at cut@angle@\romannumeral#1\endcsname{%
+  \dtl at angle}%
+  \expandafter\edef\csname dtl at cut@len@\romannumeral#1\endcsname{%
+   \the\dtl at cutawayoffset}%
+}
+\newcount\@dtl at seg
+\def\@@dtl at set@offr#1-#2-\relax{%
+ \ifnum#1>#2\relax
+   \PackageError{datapie}{Segment ranges must go in ascending order}{%
+   Try #2-#1 instead of #1-#2}%
+ \else
+   \def\dtl at angle{0}%
+   \@dtl at seg=#1\relax
+   \whiledo{\not\(\@dtl at seg > #2\)}{%
+    \let\dtl at old=\dtl at angle
+    \edef\dtl at segang{\csname dtl at angle@\romannumeral\@dtl at seg\endcsname}%
+    \dtladd{\dtl at angle}{\dtl at old}{\dtl at segang}%
+    \advance\@dtl at seg by 1\relax
+   }%
+   \let\dtl at old=\dtl at angle
+   \dtlmul{\dtl at angle}{\dtl at old}{0.5}%
+   \edef\dtl at sang{\csname dtl at sang@\romannumeral#1\endcsname}%
+   \let\dtl at old=\dtl at angle
+   \dtladd{\dtl at angle}{\dtl at old}{\dtl at sang}%
+   \@dtl at seg=#1\relax
+   \whiledo{\not\(\@dtl at seg > #2\)}{%
+   \expandafter
+    \let\csname dtl at cut@angle@\romannumeral\@dtl at seg\endcsname
+    =\dtl at angle
+   \expandafter
+    \edef\csname dtl at cut@len@\romannumeral\@dtl at seg\endcsname{%
+    \the\dtl at cutawayoffset}
+    \advance\@dtl at seg by 1\relax
+   }%
+ \fi
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datapie-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*dataplot-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (dataplot-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{dataplot}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{tikz}
+\RequirePackage{datatool}[=v2.32]
+\usetikzlibrary{plotmarks}
+\usetikzlibrary{plothandlers}
+\usetikzlibrary{calc}
+\newcommand*{\DTLplotstream}[4][\boolean{true}]{%
+  \@sDTLforeach[#1]{#2}{\dtl at x=#3,\dtl at y=#4}{%
+    \DTLconverttodecimal{\dtl at x}{\dtl at decx}%
+    \DTLconverttodecimal{\dtl at y}{\dtl at decy}%
+    \pgfplotstreampoint{\pgfpointxy{\dtl at decx}{\dtl at decy}}%
+  }%
+}
+\newcommand*{\DTLplotmarks}{%
+  \pgfuseplotmark{o},%
+  \pgfuseplotmark{x},%
+  \pgfuseplotmark{+},%
+  \pgfuseplotmark{square},%
+  \pgfuseplotmark{triangle},%
+  \pgfuseplotmark{diamond},%
+  \pgfuseplotmark{pentagon},%
+  \pgfuseplotmark{asterisk},%
+  \pgfuseplotmark{star}%
+}
+\newcommand*{\DTLplotmarkcolors}{%
+  red,%
+  green,%
+  blue,%
+  yellow,%
+  magenta,%
+  cyan,%
+  orange,%
+  black,%
+  gray}
+\newcommand*{\DTLplotlines}{%
+  \pgfsetdash{}{0pt},% solid line
+  \pgfsetdash{{10pt}{5pt}}{0pt},%
+  \pgfsetdash{{5pt}{5pt}}{0pt},%
+  \pgfsetdash{{1pt}{5pt}}{0pt},%
+  \pgfsetdash{{5pt}{5pt}{1pt}{5pt}}{0pt},%
+  \pgfsetdash{{1pt}{3pt}}{0pt},%
+}
+\newcommand*{\DTLplotlinecolors}{%
+  red,%
+  green,%
+  blue,%
+  yellow,%
+  magenta,%
+  cyan,%
+  orange,%
+  black,%
+  gray}
+\newlength\DTLplotwidth
+\setlength\DTLplotwidth{4in}
+\newlength\DTLplotheight
+\setlength\DTLplotheight{4in}
+\newlength\DTLticklength
+\setlength\DTLticklength{5pt}
+\newlength\DTLminorticklength
+\setlength\DTLminorticklength{2pt}
+\newlength\DTLticklabeloffset
+\setlength\DTLticklabeloffset{8pt}
+\newlength\dtl at xticlabelheight
+\newlength\dtl at yticlabelwidth
+\newlength\DTLmintickgap
+\setlength\DTLmintickgap{20pt}
+\newlength\DTLminminortickgap
+\setlength\DTLminminortickgap{5pt}
+\newcounter{DTLplotroundXvar}
+\setcounter{DTLplotroundXvar}{2}
+\newcounter{DTLplotroundYvar}
+\setcounter{DTLplotroundYvar}{2}
+\newif\ifDTLxaxis
+\DTLxaxistrue
+\newcommand*{\DTLXAxisStyle}{-}
+\newif\ifDTLyaxis
+\DTLyaxistrue
+\newcommand*{\DTLYAxisStyle}{-}
+\newcommand*{\DTLmajorgridstyle}{color=gray,-}
+\newcommand*{\DTLminorgridstyle}{color=gray,loosely dotted}
+\newif\ifDTLxticsin
+\DTLxticsintrue
+\newif\ifDTLyticsin
+\DTLyticsintrue
+\newcount\dtl at legendsetting
+\newlength\DTLlegendxoffset
+\setlength\DTLlegendxoffset{10pt}
+\newlength\DTLlegendyoffset
+\setlength\DTLlegendyoffset{10pt}
+\newcommand*{\DTLformatlegend}[1]{%
+\setlength{\fboxrule}{1.1pt}%
+\fcolorbox{black}{white}{#1}}
+\newif\ifDTLshowmarkers
+\DTLshowmarkerstrue
+\newif\ifDTLshowlines
+\DTLshowlinesfalse
+\newcommand*{\DTLplotatbegintikz}{}
+\newcommand*{\@dtlplothandlermark}[1]{%
+  \pgfplothandlermark
+  {%
+    \pgfmathparse{1/\dtl at scale@x}%
+    \pgftransformxscale{\pgfmathresult}%
+    \pgfmathparse{1/\dtl at scale@y}%
+    \pgftransformyscale{\pgfmathresult}%
+   #1%
+   }%
+}
+\newcommand*{\dtlplothandlermark}[1]{%
+   \PackageWarning{dataplot}{\string\dtlplothandlermark\space
+     found outside \string\DTLplot}%
+  \pgfplothandlermark{#1}%
+}
+\newcommand*{\DTLplotatendtikz}{}
+\define at key{dataplot}{x}{%
+\def\dtl at xkey{#1}}
+\define at key{dataplot}{y}{%
+\def\dtl at ykey{#1}}
+\define at key{dataplot}{markcolors}{%
+\def\DTLplotmarkcolors{#1}}
+\define at key{dataplot}{linecolors}{%
+\def\DTLplotlinecolors{#1}}
+\define at key{dataplot}{colors}{%
+\def\DTLplotmarkcolors{#1}%
+\def\DTLplotlinecolors{#1}}
+\define at key{dataplot}{marks}{%
+\def\DTLplotmarks{#1}}
+\define at key{dataplot}{lines}{%
+\def\DTLplotlines{#1}}
+\define at key{dataplot}{width}{%
+\setlength\DTLplotwidth{#1}}
+\define at key{dataplot}{height}{%
+\setlength\DTLplotheight{#1}}
+\define at choicekey{dataplot}{style}[\val\nr]{both,lines,markers}{%
+\ifcase\nr\relax
+ \DTLshowlinestrue
+ \DTLshowmarkerstrue
+\or
+ \DTLshowlinestrue
+ \DTLshowmarkersfalse
+\or
+ \DTLshowmarkerstrue
+ \DTLshowlinesfalse
+\fi}
+\define at choicekey{dataplot}{axes}[\val\nr]{both,x,y,none}[both]{%
+\ifcase\nr\relax
+ % both
+ \DTLxaxistrue
+ \DTLxticstrue
+ \DTLyaxistrue
+ \DTLyticstrue
+\or % x
+ \DTLxaxistrue
+ \DTLxticstrue
+ \DTLyaxisfalse
+ \DTLyticsfalse
+\or % y
+ \DTLxaxisfalse
+ \DTLxticsfalse
+ \DTLyaxistrue
+ \DTLyticstrue
+\or % none
+ \DTLxaxisfalse
+ \DTLxticsfalse
+ \DTLyaxisfalse
+ \DTLyticsfalse
+\fi
+}
+\define at boolkey{dataplot}[DTL]{box}[true]{}
+\DTLboxfalse
+\define at boolkey{dataplot}[DTL]{xtics}[true]{}
+\DTLxticstrue
+\define at boolkey{dataplot}[DTL]{ytics}[true]{}
+\DTLyticstrue
+\define at boolkey{dataplot}[DTL]{xminortics}[true]{%
+\ifDTLxminortics \DTLxticstrue\fi}
+\DTLxminorticsfalse
+\define at boolkey{dataplot}[DTL]{yminortics}[true]{%
+\ifDTLyminortics \DTLyticstrue\fi}
+\DTLyminorticsfalse
+\define at boolkey{dataplot}[DTL]{grid}[true]{}
+\define at choicekey{dataplot}{xticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLxticsintrue
+\or
+ \DTLxticsinfalse
+\fi
+}
+\define at choicekey{dataplot}{yticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLyticsintrue
+\or
+ \DTLyticsinfalse
+\fi
+}
+\define at choicekey{dataplot}{ticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLxticsintrue
+ \DTLyticsintrue
+\or
+ \DTLxticsinfalse
+ \DTLyticsinfalse
+\fi
+}
+\define at key{dataplot}{bounds}{%
+\def\dtl at bounds{#1}}
+\let\dtl at bounds=\relax
+\define at key{dataplot}{minx}{%
+\def\dtl at minx{#1}}
+\let\dtl at minx=\relax
+\define at key{dataplot}{maxx}{%
+\def\dtl at maxx{#1}}
+\let\dtl at maxx=\relax
+\define at key{dataplot}{miny}{%
+\def\dtl at miny{#1}}
+\let\dtl at miny=\relax
+\define at key{dataplot}{maxy}{%
+\def\dtl at maxy{#1}}
+\let\dtl at maxy=\relax
+\define at key{dataplot}{xticpoints}{%
+\def\dtl at xticlist{#1}\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticlist=\relax
+\define at key{dataplot}{yticpoints}{%
+\def\dtl at yticlist{#1}\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticlist=\relax
+\define at key{dataplot}{xticgap}{\def\dtl at xticgap{#1}%
+\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticgap=\relax
+\define at key{dataplot}{yticgap}{\def\dtl at yticgap{#1}%
+\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticgap=\relax
+\define at key{dataplot}{xticlabels}{%
+\def\dtl at xticlabels{#1}\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticlabels=\relax
+\define at key{dataplot}{yticlabels}{%
+\def\dtl at yticlabels{#1}\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticlabels=\relax
+\define at key{dataplot}{xlabel}{%
+\def\dtl at xlabel{#1}}
+\let\dtl at xlabel=\relax
+\define at key{dataplot}{ylabel}{%
+\def\dtl at ylabel{#1}}
+\let\dtl at ylabel=\relax
+\define at choicekey{dataplot}{legend}[\val\nr]{none,north,northeast,%
+east,southeast,south,southwest,west,northwest}[northeast]{%
+\dtl at legendsetting=\nr\relax
+}
+\define at key{dataplot}{legendlabels}{\def\dtl at legendlabels{#1}}
+\newcommand*{\DTLplot}[3][\boolean{true}]{%
+\bgroup
+  \let\dtl at xkey=\relax
+  \let\dtl at ykey=\relax
+  \let\dtl at legendlabels=\relax
+  \setkeys{dataplot}{#3}%
+  \let\dtl at plotmarklist=\DTLplotmarks
+  \let\dtl at plotlinelist=\DTLplotlines
+  \let\dtl at plotmarkcolorlist=\DTLplotmarkcolors
+  \let\dtl at plotlinecolorlist=\DTLplotlinecolors
+  \def\dtl at legend{}%
+  \ifx\dtl at legendlabels\relax
+   \edef\dtl at legendlabels{#2}%
+  \fi
+  \ifx\dtl at xkey\relax
+    \PackageError{dataplot}{Missing x setting for
+      \string\DTLplot}{}%
+  \else
+    \ifx\dtl at ykey\relax
+      \PackageError{dataplot}{Missing y setting for
+      \string\DTLplot}{}%
+    \else
+      \ifx\dtl at bounds\relax
+        \DTLcomputebounds[#1]{#2}{\dtl at xkey}{\dtl at ykey}
+            {\DTLminX}{\DTLminY}{\DTLmaxX}{\DTLmaxY}%
+        \ifx\dtl at minx\relax
+        \else
+           \let\DTLminX=\dtl at minx
+        \fi
+        \ifx\dtl at maxx\relax
+        \else
+           \let\DTLmaxX=\dtl at maxx
+        \fi
+        \ifx\dtl at miny\relax
+        \else
+           \let\DTLminY=\dtl at miny
+        \fi
+        \ifx\dtl at maxy\relax
+        \else
+           \let\DTLmaxY=\dtl at maxy
+        \fi
+      \else
+        \expandafter\dtl at getbounds\dtl at bounds\@nil
+      \fi
+      \@dtl at tmpcount=\DTLplotwidth
+      \divide\@dtl at tmpcount by 65536\relax
+      \dtlsub{\dtl at dx}{\DTLmaxX}{\DTLminX}%
+      \dtldiv{\dtl at scale@x}{\number\@dtl at tmpcount}{\dtl at dx}%
+      \dtlmul{\dtl at offset@x}{-\dtl at scale@x}{\DTLminX}%
+      \@dtl at tmpcount=\DTLplotheight
+      \divide\@dtl at tmpcount by 65536\relax
+      \dtlsub{\dtl at dy}{\DTLmaxY}{\DTLminY}%
+      \dtldiv{\dtl at scale@y}{\number\@dtl at tmpcount}{\dtl at dy}%
+      \dtlmul{\dtl at offset@y}{-\dtl at scale@y}{\DTLminY}%
+     \ifDTLxtics
+       \ifx\dtl at xticlist\relax
+         \ifx\dtl at xticgap\relax
+         \dtlsub{\dtl at mingap}{\number\DTLmintickgap}{\dtl at offset@x}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{\dtl at scale@x}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{65536}%
+           \dtl at constructticklist\DTLminX\DTLmaxX
+             \dtl at mingap\dtl at xticlist
+         \else
+           \DTLifFPopenbetween{0}{\DTLminX}{\DTLmaxX}{%
+             \dtl at constructticklistwithgapz
+               \DTLminX\DTLmaxX\dtl at xticlist\dtl at xticgap}{%
+             \dtl at constructticklistwithgap
+               \DTLminX\DTLmaxX\dtl at xticlist\dtl at xticgap}%
+         \fi
+       \fi
+       \let\dtl at xminorticlist\@empty
+       \ifDTLxminortics
+         \let\dtl at prevtick=\relax
+         \@for\dtl at nexttick:=\dtl at xticlist\do{%
+           \ifx\dtl at prevtick\relax
+           \else
+             \dtl at constructminorticklist
+                \dtl at prevtick\dtl at nexttick\dtl at scale@x\dtl at xminorticlist
+           \fi
+           \let\dtl at prevtick=\dtl at nexttick
+         }%
+       \fi
+       \ifx\dtl at xticlabels\relax
+         \settoheight{\dtl at xticlabelheight}{\dtl at xticlist}%
+       \else
+         \settoheight{\dtl at xticlabelheight}{\dtl at xticlabels}%
+        \fi
+     \else
+       \setlength{\dtl at xticlabelheight}{0pt}%
+     \fi
+     \setlength{\dtl at yticlabelwidth}{0pt}%
+     \ifDTLytics
+       \ifx\dtl at yticlist\relax
+         \ifx\dtl at yticgap\relax
+         \dtlsub{\dtl at mingap}{\number\DTLmintickgap}{\dtl at offset@y}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{\dtl at scale@y}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{65536}%
+         \dtl at constructticklist\DTLminY\DTLmaxY
+           \dtl at mingap\dtl at yticlist
+         \else
+           \DTLifFPopenbetween{0}{\DTLminY}{\DTLmaxY}{%
+             \dtl at constructticklistwithgapz
+               \DTLminY\DTLmaxY\dtl at yticlist\dtl at yticgap}{%
+             \dtl at constructticklistwithgap
+               \DTLminY\DTLmaxY\dtl at yticlist\dtl at yticgap}%
+         \fi
+       \fi
+       \let\dtl at yminorticlist\@empty
+       \ifDTLyminortics
+         \let\dtl at prevtick=\relax
+         \@for\dtl at nexttick:=\dtl at yticlist\do{%
+           \ifx\dtl at prevtick\relax
+           \else
+             \dtl at constructminorticklist
+                \dtl at prevtick\dtl at nexttick\dtl at scale@y\dtl at yminorticlist
+           \fi
+           \let\dtl at prevtick=\dtl at nexttick
+         }%
+       \fi
+       \ifx\dtl at ylabel\relax
+       \else
+         \ifx\dtl at yticlabels\relax
+           \@for\dtl at thislabel:=\dtl at yticlist\do{%
+             \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                     {\c at DTLplotroundYvar}%
+             \settowidth{\dtl at tmplength}{\dtl at thislabel}%
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \else
+           \@for\dtl at thislabel:=\dtl at yticlabels\do{%
+             \settowidth{\dtl at tmplength}{\dtl at thislabel}%
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \fi
+       \fi
+     \fi
+       \begin{tikzpicture}
+       \pgfsetxvec{\pgfpoint{1pt}{0pt}}%
+       \pgfsetyvec{\pgfpoint{0pt}{1pt}}%
+   \begin{scope}
+   \pgftransformcm{\dtl at scale@x}{0}{0}{\dtl at scale@y}%
+     {\pgfpoint{\dtl at offset@x pt}{\dtl at offset@y pt}}%
+       \let\dtlplothandlermark\@dtlplothandlermark
+       \DTLplotatbegintikz
+       \ifDTLbox
+         \draw (\DTLminX,\DTLminY) -- (\DTLmaxX,\DTLminY) --
+             (\DTLmaxX,\DTLmaxY) -- (\DTLminX,\DTLmaxY) --
+               cycle;
+       \else
+          \ifDTLxaxis
+            \expandafter\draw\expandafter[\DTLXAxisStyle]
+            (\DTLminX,\DTLminY) -- (\DTLmaxX,\DTLminY);
+          \fi
+          \ifDTLyaxis
+            \expandafter\draw\expandafter[\DTLYAxisStyle]
+            (\DTLminX,\DTLminY) -- (\DTLminX,\DTLmaxY);
+          \fi
+       \fi
+       \ifDTLgrid
+          \ifDTLxminortics
+            \@for\dtl at thistick:=\dtl at xminorticlist\do{%
+              \expandafter\draw\expandafter[\DTLminorgridstyle]
+             (\dtl at thistick,\DTLminY) -- (\dtl at thistick,\DTLmaxY);
+            }%
+          \fi
+          \ifDTLyminortics
+            \@for\dtl at thistick:=\dtl at yminorticlist\do{%
+              \expandafter\draw\expandafter[\DTLminorgridstyle]
+             (\DTLminX,\dtl at thistick) -- (\DTLmaxX,\dtl at thistick);
+            }%
+          \fi
+          \@for\dtl at thistick:=\dtl at xticlist\do{%
+            \expandafter\draw\expandafter[\DTLmajorgridstyle]
+             (\dtl at thistick,\DTLminY) -- (\dtl at thistick,\DTLmaxY);
+          }%
+          \@for\dtl at thistick:=\dtl at yticlist\do{%
+            \expandafter\draw\expandafter[\DTLmajorgridstyle]
+             (\DTLminX,\dtl at thistick) -- (\DTLmaxX,\dtl at thistick);
+          }%
+       \fi
+       \ifDTLxtics
+         \dtlsub{\dtl at ticklength}{\number\DTLticklength}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \addtolength\dtl at xticlabelheight{\DTLticklabeloffset}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\dtl at xticlabelheight}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \@for\dtl at thistick:=\dtl at xticlist\do{%
+           \let\dtl at thisticklabel\dtl at thistick
+           \ifx\dtl at xticlabels\relax
+             \dtlround{\dtl at thislabel}{\dtl at thistick}
+                     {\c at DTLplotroundXvar}%
+           \else
+             \dtl at chopfirst\dtl at xticlabels\dtl at thislabel\dtl at rest
+             \let\dtl at xticlabels=\dtl at rest
+           \fi
+           \ifDTLxticsin
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,\dtl at ticklength);
+             \draw (\dtl at thistick,\DTLminY)
+                 ++ (0,-\dtl at ticlabeloffset) node {\dtl at thislabel};
+           \else
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,-\dtl at ticklength)
+                 ++ (0,-\dtl at ticlabeloffset) node {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLxticsin
+               \draw (\dtl at thistick,\DTLmaxY) -- ++(0,-\dtl at ticklength);
+             \else
+             \draw (\dtl at thistick,\DTLmaxY) -- ++(0,\dtl at ticklength);
+             \fi
+           \fi
+         }%
+       \fi
+      \ifx\dtl at xlabel\relax
+      \else
+         \dtladd{\dtl at x}{\number\baselineskip}{\dtl at offset@y}%
+         \dtldiv{\dtl at x}{\dtl at x}{\dtl at scale@y}%
+         \dtldiv{\dtl at x}{\dtl at x}{65536}%
+         \dtladd{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at x}%
+         \dtlmul{\dtl at x}{\dtl at dx}{0.5}%
+         \draw (\DTLminX,\DTLminY) ++(\dtl at x,-\dtl at ticlabeloffset)
+            node[anchor=north] {\dtl at xlabel};
+      \fi
+      \ifDTLxminortics
+         \dtlsub{\dtl at ticklength}{\number\DTLminorticklength}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \@for\dtl at thistick:=\dtl at xminorticlist\do{%
+           \ifDTLxticsin
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,\dtl at ticklength);
+             \draw (\dtl at thistick,\DTLminY)
+                 ++ (0,-\dtl at ticlabeloffset) node[anchor=north] {\dtl at thislabel};
+           \else
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,-\dtl at ticklength)
+                 ++ (0,-\dtl at ticlabeloffset) node[anchor=north] {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLxticsin
+               \draw (\dtl at thistick,\DTLmaxY) -- ++(0,-\dtl at ticklength);
+             \else
+             \draw (\dtl at thistick,\DTLmaxY) -- ++(0,\dtl at ticklength);
+             \fi
+           \fi
+        }%
+      \fi
+      \ifDTLytics
+         \dtlsub{\dtl at ticklength}{\number\DTLticklength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \dtladd{\dtl at ticlabeloffset}{\number\DTLticklabeloffset}{0}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\DTLticklabeloffset}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \@for\dtl at thistick:=\dtl at yticlist\do{%
+           \let\dtl at thisticklabel\dtl at thistick
+           \ifx\dtl at yticlabels\relax
+             \dtlround{\dtl at thislabel}{\dtl at thistick}
+                     {\c at DTLplotroundXvar}%
+           \else
+             \dtl at chopfirst\dtl at yticlabels\dtl at thislabel\dtl at rest
+             \let\dtl at yticlabels=\dtl at rest
+           \fi
+           \ifDTLyticsin
+             \draw (\DTLminX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \draw (\DTLminX,\dtl at thistick)
+                 ++ (-\dtl at ticlabeloffset,0) node[anchor=east] {\dtl at thislabel};
+           \else
+             \draw (\DTLminX,\dtl at thistick) -- ++(-\dtl at ticklength,0)
+                 ++ (-\dtl at ticlabeloffset,0) node[anchor=east] {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLyticsin
+               \draw (\DTLmaxX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+             \else
+             \draw (\DTLmaxX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \fi
+           \fi
+         }%
+      \fi
+      \ifx\dtl at ylabel\relax
+      \else
+         \setlength{\dtl at tmplength}{\baselineskip}%
+         \addtolength{\dtl at tmplength}{\dtl at yticlabelwidth}%
+         \addtolength{\dtl at tmplength}{\DTLticklabeloffset}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\dtl at tmplength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \dtlmul{\dtl at y}{\dtl at dy}{0.5}%
+         \draw (\DTLminX,\DTLminY) ++(-\dtl at ticlabeloffset,\dtl at y)
+            node[rotate=90,anchor=south] {\dtl at ylabel};
+      \fi
+      \ifDTLyminortics
+         \dtlsub{\dtl at ticklength}{\number\DTLminorticklength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \@for\dtl at thistick:=\dtl at yminorticlist\do{%
+           \ifDTLyticsin
+             \draw (\DTLminX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+           \else
+             \draw (\DTLminX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+           \fi
+           \ifDTLbox
+             \ifDTLyticsin
+               \draw (\DTLmaxX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+             \else
+             \draw (\DTLmaxX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \fi
+           \fi
+        }%
+      \fi
+   \end{scope}
+        \@for\dtl at thisdb:=#2\do{%
+          \ifx\dtl at plotmarkcolorlist\@empty
+            \let\dtl at plotmarkcolorlist=\DTLplotmarkcolors
+          \fi
+          \dtl at chopfirst\dtl at plotmarkcolorlist\dtl at thisplotmarkcolor
+             \dtl at remainder
+          \let\dtl at plotmarkcolorlist=\dtl at remainder
+          \ifDTLshowmarkers
+            \ifx\dtl at plotmarklist\@empty
+               \let\dtl at plotmarklist=\DTLplotmarks
+            \fi
+            \dtl at chopfirst\dtl at plotmarklist\dtl at thisplotmark
+               \dtl at remainder
+            \let\dtl at plotmarklist=\dtl at remainder
+            \ifx\dtl at thisplotmark\relax
+              \let\dtl at mark=\relax
+            \else
+              \expandafter\toks@\expandafter{\dtl at thisplotmark}%
+              \ifx\dtl at thisplotmarkcolor\@empty
+                \edef\dtl at mark{\the\toks@}%
+              \else
+                \edef\dtl at mark{%
+                    \noexpand\color{\dtl at thisplotmarkcolor}%
+                  \the\toks@}%
+              \fi
+            \fi
+          \else
+            \let\dtl at mark=\relax
+          \fi
+          \ifx\dtl at plotlinecolorlist\@empty
+            \let\dtl at plotlinecolorlist=\DTLplotlinecolors
+          \fi
+          \dtl at chopfirst\dtl at plotlinecolorlist\dtl at thisplotlinecolor
+             \dtl at remainder
+          \let\dtl at plotlinecolorlist=\dtl at remainder
+          \ifDTLshowlines
+            \ifx\dtl at plotlinelist\@empty
+               \let\dtl at plotlinelist=\DTLplotlines
+            \fi
+            \dtl at chopfirst\dtl at plotlinelist\dtl at thisplotline
+               \dtl at remainder
+            \let\dtl at plotlinelist=\dtl at remainder
+            \expandafter\ifx\dtl at thisplotline\relax
+            \let\dtl at linestyle=\relax
+          \else
+            \expandafter\toks@\expandafter{\dtl at thisplotline}%
+            \ifx\dtl at thisplotlinecolor\@empty
+              \edef\dtl at linestyle{\the\toks@}%
+            \else
+              \edef\dtl at linestyle{%
+                  \noexpand\color{\dtl at thisplotlinecolor}%
+                \the\toks@}%
+            \fi
+          \fi
+        \else
+          \let\dtl at linestyle=\relax
+        \fi
+        \ifnum\dtl at legendsetting>0\relax
+          \dtl at chopfirst\dtl at legendlabels\dtl at thislabel\dtl at rest
+          \let\dtl at legendlabels=\dtl at rest
+          \expandafter\toks@\expandafter{\dtl at mark}%
+          \expandafter\@dtl at toks\expandafter{\dtl at linestyle}%
+          \edef\dtl at addtolegend{\noexpand\DTLaddtoplotlegend
+            {\the\toks@}{\the\@dtl at toks}{\dtl at thislabel}}%
+          \dtl at addtolegend
+        \fi
+        \def\dtl at stream{\pgfplotstreamstart}%
+        \@sDTLforeach[#1]{\dtl at thisdb}{\dtl at x=\dtl at xkey,%
+            \dtl at y=\dtl at ykey}{%
+          \DTLconverttodecimal{\dtl at x}{\dtl at decx}%
+          \DTLconverttodecimal{\dtl at y}{\dtl at decy}%
+          \ifthenelse{%
+            \DTLisclosedbetween{\dtl at x}{\DTLminX}{\DTLmaxX}%
+            \and
+            \DTLisclosedbetween{\dtl at y}{\DTLminY}{\DTLmaxY}%
+            }%
+            {%
+              \expandafter\toks@\expandafter{\dtl at stream}%
+              \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+              \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+              \dtlround{\dtl at decx}{\dtl at decx}{1}%
+              \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+              \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+              \dtlround{\dtl at decy}{\dtl at decy}{1}%
+              \edef\dtl at stream{\the\toks@
+                \noexpand\pgfplotstreampoint
+                 {\noexpand\pgfpointxy{\dtl at decx}{\dtl at decy}}}%
+          }{}%
+        }%
+        \expandafter\toks@\expandafter{\dtl at stream}%
+        \edef\dtl at stream{\the\toks@\noexpand\pgfplotstreamend}%
+        \ifx\dtl at linestyle\relax
+        \else
+          \begin{scope}
+          \dtl at linestyle
+          \pgfplothandlerlineto
+          \dtl at stream
+          \pgfusepath{stroke}
+          \end{scope}
+        \fi
+        \ifx\dtl at mark\relax
+        \else
+          \begin{scope}
+          \pgfplothandlermark{\dtl at mark}%
+          \dtl at stream
+          \pgfusepath{stroke}
+          \end{scope}
+        \fi
+        }%
+        \ifcase\dtl at legendsetting
+      % none
+        \or % north
+         \dtlmul{\dtl at decx}{\dtl at dx}{0.5}%
+         \dtladd{\dtl at decx}{\DTLminX}{\dtl at decx}%
+         \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(0,-\DTLlegendyoffset)
+            node[anchor=north]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % north east
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,-\DTLlegendyoffset)
+            node[anchor=north east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % east
+         \dtlmul{\dtl at decy}{\dtl at dy}{0.5}%
+         \dtladd{\dtl at decy}{\DTLminY}{\dtl at decy}%
+         \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,0)
+            node[anchor=east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south east
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,\DTLlegendyoffset)
+            node[anchor=south east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south
+         \dtlmul{\dtl at decx}{\dtl at dx}{0.5}%
+         \dtladd{\dtl at decx}{\DTLminX}{\dtl at decx}%
+         \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(0,\DTLlegendyoffset)
+            node[anchor=south]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south west
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,\DTLlegendyoffset)
+            node[anchor=south west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % west
+         \dtlmul{\dtl at decy}{\dtl at dy}{0.5}%
+         \dtladd{\dtl at decy}{\DTLminY}{\dtl at decy}%
+         \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,0)
+            node[anchor=west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % north west
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,-\DTLlegendyoffset)
+            node[anchor=north west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \fi
+       \pgftransformcm{\dtl at scale@x}{0}{0}{\dtl at scale@y}%
+         {\pgfpoint{\dtl at offset@x pt}{\dtl at offset@y pt}}%
+       \let\dtlplothandlermark\@dtlplothandlermark
+        \DTLplotatendtikz
+       \end{tikzpicture}
+    \fi
+  \fi
+\egroup
+}
+\def\dtl at getbounds#1,#2,#3,#4\@nil{%
+\def\DTLminX{#1}%
+\def\DTLminY{#2}%
+\def\DTLmaxX{#3}%
+\def\DTLmaxY{#4}%
+\dtlifnumgt{\DTLminX}{\DTLmaxX}
+{%
+ \PackageError{dataplot}{Min X > Max X in bounds #1,#2,#3,#4}{%
+ The bounds must be specified as minX,minY,maxX,maxY}%
+}{}%
+\dtlifnumgt{\DTLminY}{\DTLmaxY}
+{%
+ \PackageError{dataplot}{Min Y > Max Y in bounds #1,#2,#3,#4}{%
+ The bounds must be specified as minX,minY,maxX,maxY}%
+}{}%
+}
+\newcommand*{\dtl at constructticklist}[4]{%
+  \DTLifFPopenbetween{0}{#1}{#2}%
+  {%
+    \dtlsub{\@dtl at width}{0}{#1}%
+    \dtldiv{\@dtl at neggap}{\@dtl at width}{10}%
+    \dtlifnumlt{\@dtl at neggap}{#3}%
+    {%
+      \edef\@dtl at neggap{#3}%
+    }%
+    {}%
+    \dtldiv{\@dtl at posgap}{#2}{10}%
+    \dtlifnumlt{\@dtl at posgap}{#3}%
+    {%
+      \edef\@dtl at posgap{#3}%
+    }%
+    {}%
+    \dtlmax{\@dtl at gap}{\@dtl at neggap}{\@dtl at posgap}%
+    \dtlifnumgt{\@dtl at gap}{\@dtl at width}%
+    {}%
+    {%
+      \dtl at constructticklistwithgapz{#1}{#2}{#4}{\@dtl at gap}%
+    }%
+  }%
+  {%
+    \dtlsub{\@dtl at width}{#2}{#1}%
+    \dtldiv{\@dtl at gap}{\@dtl at width}{10}%
+    \dtlifnumlt{\@dtl at gap}{#3}%
+    {%
+      \dtlifnumgt{#3}{\@dtl at width}%
+      {%
+         \def#4{#1,#2}%
+      }%
+      {%
+        \dtl at constructticklistwithgap{#1}{#2}{#4}{#3}%
+      }
+    }%
+    {%
+      \dtl at constructticklistwithgap{#1}{#2}{#4}{\@dtl at gap}%
+    }%
+  }%
+}
+\newcommand*{\dtl at constructticklistwithgap}[4]{%
+\edef\@dtl at thistick{#1}%
+\edef#3{#1}%
+\dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+\whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{#2}}{%
+  \expandafter\toks@\expandafter{\@dtl at thistick}%
+  \edef#3{#3,\the\toks@}%
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+}%
+\expandafter\toks@\expandafter{#2}%
+\edef#3{#3,\the\toks@}%
+}
+\newcommand*{\dtl at constructticklistwithgapz}[4]{%
+  \edef\@dtl at thistick{0}%
+  \edef#3{0}%
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+  \whiledo{\DTLisFPopenbetween{\@dtl at thistick}{0}{#2}}%
+  {%
+    \expandafter\toks@\expandafter{\@dtl at thistick}%
+    \edef#3{#3,\the\toks@}%
+    \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+  }%
+  \expandafter\toks@\expandafter{#2}%
+  \edef#3{#3,\the\toks@}%
+  \dtlifnumeq{#1}{0}%
+  {}%
+  {%
+    \edef\@dtl at thistick{0}%
+    \dtlsub{\@dtl at thistick}{\@dtl at thistick}{#4}%
+    \whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{0}}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at thistick}%
+      \edef#3{\the\toks@,#3}%
+      \dtlsub{\@dtl at thistick}{\@dtl at thistick}{#4}%
+    }%
+    \expandafter\toks@\expandafter{#1}%
+    \edef#3{\the\toks@,#3}%
+  }%
+}
+\newcommand*{\dtl at constructminorticklist}[4]{%
+  \dtlsub{\@dtl at width}{#2}{#1}%
+  \dtlmul{\@dtl at width}{\@dtl at width}{#3}%
+  \dtldiv{\@dtl at gap}{\@dtl at width}{10}%
+  \setlength\dtl at tmplength{\@dtl at gap sp}%
+  \ifdim\dtl at tmplength<\DTLminminortickgap
+    \dtldiv{\@dtl at gap}{\@dtl at width}{4}%
+    \setlength\dtl at tmplength{\@dtl at gap sp}%
+    \ifdim\dtl at tmplength<\DTLminminortickgap
+      \dtldiv{\@dtl at gap}{\@dtl at width}{2}%
+      \setlength\dtl at tmplength{\@dtl at gap sp}%
+      \ifdim\dtl at tmplength<\DTLminminortickgap
+        \let\@dtl at gap=\@dtl at width
+      \fi
+    \fi
+  \fi
+  \dtldiv{\@dtl at gap}{\@dtl at gap}{#3}%
+  \dtl at constructticklistwithgapex{#1}{#2}{\dtl at tmp}{\@dtl at gap}%
+  \ifx#4\@empty
+    \let#4=\dtl at tmp
+  \else
+    \expandafter\toks@\expandafter{#4}%
+    \edef#4{#4,\dtl at tmp}%
+  \fi
+}
+\newcommand*{\dtl at constructticklistwithgapex}[4]{%
+\edef\@dtl at thistick{#1}%
+\let#3=\@empty
+\dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+\whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{#2}}{%
+  \expandafter\toks@\expandafter{\@dtl at thistick}%
+  \ifx#3\@empty
+    \edef#3{\the\toks@}%
+  \else
+    \edef#3{#3,\the\toks@}%
+  \fi
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+}%
+}
+\newcommand*{\DTLaddtoplotlegend}[3]{%
+\def\dtl at legendline{}%
+\ifx\relax#2\relax
+\else
+  \toks@{#2%
+  \pgfpathmoveto{\pgfpoint{-10pt}{0pt}}%
+  \pgfpathlineto{\pgfpoint{10pt}{0pt}}%
+  \pgfusepath{stroke}}%
+  \edef\dtl at legendline{\the\toks@}%
+\fi
+\ifx\relax#1\relax
+\else
+  \toks@{#1}%
+  \expandafter\@dtl at toks\expandafter{\dtl at legendline}%
+  \edef\dtl at legendline{\the\@dtl at toks\the\toks@}%
+\fi
+\expandafter\toks@\expandafter{\dtl at legendline}%
+\ifx\dtl at legend\@empty
+  \xdef\dtl at legend{\noexpand\tikz\the\toks@; \noexpand& #3}%
+\else
+  \expandafter\@dtl at toks\expandafter{\dtl at legend}%
+  \xdef\dtl at legend{\the\@dtl at toks\noexpand\\%
+    \noexpand\tikz\the\toks@; \noexpand& #3}%
+\fi
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</dataplot-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datatool-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datatool-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifthen}
+\RequirePackage{xfor}
+\RequirePackage{substr}
+\RequirePackage{etoolbox}
+\newcommand*{\@dtl at separator}{,}
+\newcommand*{\DTLsetseparator}[1]{%
+  \renewcommand*{\@dtl at separator}{#1}%
+  \@dtl at construct@lopoffs
+}
+\begingroup
+\catcode`\^^I12
+\gdef\DTLsettabseparator{%
+  \catcode`\^^I12
+  \DTLsetseparator{^^I}%
+}
+\gdef\DTLmaketabspace{%
+  \catcode`\^^I10\relax
+}
+\endgroup
+\begingroup
+\catcode`\"12\relax
+\gdef\@dtl at delimiter{"}
+\endgroup
+\newcommand*\DTLsetdelimiter[1]{%
+  \renewcommand*{\@dtl at delimiter}{#1}%
+  \@dtl at construct@lopoffs
+}
+\edef\@dtl at construct@lopoff#1#2{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at lopoff#1##1##2\noexpand\to##3##4{%
+      \noexpand\ifx#2##1\noexpand\relax
+        \noexpand\ifstrempty{##1}%
+        {\noexpand\@dtl at qlopoff#1{}##2\noexpand\to##3##4\relax}%
+        {%
+          \noexpand\dtl at ifsingle{##1}%
+          {\noexpand\@dtl at qlopoff#1##1##2\noexpand\to##3##4\relax}%
+          {\noexpand\@dtl at qlopoff#1{##1}##2\noexpand\to##3##4\relax}%
+        }%
+      \noexpand\else
+        \noexpand\ifstrempty{##1}%
+        {\noexpand\@dtl at lop@ff#1{}##2\noexpand\to##3##4\relax}%
+        {%
+          \noexpand\dtl at ifsingle{##1}%
+          {\noexpand\@dtl at lop@ff#1##1##2\noexpand\to##3##4\relax}%
+          {\noexpand\@dtl at lop@ff#1{##1}##2\noexpand\to##3##4\relax}%
+        }%
+      \noexpand\fi
+  }%
+}
+\edef\@dtl at construct@qlopoff#1#2{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at qlopoff#1#2##1#2#1##2\noexpand\to##3##4{%
+      \noexpand\def##4{##1}%
+      \noexpand\DTLsubstituteall{##4}{#2#2}{#2}%
+      \noexpand\edef\noexpand\@dtl at dosubs{%
+        \noexpand\noexpand\noexpand\DTLsubstituteall{\noexpand\noexpand##4}%
+        {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname#2}%
+        {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname}%
+      }%
+      \noexpand\@dtl at dosubs
+      \noexpand\def##3{#1##2}%
+  }%
+}
+\edef\@dtl at construct@lop at ff#1{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at lop@ff#1##1#1##2\noexpand\to##3##4{%
+      \noexpand\def##4{##1}%
+      \noexpand\def##3{#1##2}%
+  }%
+}
+\newcommand{\@dtl at construct@lopoffs}{%
+  \edef\@dtl at chars{{\@dtl at separator}{\@dtl at delimiter}}%
+  \expandafter\@dtl at construct@lopoff\@dtl at chars
+  \expandafter\@dtl at construct@qlopoff\@dtl at chars
+  \expandafter\@dtl at construct@lop at ff\expandafter{\@dtl at separator}%
+}
+\define at key{datatool.sty}{separator}{%
+  \DTLsetseparator{#1}%
+}
+\define at key{datatool.sty}{delimiter}{%
+  \DTLsetdelimiter{#1}%
+}
+\define at boolkey{datatool.sty}[dtl]{verbose}[true]{}
+\define at choicekey{datatool.sty}{math}[\val\nr]{fp,pgfmath}{%
+  \renewcommand*\@dtl at mathprocessor{#1}%
+}
+\providecommand*{\@dtl at mathprocessor}{fp}
+\newcommand*{\@dtl at set@options}{}
+\define at choicekey{datatool.sty}{utf8}{true,false}[true]{%
+  \renewcommand*{\@dtl at set@options}{\setbool{@dtl at utf8}{#1}}%
+}
+\ProcessOptionsX
+\@dtl at construct@lopoffs
+\RequirePackage{datatool-base}[=v2.32]
+\@dtl at set@options
+\DeclareRobustCommand{\DTLpar}{\par}
+\newcommand*{\DTLnewdb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \PackageError{datatool}{Database `#1' already exists}{}%
+  }%
+  {%
+    \dtl at message{Creating database `#1'}%
+    \expandafter\newtoks\csname dtldb@#1\endcsname
+    \expandafter\newtoks\csname dtlkeys@#1\endcsname{}%
+    \expandafter\newcount\csname dtlrows@#1\endcsname
+    \expandafter\newcount\csname dtlcols@#1\endcsname
+  }%
+}
+\newcommand*{\DTLcleardb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \csname dtldb@#1\endcsname{}%
+    \csname dtlkeys@#1\endcsname{}%
+    \csname dtlrows@#1\endcsname=0\relax
+    \csname dtlcols@#1\endcsname=0\relax
+  }%
+  {%
+    \PackageError{Can't clear database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLdeletedb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\let\csname dtldb@#1\endcsname\undefined
+    \expandafter\let\csname dtlkeys@#1\endcsname\undefined
+    \expandafter\let\csname dtlrows@#1\endcsname\undefined
+    \expandafter\let\csname dtlcols@#1\endcsname\undefined
+  }%
+  {%
+    \PackageError{Can't delete database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLgnewdb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \PackageError{datatool}{Database `#1' already exists}{}%
+  }%
+  {%
+    \dtl at message{Creating database `#1'}%
+    \expandafter\global\expandafter\newtoks\csname dtldb@#1\endcsname
+    \expandafter\global\expandafter\newtoks\csname dtlkeys@#1\endcsname{}%
+    \expandafter\global\expandafter\newcount\csname dtlrows@#1\endcsname
+    \expandafter\global\expandafter\newcount\csname dtlcols@#1\endcsname
+  }%
+}
+\newcommand*{\DTLgdeletedb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\global\expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\global\expandafter\let\csname dtldb@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlkeys@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlrows@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlcols@#1\endcsname\undefined
+  }%
+  {%
+    \PackageError{Can't delete database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLgcleardb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\global\expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\global\csname dtldb@#1\endcsname{}%
+    \expandafter\global\csname dtlkeys@#1\endcsname{}%
+    \expandafter\global\csname dtlrows@#1\endcsname=0\relax
+    \expandafter\global\csname dtlcols@#1\endcsname=0\relax
+  }%
+  {%
+    \PackageError{Can't clear database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLrowcount}[1]{%
+  \expandafter\number\csname dtlrows@#1\endcsname
+}
+\newcommand*{\DTLcolumncount}[1]{%
+  \expandafter\number\csname dtlcols@#1\endcsname
+}
+\newcommand{\DTLifdbempty}[3]{%
+  \DTLifdbexists{#1}%
+    {\@DTLifdbempty{#1}{#2}{#3}}%
+    {\PackageError{Can't check if database `#1' is empty:
+       database doesn't exist}{}{}}%
+}
+\newcommand{\@DTLifdbempty}[3]{%
+  \expandafter\ifnum\csname dtlrows@#1\endcsname=0\relax
+    #2%
+  \else
+    #3%
+  \fi
+}
+\newcommand*{\DTLnewrow}{%
+  \@ifstar\@sDTLnewrow\@DTLnewrow
+}
+\newcommand*{\@DTLnewrow}[1]{%
+\DTLifdbexists{#1}%
+  {\@sDTLnewrow{#1}}%
+  {\PackageError{datatool}{Can't add new row to database `#1':
+     database doesn't exist}{}}%
+}
+\newcommand*{\@sDTLnewrow}[1]{%
+  \global\advance\csname dtlrows@#1\endcsname by 1\relax
+  \@dtl at toks@gput at right@cx{dtldb@#1}{%
+     \noexpand\db at row@elt at w%
+       \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+       \noexpand\db at row@id at end@%
+       \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+       \noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+  }%
+  \dtl at message{New row added to database `#1'}%
+}
+\newcount\dtlcolumnnum
+\newcount\dtlrownum
+\newcommand*{\DTLifhaskey}{\@ifstar\@sDTLifhaskey\@DTLifhaskey}
+\newcommand{\@DTLifhaskey}[4]{%
+   \DTLifdbexists{#1}%
+   {%
+     \@sDTLifhaskey{#1}{#2}{#3}{#4}%
+   }%
+   {%
+     \PackageError{datatool}{Database `#1' doesn't exist}{}%
+   }%
+}
+\newcommand{\@sDTLifhaskey}[4]{%
+  \@ifundefined{dtl at ci@#1@#2}%
+  {%
+    #4%
+  }%
+  {%
+    #3%
+  }%
+}
+\newcommand*{\DTLgetcolumnindex}{%
+  \@ifstar\@sdtl at getcolumnindex\@dtl at getcolumnindex
+}
+\newcommand*{\@dtl at getcolumnindex}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#3}%
+    {%
+      \@sdtl at getcolumnindex{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#2' doesn't contain
+       key `#3'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtl at getcolumnindex}[3]{%
+  \expandafter\let\expandafter#1\csname dtl at ci@#2@#3\endcsname
+}
+\newcommand*{\dtlcolumnindex}[2]{%
+  \csname dtl at ci@#1@#2\endcsname
+}
+\newcommand*{\DTLgetkeyforcolumn}{%
+  \@ifstar\@sdtlgetkeyforcolumn\@dtlgetkeyforcolumn}
+\newcommand*{\@dtlgetkeyforcolumn}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \ifnum#3<1\relax
+      \PackageError{datatool}{Invalid column index \number#3}{%
+      Column indices start at 1}%
+    \else
+      \expandafter\ifnum\csname dtlcols@#2\endcsname<#3\relax
+        \PackageError{datatool}{Index \number#3\space out of
+        range for database `#2'}{Database `#2' only has
+        \expandafter\number\csname dtlcols@#2\endcsname\space
+        columns}%
+      \else
+        \@sdtlgetkeyforcolumn{#1}{#2}{#3}%
+      \fi
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exists}{}%
+  }%
+}
+\newcommand*{\@sdtlgetkeyforcolumn}[3]{%
+  \edef\@dtl at dogetkeyforcolumn{\noexpand\@dtl at getkeyforcolumn
+    {\noexpand#1}{#2}{\number#3}}%
+  \@dtl at dogetkeyforcolumn
+}
+\newcommand*{\@dtl at getkeyforcolumn}[3]{%
+  \def\@dtl at get@keyforcolumn##1% before stuff
+    \db at plist@elt at w% start of block
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at key@id at w ##2\db at key@id at end@% key
+    \db at type@id at w ##3\db at type@id at end@% data type
+    \db at header@id at w ##4\db at header@id at end@% header
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at plist@elt at end@% end of block
+    ##5\q at nil{\def#1{##2}}%
+  \edef\@dtl at tmp{\expandafter\the\csname dtlkeys@#2\endcsname}%
+  \expandafter\@dtl at get@keyforcolumn\@dtl at tmp
+    \db at plist@elt at w% start of block
+    \db at col@id at w #3\db at col@id at end@ %index
+    \db at key@id at w \@nil\db at key@id at end@% key
+    \db at type@id at w \db at type@id at end@% data type
+    \db at header@id at w \db at header@id at end@% header
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at plist@elt at end@% end of block
+    \q at nil
+}
+\def\DTLunsettype{}
+\def\DTLstringtype{0}
+\def\DTLinttype{1}
+\def\DTLrealtype{2}
+\def\DTLcurrencytype{3}
+\newcommand*{\DTLgetdatatype}{%
+  \@ifstar\@sdtlgetdatatype\@dtlgetdatatype
+}
+\newcommand*{\@dtlgetdatatype}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#3}%
+    {%
+      \@sdtlgetdatatype{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Key `#3' undefined in database `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtlgetdatatype}[3]{%
+  \edef\@dtl at dogetdata{\noexpand\@dtl at getdatatype{\noexpand#1}%
+   {\expandafter\the\csname dtlkeys@#2\endcsname}%
+   {\dtlcolumnindex{#2}{#3}}}%
+  \@dtl at dogetdata
+}
+\newcommand*{\@dtl at getdatatype}[3]{%
+  \def\@dtl at get@keydata##1% stuff before
+    \db at plist@elt at w% start of key block
+     \db at col@id at w #3\db at col@id at end@% column index
+      \db at key@id at w ##2\db at key@id at end@% key id
+      \db at type@id at w ##3\db at type@id at end@% data type
+      \db at header@id at w ##4\db at header@id at end@% header
+     \db at col@id at w #3\db at col@id at end@% column index
+    \db at plist@elt at end@% end of key block
+    ##5% stuff afterwards
+    \q at nil{\def#1{##3}}%
+  \@dtl at get@keydata#2\q at nil
+}
+\newcommand*{\@dtl at getprops}[7]{%
+  \def\@dtl at get@keydata##1% stuff before
+    \db at plist@elt at w% start of key block
+     \db at col@id at w #7\db at col@id at end@% column index
+      \db at key@id at w ##2\db at key@id at end@% key id
+      \db at type@id at w ##3\db at type@id at end@% data type
+      \db at header@id at w ##4\db at header@id at end@% header
+     \db at col@id at w #7\db at col@id at end@% column index
+    \db at plist@elt at end@% end of key block
+    ##5% stuff afterwards
+    \q at nil{%
+      \def#1{##2}% key
+      \def#2{##3}% data type
+      #3={##4}% header
+      #4={##1}% before stuff
+      #5={##5}% after stuff
+    }%
+  \@dtl at get@keydata#6\q at nil
+}
+\newtoks\@dtl at before
+\newtoks\@dtl at after
+\newtoks\@dtl at colhead
+\newcommand*{\DTLaddcolumn}{%
+   \@ifstar\@sDTLaddcolumn\@DTLaddcolumn
+}
+\newcommand{\@DTLaddcolumn}[2]{%
+  \DTLifdbexists{#1}%
+    {\@dtl at updatekeys{#1}{#2}{}}%
+    {\PackageError{datatool}{Can't add new column to database `#1':
+      database doesn't exist}{}}%
+}
+\newcommand{\s at DTLaddcolumn}[2]{%
+  \@dtl at updatekeys{#1}{#2}{}%
+}
+\newcommand*{\@dtl at updatekeys}[3]{%
+  \@sDTLifhaskey{#1}{#2}%
+  {%
+    \expandafter\dtlcolumnnum\expandafter
+      =\dtlcolumnindex{#1}{#2}\relax
+    \edef\@dtl at dogetprops{\noexpand\@dtl at getprops
+      {\noexpand\@dtl at key}{\noexpand\@dtl at type}%
+      {\noexpand\@dtl at colhead}{\noexpand\@dtl at before}%
+      {\noexpand\@dtl at after}{\the\csname dtlkeys@#1\endcsname}%
+      {\number\dtlcolumnnum}}%
+    \@dtl at dogetprops
+    \ifstrempty{#3}%
+    {%
+    }%
+    {%
+      \let\@dtl at oldtype\@dtl at type
+      \@dtl at checknumerical{#3}%
+      \ifdefempty{\@dtl at type}%
+      {%
+        \edef\@dtl at type{\number\@dtl at datatype}%
+      }%
+      {%
+        \ifcase\@dtl at datatype % string
+          \def\@dtl at type{0}%
+        \or % int
+        \or % real
+          \ifnum\@dtl at type=1\relax
+            \def\@dtl at type{2}%
+          \fi
+        \or % currency
+          \ifnum\@dtl at type>0\relax
+            \def\@dtl at type{3}%
+          \fi
+        \fi
+      }%
+      \ifx\@dtl at oldtype\@dtl at type
+      \else
+        \@dtl at toks@gconcat at middle@cx{dtlkeys@#1}%
+        {\@dtl at before}%
+        {%
+          \noexpand\db at plist@elt at w% start of key block
+            \noexpand\db at col@id at w \the\dtlcolumnnum
+              \noexpand\db at col@id at end@% column index
+            \noexpand\db at key@id at w #2\noexpand\db at key@id at end@% key id
+            \noexpand\db at type@id at w \@dtl at type
+              \noexpand\db at type@id at end@% data type
+            \noexpand\db at header@id at w \the\@dtl at colhead
+              \noexpand\db at header@id at end@% header
+            \noexpand\db at col@id at w \the\dtlcolumnnum
+              \noexpand\db at col@id at end@% column index
+            \noexpand\db at plist@elt at end@% end of key block
+        }%
+        {\@dtl at after}%
+      \fi
+    }%
+  }%
+  {%
+    \expandafter\global\expandafter\advance
+      \csname dtlcols@#1\endcsname by 1\relax
+    \dtlcolumnnum=\csname dtlcols@#1\endcsname\relax
+    \expandafter\xdef\csname dtl at ci@#1@#2\endcsname{%
+      \number\dtlcolumnnum}%
+    \ifstrempty{#2}%
+    {%
+      \edef\@dtl at type{}% don't know data type yet
+    }%
+    {%
+      \@dtl at checknumerical{#3}%
+      \edef\@dtl at type{\number\@dtl at datatype}%
+    }%
+    \@dtl at toks@gput at right@cx{dtlkeys@#1}%
+    {%
+      \noexpand\db at plist@elt at w
+      \noexpand\db at col@id at w \the\dtlcolumnnum
+        \noexpand\db at col@id at end@
+      \noexpand\db at key@id at w #2\noexpand\db at key@id at end@
+      \noexpand\db at type@id at w \@dtl at type
+        \noexpand\db at type@id at end@
+      \noexpand\db at header@id at w #2\noexpand\db at header@id at end@
+      \noexpand\db at col@id at w \the\dtlcolumnnum
+        \noexpand\db at col@id at end@
+      \noexpand\db at plist@elt at end@
+    }%
+  }%
+}
+\newcommand*{\DTLsetheader}{\@ifstar\@sDTLsetheader\@DTLsetheader}
+\newcommand*{\@DTLsetheader}[3]{%
+  \DTLifdbexists{#1}%
+  {%
+    \@sDTLifhaskey{#1}{#2}%
+    {%
+      \@sDTLsetheader{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#1' doesn't contain key
+      `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sDTLsetheader}[3]{%
+  \expandafter\dtlcolumnnum\expandafter
+    =\dtlcolumnindex{#1}{#2}\relax
+  \@dtl at setheaderforindex{#1}{\dtlcolumnnum}{#3}%
+}
+\newcommand*{\@dtl at setheaderforindex}[3]{%
+  \edef\@dtl at dogetprops{\noexpand\@dtl at getprops
+    {\noexpand\@dtl at key}{\noexpand\@dtl at type}%
+    {\noexpand\@dtl at colhead}{\noexpand\@dtl at before}%
+    {\noexpand\@dtl at after}{\the\csname dtlkeys@#1\endcsname}%
+    {\number#2}}%
+  \@dtl at dogetprops
+  \@dtl at colhead={#3}%
+  \edef\@dtl at colnum{\number#2}\relax
+  \@dtl at toks@gconcat at middle@cx{dtlkeys@#1}%
+  {\@dtl at before}%
+  {%
+    \noexpand\db at plist@elt at w% start of block
+      \noexpand\db at col@id at w \@dtl at colnum
+        \noexpand\db at col@id at end@% index
+      \noexpand\db at key@id at w \@dtl at key\noexpand\db at key@id at end@% key
+      \noexpand\db at type@id at w \@dtl at type
+        \noexpand\db at type@id at end@% data type
+      \noexpand\db at header@id at w \the\@dtl at colhead
+        \noexpand\db at header@id at end@% header
+      \noexpand\db at col@id at w \@dtl at colnum
+        \noexpand\db at col@id at end@% index
+    \noexpand\db at plist@elt at end@% end of block
+  }%
+  {\@dtl at after}%
+}
+\newcommand*{\dtlexpandnewvalue}{%
+  \def\@dtl at setnewvalue##1{\protected at edef\@dtl at tmp{##1}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at tmp}}%
+}
+\newcommand*{\dtlnoexpandnewvalue}{%
+  \def\@dtl at setnewvalue##1{\@dtl at toks{##1}}%
+}
+\dtlnoexpandnewvalue
+\newcommand{\DTLnewdbentry}{%
+   \@ifstar\@sDTLnewdbentry\@DTLnewdbentry
+}
+\newcommand{\@DTLnewdbentry}[3]{%
+  \DTLifdbexists{#1}%
+    {\@sDTLnewdbentry{#1}{#2}{#3}}%
+    {\PackageError{datatool}{Can't add new entry to database `#1':
+      database doesn't exist}{}}%
+}
+\newcommand*{\@sDTLnewdbentry}[3]{%
+  \@dtl at updatekeys{#1}{#2}{#3}%
+  \expandafter\dtlcolumnnum\expandafter
+    =\dtlcolumnindex{#1}{#2}\relax
+  \edef\dtl at dogetrow{\noexpand\dtlgetrow{#1}%
+    {\number\csname dtlrows@#1\endcsname}}%
+  \dtl at dogetrow
+  \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+     {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+  }%
+  \dtl at dogetentry
+  \ifx\dtl at entry\dtlnovalue
+    \@dtl at setnewvalue{#3}%
+    \@dtl at toks@gconcat at middle@cx{dtldb@#1}%
+    {\dtlbeforerow}%
+    {%
+      \noexpand\db at row@elt at w%
+      \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+        \noexpand\db at row@id at end@%
+      \the\dtlcurrentrow
+      \noexpand\db at col@id at w \number\dtlcolumnnum
+        \noexpand\db at col@id at end@%
+          \noexpand\db at col@elt at w \the\@dtl at toks
+            \noexpand\db at col@elt at end@%
+      \noexpand\db at col@id at w \number\dtlcolumnnum
+        \noexpand\db at col@id at end@%
+      \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+        \noexpand\db at row@id at end@%
+      \noexpand\db at row@elt at end@%
+    }%
+    {\dtlafterrow}%
+    \dtl at message{Added #2\space -> #3\space to database `#1'}%
+  \else
+    \PackageError{datatool}{Can't add entry with ID `#2' to
+      current row of database `#1'}{There is already an entry with
+      this ID in the current row}%
+  \fi
+}
+\newcommand{\DTLifdbexists}[3]{%
+  \@ifundefined{dtldb@#1}{#3}{#2}}
+\newcommand*{\DTLassign}[3]{%
+  \DTLifdbexists{#1}
+  {%
+    {%
+      \dtlgetrow{#1}{#2}%
+      \@dtl at assign{#3}{#1}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\DTLassignfirstmatch}[4]{%
+  \dtl at assignfirstmatch{#3}{#1}{#2}{#4}%
+}
+\newcommand*{\xDTLassignfirstmatch}[4]{%
+  \protected at edef\@dtl at asg@value{\expandonce{#3}}%
+  \expandafter\dtl at assignfirstmatch\expandafter
+   {\@dtl at asg@value}{#1}{#2}{#4}%
+}
+\newcommand*{\dtl at assignfirstmatch}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    {%
+      \dtlgetrowindex{\dtl at asg@rowidx}{#2}{\dtlcolumnindex{#2}{#3}}{#1}%
+      \ifx\dtl at asg@rowidx\dtlnovalue
+        \PackageError{datatool}{No match found for
+          \string\DTLassignfirstmatch{#2}{#3}{#1}{#4}}{}%
+      \else
+        \dtlgetrow{#2}{\dtl at asg@rowidx}%
+        \@dtl at assign{#4}{#2}%
+      \fi
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@dtl at assign}[2]{%
+  \ifstrempty{#1}{}%
+  {%
+    \@dtl at assigncmd#1,\@nil\@@{#2}%
+  }%
+}
+\def\@dtl at assigncmd#1#2=#3,#4\@@#5{%
+  \edef\@dtl at dbname{#5}%
+  \@sDTLifhaskey{#5}{#3}%
+  {%
+    \edef\@dtl at dogetentry{%
+      \noexpand\dtlgetentryfromcurrentrow
+        {\noexpand#1}{\dtlcolumnindex{#5}{#3}}}%
+    \@dtl at dogetentry
+    \ifdefequal{#1}{\dtlnovalue}%
+    {%
+      \@@dtl at setnull{#1}{#3}%
+    }%
+    {}%
+    \global\let#1=#1\relax
+  }%
+  {%
+    \PackageError{datatool}{Can't assign \string#1\space: there
+     is no key `#3' in data base `#5'}{}%
+    \global\let#1\DTLstringnull
+  }%
+  \def\dtl at tmp{#4}%
+  \ifx\@nnil\dtl at tmp
+    \let\@dtl at next\@dtl at assigncmdnoop
+  \else
+    \let\@dtl at next\@dtl at assigncmd
+  \fi
+  \@dtl at next#4\@@{#5}%
+}
+\def\@dtl at assigncmdnoop#1\@@#2{}
+\newcommand*{\@dtl at setnull}[2]{%
+  \@sDTLifhaskey{\@dtl at dbname}{#2}%
+  {%
+    \@@dtl at setnull{#1}{#2}%
+  }%
+  {%
+    \global\let#1=\DTLstringnull
+  }%
+}
+\newcommand*{\@@dtl at setnull}[2]{%
+  \@sdtlgetdatatype{\@dtl at type}{\@dtl at dbname}{#2}%
+  \ifnum0\@dtl at type=0\relax
+    \global\let#1=\DTLstringnull
+  \else
+    \global\let#1=\DTLnumbernull
+  \fi
+}
+\newcommand*{\DTLstringnull}{\@dtlstringnull}
+\newcommand*{\@dtlstringnull}{NULL}
+\newcommand*{\DTLnumbernull}{\@dtlnumbernull}
+\newcommand*{\@dtlnumbernull}{0}
+\newcommand*{\DTLifnull}[3]{%
+  \ifx#1\dtlnovalue
+    #2%
+  \else
+    \ifx#1\DTLstringnull
+      #2%
+    \else
+      \ifx#1\DTLnumbernull
+        #2%
+      \else
+        #3%
+      \fi
+    \fi
+  \fi
+}
+\newcommand*{\DTLifnullorempty}[3]{%
+  \ifdefempty{#1}{#2}{\DTLifnull{#1}{#2}{#3}}%
+}
+\def\@dtlnovalue{Undefined Value}
+\def\dtlnovalue{\@dtlnovalue}
+\newcommand*{\DTLgetkeydata}{%
+  \@ifstar\@sdtlgetkeydata\@dtlgetkeydata
+}
+\newcommand*{\@dtlgetkeydata}[5]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#1}%
+    {%
+      \@sdtlgetkeydata{#1}{#2}{#3}{#4}{#5}%
+    }%
+    {%
+      \PackageError{datatool}{Key `#1' not defined in database
+        `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtlgetkeydata}[5]{%
+  \@sdtl at getcolumnindex{#3}{#2}{#1}%
+  \edef\@dtl at dogetkeydata{\noexpand\@dtl at getprops
+    {\noexpand\@dtl at key}{\noexpand#4}{\noexpand\@dtl at colhead}%
+    {\noexpand\@dtl at before}{\noexpand\@dtl at after}%
+    {\expandafter\the\csname dtlkeys@#2\endcsname}%
+    {#3}}%
+  \@dtl at dogetkeydata
+  \edef#5{\the\@dtl at toks}%
+}
+\newcommand{\dtl at gathervalues}[3][key]{%
+  \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#2}\do
+  {%
+    \dtlgetentryfromrow{\@dtl at tmp}{\@dtl at col}{#3}%
+    \ifx\@dtl at tmp\dtlnovalue
+      \@dtl at setnull{\@dtl at tmp}{\@dtl at key}%
+    \fi
+    \expandafter\let\csname @dtl@#1@\@dtl at key\endcsname\@dtl at tmp
+  }%
+}
+\newcommand{\dtl at g@gathervalues}[3][key]{%
+  \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#2}\do
+  {%
+    \dtlgetentryfromrow{\@dtl at tmp}{\@dtl at col}{#3}%
+    \ifx\@dtl at tmp\dtlnovalue
+      \@dtl at setnull{\@dtl at tmp}{\@dtl at key}%
+    \fi
+    \expandafter\global
+      \expandafter\let\csname @dtl@#1@\@dtl at key\endcsname\@dtl at tmp
+  }%
+}
+\newtoks\dtlcurrentrow
+\newtoks\dtlbeforerow
+\newtoks\dtlafterrow
+
+\newcommand*{\dtlgetrow}[2]{%
+  \dtlrownum=#2\relax
+  \edef\dtldbname{#1}%
+  \expandafter\toks@\expandafter=\csname dtldb@#1\endcsname
+  \edef\@dtl at dogetrow{\noexpand\@dtlgetrow{\the\toks@}{\number#2}}%
+  \@dtl at dogetrow
+}
+\newcommand{\edtlgetrowforvalue}[3]{%
+  \protected at edef\@dtl at dogetrowforvalue{%
+    \noexpand\dtlgetrowforvalue{#1}{#2}{#3}}%
+  \@dtl at dogetrowforvalue
+}
+\newcommand{\DTLfetch}[4]{%
+  \edtlgetrowforvalue{#1}{\dtlcolumnindex{#1}{#2}}{#3}%
+  \dtlgetentryfromcurrentrow{\dtlcurrentvalue}{\dtlcolumnindex{#1}{#4}}%
+  \dtlcurrentvalue
+}
+\newcommand*{\dtlgetrowforvalue}[3]{%
+  \dtlgetrowindex{\dtl at rowidx}{#1}{#2}{#3}%
+  \ifx\dtl at rowidx\dtlnovalue
+    \PackageError{datatool}{No row found in database `#1' for
+     column `\number#2' matching `#3'}{}%
+  \else
+    \dtlrownum=\dtl at rowidx\relax
+    \edef\dtldbname{#1}%
+    \expandafter\toks@\expandafter=\csname dtldb@#1\endcsname
+    \edef\@dtl at dogetrow{\noexpand\@dtlgetrow{\the\toks@}{\dtl at rowidx}}%
+    \@dtl at dogetrow
+  \fi
+}
+\newcommand*{\@dtlgetrow}[2]{%
+  \def\@dtl at getrow##1% before stuff
+    \db at row@elt at w% start of the row
+      \db at row@id at w #2\db at row@id at end@% row id
+        ##2%
+      \db at row@id at w #2\db at row@id at end@% row id
+    \db at row@elt at end@% end of the row
+        ##3% after stuff
+    \q at nil{\dtlbeforerow={##1}\dtlcurrentrow={##2}\dtlafterrow={##3}}%
+  \@dtl at getrow#1\q at nil
+}
+\newcommand*{\dtlrecombine}{%
+   \@dtl at toks@gconcat at middle@cx{dtldb@\dtldbname}%
+   {\dtlbeforerow}%
+   {%
+      \noexpand\db at row@elt at w
+        \noexpand\db at row@id at w
+          \number\dtlrownum
+        \noexpand\db at row@id at end@
+         \the\dtlcurrentrow
+        \noexpand\db at row@id at w
+          \number\dtlrownum
+        \noexpand\db at row@id at end@
+      \noexpand\db at row@elt at end@
+   }%
+   {\dtlafterrow}%
+}
+\newcommand{\dtlrecombineomitcurrent}{%
+  \dtl at decrementrows{\dtlafterrow}{\dtlrownum}
+  \csname dtldb@\dtldbname\endcsname=\dtlbeforerow
+  \@dtl at toks@gput at right@cx{dtldb@\dtldbname}{\the\dtlafterrow}%
+  \dtl at message{Removed row \number\dtlrownum\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlsplitrow}[4]{%
+  \def\@dtlsplitrow##1%before stuff
+    \db at col@id at w #2\db at col@id at end@% column id
+      ##2% unwanted stuff
+    \db at col@id at w #2\db at col@id at end@% column id
+    ##3% after stuff
+    \q at nil{\def#3{##1}\def#4{##3}}%
+   \@dtlsplitrow#1\q at nil
+}
+\newcommand*{\dtlreplaceentryincurrentrow}[2]{%
+  \edef\@dtl at do@splitrow{\noexpand\dtlsplitrow
+   {\the\dtlcurrentrow}%
+   {\number#2}%
+   {\noexpand\@dtl at before@cs}%
+   {\noexpand\@dtl at after@cs}}%
+  \@dtl at do@splitrow
+  \toks@{#1}%
+  \edef\@dtl at stuff{%
+    \expandonce\@dtl at before@cs
+      \noexpand\db at col@id at w \number#2\noexpand
+        \noexpand\db at col@id at end@% column id
+      \noexpand\db at col@elt at w
+        \the\toks@
+      \noexpand\db at col@elt at end@
+      \noexpand\db at col@id at w \number#2\noexpand
+        \noexpand\db at col@id at end@% column id
+    \expandonce\@dtl at after@cs
+  }%
+  \expandafter\dtlcurrentrow\expandafter{\@dtl at stuff}%
+  \@sdtlgetkeyforcolumn{\@dtl at key}{\dtldbname}{#2}%
+  \@dtl at updatekeys{\dtldbname}{\@dtl at key}{#1}%
+  \dtl at message{Updated \@dtl at key\space -> #1\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlremoveentryincurrentrow}[1]{%
+  \edef\@dtl at do@splitrow{\noexpand\dtlsplitrow
+   {\the\dtlcurrentrow}%
+   {\number#1}%
+   {\noexpand\@dtl at before@cs}%
+   {\noexpand\@dtl at after@cs}}%
+  \@dtl at do@splitrow
+  \edef\@dtl at stuff{%
+    \expandonce\@dtl at before@cs
+    \expandonce\@dtl at after@cs
+  }%
+  \expandafter\dtlcurrentrow\expandafter{\@dtl at stuff}%
+  \dtl at message{Removed entry from column \number#1\space\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlswapentriesincurrentrow}[2]{%
+  \dtlgetentryfromcurrentrow{\@dtl at entryI}{#1}%
+  \dtlgetentryfromcurrentrow{\@dtl at entryII}{#2}%
+  \expandafter\dtlreplaceentryincurrentrow\expandafter
+   {\@dtl at entryII}{#1}%
+  \expandafter\dtlreplaceentryincurrentrow\expandafter
+   {\@dtl at entryI}{#2}%
+}
+\newcommand*{\dtlgetentryfromcurrentrow}[2]{%
+  \dtlgetentryfromrow{#1}{#2}{\dtlcurrentrow}%
+}
+\newcommand*{\dtlgetentryfromrow}[3]{%
+  \edef\@dtl at do@getentry{\noexpand\dtl at getentryfromrow
+    {\noexpand#1}{\number#2}{\the#3}}%
+  \@dtl at do@getentry
+}
+\newcommand*{\dtl at getentryfromrow}[3]{%
+  \def\dtl at dogetentry##1% before stuff
+    \db at col@id at w #2\db at col@id at end@% Column id
+      \db at col@elt at w ##2\db at col@elt at end@% Value
+    \db at col@id at w #2\db at col@id at end@% Column id
+    ##3% Remaining stuff
+    \q at nil{\def#1{##2}}%
+  \dtl at dogetentry#3%
+    \db at col@id at w #2\db at col@id at end@%
+      \db at col@elt at w \@dtlnovalue\db at col@elt at end@%
+    \db at col@id at w #2\db at col@id at end@%
+    \q at nil
+}
+\newcommand*{\dtlappendentrytocurrentrow}[2]{%
+      \@dtl at updatekeys{\dtldbname}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\dtldbname}{#1}\relax
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{dtlcurrentrow}%
+        {%
+          \noexpand\db at col@id at w
+            \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w
+            \the\@dtl at toks
+          \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w
+             \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\dtldbname'}%
+      \else
+        \PackageError{datatool}{Can't append entry to row:
+          there is already an entry for key `#1' in this row}{}%
+      \fi
+}
+\newcommand*{\dtlupdateentryincurrentrow}[2]{%
+      \@dtl at updatekeys{\dtldbname}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\dtldbname}{#1}\relax
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{dtlcurrentrow}%
+        {%
+          \noexpand\db at col@id at w
+            \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w
+            \the\@dtl at toks
+          \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w
+             \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\dtldbname'}%
+      \else
+        \toks@{#2}%
+        \edef\do at dtlreplaceincurrentrow{%
+           \noexpand\dtlreplaceentryincurrentrow{\the\toks@}{\number\dtlcolumnnum}%
+        }%
+        \do at dtlreplaceincurrentrow
+      \fi
+}
+\newcommand*{\DTLgetvalue}[4]{%
+  \edef\dtl at dogetvalue{\noexpand\dtl at getvalue{\noexpand#1}{#2}%
+    {\number#3}{\number#4}}%
+  \dtl at dogetvalue
+}
+\newcommand*{\dtl at getvalue}[4]{%
+  \def\@dtl at getvalue ##1% stuff before row <r>
+     \db at row@id at w #3\db at row@id at end@% row <r> id
+        ##2% stuff in row <r> before column <c>
+     \db at col@id at w #4\db at col@id at end@% column <c> id
+       \db at col@elt at w ##3\db at col@elt at end@% value
+     ##4% stuff after value
+     \q at nil{\def#1{##3}}%
+  \toks@=\csname dtldb@#2\endcsname
+  \expandafter\@dtl at getvalue\the\toks@% contents of data base
+     \db at row@id at w #3\db at row@id at end@%
+       \db at col@id at w #4\db at col@id at end@%
+         \db at col@elt at w \@dtlnovalue\db at col@elt at end@% undefined value
+     \q at nil
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element at (row=#3,\space
+      column=#4) in database `#2'}{}%
+  \fi
+}
+\newcommand*{\DTLgetlocation}[4]{%
+  \def\@dtl at getlocation##1% stuff before value
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w ##2\db at col@id at end@% column id
+    ##3% stuff after this column
+    \db at row@id at w ##4\db at row@id at end@% row id
+    ##5% stuff after row
+    \q at nil{\def#1{##4}\def#2{##2}}%
+  \toks@=\csname dtldb@#3\endcsname
+  \expandafter\@dtl at getlocation\the\toks@% contents of data base
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w \@dtlnovalue\db at col@id at end@% undefined column id
+    \db at row@id at w \@dtlnovalue\db at row@id at end@% undefined row id
+    \q at nil
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element `#4' in database `#3'}{}%
+  \fi
+}
+\newcommand*{\DTLgetrowindex}[4]{%
+  \toks@{#4}%
+  \edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{\the\toks@}}%
+  \dtl at dogetrowindex
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element `#4' for column
+      \number#3\space in database `#2'}{}%
+  \fi
+}
+\newcommand*{\dtlgetrowindex}[4]{%
+  \toks@{#4}%
+  \edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{\the\toks@}}%
+  \dtl at dogetrowindex
+}
+\newcommand*{\xdtlgetrowindex}[4]{%
+  \protected at edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{#4}}%
+  \dtl at dogetrowindex
+}
+\newcommand*{\@dtlgetrowindex}[4]{%
+  \def\@dtl at getrowindex##1% stuff before value
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w #3\db at col@id at end@% column id
+    ##2% stuff after this column
+    \db at row@id at w ##3\db at row@id at end@% row id
+    ##4% stuff after row
+    \q at nil{\def#1{##3}}%
+  \toks@=\csname dtldb@#2\endcsname
+  \expandafter\@dtl at getrowindex\the\toks@% contents of data base
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w #3\db at col@id at end@% column id
+    \db at row@id at w \@dtlnovalue\db at row@id at end@% undefined row id
+    \q at nil
+}
+
+\long\def\@dtlforeachrow(#1,#2)\in#3\do#4{%
+  \edef\dtl at tmp{\expandafter\the\csname dtldb@#3\endcsname}%
+  \expandafter\@dtl at foreachrow\dtl at tmp
+    \db at row@elt at w%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@@{#1}{#2}{#4}\q at nil
+}
+\long\def\@dtl at foreachrow\db at row@elt at w%
+\db at row@id at w #1\db at row@id at end@%
+#2\db at row@id at w #3\db at row@id at end@%
+\db at row@elt at end@#4\@@#5#6#7\q at nil{%
+  \gdef#5{#1}%
+  \gdef\@dtl at loopbody{#7}%
+  \global\advance\@dtl at foreach@level by 1\relax
+  \ifx#5\@nnil
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop
+  \else
+    \gdef#6{#2}%
+    \expandafter\let
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+      \dtlbreak
+    \gdef\dtlbreak{\expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop}%
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachrow
+    \@dtl at loopbody
+    \expandafter\let\expandafter\dtlbreak
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+  \fi
+  \expandafter\let\expandafter\@dtl at foreachnext
+    \csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+  \global\advance\@dtl at foreach@level by -1\relax
+  \@dtl at foreachnext#4\@@{#5}{#6}{#7}\q at nil
+}
+\long\def\@dtl at foreachnoop#1\@@#2\q at nil{}
+\long\def\dtlforeachkey(#1,#2,#3,#4)\in#5\do#6{%
+  \gdef\@dtl at loopbody{#6}%
+  \edef\@dtl at keys{\expandafter\the\csname dtlkeys@#5\endcsname}%
+  \expandafter\@dtl at foreachkey\@dtl at keys
+    \db at plist@elt at w%
+    \db at col@id at w -1\db at col@id at end@%
+    \db at key@id at w \db at key@id at end@%
+    \db at type@id at w \db at type@id at end@%
+    \db at header@id at w \db at header@id at end@%
+    \db at col@id at w -1\db at col@id at end@%
+    \db at plist@elt at end@%
+    \@@{\@dtl at updatefkcs{#1}{#2}{#3}{#4}}\q at nil
+}
+\newcommand*{\@dtl at updatefkcs}[8]{%
+  \gdef#1{#5}%
+  \gdef#2{#6}%
+  \gdef#3{#7}%
+  \gdef#4{#8}%
+}
+\long\def\@dtl at foreachkey\db at plist@elt at w%
+\db at col@id at w #1\db at col@id at end@%
+\db at key@id at w #2\db at key@id at end@%
+\db at type@id at w #3\db at type@id at end@%
+\db at header@id at w #4\db at header@id at end@%
+\db at col@id at w #5\db at col@id at end@%
+\db at plist@elt at end@#6\@@#7\q at nil{%
+  \ifnum#1=-1\relax
+    \let\@dtl at foreachnext\@dtl at foreachnoop
+  \else
+    #7{#2}{#1}{#3}{#4}%
+    \global\advance\@dtl at foreach@level by 1\relax
+    \expandafter\let
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+      \dtlbreak
+    \gdef\dtlbreak{\expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop}%
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachkey
+    \@dtl at loopbody
+    \expandafter\let\expandafter\@dtl at foreachnext
+      \csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+    \expandafter\let\expandafter\dtlbreak
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+    \global\advance\@dtl at foreach@level by -1\relax
+  \fi
+  \@dtl at foreachnext#6\@@{#7}\q at nil
+}
+\newcommand*{\dtlforcolumn}{\@ifstar\@sdtlforcolumn\@dtlforcolumn}
+\newcommand{\@dtlforcolumn}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@DTLifhaskey{#2}{#3}%
+    {%
+      \@sdtlforcolumn{#1}{#2}{#3}{#4}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#2' doesn't contain
+        key `#3'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sdtlforcolumn}[4]{%
+    \toks@{#4}%
+    \edef\@dtl at doforcol{\noexpand\dtl at forcolumn{\noexpand#1}%
+      {\expandafter\the\csname dtldb@#2\endcsname}%
+      {\dtlcolumnindex{#2}{#3}}{\the\toks@}%
+    }%
+    \@dtl at doforcol%
+}
+\newcommand*{\dtlforcolumnidx}{%
+  \@ifstar\@sdtlforcolumnidx\@dtlforcolumnidx
+}
+\newcommand{\@dtlforcolumnidx}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    \expandafter\ifnum\csname dtlcols@#2\endcsname<#3\relax
+      \PackageError{datatool}{Column index \number#3\space out of
+        bounds for database `#2'}{Database `#2' only has
+        \expandafter\number\csname dtlcols@#2\endcsname\space
+        columns}%
+    \else
+      \ifnum#3<1\relax
+       \PackageError{datatool}{Column index \number#3\space out of
+        bounds for database `#2'}{Indices start from 1}%
+      \else
+        \@sdtlforcolumnidx{#1}{#2}{#3}{#4}%
+      \fi
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sdtlforcolumnidx}[4]{%
+    \toks@{#4}%
+    \edef\@dtl at doforcol{\noexpand\dtl at forcolumn{\noexpand#1}%
+      {\expandafter\the\csname dtldb@#2\endcsname}%
+      {\number#3}{\the\toks@}%
+    }%
+    \@dtl at doforcol
+}
+\newcommand{\dtl at forcolumn}[4]{%
+  \let\@dtl at oldbreak\dtlbreak
+  \def\dtlbreak{\let\@dtl at forcolnext=\@dtl at forcolnoop}%
+  \def\@dtl at forcolumn##1% before stuff
+    \db at col@id at w #3\db at col@id at end@% column index
+      \db at col@elt at w ##2\db at col@elt at end@% entry
+    \db at col@id at w #3\db at col@id at end@% column index
+    ##3% after stuff
+    \q at nil{%
+      \def#1{##2}% assign value to <cs>
+      \ifx#1\@nnil
+        \let\@dtl at forcolnext=\@dtl at forcolnoop
+      \else
+        #4%
+        \let\@dtl at forcolnext=\@dtl at forcolumn
+      \fi
+      \@dtl at forcolnext##3\q at nil
+    }%
+  \@dtl at forcolumn#2%
+   \db at col@id at w #3\db at col@id at end@%
+     \db at col@elt at w \@nil\db at col@elt at end@%
+   \db at col@id at w #3\db at col@id at end@\q at nil
+  \let\dtlbreak\@dtl at oldbreak
+}
+\def\@dtl at forcolnoop#1\q at nil{}
+
+\newcount\dtlforeachlevel
+\newcounter{DTLrowi}
+\newcounter{DTLrowii}
+\newcounter{DTLrowiii}
+\newcounter{DTLrow}
+\def\theHDTLrow{\arabic{DTLrow}}
+\def\theHDTLrowi{\theHDTLrow.\arabic{DTLrowi}}
+\def\theHDTLrowii{\theHDTLrowi.\arabic{DTLrowii}}
+\def\theHDTLrowiii{\theHDTLrowii.\arabic{DTLrowiii}}
+\newcount\dtl at rowi
+\newcount\dtl at rowii
+\newcount\dtl at rowiii
+\newtoks\@dtl at curi
+\newtoks\@dtl at previ
+\newtoks\@dtl at nexti
+\newtoks\@dtl at curii
+\newtoks\@dtl at previi
+\newtoks\@dtl at nextii
+\newtoks\@dtl at curiii
+\newtoks\@dtl at previii
+\newtoks\@dtl at nextiii
+\newcommand*{\DTLsavelastrowcount}[1]{%
+\ifnum\dtlforeachlevel>2\relax
+  \def#1{0}%
+\else
+  \ifnum\dtlforeachlevel<0\relax
+    \def#1{0}%
+  \else
+    \@dtl at tmpcount=\dtlforeachlevel
+    \advance\@dtl at tmpcount by 1\relax
+    \edef#1{\expandafter\number
+      \csname c at DTLrow\romannumeral\@dtl at tmpcount\endcsname}%
+  \fi
+\fi}
+\newenvironment{DTLenvforeach}[3][\boolean{true}]%
+{%
+  \def\@dtlenvforeach at args{[#1]{#2}{#3}}%
+  \long at collect@body\@do at dtlenvforeach
+}%
+{}
+\newcommand{\@do at dtlenvforeach}[1]{%
+  \expandafter\@DTLforeach\@dtlenvforeach at args{#1}%
+}
+\newenvironment{DTLenvforeach*}[3][\boolean{true}]%
+{%
+  \def\s at dtlenvforeach@args{[#1]{#2}{#3}}%
+  \long at collect@body\@do at sdtlenvforeach
+}%
+{}
+\newcommand{\@do at sdtlenvforeach}[1]{%
+  \expandafter\@sDTLforeach\s at dtlenvforeach@args{#1}%
+}
+\newcommand*{\DTLforeach}{\@ifstar\@sDTLforeach\@DTLforeach}
+\newcommand{\@DTLforeach}[4][\boolean{true}]{%
+  \DTLifdbexists{#2}%
+  {%
+    \refstepcounter{DTLrow}%
+    \global\c at DTLrow=\c at DTLrow\relax
+    \xdef\@dtl at dbname{#2}%
+    \global\advance\dtlforeachlevel by 1\relax
+    \ifnum\dtlforeachlevel>3\relax
+      \PackageError{datatool}{\string\DTLforeach\space nested too
+        deeply}{Only 3 levels are allowed}%
+    \else
+       \@DTLifdbempty{#2}%
+       {}%
+       {%
+        \expandafter\global
+          \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+          \DTLiffirstrow
+        \gdef\DTLiffirstrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =1 %space intended
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+          \DTLiflastrow
+        \gdef\DTLiflastrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =\csname dtlrows@#2\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+          \DTLifoddrow
+        \gdef\DTLifoddrow##1##2{%
+          \expandafter\ifodd
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let
+          \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+            =\@dtl at dbname
+        \expandafter\global\expandafter\let
+          \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \dtlgforint
+          \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+          =1\to\csname dtlrows@#2\endcsname\step1\do
+        {%
+          \@dtl at tmpcount=
+            \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+          \edef\dtl at dogetrow{\noexpand\dtlgetrow{#2}%
+            {\number\@dtl at tmpcount}}%
+          \dtl at dogetrow
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \dtlcurrentrow
+          \expandafter\global
+            \csname @dtl at prev\romannumeral\dtlforeachlevel\endcsname
+              = \dtlbeforerow
+          \expandafter\global
+            \csname @dtl at next\romannumeral\dtlforeachlevel\endcsname
+              = \dtlafterrow
+          \ifblank{#3}{}{\@dtl at assign{#3}{#2}}%
+          \ifthenelse{#1}%
+          {%
+            \refstepcounter{DTLrow\romannumeral\dtlforeachlevel}%
+            \expandafter\edef\expandafter\DTLcurrentindex%
+              \expandafter{%
+                 \arabic{DTLrow\romannumeral\dtlforeachlevel}}%
+            #4%
+            \edef\@dtl at tmp{\expandafter\the
+              \csname @dtl at cur\romannumeral
+                \dtlforeachlevel\endcsname}%
+            \ifx\@dtl at tmp\@nnil
+              \expandafter\dtl at decrementrows\expandafter
+                 {\csname @dtl at prev\romannumeral
+                    \dtlforeachlevel\endcsname
+                 }{\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname}%
+              \expandafter\dtl at decrementrows\expandafter
+                 {\csname @dtl at next\romannumeral
+                    \dtlforeachlevel\endcsname
+                 }{\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname}%
+              \edef\@dtl at tmp{%
+                \expandafter\the
+                  \csname @dtl at prev\romannumeral
+                    \dtlforeachlevel\endcsname
+                \expandafter\the
+                  \csname @dtl at next\romannumeral
+                     \dtlforeachlevel\endcsname
+                }%
+              \expandafter\global\expandafter
+                 \csname dtldb@#2\endcsname\expandafter{\@dtl at tmp}%
+              \expandafter\global\expandafter
+                \advance\csname dtlrows@#2\endcsname by -1\relax
+              \expandafter\global\expandafter
+                \advance\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname by -1\relax
+            \else
+              \@dtl at before=\csname @dtl at prev\romannumeral
+                \dtlforeachlevel\endcsname
+              \@dtl at after=\csname @dtl at next\romannumeral
+                \dtlforeachlevel\endcsname
+              \@dtl at toks@gconcat at middle@cx{dtldb@#2}%
+              {\@dtl at before}%
+              {%
+                \noexpand\db at row@elt at w%
+                \noexpand\db at row@id at w \expandafter\number
+                  \csname dtl at row\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at end@%
+                \expandafter\the
+                  \csname @dtl at cur\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at w \expandafter\number
+                  \csname dtl at row\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at end@%
+                \noexpand\db at row@elt at end@%
+                }%
+              {\@dtl at after}%
+            \fi
+          }%
+          {}%
+         }%
+        \expandafter\global\expandafter\let\expandafter\DTLiffirstrow
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLiflastrow
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLifoddrow
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+      }%
+    \fi
+    \global\advance\dtlforeachlevel by -1\relax
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sDTLforeach}[4][\boolean{true}]{%
+  \DTLifdbexists{#2}%
+  {%
+    \refstepcounter{DTLrow}%
+    \global\c at DTLrow=\c at DTLrow
+    \xdef\@dtl at dbname{#2}%
+    \global\advance\dtlforeachlevel by 1\relax
+    \ifnum\dtlforeachlevel>3\relax
+      \PackageError{datatool}{\string\DTLforeach\space nested too
+        deeply}{Only 3 levels are allowed}%
+    \else
+       \@DTLifdbempty{#2}%
+       {}%
+       {%
+        \expandafter\global
+          \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+          \DTLiffirstrow
+        \gdef\DTLiffirstrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =1 % space intended
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+          \DTLiflastrow
+        \gdef\DTLiflastrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =\csname dtlrows@#2\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+          \DTLifoddrow
+        \gdef\DTLifoddrow##1##2{%
+          \expandafter\ifodd
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\gdef\csname @dtl at dbname@\romannumeral
+          \dtlforeachlevel\endcsname{#2}%
+        \expandafter\global\expandafter\let
+          \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname
+            = 1\relax
+        \@dtlforeachrow(\dtl at thisidx,\dtl at thisrow)\in{#2}\do%
+        {%
+          \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+            = \dtl at thisidx\relax
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \expandafter{\dtl at thisrow}%
+          \ifblank{#3}{}
+          {%
+            \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+            \@dtl at assign{#3}{#2}%
+          }%
+          \ifthenelse{#1}%
+          {%
+            \refstepcounter{DTLrow\romannumeral\dtlforeachlevel}%
+            \expandafter\edef\expandafter\DTLcurrentindex%
+              \expandafter{%
+                 \arabic{DTLrow\romannumeral\dtlforeachlevel}}%
+            #4%
+          }%
+          {}%
+         }%
+        \expandafter\global\expandafter\let\expandafter\DTLiffirstrow
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLiflastrow
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLifoddrow
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+      }%
+    \fi
+    \global\advance\dtlforeachlevel by -1\relax
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@dtlifreadonly}[2]{%
+  \expandafter\ifx
+    \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname1\relax
+    #1%
+  \else
+    #2%
+  \fi
+}
+\newcommand*{\DTLappendtorow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLappendrow\space can only be
+      used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLappendtorow\space can't
+       be used inside \DTLforeach*}{The starred version of
+       \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@dtl at updatekeys{\@dtl at thisdb}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\@dtl at thisdb}{#1}\relax
+      \dtlcurrentrow =
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{@dtl at cur\romannumeral\dtlforeachlevel}%
+        {%
+          \noexpand\db at col@id at w \number\dtlcolumnnum
+            \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w \the\@dtl at toks
+            \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w \number\dtlcolumnnum
+            \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\@dtl at thisdb'}%
+      \else
+        \PackageError{datatool}{Can't append entry to row:
+          there is already an entry for key `#1' in this row}{}%
+      \fi
+    }%
+  \fi
+}
+\newcommand*{\DTLremoveentryfromrow}[1]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLremoventryfromrow\space
+      can only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLremoveentryfromrow\space
+        can't be used inside \string\DTLforeach*}{The starred
+        version of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@DTLifhaskey{\@dtl at thisdb}{#1}%
+      {%
+        \@dtl at getcolumnindex{\thiscol}{\@dtl at thisdb}{#1}\relax
+        \dtlcolumnnum=\thiscol\relax
+        \dtlcurrentrow =
+          \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+        \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+          {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+        }%
+        \dtl at dogetentry
+        \ifx\dtl at entry\dtlnovalue
+          \PackageError{datatool}{Can't remove entry given by `#1'
+             from current row in database `\@dtl at thisdb': no such
+             entry}{The current row doesn't contain an entry for
+             key `#1'}%
+        \else
+          \edef\@dtl at dosplitrow{%
+            \noexpand\dtlsplitrow{\the\dtlcurrentrow}%
+              {\number\dtlcolumnnum}{\noexpand\dtl at pre}%
+              {\noexpand\dtl at post}%
+          }%
+          \@dtl at dosplitrow
+          \expandafter\@dtl at toks\expandafter{\dtl at pre}%
+          \expandafter\toks@\expandafter{\dtl at post}%
+          \edef\@dtl at tmp{\the\@dtl at toks \the\toks@}%
+          \dtlcurrentrow=\expandafter{\@dtl at tmp}%
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \dtlcurrentrow
+         \dtl at message{Removed entry given by #1\space from current
+           row of database `\@dtl at thisdb'}%
+        \fi
+      }%
+      {%
+        \PackageError{datatool}{Can't remove entry given by
+          `#1' - no such key exists}{}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLreplaceentryforrow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+      can only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+        can't be used inside \string\DTLforeach*}{The starred version
+        of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@DTLifhaskey{\@dtl at thisdb}{#1}%
+      {%
+        \@dtl at getcolumnindex{\thiscol}{\@dtl at thisdb}{#1}\relax
+        \dtlcolumnnum=\thiscol\relax
+        \dtlcurrentrow =
+          \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+        \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+          {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+        }%
+        \dtl at dogetentry
+        \ifx\dtl at entry\dtlnovalue
+          \PackageError{datatool}{Can't replace entry given by `#1'
+             from current row in database `\@dtl at thisdb': no such
+             entry}{The current row doesn't contain an entry for
+             key `#1'}%
+        \else
+          \edef\@dtl at dosplitrow{%
+            \noexpand\dtlsplitrow{\the\dtlcurrentrow}%
+              {\number\dtlcolumnnum}{\noexpand\dtl at pre}%
+              {\noexpand\dtl at post}%
+          }%
+          \@dtl at dosplitrow
+          \protected at edef\@dtl at tmp{#2}%
+          \expandafter\@dtl at toks\expandafter{\@dtl at tmp}% new value
+          \expandafter\@dtl at before\expandafter{\dtl at pre}%
+          \expandafter\@dtl at after\expandafter{\dtl at post}%
+          \@dtl at toks@gconcat at middle@cx
+            {@dtl at cur\romannumeral\dtlforeachlevel}%
+            {\@dtl at before}%
+            {%
+              \noexpand\db at col@id at w \number\dtlcolumnnum
+                \noexpand\db at col@id at end@%
+              \noexpand\db at col@elt at w \the\@dtl at toks
+                \noexpand\db at col@elt at end@%
+              \noexpand\db at col@id at w \number\dtlcolumnnum
+                \noexpand\db at col@id at end@%
+            }%
+            {\@dtl at after}%
+         \dtl at message{Updated #1\space -> #2\space in database
+           `\@dtl at thisdb'}%
+        \fi
+      }%
+      {%
+         \PackageError{datatool}{Can't replace key `#1' - no such
+           key in database `\@dtl at thisdb'}{}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLremovecurrentrow}{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLremovecurrentrow\space can
+      only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+        can't be used inside \string\DTLforeach*}{The starred version
+        of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \expandafter\global
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+          ={\@nil}%
+    }%
+  \fi
+}
+\newcommand{\DTLaddentryforrow}[5]{%
+  \DTLifdbexists{#1}%
+  {%
+    \def\@dtl at notdone{\PackageError{datatool}{Unable to add entry
+      given by key `#4': condition not met for any row in database
+      `#1'}{}}%
+    \DTLforeach[#3]{#1}{#2}%
+    {%
+      \DTLappendtorow{#4}{#5}%
+      \let\@dtl at notdone\relax
+      \dtlbreak
+    }%
+    \@dtl at notdone
+  }%
+  {%
+    \PackageError{datatool}{Unable to add entry given by key `#4':
+      database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\DTLforeachkeyinrow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLforeachkeyinrow\space can only
+     be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \dtlforeachkey(\dtlkey,\dtlcol,\dtltype,\dtlheader)\in
+      \@dtl at thisdb\do{%
+      \dtlcurrentrow =
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand#1}{\dtlcol}}%
+      \dtl at dogetentry
+      \ifx#1\dtlnovalue
+        \ifnum0\dtltype=0\relax
+          \let#1=\@dtlstringnull
+        \else
+          \let#1=\@dtlnumbernull
+        \fi
+      \fi
+      \global\let#1#1%
+      \def\@dtl at loop@body{#2}%
+      \@dtl at loop@body
+    }%
+  \fi
+}
+\newcommand{\DTLiffirstrow}[2]{%
+  \PackageError{datatool}{\string\DTLiffirstrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLiflastrow}[2]{%
+  \PackageError{datatool}{\string\DTLiflastrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLifoddrow}[2]{%
+  \PackageError{datatool}{\string\DTLifoddrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand*{\dtlbetweencols}{}
+\newcommand*{\dtlbeforecols}{}
+\newcommand*{\dtlaftercols}{}
+\newcommand*{\dtlstringalign}{l}
+\newcommand*{\dtlintalign}{r}
+\newcommand*{\dtlrealalign}{r}
+\newcommand*{\dtlcurrencyalign}{r}
+\newcommand*{\dtladdalign}[4]{%
+  \ifnum#3=1\relax
+    \protected at edef#1{\dtlbeforecols}%
+  \else
+    \protected at edef#1{#1\dtlbetweencols}%
+  \fi
+  \ifstrempty{#2}%
+  {%
+    \protected at edef#1{#1c}%
+  }%
+  {%
+    \ifcase#2\relax
+      \protected at edef#1{#1\dtlstringalign}%
+    \or
+      \protected at edef#1{#1\dtlintalign}%
+    \or
+      \protected at edef#1{#1\dtlrealalign}%
+    \or
+      \protected at edef#1{#1\dtlcurrencyalign}%
+    \else
+      \protected at edef#1{#1c}%
+      \PackageError{datatool}{Unknown data type `#2'}{}%
+    \fi
+  }%
+  \ifnum#3=#4\relax
+    \protected at edef#1{#1\dtlaftercols}%
+  \fi
+}
+\newcommand*{\dtlheaderformat}[1]{\null\hfil\textbf{#1}\hfil\null}
+\newcommand*{\dtlstringformat}[1]{#1}
+\newcommand*{\dtlintformat}[1]{#1}
+\newcommand*{\dtlrealformat}[1]{#1}
+\newcommand*{\dtlcurrencyformat}[1]{#1}
+\newcommand*{\dtldisplaystarttab}{}
+\newcommand*{\dtldisplayendtab}{}
+\newcommand*{\dtldisplayafterhead}{}
+\newcommand*{\dtldisplayvalign}{c}
+\newcommand*{\dtldisplaystartrow}{}
+\newcommand{\dtldisplaycr}{\tabularnewline}
+
+\newcommand*{\DTLdisplaydb}[2][]{%
+  \def\@dtl at doamp{\gdef\@dtl at doamp{&}}%
+  \def\@dtl at resetdoamp{\gdef\@dtl at doamp{\gdef\@dtl at doamp{&}}}%
+  \edef\@dtl at maxcols{\expandafter\number
+    \csname dtlcols@#2\endcsname}%
+  \DTLnumitemsinlist{#1}{\@dtl at tmp}%
+  \dtlsub{\@dtl at maxcols}{\@dtl at maxcols}{\@dtl at tmp}%
+  \dtlclip{\@dtl at maxcols}{\@dtl at maxcols}%
+  \def\@dtl at tabargs{}%
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{#1}%
+    {}%
+    {%
+       \dtladdalign\@dtl at tabargs\@dtl at type\@dtl at idx\@dtl at maxcols
+    }%
+  }%
+  \edef\@dtl at dobegintab{\noexpand\begin{tabular}[\dtldisplayvalign]{\@dtl at tabargs}}%
+  \@dtl at dobegintab
+  \dtldisplaystarttab
+  \@dtl at resetdoamp
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{#1}%
+    {}%
+    {%
+      \@dtl at doamp
+      \dtlheaderformat{\@dtl at head}%
+    }%
+  }%
+  \\%
+  \dtldisplayafterhead
+  \@dtl at resetdoamp
+  \@sDTLforeach{#2}{}{%
+    \DTLiffirstrow{}{\dtldisplaycr\dtldisplaystartrow}%
+    \@dtl at resetdoamp
+    \DTLforeachkeyinrow{\@dtl at val}%
+    {%
+      \expandafter\DTLifinlist\expandafter{\dtlkey}{#1}%
+      {}%
+      {%
+        \global\let\@dtl at val\@dtl at val
+        \@dtl at doamp
+        \@dtl at datatype=0\dtltype\relax
+        \ifcase\@dtl at datatype
+          \dtlstringformat\@dtl at val
+        \or
+          \dtlintformat\@dtl at val
+        \or
+          \dtlrealformat\@dtl at val
+        \or
+          \dtlcurrencyformat\@dtl at val
+        \else
+          \@dtl at val
+        \fi
+      }%
+    }%
+  }%
+  \dtldisplayendtab
+  \end{tabular}%
+}
+\define at key{displaylong}{caption}{\def\@dtl at cap{#1}}
+\define at key{displaylong}{contcaption}{\def\@dtl at contcap{#1}}
+\define at key{displaylong}{shortcaption}{\def\@dtl at shortcap{#1}}
+\define at key{displaylong}{label}{\def\@dtl at label{#1}}
+\define at key{displaylong}{foot}{\def\@dtl at foot{#1}}
+\define at key{displaylong}{lastfoot}{\def\@dtl at lastfoot{#1}}
+\define at key{displaylong}{omit}{\def\@dtl at omitlist{#1}}
+\newcommand*{\@dtl at resetdostartrow}{%
+  \gdef\@dtl at dostartrow{%
+    \gdef\@dtl at dostartrow{\dtldisplaycr\dtldisplaystartrow}}%
+}
+\newcommand*{\DTLdisplaylongdb}[2][]{%
+  \def\@dtl at cap{\@nil}%
+  \def\@dtl at contcap{\@nil}%
+  \def\@dtl at label{\@nil}%
+  \def\@dtl at shortcap{\@dtl at cap}%
+  \def\@dtl at foot{\@nil}%
+  \def\@dtl at lastfoot{\@nil}%
+  \def\@dtl at omitlist{}%
+  \setkeys{displaylong}{#1}%
+  \def\@dtl at doamp{\gdef\@dtl at doamp{&}}%
+  \def\@dtl at resetdoamp{\gdef\@dtl at doamp{\gdef\@dtl at doamp{&}}}%
+  \@dtl at resetdostartrow
+  \edef\@dtl at maxcols{\expandafter\number
+    \csname dtlcols@#2\endcsname}%
+  \DTLnumitemsinlist{\@dtl at omitlist}{\@dtl at tmp}%
+  \dtlsub{\@dtl at maxcols}{\@dtl at maxcols}{\@dtl at tmp}%
+  \dtlclip{\@dtl at maxcols}{\@dtl at maxcols}%
+  \def\@dtl at tabargs{}%
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+    {}%
+    {%
+      \dtladdalign\@dtl at tabargs\@dtl at type\@dtl at idx\@dtl at maxcols
+    }%
+  }%
+  \edef\@dtl at dobegintab{\noexpand\begin{longtable}{\@dtl at tabargs}}%
+  \@dtl at dobegintab
+  \ifx\@dtl at foot\@nnil
+  \else
+    \@dtl at foot\endfoot
+  \fi
+  \ifx\@dtl at lastfoot\@nnil
+  \else
+    \@dtl at lastfoot\endlastfoot
+  \fi
+  \ifx\@dtl at cap\@nnil
+    \@dtl at resetdoamp
+    \dtldisplaystarttab
+    \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+    {%
+      \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+      }%
+    }%
+    \@dtl at resetdoamp
+    \@dtl at resetdostartrow
+    \endhead\dtldisplayafterhead
+  \else
+    \caption[\@dtl at shortcap]{\@dtl at cap}%
+    \ifx\@dtl at label\@nnil
+    \else
+      \label{\@dtl at label}%
+    \fi
+    \dtldisplaycr
+  \dtldisplaystarttab
+    \@dtl at resetdoamp
+    \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+    {%
+      \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+      }%
+    }%
+    \@dtl at resetdoamp
+    \dtldisplaycr\dtldisplayafterhead
+    \endfirsthead
+    \ifx\@dtl at contcap\@nnil
+      \caption{\@dtl at cap}%
+    \else
+      \caption{\@dtl at contcap}%
+    \fi
+    \dtldisplaycr\dtldisplaystarttab
+      \@dtl at resetdoamp
+      \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+      {%
+        \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+        {}%
+        {%
+          \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+        }%
+      }%
+      \@dtl at resetdoamp
+      \@dtl at resetdostartrow
+    \dtldisplaycr\dtldisplayafterhead
+    \endhead
+  \fi
+  \@sDTLforeach{#2}{}{%
+    \@dtl at dostartrow
+    \@dtl at resetdoamp
+    \DTLforeachkeyinrow{\@dtl at val}%
+    {%
+      \global\let\@dtl at val\@dtl at val
+      \expandafter\DTLifinlist\expandafter{\dtlkey}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp
+        \@dtl at datatype=0\dtltype\relax
+        \ifcase\@dtl at datatype
+          \dtlstringformat\@dtl at val
+        \or
+          \dtlintformat\@dtl at val
+        \or
+          \dtlrealformat\@dtl at val
+        \or
+          \dtlcurrencyformat\@dtl at val
+        \fi
+      }%
+    }%
+  }%
+  \dtldisplayendtab
+  \end{longtable}%
+}
+\newcommand*{\dtlswaprows}[3]{%
+  \ifnum#2=#3\relax
+  \else
+    \ifnum#2<#3\relax
+      \edef\@dtl at rowAidx{\number#2}%
+      \edef\@dtl at rowBidx{\number#3}%
+    \else
+      \edef\@dtl at rowAidx{\number#3}%
+      \edef\@dtl at rowBidx{\number#2}%
+    \fi
+    \edef\@dtl at dosplit{\noexpand\dtlgetrow{#1}{\@dtl at rowAidx}}%
+    \@dtl at dosplit
+    \expandafter\def\expandafter\@dtl at firstpart\expandafter
+      {\the\dtlbeforerow}%
+    \@dtl at toksA=\dtlcurrentrow
+    \edef\@dtl at dosplit{\noexpand\@dtlgetrow
+      {\the\dtlafterrow}{\@dtl at rowBidx}}%
+    \@dtl at dosplit
+    \expandafter\def\expandafter\@dtl at secondpart\expandafter
+      {\the\dtlbeforerow}%
+    \@dtl at toksB=\dtlcurrentrow
+    \expandafter\def\expandafter\@dtl at thirdpart\expandafter
+      {\the\dtlafterrow}%
+    \toks@=\expandafter{\@dtl at firstpart}%
+    \@dtl at toks=\expandafter{\@dtl at secondpart}%
+    \edef\@dtl at tmp{\the\toks@
+     \noexpand\db at row@elt at w%
+     \noexpand\db at row@id at w \@dtl at rowAidx\noexpand\db at row@id at end@%
+     \the\@dtl at toksB
+     \noexpand\db at row@id at w \@dtl at rowAidx\noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+     \the\@dtl at toks}%
+    \toks@=\expandafter{\@dtl at tmp}%
+    \@dtl at toks=\expandafter{\@dtl at thirdpart}%
+    \edef\@dtl at tmp{\the\toks@
+     \noexpand\db at row@elt at w%
+     \noexpand\db at row@id at w \@dtl at rowBidx\noexpand\db at row@id at end@%
+     \the\@dtl at toksA
+     \noexpand\db at row@id at w \@dtl at rowBidx\noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+    \the\@dtl at toks}%
+    \expandafter\global\csname dtldb@#1\endcsname=\expandafter
+      {\@dtl at tmp}%
+  \fi
+}
+\newcommand*{\dtl at decrementrows}[2]{%
+  \def\@dtl at newlist{}%
+  \edef\@dtl at min{\number#2}%
+  \expandafter\@dtl at decrementrows\the#1%
+    \db at row@elt at w%
+      \db at row@id at w \@nil\db at row@id at end@%
+      \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@nil
+  #1=\expandafter{\@dtl at newlist}%
+}
+\def\@dtl at decrementrows\db at row@elt at w\db at row@id at w #1\db at row@id at end@%
+#2\db at row@id at w #3\db at row@id at end@\db at row@elt at end@#4\@nil{%
+  \def\@dtl at thisrow{#1}%
+  \ifx\@dtl at thisrow\@nnil
+    \let\@dtl at donextdec=\@dtl at gobbletonil
+  \else
+    \ifnum\@dtl at thisrow>\@dtl at min
+      \@dtl at tmpcount=\@dtl at thisrow\relax
+      \advance\@dtl at tmpcount by -1\relax
+      \toks@{#2}%
+      \@dtl at toks=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\@dtl at toks
+        \noexpand\db at row@elt at w% row header
+        \noexpand\db at row@id at w \number\@dtl at tmpcount
+          \noexpand\db at row@id at end@% row id
+         \the\toks@ % row contents
+        \noexpand\db at row@id at w \number\@dtl at tmpcount
+          \noexpand\db at row@id at end@% row id
+        \noexpand\db at row@elt at end@% row end
+      }%
+    \else
+      \toks@{#2}%
+      \@dtl at toks=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\@dtl at toks
+        \noexpand\db at row@elt at w% row header
+        \noexpand\db at row@id at w #1%
+          \noexpand\db at row@id at end@% row id
+         \the\toks@ % row contents
+        \noexpand\db at row@id at w #3%
+          \noexpand\db at row@id at end@% row id
+        \noexpand\db at row@elt at end@% row end
+      }%
+    \fi
+    \let\@dtl at donextdec=\@dtl at decrementrows
+  \fi
+  \@dtl at donextdec#4\@nil
+}
+\newcommand*{\DTLremoverow}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \ifnum#2>0\relax
+      \expandafter\ifnum\csname dtlrows@#1\endcsname<#2\relax
+        \expandafter\ifnum\csname dtlrows@#1\endcsname=1\relax
+          \PackageError{datatool}{Can't remove row `\number#2' from
+            database `#1': no such row}{Database `#1' only has
+            1 row}%
+        \else
+          \PackageError{datatool}{Can't remove row `\number#2' from
+            database `#1': no such row}{Database `#1' only has
+            \expandafter\number\csname dtlrows@#1\endcsname\space
+            rows}%
+        \fi
+      \else
+        \@DTLremoverow{#1}{#2}%
+      \fi
+    \else
+      \PackageError{datatool}{Can't remove row \number#2: index
+        out of bounds}{Row indices start at 1}%
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Can't remove row: database `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\@DTLremoverow}[2]{%
+      \edef\dtl at dogetrow{\noexpand\dtlgetrow{#1}{\number#2}}%
+      \dtl at dogetrow
+      \expandafter\dtl at decrementrows\expandafter
+        {\dtlbeforerow}{#2}%
+      \expandafter\dtl at decrementrows\expandafter
+        {\dtlafterrow}{#2}%
+      \edef\dtl at tmp{\the\dtlbeforerow \the\dtlafterrow}%
+      \expandafter\global\csname dtldb@#1\endcsname
+        =\expandafter{\dtl at tmp}%
+      \expandafter\global\expandafter\advance
+        \csname dtlrows@#1\endcsname by -1\relax
+}
+\newcommand*{\DTLsumforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlsumforkeys
+}
+\newcommand*{\@dtlsumforkeys}[4][]{%
+  \def#4{0}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+          {\DTLadd{#4}{#4}{\DTLthisval}}{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLsumcolumn}[3]{%
+  \def#3{0}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLadd{#3}{#3}{\DTLthisval}%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLmeanforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlmeanforkeys
+}
+\newcount\@dtl at elements
+\newcommand*{\@dtlmeanforkeys}[4][]{%
+  \def#4{0}%
+  \@dtl at elements=0\relax
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \DTLadd{#4}{#4}{\DTLthisval}%
+          \advance\@dtl at elements by 1\relax
+        }{}%
+      }%
+    }%
+  }%
+  \ifnum\@dtl at elements=0\relax
+    \PackageError{datatool}{Unable to evaluate mean: no data}{}%
+  \else
+    \edef\@dtl at n{\number\@dtl at elements}%
+    \DTLdiv{#4}{#4}{\@dtl at n}%
+  \fi
+}
+\newcommand*{\DTLmeanforcolumn}[3]{%
+  \def#3{0}%
+  \@dtl at elements=0\relax
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLadd{#3}{#3}{\DTLthisval}%
+         \advance\@dtl at elements by 1\relax
+       }%
+       \ifnum\@dtl at elements=0\relax
+         \PackageError{datatool}{Can't compute mean for
+          column `#2' in database `#1': no data}{}%
+       \else
+         \edef\@dtl at n{\number\@dtl at elements}%
+         \DTLdiv{#3}{#3}{\@dtl at n}%
+       \fi
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLvarianceforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlvarianceforkeys
+}
+\newcommand*{\@dtlvarianceforkeys}[4][]{%
+  \@dtlmeanforkeys[#1]{#2}{#3}{\dtl at mean}%
+  \def#4{0}%
+  \@dtl at elements=0\relax
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+           \DTLsub{\dtl at diff}{\DTLthisval}{\dtl at mean}%
+           \DTLmul{\dtl at diff}{\dtl at diff}{\dtl at diff}%
+           \DTLadd{#4}{#4}{\dtl at diff}%
+           \advance\@dtl at elements by 1\relax
+        }{}%
+      }%
+    }%
+  }%
+  \ifnum\@dtl at elements=0\relax
+    \PackageError{datatool}{Unable to evaluate variance: no data}{}%
+  \else
+    \edef\@dtl at n{\number\@dtl at elements}%
+    \DTLdiv{#4}{#4}{\@dtl at n}%
+  \fi
+}
+\newcommand*{\DTLvarianceforcolumn}[3]{%
+  \DTLmeanforcolumn{#1}{#2}{\dtl at mean}%
+  \def#3{0}%
+  \@dtl at elements=0\relax
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLsub{\dtl at diff}{\DTLthisval}{\dtl at mean}%
+         \DTLmul{\dtl at diff}{\dtl at diff}{\dtl at diff}%
+         \DTLadd{#3}{#3}{\dtl at diff}%
+         \advance\@dtl at elements by 1\relax
+       }%
+       \ifnum\@dtl at elements=0\relax
+         \PackageError{datatool}{Can't compute variance for
+          column `#2' in database `#1': no data}{}%
+       \else
+         \edef\@dtl at n{\number\@dtl at elements}%
+         \DTLdiv{#3}{#3}{\@dtl at n}%
+       \fi
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLsdforkeys}[1][\boolean{true}\and
+\DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlsdforkeys
+}
+\newcommand*{\@dtlsdforkeys}[4][]{%
+  \@dtlvarianceforkeys[#1]{#2}{#3}{#4}%
+  \DTLsqrt{#4}{#4}%
+}
+\newcommand*{\DTLsdforcolumn}[3]{%
+  \DTLvarianceforcolumn{#1}{#2}{#3}%
+  \DTLsqrt{#3}{#3}%
+}
+\newcommand*{\DTLminforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlminforkeys
+}
+\newcommand*{\@dtlminforkeys}[4][]{%
+  \def#4{}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \ifdefempty{#4}%
+          {%
+            \let#4\DTLthisval
+          }%
+          {%
+            \DTLmin{#4}{#4}{\DTLthisval}%
+          }%
+        }{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLminforcolumn}[3]{%
+  \def#3{}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \ifdefempty{#3}%
+         {%
+           \let#3\DTLthisval
+         }%
+         {%
+           \DTLmin{#3}{#3}{\DTLthisval}%
+         }%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLmaxforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlmaxforkeys
+}
+\newcommand*{\@dtlmaxforkeys}[4][]{%
+  \def#4{}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \ifdefempty{#4}%
+          {%
+            \let#4\DTLthisval
+          }%
+          {%
+            \DTLmax{#4}{#4}{\DTLthisval}%
+          }%
+        }{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLmaxforcolumn}[3]{%
+  \def#3{}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \ifdefempty{#3}%
+         {%
+           \let#3\DTLthisval
+         }%
+         {%
+           \DTLmax{#3}{#3}{\DTLthisval}%
+         }%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLcomputebounds}[8][\boolean{true}]{%
+\let#5=\relax
+\let#6=\relax
+\let#7=\relax
+\let#8=\relax
+\@for\dtl at thisdb:=#2\do{%
+  \@sDTLforeach[#1]{\dtl at thisdb}{\DTLthisX=#3,\DTLthisY=#4}{%
+    \expandafter\DTLconverttodecimal\expandafter{\DTLthisX}{\dtl at decx}%
+    \expandafter\DTLconverttodecimal\expandafter{\DTLthisY}{\dtl at decy}%
+    \ifx#5\relax
+      \let#5=\dtl at decx
+      \let#6=\dtl at decy
+      \let#7=\dtl at decx
+      \let#8=\dtl at decy
+    \else
+      \dtlmin{#5}{#5}{\dtl at decx}%
+      \dtlmin{#6}{#6}{\dtl at decy}%
+      \dtlmax{#7}{#7}{\dtl at decx}%
+      \dtlmax{#8}{#8}{\dtl at decy}%
+    \fi
+  }%
+}%
+}
+\newcommand*{\DTLgetvalueforkey}[5]{%
+  \DTLgetrowforkey{\@dtl at row}{#3}{#4}{#5}%
+  \@sdtl at getcolumnindex{\@dtl at col}{#3}{#2}%
+  {%
+    \dtlcurrentrow=\expandafter{\@dtl at row}%
+    \edef\@dtl at dogetval{\noexpand\dtlgetentryfromcurrentrow
+      {\noexpand\@dtl at val}{\@dtl at col}}%
+    \@dtl at dogetval
+    \global\let#1=\@dtl at val
+  }%
+}
+\newcommand*{\DTLgetrowforkey}[4]{%
+  \global\let#1=\@empty
+  \@sDTLforeach{#2}{\dtl at refvalue=#3}{%
+    \DTLifnull{\dtl at refvalue}%
+    {}%
+    {%
+      \ifthenelse{\equal{\dtl at refvalue}{#4}}%
+      {%
+        \xdef#1{\the\dtlcurrentrow}%
+        \dtlbreak
+      }%
+      {}%
+    }%
+  }%
+}
+\newtoks\@dtl at list
+\newcommand*{\DTLsort}{\@ifstar\@sDTLsort\@DTLsort}
+\newcommand{\@DTLsort}[3][]{%
+  \dtlsort[#1]{#2}{#3}{\dtlcompare}%
+}
+\newcommand*{\@sDTLsort}[3][]{%
+  \dtlsort[#1]{#2}{#3}{\dtlicompare}%
+}
+\newcommand{\dtlsort}[4][]{%
+  \DTLifdbexists{#3}%
+  {%
+     \ifnum\DTLrowcount{#3}>100\relax
+       \typeout{Sorting `#3' - this may take a while.}%
+     \fi
+    \edef\@dtl at replacementkeys{#1}%
+    \def\@dtl at sortorder{}%
+    \@for\@dtl at level:=#2\do
+    {%
+      \expandafter\@dtl at getsortdirection\@dtl at level=\relax
+      \DTLifhaskey{#3}{\@dtl at key}%
+      {%
+         \ifdefempty\@dtl at sortorder
+         {\let\@dtl at sortorder=\@dtl at level}%
+         {\eappto\@dtl at sortorder{,\@dtl at level}}%
+      }%
+      {%
+         \PackageError{datatool}%
+         {%
+            Can't sort on `\@dtl at level'.
+            No such key `\@dtl at key' in database `#3'%
+         }{}%
+      }%
+    }%
+    \ifdefempty\@dtl at sortorder
+    {%
+       \PackageWarning{datatool}{No keys provided to sort database `#3'}%
+    }%
+    {%
+      \let\@dtl at comparecs=#4%
+      \dtl at sortdata{#3}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#3' doesn't exist}{}%
+  }%
+}
+\newtoks\@dtl at rowa
+\newtoks\@dtl at rowb
+\newcommand*{\dtl at sortdata}[1]{%
+  \def\@dtl at sortedlist{}%
+  \edef\@dtl at dbname{#1}%
+  \@dtlforeachrow(\@dtl at rowAnum,\@dtl at rowAcontents)\in\@dtl at dbname\do{%
+    \@dtl at rowa=\expandafter{\@dtl at rowAcontents}%
+    \def\@dtl at newlist{}%
+  \@dtl at insertdonefalse
+  \dtlrownum=0\relax
+  \expandafter\@dtl at foreachrow\@dtl at sortedlist
+    \db at row@elt at w%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@@{\@dtl at rowBnum}{\@dtl at rowBcontents}%
+    {%
+      \@dtl at rowb=\expandafter{\@dtl at rowBcontents}%
+      \dtlrownum=\@dtl at rowBnum
+      \if at dtl@insertdone
+        \advance\dtlrownum by 1\relax
+      \else
+        \@dtl at sortcriteria{\@dtl at rowa}{\@dtl at rowb}%
+        \ifnum\dtl at sortresult<0\relax
+          \toks@=\expandafter{\@dtl at newlist}%
+          \edef\@dtl at newlist{%
+            \the\toks@
+            \noexpand\db at row@elt at w%
+             \noexpand\db at row@id at w \number\dtlrownum
+             \noexpand\db at row@id at end@%
+             \the\@dtl at rowa
+             \noexpand\db at row@id at w \number\dtlrownum
+             \noexpand\db at row@id at end@%
+            \noexpand\db at row@elt at end@%
+          }%
+          \advance\dtlrownum by 1\relax
+          \@dtl at insertdonetrue
+        \fi
+      \fi
+      \toks@=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\toks@
+        \noexpand\db at row@elt at w%
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+         \the\@dtl at rowb
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+        \noexpand\db at row@elt at end@%
+      }%
+    }\q at nil
+    \if at dtl@insertdone
+    \else
+      \advance\dtlrownum by 1\relax
+      \toks@=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\toks@
+        \noexpand\db at row@elt at w%
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+         \the\@dtl at rowa
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+        \noexpand\db at row@elt at end@%
+      }%
+    \fi
+    \let\@dtl at sortedlist=\@dtl at newlist
+  }%
+  \expandafter\global\csname dtldb@#1\endcsname=\expandafter
+    {\@dtl at sortedlist}%
+}
+\newcommand{\@dtl at sortcriteria}[2]{%
+  \@for\@dtl at level:=\@dtl at sortorder\do
+  {%
+    \expandafter\@dtl at getsortdirection\@dtl at level=\relax
+    \let\@dtl at keya=\@dtl at key
+    \let\@dtl at keyb=\@dtl at key
+    \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at key}%
+    \dtlgetentryfromrow{\@dtl at a}{\@dtl at col}{#1}%
+    \dtlgetentryfromrow{\@dtl at b}{\@dtl at col}{#2}%
+    \ifx\@dtl at a\dtlnovalue
+      \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+    \fi
+    \ifx\@dtl at b\dtlnovalue
+      \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+    \fi
+    \DTLifnull{\@dtl at a}%
+    {%
+      \@for\@dtl at keya:=\@dtl at replacementkeys\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at keya}%
+        \dtlgetentryfromrow{\@dtl at a}{\@dtl at col}{#1}%
+        \ifx\@dtl at a\dtlnovalue
+          \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+        \fi
+        \DTLifnull{\@dtl at a}{}{\@endfortrue}%
+      }%
+      \ifx\@dtl at keya\@nnil
+        \let\@dtl at keya\@dtl at key
+        \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+      \fi
+    }%
+    {}%
+    \DTLifnull{\@dtl at b}%
+    {%
+      \@for\@dtl at keyb:=\@dtl at replacementkeys\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at keyb}%
+        \dtlgetentryfromrow{\@dtl at b}{\@dtl at col}{#2}%
+        \ifx\@dtl at b\dtlnovalue
+          \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+        \fi
+        \DTLifnull{\@dtl at b}{}{\@endfortrue}%
+      }%
+      \ifx\@dtl at keyb\@nnil
+        \let\@dtl at keyb\@dtl at key
+        \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+      \fi
+    }%
+    {}%
+    \@dtl at toksA=\expandafter{\@dtl at a}%
+    \@dtl at toksB=\expandafter{\@dtl at b}%
+    \edef\@dtl at docompare{\noexpand\dtl at compare@
+      {\@dtl at keya}{\@dtl at keyb}%
+      {\noexpand\@dtl at toksA}{\noexpand\@dtl at toksB}}%
+    \@dtl at docompare
+    \ifnum\dtl at sortresult=0\relax
+      \@endforfalse
+    \else
+      \@endfortrue
+    \fi
+  }%
+  \multiply\dtl at sortresult by -\@dtl at sortdirection\relax
+}
+\def\@dtl at getsortdirection#1=#2\relax{%
+  \def\@dtl at key{#1}%
+  \def\@dtl at sortdirection{#2}%
+  \ifdefempty{\@dtl at sortdirection}%
+  {%
+    \def\@dtl at sortdirection{-1}%
+  }%
+  {%
+    \@dtl at get@sortdirection#2%
+    \def\@dtl at dir{ascending}%
+    \ifx\@dtl at sortdirection\@dtl at dir
+      \def\@dtl at sortdirection{-1}%
+    \else
+      \def\@dtl at dir{descending}%
+      \ifx\@dtl at sortdirection\@dtl at dir
+        \def\@dtl at sortdirection{1}%
+      \else
+        \PackageError{datatool}{Invalid sort direction
+        `\@dtl at sortdirection'}{The sort direction can only be
+         one of `ascending' or `descending'}%
+        \def\@dtl at sortdirection{-1}%
+      \fi
+    \fi
+  }%
+}
+\def\@dtl at get@sortdirection#1={\def\@dtl at sortdirection{#1}}
+\newtoks\@dtl at toksA
+\newtoks\@dtl at toksB
+\newcommand{\dtl at compare}[3]{%
+  \dtl at compare@{#1}{#1}{#2}{#3}%
+}
+\newcommand{\dtl at compare@}[4]{%
+  \DTLgetdatatype{\@dtl at typeA}{\@dtl at dbname}{#1}%
+  \ifx\@dtl at typeA\DTLunsettype
+    \let\@dtl at typeA\DTLstringtype
+  \fi
+  \DTLgetdatatype{\@dtl at typeB}{\@dtl at dbname}{#2}%
+  \ifx\@dtl at typeB\DTLunsettype
+    \let\@dtl at typeB\DTLstringtype
+  \fi
+  \@dtl at tmpcount=\@dtl at typeA\relax
+  \multiply\@dtl at tmpcount by \@dtl at typeB\relax
+  \ifnum\@dtl at tmpcount=0\relax
+    \edef\@dtl at tmpcmp{%
+      \noexpand\@dtl at comparecs{\noexpand\dtl at sortresult}%
+        {\the#3}{\the#4}%
+      }%
+    \@dtl at tmpcmp
+    \ifdtlverbose
+      \edef\@dtl at a{\the#3}%
+      \edef\@dtl at b{\the#4}%
+    \fi
+  \else
+    \edef\@dtl at a{\the#3}%
+    \edef\@dtl at b{\the#4}%
+    \DTLifnumlt{\@dtl at a}{\@dtl at b}%
+    {%
+      \dtl at sortresult=-1\relax
+    }%
+    {%
+      \DTLifnumgt{\@dtl at a}{\@dtl at b}%
+      {%
+        \dtl at sortresult=1\relax
+      }%
+      {%
+        \dtl at sortresult=0\relax
+      }%
+    }%
+  \fi
+  \ifdtlverbose
+    \@onelevel at sanitize\@dtl at a
+    \@onelevel at sanitize\@dtl at b
+    \dtl at message{`\@dtl at a' <=> `\@dtl at b' = \number\dtl at sortresult}%
+  \fi
+}
+\newwrite\@dtl at write
+\newcommand*{\DTLsavedb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \def\@dtl at header{}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)%
+      \in{#1}\do
+    {%
+      \IfSubStringInString{\@dtl at separator}{\@dtl at key}%
+      {%
+        \ifdefempty{\@dtl at header}%
+        {%
+          \protected at edef\@dtl at header{%
+            \@dtl at delimiter\@dtl at key\@dtl at delimiter}%
+        }%
+        {%
+          \toks@=\expandafter{\@dtl at header}%
+          \protected at edef\@dtl at header{%
+            \the\toks@\@dtl at separator
+            \@dtl at delimiter\@dtl at key\@dtl at delimiter}%
+        }%
+      }%
+      {%
+        \ifdefempty{\@dtl at header}%
+        {%
+          \protected at edef\@dtl at header{\@dtl at key}%
+        }%
+        {%
+          \toks@=\expandafter{\@dtl at header}%
+          \protected at edef\@dtl at header{\the\toks@
+            \@dtl at separator\@dtl at key}%
+        }%
+      }%
+    }%
+    \protected at write\@dtl at write{}{\@dtl at header}%
+    \@sDTLforeach{#1}{}%
+    {%
+      \def\@dtl at row{}%
+      \DTLforeachkeyinrow{\@dtl at val}%
+      {%
+        \IfSubStringInString{\@dtl at separator}{\@dtl at val}%
+        {%
+          \ifdefempty{\@dtl at row}%
+          {%
+            \protected at edef\@dtl at row{%
+              \@dtl at delimiter\@dtl at val\@dtl at delimiter}%
+          }%
+          {%
+            \toks@=\expandafter{\@dtl at row}%
+            \protected at edef\@dtl at row{\the\toks@\@dtl at separator
+              \@dtl at delimiter\@dtl at val\@dtl at delimiter}%
+          }%
+        }%
+        {%
+          \ifdefempty{\@dtl at row}%
+          {%
+            \protected at edef\@dtl at row{\@dtl at val}%
+          }%
+          {%
+            \toks@=\expandafter{\@dtl at row}%
+            \protected at edef\@dtl at row{\the\toks@\@dtl at separator
+              \@dtl at val}%
+          }%
+        }%
+      }%
+        \protected at write\@dtl at write{}{\@dtl at row}%
+    }%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLsavetexdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write\@dtl at write{}{\string\DTLnewdb{#1}}%
+    \@sDTLforeach{#1}{}%
+    {%
+      \protected at write\@dtl at write{}{\string\DTLnewrow*{#1}}%
+      \DTLforeachkeyinrow{\@dtl at val}%
+      {%
+        \DTLifnull{\@dtl at val}%
+        {\def\@dtl at val{}}%
+        {}%
+        \protected at write\@dtl at write{}{%
+          \string\DTLnewdbentry*{#1}{\dtlkey}{\@dtl at val}}%
+      }%
+    }%
+    \dtlforeachkey(\@dtl at k,\@dtl at c,\@dtl at t,\@dtl at h)\in{#1}\do
+    {%
+      \@onelevel at sanitize\@dtl at h
+      \protected at write\@dtl at write{}{%
+        \string\DTLsetheader*{#1}{\@dtl at k}{\@dtl at h}}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\dtl at saverawdbhook}{}
+\newcommand*{\DTLsaverawdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write{\@dtl at write}{}{%
+      \string\DTLifdbexists{#1}\expandafter\@gobble\string\%^^J%
+      {%
+         \string\PackageError{datatool}{Database `#1' ^^Jalready exists}{}%
+         \expandafter\@gobble\string\%^^J%
+         \string\aftergroup\string\endinput
+      }%
+      {%
+      }\expandafter\@gobble\string\%
+    }%
+    {%
+      \def\db at row@elt at w{\expandafter\@gobble\string\%^^J\string\db at row@elt at w\space}%
+      \def\db at row@elt at end@{\expandafter\@gobble\string\%^^J\string\db at row@elt at end@\space}%
+      \def\db at row@id at w{\expandafter\@gobble\string\%^^J\string\db at row@id at w\space}%
+      \def\db at row@id at end@{\expandafter\@gobble\string\%^^J\string\db at row@id at end@\space}%
+      \def\db at col@elt at w{\expandafter\@gobble\string\%^^J\string\db at col@elt at w\space}%
+      \def\db at col@elt at end@{\expandafter\@gobble\string\%^^J\string\db at col@elt at end@\space}%
+      \def\db at col@id at w{\expandafter\@gobble\string\%^^J\string\db at col@id at w\space}%
+      \def\db at col@id at end@{\expandafter\@gobble\string\%^^J\string\db at col@id at end@\space}%
+      \def\db at plist@elt at w{\expandafter\@gobble\string\%^^J\string\db at plist@elt at w\space}%
+      \def\db at plist@elt at end@{\expandafter\@gobble\string\%^^J\string\db at plist@elt at end@\space}%
+      \def\db at key@id at w{\expandafter\@gobble\string\%^^J\string\db at key@id at w\space}%
+      \def\db at key@id at end@{\expandafter\@gobble\string\%^^J\string\db at key@id at end@\space}%
+      \def\db at type@id at w{\expandafter\@gobble\string\%^^J\string\db at type@id at w\space}%
+      \def\db at type@id at end@{\expandafter\@gobble\string\%^^J\string\db at type@id at end@\space}%
+      \def\db at header@id at w{\expandafter\@gobble\string\%^^J\string\db at header@id at w\space}%
+      \def\db at header@id at end@{\expandafter\@gobble\string\%^^J\string\db at header@id at end@\space}%
+      \protected at write{\@dtl at write}{}{\string\bgroup\string\makeatletter}%
+      \protected at write{\@dtl at write}{}{%
+        \string\dtl at message{Reconstructing database^^J`#1'}%
+        \expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter
+       \string\global\string\expandafter^^J\string\newtoks
+       \string\csname\space dtlkeys@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J
+        \string\csname\space dtlkeys@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \expandafter\protected at xdef\csname dtl at rawwritedbkeys@#1\endcsname{%
+        \the\csname dtlkeys@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\csname dtl at rawwritedbkeys@#1\endcsname}%
+      \protected at write{\@dtl at write}{}%
+         {\expandafter\@gobble\string\}\expandafter\@gobble\string\%}%
+      \dtl at saverawdbhook
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter\string\global
+       \string\expandafter^^J\string\newtoks
+         \string\csname\space dtldb@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J\string\csname\space dtldb@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \expandafter\protected at xdef\csname dtl at rawwritedb@#1\endcsname{\the\csname dtldb@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\csname dtl at rawwritedb@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\expandafter\@gobble\string\}\expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlrows@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlrows@#1\string\endcsname
+        =\expandafter\number\csname dtlrows@#1\endcsname\string\relax}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlcols@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlcols@#1\string\endcsname
+        =\expandafter\number\csname dtlcols@#1\endcsname\string\relax}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \edef\dtl at tmp{%
+        \string\expandafter^^J
+        \string\gdef
+        \string\csname\space dtl at ci@#1@\@dtl at key\string\endcsname
+        {\csname dtl at ci@#1@\@dtl at key\endcsname}\expandafter\@gobble\string\%
+      }%
+      \expandafter\write\expandafter\@dtl at write\expandafter{\dtl at tmp}%
+    }%
+      \protected at write{\@dtl at write}{}{\string\egroup}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLprotectedsaverawdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write{\@dtl at write}{}{%
+      \string\DTLifdbexists{#1}\expandafter\@gobble\string\%^^J%
+      {%
+         \string\PackageError{datatool}{Database `#1' ^^Jalready exists}{}%
+         \expandafter\@gobble\string\%^^J%
+         \string\aftergroup\string\endinput
+      }%
+      {%
+      }\expandafter\@gobble\string\%
+    }%
+    {%
+      \protected at write{\@dtl at write}{}{\string\bgroup\string\makeatletter}%
+      \protected at write{\@dtl at write}{}{\string\dtl at message{Reconstructing database
+        ^^J`#1'}\expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter
+       \string\global\string\expandafter^^J\string\newtoks
+       \string\csname\space dtlkeys@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J
+        \string\csname\space dtlkeys@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \edef\dtl at rawwrite@keys{\the\csname dtlkeys@#1\endcsname}%
+      \@onelevel at sanitize\dtl at rawwrite@keys
+      \expandafter\write\expandafter\@dtl at write\expandafter
+         {\dtl at rawwrite@keys\expandafter\@gobble\string\}}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter\string\global
+       \string\expandafter^^J\string\newtoks
+         \string\csname\space dtldb@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J\string\csname\space dtldb@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \edef\dtl at rawwrite@db{\the\csname dtldb@#1\endcsname}%
+      \@onelevel at sanitize\dtl at rawwrite@db
+      \expandafter\write\expandafter\@dtl at write\expandafter
+         {\dtl at rawwrite@db\expandafter\@gobble\string\}}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlrows@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlrows@#1\string\endcsname
+        =\expandafter\number\csname dtlrows@#1\endcsname\string\relax}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlcols@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlcols@#1\string\endcsname
+        =\expandafter\number\csname dtlcols@#1\endcsname\string\relax}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \edef\dtl at tmp{%
+        \string\expandafter^^J
+        \string\gdef
+        \string\csname\space dtl at ci@#1@\@dtl at key\string\endcsname
+        {\csname dtl at ci@#1@\@dtl at key\endcsname}\expandafter\@gobble\string\%
+      }%
+      \expandafter\write\expandafter\@dtl at write\expandafter{\dtl at tmp}%
+    }%
+      \protected at write{\@dtl at write}{}{\string\egroup}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLloaddbtex}[2]{%
+  \IfFileExists{#2}%
+  {%
+    \input{#2}%
+    \ifdef#1%
+    {%
+      \PackageError{datatool}{Command \string#1\space is already defined}%
+      {}%
+    }%
+    {%
+      \let#1\dtllastloadeddb
+    }%
+  }%
+  {%
+    \PackageError{datatool}{File `#2' doesn't exist.}{}%
+  }%
+}
+\newread\@dtl at read
+\newcount\dtl at entrycr
+\define at boolkey{loaddb}[dtl]{noheader}[true]{}
+\define at boolkey{loaddb}[dtl]{autokeys}[true]{}
+\dtlautokeysfalse
+\define at key{loaddb}{keys}{%
+  \dtl at entrycr=0\relax
+  \@for\@dtl at key:=#1\do
+  {%
+    \advance\dtl at entrycr by 1\relax
+    \expandafter
+      \edef\csname @dtl at inky@\romannumeral\dtl at entrycr\endcsname{%
+        \@dtl at key}%
+  }%
+}
+\define at key{loaddb}{headers}{%
+  \dtl at entrycr=0\relax
+  \@for\@dtl at head:=#1\do
+  {%
+    \advance\dtl at entrycr by 1\relax
+    \toks@=\expandafter{\@dtl at head}%
+    \expandafter
+      \edef\csname @dtl at inhd@\romannumeral\dtl at entrycr\endcsname{%
+        \the\toks@}%
+  }%
+}
+\newcount{\dtl at omitlines}
+\define at key{loaddb}{omitlines}{\dtl at omitlines=#1\relax}
+\newcommand*{\dtldefaultkey}{Column}
+\newcommand*{\@dtl at readline}[2]{%
+  \begingroup
+  \catcode\endlinechar=\active%
+  \global\read#1 to #2%
+  \endgroup%
+  \ifx#2\empty%
+  \else%
+    \expandafter\@dtl at stripeol#2%
+    \let#2\@dtl at strippedline%
+  \fi%
+}
+\begingroup
+\catcode\endlinechar=\active%
+\gdef\@dtl at stripeol#1
+{\gdef\@dtl at strippedline{#1}}
+\endgroup
+\newcommand*{\@dtl at readrawline}[2]{%
+  \@dtl at rawread#1 to #2%
+  \dtl at domappings\@dtl at line
+}
+\newif\ifDTLnewdbonload
+\DTLnewdbonloadtrue
+\newcommand*{\DTLloaddb}{%
+  \let\@dtl at doreadline\@dtl at readline
+  \@dtlloaddb
+}
+\newcommand*{\@dtlloaddb}[3][]{%
+  \IfFileExists{#3}{%
+  \begingroup
+    \catcode`\"12\relax
+     \dtlnoheaderfalse
+     \setkeys{loaddb}{#1}%
+    \openin\@dtl at read=#3%
+    \dtl at message{Reading `#3'}%
+    \loop
+    \ifnum \dtl at omitlines > \z@
+      \advance\dtl at omitlines by \m at ne
+      \read\@dtl at read to \@dtl at line
+    \repeat
+    \ifDTLnewdbonload
+     \DTLnewdb{#2}%
+    \fi
+    \ifeof\@dtl at read
+      \PackageWarning{datatool}{File `#3' has no data}%
+    \else
+      \ifdtlnoheader
+      \else
+        \loop
+          \@dtl at conditionfalse
+          \ifeof\@dtl at read
+          \else
+           \@dtl at doreadline\@dtl at read\@dtl at line
+            \ifdefempty{\@dtl at line}%
+            {%
+              \@dtl at conditiontrue
+            }%
+            {%
+            }%
+          \fi
+        \if at dtl@condition
+        \repeat
+        \protected at edef\@dtl at lin@{%
+           \@dtl at separator\@dtl at line\@dtl at separator}%
+        \dtl at entrycr=0\relax
+       \loop
+        \expandafter\@dtl at lopoff\@dtl at lin@\to\@dtl at lin@\@dtl at key
+        \advance\dtl at entrycr by 1\relax
+        \ifdtlautokeys
+          \csedef{@dtl at inky@\romannumeral\dtl at entrycr}%
+             {\dtldefaultkey\number\dtl at entrycr}%
+        \else
+          \ifdefempty{\@dtl at key}%
+          {%
+            \edef\@dtl at key{\dtldefaultkey\number\dtl at entrycr}%
+          }%
+          {}%
+        \fi
+        \expandafter\@dtl at toks\expandafter{\@dtl at key}%
+        \@ifundefined{@dtl at inky@\romannumeral\dtl at entrycr}%
+        {%
+          \expandafter
+            \edef\csname @dtl at inky@\romannumeral
+              \dtl at entrycr\endcsname{\the\@dtl at toks}%
+        }%
+        {%
+          \@ifundefined{@dtl at inhd@\romannumeral\dtl at entrycr}%
+          {%
+            \expandafter
+              \edef\csname @dtl at inhd@\romannumeral
+                \dtl at entrycr\endcsname{\the\@dtl at toks}%
+          }%
+          {}%
+        }%
+        \ifx\@dtl at lin@\@dtl at separator
+          \@dtl at conditionfalse
+        \else
+          \@dtl at conditiontrue
+        \fi
+       \if at dtl@condition
+       \repeat
+      \fi
+       \ifeof\@dtl at read
+          \ifdtlnoheader
+            \PackageWarning{datatool}{No data in `#3'}%
+          \else
+            \PackageWarning{datatool}{Only header row found in `#3'}%
+          \fi
+       \else
+         \@dtl at conditiontrue
+         \loop
+          \@dtl at doreadline\@dtl at read\@dtl at line
+           \ifdefempty{\@dtl at line}%
+           {%
+           }%
+           {%
+             \@sDTLnewrow{#2}%
+             \expandafter\@dtl at toks\expandafter{\@dtl at line}%
+             \edef\@dtl at lin@{\@dtl at separator\the\@dtl at toks
+               \@dtl at separator}%
+             \dtl at entrycr=0\relax
+             {%
+               \@dtl at conditiontrue
+               \loop
+                 \expandafter\@dtl at lopoff\@dtl at lin@\to
+                   \@dtl at lin@\@dtl at thisentry
+                 \advance\dtl at entrycr by 1\relax
+                 \@ifundefined{@dtl at inky@\romannumeral\dtl at entrycr}%
+                 {%
+                   \edef\@dtl at thiskey{\dtldefaultkey
+                     \number\dtl at entrycr}%
+                   \expandafter\let
+                     \csname @dtl at inky@\romannumeral
+                       \dtl at entrycr\endcsname\@dtl at thiskey
+                 }%
+                 {%
+                   \edef\@dtl at thiskey{%
+                     \csname @dtl at inky@\romannumeral
+                       \dtl at entrycr\endcsname}%
+                 }%
+                 \expandafter\@dtl at toks\expandafter{\@dtl at thisentry}%
+                 \edef\@do at dtlnewentry{\noexpand\@sDTLnewdbentry
+                   {#2}{\@dtl at thiskey}{\the\@dtl at toks}}%
+                 \@do at dtlnewentry
+                 \ifx\@dtl at lin@\@dtl at separator
+                   \@dtl at conditionfalse
+                 \fi
+               \if at dtl@condition
+               \repeat
+             }%
+         }%
+         \ifeof\@dtl at read \@dtl at conditionfalse\fi
+         \if at dtl@condition
+         \repeat
+       \fi
+    \fi
+    \closein\@dtl at read
+     \edef\@dtl at maxcols{\expandafter
+       \number\csname dtlcols@#2\endcsname}%
+     \dtlgforint\dtl at entrycr=1\to\@dtl at maxcols\step1\do
+     {%
+       \@ifundefined{@dtl at inhd@\romannumeral\dtl at entrycr}%
+       {}%
+       {%
+          \expandafter\let\expandafter\@dtl at head
+            \csname @dtl at inhd@\romannumeral\dtl at entrycr\endcsname
+          \@dtl at toks=\expandafter{\@dtl at head}%
+          \edef\@dtl at dosetheader{\noexpand\@dtl at setheaderforindex
+            {#2}{\number\dtl at entrycr}{\the\@dtl at toks}}%
+          \@dtl at dosetheader
+       }%
+     }%
+  \endgroup
+  }{%
+    \PackageError{datatool}{Can't load database `#2' (file `#3'
+    doesn't exist)}{}%
+  }%
+}
+\newcommand*\DTLloadrawdb{%
+  \let\@dtl at doreadline\@dtl at readrawline
+  \@dtlloaddb
+}
+\begingroup
+\catcode`\%=\active
+\catcode`$=\active
+\catcode`&=\active
+\catcode`~=\active
+\catcode`_=\active
+\catcode`^=\active
+\catcode`#=\active
+\catcode`?=6\relax
+\catcode`<=1\relax
+\catcode`>=2\relax
+\catcode`\{=\active
+\catcode`\}=\active
+\gdef\@dtl at rawread?1to?2<\relax
+<<\catcode`\%=\active
+\catcode`$=\active
+\catcode`&=\active
+\catcode`~=\active
+\catcode`_=\active
+\catcode`^=\active
+\catcode`#=\active
+\catcode`\{=\active
+\catcode`\}=\active
+\def%<\noexpand\%>\relax
+\def$<\noexpand\$>\relax
+\def&<\&>\relax
+\def#<\#>\relax
+\def~<\noexpand\textasciitilde>\relax
+\def_<\noexpand\_>\relax
+\def^<\noexpand\textasciicircum>\relax
+\@dtl at activatebraces
+\@dtl at doreadraw?1?2>>>
+\gdef\@dtl at doreadraw?1?2<\relax
+\begingroup\catcode\endlinechar=\active\global\read?1 to \dtl at tmp\endgroup
+\expandafter\@dtl at stripeol\dtl at tmp
+\let\dtl at tmp\@dtl at strippedline
+\protected at xdef?2<\dtl at tmp>\relax
+>
+\endgroup
+\begingroup
+\catcode`\{=\active
+\catcode`\}=\active
+\catcode`<=1\relax
+\catcode`>=2\relax
+\gdef\@dtl at activatebraces<%
+ \catcode`\{=\active
+ \catcode`\}=\active
+ \def{<\noexpand\{>%
+ \def}<\noexpand\}>%
+>%
+\endgroup
+\newcommand*{\DTLrawmap}[2]{%
+  \expandafter\@dtl at toks\expandafter{\@dtl at rawmappings}%
+  \ifdefempty{\@dtl at rawmappings}%
+  {%
+    \def\@dtl at rawmappings{{#1}{#2}}%
+  }%
+  {%
+    \def\@dtl at tmp{{#1}{#2}}%
+    \protected at edef\@dtl at rawmappings{\the\@dtl at toks,\@dtl at tmp}%
+  }%
+}
+\newcommand*{\@dtl at rawmappings}{}
+\newcommand*{\dtl at domappings}[1]{%
+  \@for\@dtl at map:=\@dtl at rawmappings\do{%
+    \expandafter\DTLsubstituteall\expandafter#1\@dtl at map
+  }%
+}
+\newcommand*{\dtlshowdb}[1]{%
+  \expandafter\showthe\csname dtldb@#1\endcsname
+}
+\newcommand*{\dtlshowdbkeys}[1]{%
+  \expandafter\showthe\csname dtlkeys@#1\endcsname
+}
+\newcommand*{\dtlshowtype}[2]{%
+  \DTLgetdatatype{\@dtl at type}{#1}{#2}\show\@dtl at type
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datatool-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datatool-base-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datatool-base-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-base}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{etoolbox}
+\RequirePackage{amsmath}
+\RequirePackage{xkeyval}
+\RequirePackage{xfor}
+\RequirePackage{ifthen}
+\RequirePackage{substr}[2009/10/20]
+\ifundef{\ifdtlverbose}
+{
+  \define at boolkey{datatool-base.sty}[dtl]{verbose}[true]{}
+}%
+{}
+\define at choicekey{datatool-base.sty}{math}[\val\nr]{fp,pgfmath}{%
+  \renewcommand*\@dtl at mathprocessor{#1}%
+}
+\define at boolkey{datatool-base.sty}[@dtl@]{utf8}[true]{}
+\ifdef\UTFviii at two@octets
+{\booltrue{@dtl at utf8}}%
+{\boolfalse{@dtl at utf8}}
+\newcommand*{\dtlenableUTFviii}{\booltrue{@dtl at utf8}}
+\newcommand*{\dtldisableUTFviii}{\boolfalse{@dtl at utf8}}
+\providecommand*{\@dtl at mathprocessor}{fp}
+\ProcessOptionsX
+\RequirePackage{datatool-\@dtl at mathprocessor}[=v2.32]
+\newcommand*{\dtl at message}[1]{%
+  \ifdtlverbose\typeout{#1}\fi
+}
+\newtoks\@dtl at toks
+\newcount\@dtl at tmpcount
+\newlength\dtl at tmplength
+\newcommand{\dtl at ifsingle}[3]{%
+  \def\@dtl at arg{#1}%
+  \ifdefempty{\@dtl at arg}%
+  {%
+    #3%
+  }%
+  {%
+    \@dtl at ifsingle#1\@nil{#2}{#3}%
+  }%
+}
+\def\@dtl at ifsingle#1#2\@nil#3#4{%
+  \def\dtl at sg@arg{#2}%
+  \ifdefempty{\dtl at sg@arg}%
+  {%
+   #3%
+  }%
+  {%
+   #4%
+  }%
+}
+\newcommand{\dtl at ifsingleorUTFviii}[3]{%
+  \ifbool{@dtl at utf8}
+  {%
+    \def\@dtl at arg{#1}%
+    \ifdefempty{\@dtl at arg}%
+    {%
+      #3%
+    }%
+    {%
+      \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+      {%
+        \dtl at getfirst@UTFviii#1\@nil\end at dtl@getfirst at UTFviii
+        \ifdefempty\dtl at rest{#2}{#3}%
+      }%
+      {%
+        \@dtl at ifsingle#1\@nil{#2}{#3}%
+      }%
+    }%
+  }%
+  {%
+    \dtl at ifsingle{#1}{#2}{#3}%
+  }%
+}%
+\newcommand{\dtlifintopenbetween}[5]{%
+  \ifnum#1>#2\relax
+    \ifnum#1<#3\relax
+      #4%
+    \else
+      #5%
+    \fi
+  \else
+    #5%
+  \fi
+}
+\newcommand{\dtlifintclosedbetween}[5]{%
+  \dtlifintopenbetween{#1}{#2}{#3}{#4}%
+  {%
+    \ifnum#1=#2\relax
+      #4%
+    \else
+      \ifnum#1=#3\relax
+        #4%
+      \else
+        #5%
+      \fi
+    \fi
+  }%
+}
+\long\def\long at collect@body#1{%
+  \@envbody{\@xp#1\@xp{\the\@envbody}}%
+  \edef\process at envbody{\the\@envbody\@nx\end{\@currenvir}}%
+  \@envbody\@emptytoks \def\begin at stack{b}%
+  \begingroup
+  \@xp\let\csname\@currenvir\endcsname\long at collect@@body
+  \edef\process at envbody{\@xp\@nx\csname\@currenvir\endcsname}%
+  \process at envbody
+}
+\long\def\long at addto@envbody#1{%
+  \toks@{#1}%
+  \edef\@dtl at tmp{\the\@envbody\the\toks@}%
+  \global\@envbody\@xp{\@dtl at tmp}%
+}
+\long\def\long at collect@@body#1\end#2{%
+  \protected at edef\begin at stack{%
+    \long at push@begins#1\begin\end \@xp\@gobble\begin at stack
+  }%
+  \ifx\@empty\begin at stack
+    \endgroup
+    \@checkend{#2}%
+    \long at addto@envbody{#1}%
+  \else
+    \long at addto@envbody{#1\end{#2}}%
+  \fi
+  \process at envbody
+}
+\long\def\long at push@begins#1\begin#2{%
+  \ifx\end#2\else b\@xp\long at push@begins\fi
+}
+\newcommand*{\DTLifinlist}[4]{%
+  \def\@dtl at doifinlist##1,#1,##2\end at dtl@doifinlist{%
+     \def\@before{##1}%
+     \def\@after{##2}%
+  }%
+  \expandafter\@dtl at doifinlist\expandafter,#2,#1,\@nil
+    \end at dtl@doifinlist
+  \ifx\@after\@nnil
+    #4%
+  \else
+    #3%
+  \fi
+}
+\newif\ifDTLlistskipempty
+\DTLlistskipemptytrue
+\newrobustcmd{\DTLlistelement}[2]{%
+  \begingroup
+    \@dtl at tmpcount=0\relax
+    \@for\@dtl at element:=#1\do{%
+     \ifDTLlistskipempty
+       \ifdefempty{\@dtl at element}%
+       {}%
+       {%
+         \advance\@dtl at tmpcount by 1\relax%
+         \ifnum\@dtl at tmpcount=#2 \@dtl at element\@endfortrue\fi
+       }%
+     \else
+       \advance\@dtl at tmpcount by 1\relax%
+       \ifnum\@dtl at tmpcount=#2 \@dtl at element\@endfortrue\fi
+     \fi
+    }%
+    \if at endfor \else\@dtl at listelement@outofrange{#2}\fi
+  \endgroup
+}
+\newrobustcmd{\DTLfetchlistelement}[3]{%
+ \begingroup
+   \@dtl at tmpcount=0\relax
+   \@for\@dtl at element:=#1\do{%
+    \ifDTLlistskipempty
+      \ifdefempty{\@dtl at element}%
+      {}%
+      {%
+        \advance\@dtl at tmpcount by 1\relax%
+        \ifnum\@dtl at tmpcount=#2 \@endfortrue\fi
+      }%
+    \else
+      \advance\@dtl at tmpcount by 1\relax%
+      \ifnum\@dtl at tmpcount=#2 \@endfortrue\fi
+    \fi
+   }%
+   \if at endfor \else\def\@dtl at element{\@dtl at listelement@outofrange{#2}}\fi
+   \edef\x{%
+     \endgroup
+     \noexpand\def\noexpand#3{\expandonce\@dtl at element}%
+   }\x
+}
+\newcommand{\@dtl at listelement@outofrange}[1]{%
+  \PackageWarning{datatool-base}{List index `\number#1' out of range}%
+}
+\newrobustcmd{\DTLnumitemsinlist}[2]{%
+  \@dtl at tmpcount=0\relax
+  \@for\@dtl at element:=#1\do{%
+     \ifDTLlistskipempty
+       \ifdefempty{\@dtl at element}%
+       {}%
+       {\advance\@dtl at tmpcount by 1\relax}%
+     \else
+       \advance\@dtl at tmpcount by 1\relax
+     \fi
+  }%
+  \edef#2{\number\@dtl at tmpcount}%
+}
+\newcommand*{\dtl at choplast}[3]{%
+  \let#2\@empty
+  \let#3\@empty
+  \@for\@dtl at element:=#1\do{%
+    \ifdefempty{#3}%
+    {%
+    }%
+    {%
+      \ifdefempty{#2}%
+      {%
+        \expandafter\toks@\expandafter{#3}%
+        \edef#2{{\the\toks@}}%
+      }%
+      {%
+        \expandafter\toks@\expandafter{#3}%
+        \expandafter\@dtl at toks\expandafter{#2}%
+        \edef#2{\the\@dtl at toks,{\the\toks@}}%
+      }%
+    }%
+    \let#3=\@dtl at element%
+  }%
+}
+\newcommand*{\dtl at chopfirst}[3]{%
+  \let#2=\@empty
+  \let#3=\@empty
+  \@for\@dtl at element:=#1\do{%
+    \let#2=\@dtl at element
+    \@endfortrue
+  }%
+  \if at endfor
+   \let#3=\@forremainder
+  \fi
+  \@endforfalse
+}
+\newcommand{\dtl at sortlist}[2]{%
+\def\@dtl at sortedlist{}%
+\@for\@dtl at currentrow:=#1\do{%
+\expandafter\dtl at insertinto\expandafter
+  {\@dtl at currentrow}{\@dtl at sortedlist}{#2}%
+\@endforfalse}%
+\let#1=\@dtl at sortedlist
+}
+\newcommand{\dtl at insertinto}[3]{%
+  \def\@dtl at newsortedlist{}%
+  \@dtl at insertdonefalse
+  \@for\dtl at srtelement:=#2\do{%
+    \if at dtl@insertdone
+      \expandafter\toks@\expandafter{\dtl at srtelement}%
+      \edef\@dtl at newstuff{{\the\toks@}}%
+    \else
+      \expandafter#3\expandafter{\dtl at srtelement}{#1}%
+      \ifnum\dtl at sortresult<0\relax
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \@dtl at toks{#1}%
+        \edef\@dtl at newstuff{{\the\@dtl at toks},{\the\toks@}}%
+        \@dtl at insertdonetrue
+      \else
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{{\the\toks@}}%
+      \fi
+    \fi
+    \ifdefempty{\@dtl at newsortedlist}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@}%
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \expandafter\@dtl at toks\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    }%
+    \@endforfalse
+  }%
+  \ifdefempty{\@dtl at newsortedlist}%
+  {%
+    \@dtl at toks{#1}%
+    \edef\@dtl at newsortedlist{{\the\@dtl at toks}}%
+  }%
+  {%
+    \if at dtl@insertdone
+    \else
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \@dtl at toks{#1}%
+      \edef\@dtl at newsortedlist{\the\toks@,{\the\@dtl at toks}}%
+    \fi
+  }%
+  \global\let#2=\@dtl at newsortedlist
+}
+\newcommand{\dtlsortlist}[2]{%
+\def\@dtl at sortedlist{}%
+\@for\@dtl at currentrow:=#1\do{%
+\expandafter\dtlinsertinto\expandafter
+  {\@dtl at currentrow}{\@dtl at sortedlist}{#2}%
+\@endforfalse}%
+\let#1=\@dtl at sortedlist
+}
+\newcommand{\dtlinsertinto}[3]{%
+  \def\@dtl at newsortedlist{}%
+  \@dtl at insertdonefalse
+  \@for\dtl at srtelement:=#2\do{%
+    \expandafter\DTLifSubString\expandafter{\dtl at srtelement}{,}
+    {%
+      \expandafter\toks@\expandafter{\dtl at srtelement}%
+      \edef\dtl at srtelement{{\the\toks@}}%
+    }%
+    {%
+    }
+    \if at dtl@insertdone
+      \let\@dtl at newstuff\dtl at srtelement
+    \else
+      \expandafter#3\expandafter\dtl at sortresult
+        \expandafter{\dtl at srtelement}{#1}%
+      \ifnum\dtl at sortresult>0\relax
+        \DTLifSubString{#1}{,}%
+        {%
+          \@dtl at toks{{#1}}%
+        }%
+        {%
+          \@dtl at toks{#1}%
+        }%
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{\the\@dtl at toks,\the\toks@}%
+        \@dtl at insertdonetrue
+      \else
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{{\the\toks@}}%
+        \let\@dtl at newstuff\dtl at srtelement
+      \fi
+    \fi
+    \ifdefempty{\@dtl at newsortedlist}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@}%
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \expandafter\@dtl at toks\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    }%
+    \@endforfalse
+  }%
+  \ifdefempty{\@dtl at newsortedlist}%
+  {%
+    \DTLifSubString{#1}{,}%
+    {%
+      \@dtl at toks{{#1}}%
+    }%
+    {%
+      \@dtl at toks{#1}%
+    }%
+    \edef\@dtl at newsortedlist{\the\@dtl at toks}%
+  }%
+  {%
+    \if at dtl@insertdone
+    \else
+      \DTLifSubString{#1}{,}%
+      {%
+        \@dtl at toks{{#1}}%
+      }%
+      {%
+        \@dtl at toks{#1}%
+      }%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    \fi
+  }%
+  \global\let#2=\@dtl at newsortedlist
+}
+\newcommand*{\edtlinsertinto}[3]{%
+  \protected at edef\dtl at srtelement{#1}%
+  \expandafter\dtlinsertinto\expandafter{\dtl at srtelement}{#2}{#3}%
+}
+\newif\if at dtl@insertdone
+\newcount\dtl at sortresult
+\newcommand*{\DTLlistformatsep}{, }
+\newcommand*{\DTLlistformatoxford}{}
+\ifdef\andname
+{\newcommand*{\DTLandname}{\andname}}
+{\newcommand*{\DTLandname}{\&}}
+\newcommand*{\DTLlistformatlastsep}{ \DTLandname\space}
+\newcommand*{\DTLlistformatitem}[1]{#1}
+\newcommand*{\@dtl at formatlist@handler}[1]{%
+  \@dtl at formatlist@itemsep
+  \@dtl at formatlist@lastitem
+  \renewcommand{\@dtl at formatlist@lastitem}{%
+    \renewcommand{\@dtl at formatlist@itemsep}{%
+      \DTLlistformatsep
+      \renewcommand*{\@dtl at formatlist@prelastitemsep}{%
+        \DTLlistformatoxford}}%
+    \renewcommand{\@dtl at formatlist@prelastitem}{%
+      \@dtl at formatlist@prelastitemsep
+       \DTLlistformatlastsep}%
+    \DTLlistformatitem{#1}%
+  }%
+}%
+\newrobustcmd*{\DTLformatlist}{%
+ \@ifstar{\s at dtlformatlist}{\@dtlformatlist}%
+}
+\newcommand*{\s at dtlformatlist}[1]{%
+  \def\@dtl at formatlist@itemsep{}%
+  \def\@dtl at formatlist@lastitem{}%
+  \def\@dtl at formatlist@prelastitem{}%
+  \def\@dtl at formatlist@prelastitemsep{}%
+  \@for\@dtl at formatlist@item:=#1\do{%
+    \ifDTLlistskipempty
+      \ifdefempty{\@dtl at formatlist@item}%
+      {}%
+      {\expandafter\@dtl at formatlist@handler\expandafter{\@dtl at formatlist@item}}%
+    \else
+      \expandafter\@dtl at formatlist@handler\expandafter{\@dtl at formatlist@item}%
+    \fi
+  }%
+  \@dtl at formatlist@prelastitem\@dtl at formatlist@lastitem
+}
+\newcommand*{\@dtlformatlist}[1]{{\s at dtlformatlist{#1}}}
+\newcommand{\@dtl at toks@gput at right@cx}[2]{%
+  \def\@dtl at toks@name{#1}%
+  \edef\@dtl at stuff{#2}%
+  \global\csname\@dtl at toks@name\endcsname\expandafter
+    \expandafter\expandafter{\expandafter\the
+    \csname\expandafter\@dtl at toks@name\expandafter\endcsname\@dtl at stuff}%
+}
+\newcommand{\@dtl at toks@gconcat at middle@cx}[4]{%
+  \def\@dtl at toks@name{#1}%
+  \edef\@dtl at stuff{#3}%
+  \global\csname\@dtl at toks@name\endcsname\expandafter\expandafter
+    \expandafter\expandafter\expandafter
+    \expandafter\expandafter{\expandafter\expandafter\expandafter
+    \the\expandafter\expandafter\expandafter#2%
+    \expandafter\@dtl at stuff\the#4}%
+}
+\newcount\@dtl at numgrpsepcount
+\newcommand*{\@dtl at decimal}{.}
+\newcommand*{\@dtl at numbergroupchar}{,}
+\newcommand*{\DTLsetnumberchars}[2]{%
+  \renewcommand*{\@dtl at numbergroupchar}{#1}%
+  \renewcommand*{\@dtl at decimal}{#2}%
+  \@dtl at construct@getnums
+  \@dtl at construct@stripnumgrpchar{#1}%
+}
+\edef\@dtl at construct@getintfrac#1{%
+  \noexpand\def\noexpand\@dtl at getintfrac##1#1##2\noexpand\relax{%
+    \noexpand\@dtl at get@intpart{##1}%
+    \noexpand\def\noexpand\@dtl at fracpart{##2}%
+    \noexpand\ifdefempty{\noexpand\@dtl at fracpart}
+    {%
+      \noexpand\def\noexpand\@dtl at fracpart{0}%
+    }%
+    {%
+      \noexpand\@dtl at getfracpart##2\noexpand\relax
+      \noexpand\@dtl at choptrailingzeroes{\noexpand\@dtl at fracpart}%
+    }%
+  }%
+  \noexpand\def\noexpand\@dtl at getfracpart##1#1\noexpand\relax{%
+    \noexpand\def\noexpand\@dtl at fracpart{##1}%
+  }%
+  \noexpand\def\noexpand\DTLconverttodecimal##1##2{%
+    \noexpand\dtl at ifsingle{##1}%
+    {%
+      \noexpand\expandafter\noexpand\toks@\noexpand\expandafter{##1}%
+      \noexpand\edef\noexpand\@dtl at tmp{\noexpand\the\noexpand\toks@}%
+    }%
+    {%
+      \noexpand\def\noexpand\@dtl at tmp{##1}%
+    }%
+    \noexpand\@dtl at standardize@currency\noexpand\@dtl at tmp
+    \noexpand\ifdefempty{\noexpand\@dtl at org@currency}%
+    {%
+    }%
+    {%
+      \noexpand\let\noexpand\@dtl at currency\noexpand\@dtl at org@currency
+    }%
+    \noexpand\expandafter
+      \noexpand\@dtl at getintfrac\noexpand\@dtl at tmp#1\noexpand\relax
+    \noexpand\edef##2{\noexpand\@dtl at intpart.\noexpand\@dtl at fracpart}%
+  }%
+}
+\newcommand*{\@dtl at construct@getnums}{%
+  \expandafter\@dtl at construct@getintfrac\expandafter{\@dtl at decimal}%
+}
+\newcommand*{\@dtl at get@intpart}[1]{%
+  \@dtl at tmpcount=1\relax
+  \def\@dtl at intpart{#1}%
+  \ifx\@dtl at intpart\@empty
+    \def\@dtl at intpart{0}%
+  \else
+    \def\@dtl at intpart{}%
+    \@dtl at get@int at part#1.\relax%
+  \fi
+  \ifnum\@dtl at tmpcount<0\relax
+    \edef\@dtl at intpart{-\@dtl at intpart}%
+  \fi
+  \@dtl at strip@numgrpchar{\@dtl at intpart}%
+}
+\def\@dtl at get@int at part#1#2\relax{%
+  \def\@dtl at argi{#1}%
+  \def\@dtl at argii{#2}%
+  \ifx\protect#1\relax%
+    \let\@dtl at get@nextintpart=\@dtl at get@int at part
+  \else
+    \expandafter\ifx\@dtl at argi\$%
+      \let\@dtl at get@nextintpart=\@dtl at get@int at part
+    \else
+      \ifx-#1%
+        \multiply\@dtl at tmpcount by -1\relax
+        \let\@dtl at get@nextintpart=\@dtl at get@int at part
+      \else
+        \if\@dtl at argi+%
+          \let\@dtl at get@nextintpart=\@dtl at get@int at part
+        \else
+          \def\@dtl at intpart{#1}%
+          \ifx.\@dtl at argii
+            \let\@dtl at get@nextintpart=\@gobble
+          \else
+            \let\@dtl at get@nextintpart=\@dtl at get@next at intpart
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+  \@dtl at get@nextintpart#2\relax
+}
+\def\@dtl at get@next at intpart#1.\relax{%
+  \edef\@dtl at intpart{\@dtl at intpart#1}%
+}
+\newcommand*{\@dtl at choptrailingzeroes}[1]{%
+  \def\@dtl at tmpcpz{}%
+  \expandafter\@dtl at chop@trailingzeroes#1\@nil%
+  \let#1=\@dtl at tmpcpz
+}
+\def\@dtl at chop@trailingzeroes#1#2\@nil{%
+  \dtlifnumeq{#2}{0}%
+  {%
+    \edef\@dtl at tmpcpz{\@dtl at tmpcpz#1}%
+    \let\@dtl at chopzeroesnext=\@dtl at gobbletonil
+  }%
+  {%
+    \edef\@dtl at tmpcpz{\@dtl at tmpcpz#1}%
+    \let\@dtl at chopzeroesnext=\@dtl at chop@trailingzeroes
+  }%
+  \@dtl at chopzeroesnext#2\@nil
+}
+\def\@dtl at gobbletonil#1\@nil{}
+\newcommand*{\dtl at truncatedecimal}[1]{%
+  \expandafter\@dtl at truncatedecimal#1.\@nil#1%
+}
+\def\@dtl at truncatedecimal#1.#2\@nil#3{%
+  \def#3{#1}%
+}
+\newcommand*{\@dtl at strip@numgrpchar}[1]{%
+  \def\@dtl at stripped{}%
+  \edef\@dtl at do@stripnumgrpchar{%
+    \noexpand\@@dtl at strip@numgrpchar#1\@dtl at numbergroupchar
+    \noexpand\relax
+  }%
+  \@dtl at do@stripnumgrpchar
+  \let#1=\@dtl at stripped
+}
+\edef\@dtl at construct@stripnumgrpchar#1{%
+  \noexpand\def\noexpand\@@dtl at strip@numgrpchar##1#1##2\noexpand\relax{%
+    \noexpand\expandafter\noexpand\toks@\noexpand\expandafter
+      {\noexpand\@dtl at stripped}%
+    \noexpand\edef\noexpand\@dtl at stripped{%
+      \noexpand\the\noexpand\toks@
+      ##1%
+    }%
+    \noexpand\def\noexpand\@dtl at tmp{##2}%
+    \noexpand\ifx\noexpand\@dtl at tmp\noexpand\@empty
+      \noexpand\let\noexpand\@dtl at next=\noexpand\relax
+    \noexpand\else
+      \noexpand\let\noexpand\@dtl at next=\noexpand\@@dtl at strip@numgrpchar
+    \noexpand\fi
+    \noexpand\@dtl at next##2\noexpand\relax
+  }%
+}
+\newcommand*{\DTLdecimaltolocale}[2]{%
+  \edef\@dtl at tmpdtl{#1}%
+  \expandafter\@dtl at decimaltolocale\@dtl at tmpdtl.\relax
+  \dtlifnumeq{\@dtl at fracpart}{0}%
+  {%
+    \edef#2{\@dtl at intpart}%
+  }%
+  {%
+    \edef#2{\@dtl at intpart\@dtl at decimal\@dtl at fracpart}%
+  }%
+}
+\def\@dtl at decimaltolocale#1.#2\relax{%
+  \@dtl at decimaltolocaleint{#1}%
+  \def\@dtl at fracpart{#2}%
+  \ifdefempty\@dtl at fracpart
+  {%
+    \def\@dtl at fracpart{0}%
+  }%
+  {%
+    \@dtl at decimaltolocalefrac#2\relax
+  }%
+}
+\def\@dtl at decimaltolocaleint#1{%
+  \@dtl at tmpcount=0\relax
+  \@dtl at countdigits#1.\relax
+  \@dtl at numgrpsepcount=\@dtl at tmpcount\relax
+  \divide\@dtl at numgrpsepcount by 3\relax
+  \multiply\@dtl at numgrpsepcount by 3\relax
+  \advance\@dtl at numgrpsepcount by -\@dtl at tmpcount\relax
+  \ifnum\@dtl at numgrpsepcount<0\relax
+    \advance\@dtl at numgrpsepcount by 3\relax
+  \fi
+  \def\@dtl at intpart{}%
+  \@dtl at decimal@to at localeint#1.\relax
+}
+\def\@dtl at countdigits#1#2\relax{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifx.#2\relax
+    \let\@dtl at countnext=\@gobble
+  \else
+    \let\@dtl at countnext=\@dtl at countdigits
+  \fi
+  \@dtl at countnext#2\relax
+}
+\def\@dtl at decimal@to at localeint#1#2\relax{%
+  \advance\@dtl at numgrpsepcount by 1\relax
+  \ifx.#2\relax
+    \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \let\@dtl at localeintnext=\@gobble
+  \else
+    \ifnum\@dtl at numgrpsepcount=3\relax
+      \edef\@dtl at intpart{\@dtl at intpart#1\@dtl at numbergroupchar}%
+      \@dtl at numgrpsepcount=0\relax
+    \else
+      \ifnum\@dtl at numgrpsepcount>3\relax
+        \@dtl at numgrpsepcount=0\relax
+      \fi
+      \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \fi
+    \let\@dtl at localeintnext=\@dtl at decimal@to at localeint
+  \fi
+  \@dtl at localeintnext#2\relax
+}
+\def\@dtl at decimaltolocalefrac#1.\relax{%
+  \count@=0\relax
+  \@dtl at digitcount#1\relax
+  \ifnum\count@>9\relax
+    \@dtl at chopexcessfrac#1000000000\@nil
+  \else
+    \def\@dtl at fracpart{#1}%
+  \fi
+}
+\newcommand*{\@dtl at chopexcessfrac}[9]{%
+  \def\@dtl at fracpart{#1#2#3#4#5#6#7#8#9}%
+  \@dtl at gobbletonil
+}
+\newcommand*{\@dtl at digitcount}[1]{%
+  \ifx\relax#1\relax
+    \let\@dtl at digitcountnext\relax
+  \else
+    \advance\count@ by \@ne
+    \let\@dtl at digitcountnext\@dtl at digitcount
+  \fi
+  \@dtl at digitcountnext
+}
+\newcommand*{\DTLdecimaltocurrency}[2]{%
+  \edef\@dtl at tmpdtl{#1}%
+  \expandafter\@dtl at decimaltolocale\@dtl at tmpdtl.\relax
+  \dtl at truncatedecimal\@dtl at tmpdtl
+  \@dtl at tmpcount=\@dtl at tmpdtl\relax
+  \expandafter\@dtl at toks\expandafter{\@dtl at currency}%
+  \dtlifnumeq{\@dtl at fracpart}{0}%
+  {%
+    \ifnum\@dtl at tmpcount<0\relax
+      \@dtl at tmpcount = -\@dtl at tmpcount\relax
+      \edef#2{-\the\@dtl at toks\the\@dtl at tmpcount\@dtl at decimal00}%
+    \else
+      \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal00}%
+    \fi
+  }%
+  {%
+    \ifnum\@dtl at tmpcount<0\relax
+      \@dtl at tmpcount = -\@dtl at tmpcount\relax
+      \ifnum\@dtl at fracpart<10\relax
+        \edef#2{%
+          -\the\@dtl at toks\number\@dtl at tmpcount
+          \@dtl at decimal\@dtl at fracpart0%
+        }%
+      \else
+        \edef#2{%
+          -\the\@dtl at toks\number\@dtl at tmpcount
+          \@dtl at decimal\@dtl at fracpart
+        }%
+      \fi
+    \else
+      \ifnum\@dtl at fracpart<10\relax
+        \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal\@dtl at fracpart0}%
+      \else
+        \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal\@dtl at fracpart}%
+      \fi
+    \fi
+  }%
+}
+\@dtl at construct@getnums
+\expandafter\@dtl at construct@stripnumgrpchar\expandafter
+  {\@dtl at numbergroupchar}
+\newcommand*{\@dtl at currencies}{\$,\pounds}
+\newcommand*{\DTLnewcurrencysymbol}[1]{%
+  \expandafter\toks@\expandafter{\@dtl at currencies}%
+  \@dtl at toks{#1}%
+  \edef\@dtl at currencies{\the\@dtl at toks,\the\toks@}%
+}
+\AtBeginDocument{%
+  \@ifundefined{texteuro}{}{\DTLnewcurrencysymbol{\texteuro}}%
+  \@ifundefined{textdollar}{}{\DTLnewcurrencysymbol{\textdollar}}%
+  \@ifundefined{textstirling}{}{\DTLnewcurrencysymbol{\textstirling}}%
+  \@ifundefined{textyen}{}{\DTLnewcurrencysymbol{\textyen}}%
+  \@ifundefined{textwon}{}{\DTLnewcurrencysymbol{\textwon}}%
+  \@ifundefined{textcurrency}{}{\DTLnewcurrencysymbol{\textcurrency}}%
+  \@ifundefined{euro}{}{\DTLnewcurrencysymbol{\euro}}%
+  \@ifundefined{yen}{}{\DTLnewcurrencysymbol{\yen}}%
+}
+\newcommand{\@dtl at standardize@currency}[1]{%
+  \def\@dtl at org@currency{}%
+  \@for\@dtl at thiscurrency:=\@dtl at currencies\do{%
+    \expandafter\toks@\expandafter{\@dtl at thiscurrency}%
+    \edef\@dtl at dosubs{\noexpand\DTLsubstitute{\noexpand#1}%
+     {\the\toks@}{\noexpand\$}}%
+    \@dtl at dosubs
+    \ifdefempty{\@dtl at replaced}%
+    {%
+    }%
+    {%
+      \let\@dtl at org@currency=\@dtl at replaced
+      \@endfortrue
+    }%
+  }%
+  \@endforfalse
+}
+\newcommand*{\@dtl at currency}{\$}
+\newcommand*{\DTLsetdefaultcurrency}[1]{%
+  \renewcommand*{\@dtl at currency}{#1}%
+}
+\newcommand*{\DTLadd}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtladd{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgadd}[3]{%
+  \DTLadd{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLaddall}[2]{%
+  \def\@dtl at sum{0}%
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \dtladd{\@dtl at sum}{\@dtl at sum}{\@dtl at num}%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at sum}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at sum}{#1}%
+  }%
+}
+\newcommand*{\DTLgaddall}[2]{%
+  \DTLaddall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLsub}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtlsub{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgsub}[3]{%
+  \DTLsub{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmul}[3]{%
+  \let\@dtl at thisreplaced=\@empty
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \dtlmul{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at thisreplaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgmul}[3]{%
+ \DTLmul{\@dtl at tmpii}{#2}{#3}%
+ \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLdiv}[3]{%
+  \let\@dtl at thisreplaced=\@empty
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtldiv{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at thisreplaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \ifdefequal{\@dtl at thisreplaced}{\@dtl at replaced}%
+    {%
+      \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+    }%
+    {%
+      \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+    }%
+  }%
+}
+\newcommand*{\DTLgdiv}[3]{%
+  \DTLdiv{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLabs}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlabs{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgabs}[2]{%
+  \DTLabs{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLneg}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlneg{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgneg}[2]{%
+  \DTLneg{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLsqrt}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlroot{\@dtl at tmpi}{\@dtl at numi}{2}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmpi}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmpi}{#1}%
+  }%
+}
+\newcommand*{\DTLgsqrt}[2]{%
+\DTLsqrt{\@dtl at tmpii}{#2}%
+\global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmin}[3]{%
+ \DTLconverttodecimal{#2}{\@dtl at numi}%
+ \DTLconverttodecimal{#3}{\@dtl at numii}%
+ \dtlifnumlt{\@dtl at numi}{\@dtl at numii}%
+ {%
+   \dtl at ifsingle{#2}%
+   {\let#1=#2}%
+   {\def#1{#2}}%
+ }%
+ {%
+  \dtl at ifsingle{#3}%
+  {\let#1=#3}%
+  {\def#1{#3}}%
+ }%
+}
+\newcommand*{\DTLgmin}[3]{%
+  \DTLmin{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLminall}[2]{%
+  \let\@dtl at min=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at min}%
+    {%
+      \let\@dtl at min=\@dtl at num
+    }%
+    {%
+      \dtlmin{\@dtl at min}{\@dtl at min}{\@dtl at num}%
+    }%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at min}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at min}{#1}%
+  }%
+}
+\newcommand*{\DTLgminall}[2]{%
+  \DTLminall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLmax}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtlmax{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \dtlifnumgt{\@dtl at numi}{\@dtl at numii}%
+  {%
+   \dtl at ifsingle{#2}%
+   {\let#1=#2}%
+   {\def#1{#2}}%
+  }%
+  {%
+   \dtl at ifsingle{#3}%
+   {\let#1=#3}%
+   {\def#1{#3}}%
+  }%
+}
+\newcommand*{\DTLgmax}[3]{%
+  \DTLmax{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmaxall}[2]{%
+  \let\@dtl at max=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at max}%
+    {%
+      \let\@dtl at max\@dtl at num
+    }%
+    {%
+      \dtlmax{\@dtl at max}{\@dtl at max}{\@dtl at num}%
+    }%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at max}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at max}{#1}%
+  }%
+}
+\newcommand*{\DTLgmaxall}[2]{%
+\DTLmaxall{\@dtl at tmpi}{#2}%
+\global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLmeanforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at mean}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at mean}{#1}%
+  }%
+}
+\newcommand*{\DTLgmeanforall}[2]{%
+  \DTLmeanforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLvarianceforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \let\@dtl at decvals=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at decvals}%
+    {%
+     \let\@dtl at decvals=\@dtl at num
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at decvals}%
+      \edef\@dtl at decvals{\the\toks@,\@dtl at num}%
+    }%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \def\@dtl at var{0}%
+  \@for\@dtl at num:=\@dtl at decvals\do{%
+    \dtlsub{\@dtl at diff}{\@dtl at num}{\@dtl at mean}%
+    \dtlmul{\@dtl at diff}{\@dtl at diff}{\@dtl at diff}%
+    \dtladd{\@dtl at var}{\@dtl at var}{\@dtl at diff}%
+  }%
+  \dtldiv{\@dtl at var}{\@dtl at var}{\@dtl at n}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at var}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at var}{#1}%
+  }%
+}
+\newcommand*{\DTLgvarianceforall}[2]{%
+  \DTLvarianceforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLsdforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \let\@dtl at decvals=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at decvals}%
+    {%
+     \let\@dtl at decvals=\@dtl at num
+    }%
+    {%
+     \expandafter\toks@\expandafter{\@dtl at decvals}%
+     \edef\@dtl at decvals{\the\toks@,\@dtl at num}%
+    }%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \def\@dtl at sd{0}%
+  \@for\@dtl at num:=\@dtl at decvals\do{%
+    \dtlsub{\@dtl at diff}{\@dtl at num}{\@dtl at mean}%
+    \dtlmul{\@dtl at diff}{\@dtl at diff}{\@dtl at diff}%
+    \dtladd{\@dtl at sd}{\@dtl at sd}{\@dtl at diff}%
+  }%
+  \dtldiv{\@dtl at sd}{\@dtl at sd}{\@dtl at n}%
+  \dtlroot{\@dtl at sd}{\@dtl at sd}{2}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at sd}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at sd}{#1}%
+  }%
+}
+\newcommand*{\DTLgsdforall}[2]{%
+  \DTLsdforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLround}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlround{\@dtl at tmp}{\@dtl at numi}{#3}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLground}[3]{%
+  \DTLround{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLtrunc}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtltrunc{\@dtl at tmp}{\@dtl at numi}{#3}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgtrunc}[3]{%
+  \DTLtrunc{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLclip}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlclip{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgclip}[3]{%
+  \DTLclip{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*\DTLinitials[1]{%
+  \def\dtl at initialscmd{}%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \expandafter\dtl at initials\dtl at string{} \@nil%
+  \dtl at initialscmd
+}%
+\edef\dtl at construct@subnobrsp{%
+  \noexpand\def\noexpand\@dtl at subnobrsp##1\noexpand\protect
+  \expandafter\noexpand\csname nobreakspace \endcsname ##2{%
+  \noexpand\toks@{##1}%
+  \noexpand\expandafter\noexpand\@dtl at toks\noexpand\expandafter{%
+  \noexpand\@dtl at string}%
+  \noexpand\edef\noexpand\@dtl at string{\noexpand\the\noexpand\@dtl at toks
+  \noexpand\the\noexpand\toks@}%
+  \noexpand\def\noexpand\@dtl at tmp{##2}%
+  \noexpand\ifx\noexpand\@dtl at tmp\noexpand\@nnil
+    \noexpand\let\noexpand\@dtl at subnobrspnext=\noexpand\relax
+  \noexpand\else
+    \noexpand\toks@{ }%
+    \noexpand\expandafter\noexpand\@dtl at toks\noexpand\expandafter{%
+    \noexpand\@dtl at string}%
+    \noexpand\edef\noexpand\@dtl at string{\noexpand\the\noexpand\@dtl at toks
+    \noexpand\the\noexpand\toks@}%
+    \noexpand\let\noexpand\@dtl at subnobrspnext=\noexpand\@dtl at subnobrsp
+  \noexpand\fi
+  \noexpand\@dtl at subnobrspnext
+  }%
+  \noexpand\def\noexpand\dtl at subnobrsp##1##2{%
+  \noexpand\def\noexpand\@dtl at string{}%
+  \noexpand\@dtl at subnobrsp ##1\noexpand\protect\expandafter\noexpand
+  \csname nobreakspace \endcsname \noexpand\@nil
+  \noexpand\let##2=\noexpand\@dtl at string
+  }%
+}
+\dtl at construct@subnobrsp
+\newcommand*{\DTLstoreinitials}[2]{%
+  \def\dtl at initialscmd{}%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \expandafter\dtl at initials\dtl at string{} \@nil
+  \let#2=\dtl at initialscmd
+}
+\def\dtl at initials#1#2 #3{%
+  \dtl at ifsingle{#1}%
+  {%
+    \ifcat\noexpand#1\relax\relax
+       \def\@dtl at donextinitials{\@dtl at initials#2 {#3}}%
+    \else
+       \def\@dtl at donextinitials{\@dtl at initials#1#2 {#3}}%
+    \fi
+  }%
+  {%
+    \def\@dtl at donextinitials{\@dtl at initials{#1}#2 {#3}}%
+  }%
+  \@dtl at donextinitials
+}
+\def\@dtl at initials#1#2 #3{%
+  \dtl at initialshyphen#2-{}\dtl at endhyp
+  \expandafter\@dtl at toks\expandafter{\dtl at initialscmd}%
+  \toks@{#1}%
+  \ifdefempty{\dtl at inithyphen}%
+  {%
+  }%
+  {%
+    \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@}%
+    \expandafter\@dtl at toks\expandafter{\dtl at initialscmd}%
+    \expandafter\toks@\expandafter{\dtl at inithyphen}%
+  }%
+  \def\dtl at tmp{#3}%
+  \ifx\@nnil\dtl at tmp
+   \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@\DTLafterinitials}%
+   \let\dtl at initialsnext=\@gobble
+  \else
+   \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@\DTLbetweeninitials}%
+   \let\dtl at initialsnext=\dtl at initials
+  \fi
+  \dtl at initialsnext{#3}%
+}
+\def\dtl at initialshyphen#1-#2#3\dtl at endhyp{%
+  \def\dtl at inithyphen{#2}%
+  \ifdefempty{\dtl at inithyphen}%
+  {%
+  }%
+  {%
+   \edef\dtl at inithyphen{%
+     \DTLafterinitialbeforehyphen\DTLinitialhyphen#2}%
+  }%
+}
+\newcommand*{\DTLafterinitials}{.}
+\newcommand*{\DTLbetweeninitials}{.}
+\newcommand*{\DTLafterinitialbeforehyphen}{.}
+\newcommand*{\DTLinitialhyphen}{-}
+\newcommand*{\DTLifAllUpperCase}[3]{%
+  \protected at edef\dtl at tuc{#1}%
+  \expandafter\dtl at testifuppercase\dtl at tuc\@nil\relax
+  \if at dtl@condition#2\else#3\fi
+}
+\def\dtl at testifuppercase#1#2{%
+  \def\dtl at argi{#1}%
+  \def\dtl at argii{#2}%
+  \def\dtl at tc@rest{}%
+  \ifx\dtl at argi\@nnil
+    \let\dtl at testifuppernext=\@nnil
+  \else
+    \ifx#1\protect
+      \let\dtl at testifuppernext=\dtl at testifuppercase
+    \else
+      \ifx\uppercase#1\relax
+        \@dtl at conditiontrue
+        \def\dtl at tc@rest{}%
+        \let\dtl at testifuppernext=\relax
+      \else
+        \edef\dtl at tc@arg{\string#1}%
+        \expandafter\dtl at test@ifuppercase\dtl at tc@arg\end
+        \ifx\dtl at argii\@nnil
+          \let\dtl at testifuppernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifx\dtl at testifuppernext\relax
+   \edef\dtl at dotestifuppernext{%
+     \noexpand\dtl at testifuppercase}%
+  \else
+   \ifx\dtl at testifuppernext\@nnil
+     \edef\dtl at dotestifuppernext{#2}%
+   \else
+     \expandafter\toks@\expandafter{\dtl at tc@rest}%
+     \@dtl at toks{#2}%
+     \edef\dtl at dotestifuppernext{%
+       \noexpand\dtl at testifuppernext\the\toks@\the\@dtl at toks}%
+   \fi
+  \fi
+  \dtl at dotestifuppernext
+}
+\def\dtl at test@ifuppercase#1#2\end{%
+  \def\dtl at tc@rest{#2}%
+  \IfSubStringInString{\string\MakeUppercase}{#1#2}%
+  {%
+     \@dtl at conditiontrue
+     \def\dtl at tc@rest{}%
+     \let\dtl at testifuppernext=\relax
+  }%
+  {%
+    \IfSubStringInString{\string\MakeTextUppercase}{#1#2}%
+    {%
+       \@dtl at conditiontrue
+       \def\dtl at tc@rest{}%
+       \let\dtl at testifuppernext=\relax
+    }%
+    {%
+      \edef\dtl at uccode{\the\uccode`#1}%
+      \edef\dtl at code{\number`#1}%
+      \ifnum\dtl at code=\dtl at uccode\relax
+        \@dtl at conditiontrue
+        \let\dtl at testifuppernext=\dtl at testifuppercase
+      \else
+        \ifnum\dtl at uccode=0\relax
+          \@dtl at conditiontrue
+          \let\dtl at testifuppernext=\dtl at testifuppercase
+        \else
+          \@dtl at conditionfalse
+          \let\dtl at testifuppernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\DTLifAllLowerCase}[3]{%
+  \protected at edef\dtl at tlc{#1}%
+  \expandafter\dtl at testiflowercase\dtl at tlc\@nil\relax
+  \if at dtl@condition#2\else#3\fi
+}
+\def\dtl at testiflowercase#1#2{%
+  \def\dtl at argi{#1}%
+  \def\dtl at argii{#2}%
+  \ifx\dtl at argi\@nnil
+    \let\dtl at testiflowernext=\@nnil
+  \else
+    \ifx#1\protect
+      \let\dtl at testiflowernext=\dtl at testiflowercase
+    \else
+      \ifx\lowercase#1\relax
+        \@dtl at conditiontrue
+        \def\dtl at tc@rest{}%
+        \let\dtl at testiflowernext=\relax
+      \else
+        \edef\dtl at tc@arg{\string#1}%
+        \expandafter\dtl at test@iflowercase\dtl at tc@arg\end
+        \ifx\dtl at argii\@nnil
+          \let\dtl at testiflowernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifx\dtl at testiflowernext\relax
+   \edef\dtl at dotestiflowernext{%
+     \noexpand\dtl at testiflowercase}%
+  \else
+   \ifx\dtl at testiflowernext\@nnil
+     \edef\dtl at dotestiflowernext{#2}%
+   \else
+     \expandafter\toks@\expandafter{\dtl at tc@rest}%
+     \@dtl at toks{#2}%
+     \edef\dtl at dotestiflowernext{%
+       \noexpand\dtl at testiflowernext\the\toks@\the\@dtl at toks}%
+   \fi
+  \fi
+  \dtl at dotestiflowernext
+}
+\def\dtl at test@iflowercase#1#2\end{%
+  \def\dtl at tc@rest{#2}%
+  \IfSubStringInString{\string\MakeLowercase}{#1#2}%
+  {%
+    \@dtl at conditiontrue
+    \def\dtl at tc@rest{}%
+    \let\dtl at testiflowernext=\relax
+  }%
+  {%
+    \IfSubStringInString{\string\MakeTextLowercase}{#1#2}%
+    {%
+      \@dtl at conditiontrue
+      \def\dtl at tc@rest{}%
+      \let\dtl at testiflowernext=\relax
+    }%
+    {%
+      \edef\dtl at lccode{\the\lccode`#1}%
+      \edef\dtl at code{\number`#1}%
+      \ifnum\dtl at code=\dtl at lccode\relax
+        \@dtl at conditiontrue
+        \let\dtl at testiflowernext=\dtl at testiflowercase
+      \else
+        \ifnum\dtl at lccode=0\relax
+          \@dtl at conditiontrue
+          \let\dtl at testiflowernext=\dtl at testiflowercase
+        \else
+          \@dtl at conditionfalse
+          \let\dtl at testiflowernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand{\DTLsubstitute}[3]{%
+  \expandafter\DTLsplitstring\expandafter
+    {#1}{#2}{\@dtl at beforepart}{\@dtl at afterpart}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \def#1{}%
+    \expandafter\@dtl at toks\expandafter{\@dtl at beforepart}%
+    \expandafter\toks@\expandafter{#1}%
+    \protected at edef#1{\the\toks@\the\@dtl at toks#3}%
+    \expandafter\@dtl at toks\expandafter{\@dtl at afterpart}%
+    \expandafter\toks@\expandafter{#1}%
+    \edef#1{\the\toks@\the\@dtl at toks}%
+  }%
+}
+\newcommand*{\DTLsplitstring}[4]{%
+  \def\dtl at splitstr##1#2##2\@nil{%
+    \def#3{##1}%
+    \def#4{##2}%
+    \ifdefempty{#4}%
+    {%
+      \let\@dtl at replaced=\@empty
+    }%
+    {%
+      \def\@dtl at replaced{#2}%
+      \dtl at split@str##2\@nil
+    }%
+  }%
+  \def\dtl at split@str##1#2\@nil{\def#4{##1}}%
+  \dtl at splitstr#1#2\@nil
+}
+\newcommand{\DTLsubstituteall}[3]{%
+  \def\@dtl at splitsubstr{}%
+  \let\@dtl at afterpart=#1\relax
+  \@dtl at dosubstitute{#2}{#3}%
+  \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at afterpart}%
+  \long\edef#1{\the\toks@\the\@dtl at toks}%
+}
+\def\@dtl at dosubstitute#1#2{%
+  \expandafter\DTLsplitstring\expandafter
+   {\@dtl at afterpart}{#1}{\@dtl at beforepart}{\@dtl at afterpart}%
+  \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at beforepart}%
+  \edef\@dtl at splitsubstr{\the\toks@\the\@dtl at toks}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \let\@dtl at dosubstnext=\@dtl at dosubstitutenoop
+  }%
+  {%
+    \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+    \@dtl at toks{#2}%
+    \edef\@dtl at splitsubstr{\the\toks@\the\@dtl at toks}%
+    \let\@dtl at dosubstnext=\@dtl at dosubstitute
+  }%
+  \@dtl at dosubstnext{#1}{#2}%
+}
+\def\@dtl at dosubstitutenoop#1#2{}
+\newif\if at dtl@condition
+\newcount\@dtl at datatype
+\newcommand{\@dtl at checknumerical}[1]{%
+  \@dtl at numgrpsepfalse
+  \dtl at ifsingle{#1}%
+  {%
+    \expandafter\toks@\expandafter{#1}%
+    \edef\@dtl at tmp{\the\toks@}%
+  }%
+  {%
+    \def\@dtl at tmp{#1}%
+  }%
+  \ifdefempty\@dtl at tmp
+  {%
+    \@dtl at datatype=0\relax
+  }%
+  {%
+    \@dtl at tmpcount=0\relax
+    \@dtl at datatype=0\relax
+    \@dtl at numgrpsepcount=2\relax
+    \@dtl at standardize@currency\@dtl at tmp
+    \ifdefempty{\@dtl at org@currency}%
+    {%
+    }%
+    {%
+      \let\@dtl at currency\@dtl at org@currency
+    }%
+    \expandafter\@dtl at checknumericalstart\@dtl at tmp\@nil\@nil
+  }%
+  \ifnum\@dtl at numgrpsepcount>-1\relax
+    \if at dtl@numgrpsep
+      \ifnum\@dtl at numgrpsepcount=3\relax
+      \else
+        \@dtl at datatype=0\relax
+      \fi
+    \fi
+  \fi
+}
+\newcommand*{\@dtl at protect}{\protect}
+\newcommand*{\@dtl at minus}{-}
+\newcommand*{\@dtl at plus}{+}
+\newcommand*{\@dtl at dollar}{\$}
+\def\@dtl at checknumericalstart#1#2\@nil\@nil{%
+  \def\@dtl at tmp{#1}%
+  \ifx\@dtl at tmp\@dtl at protect
+    \@dtl at checknumericalstart#2\@nil\@nil\relax
+  \else
+    \ifx\@dtl at tmp\@dtl at minus
+      \def\@dtl at tmp{#2}%
+      \ifdefempty{\@dtl at tmp}%
+      {%
+        \@dtl at datatype=0\relax
+      }%
+      {%
+        \ifnum\@dtl at datatype=0\relax
+          \@dtl at datatype=1\relax
+        \fi
+        \@dtl at checknumericalstart#2\@nil\@nil\relax
+      }%
+    \else
+      \ifx\@dtl at tmp\@dtl at plus
+        \def\@dtl at tmp{#2}%
+        \ifdefempty{\@dtl at tmp}%
+        {%
+          \@dtl at datatype=0\relax
+        }%
+        {%
+          \ifnum\@dtl at datatype=0\relax
+            \@dtl at datatype=1\relax
+          \fi
+          \@dtl at checknumericalstart#2\@nil\@nil\relax
+        }%
+      \else
+        \def\@dtl at tmp{#1}%
+        \ifx\@dtl at tmp\@dtl at dollar
+          \def\@dtl at tmp{#2}%
+          \ifdefempty{\@dtl at tmp}%
+          {%
+            \@dtl at datatype=0\relax
+          }%
+          {%
+            \@dtl at datatype=3\relax
+            \@dtl at checknumericalstart#2\@nil\@nil\relax
+          }%
+        \else
+          \ifdefempty{\@dtl at tmp}%
+          {%
+            \@dtl at datatype=0\relax
+          }%
+          {%
+            \ifnum\@dtl at datatype=0\relax
+              \@dtl at datatype=1\relax
+            \fi
+            \@dtl at checknumericalloop#1#2\@nil\@nil\relax
+          }%
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newif\if at dtl@numgrpsep
+\newcommand*{\@dtl at ifDigitOrDecimalSep}[3]{%
+  \ifnum 9<1\noexpand#1\relax
+    #2%
+  \else
+    \expandafter\ifx\@dtl at decimal#1\relax
+      #2%
+    \else
+      #3%
+    \fi
+  \fi
+}
+\def\@dtl at checknumericalloop#1#2\@nil{%
+\def\@dtl at tmp{#1}%
+\ifx\@nnil\@dtl at tmp\relax
+ \let\@dtl at chcknumnext=\@dtl at checknumericalnoop%
+\else
+  \@dtl at ifDigitOrDecimalSep{#1}{%
+  \let\@dtl at chcknumnext=\@dtl at checknumericalloop%
+  \expandafter\ifx\@dtl at decimal#1\relax
+     \if at dtl@numgrpsep
+       \ifnum\@dtl at numgrpsepcount=3\relax
+        \@dtl at numgrpsepcount=-1\relax
+       \else
+        \@dtl at datatype=0\relax
+        \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+       \fi
+     \else
+       \@dtl at numgrpsepcount=-1\relax
+     \fi
+   \else
+     \ifnum\@dtl at numgrpsepcount=-1\relax
+     \else
+       \advance\@dtl at numgrpsepcount by 1\relax
+     \fi
+   \fi
+}{%
+\ifx\@dtl at numbergroupchar\@dtl at tmp\relax
+  \@dtl at numgrpseptrue
+  \ifnum\@dtl at numgrpsepcount<3\relax
+    \@dtl at datatype=0\relax
+    \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+  \else
+     \@dtl at numgrpsepcount=0\relax
+  \fi
+\else
+  \@dtl at datatype=0\relax
+  \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+\fi
+}%
+  \ifx\@dtl at decimal\@dtl at tmp\relax
+   \ifnum\@dtl at datatype<3\relax
+     \@dtl at datatype=2\relax
+   \fi
+   \advance\@dtl at tmpcount by 1\relax
+   \ifnum\@dtl at tmpcount>1\relax
+     \@dtl at datatype=0\relax
+     \let\@dtl at chcknumnext=\@dtl at checknumericalnoop%
+   \fi
+  \fi
+\fi
+\@dtl at chcknumnext#2\@nil
+}
+\def\@dtl at checknumericalnoop#1\@nil#2{}
+\newcommand{\DTLifnumerical}[3]{%
+\@dtl at checknumerical{#1}%
+\ifnum\@dtl at datatype=0\relax#3\else#2\fi
+}
+\newcommand{\DTLifreal}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=2\relax #2\else #3\fi
+}
+\newcommand{\DTLifint}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=1\relax #2\else #3\fi
+}
+\newcommand{\DTLifstring}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=0\relax #2\else #3\fi
+}
+\newcommand{\DTLifcurrency}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=3\relax #2\else #3\fi
+}
+\newcommand*{\DTLifcurrencyunit}[4]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=3\relax
+    \ifthenelse{\equal{\@dtl at org@currency}{#2}}{#3}{#4}%
+  \else
+    #4%
+  \fi
+}
+\newcommand{\DTLifcasedatatype}[5]{%
+  \@dtl at checknumerical{#1}%
+  \ifcase\@dtl at datatype
+   #2% string
+  \or
+   #3% integer
+  \or
+   #4% number
+  \or
+   #5% currency
+  \fi
+}
+\newcommand*{\dtl at testbothnumerical}[2]{%
+  \dtl at ifsingle{#1}{%
+   \edef\@dtl at tmp{#1}}{%
+   \def\@dtl at tmp{#1}}%
+  \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+  \edef\@dtl at firsttype{\number\@dtl at datatype}%
+  \dtl at ifsingle{#2}{%
+   \edef\@dtl at tmp{#2}}{%
+   \def\@dtl at tmp{#2}}%
+  \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+  \multiply\@dtl at datatype by \@dtl at firsttype\relax
+  \ifnum\@dtl at datatype>0\relax
+   \@dtl at conditiontrue
+  \else
+   \@dtl at conditionfalse
+  \fi
+}
+\newcommand*{\DTLifnumlt}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumlt{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newif\ifdtlcompareskipcs
+\dtlcompareskipcsfalse
+\newcommand*{\dtlcompare}[3]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+      \let\@dtl at argA\dtl at string
+      \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+      \let\@dtl at argB\dtl at string
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \let\dtl at donextcompare\@firstofone
+          \ifdtlcompareskipcs
+            \ifnum\dtl at codeA=0\relax
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\@dtl at argB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \else
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\@dtl at argA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \fi
+          \fi
+          \dtl at donextcompare
+          {%
+            \ifnum\dtl at codeA=-1\relax
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at restA}%
+                     {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \fi
+            \else
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+                     {\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                \ifnum\dtl at codeA<\dtl at codeB
+                  #1=-1\relax
+                \else
+                  \ifnum\dtl at codeA>\dtl at codeB
+                    #1=1\relax
+                  \else
+                     \ifdefempty{\dtl at restA}%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=0\relax
+                       }%
+                       {%
+                         #1=-1\relax
+                       }%
+                     }%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=1\relax
+                       }%
+                       {%
+                         \protected at edef\dtl at donext{%
+                           \noexpand\dtlcompare
+                             {\noexpand#1}{\dtl at restA}{\dtl at restB}}%
+                         \dtl at donext
+                       }%
+                     }%
+                  \fi
+                \fi
+              \fi
+            \fi
+          }%
+        }%
+        {%
+          \edef\dtl at donext{%
+            \noexpand\dtlcompare
+              {\noexpand#1}%
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \edef\dtl at donext{%
+          \noexpand\dtlcompare
+            {\noexpand#1}%
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+        \dtl at donext
+      }%
+    }%
+  }%
+}
+\def\dtl at if@two at octets#1#2\dtl at end@if at two@octets#3#4{%
+  \ifbool{@dtl at utf8}
+  {%
+    \ifx\UTFviii at two@octets#1\relax
+     #3%
+    \else
+     #4%
+    \fi
+  }%
+  {%
+    #4%
+  }%
+}
+\def\dtl at getfirst@UTFviii#1#2#3\end at dtl@getfirst at UTFviii{%
+  \def\dtl at first{#1#2}%
+  \ifx\@nil#3\relax
+    \def\dtl at rest{}%
+  \else
+    \expandafter\def\expandafter\dtl at rest\expandafter{\@dtl at firsttonil#3}%
+  \fi
+}
+\def\@dtl at firsttonil#1\@nil{#1}
+\def\dtl at getfirst#1#2\end at dtl@getfirst{%
+  \def\dtl at first{#1}%
+  \ifdefempty{\dtl at first}%
+  {%
+    \def\dtl at rest{#2}%
+  }%
+  {%
+    \ifbool{@dtl at utf8}
+    {%
+      \expandafter\dtl at if@two at octets#1#2\relax\dtl at end@if at two@octets
+      {%
+        \dtl at getfirst@UTFviii#1#2\@nil\end at dtl@getfirst at UTFviii
+      }%
+      {%
+        \dtl at ifsingle{#1}{\def\dtl at rest{#2}}{\dtl at getfirst#1#2\end at dtl@getfirst}%
+      }%
+    }%
+    {%
+      \dtl at ifsingle{#1}{\def\dtl at rest{#2}}{\dtl at getfirst#1#2\end at dtl@getfirst}%
+    }%
+  }%
+}%
+\newcount\dtl at codeA
+\newcount\dtl at codeB
+\newcommand*{\dtl at setcharcode}[2]{%
+  \ifstrempty{#1}%
+  {%
+    #2=-1\relax
+  }%
+  {%
+    \ifx\@dtl at wordbreak#1\relax
+     #2=`\ \relax
+   \else
+     \ifcat\noexpand#1\relax
+       #2=0\relax
+     \else
+       \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+       {%
+        \dtlsetUTFviiicharcode{#1}{#2}%
+       }%
+       {%
+         \dtlsetcharcode{#1}{#2}%
+       }%
+     \fi
+   \fi
+  }%
+}
+\newcommand*{\dtlsetcharcode}[2]{#2=`#1\relax}
+\newcommand*{\dtlsetlccharcode}[2]{#2=\lccode`#1\relax}
+\newcommand*\dtlsetUTFviiicharcode[2]{\dtlsetdefaultUTFviiicharcode{#1}{#2}}
+\newcommand*\dtlsetUTFviiilccharcode[2]{\dtlsetdefaultUTFviiilccharcode{#1}{#2}}
+\newcommand*\dtlsetdefaultUTFviiicharcode[2]{%
+ \ifboolexpr
+ {
+      test {\ifstrequal{#1}{À}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Ã}}
+   or test {\ifstrequal{#1}{Ä}}
+ }%
+ {%
+   #2=`A\relax
+ }%
+ {%
+   \ifstrequal{#1}{Ç}%
+   {%
+     #2=`C\relax
+   }%
+   {%
+     \ifboolexpr
+     {
+          test {\ifstrequal{#1}{È}}
+       or test {\ifstrequal{#1}{É}}
+       or test {\ifstrequal{#1}{Ê}}
+       or test {\ifstrequal{#1}{Ë}}
+     }%
+     {%
+       #2=`E\relax
+     }%
+     {%
+       \ifboolexpr
+       {
+            test {\ifstrequal{#1}{Ì}}
+         or test {\ifstrequal{#1}{Í}}
+         or test {\ifstrequal{#1}{Î}}
+         or test {\ifstrequal{#1}{Ï}}
+       }%
+       {%
+         #2=`I\relax
+       }%
+       {%
+         \ifstrequal{#1}{Ñ}%
+         {%
+           #2=`N\relax
+         }%
+         {%
+           \ifboolexpr
+           {
+                test {\ifstrequal{#1}{Ò}}
+             or test {\ifstrequal{#1}{Ó}}
+             or test {\ifstrequal{#1}{Ô}}
+             or test {\ifstrequal{#1}{Õ}}
+             or test {\ifstrequal{#1}{Ö}}
+           }%
+           {%
+             #2=`O\relax
+           }%
+           {%
+             \ifboolexpr
+             {
+                  test {\ifstrequal{#1}{Ù}}
+               or test {\ifstrequal{#1}{Ú}}
+               or test {\ifstrequal{#1}{Û}}
+               or test {\ifstrequal{#1}{Ü}}
+             }%
+             {%
+               #2=`U\relax
+             }%
+             {%
+               \ifstrequal{#1}{Ý}%
+               {%
+                 #2=`Y\relax
+               }%
+               {%
+                 \ifboolexpr
+                 {
+                      test {\ifstrequal{#1}{à}}
+                   or test {\ifstrequal{#1}{á}}
+                   or test {\ifstrequal{#1}{á}}
+                   or test {\ifstrequal{#1}{ã}}
+                   or test {\ifstrequal{#1}{ä}}
+                 }%
+                 {%
+                   #2=`a\relax
+                 }%
+                 {%
+                   \ifstrequal{#1}{ç}%
+                   {%
+                     #2=`c\relax
+                   }%
+                   {%
+                     \ifboolexpr
+                     {
+                          test {\ifstrequal{#1}{è}}
+                       or test {\ifstrequal{#1}{é}}
+                       or test {\ifstrequal{#1}{ê}}
+                       or test {\ifstrequal{#1}{ë}}
+                     }%
+                     {%
+                       #2=`e\relax
+                     }%
+                     {%
+                       \ifboolexpr
+                       {
+                            test {\ifstrequal{#1}{ì}}
+                         or test {\ifstrequal{#1}{í}}
+                         or test {\ifstrequal{#1}{î}}
+                         or test {\ifstrequal{#1}{ï}}
+                       }%
+                       {%
+                         #2=`i\relax
+                       }%
+                       {%
+                         \ifstrequal{#1}{ñ}%
+                         {%
+                           #2=`n\relax
+                         }%
+                         {%
+                           \ifboolexpr
+                           {
+                                test {\ifstrequal{#1}{ò}}
+                             or test {\ifstrequal{#1}{ó}}
+                             or test {\ifstrequal{#1}{ô}}
+                             or test {\ifstrequal{#1}{õ}}
+                             or test {\ifstrequal{#1}{ö}}
+                           }%
+                           {%
+                             #2=`o\relax
+                           }%
+                           {%
+                             \ifboolexpr
+                             {
+                                  test {\ifstrequal{#1}{ù}}
+                               or test {\ifstrequal{#1}{ú}}
+                               or test {\ifstrequal{#1}{û}}
+                               or test {\ifstrequal{#1}{ü}}
+                             }%
+                             {%
+                               #2=`u\relax
+                             }%
+                             {%
+                               \ifstrequal{#1}{ý}%
+                               {%
+                                 #2=`y\relax
+                               }%
+                               {%
+                                 #2=64\relax
+                               }%
+                             }%
+                           }%
+                         }%
+                       }%
+                     }%
+                   }%
+                 }%
+               }%
+             }%
+           }%
+         }%
+       }%
+     }%
+   }%
+ }%
+}
+\newcommand*\dtlsetdefaultUTFviiilccharcode[2]{%
+ \ifboolexpr
+ {
+      test {\ifstrequal{#1}{à}}
+   or test {\ifstrequal{#1}{á}}
+   or test {\ifstrequal{#1}{á}}
+   or test {\ifstrequal{#1}{ã}}
+   or test {\ifstrequal{#1}{ä}}
+   or test {\ifstrequal{#1}{À}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Ã}}
+   or test {\ifstrequal{#1}{Ä}}
+ }%
+ {%
+   #2=`a\relax
+ }%
+ {%
+   \ifboolexpr
+   {
+        test {\ifstrequal{#1}{ç}}
+     or test {\ifstrequal{#1}{Ç}}
+   }
+   {%
+     #2=`c\relax
+   }%
+   {%
+     \ifboolexpr
+     {
+          test {\ifstrequal{#1}{è}}
+       or test {\ifstrequal{#1}{é}}
+       or test {\ifstrequal{#1}{ê}}
+       or test {\ifstrequal{#1}{ë}}
+       or test {\ifstrequal{#1}{È}}
+       or test {\ifstrequal{#1}{É}}
+       or test {\ifstrequal{#1}{Ê}}
+       or test {\ifstrequal{#1}{Ë}}
+     }%
+     {%
+       #2=`e\relax
+     }%
+     {%
+       \ifboolexpr
+       {
+            test {\ifstrequal{#1}{ì}}
+         or test {\ifstrequal{#1}{í}}
+         or test {\ifstrequal{#1}{î}}
+         or test {\ifstrequal{#1}{ï}}
+         or test {\ifstrequal{#1}{Ì}}
+         or test {\ifstrequal{#1}{Í}}
+         or test {\ifstrequal{#1}{Î}}
+         or test {\ifstrequal{#1}{Ï}}
+       }%
+       {%
+         #2=`i\relax
+       }%
+       {%
+         \ifboolexpr
+         {
+              test {\ifstrequal{#1}{ñ}}
+           or test {\ifstrequal{#1}{Ñ}}
+         }
+         {%
+           #2=`n\relax
+         }%
+         {%
+           \ifboolexpr
+           {
+                test {\ifstrequal{#1}{ò}}
+             or test {\ifstrequal{#1}{ó}}
+             or test {\ifstrequal{#1}{ô}}
+             or test {\ifstrequal{#1}{õ}}
+             or test {\ifstrequal{#1}{ö}}
+             or test {\ifstrequal{#1}{Ò}}
+             or test {\ifstrequal{#1}{Ó}}
+             or test {\ifstrequal{#1}{Ô}}
+             or test {\ifstrequal{#1}{Õ}}
+             or test {\ifstrequal{#1}{Ö}}
+           }%
+           {%
+             #2=`o\relax
+           }%
+           {%
+             \ifboolexpr
+             {
+                  test {\ifstrequal{#1}{ù}}
+               or test {\ifstrequal{#1}{ú}}
+               or test {\ifstrequal{#1}{û}}
+               or test {\ifstrequal{#1}{ü}}
+               or test {\ifstrequal{#1}{Ù}}
+               or test {\ifstrequal{#1}{Ú}}
+               or test {\ifstrequal{#1}{Û}}
+               or test {\ifstrequal{#1}{Ü}}
+             }%
+             {%
+               #2=`u\relax
+             }%
+             {%
+               \ifboolexpr
+               {
+                    test {\ifstrequal{#1}{ý}}
+                 or test {\ifstrequal{#1}{Ý}}
+               }%
+               {%
+                 #2=`y\relax
+               }%
+               {%
+                 #2=96\relax
+               }%
+             }%
+           }%
+         }%
+       }%
+     }%
+   }%
+ }%
+}
+\newcommand*{\dtl at setlccharcode}[2]{%
+  \ifstrempty{#1}%
+  {%
+   #2=-1\relax
+  }%
+  {%
+   \ifx#1\@dtl at wordbreak\relax
+     #2=`\ \relax
+   \else
+     \ifcat\noexpand#1\relax%
+       #2=0\relax
+     \else
+       \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+       {%
+        \dtlsetUTFviiilccharcode{#1}{#2}%
+       }%
+       {%
+         \dtlsetlccharcode{#1}{#2}%
+       }%
+       \ifnum#2=0\relax
+         #2=`#1\relax
+       \fi
+     \fi
+   \fi
+  }%
+}
+\newcommand*{\dtlicompare}[3]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+      \let\@dtl at argA\dtl at string
+      \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+      \let\@dtl at argB\dtl at string
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setlccharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setlccharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \let\dtl at donextcompare\@firstofone
+          \ifdtlcompareskipcs
+            \ifnum\dtl at codeA=0\relax
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\@dtl at argB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \else
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\@dtl at argA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \fi
+          \fi
+          \dtl at donextcompare
+          {%
+            \ifnum\dtl at codeA=-1\relax
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare{\noexpand#1}%
+                   {\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at restA}%
+                     {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \fi
+            \else
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                    {\noexpand#1}%
+                    {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+                    {\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                \ifnum\dtl at codeA<\dtl at codeB
+                  #1=-1\relax
+                \else
+                  \ifnum\dtl at codeA>\dtl at codeB
+                    #1=1\relax
+                  \else
+                     \ifdefempty{\dtl at restA}%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=0\relax
+                       }%
+                       {%
+                         #1=-1\relax
+                       }%
+                     }%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=1\relax
+                       }%
+                       {%
+                         \edef\dtl at donext{%
+                           \noexpand\dtlicompare
+                             {\noexpand#1}%
+                             {\expandonce\dtl at restA}%
+                             {\expandonce\dtl at restB}}%
+                         \dtl at donext
+                       }%
+                     }%
+                  \fi
+                \fi
+              \fi
+            \fi
+          }%
+        }%
+        {%
+          \edef\dtl at donext{%
+            \noexpand\dtlicompare
+              {\noexpand#1}%
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \edef\dtl at donext{%
+          \noexpand\dtlicompare
+            {\noexpand#1}%
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+        \dtl at donext
+      }%
+    }%
+  }%
+}
+\newcommand*{\dtlwordindexcompare}[3]{%
+  \@dtldictcompare{#1}{#2}{#3}{\@dtl at wordbreak}%
+}
+\newcommand*{\dtlletterindexcompare}[3]{%
+  \@dtldictcompare{#1}{#2}{#3}{}%
+}
+\newcommand*{\@dtldictcompare}[4]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \expandafter\DTLsplitstring\expandafter
+        {\@dtl at argA}{\datatoolpersoncomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+      \ifdefempty{\@dtl at replaced}%
+      {%
+        \expandafter\DTLsplitstring\expandafter
+          {\@dtl at argA}{\datatoolplacecomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+        \ifdefempty{\@dtl at replaced}%
+        {%
+          \expandafter\DTLsplitstring\expandafter
+            {\@dtl at argA}{\datatoolsubjectcomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+          \ifdefempty{\@dtl at replaced}%
+          {%
+            \expandafter\DTLsplitstring\expandafter
+              {\@dtl at argA}{\datatoolparenstart}{\@dtl at beforepart}{\@dtl at afterpart}%
+            \ifdefempty{\@dtl at replaced}%
+            {%
+              \def\@dtl at A@comma{0}%
+              \let\@dtl at A@before\@dtl at argA
+              \def\@dtl at A@after{}%
+            }%
+            {%
+              \let\@dtl at A@comma\@dtl at replaced
+              \let\@dtl at A@before\@dtl at beforepart
+              \let\@dtl at A@after\@dtl at afterpart
+            }%
+          }%
+          {%
+            \let\@dtl at A@comma\@dtl at replaced
+            \let\@dtl at A@before\@dtl at beforepart
+            \let\@dtl at A@after\@dtl at afterpart
+          }%
+        }%
+        {%
+          \let\@dtl at A@comma\@dtl at replaced
+          \let\@dtl at A@before\@dtl at beforepart
+          \let\@dtl at A@after\@dtl at afterpart
+        }%
+      }%
+      {%
+        \let\@dtl at A@comma\@dtl at replaced
+        \let\@dtl at A@before\@dtl at beforepart
+        \let\@dtl at A@after\@dtl at afterpart
+      }%
+      \expandafter\DTLsplitstring\expandafter
+        {\@dtl at argB}{\datatoolpersoncomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+      \ifdefempty{\@dtl at replaced}%
+      {%
+        \expandafter\DTLsplitstring\expandafter
+          {\@dtl at argB}{\datatoolplacecomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+        \ifdefempty{\@dtl at replaced}%
+        {%
+          \expandafter\DTLsplitstring\expandafter
+            {\@dtl at argB}{\datatoolsubjectcomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+          \ifdefempty{\@dtl at replaced}%
+          {%
+            \expandafter\DTLsplitstring\expandafter
+              {\@dtl at argB}{\datatoolparenstart}{\@dtl at beforepart}{\@dtl at afterpart}%
+            \ifdefempty{\@dtl at replaced}%
+            {%
+              \def\@dtl at B@comma{0}%
+              \let\@dtl at B@before\@dtl at argB
+              \def\@dtl at B@after{}%
+            }%
+            {%
+              \let\@dtl at B@comma\@dtl at replaced
+              \let\@dtl at B@before\@dtl at beforepart
+              \let\@dtl at B@after\@dtl at afterpart
+            }%
+          }%
+          {%
+            \let\@dtl at B@comma\@dtl at replaced
+            \let\@dtl at B@before\@dtl at beforepart
+            \let\@dtl at B@after\@dtl at afterpart
+          }%
+        }%
+        {%
+          \let\@dtl at B@comma\@dtl at replaced
+          \let\@dtl at B@before\@dtl at beforepart
+          \let\@dtl at B@after\@dtl at afterpart
+        }%
+      }%
+      {%
+        \let\@dtl at B@comma\@dtl at replaced
+        \let\@dtl at B@before\@dtl at beforepart
+        \let\@dtl at B@after\@dtl at afterpart
+      }%
+      \expandafter\dtl at ifcasechargroup\@dtl at A@before\dtl at end@ifcasechargroup
+       {\def\@dtl at A@chargroup{2}}%
+       {\def\@dtl at A@chargroup{1}}%
+       {\def\@dtl at A@chargroup{0}}%
+      \expandafter\dtl at ifcasechargroup\@dtl at B@before\dtl at end@ifcasechargroup
+       {\def\@dtl at B@chargroup{2}}%
+       {\def\@dtl at B@chargroup{1}}%
+       {\def\@dtl at B@chargroup{0}}%
+      \ifnum\@dtl at A@chargroup<\@dtl at B@chargroup
+        #1=-1\relax
+      \else
+        \ifnum\@dtl at A@chargroup>\@dtl at B@chargroup
+          #1=1\relax
+        \else
+          \ifcase\@dtl at A@chargroup
+            \edef\dtl at donext{%
+              \noexpand\dtlcompare
+                {\noexpand#1}%
+                {\expandonce\@dtl at A@before}%
+                {\expandonce\@dtl at B@before}}%
+            \dtl at donext
+          \or
+            \ifnum\@dtl at A@before<\@dtl at B@before\relax
+              #1=-1\relax
+            \else
+              \ifnum\@dtl at A@before>\@dtl at B@before\relax
+                #1=1\relax
+              \else
+                #1=0\relax
+              \fi
+            \fi
+          \or
+            \@dtlwordindexcompare{#1}{\@dtl at A@before}{\@dtl at B@before}
+              {\dtlicomparewords}{#4}%
+            \ifnum#1=0\relax
+              \let\@org at dtl@person at comma\datatoolpersoncomma
+              \let\@org at dtl@place at comma\datatoolplacecomma
+              \let\@org at dtl@subject at comma\datatoolsubjectcomma
+              \let\@org at dtl@paren at start\datatoolparenstart
+              \def\datatoolpersoncomma{3}%
+              \def\datatoolplacecomma{2}%
+              \def\datatoolsubjectcomma{1}%
+              \def\datatoolparenstart{-1}%
+              \ifnum\@dtl at A@comma>\@dtl at B@comma\relax
+                #1=-1\relax
+              \else
+                \ifnum\@dtl at A@comma<\@dtl at B@comma\relax
+                  #1=1\relax
+                \else
+                 \@dtlwordindexcompare{#1}{\@dtl at B@before}{\@dtl at A@before}
+                   {\dtlcomparewords}{#4}%
+                  \ifnum#1=0\relax
+                    \@dtlwordindexcompare{#1}{\@dtl at A@after}{\@dtl at B@after}
+                      {\dtlicomparewords}{#4}%
+                  \fi
+                \fi
+              \fi
+              \let\datatoolpersoncomma\@org at dtl@person at comma
+              \let\datatoolplacecomma\@org at dtl@place at comma
+              \let\datatoolsubjectcomma\@org at dtl@subject at comma
+              \let\datatoolparenstart\@org at dtl@paren at start
+            \fi
+          \fi
+        \fi
+      \fi
+    }%
+  }%
+}%
+\newcommand*{\datatoolpersoncomma}{,\space}
+\newcommand*{\datatoolplacecomma}{,\space}
+\newcommand*{\datatoolsubjectcomma}{,\space}
+\newcommand*{\datatoolparenstart}{\space}
+\newcommand*{\@dtlwordindexcompare}[5]{%
+  \dtl at setwordbreaks{#2}{#5}%
+  \let#2\dtl at string
+  \dtl at setwordbreaks{#3}{}%
+  \let#3\dtl at string
+  \edef\@dtl at do@compare{%
+    \noexpand#4{\noexpand#1}%
+      {\expandonce#2}{\expandonce#3}%
+  }%
+  \@dtl at do@compare
+}
+\newcommand*{\@dtl at dict@compare}[4]{%
+  \ifdefempty{#2}%
+  {%
+    \ifdefempty{#3}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{#3}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \expandafter\dtl at grabword#2\@dtl at endgrabword\dtl at A@first\dtl at A@remain
+      \expandafter\dtl at grabword#3\@dtl at endgrabword\dtl at B@first\dtl at B@remain
+      \edef\@dtl at do@compare{%
+        \noexpand#4{\noexpand#1}%
+          {\expandonce\dtl at A@first}{\expandonce\dtl at B@first}%
+      }%
+      \@dtl at do@compare
+      \ifnum#1=0\relax
+        \@dtl at dict@compare{#1}{\dtl at A@remain}{\dtl at B@remain}{#4}%
+      \fi
+    }%
+  }%
+}
+\def\dtl at grabword#1\@dtl at wordbreak#2\@dtl at endgrabword#3#4{%
+  \def#3{#1}%
+  \def#4{#2}%
+}
+\newcommand{\dtlicomparewords}[3]{%
+  \dtlicompare{#1}{#2}{#3}%
+}
+\newcommand{\dtlcomparewords}[3]{%
+  \dtlcompare{#1}{#2}{#3}%
+}
+\newcommand*{\dtl at setwordbreaks}[2]{%
+  \expandafter\dtl at subnobrsp\expandafter{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{#2}%
+  \DTLsubstituteall{\dtl at string}{\ }{#2}%
+  \DTLsubstituteall{\dtl at string}{\space}{#2}%
+  \DTLsubstituteall{\dtl at string}{-}{#2}%
+ \toks@{#2}%
+ \edef\dtl at do@setwordbreaks{%
+   \noexpand\@dtl at setwordbreaks{\the\toks@}\expandonce\dtl at string\space\noexpand\@nil}%
+ \def\dtl at string{}%
+ \dtl at do@setwordbreaks
+}
+\def\@dtl at setwordbreaks#1#2 #3{%
+  \def\dtl at tmp{#3}%
+  \ifx\@nnil\dtl at tmp
+    \let\@dtl at setwordbreaks@next\@gobbletwo
+    \appto\dtl at string{#2}%
+  \else
+    \let\@dtl at setwordbreaks@next\@dtl at setwordbreaks
+    \appto\dtl at string{#2#1}%
+  \fi
+  \@dtl at setwordbreaks@next{#1}#3%
+}
+\newcommand*{\dtl at setwordbreaksnohyphens}[2]{%
+  \expandafter\dtl at subnobrsp\expandafter{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{#2}%
+  \DTLsubstituteall{\dtl at string}{\ }{#2}%
+  \DTLsubstituteall{\dtl at string}{\space}{#2}%
+ \toks@{#2}%
+ \edef\dtl at do@setwordbreaks{%
+   \noexpand\@dtl at setwordbreaks{\the\toks@}\expandonce\dtl at string\space\noexpand\@nil}%
+ \def\dtl at string{}%
+ \dtl at do@setwordbreaks
+}
+\newcommand*{\@dtl at wordbreak}{ }
+\def\dtl at ifcasechargroup#1#2\dtl at end@ifcasechargroup#3#4#5{%
+ \expandafter\dtl at if@two at octets#1#2\relax\relax\dtl at end@if at two@octets
+ {%
+   \dtl at getfirst@UTFviii#1#2\@nil\end at dtl@getfirst at UTFviii
+   \expandafter\dtlsetUTFviiilccharcode\expandafter{\dtl at first}{\count@}%
+   \ifnum\count@<`a\relax #5\else#3\fi
+ }%
+ {%
+  \dtlifcasechargroup{#1}%
+   {#3}%
+   {%
+     \DTLifint{#1#2}
+     {%
+       #4%
+     }%
+     {%
+       #3%
+     }%
+   }%
+   {#5}%
+ }%
+}
+\newcommand*{\dtlifcasechargroup}[4]{%
+  \count@=`#1\relax
+  \dtlifintclosedbetween{\number\count@}{48}{57}%
+  {%
+    #3%
+  }%
+  {%
+    \dtlifintclosedbetween{\number\count@}{97}{122}%
+    {%
+      #2%
+    }%
+    {%
+      \dtlifintclosedbetween{\number\count@}{65}{90}%
+      {%
+        #2%
+      }%
+      {%
+        #4%
+      }%
+    }%
+  }%
+}
+\newcommand*{\dtlparsewords}[2]{%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \DTLsubstituteall{\dtl at string}{-}{ }%
+  \let\dtl at parsewordshandler#2\relax
+  \edef\dtl at donext{%
+     \noexpand\@dtl at parse@words\expandonce\dtl at string\space\noexpand\@nil}%
+  \dtl at donext
+}
+\def\@dtl at parse@words#1 #2{%
+  \def\dtl at tmp{#2}%
+  \ifx\@nnil\dtl at tmp
+   \let\parse at wordsnext=\@gobble
+  \else
+   \let\parse at wordsnext=\@dtl at parse@words
+  \fi
+  \dlt at parsewordshandler{#1}%
+  \parse at wordsnext#2%
+}
+\newcommand*{\DTLifstringlt}{\@ifstar\@sDTLifstringlt\@DTLifstringlt}
+\newcommand*{\@DTLifstringlt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount<0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringlt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount<0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLiflt}{\@ifstar\@sDTLiflt\@DTLiflt}
+\newcommand*{\@DTLiflt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumlt{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringlt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLiflt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumlt{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringlt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifnumgt}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumgt{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newcommand*{\DTLifstringgt}{\@ifstar\@sDTLifstringgt\@DTLifstringgt}
+\newcommand*{\@DTLifstringgt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount>0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringgt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount>0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLifgt}{\@ifstar\@sDTLifgt\@DTLifgt}
+\newcommand*{\@DTLifgt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumgt{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringgt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLifgt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumgt{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringgt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifnumeq}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumeq{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newcommand*{\DTLifstringeq}{\@ifstar\@sDTLifstringeq\@DTLifstringeq}
+\newcommand*{\@DTLifstringeq}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount=0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringeq}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount=0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLifeq}{\@ifstar\@sDTLifeq\@DTLifeq}
+\newcommand*{\@DTLifeq}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumeq{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringeq{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLifeq}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumeq{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringeq{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifSubString}[4]{%
+  \protected at edef\@dtl at dotestifsubstring{\noexpand\dtl at testifsubstring
+  {#1}{#2}}%
+  \@dtl at dotestifsubstring
+  \if at dtl@condition
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtl at testifsubstring}[2]{%
+  \dtl at subnobrsp{#1}{\@dtl at argA}%
+  \dtl at subnobrsp{#2}{\@dtl at argB}%
+  \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+  \let\@dtl at argA\dtl at string
+  \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+  \let\@dtl at argB\dtl at string
+  \edef\dtl at donext{%
+    \noexpand\@dtl at testifsubstring{\expandonce\@dtl at argA}{\expandonce\@dtl at argB}}%
+  \dtl at donext
+}
+\newcommand*{\@dtl at testifsubstring}[2]{%
+  \def\@dtl at subs@argA{#1}%
+  \def\@dtl at subs@argB{#2}%
+  \ifdefempty{\@dtl at subs@argB}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+    \ifdefempty{\@dtl at subs@argA}%
+    {%
+      \@dtl at conditionfalse
+    }%
+    {%
+      \@dtl at teststartswith{#1}{#2}%
+      \if at dtl@condition
+      \else
+        \dtl at getfirst#1\end at dtl@getfirst
+        \expandafter\dtl at ifsingle\expandafter{\dtl at first}%
+        {%
+          \expandafter\@dtl at testifsubstring\expandafter{\dtl at rest}{#2}%
+        }%
+        {%
+          \protected at edef\@dtl at donext{\noexpand\@dtl at testifsubstring
+             {\expandonce\dtl at first\expandonce\dtl at rest}{\expandonce\@dtl at subs@argB}}%
+          \@dtl at donext
+        }%
+      \fi
+    }%
+  }%
+}
+\newcommand*{\DTLifStartsWith}[4]{%
+  \@dtl at conditionfalse
+  \protected at edef\@dtl at tmp{\noexpand\dtl at teststartswith{#1}{#2}}%
+  \@dtl at tmp
+  \if at dtl@condition
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtl at teststartswith}[2]{%
+  \dtl at subnobrsp{#1}{\@dtl at argA}%
+  \dtl at subnobrsp{#2}{\@dtl at argB}%
+  \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+  \let\@dtl at argA\dtl at string
+  \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+  \let\@dtl at argB\dtl at string
+  \edef\dtl at donext{%
+    \noexpand\@dtl at teststartswith{\expandonce\@dtl at argA}{\expandonce\@dtl at argB}}%
+  \dtl at donext
+}
+
+\newcommand*{\@dtl at teststartswith}[2]{%
+  \def\@dtl at argA{#1}%
+  \def\@dtl at argB{#2}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      \@dtl at conditiontrue
+    }%
+    {%
+      \@dtl at conditionfalse
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      \@dtl at conditiontrue
+    }%
+    {%
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingle\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingle\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \ifnum\dtl at codeA=-1\relax
+            \ifnum\dtl at codeB=-1\relax
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+               \dtl at donext
+            \else
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith
+                   {\expandonce\dtl at restA}{\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+               \dtl at donext
+            \fi
+          \else
+            \ifnum\dtl at codeB=-1\relax
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith
+                   {\expandonce\dtl at firstA\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+               \dtl at donext
+            \else
+              \ifnum\dtl at codeA=\dtl at codeB
+                \protected at edef\dtl at donext{%
+                  \noexpand\@dtl at teststartswith{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                \dtl at donext
+              \else
+                \@dtl at conditionfalse
+              \fi
+            \fi
+          \fi
+        }%
+        {%
+          \protected at edef\dtl at donext{%
+            \noexpand\@dtl at teststartswith
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \protected at edef\dtl at donext{%
+          \noexpand\@dtl at teststartswith
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLifnumclosedbetween}[5]{%
+ \DTLconverttodecimal{#1}{\@dtl at numi}%
+ \DTLconverttodecimal{#2}{\@dtl at numii}%
+ \DTLconverttodecimal{#3}{\@dtl at numiii}%
+ \DTLifFPclosedbetween{\@dtl at numi}{\@dtl at numii}{\@dtl at numiii}{#4}{#5}%
+}
+\newcommand*{\DTLifstringclosedbetween}{%
+  \@ifstar\@sDTLifstringclosedbetween\@DTLifstringclosedbetween
+}
+\newcommand*{\@DTLifstringclosedbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount<0\relax
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount>0\relax
+      \def\@dtl at dovalue{#5}%
+    \else
+      \def\@dtl at dovalue{#4}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\@sDTLifstringclosedbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount<0\relax
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount>0\relax
+      \def\@dtl at dovalue{#5}%
+    \else
+      \def\@dtl at dovalue{#4}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\DTLifclosedbetween}{%
+  \@ifstar\@sDTLifclosedbetween\@DTLifclosedbetween
+}
+\newcommand*{\@DTLifclosedbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\@sDTLifclosedbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\DTLifnumopenbetween}[5]{%
+ \DTLconverttodecimal{#1}{\@dtl at numi}%
+ \DTLconverttodecimal{#2}{\@dtl at numii}%
+ \DTLconverttodecimal{#3}{\@dtl at numiii}%
+ \DTLifFPopenbetween{\@dtl at numi}{\@dtl at numii}{\@dtl at numiii}{#4}{#5}%
+}
+\newcommand*{\DTLifstringopenbetween}{%
+  \@ifstar\@sDTLifstringopenbetween\@DTLifstringopenbetween
+}
+\newcommand*{\@DTLifstringopenbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount>0\relax
+  \else
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount<0\relax
+      \def\@dtl at dovalue{#4}%
+    \else
+      \def\@dtl at dovalue{#5}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\@sDTLifstringopenbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount>0\relax
+  \else
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount<0\relax
+      \def\@dtl at dovalue{#4}%
+    \else
+      \def\@dtl at dovalue{#5}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\DTLifopenbetween}{%
+  \@ifstar\@sDTLifopenbetween\@DTLifopenbetween
+}
+\newcommand*{\@DTLifopenbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\@sDTLifopenbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\let\DTLifFPopenbetween\dtlifnumopenbetween
+\let\DTLifFPclosedbetween\dtlifnumclosedbetween
+\newcommand*{\dtl at testlt}[2]{%
+  \DTLiflt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLislt}[2]{%
+  \TE at throw\noexpand\dtl at testlt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiclt}[2]{%
+  \@sDTLiflt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisilt}[2]{%
+  \TE at throw\noexpand\dtl at testiclt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testgt}[2]{%
+  \DTLifgt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisgt}[2]{%
+  \TE at throw\noexpand\dtl at testgt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testicgt}[2]{%
+  \@sDTLifgt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisigt}[2]{%
+  \TE at throw\noexpand\dtl at testicgt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testeq}[2]{%
+  \DTLifeq{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLiseq}[2]{%
+  \TE at throw\noexpand\dtl at testeq{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiceq}[2]{%
+  \@sDTLifeq{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisieq}[2]{%
+  \TE at throw\noexpand\dtl at testiceq{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisSubString}[2]{%
+  \TE at throw\noexpand\dtl at testifsubstring{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisPrefix}[2]{%
+  \TE at throw\noexpand\dtl at teststartswith{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisinlist}[2]{%
+  \TE at throw\noexpand\dtl at testinlist{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testinlist}[2]{%
+  \DTLifinlist{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\dtl at testnumclosedbetween}[3]{%
+  \DTLifnumclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testnumclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testnumopenbetween}[3]{%
+  \DTLifnumopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testnumopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testclosedbetween}[3]{%
+  \DTLifclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiclosedbetween}[3]{%
+  \@sDTLifclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisiclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testiclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testopenbetween}[3]{%
+  \DTLifopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiopenbetween}[3]{%
+  \@sDTLifopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisiopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testiopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\let\DTLisFPclosedbetween\DTLisnumclosedbetween
+\newcommand*{\dtl at testFPopenbetween}[3]{%
+  \DTLifFPopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisFPopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testFPopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPislt}[2]{%
+  \dtlifnumlt{#1}{#2}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+    \@dtl at conditionfalse
+  }%
+}
+\newcommand*{\DTLisFPlt}[2]{%
+  \TE at throw\noexpand\dtl at testFPislt{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPisgt}[2]{%
+  \dtlifnumgt{#1}{#2}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+   \@dtl at conditionfalse
+  }%
+}
+\newcommand*{\DTLisFPgt}[2]{%
+  \TE at throw\noexpand\dtl at testFPisgt{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPiseq}[2]{%
+ \dtlifnumeq{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+  \@dtl at conditionfalse
+ }%
+}
+\newcommand*{\DTLisFPeq}[2]{%
+  \TE at throw\noexpand\dtl at testFPiseq{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPislteq}[2]{%
+ \dtlifnumlt{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+   \@dtl at conditionfalse
+ }%
+ \if at dtl@condition
+ \else
+  \dtl at testFPiseq{#1}{#2}%
+ \fi
+}
+\newcommand*{\DTLisFPlteq}[2]{%
+ \TE at throw\noexpand\dtl at testFPislteq{#1}{#2}%
+ \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPisgteq}[2]{%
+ \dtlifnumgt{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+   \@dtl at conditionfalse
+ }%
+ \if at dtl@condition
+ \else
+  \dtl at testFPiseq{#1}{#2}%
+ \fi
+}
+\newcommand*{\DTLisFPgteq}[2]{%
+  \TE at throw\noexpand\dtl at testFPisgteq{#1}{#2}%
+  \noexpand\if at dtl@condition}
+\newcommand*{\dtl at teststring}[1]{%
+  \DTLifstring{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisstring}[1]{%
+  \TE at throw\noexpand\dtl at teststring{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testnumerical}[1]{%
+  \DTLifnumerical{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumerical}[1]{%
+  \TE at throw\noexpand\dtl at testnumerical{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testint}[1]{%
+  \DTLifint{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisint}[1]{%
+  \TE at throw\noexpand\dtl at testint{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testreal}[1]{%
+  \DTLifreal{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisreal}[1]{%
+  \TE at throw\noexpand\dtl at testreal{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testcurrency}[1]{%
+  \DTLifcurrency{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLiscurrency}[1]{%
+  \TE at throw\noexpand\dtl at testcurrency{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testcurrencyunit}[2]{%
+  \DTLifcurrencyunit{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLiscurrencyunit}[2]{%
+  \TE at throw\noexpand\dtl at testcurrencyunit{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtlbreak}{%
+  \PackageError{datatool}{Can't break out of anything}{}%
+}
+\long\def\dtlforint#1=#2\to#3\step#4\do#5{%
+  \let\@dtl at orgbreak\dtlbreak
+  \def\@dtl at endloophook{}%
+  \def\dtlbreak{\def\@dtl at endloophook{#1=#3}}%
+  #1=#2\relax
+  \ifnum#4<0\relax
+    \whiledo{\(#1>#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \@dtl at endloophook
+      \advance#1 by #4\relax
+    }%
+  \else
+    \whiledo{\(#1<#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \@dtl at endloophook
+      \advance#1 by #4\relax
+    }%
+  \fi
+  \let\dtlbreak\@dtl at orgbreak
+}
+\newcount\@dtl at foreach@level
+\long\def\dtlgforint#1=#2\to#3\step#4\do#5{%
+  \global#1=#2\relax
+  \global\advance\@dtl at foreach@level by 1\relax
+  \expandafter\global\expandafter
+    \let\csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+    \relax
+  \expandafter\global\expandafter
+    \let\csname @dtl at break@\the\@dtl at foreach@level\endcsname
+    \dtlbreak
+  \gdef\dtlbreak{\expandafter
+     \gdef\csname @dtl at endhook@\the\@dtl at foreach@level\endcsname{%
+       #1=#3}}%
+  \ifnum#4<0\relax
+    \whiledo{\(#1>#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+      \global\advance#1 by #4\relax
+    }%
+  \else
+    \whiledo{\(#1<#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+      \global\advance#1 by #4\relax
+    }%
+  \fi
+  \expandafter\global\expandafter\let\expandafter\dtlbreak
+    \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+  \global\advance\@dtl at foreach@level by -1\relax
+}
+\newenvironment{dtlenvgforint}[1]%
+{%
+  \def\@dtlenvgforint at arg{#1}%
+  \long at collect@body\@do at dtlenvgforint
+}%
+{}
+\newcommand{\@do at dtlenvgforint}[1]{%
+  \expandafter\dtlgforint\@dtlenvgforint at arg\do{#1}%
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datatool-base-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datatool-fp-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datatool-fp-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-fp}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{fp}
+\RequirePackage{datatool-base}[=v2.32]
+\define at choicekey{datatool-fp}{verbose}[\val\nr]{true,false}[true]{%
+  \ifcase\nr\relax
+    \FPmessagestrue
+  \or
+    \FPmessagesfalse
+  \fi
+}
+\let\ifFPmessages\ifdtlverbose
+\ProcessOptionsX
+\providecommand*{\@dtl at mathprocessor}{fp}
+\newcommand*{\dtlifnumeq}[4]{%
+  \FPifeq{#1}{#2}%
+    #3%
+  \else
+    #4%
+  \fi
+}
+\let\ifdtlverbose\ifFPmessages
+\newcommand*{\dtlifnumlt}[4]{%
+  \FPiflt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumgt}[4]{%
+  \FPifgt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \@dtl at dovalue
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \dtlifnumeq{#1}{#2}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \dtlifnumeq{#1}{#3}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \@dtl at dovalue
+}
+\newcommand*{\dtladd}[3]{%
+  \FPadd{#1}{#2}{#3}%
+}
+\newcommand*{\dtlsub}[3]{%
+  \FPsub{#1}{#2}{#3}%
+}
+\newcommand*{\dtlmul}[3]{%
+  \FPmul{#1}{#2}{#3}%
+}
+\newcommand*{\dtldiv}[3]{%
+  \FPdiv{#1}{#2}{#3}%
+}
+\newcommand*{\dtlroot}[2]{%
+  \FProot{#1}{#2}%
+}
+\newcommand*{\dtlround}[3]{%
+  \FPround{#1}{#2}{#3}%
+}
+\newcommand*{\dtltrunc}[3]{%
+  \FPtrunc{#1}{#2}{#3}%
+}
+\newcommand*{\dtlclip}[2]{%
+  \FPclip{#1}{#2}%
+}
+\newcommand*{\dtlmin}[3]{%
+  \FPmin{#1}{#2}{#3}%
+}
+\newcommand*{\dtlmax}[3]{%
+  \FPmax{#1}{#2}{#3}%
+}
+\newcommand*{\dtlabs}[2]{%
+  \FPabs{#1}{#2}%
+}
+\newcommand*{\dtlneg}[2]{%
+  \FPneg{#1}{#2}%
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datatool-fp-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*datatool-pgfmath-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (datatool-pgfmath-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-pgfmath}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{pgfrcs,pgfkeys,pgfmath}
+\ProcessOptionsX
+\providecommand*{\@dtl at mathprocessor}{pgfmath}
+\newcommand*{\dtlifnumeq}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1==\number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\RequirePackage{datatool-base}[=v2.32]
+\newcommand*{\dtlifnumlt}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1 < \number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumgt}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1 > \number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+  \def\@dtl at truepart{#4}%
+  \def\@dtl at falsepart{#5}%
+  \pgfmathifthenelse
+    {(\number0#2 < \number0#1) && (\number0#1 < \number0#3)}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+  \def\@dtl at truepart{#4}%
+  \def\@dtl at falsepart{#5}%
+  \pgfmathifthenelse
+    {(\number0#2 <= \number0#1) && (\number0#1 <= \number0#3)}
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtladd}[3]{%
+  \pgfmathadd{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlsub}[3]{%
+  \pgfmathsubtract{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlmul}[3]{%
+  \pgfmathmultiply{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtldiv}[3]{%
+  \pgfmathdivide{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlroot}[2]{%
+  \pgfmathsqrt{#2}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlround}[3]{%
+  \ifnum#3=0\relax
+    \pgfmathparse{int(round(#2))}%
+    \let#1\pgfmathresult
+  \else
+    \pgfmathparse{int(10^#3)}%
+    \let\dtl at tmpshift\pgfmathresult
+    \pgfmathparse{int(floor(#2))}%
+    \let\dtl at int@round\pgfmathresult
+    \pgfmathparse{int(round((#2-\dtl at int@round) * \dtl at tmpshift))}%
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@round
+      +\number0\@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\newcommand*{\@dtl at gatherintfrac}[1]{%
+  \ifx\relax#1\relax
+  \else
+    \advance\@dtl at tmpcount by -1\relax
+    \ifnum\@dtl at tmpcount<0\relax
+      \edef\@dtl at fracpart{\@dtl at fracpart#1}%
+    \else
+      \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \fi
+    \expandafter\@dtl at gatherintfrac
+  \fi
+}
+\newcommand*{\dtltrunc}[3]{%
+  \ifnum#3=0\relax
+    \pgfmathparse{int(floor(#2))}%
+    \let#1\pgfmathresult
+  \else
+    \pgfmathparse{int(10^#3)}%
+    \let\dtl at tmpshift\pgfmathresult
+    \pgfmathparse{int(floor(#2))}%
+    \let\dtl at int@trunc\pgfmathresult
+    \pgfmathparse{int(floor((#2-\dtl at int@trunc) * \dtl at tmpshift))}%
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@trunc
+      +\number0\@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\newcommand*{\dtlclip}[2]{%
+ \edef#1{#2}%
+}
+\newcommand*{\dtlmin}[3]{%
+  \pgfmathmin{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlmax}[3]{%
+  \pgfmathmax{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlabs}[2]{%
+  \pgfmathabs{#2}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlneg}[2]{%
+  \pgfmathmul{-1}{#2}%
+  \let#1\pgfmathresult
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</datatool-pgfmath-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<*person-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
+%\subsection{Rollback v2.32 (person-2019-09-27.sty)}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{person}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{ifthen}
+\RequirePackage{datatool}[=v2.32]
+\newcounter{people}
+\newcounter{person}
+\newcommand*{\@people at list}{,}
+\newcommand*{\@get at firstperson}[1]{%
+  \expandafter\@@get at firstperson\@people at list,\@nil{#1}}
+  \def\@@get at firstperson,#1,#2\@nil#3{%
+  \def#3{#1}%
+}
+\newcommand*{\malelabels}{male,Male,MALE,M,m}
+\newcommand*{\addmalelabel}[1]{%
+  \expandafter\@dtl at toksA\expandafter{\malelabels}%
+  \expandafter\@dtl at toksB\expandafter{#1}%
+  \edef\malelabels{\the\@dtl at toksA,\the\@dtl at toksB}%
+}
+\newcommand*{\addfemalelabel}[1]{%
+  \expandafter\@dtl at toksA\expandafter{\femalelabels}%
+  \expandafter\@dtl at toksB\expandafter{#1}%
+  \edef\femalelabels{\the\@dtl at toksA,\the\@dtl at toksB}%
+}
+\newcommand*{\femalelabels}{female,Female,FEMALE,F,f}
+\newcommand{\ifmalelabel}[3]{%
+   \expandafter\DTLifinlist\expandafter{#1}{\malelabels}{#2}{#3}%
+}
+\newcommand{\iffemalelabel}[3]{%
+   \expandafter\DTLifinlist\expandafter{#1}{\femalelabels}{#2}{#3}%
+}
+\newcommand*{\newperson}[4][anon]{%
+  \@ifundefined{person@#1 at name}%
+  {%
+    \ifmalelabel{#4}%
+    {%
+      \expandafter\gdef\csname person@#1 at gender\endcsname{male}%
+    }%
+    {%
+      \iffemalelabel{#4}%
+      {%
+        \expandafter\gdef\csname person@#1 at gender\endcsname{female}%
+      }%
+      {%
+         \PackageError{person}{Unknown gender `#4' for person
+         `#1'}{Allowed gender labels are: \malelabels\space or
+         \femalelabels}%
+         \@namedef{person@#1 at gender}{other}%
+      }%
+    }%
+    \expandafter
+      \protected at xdef\csname person@#1 at fullname\endcsname{#2}%
+    \expandafter
+      \protected at xdef\csname person@#1 at name\endcsname{#3}%
+    \protected at xdef\@people at list{\@people at list#1,}%
+    \stepcounter{people}%
+  }%
+  {%
+    \PackageError{person}{Person `#1' has already been defined}{}%
+  }%
+}
+\newcommand*{\removeperson}[1][anon]{%
+  \edef\@person at label{#1}%
+  \expandafter\@removeperson\expandafter{\@person at label}%
+}
+\newcommand*{\@removeperson}[1]{%
+   \ifpersonexists{#1}%
+   {%
+     \def\@remove at person##1,#1,##2\@nil{%
+       \def\@prsn at pre{##1}\def\@prsn at post{##2}}%
+     \expandafter\@remove at person\@people at list\@nil
+     \xdef\@people at list{\@prsn at pre,\@prsn at post}%
+     \addtocounter{people}{-1}%
+     \expandafter\global\expandafter
+       \let\csname person@#1 at name\endcsname\undefined
+     \expandafter\global\expandafter
+       \let\csname person@#1 at fullname\endcsname\undefined
+     \expandafter\global\expandafter
+       \let\csname person@#1 at gender\endcsname\undefined
+   }%
+   {%
+     \PackageError{person}{Can't remove person `#1': no such
+     person}{}%
+   }%
+}
+\newcommand*{\removepeople}[1]{%
+  \@for\@thisperson:=#1\do{%
+    \ifx\@thisperson\@empty
+    \else
+      \expandafter\removeperson\expandafter[\@thisperson]%
+    \fi
+  }%
+}
+\newcommand*{\removeallpeople}{%
+  \@for\@thisperson:=\@people at list\do{%
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @name\endcsname\undefined
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @fullname\endcsname\undefined
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @gender\endcsname\undefined
+  }%
+  \setcounter{people}{0}%
+  \gdef\@people at list{,}%
+}
+\newcommand{\ifpersonexists}[3]{%
+  \@ifundefined{person@#1 at name}{#3}{#2}%
+}
+\newcommand{\ifmale}[3]{%
+   \ifpersonexists{#1}%
+   {%
+      \edef\@gender{\csname person@#1 at gender\endcsname}%
+      \ifx\@gender\@male at label
+        #2%
+      \else
+        #3%
+      \fi
+   }%
+   {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+   }%
+}
+\def\@male at label{male}
+\newcommand{\ifallmale}[3][\@people at list]{%
+  \@for\@thisperson:=#1\do{%
+    \ifpersonexists{\@thisperson}%
+    {%
+      \edef\@gender{\csname person@\@thisperson @gender\endcsname}%
+      \ifx\@gender\@male at label
+      \else
+        \@endfortrue
+      \fi
+    }%
+    {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+    }%
+  }%
+  \if at endfor
+    #3%
+  \else
+    #2%
+  \fi
+}
+\newcommand{\iffemale}[3]{%
+   \ifpersonexists{#1}%
+   {%
+      \edef\@gender{\csname person@#1 at gender\endcsname}%
+      \ifx\@gender\@female at label
+        #2%
+      \else
+        #3%
+      \fi
+   }%
+   {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+   }%
+}
+\def\@female at label{female}
+\newcommand{\ifallfemale}[3][\@people at list]{%
+  \@for\@thisperson:=#1\do{%
+    \edef\@gender{\csname person@\@thisperson @gender\endcsname}%
+    \ifx\@gender\@female at label
+    \else
+      \@endfortrue
+    \fi
+  }%
+  \if at endfor
+    #3%
+  \else
+    #2%
+  \fi
+}
+\def\foreachperson(#1,#2,#3,#4)#5{%
+  \ifx#5\in
+    \def\@do at foreachperson{\@foreachperson(#1,#2,#3,#4)#5}%
+  \else
+    \def\@do at foreachperson{%
+      \@foreachperson(#1,#2,#3,#4)\in\@people at list#5}%
+  \fi
+  \@do at foreachperson
+}
+\long\def\@foreachperson(#1,#2,#3,#4)\in#5\do#6{%
+  \@for#4:=#5\do{%
+    \ifx#4\@empty
+    \else
+       \ifpersonexists{#4}%
+       {%
+         \expandafter
+           \let\expandafter#1\csname person@#4 at name\endcsname
+         \expandafter
+           \let\expandafter#2\csname person@#4 at fullname\endcsname
+         \expandafter
+           \let\expandafter#3\csname person@#4 at gender\endcsname
+         \ifx#3\@male at label
+           \let#3\malename
+         \else
+           \ifx#3\@female at label
+             \let#3\femalename
+           \fi
+         \fi
+         #6%
+       }%
+       {%
+         \PackageError{person}{Person `#4' doesn't exist}{}%
+       }%
+     \fi
+  }%
+}
+\newcommand*{\malepronoun}{he}
+\newcommand*{\femalepronoun}{she}
+\newcommand*{\pluralpronoun}{they}
+\newcommand*{\maleobjpronoun}{him}
+\newcommand*{\femaleobjpronoun}{her}
+\newcommand*{\pluralobjpronoun}{them}
+\newcommand*{\malepossadj}{his}
+\newcommand*{\femalepossadj}{her}
+\newcommand*{\pluralpossadj}{their}
+\newcommand*{\maleposspronoun}{his}
+\newcommand*{\femaleposspronoun}{hers}
+\newcommand*{\pluralposspronoun}{theirs}
+\newcommand*{\malechild}{son}
+\newcommand*{\femalechild}{daughter}
+\newcommand*{\pluralchild}{children}
+\newcommand*{\malechildren}{sons}
+\newcommand*{\femalechildren}{daughters}
+\newcommand*{\maleparent}{father}
+\newcommand*{\femaleparent}{mother}
+\newcommand*{\pluralparent}{parents}
+\newcommand*{\malesibling}{brother}
+\newcommand*{\femalesibling}{sister}
+\newcommand*{\pluralsibling}{siblings}
+\newcommand*{\malesiblings}{brothers}
+\newcommand*{\femalesiblings}{sisters}
+\providecommand*{\andname}{and}
+\newcommand*{\malename}{male}
+\newcommand*{\femalename}{female}
+\newcommand*{\personsep}{, }
+\newcommand*{\personlastsep}{\space\andname\space}
+\newcommand*{\twopeoplesep}{\space\andname\space}
+\newcommand*{\personfullname}[1][anon]{%
+  \@ifundefined{person@#1 at fullname}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \csname person@#1 at fullname\endcsname
+  }%
+}
+\newcommand*{\peoplefullname}{%
+  \setcounter{person}{1}%
+  \@for\@thisperson:=\@people at list\do{%
+    \ifthenelse{\equal{\@thisperson}{}}%
+    {}%
+    {%
+      \personfullname[\@thisperson]%
+      \stepcounter{person}%
+      \ifnum\c at people=1\relax
+      \else
+        \ifnum\c at person=\c at people
+          \ifnum\c at people=2\relax
+            \twopeoplesep
+          \else
+            \personlastsep
+          \fi
+        \else
+           \ifnum\c at person<\c at people
+             \personsep
+           \fi
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\personname}[1][anon]{%
+  \@ifundefined{person@#1 at name}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \csname person@#1 at name\endcsname
+  }%
+}
+\newcommand*{\peoplename}{%
+  \setcounter{person}{1}%
+  \@for\@thisperson:=\@people at list\do{%
+    \ifthenelse{\equal{\@thisperson}{}}%
+    {}%
+    {%
+      \personname[\@thisperson]%
+      \stepcounter{person}%
+      \ifnum\c at people=1\relax
+      \else
+        \ifnum\c at person=\c at people
+          \ifnum\c at people=2\relax
+            \twopeoplesep
+          \else
+            \personlastsep
+          \fi
+        \else
+           \ifnum\c at person<\c at people
+             \personsep
+           \fi
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\personpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender pronoun\endcsname
+  }%
+}
+\newcommand*{\Personpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender pronoun\endcsname
+  }%
+}
+\newcommand*{\peoplepronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peoplepronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personobjpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender objpronoun\endcsname
+  }%
+}
+\newcommand*{\Personobjpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender objpronoun\endcsname
+  }%
+}
+\newcommand*{\peopleobjpronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralobjpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personobjpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleobjpronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralobjpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personobjpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personpossadj}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender possadj\endcsname
+  }%
+}
+\newcommand*{\Personpossadj}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender possadj\endcsname
+  }%
+}
+\newcommand*{\peoplepossadj}{%
+  \ifnum\c at people>1\relax
+     \pluralpossadj
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personpossadj[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peoplepossadj}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralpossadj
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personpossadj[\@thisperson]%
+  \fi
+}
+\newcommand*{\personposspronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender posspronoun\endcsname
+  }%
+}
+\newcommand*{\Personposspronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender posspronoun\endcsname
+  }%
+}
+\newcommand*{\peopleposspronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralposspronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personposspronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleposspronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralposspronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personposspronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personchild}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender child\endcsname
+  }%
+}
+\newcommand*{\Personchild}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+      \csname\@gender child\endcsname
+  }%
+}
+\newcommand*{\peoplechild}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\malechildren}%
+      {\ifallfemale{\femalechildren}{\pluralchild}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \personchild[\@thisperson]%
+ \fi
+}
+\newcommand*{\Peoplechild}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\expandafter\MakeUppercase\malechildren}%
+      {\ifallfemale
+        {\expandafter\MakeUppercase\femalechildren}
+        {\expandafter\MakeUppercase\pluralchild}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \Personchild[\@thisperson]%
+ \fi
+}
+\newcommand*{\personparent}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender parent\endcsname
+  }%
+}
+\newcommand*{\Personparent}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+       \csname\@gender parent\endcsname
+  }%
+}
+\newcommand*{\peopleparent}{%
+  \ifnum\c at people>1\relax
+     \pluralparent
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personparent[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleparent}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralparent
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personparent[\@thisperson]%
+  \fi
+}
+\newcommand*{\personsibling}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender sibling\endcsname
+  }%
+}
+\newcommand*{\Personsibling}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+      \csname\@gender sibling\endcsname
+  }%
+}
+\newcommand*{\peoplesibling}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\malesiblings}%
+      {\ifallfemale{\femalesiblings}{\pluralsibling}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \personsibling[\@thisperson]%
+ \fi
+}
+\newcommand*{\persongender}[1]{%
+   \ifmale{#1}{\malename}{\femalename}%
+}
+\newcommand*{\getpersongender}[2]{%
+   \ifmale{#2}{\let#1\malename}{\let#1\femalename}%
+}
+\newcommand*{\getpersonname}[2]{%
+   \ifpersonexists{#2}%
+   {%
+     \expandafter\let\expandafter#1\csname person@#2 at name\endcsname
+   }%
+   {%
+      \PackageError{person}{Person `#2' doesn't exist}{}%
+   }%
+}
+\newcommand*{\getpersonfullname}[2]{%
+   \ifpersonexists{#2}%
+   {%
+     \expandafter
+       \let\expandafter#1\csname person@#2 at fullname\endcsname
+   }%
+   {%
+      \PackageError{person}{Person `#2' doesn't exist}{}%
+   }%
+}
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</person-2019-09-27.sty>
+%    \end{macrocode}
+%\fi
 %\Finale
 \endinput

Modified: trunk/Master/texmf-dist/source/latex/datatool/datatool.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/datatool/datatool.ins	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/source/latex/datatool/datatool.ins	2025-03-05 21:33:51 UTC (rev 74461)
@@ -1,4 +1,4 @@
-% datatool.ins generated using makedtx version 1.2 2025/3/3 16:09
+% datatool.ins generated using makedtx version 1.2 2025/3/5 16:10
 \input docstrip
 
 \preamble
@@ -18,7 +18,7 @@
 
  The Current Maintainer of this work is Nicola Talbot.
 
- This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+ This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 
 \endpreamble
 
@@ -59,6 +59,26 @@
 \file{person.sty}{\usepreamble\defaultpreamble
 \usepostamble\defaultpostamble\from{datatool.dtx}{person.sty,package}}
 \file{databib.bst}{\nopreamble\nopostamble\from{datatool.dtx}{databib.bst}}
+\file{databar-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{databar-2019-09-27.sty,package}}
+\file{databib-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{databib-2019-09-27.sty,package}}
+\file{datagidx-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datagidx-2019-09-27.sty,package}}
+\file{datapie-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datapie-2019-09-27.sty,package}}
+\file{dataplot-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{dataplot-2019-09-27.sty,package}}
+\file{datatool-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datatool-2019-09-27.sty,package}}
+\file{datatool-base-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datatool-base-2019-09-27.sty,package}}
+\file{datatool-fp-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datatool-fp-2019-09-27.sty,package}}
+\file{datatool-pgfmath-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{datatool-pgfmath-2019-09-27.sty,package}}
+\file{person-2019-09-27.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datatool.dtx}{person-2019-09-27.sty,package}}
 }
 
 \endbatchfile

Added: trunk/Master/texmf-dist/tex/latex/datatool/databar-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/databar-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/databar-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,838 @@
+%%
+%% This is file `databar-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `databar-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{databar}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{dataplot}[=v2.32]
+\newif\ifDTLcolorbarchart
+\DTLcolorbarcharttrue
+\DeclareOption{color}{\DTLcolorbarcharttrue}
+\DeclareOption{gray}{\DTLcolorbarchartfalse}
+\newcommand*{\DTLbarXlabelalign}{left,rotate=-90}
+\newcommand*{\DTLbarYticklabelalign}{right}
+\define at boolkey{databar}[DTL]{verticalbars}[true]{%
+\ifDTLverticalbars
+ \def\DTLbarXlabelalign{left,rotate=-90}%
+ \def\DTLbarYticklabelalign{right}
+\else
+ \def\DTLbarXlabelalign{right}%
+ \def\DTLbarYticklabelalign{center}
+\fi}
+\DTLverticalbarstrue
+\DeclareOption{vertical}{\DTLverticalbarstrue
+ \def\DTLbarXlabelalign{left,rotate=-90}%
+ \def\DTLbarYticklabelalign{right}
+}
+\DeclareOption{horizontal}{\DTLverticalbarsfalse
+ \def\DTLbarXlabelalign{right}%
+ \def\DTLbarYticklabelalign{center}
+}
+\ProcessOptions
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{tikz}
+\newlength\DTLbarchartlength
+\DTLbarchartlength=3in
+\newlength\DTLbarwidth
+\DTLbarwidth=1cm
+\newlength\DTLbarlabeloffset
+\setlength\DTLbarlabeloffset{10pt}
+\newcommand*{\DTLBarXAxisStyle}{-}
+\newcommand*{\DTLBarYAxisStyle}{-}
+\newcounter{DTLbarroundvar}
+\setcounter{DTLbarroundvar}{1}
+\newcommand*{\DTLbardisplayYticklabel}[1]{#1}
+\newcommand*{\DTLdisplaylowerbarlabel}[1]{#1}
+\newcommand*{\DTLdisplaylowermultibarlabel}[1]{#1}
+\newcommand*{\DTLdisplayupperbarlabel}[1]{#1}
+\newcommand*{\DTLdisplayuppermultibarlabel}[1]{#1}
+\newcommand*{\DTLbaratbegintikz}{}
+\newcommand*{\DTLbaratendtikz}{}
+\newif\ifDTLbarxaxis
+\newif\ifDTLbaryaxis
+\newif\ifDTLbarytics
+\newcount\@dtl at barcount
+\newcommand*{\DTLsetbarcolor}[2]{%
+\expandafter\def\csname dtlbar at segcol\romannumeral#1\endcsname{#2}%
+}
+\newcommand*{\DTLgetbarcolor}[1]{%
+\csname dtlbar at segcol\romannumeral#1\endcsname}
+\newcommand*{\DTLdobarcolor}[1]{%
+\expandafter\color\expandafter
+{\csname dtlbar at segcol\romannumeral#1\endcsname}}
+\newcommand*{\DTLdocurrentbarcolor}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{databar}{Can't use
+  \string\DTLdocurrentbarcolor\space outside
+  \string\DTLbarchart}{}%
+\else
+  \expandafter\DTLdobarcolor\expandafter{%
+  \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+\fi}
+\newcommand*{\DTLbaroutlinecolor}{black}
+\newlength\DTLbaroutlinewidth
+\DTLbaroutlinewidth=0pt
+\ifDTLcolorbarchart
+ \DTLsetbarcolor{1}{red}
+ \DTLsetbarcolor{2}{green}
+ \DTLsetbarcolor{3}{blue}
+ \DTLsetbarcolor{4}{yellow}
+ \DTLsetbarcolor{5}{magenta}
+ \DTLsetbarcolor{6}{cyan}
+ \DTLsetbarcolor{7}{orange}
+ \DTLsetbarcolor{8}{white}
+\else
+ \DTLsetbarcolor{1}{black!15}
+ \DTLsetbarcolor{2}{black!25}
+ \DTLsetbarcolor{3}{black!35}
+ \DTLsetbarcolor{4}{black!45}
+ \DTLsetbarcolor{5}{black!55}
+ \DTLsetbarcolor{6}{black!65}
+ \DTLsetbarcolor{7}{black!75}
+ \DTLsetbarcolor{8}{black!85}
+\fi
+\newcommand*{\DTLeverybarhook}{}
+\define at key{databar}{max}{\def\DTLbarmax{#1}}
+\define at key{databar}{length}{\DTLbarchartlength=#1\relax
+}
+\define at key{databar}{maxdepth}{%
+\ifnum#1>0\relax
+ \PackageError{databar}{depth must be zero or negative}{}%
+\else
+ \def\DTLnegextent{#1}%
+\fi}
+\define at choicekey{databar}{axes}[\var\nr]{both,x,y,none}{%
+\ifcase\nr\relax
+ % both
+  \DTLbarxaxistrue
+  \DTLbaryaxistrue
+  \DTLbaryticstrue
+\or
+ % x only
+  \DTLbarxaxistrue
+  \DTLbaryaxisfalse
+  \DTLbaryticsfalse
+\or
+ % y only
+  \DTLbarxaxisfalse
+  \DTLbaryaxistrue
+  \DTLbaryticstrue
+\or
+ % neither
+  \DTLbarxaxisfalse
+  \DTLbaryaxisfalse
+  \DTLbaryticsfalse
+\fi
+}
+\define at key{databar}{variable}{%
+ \def\DTLbarvariable{#1}%
+}
+\define at key{databar}{variables}{%
+ \def\dtlbar at variables{#1}%
+}
+\define at key{databar}{barwidth}{\setlength{\DTLbarwidth}{#1}}
+\define at key{databar}{barlabel}{%
+\def\dtl at barlabel{#1}}
+\def\dtl at barlabel{}
+\define at key{databar}{multibarlabels}{%
+\def\dtl at multibarlabels{#1}}
+\def\dtl at multibarlabels{}
+\define at key{databar}{groupgap}{\def\dtlbar at groupgap{#1}}
+\def\dtlbar at groupgap{1}
+\define at key{databar}{upperbarlabel}{%
+\def\dtl at upperbarlabel{#1}}
+\def\dtl at upperbarlabel{}
+\define at key{databar}{uppermultibarlabels}{%
+\def\dtl at uppermultibarlabels{#1}}
+\def\dtl at uppermultibarlabels{}
+\define at key{databar}{yticpoints}{%
+\def\dtlbar at yticlist{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticlist=\relax
+\define at key{databar}{yticgap}{%
+\def\dtlbar at yticgap{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticgap=\relax
+\define at key{databar}{yticlabels}{%
+\def\dtlbar at yticlabels{#1}\DTLbaryticstrue\DTLbaryaxistrue}
+\let\dtlbar at yticlabels=\relax
+\define at key{databar}{ylabel}{%
+\def\dtlbar at ylabel{#1}}
+\let\dtlbar at ylabel=\relax
+\newcommand*{\DTLbarchart}[4][\boolean{true}]{%
+{%
+  \undef\DTLbarvariable
+  \undef\DTLbarmax
+  \undef\DTLnegextent
+  \disable at keys{databar}{variables,multibarlabels,%
+    uppermultibarlabels,groupgap}%
+  \setkeys{databar}{#2}%
+  \ifundef{\DTLbarvariable}%
+  {%
+    \PackageError{databar}%
+    {\string\DTLbarchart\space missing variable}%
+    {You haven't use the "variable" key}%
+  }%
+  {%
+    \ifundef{\DTLbarmax}%
+    {%
+      \@sDTLforeach[#1]{#3}{#4}{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \ifundef{\DTLbarmax}%
+        {%
+          \let\DTLbarmax=\dtl at barvar
+        }%
+        {%
+          \let\dtl at old=\DTLbarmax
+          \dtlmax{\DTLbarmax}{\dtl at old}{\dtl at barvar}%
+        }%
+      }%
+      \ifx\dtlbar at yticgap\relax
+      \else
+        \let\dtl at thistick=\dtlbar at yticgap
+        \whiledo{\DTLisFPopenbetween{\dtl at thistick}{0}{\DTLbarmax}}%
+        {%
+          \dtladd{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+        }%
+        \let\DTLbarmax=\dtl at thistick
+      \fi
+    }%
+    {}%
+    \ifundef{\DTLnegextent}%
+    {%
+      \def\DTLnegextent{0}%
+      \@sDTLforeach[#1]{#3}{#4}{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \let\dtl at old=\DTLnegextent
+        \DTLmin{\DTLnegextent}{\dtl at old}{\dtl at barvar}%
+      }%
+      \ifx\dtlbar at yticgap\relax
+      \else
+        \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}%
+        {%
+        \edef\dtl at thistick{0}%
+        \whiledo{\DTLisFPclosedbetween{\dtl at thistick}{\DTLnegextent}{0}}{%
+          \dtlsub{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+        }%
+        \let\DTLnegextent=\dtl at thistick
+        }{}%
+      \fi
+    }%
+    {}%
+    \@dtl at tmpcount=\DTLbarchartlength
+    \dtlsub{\dtl at extent}{\DTLbarmax}{\DTLnegextent}%
+    \dtldiv{\dtl at unit}{\number\@dtl at tmpcount}{\dtl at extent}%
+     \setlength{\dtl at yticlabelwidth}{0pt}%
+     \ifDTLbarytics
+       \ifx\dtlbar at yticlist\relax
+         \ifx\dtlbar at yticgap\relax
+           \@dtl at tmpcount=\DTLmintickgap
+           \divide\@dtl at tmpcount by 65536\relax
+           \dtldiv{\dtl at mingap}{\number\@dtl at tmpcount}{\dtl at unit}%
+           \dtl at constructticklist\DTLnegextent\DTLbarmax
+             \dtl at mingap\dtlbar at yticlist
+         \else
+           \dtl at constructticklistwithgapz
+             \DTLnegextent\DTLbarmax\dtlbar at yticlist\dtlbar at yticgap
+         \fi
+       \fi
+       \ifx\dtlbar at ylabel\relax
+       \else
+         \ifx\dtlbar at yticlabels\relax
+           \@for\dtl at thislabel:=\dtlbar at yticlist\do{%
+             \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                     {\c at DTLbarroundvar}%
+             \ifDTLverticalbars
+               \settowidth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \else
+               \settoheight{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \edef\@dtl at h{\the\dtl at tmplength}%
+               \settodepth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \addtolength{\dtl at tmplength}{\@dtl at h}%
+               \addtolength{\dtl at tmplength}{\baselineskip}%
+             \fi
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \else
+           \@for\dtl at thislabel:=\dtlbar at yticlabels\do{%
+             \ifDTLverticalbars
+               \settowidth{\dtl at tmplength}{%
+                 \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \else
+               \settoheight{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \edef\@dtl at h{\the\dtl at tmplength}%
+               \settodepth{\dtl at tmplength}{%
+                  \DTLbardisplayYticklabel{\dtl at thislabel}}%
+               \addtolength{\dtl at tmplength}{\@dtl at h}%
+               \addtolength{\dtl at tmplength}{\baselineskip}%
+             \fi
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \fi
+       \fi
+     \fi
+  \edef\DTLbarchartwidth{\expandafter\number\csname dtlrows@#3\endcsname}
+  \begin{tikzpicture}
+  \ifDTLverticalbars
+    \pgfsetyvec{\pgfpoint{0pt}{\dtl at unit sp}}%
+    \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}%
+  \else
+    \pgfsetxvec{\pgfpoint{\dtl at unit sp}{0pt}}%
+    \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}%
+  \fi
+  \DTLbaratbegintikz
+  \def\@dtl at start{0}%
+  \@sDTLforeach[#1]{#3}{#4}{%
+  \expandafter\let\expandafter\@dtl at bar
+    \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+  \expandafter\DTLconverttodecimal\expandafter
+    {\DTLbarvariable}{\dtl at variable}%
+  \begin{scope}
+   \DTLdocurrentbarcolor
+   \ifDTLverticalbars
+     \fill (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+        -- (\@dtl at bar,\dtl at variable) -- (\@dtl at bar,0) -- cycle;
+   \else
+     \fill (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+        -- (\dtl at variable,\@dtl at bar) -- (0,\@dtl at bar) -- cycle;
+   \fi
+  \end{scope}
+  \begin{scope}
+  \ifdim\DTLbaroutlinewidth>0pt
+   \expandafter\color\expandafter{\DTLbaroutlinecolor}
+   \ifDTLverticalbars
+     \draw (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+        -- (\@dtl at bar,\dtl at variable) -- (\@dtl at bar,0) -- cycle;
+   \else
+     \draw (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+        -- (\dtl at variable,\@dtl at bar) -- (0,\@dtl at bar) -- cycle;
+   \fi
+  \fi
+  \end{scope}
+  \ifDTLverticalbars
+    \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{0}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}},
+       \DTLbarXlabelalign
+    }%
+    \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl at start.5}{0}}%
+  \else
+    \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{0}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}},
+       \DTLbarXlabelalign
+    }%
+    \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl at start.5}}%
+  \fi
+   \expandafter\pgftext\expandafter[\dtl at textopt]{%
+     \DTLdisplaylowerbarlabel{\dtl at barlabel}}
+  \ifDTLverticalbars
+    \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}%
+    {
+      \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}
+      }%
+    }{%
+      \edef\dtl at textopt{%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}
+             {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}}
+      }%
+    }
+    \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl at start.5}{\dtl at variable}}%
+  \else
+    \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}%
+    {
+      \edef\dtl at textopt{right,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}
+      }%
+    }{%
+      \edef\dtl at textopt{left,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}
+             {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}}
+      }%
+    }
+    \edef\DTLendpt{\noexpand\pgfpointxy{\dtl at variable}{\@dtl at start.5}}%
+  \fi
+   \expandafter\pgftext\expandafter[\dtl at textopt]{%
+      \DTLdisplayupperbarlabel{\dtl at upperbarlabel}}
+  \def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}%
+    \DTLeverybarhook
+    \edef\@dtl at start{\number\@dtl at bar}%
+  }%
+  \ifDTLbarxaxis
+    \ifDTLverticalbars
+      \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+        (0,0) -- (\DTLbarchartwidth,0);
+    \else
+      \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+        (0,0) -- (0,\DTLbarchartwidth);
+    \fi
+  \fi
+  \ifDTLbaryaxis
+    \ifDTLverticalbars
+      \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+        (0,\DTLnegextent) -- (0,\DTLbarmax);
+    \else
+      \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+        (\DTLnegextent,0) -- (\DTLbarmax,0);
+    \fi
+  \fi
+  \ifx\dtlbar at yticlist\relax
+  \else
+    \@for\dtl at thistick:=\dtlbar at yticlist\do{%
+      \ifDTLverticalbars
+        \pgfpathmoveto{\pgfpointxy{0}{\dtl at thistick}}
+        \pgfpathlineto{
+          \pgfpointadd{\pgfpointxy{0}{\dtl at thistick}}
+                      {\pgfpoint{-\DTLticklength}{0pt}}}
+      \else
+        \pgfpathmoveto{\pgfpointxy{\dtl at thistick}{0}}
+        \pgfpathlineto{
+          \pgfpointadd{\pgfpointxy{\dtl at thistick}{0}}
+                      {\pgfpoint{0pt}{-\DTLticklength}}}
+      \fi
+      \pgfusepath{stroke}
+      \ifx\dtlbar at yticlabels\relax
+         \dtlround{\dtl at thislabel}{\dtl at thistick}
+                 {\c at DTLbarroundvar}%
+      \else
+         \dtl at chopfirst\dtlbar at yticlabels\dtl at thislabel\dtl at rest
+         \let\dtlbar at yticlabels=\dtl at rest
+      \fi
+      \ifDTLverticalbars
+        \edef\dtl at textopt{\DTLbarYticklabelalign,%
+          at={\noexpand\pgfpointadd
+               {\noexpand\pgfpointxy{0}{\dtl at thistick}}
+               {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}},
+          }}%
+      \else
+        \edef\dtl at textopt{\DTLbarYticklabelalign,
+          at={\noexpand\pgfpointadd
+               {\noexpand\pgfpointxy{\dtl at thistick}{0}}
+               {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}}
+          }}%
+      \fi
+      \expandafter\pgftext\expandafter[\dtl at textopt]{%
+        \DTLbardisplayYticklabel{\dtl at thislabel}}
+    }%
+  \fi
+  \ifx\dtlbar at ylabel\relax
+  \else
+    \addtolength{\dtl at yticlabelwidth}{\baselineskip}%
+    \setlength{\dtl at tmplength}{0.5\DTLbarchartlength}
+    \ifDTLverticalbars
+      \pgftext[bottom,center,at={\pgfpointadd
+          {\pgfpointxy{0}{\DTLnegextent}}%
+          {\pgfpoint{-\dtl at yticlabelwidth}{\dtl at tmplength}}},
+          rotate=90]{%
+         \dtlbar at ylabel}
+    \else
+      \pgftext[bottom,center,at={\pgfpointadd
+          {\pgfpointxy{\DTLnegextent}{0}}%
+          {\pgfpoint{\dtl at tmplength}{-\dtl at yticlabelwidth}}}]{%
+         \dtlbar at ylabel}
+    \fi
+  \fi
+  \DTLbaratendtikz
+  \end{tikzpicture}
+  }%
+}%
+}
+\newcommand*{\DTLmultibarchart}[4][\boolean{true}]{%
+{\let\dtlbar at variables=\relax
+\let\DTLbarmax=\relax
+\let\DTLnegextent=\relax
+\disable at keys{databar}{variable,upperbarlabel}%
+\setkeys{databar}{#2}%
+\ifx\dtlbar at variables\relax
+  \PackageError{databar}{\string\DTLmultibarchart\space missing variables setting}{}%
+\else
+  \ifx\DTLbarmax\relax
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \@for\DTLbarvariable:=\dtlbar at variables\do{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \ifx\DTLbarmax\relax
+          \let\DTLbarmax=\dtl at barvar
+        \else
+          \let\dtl at old=\DTLbarmax
+          \dtlmax{\DTLbarmax}{\dtl at old}{\dtl at barvar}%
+        \fi
+      }%
+    }%
+    \ifx\dtlbar at yticgap\relax
+    \else
+      \let\dtl at thistick=\dtlbar at yticgap%
+      \whiledo{\DTLisFPopenbetween{\dtl at thistick}{0}{\DTLbarmax}}{%
+        \dtladd{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+      }%
+      \let\DTLbarmax=\dtl at thistick
+    \fi
+  \fi
+  \ifx\DTLnegextent\relax
+    \def\DTLnegextent{0}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \@for\DTLbarvariable:=\dtlbar at variables\do{%
+        \expandafter\DTLconverttodecimal\expandafter
+          {\DTLbarvariable}{\dtl at barvar}%
+        \let\dtl at old=\DTLnegextent
+        \DTLmin{\DTLnegextent}{\dtl at old}{\dtl at barvar}%
+      }%
+    }%
+    \ifx\dtlbar at yticgap\relax
+    \else
+      \ifthenelse{\DTLisFPlt{\DTLnegextent}{0}}{%
+      \edef\dtl at thistick{0}%
+      \whiledo{\DTLisFPclosedbetween{\dtl at thistick}{\DTLnegextent}{0}}{%
+        \dtlsub{\dtl at thistick}{\dtl at thistick}{\dtlbar at yticgap}%
+      }%
+      \let\DTLnegextent=\dtl at thistick
+      }{}%
+    \fi
+  \fi
+  \@dtl at tmpcount=\DTLbarchartlength
+  \dtlsub{\dtl at extent}{\DTLbarmax}{\DTLnegextent}%
+  \dtldiv{\dtl at unit}{\number\@dtl at tmpcount}{\dtl at extent}%
+   \setlength{\dtl at yticlabelwidth}{0pt}%
+   \ifDTLbarytics
+     \ifx\dtlbar at yticlist\relax
+       \ifx\dtlbar at yticgap\relax
+         \@dtl at tmpcount=\DTLmintickgap
+         \divide\@dtl at tmpcount by 65536\relax
+         \dtldiv{\dtl at mingap}{\number\@dtl at tmpcount}{\dtl at unit}%
+         \dtl at constructticklist\DTLnegextent\DTLbarmax
+           \dtl at mingap\dtlbar at yticlist
+       \else
+         \dtl at constructticklistwithgapz
+           \DTLnegextent\DTLbarmax\dtlbar at yticlist\dtlbar at yticgap
+       \fi
+     \fi
+     \ifx\dtlbar at ylabel\relax
+     \else
+       \ifx\dtlbar at yticlabels\relax
+         \@for\dtl at thislabel:=\dtlbar at yticlist\do{%
+           \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                   {\c at DTLbarroundvar}%
+           \ifDTLverticalbars
+             \settowidth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+           \else
+             \settoheight{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \edef\@dtl at h{\the\dtl at tmplength}%
+             \settodepth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \addtolength{\dtl at tmplength}{\@dtl at h}%
+             \addtolength{\dtl at tmplength}{\baselineskip}%
+           \fi
+           \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+             \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+           \fi
+         }%
+       \else
+         \@for\dtl at thislabel:=\dtlbar at yticlabels\do{%
+           \ifDTLverticalbars
+             \settowidth{\dtl at tmplength}{%
+               \DTLbardisplayYticklabel{\dtl at thislabel}}%
+           \else
+             \settoheight{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \edef\@dtl at h{\the\dtl at tmplength}%
+             \settodepth{\dtl at tmplength}{%
+                \DTLbardisplayYticklabel{\dtl at thislabel}}%
+             \addtolength{\dtl at tmplength}{\@dtl at h}%
+             \addtolength{\dtl at tmplength}{\baselineskip}%
+           \fi
+           \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+             \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+           \fi
+         }%
+       \fi
+     \fi
+   \fi
+\dtl at xticlabelheight=0pt\relax
+\@dtl at tmpcount=0\relax
+\@for\dtl at thislabel:=\dtl at multibarlabels\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \settoheight{\dtl at tmplength}{\tikz\expandafter\pgftext\expandafter
+    [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl at thislabel}};}%
+  \edef\@dtl at h{\the\dtl at tmplength}%
+  \settodepth{\dtl at tmplength}{\tikz\expandafter\pgftext\expandafter
+    [\DTLbarXlabelalign]{\DTLdisplaylowerbarlabel{\dtl at thislabel}};}%
+  \addtolength{\dtl at tmplength}{\@dtl at h}%
+  \addtolength{\dtl at tmplength}{\baselineskip}%
+  \ifdim\dtl at tmplength>\dtl at xticlabelheight
+    \setlength{\dtl at xticlabelheight}{\dtl at tmplength}%
+  \fi
+}
+\@dtl at tmpcount=0\relax
+\@for\dtl at this:=\dtlbar at variables\do{%
+  \advance\@dtl at tmpcount by 1\relax
+}%
+\edef\DTLbargroupwidth{\number\@dtl at tmpcount}%
+\edef\dtl at n{\expandafter\number\csname dtlrows@#3\endcsname}
+\dtlmul{\dtl at tmpi}{\dtl at n}{\DTLbargroupwidth}
+\dtlsub{\dtl at tmpii}{\dtl at n}{1}%
+\dtlmul{\dtl at tmpii}{\dtl at tmpii}{\dtlbar at groupgap}%
+\dtladd{\DTLbarchartwidth}{\dtl at tmpi}{\dtl at tmpii}
+\begin{tikzpicture}
+\ifDTLverticalbars
+  \pgfsetyvec{\pgfpoint{0pt}{\dtl at unit sp}}%
+  \pgfsetxvec{\pgfpoint{\DTLbarwidth}{0pt}}%
+\else
+  \pgfsetxvec{\pgfpoint{\dtl at unit sp}{0pt}}%
+  \pgfsetyvec{\pgfpoint{0pt}{\DTLbarwidth}}%
+\fi
+\DTLbaratbegintikz
+\def\@dtl at start{0}%
+\@sDTLforeach[#1]{#3}{#4}{%
+\@dtl at barcount = 1\relax
+\let\dtl at multibar@labels=\dtl at multibarlabels
+\let\dtl at uppermultibar@labels=\dtl at uppermultibarlabels
+\dtlmul{\dtl at multimidpt}{\DTLbargroupwidth}{0.5}%
+\dtladd{\dtl at multimidpt}{\dtl at multimidpt}{\@dtl at start}%
+\@for\DTLbarvariable:=\dtlbar at variables\do{%
+\dtladd{\@dtl at endpt}{\@dtl at start}{1}%
+\expandafter\DTLconverttodecimal\expandafter
+  {\DTLbarvariable}{\dtl at variable}%
+\dtl at chopfirst\dtl at multibar@labels\dtl at thisbarlabel\dtl at rest
+\let\dtl at multibar@labels=\dtl at rest
+\dtl at chopfirst\dtl at uppermultibar@labels\dtl at thisupperbarlabel\dtl at rest
+\let\dtl at uppermultibar@labels=\dtl at rest
+\begin{scope}
+ \expandafter\color\expandafter{\DTLgetbarcolor{\@dtl at barcount}}%
+ \ifDTLverticalbars
+   \fill (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+      -- (\@dtl at endpt,\dtl at variable) -- (\@dtl at endpt,0) -- cycle;
+ \else
+   \fill (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+      -- (\dtl at variable,\@dtl at endpt) -- (0,\@dtl at endpt) -- cycle;
+ \fi
+\end{scope}
+\begin{scope}
+\ifdim\DTLbaroutlinewidth>0pt
+ \expandafter\color\expandafter{\DTLbaroutlinecolor}
+ \ifDTLverticalbars
+   \draw (\@dtl at start,0) -- (\@dtl at start,\dtl at variable)
+      -- (\@dtl at endpt,\dtl at variable) -- (\@dtl at endpt,0) -- cycle;
+ \else
+   \draw (0,\@dtl at start) -- (\dtl at variable,\@dtl at start)
+      -- (\dtl at variable,\@dtl at endpt) -- (0,\@dtl at endpt) -- cycle;
+ \fi
+\fi
+\end{scope}
+\dtladd{\@dtl at midpt}{\@dtl at start}{0.5}%
+\ifDTLverticalbars
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{0}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}},
+     \DTLbarXlabelalign
+  }%
+  \edef\DTLstartpt{\noexpand\pgfpointxy{\@dtl at midpt}{0}}%
+\else
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{0}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}},
+     \DTLbarXlabelalign
+  }%
+  \edef\DTLstartpt{\noexpand\pgfpointxy{0}{\@dtl at midpt}}%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+   \DTLdisplaylowermultibarlabel{\dtl at thisbarlabel}}
+\ifDTLverticalbars
+  \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}
+  {
+    \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\DTLbarlabeloffset}}}
+    }%
+  }{%
+    \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}
+           {\noexpand\pgfpoint{0pt}{\noexpand\DTLbarlabeloffset}}}
+    }%
+  }
+  \edef\DTLendpt{\noexpand\pgfpointxy{\@dtl at midpt}{\dtl at variable}}%
+\else
+  \expandafter\DTLifnumlt\expandafter{\DTLbarvariable}{0}
+  {
+    \edef\dtl at textopt{right,
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{-\noexpand\DTLbarlabeloffset}{0pt}}}
+    }%
+  }{%
+    \edef\dtl at textopt{left,
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}
+           {\noexpand\pgfpoint{\noexpand\DTLbarlabeloffset}{0pt}}}
+    }%
+  }
+  \edef\DTLendpt{\noexpand\pgfpointxy{\dtl at variable}{\@dtl at midpt}}%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+    \DTLdisplayuppermultibarlabel{\dtl at thisupperbarlabel}}
+\def\DTLmidpt{\pgfpointlineattime{0.5}{\DTLstartpt}{\DTLendpt}}%
+\DTLeverybarhook
+  \dtladd{\@dtl at start}{\@dtl at start}{1}%
+  \advance\@dtl at barcount by 1\relax
+}%
+\setlength{\dtl at tmplength}{\DTLbarlabeloffset}%
+\addtolength{\dtl at tmplength}{\dtl at xticlabelheight}%
+\ifDTLverticalbars
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{\dtl at multimidpt}{0}}
+           {\noexpand\pgfpoint{0pt}{-\noexpand\dtl at tmplength}}},
+     \DTLbarXlabelalign
+  }%
+\else
+  \edef\dtl at textopt{%
+      at={\noexpand\pgfpointadd
+           {\noexpand\pgfpointxy{0}{\dtl at multimidpt}}
+           {\noexpand\pgfpoint{-\noexpand\dtl at tmplength}{0pt}}},
+     \DTLbarXlabelalign
+  }%
+\fi
+ \expandafter\pgftext\expandafter[\dtl at textopt]{%
+   \DTLdisplaylowerbarlabel{\dtl at barlabel}}
+  \dtladd{\@dtl at start}{\@dtl at start}{\dtlbar at groupgap}%
+}
+\ifDTLbarxaxis
+  \ifDTLverticalbars
+    \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+      (0,0) -- (\DTLbarchartwidth,0);
+  \else
+    \expandafter\draw\expandafter[\DTLBarXAxisStyle]
+      (0,0) -- (0,\DTLbarchartwidth);
+  \fi
+\fi
+\ifDTLbaryaxis
+  \ifDTLverticalbars
+    \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+      (0,\DTLnegextent) -- (0,\DTLbarmax);
+  \else
+    \expandafter\draw\expandafter[\DTLBarYAxisStyle]
+      (\DTLnegextent,0) -- (\DTLbarmax,0);
+  \fi
+\fi
+\ifx\dtlbar at yticlist\relax
+\else
+  \@for\dtl at thistick:=\dtlbar at yticlist\do{%
+    \ifDTLverticalbars
+      \pgfpathmoveto{\pgfpointxy{0}{\dtl at thistick}}
+      \pgfpathlineto{
+        \pgfpointadd{\pgfpointxy{0}{\dtl at thistick}}
+                    {\pgfpoint{-\DTLticklength}{0pt}}}
+    \else
+      \pgfpathmoveto{\pgfpointxy{\dtl at thistick}{0}}
+      \pgfpathlineto{
+        \pgfpointadd{\pgfpointxy{\dtl at thistick}{0}}
+                    {\pgfpoint{0pt}{-\DTLticklength}}}
+    \fi
+    \pgfusepath{stroke}
+    \ifx\dtlbar at yticlabels\relax
+       \dtlround{\dtl at thislabel}{\dtl at thistick}
+               {\c at DTLbarroundvar}%
+    \else
+       \dtl at chopfirst\dtlbar at yticlabels\dtl at thislabel\dtl at rest
+       \let\dtlbar at yticlabels=\dtl at rest
+    \fi
+    \ifDTLverticalbars
+      \edef\dtl at textopt{\DTLbarYticklabelalign,%
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{0}{\dtl at thistick}}
+             {\noexpand\pgfpoint{-\noexpand\DTLticklabeloffset}{0pt}},
+        }}%
+    \else
+      \edef\dtl at textopt{\DTLbarYticklabelalign,
+        at={\noexpand\pgfpointadd
+             {\noexpand\pgfpointxy{\dtl at thistick}{0}}
+             {\noexpand\pgfpoint{0pt}{-\noexpand\DTLticklabeloffset}}
+        }}%
+    \fi
+    \expandafter\pgftext\expandafter[\dtl at textopt]{%
+      \DTLbardisplayYticklabel{\dtl at thislabel}}
+  }%
+\fi
+\ifx\dtlbar at ylabel\relax
+\else
+  \addtolength{\dtl at yticlabelwidth}{\baselineskip}%
+  \setlength{\dtl at tmplength}{0.5\DTLbarchartlength}
+  \ifDTLverticalbars
+    \pgftext[bottom,center,at={\pgfpointadd
+        {\pgfpointxy{0}{\DTLnegextent}}%
+        {\pgfpoint{-\dtl at yticlabelwidth}{\dtl at tmplength}}},
+        rotate=90]{%
+       \dtlbar at ylabel}
+  \else
+    \pgftext[bottom,center,at={\pgfpointadd
+        {\pgfpointxy{\DTLnegextent}{0}}%
+        {\pgfpoint{\dtl at tmplength}{-\dtl at yticlabelwidth}}}]{%
+       \dtlbar at ylabel}
+  \fi
+\fi
+\DTLbaratendtikz
+\end{tikzpicture}
+\fi
+}}
+\endinput
+%%
+%% End of file `databar-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/databar-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/databar.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/databar.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/databar.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{databar-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{databar}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{databar}[2025/03/05 v3.0.1 (NLCT)]
 \newif\ifDTLcolorbarchart
 \DTLcolorbarcharttrue
 \newif\ifDTLverticalbars

Added: trunk/Master/texmf-dist/tex/latex/datatool/databib-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/databib-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/databib-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,1733 @@
+%%
+%% This is file `databib-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `databib-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{databib}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{datatool}[=v2.32]
+\newcommand*{\dtlbib at style}{plain}
+\define at choicekey{databib.sty}{style}{plain,abbrv,alpha}{%
+\def\dtlbib at style{#1}}
+\ProcessOptionsX
+\newcommand*{\DTLloadbbl}[3][\jobname.bbl]{%
+\bibliographystyle{databib}%
+\if at filesw
+ \immediate\write\@auxout{\string\bibdata{#3}}%
+\fi
+\DTLnewdb{#2}%
+\edef\DTLBIBdbname{#2}%
+\@input@{#1}}
+\newcommand*{\DTLnewbibrow}{\@DTLnewrow{\DTLBIBdbname}}
+\newcommand*{\DTLnewbibitem}[2]{%
+  \@DTLnewdbentry{\DTLBIBdbname}{#1}{#2}}
+\providecommand*{\andname}{and}
+\providecommand*{\ofname}{of}
+\providecommand*{\inname}{in}
+\providecommand*{\etalname}{et al.}
+\providecommand*{\editorname}{editor}
+\providecommand*{\editorsname}{editors}
+\providecommand*{\volumename}{volume}
+\providecommand*{\numbername}{number}
+\providecommand*{\pagesname}{pages}
+\providecommand*{\pagename}{page}
+\providecommand*{\editionname}{edition}
+\providecommand*{\techreportname}{Technical report}
+\providecommand*{\mscthesisname}{Master's thesis}
+\providecommand*{\phdthesisname}{PhD thesis}
+\newcommand*{\DTLbibliography}[2][\boolean{true}]{%
+  \begin{DTLthebibliography}[#1]{#2}%
+  \DTLforeachbibentry[#1]{#2}{%
+    \DTLbibitem \DTLformatbibentry \DTLendbibitem
+  }%
+  \end{DTLthebibliography}%
+}
+\newcommand*{\DTLformatbibentry}{%
+  \@ifundefined{DTLformat\DBIBentrytype}%
+  {%
+    \PackageError{databib}{Don't know how to format bibliography
+    entries of type `\DBIBentrytype'}{}%
+  }%
+  {%
+    \dtl at message{[\DBIBcitekey]}%
+    \DTLstartsentencefalse\DTLmidsentencefalse\DTLperiodfalse
+     \csname DTLformat\DBIBentrytype\endcsname
+  }%
+}
+\newcommand*{\gDTLformatbibentry}{%
+  \@ifundefined{DTLformat\DBIBentrytype}%
+  {%
+    \PackageError{databib}{Don't know how to format bibliography
+    entries of type `\DBIBentrytype'}{}%
+  }%
+  {%
+    \dtl at message{[\DBIBcitekey]}%
+    \global\DTLstartsentencefalse
+    \global\DTLmidsentencefalse
+    \global\DTLperiodfalse
+     \csname DTLformat\DBIBentrytype\endcsname
+  }%
+}
+\newcommand*{\DTLformatthisbibentry}[2]{%
+  \edef\DBIBname{#1}%
+  \edef\DBIBcitekey{#2}%
+  \edtlgetrowforvalue{#1}{\dtlcolumnindex{#1}{CiteKey}}{\DBIBcitekey}%
+  \dtl at gathervalues{#1}{\dtlcurrentrow}%
+  \letcs{\DBIBentrytype}{@dtl at key@EntryType}%
+  \DTLformatbibentry
+}
+\newcommand*{\DTLendbibitem}{}
+\newlength\dtl at widest
+\newcommand*{\DTLcomputewidestbibentry}[4]{%
+\dtl at widest=0pt\relax
+\let#4=\@empty
+\DTLforeachbibentry[#1]{#2}{%
+\settowidth{\dtl at tmplength}{#3}%
+\ifdim\dtl at tmplength>\dtl at widest\relax
+ \dtl at widest=\dtl at tmplength
+ \protected at edef#4{#3}%
+\fi
+}%
+}
+\newcommand*{\DTLforeachbibentry}{%
+\@ifstar\@sDTLforeachbibentry\@DTLforeachbibentry}
+\newcommand*{\@DTLforeachbibentry}[3][\boolean{true}]{%
+  \edef\DBIBname{#2}%
+  \setcounter{DTLbibrow}{0}%
+  \@DTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}{\refstepcounter{DTLbibrow}#3}{}%
+  }%
+}
+\newcommand*{\@sDTLforeachbibentry}[3][\boolean{true}]{%
+  \edef\DBIBname{#2}%
+  \setcounter{DTLbibrow}{0}%
+  \@sDTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}{\refstepcounter{DTLbibrow}#3}{}%
+  }%
+}
+\newcommand{\gDTLforeachbibentry}{%
+\@ifstar\@sgDTLforeachbibentry\@gDTLforeachbibentry}
+\newcommand*{\@gDTLforeachbibentry}[3][\boolean{true}]{%
+  \xdef\DBIBname{#2}%
+  \global\c at DTLbibrow = 0\relax
+  \@DTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at g@gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}%
+    {%
+      \refstepcounter{DTLbibrow}%
+      \global\c at DTLbibrow=\c at DTLbibrow
+      #3%
+    }%
+    {}%
+  }%
+}
+\newcommand*{\@sgDTLforeachbibentry}[3][\boolean{true}]{%
+  \xdef\DBIBname{#2}%
+  \global\c at DTLbibrow = 0\relax
+  \@sDTLforeach{#2}{\DBIBcitekey=CiteKey,\DBIBentrytype=EntryType}%
+  {%
+    \dtl at g@gathervalues{#2}{\dtlcurrentrow}%
+    \ifthenelse{#1}%
+    {%
+      \refstepcounter{DTLbibrow}%
+      \global\c at DTLbibrow=\c at DTLbibrow
+      #3%
+    }%
+    {}%
+  }%
+}
+\newcounter{DTLbibrow}
+\def\theHDTLbibrow{\theHDTLrow.bib.\arabic{DTLbibrow}}%
+\newcommand*{\DTLbibfield}[1]{\csname @dtl at key@#1\endcsname}
+\newcommand*{\DTLbibfieldlet}[2]{%
+  \letcs{#1}{@dtl at key@#2}%
+}
+\newcommand*{\DTLifbibfieldexists}[3]{%
+\@ifundefined{@dtl at key@#1}{#3}{%
+\expandafter\DTLifnull\csname @dtl at key@#1\endcsname
+{#3}{#2}}}
+\newcommand*{\DTLifanybibfieldexists}[3]{%
+\@for\dtl at thisfield:=#1\do{%
+\@ifundefined{@dtl at key@\dtl at thisfield}{}{%
+\expandafter\DTLifnull\csname @dtl at key@\dtl at thisfield\endcsname
+{}{%
+\@endfortrue}}}%
+\if at endfor
+ #2%
+\else
+ #3%
+\fi
+\@endforfalse
+}
+\newif\ifDTLperiod
+\newcommand*{\DTLcheckendsperiod}[1]{%
+\dtl at checkendsperiod#1\@nil\relax}
+\def\dtl at checkendsperiod#1#2{%
+\def\@dtl at argi{#1}\def\@dtl at argii{#2}%
+\def\@dtl at period{.}%
+\ifx\@dtl at argi\@nnil
+  \global\DTLperiodfalse
+  \let\@dtl at donext=\relax
+\else
+  \ifx\@dtl at argii\@nnil
+    \ifx\@dtl at argi\@dtl at period
+      \global\DTLperiodtrue
+    \else
+      \global\DTLperiodfalse
+    \fi
+    \let\@dtl at donext=\@gobble
+  \else
+    \let\@dtl at donext=\dtl at checkendsperiod
+  \fi
+\fi
+\@dtl at donext{#2}%
+}
+\newcommand*{\DTLcheckbibfieldendsperiod}[1]{%
+\protected at edef\@dtl at tmp{\DTLbibfield{#1}}%
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}}
+\newif\ifDTLmidsentence
+\newif\ifDTLstartsentence
+\newcommand*{\DTLaddperiod}{\DTLmidsentencefalse\DTLperiodfalse
+\DTLstartsentencetrue
+\ifDTLperiod\else.\fi}
+\newcommand*{\DTLaddcomma}{, \DTLmidsentencetrue
+\DTLperiodfalse\DTLstartsentencefalse}
+\newcommand*{\DTLstartsentencespace}{%
+\ifDTLstartsentence\spacefactor=\sfcode`\.\relax\space
+\fi\DTLstartsentencefalse}
+\newcommand*{\DTLtwoand}{\ \andname\ }
+\newcommand*{\DTLandlast}{, \andname\ }
+\newcommand*{\DTLandnotlast}{, }
+\newcount\@dtl at authorcount
+\newcounter{DTLmaxauthors}
+\setcounter{DTLmaxauthors}{10}
+\newcommand*{\DTLformatauthorlist}{%
+\DTLifbibfieldexists{Author}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Author\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\@dtl at tmpcount=0\relax
+\ifnum\@dtl at authorcount>\c at DTLmaxauthors
+{%
+  \@for\@dtl at author:=\@dtl at key@Author\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformatauthor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount>\c at DTLmaxauthors
+      \DTLandnotlast \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}%
+      \@endfortrue
+    \else
+      \DTLandnotlast \expandafter\DTLformatauthor\@dtl at author
+    \fi
+  \fi
+  }%
+}%
+\else
+  \@for\@dtl at author:=\@dtl at key@Author\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformatauthor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount=\@dtl at authorcount
+      \ifnum\@dtl at authorcount=2\relax
+        \DTLtwoand
+      \else
+        \DTLandlast
+      \fi
+      \expandafter\DTLformatauthor\@dtl at author
+    \else
+      \DTLandnotlast \expandafter\DTLformatauthor\@dtl at author
+    \fi
+  \fi
+  }%
+\fi
+}{}%
+}
+\newcounter{DTLmaxeditors}
+\setcounter{DTLmaxeditors}{10}
+\newcommand*{\DTLformateditorlist}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\@dtl at tmpcount=0\relax
+\ifnum\@dtl at authorcount>\c at DTLmaxeditors
+{%
+  \@for\@dtl at author:=\@dtl at key@Editor\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformateditor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount>\c at DTLmaxeditors
+      \DTLandnotlast \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}%
+      \@endfortrue
+    \else
+      \DTLandnotlast \expandafter\DTLformateditor\@dtl at author
+    \fi
+  \fi
+  }%
+}%
+\else
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifnum\@dtl at tmpcount=1\relax
+   \expandafter\DTLformateditor\@dtl at author
+  \else
+    \ifnum\@dtl at tmpcount=\@dtl at authorcount
+      \ifnum\@dtl at authorcount=2\relax
+        \DTLtwoand
+      \else
+        \DTLandlast
+      \fi
+      \expandafter\DTLformateditor\@dtl at author
+    \else
+      \DTLandnotlast \expandafter\DTLformateditor\@dtl at author
+    \fi
+  \fi
+  }%
+\fi
+,
+\ifnum\@dtl at authorcount=1\relax
+  \editorname
+  \expandafter\DTLcheckendsperiod\expandafter{\editorname}%
+\else
+  \editorsname
+  \expandafter\DTLcheckendsperiod\expandafter{\editorsname}%
+\fi
+}{}%
+}
+\newcommand*{\DTLformatsurnameonly}[4]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty\else#1~\fi
+#2%
+\def\@dtl at tmp{#3}%
+\ifx\@dtl at tmp\@empty
+  \DTLcheckendsperiod{#2}%
+\else
+  , #3%
+  \DTLcheckendsperiod{#3}%
+\fi
+}
+\newcommand*{\DTLformatforenames}[1]{%
+\DTLstartsentencespace
+#1%
+\DTLcheckendsperiod{#1}}
+\newcommand*{\DTLformatabbrvforenames}[1]{%
+\DTLstartsentencespace
+\DTLstoreinitials{#1}{\@dtl at tmp}\@dtl at tmp
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}}
+\newcommand*{\DTLformatvon}[1]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty
+\else
+  #1~%
+\fi
+}
+\newcommand*{\DTLformatsurname}[1]{%
+\DTLstartsentencespace
+#1\DTLcheckendsperiod{#1}}
+\newcommand*{\DTLformatjr}[1]{%
+\DTLstartsentencespace
+\def\@dtl at tmp{#1}%
+\ifx\@dtl at tmp\@empty
+\else
+  , #1\DTLcheckendsperiod{#1}%
+\fi
+}
+\newcommand*{\DTLformatcrossrefeditor}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLstartsentencespace
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\advance\@dtl at authorcount by 1\relax}%
+{\@dtl at tmpcount=0\relax
+\@for\@dtl at author:=\@dtl at key@Editor\do{%
+\ifnum\@dtl at authorcount=1\relax
+ \expandafter\DTLformatsurnameonly\@dtl at author
+\else
+ \advance\@dtl at tmpcount by 1\relax
+ \ifnum\@dtl at tmpcount=1\relax
+    \expandafter\DTLformatsurnameonly\@dtl at author
+  \else
+    \ifnum\@dtl at authorcount=2\relax
+      \ \andname\ \expandafter\DTLformatsurnameonly\@dtl at author
+    \else
+      \ \etalname
+      \expandafter\DTLcheckendsperiod\expandafter{\etalname}
+    \fi
+    \@endfortrue
+  \fi
+\fi
+}}%
+}{}%
+}
+\newcommand*{\DTLformatvolnumpages}{%
+\DTLifbibfieldexists{Volume}{%
+\DTLstartsentencespace
+\DTLbibfield{Volume}\DTLperiodfalse}{}%
+\DTLifbibfieldexists{Number}{%
+\DTLstartsentencespace
+(\DTLbibfield{Number})\DTLperiodfalse}{}%
+\DTLifbibfieldexists{Pages}{%
+\DTLifanybibfieldexists{Volume,Number}{:}{%
+\DTLstartsentencespace
+\protected at edef\@dtl at pages{0\DTLbibfield{Pages}}%
+\DTLifnumerical{\@dtl at pages}{\pagename}{\pagesname}~}%
+\DTLbibfield{Pages}\DTLperiodfalse}{}%
+}
+\newcommand*{\DTLformatbvolume}{%
+\DTLifbibfieldexists{Volume}{%
+\ifDTLmidsentence
+  \volumename
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\volumename
+\fi
+~\DTLbibfield{Volume}%
+\DTLifbibfieldexists{Series}{\ \ofname\
+{\em\DTLbibfield{Series}}\DTLcheckbibfieldendsperiod{Series}}{%
+\DTLcheckbibfieldendsperiod{Volume}}%
+}{}}
+\newcommand*{\DTLformatchapterpages}{%
+\DTLifbibfieldexists{Chapter}{%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}}{%
+\DTLstartsentencespace
+\chaptername}~\DTLbibfield{Chapter}%
+\DTLifbibfieldexists{Pages}{\DTLaddcomma}{%
+\DTLcheckbibfieldendsperiod{Chapter}}}{}%
+\DTLstartsentencespace
+\DTLformatpages}
+\newcommand*{\DTLformatpages}{%
+\DTLifbibfieldexists{Pages}{%
+\DTLstartsentencespace
+\protected at edef\@dtl at pages{0\DTLbibfield{Pages}}%
+\DTLifnumerical{\@dtl at pages}{\pagename}{\pagesname}~%
+\DTLbibfield{Pages}\DTLcheckbibfieldendsperiod{Pages}}{}%
+}
+\newcommand*{\DTLformatnumberseries}{%
+\DTLifbibfieldexists{Volume}{}{%
+\DTLifbibfieldexists{Number}{%
+\ifDTLmidsentence
+  \numbername
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\numbername
+\fi~\DTLbibfield{Number}%
+\DTLifbibfieldexists{Series}{\ \inname\ \DTLbibfield{Series}%
+\DTLcheckbibfieldendsperiod{Series}}{%
+\DTLcheckbibfieldendsperiod{Number}}%
+}{%
+\DTLifbibfieldexists{Series}{%
+\DTLstartsentencespace
+\DTLbibfield{Series}%
+\DTLcheckbibfieldendsperiod{Series}}{}}%
+}%
+}
+\newcommand*{\DTLformatbookcrossref}{%
+\DTLifbibfieldexists{Volume}{%
+\ifDTLmidsentence
+  \volumename
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\volumename
+\fi
+~\DTLbibfield{Volume}\ \ofname\
+}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ }%
+\DTLifbibfieldexists{Editor}{\DTLformatcrossrefeditor}{%
+\DTLifbibfieldexists{Key}{%
+\DTLbibfield{Key}}{%
+\DTLifbibfieldexists{Series}{%
+{\em\DTLbibfield{Series}}}{}%
+}%
+}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newcommand*{\DTLformatincollproccrossref}{%
+\DTLifbibfieldexists{Editor}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\
+\DTLformatcrossrefeditor
+}{%
+\DTLifbibfieldexists{Key}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ \DTLbibfield{Key}%
+}{%
+\DTLifbibfieldexists{BookTitle}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\ \DTLformatbooktitle{\DTLbibfield{BookTitle}}}{}%
+}}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newcommand*{\DTLformatinedbooktitle}{%
+\DTLifbibfieldexists{BookTitle}{%
+\ifDTLmidsentence
+  \inname
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\inname
+\fi\
+\DTLifbibfieldexists{Editor}{%
+\DTLformateditorlist\DTLaddcomma \DTLformatbooktitle{\DTLbibfield{BookTitle}}%
+\DTLcheckbibfieldendsperiod{BookTitle}%
+}{\DTLformatbooktitle{\DTLbibfield{BookTitle}}%
+\DTLcheckbibfieldendsperiod{BookTitle}%
+}}{}}
+\newcommand*{\DTLformatdate}{%
+\DTLifbibfieldexists{Year}{%
+\DTLifbibfieldexists{Month}{%
+\protected at edef\@dtl at tmp{\DTLbibfield{Month}}%
+\ifDTLmidsentence
+  \@dtl at tmp
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\@dtl at tmp
+\fi\
+\DTLmidsentencefalse}{}%
+\DTLstartsentencespace
+\DTLbibfield{Year}}{%
+\DTLifbibfieldexists{Month}{%
+\protected at edef\@dtl at tmp{\DTLbibfield{Month}}%
+\ifDTLmidsentence
+  \@dtl at tmp
+\else
+  \DTLstartsentencespace
+  \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\DTLcheckbibfieldendsperiod{Month}%
+}{}}}
+\newcommand*{\DTLformatarticlecrossref}{%
+\DTLifbibfieldexists{Key}{%
+\ifDTLmidsentence
+ \inname
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\inname
+\fi
+\ {\em\DTLbibfield{Key}}}{%
+\DTLifbibfieldexists{Journal}{%
+\ifDTLmidsentence
+ \inname
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\inname
+\fi
+\ {\em\DTLbibfield{Journal}}}{}}%
+~\DTLpcite{\DTLbibfield{CrossRef}}%
+}
+\newrobustcmd*{\DTLpcite}[1]{%
+  \protected at edef\@dtl at tmp{#1}%
+  \cite{\@dtl at tmp}%
+}
+\newcommand*{\DTLbibfieldexists}[1]{%
+\TE at throw\noexpand\dtl at testbibfieldexists{#1}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldexists}[1]{%
+\DTLifbibfieldexists{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLbibfieldiseq}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldiseq{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldiseq}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=0\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldislt}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldislt{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldislt}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=-1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisle}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisle{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisle}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount<1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisgt}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisgt{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisgt}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount=1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldisge}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldisge{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldisge}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+ =\csname @dtl at key@#1\endcsname
+\expandafter\toks@\expandafter{\@dtl at tmp}%
+\@dtl at toks{#2}%
+\edef\@dtl at docompare{\noexpand\dtlcompare{\noexpand\@dtl at tmpcount}%
+{\the\toks@}{\the\@dtl at toks}}%
+\@dtl at docompare
+\ifnum\@dtl at tmpcount>-1\relax
+ \@dtl at conditiontrue
+\else
+ \@dtl at conditionfalse
+\fi
+}{%
+\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLbibfieldcontains}[2]{%
+\TE at throw\noexpand\dtl at testbibfieldcontains{#1}{#2}%
+\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testbibfieldcontains}[2]{%
+\DTLifbibfieldexists{#1}{%
+\expandafter\let\expandafter\@dtl at tmp\expandafter
+  =\csname @dtl at key@#1\endcsname
+\expandafter\dtl at testifsubstring\expandafter{\@dtl at tmp}{#2}%
+}{\@dtl at conditionfalse}}
+\newenvironment{DTLthebibliography}[2][\boolean{true}]{%
+\@dtl at tmpcount=0\relax
+\@sDTLforeach[#1]{#2}{}{\advance\@dtl at tmpcount by 1\relax}%
+\begin{thebibliography}{\number\@dtl at tmpcount}
+}{\end{thebibliography}}
+\newcommand*{\DTLmonthname}[1]{%
+\dtl at monthname{#1}}
+\newcommand*{\dtl at monthname}[1]{%
+\ifcase#1%
+\or January%
+\or February%
+\or March%
+\or April%
+\or May%
+\or June%
+\or July%
+\or August%
+\or September%
+\or October%
+\or November%
+\or December%
+\fi}
+\newcommand*{\dtl at abbrvmonthname}[1]{%
+\ifcase#1%
+\or Jan.%
+\or Feb.%
+\or Mar.%
+\or Apr.%
+\or May%
+\or June%
+\or July%
+\or Aug.%
+\or Sept.%
+\or Oct.%
+\or Nov.%
+\or Dec.%
+\fi}
+\newcommand*{\DTLbibitem}{\bibitem{\DBIBcitekey}}
+\newcommand*{\DTLmbibitem}[1]{\bibitem{#1@\DBIBcitekey}}
+\newcommand*{\DTLcustombibitem}[3]{%
+  #1%
+  \if at filesw
+    \immediate\write\@auxout{\string\bibcite{#3}{#2}}%
+  \fi
+  \ignorespaces
+}
+\newcommand*{\DTLformatauthor}[4]{%
+\DTLformatforenames{#4}
+\DTLformatvon{#1}%
+\DTLformatsurname{#2}%
+\DTLformatjr{#3}}
+\newcommand*{\DTLformateditor}[4]{%
+\DTLformatforenames{#4}
+\DTLformatvon{#1}%
+\DTLformatsurname{#2}%
+\DTLformatjr{#3}}
+\newcommand*{\DTLformatedition}[1]{#1 \editionname}
+\newcommand{\DTLformatarticle}{}
+\newcommand{\DTLformatbook}{}
+\newcommand{\DTLformatbooklet}{}
+\newcommand{\DTLformatinbook}{}
+\newcommand{\DTLformatincollection}{}
+\newcommand{\DTLformatinproceedings}{}
+\newcommand{\DTLformatmanual}{}
+\newcommand{\DTLformatmastersthesis}{}
+\newcommand{\DTLformatmisc}{}
+\newcommand{\DTLformatphdthesis}{}
+\newcommand{\DTLformatproceedings}{}
+\newcommand{\DTLformattechreport}{}
+\newcommand{\DTLformatunpublished}{}
+\newcommand*{\DTLacmcs}{ACM Computing Surveys}
+\newcommand*{\DTLacta}{Acta Informatica}
+\newcommand*{\DTLcacm}{Communications of the ACM}
+\newcommand*{\DTLibmjrd}{IBM Journal of Research and Development}
+\newcommand*{\DTLibmsj}{IBM Systems Journal}
+\newcommand*{\DTLieeese}{IEEE Transactions on Software Engineering}
+\newcommand*{\DTLieeetc}{IEEE Transactions on Computers}
+\newcommand*{\DTLieeetcad}{IEEE Transactions on Computer-Aided Design
+of Integrated Circuits}
+\newcommand*{\DTLipl}{Information Processing Letters}
+\newcommand*{\DTLjacm}{Journal of the ACM}
+\newcommand*{\DTLjcss}{Journal of Computer and System Sciences}
+\newcommand*{\DTLscp}{Science of Computer Programming}
+\newcommand*{\DTLsicomp}{SIAM Journal on Computing}
+\newcommand*{\DTLtocs}{ACM Transactions on Computer Systems}
+\newcommand*{\DTLtods}{ACM Transactions on Database Systems}
+\newcommand*{\DTLtog}{ACM Transactions on Graphics}
+\newcommand*{\DTLtoms}{ACM Transactions on Mathematical Software}
+\newcommand*{\DTLtoois}{ACM Transactions on Office Information
+Systems}
+\newcommand*{\DTLtoplas}{ACM Transactions on Programming Languages
+and Systems}
+\newcommand*{\DTLtcs}{Theoretical Computer Science}
+\newcommand{\dtlbst at plain}{%
+  \renewenvironment{DTLthebibliography}[2][\boolean{true}]{%
+  \@dtl at tmpcount=0\relax
+  \@sDTLforeach[##1]{##2}{}{\advance\@dtl at tmpcount by 1\relax}%
+  \begin{thebibliography}{\number\@dtl at tmpcount}%
+  }{\end{thebibliography}}%
+  \renewcommand*{\DTLbibitem}{\bibitem{\DBIBcitekey}}%
+  \renewcommand*{\DTLmbibitem}[1]{\bibitem{##1@\DBIBcitekey}}%
+  \renewcommand*{\DTLformatauthor}[4]{%
+  \DTLformatforenames{##4}
+  \DTLformatvon{##1}%
+  \DTLformatsurname{##2}%
+  \DTLformatjr{##3}}
+  \renewcommand*{\DTLformateditor}[4]{%
+  \DTLformatforenames{##4}
+  \DTLformatvon{##1}%
+  \DTLformatsurname{##2}%
+  \DTLformatjr{##3}}
+  \renewcommand*{\DTLformatedition}[1]{##1 \editionname}%
+  \let\DTLmonthname\dtl at monthname
+  \renewcommand*{\DTLacmcs}{ACM Computing Surveys}
+  \renewcommand*{\DTLacta}{Acta Informatica}
+  \renewcommand*{\DTLcacm}{Communications of the ACM}
+  \renewcommand*{\DTLibmjrd}{IBM Journal of Research and Development}
+  \renewcommand*{\DTLibmsj}{IBM Systems Journal}
+  \renewcommand*{\DTLieeese}{IEEE Transactions on Software Engineering}
+  \renewcommand*{\DTLieeetc}{IEEE Transactions on Computers}
+  \renewcommand*{\DTLieeetcad}{IEEE Transactions on Computer-Aided Design
+of Integrated Circuits}
+  \renewcommand*{\DTLipl}{Information Processing Letters}
+  \renewcommand*{\DTLjacm}{Journal of the ACM}
+  \renewcommand*{\DTLjcss}{Journal of Computer and System Sciences}
+  \renewcommand*{\DTLscp}{Science of Computer Programming}
+  \renewcommand*{\DTLsicomp}{SIAM Journal on Computing}
+  \renewcommand*{\DTLtocs}{ACM Transactions on Computer Systems}
+  \renewcommand*{\DTLtods}{ACM Transactions on Database Systems}
+  \renewcommand*{\DTLtog}{ACM Transactions on Graphics}
+  \renewcommand*{\DTLtoms}{ACM Transactions on Mathematical Software}
+  \renewcommand*{\DTLtoois}{ACM Transactions on Office Information
+Systems}
+  \renewcommand*{\DTLtoplas}{ACM Transactions on Programming Languages
+and Systems}
+  \renewcommand*{\DTLtcs}{Theoretical Computer Science}
+  \renewcommand*{\DTLformatarticle}{%
+    \DTLformatauthorlist
+    \DTLifbibfieldexists{Author}{\DTLaddperiod}{}%
+    \DTLifbibfieldexists{Title}{%
+    \DTLstartsentencespace\DTLbibfield{Title}%
+    \DTLcheckbibfieldendsperiod{Title}%
+    \DTLaddperiod}{}%
+    \DTLifbibfieldexists{CrossRef}{%
+    \DTLformatarticlecrossref
+    \DTLifbibfieldexists{Pages}{\DTLaddcomma}{}%
+    \DTLformatpages
+    \DTLaddperiod
+    }{% no cross ref field
+    \DTLifbibfieldexists{Journal}{\DTLstartsentencespace
+    {\em\DTLbibfield{Journal}}%
+    \DTLcheckbibfieldendsperiod{Journal}%
+    \DTLifanybibfieldexists{Number,Volume,Pages,Month,Year}{%
+    \DTLaddcomma}{\DTLaddperiod}}{}%
+    \DTLformatvolnumpages
+    \DTLifanybibfieldexists{Volume,Number,Pages}{%
+    \DTLifanybibfieldexists{Year,Month}{\DTLaddcomma}{%
+    \DTLaddperiod}%
+    \DTLmidsentencefalse}{}%
+    \DTLformatdate
+    \DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+    }%
+    \DTLifbibfieldexists{Note}{\DTLstartsentencespace\DTLbibfield{Note}%
+    \DTLcheckbibfieldendsperiod{Note}%
+    \DTLaddperiod}{}%
+  }
+\renewcommand*{\DTLformatbook}{%
+  \DTLifbibfieldexists{Author}%
+  {%
+    \DTLformatauthorlist\DTLaddperiod
+  }%
+  {%
+    \DTLformateditorlist
+    \DTLifbibfieldexists{Editor}%
+    {%
+      \DTLaddperiod
+    }%
+    {}%
+  }%
+  \DTLifbibfieldexists{Title}%
+  {%
+    \DTLstartsentencespace
+    \DTLformatbooktitle{\DTLbibfield{Title}}%
+    \DTLcheckbibfieldendsperiod{Title}%
+  }%
+  {}%
+  \DTLifbibfieldexists{CrossRef}%
+  {%
+    \DTLifbibfieldexists{Title}{\DTLaddperiod}{}%
+    \DTLformatbookcrossref
+    \DTLifanybibfieldexists{Edition,Month,Year}%
+    {\DTLaddcomma}%
+    {\DTLaddperiod}%
+  }%
+  {%
+    \DTLifbibfieldexists{Title}%
+    {%
+      \DTLifbibfieldexists{Volume}{\DTLaddcomma}{\DTLaddperiod}%
+    }%
+    {}%
+    \DTLformatbvolume
+    \DTLformatnumberseries
+    \DTLifanybibfieldexists{Number,Series,Volume}{\DTLaddperiod}{}%
+    \DTLifbibfieldexists{Publisher}%
+    {%
+      \DTLstartsentencespace
+      \DTLbibfield{Publisher}%
+      \DTLcheckbibfieldendsperiod{Publisher}%
+      \DTLifbibfieldexists{Address}%
+      {\DTLaddcomma}%
+      {%
+        \DTLifanybibfieldexists{Month,Year}%
+        {\DTLaddcomma}%
+        {\DTLaddperiod}%
+      }%
+    }%
+    {}%
+    \DTLifbibfieldexists{Address}%
+    {%
+      \DTLstartsentencespace
+      \DTLbibfield{Address}%
+      \DTLcheckbibfieldendsperiod{Address}%
+      \DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+    }%
+    {}%
+  }%
+  \DTLifbibfieldexists{Edition}%
+  {%
+    \protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+    \ifDTLmidsentence
+     \@dtl at tmp
+    \else
+     \DTLstartsentencespace\expandafter\MakeUppercase\@dtl at tmp
+    \fi
+    \expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+    \DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+  }%
+  {}%
+  \DTLformatdate
+  \DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+  \DTLifbibfieldexists{Note}%
+  {%
+    \DTLstartsentencespace
+    \DTLbibfield{Note}%
+    \DTLcheckbibfieldendsperiod{Note}%
+    \DTLaddperiod
+  }%
+  {}%
+}%
+\renewcommand*{\DTLformatbooklet}{%
+\DTLifbibfieldexists{Author}{%
+\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{HowPublished}{%
+\DTLstartsentencespace\DTLbibfield{HowPublished}%
+\DTLcheckbibfieldendsperiod{HowPublished}%
+\DTLifanybibfieldexists{Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Year,Month}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{\DTLstartsentencespace\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatinbook}{%
+\DTLifbibfieldexists{Author}{%
+\DTLformatauthorlist\DTLaddperiod}{%
+\DTLifbibfieldexists{Editor}{\DTLformateditorlist\DTLaddperiod}{}}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLifbibfieldexists{Title}{%
+\DTLifbibfieldexists{Chapter}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLformatbookcrossref
+}{% no cross ref
+\DTLifbibfieldexists{Title}{%
+\DTLifanybibfieldexists{Chapter,Volume}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifanybibfieldexists{Volume,Series}{%
+\DTLifanybibfieldexists{Chapter,Pages}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifbibfieldexists{Address}{\DTLaddcomma}{}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}}{}%
+}%
+\DTLifanybibfieldexists{Edition,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatincollection}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLformatincollproccrossref
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddcomma}{}%
+\DTLformatchapterpages\DTLaddperiod
+}{% no cross ref entry
+\DTLformatinedbooktitle
+\DTLifbibfieldexists{BookTitle}{%
+\DTLifanybibfieldexists{Volume,Series,Chapter,Pages,Number}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Series,Chapter,Pages}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifanybibfieldexists{Number,Series}{%
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatchapterpages
+\DTLifanybibfieldexists{Chapter,Pages}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}%
+}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatinproceedings}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{CrossRef}{%
+\DTLformatincollproccrossref
+\DTLifbibfieldexists{Pages}{\DTLaddcomma}{%
+\DTLaddperiod}%
+\DTLformatpages
+\DTLifbibfieldexists{Pages}{\DTLaddperiod}{}%
+}{% no cross ref
+\DTLformatinedbooktitle
+\DTLifbibfieldexists{BookTitle}{%
+\DTLifanybibfieldexists{Volume,Series,Pages,Number,Address,%
+Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Series,Pages,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifanybibfieldexists{Number,Series}{%
+\DTLifanybibfieldexists{Pages,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatpages
+\DTLifbibfieldexists{Pages}{%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Publisher}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLaddperiod}{}%
+}{%
+\DTLifanybibfieldexists{Publisher,Organization}{%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Publisher,Month,Year}{%
+\DTLaddcomma}{}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmanual}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist
+\DTLaddperiod}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Address}{\DTLaddcomma \DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+}{}%
+\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifbibfieldexists{Author}{%
+\DTLifanybibfieldexists{Organization,Address}{%
+\DTLaddperiod}{\DTLaddcomma}}{%
+\DTLifanybibfieldexists{Organization,Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}}{}%
+\DTLifbibfieldexists{Author}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Address,Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+}{%
+\DTLifbibfieldexists{Organization}{}{%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Edition,Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}}%
+}%
+\DTLifbibfieldexists{Edition}{%
+\protected at edef\@dtl at tmp{\DTLformatedition{\DTLbibfield{Edition}}}%
+\ifDTLmidsentence
+ \@dtl at tmp
+\else
+ \DTLstartsentencespace
+ \expandafter\MakeUppercase\@dtl at tmp
+\fi
+\expandafter\DTLcheckendsperiod\expandafter{\@dtl at tmp}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmastersthesis}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifanybibfieldexists{School,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{School}{%
+\DTLstartsentencespace
+\DTLbibfield{School}%
+\DTLcheckbibfieldendsperiod{School}%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatmisc}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifbibfieldexists{HowPublished}{\DTLaddperiod}{%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}%
+}%
+\DTLmidsentencefalse}{}%
+\DTLifbibfieldexists{HowPublished}{%
+\DTLstartsentencespace
+\DTLbibfield{HowPublished}%
+\DTLcheckbibfieldendsperiod{HowPublished}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{%
+\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatphdthesis}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifanybibfieldexists{School,Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{School}{%
+\DTLstartsentencespace
+\DTLbibfield{School}%
+\DTLcheckbibfieldendsperiod{School}%
+\DTLifanybibfieldexists{Address,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatproceedings}{%
+\DTLifbibfieldexists{Editor}{%
+\DTLformateditorlist\DTLaddperiod}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLaddperiod}{}}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+{\em\DTLbibfield{Title}}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLifanybibfieldexists{Volume,Number,Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+}{}%
+\DTLformatbvolume
+\DTLifbibfieldexists{Volume}{%
+\DTLifanybibfieldexists{Number,Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatnumberseries
+\DTLifbibfieldexists{Number}{%
+\DTLifanybibfieldexists{Address,Editor,Publisher,%
+Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Editor}{\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLaddcomma}{\DTLaddperiod}}{}}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLaddperiod
+}{}%
+}{% no address
+\DTLifbibfieldexists{Editor}{%
+\DTLifbibfieldexists{Organization}{%
+\DTLstartsentencespace
+\DTLbibfield{Organization}%
+\DTLcheckbibfieldendsperiod{Organization}%
+\DTLifanybibfieldexists{Publisher,Month,Year}{%
+\DTLaddcomma}{\DTLaddperiod}}{}%
+}{}%
+\DTLifbibfieldexists{Publisher}{%
+\DTLstartsentencespace
+\DTLbibfield{Publisher}%
+\DTLcheckbibfieldendsperiod{Publisher}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformattechreport}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Type}{%
+\DTLstartsentencespace
+\DTLbibfield{Type}%
+\DTLcheckbibfieldendsperiod{Type}%
+\DTLifbibfieldexists{Number}{~}{}}{}%
+\DTLifbibfieldexists{Number}{%
+\DTLstartsentencespace
+\DTLbibfield{Number}%
+\DTLcheckbibfieldendsperiod{Number}%
+}{}%
+\DTLifanybibfieldexists{Type,Number}{%
+\DTLifanybibfieldexists{Institution,Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Institution}{%
+\DTLstartsentencespace
+\DTLbibfield{Institution}%
+\DTLcheckbibfieldendsperiod{Institution}%
+\DTLifanybibfieldexists{Address,Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLifbibfieldexists{Address}{%
+\DTLstartsentencespace
+\DTLbibfield{Address}%
+\DTLcheckbibfieldendsperiod{Address}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma
+}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLaddperiod}{}%
+}%
+\renewcommand*{\DTLformatunpublished}{%
+\DTLifbibfieldexists{Author}{\DTLformatauthorlist\DTLaddperiod}{}%
+\DTLifbibfieldexists{Title}{%
+\DTLstartsentencespace
+\DTLbibfield{Title}%
+\DTLcheckbibfieldendsperiod{Title}%
+\DTLaddperiod}{}%
+\DTLifbibfieldexists{Note}{%
+\DTLstartsentencespace
+\DTLbibfield{Note}%
+\DTLcheckbibfieldendsperiod{Note}%
+\DTLifanybibfieldexists{Month,Year}{\DTLaddcomma}{\DTLaddperiod}}{}%
+\DTLformatdate
+\DTLifanybibfieldexists{Month,Year}{\DTLaddperiod}{}%
+}%
+}
+\newcommand*{\DTLformatbooktitle}[1]{\emph{#1}}
+\newcommand{\dtlbst at abbrv}{%
+\dtlbst at plain
+\renewcommand*{\DTLformatauthor}[4]{%
+\DTLformatabbrvforenames{##4}
+\DTLformatvon{##1}%
+\DTLformatsurname{##2}%
+\DTLformatjr{##3}}
+\renewcommand*{\DTLformateditor}[4]{%
+\DTLformatabbrvforenames{##4}
+\DTLformatvon{##1}%
+\DTLformatsurname{##2}%
+\DTLformatjr{##3}}
+\let\DTLmonthname\dtl at abbrvmonthname
+\renewcommand*{\DTLacmcs}{ACM Comput.\ Surv.}
+\renewcommand*{\DTLacta}{Acta Inf.}
+\renewcommand*{\DTLcacm}{Commun.\ ACM}
+\renewcommand*{\DTLibmjrd}{IBM J.\ Res.\ Dev.}
+\renewcommand*{\DTLibmsj}{IBM Syst.~J.}
+\renewcommand*{\DTLieeese}{IEEE Trans. Softw.\ Eng.}
+\renewcommand*{\DTLieeetc}{IEEE Trans.\ Comput.}
+\renewcommand*{\DTLieeetcad}{IEEE Trans.\ Comput.-Aided Design
+Integrated Circuits}
+\renewcommand*{\DTLipl}{Inf.\ Process.\ Lett.}
+\renewcommand*{\DTLjacm}{J.~ACM}
+\renewcommand*{\DTLjcss}{J.~Comput.\ Syst.\ Sci.}
+\renewcommand*{\DTLscp}{Sci.\ Comput.\ Programming}
+\renewcommand*{\DTLsicomp}{SIAM J.~Comput.}
+\renewcommand*{\DTLtocs}{ACM Trans.\ Comput.\ Syst.}
+\renewcommand*{\DTLtods}{ACM Trans.\ Database Syst.}
+\renewcommand*{\DTLtog}{ACM Trans.\ Gr.}
+\renewcommand*{\DTLtoms}{ACM Trans.\ Math. Softw.}
+\renewcommand*{\DTLtoois}{ACM Trans. Office Inf.\ Syst.}
+\renewcommand*{\DTLtoplas}{ACM Trans.\ Prog. Lang.\ Syst.}
+\renewcommand*{\DTLtcs}{Theoretical Comput.\ Sci.}
+}
+\newcommand{\dtlbst at alpha}{%
+\dtlbst at plain
+\renewenvironment{DTLthebibliography}[2][\boolean{true}]{%
+\dtl at createalphabiblabels{##1}{##2}%
+\begin{thebibliography}{\@dtl at widestlabel}%
+}{\end{thebibliography}}%
+\renewcommand*{\DTLbibitem}{%
+\expandafter\bibitem\expandafter
+ [\csname dtl at biblabel@\DBIBcitekey\endcsname]{\DBIBcitekey}}%
+\renewcommand*{\DTLmbibitem}[1]{%
+\expandafter\bibitem\expandafter
+ [\csname dtl at biblabel@\DBIBcitekey\endcsname]{##1@\DBIBcitekey}}%
+}
+\newcommand*{\dtl at createalphabiblabels}[2]{%
+\dtl at message{Creating bib labels}%
+\begingroup
+\gdef\@dtl at widestlabel{}%
+\dtl at widest=0pt\relax
+\DTLforeachbibentry[#1]{#2}{%
+\dtl at message{\DBIBcitekey}%
+\DTLifbibfieldexists{Author}{%
+  \dtl at listgetalphalabel{\@dtl at thislabel}{\@dtl at key@Author}%
+}{%
+\DTLifbibfieldexists{Editor}{%
+    \dtl at listgetalphalabel{\@dtl at thislabel}{\@dtl at key@Editor}%
+ }{%
+   \DTLifbibfieldexists{Key}{%
+     \expandafter\dtl at get@firstthree\expandafter
+       {\@dtl at key@Key}{\@dtl at thislabel}%
+   }{%
+     \DTLifbibfieldexists{Organization}{%
+       \expandafter\dtl at get@firstthree\expandafter
+         {\@dtl at key@Organization}{\@dtl at thislabel}%
+   }{%
+       \expandafter\dtl at get@firstthree\expandafter
+         {\DBIBentrytype}{\@dtl at thislabel}%
+   }%
+   }}}%
+\DTLifbibfieldexists{Year}{}{\DTLifbibfieldexists{CrossRef}{%
+\DTLgetvalueforkey{\@dtl at key@Year}{Year}{#2}{CiteKey}{%
+\@dtl at key@CrossRef}}{}}%
+\DTLifbibfieldexists{Year}{%
+\expandafter\dtl at get@yearsuffix\expandafter{\@dtl at key@Year}%
+\expandafter\toks@\expandafter{\@dtl at thislabel}%
+\expandafter\@dtl at toks\expandafter{\@dtl at year}%
+\edef\@dtl at thislabel{\the\toks@\the\@dtl at toks}%
+}{}%
+\let\@dtl at s@thislabel=\@dtl at thislabel
+\@onelevel at sanitize\@dtl at s@thislabel
+\@ifundefined{c at biblabel@\@dtl at s@thislabel}{%
+\newcounter{biblabel@\@dtl at s@thislabel}%
+\setcounter{biblabel@\@dtl at s@thislabel}{1}%
+\expandafter\edef\csname @dtl at bibfirst@\@dtl at s@thislabel\endcsname{%
+\DBIBcitekey}%
+\expandafter\global
+\expandafter\let\csname dtl at biblabel@\DBIBcitekey\endcsname=
+  \@dtl at thislabel
+}{%
+\expandafter\ifnum\csname c at biblabel@\@dtl at s@thislabel\endcsname=1\relax
+ \expandafter\let\expandafter\@dtl at tmp
+   \csname @dtl at bibfirst@\@dtl at s@thislabel\endcsname
+ \expandafter\protected at xdef\csname dtl at biblabel@\@dtl at tmp\endcsname{%
+   \@dtl at thislabel a}%
+\fi
+\stepcounter{biblabel@\@dtl at s@thislabel}%
+\expandafter\protected at xdef\csname dtl at biblabel@\DBIBcitekey\endcsname{%
+   \@dtl at thislabel\alph{biblabel@\@dtl at s@thislabel}}%
+}%
+\settowidth{\dtl at tmplength}{%
+ \csname dtl at biblabel@\DBIBcitekey\endcsname}%
+\ifdim\dtl at tmplength>\dtl at widest
+ \dtl at widest=\dtl at tmplength
+ \expandafter\global\expandafter\let\expandafter\@dtl at widestlabel
+  \expandafter=\csname dtl at biblabel@\DBIBcitekey\endcsname
+\fi
+}%
+\endgroup
+}
+\newcommand*{\dtl at listgetalphalabel}[2]{%
+\@dtl at authorcount=0\relax
+\@for\@dtl at author:=#2\do{%
+\advance\@dtl at authorcount by 1\relax}%
+\ifnum\@dtl at authorcount=1\relax
+ \expandafter\dtl at getsinglealphalabel#2{#1}\relax
+\else
+  {%
+  \xdef#1{}%
+  \@dtl at tmpcount=0\relax
+   \def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+   \def\DTLafterinitialbeforehyphen{}\def\DTLinitialhyphen{}%
+   \@for\@dtl at author:=#2\do{%
+     \expandafter\dtl at getauthorinitial\@dtl at author
+     \expandafter\toks@\expandafter{\@dtl at tmp}%
+     \expandafter\@dtl at toks\expandafter{#1}%
+     \xdef#1{\the\@dtl at toks\the\toks@}%
+     \advance\@dtl at tmpcount by 1\relax
+     \ifnum\@dtl at tmpcount>2\relax\@endfortrue\fi
+  }}%
+\fi
+}
+\newcommand*{\dtl at getauthorinitial}[4]{%
+\def\@dtl at vonpart{#1}%
+\ifx\@dtl at vonpart\@empty
+ \DTLstoreinitials{#2}{\@dtl at tmp}%
+\else
+ \DTLstoreinitials{#1 #2}{\@dtl at tmp}%
+\fi}
+\newcommand*{\dtl at getsinglealphalabel}[5]{%
+\def\@dtl at vonpart{#1}%
+\ifx\@dtl at vonpart\@empty
+ \DTLifSubString{#2}{-}{%
+   {\def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+    \def\DTLafterinitialbeforehyphen{}%
+    \def\DTLinitialhyphen{}%
+    \DTLstoreinitials{#2}{\@dtl at tmp}\global\let#5=\@dtl at tmp}%
+   }{%
+   \dtl at getfirstthree{#5}#2{}{}{}{}\@nil
+ }
+\else
+ {\def\DTLafterinitials{}\def\DTLbetweeninitials{}%
+  \def\DTLafterinitialbeforehyphen{}%
+  \def\DTLinitialhyphen{}%
+  \DTLstoreinitials{#1 #2}{\@dtl at tmp}\global\let#5=\@dtl at tmp}%
+\fi
+}
+\def\dtl at getfirstthree#1#2#3#4#5\@nil{%
+  \def#1{#2#3#4}%
+}
+\newcommand*{\dtl at get@firstthree}[2]{%
+\dtl at getfirstthree#2#1{}{}{}{}{}\@nil}
+\newcommand*{\dtl at get@yearsuffix}[1]{%
+\dtl at getyearsuffix#1\@nil\relax\relax}
+
+\def\dtl at getyearsuffix#1#2#3{%
+\def\@dtl at argi{#1}\def\@dtl at argii{#2}%
+\def\@dtl at argiii{#3}%
+\ifx\@dtl at argi\@nnil
+ \def\@dtl at year{}%
+ \let\@dtl at donext=\relax
+\else
+  \ifx\@dtl at argii\@nnil
+    \dtl at ifsingle{#1}{%
+      \def\@dtl at year{#1}%
+      \let\@dtl at donext=\relax
+    }{%
+      \def\@dtl at donext{\dtl at getyearsuffix#1#2#3}%
+    }%
+  \else
+    \ifx\@dtl at argiii\@nnil
+      \dtl at ifsingle{#1}{%
+        \dtl at ifsingle{#2}{%
+          \def\@dtl at year{#1#2}%
+          \let\@dtl at donext=\relax
+        }{%
+          \def\@dtl at donext{\dtl at getyearsuffix#2#3}%
+        }%
+      }{%
+        \def\@dtl at donext{\dtl at getyearsuffix#2#3}%
+      }%
+    \else
+      \def\@dtl at donext{\dtl at getyearsuffix{#2}{#3}}%
+    \fi
+  \fi
+\fi
+\@dtl at donext
+}
+\newcommand*{\DTLbibliographystyle}[1]{%
+\@ifundefined{dtlbst@#1}{\PackageError{databib}{Unknown
+bibliography style `#1'}{}}{\csname dtlbst@#1\endcsname}}
+\DTLbibliographystyle{\dtlbib at style}
+\newcommand*{\DTLmultibibs}[1]{%
+\@for\@dtl at af:=#1\do{%
+\@ifundefined{dtl at aux@\@dtl at af}{%
+\expandafter\newwrite\csname dtl at aux@\@dtl at af\endcsname
+\expandafter\immediate
+\expandafter\openout\csname dtl at aux@\@dtl at af\endcsname=\@dtl at af.aux
+\expandafter\def\csname b@\@dtl at af @*\endcsname{}%
+}{%
+\PackageError{databib}{Can't create auxiliary file `\@dtl at af.aux',
+\expandafter\string\csname dtl at aux@\@dtl at af\endcsname\space
+already exists}{}}}}
+\@onlypreamble{\DTLmultibibs}
+\newcommand*{\DTLcite}{\@ifnextchar[{\@tempswatrue \dtl at citex
+}{\@tempswafalse \dtl at citex[]}}
+\def\dtl at citex[#1]#2#3{%
+\leavevmode\let\@citea\@empty
+\@cite{\@for\@citeb:=#3\do{\@citea
+  \def\@citea{,\penalty \@m \ }%
+  \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+  \if at filesw
+    \@ifundefined{dtl at aux@#2}{%
+      \PackageError{databib}{multibib `#2' not defined}{%
+      You need to define `#2' in \string\DTLmutlibibs}%
+    }{%
+      \expandafter\immediate
+      \expandafter\write\csname dtl at aux@#2\endcsname{%
+        \string\citation{\@citeb}}%
+    }%
+  \fi
+  \@ifundefined{b@#2@\@citeb}{%
+    \hbox{\reset at font\bfseries ?}%
+    \G at refundefinedtrue
+    \@latex at warning{Citation `\@citeb ' on page \thepage \space
+      undefined}%
+  }{%
+    \@cite at ofmt{\csname b@#2@\@citeb \endcsname }%
+  }%
+}}{#1}%
+}
+\newcommand*{\DTLnocite}[2]{%
+\@ifundefined{dtl at aux@#1}{%
+  \PackageError{databib}{multibib `#1' not defined}{%
+  You need to define `#1' in \string\DTLmutlibibs}%
+}{%
+  \@bsphack
+  \ifx\@onlypreamble\document
+    \@for\@citeb:=#2\do{%
+      \edef\@citeb{\expandafter\@firstofone\@citeb}%
+      \if at filesw
+        \expandafter\immediate
+        \expandafter\write\csname dtl at aux@#1\endcsname{%
+          \string\citation{\@citeb}}%
+      \fi
+      \@ifundefined{b@#1@\@citeb}{%
+        \G at refundefinedtrue
+        \@latex at warning{Citation `\@citeb ' undefined}}{}%
+    }%
+  \else
+    \@latex at error{Cannot be used in preamble}\@eha
+  \fi
+  \@esphack
+}%
+}
+\newcommand*{\DTLloadmbbl}[3]{%
+\@ifundefined{dtl at aux@#1}{%
+  \PackageError{databib}{multibib `#1' not defined}{%
+  You need to define `#1' in \string\DTLmutlibibs}%
+}{%
+  \if at filesw
+    \expandafter\immediate\expandafter
+      \write\csname dtl at aux@#1\endcsname{\string\bibstyle{databib}}%
+    \expandafter\immediate\expandafter
+      \write\csname dtl at aux@#1\endcsname{\string\bibdata{#3}}%
+  \fi
+  \DTLnewdb{#2}%
+  \edef\DTLBIBdbname{#2}%
+  \@input@{#1.bbl}%
+}%
+}
+\newcommand*{\DTLmbibliography}[3][\boolean{true}]{%
+\begin{DTLthebibliography}[#1]{#3}%
+\DTLforeachbibentry[#1]{#3}{%
+\DTLmbibitem{#2} \DTLformatbibentry \DTLendbibitem
+}%
+\end{DTLthebibliography}%
+}
+\endinput
+%%
+%% End of file `databib-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/databib-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/databib.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/databib.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/databib.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{databib-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{databib}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{databib}[2025/03/05 v3.0.1 (NLCT)]
 \ExplSyntaxOn
 \tl_new:N \l__databib_style_tl
 \tl_set:Nn \l__databib_style_tl { plain }

Added: trunk/Master/texmf-dist/tex/latex/datatool/datagidx-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datagidx-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datagidx-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,3304 @@
+%%
+%% This is file `datagidx-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datagidx-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datagidx}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{etoolbox}
+\RequirePackage{xkeyval}
+\RequirePackage{mfirstuc}
+\RequirePackage{xfor}
+\RequirePackage{multicol}
+\RequirePackage{textcase}
+\RequirePackage{afterpage}
+\newcommand*{\datagidx at columns}{2}
+\newcommand*{\DTLgidxSetColumns}[1]{%
+  \DTLifint{#1}%
+  {%
+    \def\datagidx at columns{#1}%
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Number of columns must be an integer}%
+    {%
+      You have requested `#1' columns, which can't be parsed as a
+      number%
+    }%
+  }%
+}
+\newcounter{DTLgidxChildCount}
+\def\theHDTLgidxChildCount{\Label.\arabic{DTLgidxChildCount}}
+\newcommand*{\DTLgidxChildCountLabel}{\theDTLgidxChildCount) }
+\newcommand*{\DTLgidxChildStyle}[1]{#1}
+\newcommand*{\datagidx at setchildstyle}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxChildStyle}[1]{##1}%
+  \or
+    \renewcommand*{\DTLgidxChildStyle}[1]{%
+      \DTLgidxChildCountLabel
+    }%
+  \fi
+}
+\newcommand{\datagidx at foreachchild}{%
+  \datagidx at sort@foreachchild
+}
+\newcommand*{\datagidx at setchildsort}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\datagidx at foreachchild}{%
+       \datagidx at sort@foreachchild
+    }%
+  \or
+    \renewcommand*{\datagidx at foreachchild}{%
+       \datagidx at unsort@foreachchild
+    }%
+  \fi
+}
+\newcommand*{\DTLgidxPostName}{ }
+\newcommand*{\DTLgidxPostChildName}{\DTLgidxPostName}
+\newcommand*{\DTLgidxNameCase}[1]{#1}
+\newcommand*{\datagidx at setnamecase}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxNameCase}[1]{##1}%
+  \or
+    \let\DTLgidxNameCase\MakeTextUppercase
+  \or
+    \let\DTLgidxNameCase\MakeTextLowercase
+  \or
+    \let\DTLgidxNameCase\xmakefirstuc
+  \or
+    \let\DTLgidxNameCase\xcapitalisewords
+  \fi
+}
+\newcommand*{\DTLgidxNameFont}[1]{\textnormal{#1}}
+\newcommand*{\DTLgidxPostDescription}{}
+\newcommand*{\datagidx at setpostdesc}[1]{%
+   \ifcase#1\relax
+     \renewcommand*{\DTLgidxPostDescription}{}%
+   \or
+     \renewcommand*{\DTLgidxPostDescription}{.}%
+   \fi
+ }
+\newcommand*{\DTLgidxPreLocation}{\enspace}
+\newcommand*{\datagidx at setprelocation}[1]{%
+   \ifcase#1\relax
+     \renewcommand*{\DTLgidxPreLocation}{}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\enspace}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{ }%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\dotfill}%
+   \or
+     \renewcommand*{\DTLgidxPreLocation}{\hfill}%
+   \fi
+ }
+\newcommand*{\DTLgidxLocation}{\dtldolocationlist}
+\newcommand*{\datagidx at setlocation}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxLocation}{}%
+  \or
+    \renewcommand*{\DTLgidxLocation}{\dtldolocationlist}%
+  \or
+    \renewcommand*{\DTLgidxLocation}{\dtldofirstlocation}%
+  \fi
+}
+\newcommand*{\DTLgidxSee}{%
+  \DTLifnull{\See}%
+  {}%
+  {%
+    \DTLgidxPreLocation
+    \DTLgidxFormatSee{\seename}{\See}%
+  }%
+}
+\newcommand*{\DTLgidxSeeAlso}{%
+  \DTLifnull{\SeeAlso}%
+  {}%
+  {%
+     \DTLgidxFormatSeeAlso{\seealsoname}{\SeeAlso}%
+  }%
+}
+\newcommand*{\DTLgidxChildrenSeeAlso}{%
+  \DTLgidxChildren
+  \DTLgidxSeeAlso
+}
+\newcommand*{\datagidx at setsee}[1]{%
+  \ifcase#1\relax
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}%
+      {%
+        , \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \space(\DTLgidxFormatSee{\seename}{\See})%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}%
+      {%
+        . \DTLgidxFormatSee{\xmakefirstuc{\seename}}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \space\DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        ; \DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \or
+    \renewcommand*{\DTLgidxSee}{%
+      \DTLifnull{\See}{}
+      {%
+        \DTLgidxPreLocation\DTLgidxFormatSee{\seename}{\See}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLgidxSymDescSep}{\space}
+\newlength\datagidxsymbolwidth
+\newlength\datagidxlocationwidth
+\newcommand{\DTLgidxFormatDesc}[1]{#1}
+\newcommand*{\DTLgidxSymbolDescription}{%
+  \DTLgidxSymbolDescLeft
+  \DTLgidxSymbolDescRight
+}
+\newcommand*{\DTLgidxSymbolDescLeft}{%
+  \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}%
+}
+\newcommand*{\DTLgidxSymbolDescRight}{%
+  \ifdefempty{\Description}{}%
+  {%
+    \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+  }%
+}
+\newif\if at datagidxsymbolleft
+\@datagidxsymbollefttrue
+\newcommand*{\datagidx at formatsymdesc}[1]{%
+   \ifcase#1\relax
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{\Symbol}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{}%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+           \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{}%
+      \@datagidxsymbolleftfalse
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription
+        }%
+      }%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription\DTLgidxSymDescSep
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Symbol}{}{(\Symbol)}%
+      }%
+      \@datagidxsymbolleftfalse
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Symbol}{}{\Symbol\DTLgidxSymDescSep}%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription
+        }%
+      }%
+      \@datagidxsymbollefttrue
+   \or
+      \renewcommand*{\DTLgidxSymbolDescLeft}{%
+        \ifdefempty{\Description}{}%
+        {%
+          \DTLgidxFormatDesc{\Description}%
+          \DTLgidxPostDescription\DTLgidxSymDescSep
+        }%
+      }%
+      \renewcommand*{\DTLgidxSymbolDescRight}{%
+        \ifdefempty{\Symbol}{}{\Symbol}%
+      }%
+      \@datagidxsymbolleftfalse
+   \fi
+ }
+\newcommand*{\DTLgidxSetCompositor}[1]{%
+ \undef\datagidx at docomplist
+ \DeclareListParser{\datagidx at docomplist}{#1}%
+ \def\datagidx at compositor{#1}%
+}
+\DTLgidxSetCompositor{.}
+\newcommand*{\datagidx at do@sort}{\datagidx at sort}
+\newcommand*{\datagidx at optimize@sort}{%
+  \ifdef\datagidx at do@optimize at sort
+  {%
+    \datagidx at sort
+  }%
+  {%
+    \protected at write\@auxout{}{%
+      \string\gdef\string\datagidx at do@optimize at sort{}%
+    }%
+    \global\let\@datagidx at dorerun@warn at sort\@data at rerun@warn at sort
+  }%
+}
+\newif\if at datagidx@warn
+\@datagidx at warntrue
+\newcommand*\@datagidx at dorerun@warn{}
+\AtEndDocument{\if at datagidx@warn\@datagidx at dorerun@warn\fi}
+\newcommand*\@datagidx at dorerun@warn at sort{}
+\AtEndDocument{\if at datagidx@warn\@datagidx at dorerun@warn at sort\fi}
+\newcommand*\@data at rerun@warn at sort{%
+  \PackageWarningNoLine{datagidx}{Rerun required to sort the
+   index/glossary databases}%
+}
+\newcommand*\@data at rerun@warn{%
+  \PackageWarningNoLine{datagidx}{Rerun required to ensure the
+   index/glossary location lists are up-to-date}%
+}
+\newcommand*{\datagidx at do@highopt at optimize}{%
+  \renewcommand*{\datagidx at do@sort}{%
+    \ifcsdef{datagidx at do@highopt at sort@\DTLgidxCurrentdb}%
+    {%
+      \csuse{datagidx at do@highopt at sort@\DTLgidxCurrentdb}%
+    }%
+    {%
+    }%
+    \bgroup
+    \def\dtl at saverawdbhook{%
+      \let\db at col@id at w\@datagidx at db@col at id@w
+      \def\DTLgidxName{\string\DTLgidxName\space}%
+      \def\DTLgidxMac{\string\DTLgidxMac\space}%
+      \def\DTLgidxRank{\string\DTLgidxRank\space}%
+      \def\DTLgidxParen{\string\DTLgidxParen\space}%
+      \def\DTLgidxParticle{\string\DTLgidxParticle\space}%
+      \def\DTLgidxOffice{\string\DTLgidxOffice\space}%
+      \def\DTLgidxSaint{\string\DTLgidxSaint\space}%
+      \def\DTLgidxPlace{\string\DTLgidxPlace\space}%
+      \def\DTLgidxIgnore{\string\DTLgidxIgnore\space}%
+      \def\DTLgidxNameNum{\string\DTLgidxNameNum\space}%
+      \def\DTLgidxSubject{\string\DTLgidxSubject\space}%
+    }%
+    \DTLsaverawdb{\DTLgidxCurrentdb}{\datagidxhighoptfilename\DTLgidxCurrentdb}%
+    \egroup
+  }%
+  \def\newgidx{\datagidx at highopt@newgidx}%
+  \def\newterm{\datagidx at highopt@newterm}%
+}
+\def\@datagidx at db@col at id@w#1\db at col@id at end@\db at col@elt at w#2\db at col@elt at end@\db at col@id at w#3\db at col@id at end@{%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at w\space #1%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at end@\space
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@elt at w\space
+   \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Used\endcsname=#1\space
+     0%
+   \else
+     \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Location\endcsname=#1\space
+     \else
+       \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @CurrentLocation\endcsname=#1\space
+       \else
+         \expandafter\ifnum\csname dtl at ci@\DTLgidxCurrentdb @Sort\endcsname=#1\space
+           \protect#2%
+         \else
+         #2%
+         \fi
+       \fi
+     \fi
+   \fi
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@elt at end@\space
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at w\space #3%
+  \expandafter\@gobble\string\%^^J
+  \string\db at col@id at end@\space
+}
+\newcommand*{\datagidx at do@highopt at update}[1]{}
+\newcommand*{\datagidxhighoptfilename}[1]{\jobname-#1.gidx}
+\define at choicekey{datagidx.sty}{optimize}[\val\nr]%
+ {off,low,high}[high]%
+ {%
+   \ifcase\nr\relax
+    \renewcommand*{\datagidx at do@sort}{\datagidx at sort}
+   \or
+    \renewcommand*{\datagidx at do@sort}{\datagidx at optimize@sort}
+   \or
+    \datagidx at do@highopt at optimize
+   \fi
+ }
+\define at choicekey{datagidx.sty}{nowarn}[\val\nr]{true,false}[true]%
+{%
+  \ifcase\nr\relax
+    \@datagidx at warnfalse
+  \or
+    \@datagidx at warntrue
+  \fi
+}
+\define at choicekey{datatool.sty}{utf8}{true,false}[true]{%
+  \setbool{@dtl at utf8}{#1}%
+}
+\define at key{datagidx.sty}{columns}%
+{%
+  \DTLgidxSetColumns{#1}%
+}
+\define at choicekey{datagidx.sty}{child}[\val\nr]%
+ {named,noname}%
+ {%
+   \datagidx at setchildstyle\nr
+ }
+\define at choicekey{datagidx.sty}{namecase}[\val\nr]%
+ {nochange,uc,lc,firstuc,capitalise}%
+ {%
+   \datagidx at setnamecase\nr
+ }
+\define at key{datagidx.sty}{namefont}%
+{%
+  \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}%
+}
+\define at key{datagidx.sty}{postname}
+{%
+  \renewcommand*{\DTLgidxPostName}{#1}%
+}
+\define at choicekey{datagidx.sty}{postdesc}[\val\nr]%
+ {none,dot}%
+ {%
+   \datagidx at setpostdesc\nr
+ }
+\define at choicekey{datagidx.sty}{prelocation}[\val\nr]%
+ {none,enspace,space,dotfill,hfill}%
+ {%
+   \datagidx at setprelocation\nr
+ }
+\define at choicekey{datagidx.sty}{location}[\val\nr]%
+ {hide,list,first}%
+ {\datagidx at setlocation\nr}
+\define at choicekey{datagidx.sty}{see}[\val\nr]%
+  {comma,brackets,dot,space,nosep,semicolon,location}%
+  {\datagidx at setsee\nr}
+\define at choicekey{datagidx.sty}{symboldesc}[\val\nr]%
+ {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}%
+ {\datagidx at formatsymdesc\nr}
+\define at key{datagidx.sty}{compositor}%
+{%
+  \DTLgidxSetCompositor{#1}%
+}%
+\DeclareOptionX{final}{%
+  \let\datagidxshowifdraft\@gobble
+}
+\let\datagidxshowifdraft\@gobble
+\DeclareOptionX{draft}{%
+  \let\datagidxshowifdraft\@firstofone
+}
+\define at choicekey{datagidx.sty}{verbose}[\val\nr]%
+ {true,false}[true]%
+ {%
+   \csuse{dtlverbose\val}%
+ }
+\ProcessOptionsX
+\DTLnewdb{datagidx}
+\providecommand*{\seename}{see}
+\providecommand*{\seealsoname}{see also}
+\newcommand*{\DTLgidxSeeTagFont}[1]{\emph{#1}}
+\newcommand*{\DTLgidxFormatSee}[2]{%
+  \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}%
+}
+\newcommand*{\DTLgidxFormatSeeAlso}[2]{%
+  \datagidxdoseealso
+  {%
+    \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}%
+  }%
+}
+\newcommand*{\datagidxdoseealso}[1]{%
+  \datagidxseealsostart
+   #1%
+  \datagidxseealsoend
+}
+\newcommand*{\DTLgidxSeeList}[1]{%
+  \def\datagidx at sep{}%
+  \@for\dtl at thislabel:=#1\do
+  {%
+    \ifx\@xfor at nextelement\@nnil
+      \ifdefempty{\datagidx at sep}%
+      {%
+      }%
+      {%
+         \DTLidxSeeLastSep
+      }%
+    \else
+      \datagidx at sep
+      \let\datagidx at sep\DTLidxSeeSep
+    \fi
+    \DTLidxFormatSeeItem{\dtl at thislabel}%
+  }%
+}
+\newcommand*{\DTLidxFormatSeeItem}[1]{%
+  \DTLgidxFetchEntry{\datagidx at value}{#1}{Name}%
+  \datagidxlink{#1}%
+  {%
+    \datagidx at value
+  }%
+}
+\newcommand*{\DTLidxSeeSep}{, }
+\newcommand*{\DTLidxSeeLastSep}{ \& }
+\newcommand*{\DTLgidxDoSeeOrLocation}{%
+  \DTLifnull\See
+  {%
+     \ifdefempty\Location
+     {%
+     }%
+     {%
+       \DTLgidxPreLocation
+       \DTLgidxLocation
+     }%
+  }%
+  {%
+     \DTLgidxSee
+  }%
+}
+\newcommand*{\datagidx at sortchildren}{%
+  \def\datagidx at sortedlist{}%
+  \@for\Label:=\Children\do
+  {%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\DTLgidxCurrentdb}%
+      {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}%
+      {\Label}%
+    }%
+    \do at getrow
+    \ifdefempty\datagidx at sortedlist
+    {%
+      \edef\datagidx at newsortedlist{{\number\dtlrownum}{\Label}}%
+    }%
+    {%
+      \def\datagidx at newsortedlist{}%
+      \@for\@datagidx at thisval:=\datagidx at sortedlist\do
+      {%
+        \edef\datagidx at thisidx{\expandafter\@firstoftwo\@datagidx at thisval}%
+        \ifnum\datagidx at thisidx>\dtlrownum\relax
+          \ifdefempty\datagidx at newsortedlist
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              {\number\dtlrownum}{\Label},\@datagidx at thisval
+            }%
+          }%
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              ,{\number\dtlrownum}{\Label},\@datagidx at thisval
+            }%
+          }%
+          \@endfortrue
+        \else
+          \ifdefempty\datagidx at newsortedlist
+          {%
+            \edef\datagidx at newsortedlist{%
+              \@datagidx at thisval
+            }%
+          }%
+          {%
+            \eappto\datagidx at newsortedlist
+            {%
+              ,\@datagidx at thisval
+            }%
+          }%
+        \fi
+      }%
+      \if at endfor
+        \ifdefempty\@forremainder
+        {%
+        }%
+        {%
+          \eappto\datagidx at newsortedlist{,\@forremainder}%
+        }%
+      \else
+        \ifdefempty\datagidx at newsortedlist
+        {%
+          \edef\datagidx at newsortedlist{{\number\dtlrownum}{\Label}}%
+        }%
+        {%
+          \eappto\datagidx at newsortedlist{,{\number\dtlrownum}{\Label}}%
+        }%
+      \fi
+    }%
+    \let\datagidx at sortedlist\datagidx at newsortedlist
+    \@endforfalse
+  }%
+}
+\newcommand{\datagidx at sort@foreachchild}[1]{%
+  \datagidx at sortchildren
+  \@for\@datagidx at thisval:=\datagidx at sortedlist\do
+  {%
+    \edef\Label{\expandafter\@secondoftwo\@datagidx at thisval}%
+    #1%
+  }%
+}
+\newcommand{\datagidx at unsort@foreachchild}[1]{%
+  \@for\Label:=\Children\do
+  {%
+    #1%
+  }%
+}
+\newcommand*{\DTLgidxChildren}{%
+  \bgroup
+    \DTLifnull\Children
+    {}%
+    {%
+      \advance\datagidx at level by 1\relax
+      \datagidxchildstart
+      \let\Parent\Label
+      \datagidx at foreachchild
+      {%
+        \edef\do at getrow{%
+          \noexpand\dtlgetrowforvalue
+          {\DTLgidxCurrentdb}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}%
+          {\Label}%
+        }%
+        \do at getrow
+        \dtlgetentryfromcurrentrow
+          {\Location}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{Location}}%
+        \dtlgetentryfromcurrentrow
+          {\See}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{See}}%
+        \dtlgetentryfromcurrentrow
+          {\SeeAlso}%
+          {\dtlcolumnindex{\DTLgidxCurrentdb}{SeeAlso}}%
+        \DTLifnull\Location
+        {%
+          \DTLifnull\See
+          {%
+            \DTLifnull\SeeAlso
+            {}%
+            {%
+              \datagidx at displaychild
+            }%
+          }%
+          {%
+            \datagidx at displaychild
+          }%
+        }%
+        {%
+           \datagidx at displaychild
+        }%
+      }%
+      \datagidxchildend
+    }%
+  \egroup
+}
+\newcommand*{\datagidxgetchildfields}{%
+  \dtlgetentryfromcurrentrow
+    {\Name}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Name}}%
+  \dtlgetentryfromcurrentrow
+    {\Description}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Description}}%
+  \dtlgetentryfromcurrentrow
+    {\Symbol}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Symbol}}%
+  \dtlgetentryfromcurrentrow
+    {\Long}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Long}}%
+  \dtlgetentryfromcurrentrow
+    {\Short}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Short}}%
+  \dtlgetentryfromcurrentrow
+    {\Text}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Text}}%
+  \dtlgetentryfromcurrentrow
+    {\Plural}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Plural}}%
+  \dtlgetentryfromcurrentrow
+    {\Short}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Used}}%
+  \dtlgetentryfromcurrentrow
+    {\Children}%
+    {\dtlcolumnindex{\DTLgidxCurrentdb}{Child}}%
+}
+\newcommand*{\datagidx at displaychild}{%
+  \datagidxgetchildfields
+  \datagidxchilditem
+}
+\ifdef{\chapter}
+{%
+  \newcommand*{\datagidx at heading}{\chapter*}
+}%
+{%
+  \newcommand*{\datagidx at heading}{\section*}
+}
+\let\DTLgidxNoHeading\@gobble
+\newcommand*{\datagidx at postheading}{}
+\newcommand*{\datagidx at multicols}{multicols}
+\newcommand*{\datagidx at sort}{%
+  \dtlsort{Sort,FirstId}{\DTLgidxCurrentdb}{\dtlwordindexcompare}%
+}
+\providecommand{\@idxitem}{\par\hangindent 40\p@}
+\newcommand*{\datagidxstart}%
+{%
+  \bgroup
+  \setlength{\parindent}{0pt}%
+  \setlength{\parskip}{0pt plus 0.3pt}%
+  \let\item\@idxitem
+}
+\newcommand*{\datagidxend}{\egroup}
+\newcommand*{\@datagidxtarget}[2]{%
+  \ifdef\hypertarget
+  {%
+    \bgroup
+      \let\glsadd\@gobble
+      \settoheight\dimen@{#2}%
+      \raisebox{\dimen@}{\hypertarget{#1}{}}%
+    \egroup
+  }%
+  {%
+  }%
+  #2%
+}
+\newcommand*{\datagidxtarget}{\@datagidxtarget}
+\newcommand*{\@datagidxlink}[2]{%
+  \ifdef\hyperlink
+  {%
+    \hyperlink{#1}{#2}%
+  }%
+  {%
+    #2%
+  }%
+}
+\newcommand*{\datagidxlink}{\@datagidxlink}
+\newcommand*{\DTLgidxEnableHyper}{%
+  \let\datagidxtarget\@datagidxtarget
+  \let\datagidxlink\@datagidxlink
+}
+\newcommand*{\DTLgidxDisableHyper}{%
+  \let\datagidxtarget\@secondoftwo
+  \let\datagidxlink\@secondoftwo
+}
+\newcommand*{\datagidxgroupsep}{}
+\newcommand*{\datagidxgroupheader}{}
+\newcommand*{\datagidxitem}{}%
+\newcommand*{\datagidxchildstart}{}
+\newcommand*{\datagidxchildend}{}
+\newcommand*{\datagidxchilditem}{}%
+\newcommand*{\datagidxseealsostart}{}
+\newcommand*{\datagidxseealsoend}{}
+\newcommand*{\datagidx at doifsymlocwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxsymbolwidth}%
+  \addtolength{\dtl at tmplength}{-\datagidxlocationwidth}%
+  \settowidth{\dimen@}{\DTLgidxPreLocation}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \if at datagidxsymbolleft
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+  \else
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+  \fi
+  \DTLgidxPreLocation
+  \begin{minipage}[t]{\datagidxlocationwidth}%
+    \datagidxlocalign
+    \let\DTLgidxPreLocation\@empty
+    #3%
+  \end{minipage}%
+}
+\newcommand*{\datagidx at doiflocwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxlocationwidth}%
+  \settowidth{\dimen@}{\DTLgidxPreLocation}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \begin{minipage}[t]{\dtl at tmplength}%
+    \DTLgidxSymbolDescription
+  \end{minipage}%
+  \DTLgidxPreLocation
+  \begin{minipage}[t]{\datagidxlocationwidth}%
+    \datagidxlocalign
+    \let\DTLgidxPreLocation\@empty
+    #3%
+  \end{minipage}%
+}
+\newcommand*{\datagidx at doifsymwidth}[3]{%
+  \setlength{\dtl at tmplength}{\linewidth}%
+  \addtolength{\dtl at tmplength}{-#1}%
+  \settowidth{\dimen@}{#2}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \addtolength{\dtl at tmplength}{-\datagidxsymbolwidth}%
+  \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+  \addtolength{\dtl at tmplength}{-\dimen@}%
+  \if at datagidxsymbolleft
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+      #3%
+    \end{minipage}%
+  \else
+    \begin{minipage}[t]{\dtl at tmplength}%
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescRight
+    \end{minipage}%
+    \DTLgidxSymDescSep
+    \begin{minipage}[t]{\datagidxsymbolwidth}%
+      \datagidxsymalign
+      \let\DTLgidxSymDescSep\@empty
+      \DTLgidxSymbolDescLeft
+      #3%
+    \end{minipage}%
+  \fi
+}
+\newcommand*{\datagidxlocalign}{\raggedleft}
+\newcommand*{\datagidxsymalign}{\centering}
+\newcommand*{\datagidxsetstyle}[1]{%
+  \ifcsdef{datagidx at style@#1}%
+  {%
+    \csuse{datagidx at style@#1}%
+  }%
+  {%
+    \PackageError{datagidx}{Unknown style `#1'}{}%
+  }%
+}
+\newcommand*{\datagidx at style@index}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \raggedright
+    \let\item\@idxitem
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \datagidx at doifsymlocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \datagidx at doiflocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \datagidx at doiflocwidth{0pt}%
+           {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           {%
+             \DTLgidxDoSeeOrLocation
+           }%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \DTLgidxSymbolDescription
+          \DTLgidxDoSeeOrLocation
+        }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \item
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+    }%
+    \DTLgidxPostName
+    \datagidx at item@body
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \let\item\@idxitem
+  }%
+  \renewcommand*{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \setlength{\dimen@}{\datagidxindent}%
+    \multiply\dimen@ by \datagidx at level\relax
+    \@idxitem\hspace*{\dimen@}%
+    \refstepcounter{DTLgidxChildCount}%
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxChildStyle
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostChildName
+      }%
+    }%
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxseealsostart}%
+  {%
+    \bgroup
+      \setlength{\parindent}{0pt}%
+      \setlength{\parskip}{0pt plus 0.3pt}%
+      \setlength{\dimen@}{\datagidxindent}%
+      \advance\datagidx at level by 1\relax
+      \multiply\dimen@ by \datagidx at level\relax
+      \@idxitem\hspace*{\dimen@}%
+  }%
+  \renewcommand{\datagidxseealsoend}{\egroup}%
+}
+\datagidx at style@index
+\newcommand*{\datagidx at style@indexalign}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}%
+      \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxlocationwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}%
+      \settowidth{\dimen@}{\DTLgidxPreLocation}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+           }%
+         \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+           }%
+         \fi
+      \else
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+         }%
+        \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+            \end{minipage}%
+         }%
+        \fi
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+          \end{minipage}%
+          \DTLgidxPreLocation
+          \begin{minipage}[t]{\datagidxlocationwidth}%
+          \datagidxlocalign
+           \let\DTLgidxPreLocation\@empty
+           \DTLgidxDoSeeOrLocation
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+           \DTLgidxDoSeeOrLocation
+          \end{minipage}%
+         }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{}%
+  \renewcommand*{\datagidxgroupheader}{}%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+    \datagidx at item@body
+    \par
+    \DTLgidxChildrenSeeAlso
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\dimen@}{\datagidxindent}%
+    \multiply\dimen@ by \datagidx at level\relax
+    \setlength{\dtl at tmplength}{\linewidth}%
+    \addtolength{\dtl at tmplength}{-\dimen@}%
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \edef\item{\noexpand\parshape=1 \the\dimen@ \the\dtl at tmplength}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}%
+           {%
+             \DTLgidxChildStyle
+             {%
+               \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+             }%
+           }%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\dtl at tmplength}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \item
+    \refstepcounter{DTLgidxChildCount}%
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \DTLgidxSymbolDescription
+     \DTLgidxDoSeeOrLocation
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+}
+\newlength\datagidxindent
+\setlength\datagidxindent{10\p@}
+\newlength\datagidxnamewidth
+\newlength\datagidxdescwidth
+\newcommand*{\datagidx at style@align}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}%
+      \settowidth{\dimen@}{\DTLgidxSymDescSep}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxlocationwidth>0pt\relax
+      \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}%
+      \settowidth{\dimen@}{\DTLgidxPreLocation}%
+      \addtolength{\datagidxdescwidth}{-\dimen@}%
+    \fi
+    \ifdim\datagidxsymbolwidth>0pt\relax
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+           }%
+         \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+            \end{minipage}%
+            \DTLgidxPreLocation
+            \begin{minipage}[t]{\datagidxlocationwidth}%
+              \datagidxlocalign
+              \let\DTLgidxPreLocation\@empty
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+           }%
+         \fi
+      \else
+        \if at datagidxsymbolleft
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+            \end{minipage}%
+         }%
+        \else
+          \def\datagidx at item@body{%
+            \begin{minipage}[t]{\datagidxdescwidth}%
+              \let\DTLgidxSymDescSep\@empty
+              \DTLgidxSymbolDescLeft
+            \end{minipage}%
+            \DTLgidxSymDescSep
+            \begin{minipage}[t]{\datagidxsymbolwidth}%
+              \datagidxsymalign
+              \let\DTLgidxSymDescSep\@empty
+              \setlength{\parskip}{0pt plus 0.3pt}%
+              \DTLgidxSymbolDescRight
+              \DTLgidxDoSeeOrLocation
+              \DTLgidxChildrenSeeAlso
+           \end{minipage}%
+         }%
+        \fi
+      \fi
+    \else
+      \ifdim\datagidxlocationwidth>0pt\relax
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+          \end{minipage}%
+          \DTLgidxPreLocation
+          \begin{minipage}[t]{\datagidxlocationwidth}%
+          \datagidxlocalign
+           \let\DTLgidxPreLocation\@empty
+           \DTLgidxDoSeeOrLocation
+           \DTLgidxChildrenSeeAlso
+          \end{minipage}%
+         }%
+      \else
+        \def\datagidx at item@body{%
+          \begin{minipage}[t]{\datagidxdescwidth}%
+           \setlength{\parskip}{0pt plus 0.3pt}%
+           \DTLgidxSymbolDescription
+           \DTLgidxDoSeeOrLocation
+           \DTLgidxChildrenSeeAlso
+          \end{minipage}%
+         }%
+      \fi
+    \fi
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+     \datagidx at item@body
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}%
+           {%
+             \DTLgidxChildStyle
+             {%
+               \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+             }%
+           }%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \refstepcounter{DTLgidxChildCount}%
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \DTLgidxSymbolDescription
+     \DTLgidxDoSeeOrLocation
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+}
+\newcommand*{\datagidx at style@gloss}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \setlength{\datagidxnamewidth}{0pt}%
+    \DTLforeach*{\DTLgidxCurrentdb}%
+      {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,%
+       \Parent=Parent}%
+    {%
+       \DTLifnull{\Parent}%
+       {%
+         \datagidx at doifdisplayed
+         {%
+           \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}%
+           \ifdim\dimen@>\datagidxnamewidth\relax
+              \datagidxnamewidth=\dimen@\relax
+           \fi
+         }%
+       }%
+       {}%
+    }%
+    \settowidth{\dimen@}{\DTLgidxPostName}%
+    \addtolength{\datagidxnamewidth}{\dimen@}%
+    \setlength{\datagidxdescwidth}{\linewidth}%
+    \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}%
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \item
+       \makebox[\linewidth]%
+       {%
+         \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+       }%
+       \DTLpar\nobreak\@afterheading
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \hangindent0pt\relax
+    \parindent0pt\relax
+    \makebox[\datagidxnamewidth][l]%
+    {%
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostName
+      }%
+    }%
+    \begin{minipage}[t]{\datagidxdescwidth}%
+     \setlength{\parskip}{0pt plus 0.3pt}%
+     \@tempswatrue
+     \ifdefempty{\Description}%
+     {%
+       \ifdefempty{\Symbol}%
+       {%
+         \ifdefempty{\Location}{\@tempswafalse}{}%
+       }%
+       {}%
+     }%
+     {}%
+     \if at tempswa
+       \DTLgidxSymbolDescription
+       \DTLgidxDoSeeOrLocation
+     \else
+       \mbox{}%
+     \fi
+     \DTLgidxChildrenSeeAlso
+    \end{minipage}%
+    \par
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+    \def\datagidx at childsep{}%
+    \setcounter{DTLgidxChildCount}{0}%
+  }%
+  \renewcommand{\datagidxchildend}{\DTLgidxPostChild\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \datagidx at childsep
+    \refstepcounter{DTLgidxChildCount}%
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxChildStyle
+      {%
+        \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+        \DTLgidxPostChildName
+      }%
+    }%
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+    \let\datagidx at childsep\DTLgidxChildSep
+  }%
+}
+\newcommand*{\DTLgidxChildSep}{ }
+\newcommand*{\DTLgidxPostChild}{}
+\ifdef\chapter
+{%
+  \newcommand\DTLgidxDictHead{%
+    \chapter{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+  }%
+}%
+{%
+  \newcommand\DTLgidxDictHead{%
+    \section{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}%
+  }%
+}
+\newcommand*{\DTLgidxCategoryNameFont}[1]{#1}
+\newcommand*{\DTLgidxCategorySep}{\space}
+\newcommand*{\DTLgidxSubCategorySep}{\space}
+\newcommand*{\datagidxdictindent}{1em}
+\newcommand{\DTLgidxDictPostItem}{\par}
+\newcommand*{\datagidx at style@dict}{%
+  \renewcommand*{\datagidxstart}%
+  {%
+    \bgroup
+    \setlength{\parindent}{0pt}%
+    \setlength{\parskip}{0pt plus 0.3pt}%
+    \dimen@=\linewidth
+    \advance\dimen@ by -\datagidxdictindent\relax
+    \dtl at tmplength=\datagidxdictindent\relax
+    \xdef\datagidxdictparshape{%
+      \noexpand\parshape=2 0pt \the\linewidth\space
+       \the\dtl at tmplength\space \the\dimen@\relax
+    }%
+    \datagidx at level=1\relax
+    \raggedright
+  }%
+  \renewcommand*{\datagidxend}{\egroup}%
+  \renewcommand*{\datagidxgroupsep}{}%
+  \renewcommand{\datagidxgroupheader}{%
+    \ifdatagidxshowgroups
+      \datagidxend
+      \datagidx at postend
+      \DTLgidxDictHead
+      \datagidx at prestart
+      \datagidxstart
+    \fi
+  }%
+  \renewcommand*{\datagidxitem}{%
+    \ifdefempty\datagidxprevgroup
+    {%
+      \datagidxgroupheader
+    }%
+    {%
+      \ifdefequal\datagidxcurrentgroup\datagidxprevgroup
+      {%
+      }%
+      {%
+        \datagidxgroupsep
+        \datagidxgroupheader
+      }%
+    }%
+    \datagidxdictparshape
+    \datagidxtarget{\Label}%
+    {%
+      \DTLgidxNameFont{\DTLgidxNameCase{\Name}}%
+    }%
+    \DTLgidxPostName
+    \let\datagidx at catsep\@empty
+    \let\datagidx at subcatsep\@empty
+    \DTLgidxSymbolDescription
+    \DTLgidxChildrenSeeAlso
+    \DTLgidxDictPostItem
+  }%
+  \renewcommand*{\datagidxchildstart}%
+  {%
+    \bgroup
+  }%
+  \renewcommand*{\datagidxchildend}{\egroup}%
+  \renewcommand*{\datagidxchilditem}{%
+    \ifnum\datagidx at level=2\relax
+      \datagidx at catsep
+      \let\datagidx at catsep\DTLgidxCategorySep
+      \let\datagidx at subcapsep\@empty
+      \datagidxtarget{\Label}%
+      {%
+        \DTLgidxChildStyle
+        {%
+          \DTLgidxCategoryNameFont{\DTLgidxNameCase{\Name}}%
+          \DTLgidxPostChildName
+        }%
+      }%
+      \setcounter{DTLgidxChildCount}{0}%
+    \else
+      \datagidx at subcatsep
+      \let\datagidx at subcatsep\DTLgidxSubCategorySep
+      \refstepcounter{DTLgidxChildCount}%
+      \DTLgidxChildCountLabel
+      \DTLgidxPostChildName
+    \fi
+    \DTLgidxSymbolDescription
+    \DTLgidxDoSeeOrLocation
+    \DTLgidxChildrenSeeAlso
+  }%
+  \renewcommand*{\datagidxseealsostart}%
+  {%
+    \bgroup
+      \setlength{\parindent}{0pt}%
+      \setlength{\parskip}{0pt plus 0.3pt}%
+      \setlength{\dimen@}{\datagidxindent}%
+      \advance\datagidx at level by 1\relax
+      \multiply\dimen@ by \datagidx at level\relax
+      \@idxitem\hspace*{\dimen@}%
+  }%
+  \renewcommand{\datagidxseealsoend}{\egroup}%
+}
+\newcommand*{\dtldofirstlocation}{%
+  \@for\dtl at thisloc:=\Location\do{%
+    \ifdefempty\dtl at thisloc
+    {}%
+    {%
+       \expandafter\datagidx at getlocation\dtl at thisloc
+       \datagidxlink{\datagidx at current@target}%
+       {%
+         \datagidx at formatlocation
+            \datagidx at current@format\datagidx at current@locationstring
+       }%
+      \@endfortrue
+    }%
+  }%
+}
+\newcommand*{\datagidx at formatlocation}[2]{%
+  \ifdefempty{#1}%
+  {#2}%
+  {%
+    \ifcsdef{#1}%
+    {%
+      \csuse{#1}{#2}%
+    }%
+    {%
+     \PackageWarning{datagidx}{Unknown format `#1'}%
+      #2%
+    }%
+  }%
+}
+\newcommand*{\dtldolocationlist}{%
+ \DTLifnull{\Location}%
+ {}%
+ {%
+    \def\datagidx at prev@location{-1}%
+    \def\datagidx at prev@locationstring{}%
+    \def\datagidx at prev@format{}%
+    \def\datagidx at prev@locationformat{}%
+    \def\datagidx at prev@prefix{}%
+    \def\datagidx at prev@target{}%
+    \def\datagidx at location@sep{}%
+    \def\datagidx at location@start{-1}%
+    \expandafter\forcsvlist\expandafter\datagidx at parse@location
+      \expandafter{\Location}%
+    \do at prevlocation % tidy up loose ends
+  }%
+}
+\newif\if at dtl@sequential
+\newcommand*\datagidx at getlocdo[1]{%
+  \ifdefempty\datagidx at current@location
+  {}%
+  {%
+    \eappto\datagidx at current@prefix{%
+      \datagidx at current@location\datagidx at compositor
+    }%
+  }%
+  \def\datagidx at current@location{#1}%
+}
+\def\datagidx at getlocation[#1]#2#3{%
+  \def\datagidx at current@locationstring{#2}%
+  \bgroup
+    \datagidx at escapelocationformat
+    \xdef\datagidx at current@locationformat{#2}%
+    \datagidx at clearlocationformat
+    \xdef\datagidx at current@location{#2}%
+  \egroup
+  \let\datagidx at list\datagidx at current@location
+  \def\datagidx at current@prefix{}%
+  \def\datagidx at current@location{}%
+  \let\do\datagidx at getlocdo
+  \expandafter\datagidx at docomplist
+   \expandafter{\datagidx at list}%
+  \def\datagidx at current@format{#1}%
+  \def\datagidx at current@target{#3}%
+}
+\newcommand*{\datagidx at parse@location}[1]{%
+  \datagidx at getlocation#1\relax
+  \ifdefequal{\datagidx at prev@locationstring}{\datagidx at current@locationstring}%
+  {%
+    \ifdefequal{\datagidx at prev@format}{\datagidx at current@format}%
+    {%
+    }%
+    {%
+      \ifdefempty{\datagidx at current@format}%
+      {%
+      }%
+      {%
+        \ifdefempty{\datagidx at prev@format}%
+        {%
+           \let\datagidx at prev@format\datagidx at current@format
+        }%
+        {%
+           \PackageWarning{datagidx}%
+           {%
+              Conflicting location formats `\datagidx at prev@format' and
+              `\datagidx at current@format' for location `\datagidx at current@location'%
+           }%
+        }%
+      }%
+    }%
+  }%
+  {%
+    \@datagidx at parse@location
+  }%
+}
+\newcommand*{\@datagidx at parse@location}{%
+  \@dtl at sequentialtrue
+  \ifdefequal{\datagidx at prev@format}{\datagidx at current@format}%
+  {%
+    \ifdefequal{\datagidx at prev@locationformat}{\datagidx at current@locationformat}%
+    {%
+      \ifdefequal{\datagidx at prev@prefix}{\datagidx at current@prefix}%
+      {%
+      }%
+      {%
+        \@dtl at sequentialfalse
+      }%
+    }%
+    {%
+      \@dtl at sequentialfalse
+    }%
+  }%
+  {%
+    \@dtl at sequentialfalse
+  }%
+  \if at dtl@sequential
+    \ifnumequal{\datagidx at prev@location+1}{\datagidx at current@location}%
+    {%
+       \ifdefequal
+         \datagidx at current@locationformat
+         \datagidx at prev@locationformat
+      {%
+        \@dtl at sequentialtrue
+      }%
+      {%
+             \@dtl at sequentialfalse
+      }%
+    }%
+    {%
+       \@dtl at sequentialfalse
+    }%
+  \fi
+  \if at dtl@sequential
+     \ifnumequal{\datagidx at location@start}{-1}%
+     {%
+       \let\datagidx at location@start\datagidx at prev@location
+       \let\datagidx at location@startval\datagidx at prev@locationstring
+       \let\datagidx at location@format\datagidx at prev@format
+       \let\datagidx at location@target\datagidx at prev@target
+     }%
+     {%
+     }%
+  \else
+    \do at prevlocation
+  \fi
+  \let\datagidx at prev@location\datagidx at current@location
+  \let\datagidx at prev@format\datagidx at current@format
+  \let\datagidx at prev@prefix\datagidx at current@prefix
+  \let\datagidx at prev@locationformat\datagidx at current@locationformat
+  \let\datagidx at prev@locationstring\datagidx at current@locationstring
+  \let\datagidx at prev@target\datagidx at current@target
+}
+\newcommand*{\DTLgidxLocationSep}{, }
+\newcommand*{\DTLgidxLocationF}[2]{%
+  #1\DTLgidxLocationSep#2%
+}
+\newcommand*{\DTLgidxLocationFF}[2]{%
+  #1--#2%
+}
+\newcommand*{\do at prevlocation}{%
+  \ifnumequal{\datagidx at location@start}{-1}%
+  {%
+     \ifdefempty{\datagidx at prev@locationstring}%
+     {}%
+     {%
+       \datagidx at location@sep
+       \datagidxlink{\datagidx at prev@target}%
+       {%
+         \datagidx at formatlocation
+           \datagidx at prev@format\datagidx at prev@locationstring
+       }%
+       \def\datagidx at location@sep{\DTLgidxLocationSep}%
+     }%
+  }%
+  {%
+    \datagidx at location@sep
+    \do at locrange
+    \def\datagidx at location@sep{\DTLgidxLocationSep}%
+    \def\datagidx at location@start{-1}%
+  }%
+}
+\newcommand*{\do at locrange}{%
+  \ifnumgreater{\datagidx at prev@location}{\datagidx at location@start+1}%
+  {%
+     \DTLgidxLocationFF
+       {%
+         \datagidxlink{\datagidx at location@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at location@format\datagidx at location@startval
+         }%
+       }%
+       {%
+         \datagidxlink{\datagidx at prev@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at prev@format\datagidx at prev@locationstring
+         }%
+       }%
+  }%
+  {%
+     \DTLgidxLocationF
+       {%
+         \datagidxlink{\datagidx at location@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at location@format\datagidx at location@startval
+         }%
+       }%
+       {%
+         \datagidxlink{\datagidx at prev@target}%
+         {%
+           \datagidx at formatlocation
+             \datagidx at prev@format\datagidx at prev@locationstring
+         }%
+       }%
+  }%
+}
+\newcommand*{\datagidx at defaultdatabase}{}
+\newcommand*{\DTLgidxSetDefaultDB}[1]{%
+  \renewcommand*{\datagidx at defaultdatabase}{#1}%
+}
+\define at key{newgloss}{heading}{\renewcommand*{\datagidx at heading}{#1}}
+\define at key{newgloss}{postheading}{%
+  \renewcommand*{\datagidx at postheading}{#1}%
+}
+\newif\ifdatagidxbalance
+\datagidxbalancetrue
+\define at choicekey{newgloss}{balance}[\val\nr]{true,false}[true]{%
+ \ifcase\nr\relax
+   \renewcommand*{\datagidx at multicols}{multicols}%
+   \datagidxbalancetrue
+ \or
+   \renewcommand*{\datagidx at multicols}{multicols*}%
+   \datagidxbalancefalse
+ \fi
+}
+\define at key{newgloss}{sort}{\renewcommand*{\datagidx at sort}{#1}}
+\newcommand*{\datagidx at style}{index}
+\define at key{newgloss}{style}{\renewcommand*{\datagidx at style}{#1}}
+\newif\ifdatagidxshowgroups
+\newcommand*{\datagidx at showgroups}{false}
+\define at choicekey{newgloss}{showgroups}{true,false}[true]%
+{%
+  \renewcommand{\datagidx at showgroups}{#1}%
+}%
+\ifundef\newgidx
+{%
+  \newcommand*{\newgidx}{\datagidx at newgidx}
+}%
+{}
+\@onlypreamble\newgidx
+\newcommand*{\datagidx at highopt@newgidx}[3][]{%
+  \edef\datagidx at indexfilename{\datagidxhighoptfilename{#2}}%
+  \IfFileExists{\datagidx at indexfilename}%
+  {%
+    \input{\datagidx at indexfilename}%
+    \bgroup
+      \setkeys{newgloss}{#1}%
+      \datagidx at newgidx@update{#2}{#3}%
+    \egroup
+  }%
+  {%
+    \datagidx at newgidx[#1]{#2}{#3}%
+  }%
+}
+\newcommand*{\loadgidx}[3][]{%
+  \input{#2}%
+  \bgroup
+    \setkeys{newgloss}{sort={},#1}%
+    \expandafter\datagidx at newgidx@update\expandafter
+      {\dtllastloadeddb}{#3}%
+  \egroup
+  \edef\datagidx at defaultdatabase{\dtllastloadeddb}%
+  \dtlforcolumn{\Label}{\dtllastloadeddb}{Label}%
+  {%
+     \csxdef{datagidxentry@\Label}{\dtllastloadeddb}%
+  }%
+}
+\@onlypreamble\loadgidx
+\newcommand*{\datagidx at newgidx}[3][]{%
+\bgroup
+  \setkeys{newgloss}{#1}%
+  \ifdefempty{\datagidx at defaultdatabase}%
+  {\xdef\datagidx at defaultdatabase{#2}}%
+  {}%
+  \DTLgnewdb{#2}%
+  \DTLaddcolumn{#2}{Label}%
+  \DTLaddcolumn{#2}{Location}%
+  \DTLaddcolumn{#2}{CurrentLocation}%
+  \DTLaddcolumn{#2}{FirstId}%
+  \DTLaddcolumn{#2}{Name}%
+  \DTLaddcolumn{#2}{Text}%
+  \DTLaddcolumn{#2}{Parent}%
+  \DTLaddcolumn{#2}{Child}%
+  \DTLaddcolumn{#2}{Description}%
+  \DTLaddcolumn{#2}{Used}%
+  \DTLaddcolumn{#2}{Symbol}%
+  \DTLaddcolumn{#2}{Long}%
+  \DTLaddcolumn{#2}{Short}%
+  \DTLaddcolumn{#2}{See}%
+  \DTLaddcolumn{#2}{SeeAlso}%
+  \datagidx at newgidx@update{#2}{#3}%
+\egroup
+}
+\newcommand*{\datagidx at newgidx@update}[2]{%
+  \DTLnewrow{datagidx}%
+  \DTLnewdbentry{datagidx}{Glossary}{#1}%
+  \DTLnewdbentry{datagidx}{Title}{#2}%
+  {%
+    \dtlexpandnewvalue
+    \DTLnewdbentry{datagidx}{Heading}{\expandonce\datagidx at heading}%
+    \DTLnewdbentry{datagidx}{PostHeading}{\expandonce\datagidx at postheading}%
+    \DTLnewdbentry{datagidx}{MultiCols}{\expandonce\datagidx at multicols}%
+    \DTLnewdbentry{datagidx}{Sort}{\expandonce\datagidx at sort}%
+    \DTLnewdbentry{datagidx}{Style}{\expandonce\datagidx at style}%
+    \DTLnewdbentry{datagidx}{ShowGroups}{\expandonce\datagidx at showgroups}%
+  }%
+}
+\newcommand*{\newterm at label}{}
+\define at key{newterm}{label}{\renewcommand*{\newterm at label}{#1}}
+\newcommand*{\newterm at parent}{}
+\define at key{newterm}{parent}{\renewcommand*{\newterm at parent}{#1}}
+\newcommand*{\newterm at text}{}
+\define at key{newterm}{text}{\renewcommand*{\newterm at text}{#1}}
+\newcommand*{\newterm at description}{}
+\define at key{newterm}{description}{%
+  \renewcommand*{\newterm at description}{#1}%
+}
+\define at key{newterm}{plural}{\def\newterm at plural{#1}}
+\newcommand*{\newterm at sort}{}
+\define at key{newterm}{sort}{\renewcommand*{\newterm at sort}{#1}}
+\newcommand*{\newterm at symbol}{}
+\define at key{newterm}{symbol}{\renewcommand*{\newterm at symbol}{#1}}
+\newcommand*{\newterm at database}{}
+\define at key{newterm}{database}{\renewcommand*{\newterm at database}{#1}}
+\newcommand*{\newterm at long}{}
+\define at key{newterm}{long}{%
+  \renewcommand*{\newterm at long}{#1}%
+  \def\newterm at longplural{#1s}%
+}
+\newcommand*{\newterm at short}{}
+\define at key{newterm}{short}{%
+  \renewcommand*{\newterm at short}{#1}%
+  \def\newterm at shortplural{#1s}%
+}
+\define at key{newterm}{longplural}{%
+  \def\newterm at longplural{#1}%
+}
+\define at key{newterm}{shortplural}{%
+  \def\newterm at shortplural{#1}%
+}
+\newcommand*{\newterm at see}{}
+\define at key{newterm}{see}{%
+  \renewcommand*{\newterm at see}{#1}%
+}
+\newcommand*{\newterm at seealso}{}
+\define at key{newterm}{seealso}{%
+  \renewcommand*{\newterm at seealso}{#1}%
+}
+\newcommand*{\newterm at defaultshook}{}
+\newcommand*{\newterm at extrafields}{}
+\newcommand*{\DTLgidxAssignList}{%
+  \Name=Name,\Description=Description,\Used=Used,\Symbol=Symbol,%
+  \Long=Long,\Short=Short,\LongPlural=LongPlural,\ShortPlural=ShortPlural,%
+  \Location=Location,\See=See,\SeeAlso=SeeAlso,%
+  \Text=Text,\Plural=Plural,\CurrentLocation=CurrentLocation,%
+  \Label=Label,\Parent=Parent,\Children=Child,\FirstId=FirstId,\Sort=Sort%
+}
+\newcommand*{\datagidxtermkeys}{%
+  name,description,symbol,long,short,see,seealso,text,plural,%
+  label,parent,sort%
+}
+\newcommand*\@datagidx at fieldkey@Name{name}%
+\newcommand*\@datagidx at fieldkey@Description{description}%
+\newcommand*\@datagidx at fieldkey@Symbol{symbol}%
+\newcommand*\@datagidx at fieldkey@Long{long}%
+\newcommand*\@datagidx at fieldkey@Short{short}%
+\newcommand*\@datagidx at fieldkey@See{see}%
+\newcommand*\@datagidx at fieldkey@SeeAlso{seealso}%
+\newcommand*\@datagidx at fieldkey@Text{text}%
+\newcommand*\@datagidx at fieldkey@Plural{plural}%
+\newcommand*\@datagidx at fieldkey@Label{label}%
+\newcommand*\@datagidx at fieldkey@Parent{parent}%
+\newcommand*\@datagidx at fieldkey@Sort{sort}%
+\newcommand*{\newtermaddfield}[4][]{%
+  \ifstrempty{#1}%
+  {%
+    \dtlforcolumn{\datagidx at thisidx}{datagidx}{Glossary}%
+    {%
+      \DTLaddcolumn{\datagidx at thisidx}{#2}%
+    }%
+  }%
+  {%
+    \@for\datagidx at thisidx:=#1\do
+    {%
+      \DTLaddcolumn{\datagidx at thisidx}{#2}%
+    }%
+  }%
+  \expandafter\gdef\csname newterm@#3\endcsname{}%
+  \define at key{newterm}{#3}%
+  {%
+    \expandafter\def\csname newterm@#3\endcsname{##1}%
+  }%
+  \gappto\newterm at defaultshook
+  {%
+    \expandafter\protected at edef\csname newterm@#3\endcsname{#4}%
+  }%
+  \gappto\newterm at extrafields
+  {%
+     \protected at edef\datagidx at value{\csname newterm@#3\endcsname}%
+     \DTLnewdbentry{\newterm at database}{#2}{\expandonce\datagidx at value}%
+  }%
+  \xappto\DTLgidxAssignList
+  {%
+    ,\expandafter\noexpand\csname#2\endcsname=#2%
+  }%
+  \xappto\datagidxtermkeys{,#3}%
+  \expandafter\xdef\csname @datagidx at fieldkey@#2\endcsname{#3}%
+  \xappto\datagidxgetchildfields
+  {%
+    \noexpand\dtlgetentryfromcurrentrow
+     {\expandafter\noexpand\csname#2\endcsname}%
+     {\noexpand\dtlcolumnindex{\noexpand\DTLgidxCurrentdb}{#2}}%
+  }%
+}
+\newcommand*{\newtermlabelhook}{}
+\newcommand*{\DTLgidxNoFormat}[1]{#1}
+\newcommand*{\DTLgidxGobble}[1]{}
+\newcommand*{\DTLgidxStripBackslash}[1]{%
+  \expandafter\@gobble\string#1%
+}
+\newcommand*{\DTLgidxName}[2]{%
+  #1\space #2%
+}
+\newcommand*{\DTLgidxNameNum}[1]{\@Roman{#1}}
+\newcommand*{\datagidx at namenum}[1]{\two at digits{#1}}
+\newcommand*{\DTLgidxPlace}[2]{%
+  #2%
+}
+\newcommand*{\DTLgidxSubject}[2]{%
+  #2%
+}
+\newcommand*{\DTLgidxOffice}[2]{%
+  #2 (#1)%
+}
+\newcommand*{\DTLgidxIgnore}[1]{#1}
+\newcommand*{\DTLgidxMac}[1]{#1}
+\newcommand*{\datagidx at mac}[1]{Mac}
+\newcommand*{\DTLgidxSaint}[1]{#1}
+\newcommand*{\datagidx at saint}[1]{Saint}
+\newcommand*{\DTLgidxRank}[2]{#1~#2}
+\newcommand*{\datagidx at rank}[2]{#2.}
+\newcommand*{\DTLgidxParticle}[2]{#1~#2}
+\newcommand*{\datagidx at particle}[2]{#2.}
+\newcommand*{\datagidx at bothoftwo}[2]{#1#2}
+\newcommand*{\datagidx at person}[2]{#2\noexpand\datatoolpersoncomma #1}
+\newcommand*{\datagidx at place}[2]{#2\noexpand\datatoolplacecomma #1}
+\newcommand*{\datagidx at subject}[2]{#2\noexpand\datatoolsubjectcomma #1}
+\newcommand*{\datagidx at paren}[1]{\noexpand\datatoolparenstart #1}
+\newcommand*{\datagidx at invert}[2]{#2, #1}
+\newcommand*{\DTLgidxParen}[1]{\space(#1)}
+\newcommand*{\datagidxwordifygreek}{%
+  \def\alpha{alpha}%
+  \def\beta{beta}%
+  \def\gamma{gamma}%
+  \def\delta{delta}%
+  \def\epsilon{epsilon}%
+  \def\varepsilon{epsilon}%
+  \def\zeta{zeta}%
+  \def\eta{eta}%
+  \def\theta{theta}%
+  \def\vartheta{theta}%
+  \def\iota{iota}%
+  \def\kappa{kappa}%
+  \def\lambda{lambda}%
+  \def\mu{mu}%
+  \def\nu{nu}%
+  \def\xi{xi}%
+  \def\pi{pi}%
+  \def\varpi{pi}%
+  \def\rho{rho}%
+  \def\varrho{rho}%
+  \def\sigma{sigma}%
+  \def\varsigma{sigma}%
+  \def\tau{tau}%
+  \def\upsilon{upsilon}%
+  \def\phi{phi}%
+  \def\varphi{phi}%
+  \def\chi{chi}%
+  \def\psi{psi}%
+  \def\omega{omega}%
+  \def\Gamma{Gamma}%
+  \def\Delta{Delta}%
+  \def\Theta{Theta}%
+  \def\Lambda{Lambda}%
+  \def\Xi{Xi}%
+  \def\Pi{Pi}%
+  \def\Sigma{Sigma}%
+  \def\Upsilon{Upsilon}%
+  \def\Phi{Phi}%
+  \def\Psi{Psi}%
+  \def\Omega{Omega}%
+}
+\newcommand{\datagidxextendedtoascii}{%
+  \def\AE{AE}%
+  \def\ae{ae}%
+  \def\OE{OE}%
+  \def\oe{oe}%
+  \def\AA{AA}%
+  \def\aa{aa}%
+  \def\L{L}%
+  \def\l{l}%
+  \def\O{O}%
+  \def\o{o}%
+  \def\SS{SS}%
+  \def\ss{ss}%
+  \def\th{th}%
+  \def\TH{TH}%
+  \def\dh{dh}%
+  \def\DH{DH}%
+}
+\newcommand*{\datagidxconvertchars}{%
+  \let~\space
+  \ifdef\andname
+  {%
+    \let\&\andname
+  }%
+  {%
+    \def\&{\expandafter\@gobble\string\&}%
+  }%
+  \def\_{\string_}%
+  \def\${\string$}%
+  \def\#{\expandafter\@gobble\string\#}%
+  \def\%{\expandafter\@gobble\string\%}%
+  \def\{{\expandafter\@gobble\string\{}%
+  \def\}{\expandafter\@gobble\string\}}%
+}
+\@ifl at t@r\fmtversion{2019/10/01}
+{%
+  \newcommand*{\datagidxstripaccents}{%
+   \let\add at accent@\@secondoftwo
+   \let\@text at composite@x\@secondoftwo
+   \let\@tabacckludge\@secondoftwo
+   \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}%
+   \def\IeC##1{\@gobbletwo##1}%
+   \let\UTFviii at two@octets\UTFviii at two@octets at combine
+  }%
+}
+{%
+  \newcommand*{\datagidxstripaccents}{%
+   \let\add at accent@\@secondoftwo
+   \let\@text at composite@x\@secondoftwo
+   \let\@tabacckludge\@secondoftwo
+   \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}%
+   \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}%
+   \def\IeC##1{\@gobbletwo##1}%
+  }%
+}
+\providecommand{\newterm}{\datagidx at newterm}
+\@onlypreamble\newterm
+\newcommand{\datagidx at setfieldvalues}[2]{%
+ \def\newterm at name{#2}%
+ \renewcommand*\newterm at label{#2}%
+ \renewcommand*\newterm at text{#2}%
+ \undef\newterm at plural
+ \renewcommand*{\newterm at description}{}%
+ \renewcommand*{\newterm at sort}{#2}%
+ \renewcommand*{\newterm at symbol}{}%
+ \let\newterm at database\datagidx at defaultdatabase
+ \renewcommand*{\newterm at short}{#2}%
+ \undef\newterm at shortplural
+ \renewcommand*{\newterm at long}{#2}%
+ \undef\newterm at longplural
+ \renewcommand*{\newterm at see}{}%
+ \renewcommand*{\newterm at seealso}{}%
+ \renewcommand*{\newterm at parent}{}%
+ \let\datagidx at orgfield\field
+ \def\field##1{\expandafter\noexpand\csname newterm@##1\endcsname}%
+ \newterm at defaultshook
+ \let\field\datagidx at orgfield
+ \setkeys{newterm}{#1}%
+ \bgroup
+   \let\glsadd\@gobble
+   \let\MakeUppercase\DTLgidxNoFormat
+   \let\MakeTextUppercase\DTLgidxNoFormat
+   \let\MakeLowercase\DTLgidxNoFormat
+   \let\MakeTextLowercase\DTLgidxNoFormat
+   \let\acronymfont\DTLgidxNoFormat
+   \let\textrm\DTLgidxNoFormat
+   \let\texttt\DTLgidxNoFormat
+   \let\textsf\DTLgidxNoFormat
+   \let\textsc\DTLgidxNoFormat
+   \let\textbf\DTLgidxNoFormat
+   \let\textmd\DTLgidxNoFormat
+   \let\textit\DTLgidxNoFormat
+   \let\textsl\DTLgidxNoFormat
+   \let\emph\DTLgidxNoFormat
+   \let\textsuperscript\DTLgidxNoFormat
+  \datagidxconvertchars
+   \let\ensuremath\DTLgidxNoFormat
+   \let\DTLgidxParen\@gobble
+   \let\DTLgidxName\@secondoftwo
+   \let\DTLgidxPlace\datagidx at invert
+   \let\DTLgidxSubject\datagidx at invert
+   \let\DTLgidxOffice\@secondoftwo
+   \let\DTLgidxParticle\datagidx at bothoftwo
+   \datagidxwordifygreek
+   \datagidxstripaccents
+   \datagidxextendedtoascii
+   \newtermlabelhook
+   \protected at xdef\newterm at label{\newterm at label}%
+   \let\DTLgidxName\datagidx at person
+   \let\DTLgidxPlace\datagidx at place
+   \let\DTLgidxSubject\datagidx at subject
+   \let\DTLgidxOffice\datagidx at person
+   \let\DTLgidxParen\datagidx at paren
+   \let\DTLgidxMac\datagidx at mac
+   \let\DTLgidxSaint\datagidx at saint
+   \let\DTLgidxIgnore\@gobble
+   \let\DTLgidxRank\datagidx at rank
+   \let\DTLgidxParticle\datagidx at particle
+   \let\DTLgidxNameNum\datagidx at namenum
+   \protected at xdef\newterm at sort{\newterm at sort}%
+ \egroup
+}
+\newcommand*{\datagidx at add@term}[1]{%
+  \global\cslet{datagidxentry@\newterm at label}{\newterm at database}%
+  \DTLnewrow{\newterm at database}%
+  \DTLnewdbentry{\newterm at database}{Name}{#1}%
+  \DTLnewdbentry{\newterm at database}{Used}{0}%
+  {%
+    \dtlexpandnewvalue
+    \DTLnewdbentry{\newterm at database}{Text}{\expandonce\newterm at text}%
+    \DTLnewdbentry{\newterm at database}{Description}{\expandonce\newterm at description}%
+    \DTLnewdbentry{\newterm at database}{Label}{\expandonce\newterm at label}%
+    \DTLnewdbentry{\newterm at database}{Sort}{\expandonce\newterm at sort}%
+    \DTLnewdbentry{\newterm at database}{Symbol}{\expandonce\newterm at symbol}%
+    \DTLnewdbentry{\newterm at database}{Short}{\expandonce\newterm at short}%
+    \DTLnewdbentry{\newterm at database}{Long}{\expandonce\newterm at long}%
+    \ifundef\newterm at plural
+    {%
+      \DTLnewdbentry{\newterm at database}{Plural}{\expandonce\newterm at text s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{Plural}{\expandonce\newterm at plural}%
+    }%
+    \ifundef\newterm at shortplural
+    {%
+      \DTLnewdbentry{\newterm at database}{ShortPlural}{\expandonce\newterm at short s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{ShortPlural}{\expandonce\newterm at shortplural}%
+    }%
+    \ifundef\newterm at longplural
+    {%
+      \DTLnewdbentry{\newterm at database}{LongPlural}{\expandonce\newterm at long s}%
+    }%
+    {%
+      \DTLnewdbentry{\newterm at database}{LongPlural}{\expandonce\newterm at longplural}%
+    }%
+    \ifdefempty{\newterm at see}%
+     {}%
+     {\DTLnewdbentry{\newterm at database}{See}{\newterm at see}}%
+    \ifdefempty{\newterm at seealso}%
+     {}%
+     {\DTLnewdbentry{\newterm at database}{SeeAlso}{\newterm at seealso}}%
+    \newterm at extrafields
+    \ifdefempty{\newterm at parent}%
+     {}%
+     {%
+       \iftermexists{\newterm at parent}%
+       {%
+         \edef\newterm at parentdatabase{\csuse{datagidxentry@\newterm at parent}}%
+         \ifthenelse{\equal{\newterm at parentdatabase}{\newterm at database}}
+         {%
+           \DTLnewdbentry{\newterm at database}{Parent}{\newterm at parent}%
+           \datagidx at addchild{\newterm at database}{\newterm at parent}{\newterm at label}%
+         }%
+         {%
+           \PackageError{datagidx}%
+           {%
+             Parent entry `\newterm at parent' must belong to the
+             same database as child entry `\newterm at label'%
+           }%
+           {%
+             Parent entry is in database
+             `\newterm at parentdatabase' and child entry is in
+             database `\newterm at database'%
+           }%
+         }%
+       }%
+       {%
+         \PackageError{datagidx}%
+         {%
+            Can't assign parent to `\newterm at label':
+            `\newterm at parent' doesn't exist%
+         }%
+         {}%
+       }%
+     }%
+  }%
+  \global\let\datagidxlastlabel\newterm at label
+  \postnewtermhook
+}%
+\newcommand*{\postnewtermhook}{}
+\newcommand*{\newtermfield}[1]{\csuse{newterm@#1}}
+\newcommand{\ifnewtermfield}[3]{%
+  \ifcsdef{newterm@#1}
+  {%
+    \ifcsempty{newterm@#1}{#3}{#2}%
+  }%
+  {%
+    #3%
+  }%
+}
+\newcommand{\datagidx at newterm}[2][]{%
+  \datagidx at setfieldvalues{#1}{#2}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \iftermexists{\newterm at label}%
+    {%
+      \PackageError{datagidx}{Term `\newterm at label' already
+        exists in database `\newterm at database'}{}%
+    }%
+    {%
+       \datagidx at add@term{#2}%
+    }%
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      add any terms to it.%
+    }%
+  }%
+}
+\newcommand{\datagidx at highopt@newterm}[2][]{%
+  \datagidx at setfieldvalues{#1}{#2}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \edef\dtl at dogetrow{%
+      \noexpand\dtlgetrowindex
+      {\noexpand\dtl at rowidx}%
+      {\newterm at database}%
+      {%
+        \dtlcolumnindex{\newterm at database}{Label}%
+      }%
+      {\newterm at label}}%
+    \dtl at dogetrow
+    \ifx\dtl at rowidx\dtlnovalue
+       \datagidx at add@term{#2}%
+       \csdef{datagidx at do@highopt at sort@\newterm at database}{\datagidx at sort}%
+    \else
+      \global\cslet{datagidxentry@\newterm at label}{\newterm at database}%
+      \global\let\datagidxlastlabel\newterm at label
+    \fi
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      add any terms to it.%
+    }%
+  }%
+}
+\newcommand*{\datagidx at addchild}[3]{%
+  \edef\dtl at dogetrow{%
+    \noexpand\dtlgetrowforvalue
+    {#1}%
+    {%
+      \dtlcolumnindex{\newterm at database}{Label}%
+    }%
+    {#2}}%
+  \dtl at dogetrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at child}%
+    {\dtlcolumnindex{#1}{Child}}%
+  \ifx\datagidx at child\dtlnovalue
+    \edef\datagidx at child{#3}%
+  \else
+    \edef\datagidx at child{\datagidx at child,#3}%
+  \fi
+  \edef\do at update{\noexpand\dtlupdateentryincurrentrow
+    {Child}{\datagidx at child}}%
+  \do at update
+  \dtlrecombine
+}
+\newcommand{\newacro}[3][]{%
+  \newterm
+    [%
+      description={\capitalisewords{#3}},%
+      short={\acronymfont{#2}},%
+      long={#3},%
+      text={\DTLgidxAcrStyle{#3}{\acronymfont{#2}}},%
+      plural={\DTLgidxAcrStyle{#3s}{\acronymfont{#2s}}},%
+      sort={#2},%
+      #1%
+    ]%
+    {\MakeTextUppercase{#2}}%
+}
+\newcommand*{\acronymfont}[1]{#1}
+\newcommand*{\DTLgidxAcrStyle}[2]{#1 (#2)}
+\newcommand{\iftermexists}[3]{%
+  \ifcsdef{datagidxentry@#1}{#2}{#3}%
+}
+\newcommand*{\datagidxdb}[1]{%
+  \csuse{datagidxentry@#1}%
+}
+\newcommand*{\ifentryused}[3]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\dtl at dogetrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {%
+      \dtlcolumnindex{\newterm at database}{Label}%
+    }%
+    {#1}}%
+  \dtl at dogetrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at value}%
+    {\dtlcolumnindex{\newterm at database}{Used}}%
+  \ifnum\datagidx at value=1\relax
+    #2%
+  \else
+    #3%
+  \fi
+}
+\newcommand*{\glsreset}[1]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#1}%
+  }%
+  \do at getrow
+  \dtlreplaceentryincurrentrow
+    {0}{\dtlcolumnindex{\newterm at database}{Used}}%
+  \dtlrecombine
+}
+\newcommand*{\glsunset}[1]{%
+  \letcs{\newterm at database}{datagidxentry@#1}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#1}%
+  }%
+  \do at getrow
+  \dtlreplaceentryincurrentrow
+    {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+  \dtlrecombine
+}
+\newcommand*{\glsresetall}[1]{%
+  \def\datagidx at list{}%
+  \dtlforcolumn{\datagidx at label}{#1}{Label}%
+  {%
+    \ifdefempty\datagidx at list
+    {%
+      \let\datagidx at list\datagidx at label
+    }%
+    {%
+      \eappto\datagidx at list{,\datagidx at label}%
+    }%
+  }%
+  \@for\datagidx at thislabel:=\datagidx at list\do
+  {%
+    \glsreset{\datagidx at thislabel}%
+  }%
+}
+\newcommand*{\glsunsetall}[1]{%
+  \def\datagidx at list{}%
+  \dtlforcolumn{\datagidx at label}{#1}{Label}%
+  {%
+    \ifdefempty\datagidx at list
+    {%
+      \let\datagidx at list\datagidx at label
+    }%
+    {%
+      \eappto\datagidx at list{,\datagidx at label}%
+    }%
+  }%
+  \@for\datagidx at thislabel:=\datagidx at list\do
+  {%
+    \glsunset{\datagidx at thislabel}%
+  }%
+}
+\newcount\datagidx at anchorcount
+\newcommand*{\datagidx at formatanchor}[1]{%
+  \ifnum#1<10000
+   0%
+    \ifnum#1<1000
+     0%
+      \ifnum#1<100
+       0%
+        \ifnum#1<10
+         0%
+        \fi
+      \fi
+    \fi
+  \fi
+  \number#1%
+}
+\newcommand*{\@datagidx at escloc}[2]{%
+  \expandafter\string\csname#1\endcsname{\noexpand\number#2}%
+}
+\newcommand*{\datagidx at escapelocation}{%
+  \def\@arabic{\@datagidx at escloc{@arabic}}%
+  \def\@roman{\@datagidx at escloc{@roman}}%
+  \def\@Roman{\@datagidx at escloc{@Roman}}%
+  \def\@alph{\@datagidx at escloc{@alph}}%
+  \def\@Alph{\@datagidx at escloc{@Alph}}%
+}
+\newcommand*{\datagidx at escapelocationformat}{%
+  \def\@arabic##1{arabic}%
+  \def\@roman##1{roman}%
+  \def\@Roman##1{Roman}%
+  \def\@alph##1{alph}%
+  \def\@Alph##1{Alph}%
+}
+\newcommand*{\datagidx at clearlocationformat}{%
+  \let\@arabic\@firstofone
+  \let\@roman\@firstofone
+  \let\@Roman\@firstofone
+  \let\@alph\@firstofone
+  \let\@Alph\@firstofone
+}
+\newcommand*{\DTLgidxAddLocationType}[1]{%
+  \gappto\datagidx at escapelocation{%
+    \expandafter\def\csname#1\endcsname{\@datagidx at escloc{#1}}%
+  }%
+  \gappto\datagidx at escapelocationformat{%
+    \expandafter\def\csname#1\endcsname##1{#1}%
+  }%
+  \gappto\datagidx at clearlocationformat{%
+    \expandafter\let\csname#1\endcsname\@firstofone
+  }%
+}
+\@onlypreamble\DTLgidxAddLocationType
+\newcommand*{\datagidx at target}[4]{%
+  \global\advance\datagidx at anchorcount by 1\relax
+  \edef\@datagidx at target{datagidx.\datagidx at formatanchor\datagidx at anchorcount}%
+  \ifstrempty{#3}
+  {%
+    \datagidx at write@usedentry{#1}{}%
+  }%
+  {%
+    \bgroup
+      \datagidx at escapelocation
+      \def\@arabic{\noexpand\@arabic}%
+      \def\@roman{\noexpand\@roman}%
+      \def\@Roman{\noexpand\@Roman}%
+      \def\@alph{\noexpand\@alph}%
+      \def\@Alph{\noexpand\@Alph}%
+      \protected at edef\@datagidx at dowriteaux{%
+         \noexpand\datagidx at write@usedentry{#1}%
+              {[#2]{#3}{\@datagidx at target}}%
+      }%
+      \@datagidx at dowriteaux
+    \egroup
+  }%
+  \ifdef\hypertarget
+  {%
+    \datagidxshowifdraft
+    {%
+      [\@datagidx at target]%
+      \discretionary{}{}{}%
+    }%
+    \bgroup
+      \let\glsadd\@gobble
+      \settoheight\dimen@{#4}%
+      \raisebox{\dimen@}%
+      {%
+        \datagidxtarget{\@datagidx at target}{}%
+      }%
+    \egroup
+  }%
+  {%
+  }%
+  \datagidxshowifdraft{[#1]\discretionary{}{}{}}%
+  #4%
+}
+\DeclareRobustCommand*{\glsdispentry}[2]{%
+  \DTLgidxFetchEntry{\datagidx at dispentryval}{#1}{#2}%
+  \datagidx at dispentryval
+}
+\DeclareRobustCommand*{\Glsdispentry}[2]{%
+  \DTLgidxFetchEntry{\datagidx at dispentryval}{#1}{#2}%
+  \xmakefirstuc\datagidx at dispentryval
+}
+\newcommand*{\DTLgidxFetchEntry}[3]{%
+  \ifcsdef{datagidxentry@#2}%
+  {%
+  \letcs{\newterm at database}{datagidxentry@#2}%
+  \edef\do at getrow{%
+    \noexpand\dtlgetrowforvalue
+    {\newterm at database}%
+    {\dtlcolumnindex{\newterm at database}{Label}}%
+    {#2}%
+  }%
+  \do at getrow
+  \dtlgetentryfromcurrentrow
+    {#1}%
+    {\dtlcolumnindex{\newterm at database}{#3}}%
+  }%
+  {%
+    \PackageError{datagidx}{No term `#2' defined}{}%
+  }%
+}
+\newcommand*{\datagidx at parse@formatlabel}[1]{%
+  \datagidx at parse@format at label@#1\@endparse at formatlabel@
+}
+\newcommand*\datagidx at parse@format at label@{%
+  \@ifnextchar[{\datagidx at parse@formatlabel@}{\datagidx at parse@formatlabel@[]}%
+}
+\def\datagidx at parse@formatlabel@[#1]#2\@endparse at formatlabel@{%
+  \def\datagidx at format{#1}%
+  \def\datagidx at label{#2}%
+}
+\newcommand*{\@datagidx at use@entry}[1]{%
+  \ifcsundef{datagidxentry@\datagidx at label}
+  {%
+    \PackageError{datagidx}{Entry `\datagidx at label' doesn't exist}{}%
+  }%
+  {%
+    \letcs{\newterm at database}{datagidxentry@\datagidx at label}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {\datagidx at label}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at id}%
+      {\dtlcolumnindex{\newterm at database}{FirstId}}%
+    \DTLifnull\datagidx at id
+    {%
+      \count@=\datagidx at anchorcount\relax
+      \advance\count@ by 1\relax
+      \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\count@}%
+    }%
+    {}%
+    \dtlreplaceentryincurrentrow
+      {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at parent}%
+      {\dtlcolumnindex{\newterm at database}{Parent}}%
+    \dtlrecombine
+    \datagidx at markparent{\newterm at database}{\datagidx at parent}%
+    \datagidx at target{\datagidx at label}{\datagidx at format}%
+      {\csuse{the\DTLgidxCounter}}{#1}%
+  }%
+}
+\newcommand*{\DTLgidxCounter}{page}
+\newcommand*{\datagidx at markparent}[2]{%
+  \ifx#2\dtlnovalue
+  \else
+    \datagidx at target{#2}{}{}{}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {#1}%
+      {\dtlcolumnindex{#1}{Label}}%
+      {#2}}%
+    \do at getrow
+  \dtlgetentryfromcurrentrow
+    {\datagidx at id}%
+    {\dtlcolumnindex{\newterm at database}{FirstId}}%
+  \DTLifnull\datagidx at id
+  {%
+    \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+  }%
+  {}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at parent}%
+      {\dtlcolumnindex{#1}{Parent}}%
+  \dtlrecombine
+    \datagidx at markparent{#1}{\datagidx at parent}%
+  \fi
+}
+\newcommand*{\datagidx at write@usedentry}[2]{%
+  \datagidx at do@highopt at update{#1}%
+  \protected at write{\@auxout}{}%
+    {%
+      \string\datagidx at usedentry{#1}{#2}%
+    }%
+  \protected at edef\datagidx at do@usedentry{%
+    \noexpand\datagidx at xusedentry{CurrentLocation}{#1}{#2}%
+  }%
+  \expandafter\ifstrequal\expandafter{\DTLgidxCounter}{page}%
+  {%
+     \expandafter\afterpage\expandafter{\datagidx at do@usedentry}%
+  }%
+  {
+    \datagidx at do@usedentry
+  }%
+}
+\newcommand*{\datagidx at xusedentry}[3]{%
+  \protected at edef\@datagidx at do@xusedentry{%
+     \noexpand\datagidx at usedentry[#1]{#2}{#3}%
+  }%
+  \@datagidx at do@xusedentry
+}
+\newcommand*{\datagidx at usedentry}[3][Location]{%
+  \ifcsundef{datagidxentry@#2}%
+  {%
+    \PackageWarning{datagidx}{No term `#2' defined. Ignoring}%
+  }%
+  {%
+    \letcs{\newterm at database}{datagidxentry@#2}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {#2}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at loc}%
+      {\dtlcolumnindex{\newterm at database}{#1}}%
+    \ifx\datagidx at loc\dtlnovalue
+      \def\datagidx at loc{#3}%
+      \dtlappendentrytocurrentrow{#1}{\expandonce\datagidx at loc}%
+    \else
+      \ifdefempty{\datagidx at loc}%
+      {%
+        \def\datagidx at loc{#3}%
+      }%
+      {%
+        \ifstrempty{#3}%
+        {}%
+        {%
+          \appto\datagidx at loc{,#3}%
+        }%
+      }%
+      \expandafter\dtlreplaceentryincurrentrow\expandafter
+        {\datagidx at loc}%
+        {\dtlcolumnindex{\newterm at database}{#1}}%
+    \fi
+    \dtlrecombine
+  }%
+}
+\newcommand*{\datagidx at save@loc}[2]{%
+ \bgroup
+  \datagidx at escapelocation
+  \xdef\datagidx at tmp{#2}%
+ \egroup
+ \expandafter\xdef\csname datagidx at prev@loc@#1\endcsname{\datagidx at tmp}%
+}
+\newcommand*{\glsadd}[1]{%
+  \NoCaseChange{\@glsadd{#1}}%
+}
+\DeclareRobustCommand*{\@glsadd}[1]{%
+  \ifcsundef{datagidxentry@\datagidx at label}%
+  {%
+    \PackageError{datagidx}{Term `\datagidx at label' doesn't exist}{}%
+  }%
+  {%
+    \datagidx at parse@formatlabel{#1}%
+    \datagidx at target{\datagidx at label}{\datagidx at format}%
+      {\csuse{the\DTLgidxCounter}}{}%
+    \letcs{\newterm at database}{datagidxentry@\datagidx at label}%
+    \edef\do at getrow{%
+      \noexpand\dtlgetrowforvalue
+      {\newterm at database}%
+      {\dtlcolumnindex{\newterm at database}{Label}}%
+      {\datagidx at label}%
+    }%
+    \do at getrow
+    \dtlreplaceentryincurrentrow
+      {1}{\dtlcolumnindex{\newterm at database}{Used}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at id}%
+      {\dtlcolumnindex{\newterm at database}{FirstId}}%
+    \DTLifnull\datagidx at id
+    {%
+      \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+    }%
+    {}%
+    \dtlrecombine
+  }%
+}
+\newcount\datagidx at count
+\newcommand*{\glsaddall}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \edef\datagidx at rowcount{\number\DTLrowcount{#1}}%
+     \datagidx at count=0\relax
+     \loop
+       \advance\datagidx at count by 1\relax
+       \dtlgetrow{#1}{\datagidx at count}%
+      \dtlgetentryfromcurrentrow
+        {\datagidx at label}%
+        {\dtlcolumnindex{#1}{Label}}%
+    \bgroup
+      \undef\hypertarget
+      \datagidx at target{\datagidx at label}{}{}{}%
+    \egroup
+       \dtlreplaceentryincurrentrow
+        {1}{\dtlcolumnindex{#1}{Used}}%
+      \dtlgetentryfromcurrentrow
+        {\datagidx at id}%
+        {\dtlcolumnindex{#1}{FirstId}}%
+      \DTLifnull\datagidx at id
+      {%
+        \dtlappendentrytocurrentrow{FirstId}{\datagidx at formatanchor\datagidx at anchorcount}%
+      }%
+      {}%
+      \dtlrecombine
+     \ifnum\datagidx at count<\datagidx at rowcount
+     \repeat
+  }%
+  {%
+    \PackageError{datagidx}{Database `#1' doesn't exist}{}%
+  }%
+}
+\DeclareRobustCommand*{\glslink}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{#2}%
+  }%
+}
+\DeclareRobustCommand*{\useentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\datagidx at value}%
+  }%
+}
+\DeclareRobustCommand*{\Useentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\xmakefirstuc{\datagidx at value}}%
+  }%
+}
+\DeclareRobustCommand*{\USEentry}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \datagidxlink{\datagidx at label}%
+  {%
+    \@datagidx at use@entry{\MakeTextUppercase{\datagidx at value}}%
+  }%
+}
+\DeclareRobustCommand*{\useentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\datagidx at value}%
+}
+\DeclareRobustCommand*{\Useentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\xmakefirstuc{\datagidx at value}}%
+}
+\DeclareRobustCommand*{\USEentrynl}[2]{%
+  \datagidx at parse@formatlabel{#1}%
+  \DTLgidxFetchEntry{\datagidx at value}{\datagidx at label}{#2}%
+  \@datagidx at use@entry{\MakeTextUppercase{\datagidx at value}}%
+}
+\DeclareRobustCommand*{\gls}[1]{\useentry{#1}{Text}}
+\DeclareRobustCommand*{\glspl}[1]{\useentry{#1}{Plural}}
+\DeclareRobustCommand*{\Gls}[1]{\Useentry{#1}{Text}}
+\DeclareRobustCommand*{\Glspl}[1]{\Useentry{#1}{Plural}}
+\DeclareRobustCommand*{\glsnl}[1]{\useentrynl{#1}{Text}}
+\DeclareRobustCommand*{\glsplnl}[1]{\useentrynl{#1}{Plural}}
+\DeclareRobustCommand*{\Glsnl}[1]{\Useentrynl{#1}{Text}}
+\DeclareRobustCommand*{\Glsplnl}[1]{\Useentrynl{#1}{Plural}}
+\DeclareRobustCommand*{\glssym}[1]{\useentry{#1}{Symbol}}
+\DeclareRobustCommand*{\Glssym}[1]{\Useentry{#1}{Symbol}}
+\newcommand*{\DTLgidxFormatAcr}[3]{%
+  \DTLgidxAcrStyle{\glsdispentry{#1}{#2}}{\useentry{#1}{#3}}%
+}
+\newcommand*{\DTLgidxFormatAcrUC}[3]{%
+  \DTLgidxAcrStyle{\Glsdispentry{#1}{#2}}{\useentry{#1}{#3}}%
+}
+\DeclareRobustCommand*{\acr}[1]{%
+  \ifentryused{#1}%
+  {\useentry{#1}{Short}}%
+  {\DTLgidxFormatAcr{#1}{Long}{Short}}%
+}
+\DeclareRobustCommand*{\acrpl}[1]{%
+  \ifentryused{#1}%
+  {\useentry{#1}{ShortPlural}}%
+  {\DTLgidxFormatAcr{#1}{LongPlural}{ShortPlural}}%
+}
+\DeclareRobustCommand*{\Acr}[1]{%
+  \ifentryused{#1}%
+  {\Useentry{#1}{Short}}%
+  {\DTLgidxFormatAcrUC{#1}{Long}{Short}}%
+}
+\DeclareRobustCommand*{\Acrpl}[1]{%
+  \ifentryused{#1}%
+  {\Useentry{#1}{ShortPlural}}%
+  {\DTLgidxFormatAcrUC{#1}{LongPlural}{ShortPlural}}%
+}
+\define at key{printterms}{database}{\renewcommand*{\newterm at database}{#1}}
+\define at choicekey{printterms}{postdesc}[\val\nr]%
+ {none,dot}%
+ {%
+   \datagidx at setpostdesc\nr
+ }
+\define at choicekey{printterms}{prelocation}[\val\nr]%
+ {none,enspace,space,dotfill,hfill}%
+ {%
+   \datagidx at setprelocation\nr
+ }
+\define at choicekey{printterms}{location}[\val\nr]%
+ {hide,list,first}%
+ {\datagidx at setlocation\nr}
+\define at choicekey{printterms}{symboldesc}[\val\nr]%
+ {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}%
+ {\datagidx at formatsymdesc\nr}
+\define at key{printterms}{columns}%
+{%
+  \DTLgidxSetColumns{#1}%
+}
+\define at choicekey{printterms}{namecase}[\val\nr]%
+ {nochange,uc,lc,firstuc,capitalise}%
+ {%
+   \datagidx at setnamecase\nr
+ }
+\define at key{printterms}{namefont}%
+{%
+  \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}%
+}
+\define at key{printterms}{postname}
+{%
+  \renewcommand*{\DTLgidxPostName}{#1}%
+}
+\define at choicekey{printterms}{see}[\val\nr]%
+  {comma,brackets,dot,space,nosep,semicolon,location}%
+  {\datagidx at setsee\nr}
+\define at choicekey{printterms}{child}[\val\nr]%
+ {named,noname}%
+ {%
+   \datagidx at setchildstyle\nr
+ }
+\define at key{printterms}{symbolwidth}%
+{%
+  \setlength{\datagidxsymbolwidth}{#1}%
+}
+\define at key{printterms}{locationwidth}%
+{%
+  \setlength{\datagidxlocationwidth}{#1}%
+}
+\define at choicekey{printterms}{childsort}[\val\nr]%
+ {true,false}[true]%
+ {%
+   \datagidx at setchildsort\nr
+ }
+\define at choicekey{printterms}{showgroups}{true,false}[true]{%
+ \appto\newterm at styles{showgroups={#1},}%
+}
+\define at key{printterms}{style}{\appto\newterm at styles{style={#1},}}
+\define at key{printterms}{heading}{\appto\newterm at styles{heading={#1},}}
+\define at key{printterms}{postheading}{%
+  \appto\newterm at styles{postheading={#1},}%
+}
+\define at key{printterms}{sort}{\appto\newterm at styles{sort={#1},}}
+\define at choicekey{printterms}{balance}[\val\nr]{true,false}[true]{%
+  \ifcase\nr\relax
+    \appto\newterm at styles{balance=true,}%
+  \or
+    \appto\newterm at styles{balance=false,}%
+  \fi
+}
+\newcommand*{\printterms at condition}{\boolean{true}}
+\define at key{printterms}{condition}{\renewcommand*{\printterms at condition}{#1}}
+\newcommand{\printtermsstartpar}{\par}
+\newcommand*{\printterms at setupmulticol}{%
+ \ifdefempty\datagidx at postheading
+ {%
+   \edef\datagidx at prestart{%
+    \noexpand\datagidx at heading{\noexpand\datagidx at title}%
+    \noexpand\begin{\datagidx at multicols}{\datagidx at columns}%
+   }%
+ }%
+ {%
+   \edef\datagidx at prestart{%
+    \noexpand\datagidx at heading{\noexpand\datagidx at title}%
+    \noexpand\begin{\datagidx at multicols}{\datagidx at columns}%
+    [\noexpand\datagidx at postheading]%
+   }%
+ }%
+ \edef\datagidx at postend{%
+  \noexpand\end{\datagidx at multicols}%
+ }%
+}
+\newcommand*{\printterms at setuptwocol}{%
+ \def\datagidx at prestart{%
+   \twocolumn[\datagidx at heading{\datagidx at title}%
+   \datagidx at postheading]}%
+ \if at twocolumn
+   \def\datagidx at postend{}%
+ \else
+   \def\datagidx at postend{\printtermsrestoreonecolumn}%
+ \fi
+}
+\newcommand{\printtermsrestoreonecolumn}{\onecolumn}
+\newcommand{\printterms}[1][]{%
+\bgroup
+  \let\newterm at database\datagidx at defaultdatabase
+  \let\newterm at styles\@empty
+  \setkeys{printterms}{#1}%
+  \DTLifdbexists{\newterm at database}%
+  {%
+    \edef\DTLgidxCurrentdb{\newterm at database}%
+    \edef\do at getrow{\noexpand\dtlgetrowforvalue
+      {datagidx}%
+      {\dtlcolumnindex{datagidx}{Glossary}}%
+      {\newterm at database}%
+    }%
+    \do at getrow
+    \dtlgetentryfromcurrentrow
+      {\datagidx at title}%
+      {\dtlcolumnindex{datagidx}{Title}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at heading}%
+      {\dtlcolumnindex{datagidx}{Heading}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at postheading}%
+      {\dtlcolumnindex{datagidx}{PostHeading}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at multicols}%
+      {\dtlcolumnindex{datagidx}{MultiCols}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at sort}%
+      {\dtlcolumnindex{datagidx}{Sort}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at style}%
+      {\dtlcolumnindex{datagidx}{Style}}%
+    \dtlgetentryfromcurrentrow
+      {\datagidx at showgroups}%
+      {\dtlcolumnindex{datagidx}{ShowGroups}}%
+    \edef\dtl at do@setkeys{\noexpand\setkeys{newgloss}{\expandonce\newterm at styles}}%
+    \dtl at do@setkeys
+    \ifnum\datagidx at columns>1\relax
+       \ifnum\datagidx at columns=2\relax
+        \ifdatagidxbalance
+          \printterms at setupmulticol
+        \else
+          \printterms at setuptwocol
+        \fi
+       \else
+          \printterms at setupmulticol
+       \fi
+    \else
+       \def\datagidx at prestart{}%
+       \def\datagidx at postend{}%
+    \fi
+    \let\@dtl at dbname\DTLgidxCurrentdb
+    \csuse{datagidxshowgroups\datagidx at showgroups}%
+    \datagidxsetstyle{\datagidx at style}%
+    \def\datagidx at labellist{}%
+    \ifnum\datagidx at columns=1\relax
+      \datagidx at heading{\datagidx at title}%
+      \datagidx at postheading
+    \fi
+    \datagidx at do@sort
+    \datagidx at prestart
+    \printtermsstartpar
+    \datagidxstart
+    \let\DTLgidxName\datagidx at invert
+    \let\DTLgidxPlace\datagidx at invert
+    \let\DTLgidxSubject\datagidx at invert
+    \let\DTLgidxOffice\datagidx at invert
+      \DTLgidxForeachEntry
+      {%
+         \datagidxitem
+      }%
+    \datagidxend
+    \datagidx at postend
+  }%
+  {%
+    \PackageError{datagidx}%
+    {Glossary/index data base `\newterm at database' doesn't exist}%
+    {%
+      You must define the glossary/index data base before you can
+      use it.%
+    }%
+  }%
+\egroup
+}
+\def\datagidx at getgroup#1#2\datagidx at endgetgroup{%
+  \dtl at setcharcode{#1}{\count@}%
+  \dtlifintclosedbetween{\count@}{48}{57}%
+  {%
+    \gdef\datagidxcurrentgroup{Numbers}%
+  }%
+  {%
+    \dtlifintclosedbetween{\count@}{97}{122}%
+    {%
+      \advance\count@ by -96\relax
+      \xdef\datagidxcurrentgroup{\@Alph\count@}%
+    }%
+    {%
+      \dtlifintclosedbetween{\count@}{65}{90}%
+      {%
+        \gdef\datagidxcurrentgroup{#1}%
+      }%
+      {%
+        \gdef\datagidxcurrentgroup{Symbols}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLgidxGroupHeaderTitle}[1]{%
+  \ifcsdef{datagidx#1name}
+  {%
+    \csuse{datagidx#1name}%
+  }%
+  {%
+    #1%
+  }%
+}
+\newcommand{\DTLgidxForeachEntry}[1]{%
+  \def\datagidxprevgroup{}%
+  \edef\datagidx at doforeachentry{%
+    \noexpand\DTLforeach*[\expandonce\printterms at condition]{\DTLgidxCurrentdb}%
+     {\expandonce\DTLgidxAssignList}
+  }%
+  \datagidx at doforeachentry
+  {%
+    \DTLifnull{\Parent}%
+    {%
+      \DTLifnull\Location
+      {%
+         \DTLifnull\CurrentLocation
+         {%
+         }%
+         {%
+           \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+         }%
+      }%
+      {%
+        \ifcsdef{datagidx at prev@loc@\Label}%
+        {%
+          \dtlgidx at checklocationchange
+        }%
+        {%
+           \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+        }%
+      }%
+      \datagidx at doifdisplayed
+      {%
+        \edef\datagidx at dowrite{%
+          \noexpand\protected at write\noexpand\@auxout{}%
+          {%
+            \string\datagidx at save@loc{\Label}{\CurrentLocation}%
+          }%
+        }%
+        \datagidx at dowrite
+        \datagidx at level=1\relax
+        \expandafter\datagidx at getgroup\Sort{}\datagidx at endgetgroup
+        #1%
+        \global\let\datagidxprevgroup\datagidxcurrentgroup
+      }%
+    }%
+    {}%
+  }%
+}
+\newcommand*{\dtlgidx at checklocationchange}{%
+  \protected at edef\@prev at location{%
+     \csname datagidx at prev@loc@\Label\endcsname}%
+  \@onelevel at sanitize\@prev at location
+  \protected at edef\@cur at location{\CurrentLocation}%
+  \@onelevel at sanitize\@cur at location
+  \ifdefequal{\@prev at location}{\@cur at location}%
+  {}%
+  {%
+    \global\let\@datagidx at dorerun@warn\@data at rerun@warn
+  }%
+}
+\newcommand{\datagidx at doifdisplayed}[1]{%
+  \DTLifnull{\Location}%
+  {%
+     \DTLifnull{\See}
+     {%
+       \DTLifnull{\SeeAlso}{}%
+       {%
+         #1%
+       }%
+     }%
+     {%
+       \@for\dtl at thislabel:=\See\do
+       {%
+           \iftermexists{\dtl at thislabel}%
+           {%
+             \ifentryused{\dtl at thislabel}%
+             {%
+               #1%
+               \@endfortrue
+             }%
+             {}%
+           }%
+           {%
+           }%
+       }%
+     }%
+  }%
+  {%
+    #1%
+  }%
+}%
+\newcount\datagidx at level
+\endinput
+%%
+%% End of file `datagidx-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datagidx-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datagidx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datagidx.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datagidx.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datagidx-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datagidx}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datagidx}[2025/03/05 v3.0.1 (NLCT)]
 \RequirePackage{etoolbox}
 \ExplSyntaxOn
 \int_new:N \l__datagidx_columns_int

Added: trunk/Master/texmf-dist/tex/latex/datatool/datapie-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datapie-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datapie-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,442 @@
+%%
+%% This is file `datapie-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datapie-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datapie}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\newif\ifDTLcolorpiechart
+\DTLcolorpiecharttrue
+\DeclareOption{color}{\DTLcolorpiecharttrue}
+\DeclareOption{gray}{\DTLcolorpiechartfalse}
+\define at boolkey{datapie}[DTL]{rotateinner}[true]{}
+\define at boolkey{datapie}[DTL]{rotateouter}[true]{}
+\DTLrotateinnerfalse
+\DTLrotateouterfalse
+\DeclareOption{rotateinner}{\DTLrotateinnertrue}
+\DeclareOption{norotateinner}{\DTLrotateinnerfalse}
+\DeclareOption{rotateouter}{\DTLrotateoutertrue}
+\DeclareOption{norotateouter}{\DTLrotateouterfalse}
+\ProcessOptions
+\RequirePackage{datatool}[=v2.32]
+\RequirePackage{tikz}
+\newlength\DTLradius
+\DTLradius=2cm
+\newcommand*{\DTLinnerratio}{0.5}
+\newcommand*{\DTLouterratio}{1.25}
+\newcommand*\DTLcutawayratio{0.2}
+\newcommand*{\DTLstartangle}{0}
+\newlength\dtl at inneroffset
+\dtl at inneroffset=\DTLinnerratio\DTLradius
+\newlength\dtl at outeroffset
+\dtl at outeroffset=\DTLouterratio\DTLradius
+\newlength\dtl at cutawayoffset
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius
+\newcommand*{\dtl at piecutaways}{}
+\def\dtl at innerlabel{\DTLpievariable}%
+\def\dtl at outerlabel{}%
+\newcounter{DTLpieroundvar}
+\setcounter{DTLpieroundvar}{1}
+\newcommand*{\DTLdisplayinnerlabel}[1]{#1}
+\newcommand*{\DTLdisplayouterlabel}[1]{#1}
+\newcommand*{\DTLpiepercent}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{datapie}{Can't use
+  \string\DTLpiepercent\space outside
+  \string\DTLpiechart}{}%
+\else
+  \csname dtl at piepercent@\romannumeral\@dtl at seg\endcsname
+\fi}
+\newcommand*{\DTLpieatbegintikz}{}
+\newcommand*{\DTLpieatendtikz}{}
+\newcommand*{\DTLsetpiesegmentcolor}[2]{%
+\expandafter\def\csname dtlpie at segcol\romannumeral#1\endcsname{#2}%
+}
+\newcommand*{\DTLgetpiesegmentcolor}[1]{%
+\csname dtlpie at segcol\romannumeral#1\endcsname}
+\newcommand*{\DTLdopiesegmentcolor}[1]{%
+\expandafter\color\expandafter
+{\csname dtlpie at segcol\romannumeral#1\endcsname}}
+\newcommand*{\DTLdocurrentpiesegmentcolor}{%
+\ifnum\dtlforeachlevel=0\relax
+  \PackageError{datapie}{Can't use
+  \string\DTLdocurrentpiesegmentcolor\space outside
+  \string\DTLpiechart}{}%
+\else
+  \expandafter\DTLdopiesegmentcolor\expandafter{%
+  \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+\fi}
+\newcommand*{\DTLpieoutlinecolor}{black}
+\newlength\DTLpieoutlinewidth
+\DTLpieoutlinewidth=0pt
+\ifDTLcolorpiechart
+ \DTLsetpiesegmentcolor{1}{red}
+ \DTLsetpiesegmentcolor{2}{green}
+ \DTLsetpiesegmentcolor{3}{blue}
+ \DTLsetpiesegmentcolor{4}{yellow}
+ \DTLsetpiesegmentcolor{5}{magenta}
+ \DTLsetpiesegmentcolor{6}{cyan}
+ \DTLsetpiesegmentcolor{7}{orange}
+ \DTLsetpiesegmentcolor{8}{white}
+\else
+ \DTLsetpiesegmentcolor{1}{black!15}
+ \DTLsetpiesegmentcolor{2}{black!25}
+ \DTLsetpiesegmentcolor{3}{black!35}
+ \DTLsetpiesegmentcolor{4}{black!45}
+ \DTLsetpiesegmentcolor{5}{black!55}
+ \DTLsetpiesegmentcolor{6}{black!65}
+ \DTLsetpiesegmentcolor{7}{black!75}
+ \DTLsetpiesegmentcolor{8}{black!85}
+\fi
+\define at key{datapie}{start}{\def\DTLstartangle{#1}}
+\define at key{datapie}{radius}{\DTLradius=#1\relax
+\dtl at inneroffset=\DTLinnerratio\DTLradius
+\dtl at outeroffset=\DTLouterratio\DTLradius
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius}
+\define at key{datapie}{innerratio}{%
+\def\DTLinnerratio{#1}%
+\dtl at inneroffset=\DTLinnerratio\DTLradius}
+\define at key{datapie}{outerratio}{%
+\def\DTLouterratio{#1}%
+\dtl at outeroffset=\DTLouterratio\DTLradius}
+\define at key{datapie}{cutawayratio}{%
+\def\DTLcutawayratio{#1}%
+\dtl at cutawayoffset=\DTLcutawayratio\DTLradius}
+\define at key{datapie}{inneroffset}{%
+\dtl at inneroffset=#1}
+\define at key{datapie}{outeroffset}{%
+\dtl at outeroffset=#1}
+\define at key{datapie}{cutawayoffset}{%
+\dtl at cutawayoffset=#1}
+\define at key{datapie}{cutaway}{%
+\renewcommand*{\dtl at piecutaways}{#1}}
+\define at key{datapie}{variable}{%
+\def\DTLpievariable{#1}}
+\define at key{datapie}{innerlabel}{%
+\def\dtl at innerlabel{#1}}
+\define at key{datapie}{outerlabel}{%
+\def\dtl at outerlabel{#1}}
+\newcommand*{\DTLpiechart}[4][\boolean{true}]{%
+\bgroup
+  \let\DTLpievariable=\relax
+  \setkeys{datapie}{#2}%
+  \ifx\DTLpievariable\relax
+    \PackageError{datapie}%
+    {\string\DTLpiechart\space missing variable}{}%
+  \else
+    \def\dtl at total{0}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \let\dtl at oldtotal=\dtl at total
+      \expandafter\DTLconverttodecimal\expandafter
+        {\DTLpievariable}{\dtl at variable}%
+      \dtladd{\dtl at total}{\dtl at variable}{\dtl at total}%
+    }%
+    \expandafter\DTLconverttodecimal\expandafter
+      {\DTLstartangle}{\@dtl at start}%
+    \@sDTLforeach[#1]{#3}{#4}{%
+      \expandafter\DTLconverttodecimal\expandafter
+        {\DTLpievariable}{\dtl at variable}%
+      \dtl at computeangles
+        {\csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname}%
+        {\dtl at variable}%
+      \expandafter\@dtl at seg\expandafter=
+        \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+      \dtlmul{\dtl at tmp}{\dtl at variable}{100}%
+      \let\dtl at old=\dtl at tmp
+      \dtldiv{\dtl at tmp}{\dtl at old}{\dtl at total}%
+      \expandafter\dtlround
+        \csname dtl at piepercent@\romannumeral\@dtl at seg\endcsname\dtl at tmp
+        \c at DTLpieroundvar
+    }%
+    \@for\dtl at row:=\dtl at piecutaways\do{%
+      \expandafter\@dtl at set@off\dtl at row-\relax
+    }%
+    \let\dtl at start=\DTLstartangle
+    \begin{tikzpicture}
+      \DTLpieatbegintikz
+      \@sDTLforeach[#1]{#3}{#4}%
+      {%
+        \expandafter\@dtl at seg\expandafter=
+        \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname%
+        \edef\dtl at start{%
+          \csname dtl at sang@\romannumeral\@dtl at seg\endcsname}%
+        \edef\dtl at extent{%
+          \csname dtl at angle@\romannumeral\@dtl at seg\endcsname}%
+        \dtladd{\dtl at endangle}{\dtl at start}{\dtl at extent}%
+        \edef\dtl at angle{%
+           \csname dtl at cut@angle@\romannumeral\@dtl at seg\endcsname}%
+        \let\dtl at old=\dtl at angle
+        \dtl at truncatedecimal\dtl at angle
+        \ifnum\dtl at angle>180\relax
+          \dtlsub{\dtl at angle}{\dtl at old}{360}%
+          \dtl at truncatedecimal\dtl at angle
+        \fi
+        \edef\dtl at cutlen{%
+          \csname dtl at cut@len@\romannumeral\@dtl at seg\endcsname
+        }%
+        \edef\@dtl at shift{(\dtl at angle:\dtl at cutlen)}%
+        \dtlmul{\dtl at angle}{\dtl at extent}{0.5}%
+        \dtladd{\dtl at midangle}{\dtl at angle}{\dtl at start}%
+        \begin{scope}[shift={\@dtl at shift}]%
+        \fill[color=\DTLgetpiesegmentcolor\@dtl at seg] (0,0) --
+        (\dtl at start:\DTLradius)
+        arc (\dtl at start:\dtl at endangle:\DTLradius) -- cycle;
+        \ifdim\DTLpieoutlinewidth>0pt\relax
+          \draw[color=\DTLpieoutlinecolor,%
+                line width=\DTLpieoutlinewidth]
+          (0,0) -- (\dtl at start:\DTLradius)
+          arc (\dtl at start:\dtl at endangle:\DTLradius) -- cycle;
+        \fi
+        \dtl at truncatedecimal\dtl at midangle
+        \ifDTLrotateinner
+          \dtlifnumopenbetween{\dtl at midangle}{90}{270}%
+          {%
+            \let\@dtl at next\@firstoftwo
+          }%
+          {%
+             \dtlifnumlt{\dtl at midangle}{-90}%
+             {\let\@dtl at next\@firstoftwo}%
+             {\let\@dtl at next\@secondoftwo}%
+          }%
+          \@dtl at next
+          {%
+            \dtlsub{\dtl at labelangle}{\dtl at midangle}{180}%
+            \dtl at truncatedecimal\dtl at labelangle
+            \edef\dtl at innernodeopt{anchor=east,rotate=\dtl at labelangle}%
+          }%
+          {%
+            \edef\dtl at innernodeopt{anchor=west,rotate=\dtl at midangle}%
+          }%
+        \else
+          \edef\dtl at innernodeopt{anchor=center}%
+        \fi
+        \ifDTLrotateouter
+           \dtlifnumopenbetween{\dtl at midangle}{90}{270}%
+           {%
+             \let\@dtl at next\@firstoftwo
+           }%
+           {%
+              \dtlifnumlt{\dtl at midangle}{-90}%
+              {\let\@dtl at next\@firstoftwo}%
+              {\let\@dtl at next\@secondoftwo}%
+           }%
+           \@dtl at next
+           {%
+             \dtlsub{\dtl at labelangle}{\dtl at midangle}{180}%
+             \dtl at truncatedecimal\dtl at labelangle
+             \edef\dtl at outernodeopt{anchor=east,rotate=\dtl at labelangle}%
+           }%
+           {%
+             \edef\dtl at outernodeopt{anchor=west,rotate=\dtl at midangle}%
+           }%
+        \else
+          \dtlifnumeq{\dtl at midangle}{45}
+          {%
+            \let\@dtl at next\@firstoftwo
+          }%
+          {%
+            \dtlifnumgt{\dtl at midangle}{315}
+            {%
+              \let\@dtl at next\@firstoftwo
+            }%
+            {%
+              \dtlifnumopenbetween{\dtl at midangle}{-45}{45}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \let\@dtl at next\@secondoftwo
+              }%
+            }%
+          }%
+          \@dtl at next
+          {%
+            \edef\dtl at outernodeopt{anchor=west}%
+          }%
+          {%
+            \dtlifnumopenbetween{\dtl at midangle}{45}{135}%
+            {%
+              \let\@dtl at next\@firstoftwo
+            }%
+            {%
+              \dtlifnumeq{\dtl at midangle}{135}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \let\@dtl at next\@secondoftwo
+              }%
+            }%
+            \@dtl at next
+            {%
+              \edef\dtl at outernodeopt{anchor=south}%
+            }%
+            {%
+              \dtlifnumopenbetween{\dtl at midangle}{135}{225}%
+              {%
+                \let\@dtl at next\@firstoftwo
+              }%
+              {%
+                \dtlifnumeq{\dtl at midangle}{225}%
+                {%
+                  \let\@dtl at next\@firstoftwo
+                }%
+                {%
+                  \dtlifnumeq{\dtl at midangle}{-135}%
+                  {%
+                    \let\@dtl at next\@firstoftwo
+                  }%
+                  {%
+                    \dtlifnumlt{\dtl at midangle}{-135}%
+                    {%
+                      \let\@dtl at next\@firstoftwo
+                    }%
+                    {%
+                      \let\@dtl at next\@secondoftwo
+                    }%
+                  }%
+                }%
+              }%
+              \@dtl at next
+              {%
+                \edef\dtl at outernodeopt{anchor=east}%
+              }%
+              {%
+                \edef\dtl at outernodeopt{anchor=north}%
+              }%
+            }%
+          }%
+        \fi
+        \edef\@dtl at dolabel{%
+          \noexpand\draw (\dtl at midangle:\the\dtl at inneroffset)
+             node[\dtl at innernodeopt]{%
+           \noexpand\DTLdisplayinnerlabel{\noexpand\dtl at innerlabel}};
+        }%
+        \@dtl at dolabel
+        \edef\@dtl at dolabel{%
+          \noexpand\draw (\dtl at midangle:\the\dtl at outeroffset)
+            node[\dtl at outernodeopt]{%
+          \noexpand\DTLdisplayouterlabel{\noexpand\dtl at outerlabel}};
+        }%
+        \@dtl at dolabel
+        \end{scope}%
+      }%
+      \DTLpieatendtikz
+    \end{tikzpicture}%
+  \fi
+\egroup
+}
+\newcommand*{\dtl at computeangles}[2]{%
+  \dtlifnumgt{\@dtl at start}{180}%
+  {%
+    \let\dtl at old=\@dtl at start
+    \dtlsub{\@dtl at start}{\dtl at old}{360}%
+  }%
+  {}%
+  \dtlifnumlt{\@dtl at start}{-180}%
+  {%
+    \let\dtl at old=\@dtl at start
+    \dtladd{\@dtl at start}{\dtl at old}{360}%
+  }%
+  {}%
+  \expandafter\edef\csname dtl at sang@\romannumeral#1\endcsname{%
+     \@dtl at start}%
+  \dtlmul{\dtl at angle}{360}{#2}%
+  \let\dtl at old=\dtl at angle
+  \dtldiv{\dtl at angle}{\dtl at old}{\dtl at total}%
+  \expandafter\let\csname dtl at angle@\romannumeral#1\endcsname=\dtl at angle
+  \let\dtl at old=\@dtl at start
+  \dtladd{\@dtl at start}{\dtl at old}{\dtl at angle}%
+  \expandafter\def\csname dtl at cut@angle@\romannumeral#1\endcsname{0}%
+  \expandafter\def\csname dtl at cut@len@\romannumeral#1\endcsname{0cm}%
+}
+\def\@dtl at set@off#1-#2\relax{%
+  \ifstrempty{#2}%
+  {%
+    \@@dtl at set@off{#1}%
+  }%
+  {%
+    \@@dtl at set@offr#1-#2\relax
+  }%
+}
+\newcommand*{\@@dtl at set@off}[1]{%
+  \edef\dtl at old{\csname dtl at angle@\romannumeral#1\endcsname}%
+  \dtlmul{\dtl at angle}{\dtl at old}{0.5}%
+  \let\dtl at old=\dtl at angle
+  \edef\dtl at sang{\csname dtl at sang@\romannumeral#1\endcsname}%
+  \dtladd{\dtl at angle}{\dtl at old}{\dtl at sang}%
+  \expandafter\edef\csname dtl at cut@angle@\romannumeral#1\endcsname{%
+  \dtl at angle}%
+  \expandafter\edef\csname dtl at cut@len@\romannumeral#1\endcsname{%
+   \the\dtl at cutawayoffset}%
+}
+\newcount\@dtl at seg
+\def\@@dtl at set@offr#1-#2-\relax{%
+ \ifnum#1>#2\relax
+   \PackageError{datapie}{Segment ranges must go in ascending order}{%
+   Try #2-#1 instead of #1-#2}%
+ \else
+   \def\dtl at angle{0}%
+   \@dtl at seg=#1\relax
+   \whiledo{\not\(\@dtl at seg > #2\)}{%
+    \let\dtl at old=\dtl at angle
+    \edef\dtl at segang{\csname dtl at angle@\romannumeral\@dtl at seg\endcsname}%
+    \dtladd{\dtl at angle}{\dtl at old}{\dtl at segang}%
+    \advance\@dtl at seg by 1\relax
+   }%
+   \let\dtl at old=\dtl at angle
+   \dtlmul{\dtl at angle}{\dtl at old}{0.5}%
+   \edef\dtl at sang{\csname dtl at sang@\romannumeral#1\endcsname}%
+   \let\dtl at old=\dtl at angle
+   \dtladd{\dtl at angle}{\dtl at old}{\dtl at sang}%
+   \@dtl at seg=#1\relax
+   \whiledo{\not\(\@dtl at seg > #2\)}{%
+   \expandafter
+    \let\csname dtl at cut@angle@\romannumeral\@dtl at seg\endcsname
+    =\dtl at angle
+   \expandafter
+    \edef\csname dtl at cut@len@\romannumeral\@dtl at seg\endcsname{%
+    \the\dtl at cutawayoffset}
+    \advance\@dtl at seg by 1\relax
+   }%
+ \fi
+}
+\endinput
+%%
+%% End of file `datapie-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datapie-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datapie.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datapie.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datapie.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datapie-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datapie}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datapie}[2025/03/05 v3.0.1 (NLCT)]
 \newif\ifDTLcolorpiechart
 \DTLcolorpiecharttrue
 \newif\ifDTLrotateinner

Added: trunk/Master/texmf-dist/tex/latex/datatool/dataplot-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/dataplot-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/dataplot-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,977 @@
+%%
+%% This is file `dataplot-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `dataplot-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{dataplot}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{tikz}
+\RequirePackage{datatool}[=v2.32]
+\usetikzlibrary{plotmarks}
+\usetikzlibrary{plothandlers}
+\usetikzlibrary{calc}
+\newcommand*{\DTLplotstream}[4][\boolean{true}]{%
+  \@sDTLforeach[#1]{#2}{\dtl at x=#3,\dtl at y=#4}{%
+    \DTLconverttodecimal{\dtl at x}{\dtl at decx}%
+    \DTLconverttodecimal{\dtl at y}{\dtl at decy}%
+    \pgfplotstreampoint{\pgfpointxy{\dtl at decx}{\dtl at decy}}%
+  }%
+}
+\newcommand*{\DTLplotmarks}{%
+  \pgfuseplotmark{o},%
+  \pgfuseplotmark{x},%
+  \pgfuseplotmark{+},%
+  \pgfuseplotmark{square},%
+  \pgfuseplotmark{triangle},%
+  \pgfuseplotmark{diamond},%
+  \pgfuseplotmark{pentagon},%
+  \pgfuseplotmark{asterisk},%
+  \pgfuseplotmark{star}%
+}
+\newcommand*{\DTLplotmarkcolors}{%
+  red,%
+  green,%
+  blue,%
+  yellow,%
+  magenta,%
+  cyan,%
+  orange,%
+  black,%
+  gray}
+\newcommand*{\DTLplotlines}{%
+  \pgfsetdash{}{0pt},% solid line
+  \pgfsetdash{{10pt}{5pt}}{0pt},%
+  \pgfsetdash{{5pt}{5pt}}{0pt},%
+  \pgfsetdash{{1pt}{5pt}}{0pt},%
+  \pgfsetdash{{5pt}{5pt}{1pt}{5pt}}{0pt},%
+  \pgfsetdash{{1pt}{3pt}}{0pt},%
+}
+\newcommand*{\DTLplotlinecolors}{%
+  red,%
+  green,%
+  blue,%
+  yellow,%
+  magenta,%
+  cyan,%
+  orange,%
+  black,%
+  gray}
+\newlength\DTLplotwidth
+\setlength\DTLplotwidth{4in}
+\newlength\DTLplotheight
+\setlength\DTLplotheight{4in}
+\newlength\DTLticklength
+\setlength\DTLticklength{5pt}
+\newlength\DTLminorticklength
+\setlength\DTLminorticklength{2pt}
+\newlength\DTLticklabeloffset
+\setlength\DTLticklabeloffset{8pt}
+\newlength\dtl at xticlabelheight
+\newlength\dtl at yticlabelwidth
+\newlength\DTLmintickgap
+\setlength\DTLmintickgap{20pt}
+\newlength\DTLminminortickgap
+\setlength\DTLminminortickgap{5pt}
+\newcounter{DTLplotroundXvar}
+\setcounter{DTLplotroundXvar}{2}
+\newcounter{DTLplotroundYvar}
+\setcounter{DTLplotroundYvar}{2}
+\newif\ifDTLxaxis
+\DTLxaxistrue
+\newcommand*{\DTLXAxisStyle}{-}
+\newif\ifDTLyaxis
+\DTLyaxistrue
+\newcommand*{\DTLYAxisStyle}{-}
+\newcommand*{\DTLmajorgridstyle}{color=gray,-}
+\newcommand*{\DTLminorgridstyle}{color=gray,loosely dotted}
+\newif\ifDTLxticsin
+\DTLxticsintrue
+\newif\ifDTLyticsin
+\DTLyticsintrue
+\newcount\dtl at legendsetting
+\newlength\DTLlegendxoffset
+\setlength\DTLlegendxoffset{10pt}
+\newlength\DTLlegendyoffset
+\setlength\DTLlegendyoffset{10pt}
+\newcommand*{\DTLformatlegend}[1]{%
+\setlength{\fboxrule}{1.1pt}%
+\fcolorbox{black}{white}{#1}}
+\newif\ifDTLshowmarkers
+\DTLshowmarkerstrue
+\newif\ifDTLshowlines
+\DTLshowlinesfalse
+\newcommand*{\DTLplotatbegintikz}{}
+\newcommand*{\@dtlplothandlermark}[1]{%
+  \pgfplothandlermark
+  {%
+    \pgfmathparse{1/\dtl at scale@x}%
+    \pgftransformxscale{\pgfmathresult}%
+    \pgfmathparse{1/\dtl at scale@y}%
+    \pgftransformyscale{\pgfmathresult}%
+   #1%
+   }%
+}
+\newcommand*{\dtlplothandlermark}[1]{%
+   \PackageWarning{dataplot}{\string\dtlplothandlermark\space
+     found outside \string\DTLplot}%
+  \pgfplothandlermark{#1}%
+}
+\newcommand*{\DTLplotatendtikz}{}
+\define at key{dataplot}{x}{%
+\def\dtl at xkey{#1}}
+\define at key{dataplot}{y}{%
+\def\dtl at ykey{#1}}
+\define at key{dataplot}{markcolors}{%
+\def\DTLplotmarkcolors{#1}}
+\define at key{dataplot}{linecolors}{%
+\def\DTLplotlinecolors{#1}}
+\define at key{dataplot}{colors}{%
+\def\DTLplotmarkcolors{#1}%
+\def\DTLplotlinecolors{#1}}
+\define at key{dataplot}{marks}{%
+\def\DTLplotmarks{#1}}
+\define at key{dataplot}{lines}{%
+\def\DTLplotlines{#1}}
+\define at key{dataplot}{width}{%
+\setlength\DTLplotwidth{#1}}
+\define at key{dataplot}{height}{%
+\setlength\DTLplotheight{#1}}
+\define at choicekey{dataplot}{style}[\val\nr]{both,lines,markers}{%
+\ifcase\nr\relax
+ \DTLshowlinestrue
+ \DTLshowmarkerstrue
+\or
+ \DTLshowlinestrue
+ \DTLshowmarkersfalse
+\or
+ \DTLshowmarkerstrue
+ \DTLshowlinesfalse
+\fi}
+\define at choicekey{dataplot}{axes}[\val\nr]{both,x,y,none}[both]{%
+\ifcase\nr\relax
+ % both
+ \DTLxaxistrue
+ \DTLxticstrue
+ \DTLyaxistrue
+ \DTLyticstrue
+\or % x
+ \DTLxaxistrue
+ \DTLxticstrue
+ \DTLyaxisfalse
+ \DTLyticsfalse
+\or % y
+ \DTLxaxisfalse
+ \DTLxticsfalse
+ \DTLyaxistrue
+ \DTLyticstrue
+\or % none
+ \DTLxaxisfalse
+ \DTLxticsfalse
+ \DTLyaxisfalse
+ \DTLyticsfalse
+\fi
+}
+\define at boolkey{dataplot}[DTL]{box}[true]{}
+\DTLboxfalse
+\define at boolkey{dataplot}[DTL]{xtics}[true]{}
+\DTLxticstrue
+\define at boolkey{dataplot}[DTL]{ytics}[true]{}
+\DTLyticstrue
+\define at boolkey{dataplot}[DTL]{xminortics}[true]{%
+\ifDTLxminortics \DTLxticstrue\fi}
+\DTLxminorticsfalse
+\define at boolkey{dataplot}[DTL]{yminortics}[true]{%
+\ifDTLyminortics \DTLyticstrue\fi}
+\DTLyminorticsfalse
+\define at boolkey{dataplot}[DTL]{grid}[true]{}
+\define at choicekey{dataplot}{xticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLxticsintrue
+\or
+ \DTLxticsinfalse
+\fi
+}
+\define at choicekey{dataplot}{yticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLyticsintrue
+\or
+ \DTLyticsinfalse
+\fi
+}
+\define at choicekey{dataplot}{ticdir}[\val\nr]{in,out}{%
+\ifcase\nr\relax
+ \DTLxticsintrue
+ \DTLyticsintrue
+\or
+ \DTLxticsinfalse
+ \DTLyticsinfalse
+\fi
+}
+\define at key{dataplot}{bounds}{%
+\def\dtl at bounds{#1}}
+\let\dtl at bounds=\relax
+\define at key{dataplot}{minx}{%
+\def\dtl at minx{#1}}
+\let\dtl at minx=\relax
+\define at key{dataplot}{maxx}{%
+\def\dtl at maxx{#1}}
+\let\dtl at maxx=\relax
+\define at key{dataplot}{miny}{%
+\def\dtl at miny{#1}}
+\let\dtl at miny=\relax
+\define at key{dataplot}{maxy}{%
+\def\dtl at maxy{#1}}
+\let\dtl at maxy=\relax
+\define at key{dataplot}{xticpoints}{%
+\def\dtl at xticlist{#1}\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticlist=\relax
+\define at key{dataplot}{yticpoints}{%
+\def\dtl at yticlist{#1}\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticlist=\relax
+\define at key{dataplot}{xticgap}{\def\dtl at xticgap{#1}%
+\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticgap=\relax
+\define at key{dataplot}{yticgap}{\def\dtl at yticgap{#1}%
+\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticgap=\relax
+\define at key{dataplot}{xticlabels}{%
+\def\dtl at xticlabels{#1}\DTLxticstrue\DTLxaxistrue}
+\let\dtl at xticlabels=\relax
+\define at key{dataplot}{yticlabels}{%
+\def\dtl at yticlabels{#1}\DTLyticstrue\DTLyaxistrue}
+\let\dtl at yticlabels=\relax
+\define at key{dataplot}{xlabel}{%
+\def\dtl at xlabel{#1}}
+\let\dtl at xlabel=\relax
+\define at key{dataplot}{ylabel}{%
+\def\dtl at ylabel{#1}}
+\let\dtl at ylabel=\relax
+\define at choicekey{dataplot}{legend}[\val\nr]{none,north,northeast,%
+east,southeast,south,southwest,west,northwest}[northeast]{%
+\dtl at legendsetting=\nr\relax
+}
+\define at key{dataplot}{legendlabels}{\def\dtl at legendlabels{#1}}
+\newcommand*{\DTLplot}[3][\boolean{true}]{%
+\bgroup
+  \let\dtl at xkey=\relax
+  \let\dtl at ykey=\relax
+  \let\dtl at legendlabels=\relax
+  \setkeys{dataplot}{#3}%
+  \let\dtl at plotmarklist=\DTLplotmarks
+  \let\dtl at plotlinelist=\DTLplotlines
+  \let\dtl at plotmarkcolorlist=\DTLplotmarkcolors
+  \let\dtl at plotlinecolorlist=\DTLplotlinecolors
+  \def\dtl at legend{}%
+  \ifx\dtl at legendlabels\relax
+   \edef\dtl at legendlabels{#2}%
+  \fi
+  \ifx\dtl at xkey\relax
+    \PackageError{dataplot}{Missing x setting for
+      \string\DTLplot}{}%
+  \else
+    \ifx\dtl at ykey\relax
+      \PackageError{dataplot}{Missing y setting for
+      \string\DTLplot}{}%
+    \else
+      \ifx\dtl at bounds\relax
+        \DTLcomputebounds[#1]{#2}{\dtl at xkey}{\dtl at ykey}
+            {\DTLminX}{\DTLminY}{\DTLmaxX}{\DTLmaxY}%
+        \ifx\dtl at minx\relax
+        \else
+           \let\DTLminX=\dtl at minx
+        \fi
+        \ifx\dtl at maxx\relax
+        \else
+           \let\DTLmaxX=\dtl at maxx
+        \fi
+        \ifx\dtl at miny\relax
+        \else
+           \let\DTLminY=\dtl at miny
+        \fi
+        \ifx\dtl at maxy\relax
+        \else
+           \let\DTLmaxY=\dtl at maxy
+        \fi
+      \else
+        \expandafter\dtl at getbounds\dtl at bounds\@nil
+      \fi
+      \@dtl at tmpcount=\DTLplotwidth
+      \divide\@dtl at tmpcount by 65536\relax
+      \dtlsub{\dtl at dx}{\DTLmaxX}{\DTLminX}%
+      \dtldiv{\dtl at scale@x}{\number\@dtl at tmpcount}{\dtl at dx}%
+      \dtlmul{\dtl at offset@x}{-\dtl at scale@x}{\DTLminX}%
+      \@dtl at tmpcount=\DTLplotheight
+      \divide\@dtl at tmpcount by 65536\relax
+      \dtlsub{\dtl at dy}{\DTLmaxY}{\DTLminY}%
+      \dtldiv{\dtl at scale@y}{\number\@dtl at tmpcount}{\dtl at dy}%
+      \dtlmul{\dtl at offset@y}{-\dtl at scale@y}{\DTLminY}%
+     \ifDTLxtics
+       \ifx\dtl at xticlist\relax
+         \ifx\dtl at xticgap\relax
+         \dtlsub{\dtl at mingap}{\number\DTLmintickgap}{\dtl at offset@x}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{\dtl at scale@x}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{65536}%
+           \dtl at constructticklist\DTLminX\DTLmaxX
+             \dtl at mingap\dtl at xticlist
+         \else
+           \DTLifFPopenbetween{0}{\DTLminX}{\DTLmaxX}{%
+             \dtl at constructticklistwithgapz
+               \DTLminX\DTLmaxX\dtl at xticlist\dtl at xticgap}{%
+             \dtl at constructticklistwithgap
+               \DTLminX\DTLmaxX\dtl at xticlist\dtl at xticgap}%
+         \fi
+       \fi
+       \let\dtl at xminorticlist\@empty
+       \ifDTLxminortics
+         \let\dtl at prevtick=\relax
+         \@for\dtl at nexttick:=\dtl at xticlist\do{%
+           \ifx\dtl at prevtick\relax
+           \else
+             \dtl at constructminorticklist
+                \dtl at prevtick\dtl at nexttick\dtl at scale@x\dtl at xminorticlist
+           \fi
+           \let\dtl at prevtick=\dtl at nexttick
+         }%
+       \fi
+       \ifx\dtl at xticlabels\relax
+         \settoheight{\dtl at xticlabelheight}{\dtl at xticlist}%
+       \else
+         \settoheight{\dtl at xticlabelheight}{\dtl at xticlabels}%
+        \fi
+     \else
+       \setlength{\dtl at xticlabelheight}{0pt}%
+     \fi
+     \setlength{\dtl at yticlabelwidth}{0pt}%
+     \ifDTLytics
+       \ifx\dtl at yticlist\relax
+         \ifx\dtl at yticgap\relax
+         \dtlsub{\dtl at mingap}{\number\DTLmintickgap}{\dtl at offset@y}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{\dtl at scale@y}%
+         \dtldiv{\dtl at mingap}{\dtl at mingap}{65536}%
+         \dtl at constructticklist\DTLminY\DTLmaxY
+           \dtl at mingap\dtl at yticlist
+         \else
+           \DTLifFPopenbetween{0}{\DTLminY}{\DTLmaxY}{%
+             \dtl at constructticklistwithgapz
+               \DTLminY\DTLmaxY\dtl at yticlist\dtl at yticgap}{%
+             \dtl at constructticklistwithgap
+               \DTLminY\DTLmaxY\dtl at yticlist\dtl at yticgap}%
+         \fi
+       \fi
+       \let\dtl at yminorticlist\@empty
+       \ifDTLyminortics
+         \let\dtl at prevtick=\relax
+         \@for\dtl at nexttick:=\dtl at yticlist\do{%
+           \ifx\dtl at prevtick\relax
+           \else
+             \dtl at constructminorticklist
+                \dtl at prevtick\dtl at nexttick\dtl at scale@y\dtl at yminorticlist
+           \fi
+           \let\dtl at prevtick=\dtl at nexttick
+         }%
+       \fi
+       \ifx\dtl at ylabel\relax
+       \else
+         \ifx\dtl at yticlabels\relax
+           \@for\dtl at thislabel:=\dtl at yticlist\do{%
+             \dtlround{\dtl at thislabel}{\dtl at thislabel}
+                     {\c at DTLplotroundYvar}%
+             \settowidth{\dtl at tmplength}{\dtl at thislabel}%
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \else
+           \@for\dtl at thislabel:=\dtl at yticlabels\do{%
+             \settowidth{\dtl at tmplength}{\dtl at thislabel}%
+             \ifdim\dtl at tmplength>\dtl at yticlabelwidth
+               \setlength{\dtl at yticlabelwidth}{\dtl at tmplength}%
+             \fi
+           }%
+         \fi
+       \fi
+     \fi
+       \begin{tikzpicture}
+       \pgfsetxvec{\pgfpoint{1pt}{0pt}}%
+       \pgfsetyvec{\pgfpoint{0pt}{1pt}}%
+   \begin{scope}
+   \pgftransformcm{\dtl at scale@x}{0}{0}{\dtl at scale@y}%
+     {\pgfpoint{\dtl at offset@x pt}{\dtl at offset@y pt}}%
+       \let\dtlplothandlermark\@dtlplothandlermark
+       \DTLplotatbegintikz
+       \ifDTLbox
+         \draw (\DTLminX,\DTLminY) -- (\DTLmaxX,\DTLminY) --
+             (\DTLmaxX,\DTLmaxY) -- (\DTLminX,\DTLmaxY) --
+               cycle;
+       \else
+          \ifDTLxaxis
+            \expandafter\draw\expandafter[\DTLXAxisStyle]
+            (\DTLminX,\DTLminY) -- (\DTLmaxX,\DTLminY);
+          \fi
+          \ifDTLyaxis
+            \expandafter\draw\expandafter[\DTLYAxisStyle]
+            (\DTLminX,\DTLminY) -- (\DTLminX,\DTLmaxY);
+          \fi
+       \fi
+       \ifDTLgrid
+          \ifDTLxminortics
+            \@for\dtl at thistick:=\dtl at xminorticlist\do{%
+              \expandafter\draw\expandafter[\DTLminorgridstyle]
+             (\dtl at thistick,\DTLminY) -- (\dtl at thistick,\DTLmaxY);
+            }%
+          \fi
+          \ifDTLyminortics
+            \@for\dtl at thistick:=\dtl at yminorticlist\do{%
+              \expandafter\draw\expandafter[\DTLminorgridstyle]
+             (\DTLminX,\dtl at thistick) -- (\DTLmaxX,\dtl at thistick);
+            }%
+          \fi
+          \@for\dtl at thistick:=\dtl at xticlist\do{%
+            \expandafter\draw\expandafter[\DTLmajorgridstyle]
+             (\dtl at thistick,\DTLminY) -- (\dtl at thistick,\DTLmaxY);
+          }%
+          \@for\dtl at thistick:=\dtl at yticlist\do{%
+            \expandafter\draw\expandafter[\DTLmajorgridstyle]
+             (\DTLminX,\dtl at thistick) -- (\DTLmaxX,\dtl at thistick);
+          }%
+       \fi
+       \ifDTLxtics
+         \dtlsub{\dtl at ticklength}{\number\DTLticklength}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \addtolength\dtl at xticlabelheight{\DTLticklabeloffset}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\dtl at xticlabelheight}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \@for\dtl at thistick:=\dtl at xticlist\do{%
+           \let\dtl at thisticklabel\dtl at thistick
+           \ifx\dtl at xticlabels\relax
+             \dtlround{\dtl at thislabel}{\dtl at thistick}
+                     {\c at DTLplotroundXvar}%
+           \else
+             \dtl at chopfirst\dtl at xticlabels\dtl at thislabel\dtl at rest
+             \let\dtl at xticlabels=\dtl at rest
+           \fi
+           \ifDTLxticsin
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,\dtl at ticklength);
+             \draw (\dtl at thistick,\DTLminY)
+                 ++ (0,-\dtl at ticlabeloffset) node {\dtl at thislabel};
+           \else
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,-\dtl at ticklength)
+                 ++ (0,-\dtl at ticlabeloffset) node {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLxticsin
+               \draw (\dtl at thistick,\DTLmaxY) -- ++(0,-\dtl at ticklength);
+             \else
+             \draw (\dtl at thistick,\DTLmaxY) -- ++(0,\dtl at ticklength);
+             \fi
+           \fi
+         }%
+       \fi
+      \ifx\dtl at xlabel\relax
+      \else
+         \dtladd{\dtl at x}{\number\baselineskip}{\dtl at offset@y}%
+         \dtldiv{\dtl at x}{\dtl at x}{\dtl at scale@y}%
+         \dtldiv{\dtl at x}{\dtl at x}{65536}%
+         \dtladd{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at x}%
+         \dtlmul{\dtl at x}{\dtl at dx}{0.5}%
+         \draw (\DTLminX,\DTLminY) ++(\dtl at x,-\dtl at ticlabeloffset)
+            node[anchor=north] {\dtl at xlabel};
+      \fi
+      \ifDTLxminortics
+         \dtlsub{\dtl at ticklength}{\number\DTLminorticklength}{-\dtl at offset@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@y}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \@for\dtl at thistick:=\dtl at xminorticlist\do{%
+           \ifDTLxticsin
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,\dtl at ticklength);
+             \draw (\dtl at thistick,\DTLminY)
+                 ++ (0,-\dtl at ticlabeloffset) node[anchor=north] {\dtl at thislabel};
+           \else
+             \draw (\dtl at thistick,\DTLminY) -- ++(0,-\dtl at ticklength)
+                 ++ (0,-\dtl at ticlabeloffset) node[anchor=north] {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLxticsin
+               \draw (\dtl at thistick,\DTLmaxY) -- ++(0,-\dtl at ticklength);
+             \else
+             \draw (\dtl at thistick,\DTLmaxY) -- ++(0,\dtl at ticklength);
+             \fi
+           \fi
+        }%
+      \fi
+      \ifDTLytics
+         \dtlsub{\dtl at ticklength}{\number\DTLticklength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \dtladd{\dtl at ticlabeloffset}{\number\DTLticklabeloffset}{0}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\DTLticklabeloffset}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \@for\dtl at thistick:=\dtl at yticlist\do{%
+           \let\dtl at thisticklabel\dtl at thistick
+           \ifx\dtl at yticlabels\relax
+             \dtlround{\dtl at thislabel}{\dtl at thistick}
+                     {\c at DTLplotroundXvar}%
+           \else
+             \dtl at chopfirst\dtl at yticlabels\dtl at thislabel\dtl at rest
+             \let\dtl at yticlabels=\dtl at rest
+           \fi
+           \ifDTLyticsin
+             \draw (\DTLminX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \draw (\DTLminX,\dtl at thistick)
+                 ++ (-\dtl at ticlabeloffset,0) node[anchor=east] {\dtl at thislabel};
+           \else
+             \draw (\DTLminX,\dtl at thistick) -- ++(-\dtl at ticklength,0)
+                 ++ (-\dtl at ticlabeloffset,0) node[anchor=east] {\dtl at thislabel};
+           \fi
+           \ifDTLbox
+             \ifDTLyticsin
+               \draw (\DTLmaxX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+             \else
+             \draw (\DTLmaxX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \fi
+           \fi
+         }%
+      \fi
+      \ifx\dtl at ylabel\relax
+      \else
+         \setlength{\dtl at tmplength}{\baselineskip}%
+         \addtolength{\dtl at tmplength}{\dtl at yticlabelwidth}%
+         \addtolength{\dtl at tmplength}{\DTLticklabeloffset}%
+         \dtlsub{\dtl at ticlabeloffset}{\number\dtl at tmplength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticlabeloffset}{\dtl at ticlabeloffset}{65536}%
+         \dtlmul{\dtl at y}{\dtl at dy}{0.5}%
+         \draw (\DTLminX,\DTLminY) ++(-\dtl at ticlabeloffset,\dtl at y)
+            node[rotate=90,anchor=south] {\dtl at ylabel};
+      \fi
+      \ifDTLyminortics
+         \dtlsub{\dtl at ticklength}{\number\DTLminorticklength}{-\dtl at offset@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{\dtl at scale@x}%
+         \dtldiv{\dtl at ticklength}{\dtl at ticklength}{65536}%
+         \@for\dtl at thistick:=\dtl at yminorticlist\do{%
+           \ifDTLyticsin
+             \draw (\DTLminX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+           \else
+             \draw (\DTLminX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+           \fi
+           \ifDTLbox
+             \ifDTLyticsin
+               \draw (\DTLmaxX,\dtl at thistick) -- ++(-\dtl at ticklength,0);
+             \else
+             \draw (\DTLmaxX,\dtl at thistick) -- ++(\dtl at ticklength,0);
+             \fi
+           \fi
+        }%
+      \fi
+   \end{scope}
+        \@for\dtl at thisdb:=#2\do{%
+          \ifx\dtl at plotmarkcolorlist\@empty
+            \let\dtl at plotmarkcolorlist=\DTLplotmarkcolors
+          \fi
+          \dtl at chopfirst\dtl at plotmarkcolorlist\dtl at thisplotmarkcolor
+             \dtl at remainder
+          \let\dtl at plotmarkcolorlist=\dtl at remainder
+          \ifDTLshowmarkers
+            \ifx\dtl at plotmarklist\@empty
+               \let\dtl at plotmarklist=\DTLplotmarks
+            \fi
+            \dtl at chopfirst\dtl at plotmarklist\dtl at thisplotmark
+               \dtl at remainder
+            \let\dtl at plotmarklist=\dtl at remainder
+            \ifx\dtl at thisplotmark\relax
+              \let\dtl at mark=\relax
+            \else
+              \expandafter\toks@\expandafter{\dtl at thisplotmark}%
+              \ifx\dtl at thisplotmarkcolor\@empty
+                \edef\dtl at mark{\the\toks@}%
+              \else
+                \edef\dtl at mark{%
+                    \noexpand\color{\dtl at thisplotmarkcolor}%
+                  \the\toks@}%
+              \fi
+            \fi
+          \else
+            \let\dtl at mark=\relax
+          \fi
+          \ifx\dtl at plotlinecolorlist\@empty
+            \let\dtl at plotlinecolorlist=\DTLplotlinecolors
+          \fi
+          \dtl at chopfirst\dtl at plotlinecolorlist\dtl at thisplotlinecolor
+             \dtl at remainder
+          \let\dtl at plotlinecolorlist=\dtl at remainder
+          \ifDTLshowlines
+            \ifx\dtl at plotlinelist\@empty
+               \let\dtl at plotlinelist=\DTLplotlines
+            \fi
+            \dtl at chopfirst\dtl at plotlinelist\dtl at thisplotline
+               \dtl at remainder
+            \let\dtl at plotlinelist=\dtl at remainder
+            \expandafter\ifx\dtl at thisplotline\relax
+            \let\dtl at linestyle=\relax
+          \else
+            \expandafter\toks@\expandafter{\dtl at thisplotline}%
+            \ifx\dtl at thisplotlinecolor\@empty
+              \edef\dtl at linestyle{\the\toks@}%
+            \else
+              \edef\dtl at linestyle{%
+                  \noexpand\color{\dtl at thisplotlinecolor}%
+                \the\toks@}%
+            \fi
+          \fi
+        \else
+          \let\dtl at linestyle=\relax
+        \fi
+        \ifnum\dtl at legendsetting>0\relax
+          \dtl at chopfirst\dtl at legendlabels\dtl at thislabel\dtl at rest
+          \let\dtl at legendlabels=\dtl at rest
+          \expandafter\toks@\expandafter{\dtl at mark}%
+          \expandafter\@dtl at toks\expandafter{\dtl at linestyle}%
+          \edef\dtl at addtolegend{\noexpand\DTLaddtoplotlegend
+            {\the\toks@}{\the\@dtl at toks}{\dtl at thislabel}}%
+          \dtl at addtolegend
+        \fi
+        \def\dtl at stream{\pgfplotstreamstart}%
+        \@sDTLforeach[#1]{\dtl at thisdb}{\dtl at x=\dtl at xkey,%
+            \dtl at y=\dtl at ykey}{%
+          \DTLconverttodecimal{\dtl at x}{\dtl at decx}%
+          \DTLconverttodecimal{\dtl at y}{\dtl at decy}%
+          \ifthenelse{%
+            \DTLisclosedbetween{\dtl at x}{\DTLminX}{\DTLmaxX}%
+            \and
+            \DTLisclosedbetween{\dtl at y}{\DTLminY}{\DTLmaxY}%
+            }%
+            {%
+              \expandafter\toks@\expandafter{\dtl at stream}%
+              \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+              \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+              \dtlround{\dtl at decx}{\dtl at decx}{1}%
+              \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+              \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+              \dtlround{\dtl at decy}{\dtl at decy}{1}%
+              \edef\dtl at stream{\the\toks@
+                \noexpand\pgfplotstreampoint
+                 {\noexpand\pgfpointxy{\dtl at decx}{\dtl at decy}}}%
+          }{}%
+        }%
+        \expandafter\toks@\expandafter{\dtl at stream}%
+        \edef\dtl at stream{\the\toks@\noexpand\pgfplotstreamend}%
+        \ifx\dtl at linestyle\relax
+        \else
+          \begin{scope}
+          \dtl at linestyle
+          \pgfplothandlerlineto
+          \dtl at stream
+          \pgfusepath{stroke}
+          \end{scope}
+        \fi
+        \ifx\dtl at mark\relax
+        \else
+          \begin{scope}
+          \pgfplothandlermark{\dtl at mark}%
+          \dtl at stream
+          \pgfusepath{stroke}
+          \end{scope}
+        \fi
+        }%
+        \ifcase\dtl at legendsetting
+      % none
+        \or % north
+         \dtlmul{\dtl at decx}{\dtl at dx}{0.5}%
+         \dtladd{\dtl at decx}{\DTLminX}{\dtl at decx}%
+         \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(0,-\DTLlegendyoffset)
+            node[anchor=north]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % north east
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,-\DTLlegendyoffset)
+            node[anchor=north east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % east
+         \dtlmul{\dtl at decy}{\dtl at dy}{0.5}%
+         \dtladd{\dtl at decy}{\DTLminY}{\dtl at decy}%
+         \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,0)
+            node[anchor=east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south east
+         \dtlmul{\dtl at decx}{\DTLmaxX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(-\DTLlegendxoffset,\DTLlegendyoffset)
+            node[anchor=south east]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south
+         \dtlmul{\dtl at decx}{\dtl at dx}{0.5}%
+         \dtladd{\dtl at decx}{\DTLminX}{\dtl at decx}%
+         \dtlmul{\dtl at decx}{\dtl at decx}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(0,\DTLlegendyoffset)
+            node[anchor=south]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % south west
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLminY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,\DTLlegendyoffset)
+            node[anchor=south west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % west
+         \dtlmul{\dtl at decy}{\dtl at dy}{0.5}%
+         \dtladd{\dtl at decy}{\DTLminY}{\dtl at decy}%
+         \dtlmul{\dtl at decy}{\dtl at decy}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,0)
+            node[anchor=west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \or % north west
+         \dtlmul{\dtl at decx}{\DTLminX}{\dtl at scale@x}%
+         \dtladd{\dtl at decx}{\dtl at decx}{\dtl at offset@x}%
+         \dtlmul{\dtl at decy}{\DTLmaxY}{\dtl at scale@y}%
+         \dtladd{\dtl at decy}{\dtl at decy}{\dtl at offset@y}%
+         \draw (\dtl at decx,\dtl at decy) ++(\DTLlegendxoffset,-\DTLlegendyoffset)
+            node[anchor=north west]
+            {\DTLformatlegend
+              {\begin{tabular}{cl}\dtl at legend\end{tabular}}%
+            };
+        \fi
+       \pgftransformcm{\dtl at scale@x}{0}{0}{\dtl at scale@y}%
+         {\pgfpoint{\dtl at offset@x pt}{\dtl at offset@y pt}}%
+       \let\dtlplothandlermark\@dtlplothandlermark
+        \DTLplotatendtikz
+       \end{tikzpicture}
+    \fi
+  \fi
+\egroup
+}
+\def\dtl at getbounds#1,#2,#3,#4\@nil{%
+\def\DTLminX{#1}%
+\def\DTLminY{#2}%
+\def\DTLmaxX{#3}%
+\def\DTLmaxY{#4}%
+\dtlifnumgt{\DTLminX}{\DTLmaxX}
+{%
+ \PackageError{dataplot}{Min X > Max X in bounds #1,#2,#3,#4}{%
+ The bounds must be specified as minX,minY,maxX,maxY}%
+}{}%
+\dtlifnumgt{\DTLminY}{\DTLmaxY}
+{%
+ \PackageError{dataplot}{Min Y > Max Y in bounds #1,#2,#3,#4}{%
+ The bounds must be specified as minX,minY,maxX,maxY}%
+}{}%
+}
+\newcommand*{\dtl at constructticklist}[4]{%
+  \DTLifFPopenbetween{0}{#1}{#2}%
+  {%
+    \dtlsub{\@dtl at width}{0}{#1}%
+    \dtldiv{\@dtl at neggap}{\@dtl at width}{10}%
+    \dtlifnumlt{\@dtl at neggap}{#3}%
+    {%
+      \edef\@dtl at neggap{#3}%
+    }%
+    {}%
+    \dtldiv{\@dtl at posgap}{#2}{10}%
+    \dtlifnumlt{\@dtl at posgap}{#3}%
+    {%
+      \edef\@dtl at posgap{#3}%
+    }%
+    {}%
+    \dtlmax{\@dtl at gap}{\@dtl at neggap}{\@dtl at posgap}%
+    \dtlifnumgt{\@dtl at gap}{\@dtl at width}%
+    {}%
+    {%
+      \dtl at constructticklistwithgapz{#1}{#2}{#4}{\@dtl at gap}%
+    }%
+  }%
+  {%
+    \dtlsub{\@dtl at width}{#2}{#1}%
+    \dtldiv{\@dtl at gap}{\@dtl at width}{10}%
+    \dtlifnumlt{\@dtl at gap}{#3}%
+    {%
+      \dtlifnumgt{#3}{\@dtl at width}%
+      {%
+         \def#4{#1,#2}%
+      }%
+      {%
+        \dtl at constructticklistwithgap{#1}{#2}{#4}{#3}%
+      }
+    }%
+    {%
+      \dtl at constructticklistwithgap{#1}{#2}{#4}{\@dtl at gap}%
+    }%
+  }%
+}
+\newcommand*{\dtl at constructticklistwithgap}[4]{%
+\edef\@dtl at thistick{#1}%
+\edef#3{#1}%
+\dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+\whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{#2}}{%
+  \expandafter\toks@\expandafter{\@dtl at thistick}%
+  \edef#3{#3,\the\toks@}%
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+}%
+\expandafter\toks@\expandafter{#2}%
+\edef#3{#3,\the\toks@}%
+}
+\newcommand*{\dtl at constructticklistwithgapz}[4]{%
+  \edef\@dtl at thistick{0}%
+  \edef#3{0}%
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+  \whiledo{\DTLisFPopenbetween{\@dtl at thistick}{0}{#2}}%
+  {%
+    \expandafter\toks@\expandafter{\@dtl at thistick}%
+    \edef#3{#3,\the\toks@}%
+    \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+  }%
+  \expandafter\toks@\expandafter{#2}%
+  \edef#3{#3,\the\toks@}%
+  \dtlifnumeq{#1}{0}%
+  {}%
+  {%
+    \edef\@dtl at thistick{0}%
+    \dtlsub{\@dtl at thistick}{\@dtl at thistick}{#4}%
+    \whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{0}}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at thistick}%
+      \edef#3{\the\toks@,#3}%
+      \dtlsub{\@dtl at thistick}{\@dtl at thistick}{#4}%
+    }%
+    \expandafter\toks@\expandafter{#1}%
+    \edef#3{\the\toks@,#3}%
+  }%
+}
+\newcommand*{\dtl at constructminorticklist}[4]{%
+  \dtlsub{\@dtl at width}{#2}{#1}%
+  \dtlmul{\@dtl at width}{\@dtl at width}{#3}%
+  \dtldiv{\@dtl at gap}{\@dtl at width}{10}%
+  \setlength\dtl at tmplength{\@dtl at gap sp}%
+  \ifdim\dtl at tmplength<\DTLminminortickgap
+    \dtldiv{\@dtl at gap}{\@dtl at width}{4}%
+    \setlength\dtl at tmplength{\@dtl at gap sp}%
+    \ifdim\dtl at tmplength<\DTLminminortickgap
+      \dtldiv{\@dtl at gap}{\@dtl at width}{2}%
+      \setlength\dtl at tmplength{\@dtl at gap sp}%
+      \ifdim\dtl at tmplength<\DTLminminortickgap
+        \let\@dtl at gap=\@dtl at width
+      \fi
+    \fi
+  \fi
+  \dtldiv{\@dtl at gap}{\@dtl at gap}{#3}%
+  \dtl at constructticklistwithgapex{#1}{#2}{\dtl at tmp}{\@dtl at gap}%
+  \ifx#4\@empty
+    \let#4=\dtl at tmp
+  \else
+    \expandafter\toks@\expandafter{#4}%
+    \edef#4{#4,\dtl at tmp}%
+  \fi
+}
+\newcommand*{\dtl at constructticklistwithgapex}[4]{%
+\edef\@dtl at thistick{#1}%
+\let#3=\@empty
+\dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+\whiledo{\DTLisFPopenbetween{\@dtl at thistick}{#1}{#2}}{%
+  \expandafter\toks@\expandafter{\@dtl at thistick}%
+  \ifx#3\@empty
+    \edef#3{\the\toks@}%
+  \else
+    \edef#3{#3,\the\toks@}%
+  \fi
+  \dtladd{\@dtl at thistick}{\@dtl at thistick}{#4}%
+}%
+}
+\newcommand*{\DTLaddtoplotlegend}[3]{%
+\def\dtl at legendline{}%
+\ifx\relax#2\relax
+\else
+  \toks@{#2%
+  \pgfpathmoveto{\pgfpoint{-10pt}{0pt}}%
+  \pgfpathlineto{\pgfpoint{10pt}{0pt}}%
+  \pgfusepath{stroke}}%
+  \edef\dtl at legendline{\the\toks@}%
+\fi
+\ifx\relax#1\relax
+\else
+  \toks@{#1}%
+  \expandafter\@dtl at toks\expandafter{\dtl at legendline}%
+  \edef\dtl at legendline{\the\@dtl at toks\the\toks@}%
+\fi
+\expandafter\toks@\expandafter{\dtl at legendline}%
+\ifx\dtl at legend\@empty
+  \xdef\dtl at legend{\noexpand\tikz\the\toks@; \noexpand& #3}%
+\else
+  \expandafter\@dtl at toks\expandafter{\dtl at legend}%
+  \xdef\dtl at legend{\the\@dtl at toks\noexpand\\%
+    \noexpand\tikz\the\toks@; \noexpand& #3}%
+\fi
+}
+\endinput
+%%
+%% End of file `dataplot-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/dataplot-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/dataplot.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/dataplot.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/dataplot.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{dataplot-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{dataplot}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{dataplot}[2025/03/05 v3.0.1 (NLCT)]
 \IfPackageLoadedTF{datatool}
 {
   \DeclareOption*{\expandafter\DTLsetup\expandafter{\CurrentOption}}

Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,3356 @@
+%%
+%% This is file `datatool-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifthen}
+\RequirePackage{xfor}
+\RequirePackage{substr}
+\RequirePackage{etoolbox}
+\newcommand*{\@dtl at separator}{,}
+\newcommand*{\DTLsetseparator}[1]{%
+  \renewcommand*{\@dtl at separator}{#1}%
+  \@dtl at construct@lopoffs
+}
+\begingroup
+\catcode`\^^I12
+\gdef\DTLsettabseparator{%
+  \catcode`\^^I12
+  \DTLsetseparator{^^I}%
+}
+\gdef\DTLmaketabspace{%
+  \catcode`\^^I10\relax
+}
+\endgroup
+\begingroup
+\catcode`\"12\relax
+\gdef\@dtl at delimiter{"}
+\endgroup
+\newcommand*\DTLsetdelimiter[1]{%
+  \renewcommand*{\@dtl at delimiter}{#1}%
+  \@dtl at construct@lopoffs
+}
+\edef\@dtl at construct@lopoff#1#2{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at lopoff#1##1##2\noexpand\to##3##4{%
+      \noexpand\ifx#2##1\noexpand\relax
+        \noexpand\ifstrempty{##1}%
+        {\noexpand\@dtl at qlopoff#1{}##2\noexpand\to##3##4\relax}%
+        {%
+          \noexpand\dtl at ifsingle{##1}%
+          {\noexpand\@dtl at qlopoff#1##1##2\noexpand\to##3##4\relax}%
+          {\noexpand\@dtl at qlopoff#1{##1}##2\noexpand\to##3##4\relax}%
+        }%
+      \noexpand\else
+        \noexpand\ifstrempty{##1}%
+        {\noexpand\@dtl at lop@ff#1{}##2\noexpand\to##3##4\relax}%
+        {%
+          \noexpand\dtl at ifsingle{##1}%
+          {\noexpand\@dtl at lop@ff#1##1##2\noexpand\to##3##4\relax}%
+          {\noexpand\@dtl at lop@ff#1{##1}##2\noexpand\to##3##4\relax}%
+        }%
+      \noexpand\fi
+  }%
+}
+\edef\@dtl at construct@qlopoff#1#2{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at qlopoff#1#2##1#2#1##2\noexpand\to##3##4{%
+      \noexpand\def##4{##1}%
+      \noexpand\DTLsubstituteall{##4}{#2#2}{#2}%
+      \noexpand\edef\noexpand\@dtl at dosubs{%
+        \noexpand\noexpand\noexpand\DTLsubstituteall{\noexpand\noexpand##4}%
+        {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname#2}%
+        {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname}%
+      }%
+      \noexpand\@dtl at dosubs
+      \noexpand\def##3{#1##2}%
+  }%
+}
+\edef\@dtl at construct@lop at ff#1{%
+  \noexpand\long
+    \noexpand\def\noexpand\@dtl at lop@ff#1##1#1##2\noexpand\to##3##4{%
+      \noexpand\def##4{##1}%
+      \noexpand\def##3{#1##2}%
+  }%
+}
+\newcommand{\@dtl at construct@lopoffs}{%
+  \edef\@dtl at chars{{\@dtl at separator}{\@dtl at delimiter}}%
+  \expandafter\@dtl at construct@lopoff\@dtl at chars
+  \expandafter\@dtl at construct@qlopoff\@dtl at chars
+  \expandafter\@dtl at construct@lop at ff\expandafter{\@dtl at separator}%
+}
+\define at key{datatool.sty}{separator}{%
+  \DTLsetseparator{#1}%
+}
+\define at key{datatool.sty}{delimiter}{%
+  \DTLsetdelimiter{#1}%
+}
+\define at boolkey{datatool.sty}[dtl]{verbose}[true]{}
+\define at choicekey{datatool.sty}{math}[\val\nr]{fp,pgfmath}{%
+  \renewcommand*\@dtl at mathprocessor{#1}%
+}
+\providecommand*{\@dtl at mathprocessor}{fp}
+\newcommand*{\@dtl at set@options}{}
+\define at choicekey{datatool.sty}{utf8}{true,false}[true]{%
+  \renewcommand*{\@dtl at set@options}{\setbool{@dtl at utf8}{#1}}%
+}
+\ProcessOptionsX
+\@dtl at construct@lopoffs
+\RequirePackage{datatool-base}[=v2.32]
+\@dtl at set@options
+\DeclareRobustCommand{\DTLpar}{\par}
+\newcommand*{\DTLnewdb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \PackageError{datatool}{Database `#1' already exists}{}%
+  }%
+  {%
+    \dtl at message{Creating database `#1'}%
+    \expandafter\newtoks\csname dtldb@#1\endcsname
+    \expandafter\newtoks\csname dtlkeys@#1\endcsname{}%
+    \expandafter\newcount\csname dtlrows@#1\endcsname
+    \expandafter\newcount\csname dtlcols@#1\endcsname
+  }%
+}
+\newcommand*{\DTLcleardb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \csname dtldb@#1\endcsname{}%
+    \csname dtlkeys@#1\endcsname{}%
+    \csname dtlrows@#1\endcsname=0\relax
+    \csname dtlcols@#1\endcsname=0\relax
+  }%
+  {%
+    \PackageError{Can't clear database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLdeletedb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\let\csname dtldb@#1\endcsname\undefined
+    \expandafter\let\csname dtlkeys@#1\endcsname\undefined
+    \expandafter\let\csname dtlrows@#1\endcsname\undefined
+    \expandafter\let\csname dtlcols@#1\endcsname\undefined
+  }%
+  {%
+    \PackageError{Can't delete database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLgnewdb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+     \PackageError{datatool}{Database `#1' already exists}{}%
+  }%
+  {%
+    \dtl at message{Creating database `#1'}%
+    \expandafter\global\expandafter\newtoks\csname dtldb@#1\endcsname
+    \expandafter\global\expandafter\newtoks\csname dtlkeys@#1\endcsname{}%
+    \expandafter\global\expandafter\newcount\csname dtlrows@#1\endcsname
+    \expandafter\global\expandafter\newcount\csname dtlcols@#1\endcsname
+  }%
+}
+\newcommand*{\DTLgdeletedb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\global\expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\global\expandafter\let\csname dtldb@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlkeys@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlrows@#1\endcsname\undefined
+    \expandafter\global\expandafter\let\csname dtlcols@#1\endcsname\undefined
+  }%
+  {%
+    \PackageError{Can't delete database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLgcleardb}[1]{%
+  \DTLifdbexists{#1}%
+  {%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \expandafter\global\expandafter\let\csname dtl at ci@#1@\@dtl at key\endcsname\undefined
+    }%
+    \expandafter\global\csname dtldb@#1\endcsname{}%
+    \expandafter\global\csname dtlkeys@#1\endcsname{}%
+    \expandafter\global\csname dtlrows@#1\endcsname=0\relax
+    \expandafter\global\csname dtlcols@#1\endcsname=0\relax
+  }%
+  {%
+    \PackageError{Can't clear database `#1':
+       database doesn't exist}{}{}%
+  }%
+}
+\newcommand*{\DTLrowcount}[1]{%
+  \expandafter\number\csname dtlrows@#1\endcsname
+}
+\newcommand*{\DTLcolumncount}[1]{%
+  \expandafter\number\csname dtlcols@#1\endcsname
+}
+\newcommand{\DTLifdbempty}[3]{%
+  \DTLifdbexists{#1}%
+    {\@DTLifdbempty{#1}{#2}{#3}}%
+    {\PackageError{Can't check if database `#1' is empty:
+       database doesn't exist}{}{}}%
+}
+\newcommand{\@DTLifdbempty}[3]{%
+  \expandafter\ifnum\csname dtlrows@#1\endcsname=0\relax
+    #2%
+  \else
+    #3%
+  \fi
+}
+\newcommand*{\DTLnewrow}{%
+  \@ifstar\@sDTLnewrow\@DTLnewrow
+}
+\newcommand*{\@DTLnewrow}[1]{%
+\DTLifdbexists{#1}%
+  {\@sDTLnewrow{#1}}%
+  {\PackageError{datatool}{Can't add new row to database `#1':
+     database doesn't exist}{}}%
+}
+\newcommand*{\@sDTLnewrow}[1]{%
+  \global\advance\csname dtlrows@#1\endcsname by 1\relax
+  \@dtl at toks@gput at right@cx{dtldb@#1}{%
+     \noexpand\db at row@elt at w%
+       \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+       \noexpand\db at row@id at end@%
+       \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+       \noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+  }%
+  \dtl at message{New row added to database `#1'}%
+}
+\newcount\dtlcolumnnum
+\newcount\dtlrownum
+\newcommand*{\DTLifhaskey}{\@ifstar\@sDTLifhaskey\@DTLifhaskey}
+\newcommand{\@DTLifhaskey}[4]{%
+   \DTLifdbexists{#1}%
+   {%
+     \@sDTLifhaskey{#1}{#2}{#3}{#4}%
+   }%
+   {%
+     \PackageError{datatool}{Database `#1' doesn't exist}{}%
+   }%
+}
+\newcommand{\@sDTLifhaskey}[4]{%
+  \@ifundefined{dtl at ci@#1@#2}%
+  {%
+    #4%
+  }%
+  {%
+    #3%
+  }%
+}
+\newcommand*{\DTLgetcolumnindex}{%
+  \@ifstar\@sdtl at getcolumnindex\@dtl at getcolumnindex
+}
+\newcommand*{\@dtl at getcolumnindex}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#3}%
+    {%
+      \@sdtl at getcolumnindex{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#2' doesn't contain
+       key `#3'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtl at getcolumnindex}[3]{%
+  \expandafter\let\expandafter#1\csname dtl at ci@#2@#3\endcsname
+}
+\newcommand*{\dtlcolumnindex}[2]{%
+  \csname dtl at ci@#1@#2\endcsname
+}
+\newcommand*{\DTLgetkeyforcolumn}{%
+  \@ifstar\@sdtlgetkeyforcolumn\@dtlgetkeyforcolumn}
+\newcommand*{\@dtlgetkeyforcolumn}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \ifnum#3<1\relax
+      \PackageError{datatool}{Invalid column index \number#3}{%
+      Column indices start at 1}%
+    \else
+      \expandafter\ifnum\csname dtlcols@#2\endcsname<#3\relax
+        \PackageError{datatool}{Index \number#3\space out of
+        range for database `#2'}{Database `#2' only has
+        \expandafter\number\csname dtlcols@#2\endcsname\space
+        columns}%
+      \else
+        \@sdtlgetkeyforcolumn{#1}{#2}{#3}%
+      \fi
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exists}{}%
+  }%
+}
+\newcommand*{\@sdtlgetkeyforcolumn}[3]{%
+  \edef\@dtl at dogetkeyforcolumn{\noexpand\@dtl at getkeyforcolumn
+    {\noexpand#1}{#2}{\number#3}}%
+  \@dtl at dogetkeyforcolumn
+}
+\newcommand*{\@dtl at getkeyforcolumn}[3]{%
+  \def\@dtl at get@keyforcolumn##1% before stuff
+    \db at plist@elt at w% start of block
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at key@id at w ##2\db at key@id at end@% key
+    \db at type@id at w ##3\db at type@id at end@% data type
+    \db at header@id at w ##4\db at header@id at end@% header
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at plist@elt at end@% end of block
+    ##5\q at nil{\def#1{##2}}%
+  \edef\@dtl at tmp{\expandafter\the\csname dtlkeys@#2\endcsname}%
+  \expandafter\@dtl at get@keyforcolumn\@dtl at tmp
+    \db at plist@elt at w% start of block
+    \db at col@id at w #3\db at col@id at end@ %index
+    \db at key@id at w \@nil\db at key@id at end@% key
+    \db at type@id at w \db at type@id at end@% data type
+    \db at header@id at w \db at header@id at end@% header
+    \db at col@id at w #3\db at col@id at end@% index
+    \db at plist@elt at end@% end of block
+    \q at nil
+}
+\def\DTLunsettype{}
+\def\DTLstringtype{0}
+\def\DTLinttype{1}
+\def\DTLrealtype{2}
+\def\DTLcurrencytype{3}
+\newcommand*{\DTLgetdatatype}{%
+  \@ifstar\@sdtlgetdatatype\@dtlgetdatatype
+}
+\newcommand*{\@dtlgetdatatype}[3]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#3}%
+    {%
+      \@sdtlgetdatatype{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Key `#3' undefined in database `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtlgetdatatype}[3]{%
+  \edef\@dtl at dogetdata{\noexpand\@dtl at getdatatype{\noexpand#1}%
+   {\expandafter\the\csname dtlkeys@#2\endcsname}%
+   {\dtlcolumnindex{#2}{#3}}}%
+  \@dtl at dogetdata
+}
+\newcommand*{\@dtl at getdatatype}[3]{%
+  \def\@dtl at get@keydata##1% stuff before
+    \db at plist@elt at w% start of key block
+     \db at col@id at w #3\db at col@id at end@% column index
+      \db at key@id at w ##2\db at key@id at end@% key id
+      \db at type@id at w ##3\db at type@id at end@% data type
+      \db at header@id at w ##4\db at header@id at end@% header
+     \db at col@id at w #3\db at col@id at end@% column index
+    \db at plist@elt at end@% end of key block
+    ##5% stuff afterwards
+    \q at nil{\def#1{##3}}%
+  \@dtl at get@keydata#2\q at nil
+}
+\newcommand*{\@dtl at getprops}[7]{%
+  \def\@dtl at get@keydata##1% stuff before
+    \db at plist@elt at w% start of key block
+     \db at col@id at w #7\db at col@id at end@% column index
+      \db at key@id at w ##2\db at key@id at end@% key id
+      \db at type@id at w ##3\db at type@id at end@% data type
+      \db at header@id at w ##4\db at header@id at end@% header
+     \db at col@id at w #7\db at col@id at end@% column index
+    \db at plist@elt at end@% end of key block
+    ##5% stuff afterwards
+    \q at nil{%
+      \def#1{##2}% key
+      \def#2{##3}% data type
+      #3={##4}% header
+      #4={##1}% before stuff
+      #5={##5}% after stuff
+    }%
+  \@dtl at get@keydata#6\q at nil
+}
+\newtoks\@dtl at before
+\newtoks\@dtl at after
+\newtoks\@dtl at colhead
+\newcommand*{\DTLaddcolumn}{%
+   \@ifstar\@sDTLaddcolumn\@DTLaddcolumn
+}
+\newcommand{\@DTLaddcolumn}[2]{%
+  \DTLifdbexists{#1}%
+    {\@dtl at updatekeys{#1}{#2}{}}%
+    {\PackageError{datatool}{Can't add new column to database `#1':
+      database doesn't exist}{}}%
+}
+\newcommand{\s at DTLaddcolumn}[2]{%
+  \@dtl at updatekeys{#1}{#2}{}%
+}
+\newcommand*{\@dtl at updatekeys}[3]{%
+  \@sDTLifhaskey{#1}{#2}%
+  {%
+    \expandafter\dtlcolumnnum\expandafter
+      =\dtlcolumnindex{#1}{#2}\relax
+    \edef\@dtl at dogetprops{\noexpand\@dtl at getprops
+      {\noexpand\@dtl at key}{\noexpand\@dtl at type}%
+      {\noexpand\@dtl at colhead}{\noexpand\@dtl at before}%
+      {\noexpand\@dtl at after}{\the\csname dtlkeys@#1\endcsname}%
+      {\number\dtlcolumnnum}}%
+    \@dtl at dogetprops
+    \ifstrempty{#3}%
+    {%
+    }%
+    {%
+      \let\@dtl at oldtype\@dtl at type
+      \@dtl at checknumerical{#3}%
+      \ifdefempty{\@dtl at type}%
+      {%
+        \edef\@dtl at type{\number\@dtl at datatype}%
+      }%
+      {%
+        \ifcase\@dtl at datatype % string
+          \def\@dtl at type{0}%
+        \or % int
+        \or % real
+          \ifnum\@dtl at type=1\relax
+            \def\@dtl at type{2}%
+          \fi
+        \or % currency
+          \ifnum\@dtl at type>0\relax
+            \def\@dtl at type{3}%
+          \fi
+        \fi
+      }%
+      \ifx\@dtl at oldtype\@dtl at type
+      \else
+        \@dtl at toks@gconcat at middle@cx{dtlkeys@#1}%
+        {\@dtl at before}%
+        {%
+          \noexpand\db at plist@elt at w% start of key block
+            \noexpand\db at col@id at w \the\dtlcolumnnum
+              \noexpand\db at col@id at end@% column index
+            \noexpand\db at key@id at w #2\noexpand\db at key@id at end@% key id
+            \noexpand\db at type@id at w \@dtl at type
+              \noexpand\db at type@id at end@% data type
+            \noexpand\db at header@id at w \the\@dtl at colhead
+              \noexpand\db at header@id at end@% header
+            \noexpand\db at col@id at w \the\dtlcolumnnum
+              \noexpand\db at col@id at end@% column index
+            \noexpand\db at plist@elt at end@% end of key block
+        }%
+        {\@dtl at after}%
+      \fi
+    }%
+  }%
+  {%
+    \expandafter\global\expandafter\advance
+      \csname dtlcols@#1\endcsname by 1\relax
+    \dtlcolumnnum=\csname dtlcols@#1\endcsname\relax
+    \expandafter\xdef\csname dtl at ci@#1@#2\endcsname{%
+      \number\dtlcolumnnum}%
+    \ifstrempty{#2}%
+    {%
+      \edef\@dtl at type{}% don't know data type yet
+    }%
+    {%
+      \@dtl at checknumerical{#3}%
+      \edef\@dtl at type{\number\@dtl at datatype}%
+    }%
+    \@dtl at toks@gput at right@cx{dtlkeys@#1}%
+    {%
+      \noexpand\db at plist@elt at w
+      \noexpand\db at col@id at w \the\dtlcolumnnum
+        \noexpand\db at col@id at end@
+      \noexpand\db at key@id at w #2\noexpand\db at key@id at end@
+      \noexpand\db at type@id at w \@dtl at type
+        \noexpand\db at type@id at end@
+      \noexpand\db at header@id at w #2\noexpand\db at header@id at end@
+      \noexpand\db at col@id at w \the\dtlcolumnnum
+        \noexpand\db at col@id at end@
+      \noexpand\db at plist@elt at end@
+    }%
+  }%
+}
+\newcommand*{\DTLsetheader}{\@ifstar\@sDTLsetheader\@DTLsetheader}
+\newcommand*{\@DTLsetheader}[3]{%
+  \DTLifdbexists{#1}%
+  {%
+    \@sDTLifhaskey{#1}{#2}%
+    {%
+      \@sDTLsetheader{#1}{#2}{#3}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#1' doesn't contain key
+      `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sDTLsetheader}[3]{%
+  \expandafter\dtlcolumnnum\expandafter
+    =\dtlcolumnindex{#1}{#2}\relax
+  \@dtl at setheaderforindex{#1}{\dtlcolumnnum}{#3}%
+}
+\newcommand*{\@dtl at setheaderforindex}[3]{%
+  \edef\@dtl at dogetprops{\noexpand\@dtl at getprops
+    {\noexpand\@dtl at key}{\noexpand\@dtl at type}%
+    {\noexpand\@dtl at colhead}{\noexpand\@dtl at before}%
+    {\noexpand\@dtl at after}{\the\csname dtlkeys@#1\endcsname}%
+    {\number#2}}%
+  \@dtl at dogetprops
+  \@dtl at colhead={#3}%
+  \edef\@dtl at colnum{\number#2}\relax
+  \@dtl at toks@gconcat at middle@cx{dtlkeys@#1}%
+  {\@dtl at before}%
+  {%
+    \noexpand\db at plist@elt at w% start of block
+      \noexpand\db at col@id at w \@dtl at colnum
+        \noexpand\db at col@id at end@% index
+      \noexpand\db at key@id at w \@dtl at key\noexpand\db at key@id at end@% key
+      \noexpand\db at type@id at w \@dtl at type
+        \noexpand\db at type@id at end@% data type
+      \noexpand\db at header@id at w \the\@dtl at colhead
+        \noexpand\db at header@id at end@% header
+      \noexpand\db at col@id at w \@dtl at colnum
+        \noexpand\db at col@id at end@% index
+    \noexpand\db at plist@elt at end@% end of block
+  }%
+  {\@dtl at after}%
+}
+\newcommand*{\dtlexpandnewvalue}{%
+  \def\@dtl at setnewvalue##1{\protected at edef\@dtl at tmp{##1}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at tmp}}%
+}
+\newcommand*{\dtlnoexpandnewvalue}{%
+  \def\@dtl at setnewvalue##1{\@dtl at toks{##1}}%
+}
+\dtlnoexpandnewvalue
+\newcommand{\DTLnewdbentry}{%
+   \@ifstar\@sDTLnewdbentry\@DTLnewdbentry
+}
+\newcommand{\@DTLnewdbentry}[3]{%
+  \DTLifdbexists{#1}%
+    {\@sDTLnewdbentry{#1}{#2}{#3}}%
+    {\PackageError{datatool}{Can't add new entry to database `#1':
+      database doesn't exist}{}}%
+}
+\newcommand*{\@sDTLnewdbentry}[3]{%
+  \@dtl at updatekeys{#1}{#2}{#3}%
+  \expandafter\dtlcolumnnum\expandafter
+    =\dtlcolumnindex{#1}{#2}\relax
+  \edef\dtl at dogetrow{\noexpand\dtlgetrow{#1}%
+    {\number\csname dtlrows@#1\endcsname}}%
+  \dtl at dogetrow
+  \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+     {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+  }%
+  \dtl at dogetentry
+  \ifx\dtl at entry\dtlnovalue
+    \@dtl at setnewvalue{#3}%
+    \@dtl at toks@gconcat at middle@cx{dtldb@#1}%
+    {\dtlbeforerow}%
+    {%
+      \noexpand\db at row@elt at w%
+      \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+        \noexpand\db at row@id at end@%
+      \the\dtlcurrentrow
+      \noexpand\db at col@id at w \number\dtlcolumnnum
+        \noexpand\db at col@id at end@%
+          \noexpand\db at col@elt at w \the\@dtl at toks
+            \noexpand\db at col@elt at end@%
+      \noexpand\db at col@id at w \number\dtlcolumnnum
+        \noexpand\db at col@id at end@%
+      \noexpand\db at row@id at w \number\csname dtlrows@#1\endcsname
+        \noexpand\db at row@id at end@%
+      \noexpand\db at row@elt at end@%
+    }%
+    {\dtlafterrow}%
+    \dtl at message{Added #2\space -> #3\space to database `#1'}%
+  \else
+    \PackageError{datatool}{Can't add entry with ID `#2' to
+      current row of database `#1'}{There is already an entry with
+      this ID in the current row}%
+  \fi
+}
+\newcommand{\DTLifdbexists}[3]{%
+  \@ifundefined{dtldb@#1}{#3}{#2}}
+\newcommand*{\DTLassign}[3]{%
+  \DTLifdbexists{#1}
+  {%
+    {%
+      \dtlgetrow{#1}{#2}%
+      \@dtl at assign{#3}{#1}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\DTLassignfirstmatch}[4]{%
+  \dtl at assignfirstmatch{#3}{#1}{#2}{#4}%
+}
+\newcommand*{\xDTLassignfirstmatch}[4]{%
+  \protected at edef\@dtl at asg@value{\expandonce{#3}}%
+  \expandafter\dtl at assignfirstmatch\expandafter
+   {\@dtl at asg@value}{#1}{#2}{#4}%
+}
+\newcommand*{\dtl at assignfirstmatch}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    {%
+      \dtlgetrowindex{\dtl at asg@rowidx}{#2}{\dtlcolumnindex{#2}{#3}}{#1}%
+      \ifx\dtl at asg@rowidx\dtlnovalue
+        \PackageError{datatool}{No match found for
+          \string\DTLassignfirstmatch{#2}{#3}{#1}{#4}}{}%
+      \else
+        \dtlgetrow{#2}{\dtl at asg@rowidx}%
+        \@dtl at assign{#4}{#2}%
+      \fi
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@dtl at assign}[2]{%
+  \ifstrempty{#1}{}%
+  {%
+    \@dtl at assigncmd#1,\@nil\@@{#2}%
+  }%
+}
+\def\@dtl at assigncmd#1#2=#3,#4\@@#5{%
+  \edef\@dtl at dbname{#5}%
+  \@sDTLifhaskey{#5}{#3}%
+  {%
+    \edef\@dtl at dogetentry{%
+      \noexpand\dtlgetentryfromcurrentrow
+        {\noexpand#1}{\dtlcolumnindex{#5}{#3}}}%
+    \@dtl at dogetentry
+    \ifdefequal{#1}{\dtlnovalue}%
+    {%
+      \@@dtl at setnull{#1}{#3}%
+    }%
+    {}%
+    \global\let#1=#1\relax
+  }%
+  {%
+    \PackageError{datatool}{Can't assign \string#1\space: there
+     is no key `#3' in data base `#5'}{}%
+    \global\let#1\DTLstringnull
+  }%
+  \def\dtl at tmp{#4}%
+  \ifx\@nnil\dtl at tmp
+    \let\@dtl at next\@dtl at assigncmdnoop
+  \else
+    \let\@dtl at next\@dtl at assigncmd
+  \fi
+  \@dtl at next#4\@@{#5}%
+}
+\def\@dtl at assigncmdnoop#1\@@#2{}
+\newcommand*{\@dtl at setnull}[2]{%
+  \@sDTLifhaskey{\@dtl at dbname}{#2}%
+  {%
+    \@@dtl at setnull{#1}{#2}%
+  }%
+  {%
+    \global\let#1=\DTLstringnull
+  }%
+}
+\newcommand*{\@@dtl at setnull}[2]{%
+  \@sdtlgetdatatype{\@dtl at type}{\@dtl at dbname}{#2}%
+  \ifnum0\@dtl at type=0\relax
+    \global\let#1=\DTLstringnull
+  \else
+    \global\let#1=\DTLnumbernull
+  \fi
+}
+\newcommand*{\DTLstringnull}{\@dtlstringnull}
+\newcommand*{\@dtlstringnull}{NULL}
+\newcommand*{\DTLnumbernull}{\@dtlnumbernull}
+\newcommand*{\@dtlnumbernull}{0}
+\newcommand*{\DTLifnull}[3]{%
+  \ifx#1\dtlnovalue
+    #2%
+  \else
+    \ifx#1\DTLstringnull
+      #2%
+    \else
+      \ifx#1\DTLnumbernull
+        #2%
+      \else
+        #3%
+      \fi
+    \fi
+  \fi
+}
+\newcommand*{\DTLifnullorempty}[3]{%
+  \ifdefempty{#1}{#2}{\DTLifnull{#1}{#2}{#3}}%
+}
+\def\@dtlnovalue{Undefined Value}
+\def\dtlnovalue{\@dtlnovalue}
+\newcommand*{\DTLgetkeydata}{%
+  \@ifstar\@sdtlgetkeydata\@dtlgetkeydata
+}
+\newcommand*{\@dtlgetkeydata}[5]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@sDTLifhaskey{#2}{#1}%
+    {%
+      \@sdtlgetkeydata{#1}{#2}{#3}{#4}{#5}%
+    }%
+    {%
+      \PackageError{datatool}{Key `#1' not defined in database
+        `#2'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@sdtlgetkeydata}[5]{%
+  \@sdtl at getcolumnindex{#3}{#2}{#1}%
+  \edef\@dtl at dogetkeydata{\noexpand\@dtl at getprops
+    {\noexpand\@dtl at key}{\noexpand#4}{\noexpand\@dtl at colhead}%
+    {\noexpand\@dtl at before}{\noexpand\@dtl at after}%
+    {\expandafter\the\csname dtlkeys@#2\endcsname}%
+    {#3}}%
+  \@dtl at dogetkeydata
+  \edef#5{\the\@dtl at toks}%
+}
+\newcommand{\dtl at gathervalues}[3][key]{%
+  \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#2}\do
+  {%
+    \dtlgetentryfromrow{\@dtl at tmp}{\@dtl at col}{#3}%
+    \ifx\@dtl at tmp\dtlnovalue
+      \@dtl at setnull{\@dtl at tmp}{\@dtl at key}%
+    \fi
+    \expandafter\let\csname @dtl@#1@\@dtl at key\endcsname\@dtl at tmp
+  }%
+}
+\newcommand{\dtl at g@gathervalues}[3][key]{%
+  \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#2}\do
+  {%
+    \dtlgetentryfromrow{\@dtl at tmp}{\@dtl at col}{#3}%
+    \ifx\@dtl at tmp\dtlnovalue
+      \@dtl at setnull{\@dtl at tmp}{\@dtl at key}%
+    \fi
+    \expandafter\global
+      \expandafter\let\csname @dtl@#1@\@dtl at key\endcsname\@dtl at tmp
+  }%
+}
+\newtoks\dtlcurrentrow
+\newtoks\dtlbeforerow
+\newtoks\dtlafterrow
+
+\newcommand*{\dtlgetrow}[2]{%
+  \dtlrownum=#2\relax
+  \edef\dtldbname{#1}%
+  \expandafter\toks@\expandafter=\csname dtldb@#1\endcsname
+  \edef\@dtl at dogetrow{\noexpand\@dtlgetrow{\the\toks@}{\number#2}}%
+  \@dtl at dogetrow
+}
+\newcommand{\edtlgetrowforvalue}[3]{%
+  \protected at edef\@dtl at dogetrowforvalue{%
+    \noexpand\dtlgetrowforvalue{#1}{#2}{#3}}%
+  \@dtl at dogetrowforvalue
+}
+\newcommand{\DTLfetch}[4]{%
+  \edtlgetrowforvalue{#1}{\dtlcolumnindex{#1}{#2}}{#3}%
+  \dtlgetentryfromcurrentrow{\dtlcurrentvalue}{\dtlcolumnindex{#1}{#4}}%
+  \dtlcurrentvalue
+}
+\newcommand*{\dtlgetrowforvalue}[3]{%
+  \dtlgetrowindex{\dtl at rowidx}{#1}{#2}{#3}%
+  \ifx\dtl at rowidx\dtlnovalue
+    \PackageError{datatool}{No row found in database `#1' for
+     column `\number#2' matching `#3'}{}%
+  \else
+    \dtlrownum=\dtl at rowidx\relax
+    \edef\dtldbname{#1}%
+    \expandafter\toks@\expandafter=\csname dtldb@#1\endcsname
+    \edef\@dtl at dogetrow{\noexpand\@dtlgetrow{\the\toks@}{\dtl at rowidx}}%
+    \@dtl at dogetrow
+  \fi
+}
+\newcommand*{\@dtlgetrow}[2]{%
+  \def\@dtl at getrow##1% before stuff
+    \db at row@elt at w% start of the row
+      \db at row@id at w #2\db at row@id at end@% row id
+        ##2%
+      \db at row@id at w #2\db at row@id at end@% row id
+    \db at row@elt at end@% end of the row
+        ##3% after stuff
+    \q at nil{\dtlbeforerow={##1}\dtlcurrentrow={##2}\dtlafterrow={##3}}%
+  \@dtl at getrow#1\q at nil
+}
+\newcommand*{\dtlrecombine}{%
+   \@dtl at toks@gconcat at middle@cx{dtldb@\dtldbname}%
+   {\dtlbeforerow}%
+   {%
+      \noexpand\db at row@elt at w
+        \noexpand\db at row@id at w
+          \number\dtlrownum
+        \noexpand\db at row@id at end@
+         \the\dtlcurrentrow
+        \noexpand\db at row@id at w
+          \number\dtlrownum
+        \noexpand\db at row@id at end@
+      \noexpand\db at row@elt at end@
+   }%
+   {\dtlafterrow}%
+}
+\newcommand{\dtlrecombineomitcurrent}{%
+  \dtl at decrementrows{\dtlafterrow}{\dtlrownum}
+  \csname dtldb@\dtldbname\endcsname=\dtlbeforerow
+  \@dtl at toks@gput at right@cx{dtldb@\dtldbname}{\the\dtlafterrow}%
+  \dtl at message{Removed row \number\dtlrownum\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlsplitrow}[4]{%
+  \def\@dtlsplitrow##1%before stuff
+    \db at col@id at w #2\db at col@id at end@% column id
+      ##2% unwanted stuff
+    \db at col@id at w #2\db at col@id at end@% column id
+    ##3% after stuff
+    \q at nil{\def#3{##1}\def#4{##3}}%
+   \@dtlsplitrow#1\q at nil
+}
+\newcommand*{\dtlreplaceentryincurrentrow}[2]{%
+  \edef\@dtl at do@splitrow{\noexpand\dtlsplitrow
+   {\the\dtlcurrentrow}%
+   {\number#2}%
+   {\noexpand\@dtl at before@cs}%
+   {\noexpand\@dtl at after@cs}}%
+  \@dtl at do@splitrow
+  \toks@{#1}%
+  \edef\@dtl at stuff{%
+    \expandonce\@dtl at before@cs
+      \noexpand\db at col@id at w \number#2\noexpand
+        \noexpand\db at col@id at end@% column id
+      \noexpand\db at col@elt at w
+        \the\toks@
+      \noexpand\db at col@elt at end@
+      \noexpand\db at col@id at w \number#2\noexpand
+        \noexpand\db at col@id at end@% column id
+    \expandonce\@dtl at after@cs
+  }%
+  \expandafter\dtlcurrentrow\expandafter{\@dtl at stuff}%
+  \@sdtlgetkeyforcolumn{\@dtl at key}{\dtldbname}{#2}%
+  \@dtl at updatekeys{\dtldbname}{\@dtl at key}{#1}%
+  \dtl at message{Updated \@dtl at key\space -> #1\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlremoveentryincurrentrow}[1]{%
+  \edef\@dtl at do@splitrow{\noexpand\dtlsplitrow
+   {\the\dtlcurrentrow}%
+   {\number#1}%
+   {\noexpand\@dtl at before@cs}%
+   {\noexpand\@dtl at after@cs}}%
+  \@dtl at do@splitrow
+  \edef\@dtl at stuff{%
+    \expandonce\@dtl at before@cs
+    \expandonce\@dtl at after@cs
+  }%
+  \expandafter\dtlcurrentrow\expandafter{\@dtl at stuff}%
+  \dtl at message{Removed entry from column \number#1\space\space in database
+    `\dtldbname'}%
+}
+\newcommand*{\dtlswapentriesincurrentrow}[2]{%
+  \dtlgetentryfromcurrentrow{\@dtl at entryI}{#1}%
+  \dtlgetentryfromcurrentrow{\@dtl at entryII}{#2}%
+  \expandafter\dtlreplaceentryincurrentrow\expandafter
+   {\@dtl at entryII}{#1}%
+  \expandafter\dtlreplaceentryincurrentrow\expandafter
+   {\@dtl at entryI}{#2}%
+}
+\newcommand*{\dtlgetentryfromcurrentrow}[2]{%
+  \dtlgetentryfromrow{#1}{#2}{\dtlcurrentrow}%
+}
+\newcommand*{\dtlgetentryfromrow}[3]{%
+  \edef\@dtl at do@getentry{\noexpand\dtl at getentryfromrow
+    {\noexpand#1}{\number#2}{\the#3}}%
+  \@dtl at do@getentry
+}
+\newcommand*{\dtl at getentryfromrow}[3]{%
+  \def\dtl at dogetentry##1% before stuff
+    \db at col@id at w #2\db at col@id at end@% Column id
+      \db at col@elt at w ##2\db at col@elt at end@% Value
+    \db at col@id at w #2\db at col@id at end@% Column id
+    ##3% Remaining stuff
+    \q at nil{\def#1{##2}}%
+  \dtl at dogetentry#3%
+    \db at col@id at w #2\db at col@id at end@%
+      \db at col@elt at w \@dtlnovalue\db at col@elt at end@%
+    \db at col@id at w #2\db at col@id at end@%
+    \q at nil
+}
+\newcommand*{\dtlappendentrytocurrentrow}[2]{%
+      \@dtl at updatekeys{\dtldbname}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\dtldbname}{#1}\relax
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{dtlcurrentrow}%
+        {%
+          \noexpand\db at col@id at w
+            \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w
+            \the\@dtl at toks
+          \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w
+             \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\dtldbname'}%
+      \else
+        \PackageError{datatool}{Can't append entry to row:
+          there is already an entry for key `#1' in this row}{}%
+      \fi
+}
+\newcommand*{\dtlupdateentryincurrentrow}[2]{%
+      \@dtl at updatekeys{\dtldbname}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\dtldbname}{#1}\relax
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{dtlcurrentrow}%
+        {%
+          \noexpand\db at col@id at w
+            \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w
+            \the\@dtl at toks
+          \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w
+             \number\dtlcolumnnum
+          \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\dtldbname'}%
+      \else
+        \toks@{#2}%
+        \edef\do at dtlreplaceincurrentrow{%
+           \noexpand\dtlreplaceentryincurrentrow{\the\toks@}{\number\dtlcolumnnum}%
+        }%
+        \do at dtlreplaceincurrentrow
+      \fi
+}
+\newcommand*{\DTLgetvalue}[4]{%
+  \edef\dtl at dogetvalue{\noexpand\dtl at getvalue{\noexpand#1}{#2}%
+    {\number#3}{\number#4}}%
+  \dtl at dogetvalue
+}
+\newcommand*{\dtl at getvalue}[4]{%
+  \def\@dtl at getvalue ##1% stuff before row <r>
+     \db at row@id at w #3\db at row@id at end@% row <r> id
+        ##2% stuff in row <r> before column <c>
+     \db at col@id at w #4\db at col@id at end@% column <c> id
+       \db at col@elt at w ##3\db at col@elt at end@% value
+     ##4% stuff after value
+     \q at nil{\def#1{##3}}%
+  \toks@=\csname dtldb@#2\endcsname
+  \expandafter\@dtl at getvalue\the\toks@% contents of data base
+     \db at row@id at w #3\db at row@id at end@%
+       \db at col@id at w #4\db at col@id at end@%
+         \db at col@elt at w \@dtlnovalue\db at col@elt at end@% undefined value
+     \q at nil
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element at (row=#3,\space
+      column=#4) in database `#2'}{}%
+  \fi
+}
+\newcommand*{\DTLgetlocation}[4]{%
+  \def\@dtl at getlocation##1% stuff before value
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w ##2\db at col@id at end@% column id
+    ##3% stuff after this column
+    \db at row@id at w ##4\db at row@id at end@% row id
+    ##5% stuff after row
+    \q at nil{\def#1{##4}\def#2{##2}}%
+  \toks@=\csname dtldb@#3\endcsname
+  \expandafter\@dtl at getlocation\the\toks@% contents of data base
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w \@dtlnovalue\db at col@id at end@% undefined column id
+    \db at row@id at w \@dtlnovalue\db at row@id at end@% undefined row id
+    \q at nil
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element `#4' in database `#3'}{}%
+  \fi
+}
+\newcommand*{\DTLgetrowindex}[4]{%
+  \toks@{#4}%
+  \edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{\the\toks@}}%
+  \dtl at dogetrowindex
+  \ifx#1\dtlnovalue
+    \PackageError{datatool}{There is no element `#4' for column
+      \number#3\space in database `#2'}{}%
+  \fi
+}
+\newcommand*{\dtlgetrowindex}[4]{%
+  \toks@{#4}%
+  \edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{\the\toks@}}%
+  \dtl at dogetrowindex
+}
+\newcommand*{\xdtlgetrowindex}[4]{%
+  \protected at edef\dtl at dogetrowindex{\noexpand\@dtlgetrowindex{\noexpand#1}{#2}{\number#3}{#4}}%
+  \dtl at dogetrowindex
+}
+\newcommand*{\@dtlgetrowindex}[4]{%
+  \def\@dtl at getrowindex##1% stuff before value
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w #3\db at col@id at end@% column id
+    ##2% stuff after this column
+    \db at row@id at w ##3\db at row@id at end@% row id
+    ##4% stuff after row
+    \q at nil{\def#1{##3}}%
+  \toks@=\csname dtldb@#2\endcsname
+  \expandafter\@dtl at getrowindex\the\toks@% contents of data base
+    \db at col@elt at w #4\db at col@elt at end@% value
+    \db at col@id at w #3\db at col@id at end@% column id
+    \db at row@id at w \@dtlnovalue\db at row@id at end@% undefined row id
+    \q at nil
+}
+
+\long\def\@dtlforeachrow(#1,#2)\in#3\do#4{%
+  \edef\dtl at tmp{\expandafter\the\csname dtldb@#3\endcsname}%
+  \expandafter\@dtl at foreachrow\dtl at tmp
+    \db at row@elt at w%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@@{#1}{#2}{#4}\q at nil
+}
+\long\def\@dtl at foreachrow\db at row@elt at w%
+\db at row@id at w #1\db at row@id at end@%
+#2\db at row@id at w #3\db at row@id at end@%
+\db at row@elt at end@#4\@@#5#6#7\q at nil{%
+  \gdef#5{#1}%
+  \gdef\@dtl at loopbody{#7}%
+  \global\advance\@dtl at foreach@level by 1\relax
+  \ifx#5\@nnil
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop
+  \else
+    \gdef#6{#2}%
+    \expandafter\let
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+      \dtlbreak
+    \gdef\dtlbreak{\expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop}%
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachrow
+    \@dtl at loopbody
+    \expandafter\let\expandafter\dtlbreak
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+  \fi
+  \expandafter\let\expandafter\@dtl at foreachnext
+    \csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+  \global\advance\@dtl at foreach@level by -1\relax
+  \@dtl at foreachnext#4\@@{#5}{#6}{#7}\q at nil
+}
+\long\def\@dtl at foreachnoop#1\@@#2\q at nil{}
+\long\def\dtlforeachkey(#1,#2,#3,#4)\in#5\do#6{%
+  \gdef\@dtl at loopbody{#6}%
+  \edef\@dtl at keys{\expandafter\the\csname dtlkeys@#5\endcsname}%
+  \expandafter\@dtl at foreachkey\@dtl at keys
+    \db at plist@elt at w%
+    \db at col@id at w -1\db at col@id at end@%
+    \db at key@id at w \db at key@id at end@%
+    \db at type@id at w \db at type@id at end@%
+    \db at header@id at w \db at header@id at end@%
+    \db at col@id at w -1\db at col@id at end@%
+    \db at plist@elt at end@%
+    \@@{\@dtl at updatefkcs{#1}{#2}{#3}{#4}}\q at nil
+}
+\newcommand*{\@dtl at updatefkcs}[8]{%
+  \gdef#1{#5}%
+  \gdef#2{#6}%
+  \gdef#3{#7}%
+  \gdef#4{#8}%
+}
+\long\def\@dtl at foreachkey\db at plist@elt at w%
+\db at col@id at w #1\db at col@id at end@%
+\db at key@id at w #2\db at key@id at end@%
+\db at type@id at w #3\db at type@id at end@%
+\db at header@id at w #4\db at header@id at end@%
+\db at col@id at w #5\db at col@id at end@%
+\db at plist@elt at end@#6\@@#7\q at nil{%
+  \ifnum#1=-1\relax
+    \let\@dtl at foreachnext\@dtl at foreachnoop
+  \else
+    #7{#2}{#1}{#3}{#4}%
+    \global\advance\@dtl at foreach@level by 1\relax
+    \expandafter\let
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+      \dtlbreak
+    \gdef\dtlbreak{\expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachnoop}%
+    \expandafter\global\expandafter
+      \let\csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+        =\@dtl at foreachkey
+    \@dtl at loopbody
+    \expandafter\let\expandafter\@dtl at foreachnext
+      \csname @dtl at foreachnext\the\@dtl at foreach@level\endcsname
+    \expandafter\let\expandafter\dtlbreak
+      \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+    \global\advance\@dtl at foreach@level by -1\relax
+  \fi
+  \@dtl at foreachnext#6\@@{#7}\q at nil
+}
+\newcommand*{\dtlforcolumn}{\@ifstar\@sdtlforcolumn\@dtlforcolumn}
+\newcommand{\@dtlforcolumn}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    \@DTLifhaskey{#2}{#3}%
+    {%
+      \@sdtlforcolumn{#1}{#2}{#3}{#4}%
+    }%
+    {%
+      \PackageError{datatool}{Database `#2' doesn't contain
+        key `#3'}{}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sdtlforcolumn}[4]{%
+    \toks@{#4}%
+    \edef\@dtl at doforcol{\noexpand\dtl at forcolumn{\noexpand#1}%
+      {\expandafter\the\csname dtldb@#2\endcsname}%
+      {\dtlcolumnindex{#2}{#3}}{\the\toks@}%
+    }%
+    \@dtl at doforcol%
+}
+\newcommand*{\dtlforcolumnidx}{%
+  \@ifstar\@sdtlforcolumnidx\@dtlforcolumnidx
+}
+\newcommand{\@dtlforcolumnidx}[4]{%
+  \DTLifdbexists{#2}%
+  {%
+    \expandafter\ifnum\csname dtlcols@#2\endcsname<#3\relax
+      \PackageError{datatool}{Column index \number#3\space out of
+        bounds for database `#2'}{Database `#2' only has
+        \expandafter\number\csname dtlcols@#2\endcsname\space
+        columns}%
+    \else
+      \ifnum#3<1\relax
+       \PackageError{datatool}{Column index \number#3\space out of
+        bounds for database `#2'}{Indices start from 1}%
+      \else
+        \@sdtlforcolumnidx{#1}{#2}{#3}{#4}%
+      \fi
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sdtlforcolumnidx}[4]{%
+    \toks@{#4}%
+    \edef\@dtl at doforcol{\noexpand\dtl at forcolumn{\noexpand#1}%
+      {\expandafter\the\csname dtldb@#2\endcsname}%
+      {\number#3}{\the\toks@}%
+    }%
+    \@dtl at doforcol
+}
+\newcommand{\dtl at forcolumn}[4]{%
+  \let\@dtl at oldbreak\dtlbreak
+  \def\dtlbreak{\let\@dtl at forcolnext=\@dtl at forcolnoop}%
+  \def\@dtl at forcolumn##1% before stuff
+    \db at col@id at w #3\db at col@id at end@% column index
+      \db at col@elt at w ##2\db at col@elt at end@% entry
+    \db at col@id at w #3\db at col@id at end@% column index
+    ##3% after stuff
+    \q at nil{%
+      \def#1{##2}% assign value to <cs>
+      \ifx#1\@nnil
+        \let\@dtl at forcolnext=\@dtl at forcolnoop
+      \else
+        #4%
+        \let\@dtl at forcolnext=\@dtl at forcolumn
+      \fi
+      \@dtl at forcolnext##3\q at nil
+    }%
+  \@dtl at forcolumn#2%
+   \db at col@id at w #3\db at col@id at end@%
+     \db at col@elt at w \@nil\db at col@elt at end@%
+   \db at col@id at w #3\db at col@id at end@\q at nil
+  \let\dtlbreak\@dtl at oldbreak
+}
+\def\@dtl at forcolnoop#1\q at nil{}
+
+\newcount\dtlforeachlevel
+\newcounter{DTLrowi}
+\newcounter{DTLrowii}
+\newcounter{DTLrowiii}
+\newcounter{DTLrow}
+\def\theHDTLrow{\arabic{DTLrow}}
+\def\theHDTLrowi{\theHDTLrow.\arabic{DTLrowi}}
+\def\theHDTLrowii{\theHDTLrowi.\arabic{DTLrowii}}
+\def\theHDTLrowiii{\theHDTLrowii.\arabic{DTLrowiii}}
+\newcount\dtl at rowi
+\newcount\dtl at rowii
+\newcount\dtl at rowiii
+\newtoks\@dtl at curi
+\newtoks\@dtl at previ
+\newtoks\@dtl at nexti
+\newtoks\@dtl at curii
+\newtoks\@dtl at previi
+\newtoks\@dtl at nextii
+\newtoks\@dtl at curiii
+\newtoks\@dtl at previii
+\newtoks\@dtl at nextiii
+\newcommand*{\DTLsavelastrowcount}[1]{%
+\ifnum\dtlforeachlevel>2\relax
+  \def#1{0}%
+\else
+  \ifnum\dtlforeachlevel<0\relax
+    \def#1{0}%
+  \else
+    \@dtl at tmpcount=\dtlforeachlevel
+    \advance\@dtl at tmpcount by 1\relax
+    \edef#1{\expandafter\number
+      \csname c at DTLrow\romannumeral\@dtl at tmpcount\endcsname}%
+  \fi
+\fi}
+\newenvironment{DTLenvforeach}[3][\boolean{true}]%
+{%
+  \def\@dtlenvforeach at args{[#1]{#2}{#3}}%
+  \long at collect@body\@do at dtlenvforeach
+}%
+{}
+\newcommand{\@do at dtlenvforeach}[1]{%
+  \expandafter\@DTLforeach\@dtlenvforeach at args{#1}%
+}
+\newenvironment{DTLenvforeach*}[3][\boolean{true}]%
+{%
+  \def\s at dtlenvforeach@args{[#1]{#2}{#3}}%
+  \long at collect@body\@do at sdtlenvforeach
+}%
+{}
+\newcommand{\@do at sdtlenvforeach}[1]{%
+  \expandafter\@sDTLforeach\s at dtlenvforeach@args{#1}%
+}
+\newcommand*{\DTLforeach}{\@ifstar\@sDTLforeach\@DTLforeach}
+\newcommand{\@DTLforeach}[4][\boolean{true}]{%
+  \DTLifdbexists{#2}%
+  {%
+    \refstepcounter{DTLrow}%
+    \global\c at DTLrow=\c at DTLrow\relax
+    \xdef\@dtl at dbname{#2}%
+    \global\advance\dtlforeachlevel by 1\relax
+    \ifnum\dtlforeachlevel>3\relax
+      \PackageError{datatool}{\string\DTLforeach\space nested too
+        deeply}{Only 3 levels are allowed}%
+    \else
+       \@DTLifdbempty{#2}%
+       {}%
+       {%
+        \expandafter\global
+          \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+          \DTLiffirstrow
+        \gdef\DTLiffirstrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =1 %space intended
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+          \DTLiflastrow
+        \gdef\DTLiflastrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =\csname dtlrows@#2\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+          \DTLifoddrow
+        \gdef\DTLifoddrow##1##2{%
+          \expandafter\ifodd
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let
+          \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+            =\@dtl at dbname
+        \expandafter\global\expandafter\let
+          \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \dtlgforint
+          \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+          =1\to\csname dtlrows@#2\endcsname\step1\do
+        {%
+          \@dtl at tmpcount=
+            \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+          \edef\dtl at dogetrow{\noexpand\dtlgetrow{#2}%
+            {\number\@dtl at tmpcount}}%
+          \dtl at dogetrow
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \dtlcurrentrow
+          \expandafter\global
+            \csname @dtl at prev\romannumeral\dtlforeachlevel\endcsname
+              = \dtlbeforerow
+          \expandafter\global
+            \csname @dtl at next\romannumeral\dtlforeachlevel\endcsname
+              = \dtlafterrow
+          \ifblank{#3}{}{\@dtl at assign{#3}{#2}}%
+          \ifthenelse{#1}%
+          {%
+            \refstepcounter{DTLrow\romannumeral\dtlforeachlevel}%
+            \expandafter\edef\expandafter\DTLcurrentindex%
+              \expandafter{%
+                 \arabic{DTLrow\romannumeral\dtlforeachlevel}}%
+            #4%
+            \edef\@dtl at tmp{\expandafter\the
+              \csname @dtl at cur\romannumeral
+                \dtlforeachlevel\endcsname}%
+            \ifx\@dtl at tmp\@nnil
+              \expandafter\dtl at decrementrows\expandafter
+                 {\csname @dtl at prev\romannumeral
+                    \dtlforeachlevel\endcsname
+                 }{\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname}%
+              \expandafter\dtl at decrementrows\expandafter
+                 {\csname @dtl at next\romannumeral
+                    \dtlforeachlevel\endcsname
+                 }{\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname}%
+              \edef\@dtl at tmp{%
+                \expandafter\the
+                  \csname @dtl at prev\romannumeral
+                    \dtlforeachlevel\endcsname
+                \expandafter\the
+                  \csname @dtl at next\romannumeral
+                     \dtlforeachlevel\endcsname
+                }%
+              \expandafter\global\expandafter
+                 \csname dtldb@#2\endcsname\expandafter{\@dtl at tmp}%
+              \expandafter\global\expandafter
+                \advance\csname dtlrows@#2\endcsname by -1\relax
+              \expandafter\global\expandafter
+                \advance\csname dtl at row\romannumeral
+                   \dtlforeachlevel\endcsname by -1\relax
+            \else
+              \@dtl at before=\csname @dtl at prev\romannumeral
+                \dtlforeachlevel\endcsname
+              \@dtl at after=\csname @dtl at next\romannumeral
+                \dtlforeachlevel\endcsname
+              \@dtl at toks@gconcat at middle@cx{dtldb@#2}%
+              {\@dtl at before}%
+              {%
+                \noexpand\db at row@elt at w%
+                \noexpand\db at row@id at w \expandafter\number
+                  \csname dtl at row\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at end@%
+                \expandafter\the
+                  \csname @dtl at cur\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at w \expandafter\number
+                  \csname dtl at row\romannumeral
+                    \dtlforeachlevel\endcsname
+                \noexpand\db at row@id at end@%
+                \noexpand\db at row@elt at end@%
+                }%
+              {\@dtl at after}%
+            \fi
+          }%
+          {}%
+         }%
+        \expandafter\global\expandafter\let\expandafter\DTLiffirstrow
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLiflastrow
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLifoddrow
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+      }%
+    \fi
+    \global\advance\dtlforeachlevel by -1\relax
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand{\@sDTLforeach}[4][\boolean{true}]{%
+  \DTLifdbexists{#2}%
+  {%
+    \refstepcounter{DTLrow}%
+    \global\c at DTLrow=\c at DTLrow
+    \xdef\@dtl at dbname{#2}%
+    \global\advance\dtlforeachlevel by 1\relax
+    \ifnum\dtlforeachlevel>3\relax
+      \PackageError{datatool}{\string\DTLforeach\space nested too
+        deeply}{Only 3 levels are allowed}%
+    \else
+       \@DTLifdbempty{#2}%
+       {}%
+       {%
+        \expandafter\global
+          \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            = 0\relax
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+          \DTLiffirstrow
+        \gdef\DTLiffirstrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =1 % space intended
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+          \DTLiflastrow
+        \gdef\DTLiflastrow##1##2{%
+          \expandafter\ifnum
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+           =\csname dtlrows@#2\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\global\expandafter\let%
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+          \DTLifoddrow
+        \gdef\DTLifoddrow##1##2{%
+          \expandafter\ifodd
+           \csname c at DTLrow\romannumeral\dtlforeachlevel\endcsname
+            ##1%
+          \else
+            ##2%
+          \fi}%
+        \expandafter\gdef\csname @dtl at dbname@\romannumeral
+          \dtlforeachlevel\endcsname{#2}%
+        \expandafter\global\expandafter\let
+          \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname
+            = 1\relax
+        \@dtlforeachrow(\dtl at thisidx,\dtl at thisrow)\in{#2}\do%
+        {%
+          \csname dtl at row\romannumeral\dtlforeachlevel\endcsname
+            = \dtl at thisidx\relax
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \expandafter{\dtl at thisrow}%
+          \ifblank{#3}{}
+          {%
+            \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+            \@dtl at assign{#3}{#2}%
+          }%
+          \ifthenelse{#1}%
+          {%
+            \refstepcounter{DTLrow\romannumeral\dtlforeachlevel}%
+            \expandafter\edef\expandafter\DTLcurrentindex%
+              \expandafter{%
+                 \arabic{DTLrow\romannumeral\dtlforeachlevel}}%
+            #4%
+          }%
+          {}%
+         }%
+        \expandafter\global\expandafter\let\expandafter\DTLiffirstrow
+          \csname @dtl at iffirstrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLiflastrow
+          \csname @dtl at iflastrow\the\dtlforeachlevel\endcsname
+        \expandafter\global\expandafter\let\expandafter\DTLifoddrow
+          \csname @dtl at ifoddrow\the\dtlforeachlevel\endcsname
+      }%
+    \fi
+    \global\advance\dtlforeachlevel by -1\relax
+  }%
+  {%
+    \PackageError{datatool}{Database `#2' doesn't exist}{}%
+  }%
+}
+\newcommand*{\@dtlifreadonly}[2]{%
+  \expandafter\ifx
+    \csname @dtl at ro@\romannumeral\dtlforeachlevel\endcsname1\relax
+    #1%
+  \else
+    #2%
+  \fi
+}
+\newcommand*{\DTLappendtorow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLappendrow\space can only be
+      used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLappendtorow\space can't
+       be used inside \DTLforeach*}{The starred version of
+       \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@dtl at updatekeys{\@dtl at thisdb}{#1}{#2}%
+      \expandafter\dtlcolumnnum\expandafter
+        =\dtlcolumnindex{\@dtl at thisdb}{#1}\relax
+      \dtlcurrentrow =
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+      }%
+      \dtl at dogetentry
+      \ifx\dtl at entry\dtlnovalue
+        \protected at edef\@dtl at tmp{#2}%
+        \expandafter\@dtl at toks\expandafter{\@dtl at tmp}%
+        \@dtl at toks@gput at right@cx{@dtl at cur\romannumeral\dtlforeachlevel}%
+        {%
+          \noexpand\db at col@id at w \number\dtlcolumnnum
+            \noexpand\db at col@id at end@
+          \noexpand\db at col@elt at w \the\@dtl at toks
+            \noexpand\db at col@elt at end@
+          \noexpand\db at col@id at w \number\dtlcolumnnum
+            \noexpand\db at col@id at end@
+        }%
+         \dtl at message{Appended #1\space -> #2\space to database
+           `\@dtl at thisdb'}%
+      \else
+        \PackageError{datatool}{Can't append entry to row:
+          there is already an entry for key `#1' in this row}{}%
+      \fi
+    }%
+  \fi
+}
+\newcommand*{\DTLremoveentryfromrow}[1]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLremoventryfromrow\space
+      can only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLremoveentryfromrow\space
+        can't be used inside \string\DTLforeach*}{The starred
+        version of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@DTLifhaskey{\@dtl at thisdb}{#1}%
+      {%
+        \@dtl at getcolumnindex{\thiscol}{\@dtl at thisdb}{#1}\relax
+        \dtlcolumnnum=\thiscol\relax
+        \dtlcurrentrow =
+          \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+        \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+          {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+        }%
+        \dtl at dogetentry
+        \ifx\dtl at entry\dtlnovalue
+          \PackageError{datatool}{Can't remove entry given by `#1'
+             from current row in database `\@dtl at thisdb': no such
+             entry}{The current row doesn't contain an entry for
+             key `#1'}%
+        \else
+          \edef\@dtl at dosplitrow{%
+            \noexpand\dtlsplitrow{\the\dtlcurrentrow}%
+              {\number\dtlcolumnnum}{\noexpand\dtl at pre}%
+              {\noexpand\dtl at post}%
+          }%
+          \@dtl at dosplitrow
+          \expandafter\@dtl at toks\expandafter{\dtl at pre}%
+          \expandafter\toks@\expandafter{\dtl at post}%
+          \edef\@dtl at tmp{\the\@dtl at toks \the\toks@}%
+          \dtlcurrentrow=\expandafter{\@dtl at tmp}%
+          \expandafter\global
+            \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+              = \dtlcurrentrow
+         \dtl at message{Removed entry given by #1\space from current
+           row of database `\@dtl at thisdb'}%
+        \fi
+      }%
+      {%
+        \PackageError{datatool}{Can't remove entry given by
+          `#1' - no such key exists}{}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLreplaceentryforrow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+      can only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+        can't be used inside \string\DTLforeach*}{The starred version
+        of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \dtlrownum=
+        \csname dtl at row\romannumeral\dtlforeachlevel\endcsname\relax
+      \@DTLifhaskey{\@dtl at thisdb}{#1}%
+      {%
+        \@dtl at getcolumnindex{\thiscol}{\@dtl at thisdb}{#1}\relax
+        \dtlcolumnnum=\thiscol\relax
+        \dtlcurrentrow =
+          \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+        \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+          {\noexpand\dtl at entry}{\number\dtlcolumnnum}%
+        }%
+        \dtl at dogetentry
+        \ifx\dtl at entry\dtlnovalue
+          \PackageError{datatool}{Can't replace entry given by `#1'
+             from current row in database `\@dtl at thisdb': no such
+             entry}{The current row doesn't contain an entry for
+             key `#1'}%
+        \else
+          \edef\@dtl at dosplitrow{%
+            \noexpand\dtlsplitrow{\the\dtlcurrentrow}%
+              {\number\dtlcolumnnum}{\noexpand\dtl at pre}%
+              {\noexpand\dtl at post}%
+          }%
+          \@dtl at dosplitrow
+          \protected at edef\@dtl at tmp{#2}%
+          \expandafter\@dtl at toks\expandafter{\@dtl at tmp}% new value
+          \expandafter\@dtl at before\expandafter{\dtl at pre}%
+          \expandafter\@dtl at after\expandafter{\dtl at post}%
+          \@dtl at toks@gconcat at middle@cx
+            {@dtl at cur\romannumeral\dtlforeachlevel}%
+            {\@dtl at before}%
+            {%
+              \noexpand\db at col@id at w \number\dtlcolumnnum
+                \noexpand\db at col@id at end@%
+              \noexpand\db at col@elt at w \the\@dtl at toks
+                \noexpand\db at col@elt at end@%
+              \noexpand\db at col@id at w \number\dtlcolumnnum
+                \noexpand\db at col@id at end@%
+            }%
+            {\@dtl at after}%
+         \dtl at message{Updated #1\space -> #2\space in database
+           `\@dtl at thisdb'}%
+        \fi
+      }%
+      {%
+         \PackageError{datatool}{Can't replace key `#1' - no such
+           key in database `\@dtl at thisdb'}{}%
+      }%
+    }%
+  \fi
+}
+\newcommand*{\DTLremovecurrentrow}{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLremovecurrentrow\space can
+      only be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \@dtlifreadonly
+    {%
+      \PackageError{datatool}{\string\DTLreplaceentryforrow\space
+        can't be used inside \string\DTLforeach*}{The starred version
+        of \string\DTLforeach\space is read only}%
+    }%
+    {%
+      \expandafter\global
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+          ={\@nil}%
+    }%
+  \fi
+}
+\newcommand{\DTLaddentryforrow}[5]{%
+  \DTLifdbexists{#1}%
+  {%
+    \def\@dtl at notdone{\PackageError{datatool}{Unable to add entry
+      given by key `#4': condition not met for any row in database
+      `#1'}{}}%
+    \DTLforeach[#3]{#1}{#2}%
+    {%
+      \DTLappendtorow{#4}{#5}%
+      \let\@dtl at notdone\relax
+      \dtlbreak
+    }%
+    \@dtl at notdone
+  }%
+  {%
+    \PackageError{datatool}{Unable to add entry given by key `#4':
+      database `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\DTLforeachkeyinrow}[2]{%
+  \ifnum\dtlforeachlevel=0\relax
+    \PackageError{datatool}{\string\DTLforeachkeyinrow\space can only
+     be used inside \string\DTLforeach}{}%
+  \else
+    \expandafter\let\expandafter\@dtl at thisdb
+      \csname @dtl at dbname@\romannumeral\dtlforeachlevel\endcsname
+    \dtlforeachkey(\dtlkey,\dtlcol,\dtltype,\dtlheader)\in
+      \@dtl at thisdb\do{%
+      \dtlcurrentrow =
+        \csname @dtl at cur\romannumeral\dtlforeachlevel\endcsname
+      \edef\dtl at dogetentry{\noexpand\dtlgetentryfromcurrentrow
+        {\noexpand#1}{\dtlcol}}%
+      \dtl at dogetentry
+      \ifx#1\dtlnovalue
+        \ifnum0\dtltype=0\relax
+          \let#1=\@dtlstringnull
+        \else
+          \let#1=\@dtlnumbernull
+        \fi
+      \fi
+      \global\let#1#1%
+      \def\@dtl at loop@body{#2}%
+      \@dtl at loop@body
+    }%
+  \fi
+}
+\newcommand{\DTLiffirstrow}[2]{%
+  \PackageError{datatool}{\string\DTLiffirstrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLiflastrow}[2]{%
+  \PackageError{datatool}{\string\DTLiflastrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLifoddrow}[2]{%
+  \PackageError{datatool}{\string\DTLifoddrow\space can only
+  be used inside \string\DTLforeach}{}%
+}
+\newcommand*{\dtlbetweencols}{}
+\newcommand*{\dtlbeforecols}{}
+\newcommand*{\dtlaftercols}{}
+\newcommand*{\dtlstringalign}{l}
+\newcommand*{\dtlintalign}{r}
+\newcommand*{\dtlrealalign}{r}
+\newcommand*{\dtlcurrencyalign}{r}
+\newcommand*{\dtladdalign}[4]{%
+  \ifnum#3=1\relax
+    \protected at edef#1{\dtlbeforecols}%
+  \else
+    \protected at edef#1{#1\dtlbetweencols}%
+  \fi
+  \ifstrempty{#2}%
+  {%
+    \protected at edef#1{#1c}%
+  }%
+  {%
+    \ifcase#2\relax
+      \protected at edef#1{#1\dtlstringalign}%
+    \or
+      \protected at edef#1{#1\dtlintalign}%
+    \or
+      \protected at edef#1{#1\dtlrealalign}%
+    \or
+      \protected at edef#1{#1\dtlcurrencyalign}%
+    \else
+      \protected at edef#1{#1c}%
+      \PackageError{datatool}{Unknown data type `#2'}{}%
+    \fi
+  }%
+  \ifnum#3=#4\relax
+    \protected at edef#1{#1\dtlaftercols}%
+  \fi
+}
+\newcommand*{\dtlheaderformat}[1]{\null\hfil\textbf{#1}\hfil\null}
+\newcommand*{\dtlstringformat}[1]{#1}
+\newcommand*{\dtlintformat}[1]{#1}
+\newcommand*{\dtlrealformat}[1]{#1}
+\newcommand*{\dtlcurrencyformat}[1]{#1}
+\newcommand*{\dtldisplaystarttab}{}
+\newcommand*{\dtldisplayendtab}{}
+\newcommand*{\dtldisplayafterhead}{}
+\newcommand*{\dtldisplayvalign}{c}
+\newcommand*{\dtldisplaystartrow}{}
+\newcommand{\dtldisplaycr}{\tabularnewline}
+
+\newcommand*{\DTLdisplaydb}[2][]{%
+  \def\@dtl at doamp{\gdef\@dtl at doamp{&}}%
+  \def\@dtl at resetdoamp{\gdef\@dtl at doamp{\gdef\@dtl at doamp{&}}}%
+  \edef\@dtl at maxcols{\expandafter\number
+    \csname dtlcols@#2\endcsname}%
+  \DTLnumitemsinlist{#1}{\@dtl at tmp}%
+  \dtlsub{\@dtl at maxcols}{\@dtl at maxcols}{\@dtl at tmp}%
+  \dtlclip{\@dtl at maxcols}{\@dtl at maxcols}%
+  \def\@dtl at tabargs{}%
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{#1}%
+    {}%
+    {%
+       \dtladdalign\@dtl at tabargs\@dtl at type\@dtl at idx\@dtl at maxcols
+    }%
+  }%
+  \edef\@dtl at dobegintab{\noexpand\begin{tabular}[\dtldisplayvalign]{\@dtl at tabargs}}%
+  \@dtl at dobegintab
+  \dtldisplaystarttab
+  \@dtl at resetdoamp
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{#1}%
+    {}%
+    {%
+      \@dtl at doamp
+      \dtlheaderformat{\@dtl at head}%
+    }%
+  }%
+  \\%
+  \dtldisplayafterhead
+  \@dtl at resetdoamp
+  \@sDTLforeach{#2}{}{%
+    \DTLiffirstrow{}{\dtldisplaycr\dtldisplaystartrow}%
+    \@dtl at resetdoamp
+    \DTLforeachkeyinrow{\@dtl at val}%
+    {%
+      \expandafter\DTLifinlist\expandafter{\dtlkey}{#1}%
+      {}%
+      {%
+        \global\let\@dtl at val\@dtl at val
+        \@dtl at doamp
+        \@dtl at datatype=0\dtltype\relax
+        \ifcase\@dtl at datatype
+          \dtlstringformat\@dtl at val
+        \or
+          \dtlintformat\@dtl at val
+        \or
+          \dtlrealformat\@dtl at val
+        \or
+          \dtlcurrencyformat\@dtl at val
+        \else
+          \@dtl at val
+        \fi
+      }%
+    }%
+  }%
+  \dtldisplayendtab
+  \end{tabular}%
+}
+\define at key{displaylong}{caption}{\def\@dtl at cap{#1}}
+\define at key{displaylong}{contcaption}{\def\@dtl at contcap{#1}}
+\define at key{displaylong}{shortcaption}{\def\@dtl at shortcap{#1}}
+\define at key{displaylong}{label}{\def\@dtl at label{#1}}
+\define at key{displaylong}{foot}{\def\@dtl at foot{#1}}
+\define at key{displaylong}{lastfoot}{\def\@dtl at lastfoot{#1}}
+\define at key{displaylong}{omit}{\def\@dtl at omitlist{#1}}
+\newcommand*{\@dtl at resetdostartrow}{%
+  \gdef\@dtl at dostartrow{%
+    \gdef\@dtl at dostartrow{\dtldisplaycr\dtldisplaystartrow}}%
+}
+\newcommand*{\DTLdisplaylongdb}[2][]{%
+  \def\@dtl at cap{\@nil}%
+  \def\@dtl at contcap{\@nil}%
+  \def\@dtl at label{\@nil}%
+  \def\@dtl at shortcap{\@dtl at cap}%
+  \def\@dtl at foot{\@nil}%
+  \def\@dtl at lastfoot{\@nil}%
+  \def\@dtl at omitlist{}%
+  \setkeys{displaylong}{#1}%
+  \def\@dtl at doamp{\gdef\@dtl at doamp{&}}%
+  \def\@dtl at resetdoamp{\gdef\@dtl at doamp{\gdef\@dtl at doamp{&}}}%
+  \@dtl at resetdostartrow
+  \edef\@dtl at maxcols{\expandafter\number
+    \csname dtlcols@#2\endcsname}%
+  \DTLnumitemsinlist{\@dtl at omitlist}{\@dtl at tmp}%
+  \dtlsub{\@dtl at maxcols}{\@dtl at maxcols}{\@dtl at tmp}%
+  \dtlclip{\@dtl at maxcols}{\@dtl at maxcols}%
+  \def\@dtl at tabargs{}%
+  \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+    \in{#2}\do
+  {%
+    \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+    {}%
+    {%
+      \dtladdalign\@dtl at tabargs\@dtl at type\@dtl at idx\@dtl at maxcols
+    }%
+  }%
+  \edef\@dtl at dobegintab{\noexpand\begin{longtable}{\@dtl at tabargs}}%
+  \@dtl at dobegintab
+  \ifx\@dtl at foot\@nnil
+  \else
+    \@dtl at foot\endfoot
+  \fi
+  \ifx\@dtl at lastfoot\@nnil
+  \else
+    \@dtl at lastfoot\endlastfoot
+  \fi
+  \ifx\@dtl at cap\@nnil
+    \@dtl at resetdoamp
+    \dtldisplaystarttab
+    \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+    {%
+      \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+      }%
+    }%
+    \@dtl at resetdoamp
+    \@dtl at resetdostartrow
+    \endhead\dtldisplayafterhead
+  \else
+    \caption[\@dtl at shortcap]{\@dtl at cap}%
+    \ifx\@dtl at label\@nnil
+    \else
+      \label{\@dtl at label}%
+    \fi
+    \dtldisplaycr
+  \dtldisplaystarttab
+    \@dtl at resetdoamp
+    \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+    {%
+      \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+      }%
+    }%
+    \@dtl at resetdoamp
+    \dtldisplaycr\dtldisplayafterhead
+    \endfirsthead
+    \ifx\@dtl at contcap\@nnil
+      \caption{\@dtl at cap}%
+    \else
+      \caption{\@dtl at contcap}%
+    \fi
+    \dtldisplaycr\dtldisplaystarttab
+      \@dtl at resetdoamp
+      \dtlforeachkey(\@dtl at key,\@dtl at idx,\@dtl at type,\@dtl at head)%
+      \in{#2}\do
+      {%
+        \expandafter\DTLifinlist\expandafter{\@dtl at key}{\@dtl at omitlist}%
+        {}%
+        {%
+          \@dtl at doamp{\dtlheaderformat{\@dtl at head}}%
+        }%
+      }%
+      \@dtl at resetdoamp
+      \@dtl at resetdostartrow
+    \dtldisplaycr\dtldisplayafterhead
+    \endhead
+  \fi
+  \@sDTLforeach{#2}{}{%
+    \@dtl at dostartrow
+    \@dtl at resetdoamp
+    \DTLforeachkeyinrow{\@dtl at val}%
+    {%
+      \global\let\@dtl at val\@dtl at val
+      \expandafter\DTLifinlist\expandafter{\dtlkey}{\@dtl at omitlist}%
+      {}%
+      {%
+        \@dtl at doamp
+        \@dtl at datatype=0\dtltype\relax
+        \ifcase\@dtl at datatype
+          \dtlstringformat\@dtl at val
+        \or
+          \dtlintformat\@dtl at val
+        \or
+          \dtlrealformat\@dtl at val
+        \or
+          \dtlcurrencyformat\@dtl at val
+        \fi
+      }%
+    }%
+  }%
+  \dtldisplayendtab
+  \end{longtable}%
+}
+\newcommand*{\dtlswaprows}[3]{%
+  \ifnum#2=#3\relax
+  \else
+    \ifnum#2<#3\relax
+      \edef\@dtl at rowAidx{\number#2}%
+      \edef\@dtl at rowBidx{\number#3}%
+    \else
+      \edef\@dtl at rowAidx{\number#3}%
+      \edef\@dtl at rowBidx{\number#2}%
+    \fi
+    \edef\@dtl at dosplit{\noexpand\dtlgetrow{#1}{\@dtl at rowAidx}}%
+    \@dtl at dosplit
+    \expandafter\def\expandafter\@dtl at firstpart\expandafter
+      {\the\dtlbeforerow}%
+    \@dtl at toksA=\dtlcurrentrow
+    \edef\@dtl at dosplit{\noexpand\@dtlgetrow
+      {\the\dtlafterrow}{\@dtl at rowBidx}}%
+    \@dtl at dosplit
+    \expandafter\def\expandafter\@dtl at secondpart\expandafter
+      {\the\dtlbeforerow}%
+    \@dtl at toksB=\dtlcurrentrow
+    \expandafter\def\expandafter\@dtl at thirdpart\expandafter
+      {\the\dtlafterrow}%
+    \toks@=\expandafter{\@dtl at firstpart}%
+    \@dtl at toks=\expandafter{\@dtl at secondpart}%
+    \edef\@dtl at tmp{\the\toks@
+     \noexpand\db at row@elt at w%
+     \noexpand\db at row@id at w \@dtl at rowAidx\noexpand\db at row@id at end@%
+     \the\@dtl at toksB
+     \noexpand\db at row@id at w \@dtl at rowAidx\noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+     \the\@dtl at toks}%
+    \toks@=\expandafter{\@dtl at tmp}%
+    \@dtl at toks=\expandafter{\@dtl at thirdpart}%
+    \edef\@dtl at tmp{\the\toks@
+     \noexpand\db at row@elt at w%
+     \noexpand\db at row@id at w \@dtl at rowBidx\noexpand\db at row@id at end@%
+     \the\@dtl at toksA
+     \noexpand\db at row@id at w \@dtl at rowBidx\noexpand\db at row@id at end@%
+     \noexpand\db at row@elt at end@%
+    \the\@dtl at toks}%
+    \expandafter\global\csname dtldb@#1\endcsname=\expandafter
+      {\@dtl at tmp}%
+  \fi
+}
+\newcommand*{\dtl at decrementrows}[2]{%
+  \def\@dtl at newlist{}%
+  \edef\@dtl at min{\number#2}%
+  \expandafter\@dtl at decrementrows\the#1%
+    \db at row@elt at w%
+      \db at row@id at w \@nil\db at row@id at end@%
+      \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@nil
+  #1=\expandafter{\@dtl at newlist}%
+}
+\def\@dtl at decrementrows\db at row@elt at w\db at row@id at w #1\db at row@id at end@%
+#2\db at row@id at w #3\db at row@id at end@\db at row@elt at end@#4\@nil{%
+  \def\@dtl at thisrow{#1}%
+  \ifx\@dtl at thisrow\@nnil
+    \let\@dtl at donextdec=\@dtl at gobbletonil
+  \else
+    \ifnum\@dtl at thisrow>\@dtl at min
+      \@dtl at tmpcount=\@dtl at thisrow\relax
+      \advance\@dtl at tmpcount by -1\relax
+      \toks@{#2}%
+      \@dtl at toks=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\@dtl at toks
+        \noexpand\db at row@elt at w% row header
+        \noexpand\db at row@id at w \number\@dtl at tmpcount
+          \noexpand\db at row@id at end@% row id
+         \the\toks@ % row contents
+        \noexpand\db at row@id at w \number\@dtl at tmpcount
+          \noexpand\db at row@id at end@% row id
+        \noexpand\db at row@elt at end@% row end
+      }%
+    \else
+      \toks@{#2}%
+      \@dtl at toks=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\@dtl at toks
+        \noexpand\db at row@elt at w% row header
+        \noexpand\db at row@id at w #1%
+          \noexpand\db at row@id at end@% row id
+         \the\toks@ % row contents
+        \noexpand\db at row@id at w #3%
+          \noexpand\db at row@id at end@% row id
+        \noexpand\db at row@elt at end@% row end
+      }%
+    \fi
+    \let\@dtl at donextdec=\@dtl at decrementrows
+  \fi
+  \@dtl at donextdec#4\@nil
+}
+\newcommand*{\DTLremoverow}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \ifnum#2>0\relax
+      \expandafter\ifnum\csname dtlrows@#1\endcsname<#2\relax
+        \expandafter\ifnum\csname dtlrows@#1\endcsname=1\relax
+          \PackageError{datatool}{Can't remove row `\number#2' from
+            database `#1': no such row}{Database `#1' only has
+            1 row}%
+        \else
+          \PackageError{datatool}{Can't remove row `\number#2' from
+            database `#1': no such row}{Database `#1' only has
+            \expandafter\number\csname dtlrows@#1\endcsname\space
+            rows}%
+        \fi
+      \else
+        \@DTLremoverow{#1}{#2}%
+      \fi
+    \else
+      \PackageError{datatool}{Can't remove row \number#2: index
+        out of bounds}{Row indices start at 1}%
+    \fi
+  }%
+  {%
+    \PackageError{datatool}{Can't remove row: database `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\@DTLremoverow}[2]{%
+      \edef\dtl at dogetrow{\noexpand\dtlgetrow{#1}{\number#2}}%
+      \dtl at dogetrow
+      \expandafter\dtl at decrementrows\expandafter
+        {\dtlbeforerow}{#2}%
+      \expandafter\dtl at decrementrows\expandafter
+        {\dtlafterrow}{#2}%
+      \edef\dtl at tmp{\the\dtlbeforerow \the\dtlafterrow}%
+      \expandafter\global\csname dtldb@#1\endcsname
+        =\expandafter{\dtl at tmp}%
+      \expandafter\global\expandafter\advance
+        \csname dtlrows@#1\endcsname by -1\relax
+}
+\newcommand*{\DTLsumforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlsumforkeys
+}
+\newcommand*{\@dtlsumforkeys}[4][]{%
+  \def#4{0}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+          {\DTLadd{#4}{#4}{\DTLthisval}}{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLsumcolumn}[3]{%
+  \def#3{0}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLadd{#3}{#3}{\DTLthisval}%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLmeanforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlmeanforkeys
+}
+\newcount\@dtl at elements
+\newcommand*{\@dtlmeanforkeys}[4][]{%
+  \def#4{0}%
+  \@dtl at elements=0\relax
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \DTLadd{#4}{#4}{\DTLthisval}%
+          \advance\@dtl at elements by 1\relax
+        }{}%
+      }%
+    }%
+  }%
+  \ifnum\@dtl at elements=0\relax
+    \PackageError{datatool}{Unable to evaluate mean: no data}{}%
+  \else
+    \edef\@dtl at n{\number\@dtl at elements}%
+    \DTLdiv{#4}{#4}{\@dtl at n}%
+  \fi
+}
+\newcommand*{\DTLmeanforcolumn}[3]{%
+  \def#3{0}%
+  \@dtl at elements=0\relax
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLadd{#3}{#3}{\DTLthisval}%
+         \advance\@dtl at elements by 1\relax
+       }%
+       \ifnum\@dtl at elements=0\relax
+         \PackageError{datatool}{Can't compute mean for
+          column `#2' in database `#1': no data}{}%
+       \else
+         \edef\@dtl at n{\number\@dtl at elements}%
+         \DTLdiv{#3}{#3}{\@dtl at n}%
+       \fi
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLvarianceforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlvarianceforkeys
+}
+\newcommand*{\@dtlvarianceforkeys}[4][]{%
+  \@dtlmeanforkeys[#1]{#2}{#3}{\dtl at mean}%
+  \def#4{0}%
+  \@dtl at elements=0\relax
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+           \DTLsub{\dtl at diff}{\DTLthisval}{\dtl at mean}%
+           \DTLmul{\dtl at diff}{\dtl at diff}{\dtl at diff}%
+           \DTLadd{#4}{#4}{\dtl at diff}%
+           \advance\@dtl at elements by 1\relax
+        }{}%
+      }%
+    }%
+  }%
+  \ifnum\@dtl at elements=0\relax
+    \PackageError{datatool}{Unable to evaluate variance: no data}{}%
+  \else
+    \edef\@dtl at n{\number\@dtl at elements}%
+    \DTLdiv{#4}{#4}{\@dtl at n}%
+  \fi
+}
+\newcommand*{\DTLvarianceforcolumn}[3]{%
+  \DTLmeanforcolumn{#1}{#2}{\dtl at mean}%
+  \def#3{0}%
+  \@dtl at elements=0\relax
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \DTLsub{\dtl at diff}{\DTLthisval}{\dtl at mean}%
+         \DTLmul{\dtl at diff}{\dtl at diff}{\dtl at diff}%
+         \DTLadd{#3}{#3}{\dtl at diff}%
+         \advance\@dtl at elements by 1\relax
+       }%
+       \ifnum\@dtl at elements=0\relax
+         \PackageError{datatool}{Can't compute variance for
+          column `#2' in database `#1': no data}{}%
+       \else
+         \edef\@dtl at n{\number\@dtl at elements}%
+         \DTLdiv{#3}{#3}{\@dtl at n}%
+       \fi
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLsdforkeys}[1][\boolean{true}\and
+\DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlsdforkeys
+}
+\newcommand*{\@dtlsdforkeys}[4][]{%
+  \@dtlvarianceforkeys[#1]{#2}{#3}{#4}%
+  \DTLsqrt{#4}{#4}%
+}
+\newcommand*{\DTLsdforcolumn}[3]{%
+  \DTLvarianceforcolumn{#1}{#2}{#3}%
+  \DTLsqrt{#3}{#3}%
+}
+\newcommand*{\DTLminforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlminforkeys
+}
+\newcommand*{\@dtlminforkeys}[4][]{%
+  \def#4{}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \ifdefempty{#4}%
+          {%
+            \let#4\DTLthisval
+          }%
+          {%
+            \DTLmin{#4}{#4}{\DTLthisval}%
+          }%
+        }{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLminforcolumn}[3]{%
+  \def#3{}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \ifdefempty{#3}%
+         {%
+           \let#3\DTLthisval
+         }%
+         {%
+           \DTLmin{#3}{#3}{\DTLthisval}%
+         }%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLmaxforkeys}[1][\boolean{true}\and
+ \DTLisnumerical{\DTLthisval}]{%
+  \def\@dtl at cond{#1}%
+  \@dtlmaxforkeys
+}
+\newcommand*{\@dtlmaxforkeys}[4][]{%
+  \def#4{}%
+  \@for\@dtl at db@name:=#2\do{%
+    \@sDTLforeach{\@dtl at db@name}%
+    {#1}% assignment list
+    {%
+      \@for\@dtl at key:=#3\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at db@name}{\@dtl at key}%
+        \dtlcurrentrow=\expandafter{\dtl at thisrow}%
+        \dtlgetentryfromrow{\DTLthisval}{\@dtl at col}{\dtlcurrentrow}%
+        \expandafter\ifthenelse\expandafter{\@dtl at cond}%
+        {%
+          \ifdefempty{#4}%
+          {%
+            \let#4\DTLthisval
+          }%
+          {%
+            \DTLmax{#4}{#4}{\DTLthisval}%
+          }%
+        }{}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLmaxforcolumn}[3]{%
+  \def#3{}%
+  \DTLifdbexists{#1}%
+  {%
+     \@sDTLifhaskey{#1}{#2}%
+     {%
+       \@sdtlforcolumn{\DTLthisval}{#1}{#2}%
+       {%
+         \ifdefempty{#3}%
+         {%
+           \let#3\DTLthisval
+         }%
+         {%
+           \DTLmax{#3}{#3}{\DTLthisval}%
+         }%
+       }%
+     }%
+     {%
+       \PackageError{datatool}{Key `#2' doesn't
+         exist in database `#1'}{}%
+     }%
+  }%
+  {%
+    \PackageError{datatool}{Data base `#1' doesn't
+      exist}{}%
+  }%
+}
+\newcommand*{\DTLcomputebounds}[8][\boolean{true}]{%
+\let#5=\relax
+\let#6=\relax
+\let#7=\relax
+\let#8=\relax
+\@for\dtl at thisdb:=#2\do{%
+  \@sDTLforeach[#1]{\dtl at thisdb}{\DTLthisX=#3,\DTLthisY=#4}{%
+    \expandafter\DTLconverttodecimal\expandafter{\DTLthisX}{\dtl at decx}%
+    \expandafter\DTLconverttodecimal\expandafter{\DTLthisY}{\dtl at decy}%
+    \ifx#5\relax
+      \let#5=\dtl at decx
+      \let#6=\dtl at decy
+      \let#7=\dtl at decx
+      \let#8=\dtl at decy
+    \else
+      \dtlmin{#5}{#5}{\dtl at decx}%
+      \dtlmin{#6}{#6}{\dtl at decy}%
+      \dtlmax{#7}{#7}{\dtl at decx}%
+      \dtlmax{#8}{#8}{\dtl at decy}%
+    \fi
+  }%
+}%
+}
+\newcommand*{\DTLgetvalueforkey}[5]{%
+  \DTLgetrowforkey{\@dtl at row}{#3}{#4}{#5}%
+  \@sdtl at getcolumnindex{\@dtl at col}{#3}{#2}%
+  {%
+    \dtlcurrentrow=\expandafter{\@dtl at row}%
+    \edef\@dtl at dogetval{\noexpand\dtlgetentryfromcurrentrow
+      {\noexpand\@dtl at val}{\@dtl at col}}%
+    \@dtl at dogetval
+    \global\let#1=\@dtl at val
+  }%
+}
+\newcommand*{\DTLgetrowforkey}[4]{%
+  \global\let#1=\@empty
+  \@sDTLforeach{#2}{\dtl at refvalue=#3}{%
+    \DTLifnull{\dtl at refvalue}%
+    {}%
+    {%
+      \ifthenelse{\equal{\dtl at refvalue}{#4}}%
+      {%
+        \xdef#1{\the\dtlcurrentrow}%
+        \dtlbreak
+      }%
+      {}%
+    }%
+  }%
+}
+\newtoks\@dtl at list
+\newcommand*{\DTLsort}{\@ifstar\@sDTLsort\@DTLsort}
+\newcommand{\@DTLsort}[3][]{%
+  \dtlsort[#1]{#2}{#3}{\dtlcompare}%
+}
+\newcommand*{\@sDTLsort}[3][]{%
+  \dtlsort[#1]{#2}{#3}{\dtlicompare}%
+}
+\newcommand{\dtlsort}[4][]{%
+  \DTLifdbexists{#3}%
+  {%
+     \ifnum\DTLrowcount{#3}>100\relax
+       \typeout{Sorting `#3' - this may take a while.}%
+     \fi
+    \edef\@dtl at replacementkeys{#1}%
+    \def\@dtl at sortorder{}%
+    \@for\@dtl at level:=#2\do
+    {%
+      \expandafter\@dtl at getsortdirection\@dtl at level=\relax
+      \DTLifhaskey{#3}{\@dtl at key}%
+      {%
+         \ifdefempty\@dtl at sortorder
+         {\let\@dtl at sortorder=\@dtl at level}%
+         {\eappto\@dtl at sortorder{,\@dtl at level}}%
+      }%
+      {%
+         \PackageError{datatool}%
+         {%
+            Can't sort on `\@dtl at level'.
+            No such key `\@dtl at key' in database `#3'%
+         }{}%
+      }%
+    }%
+    \ifdefempty\@dtl at sortorder
+    {%
+       \PackageWarning{datatool}{No keys provided to sort database `#3'}%
+    }%
+    {%
+      \let\@dtl at comparecs=#4%
+      \dtl at sortdata{#3}%
+    }%
+  }%
+  {%
+    \PackageError{datatool}{Database `#3' doesn't exist}{}%
+  }%
+}
+\newtoks\@dtl at rowa
+\newtoks\@dtl at rowb
+\newcommand*{\dtl at sortdata}[1]{%
+  \def\@dtl at sortedlist{}%
+  \edef\@dtl at dbname{#1}%
+  \@dtlforeachrow(\@dtl at rowAnum,\@dtl at rowAcontents)\in\@dtl at dbname\do{%
+    \@dtl at rowa=\expandafter{\@dtl at rowAcontents}%
+    \def\@dtl at newlist{}%
+  \@dtl at insertdonefalse
+  \dtlrownum=0\relax
+  \expandafter\@dtl at foreachrow\@dtl at sortedlist
+    \db at row@elt at w%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@id at w \@nil\db at row@id at end@%
+    \db at row@elt at end@%
+    \@@{\@dtl at rowBnum}{\@dtl at rowBcontents}%
+    {%
+      \@dtl at rowb=\expandafter{\@dtl at rowBcontents}%
+      \dtlrownum=\@dtl at rowBnum
+      \if at dtl@insertdone
+        \advance\dtlrownum by 1\relax
+      \else
+        \@dtl at sortcriteria{\@dtl at rowa}{\@dtl at rowb}%
+        \ifnum\dtl at sortresult<0\relax
+          \toks@=\expandafter{\@dtl at newlist}%
+          \edef\@dtl at newlist{%
+            \the\toks@
+            \noexpand\db at row@elt at w%
+             \noexpand\db at row@id at w \number\dtlrownum
+             \noexpand\db at row@id at end@%
+             \the\@dtl at rowa
+             \noexpand\db at row@id at w \number\dtlrownum
+             \noexpand\db at row@id at end@%
+            \noexpand\db at row@elt at end@%
+          }%
+          \advance\dtlrownum by 1\relax
+          \@dtl at insertdonetrue
+        \fi
+      \fi
+      \toks@=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\toks@
+        \noexpand\db at row@elt at w%
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+         \the\@dtl at rowb
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+        \noexpand\db at row@elt at end@%
+      }%
+    }\q at nil
+    \if at dtl@insertdone
+    \else
+      \advance\dtlrownum by 1\relax
+      \toks@=\expandafter{\@dtl at newlist}%
+      \edef\@dtl at newlist{\the\toks@
+        \noexpand\db at row@elt at w%
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+         \the\@dtl at rowa
+         \noexpand\db at row@id at w \number\dtlrownum
+         \noexpand\db at row@id at end@%
+        \noexpand\db at row@elt at end@%
+      }%
+    \fi
+    \let\@dtl at sortedlist=\@dtl at newlist
+  }%
+  \expandafter\global\csname dtldb@#1\endcsname=\expandafter
+    {\@dtl at sortedlist}%
+}
+\newcommand{\@dtl at sortcriteria}[2]{%
+  \@for\@dtl at level:=\@dtl at sortorder\do
+  {%
+    \expandafter\@dtl at getsortdirection\@dtl at level=\relax
+    \let\@dtl at keya=\@dtl at key
+    \let\@dtl at keyb=\@dtl at key
+    \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at key}%
+    \dtlgetentryfromrow{\@dtl at a}{\@dtl at col}{#1}%
+    \dtlgetentryfromrow{\@dtl at b}{\@dtl at col}{#2}%
+    \ifx\@dtl at a\dtlnovalue
+      \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+    \fi
+    \ifx\@dtl at b\dtlnovalue
+      \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+    \fi
+    \DTLifnull{\@dtl at a}%
+    {%
+      \@for\@dtl at keya:=\@dtl at replacementkeys\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at keya}%
+        \dtlgetentryfromrow{\@dtl at a}{\@dtl at col}{#1}%
+        \ifx\@dtl at a\dtlnovalue
+          \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+        \fi
+        \DTLifnull{\@dtl at a}{}{\@endfortrue}%
+      }%
+      \ifx\@dtl at keya\@nnil
+        \let\@dtl at keya\@dtl at key
+        \@dtl at setnull{\@dtl at a}{\@dtl at key}%
+      \fi
+    }%
+    {}%
+    \DTLifnull{\@dtl at b}%
+    {%
+      \@for\@dtl at keyb:=\@dtl at replacementkeys\do{%
+        \@sdtl at getcolumnindex{\@dtl at col}{\@dtl at dbname}{\@dtl at keyb}%
+        \dtlgetentryfromrow{\@dtl at b}{\@dtl at col}{#2}%
+        \ifx\@dtl at b\dtlnovalue
+          \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+        \fi
+        \DTLifnull{\@dtl at b}{}{\@endfortrue}%
+      }%
+      \ifx\@dtl at keyb\@nnil
+        \let\@dtl at keyb\@dtl at key
+        \@dtl at setnull{\@dtl at b}{\@dtl at key}%
+      \fi
+    }%
+    {}%
+    \@dtl at toksA=\expandafter{\@dtl at a}%
+    \@dtl at toksB=\expandafter{\@dtl at b}%
+    \edef\@dtl at docompare{\noexpand\dtl at compare@
+      {\@dtl at keya}{\@dtl at keyb}%
+      {\noexpand\@dtl at toksA}{\noexpand\@dtl at toksB}}%
+    \@dtl at docompare
+    \ifnum\dtl at sortresult=0\relax
+      \@endforfalse
+    \else
+      \@endfortrue
+    \fi
+  }%
+  \multiply\dtl at sortresult by -\@dtl at sortdirection\relax
+}
+\def\@dtl at getsortdirection#1=#2\relax{%
+  \def\@dtl at key{#1}%
+  \def\@dtl at sortdirection{#2}%
+  \ifdefempty{\@dtl at sortdirection}%
+  {%
+    \def\@dtl at sortdirection{-1}%
+  }%
+  {%
+    \@dtl at get@sortdirection#2%
+    \def\@dtl at dir{ascending}%
+    \ifx\@dtl at sortdirection\@dtl at dir
+      \def\@dtl at sortdirection{-1}%
+    \else
+      \def\@dtl at dir{descending}%
+      \ifx\@dtl at sortdirection\@dtl at dir
+        \def\@dtl at sortdirection{1}%
+      \else
+        \PackageError{datatool}{Invalid sort direction
+        `\@dtl at sortdirection'}{The sort direction can only be
+         one of `ascending' or `descending'}%
+        \def\@dtl at sortdirection{-1}%
+      \fi
+    \fi
+  }%
+}
+\def\@dtl at get@sortdirection#1={\def\@dtl at sortdirection{#1}}
+\newtoks\@dtl at toksA
+\newtoks\@dtl at toksB
+\newcommand{\dtl at compare}[3]{%
+  \dtl at compare@{#1}{#1}{#2}{#3}%
+}
+\newcommand{\dtl at compare@}[4]{%
+  \DTLgetdatatype{\@dtl at typeA}{\@dtl at dbname}{#1}%
+  \ifx\@dtl at typeA\DTLunsettype
+    \let\@dtl at typeA\DTLstringtype
+  \fi
+  \DTLgetdatatype{\@dtl at typeB}{\@dtl at dbname}{#2}%
+  \ifx\@dtl at typeB\DTLunsettype
+    \let\@dtl at typeB\DTLstringtype
+  \fi
+  \@dtl at tmpcount=\@dtl at typeA\relax
+  \multiply\@dtl at tmpcount by \@dtl at typeB\relax
+  \ifnum\@dtl at tmpcount=0\relax
+    \edef\@dtl at tmpcmp{%
+      \noexpand\@dtl at comparecs{\noexpand\dtl at sortresult}%
+        {\the#3}{\the#4}%
+      }%
+    \@dtl at tmpcmp
+    \ifdtlverbose
+      \edef\@dtl at a{\the#3}%
+      \edef\@dtl at b{\the#4}%
+    \fi
+  \else
+    \edef\@dtl at a{\the#3}%
+    \edef\@dtl at b{\the#4}%
+    \DTLifnumlt{\@dtl at a}{\@dtl at b}%
+    {%
+      \dtl at sortresult=-1\relax
+    }%
+    {%
+      \DTLifnumgt{\@dtl at a}{\@dtl at b}%
+      {%
+        \dtl at sortresult=1\relax
+      }%
+      {%
+        \dtl at sortresult=0\relax
+      }%
+    }%
+  \fi
+  \ifdtlverbose
+    \@onelevel at sanitize\@dtl at a
+    \@onelevel at sanitize\@dtl at b
+    \dtl at message{`\@dtl at a' <=> `\@dtl at b' = \number\dtl at sortresult}%
+  \fi
+}
+\newwrite\@dtl at write
+\newcommand*{\DTLsavedb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \def\@dtl at header{}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)%
+      \in{#1}\do
+    {%
+      \IfSubStringInString{\@dtl at separator}{\@dtl at key}%
+      {%
+        \ifdefempty{\@dtl at header}%
+        {%
+          \protected at edef\@dtl at header{%
+            \@dtl at delimiter\@dtl at key\@dtl at delimiter}%
+        }%
+        {%
+          \toks@=\expandafter{\@dtl at header}%
+          \protected at edef\@dtl at header{%
+            \the\toks@\@dtl at separator
+            \@dtl at delimiter\@dtl at key\@dtl at delimiter}%
+        }%
+      }%
+      {%
+        \ifdefempty{\@dtl at header}%
+        {%
+          \protected at edef\@dtl at header{\@dtl at key}%
+        }%
+        {%
+          \toks@=\expandafter{\@dtl at header}%
+          \protected at edef\@dtl at header{\the\toks@
+            \@dtl at separator\@dtl at key}%
+        }%
+      }%
+    }%
+    \protected at write\@dtl at write{}{\@dtl at header}%
+    \@sDTLforeach{#1}{}%
+    {%
+      \def\@dtl at row{}%
+      \DTLforeachkeyinrow{\@dtl at val}%
+      {%
+        \IfSubStringInString{\@dtl at separator}{\@dtl at val}%
+        {%
+          \ifdefempty{\@dtl at row}%
+          {%
+            \protected at edef\@dtl at row{%
+              \@dtl at delimiter\@dtl at val\@dtl at delimiter}%
+          }%
+          {%
+            \toks@=\expandafter{\@dtl at row}%
+            \protected at edef\@dtl at row{\the\toks@\@dtl at separator
+              \@dtl at delimiter\@dtl at val\@dtl at delimiter}%
+          }%
+        }%
+        {%
+          \ifdefempty{\@dtl at row}%
+          {%
+            \protected at edef\@dtl at row{\@dtl at val}%
+          }%
+          {%
+            \toks@=\expandafter{\@dtl at row}%
+            \protected at edef\@dtl at row{\the\toks@\@dtl at separator
+              \@dtl at val}%
+          }%
+        }%
+      }%
+        \protected at write\@dtl at write{}{\@dtl at row}%
+    }%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLsavetexdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write\@dtl at write{}{\string\DTLnewdb{#1}}%
+    \@sDTLforeach{#1}{}%
+    {%
+      \protected at write\@dtl at write{}{\string\DTLnewrow*{#1}}%
+      \DTLforeachkeyinrow{\@dtl at val}%
+      {%
+        \DTLifnull{\@dtl at val}%
+        {\def\@dtl at val{}}%
+        {}%
+        \protected at write\@dtl at write{}{%
+          \string\DTLnewdbentry*{#1}{\dtlkey}{\@dtl at val}}%
+      }%
+    }%
+    \dtlforeachkey(\@dtl at k,\@dtl at c,\@dtl at t,\@dtl at h)\in{#1}\do
+    {%
+      \@onelevel at sanitize\@dtl at h
+      \protected at write\@dtl at write{}{%
+        \string\DTLsetheader*{#1}{\@dtl at k}{\@dtl at h}}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\dtl at saverawdbhook}{}
+\newcommand*{\DTLsaverawdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write{\@dtl at write}{}{%
+      \string\DTLifdbexists{#1}\expandafter\@gobble\string\%^^J%
+      {%
+         \string\PackageError{datatool}{Database `#1' ^^Jalready exists}{}%
+         \expandafter\@gobble\string\%^^J%
+         \string\aftergroup\string\endinput
+      }%
+      {%
+      }\expandafter\@gobble\string\%
+    }%
+    {%
+      \def\db at row@elt at w{\expandafter\@gobble\string\%^^J\string\db at row@elt at w\space}%
+      \def\db at row@elt at end@{\expandafter\@gobble\string\%^^J\string\db at row@elt at end@\space}%
+      \def\db at row@id at w{\expandafter\@gobble\string\%^^J\string\db at row@id at w\space}%
+      \def\db at row@id at end@{\expandafter\@gobble\string\%^^J\string\db at row@id at end@\space}%
+      \def\db at col@elt at w{\expandafter\@gobble\string\%^^J\string\db at col@elt at w\space}%
+      \def\db at col@elt at end@{\expandafter\@gobble\string\%^^J\string\db at col@elt at end@\space}%
+      \def\db at col@id at w{\expandafter\@gobble\string\%^^J\string\db at col@id at w\space}%
+      \def\db at col@id at end@{\expandafter\@gobble\string\%^^J\string\db at col@id at end@\space}%
+      \def\db at plist@elt at w{\expandafter\@gobble\string\%^^J\string\db at plist@elt at w\space}%
+      \def\db at plist@elt at end@{\expandafter\@gobble\string\%^^J\string\db at plist@elt at end@\space}%
+      \def\db at key@id at w{\expandafter\@gobble\string\%^^J\string\db at key@id at w\space}%
+      \def\db at key@id at end@{\expandafter\@gobble\string\%^^J\string\db at key@id at end@\space}%
+      \def\db at type@id at w{\expandafter\@gobble\string\%^^J\string\db at type@id at w\space}%
+      \def\db at type@id at end@{\expandafter\@gobble\string\%^^J\string\db at type@id at end@\space}%
+      \def\db at header@id at w{\expandafter\@gobble\string\%^^J\string\db at header@id at w\space}%
+      \def\db at header@id at end@{\expandafter\@gobble\string\%^^J\string\db at header@id at end@\space}%
+      \protected at write{\@dtl at write}{}{\string\bgroup\string\makeatletter}%
+      \protected at write{\@dtl at write}{}{%
+        \string\dtl at message{Reconstructing database^^J`#1'}%
+        \expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter
+       \string\global\string\expandafter^^J\string\newtoks
+       \string\csname\space dtlkeys@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J
+        \string\csname\space dtlkeys@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \expandafter\protected at xdef\csname dtl at rawwritedbkeys@#1\endcsname{%
+        \the\csname dtlkeys@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\csname dtl at rawwritedbkeys@#1\endcsname}%
+      \protected at write{\@dtl at write}{}%
+         {\expandafter\@gobble\string\}\expandafter\@gobble\string\%}%
+      \dtl at saverawdbhook
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter\string\global
+       \string\expandafter^^J\string\newtoks
+         \string\csname\space dtldb@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J\string\csname\space dtldb@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \expandafter\protected at xdef\csname dtl at rawwritedb@#1\endcsname{\the\csname dtldb@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\csname dtl at rawwritedb@#1\endcsname}%
+      \protected at write{\@dtl at write}{}{\expandafter\@gobble\string\}\expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlrows@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlrows@#1\string\endcsname
+        =\expandafter\number\csname dtlrows@#1\endcsname\string\relax}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlcols@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlcols@#1\string\endcsname
+        =\expandafter\number\csname dtlcols@#1\endcsname\string\relax}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \edef\dtl at tmp{%
+        \string\expandafter^^J
+        \string\gdef
+        \string\csname\space dtl at ci@#1@\@dtl at key\string\endcsname
+        {\csname dtl at ci@#1@\@dtl at key\endcsname}\expandafter\@gobble\string\%
+      }%
+      \expandafter\write\expandafter\@dtl at write\expandafter{\dtl at tmp}%
+    }%
+      \protected at write{\@dtl at write}{}{\string\egroup}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLprotectedsaverawdb}[2]{%
+  \DTLifdbexists{#1}%
+  {%
+    \openout\@dtl at write=#2\relax
+    \protected at write{\@dtl at write}{}{%
+      \string\DTLifdbexists{#1}\expandafter\@gobble\string\%^^J%
+      {%
+         \string\PackageError{datatool}{Database `#1' ^^Jalready exists}{}%
+         \expandafter\@gobble\string\%^^J%
+         \string\aftergroup\string\endinput
+      }%
+      {%
+      }\expandafter\@gobble\string\%
+    }%
+    {%
+      \protected at write{\@dtl at write}{}{\string\bgroup\string\makeatletter}%
+      \protected at write{\@dtl at write}{}{\string\dtl at message{Reconstructing database
+        ^^J`#1'}\expandafter\@gobble\string\%}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter
+       \string\global\string\expandafter^^J\string\newtoks
+       \string\csname\space dtlkeys@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J
+        \string\csname\space dtlkeys@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \edef\dtl at rawwrite@keys{\the\csname dtlkeys@#1\endcsname}%
+      \@onelevel at sanitize\dtl at rawwrite@keys
+      \expandafter\write\expandafter\@dtl at write\expandafter
+         {\dtl at rawwrite@keys\expandafter\@gobble\string\}}%
+      \protected at write{\@dtl at write}{}{%
+       \string\expandafter\string\global
+       \string\expandafter^^J\string\newtoks
+         \string\csname\space dtldb@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{%
+        \string\expandafter
+        \string\global^^J\string\csname\space dtldb@#1\string\endcsname
+       =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}%
+      \edef\dtl at rawwrite@db{\the\csname dtldb@#1\endcsname}%
+      \@onelevel at sanitize\dtl at rawwrite@db
+      \expandafter\write\expandafter\@dtl at write\expandafter
+         {\dtl at rawwrite@db\expandafter\@gobble\string\}}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlrows@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlrows@#1\string\endcsname
+        =\expandafter\number\csname dtlrows@#1\endcsname\string\relax}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\expandafter\string\newcount
+       \string\csname\space dtlcols@#1\string\endcsname}%
+      \protected at write{\@dtl at write}{}{\string\expandafter\string\global^^J
+       \string\csname\space dtlcols@#1\string\endcsname
+        =\expandafter\number\csname dtlcols@#1\endcsname\string\relax}%
+    \dtlforeachkey(\@dtl at key,\@dtl at col,\@dtl at type,\@dtl at head)\in{#1}\do
+    {%
+      \edef\dtl at tmp{%
+        \string\expandafter^^J
+        \string\gdef
+        \string\csname\space dtl at ci@#1@\@dtl at key\string\endcsname
+        {\csname dtl at ci@#1@\@dtl at key\endcsname}\expandafter\@gobble\string\%
+      }%
+      \expandafter\write\expandafter\@dtl at write\expandafter{\dtl at tmp}%
+    }%
+      \protected at write{\@dtl at write}{}{\string\egroup}%
+    }%
+    \protected at write{\@dtl at write}{}{\string\def\string\dtllastloadeddb{#1}}%
+    \closeout\@dtl at write
+  }%
+  {%
+    \PackageError{datatool}{Can't save database `#1': no such
+      database}{}%
+  }%
+}
+\newcommand*{\DTLloaddbtex}[2]{%
+  \IfFileExists{#2}%
+  {%
+    \input{#2}%
+    \ifdef#1%
+    {%
+      \PackageError{datatool}{Command \string#1\space is already defined}%
+      {}%
+    }%
+    {%
+      \let#1\dtllastloadeddb
+    }%
+  }%
+  {%
+    \PackageError{datatool}{File `#2' doesn't exist.}{}%
+  }%
+}
+\newread\@dtl at read
+\newcount\dtl at entrycr
+\define at boolkey{loaddb}[dtl]{noheader}[true]{}
+\define at boolkey{loaddb}[dtl]{autokeys}[true]{}
+\dtlautokeysfalse
+\define at key{loaddb}{keys}{%
+  \dtl at entrycr=0\relax
+  \@for\@dtl at key:=#1\do
+  {%
+    \advance\dtl at entrycr by 1\relax
+    \expandafter
+      \edef\csname @dtl at inky@\romannumeral\dtl at entrycr\endcsname{%
+        \@dtl at key}%
+  }%
+}
+\define at key{loaddb}{headers}{%
+  \dtl at entrycr=0\relax
+  \@for\@dtl at head:=#1\do
+  {%
+    \advance\dtl at entrycr by 1\relax
+    \toks@=\expandafter{\@dtl at head}%
+    \expandafter
+      \edef\csname @dtl at inhd@\romannumeral\dtl at entrycr\endcsname{%
+        \the\toks@}%
+  }%
+}
+\newcount{\dtl at omitlines}
+\define at key{loaddb}{omitlines}{\dtl at omitlines=#1\relax}
+\newcommand*{\dtldefaultkey}{Column}
+\newcommand*{\@dtl at readline}[2]{%
+  \begingroup
+  \catcode\endlinechar=\active%
+  \global\read#1 to #2%
+  \endgroup%
+  \ifx#2\empty%
+  \else%
+    \expandafter\@dtl at stripeol#2%
+    \let#2\@dtl at strippedline%
+  \fi%
+}
+\begingroup
+\catcode\endlinechar=\active%
+\gdef\@dtl at stripeol#1
+{\gdef\@dtl at strippedline{#1}}
+\endgroup
+\newcommand*{\@dtl at readrawline}[2]{%
+  \@dtl at rawread#1 to #2%
+  \dtl at domappings\@dtl at line
+}
+\newif\ifDTLnewdbonload
+\DTLnewdbonloadtrue
+\newcommand*{\DTLloaddb}{%
+  \let\@dtl at doreadline\@dtl at readline
+  \@dtlloaddb
+}
+\newcommand*{\@dtlloaddb}[3][]{%
+  \IfFileExists{#3}{%
+  \begingroup
+    \catcode`\"12\relax
+     \dtlnoheaderfalse
+     \setkeys{loaddb}{#1}%
+    \openin\@dtl at read=#3%
+    \dtl at message{Reading `#3'}%
+    \loop
+    \ifnum \dtl at omitlines > \z@
+      \advance\dtl at omitlines by \m at ne
+      \read\@dtl at read to \@dtl at line
+    \repeat
+    \ifDTLnewdbonload
+     \DTLnewdb{#2}%
+    \fi
+    \ifeof\@dtl at read
+      \PackageWarning{datatool}{File `#3' has no data}%
+    \else
+      \ifdtlnoheader
+      \else
+        \loop
+          \@dtl at conditionfalse
+          \ifeof\@dtl at read
+          \else
+           \@dtl at doreadline\@dtl at read\@dtl at line
+            \ifdefempty{\@dtl at line}%
+            {%
+              \@dtl at conditiontrue
+            }%
+            {%
+            }%
+          \fi
+        \if at dtl@condition
+        \repeat
+        \protected at edef\@dtl at lin@{%
+           \@dtl at separator\@dtl at line\@dtl at separator}%
+        \dtl at entrycr=0\relax
+       \loop
+        \expandafter\@dtl at lopoff\@dtl at lin@\to\@dtl at lin@\@dtl at key
+        \advance\dtl at entrycr by 1\relax
+        \ifdtlautokeys
+          \csedef{@dtl at inky@\romannumeral\dtl at entrycr}%
+             {\dtldefaultkey\number\dtl at entrycr}%
+        \else
+          \ifdefempty{\@dtl at key}%
+          {%
+            \edef\@dtl at key{\dtldefaultkey\number\dtl at entrycr}%
+          }%
+          {}%
+        \fi
+        \expandafter\@dtl at toks\expandafter{\@dtl at key}%
+        \@ifundefined{@dtl at inky@\romannumeral\dtl at entrycr}%
+        {%
+          \expandafter
+            \edef\csname @dtl at inky@\romannumeral
+              \dtl at entrycr\endcsname{\the\@dtl at toks}%
+        }%
+        {%
+          \@ifundefined{@dtl at inhd@\romannumeral\dtl at entrycr}%
+          {%
+            \expandafter
+              \edef\csname @dtl at inhd@\romannumeral
+                \dtl at entrycr\endcsname{\the\@dtl at toks}%
+          }%
+          {}%
+        }%
+        \ifx\@dtl at lin@\@dtl at separator
+          \@dtl at conditionfalse
+        \else
+          \@dtl at conditiontrue
+        \fi
+       \if at dtl@condition
+       \repeat
+      \fi
+       \ifeof\@dtl at read
+          \ifdtlnoheader
+            \PackageWarning{datatool}{No data in `#3'}%
+          \else
+            \PackageWarning{datatool}{Only header row found in `#3'}%
+          \fi
+       \else
+         \@dtl at conditiontrue
+         \loop
+          \@dtl at doreadline\@dtl at read\@dtl at line
+           \ifdefempty{\@dtl at line}%
+           {%
+           }%
+           {%
+             \@sDTLnewrow{#2}%
+             \expandafter\@dtl at toks\expandafter{\@dtl at line}%
+             \edef\@dtl at lin@{\@dtl at separator\the\@dtl at toks
+               \@dtl at separator}%
+             \dtl at entrycr=0\relax
+             {%
+               \@dtl at conditiontrue
+               \loop
+                 \expandafter\@dtl at lopoff\@dtl at lin@\to
+                   \@dtl at lin@\@dtl at thisentry
+                 \advance\dtl at entrycr by 1\relax
+                 \@ifundefined{@dtl at inky@\romannumeral\dtl at entrycr}%
+                 {%
+                   \edef\@dtl at thiskey{\dtldefaultkey
+                     \number\dtl at entrycr}%
+                   \expandafter\let
+                     \csname @dtl at inky@\romannumeral
+                       \dtl at entrycr\endcsname\@dtl at thiskey
+                 }%
+                 {%
+                   \edef\@dtl at thiskey{%
+                     \csname @dtl at inky@\romannumeral
+                       \dtl at entrycr\endcsname}%
+                 }%
+                 \expandafter\@dtl at toks\expandafter{\@dtl at thisentry}%
+                 \edef\@do at dtlnewentry{\noexpand\@sDTLnewdbentry
+                   {#2}{\@dtl at thiskey}{\the\@dtl at toks}}%
+                 \@do at dtlnewentry
+                 \ifx\@dtl at lin@\@dtl at separator
+                   \@dtl at conditionfalse
+                 \fi
+               \if at dtl@condition
+               \repeat
+             }%
+         }%
+         \ifeof\@dtl at read \@dtl at conditionfalse\fi
+         \if at dtl@condition
+         \repeat
+       \fi
+    \fi
+    \closein\@dtl at read
+     \edef\@dtl at maxcols{\expandafter
+       \number\csname dtlcols@#2\endcsname}%
+     \dtlgforint\dtl at entrycr=1\to\@dtl at maxcols\step1\do
+     {%
+       \@ifundefined{@dtl at inhd@\romannumeral\dtl at entrycr}%
+       {}%
+       {%
+          \expandafter\let\expandafter\@dtl at head
+            \csname @dtl at inhd@\romannumeral\dtl at entrycr\endcsname
+          \@dtl at toks=\expandafter{\@dtl at head}%
+          \edef\@dtl at dosetheader{\noexpand\@dtl at setheaderforindex
+            {#2}{\number\dtl at entrycr}{\the\@dtl at toks}}%
+          \@dtl at dosetheader
+       }%
+     }%
+  \endgroup
+  }{%
+    \PackageError{datatool}{Can't load database `#2' (file `#3'
+    doesn't exist)}{}%
+  }%
+}
+\newcommand*\DTLloadrawdb{%
+  \let\@dtl at doreadline\@dtl at readrawline
+  \@dtlloaddb
+}
+\begingroup
+\catcode`\%=\active
+\catcode`$=\active
+\catcode`&=\active
+\catcode`~=\active
+\catcode`_=\active
+\catcode`^=\active
+\catcode`#=\active
+\catcode`?=6\relax
+\catcode`<=1\relax
+\catcode`>=2\relax
+\catcode`\{=\active
+\catcode`\}=\active
+\gdef\@dtl at rawread?1to?2<\relax
+<<\catcode`\%=\active
+\catcode`$=\active
+\catcode`&=\active
+\catcode`~=\active
+\catcode`_=\active
+\catcode`^=\active
+\catcode`#=\active
+\catcode`\{=\active
+\catcode`\}=\active
+\def%<\noexpand\%>\relax
+\def$<\noexpand\$>\relax
+\def&<\&>\relax
+\def#<\#>\relax
+\def~<\noexpand\textasciitilde>\relax
+\def_<\noexpand\_>\relax
+\def^<\noexpand\textasciicircum>\relax
+\@dtl at activatebraces
+\@dtl at doreadraw?1?2>>>
+\gdef\@dtl at doreadraw?1?2<\relax
+\begingroup\catcode\endlinechar=\active\global\read?1 to \dtl at tmp\endgroup
+\expandafter\@dtl at stripeol\dtl at tmp
+\let\dtl at tmp\@dtl at strippedline
+\protected at xdef?2<\dtl at tmp>\relax
+>
+\endgroup
+\begingroup
+\catcode`\{=\active
+\catcode`\}=\active
+\catcode`<=1\relax
+\catcode`>=2\relax
+\gdef\@dtl at activatebraces<%
+ \catcode`\{=\active
+ \catcode`\}=\active
+ \def{<\noexpand\{>%
+ \def}<\noexpand\}>%
+>%
+\endgroup
+\newcommand*{\DTLrawmap}[2]{%
+  \expandafter\@dtl at toks\expandafter{\@dtl at rawmappings}%
+  \ifdefempty{\@dtl at rawmappings}%
+  {%
+    \def\@dtl at rawmappings{{#1}{#2}}%
+  }%
+  {%
+    \def\@dtl at tmp{{#1}{#2}}%
+    \protected at edef\@dtl at rawmappings{\the\@dtl at toks,\@dtl at tmp}%
+  }%
+}
+\newcommand*{\@dtl at rawmappings}{}
+\newcommand*{\dtl at domappings}[1]{%
+  \@for\@dtl at map:=\@dtl at rawmappings\do{%
+    \expandafter\DTLsubstituteall\expandafter#1\@dtl at map
+  }%
+}
+\newcommand*{\dtlshowdb}[1]{%
+  \expandafter\showthe\csname dtldb@#1\endcsname
+}
+\newcommand*{\dtlshowdbkeys}[1]{%
+  \expandafter\showthe\csname dtlkeys@#1\endcsname
+}
+\newcommand*{\dtlshowtype}[2]{%
+  \DTLgetdatatype{\@dtl at type}{#1}{#2}\show\@dtl at type
+}
+\endinput
+%%
+%% End of file `datatool-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-base-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-base-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-base-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,3429 @@
+%%
+%% This is file `datatool-base-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-base-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-base}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{etoolbox}
+\RequirePackage{amsmath}
+\RequirePackage{xkeyval}
+\RequirePackage{xfor}
+\RequirePackage{ifthen}
+\RequirePackage{substr}[2009/10/20]
+\ifundef{\ifdtlverbose}
+{
+  \define at boolkey{datatool-base.sty}[dtl]{verbose}[true]{}
+}%
+{}
+\define at choicekey{datatool-base.sty}{math}[\val\nr]{fp,pgfmath}{%
+  \renewcommand*\@dtl at mathprocessor{#1}%
+}
+\define at boolkey{datatool-base.sty}[@dtl@]{utf8}[true]{}
+\ifdef\UTFviii at two@octets
+{\booltrue{@dtl at utf8}}%
+{\boolfalse{@dtl at utf8}}
+\newcommand*{\dtlenableUTFviii}{\booltrue{@dtl at utf8}}
+\newcommand*{\dtldisableUTFviii}{\boolfalse{@dtl at utf8}}
+\providecommand*{\@dtl at mathprocessor}{fp}
+\ProcessOptionsX
+\RequirePackage{datatool-\@dtl at mathprocessor}[=v2.32]
+\newcommand*{\dtl at message}[1]{%
+  \ifdtlverbose\typeout{#1}\fi
+}
+\newtoks\@dtl at toks
+\newcount\@dtl at tmpcount
+\newlength\dtl at tmplength
+\newcommand{\dtl at ifsingle}[3]{%
+  \def\@dtl at arg{#1}%
+  \ifdefempty{\@dtl at arg}%
+  {%
+    #3%
+  }%
+  {%
+    \@dtl at ifsingle#1\@nil{#2}{#3}%
+  }%
+}
+\def\@dtl at ifsingle#1#2\@nil#3#4{%
+  \def\dtl at sg@arg{#2}%
+  \ifdefempty{\dtl at sg@arg}%
+  {%
+   #3%
+  }%
+  {%
+   #4%
+  }%
+}
+\newcommand{\dtl at ifsingleorUTFviii}[3]{%
+  \ifbool{@dtl at utf8}
+  {%
+    \def\@dtl at arg{#1}%
+    \ifdefempty{\@dtl at arg}%
+    {%
+      #3%
+    }%
+    {%
+      \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+      {%
+        \dtl at getfirst@UTFviii#1\@nil\end at dtl@getfirst at UTFviii
+        \ifdefempty\dtl at rest{#2}{#3}%
+      }%
+      {%
+        \@dtl at ifsingle#1\@nil{#2}{#3}%
+      }%
+    }%
+  }%
+  {%
+    \dtl at ifsingle{#1}{#2}{#3}%
+  }%
+}%
+\newcommand{\dtlifintopenbetween}[5]{%
+  \ifnum#1>#2\relax
+    \ifnum#1<#3\relax
+      #4%
+    \else
+      #5%
+    \fi
+  \else
+    #5%
+  \fi
+}
+\newcommand{\dtlifintclosedbetween}[5]{%
+  \dtlifintopenbetween{#1}{#2}{#3}{#4}%
+  {%
+    \ifnum#1=#2\relax
+      #4%
+    \else
+      \ifnum#1=#3\relax
+        #4%
+      \else
+        #5%
+      \fi
+    \fi
+  }%
+}
+\long\def\long at collect@body#1{%
+  \@envbody{\@xp#1\@xp{\the\@envbody}}%
+  \edef\process at envbody{\the\@envbody\@nx\end{\@currenvir}}%
+  \@envbody\@emptytoks \def\begin at stack{b}%
+  \begingroup
+  \@xp\let\csname\@currenvir\endcsname\long at collect@@body
+  \edef\process at envbody{\@xp\@nx\csname\@currenvir\endcsname}%
+  \process at envbody
+}
+\long\def\long at addto@envbody#1{%
+  \toks@{#1}%
+  \edef\@dtl at tmp{\the\@envbody\the\toks@}%
+  \global\@envbody\@xp{\@dtl at tmp}%
+}
+\long\def\long at collect@@body#1\end#2{%
+  \protected at edef\begin at stack{%
+    \long at push@begins#1\begin\end \@xp\@gobble\begin at stack
+  }%
+  \ifx\@empty\begin at stack
+    \endgroup
+    \@checkend{#2}%
+    \long at addto@envbody{#1}%
+  \else
+    \long at addto@envbody{#1\end{#2}}%
+  \fi
+  \process at envbody
+}
+\long\def\long at push@begins#1\begin#2{%
+  \ifx\end#2\else b\@xp\long at push@begins\fi
+}
+\newcommand*{\DTLifinlist}[4]{%
+  \def\@dtl at doifinlist##1,#1,##2\end at dtl@doifinlist{%
+     \def\@before{##1}%
+     \def\@after{##2}%
+  }%
+  \expandafter\@dtl at doifinlist\expandafter,#2,#1,\@nil
+    \end at dtl@doifinlist
+  \ifx\@after\@nnil
+    #4%
+  \else
+    #3%
+  \fi
+}
+\newif\ifDTLlistskipempty
+\DTLlistskipemptytrue
+\newrobustcmd{\DTLlistelement}[2]{%
+  \begingroup
+    \@dtl at tmpcount=0\relax
+    \@for\@dtl at element:=#1\do{%
+     \ifDTLlistskipempty
+       \ifdefempty{\@dtl at element}%
+       {}%
+       {%
+         \advance\@dtl at tmpcount by 1\relax%
+         \ifnum\@dtl at tmpcount=#2 \@dtl at element\@endfortrue\fi
+       }%
+     \else
+       \advance\@dtl at tmpcount by 1\relax%
+       \ifnum\@dtl at tmpcount=#2 \@dtl at element\@endfortrue\fi
+     \fi
+    }%
+    \if at endfor \else\@dtl at listelement@outofrange{#2}\fi
+  \endgroup
+}
+\newrobustcmd{\DTLfetchlistelement}[3]{%
+ \begingroup
+   \@dtl at tmpcount=0\relax
+   \@for\@dtl at element:=#1\do{%
+    \ifDTLlistskipempty
+      \ifdefempty{\@dtl at element}%
+      {}%
+      {%
+        \advance\@dtl at tmpcount by 1\relax%
+        \ifnum\@dtl at tmpcount=#2 \@endfortrue\fi
+      }%
+    \else
+      \advance\@dtl at tmpcount by 1\relax%
+      \ifnum\@dtl at tmpcount=#2 \@endfortrue\fi
+    \fi
+   }%
+   \if at endfor \else\def\@dtl at element{\@dtl at listelement@outofrange{#2}}\fi
+   \edef\x{%
+     \endgroup
+     \noexpand\def\noexpand#3{\expandonce\@dtl at element}%
+   }\x
+}
+\newcommand{\@dtl at listelement@outofrange}[1]{%
+  \PackageWarning{datatool-base}{List index `\number#1' out of range}%
+}
+\newrobustcmd{\DTLnumitemsinlist}[2]{%
+  \@dtl at tmpcount=0\relax
+  \@for\@dtl at element:=#1\do{%
+     \ifDTLlistskipempty
+       \ifdefempty{\@dtl at element}%
+       {}%
+       {\advance\@dtl at tmpcount by 1\relax}%
+     \else
+       \advance\@dtl at tmpcount by 1\relax
+     \fi
+  }%
+  \edef#2{\number\@dtl at tmpcount}%
+}
+\newcommand*{\dtl at choplast}[3]{%
+  \let#2\@empty
+  \let#3\@empty
+  \@for\@dtl at element:=#1\do{%
+    \ifdefempty{#3}%
+    {%
+    }%
+    {%
+      \ifdefempty{#2}%
+      {%
+        \expandafter\toks@\expandafter{#3}%
+        \edef#2{{\the\toks@}}%
+      }%
+      {%
+        \expandafter\toks@\expandafter{#3}%
+        \expandafter\@dtl at toks\expandafter{#2}%
+        \edef#2{\the\@dtl at toks,{\the\toks@}}%
+      }%
+    }%
+    \let#3=\@dtl at element%
+  }%
+}
+\newcommand*{\dtl at chopfirst}[3]{%
+  \let#2=\@empty
+  \let#3=\@empty
+  \@for\@dtl at element:=#1\do{%
+    \let#2=\@dtl at element
+    \@endfortrue
+  }%
+  \if at endfor
+   \let#3=\@forremainder
+  \fi
+  \@endforfalse
+}
+\newcommand{\dtl at sortlist}[2]{%
+\def\@dtl at sortedlist{}%
+\@for\@dtl at currentrow:=#1\do{%
+\expandafter\dtl at insertinto\expandafter
+  {\@dtl at currentrow}{\@dtl at sortedlist}{#2}%
+\@endforfalse}%
+\let#1=\@dtl at sortedlist
+}
+\newcommand{\dtl at insertinto}[3]{%
+  \def\@dtl at newsortedlist{}%
+  \@dtl at insertdonefalse
+  \@for\dtl at srtelement:=#2\do{%
+    \if at dtl@insertdone
+      \expandafter\toks@\expandafter{\dtl at srtelement}%
+      \edef\@dtl at newstuff{{\the\toks@}}%
+    \else
+      \expandafter#3\expandafter{\dtl at srtelement}{#1}%
+      \ifnum\dtl at sortresult<0\relax
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \@dtl at toks{#1}%
+        \edef\@dtl at newstuff{{\the\@dtl at toks},{\the\toks@}}%
+        \@dtl at insertdonetrue
+      \else
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{{\the\toks@}}%
+      \fi
+    \fi
+    \ifdefempty{\@dtl at newsortedlist}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@}%
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \expandafter\@dtl at toks\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    }%
+    \@endforfalse
+  }%
+  \ifdefempty{\@dtl at newsortedlist}%
+  {%
+    \@dtl at toks{#1}%
+    \edef\@dtl at newsortedlist{{\the\@dtl at toks}}%
+  }%
+  {%
+    \if at dtl@insertdone
+    \else
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \@dtl at toks{#1}%
+      \edef\@dtl at newsortedlist{\the\toks@,{\the\@dtl at toks}}%
+    \fi
+  }%
+  \global\let#2=\@dtl at newsortedlist
+}
+\newcommand{\dtlsortlist}[2]{%
+\def\@dtl at sortedlist{}%
+\@for\@dtl at currentrow:=#1\do{%
+\expandafter\dtlinsertinto\expandafter
+  {\@dtl at currentrow}{\@dtl at sortedlist}{#2}%
+\@endforfalse}%
+\let#1=\@dtl at sortedlist
+}
+\newcommand{\dtlinsertinto}[3]{%
+  \def\@dtl at newsortedlist{}%
+  \@dtl at insertdonefalse
+  \@for\dtl at srtelement:=#2\do{%
+    \expandafter\DTLifSubString\expandafter{\dtl at srtelement}{,}
+    {%
+      \expandafter\toks@\expandafter{\dtl at srtelement}%
+      \edef\dtl at srtelement{{\the\toks@}}%
+    }%
+    {%
+    }
+    \if at dtl@insertdone
+      \let\@dtl at newstuff\dtl at srtelement
+    \else
+      \expandafter#3\expandafter\dtl at sortresult
+        \expandafter{\dtl at srtelement}{#1}%
+      \ifnum\dtl at sortresult>0\relax
+        \DTLifSubString{#1}{,}%
+        {%
+          \@dtl at toks{{#1}}%
+        }%
+        {%
+          \@dtl at toks{#1}%
+        }%
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{\the\@dtl at toks,\the\toks@}%
+        \@dtl at insertdonetrue
+      \else
+        \expandafter\toks@\expandafter{\dtl at srtelement}%
+        \edef\@dtl at newstuff{{\the\toks@}}%
+        \let\@dtl at newstuff\dtl at srtelement
+      \fi
+    \fi
+    \ifdefempty{\@dtl at newsortedlist}%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@}%
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \expandafter\@dtl at toks\expandafter{\@dtl at newstuff}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    }%
+    \@endforfalse
+  }%
+  \ifdefempty{\@dtl at newsortedlist}%
+  {%
+    \DTLifSubString{#1}{,}%
+    {%
+      \@dtl at toks{{#1}}%
+    }%
+    {%
+      \@dtl at toks{#1}%
+    }%
+    \edef\@dtl at newsortedlist{\the\@dtl at toks}%
+  }%
+  {%
+    \if at dtl@insertdone
+    \else
+      \DTLifSubString{#1}{,}%
+      {%
+        \@dtl at toks{{#1}}%
+      }%
+      {%
+        \@dtl at toks{#1}%
+      }%
+      \expandafter\toks@\expandafter{\@dtl at newsortedlist}%
+      \edef\@dtl at newsortedlist{\the\toks@,\the\@dtl at toks}%
+    \fi
+  }%
+  \global\let#2=\@dtl at newsortedlist
+}
+\newcommand*{\edtlinsertinto}[3]{%
+  \protected at edef\dtl at srtelement{#1}%
+  \expandafter\dtlinsertinto\expandafter{\dtl at srtelement}{#2}{#3}%
+}
+\newif\if at dtl@insertdone
+\newcount\dtl at sortresult
+\newcommand*{\DTLlistformatsep}{, }
+\newcommand*{\DTLlistformatoxford}{}
+\ifdef\andname
+{\newcommand*{\DTLandname}{\andname}}
+{\newcommand*{\DTLandname}{\&}}
+\newcommand*{\DTLlistformatlastsep}{ \DTLandname\space}
+\newcommand*{\DTLlistformatitem}[1]{#1}
+\newcommand*{\@dtl at formatlist@handler}[1]{%
+  \@dtl at formatlist@itemsep
+  \@dtl at formatlist@lastitem
+  \renewcommand{\@dtl at formatlist@lastitem}{%
+    \renewcommand{\@dtl at formatlist@itemsep}{%
+      \DTLlistformatsep
+      \renewcommand*{\@dtl at formatlist@prelastitemsep}{%
+        \DTLlistformatoxford}}%
+    \renewcommand{\@dtl at formatlist@prelastitem}{%
+      \@dtl at formatlist@prelastitemsep
+       \DTLlistformatlastsep}%
+    \DTLlistformatitem{#1}%
+  }%
+}%
+\newrobustcmd*{\DTLformatlist}{%
+ \@ifstar{\s at dtlformatlist}{\@dtlformatlist}%
+}
+\newcommand*{\s at dtlformatlist}[1]{%
+  \def\@dtl at formatlist@itemsep{}%
+  \def\@dtl at formatlist@lastitem{}%
+  \def\@dtl at formatlist@prelastitem{}%
+  \def\@dtl at formatlist@prelastitemsep{}%
+  \@for\@dtl at formatlist@item:=#1\do{%
+    \ifDTLlistskipempty
+      \ifdefempty{\@dtl at formatlist@item}%
+      {}%
+      {\expandafter\@dtl at formatlist@handler\expandafter{\@dtl at formatlist@item}}%
+    \else
+      \expandafter\@dtl at formatlist@handler\expandafter{\@dtl at formatlist@item}%
+    \fi
+  }%
+  \@dtl at formatlist@prelastitem\@dtl at formatlist@lastitem
+}
+\newcommand*{\@dtlformatlist}[1]{{\s at dtlformatlist{#1}}}
+\newcommand{\@dtl at toks@gput at right@cx}[2]{%
+  \def\@dtl at toks@name{#1}%
+  \edef\@dtl at stuff{#2}%
+  \global\csname\@dtl at toks@name\endcsname\expandafter
+    \expandafter\expandafter{\expandafter\the
+    \csname\expandafter\@dtl at toks@name\expandafter\endcsname\@dtl at stuff}%
+}
+\newcommand{\@dtl at toks@gconcat at middle@cx}[4]{%
+  \def\@dtl at toks@name{#1}%
+  \edef\@dtl at stuff{#3}%
+  \global\csname\@dtl at toks@name\endcsname\expandafter\expandafter
+    \expandafter\expandafter\expandafter
+    \expandafter\expandafter{\expandafter\expandafter\expandafter
+    \the\expandafter\expandafter\expandafter#2%
+    \expandafter\@dtl at stuff\the#4}%
+}
+\newcount\@dtl at numgrpsepcount
+\newcommand*{\@dtl at decimal}{.}
+\newcommand*{\@dtl at numbergroupchar}{,}
+\newcommand*{\DTLsetnumberchars}[2]{%
+  \renewcommand*{\@dtl at numbergroupchar}{#1}%
+  \renewcommand*{\@dtl at decimal}{#2}%
+  \@dtl at construct@getnums
+  \@dtl at construct@stripnumgrpchar{#1}%
+}
+\edef\@dtl at construct@getintfrac#1{%
+  \noexpand\def\noexpand\@dtl at getintfrac##1#1##2\noexpand\relax{%
+    \noexpand\@dtl at get@intpart{##1}%
+    \noexpand\def\noexpand\@dtl at fracpart{##2}%
+    \noexpand\ifdefempty{\noexpand\@dtl at fracpart}
+    {%
+      \noexpand\def\noexpand\@dtl at fracpart{0}%
+    }%
+    {%
+      \noexpand\@dtl at getfracpart##2\noexpand\relax
+      \noexpand\@dtl at choptrailingzeroes{\noexpand\@dtl at fracpart}%
+    }%
+  }%
+  \noexpand\def\noexpand\@dtl at getfracpart##1#1\noexpand\relax{%
+    \noexpand\def\noexpand\@dtl at fracpart{##1}%
+  }%
+  \noexpand\def\noexpand\DTLconverttodecimal##1##2{%
+    \noexpand\dtl at ifsingle{##1}%
+    {%
+      \noexpand\expandafter\noexpand\toks@\noexpand\expandafter{##1}%
+      \noexpand\edef\noexpand\@dtl at tmp{\noexpand\the\noexpand\toks@}%
+    }%
+    {%
+      \noexpand\def\noexpand\@dtl at tmp{##1}%
+    }%
+    \noexpand\@dtl at standardize@currency\noexpand\@dtl at tmp
+    \noexpand\ifdefempty{\noexpand\@dtl at org@currency}%
+    {%
+    }%
+    {%
+      \noexpand\let\noexpand\@dtl at currency\noexpand\@dtl at org@currency
+    }%
+    \noexpand\expandafter
+      \noexpand\@dtl at getintfrac\noexpand\@dtl at tmp#1\noexpand\relax
+    \noexpand\edef##2{\noexpand\@dtl at intpart.\noexpand\@dtl at fracpart}%
+  }%
+}
+\newcommand*{\@dtl at construct@getnums}{%
+  \expandafter\@dtl at construct@getintfrac\expandafter{\@dtl at decimal}%
+}
+\newcommand*{\@dtl at get@intpart}[1]{%
+  \@dtl at tmpcount=1\relax
+  \def\@dtl at intpart{#1}%
+  \ifx\@dtl at intpart\@empty
+    \def\@dtl at intpart{0}%
+  \else
+    \def\@dtl at intpart{}%
+    \@dtl at get@int at part#1.\relax%
+  \fi
+  \ifnum\@dtl at tmpcount<0\relax
+    \edef\@dtl at intpart{-\@dtl at intpart}%
+  \fi
+  \@dtl at strip@numgrpchar{\@dtl at intpart}%
+}
+\def\@dtl at get@int at part#1#2\relax{%
+  \def\@dtl at argi{#1}%
+  \def\@dtl at argii{#2}%
+  \ifx\protect#1\relax%
+    \let\@dtl at get@nextintpart=\@dtl at get@int at part
+  \else
+    \expandafter\ifx\@dtl at argi\$%
+      \let\@dtl at get@nextintpart=\@dtl at get@int at part
+    \else
+      \ifx-#1%
+        \multiply\@dtl at tmpcount by -1\relax
+        \let\@dtl at get@nextintpart=\@dtl at get@int at part
+      \else
+        \if\@dtl at argi+%
+          \let\@dtl at get@nextintpart=\@dtl at get@int at part
+        \else
+          \def\@dtl at intpart{#1}%
+          \ifx.\@dtl at argii
+            \let\@dtl at get@nextintpart=\@gobble
+          \else
+            \let\@dtl at get@nextintpart=\@dtl at get@next at intpart
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+  \@dtl at get@nextintpart#2\relax
+}
+\def\@dtl at get@next at intpart#1.\relax{%
+  \edef\@dtl at intpart{\@dtl at intpart#1}%
+}
+\newcommand*{\@dtl at choptrailingzeroes}[1]{%
+  \def\@dtl at tmpcpz{}%
+  \expandafter\@dtl at chop@trailingzeroes#1\@nil%
+  \let#1=\@dtl at tmpcpz
+}
+\def\@dtl at chop@trailingzeroes#1#2\@nil{%
+  \dtlifnumeq{#2}{0}%
+  {%
+    \edef\@dtl at tmpcpz{\@dtl at tmpcpz#1}%
+    \let\@dtl at chopzeroesnext=\@dtl at gobbletonil
+  }%
+  {%
+    \edef\@dtl at tmpcpz{\@dtl at tmpcpz#1}%
+    \let\@dtl at chopzeroesnext=\@dtl at chop@trailingzeroes
+  }%
+  \@dtl at chopzeroesnext#2\@nil
+}
+\def\@dtl at gobbletonil#1\@nil{}
+\newcommand*{\dtl at truncatedecimal}[1]{%
+  \expandafter\@dtl at truncatedecimal#1.\@nil#1%
+}
+\def\@dtl at truncatedecimal#1.#2\@nil#3{%
+  \def#3{#1}%
+}
+\newcommand*{\@dtl at strip@numgrpchar}[1]{%
+  \def\@dtl at stripped{}%
+  \edef\@dtl at do@stripnumgrpchar{%
+    \noexpand\@@dtl at strip@numgrpchar#1\@dtl at numbergroupchar
+    \noexpand\relax
+  }%
+  \@dtl at do@stripnumgrpchar
+  \let#1=\@dtl at stripped
+}
+\edef\@dtl at construct@stripnumgrpchar#1{%
+  \noexpand\def\noexpand\@@dtl at strip@numgrpchar##1#1##2\noexpand\relax{%
+    \noexpand\expandafter\noexpand\toks@\noexpand\expandafter
+      {\noexpand\@dtl at stripped}%
+    \noexpand\edef\noexpand\@dtl at stripped{%
+      \noexpand\the\noexpand\toks@
+      ##1%
+    }%
+    \noexpand\def\noexpand\@dtl at tmp{##2}%
+    \noexpand\ifx\noexpand\@dtl at tmp\noexpand\@empty
+      \noexpand\let\noexpand\@dtl at next=\noexpand\relax
+    \noexpand\else
+      \noexpand\let\noexpand\@dtl at next=\noexpand\@@dtl at strip@numgrpchar
+    \noexpand\fi
+    \noexpand\@dtl at next##2\noexpand\relax
+  }%
+}
+\newcommand*{\DTLdecimaltolocale}[2]{%
+  \edef\@dtl at tmpdtl{#1}%
+  \expandafter\@dtl at decimaltolocale\@dtl at tmpdtl.\relax
+  \dtlifnumeq{\@dtl at fracpart}{0}%
+  {%
+    \edef#2{\@dtl at intpart}%
+  }%
+  {%
+    \edef#2{\@dtl at intpart\@dtl at decimal\@dtl at fracpart}%
+  }%
+}
+\def\@dtl at decimaltolocale#1.#2\relax{%
+  \@dtl at decimaltolocaleint{#1}%
+  \def\@dtl at fracpart{#2}%
+  \ifdefempty\@dtl at fracpart
+  {%
+    \def\@dtl at fracpart{0}%
+  }%
+  {%
+    \@dtl at decimaltolocalefrac#2\relax
+  }%
+}
+\def\@dtl at decimaltolocaleint#1{%
+  \@dtl at tmpcount=0\relax
+  \@dtl at countdigits#1.\relax
+  \@dtl at numgrpsepcount=\@dtl at tmpcount\relax
+  \divide\@dtl at numgrpsepcount by 3\relax
+  \multiply\@dtl at numgrpsepcount by 3\relax
+  \advance\@dtl at numgrpsepcount by -\@dtl at tmpcount\relax
+  \ifnum\@dtl at numgrpsepcount<0\relax
+    \advance\@dtl at numgrpsepcount by 3\relax
+  \fi
+  \def\@dtl at intpart{}%
+  \@dtl at decimal@to at localeint#1.\relax
+}
+\def\@dtl at countdigits#1#2\relax{%
+  \advance\@dtl at tmpcount by 1\relax
+  \ifx.#2\relax
+    \let\@dtl at countnext=\@gobble
+  \else
+    \let\@dtl at countnext=\@dtl at countdigits
+  \fi
+  \@dtl at countnext#2\relax
+}
+\def\@dtl at decimal@to at localeint#1#2\relax{%
+  \advance\@dtl at numgrpsepcount by 1\relax
+  \ifx.#2\relax
+    \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \let\@dtl at localeintnext=\@gobble
+  \else
+    \ifnum\@dtl at numgrpsepcount=3\relax
+      \edef\@dtl at intpart{\@dtl at intpart#1\@dtl at numbergroupchar}%
+      \@dtl at numgrpsepcount=0\relax
+    \else
+      \ifnum\@dtl at numgrpsepcount>3\relax
+        \@dtl at numgrpsepcount=0\relax
+      \fi
+      \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \fi
+    \let\@dtl at localeintnext=\@dtl at decimal@to at localeint
+  \fi
+  \@dtl at localeintnext#2\relax
+}
+\def\@dtl at decimaltolocalefrac#1.\relax{%
+  \count@=0\relax
+  \@dtl at digitcount#1\relax
+  \ifnum\count@>9\relax
+    \@dtl at chopexcessfrac#1000000000\@nil
+  \else
+    \def\@dtl at fracpart{#1}%
+  \fi
+}
+\newcommand*{\@dtl at chopexcessfrac}[9]{%
+  \def\@dtl at fracpart{#1#2#3#4#5#6#7#8#9}%
+  \@dtl at gobbletonil
+}
+\newcommand*{\@dtl at digitcount}[1]{%
+  \ifx\relax#1\relax
+    \let\@dtl at digitcountnext\relax
+  \else
+    \advance\count@ by \@ne
+    \let\@dtl at digitcountnext\@dtl at digitcount
+  \fi
+  \@dtl at digitcountnext
+}
+\newcommand*{\DTLdecimaltocurrency}[2]{%
+  \edef\@dtl at tmpdtl{#1}%
+  \expandafter\@dtl at decimaltolocale\@dtl at tmpdtl.\relax
+  \dtl at truncatedecimal\@dtl at tmpdtl
+  \@dtl at tmpcount=\@dtl at tmpdtl\relax
+  \expandafter\@dtl at toks\expandafter{\@dtl at currency}%
+  \dtlifnumeq{\@dtl at fracpart}{0}%
+  {%
+    \ifnum\@dtl at tmpcount<0\relax
+      \@dtl at tmpcount = -\@dtl at tmpcount\relax
+      \edef#2{-\the\@dtl at toks\the\@dtl at tmpcount\@dtl at decimal00}%
+    \else
+      \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal00}%
+    \fi
+  }%
+  {%
+    \ifnum\@dtl at tmpcount<0\relax
+      \@dtl at tmpcount = -\@dtl at tmpcount\relax
+      \ifnum\@dtl at fracpart<10\relax
+        \edef#2{%
+          -\the\@dtl at toks\number\@dtl at tmpcount
+          \@dtl at decimal\@dtl at fracpart0%
+        }%
+      \else
+        \edef#2{%
+          -\the\@dtl at toks\number\@dtl at tmpcount
+          \@dtl at decimal\@dtl at fracpart
+        }%
+      \fi
+    \else
+      \ifnum\@dtl at fracpart<10\relax
+        \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal\@dtl at fracpart0}%
+      \else
+        \edef#2{\the\@dtl at toks\@dtl at intpart\@dtl at decimal\@dtl at fracpart}%
+      \fi
+    \fi
+  }%
+}
+\@dtl at construct@getnums
+\expandafter\@dtl at construct@stripnumgrpchar\expandafter
+  {\@dtl at numbergroupchar}
+\newcommand*{\@dtl at currencies}{\$,\pounds}
+\newcommand*{\DTLnewcurrencysymbol}[1]{%
+  \expandafter\toks@\expandafter{\@dtl at currencies}%
+  \@dtl at toks{#1}%
+  \edef\@dtl at currencies{\the\@dtl at toks,\the\toks@}%
+}
+\AtBeginDocument{%
+  \@ifundefined{texteuro}{}{\DTLnewcurrencysymbol{\texteuro}}%
+  \@ifundefined{textdollar}{}{\DTLnewcurrencysymbol{\textdollar}}%
+  \@ifundefined{textstirling}{}{\DTLnewcurrencysymbol{\textstirling}}%
+  \@ifundefined{textyen}{}{\DTLnewcurrencysymbol{\textyen}}%
+  \@ifundefined{textwon}{}{\DTLnewcurrencysymbol{\textwon}}%
+  \@ifundefined{textcurrency}{}{\DTLnewcurrencysymbol{\textcurrency}}%
+  \@ifundefined{euro}{}{\DTLnewcurrencysymbol{\euro}}%
+  \@ifundefined{yen}{}{\DTLnewcurrencysymbol{\yen}}%
+}
+\newcommand{\@dtl at standardize@currency}[1]{%
+  \def\@dtl at org@currency{}%
+  \@for\@dtl at thiscurrency:=\@dtl at currencies\do{%
+    \expandafter\toks@\expandafter{\@dtl at thiscurrency}%
+    \edef\@dtl at dosubs{\noexpand\DTLsubstitute{\noexpand#1}%
+     {\the\toks@}{\noexpand\$}}%
+    \@dtl at dosubs
+    \ifdefempty{\@dtl at replaced}%
+    {%
+    }%
+    {%
+      \let\@dtl at org@currency=\@dtl at replaced
+      \@endfortrue
+    }%
+  }%
+  \@endforfalse
+}
+\newcommand*{\@dtl at currency}{\$}
+\newcommand*{\DTLsetdefaultcurrency}[1]{%
+  \renewcommand*{\@dtl at currency}{#1}%
+}
+\newcommand*{\DTLadd}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtladd{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgadd}[3]{%
+  \DTLadd{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLaddall}[2]{%
+  \def\@dtl at sum{0}%
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \dtladd{\@dtl at sum}{\@dtl at sum}{\@dtl at num}%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at sum}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at sum}{#1}%
+  }%
+}
+\newcommand*{\DTLgaddall}[2]{%
+  \DTLaddall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLsub}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtlsub{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgsub}[3]{%
+  \DTLsub{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmul}[3]{%
+  \let\@dtl at thisreplaced=\@empty
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \dtlmul{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at thisreplaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgmul}[3]{%
+ \DTLmul{\@dtl at tmpii}{#2}{#3}%
+ \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLdiv}[3]{%
+  \let\@dtl at thisreplaced=\@empty
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \let\@dtl at thisreplaced=\@dtl at replaced
+  }%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtldiv{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \ifdefempty{\@dtl at thisreplaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \ifdefequal{\@dtl at thisreplaced}{\@dtl at replaced}%
+    {%
+      \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+    }%
+    {%
+      \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+    }%
+  }%
+}
+\newcommand*{\DTLgdiv}[3]{%
+  \DTLdiv{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLabs}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlabs{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgabs}[2]{%
+  \DTLabs{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLneg}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlneg{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgneg}[2]{%
+  \DTLneg{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLsqrt}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlroot{\@dtl at tmpi}{\@dtl at numi}{2}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmpi}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmpi}{#1}%
+  }%
+}
+\newcommand*{\DTLgsqrt}[2]{%
+\DTLsqrt{\@dtl at tmpii}{#2}%
+\global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmin}[3]{%
+ \DTLconverttodecimal{#2}{\@dtl at numi}%
+ \DTLconverttodecimal{#3}{\@dtl at numii}%
+ \dtlifnumlt{\@dtl at numi}{\@dtl at numii}%
+ {%
+   \dtl at ifsingle{#2}%
+   {\let#1=#2}%
+   {\def#1{#2}}%
+ }%
+ {%
+  \dtl at ifsingle{#3}%
+  {\let#1=#3}%
+  {\def#1{#3}}%
+ }%
+}
+\newcommand*{\DTLgmin}[3]{%
+  \DTLmin{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLminall}[2]{%
+  \let\@dtl at min=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at min}%
+    {%
+      \let\@dtl at min=\@dtl at num
+    }%
+    {%
+      \dtlmin{\@dtl at min}{\@dtl at min}{\@dtl at num}%
+    }%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at min}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at min}{#1}%
+  }%
+}
+\newcommand*{\DTLgminall}[2]{%
+  \DTLminall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLmax}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \DTLconverttodecimal{#3}{\@dtl at numii}%
+  \dtlmax{\@dtl at tmp}{\@dtl at numi}{\@dtl at numii}%
+  \dtlifnumgt{\@dtl at numi}{\@dtl at numii}%
+  {%
+   \dtl at ifsingle{#2}%
+   {\let#1=#2}%
+   {\def#1{#2}}%
+  }%
+  {%
+   \dtl at ifsingle{#3}%
+   {\let#1=#3}%
+   {\def#1{#3}}%
+  }%
+}
+\newcommand*{\DTLgmax}[3]{%
+  \DTLmax{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLmaxall}[2]{%
+  \let\@dtl at max=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at max}%
+    {%
+      \let\@dtl at max\@dtl at num
+    }%
+    {%
+      \dtlmax{\@dtl at max}{\@dtl at max}{\@dtl at num}%
+    }%
+  }%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at max}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at max}{#1}%
+  }%
+}
+\newcommand*{\DTLgmaxall}[2]{%
+\DTLmaxall{\@dtl at tmpi}{#2}%
+\global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLmeanforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at mean}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at mean}{#1}%
+  }%
+}
+\newcommand*{\DTLgmeanforall}[2]{%
+  \DTLmeanforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLvarianceforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \let\@dtl at decvals=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at decvals}%
+    {%
+     \let\@dtl at decvals=\@dtl at num
+    }%
+    {%
+      \expandafter\toks@\expandafter{\@dtl at decvals}%
+      \edef\@dtl at decvals{\the\toks@,\@dtl at num}%
+    }%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \def\@dtl at var{0}%
+  \@for\@dtl at num:=\@dtl at decvals\do{%
+    \dtlsub{\@dtl at diff}{\@dtl at num}{\@dtl at mean}%
+    \dtlmul{\@dtl at diff}{\@dtl at diff}{\@dtl at diff}%
+    \dtladd{\@dtl at var}{\@dtl at var}{\@dtl at diff}%
+  }%
+  \dtldiv{\@dtl at var}{\@dtl at var}{\@dtl at n}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at var}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at var}{#1}%
+  }%
+}
+\newcommand*{\DTLgvarianceforall}[2]{%
+  \DTLvarianceforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLsdforall}[2]{%
+  \def\@dtl at mean{0}%
+  \def\@dtl at n{0}%
+  \let\@dtl at decvals=\@empty
+  \@for\dtl at thisval:=#2\do{%
+    \expandafter\DTLconverttodecimal\expandafter{\dtl at thisval}{\@dtl at num}%
+    \ifdefempty{\@dtl at decvals}%
+    {%
+     \let\@dtl at decvals=\@dtl at num
+    }%
+    {%
+     \expandafter\toks@\expandafter{\@dtl at decvals}%
+     \edef\@dtl at decvals{\the\toks@,\@dtl at num}%
+    }%
+    \dtladd{\@dtl at mean}{\@dtl at mean}{\@dtl at num}%
+    \dtladd{\@dtl at n}{\@dtl at n}{1}%
+  }%
+  \dtldiv{\@dtl at mean}{\@dtl at mean}{\@dtl at n}%
+  \def\@dtl at sd{0}%
+  \@for\@dtl at num:=\@dtl at decvals\do{%
+    \dtlsub{\@dtl at diff}{\@dtl at num}{\@dtl at mean}%
+    \dtlmul{\@dtl at diff}{\@dtl at diff}{\@dtl at diff}%
+    \dtladd{\@dtl at sd}{\@dtl at sd}{\@dtl at diff}%
+  }%
+  \dtldiv{\@dtl at sd}{\@dtl at sd}{\@dtl at n}%
+  \dtlroot{\@dtl at sd}{\@dtl at sd}{2}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at sd}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at sd}{#1}%
+  }%
+}
+\newcommand*{\DTLgsdforall}[2]{%
+  \DTLsdforall{\@dtl at tmpi}{#2}%
+  \global\let#1=\@dtl at tmpi
+}
+\newcommand*{\DTLround}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlround{\@dtl at tmp}{\@dtl at numi}{#3}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLground}[3]{%
+  \DTLround{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLtrunc}[3]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtltrunc{\@dtl at tmp}{\@dtl at numi}{#3}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgtrunc}[3]{%
+  \DTLtrunc{\@dtl at tmpii}{#2}{#3}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*{\DTLclip}[2]{%
+  \DTLconverttodecimal{#2}{\@dtl at numi}%
+  \dtlclip{\@dtl at tmp}{\@dtl at numi}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \DTLdecimaltolocale{\@dtl at tmp}{#1}%
+  }%
+  {%
+    \DTLdecimaltocurrency{\@dtl at tmp}{#1}%
+  }%
+}
+\newcommand*{\DTLgclip}[3]{%
+  \DTLclip{\@dtl at tmpii}{#2}%
+  \global\let#1=\@dtl at tmpii
+}
+\newcommand*\DTLinitials[1]{%
+  \def\dtl at initialscmd{}%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \expandafter\dtl at initials\dtl at string{} \@nil%
+  \dtl at initialscmd
+}%
+\edef\dtl at construct@subnobrsp{%
+  \noexpand\def\noexpand\@dtl at subnobrsp##1\noexpand\protect
+  \expandafter\noexpand\csname nobreakspace \endcsname ##2{%
+  \noexpand\toks@{##1}%
+  \noexpand\expandafter\noexpand\@dtl at toks\noexpand\expandafter{%
+  \noexpand\@dtl at string}%
+  \noexpand\edef\noexpand\@dtl at string{\noexpand\the\noexpand\@dtl at toks
+  \noexpand\the\noexpand\toks@}%
+  \noexpand\def\noexpand\@dtl at tmp{##2}%
+  \noexpand\ifx\noexpand\@dtl at tmp\noexpand\@nnil
+    \noexpand\let\noexpand\@dtl at subnobrspnext=\noexpand\relax
+  \noexpand\else
+    \noexpand\toks@{ }%
+    \noexpand\expandafter\noexpand\@dtl at toks\noexpand\expandafter{%
+    \noexpand\@dtl at string}%
+    \noexpand\edef\noexpand\@dtl at string{\noexpand\the\noexpand\@dtl at toks
+    \noexpand\the\noexpand\toks@}%
+    \noexpand\let\noexpand\@dtl at subnobrspnext=\noexpand\@dtl at subnobrsp
+  \noexpand\fi
+  \noexpand\@dtl at subnobrspnext
+  }%
+  \noexpand\def\noexpand\dtl at subnobrsp##1##2{%
+  \noexpand\def\noexpand\@dtl at string{}%
+  \noexpand\@dtl at subnobrsp ##1\noexpand\protect\expandafter\noexpand
+  \csname nobreakspace \endcsname \noexpand\@nil
+  \noexpand\let##2=\noexpand\@dtl at string
+  }%
+}
+\dtl at construct@subnobrsp
+\newcommand*{\DTLstoreinitials}[2]{%
+  \def\dtl at initialscmd{}%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \expandafter\dtl at initials\dtl at string{} \@nil
+  \let#2=\dtl at initialscmd
+}
+\def\dtl at initials#1#2 #3{%
+  \dtl at ifsingle{#1}%
+  {%
+    \ifcat\noexpand#1\relax\relax
+       \def\@dtl at donextinitials{\@dtl at initials#2 {#3}}%
+    \else
+       \def\@dtl at donextinitials{\@dtl at initials#1#2 {#3}}%
+    \fi
+  }%
+  {%
+    \def\@dtl at donextinitials{\@dtl at initials{#1}#2 {#3}}%
+  }%
+  \@dtl at donextinitials
+}
+\def\@dtl at initials#1#2 #3{%
+  \dtl at initialshyphen#2-{}\dtl at endhyp
+  \expandafter\@dtl at toks\expandafter{\dtl at initialscmd}%
+  \toks@{#1}%
+  \ifdefempty{\dtl at inithyphen}%
+  {%
+  }%
+  {%
+    \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@}%
+    \expandafter\@dtl at toks\expandafter{\dtl at initialscmd}%
+    \expandafter\toks@\expandafter{\dtl at inithyphen}%
+  }%
+  \def\dtl at tmp{#3}%
+  \ifx\@nnil\dtl at tmp
+   \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@\DTLafterinitials}%
+   \let\dtl at initialsnext=\@gobble
+  \else
+   \edef\dtl at initialscmd{\the\@dtl at toks\the\toks@\DTLbetweeninitials}%
+   \let\dtl at initialsnext=\dtl at initials
+  \fi
+  \dtl at initialsnext{#3}%
+}
+\def\dtl at initialshyphen#1-#2#3\dtl at endhyp{%
+  \def\dtl at inithyphen{#2}%
+  \ifdefempty{\dtl at inithyphen}%
+  {%
+  }%
+  {%
+   \edef\dtl at inithyphen{%
+     \DTLafterinitialbeforehyphen\DTLinitialhyphen#2}%
+  }%
+}
+\newcommand*{\DTLafterinitials}{.}
+\newcommand*{\DTLbetweeninitials}{.}
+\newcommand*{\DTLafterinitialbeforehyphen}{.}
+\newcommand*{\DTLinitialhyphen}{-}
+\newcommand*{\DTLifAllUpperCase}[3]{%
+  \protected at edef\dtl at tuc{#1}%
+  \expandafter\dtl at testifuppercase\dtl at tuc\@nil\relax
+  \if at dtl@condition#2\else#3\fi
+}
+\def\dtl at testifuppercase#1#2{%
+  \def\dtl at argi{#1}%
+  \def\dtl at argii{#2}%
+  \def\dtl at tc@rest{}%
+  \ifx\dtl at argi\@nnil
+    \let\dtl at testifuppernext=\@nnil
+  \else
+    \ifx#1\protect
+      \let\dtl at testifuppernext=\dtl at testifuppercase
+    \else
+      \ifx\uppercase#1\relax
+        \@dtl at conditiontrue
+        \def\dtl at tc@rest{}%
+        \let\dtl at testifuppernext=\relax
+      \else
+        \edef\dtl at tc@arg{\string#1}%
+        \expandafter\dtl at test@ifuppercase\dtl at tc@arg\end
+        \ifx\dtl at argii\@nnil
+          \let\dtl at testifuppernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifx\dtl at testifuppernext\relax
+   \edef\dtl at dotestifuppernext{%
+     \noexpand\dtl at testifuppercase}%
+  \else
+   \ifx\dtl at testifuppernext\@nnil
+     \edef\dtl at dotestifuppernext{#2}%
+   \else
+     \expandafter\toks@\expandafter{\dtl at tc@rest}%
+     \@dtl at toks{#2}%
+     \edef\dtl at dotestifuppernext{%
+       \noexpand\dtl at testifuppernext\the\toks@\the\@dtl at toks}%
+   \fi
+  \fi
+  \dtl at dotestifuppernext
+}
+\def\dtl at test@ifuppercase#1#2\end{%
+  \def\dtl at tc@rest{#2}%
+  \IfSubStringInString{\string\MakeUppercase}{#1#2}%
+  {%
+     \@dtl at conditiontrue
+     \def\dtl at tc@rest{}%
+     \let\dtl at testifuppernext=\relax
+  }%
+  {%
+    \IfSubStringInString{\string\MakeTextUppercase}{#1#2}%
+    {%
+       \@dtl at conditiontrue
+       \def\dtl at tc@rest{}%
+       \let\dtl at testifuppernext=\relax
+    }%
+    {%
+      \edef\dtl at uccode{\the\uccode`#1}%
+      \edef\dtl at code{\number`#1}%
+      \ifnum\dtl at code=\dtl at uccode\relax
+        \@dtl at conditiontrue
+        \let\dtl at testifuppernext=\dtl at testifuppercase
+      \else
+        \ifnum\dtl at uccode=0\relax
+          \@dtl at conditiontrue
+          \let\dtl at testifuppernext=\dtl at testifuppercase
+        \else
+          \@dtl at conditionfalse
+          \let\dtl at testifuppernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\DTLifAllLowerCase}[3]{%
+  \protected at edef\dtl at tlc{#1}%
+  \expandafter\dtl at testiflowercase\dtl at tlc\@nil\relax
+  \if at dtl@condition#2\else#3\fi
+}
+\def\dtl at testiflowercase#1#2{%
+  \def\dtl at argi{#1}%
+  \def\dtl at argii{#2}%
+  \ifx\dtl at argi\@nnil
+    \let\dtl at testiflowernext=\@nnil
+  \else
+    \ifx#1\protect
+      \let\dtl at testiflowernext=\dtl at testiflowercase
+    \else
+      \ifx\lowercase#1\relax
+        \@dtl at conditiontrue
+        \def\dtl at tc@rest{}%
+        \let\dtl at testiflowernext=\relax
+      \else
+        \edef\dtl at tc@arg{\string#1}%
+        \expandafter\dtl at test@iflowercase\dtl at tc@arg\end
+        \ifx\dtl at argii\@nnil
+          \let\dtl at testiflowernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifx\dtl at testiflowernext\relax
+   \edef\dtl at dotestiflowernext{%
+     \noexpand\dtl at testiflowercase}%
+  \else
+   \ifx\dtl at testiflowernext\@nnil
+     \edef\dtl at dotestiflowernext{#2}%
+   \else
+     \expandafter\toks@\expandafter{\dtl at tc@rest}%
+     \@dtl at toks{#2}%
+     \edef\dtl at dotestiflowernext{%
+       \noexpand\dtl at testiflowernext\the\toks@\the\@dtl at toks}%
+   \fi
+  \fi
+  \dtl at dotestiflowernext
+}
+\def\dtl at test@iflowercase#1#2\end{%
+  \def\dtl at tc@rest{#2}%
+  \IfSubStringInString{\string\MakeLowercase}{#1#2}%
+  {%
+    \@dtl at conditiontrue
+    \def\dtl at tc@rest{}%
+    \let\dtl at testiflowernext=\relax
+  }%
+  {%
+    \IfSubStringInString{\string\MakeTextLowercase}{#1#2}%
+    {%
+      \@dtl at conditiontrue
+      \def\dtl at tc@rest{}%
+      \let\dtl at testiflowernext=\relax
+    }%
+    {%
+      \edef\dtl at lccode{\the\lccode`#1}%
+      \edef\dtl at code{\number`#1}%
+      \ifnum\dtl at code=\dtl at lccode\relax
+        \@dtl at conditiontrue
+        \let\dtl at testiflowernext=\dtl at testiflowercase
+      \else
+        \ifnum\dtl at lccode=0\relax
+          \@dtl at conditiontrue
+          \let\dtl at testiflowernext=\dtl at testiflowercase
+        \else
+          \@dtl at conditionfalse
+          \let\dtl at testiflowernext=\@dtl at gobbletonil
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand{\DTLsubstitute}[3]{%
+  \expandafter\DTLsplitstring\expandafter
+    {#1}{#2}{\@dtl at beforepart}{\@dtl at afterpart}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+  }%
+  {%
+    \def#1{}%
+    \expandafter\@dtl at toks\expandafter{\@dtl at beforepart}%
+    \expandafter\toks@\expandafter{#1}%
+    \protected at edef#1{\the\toks@\the\@dtl at toks#3}%
+    \expandafter\@dtl at toks\expandafter{\@dtl at afterpart}%
+    \expandafter\toks@\expandafter{#1}%
+    \edef#1{\the\toks@\the\@dtl at toks}%
+  }%
+}
+\newcommand*{\DTLsplitstring}[4]{%
+  \def\dtl at splitstr##1#2##2\@nil{%
+    \def#3{##1}%
+    \def#4{##2}%
+    \ifdefempty{#4}%
+    {%
+      \let\@dtl at replaced=\@empty
+    }%
+    {%
+      \def\@dtl at replaced{#2}%
+      \dtl at split@str##2\@nil
+    }%
+  }%
+  \def\dtl at split@str##1#2\@nil{\def#4{##1}}%
+  \dtl at splitstr#1#2\@nil
+}
+\newcommand{\DTLsubstituteall}[3]{%
+  \def\@dtl at splitsubstr{}%
+  \let\@dtl at afterpart=#1\relax
+  \@dtl at dosubstitute{#2}{#3}%
+  \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at afterpart}%
+  \long\edef#1{\the\toks@\the\@dtl at toks}%
+}
+\def\@dtl at dosubstitute#1#2{%
+  \expandafter\DTLsplitstring\expandafter
+   {\@dtl at afterpart}{#1}{\@dtl at beforepart}{\@dtl at afterpart}%
+  \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+  \expandafter\@dtl at toks\expandafter{\@dtl at beforepart}%
+  \edef\@dtl at splitsubstr{\the\toks@\the\@dtl at toks}%
+  \ifdefempty{\@dtl at replaced}%
+  {%
+    \let\@dtl at dosubstnext=\@dtl at dosubstitutenoop
+  }%
+  {%
+    \expandafter\toks@\expandafter{\@dtl at splitsubstr}%
+    \@dtl at toks{#2}%
+    \edef\@dtl at splitsubstr{\the\toks@\the\@dtl at toks}%
+    \let\@dtl at dosubstnext=\@dtl at dosubstitute
+  }%
+  \@dtl at dosubstnext{#1}{#2}%
+}
+\def\@dtl at dosubstitutenoop#1#2{}
+\newif\if at dtl@condition
+\newcount\@dtl at datatype
+\newcommand{\@dtl at checknumerical}[1]{%
+  \@dtl at numgrpsepfalse
+  \dtl at ifsingle{#1}%
+  {%
+    \expandafter\toks@\expandafter{#1}%
+    \edef\@dtl at tmp{\the\toks@}%
+  }%
+  {%
+    \def\@dtl at tmp{#1}%
+  }%
+  \ifdefempty\@dtl at tmp
+  {%
+    \@dtl at datatype=0\relax
+  }%
+  {%
+    \@dtl at tmpcount=0\relax
+    \@dtl at datatype=0\relax
+    \@dtl at numgrpsepcount=2\relax
+    \@dtl at standardize@currency\@dtl at tmp
+    \ifdefempty{\@dtl at org@currency}%
+    {%
+    }%
+    {%
+      \let\@dtl at currency\@dtl at org@currency
+    }%
+    \expandafter\@dtl at checknumericalstart\@dtl at tmp\@nil\@nil
+  }%
+  \ifnum\@dtl at numgrpsepcount>-1\relax
+    \if at dtl@numgrpsep
+      \ifnum\@dtl at numgrpsepcount=3\relax
+      \else
+        \@dtl at datatype=0\relax
+      \fi
+    \fi
+  \fi
+}
+\newcommand*{\@dtl at protect}{\protect}
+\newcommand*{\@dtl at minus}{-}
+\newcommand*{\@dtl at plus}{+}
+\newcommand*{\@dtl at dollar}{\$}
+\def\@dtl at checknumericalstart#1#2\@nil\@nil{%
+  \def\@dtl at tmp{#1}%
+  \ifx\@dtl at tmp\@dtl at protect
+    \@dtl at checknumericalstart#2\@nil\@nil\relax
+  \else
+    \ifx\@dtl at tmp\@dtl at minus
+      \def\@dtl at tmp{#2}%
+      \ifdefempty{\@dtl at tmp}%
+      {%
+        \@dtl at datatype=0\relax
+      }%
+      {%
+        \ifnum\@dtl at datatype=0\relax
+          \@dtl at datatype=1\relax
+        \fi
+        \@dtl at checknumericalstart#2\@nil\@nil\relax
+      }%
+    \else
+      \ifx\@dtl at tmp\@dtl at plus
+        \def\@dtl at tmp{#2}%
+        \ifdefempty{\@dtl at tmp}%
+        {%
+          \@dtl at datatype=0\relax
+        }%
+        {%
+          \ifnum\@dtl at datatype=0\relax
+            \@dtl at datatype=1\relax
+          \fi
+          \@dtl at checknumericalstart#2\@nil\@nil\relax
+        }%
+      \else
+        \def\@dtl at tmp{#1}%
+        \ifx\@dtl at tmp\@dtl at dollar
+          \def\@dtl at tmp{#2}%
+          \ifdefempty{\@dtl at tmp}%
+          {%
+            \@dtl at datatype=0\relax
+          }%
+          {%
+            \@dtl at datatype=3\relax
+            \@dtl at checknumericalstart#2\@nil\@nil\relax
+          }%
+        \else
+          \ifdefempty{\@dtl at tmp}%
+          {%
+            \@dtl at datatype=0\relax
+          }%
+          {%
+            \ifnum\@dtl at datatype=0\relax
+              \@dtl at datatype=1\relax
+            \fi
+            \@dtl at checknumericalloop#1#2\@nil\@nil\relax
+          }%
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newif\if at dtl@numgrpsep
+\newcommand*{\@dtl at ifDigitOrDecimalSep}[3]{%
+  \ifnum 9<1\noexpand#1\relax
+    #2%
+  \else
+    \expandafter\ifx\@dtl at decimal#1\relax
+      #2%
+    \else
+      #3%
+    \fi
+  \fi
+}
+\def\@dtl at checknumericalloop#1#2\@nil{%
+\def\@dtl at tmp{#1}%
+\ifx\@nnil\@dtl at tmp\relax
+ \let\@dtl at chcknumnext=\@dtl at checknumericalnoop%
+\else
+  \@dtl at ifDigitOrDecimalSep{#1}{%
+  \let\@dtl at chcknumnext=\@dtl at checknumericalloop%
+  \expandafter\ifx\@dtl at decimal#1\relax
+     \if at dtl@numgrpsep
+       \ifnum\@dtl at numgrpsepcount=3\relax
+        \@dtl at numgrpsepcount=-1\relax
+       \else
+        \@dtl at datatype=0\relax
+        \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+       \fi
+     \else
+       \@dtl at numgrpsepcount=-1\relax
+     \fi
+   \else
+     \ifnum\@dtl at numgrpsepcount=-1\relax
+     \else
+       \advance\@dtl at numgrpsepcount by 1\relax
+     \fi
+   \fi
+}{%
+\ifx\@dtl at numbergroupchar\@dtl at tmp\relax
+  \@dtl at numgrpseptrue
+  \ifnum\@dtl at numgrpsepcount<3\relax
+    \@dtl at datatype=0\relax
+    \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+  \else
+     \@dtl at numgrpsepcount=0\relax
+  \fi
+\else
+  \@dtl at datatype=0\relax
+  \let\@dtl at chcknumnext=\@dtl at checknumericalnoop
+\fi
+}%
+  \ifx\@dtl at decimal\@dtl at tmp\relax
+   \ifnum\@dtl at datatype<3\relax
+     \@dtl at datatype=2\relax
+   \fi
+   \advance\@dtl at tmpcount by 1\relax
+   \ifnum\@dtl at tmpcount>1\relax
+     \@dtl at datatype=0\relax
+     \let\@dtl at chcknumnext=\@dtl at checknumericalnoop%
+   \fi
+  \fi
+\fi
+\@dtl at chcknumnext#2\@nil
+}
+\def\@dtl at checknumericalnoop#1\@nil#2{}
+\newcommand{\DTLifnumerical}[3]{%
+\@dtl at checknumerical{#1}%
+\ifnum\@dtl at datatype=0\relax#3\else#2\fi
+}
+\newcommand{\DTLifreal}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=2\relax #2\else #3\fi
+}
+\newcommand{\DTLifint}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=1\relax #2\else #3\fi
+}
+\newcommand{\DTLifstring}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=0\relax #2\else #3\fi
+}
+\newcommand{\DTLifcurrency}[3]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=3\relax #2\else #3\fi
+}
+\newcommand*{\DTLifcurrencyunit}[4]{%
+  \@dtl at checknumerical{#1}%
+  \ifnum\@dtl at datatype=3\relax
+    \ifthenelse{\equal{\@dtl at org@currency}{#2}}{#3}{#4}%
+  \else
+    #4%
+  \fi
+}
+\newcommand{\DTLifcasedatatype}[5]{%
+  \@dtl at checknumerical{#1}%
+  \ifcase\@dtl at datatype
+   #2% string
+  \or
+   #3% integer
+  \or
+   #4% number
+  \or
+   #5% currency
+  \fi
+}
+\newcommand*{\dtl at testbothnumerical}[2]{%
+  \dtl at ifsingle{#1}{%
+   \edef\@dtl at tmp{#1}}{%
+   \def\@dtl at tmp{#1}}%
+  \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+  \edef\@dtl at firsttype{\number\@dtl at datatype}%
+  \dtl at ifsingle{#2}{%
+   \edef\@dtl at tmp{#2}}{%
+   \def\@dtl at tmp{#2}}%
+  \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+  \multiply\@dtl at datatype by \@dtl at firsttype\relax
+  \ifnum\@dtl at datatype>0\relax
+   \@dtl at conditiontrue
+  \else
+   \@dtl at conditionfalse
+  \fi
+}
+\newcommand*{\DTLifnumlt}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumlt{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newif\ifdtlcompareskipcs
+\dtlcompareskipcsfalse
+\newcommand*{\dtlcompare}[3]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+      \let\@dtl at argA\dtl at string
+      \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+      \let\@dtl at argB\dtl at string
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \let\dtl at donextcompare\@firstofone
+          \ifdtlcompareskipcs
+            \ifnum\dtl at codeA=0\relax
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\@dtl at argB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \else
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\@dtl at argA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \fi
+          \fi
+          \dtl at donextcompare
+          {%
+            \ifnum\dtl at codeA=-1\relax
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at restA}%
+                     {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \fi
+            \else
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlcompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+                     {\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                \ifnum\dtl at codeA<\dtl at codeB
+                  #1=-1\relax
+                \else
+                  \ifnum\dtl at codeA>\dtl at codeB
+                    #1=1\relax
+                  \else
+                     \ifdefempty{\dtl at restA}%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=0\relax
+                       }%
+                       {%
+                         #1=-1\relax
+                       }%
+                     }%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=1\relax
+                       }%
+                       {%
+                         \protected at edef\dtl at donext{%
+                           \noexpand\dtlcompare
+                             {\noexpand#1}{\dtl at restA}{\dtl at restB}}%
+                         \dtl at donext
+                       }%
+                     }%
+                  \fi
+                \fi
+              \fi
+            \fi
+          }%
+        }%
+        {%
+          \edef\dtl at donext{%
+            \noexpand\dtlcompare
+              {\noexpand#1}%
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \edef\dtl at donext{%
+          \noexpand\dtlcompare
+            {\noexpand#1}%
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+        \dtl at donext
+      }%
+    }%
+  }%
+}
+\def\dtl at if@two at octets#1#2\dtl at end@if at two@octets#3#4{%
+  \ifbool{@dtl at utf8}
+  {%
+    \ifx\UTFviii at two@octets#1\relax
+     #3%
+    \else
+     #4%
+    \fi
+  }%
+  {%
+    #4%
+  }%
+}
+\def\dtl at getfirst@UTFviii#1#2#3\end at dtl@getfirst at UTFviii{%
+  \def\dtl at first{#1#2}%
+  \ifx\@nil#3\relax
+    \def\dtl at rest{}%
+  \else
+    \expandafter\def\expandafter\dtl at rest\expandafter{\@dtl at firsttonil#3}%
+  \fi
+}
+\def\@dtl at firsttonil#1\@nil{#1}
+\def\dtl at getfirst#1#2\end at dtl@getfirst{%
+  \def\dtl at first{#1}%
+  \ifdefempty{\dtl at first}%
+  {%
+    \def\dtl at rest{#2}%
+  }%
+  {%
+    \ifbool{@dtl at utf8}
+    {%
+      \expandafter\dtl at if@two at octets#1#2\relax\dtl at end@if at two@octets
+      {%
+        \dtl at getfirst@UTFviii#1#2\@nil\end at dtl@getfirst at UTFviii
+      }%
+      {%
+        \dtl at ifsingle{#1}{\def\dtl at rest{#2}}{\dtl at getfirst#1#2\end at dtl@getfirst}%
+      }%
+    }%
+    {%
+      \dtl at ifsingle{#1}{\def\dtl at rest{#2}}{\dtl at getfirst#1#2\end at dtl@getfirst}%
+    }%
+  }%
+}%
+\newcount\dtl at codeA
+\newcount\dtl at codeB
+\newcommand*{\dtl at setcharcode}[2]{%
+  \ifstrempty{#1}%
+  {%
+    #2=-1\relax
+  }%
+  {%
+    \ifx\@dtl at wordbreak#1\relax
+     #2=`\ \relax
+   \else
+     \ifcat\noexpand#1\relax
+       #2=0\relax
+     \else
+       \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+       {%
+        \dtlsetUTFviiicharcode{#1}{#2}%
+       }%
+       {%
+         \dtlsetcharcode{#1}{#2}%
+       }%
+     \fi
+   \fi
+  }%
+}
+\newcommand*{\dtlsetcharcode}[2]{#2=`#1\relax}
+\newcommand*{\dtlsetlccharcode}[2]{#2=\lccode`#1\relax}
+\newcommand*\dtlsetUTFviiicharcode[2]{\dtlsetdefaultUTFviiicharcode{#1}{#2}}
+\newcommand*\dtlsetUTFviiilccharcode[2]{\dtlsetdefaultUTFviiilccharcode{#1}{#2}}
+\newcommand*\dtlsetdefaultUTFviiicharcode[2]{%
+ \ifboolexpr
+ {
+      test {\ifstrequal{#1}{À}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Ã}}
+   or test {\ifstrequal{#1}{Ä}}
+ }%
+ {%
+   #2=`A\relax
+ }%
+ {%
+   \ifstrequal{#1}{Ç}%
+   {%
+     #2=`C\relax
+   }%
+   {%
+     \ifboolexpr
+     {
+          test {\ifstrequal{#1}{È}}
+       or test {\ifstrequal{#1}{É}}
+       or test {\ifstrequal{#1}{Ê}}
+       or test {\ifstrequal{#1}{Ë}}
+     }%
+     {%
+       #2=`E\relax
+     }%
+     {%
+       \ifboolexpr
+       {
+            test {\ifstrequal{#1}{Ì}}
+         or test {\ifstrequal{#1}{Í}}
+         or test {\ifstrequal{#1}{Î}}
+         or test {\ifstrequal{#1}{Ï}}
+       }%
+       {%
+         #2=`I\relax
+       }%
+       {%
+         \ifstrequal{#1}{Ñ}%
+         {%
+           #2=`N\relax
+         }%
+         {%
+           \ifboolexpr
+           {
+                test {\ifstrequal{#1}{Ò}}
+             or test {\ifstrequal{#1}{Ó}}
+             or test {\ifstrequal{#1}{Ô}}
+             or test {\ifstrequal{#1}{Õ}}
+             or test {\ifstrequal{#1}{Ö}}
+           }%
+           {%
+             #2=`O\relax
+           }%
+           {%
+             \ifboolexpr
+             {
+                  test {\ifstrequal{#1}{Ù}}
+               or test {\ifstrequal{#1}{Ú}}
+               or test {\ifstrequal{#1}{Û}}
+               or test {\ifstrequal{#1}{Ü}}
+             }%
+             {%
+               #2=`U\relax
+             }%
+             {%
+               \ifstrequal{#1}{Ý}%
+               {%
+                 #2=`Y\relax
+               }%
+               {%
+                 \ifboolexpr
+                 {
+                      test {\ifstrequal{#1}{à}}
+                   or test {\ifstrequal{#1}{á}}
+                   or test {\ifstrequal{#1}{á}}
+                   or test {\ifstrequal{#1}{ã}}
+                   or test {\ifstrequal{#1}{ä}}
+                 }%
+                 {%
+                   #2=`a\relax
+                 }%
+                 {%
+                   \ifstrequal{#1}{ç}%
+                   {%
+                     #2=`c\relax
+                   }%
+                   {%
+                     \ifboolexpr
+                     {
+                          test {\ifstrequal{#1}{è}}
+                       or test {\ifstrequal{#1}{é}}
+                       or test {\ifstrequal{#1}{ê}}
+                       or test {\ifstrequal{#1}{ë}}
+                     }%
+                     {%
+                       #2=`e\relax
+                     }%
+                     {%
+                       \ifboolexpr
+                       {
+                            test {\ifstrequal{#1}{ì}}
+                         or test {\ifstrequal{#1}{í}}
+                         or test {\ifstrequal{#1}{î}}
+                         or test {\ifstrequal{#1}{ï}}
+                       }%
+                       {%
+                         #2=`i\relax
+                       }%
+                       {%
+                         \ifstrequal{#1}{ñ}%
+                         {%
+                           #2=`n\relax
+                         }%
+                         {%
+                           \ifboolexpr
+                           {
+                                test {\ifstrequal{#1}{ò}}
+                             or test {\ifstrequal{#1}{ó}}
+                             or test {\ifstrequal{#1}{ô}}
+                             or test {\ifstrequal{#1}{õ}}
+                             or test {\ifstrequal{#1}{ö}}
+                           }%
+                           {%
+                             #2=`o\relax
+                           }%
+                           {%
+                             \ifboolexpr
+                             {
+                                  test {\ifstrequal{#1}{ù}}
+                               or test {\ifstrequal{#1}{ú}}
+                               or test {\ifstrequal{#1}{û}}
+                               or test {\ifstrequal{#1}{ü}}
+                             }%
+                             {%
+                               #2=`u\relax
+                             }%
+                             {%
+                               \ifstrequal{#1}{ý}%
+                               {%
+                                 #2=`y\relax
+                               }%
+                               {%
+                                 #2=64\relax
+                               }%
+                             }%
+                           }%
+                         }%
+                       }%
+                     }%
+                   }%
+                 }%
+               }%
+             }%
+           }%
+         }%
+       }%
+     }%
+   }%
+ }%
+}
+\newcommand*\dtlsetdefaultUTFviiilccharcode[2]{%
+ \ifboolexpr
+ {
+      test {\ifstrequal{#1}{à}}
+   or test {\ifstrequal{#1}{á}}
+   or test {\ifstrequal{#1}{á}}
+   or test {\ifstrequal{#1}{ã}}
+   or test {\ifstrequal{#1}{ä}}
+   or test {\ifstrequal{#1}{À}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Á}}
+   or test {\ifstrequal{#1}{Ã}}
+   or test {\ifstrequal{#1}{Ä}}
+ }%
+ {%
+   #2=`a\relax
+ }%
+ {%
+   \ifboolexpr
+   {
+        test {\ifstrequal{#1}{ç}}
+     or test {\ifstrequal{#1}{Ç}}
+   }
+   {%
+     #2=`c\relax
+   }%
+   {%
+     \ifboolexpr
+     {
+          test {\ifstrequal{#1}{è}}
+       or test {\ifstrequal{#1}{é}}
+       or test {\ifstrequal{#1}{ê}}
+       or test {\ifstrequal{#1}{ë}}
+       or test {\ifstrequal{#1}{È}}
+       or test {\ifstrequal{#1}{É}}
+       or test {\ifstrequal{#1}{Ê}}
+       or test {\ifstrequal{#1}{Ë}}
+     }%
+     {%
+       #2=`e\relax
+     }%
+     {%
+       \ifboolexpr
+       {
+            test {\ifstrequal{#1}{ì}}
+         or test {\ifstrequal{#1}{í}}
+         or test {\ifstrequal{#1}{î}}
+         or test {\ifstrequal{#1}{ï}}
+         or test {\ifstrequal{#1}{Ì}}
+         or test {\ifstrequal{#1}{Í}}
+         or test {\ifstrequal{#1}{Î}}
+         or test {\ifstrequal{#1}{Ï}}
+       }%
+       {%
+         #2=`i\relax
+       }%
+       {%
+         \ifboolexpr
+         {
+              test {\ifstrequal{#1}{ñ}}
+           or test {\ifstrequal{#1}{Ñ}}
+         }
+         {%
+           #2=`n\relax
+         }%
+         {%
+           \ifboolexpr
+           {
+                test {\ifstrequal{#1}{ò}}
+             or test {\ifstrequal{#1}{ó}}
+             or test {\ifstrequal{#1}{ô}}
+             or test {\ifstrequal{#1}{õ}}
+             or test {\ifstrequal{#1}{ö}}
+             or test {\ifstrequal{#1}{Ò}}
+             or test {\ifstrequal{#1}{Ó}}
+             or test {\ifstrequal{#1}{Ô}}
+             or test {\ifstrequal{#1}{Õ}}
+             or test {\ifstrequal{#1}{Ö}}
+           }%
+           {%
+             #2=`o\relax
+           }%
+           {%
+             \ifboolexpr
+             {
+                  test {\ifstrequal{#1}{ù}}
+               or test {\ifstrequal{#1}{ú}}
+               or test {\ifstrequal{#1}{û}}
+               or test {\ifstrequal{#1}{ü}}
+               or test {\ifstrequal{#1}{Ù}}
+               or test {\ifstrequal{#1}{Ú}}
+               or test {\ifstrequal{#1}{Û}}
+               or test {\ifstrequal{#1}{Ü}}
+             }%
+             {%
+               #2=`u\relax
+             }%
+             {%
+               \ifboolexpr
+               {
+                    test {\ifstrequal{#1}{ý}}
+                 or test {\ifstrequal{#1}{Ý}}
+               }%
+               {%
+                 #2=`y\relax
+               }%
+               {%
+                 #2=96\relax
+               }%
+             }%
+           }%
+         }%
+       }%
+     }%
+   }%
+ }%
+}
+\newcommand*{\dtl at setlccharcode}[2]{%
+  \ifstrempty{#1}%
+  {%
+   #2=-1\relax
+  }%
+  {%
+   \ifx#1\@dtl at wordbreak\relax
+     #2=`\ \relax
+   \else
+     \ifcat\noexpand#1\relax%
+       #2=0\relax
+     \else
+       \expandafter\dtl at if@two at octets#1\relax\relax\dtl at end@if at two@octets
+       {%
+        \dtlsetUTFviiilccharcode{#1}{#2}%
+       }%
+       {%
+         \dtlsetlccharcode{#1}{#2}%
+       }%
+       \ifnum#2=0\relax
+         #2=`#1\relax
+       \fi
+     \fi
+   \fi
+  }%
+}
+\newcommand*{\dtlicompare}[3]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+      \let\@dtl at argA\dtl at string
+      \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+      \let\@dtl at argB\dtl at string
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingleorUTFviii\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setlccharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setlccharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \let\dtl at donextcompare\@firstofone
+          \ifdtlcompareskipcs
+            \ifnum\dtl at codeA=0\relax
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\dtl at restA}{\expandonce\@dtl at argB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \else
+              \ifnum\dtl at codeB=0\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                   {\noexpand#1}{\expandonce\@dtl at argA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+                 \let\dtl at donextcompare\@gobble
+              \fi
+            \fi
+          \fi
+          \dtl at donextcompare
+          {%
+            \ifnum\dtl at codeA=-1\relax
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare{\noexpand#1}%
+                   {\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                     {\noexpand#1}%
+                     {\expandonce\dtl at restA}%
+                     {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \fi
+            \else
+              \ifnum\dtl at codeB=-1\relax
+                 \edef\dtl at donext{%
+                   \noexpand\dtlicompare
+                    {\noexpand#1}%
+                    {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+                    {\expandonce\dtl at restB}}%
+                 \dtl at donext
+              \else
+                \ifnum\dtl at codeA<\dtl at codeB
+                  #1=-1\relax
+                \else
+                  \ifnum\dtl at codeA>\dtl at codeB
+                    #1=1\relax
+                  \else
+                     \ifdefempty{\dtl at restA}%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=0\relax
+                       }%
+                       {%
+                         #1=-1\relax
+                       }%
+                     }%
+                     {%
+                       \ifdefempty{\dtl at restB}%
+                       {%
+                         #1=1\relax
+                       }%
+                       {%
+                         \edef\dtl at donext{%
+                           \noexpand\dtlicompare
+                             {\noexpand#1}%
+                             {\expandonce\dtl at restA}%
+                             {\expandonce\dtl at restB}}%
+                         \dtl at donext
+                       }%
+                     }%
+                  \fi
+                \fi
+              \fi
+            \fi
+          }%
+        }%
+        {%
+          \edef\dtl at donext{%
+            \noexpand\dtlicompare
+              {\noexpand#1}%
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \edef\dtl at donext{%
+          \noexpand\dtlicompare
+            {\noexpand#1}%
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+        \dtl at donext
+      }%
+    }%
+  }%
+}
+\newcommand*{\dtlwordindexcompare}[3]{%
+  \@dtldictcompare{#1}{#2}{#3}{\@dtl at wordbreak}%
+}
+\newcommand*{\dtlletterindexcompare}[3]{%
+  \@dtldictcompare{#1}{#2}{#3}{}%
+}
+\newcommand*{\@dtldictcompare}[4]{%
+  \dtl at subnobrsp{#2}{\@dtl at argA}%
+  \dtl at subnobrsp{#3}{\@dtl at argB}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \expandafter\DTLsplitstring\expandafter
+        {\@dtl at argA}{\datatoolpersoncomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+      \ifdefempty{\@dtl at replaced}%
+      {%
+        \expandafter\DTLsplitstring\expandafter
+          {\@dtl at argA}{\datatoolplacecomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+        \ifdefempty{\@dtl at replaced}%
+        {%
+          \expandafter\DTLsplitstring\expandafter
+            {\@dtl at argA}{\datatoolsubjectcomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+          \ifdefempty{\@dtl at replaced}%
+          {%
+            \expandafter\DTLsplitstring\expandafter
+              {\@dtl at argA}{\datatoolparenstart}{\@dtl at beforepart}{\@dtl at afterpart}%
+            \ifdefempty{\@dtl at replaced}%
+            {%
+              \def\@dtl at A@comma{0}%
+              \let\@dtl at A@before\@dtl at argA
+              \def\@dtl at A@after{}%
+            }%
+            {%
+              \let\@dtl at A@comma\@dtl at replaced
+              \let\@dtl at A@before\@dtl at beforepart
+              \let\@dtl at A@after\@dtl at afterpart
+            }%
+          }%
+          {%
+            \let\@dtl at A@comma\@dtl at replaced
+            \let\@dtl at A@before\@dtl at beforepart
+            \let\@dtl at A@after\@dtl at afterpart
+          }%
+        }%
+        {%
+          \let\@dtl at A@comma\@dtl at replaced
+          \let\@dtl at A@before\@dtl at beforepart
+          \let\@dtl at A@after\@dtl at afterpart
+        }%
+      }%
+      {%
+        \let\@dtl at A@comma\@dtl at replaced
+        \let\@dtl at A@before\@dtl at beforepart
+        \let\@dtl at A@after\@dtl at afterpart
+      }%
+      \expandafter\DTLsplitstring\expandafter
+        {\@dtl at argB}{\datatoolpersoncomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+      \ifdefempty{\@dtl at replaced}%
+      {%
+        \expandafter\DTLsplitstring\expandafter
+          {\@dtl at argB}{\datatoolplacecomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+        \ifdefempty{\@dtl at replaced}%
+        {%
+          \expandafter\DTLsplitstring\expandafter
+            {\@dtl at argB}{\datatoolsubjectcomma}{\@dtl at beforepart}{\@dtl at afterpart}%
+          \ifdefempty{\@dtl at replaced}%
+          {%
+            \expandafter\DTLsplitstring\expandafter
+              {\@dtl at argB}{\datatoolparenstart}{\@dtl at beforepart}{\@dtl at afterpart}%
+            \ifdefempty{\@dtl at replaced}%
+            {%
+              \def\@dtl at B@comma{0}%
+              \let\@dtl at B@before\@dtl at argB
+              \def\@dtl at B@after{}%
+            }%
+            {%
+              \let\@dtl at B@comma\@dtl at replaced
+              \let\@dtl at B@before\@dtl at beforepart
+              \let\@dtl at B@after\@dtl at afterpart
+            }%
+          }%
+          {%
+            \let\@dtl at B@comma\@dtl at replaced
+            \let\@dtl at B@before\@dtl at beforepart
+            \let\@dtl at B@after\@dtl at afterpart
+          }%
+        }%
+        {%
+          \let\@dtl at B@comma\@dtl at replaced
+          \let\@dtl at B@before\@dtl at beforepart
+          \let\@dtl at B@after\@dtl at afterpart
+        }%
+      }%
+      {%
+        \let\@dtl at B@comma\@dtl at replaced
+        \let\@dtl at B@before\@dtl at beforepart
+        \let\@dtl at B@after\@dtl at afterpart
+      }%
+      \expandafter\dtl at ifcasechargroup\@dtl at A@before\dtl at end@ifcasechargroup
+       {\def\@dtl at A@chargroup{2}}%
+       {\def\@dtl at A@chargroup{1}}%
+       {\def\@dtl at A@chargroup{0}}%
+      \expandafter\dtl at ifcasechargroup\@dtl at B@before\dtl at end@ifcasechargroup
+       {\def\@dtl at B@chargroup{2}}%
+       {\def\@dtl at B@chargroup{1}}%
+       {\def\@dtl at B@chargroup{0}}%
+      \ifnum\@dtl at A@chargroup<\@dtl at B@chargroup
+        #1=-1\relax
+      \else
+        \ifnum\@dtl at A@chargroup>\@dtl at B@chargroup
+          #1=1\relax
+        \else
+          \ifcase\@dtl at A@chargroup
+            \edef\dtl at donext{%
+              \noexpand\dtlcompare
+                {\noexpand#1}%
+                {\expandonce\@dtl at A@before}%
+                {\expandonce\@dtl at B@before}}%
+            \dtl at donext
+          \or
+            \ifnum\@dtl at A@before<\@dtl at B@before\relax
+              #1=-1\relax
+            \else
+              \ifnum\@dtl at A@before>\@dtl at B@before\relax
+                #1=1\relax
+              \else
+                #1=0\relax
+              \fi
+            \fi
+          \or
+            \@dtlwordindexcompare{#1}{\@dtl at A@before}{\@dtl at B@before}
+              {\dtlicomparewords}{#4}%
+            \ifnum#1=0\relax
+              \let\@org at dtl@person at comma\datatoolpersoncomma
+              \let\@org at dtl@place at comma\datatoolplacecomma
+              \let\@org at dtl@subject at comma\datatoolsubjectcomma
+              \let\@org at dtl@paren at start\datatoolparenstart
+              \def\datatoolpersoncomma{3}%
+              \def\datatoolplacecomma{2}%
+              \def\datatoolsubjectcomma{1}%
+              \def\datatoolparenstart{-1}%
+              \ifnum\@dtl at A@comma>\@dtl at B@comma\relax
+                #1=-1\relax
+              \else
+                \ifnum\@dtl at A@comma<\@dtl at B@comma\relax
+                  #1=1\relax
+                \else
+                 \@dtlwordindexcompare{#1}{\@dtl at B@before}{\@dtl at A@before}
+                   {\dtlcomparewords}{#4}%
+                  \ifnum#1=0\relax
+                    \@dtlwordindexcompare{#1}{\@dtl at A@after}{\@dtl at B@after}
+                      {\dtlicomparewords}{#4}%
+                  \fi
+                \fi
+              \fi
+              \let\datatoolpersoncomma\@org at dtl@person at comma
+              \let\datatoolplacecomma\@org at dtl@place at comma
+              \let\datatoolsubjectcomma\@org at dtl@subject at comma
+              \let\datatoolparenstart\@org at dtl@paren at start
+            \fi
+          \fi
+        \fi
+      \fi
+    }%
+  }%
+}%
+\newcommand*{\datatoolpersoncomma}{,\space}
+\newcommand*{\datatoolplacecomma}{,\space}
+\newcommand*{\datatoolsubjectcomma}{,\space}
+\newcommand*{\datatoolparenstart}{\space}
+\newcommand*{\@dtlwordindexcompare}[5]{%
+  \dtl at setwordbreaks{#2}{#5}%
+  \let#2\dtl at string
+  \dtl at setwordbreaks{#3}{}%
+  \let#3\dtl at string
+  \edef\@dtl at do@compare{%
+    \noexpand#4{\noexpand#1}%
+      {\expandonce#2}{\expandonce#3}%
+  }%
+  \@dtl at do@compare
+}
+\newcommand*{\@dtl at dict@compare}[4]{%
+  \ifdefempty{#2}%
+  {%
+    \ifdefempty{#3}%
+    {%
+      #1=0\relax
+    }%
+    {%
+      #1=-1\relax
+    }%
+  }%
+  {%
+    \ifdefempty{#3}%
+    {%
+      #1=1\relax
+    }%
+    {%
+      \expandafter\dtl at grabword#2\@dtl at endgrabword\dtl at A@first\dtl at A@remain
+      \expandafter\dtl at grabword#3\@dtl at endgrabword\dtl at B@first\dtl at B@remain
+      \edef\@dtl at do@compare{%
+        \noexpand#4{\noexpand#1}%
+          {\expandonce\dtl at A@first}{\expandonce\dtl at B@first}%
+      }%
+      \@dtl at do@compare
+      \ifnum#1=0\relax
+        \@dtl at dict@compare{#1}{\dtl at A@remain}{\dtl at B@remain}{#4}%
+      \fi
+    }%
+  }%
+}
+\def\dtl at grabword#1\@dtl at wordbreak#2\@dtl at endgrabword#3#4{%
+  \def#3{#1}%
+  \def#4{#2}%
+}
+\newcommand{\dtlicomparewords}[3]{%
+  \dtlicompare{#1}{#2}{#3}%
+}
+\newcommand{\dtlcomparewords}[3]{%
+  \dtlcompare{#1}{#2}{#3}%
+}
+\newcommand*{\dtl at setwordbreaks}[2]{%
+  \expandafter\dtl at subnobrsp\expandafter{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{#2}%
+  \DTLsubstituteall{\dtl at string}{\ }{#2}%
+  \DTLsubstituteall{\dtl at string}{\space}{#2}%
+  \DTLsubstituteall{\dtl at string}{-}{#2}%
+ \toks@{#2}%
+ \edef\dtl at do@setwordbreaks{%
+   \noexpand\@dtl at setwordbreaks{\the\toks@}\expandonce\dtl at string\space\noexpand\@nil}%
+ \def\dtl at string{}%
+ \dtl at do@setwordbreaks
+}
+\def\@dtl at setwordbreaks#1#2 #3{%
+  \def\dtl at tmp{#3}%
+  \ifx\@nnil\dtl at tmp
+    \let\@dtl at setwordbreaks@next\@gobbletwo
+    \appto\dtl at string{#2}%
+  \else
+    \let\@dtl at setwordbreaks@next\@dtl at setwordbreaks
+    \appto\dtl at string{#2#1}%
+  \fi
+  \@dtl at setwordbreaks@next{#1}#3%
+}
+\newcommand*{\dtl at setwordbreaksnohyphens}[2]{%
+  \expandafter\dtl at subnobrsp\expandafter{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{#2}%
+  \DTLsubstituteall{\dtl at string}{\ }{#2}%
+  \DTLsubstituteall{\dtl at string}{\space}{#2}%
+ \toks@{#2}%
+ \edef\dtl at do@setwordbreaks{%
+   \noexpand\@dtl at setwordbreaks{\the\toks@}\expandonce\dtl at string\space\noexpand\@nil}%
+ \def\dtl at string{}%
+ \dtl at do@setwordbreaks
+}
+\newcommand*{\@dtl at wordbreak}{ }
+\def\dtl at ifcasechargroup#1#2\dtl at end@ifcasechargroup#3#4#5{%
+ \expandafter\dtl at if@two at octets#1#2\relax\relax\dtl at end@if at two@octets
+ {%
+   \dtl at getfirst@UTFviii#1#2\@nil\end at dtl@getfirst at UTFviii
+   \expandafter\dtlsetUTFviiilccharcode\expandafter{\dtl at first}{\count@}%
+   \ifnum\count@<`a\relax #5\else#3\fi
+ }%
+ {%
+  \dtlifcasechargroup{#1}%
+   {#3}%
+   {%
+     \DTLifint{#1#2}
+     {%
+       #4%
+     }%
+     {%
+       #3%
+     }%
+   }%
+   {#5}%
+ }%
+}
+\newcommand*{\dtlifcasechargroup}[4]{%
+  \count@=`#1\relax
+  \dtlifintclosedbetween{\number\count@}{48}{57}%
+  {%
+    #3%
+  }%
+  {%
+    \dtlifintclosedbetween{\number\count@}{97}{122}%
+    {%
+      #2%
+    }%
+    {%
+      \dtlifintclosedbetween{\number\count@}{65}{90}%
+      {%
+        #2%
+      }%
+      {%
+        #4%
+      }%
+    }%
+  }%
+}
+\newcommand*{\dtlparsewords}[2]{%
+  \dtl at subnobrsp{#1}{\dtl at string}%
+  \DTLsubstituteall{\dtl at string}{~}{ }%
+  \DTLsubstituteall{\dtl at string}{\ }{ }%
+  \DTLsubstituteall{\dtl at string}{\space}{ }%
+  \DTLsubstituteall{\dtl at string}{-}{ }%
+  \let\dtl at parsewordshandler#2\relax
+  \edef\dtl at donext{%
+     \noexpand\@dtl at parse@words\expandonce\dtl at string\space\noexpand\@nil}%
+  \dtl at donext
+}
+\def\@dtl at parse@words#1 #2{%
+  \def\dtl at tmp{#2}%
+  \ifx\@nnil\dtl at tmp
+   \let\parse at wordsnext=\@gobble
+  \else
+   \let\parse at wordsnext=\@dtl at parse@words
+  \fi
+  \dlt at parsewordshandler{#1}%
+  \parse at wordsnext#2%
+}
+\newcommand*{\DTLifstringlt}{\@ifstar\@sDTLifstringlt\@DTLifstringlt}
+\newcommand*{\@DTLifstringlt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount<0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringlt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount<0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLiflt}{\@ifstar\@sDTLiflt\@DTLiflt}
+\newcommand*{\@DTLiflt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumlt{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringlt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLiflt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumlt{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringlt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifnumgt}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumgt{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newcommand*{\DTLifstringgt}{\@ifstar\@sDTLifstringgt\@DTLifstringgt}
+\newcommand*{\@DTLifstringgt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount>0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringgt}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount>0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLifgt}{\@ifstar\@sDTLifgt\@DTLifgt}
+\newcommand*{\@DTLifgt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumgt{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringgt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLifgt}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumgt{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringgt{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifnumeq}[4]{%
+  \DTLconverttodecimal{#1}{\@dtl at numi}%
+  \DTLconverttodecimal{#2}{\@dtl at numii}%
+  \dtlifnumeq{\@dtl at numi}{\@dtl at numii}%
+  {%
+    #3%
+  }%
+  {%
+    #4%
+  }%
+}
+\newcommand*{\DTLifstringeq}{\@ifstar\@sDTLifstringeq\@DTLifstringeq}
+\newcommand*{\@DTLifstringeq}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount=0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\@sDTLifstringeq}[4]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \ifnum\@dtl at tmpcount=0\relax
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newcommand*{\DTLifeq}{\@ifstar\@sDTLifeq\@DTLifeq}
+\newcommand*{\@DTLifeq}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumeq{#1}{#2}{#3}{#4}%
+  \else
+   \@DTLifstringeq{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\@sDTLifeq}[4]{%
+  \dtl at testbothnumerical{#1}{#2}%
+  \if at dtl@condition
+   \DTLifnumeq{#1}{#2}{#3}{#4}%
+  \else
+   \@sDTLifstringeq{#1}{#2}{#3}{#4}%
+  \fi
+}
+\newcommand*{\DTLifSubString}[4]{%
+  \protected at edef\@dtl at dotestifsubstring{\noexpand\dtl at testifsubstring
+  {#1}{#2}}%
+  \@dtl at dotestifsubstring
+  \if at dtl@condition
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtl at testifsubstring}[2]{%
+  \dtl at subnobrsp{#1}{\@dtl at argA}%
+  \dtl at subnobrsp{#2}{\@dtl at argB}%
+  \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+  \let\@dtl at argA\dtl at string
+  \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+  \let\@dtl at argB\dtl at string
+  \edef\dtl at donext{%
+    \noexpand\@dtl at testifsubstring{\expandonce\@dtl at argA}{\expandonce\@dtl at argB}}%
+  \dtl at donext
+}
+\newcommand*{\@dtl at testifsubstring}[2]{%
+  \def\@dtl at subs@argA{#1}%
+  \def\@dtl at subs@argB{#2}%
+  \ifdefempty{\@dtl at subs@argB}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+    \ifdefempty{\@dtl at subs@argA}%
+    {%
+      \@dtl at conditionfalse
+    }%
+    {%
+      \@dtl at teststartswith{#1}{#2}%
+      \if at dtl@condition
+      \else
+        \dtl at getfirst#1\end at dtl@getfirst
+        \expandafter\dtl at ifsingle\expandafter{\dtl at first}%
+        {%
+          \expandafter\@dtl at testifsubstring\expandafter{\dtl at rest}{#2}%
+        }%
+        {%
+          \protected at edef\@dtl at donext{\noexpand\@dtl at testifsubstring
+             {\expandonce\dtl at first\expandonce\dtl at rest}{\expandonce\@dtl at subs@argB}}%
+          \@dtl at donext
+        }%
+      \fi
+    }%
+  }%
+}
+\newcommand*{\DTLifStartsWith}[4]{%
+  \@dtl at conditionfalse
+  \protected at edef\@dtl at tmp{\noexpand\dtl at teststartswith{#1}{#2}}%
+  \@dtl at tmp
+  \if at dtl@condition
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtl at teststartswith}[2]{%
+  \dtl at subnobrsp{#1}{\@dtl at argA}%
+  \dtl at subnobrsp{#2}{\@dtl at argB}%
+  \dtl at setwordbreaksnohyphens{\@dtl at argA}{\@dtl at wordbreak}%
+  \let\@dtl at argA\dtl at string
+  \dtl at setwordbreaksnohyphens{\@dtl at argB}{\@dtl at wordbreak}%
+  \let\@dtl at argB\dtl at string
+  \edef\dtl at donext{%
+    \noexpand\@dtl at teststartswith{\expandonce\@dtl at argA}{\expandonce\@dtl at argB}}%
+  \dtl at donext
+}
+
+\newcommand*{\@dtl at teststartswith}[2]{%
+  \def\@dtl at argA{#1}%
+  \def\@dtl at argB{#2}%
+  \ifdefempty{\@dtl at argA}%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      \@dtl at conditiontrue
+    }%
+    {%
+      \@dtl at conditionfalse
+    }%
+  }%
+  {%
+    \ifdefempty{\@dtl at argB}%
+    {%
+      \@dtl at conditiontrue
+    }%
+    {%
+      \expandafter\dtl at getfirst\@dtl at argA\end at dtl@getfirst
+      \let\dtl at firstA=\dtl at first
+      \let\dtl at restA=\dtl at rest
+      \expandafter\dtl at getfirst\@dtl at argB\end at dtl@getfirst
+      \let\dtl at firstB=\dtl at first
+      \let\dtl at restB=\dtl at rest
+      \expandafter\dtl at ifsingle\expandafter{\dtl at firstA}%
+      {%
+        \expandafter\dtl at ifsingle\expandafter{\dtl at firstB}%
+        {%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstA}{\dtl at codeA}%
+          \expandafter\dtl at setcharcode\expandafter{\dtl at firstB}{\dtl at codeB}%
+          \ifnum\dtl at codeA=-1\relax
+            \ifnum\dtl at codeB=-1\relax
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+               \dtl at donext
+            \else
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith
+                   {\expandonce\dtl at restA}{\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+               \dtl at donext
+            \fi
+          \else
+            \ifnum\dtl at codeB=-1\relax
+               \protected at edef\dtl at donext{%
+                 \noexpand\@dtl at teststartswith
+                   {\expandonce\dtl at firstA\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+               \dtl at donext
+            \else
+              \ifnum\dtl at codeA=\dtl at codeB
+                \protected at edef\dtl at donext{%
+                  \noexpand\@dtl at teststartswith{\expandonce\dtl at restA}{\expandonce\dtl at restB}}%
+                \dtl at donext
+              \else
+                \@dtl at conditionfalse
+              \fi
+            \fi
+          \fi
+        }%
+        {%
+          \protected at edef\dtl at donext{%
+            \noexpand\@dtl at teststartswith
+              {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+              {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+          \dtl at donext
+        }%
+      }%
+      {%
+        \protected at edef\dtl at donext{%
+          \noexpand\@dtl at teststartswith
+            {\expandonce\dtl at firstA\expandonce\dtl at restA}%
+            {\expandonce\dtl at firstB\expandonce\dtl at restB}}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\DTLifnumclosedbetween}[5]{%
+ \DTLconverttodecimal{#1}{\@dtl at numi}%
+ \DTLconverttodecimal{#2}{\@dtl at numii}%
+ \DTLconverttodecimal{#3}{\@dtl at numiii}%
+ \DTLifFPclosedbetween{\@dtl at numi}{\@dtl at numii}{\@dtl at numiii}{#4}{#5}%
+}
+\newcommand*{\DTLifstringclosedbetween}{%
+  \@ifstar\@sDTLifstringclosedbetween\@DTLifstringclosedbetween
+}
+\newcommand*{\@DTLifstringclosedbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount<0\relax
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount>0\relax
+      \def\@dtl at dovalue{#5}%
+    \else
+      \def\@dtl at dovalue{#4}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\@sDTLifstringclosedbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount<0\relax
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount>0\relax
+      \def\@dtl at dovalue{#5}%
+    \else
+      \def\@dtl at dovalue{#4}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\DTLifclosedbetween}{%
+  \@ifstar\@sDTLifclosedbetween\@DTLifclosedbetween
+}
+\newcommand*{\@DTLifclosedbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\@sDTLifclosedbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\DTLifnumopenbetween}[5]{%
+ \DTLconverttodecimal{#1}{\@dtl at numi}%
+ \DTLconverttodecimal{#2}{\@dtl at numii}%
+ \DTLconverttodecimal{#3}{\@dtl at numiii}%
+ \DTLifFPopenbetween{\@dtl at numi}{\@dtl at numii}{\@dtl at numiii}{#4}{#5}%
+}
+\newcommand*{\DTLifstringopenbetween}{%
+  \@ifstar\@sDTLifstringopenbetween\@DTLifstringopenbetween
+}
+\newcommand*{\@DTLifstringopenbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount>0\relax
+  \else
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlcompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount<0\relax
+      \def\@dtl at dovalue{#4}%
+    \else
+      \def\@dtl at dovalue{#5}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\@sDTLifstringopenbetween}[5]{%
+  \protected at edef\@dtl at tmpcmp{%
+    \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#2}}%
+  \@dtl at tmpcmp
+  \let\@dtl at dovalue\relax
+  \ifnum\@dtl at tmpcount>0\relax
+  \else
+    \def\@dtl at dovalue{#5}%
+  \fi
+  \ifx\@dtl at dovalue\relax
+    \protected at edef\@dtl at tmpcmp{%
+      \noexpand\dtlicompare{\noexpand\@dtl at tmpcount}{#1}{#3}}%
+    \@dtl at tmpcmp
+    \ifnum\@dtl at tmpcount<0\relax
+      \def\@dtl at dovalue{#4}%
+    \else
+      \def\@dtl at dovalue{#5}%
+    \fi
+  \fi
+  \@dtl at dovalue
+}
+\newcommand*{\DTLifopenbetween}{%
+  \@ifstar\@sDTLifopenbetween\@DTLifopenbetween
+}
+\newcommand*{\@DTLifopenbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\newcommand*{\@sDTLifopenbetween}[5]{%
+  \dtl at testbothnumerical{#2}{#3}%
+  \if at dtl@condition
+    \dtl at ifsingle{#1}{%
+      \edef\@dtl at tmp{#1}}{%
+      \def\@dtl at tmp{#1}}%
+    \expandafter\@dtl at checknumerical\expandafter{\@dtl at tmp}%
+    \ifnum\@dtl at datatype>0\relax
+      \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \else
+      \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+    \fi
+  \else
+    \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
+  \fi
+}
+\let\DTLifFPopenbetween\dtlifnumopenbetween
+\let\DTLifFPclosedbetween\dtlifnumclosedbetween
+\newcommand*{\dtl at testlt}[2]{%
+  \DTLiflt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLislt}[2]{%
+  \TE at throw\noexpand\dtl at testlt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiclt}[2]{%
+  \@sDTLiflt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisilt}[2]{%
+  \TE at throw\noexpand\dtl at testiclt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testgt}[2]{%
+  \DTLifgt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisgt}[2]{%
+  \TE at throw\noexpand\dtl at testgt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testicgt}[2]{%
+  \@sDTLifgt{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisigt}[2]{%
+  \TE at throw\noexpand\dtl at testicgt{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testeq}[2]{%
+  \DTLifeq{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLiseq}[2]{%
+  \TE at throw\noexpand\dtl at testeq{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiceq}[2]{%
+  \@sDTLifeq{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisieq}[2]{%
+  \TE at throw\noexpand\dtl at testiceq{#1}{#2}\noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisSubString}[2]{%
+  \TE at throw\noexpand\dtl at testifsubstring{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisPrefix}[2]{%
+  \TE at throw\noexpand\dtl at teststartswith{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\DTLisinlist}[2]{%
+  \TE at throw\noexpand\dtl at testinlist{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testinlist}[2]{%
+  \DTLifinlist{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\dtl at testnumclosedbetween}[3]{%
+  \DTLifnumclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testnumclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testnumopenbetween}[3]{%
+  \DTLifnumopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testnumopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testclosedbetween}[3]{%
+  \DTLifclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiclosedbetween}[3]{%
+  \@sDTLifclosedbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisiclosedbetween}[3]{%
+  \TE at throw\noexpand\dtl at testiclosedbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testopenbetween}[3]{%
+  \DTLifopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testiopenbetween}[3]{%
+  \@sDTLifopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisiopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testiopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\let\DTLisFPclosedbetween\DTLisnumclosedbetween
+\newcommand*{\dtl at testFPopenbetween}[3]{%
+  \DTLifFPopenbetween{#1}{#2}{#3}%
+    {\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisFPopenbetween}[3]{%
+  \TE at throw\noexpand\dtl at testFPopenbetween{#1}{#2}{#3}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPislt}[2]{%
+  \dtlifnumlt{#1}{#2}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+    \@dtl at conditionfalse
+  }%
+}
+\newcommand*{\DTLisFPlt}[2]{%
+  \TE at throw\noexpand\dtl at testFPislt{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPisgt}[2]{%
+  \dtlifnumgt{#1}{#2}%
+  {%
+    \@dtl at conditiontrue
+  }%
+  {%
+   \@dtl at conditionfalse
+  }%
+}
+\newcommand*{\DTLisFPgt}[2]{%
+  \TE at throw\noexpand\dtl at testFPisgt{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPiseq}[2]{%
+ \dtlifnumeq{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+  \@dtl at conditionfalse
+ }%
+}
+\newcommand*{\DTLisFPeq}[2]{%
+  \TE at throw\noexpand\dtl at testFPiseq{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPislteq}[2]{%
+ \dtlifnumlt{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+   \@dtl at conditionfalse
+ }%
+ \if at dtl@condition
+ \else
+  \dtl at testFPiseq{#1}{#2}%
+ \fi
+}
+\newcommand*{\DTLisFPlteq}[2]{%
+ \TE at throw\noexpand\dtl at testFPislteq{#1}{#2}%
+ \noexpand\if at dtl@condition
+}
+\newcommand*{\dtl at testFPisgteq}[2]{%
+ \dtlifnumgt{#1}{#2}%
+ {%
+   \@dtl at conditiontrue
+ }%
+ {%
+   \@dtl at conditionfalse
+ }%
+ \if at dtl@condition
+ \else
+  \dtl at testFPiseq{#1}{#2}%
+ \fi
+}
+\newcommand*{\DTLisFPgteq}[2]{%
+  \TE at throw\noexpand\dtl at testFPisgteq{#1}{#2}%
+  \noexpand\if at dtl@condition}
+\newcommand*{\dtl at teststring}[1]{%
+  \DTLifstring{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisstring}[1]{%
+  \TE at throw\noexpand\dtl at teststring{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testnumerical}[1]{%
+  \DTLifnumerical{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}%
+}
+\newcommand*{\DTLisnumerical}[1]{%
+  \TE at throw\noexpand\dtl at testnumerical{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testint}[1]{%
+  \DTLifint{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisint}[1]{%
+  \TE at throw\noexpand\dtl at testint{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testreal}[1]{%
+  \DTLifreal{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLisreal}[1]{%
+  \TE at throw\noexpand\dtl at testreal{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testcurrency}[1]{%
+  \DTLifcurrency{#1}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLiscurrency}[1]{%
+  \TE at throw\noexpand\dtl at testcurrency{#1}\noexpand\if at dtl@condition}
+\newcommand*{\dtl at testcurrencyunit}[2]{%
+  \DTLifcurrencyunit{#1}{#2}{\@dtl at conditiontrue}{\@dtl at conditionfalse}}
+\newcommand*{\DTLiscurrencyunit}[2]{%
+  \TE at throw\noexpand\dtl at testcurrencyunit{#1}{#2}%
+  \noexpand\if at dtl@condition
+}
+\newcommand*{\dtlbreak}{%
+  \PackageError{datatool}{Can't break out of anything}{}%
+}
+\long\def\dtlforint#1=#2\to#3\step#4\do#5{%
+  \let\@dtl at orgbreak\dtlbreak
+  \def\@dtl at endloophook{}%
+  \def\dtlbreak{\def\@dtl at endloophook{#1=#3}}%
+  #1=#2\relax
+  \ifnum#4<0\relax
+    \whiledo{\(#1>#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \@dtl at endloophook
+      \advance#1 by #4\relax
+    }%
+  \else
+    \whiledo{\(#1<#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \@dtl at endloophook
+      \advance#1 by #4\relax
+    }%
+  \fi
+  \let\dtlbreak\@dtl at orgbreak
+}
+\newcount\@dtl at foreach@level
+\long\def\dtlgforint#1=#2\to#3\step#4\do#5{%
+  \global#1=#2\relax
+  \global\advance\@dtl at foreach@level by 1\relax
+  \expandafter\global\expandafter
+    \let\csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+    \relax
+  \expandafter\global\expandafter
+    \let\csname @dtl at break@\the\@dtl at foreach@level\endcsname
+    \dtlbreak
+  \gdef\dtlbreak{\expandafter
+     \gdef\csname @dtl at endhook@\the\@dtl at foreach@level\endcsname{%
+       #1=#3}}%
+  \ifnum#4<0\relax
+    \whiledo{\(#1>#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+      \global\advance#1 by #4\relax
+    }%
+  \else
+    \whiledo{\(#1<#3\)\TE at or\(#1=#3\)}%
+    {%
+      #5%
+      \csname @dtl at endhook@\the\@dtl at foreach@level\endcsname
+      \global\advance#1 by #4\relax
+    }%
+  \fi
+  \expandafter\global\expandafter\let\expandafter\dtlbreak
+    \csname @dtl at break@\the\@dtl at foreach@level\endcsname
+  \global\advance\@dtl at foreach@level by -1\relax
+}
+\newenvironment{dtlenvgforint}[1]%
+{%
+  \def\@dtlenvgforint at arg{#1}%
+  \long at collect@body\@do at dtlenvgforint
+}%
+{}
+\newcommand{\@do at dtlenvgforint}[1]{%
+  \expandafter\dtlgforint\@dtlenvgforint at arg\do{#1}%
+}
+\endinput
+%%
+%% End of file `datatool-base-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-base-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-base.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-base.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-base-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datatool-base}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datatool-base}[2025/03/05 v3.0.1 (NLCT)]
 \RequirePackage{etoolbox}
 \RequirePackage{amsmath}
 \RequirePackage{xfor}

Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,164 @@
+%%
+%% This is file `datatool-fp-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-fp-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-fp}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{fp}
+\RequirePackage{datatool-base}[=v2.32]
+\define at choicekey{datatool-fp}{verbose}[\val\nr]{true,false}[true]{%
+  \ifcase\nr\relax
+    \FPmessagestrue
+  \or
+    \FPmessagesfalse
+  \fi
+}
+\let\ifFPmessages\ifdtlverbose
+\ProcessOptionsX
+\providecommand*{\@dtl at mathprocessor}{fp}
+\newcommand*{\dtlifnumeq}[4]{%
+  \FPifeq{#1}{#2}%
+    #3%
+  \else
+    #4%
+  \fi
+}
+\let\ifdtlverbose\ifFPmessages
+\newcommand*{\dtlifnumlt}[4]{%
+  \FPiflt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumgt}[4]{%
+  \FPifgt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \@dtl at dovalue
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \dtlifnumeq{#1}{#2}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \dtlifnumeq{#1}{#3}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \@dtl at dovalue
+}
+\newcommand*{\dtladd}[3]{%
+  \FPadd{#1}{#2}{#3}%
+}
+\newcommand*{\dtlsub}[3]{%
+  \FPsub{#1}{#2}{#3}%
+}
+\newcommand*{\dtlmul}[3]{%
+  \FPmul{#1}{#2}{#3}%
+}
+\newcommand*{\dtldiv}[3]{%
+  \FPdiv{#1}{#2}{#3}%
+}
+\newcommand*{\dtlroot}[2]{%
+  \FProot{#1}{#2}%
+}
+\newcommand*{\dtlround}[3]{%
+  \FPround{#1}{#2}{#3}%
+}
+\newcommand*{\dtltrunc}[3]{%
+  \FPtrunc{#1}{#2}{#3}%
+}
+\newcommand*{\dtlclip}[2]{%
+  \FPclip{#1}{#2}%
+}
+\newcommand*{\dtlmin}[3]{%
+  \FPmin{#1}{#2}{#3}%
+}
+\newcommand*{\dtlmax}[3]{%
+  \FPmax{#1}{#2}{#3}%
+}
+\newcommand*{\dtlabs}[2]{%
+  \FPabs{#1}{#2}%
+}
+\newcommand*{\dtlneg}[2]{%
+  \FPneg{#1}{#2}%
+}
+\endinput
+%%
+%% End of file `datatool-fp-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.def	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,254 @@
+%%
+%% This is file `datatool-fp.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-fp.def,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-fp.def}[2025/03/05 v3.0.1 (NLCT)]
+\RequirePackage{fp}
+\ifFPmessages
+  \dtlverbosetrue
+\fi
+\newrobustcmd*{\dtlifnumeq}[4]{%
+  \FPifeq{#1}{#2}%
+    #3%
+  \else
+    #4%
+  \fi
+}
+\newrobustcmd*{\dtlifnumlt}[4]{%
+  \FPiflt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newrobustcmd*{\dtlifnumgt}[4]{%
+  \FPifgt{#1}{#2}%
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newrobustcmd*{\dtlifnumopenbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \def\@dtl at dovalue{#5}%
+  }%
+  \@dtl at dovalue
+}
+\newrobustcmd*{\dtlifnumclosedbetween}[5]{%
+  \let\@dtl at dovalue\relax
+  \dtlifnumgt{#1}{#2}%
+  {}%
+  {%
+    \dtlifnumeq{#1}{#2}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \dtlifnumlt{#1}{#3}%
+  {%
+    \ifx\@dtl at dovalue\relax
+      \def\@dtl at dovalue{#4}%
+    \fi
+  }%
+  {%
+    \dtlifnumeq{#1}{#3}%
+    {%
+      \def\@dtl at dovalue{#4}%
+    }%
+    {%
+      \def\@dtl at dovalue{#5}%
+    }%
+  }%
+  \@dtl at dovalue
+}
+\NewDocumentCommand{\dtladd}{mmm}{%
+  \FPadd{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtladdall}{mm}{%
+  \def#1{0}%
+  \@for\@dtl at tmp:=#2\do{%
+    \FPadd{#1}{#1}{\@dtl at tmp}%
+  }%
+}
+\NewDocumentCommand{\dtlsub}{mmm}{%
+  \FPsub{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlmul}{mmm}{%
+  \FPmul{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtldiv}{mmm}{%
+  \FPdiv{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlsqrt}{mm}{%
+  \FProot{#1}{#2}{2}%
+}
+\NewDocumentCommand{\dtlroot}{mmm}{%
+  \FProot{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlround}{mmm}{%
+  \FPround{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtltrunc}{mmm}{%
+  \FPtrunc{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlclip}{mm}{%
+  \FPclip{#1}{#2}%
+}
+\NewDocumentCommand{\dtlmin}{mmm}{%
+  \FPmin{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlminall}{mm}{%
+  \let#1\empty
+  \@for\@dtl at tmp:=#2\do{%
+    \ifx\empty
+     \let#1\@dtl at tmp
+    \else
+     \FPmin#1{#1}{\@dtl at tmp}%
+    \fi
+  }%
+}
+\NewDocumentCommand{\dtlmax}{mmm}{%
+  \FPmax{#1}{#2}{#3}%
+}
+\NewDocumentCommand{\dtlmaxall}{mm}{%
+  \let#1\empty
+  \@for\@dtl at tmp:=#2\do{%
+    \ifx\empty
+     \let#1\@dtl at tmp
+    \else
+     \FPmax#1{#1}{\@dtl at tmp}%
+    \fi
+  }%
+}
+\NewDocumentCommand{\dtlabs}{mm}{%
+  \FPabs{#1}{#2}%
+}
+\NewDocumentCommand{\dtlneg}{mm}{%
+  \FPneg{#1}{#2}%
+}
+\NewDocumentCommand{\dtlmeanforall}{mm}{%
+  \def#1{0}%
+  \count@=0\relax
+  \@for\@dtl at tmp:=#2\do{%
+    \advance\count@ by \@ne
+    \FPadd{#1}{#1}{\@dtl at tmp}%
+  }%
+  \FPdiv{#1}{#1}{\number\count@}%
+}
+\NewDocumentCommand{\dtlvarianceforall}{omm}{%
+  \IfNoValueTF{#1}%
+  {%
+    \def\@dtl at mean{0}%
+    \count@=0\relax
+    \@for\@dtl at tmp:=#3\do{%
+      \advance\count@ by \@ne
+      \FPadd{\@dtl at mean}{\@dtl at mean}{\@dtl at tmp}%
+    }%
+    \FPdiv{\@dtl at mean}{\@dtl at mean}{\number\count@}%
+    \def#2{0}%
+    \@for\@dtl at tmp:=#3\do{%
+      \FPsub{\@dtl at tmp}{\@dtl at tmp}{\@dtl at mean}%
+      \FPmul{\@dtl at tmp}{\@dtl at tmp}{\@dtl at tmp}%
+      \FPadd{#2}{#2}{\@dtl at tmp}%
+    }%
+    \FPdiv{#2}{#2}{\number\count@}%
+  }%
+  {%
+    \def\@dtl at mean{#1}%
+    \count@=0\relax
+    \def#2{0}%
+    \@for\@dtl at tmp:=#3\do{%
+      \advance\count@ by \@ne
+      \FPsub{\@dtl at tmp}{\@dtl at tmp}{\@dtl at mean}%
+      \FPmul{\@dtl at tmp}{\@dtl at tmp}{\@dtl at tmp}%
+      \FPadd{#2}{#2}{\@dtl at tmp}%
+    }%
+    \FPdiv{#2}{#2}{\number\count@}%
+  }%
+}
+\NewDocumentCommand{\dtlsdforall}{omm}{%
+  \IfNoValueTF{#1}%
+  {%
+    \def\@dtl at mean{0}%
+    \count@=0\relax
+    \@for\@dtl at tmp:=#3\do{%
+      \advance\count@ by \@ne
+      \FPadd{\@dtl at mean}{\@dtl at mean}{\@dtl at tmp}%
+    }%
+    \FPdiv{\@dtl at mean}{\@dtl at mean}{\number\count@}%
+    \def#2{0}%
+    \@for\@dtl at tmp:=#3\do{%
+      \FPsub{\@dtl at tmp}{\@dtl at tmp}{\@dtl at mean}%
+      \FPmul{\@dtl at tmp}{\@dtl at tmp}{\@dtl at tmp}%
+      \FPadd{#2}{#2}{\@dtl at tmp}%
+    }%
+  }%
+  {%
+    \def\@dtl at mean{#1}%
+    \count@=0\relax
+    \def#2{0}%
+    \@for\@dtl at tmp:=#3\do{%
+      \advance\count@ by \@ne
+      \FPsub{\@dtl at tmp}{\@dtl at tmp}{\@dtl at mean}%
+      \FPmul{\@dtl at tmp}{\@dtl at tmp}{\@dtl at tmp}%
+      \FPadd{#2}{#2}{\@dtl at tmp}%
+    }%
+  }%
+  \FPdiv{#2}{#2}{\number\count@}%
+  \FProot{#2}{#2}{2}%
+}
+\endinput
+%%
+%% End of file `datatool-fp.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-fp-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datatool-fp}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datatool-fp}[2025/03/05 v3.0.1 (NLCT)]
 \PackageWarning{datatool-fp}%
 {datatool-fp.sty deprecated. Use
 \string\usepackage[math=fp]{datatool} instead or

Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-l3fp.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-l3fp.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-l3fp.def	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,245 @@
+%%
+%% This is file `datatool-l3fp.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-l3fp.def,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-l3fp.def}[2025/03/05 v3.0.1 (NLCT)]
+\ExplSyntaxOn
+\newcommand*{\dtlifnumeq}[4]{%
+ \fp_compare:nNnTF { #1 } = { #2 } { #3 } { #4 }
+}
+\newcommand*{\dtlifnumlt}[4]{%
+ \fp_compare:nNnTF { #1 } < { #2 } { #3 } { #4 }
+}
+\newcommand*{\dtlifnumgt}[4]{%
+ \fp_compare:nNnTF { #1 } > { #2 } { #3 } { #4 }
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+ \fp_compare:nTF { #2 < #1 < #3 }
+   { #4 } { #5 }
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+ \fp_compare:nTF { #2 <= #1 <= #3 }
+  { #4 } { #5 }
+}
+\NewDocumentCommand \dtladd { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { #2 + #3 }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtladdall { m m }
+{
+  \fp_zero:N \l__datatool_tmpa_fp
+  \exp_args:Nx \clist_map_inline:nn { #2 }
+   { \fp_add:Nn \l__datatool_tmpa_fp { ##1 } }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlsub { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { #2 - #3 }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlmul { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { #2 * #3 }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtldiv { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { #2 / #3 }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlsqrt { m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { sqrt ( #2 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlroot { m m m }
+{
+  \exp_args:Nx \tl_if_eq:nnTF { #3 } { 2 }
+  {
+    \fp_set:Nn \l__datatool_tmpa_fp { sqrt ( #2 ) }
+    \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+  }
+  {
+    \fp_set:Nn \l__datatool_tmpa_fp { ( #2 ) ^ ( 1 / ( #3 ) ) }
+    \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+  }
+}
+\NewDocumentCommand \dtlround { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { round ( #2, #3 ) }
+  \tl_set:Nx #1 { \fp_to_decimal:N \l__datatool_tmpa_fp }
+  \datatool_pad_trailing_zeros:Nn #1 { #3 }
+}
+\NewDocumentCommand \dtltrunc { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { trunc ( #2, #3 ) }
+  \tl_set:Nx #1 { \fp_to_decimal:N \l__datatool_tmpa_fp }
+  \datatool_pad_trailing_zeros:Nn #1 { #3 }
+}
+\NewDocumentCommand \dtlclip { m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { #2 }
+  \tl_set:Nx #1 { \fp_to_decimal:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlmin { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { min ( #2, #3 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlminall { m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { min ( #2 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlmax { m m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { max ( #2, #3 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlmaxall { m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { max ( #2 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlabs { m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { abs ( #2 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlneg {m m }
+{
+  \fp_set:Nn \l__datatool_tmpa_fp { - ( #2 ) }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlmeanforall { m m }
+{
+  \fp_zero:N \l__datatool_total_fp
+  \int_zero:N \l__datatool_count_int
+  \exp_args:No \clist_map_inline:nn { #2 }
+    {
+      \int_incr:N \l__datatool_count_int
+      \fp_add:Nn \l__datatool_total_fp { ##1 }
+    }
+  \fp_set:Nn \l__datatool_mean_fp
+    { \l__datatool_total_fp / \l__datatool_count_int }
+  \tl_set:Nx #1 { \fp_use:N \l__datatool_mean_fp }
+}
+\NewDocumentCommand \dtlvarianceforall { o m m }
+{
+  \IfNoValueTF { #1 }
+  {
+    \fp_zero:N \l__datatool_total_fp
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \int_incr:N \l__datatool_count_int
+        \fp_add:Nn \l__datatool_total_fp { ##1 }
+      }
+    \fp_set:Nn \l__datatool_mean_fp
+      { \l__datatool_total_fp / \l__datatool_count_int }
+    \fp_zero:N \l__datatool_total_fp
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \fp_set:Nn \l__datatool_tmpa_fp
+          { ##1 - \l__datatool_mean_fp }
+        \fp_add:Nn \l__datatool_total_fp
+          { \l__datatool_tmpa_fp  * \l__datatool_tmpa_fp }
+      }
+  }
+  {
+    \fp_set:Nn { \l__datatool_mean_fp } { #1 }
+    \fp_zero:N \l__datatool_total_fp
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \int_incr:N \l__datatool_count_int
+        \fp_set:Nn \l__datatool_tmpa_fp
+          { ##1 - \l__datatool_mean_fp }
+        \fp_add:Nn \l__datatool_total_fp
+          { \l__datatool_tmpa_fp  * \l__datatool_tmpa_fp }
+      }
+  }
+  \fp_set:Nn \l__datatool_tmpa_fp
+    { \l__datatool_total_fp / \l__datatool_count_int }
+  \tl_set:Nx #2 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\NewDocumentCommand \dtlsdforall { o m m }
+{
+  \IfNoValueTF { #1 }
+  {
+    \fp_zero:N \l__datatool_total_fp
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \int_incr:N \l__datatool_count_int
+        \fp_add:Nn \l__datatool_total_fp { ##1 }
+      }
+    \fp_set:Nn \l__datatool_mean_fp
+      { \l__datatool_total_fp / \l__datatool_count_int }
+    \fp_zero:N \l__datatool_total_fp
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \fp_set:Nn \l__datatool_tmpa_fp
+          { ##1 - \l__datatool_mean_fp }
+        \fp_add:Nn \l__datatool_total_fp
+          { \l__datatool_tmpa_fp  * \l__datatool_tmpa_fp }
+      }
+  }
+  {
+    \fp_set:Nn \l__datatool_mean_fp { #1 }
+    \fp_zero:N \l__datatool_total_fp
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+      {
+        \int_incr:N \l__datatool_count_int
+        \fp_set:Nn \l__datatool_tmpa_fp { ##1 - \l__datatool_mean_fp }
+        \fp_add:Nn \l__datatool_total_fp
+         { \l__datatool_tmpa_fp  * \l__datatool_tmpa_fp }
+      }
+  }
+  \fp_set:Nn \l__datatool_tmpa_fp
+    { sqrt ( \l__datatool_total_fp / \l__datatool_count_int ) }
+  \tl_set:Nx #2 { \fp_use:N \l__datatool_tmpa_fp }
+}
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `datatool-l3fp.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-l3fp.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-latin1.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-latin1.ldf	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-latin1.ldf	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,57 @@
+%%
+%% This is file `datatool-latin1.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-latin1.ldf,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-latin1.ldf}[2025/03/05 v3.0.1 (NLCT)]
+\ExplSyntaxOn
+\datatool_set_currencysign_from_charcode:ne
+  { cent } { "A2 }
+\datatool_set_currencysign_from_charcode:nn
+  { pound } { "A3 }
+\datatool_set_currencysign_from_charcode:nn
+  { currency } { "A4 }
+\datatool_set_currencysign_from_charcode:nn
+  { yen } { "A5 }
+\datatool_set_symbol_from_charcode:nn
+  { middot } { "B7 }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `datatool-latin1.ldf'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-latin1.ldf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-lua.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-lua.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-lua.def	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,230 @@
+%%
+%% This is file `datatool-lua.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-lua.def,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-lua.def}[2025/03/05 v3.0.1 (NLCT)]
+\newcommand*{\dtlifnumeq}[4]{%
+  \ifnum\directlua{if #1==#2 then tex.print(1) else tex.print(0) end}=1
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumlt}[4]{%
+  \ifnum\directlua{if #1<#2 then tex.print(1) else tex.print(0) end}=1
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumgt}[4]{%
+  \ifnum\directlua{if #1>#2 then tex.print(1) else tex.print(0) end}=1
+   #3%
+  \else
+   #4%
+  \fi
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+  \ifnum\directlua{if #2 < #1 and #1 < #3 then tex.print(1) else tex.print(0) end}=1
+   #4%
+  \else
+   #5%
+  \fi
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+  \ifnum\directlua{if #2 <= #1 and #1 <= #3 then tex.print(1) else tex.print(0) end}=1
+   #4%
+  \else
+   #5%
+  \fi
+}
+\NewDocumentCommand\dtladd{mmm}{%
+  \edef#1{\directlua{ tex.print(#2+(#3)) }}%
+}
+\NewDocumentCommand\dtladdall{mm}{%
+  \edef#1{\directlua{
+    x = 0;
+    array = { #2 };
+    for key,val in ipairs(array) do
+     x = x + val;
+    end
+    tex.print(x);
+  }}%
+}
+\NewDocumentCommand\dtlsub{mmm}{%
+  \edef#1{\directlua{ tex.print(#2-(#3)) }}%
+}
+\NewDocumentCommand\dtlmul{mmm}{%
+  \edef#1{\directlua{ tex.print(#2*#3) }}%
+}
+\NewDocumentCommand\dtldiv{mmm}{%
+  \edef#1{\directlua{ tex.print(#2/#3) }}%
+}
+\NewDocumentCommand\dtlsqrt{mm}{%
+  \edef#1{\directlua{ tex.print(math.sqrt(#2)) }}%
+}
+\NewDocumentCommand\dtlroot{mmm}{%
+  \edef#1{\directlua{ tex.print((#2)^(1/(#3))) }}%
+}
+\NewDocumentCommand\dtlround{mmm}{%
+  \edef#1{"\@percentchar0.\number#3f", #2}%
+  \edef#1{\directlua{ tex.print(string.format(#1)) }}%
+}
+\NewDocumentCommand\dtltrunc{mmm}{%
+ \edef#1{\directlua{
+   local m = 10^(#3);
+   tex.print(string.format("\@percentchar.#3f", math.floor(#2 * m)/m))
+ }}%
+}
+\NewDocumentCommand\dtlclip{mm}{%
+ \edef#1{\directlua{
+  local s = "#2";
+  tex.print(s:match("^(\@percentchar d*\@percentchar.?0?\@percentchar d-)0*$"))
+ }}%
+}
+\NewDocumentCommand\dtlmin{mmm}{%
+ \edef#1{\directlua{tex.print(math.min(#2,#3))}}%
+}
+\NewDocumentCommand\dtlminall{mm}{%
+ \edef#1{\directlua{tex.print(math.min(#2))}}%
+}
+\NewDocumentCommand\dtlmax{mmm}{%
+ \edef#1{\directlua{tex.print(math.max(#2,#3))}}%
+}
+\NewDocumentCommand\dtlmaxall{mm}{%
+ \edef#1{\directlua{tex.print(math.max(#2))}}%
+}
+\NewDocumentCommand\dtlabs{mm}{%
+ \edef#1{\directlua{tex.print(math.abs(#2))}}%
+}
+\NewDocumentCommand\dtlneg{mm}{%
+ \edef#1{\directlua{tex.print(-(#2))}}%
+}
+\NewDocumentCommand\dtlmeanforall{mm}{%
+  \edef#1{\directlua{
+    x = 0;
+    n = 0;
+    array = { #2 };
+    for key,val in ipairs(array) do
+     n = n + 1;
+     x = x + val;
+    end
+    tex.print(x/n);
+  }}%
+}
+\NewDocumentCommand \dtlvarianceforall { o m m }
+{%
+  \IfNoValueTF{#1}%
+  {%
+     \edef#2{\directlua{
+       n = 0;
+       mean = 0;
+       array = { #3 };
+       for key,val in ipairs(array) do
+        n = n + 1;
+        mean = mean + val;
+       end
+       mean = mean / n;
+       variance = 0;
+       for key,val in ipairs(array) do
+        x = val - mean;
+        variance = variance + x * x;
+       end
+       variance = variance / n;
+       tex.print(variance);
+     }}%
+  }%
+  {%
+     \edef#2{\directlua{
+       n = 0;
+       mean = #1;
+       array = { #3 };
+       variance = 0;
+       for key,val in ipairs(array) do
+        n = n + 1;
+        x = val - mean;
+        variance = variance + x * x;
+       end
+       variance = variance / n;
+       tex.print(variance);
+     }}%
+  }%
+}
+\NewDocumentCommand \dtlsdforall { o m m }
+{%
+  \IfNoValueTF{#1}%
+  {%
+     \edef#2{\directlua{
+       n = 0;
+       mean = 0;
+       array = { #3 };
+       for key,val in ipairs(array) do
+        n = n + 1;
+        mean = mean + val;
+       end
+       mean = mean / n;
+       variance = 0;
+       for key,val in ipairs(array) do
+        x = val - mean;
+        variance = variance + x * x;
+       end
+       variance = variance / n;
+       tex.print(math.sqrt(variance));
+     }}%
+  }%
+  {%
+     \edef#2{\directlua{
+       n = 0;
+       mean = #1;
+       array = { #3 };
+       variance = 0;
+       for key,val in ipairs(array) do
+        n = n + 1;
+        x = val - mean;
+        variance = variance + x * x;
+       end
+       variance = variance / n;
+       tex.print(math.sqrt(variance));
+     }}%
+  }%
+}
+\endinput
+%%
+%% End of file `datatool-lua.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-lua.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,180 @@
+%%
+%% This is file `datatool-pgfmath-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-pgfmath-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datatool-pgfmath}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{xkeyval}
+\RequirePackage{pgfrcs,pgfkeys,pgfmath}
+\ProcessOptionsX
+\providecommand*{\@dtl at mathprocessor}{pgfmath}
+\newcommand*{\dtlifnumeq}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1==\number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\RequirePackage{datatool-base}[=v2.32]
+\newcommand*{\dtlifnumlt}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1 < \number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumgt}[4]{%
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \pgfmathifthenelse{\number0#1 > \number0#2}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumopenbetween}[5]{%
+  \def\@dtl at truepart{#4}%
+  \def\@dtl at falsepart{#5}%
+  \pgfmathifthenelse
+    {(\number0#2 < \number0#1) && (\number0#1 < \number0#3)}%
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtlifnumclosedbetween}[5]{%
+  \def\@dtl at truepart{#4}%
+  \def\@dtl at falsepart{#5}%
+  \pgfmathifthenelse
+    {(\number0#2 <= \number0#1) && (\number0#1 <= \number0#3)}
+    {"\noexpand\@dtl at truepart"}{"\noexpand\@dtl at falsepart"}%
+  \pgfmathresult
+}
+\newcommand*{\dtladd}[3]{%
+  \pgfmathadd{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlsub}[3]{%
+  \pgfmathsubtract{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlmul}[3]{%
+  \pgfmathmultiply{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtldiv}[3]{%
+  \pgfmathdivide{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlroot}[2]{%
+  \pgfmathsqrt{#2}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlround}[3]{%
+  \ifnum#3=0\relax
+    \pgfmathparse{int(round(#2))}%
+    \let#1\pgfmathresult
+  \else
+    \pgfmathparse{int(10^#3)}%
+    \let\dtl at tmpshift\pgfmathresult
+    \pgfmathparse{int(floor(#2))}%
+    \let\dtl at int@round\pgfmathresult
+    \pgfmathparse{int(round((#2-\dtl at int@round) * \dtl at tmpshift))}%
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@round
+      +\number0\@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\newcommand*{\@dtl at gatherintfrac}[1]{%
+  \ifx\relax#1\relax
+  \else
+    \advance\@dtl at tmpcount by -1\relax
+    \ifnum\@dtl at tmpcount<0\relax
+      \edef\@dtl at fracpart{\@dtl at fracpart#1}%
+    \else
+      \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \fi
+    \expandafter\@dtl at gatherintfrac
+  \fi
+}
+\newcommand*{\dtltrunc}[3]{%
+  \ifnum#3=0\relax
+    \pgfmathparse{int(floor(#2))}%
+    \let#1\pgfmathresult
+  \else
+    \pgfmathparse{int(10^#3)}%
+    \let\dtl at tmpshift\pgfmathresult
+    \pgfmathparse{int(floor(#2))}%
+    \let\dtl at int@trunc\pgfmathresult
+    \pgfmathparse{int(floor((#2-\dtl at int@trunc) * \dtl at tmpshift))}%
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@trunc
+      +\number0\@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\newcommand*{\dtlclip}[2]{%
+ \edef#1{#2}%
+}
+\newcommand*{\dtlmin}[3]{%
+  \pgfmathmin{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlmax}[3]{%
+  \pgfmathmax{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlabs}[2]{%
+  \pgfmathabs{#2}%
+  \let#1\pgfmathresult
+}
+\newcommand*{\dtlneg}[2]{%
+  \pgfmathmul{-1}{#2}%
+  \let#1\pgfmathresult
+}
+\endinput
+%%
+%% End of file `datatool-pgfmath-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.def	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,323 @@
+%%
+%% This is file `datatool-pgfmath.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-pgfmath.def,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-pgfmath.def}[2025/03/05 v3.0.1 (NLCT)]
+\RequirePackage{pgfrcs,pgfkeys,pgfmath}
+\ExplSyntaxOn
+\NewDocumentCommand \dtlifnumeq { m m m m }
+{
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \exp_args:Nx \pgfmathifthenelse {#1==#2}%
+    {"\exp_not:N \@dtl at truepart"}{"\exp_not:N \@dtl at falsepart"}%
+  \pgfmathresult
+}
+\NewDocumentCommand \dtlifnumlt { m m m m }
+{
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \exp_args:Nx \pgfmathifthenelse {#1 < #2}%
+    {"\exp_not:N \@dtl at truepart"}{"\exp_not:N \@dtl at falsepart"}%
+  \pgfmathresult
+}
+\NewDocumentCommand \dtlifnumgt { m m m m }
+{
+  \def\@dtl at truepart{#3}%
+  \def\@dtl at falsepart{#4}%
+  \exp_args:Nx \pgfmathifthenelse {#1 > #2}%
+    {"\exp_not:N \@dtl at truepart"}{"\exp_not:N \@dtl at falsepart"}%
+  \pgfmathresult
+}
+\NewDocumentCommand \dtlifnumopenbetween { m m m m m }
+{
+  \dtlifnumlt { #1 } { #3 }
+  { \dtlifnumgt { #1 } { #2 } { #4 } { #5 } }
+  { #5 }
+}
+\NewDocumentCommand \dtlifnumclosedbetween { m m m m m }
+{
+  \dtlifnumlt { #1 } { #2 }
+  { #5 }
+  { \dtlifnumgt { #1 } { #3 } { #5 } { #4 } }
+}
+\NewDocumentCommand \dtladd { m m m }
+{
+  \pgfmathadd{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtladdall { m m }
+{
+  \tl_set:Nn \pgfmathresult { 0 }
+  \exp_args:No \clist_map_inline:nn { #2 }
+  {
+    \pgfmathadd { \pgfmathresult } { ##1 }
+  }
+  \tl_set_eq:NN #1 \pgfmathresult
+}
+\NewDocumentCommand \dtlsub { m m m }
+{
+  \pgfmathsubtract{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlmul { m m m }
+{%
+  \pgfmathmultiply{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtldiv { m m m }
+{%
+  \pgfmathdivide{#2}{#3}%
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlsqrt { m m }
+{%
+  \pgfmathsqrt{#2}%
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlroot { m m m }
+{
+  \exp_args:Nx \tl_if_eq:nnTF { #3 } { 2 }
+  {
+    \exp_args:Nx \pgfmathsqrt { #2 }
+    \let#1\pgfmathresult
+  }
+  {
+    \exp_args:Nxx \pgfmathpow { #2 } { 1 / ( #3 ) }
+    \let#1\pgfmathresult
+  }
+}
+\NewDocumentCommand{\dtlround}{mmm}{%
+  \ifnum#3=0\relax
+    \exp_args:Nx \pgfmathparse { int( round ( #2 ) ) }
+    \let#1\pgfmathresult
+  \else
+    \exp_args:Nx \pgfmathparse { int ( 10 \exp_not:N ^ #3 )}
+    \let\dtl at tmpshift\pgfmathresult
+    \exp_args:Nx \pgfmathparse { int ( floor ( #2 ) ) }%
+    \let\dtl at int@round\pgfmathresult
+    \exp_args:Nx \pgfmathparse
+      { int ( round ( ( #2 - \dtl at int@round ) * \dtl at tmpshift ) ) }
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \tl_if_empty:NT \@dtl at intpart { \tl_set:Nn \@dtl at intpart { 0 } }
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@round + \@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\newcommand*{\@dtl at gatherintfrac}[1]{%
+  \ifx\relax#1\relax
+  \else
+    \advance\@dtl at tmpcount by -1\relax
+    \ifnum\@dtl at tmpcount<0\relax
+      \edef\@dtl at fracpart{\@dtl at fracpart#1}%
+    \else
+      \edef\@dtl at intpart{\@dtl at intpart#1}%
+    \fi
+    \expandafter\@dtl at gatherintfrac
+  \fi
+}
+\NewDocumentCommand \dtltrunc { m m m }
+{
+  \ifnum#3=0\relax
+    \exp_args:Nx \pgfmathparse { int ( floor ( #2 ) ) }%
+    \let#1\pgfmathresult
+  \else
+    \exp_args:Nx \pgfmathparse { int ( 10 \exp_not:N ^ #3 ) }
+    \let\dtl at tmpshift\pgfmathresult
+    \exp_args:Nx \pgfmathparse { int ( floor ( #2 ) ) }
+    \let\dtl at int@trunc\pgfmathresult
+    \exp_args:Nx \pgfmathparse
+     { int ( floor ( ( #2 - \dtl at int@trunc ) * \dtl at tmpshift ) ) }
+    \@dtl at tmpcount=0\relax
+    \expandafter\@dtl at countdigits\pgfmathresult.\relax
+    \advance\@dtl at tmpcount by -#3\relax
+    \def\@dtl at intpart{}%
+    \def\@dtl at fracpart{}%
+    \expandafter\@dtl at gatherintfrac\pgfmathresult\relax
+    \tl_if_empty:NT \@dtl at intpart { \tl_set:Nn \@dtl at intpart { 0 } }
+    \edef\@dtl at intpart{\number\numexpr\dtl at int@trunc
+      + \@dtl at intpart}%
+    \edef#1{\@dtl at intpart.\@dtl at fracpart}%
+  \fi
+}
+\NewDocumentCommand \dtlclip { m m }
+{
+  \fp_set:Nn { \l__datatool_tmpa_fp } { #2 }
+  \tl_set:Nx #1 { \fp_use:N { \l__datatool_tmpa_fp } }
+}
+\NewDocumentCommand \dtlmin { m m m }
+{
+  \exp_args:Nxx \pgfmathmin { #2 } { #3 }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlminall { m m }
+{
+  \exp_args:Nx \pgfmathmin { #2 } { }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlmax { m m m }
+{
+  \exp_args:Nx \pgfmathmax { #2 } { #3 }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlmaxall { m m }
+{
+  \exp_args:Nx \pgfmathmax { #2 } { }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlabs { m m }
+{
+  \exp_args:Nx \pgfmathabs { #2 }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlneg { m m }
+{
+  \exp_args:Nx \pgfmathneg { #2 }
+  \let#1\pgfmathresult
+}
+\NewDocumentCommand \dtlmeanforall { m m }
+{
+  \tl_set:Nn \pgfmathresult { 0 }
+  \int_zero:N \l__datatool_count_int
+  \exp_args:No \clist_map_inline:nn { #2 }
+  {
+    \int_incr:N \l__datatool_count_int
+    \exp_args:Nxx \pgfmathadd { \pgfmathresult } { ##1 }
+  }
+  \exp_args:Nxx \pgfmathdivide
+    { \pgfmathresult }
+    { \int_use:N \l__datatool_count_int }
+  \tl_set_eq:NN #1 \pgfmathresult
+}
+\NewDocumentCommand {\dtlvarianceforall} { o m m }
+{%
+  \IfNoValueTF { #1 }
+  {
+    \tl_set:Nn \pgfmathresult { 0 }
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \int_incr:N \l__datatool_count_int
+      \exp_args:Nxx \pgfmathadd { \pgfmathresult } { ##1 }
+    }
+    \exp_args:Nxx \pgfmathdivide
+      { \pgfmathresult }
+      { \int_use:N \l__datatool_count_int }
+    \tl_set_eq:NN \@dtl at mean \pgfmathresult
+    \tl_set:Nn #2 { 0 }
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \exp_args:Nxx \pgfmathsubtract { ##1 } { \@dtl at mean }
+      \exp_args:Nxx \pgfmathmultiply { \pgfmathresult } { \pgfmathresult }
+      \exp_args:Nxx \pgfmathadd { #2 } { \pgfmathresult }
+      \tl_set_eq:NN #2 \pgfmathresult
+    }
+  }
+  {
+    \tl_set:Nx \@dtl at mean { #1 }
+    \int_zero:N \l__datatool_count_int
+    \tl_set:Nn #2 { 0 }
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \int_incr:N \l__datatool_count_int
+      \exp_args:Nxx \pgfmathsubtract { ##1 } { \@dtl at mean }
+      \exp_args:Nxx \pgfmathmultiply
+       { \pgfmathresult } { \pgfmathresult }
+      \exp_args:Nxx \pgfmathadd { #2 } { \pgfmathresult }
+      \tl_set_eq:NN #2 \pgfmathresult
+    }
+  }
+  \exp_args:Nxx \pgfmathdivide
+    { #2 }
+    { \int_use:N \l__datatool_count_int }
+  \tl_set_eq:NN #2 \pgfmathresult
+}
+\NewDocumentCommand{\dtlsdforall} { o m m }
+{%
+  \IfNoValueTF{#1}%
+  {%
+    \tl_set:Nn \pgfmathresult { 0 }
+    \int_zero:N \l__datatool_count_int
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \int_incr:N \l__datatool_count_int
+      \exp_args:Nxx \pgfmathadd { \pgfmathresult } { ##1 }
+    }
+    \exp_args:Nxx \pgfmathdivide
+      { \pgfmathresult }
+      { \int_use:N \l__datatool_count_int }
+    \tl_set_eq:NN \@dtl at mean \pgfmathresult
+    \tl_set:Nn #2 { 0 }
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \exp_args:Nxx \pgfmathsubtract { ##1 } { \@dtl at mean }
+      \exp_args:Nxx \pgfmathmultiply { \pgfmathresult } { \pgfmathresult }
+      \exp_args:Nxx \pgfmathadd { #2 } { \pgfmathresult }
+      \tl_set_eq:NN #2 \pgfmathresult
+    }
+  }
+  {
+    \tl_set:Nn \@dtl at mean { #1 }
+    \int_zero:N \l__datatool_count_int
+    \tl_set:Nn #2 { 0 }
+    \exp_args:No \clist_map_inline:nn { #3 }
+    {
+      \int_incr:N \l__datatool_count_int
+      \exp_args:Nxx \pgfmathsubtract { ##1 } { \@dtl at mean }
+      \exp_args:Nxx \pgfmathmultiply
+        { \pgfmathresult } { \pgfmathresult }
+      \exp_args:Nxx \pgfmathadd { #2 } { \pgfmathresult }
+      \tl_set_eq:NN #2 \pgfmathresult
+    }
+  }
+  \exp_args:Nxx \pgfmathdivide
+     { #2 } { \int_use:N \l__datatool_count_int }
+  \exp_args:Nx \pgfmathsqrt { \pgfmathresult }
+  \tl_set_eq:NN #2 \pgfmathresult
+}
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `datatool-pgfmath.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-pgfmath-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datatool-pgfmath}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datatool-pgfmath}[2025/03/05 v3.0.1 (NLCT)]
 \PackageWarning{datatool-pgfmath}%
 {datatool-pgfmath.sty deprecated. Use
 \string\usepackage[math=pgfmath]{datatool} instead or

Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-undetermined.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-undetermined.ldf	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-undetermined.ldf	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,52 @@
+%%
+%% This is file `datatool-undetermined.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-undetermined.ldf,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\TrackLangProvidesResource{undetermined}[2025/03/05 v3.0.1]
+\ExplSyntaxOn
+\newcommand \DTLundLocaleHook
+ {
+  \DTLresetLanguage
+  \tl_set:Nn \l_datatool_current_language_tl { und }
+ }
+\ExplSyntaxOff
+\TrackLangAddToCaptions{\DTLundLocaleHook}
+\endinput
+%%
+%% End of file `datatool-undetermined.ldf'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-undetermined.ldf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/datatool/datatool-utf8.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool-utf8.ldf	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool-utf8.ldf	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,88 @@
+%%
+%% This is file `datatool-utf8.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `datatool-utf8.ldf,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{datatool-utf8.ldf}[2025/03/05 v3.0.1 (NLCT)]
+\ExplSyntaxOn
+\datatool_set_currencysign:nn { cent } { ¢ }
+\datatool_set_currencysign:nn { pound } { £ }
+\datatool_set_currencysign:nn { currency } { ¤ }
+\datatool_set_currencysign:nn { yen } { ¥ }
+\datatool_set_symbol:nn { middot } { · }
+\datatool_set_currencysign:nn { florin } { ƒ }
+\datatool_set_currencysign:nn { baht } { ฿ }
+\datatool_set_currencysign:nn { ecu } { ₠ }
+\datatool_set_currencysign:nn { colonsign } { ₡ }
+\datatool_set_currencysign:nn { cruzerio } { ₢ }
+\datatool_set_currencysign:nn { frenchfranc } { ₣ }
+\datatool_set_currencysign:nn { lira } { ₤ }
+\datatool_set_currencysign:nn { mill } { ₥ }
+\datatool_set_currencysign:nn { naira } { ₦ }
+\datatool_set_currencysign:nn { peseta } { ₧ }
+\datatool_set_currencysign:nn { rupee } { ₨ }
+\datatool_set_currencysign:nn { won } { ₩ }
+\datatool_set_currencysign:nn { shekel } { ₪ }
+\datatool_set_currencysign:nn { dong } { ₫ }
+\datatool_set_currencysign:nn { euro } { € }
+\datatool_set_currencysign:nn { kip } { ₭ }
+\datatool_set_currencysign:nn { tugrik } { ₮ }
+\datatool_set_currencysign:nn { drachma } { ₯ }
+\datatool_set_currencysign:nn { germanpenny } { ₰ }
+\datatool_set_currencysign:nn { peso } { ₱ }
+\datatool_set_currencysign:nn { guarani } { ₲ }
+\datatool_set_currencysign:nn { austral } { ₳ }
+\datatool_set_currencysign:nn { hryvnia } { ₴ }
+\datatool_set_currencysign:nn { cedi } { ₵ }
+\datatool_set_currencysign:nn { livretournois } { ₶ }
+\datatool_set_currencysign:nn { spesmilo } { Sm }
+\datatool_set_currencysign:nn { tenge } { ₸ }
+\datatool_set_currencysign:nn { indianrupee } { ₹ }
+\datatool_set_currencysign:nn { turkishlira } { ₺ }
+\datatool_set_currencysign:nn { nordicmark } { ₻ }
+\datatool_set_currencysign:nn { manat } { ₼ }
+\datatool_set_currencysign:nn { ruble } { ₽ }
+\datatool_set_currencysign:nn { lari } { ₾ }
+\datatool_set_currencysign:nn { bitcoin } { ₿ }
+\datatool_set_currencysign:nn { som } { ⃀ }
+\regex_set:Nn \l_datatool_apos_regex { \' | ’ }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `datatool-utf8.ldf'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/datatool-utf8.ldf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/datatool.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/datatool.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/datatool.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{datatool-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{datatool}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{datatool}[2025/03/05 v3.0.1 (NLCT)]
 \RequirePackage{ifthen}
 \RequirePackage{xfor}
 \RequirePackage{etoolbox}

Added: trunk/Master/texmf-dist/tex/latex/datatool/person-2019-09-27.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/person-2019-09-27.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/datatool/person-2019-09-27.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -0,0 +1,633 @@
+%%
+%% This is file `person-2019-09-27.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datatool.dtx  (with options: `person-2019-09-27.sty,package')
+%% 
+%%  datatool.dtx
+%%  Copyright 2025 Nicola Talbot
+%% 
+%%  This work may be distributed and/or modified under the
+%%  conditions of the LaTeX Project Public License, either version 1.3
+%%  of this license or (at your option) any later version.
+%%  The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%%  and version 1.3 or later is part of all distributions of LaTeX
+%%  version 2005/12/01 or later.
+%% 
+%%  This work has the LPPL maintenance status `maintained'.
+%% 
+%%  The Current Maintainer of this work is Nicola Talbot.
+%% 
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{person}[2019/09/27 v2.32 (NLCT)]
+\RequirePackage{ifthen}
+\RequirePackage{datatool}[=v2.32]
+\newcounter{people}
+\newcounter{person}
+\newcommand*{\@people at list}{,}
+\newcommand*{\@get at firstperson}[1]{%
+  \expandafter\@@get at firstperson\@people at list,\@nil{#1}}
+  \def\@@get at firstperson,#1,#2\@nil#3{%
+  \def#3{#1}%
+}
+\newcommand*{\malelabels}{male,Male,MALE,M,m}
+\newcommand*{\addmalelabel}[1]{%
+  \expandafter\@dtl at toksA\expandafter{\malelabels}%
+  \expandafter\@dtl at toksB\expandafter{#1}%
+  \edef\malelabels{\the\@dtl at toksA,\the\@dtl at toksB}%
+}
+\newcommand*{\addfemalelabel}[1]{%
+  \expandafter\@dtl at toksA\expandafter{\femalelabels}%
+  \expandafter\@dtl at toksB\expandafter{#1}%
+  \edef\femalelabels{\the\@dtl at toksA,\the\@dtl at toksB}%
+}
+\newcommand*{\femalelabels}{female,Female,FEMALE,F,f}
+\newcommand{\ifmalelabel}[3]{%
+   \expandafter\DTLifinlist\expandafter{#1}{\malelabels}{#2}{#3}%
+}
+\newcommand{\iffemalelabel}[3]{%
+   \expandafter\DTLifinlist\expandafter{#1}{\femalelabels}{#2}{#3}%
+}
+\newcommand*{\newperson}[4][anon]{%
+  \@ifundefined{person@#1 at name}%
+  {%
+    \ifmalelabel{#4}%
+    {%
+      \expandafter\gdef\csname person@#1 at gender\endcsname{male}%
+    }%
+    {%
+      \iffemalelabel{#4}%
+      {%
+        \expandafter\gdef\csname person@#1 at gender\endcsname{female}%
+      }%
+      {%
+         \PackageError{person}{Unknown gender `#4' for person
+         `#1'}{Allowed gender labels are: \malelabels\space or
+         \femalelabels}%
+         \@namedef{person@#1 at gender}{other}%
+      }%
+    }%
+    \expandafter
+      \protected at xdef\csname person@#1 at fullname\endcsname{#2}%
+    \expandafter
+      \protected at xdef\csname person@#1 at name\endcsname{#3}%
+    \protected at xdef\@people at list{\@people at list#1,}%
+    \stepcounter{people}%
+  }%
+  {%
+    \PackageError{person}{Person `#1' has already been defined}{}%
+  }%
+}
+\newcommand*{\removeperson}[1][anon]{%
+  \edef\@person at label{#1}%
+  \expandafter\@removeperson\expandafter{\@person at label}%
+}
+\newcommand*{\@removeperson}[1]{%
+   \ifpersonexists{#1}%
+   {%
+     \def\@remove at person##1,#1,##2\@nil{%
+       \def\@prsn at pre{##1}\def\@prsn at post{##2}}%
+     \expandafter\@remove at person\@people at list\@nil
+     \xdef\@people at list{\@prsn at pre,\@prsn at post}%
+     \addtocounter{people}{-1}%
+     \expandafter\global\expandafter
+       \let\csname person@#1 at name\endcsname\undefined
+     \expandafter\global\expandafter
+       \let\csname person@#1 at fullname\endcsname\undefined
+     \expandafter\global\expandafter
+       \let\csname person@#1 at gender\endcsname\undefined
+   }%
+   {%
+     \PackageError{person}{Can't remove person `#1': no such
+     person}{}%
+   }%
+}
+\newcommand*{\removepeople}[1]{%
+  \@for\@thisperson:=#1\do{%
+    \ifx\@thisperson\@empty
+    \else
+      \expandafter\removeperson\expandafter[\@thisperson]%
+    \fi
+  }%
+}
+\newcommand*{\removeallpeople}{%
+  \@for\@thisperson:=\@people at list\do{%
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @name\endcsname\undefined
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @fullname\endcsname\undefined
+    \expandafter\global\expandafter
+      \let\csname person@\@thisperson @gender\endcsname\undefined
+  }%
+  \setcounter{people}{0}%
+  \gdef\@people at list{,}%
+}
+\newcommand{\ifpersonexists}[3]{%
+  \@ifundefined{person@#1 at name}{#3}{#2}%
+}
+\newcommand{\ifmale}[3]{%
+   \ifpersonexists{#1}%
+   {%
+      \edef\@gender{\csname person@#1 at gender\endcsname}%
+      \ifx\@gender\@male at label
+        #2%
+      \else
+        #3%
+      \fi
+   }%
+   {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+   }%
+}
+\def\@male at label{male}
+\newcommand{\ifallmale}[3][\@people at list]{%
+  \@for\@thisperson:=#1\do{%
+    \ifpersonexists{\@thisperson}%
+    {%
+      \edef\@gender{\csname person@\@thisperson @gender\endcsname}%
+      \ifx\@gender\@male at label
+      \else
+        \@endfortrue
+      \fi
+    }%
+    {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+    }%
+  }%
+  \if at endfor
+    #3%
+  \else
+    #2%
+  \fi
+}
+\newcommand{\iffemale}[3]{%
+   \ifpersonexists{#1}%
+   {%
+      \edef\@gender{\csname person@#1 at gender\endcsname}%
+      \ifx\@gender\@female at label
+        #2%
+      \else
+        #3%
+      \fi
+   }%
+   {%
+      \PackageError{person}{Person `#1' doesn't exist.}{}%
+   }%
+}
+\def\@female at label{female}
+\newcommand{\ifallfemale}[3][\@people at list]{%
+  \@for\@thisperson:=#1\do{%
+    \edef\@gender{\csname person@\@thisperson @gender\endcsname}%
+    \ifx\@gender\@female at label
+    \else
+      \@endfortrue
+    \fi
+  }%
+  \if at endfor
+    #3%
+  \else
+    #2%
+  \fi
+}
+\def\foreachperson(#1,#2,#3,#4)#5{%
+  \ifx#5\in
+    \def\@do at foreachperson{\@foreachperson(#1,#2,#3,#4)#5}%
+  \else
+    \def\@do at foreachperson{%
+      \@foreachperson(#1,#2,#3,#4)\in\@people at list#5}%
+  \fi
+  \@do at foreachperson
+}
+\long\def\@foreachperson(#1,#2,#3,#4)\in#5\do#6{%
+  \@for#4:=#5\do{%
+    \ifx#4\@empty
+    \else
+       \ifpersonexists{#4}%
+       {%
+         \expandafter
+           \let\expandafter#1\csname person@#4 at name\endcsname
+         \expandafter
+           \let\expandafter#2\csname person@#4 at fullname\endcsname
+         \expandafter
+           \let\expandafter#3\csname person@#4 at gender\endcsname
+         \ifx#3\@male at label
+           \let#3\malename
+         \else
+           \ifx#3\@female at label
+             \let#3\femalename
+           \fi
+         \fi
+         #6%
+       }%
+       {%
+         \PackageError{person}{Person `#4' doesn't exist}{}%
+       }%
+     \fi
+  }%
+}
+\newcommand*{\malepronoun}{he}
+\newcommand*{\femalepronoun}{she}
+\newcommand*{\pluralpronoun}{they}
+\newcommand*{\maleobjpronoun}{him}
+\newcommand*{\femaleobjpronoun}{her}
+\newcommand*{\pluralobjpronoun}{them}
+\newcommand*{\malepossadj}{his}
+\newcommand*{\femalepossadj}{her}
+\newcommand*{\pluralpossadj}{their}
+\newcommand*{\maleposspronoun}{his}
+\newcommand*{\femaleposspronoun}{hers}
+\newcommand*{\pluralposspronoun}{theirs}
+\newcommand*{\malechild}{son}
+\newcommand*{\femalechild}{daughter}
+\newcommand*{\pluralchild}{children}
+\newcommand*{\malechildren}{sons}
+\newcommand*{\femalechildren}{daughters}
+\newcommand*{\maleparent}{father}
+\newcommand*{\femaleparent}{mother}
+\newcommand*{\pluralparent}{parents}
+\newcommand*{\malesibling}{brother}
+\newcommand*{\femalesibling}{sister}
+\newcommand*{\pluralsibling}{siblings}
+\newcommand*{\malesiblings}{brothers}
+\newcommand*{\femalesiblings}{sisters}
+\providecommand*{\andname}{and}
+\newcommand*{\malename}{male}
+\newcommand*{\femalename}{female}
+\newcommand*{\personsep}{, }
+\newcommand*{\personlastsep}{\space\andname\space}
+\newcommand*{\twopeoplesep}{\space\andname\space}
+\newcommand*{\personfullname}[1][anon]{%
+  \@ifundefined{person@#1 at fullname}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \csname person@#1 at fullname\endcsname
+  }%
+}
+\newcommand*{\peoplefullname}{%
+  \setcounter{person}{1}%
+  \@for\@thisperson:=\@people at list\do{%
+    \ifthenelse{\equal{\@thisperson}{}}%
+    {}%
+    {%
+      \personfullname[\@thisperson]%
+      \stepcounter{person}%
+      \ifnum\c at people=1\relax
+      \else
+        \ifnum\c at person=\c at people
+          \ifnum\c at people=2\relax
+            \twopeoplesep
+          \else
+            \personlastsep
+          \fi
+        \else
+           \ifnum\c at person<\c at people
+             \personsep
+           \fi
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\personname}[1][anon]{%
+  \@ifundefined{person@#1 at name}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \csname person@#1 at name\endcsname
+  }%
+}
+\newcommand*{\peoplename}{%
+  \setcounter{person}{1}%
+  \@for\@thisperson:=\@people at list\do{%
+    \ifthenelse{\equal{\@thisperson}{}}%
+    {}%
+    {%
+      \personname[\@thisperson]%
+      \stepcounter{person}%
+      \ifnum\c at people=1\relax
+      \else
+        \ifnum\c at person=\c at people
+          \ifnum\c at people=2\relax
+            \twopeoplesep
+          \else
+            \personlastsep
+          \fi
+        \else
+           \ifnum\c at person<\c at people
+             \personsep
+           \fi
+        \fi
+      \fi
+    }%
+  }%
+}
+\newcommand*{\personpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender pronoun\endcsname
+  }%
+}
+\newcommand*{\Personpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender pronoun\endcsname
+  }%
+}
+\newcommand*{\peoplepronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peoplepronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personobjpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender objpronoun\endcsname
+  }%
+}
+\newcommand*{\Personobjpronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender objpronoun\endcsname
+  }%
+}
+\newcommand*{\peopleobjpronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralobjpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personobjpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleobjpronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralobjpronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personobjpronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personpossadj}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender possadj\endcsname
+  }%
+}
+\newcommand*{\Personpossadj}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender possadj\endcsname
+  }%
+}
+\newcommand*{\peoplepossadj}{%
+  \ifnum\c at people>1\relax
+     \pluralpossadj
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personpossadj[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peoplepossadj}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralpossadj
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personpossadj[\@thisperson]%
+  \fi
+}
+\newcommand*{\personposspronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender posspronoun\endcsname
+  }%
+}
+\newcommand*{\Personposspronoun}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter
+    \MakeUppercase\csname\@gender posspronoun\endcsname
+  }%
+}
+\newcommand*{\peopleposspronoun}{%
+  \ifnum\c at people>1\relax
+     \pluralposspronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personposspronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleposspronoun}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralposspronoun
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personposspronoun[\@thisperson]%
+  \fi
+}
+\newcommand*{\personchild}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender child\endcsname
+  }%
+}
+\newcommand*{\Personchild}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+      \csname\@gender child\endcsname
+  }%
+}
+\newcommand*{\peoplechild}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\malechildren}%
+      {\ifallfemale{\femalechildren}{\pluralchild}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \personchild[\@thisperson]%
+ \fi
+}
+\newcommand*{\Peoplechild}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\expandafter\MakeUppercase\malechildren}%
+      {\ifallfemale
+        {\expandafter\MakeUppercase\femalechildren}
+        {\expandafter\MakeUppercase\pluralchild}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \Personchild[\@thisperson]%
+ \fi
+}
+\newcommand*{\personparent}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender parent\endcsname
+  }%
+}
+\newcommand*{\Personparent}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+       \csname\@gender parent\endcsname
+  }%
+}
+\newcommand*{\peopleparent}{%
+  \ifnum\c at people>1\relax
+     \pluralparent
+  \else
+     \@get at firstperson{\@thisperson}%
+     \personparent[\@thisperson]%
+  \fi
+}
+\newcommand*{\Peopleparent}{%
+  \ifnum\c at people>1\relax
+     \expandafter\MakeUppercase\pluralparent
+  \else
+     \@get at firstperson{\@thisperson}%
+     \Personparent[\@thisperson]%
+  \fi
+}
+\newcommand*{\personsibling}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \csname\@gender sibling\endcsname
+  }%
+}
+\newcommand*{\Personsibling}[1][anon]{%
+  \@ifundefined{person@#1 at gender}%
+  {%
+    \PackageError{person}{Person `#1' has not been defined}{}%
+  }%
+  {%
+    \edef\@gender{\csname person@#1 at gender\endcsname}%
+    \expandafter\expandafter\expandafter\MakeUppercase
+      \csname\@gender sibling\endcsname
+  }%
+}
+\newcommand*{\peoplesibling}{%
+  \ifnum\c at people>1\relax
+    \ifallmale
+      {\malesiblings}%
+      {\ifallfemale{\femalesiblings}{\pluralsibling}}%
+  \else
+    \@get at firstperson{\@thisperson}%
+    \personsibling[\@thisperson]%
+ \fi
+}
+\newcommand*{\persongender}[1]{%
+   \ifmale{#1}{\malename}{\femalename}%
+}
+\newcommand*{\getpersongender}[2]{%
+   \ifmale{#2}{\let#1\malename}{\let#1\femalename}%
+}
+\newcommand*{\getpersonname}[2]{%
+   \ifpersonexists{#2}%
+   {%
+     \expandafter\let\expandafter#1\csname person@#2 at name\endcsname
+   }%
+   {%
+      \PackageError{person}{Person `#2' doesn't exist}{}%
+   }%
+}
+\newcommand*{\getpersonfullname}[2]{%
+   \ifpersonexists{#2}%
+   {%
+     \expandafter
+       \let\expandafter#1\csname person@#2 at fullname\endcsname
+   }%
+   {%
+      \PackageError{person}{Person `#2' doesn't exist}{}%
+   }%
+}
+\endinput
+%%
+%% End of file `person-2019-09-27.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/datatool/person-2019-09-27.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/datatool/person.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/datatool/person.sty	2025-03-05 21:32:08 UTC (rev 74460)
+++ trunk/Master/texmf-dist/tex/latex/datatool/person.sty	2025-03-05 21:33:51 UTC (rev 74461)
@@ -21,7 +21,7 @@
 %% 
 %%  The Current Maintainer of this work is Nicola Talbot.
 %% 
-%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
+%%  This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-undetermined.ldf, datatool-latin1.ldf, datatool-utf8.ldf, datatool-l3fp.def, datatool-lua.def, datatool-fp.def, datatool-fp.sty, datatool-pgfmath.def, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst, databar-2019-09-27.sty, databib-2019-09-27.sty, datagidx-2019-09-27.sty, datapie-2019-09-27.sty, dataplot-2019-09-27.sty, datatool-2019-09-27.sty, datatool-base-2019-09-27.sty, datatool-fp-2019-09-27.sty, datatool-pgfmath-2019-09-27.sty, person-2019-09-27.sty.
 %% 
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -40,8 +40,8 @@
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
 \DeclareRelease{v2.32}{2019-09-27}{person-2019-09-27.sty}
-\DeclareCurrentRelease{v3.0}{2025-03-03}
-\ProvidesPackage{person}[2025/03/03 v3.0 (NLCT)]
+\DeclareCurrentRelease{v3.0.1}{2025-03-05}
+\ProvidesPackage{person}[2025/03/05 v3.0.1 (NLCT)]
 \newcommand\@person at datatoolsty{datatool}
 \ExplSyntaxOn
 \cs_new:Nn \__person_define_shortcuts:



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