%%
%% This is file `tabu.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% tabu.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% tabu : 2011/01/15 v1.9 - tabu : Flexible LaTeX tabulars
%% 
%% 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
%% 
%% This work consists of the main source file tabu.dtx
%% and the derived files
%%    tabu.sty, tabu.pdf, tabu.ins
%% 
%% tabu : Flexible LaTeX tabulars
%% Copyright (C) 2010 by Florent Chervet <florent.chervet@free.fr>
%% 

\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{tabu}[2011/01/15 v1.9 - flexible LaTeX tabulars (FC)]
\RequirePackage{array}[2008/09/09]
\RequirePackage{varwidth}[2009/03/30]
\AtEndOfPackage{\tabu@AtEnd\let\tabu@AtEnd\@undefined}
\let\tabu@AtEnd\@empty
\def\TMP@EnsureCode#1#2{%
  \edef\tabu@AtEnd{%
    \tabu@AtEnd
    \catcode#1 \the\catcode#1\relax
  }%
  \catcode#1 #2\relax
}% \TMP@EnsureCode
\TMP@EnsureCode{33}{12} % !
\TMP@EnsureCode{124}{12}% |
\TMP@EnsureCode{0}{12}%  ^^@
\TMP@EnsureCode{36}{3}% $ = math shift
\let\tabu@message         \@gobble
\let\tabu@message@save    \@gobble
\let\tabu@debug           \@gobble
\let\tabu@timerstart      \relax
\def\tracingtabu{%
   \let\tabu@message \message
   \let\tabu@message@save \tabu@tracing@save
   \ifdefined \pdfelapsedtime
      \def\tabu@timerstart{\edef\tabu@starttime{\the\pdfelapsedtime}}%
      \let\tabu@elapsedtime \tabu@message@etime\fi
   \@ifnextchar={\tabu@tracing}{}}
\def\tabu@tracing{\begingroup\afterassignment\tabu@tr@cing\count@}
\def\tabu@tr@cing{\expandafter\endgroup\ifnum\count@>\@ne
   \let\tabu@debug\message\else\let\tabu@debug\@gobble\fi}
\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu\relax}}
\let\tabudefaulttarget    \linewidth
\DeclareOption{linegoal}{%
   \AtEndOfPackage{%
      \RequirePackage{linegoal}[2010/12/07]%
      \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
}}
\DeclareOption{delarray}{%
   \AtEndOfPackage{\RequirePackage{delarray}}%
}
\DeclareOption{light}{%
   \AtEndOfPackage{%
   \let\tabu@prepnext@tok \prepnext@tok    \let\tabu@save@decl \save@decl
   \let\tabu@rowfont      \tabu@norowfont  \let\tabucline      \tabu@nocline
   \let\tabu@firstcline   \relax           \let\tabu@lines     \relax
   \let\tabu@setup@everycr\relax
   }
}
\def\tabu@norowfont{\PackageError{tabu}
   {\string\rowfont\space is not available with option `light'}\@ehd}
