%%
%% This is file `randomlist.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% randomlist.dtx  (with options: `tex')
%% 
%% randomlist.dtx
%% Copyleft 2013-2017 J.-C. Charpentier & C. Tellechea
%% Packages `randomlist' to use with (La)eTeX
%% Copyleft (L) 2013-2017 Jean-C\^ome Charpentier & Christian Tellechea.
%% \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         \~}
%%
\csname RandomListLoaded\endcsname
\let\RandomListLoaded\endinput
\edef\RLAtCatcode{\the\catcode`\@}
\catcode`\@=11
\ifx\@ifnextchar\@undefined
  \long\def\@ifnextchar#1#2#3{%
    \let\reserved@d=#1%
    \def\reserved@a{#2}%
    \def\reserved@b{#3}%
    \futurelet\@let@token\@ifnch}
  \def\@ifnch{%
    \ifx\@let@token\@sptoken
      \let\reserved@c\@xifnch
    \else
      \ifx\@let@token\reserved@d
        \let\reserved@c\reserved@a
      \else
        \let\reserved@c\reserved@b
      \fi
    \fi
    \reserved@c}
  \def\:{\let\@sptoken= } \:  %
  \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}
\fi
\ifx\PackageError\@undefined
  \long\def\@firstoftwo#1#2{#1}
  \long\def\@secondoftwo#1#2{#2}
  \def\@nnil{\@nil}%
  \alloc@7\write\chardef\sixt@@n\@unused
  \def\typeout#1{\immediate\write\@unused{#1}}%
  \def\@spaces{\space\space\space\space}
  \def\PackageError#1#2#3{%
    \begingroup
    \newlinechar`\^^J
    \edef\RL@temp{#3}%
    \expandafter\errhelp\expandafter{\RL@temp}%
    \typeout{%
      #1 error. \space See User's Manual for further information.^^J
      \@spaces\@spaces\@spaces\@spaces
      Type \space H <return> \space for immediate help.}%
    \errmessage{#2}%
    \endgroup
  }
\fi
\ifx\numexpr\@undefined
    \begingroup
    \newlinechar`\^^J
    \errhelp{Run under etex, pdftex, xetex, luatex, ... but not under
      tex}%
    \typeout{%
      randomlist error. \space See User's Manual for further information.^^J
      \@spaces\@spaces\@spaces\@spaces
      Type \space H <return> \space for immediate help.}%
    \errmessage{You can't use randomlist under tex without etex extension.}%
    \endgroup
\fi
\ifx\@gobble\@undefined
  \long\def\@gobble#1{}
\fi
\def\RL@addtomacro#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\def\RL@ifempty#1{%
  \ifcat\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\newcount\RL@random
\newcount\RL@random@a
\newcount\RL@random@b
\def\RLsetrandomseed#1{%
  \ifnum#1=0
    \global\RL@random \numexpr \time + \year * \month * \day \relax
  \else
    \global\RL@random \numexpr \ifnum#1<0 -\fi#1 \relax
  \fi
}
\ifx\RL@seed\@undefined
  \RLsetrandomseed{0}
\else
  \RLsetrandomseed{\RL@seed}
\fi
\def\RL@nextrand{%
  \global\RL@random@a=\RL@random
  \global\divide\RL@random@a 127773
  \global\RL@random@b=\RL@random@a
  \global\multiply\RL@random@a -2836
  \global\multiply\RL@random@b -127773
  \global\advance\RL@random\RL@random@b
  \global\multiply\RL@random 16807
  \global\advance\RL@random\RL@random@a
  \ifnum\RL@random<0
    \global\advance\RL@random 2147483647
  \fi
}
\def\RLuniformdeviate#1#2{%
  \RL@nextrand
  \global\RL@random@a=\RL@random
  \global\RL@random@b=\RL@random
  \global\divide\RL@random@a \numexpr#1\relax
  \global\RL@random@b \numexpr\RL@random@b - \RL@random@a * (#1)\relax
  \expandafter\edef\csname #2\endcsname{\number\RL@random@b}%
}%
\newtoks\@ListOfList
\def\@ifIsList#1{%
  \expandafter\@ifIsList@\expandafter{#1}%
}
\def\@ifIsList@#1{%
  \def\@@ifIsList##1#1\sep##2\@@ifIsList{%
    \csname @\ifx\empty##2\empty second\else first\fi oftwo\endcsname
  }%
  \expandafter\@@ifIsList\the\@ListOfList#1\sep\@@ifIsList
}
\def\RL@lenof#1{\csname #1-len\endcsname}
\newif\if@EmptyListFound
\def\@ifIsListNotEmpty#1{%
  \global\@EmptyListFoundfalse
  \@ifIsList{#1}{%
    \ifnum\RL@lenof{#1}=0
      \global\@EmptyListFoundtrue
      \expandafter\@secondoftwo
    \else
      \expandafter\@firstoftwo
    \fi
  }%
  \@secondoftwo
}
\def\@NoListError#1{%
  \if@EmptyListFound
    \@EmptyListError{#1}%
    \global\@EmptyListFoundfalse
  \else
    \PackageError{randomlist}%
                 {List #1 doesn't exist}%
                 {Maybe you mistyped the list name?}%
  \fi
}
\def\@EmptyListError#1{%
  \if@EmptyListFound
  \PackageError{randomlist}%
               {List #1 is empty}%
               {Ask yourself why this list is empty.}%
}
\def\@OutOfRangeError#1#2{%
  \PackageError{randomlist}%
               {Index #2 is greater than last index of list #1}%
               {There aren't enough elements in the list.}%
}
\long\def\RL@nameldef#1{%
  \long\expandafter\def\csname #1\endcsname
}
\long\def\RL@nameledef#1{%
  \long\expandafter\edef\csname #1\endcsname
}
\long\def\RL@namelgdef#1{%
  \long\expandafter\gdef\csname #1\endcsname
}
\long\def\RL@namelxdef#1{%
  \long\expandafter\xdef\csname #1\endcsname
}
\def\RL@let#1#2{%
  \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname
}
\long\def\RL@doafterfi#1\fi{\fi#1}
\def\RLfor#1=#2to#3\do{%
  \edef#1{\number\numexpr#2}%
  \edef\RL@sgncomp{\ifnum#1<\numexpr#3\relax>+\else<-\fi}%
  \expandafter\RLfor@i
  \csname RLfor@ii@\string#1\expandafter\endcsname\expandafter
  {\number\numexpr#3\expandafter}%
  \RL@sgncomp
  #1%
}
\long\def\RLfor@i#1#2#3#4#5#6{%
  \def#1{%
    \unless\ifnum#5#3#2\relax
    \RL@doafterfi{%
      #6%
      \edef#5{\number\numexpr#5#41\relax}%
      #1%
    }%
    \fi
  }%
  #1%
}
\def\NewList#1{%
  \@ifIsList{#1}{%
    \PackageError{randomlist}%
                 {List #1 already exists}%
                 {Use \string\ClearList.}%
  }%
  {%
    \ifcsname #1\endcsname
      \PackageError{randomlist}%
                   {Command \csname#1\endcsname already exists}%
                   {Creating list #1 defines a \csname#1\endcsname command.}%
    \else
      \RL@nameldef{#1-len}{0}%
      \@ListOfList\expandafter{\the\@ListOfList#1\sep}%
      \expandafter\def\csname #1\endcsname[##1]{%
        \ifnum##1>\csname#1-len\endcsname
          \relax
        \else
          \csname #1-##1\endcsname
        \fi
      }%
    \fi
  }%
}
\def\ClearList#1{%
  \@ifIsList{#1}{%
     \RL@nameldef{#1-len}{0}%
  }%
  {\@NoListError{#1}}%
}
\def\CopyList#1#2{%
  \@ifIsList{#1}{%
    \@ifIsList{#2}{%
      \RL@let{#2-len}{#1-len}%
      \ifnum\RL@lenof{#1}>0
        \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do{%
          \RL@let{#2-\RL@iter}{#1-\RL@iter}%
        }%
      \fi
    }%
    {\@NoListError{#2}}%
  }%
  {\@NoListError{#1}}%
}
\def\InsertList#1#2#3{%
  \@ifIsList{#1}{%
    \@ifIsList{#3}{%
      \ifnum #2>\RL@lenof{#1}
        \@OutOfRangeError{#1}{#2}%
      \else
        \ShiftList{#1}{#2}{\RL@lenof{#3}}%
        \ifnum\RL@lenof{#3}>0
          \RLfor\RL@iter=0 to \RL@lenof{#3}-1 \do{%
            \RL@let{#1-\number\numexpr\RL@iter+#2}{#3-\RL@iter}%
          }%
        \fi
      \fi
    }%
    {\@NoListError{#3}}%
  }%
  {\@NoListError{#1}}%
}
\newcount\RL@counti
\newcount\RL@countii
\newcount\RL@countiii
\def\ShowList#1{%
  \@ifIsList{#1}{%
    \ifhmode\par\noindent\fi
    \begingroup
      \ifdefined\ttfamily\ttfamily\else\tt\fi
      BEGIN\detokenize{{#1}}
      (\ifcase\RL@lenof{#1}
        empty list%
      \or
        1 element%
      \else
        \RL@lenof{#1} elements%
      \fi)\par
      \ifnum\RL@lenof{#1}>0
        \parindent=1em
        \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do {%
          #1[\RL@iter] = \expandafter\RL@meaning\csname
          #1-\RL@iter\endcsname
          \par
        }%
      \fi
      \noindent
      END\detokenize{{#1}}\par
    \endgroup
  }%
  {\@NoListError{#1}}%
}
\def\RL@meaning#1{\expandafter\RL@meaningi\meaning#1}
\expandafter\def\expandafter\RL@meaningi\expandafter#\expandafter1\string>{}
\def\CountList#1#2{%
  \@ifIsList{#1}%
  {\RL@nameledef{#2}{\RL@lenof{#1}}}%
  {\@NoListError{#1}}%
}
\def\ShiftList#1#2#3{%
  \@ifIsList{#1}%
  {%
    \unless\ifnum#3=0
      \ifnum\numexpr#2<0
        \PackageError{randomlist}%
                     {Negative index number}%
                     {Index must be equal or greater than 0}%
      \else
      \ifnum\numexpr#2>\RL@lenof{#1}\relax
        \PackageError{randomlist}%
                     {Index \number\numexpr #2\relax\space too big
                       (<=\RL@lenof{#1})}%
                     {Index must be equal or smaller than length of
                       the list}%
      \else
      \ifnum\numexpr#3>0
        \RLfor\RL@iter = \RL@lenof{#1} to #2 \do{%
          \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
        }%
        \RLfor\RL@iter = #2 to #2 + #3 - 1 \do{%
          \RL@nameldef{#1-\RL@iter}{}%
        }%
      \else
        \ifnum-#3>\numexpr#2\relax
          \PackageError{randomlist}%
                       {Negative shift to big}%
                       {When negative, shift must not be greater than index}%
        \else
          \RLfor\RL@iter=#2 to \RL@lenof{#1} \do{%
            \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
          }%
        \fi
      \fi
      \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1} + #3}%
    \fi\fi\fi
  }%
  {\@NoListError{#1}}%
}
\long\def\InsertLastItem#1#2{%
  \@ifIsList{#1}
  {%
    \RL@nameldef{#1-\RL@lenof{#1}}{#2}%
    \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}+1}%
  }
  {\@NoListError{#1}}%
}
\long\def\InsertFirstItem#1#2{%
  \InsertItem{#1}{0}{#2}%
}
\long\def\InsertItem#1#2#3{%
  \@ifIsList{#1}%
  {%
    \ShiftList{#1}{#2}{1}%
    \RL@nameldef{#1-#2}{#3}%
  }%
  {\@NoListError{#1}}%
}
\long\def\InsertRandomItem#1#2{%
  \@ifIsList{#1}%
  {%
    \RLuniformdeviate{\RL@lenof{#1}+1}{RL@temp}%
    \InsertItem{#1}{\RL@temp}{#2}%
  }%
  {\@NoListError{#1}}%
}
\def\ExtractFirstItem#1#2{%
  \@ifIsList{#1}%
  {%
    \ExtractItem{#1}{0}{#2}%
  }%
  {\@NoListError{#1}}%
}
\def\ExtractLastItem#1#2{%
  \@ifIsListNotEmpty{#1}%
  {%
    \RL@let{#2}{#1-\number\numexpr\RL@lenof{#1}-1}%
    \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}-1}%
  }%
  {\@NoListError{#1}}%
}
\def\ExtractItem#1#2#3{%
  \@ifIsListNotEmpty{#1}%
  {%
    \RL@let{#3}{#1-#2}%
    \ShiftList{#1}{#2+1}{-1}%
  }%
  {\@NoListError{#1}}%
}
\def\ExtractRandomItem#1#2{%
  \@ifIsListNotEmpty{#1}%
  {%
    \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
    \ExtractItem{#1}{\RL@temp}{#2}%
  }%
  {\@NoListError{#1}}%
}
\def\ExtractList#1#2#3#4{%
  \@ifIsList{#1}{%
    \@ifIsList{#4}{%
      \ifnum#2<\RL@lenof{#1}%
        \ifnum#3<\RL@lenof{#1}%
          \ifnum#2>#3\relax
            \RL@nameldef{#4-len}{0}%
          \else
            \RLfor\RL@iterextract=0 to #3 - #2 \do{%
              \RL@let{#4-\RL@iterextract}{#1-#2}%
              \ExtractItem{#1}{#2}{RL@temp}%
            }%
            \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
          \fi
        \else
          \@OutOfRangeError{#1}{#3}%
        \fi
      \else
        \@OutOfRangeError{#1}{#2}%
      \fi
    }%
    {\@NoListError{#4}}%
  }%
  {\@NoListError{#1}}%
}
\def\GetFirstItem#1#2{%
  \GetItem{#1}{0}{#2}%
}
\def\GetLastItem#1#2{%
  \GetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
}
\def\GetItem#1#2#3{%
  \@ifIsListNotEmpty{#1}
  {%
    \ifnum\numexpr\RL@lenof{#1}-1-#2<0
      \@OutOfRangeError{#1}{#2}%
    \else
      \RL@let{#3}{#1-#2}%
    \fi
  }
  {\@NoListError{#1}}%
}
\def\GetRandomItem#1#2{%
  \@ifIsListNotEmpty{#1}%
  {%
    \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
    \GetItem{#1}{\RL@temp}{#2}%
  }%
  {\@NoListError{#1}}%
}
\def\GetList#1#2#3#4{%
  \@ifIsList{#1}{%
    \@ifIsList{#4}{%
      \ifnum#2<\RL@lenof{#1}%
        \ifnum#3<\RL@lenof{#1}%
          \ifnum#2>#3\relax
            \RL@nameldef{#4-len}{0}%
          \else
            \RLfor\RL@iter=#2 to #3 \do{%
              \RL@let{#4-\number\numexpr \RL@iter - #2}{#1-\RL@iter}%
            }%
            \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
          \fi
        \else
          \@OutOfRangeError{#1}{#3}%
        \fi
      \else
        \@OutOfRangeError{#1}{#2}%
      \fi
    }%
    {\@NoListError{#4}}%
  }%
  {\@NoListError{#1}}%
}
\long\def\SetFirstItem#1#2{%
  \SetItem{#1}{0}{#2}%
}
\long\def\SetLastItem#1#2{%
  \SetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
}
\long\def\SetItem#1#2#3{%
  \@ifIsListNotEmpty{#1}%
  {%
    \ifnum\numexpr\RL@lenof{#1}-1-#2<0
      \@OutOfRangeError{#1}{#2}%
    \else
      \RL@nameldef{#1-#2}{#3}%
    \fi
  }%
  {\@NoListError{#1}}%%
}
\long\def\SetRandomItem#1#2{%
  \@ifIsListNotEmpty{#1}%
  {%
    \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
    \SetItem{#1}{\RL@temp}{#2}%
  }%
  {\@NoListError{#1}}%
}
\def\SetList#1#2{%
  \@ifIsList{#1}%
  {%
    \ClearList{#1}%
    \def\RL@name{#1}%
    \RL@setlist#2,\@nil,%
  }%
  {\@NoListError{#1}}%
}
\long\def\RL@setlist#1,{%
  \def\RL@arg{#1}%
  \unless\ifx\RL@arg\@nnil
    \InsertLastItem{\RL@name}{#1}%
    \expandafter\RL@setlist
  \fi
}
\long\def\ForEachFirstItem#1#2#3{%
  \begingroup
    \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
      \ExtractFirstItem{#1}{#2}%
      #3%
    }%
  \endgroup
}
\long\def\ForEachLastItem#1#2#3{%
  \begingroup
    \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
      \ExtractLastItem{#1}{#2}%
      #3%
    }%
  \endgroup
}
\long\def\ForEachRandomItem#1#2#3{%
  \begingroup
    \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
      \ExtractRandomItem{#1}{#2}%
      #3%
    }%
  \endgroup
}
\long\def\ReadFieldItem#1#2#3{%
  \RL@counti #2\relax
  \expandafter\RL@ReadFieldItem#1\@nil
  \expandafter\let\csname#3\endcsname\RL@temp
}
\long\def\RL@ReadFieldItem{%
  \@ifnextchar\bgroup{\RL@@ReadFieldItem}{\RL@@ReadFieldItemError}%
}
\long\def\RL@@ReadFieldItem#1{%
  \ifnum\RL@counti=\z@
    \def\RL@temp{#1}%
    \expandafter\RL@@ReadFieldItemEnd
  \else
    \advance\RL@counti \m@ne
    \expandafter\RL@ReadFieldItem
  \fi
}
\long\def\RL@@ReadFieldItemEnd#1\@nil{}
\long\def\RL@@ReadFieldItemError#1\@nil{%
  \PackageError{randomlist}%
               {There aren't enough fields in the record}%
               {Pay attention that field number starts from zero.}%
}
\def\RL@SetDelimiters#1#2#3\@nil{%
  \def\RL@markstrings##1{%
    \let\RL@accu\empty
    \expandafter\RL@markstrings@i##1#2\@nil#2%
    \let##1=\RL@accu
  }%
  \def\RL@markstrings@i##1#2##2#2{%
    \RL@addtomacro\RL@accu{##1}%
    \def\RL@current{##2}%
    \unless\ifx\@nnil\RL@current
      \RL@addtomacro\RL@accu{\RL@string{##2}}%
      \expandafter\RL@markstrings@i
    \fi
  }%
  \def\RL@unmarkstrings##1{%
    \let\RL@accuA\empty
    \expandafter\RL@unmarkstrings@i##1\RL@string\@nil
    \let##1=\RL@accuA
  }%
  \def\RL@unmarkstrings@i##1\RL@string##2{%
    \RL@addtomacro\RL@accuA{##1}%
    \def\RL@current{##2}%
    \unless\ifx\@nnil\RL@current
      \RL@ifempty{##2}%
        {\RL@addtomacro\RL@accuA{#2}}%
        {\RL@addtomacro\RL@accuA{##2}}%
      \expandafter\RL@unmarkstrings@i
    \fi
  }%
  \def\RL@parsefields##1{%
    \let\RL@accu\empty
    \expandafter\RL@parsefields@i##1#1\@nil#1%
    \let##1=\RL@accu
  }%
  \def\RL@parsefields@i##1#1{%
    \def\RL@current{##1}%
    \unless\ifx\@nnil\RL@current
      \RL@unmarkstrings\RL@current
      \RL@removefirstspaces\RL@current
      \RL@removelastspaces \RL@current
      \expandafter\RL@addtomacro\expandafter\RL@accu\expandafter
        {\expandafter{\RL@current}}%
      \expandafter\RL@parsefields@i
    \fi
  }%
}
\newread\RL@hdle
\def\@ppar{\par}
\def\ReadFileList{\@ifnextchar[{\@ReadFileList}{\@ReadFileList[,"]}}
\def\@ReadFileList[#1]#2#3{%
  \openin \RL@hdle = #3
  \ifeof\RL@hdle
    \PackageError{randomlist}%
      {File #3 doesn't exist}%
      {Verify its name, its extension, its location, its permissions.}%
  \else
    \RL@ifempty{#1}%
      {%
        \PackageError{randomlist}
          {Optional argument empty: [,"] inserted}
          {Do not leave an optional argument empty}%
          \RL@SetDelimiters,"\@nil
      }
      {\RL@SetDelimiters#1"\@nil}%
    \loop
      \read\RL@hdle to \RL@buffer
      \unless\ifx\RL@buffer\@ppar
        \RL@markstrings\RL@buffer
        \RL@parsefields\RL@buffer
        \def\RL@accuA{\InsertLastItem{#2}}%
        \expandafter\RL@accuA\expandafter{\RL@buffer}%
      \fi
      \ifeof\RL@hdle\else
    \repeat
  \fi
}
\def\RL@ifspacefirst#1{%
  \RL@ifspacefirst@i#1A \@nil
}
\expandafter\def\expandafter\RL@ifspacefirst@i
  \expandafter#\expandafter1\space#2\@nil{%
    \RL@ifempty{#1}%
}
\def\RL@removefirstspaces#1{%
  \expandafter\RL@ifspacefirst\expandafter{#1}
    {\expandafter\removefistspace@i#1\@nil#1}
    {}%
}
\expandafter\def\expandafter\removefistspace@i\space#1\@nil#2{%
  \def#2{#1}%
  \RL@removefirstspaces#2%
}
\edef\RL@restorecatcodezero{\catcode0=\number\catcode0\relax}
\catcode0=12
\def\RL@removelastspaces#1{%
  \expandafter\def\expandafter#1\expandafter{%
    \romannumeral\expandafter
    \RL@removelastspaces@i\expandafter\relax#1^^00 ^^00\@nil
  }%
}
\def\RL@removelastspaces@i#1 ^^00{\RL@removelastspaces@ii#1^^00}
\def\RL@removelastspaces@ii#1^^00#2\@nil{%
  \RL@ifspacefirst{#2}
    {\RL@removelastspaces@i#1^^00 ^^00\@nil}
    {\expandafter\z@\@gobble#1}%
}
\RL@restorecatcodezero
\catcode`\@=\RLAtCatcode\relax
\endinput
%%
%% End of file `randomlist.tex'.