\def\tabu@nocline{\PackageError{tabu}
   {\string\tabucline\space is not available with option `light'}\@ehd}
\ProcessOptions
\AtBeginDocument{%
   \expandafter\in@ \expandafter\@arrayright\expandafter{\endarray}%
   \ifin@ \let\tabu@endarray \endarray
   \else  \tabu@fix@arrayright \fi % <fix for colortbl & arydshln (delarray)>
   \@ifpackageloaded{colortbl} \tabu@colortbltrue \tabu@colortblfalse
   \@ifpackageloaded{arydshln}{}
      {\let\tabu@adl@fix \relax \let\tabu@adl@endTRIAL \@empty}%
   \@ifpackageloaded{longtable}{}{\let\longtabu \tabu@nolongtabu}%
}
\newcount \tabu@cnt
\newcount \tabu@nbcols
\newcount \tabu@X@cols
\newcount \tabu@nested
\newcount \tabu@start
\newcount \tabu@stop
\newdimen \tabu@target
\newdimen \tabu@spreadtarget
\newdimen \tabu@naturalX
\newdimen \tabucolX
\newdimen \tabu@X@sum
\newdimen \tabucolX@error \tabucolX@error=1em
\newif \iftabu@measuring
\newif \iftabu@spread
\newif \iftabu@firstcline
\newif \iftabu@negcoef
\newsavebox \tabu@box
\chardef \tabu@arstrutbox=\@arstrutbox
\let\tabu@vcenter \vcenter
\def\tabu@gobblespace#1 {#1}
\def\tabu@gobbleopt#1{\@ifnextchar [{\tabu@gobble@pt{#1}}{#1}}%]
\def\tabu@gobble@pt#1[#2]{#1}
\def\tabu@save@decl{%
   \toks\count@ =\expandafter{\the\toks\expandafter\count@ \@nextchar}%
}% \tabu@save@decl
\def\tabu@newcolumntype #1{%
   \expandafter\tabu@new@columntype
      \csname NC@find@\string#1\expandafter\endcsname
      \csname NC@rewrite@\string#1\endcsname
      {#1}%
}% \tabu@newcolumntype
\def\tabu@new@columntype #1#2#3{%
   \def#1##1#3{\NC@{##1}}%
   \let#2\relax \newcommand*#2%
}% \tabu@new@columntype
\def\tabu@privatecolumntype #1{%
   \expandafter\tabu@private@columntype
      \csname NC@find@\string#1\expandafter\endcsname
      \csname NC@rewrite@\string#1\expandafter\endcsname
      \csname tabu@NC@find@\string#1\expandafter\endcsname
      \csname tabu@NC@rewrite@\string#1\endcsname
      {#1}%
}% \tabu@privatecolumntype
\def\tabu@private@columntype#1#2#3#4{%
   \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}%
   \tabu@new@columntype#3#4%
}% \tabu@private@columntype
\let\tabu@privatecolumns \@empty
\tabu@privatecolumntype X[1][]{\tabu@rewrite@X{#1}%
                             \let\@halignto \relax
                \expandafter \NC@find \tabucolX@rw}
\tabu@privatecolumntype \usetabu [1]{%
   \ifx\\#1\\\tabu@saveerr{}\else
      \@ifundefined{tabu@saved@\string#1}
         {\tabu@saveerr{#1}}
         {\let\tabu@rewrite@X \tabu@rewrite@Xrestore
          \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}%
   \fi
}% \NC@rewrite@\usetabu
\tabu@privatecolumntype \preamble [1]{%
   \ifx\\#1\\\tabu@saveerr{}\else
      \@ifundefined{tabu@saved@\string#1}
         {\tabu@saveerr{#1}}
         {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
   \fi
}% \NC@rewrite@\preamble
\tabu@newcolumntype \tabu@rewritefirst{%
   \tabu@X@cols \z@
   \let\tabu@dimexpr \relax
   \let\tabu@savepreamble \relax
   \let\NC@rewrite@X \tabu@NC@rewrite@X
   \gdef\tabu@global@temp {\tabu@savepreamble}%
   \aftergroup \tabu@global@temp
   \let\tabu@islast \relax
   \tabu@privatecolumns
   \NC@list{\NC@do\usetabu \NC@do\preamble \NC@do *}%
   \tabu@lines % defines NC@rewrite@| for tabu only (inside @mkpream group)
   \NC@list\expandafter{\the\expandafter\NC@list \expandafter\NC@do \expandafter X%
      \tabu@NC@list \NC@do X\NC@do\tabu@rewritemiddle}%
   \ifcat$\d@llarend\else
      \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
   \NC@find \tabu@rewritemiddle
}% NC@rewrite@\tabu@rewritefirst
\def\tabu@savepreamble{%
   \gdef\tabu@global@temp{}%
   \NC@list\expandafter{\tabu@NC@list}%
   \let\tabu@savedpreamble \@preamble
}% \tabu@savepreamble
\tabu@newcolumntype \tabu@rewritemiddle{%
   \NC@list\expandafter{\tabu@NC@list \NC@do\tabu@endrewrite \NC@do\tabu@rewritelast}%
   \tabu@checklast
}% \NC@rewrite@\tabu@rewritemiddle
\def\tabu@checklast#1\relax{%
   \def\tabu@temp{#1}%
   \ifx  \tabu@temp\tabu@islast
         \expandafter\tabu@lastrewrite
   \else \let\tabu@islast \tabu@temp
         \expandafter\NC@find \expandafter\tabu@rewritelast
   \fi
   #1\relax
}% \tabu@checklast
\tabu@newcolumntype \tabu@rewritelast{\NC@find \tabu@endrewrite}
\tabu@newcolumntype \tabu@endrewrite{\tabu@checklast}
\def\tabu@lastrewrite{%
   \let\tabu@next \NC@find
   \ifx \@halignto\relax   % found a X column
      \edef\tabu@global@X{\tabu@global@X \tabu@X@cols\the\tabu@X@cols\relax}%
      \ifx \tabu@halignto\relax % X column measure
         \tabu@global@Xnested
         \iftabu@negcoef \aftergroup\tabu@negcoeftrue \fi
         \aftergroup \tabu@prep@TRIAL
      \else \aftergroup \tabu@setup@everycr
      \fi
   \else
      \aftergroup \tabu@setup@everycr
      \ifdim \tabu@target=\z@ \else
         \let\tabu@next \tabu@extracolsep \fi % <need \extracolsep ?>
   \fi
   \let\@halignto \tabu@halignto
   \tabu@next
}% \tabu@lastrewrite
\def\tabu@extracolsep{\futurelet\tabu@temp \tabu@extracol@sep}
\def\tabu@extracol@sep{%
   \ifx \tabu@temp\@sptoken
      \expandafter\tabu@gobblespace \expandafter\tabu@extracol@sep
   \else
      {\endlinechar\m@ne\scantokens{\let\x |}%
      \expandafter}\ifx \x\tabu@temp
         \def\tabu@next {\NC@find @{\extracolsep\@flushglue}}\else
      {\endlinechar\m@ne\scantokens{\let\x !}%
      \expandafter}\ifx \x\tabu@temp
         \def\tabu@next {\NC@find @{\extracolsep\@flushglue}}\else
         \def\tabu@next {\NC@find !{\extracolsep\@flushglue}}\fi\fi
      \expandafter\tabu@next
   \fi
}% \tabu@extracol@sep
\def\tabu@global@Xnested{\expandafter\tabu@global@X@nested
           \csname tabu@global@X\the\tabu@nested\endcsname}
\def\tabu@global@X@nested#1{%
   \global\let#1\tabu@global@X
   \aftergroup\let \aftergroup\tabu@global@X \aftergroup#1%
}% \tabu@global@Xnested
\newif\iftabu@colortbl
\def\tabu@nowrite#1#{{\afterassignment}\toks@}
\let\tabu@write\write
\let\tabu@immediate\immediate
\protected\def\tabu@GenericError{\begingroup
   \def\immediate\write{\aftergroup\endgroup
      \tabu@immediate\tabu@write}\tabu@GenericErrorORI}%
\let\tabu@GenericErrorORI \GenericError
\protected\def\tabu@warn{\begingroup
   \def\immediate\write{\aftergroup\endgroup
      \tabu@immediate\tabu@write}\PackageWarning{tabu}}
\def\tabu{%
   \ifmmode \def\tabu@{\array}\def\endtabu{\endarray}%
   \else    \def\tabu@{\tabular}\def\endtabu{\endtabular}\fi
   \let\tabu@arrayleft@measure \tabu@arrayleftmeasure
   \tabu@setup \tabu@settarget
}% \tabu
\def\longtabu{%
   \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
   \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
   \let\tabu@arrayleft@measure \tabu@long@arrayleft@measure
   \tabu@setup \tabu@settarget
}% \longtabu
\def\tabu@nolongtabu{\PackageError{tabu}
   {longtabu requires the longtable package}\@ehd}
\def\tabu@setup{%
   \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray)
   \let\tabu@global@X \@empty
   \ifx \verbatim\tabu@sanitizetext      % <nested tabu>
      \tabu@setup@saveglobal
      \advance\tabu@nested \@ne
      \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
   \else \tabu@timerstart
      \def\tabu@aligndefault{c}\edef\tabu@hfuzz {\the\hfuzz}%
      \global\tabu@footnotes{}\aftergroup\the\aftergroup\tabu@footnotes
      \ifdim\parindent>\z@ \ifx\linewidth\tabudefaulttarget
         \everypar\expandafter{%         % correction for indentation
            \the\everypar\everypar\expandafter{\the\everypar}%
            \setbox\z@=\lastbox
            \ifdim\wd\z@>\z@ \advance\linewidth -\wd\z@\fi
            \box\z@
            }%
      \fi\fi
   \fi
   \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
   \let\@xfootnote    \tabu@xfootnote    \let\centering      \tabu@centering
   \let\raggedright   \tabu@raggedright  \let\raggedleft     \tabu@raggedleft
   \tabu@trivlist     %<restore \\=\@normalcr inside lists>
   \def\tabudecimal   {\tabu@tabudecimal}\let\verbatim       \tabu@sanitizetext
   \let\fbox          \tabu@fbox          \let\color@b@x     \tabu@color@b@x
   \let\rowfont       \tabu@rowfont
   \let\prepnext@tok  \tabu@prepnext@tok %<for \rowfont and \tabucline>
   \everycr{}\let\tabu@everycr \everycr
   \tabu@spreadfalse  \tabu@measuringfalse \tabu@negcoeffalse
   \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
}% \tabu@setup
\def\tabu@setup@saveglobal{%
   \expandafter\xdef\csname tabu@global@\the\tabu@nested\endcsname{%
      \global\tabu@X@cols \the\tabu@X@cols\relax
      \global\tabu@naturalX \the\tabu@naturalX\relax
      \gdef\noexpand\tabu@naturalX@min {\tabu@naturalX@min}%
      \gdef\noexpand\tabu@naturalX@max {\tabu@naturalX@max}}%
      \expandafter\aftergroup\csname tabu@global@\the\tabu@nested\endcsname
}% \tabu@setup@saveglobal
\def\tabu@settarget{\futurelet\@let@token \tabu@sett@rget}
\def\tabu@sett@rget{\tabu@target\z@
   \ifcase \ifx \bgroup\@let@token 0\else
           \ifx [\@let@token 0\else
           \ifx \@sptoken\@let@token 1\else
           \if t\@let@token 2\else
           \if s\@let@token 3\else
           \m@ne\fi\fi\fi\fi\fi\relax
         \expandafter\tabu@begin
   \or   \expandafter\tabu@gobblespace\expandafter\tabu@settarget
   \or   \expandafter\tabu@to
   \or   \expandafter\tabu@spread
   \else \expandafter\tabu@begin
   \fi
}% \tabu@sett@rget
\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget}
\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget}
\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target}
\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoal@target}
\def\tabu@linegoal@target {%
   \ifx \tabu@temp\LNGL@setlinegoal
        \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
   \tabu@begin
}% \tabu@linegoal@target
\def\tabu@begin #1#{%
   \edef\tabu@halignto{\ifdim\tabu@target>\z@ \tabu@halignto\the\tabu@target\fi}%
   \@testopt \tabu@@begin \tabu@aligndefault #1\@nil
}% \tabu@begin
\def\tabu@@begin [#1]#2\@nil#3{%
   \tabu@preparesave{#3}%     <for \savetabu>
   \def\tabu@align {#1}%
   \tabu@ [\tabu@align]#2{\tabu@rewritefirst #3}%
}% \tabu@@begin
\def\tabu@preparesave #1{%
   \iftabu@colortbl \@temptokena{}%
      \tabu@prepare@save\CT@arc@
      \tabu@prepare@save\CT@drsc@
   \fi
   \edef\tabu@savedparam{%
      \ifmmode \col@sep \the\arraycolsep
      \else    \col@sep \the\tabcolsep     \fi\relax
      \arrayrulewidth   \the\arrayrulewidth\relax
      \doublerulesep    \the\doublerulesep\relax
      \extrarowheight   \the\extrarowheight\relax
      \extratabsurround \the\extratabsurround\relax
      \def\noexpand\arraystretch {\arraystretch}%
      \iftabu@colortbl \minrowclearance\the\minrowclearance\relax
                       \the\@temptokena
      \fi}%
   \def\tabu@savedpream {\edef\tabu@halignto{to\the\tabu@target}\NC@find #1}%
}% \tabu@preparesave
\def\tabu@prepare@save #1{%
   \ifx\relax#1\else
      \@temptokena\expandafter{\the\expandafter\@temptokena
         \expandafter\def\expandafter#1\expandafter{#1}}\fi
}% \tabu@prepare@save
\newtoks\tabu@footnotes
\long\def\tabu@footnotetext #1{%
   \edef\@tempa{\the\tabu@footnotes
      \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}%
   \global\tabu@footnotes\expandafter{\@tempa {#1}}}%
\long\def\tabu@xfootnotetext [#1]#2{%
  \global\tabu@footnotes\expandafter{\the\tabu@footnotes
                              \footnotetext [{#1}]{#2}}}
\let\tabu@xfootnote \@xfootnote
\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }}
\long\def\tabu@Hy@xfootnote [#1]{%
   \begingroup
      \value\@mpfn #1\relax
      \protected@xdef \@thefnmark  {\thempfn}%
   \endgroup
   \@footnotemark \tabu@Hy@ftntxt {#1}%
}% \tabu@Hy@xfootnote
\long\def\tabu@Hy@ftntxt #1#2{%
   \edef\@tempa{%
      \the\tabu@footnotes
      \begingroup
         \value\@mpfn #1\relax
         \noexpand\protected@xdef
            \noexpand\@thefnmark{\noexpand\thempfn}%
         \expandafter\noexpand\expandafter\tabu@Hy@footnotetext
         \expandafter{%
            \Hy@footnote@currentHref
          }%
      }%
      \global\tabu@footnotes\expandafter{%
          \@tempa {#2}%
        \endgroup
      }%
}% \tabu@Hy@ftntxt
\long\def\tabu@Hy@footnotetext #1#2{%
   \H@@footnotetext{%
      \ifHy@nesting
         \hyper@@anchor {#1}{#2}%
      \else
         \Hy@raisedlink{%
            \hyper@@anchor {#1}{\relax}%
         }%
         \def\@currentHref {#1}%
         \let\@currentlabelname \@empty
         #2%
      \fi
   }%
}% \tabu@Hy@footnotetext
\AtBeginDocument{%
   \csname\ifcsname ifHy@hyperfootnotes\endcsname
    ifHy@hyperfootnotes\else iffalse\fi\endcsname
      \let\tabu@footnotetext \tabu@Hy@ftntext
      \let\tabu@xfootnote    \tabu@Hy@xfootnote
   \fi
}
\def\tabu@rewrite@X #1{\tabu@Xarg {#1}%
   \expandafter\let\csname tabu@X\the\tabu@X@cols\endcsname \relax
   \iftabu@measuring % not the first X column found in preamble
      \edef\tabu@global@X {\tabu@global@X
            \def\csname tabu@X\the\tabu@X@cols\endcsname {\strip@pt\tabu@X@sum}%
            \advance\tabu@X@sum \the\tabu@X@sum\relax}%
   \else % first X column found in preamble
      \tabu@measuringtrue
      \iftabu@spread \tabu@spreadtarget\tabu@target \tabu@target\z@
      \else          \tabu@spreadtarget \z@ \fi
      \ifdim\tabu@target=\z@
         \setlength\tabu@target \tabudefaulttarget
         \tabu@message{(tabu) Default target:
            \ifx\tabudefaulttarget\linewidth\string\linewidth
            \else\ifx\tabudefaulttarget\linegoal\string\linegoal
            \fi\fi=\the\tabu@target \on@line, page \the\c@page}\fi
      \tabu@message{\tabu@titles}%
      \edef\tabu@global@X {\tabu@global@X
         \def\csname tabu@X1\endcsname{\strip@pt\tabu@X@sum}%
         \tabu@X@sum  \the\tabu@X@sum\relax
         \tabu@target \the\tabu@target\relax
         \tabu@spreadtarget \the\tabu@spreadtarget\relax}%
      \let\tabu@halignto \relax
   \fi
}% \tabu@rewrite@X
\let\tabu@@rewrite@X \tabu@rewrite@X
\def\tabu@rewrite@Xnested #1{\in@ ${#1}\ifin@
   \def\tabucolX@rw {>{$}p{\tabucolX}<{$}}\else
   \def\tabucolX@rw {p{\tabucolX}}\fi}
\def\tabu@rewrite@Xrestore #1{\tabu@gobbleopt{\def\tabucolX@rw{l}}}
\def\tabu@Xarg#1{%
  \advance\tabu@X@cols \@ne
  \tabu@wdlet\tabu@X@cols \z@
  \ifx\\#1\\%    <shortcut when no option>
     \tabu@X@sum \p@
     \edef\tabucolX@rw {p{\tabu@dimexpr{\the\tabu@X@cols}{\tabucolX}}}%
     \edef\tabu@temp {p{\the\tabucolX}}%  <required for \usetabu>
  \else
     \tabu@X@sum \z@
     \let\tabucolX@align \@empty \let\tabucolX@rw \@empty
     \let\tabu@Xmath     \@empty \let\tabu@temp   \@empty
     \tabu@Xparse {}#1,\@nnil
  \fi
}% \tabu@Xarg
\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
\def\tabu@Xtest{%
   \ifcase \ifx \@nnil\@let@token \z@ \else
           \if ,\@let@token \m@ne\else
           \if p\@let@token 1\else
           \if m\@let@token 2\else
           \if b\@let@token 3\else
           \if l\@let@token 4\else
           \if c\@let@token 5\else
           \if r\@let@token 6\else
           \if L\@let@token 7\else
           \if C\@let@token 8\else
           \if R\@let@token 9\else
           \ifx \@sptoken\@let@token 10\else
           \if .\@let@token 11\else
           \if -\@let@token 11\else
           \ifcat $\@let@token 12\else
           13\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
       \tabucolX@do \expandafter \remove@to@nnil
   \or \tabu@Xtype {p}%
   \or \tabu@Xtype {m}%
   \or \tabu@Xtype {b}%
   \or \tabu@Xalign \raggedright
   \or \tabu@Xalign \centering
   \or \tabu@Xalign \raggedleft
   \or \tabu@Xalign \RaggedRight
   \or \tabu@Xalign \Centering
   \or \tabu@Xalign \RaggedLeft
   \or \expandafter \tabu@Xparsespace
   \or \expandafter \tabu@Xcoef
   \or \let\tabu@Xmath=$\expandafter \tabu@Xparse
   \or \tabu@Xcoef{}%
   \else\expandafter \tabu@Xparse
   \fi
}% \tabu@Xtest
\def\tabu@Xalign#1{%
   \ifx \tabucolX@align\@empty \else \PackageWarning{tabu}
      {Duplicate horizontal alignment specification}\fi
   \def\tabucolX@align{#1}\expandafter\tabu@Xparse
}% \tabu@Xalign
\def\tabu@Xtype#1{%
   \ifx \tabucolX@rw\@empty \else \PackageWarning{tabu}
      {Duplicate vertical alignment specification}\fi
   \def\tabucolX@rw{#1}\expandafter\tabu@Xparse
}% \tabu@Xtype
\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}%
   \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi
}% \tabu@Xcoef
\def\tabu@Xc@ef{%
   \advance\tabu@X@sum \tabu@temp\the\tabu@cnt\p@
   \tabu@Xparse{}%
}% \tabu@Xc@ef
\def\tabucolX@do{%
   \ifx\tabucolX@rw\@empty \def\tabucolX@rw{p}\fi
   \ifdim\tabu@X@sum<\z@ \tabu@negcoeftrue
                         \tabu@X@sum \m@ne\tabu@X@sum
                         \tabu@wdlet \tabu@X@cols \p@
   \else \ifdim \tabu@X@sum=\z@ \tabu@X@sum \p@ \fi
   \fi
   \begingroup
      \toks@\expandafter {\tabucolX@align}%
      \edef\tabu@temp {\strip@pt\tabu@X@sum \tabucolX}%
      \edef\tabucolX@rw##1{%
         \ifx$\tabu@Xmath>{\noexpand\the\toks@ $}\else
         \ifx \tabucolX@align\@empty \else
            >{\noexpand\the\toks@}\fi\fi
            \tabucolX@rw{##1}%
         \ifx$\tabu@Xmath<{$}\fi}%
      \edef\x{\endgroup
         \def\noexpand\tabu@temp {\tabucolX@rw{\the\dimexpr\tabu@temp}}%
         \def\noexpand\tabucolX@rw{%
            \tabucolX@rw{\tabu@dimexpr{\the\tabu@X@cols}{\tabu@temp}}}%
         }\x
}% \tabucolX@do
\def\tabu@dimexpr#1#2{%
   \ifdim \tabu@wd{#1}>\p@
      \ifdim \tabu@wd{#1}<#2 \tabu@wd{#1}\else#2\fi\else #2\fi
}% \tabu@dimexpr
\def\tabu@prep@TRIAL{%
   \begingroup \iffalse{\fi \ifnum0=`}\fi
      \tabu@setup@TRIAL
      \tabucolX \tabu@target
      \ifcase 0\iftabu@negcoef \else\iftabu@spread \else 1\fi\fi
         \advance\tabu@X@cols \@ne
         \expandafter\let\csname tabu@X\the\tabu@X@cols\endcsname \@undefined
         \tabu@X@cols \z@
         \def\tabu@naturalX@max {\z@}%
         \def\tabu@naturalX@min {\z@}%
         \let\tabu@startpboxORI \@startpbox
         \let\@startpbox \tabu@measure@startpbox
      \fi
      \def\tabu@lasttry{\m@ne\p@}\tabu@cnt \z@  % number of trials
      \tabu@arrayleft@measure
}% \tabu@prep@TRIAL
\def\tabu@setup@TRIAL{\tabu@global@X \let\tabu@global@X \@empty
   \let\@halignto \@empty  \tabu@naturalX \z@
   \tabu@savecounters  \let\tabu@savecounters \relax
   \hbadness \@M    \let\hbadness \@tempcnta
   \hfuzz \maxdimen \let\hfuzz \@tempdima
   \let\tabu@rewrite@X \tabu@rewrite@Xnested
   \let\savetabu \@gobble        \let\tabudefaulttarget \linewidth
   \let\write \tabu@nowrite      \let\GenericError  \tabu@GenericError
   \long\def\@xfootnote[##1]##2{}\let\@footnotetext \@gobble
   \ifx\@arrayright\relax \let\@arrayright \@empty\fi
   \tabu@TRIAL@hook
}% \tabu@setup@TRIAL
\def\tabu@savecounters{%
   \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
   \edef\tabu@global@X {\cl@@ckpt}\let\@elt \relax
}% \tabu@savecounters
\let\tabu@TRIAL@hook \@empty
\newcommand\tabuDisableCommands[1]{\g@addto@macro\tabu@TRIAL@hook {#1}}
\def\tabu@arrayleftmeasure#1\bgroup{%
   \def\tabu@Xfinish{%
      \tabu@global@Xnested \ifnum0=`{}\fi\endgroup
      \tabu@global@X #1\bgroup}%
   \def\tabu@TRIAL {\setbox\tabu@box \hbox\bgroup $#1\bgroup
                                   \the\toks@ \tabu@endTRIAL}%
   \toks@{\tabu@setup@everycr
      \let\@preamble \tabu@savedpreamble}% <required for multicolumn>
   \tabu@collect
}% \tabu@arrayleftmeasure
\long\def\tabu@long@arrayleft@measure #1\LT@bchunk #2\LT@bchunk{%
   \def\tabu@Xfinish{%
      \tabu@global@Xnested \ifnum0=`{}\fi\endgroup
      \tabu@setup@everycr \let\@preamble \tabu@savedpreamble
      \tabu@global@X #1\LT@bchunk #2\LT@bchunk}%
  \def\tabu@TRIAL{%
      \setbox\tabu@box \hbox\bgroup
      \tabu@setup@everycr \let\@preamble \tabu@savedpreamble
      \tabu@global@X \LTchunksize\@M
      #1\LT@bchunk #2\LT@bchunk \the\toks@ \tabu@long@endTRIAL}%
  \toks@{}%\let\LT@output\relax
  \tabu@collect
}% \tabu@long@arrayleft@measure
\def\tabu@long@endTRIAL{%
   \LT@echunk
   \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
   \LT@get@widths
   \egroup        % got \tabu@box
   \iftabu@spread \tabu@spreadarith % <only once>
   \else          \tabu@arith
   \fi
   \iftabu@measuring \tabu@measuringfalse
      \expandafter \tabu@TRIAL % <continue trials>
   \else
      \expandafter \tabu@Xfinish
         \the \expandafter\toks@ \tabu@endenvir  % <we are then!>
   \fi
}% \tabu@long@endTRIAL
\def\tabu@collect{\catcode`\^^@=13\def\tabu@stack{b}\tabu@collectbody}
\long\def\tabu@collectbody#1\end#2{%
   \edef\tabu@stack{\tabu@pushbegins #1\begin\end\expandafter\@gobble\tabu@stack}%
   \ifx\tabu@stack\@empty
      \toks@\expandafter{\the\toks@#1}\def\tabu@endenvir{\end{#2}}%
      \expandafter \tabu@TRIAL
   \else
      \toks@\expandafter{\the\toks@#1\end{#2}}%
      \expandafter \tabu@collectbody
   \fi
}% \tabu@collectbody
\long\def\tabu@pushbegins#1\begin#2{%
      \ifx\end#2\else b\expandafter\tabu@pushbegins\fi}
\def\tabu@endTRIAL{%
   \tabu@adl@endTRIAL   % <arydshln in nested trials>
   \endarray$\egroup
   \iftabu@spread \tabu@spreadarith % <only once>
   \else          \tabu@arith
   \fi
   \iftabu@measuring \tabu@measuringfalse
      \expandafter \tabu@TRIAL % <continue trials>
   \else
      \expandafter \tabu@Xfinish
         \the \expandafter\toks@ \tabu@endenvir  % <we are then!>
   \fi
}% \tabu@endTRIAL
\def\tabu@adl@endTRIAL{\crcr \noalign{\global\adl@ncol \tabu@nbcols}}
\def\tabu@arith{%
   \advance\tabu@cnt \@ne \tabu@message{\tabu@message@arith}%
   \ifx \@startpbox\tabu@measure@startpbox
            \let\@startpbox \tabu@startpboxORI \fi
   \dimen@ \tabu@X@sum
   \iftabu@negcoef \tabu@arith@negcoef \fi
   \ifcase 0\ifdim \dimexpr\wd\tabu@box-\tabu@hfuzz-1sp<\tabu@target
            \else \ifdim \tabu@lasttry=\wd\tabu@box 1\else
            2\fi\fi\relax
      \ifdim \tabu@X@sum=\dimen@ \tabu@message{\tabu@message@reached}%
      \else\ifdim\tabu@X@sum=\z@ \tabu@message{\tabu@message@reached}%
      \else\ifnum \tabu@cnt>\@ne \tabu@message{\tabu@message@reached}%
      \else \tabu@measuringtrue
            \tabucolX = \dimexpr\tabucolX*\p@/\tabu@X@sum\relax
      \fi\fi\fi
   \or \tabu@message{\tabu@header Reached minimum width. Backing up}%
       \tabu@warn{tabu width = \the\wd\tabu@box\space>
                  \the\tabu@target\space+ \tabu@hfuzz}%
   \or
      \ifdim \tabu@X@sum=\z@ \tabu@measuringtrue \tabucolX=\@tempdima
      \else
         \advance\tabucolX-\dimexpr(\wd\tabu@box-\tabu@target-.5\tabu@X@sum/\p@)
                                                      *\p@/\tabu@X@sum\relax
         \ifdim \tabucolX<\z@
            \tabu@warn{X Columns too narrow (table too wide)}%
            \tabucolX=\tabucolX@error
         \else \tabu@measuringtrue
            \ifdim \tabu@X@sum=\dimen@
               \edef\tabu@lasttry{\the\wd\tabu@box}%
            \else
               \ifnum \tabu@cnt>\@ne \edef\tabu@lasttry{\the\wd\tabu@box}\fi
               \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima\fi
            \fi
         \fi
      \fi
   \fi %(ifcase)
   \iftabu@measuring
   \else \edef\tabu@global@X{\tabu@global@X
            \tabucolX    \the\tabucolX\relax
            \tabu@target \the\tabu@target\relax % < for \savetabu >
            \ifnum \tabu@nested=\z@
            \ifx \@arrayright\@empty
            \ifdim \tabu@X@sum>\z@
               \def\noexpand\@halignto{to\the\tabu@target}\fi\fi\fi}%
   \fi
   \tabu@X@sum \dimen@
}% \tabu@arith
\def\tabu@arith@negcoef{%
   \tabu@X@cols \@ne \count@ \tabu@X@cols
   \@whilesw \ifcsname tabu@X\the\tabu@X@cols\endcsname\fi{%
      \ifdim \tabu@wd\tabu@X@cols>\p@
         \expandafter\let\expandafter\tabu@temp
                   \csname tabu@X\the\tabu@X@cols\endcsname
         \ifdim \tabu@wd\tabu@X@cols <\tabu@temp\tabucolX
            \advance\tabu@X@sum -\tabu@temp\p@
            \tabu@message{\tabu@message@negcoef{\the\tabu@X@cols}}%
            \ifdim \tabu@wd\tabu@X@cols >\tabu@wd\count@ \count@ \tabu@X@cols \fi
      \fi\fi
      \advance\tabu@X@cols \@ne
   }%
   \@tempdima=\dimexpr\tabu@wd\count@ * \p@/
                     \dimexpr\csname tabu@X\the\count@\endcsname\p@\relax\relax
}% \tabu@arith@negcoef
\def\tabu@spreadarith{%
   \tabu@naturalX \tabu@naturalX@max\relax
   \tabucolX \tabu@naturalX@min\relax
   \tabu@message{\tabu@message@spread}%
   \ifdim \dimexpr \wd\tabu@box + \tabu@spreadtarget <\tabu@target
      \advance\tabu@spreadtarget
               \dimexpr\wd\tabu@box-\tabu@naturalX+\tabucolX\relax
      \ifdim \tabu@spreadtarget <\tabu@target
         \tabu@target =\tabu@spreadtarget
      \fi
      \tabu@message{\the\tabu@target}%
      \tabu@message{\ifdim \tabu@spreadtarget>\tabu@target
                           (tabu) spread reduced to fit default target.\fi}%
   \else
      \tabu@message{\expandafter\tabu@msg@align \the\tabu@target { }{}{}{}{}\@@}
      \tabu@message{(tabu)\ifdim\wd\tabu@box<\tabu@target spread too large\else
                                                 tabu spread is useless here\fi,
                    default target used.}%
   \fi
   \let\@startpbox \tabu@startpboxORI
   \xdef\tabu@halignto {to\the\tabu@target}%
   \tabucolX \tabu@target
   \tabu@spreadfalse \tabu@measuringtrue
}% \tabu@spreadarith
\def\tabu@message@arith{\tabu@header
   \expandafter\tabu@msg@align \the\tabucolX { }{ }{ }{ }{}\@@
   \expandafter\tabu@msg@align \the\wd\tabu@box { }{ }{ }{ }{}\@@
   \expandafter\tabu@msg@align \the\tabu@target { }{ }{ }{ }{}\@@
   \expandafter\tabu@msg@align \the\tabu@X@sum {}{}{}{}{}\@@
   \ifx\@startpbox\tabu@measure@startpbox\tabu@spaces (coefs<0)\else
   \ifdim\tabu@X@sum>\z@
   \expandafter\tabu@msg@align \the\dimexpr(\tabu@target-\wd\tabu@box)
                                 *\p@/\tabu@X@sum\relax {}{}{}{}{}\@@\fi\fi^^J}%
\def\tabu@message@spread{\tabu@spreadheader
   \expandafter\tabu@msg@align \the\tabu@spreadtarget {}{}{}{}{}\@@
   \expandafter\tabu@msg@align \the\wd\tabu@box {}{}{}{}{}\@@
   \expandafter\tabu@msg@align \the\tabucolX {}{}{}{}{}\@@
   \expandafter\tabu@msg@align \expandafter-\the\tabu@naturalX {}{}{}{}{}\@@}
\def\tabu@message@reached{\tabu@header
   \expandafter\tabu@msg@align \the\tabucolX { }{ }{ }{ }{}\@@
   \expandafter\tabu@msg@align \the\wd\tabu@box {}{}{}{}{}\@@
  <\expandafter\tabu@msg@align \the\tabu@target { }{ }{ }{ }{}\@@
  + \tabu@hfuzz\space= hfuzz *****^^J%
  (tabu)\tabu@spaces******* Reached Target:
         hfuzz = \tabu@hfuzz\on@line\space *******^^J%
         \ifnum\tabu@nested=\z@ \tabu@elapsedtime ^^J\fi}%
\def\tabu@message@etime{(tabu)\tabu@spaces
   Time elapsed for trials:
   \the\numexpr(\pdfelapsedtime-\tabu@starttime-32767)/65536\relax sec
   \the\numexpr\numexpr(\pdfelapsedtime-\tabu@starttime)
      -\numexpr(\pdfelapsedtime-\tabu@starttime-32767)/65536\relax*65536\relax
       *1000/65536\relax ms}%
\def\tabu@message@negcoef #1{\tabu@spaces\tabu@spaces
   * #1. X[-\csname tabu@X#1\endcsname]: natural width
   = \tabu@wd{#1}
   < \csname tabu@X#1\endcsname X
   = \the\dimexpr\csname tabu@X#1\endcsname\tabucolX
}% \tabu@message@negcoef
\edef\tabu@spaces{\@spaces}
\def\do#1{%
   \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{%
   \ifnum##1<10 #1 #1\else
   \ifnum##1<100 #1 \else
   \ifnum##1<\@m #1\fi\fi\fi
   ##1.##2##3##4##5##6##7##8#1}%
   \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) #1}%
   \def\tabu@titles{\ifnum \tabu@nested=\z@
      (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
                  #1 #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
   \def\tabu@spreadheader{%
      (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 Nat. Min. #1 #1 #1 Nat.X
                                                      #1 #1 #1 New Target^^J%
      (tabu)spread}%
   \def\tabu@tracing@save##1{\begingroup
      \def\col@sep ####1\relax       {(tabu) column sep #1 #1 #1 = ####1^^J}%
      \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = ####1^^J}%
      \def\doublerulesep ####1\relax {(tabu) doublerulesep #1 #1= ####1^^J}%
      \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = ####1^^J}%
      \def\extratabsurround ####1\relax{(tabu) extratabsurround = ####1^^J}%
      \def\minrowclearance ####1\relax {(tabu) minrowclearance#1 = ####1^^J}%
      \def\arraystretch ####1{(tabu) arraystretch #1 #1 = ####1^^J}%
      \iftabu@colortbl
      \def\CT@arc@####1{(tabu) arrayrulecolor #1 = ####1^^J}%
      \def\CT@drsc@####1{(tabu) doublerulesepcolor=####1^^J}%
      \let\color \relax
      \fi
      \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
      \def\tabu@wddef####1####2{(tabu) Natural width ####1 = ####2^^J}%
      \let\edef \@gobbletwo \let\def \@empty
      \tabu@message{%
         (tabu) \string\savetabu{##1}: \on@line^^J%
      \ifx \savetabu\tabusaveX
         (tabu) X columns width #1 = \the\tabucolX^^J\fi
         (tabu) target #1 #1 #1 #1 #1 = \the\tabu@target^^J%
         \tabu@savedparam
         \tabu@savedpream \@nil
         \iftabu@negcoef \tabu@savewd\fi}%
      \endgroup}%
}\do{ }
\def\tabu@measure@startpbox#1{\bgroup
   \let\@startpbox \tabu@startpboxORI           % in case of nesting
   \in@{\tabu@dimexpr}{#1}%
   \ifin@
      \global\advance\tabu@X@cols \@ne
      \ifcsname tabu@X\the\tabu@X@cols\endcsname\else
         \global\tabu@X@cols \@ne
         \global\tabu@naturalX \z@
      \fi
   \fi
   \iftabu@spread\else
      \ifin@ {\let\tabu@dimexpr \@firstoftwo\expandafter}%
             \ifdim \tabu@wd{#1}<\p@ \in@false\fi\fi\fi
   \ifin@
      \begingroup \let\tabu@dimexpr \@secondoftwo
         \edef\x{\endgroup \def\noexpand\tabu@temp{\the\dimexpr#1}%
      }\x
      \setbox\tabu@box=\hbox\bgroup
         \let\tabu@rewrite@X \tabu@@rewrite@X
         \begin{varwidth}{\tabu@temp}\narrowragged\arraybackslash
            \tabu@noadjustspacing \parfillskip\@flushglue
               \bgroup \aftergroup\tabu@measure@endpbox
   \else
      \expandafter\@gobble\@startpbox{#1}% \@gobble \bgroup
   \fi
}% \tabu@measure@startpbox
\ifdefined\pdfadjustspacing
   \def\tabu@noadjustspacing{\pdfadjustspacing\z@}%
\else
   \let\tabu@noadjustspacing\relax
\fi
\def\tabu@measure@endpbox{%
   \@finalstrut\@arstrutbox\end{varwidth}\egroup      % <got my \tabu@box>
   \global\advance\tabu@naturalX \wd\tabu@box
   \ifdim \tabu@naturalX@max<\tabu@naturalX
      \xdef\tabu@naturalX@max{\the\tabu@naturalX}\fi
   \@tempdima=\dimexpr \wd\tabu@box * \tabu@X@sum /
         \dimexpr\csname tabu@X\the\tabu@X@cols\endcsname\p@\relax\relax
   \ifdim \tabu@naturalX@min<\@tempdima
      \xdef\tabu@naturalX@min{\the\@tempdima}\fi
   \ifdim \tabu@wd\tabu@X@cols>\z@
   \ifdim \tabu@wd\tabu@X@cols<\wd\tabu@box
      \tabu@wddef\tabu@X@cols {\the\wd\tabu@box}%
      \tabu@debug{\tabu@spaces\tabu@spaces
         * \the\tabu@X@cols. X[-\csname tabu@X\the\tabu@X@cols\endcsname]:
         target=\the\dimexpr\tabu@temp\relax\space
         \expandafter\expandafter\expandafter\string\tabu@wd\tabu@X@cols
         =\tabu@wd\tabu@X@cols}%
   \fi\fi
   \box\tabu@box \egroup % end of \vtop (measure)
}% \tabu@measure@endpbox
\def\tabu@wd#1{\csname tabu@W\the\tabu@nested @\number#1\endcsname}
\def\tabu@wddef#1{\expandafter\xdef
               \csname tabu@W\the\tabu@nested @\number#1\endcsname}
\def\tabu@wdlet#1{\global\expandafter\let
               \csname tabu@W\the\tabu@nested @\number#1\endcsname}
\def\tabu@naturalX@min{\z@}
\def\tabu@naturalX@max{\z@}
\def\tabu@setup@everycr{%
   \tabu@firstclinetrue
   \let\tabu@first@cline \z@
   \def\tabu@restoreeverycr {\let\everycr \tabu@everycr}%
   \def\everycr{\afterassignment\tabu@restoreeverycr \@temptokena}% <for ialign>
   \tabu@everycr\expandafter{\the\tabu@everycr
      \noalign{%
         \ifcase\tabu@first@cline
            \global\let\tabu@first@cline \tw@
         \or\global\let\tabu@first@cline \tw@
         \or\global\tabu@firstclinefalse
            \global\let\tabu@first@cline \m@ne
         \fi}%
         \tabu@rowfontreset
   }%
}% \tabu@setup@everycr
\def\tabuphantomline{\crcr\noalign{%
   \global\let\@arstrutbox \voidb@x
   \iftabu@colortbl
      \xdef\tabu@minrowclearance{\the\minrowclearance}%
      \global\minrowclearance \z@
   \fi
   \global\let\vcenter \vbox
   \ifnum \tabu@nested>\z@ \vspace*{\dimexpr\extrarowheight-\ht\@arstrutbox}\fi
   \toks@{}\count@\@ne
   \@whilenum\count@<\tabu@nbcols\do{\advance\count@\@ne
                        \toks@\expandafter{\the\toks@&}}%
   \toks@\expandafter{\the\toks@
      \cr\noalign{%
         \global\let\@arstrutbox \tabu@arstrutbox
         \global\let\vcenter \tabu@vcenter
         \iftabu@colortbl
            \global\minrowclearance \tabu@minrowclearance\relax\fi
         \global\let\tabu@first@cline \@ne}}%
   \expandafter}\the\toks@
}% \tabuphantomline
\def\tabu@lines{{\endlinechar\m@ne \scantokens{\def\x{|}}%
   \expandafter}\expandafter\tabu@lines@ \x
}% \tabu@lines
\def\tabu@lines@#1{%
   \tabu@newcolumntype #1{\tabuvline@rewrite}%
   \NC@list\expandafter{\the\NC@list \NC@do #1}%
}% \tabu@lines@
\newcommand*\tabuvline@rewrite[1][]{\tabuvline@arg{#1}%
                     \expandafter \NC@find \tabu@temp}
\def\tabu@vline#1{\vrule width#1}

\def\tabuvline@arg#1{%
   \ifx\\#1\\%    <shortcut when no option>
      \edef\tabu@temp{!{%
         \iftabu@colortbl\begingroup\noexpand\CT@arc@\fi
         \noexpand\tabu@vline\arrayrulewidth
         \iftabu@colortbl\endgroup\fi}}%
   \else \futurelet \tabu@temp \tabuvline@argi #1\p@\p@\@nnil \tabuvline@argiii
   \fi
}% \tabuvline@arg
\def\tabuvline@argi{%
   \let\tabu@color \@empty
   \ifcat A\noexpand\tabu@temp
         \@tempdima\arrayrulewidth
         \expandafter\tabu@getlinecolor
   \else \expandafter\tabuvline@argii
   \fi
}% \tabuvline@argi
\def\tabuvline@argii#1\@nnil{%
   \tabu@maybecolor \@tempdima #1 \@nnil
}% \tabuvline@argii
\def\tabuvline@argiii{%
   \edef\tabu@temp{!{\begingroup
      \ifx\tabu@color\@empty
      \iftabu@colortbl \noexpand\CT@arc@ \fi
      \else \tabu@color\fi
      \noexpand\tabu@vline{\the\@tempdima}\endgroup}}%
}% \tabuvline@argiii
\def\tabu@linedash{4pt}%   <default value>
\def\tabu@dashgap{4pt}%    <default value>
\def\tabucline{\noalign{\ifnum0=`}\fi \@ifstar
   {\@tempswatrue\tabu@cline}
   {\@tempswafalse\tabu@cline}}%
\newcommand*\tabu@cline[2][]{\toks@{}%
   \tabu@startstop{#2}\tabu@getlinespec{#1}\@multicnt\@ne
   \ifnum\tabu@start>\tabu@stop
   \else\ifx\tabu@xleaders\relax
   \else
      \toks@{\noalign{\global\let\@arstrutbox \voidb@x}}%
%%      \iftabu@firstcline\if\tabu@align t\vskip-\ht\@arstrutbox\fi\fi
      \@whilenum\@multicnt<\tabu@start\do{\advance\@multicnt\@ne
                              \toks@\expandafter{\the\toks@ &}}%
      \loop
         \toks@\expandafter{\the\toks@ \omit }%
         \ifnum \@multicnt=\@ne
         \expandafter \tabu@add \csname tabu@tok@\the\@multicnt L\endcsname \@nil
         \fi
         \ifcase 0\if@tempswa\else\ifnum \@multicnt<\tabu@stop 1\fi\fi\relax
            \toks@\expandafter{\the\toks@ \begingroup}%
            \toks@\expandafter{\the\expandafter\toks@
                               \tabu@xleaders \endgroup}%
         \fi
         \ifcase 0\if@tempswa\else\ifnum \@multicnt<\tabu@stop 1\fi\fi\relax
         \expandafter \tabu@add \csname tabu@tok@\the\@multicnt R\endcsname \@nil
         \fi
         \ifnum\@multicnt<\tabu@stop
            \advance\@multicnt\@ne
            \if@tempswa \toks@\expandafter{\the\toks@ &}%
            \else       \toks@\expandafter{\the\toks@ \span}\fi
      \repeat
      \@whilenum\@multicnt<\tabu@nbcols\do{\advance\@multicnt\@ne
                              \toks@\expandafter{\the\toks@ &}}%
      \toks@\expandafter{\the\toks@ \cr
            \noalign{\global\let\@arstrutbox \tabu@arstrutbox}}%
%%      \tabu@debug{LIGNE AJOUTEE:\the\toks@}%
   \fi\fi
   \ifnum0=`{\fi\expandafter}\the\toks@
}% \tabu@cline
\def\tabu@add #1\@nil{\toks@\expandafter{\the\toks@
              \begingroup #1\endgroup\ifmmode$\fi}}
\def\tabu@startstop#1{\tabu@start@stop #1\relax 1-\tabu@nbcols\@nnil}
\def\tabu@start@stop #1-#2\@nnil{%
   \@defaultunits \tabu@start \number0#1\relax\@nnil
   \@defaultunits \tabu@stop  \number0#2\relax\@nnil
   \ifnum\tabu@start>\tabu@nbcols\tabu@start \tabu@nbcols\else
         \ifnum\tabu@start<\@ne  \tabu@start \@ne       \fi\fi
   \ifnum\tabu@stop>\tabu@nbcols \tabu@stop \tabu@nbcols \else
      \ifnum\tabu@stop<\@ne      \tabu@stop \tabu@nbcols\fi\fi
}% \tabu@start@stop
\def\tabu@getlinespec#1{\let\tabu@xleaders \relax
   \@defaultunits \let\@tempa=#1 \relax\@nnil
   \ifx\@tempa\relax \let\tabu@xleaders \tabu@defaultleaders\else
   \ifx\@tempa\hbox  \tabu@defleaders{#1}\else
   \ifx\@tempa\box   \tabu@defleaders{#1}\else
   \ifx\@tempa\copy  \tabu@defleaders{#1}\else
   \ifcsname tabu@line@style@\detokenize{#1}\endcsname
      \csname tabu@line@style@\detokenize{#1}\endcsname
   \else \tabu@getline{#1\p@ on0pt off0pt}\fi\fi\fi\fi\fi
}% \tabu@getlinespec
\def\tabu@defleaders#1{%
   \def\tabu@xleaders{\iftabu@colortbl\CT@arc@\fi
      \xleaders\hbox{\lower.5\extrarowheight#1}\tabu@leaderfill}}
\def\tabucline@warn#1{\PackageWarning{tabu}
   {Undefined line syle: #1
   \MessageBreak Using default line style instead}%
   \let\tabu@xleaders \tabu@defaultleaders
}% \tabucline@warn
\def\tabu@getline#1{\tabu@lineon #1 \@nil on\tabu@linedash \p@ \@nil\@nnil{#1}}
\def\tabu@maybecolor{\ifx\tabu@color\@empty \afterassignment\tabu@colortest
                     \else \@defaultunits\fi}
\def\tabu@lineon #1on#2\@nil#3\@nnil#4{%
   \let\tabu@color \@empty
   \@defaultunits \let\@tempa=#1 \relax\@nnil
   \ifcase 0\ifx o\@tempa 1\else\ifcat A\noexpand\@tempa 2\fi\fi\relax
      \tabu@maybecolor \@tempdima #1\arrayrulewidth \p@\@nnil
      \tabu@maybecolor \@tempdimb #2\p@ \@nnil
      \tabu@lineoff #1 on#2 off\tabu@dashgap \p@ \@nnil
   \or\@tempdima \arrayrulewidth
      \tabu@maybecolor \@tempdimb #2\p@ \@nnil
      \tabu@lineoff #1 on#2 off\tabu@dashgap \p@ \@nnil
   \else
      \tabu@maybecolor \@tempdima \arrayrulewidth #1\p@\@nnil
      \ifx\tabu@color\@empty \tabucline@warn\@tempa\else
      \@tempdimb \z@
      \tabu@lineoff off0pt \p@\@nnil \fi
   \fi
}% \tabu@lineon
\def\tabu@lineoff #1off#2\@nnil{%
   \tabu@maybecolor \@tempdimc #2\p@ \@nnil
   \iftabu@colortbl \ifx \tabu@color\@empty
      \def\tabu@color{\noexpand\CT@arc@}%
   \fi\fi
   \ifdim \@tempdimb=\z@
      \ifdim \@tempdimc>\z@ \@tempdimb \tabu@dashgap\relax\fi\fi
   \ifdim \@tempdimc=\z@
      \ifdim \@tempdimb>\z@ \@tempdimc \tabu@linedash\relax\fi\fi
   \ifdim \@tempdima<\z@ \else
   \ifdim \@tempdimb<\z@ \else
   \ifdim \@tempdimc<\z@ \else
      \edef \tabu@xleaders{\tabu@color\xleaders
         \ifdim\@tempdimc>\z@
            \hbox\bgroup \kern\the\dimexpr\@tempdimc/2\relax\fi
         \noexpand\iftabu@firstcline
         \vrule depth\dimexpr\the\@tempdima
                \ifdim\@tempdimb>\z@ width\the\@tempdimb\fi
         \noexpand\else
         \vrule height\dimexpr-\extrarowheight+\the\@tempdima
                depth\dimexpr\extrarowheight
               \ifdim\@tempdimb>\z@ width\the\@tempdimb\fi
         \noexpand\fi
         \ifdim\@tempdimc>\z@
            \kern\the\dimexpr\@tempdimc/2\egroup\fi
         \tabu@leaderfill}%
   \fi\fi\fi
}% \tabu@lineoff
\def\tabu@colortest{\futurelet\tabu@temp\tabu@linecolor}
\def\tabu@linecolor{%
   \ifcase 0\if ,\noexpand\tabu@temp\else
            \ifx\relax\tabu@temp\else
            \ifx \@sptoken\tabu@temp1\else
            \ifcat A\noexpand\tabu@temp2\else
            3\fi\fi\fi\fi\relax
   \def\tabu@next##1{\futurelet\tabu@temp\tabu@linecolor}%
   \or\def\tabu@next{\tabu@gobblespace{\futurelet\tabu@temp\tabu@linecolor}}%
   \or\let\tabu@next \tabu@getlinecolor
   \else\expandafter\remove@to@nnil
   \fi \tabu@next
}% \tabu@linecolor
\def\tabu@getlinecolor#1\p@{%
   \edef\@tempa{\zap@space #1 \@empty}%
   \ifcsname\string\color@\@tempa\endcsname
      \edef\tabu@color{\noexpand\noexpand\noexpand\color{\@tempa}}%  \set@color
   \fi\remove@to@nnil
}% \tabu@getlinecolor
\def\tabulinestyle#1{\@for\@tempa:=#1\do
                     {\expandafter\tabu@linestyle\@tempa==\@nil}}
\def\tabu@linestyle#1=#2=#3\@nil{%
   \begingroup \tabu@getlinespec {#2}\expandafter\gdef
         \csname tabu@line@style@\detokenize{#1}\expandafter\endcsname
                     \expandafter{\expandafter\def\expandafter\tabu@xleaders
                                                \expandafter{\tabu@xleaders}}%
   \endgroup
}% \tabu@linestyle
\expandafter\def \csname tabu@line@style@\endcsname {%
                                    \let\tabu@xleaders \tabu@defaultleaders}%
\def\tabu@defaultleaders{\iftabu@colortbl\CT@arc@\fi
   \leaders
   \iftabu@firstcline
      \vrule  depth \arrayrulewidth
   \else
      \vrule  height\dimexpr-\extrarowheight+\arrayrulewidth
              depth \extrarowheight
   \fi
   \tabu@leaderfill}
\let\tabu@leaderfill \hfil
{\catcode32=13\relax\catcode`\^^@=13\relax
\gdef\tabu@verb{\@sanitize\catcode`\^=7\edef\^{\string^}\tabu@makeatletter
\catcode32=13\let =\ \catcode`\^^@=13\def^^@{\hskip\parfillskip\null\linebreak}%
\endlinechar\m@ne}}
{\catcode64=13\edef @{\string @}\expandafter\xdef
   \csname tabu@makeatletter\endcsname{\catcode64=13\def\noexpand @{\unskip @}}}
\newcommand\tabu@sanitizetext[1][\ttfamily]{\begingroup
                        \tabu@verb #1\tabu@s@nitizetext}
\long\def\tabu@s@nitizetext#1{\@makeother\{\@makeother\}%
            \everyeof{\noexpand}\scantokens{#1}\endgroup}
\def\tabu@tabudecimal#1{%
   \def\tabu@decimal{#1}\@temptokena{}%
   \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces
   \tabu@scandecimal
}% \tabu@tabudecimal
\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@}
\def\tabu@skipdecimal#1{#1\tabu@scandecimal}
\def\tabu@getdecimal@ignorespaces{%
   \ifcase 0\ifx\tabu@temp\ignorespaces\else
            \ifx\tabu@temp\@sptoken1\else
            2\fi\fi\relax
      \let\tabu@getdecimal@ \tabu@getdecimal
      \expandafter\tabu@skipdecimal
   \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal
   \else \expandafter\tabu@skipdecimal
   \fi
}% \tabu@getdecimal@ignorespaces
\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}%
                        \tabu@scandecimal}
\def\do#1{%
   \def\tabu@get@decimalspace#1{%
      \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}%
}\do{ }
\let\tabu@@tabudecimal \tabu@tabudecimal
\def\tabu@getdecimal{%
   \ifcase    0\ifx 0\tabu@temp\else
               \ifx 1\tabu@temp\else
               \ifx 2\tabu@temp\else
               \ifx 3\tabu@temp\else
               \ifx 4\tabu@temp\else
               \ifx 5\tabu@temp\else
               \ifx 6\tabu@temp\else
               \ifx 7\tabu@temp\else
               \ifx 8\tabu@temp\else
               \ifx 9\tabu@temp\else
               \ifx .\tabu@temp\else
               \ifx ,\tabu@temp\else
               \ifx -\tabu@temp\else
               \ifx +\tabu@temp\else
               \ifx e\tabu@temp\else
               \ifx E\tabu@temp\else
               \ifx\tabu@cellleft\tabu@temp1\else
               \ifx\ignorespaces\tabu@temp1\else
               \ifx\@sptoken\tabu@temp2\else
            3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
       \expandafter\tabu@get@decimal
   \or \expandafter\tabu@skipdecimal
   \or \expandafter\tabu@get@decimalspace
   \else\expandafter\tabu@printdecimal
   \fi
}% \tabu@getdecimal
\def\tabu@printdecimal{%
   \edef\tabu@temp{\the\@temptokena}%
   \ifx\tabu@temp\@empty\else
   \ifx\tabu@temp\space\else
      \expandafter\tabu@decimal\expandafter{\the\@temptokena}%
   \fi\fi
}% \tabu@printdecimal
\newcommand*\savetabu[1]{\noalign{%
   \ifx\\#1\\\tabu@savewarn{}{The tabu will not be saved}\else
      \@ifundefined{tabu@saved@\string#1}{}{\tabu@savewarn{#1}{Overwritting}}%
      {%
      \toks0\expandafter{\tabu@savedpreamble}%
      \toks1\expandafter{\tabu@savedparam}%
      \toks2\expandafter{\tabu@savedpream}%
      \toks3{}%
      \iftabu@negcoef
         \edef\tabu@savewd{\tabu@savewd{\number\numexpr1}}%
         \toks3\expandafter{\tabu@savewd}\fi
      \expandafter\xdef\csname tabu@saved@\string#1\endcsname##1{%
         \noexpand\ifcase##1\relax
            \noexpand\ifdim\tabu@target>\z@
               \noexpand\tabu@warn@usetabu
            \noexpand\fi
            \tabu@target \the\tabu@target\relax
            \tabucolX \the\tabucolX\relax
            \the\toks1%
            \gdef\noexpand\tabu@usetabu{%
               \the\toks1%
               \def\noexpand\@halignto{\tabu@halignto}%
               \tabucolX \the\tabucolX\relax
               \def\noexpand\@preamble{\the\toks0}%
               \noexpand\tabu@make@arstrutbox
               \the\toks3
               \noexpand\ifx \noexpand\tabu@align\noexpand\tabu@aligndefault@text
                  \def\noexpand\tabu@align{\tabu@align}%
               \noexpand\fi}%
            \aftergroup\noexpand\tabu@usetabu
         \noexpand\else
            \noexpand\ifdim\tabu@target=\z@
               \tabu@target \the\tabu@target\relax
            \noexpand\fi
            \gdef\noexpand\tabu@preamble{%
               \noexpand\ifx \noexpand\tabu@align\noexpand\tabu@aligndefault@text
                  \def\noexpand\tabu@align{\tabu@align}%
               \noexpand\fi}%
            \aftergroup\noexpand\tabu@preamble
         \noexpand\fi
         \the\toks2}%
      \tabu@message@save{#1}}%
   \fi}%
}% \savetabu
\def\tabu@aligndefault@text{\tabu@aligndefault}%
\def\tabu@warn@usetabu{\PackageWarning{tabu}
   {Specifying a target with \string\usetabu\space is useless
   \MessageBreak The target cannot be changed!}}
\def\tabu@savewd#1{%
   \ifnum#1>\tabu@nbcols \expandafter \@gobble
   \else \ifdim\tabu@wd{#1}>\z@
         \noexpand\tabu@wddef{#1}{\tabu@wd{#1}}\fi
         \expandafter\tabu@savewd % loop
   \fi{#1+1}%
}% \tabu@savewd
\def\tabu@make@arstrutbox{%
  \@tempdima \ht \strutbox
  \advance \@tempdima by\extrarowheight
  \setbox \@arstrutbox \hbox{\vrule
             \@height \arraystretch \@tempdima
             \@depth \arraystretch \dp \strutbox
             \@width \z@}%
}% \tabu@make@arstrutbox
\def\tabu@savewarn#1#2{\PackageInfo{tabu}
   {User-name `#1' already used for \string\savetabu
   \MessageBreak #2}}%
\def\tabu@saveerr#1{\PackageError{tabu}
   {User-name `#1' is unknown for \string\usetabu
   \MessageBreak I cannot restore an unknown preamble!}\@ehd}
\def\tabu@rowfont{\noalign{\ifnum0=`}\fi\tabu@row@font}
\newcommand*\tabu@row@font[2][]{%
   \global\let\tabu@rowfontreset \tabu@rowfont@reset
   \global\let\tabu@@cellleft    \tabu@cellleft
   \global\let\tabu@@cellright   \tabu@cellright
   \gdef\tabu@cellfont{\let\color \tabu@colorleavevmode#2\let\color \tabu@colorORI}%
   \ifcsname tabu@cell@#1\endcsname  % row alignment
         \csname tabu@cell@#1\endcsname \fi
   \toks@\expandafter {\tabu@cellleft\tabu@cellfont}% inside \noalign group ok
   \xdef\tabu@cellleft {\the\toks@}%
   \ifnum0=`{\fi}% end of noalign group
}% \rowfont
\def\tabu@colorleavevmode{\leavevmode\tabu@colorORI}
\AtBeginDocument{\let\tabu@colorORI \color}
\def\tabu@rowfont@reset{%
   \noalign{%
      \global\let\tabu@rowfontreset \@empty
      \global\let\tabu@cellleft \tabu@@cellleft
      \global\let\tabu@cellright \tabu@@cellright
      \global\let\tabu@cellfont \@empty
      \global\let\tabu@celllalign \@empty
      \global\let\tabu@cellralign \@empty
   }%
}% \tabu@rowfont@reset
\let\tabu@rowfontreset\@empty
\newif\iftabu@cellright
\AtBeginDocument{\let\tabu@prepnext@tokORI \prepnext@tok }% original definition
\def\tabu@prepnext@tok{%
   \ifnum \count@<\z@  % <first initialisation>
      \@tempcnta \@M   % <not initialized by array.sty>
      \tabu@nbcols\z@
      \xdef\tabu@global@temp{\tabu@global@temp \tabu@nbcols\z@}%
      \expandafter\let\csname tabu@tok@1L\endcsname \relax
      \tabu@cellrightfalse
   \else
      \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
         \advance \tabu@nbcols\@ne
         \expandafter\let\csname tabu@tok@\the\tabu@nbcols R\endcsname \relax
         \expandafter\gdef\expandafter\tabu@global@temp\expandafter{%
                           \tabu@global@temp \advance\tabu@nbcols\@ne}%
         \iftabu@cellright % before-previous token is right and is finished
            \tabu@cellrightfalse % <only once>
            \tabu@savetok R\tabu@preptokenright
         \fi
         \ifnum \tabu@nbcols=\@ne \tabu@savetok L\fi
         \tabu@preptokenleft
      \or                     % (case 1) previous token is right
         \tabu@savetok R\tabu@cellrighttrue
      \else % special column: do not change the token
         \ifnum \tabu@nbcols>\z@ %special column: always on the right of normal one
            \tabu@savetok R%
         \else % unless this is the very first column (\tabu@nbcols=0)
            \advance\tabu@nbcols\@ne \tabu@savetok L\advance\tabu@nbcols\m@ne
         \fi
         \iftabu@cellright    % before-previous token is right
            \tabu@cellrightfalse
            \tabu@preptokenright
         \fi
      \fi % \ifcase
   \fi
   \tabu@prepnext@tokORI
}% \tabu@prepnext@tok
\def\tabu@preptokenright{%
   \advance \count@ \m@ne
   \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
   \advance \count@ \@ne
}% \tabu@preptokenright
\def\tabu@preptokenleft{\toks\count@\expandafter {\expandafter\tabu@celllalign
                                             \the\toks\count@ \tabu@cellleft}%
}% \tabu@preptokenleft
\def\tabu@savetok#1{\begingroup
   \expandafter\tabu@savet@k\csname tabu@tok@\the\tabu@nbcols #1\endcsname
}% \tabu@savetok
\def\tabu@savet@k#1{%
   \ifnum \@chclass=\@ne \toks@\toks\count@
   \else\ifnum\@chclass=5 \toks@\toks\count@
   \else \toks@{}\fi\fi
   \unless\ifx#1\relax
      \toks@\expandafter\expandafter\expandafter{%
                        \expandafter#1\the\toks@}\fi
   \toks@\expandafter{\expandafter\def\expandafter#1\expandafter{%
                                                      \the\toks@}}%
   \@temptokena\expandafter{\tabu@global@temp}%
   \xdef\tabu@global@temp {\the\@temptokena \the\toks@}%
   \expandafter\endgroup \the\toks@
}% \tabu@savetok
\let\tabu@cellleft\@empty
\let\tabu@cellright\@empty
\def\tabu@celllalign{\tabu@cellleft}% row font spec. applies to pre-column material
\let\tabu@cellralign\@empty
\let\tabu@cellfont\@empty
\def\tabu@cell@l{% force alignment to left
   \gdef\tabu@celllalign{\tabu@removehfil
                        \raggedright\arraybackslash
                        \tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@flush1\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\raggedright\arraybackslash}% local
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@l
\def\tabu@cell@c{% force alignment to center
   \gdef\tabu@celllalign{\tabu@removehfil
                        \centering\arraybackslash
                        \tabu@flush{.5}\tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@flush{.5}\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\centering\arraybackslash}% local
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@c
\def\tabu@cell@r{% force alignment to right
   \gdef\tabu@celllalign{\tabu@removehfil
                        \raggedleft\arraybackslash
                        \tabu@flush1\tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\raggedleft\arraybackslash}% local
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@r
\def\tabu@cell@j{% force justification (for p, m, b columns)
   \gdef\tabu@celllalign{\tabu@justify\tabu@cellleft}%
   \global\let\tabu@cellralign\@empty
   \toks@\expandafter{\tabu@cellleft\tabu@justify}% local (noalign grp)
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@j
\def\tabu@justify{%
   \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip
   \parfillskip\@flushglue
}% \tabu@justify
%% ragged2e settings
\def\tabu@cell@L{% force alignment to left (ragged2e)
   \gdef\tabu@celllalign{\tabu@removehfil
                        \RaggedRight\arraybackslash
                        \tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@flush1\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\RaggedRight\arraybackslash}%
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@L
\def\tabu@cell@C{% force alignment to center (ragged2e)
   \gdef\tabu@celllalign{\tabu@removehfil
                        \Centering\arraybackslash
                        \tabu@flush{.5}\tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@flush{.5}\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\Centering\arraybackslash}%
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@C
\def\tabu@cell@R{% force alignment to right (ragged2e)
   \gdef\tabu@celllalign{\tabu@removehfil
                        \RaggedLeft\arraybackslash
                        \tabu@flush1\tabu@cellleft}%
   \gdef\tabu@cellralign{\tabu@ignorehfil}%
   \toks@\expandafter{\tabu@cellleft\RaggedLeft\arraybackslash}%
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@R
\def\tabu@cell@J{% force justification (ragged2e)
   \gdef\tabu@celllallign{\justifying\arraybackslash\tabu@cellleft}%
   \global\let\tabu@cellralign\@empty
   \toks@\expandafter{\tabu@cellleft\justifying\arraybackslash}%
   \xdef\tabu@cellleft{\the\toks@}%
}% \tabu@cell@J
\def\tabu@flush#1{%
   \iftabu@colortbl      % colortbl uses \hfill rather than \hfil
      \hskip \ifnum\currentgrouptype>13 \stretch{#1}%
      \else\ifdim#1pt<1pt \tabu@cellskip
      \else \stretch{#1}
      \fi\fi \relax
   \else                % array.sty
      \ifnum \currentgrouptype>13\relax
         \hfil \hskip1sp
      \fi
   \fi
}% \tabu@flush
\AtBeginDocument{%
   \@ifpackageloaded{ragged2e}
      {}
      {\let\tabu@cell@L \tabu@cell@l
       \let\tabu@cell@R \tabu@cell@r
       \let\tabu@cell@C \tabu@cell@c
       \let\tabu@cell@J \tabu@cell@j
      }%
}% AtBeginDocument
\newskip\tabu@cellskip
\let\tabu@hfil\hfil
\let\tabu@hfill\hfill
\let\tabu@hskip\hskip
\def\tabu@removehfil{%
   \iftabu@colortbl
      \unkern \tabu@cellskip = \lastskip
      \ifnum\gluestretchorder\tabu@cellskip = \tw@ \hskip-\tabu@cellskip
      \else \tabu@cellskip = \z@skip
      \fi
   \else
      \ifdim\lastskip=1sp\unskip\fi
      \ifnum\gluestretchorder\lastskip = \@ne
         \hfilneg % \hfilneg for array.sty but not for colortbl...
      \fi
   \fi
}% \tabu@removehfil
\def\tabu@ignorehfil{%
   \aftergroup\tabu@nohfil
}% \tabu@ignorehfil
\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
   \def\hfil{\let\hfil\tabu@hfil}%   local to (alignment template) group
}% \tabu@nohfil
\AtBeginDocument{%
   \@ifpackageloaded{colortbl}
   {%
   \def\tabu@nohfil{%
      \def\hfil{\let\hfil\tabu@hfil}% local to (alignment template) group
      \def\hfill{\let\hfill\tabu@hfill}% (colortbl uses \hfill) pfff...
      \def\hskip##1\relax{\let\hskip\tabu@hskip}}% local
   }% @ifpackageloaded colortbl
   {}%
}% AtBeginDocument
\def\tabu@fbox{%
   \leavevmode
   \let\color@bgroup\bgroup
   \def\color@egroup{\endgraf\egroup}%
   \afterassignment\tabu@begin@fbox
            \setbox\@tempboxa \hbox
}% \tabu@fbox
\def\tabu@begin@fbox{\color@bgroup\kern\fboxsep\aftergroup\tabu@end@fbox}
\def\tabu@end@fbox{\kern\fboxsep \color@egroup \@frameb@x\relax}
\def\tabu@color@b@x#1#2{\leavevmode
   \def\tabu@do@color@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
   \afterassignment\tabu@begin@color@b@x
                        \setbox\z@ \hbox
}% \tabu@color@b@x
\def\tabu@begin@color@b@x{%
   \bgroup \kern\fboxsep \set@color
   \aftergroup\tabu@end@color@b@x
}% \tabu@begin@color@b@x
\def\tabu@end@color@b@x{\kern\fboxsep \egroup
  \dimen@\ht\z@\advance\dimen@\fboxsep\ht\z@\dimen@
  \dimen@\dp\z@\advance\dimen@\fboxsep\dp\z@\dimen@
  \tabu@do@color@b@x
}% \tabu@end@color@b@x
\def\tabu@temp#1#2{{\toks@\expandafter{#2\arraybackslash}\xdef#1{\the\toks@}}}
\tabu@temp \tabu@centering   \centering
\tabu@temp \tabu@raggedleft  \raggedleft
\tabu@temp \tabu@raggedright \raggedright
\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
       \expandafter\let\expandafter\\\expandafter\@normalcr\@trivlist}}%
\def\tabu@fix@arrayright{%
   \@ifpackageloaded{arydshln}
   {%
   \@ifpackageloaded{colortbl}
      {%% colortbl + arydshln
      \def\tabu@endarray{%
         \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original>
         \@arrayright     % <FC>
         \gdef\@preamble{}% <FC>
                  }}% \endarray
      {%% arydshln / no colortbl
      \def\tabu@endarray{%
         \adl@endarray \egroup \adl@arrayrestore \egroup %<original>
         \@arrayright     % <FC>
         \gdef\@preamble{}% <FC>
                  }}% \endarray
   }%
   {%
   \@ifpackageloaded{colortbl}
      {%% colortbl / no arydshln
      \def\tabu@endarray{%
         \crcr \egroup \egroup
         \@arrayright  % <FC>
         \gdef\@preamble{}\CT@end
                  }}%
      {\PackageWarning{tabu}
         {\string\@arrayright\space is missing from the
         \MessageBreak definition of \string\endarray.
         \MessageBreak Comptability with delarray.sty is broken.}}%
   }%
}% \tabu@fix@arrayright
\def\tabu@adl@xarraydashrule#1#2#3{%
     \ifnum\@lastchclass=\adl@class@start\else
     \ifnum\@lastchclass=\@ne\else
     \ifnum\@lastchclass=5 \else % <FC> @-arg (class 5) and !-arg (class 1)
             \adl@leftrulefalse \fi\fi           % must be treated the same
     \fi
     \ifadl@zwvrule\else \ifadl@inactive\else
             \@addtopreamble{\vrule\@width\arrayrulewidth
                     \@height\z@ \@depth\z@}\fi \fi
     \ifadl@leftrule
             \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}%
                     {\number#1}#3}%
     \else   \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}%
                     {\number#2}#3}
     \fi
}% \tabu@adl@xarraydashrule
\def\tabu@adl@act@endpbox{%
   \unskip \ifhmode \nobreak \fi    \@finalstrut \@arstrutbox
   \egroup \egroup
   \adl@colhtdp \box\adl@box \hfil
}% \tabu@adl@act@endpbox
\def\tabu@adl@fix{%
   \let\adl@xarraydashrule \tabu@adl@xarraydashrule % <fix> arydshln
   \let\adl@act@endpbox    \tabu@adl@act@endpbox    % <fix> arydshln
   \let\adl@act@@endpbox   \tabu@adl@act@endpbox    % <fix> arydshln
   \let\@preamerror        \@preamerr               % <fix> arydshln
}% \tabu@adl@fix
\endinput
%%
%% End of file `tabu.sty'.
