From e244e1c4b6d2aa14172a2a960118781b8aaa12a8 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 14 Jul 2012 23:27:39 +0000
Subject: biblatex 2.0 (8jul12)

git-svn-id: svn://tug.org/texlive/trunk@27055 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/biblatex/biblatex2.sty | 10362 +++++++++++++++++++
 1 file changed, 10362 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/biblatex/biblatex2.sty

(limited to 'Master/texmf-dist/tex/latex/biblatex/biblatex2.sty')

diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex2.sty b/Master/texmf-dist/tex/latex/biblatex/biblatex2.sty
new file mode 100644
index 00000000000..079897b93e1
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/biblatex/biblatex2.sty
@@ -0,0 +1,10362 @@
+% Copyright (c) 2006-2011 Philipp Lehman.
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{biblatex2}
+[\abx@date\space v\abx@version\space programmable bibliographies (biber) (PK/JW/AB)]
+
+%% Dependencies
+\RequirePackage{etoolbox}
+\RequirePackage{keyval}
+\RequirePackage{kvoptions}
+\RequirePackage{logreq}
+\RequirePackage{ifthen}
+\RequirePackage{url}
+
+\@ifpackagelater{etoolbox}{2010/11/29}
+  {}
+  {\PackageError{biblatex}
+     {Outdated 'etoolbox' package}
+     {Upgrade to etoolbox v2.1 (2010/11/29) or later.\MessageBreak
+      I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak
+      This is a fatal error. I'm aborting now.}%
+   \endinput}
+
+%% Category codes
+
+\def\blx@docatcodes{%
+  \do\=\do\<\do\>\do\-\do\"\do\'\do\`\do\.%
+  \do\,\do\;\do\:\do\!\do\?\do\/}
+\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
+\edef\blx@catcodes{\blx@docatcodes\do\^\do\~\do\&\do\|}
+\let\do\noexpand
+
+\def\blx@saneccodes{%
+  \catcode`\~=\active
+  \let\do\@makeother
+  \blx@docatcodes
+  \let\do\noexpand}
+
+\blx@saneccodes
+\catcode`\&=3
+\catcode`\|=3
+\catcode`\^=7
+\def\blx@nl{^^J}
+
+%% Compatibility
+
+\AtEndPreamble{%
+  \def\do#1{%
+    \@ifpackageloaded{#1}
+      {\blx@error
+         {Incompatible package '#1'}
+         {The '#1' package and biblatex are incompatible}}
+      {}}%
+  \docsvlist{%
+    amsrefs,apacite,babelbib,backref,bibtopic,bibunits,chapterbib,
+    cite,citeref,drftcite,footbib,inlinebib,jurabib,mcite,mciteplus,
+    mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs}%
+  \@ifpackageloaded{babel}
+    {\iftoggle{blx@autolang}
+       {\blx@mkbabel}
+       {\blx@mknobabel}}
+    {\blx@mknobabel}%
+  \csuse{abx@extras@\blx@languagename}%
+  \csuse{abx@strings@\blx@languagename}%
+  \undef\blx@mkbabel
+  \undef\blx@mknobabel
+  \ifnum\blx@hyperref=\z@
+    \blx@mknohyperref
+  \else
+    \@ifpackageloaded{hyperref}
+      {\blx@mkhyperref}
+      {\ifnum\blx@hyperref=\@ne
+         \blx@warning@noline{%
+           Missing 'hyperref' package.\MessageBreak
+           Setting hyperref=false}%
+       \fi
+       \blx@mknohyperref}%
+  \fi
+  \providecommand*{\nolinkurl}{\url}%
+  \undef\blx@mkhyperref
+  \undef\blx@mknohyperref
+  \ifundef\TE@hook
+    {\let\TE@hook\@empty
+     \toggletrue{blx@tempa}%
+     \def\do#1{%
+       \patchcmd#1%
+         {\let\isundefined\TE@undef}
+         {\let\isundefined\TE@undef\TE@hook}
+         {\togglefalse{blx@tempa}\listbreak}
+         {}}%
+     \docsvlist{%
+       \ifthenelse,%          ifthen
+       \org@ifthenelse,%      babel
+       \HyOrg@ifthenelse,%    hyperref
+       \NROrg@ifthenelse}%    nameref
+     \iftoggle{blx@tempa}
+       {\blx@err@patch{'ifthen' package}}
+       {}}
+    {}%
+  \appto\TE@hook{\blx@TE@hook}%
+  \toggletrue{blx@tempa}%
+  \def\do#1{%
+    \patchcmd#1%
+      {\color@begingroup}
+      {\color@begingroup\toggletrue{blx@footnote}}
+      {\togglefalse{blx@tempa}\listbreak}
+      {}}%
+  \docsvlist{%
+    \@footnotetext,%          latex
+    \H@@footnotetext,%        hyperref
+    \V@@footnotetext,%        fancyvrb
+    \scr@saved@footnotetext,% koma-script 3.x
+    \l@dold@footnotetext,%    ledmac
+    \l@doldold@footnotetext,% ledmac
+    \@fntORI}%                frenchle
+  \iftoggle{blx@tempa}%       ams classes
+    {\patchcmd\@footnotetext
+       {\@makefntext}
+       {\toggletrue{blx@footnote}\@makefntext}
+       {\togglefalse{blx@tempa}}
+       {}}
+    {}%
+  \@ifclassloaded{memoir}
+    {\def\do#1{%
+       \patchcmd#1%
+         {\color@begingroup}
+         {\color@begingroup\toggletrue{blx@footnote}}
+         {}
+         {}}%
+     \docsvlist{%
+       \m@mold@footnotetext,%
+       \@plainfootnotetext,%
+       \@twocolfootnotetext,%
+       \@threecolfootnotetext,%
+       \@parafootnotetext}%
+     \def\do#1{%
+       \patchcmd#1%
+         {\color@begingroup\@makefntext}
+         {\color@begingroup\toggletrue{blx@footnote}\@makefntext}
+         {}
+         {}}%
+     \docsvlist{%
+       \@footnotetext,% patch twice
+       \@plainfootnotetext}}
+    {}%
+  \iftoggle{blx@tempa}
+    {\blx@warning@noline{%
+       Patching footnotes failed.\MessageBreak
+       Footnote detection will not work}}
+    {}%
+  \@ifpackageloaded{endnotes}
+    {\patchcmd\theendnotes
+       {\enoteformat}
+       {\toggletrue{blx@footnote}\enoteformat}
+       {}
+       {\blx@err@patch{'endnotes' package}}}
+    {}%
+  \@ifpackageloaded{bigfoot}
+    {\apptocmd\@makefnstartbox
+       {\toggletrue{blx@footnote}}
+       {}
+       {\blx@err@patch{'bigfoot' package}}}
+    {}%
+  \@ifpackageloaded{showkeys}
+    {\ifdef\SK@
+       {\AtEveryBibitem{\SK@\SK@@label{\thefield{entrykey}}}%
+        \AtEveryLositem{\SK@\SK@@label{\thefield{entrykey}}}%
+        \ifundef\SK@cite % = 'notcite' disabled
+          {\AtEveryCitekey{\SK@\SK@@ref{\thefield{entrykey}}}}
+          {}}
+       {}}
+    {}%
+  \apptocmd\@floatboxreset
+    {\boolfalse{citetracker}%
+     \boolfalse{pagetracker}}
+    {}
+    {\blx@err@patch{floats}}%
+  \ifdef\TX@endtabularx % tabularx/memoir
+    {\pretocmd\TX@endtabularx
+      {\addtocounter{tabx@nest}{1}}% track nestes tabularx environments
+      {}
+      {\blx@err@patch{'tabularx'}}%
+      % no need to conditionalise on top-level tabx as the search/replace
+      % will only match once anyway
+     \patchcmd\TX@endtabularx
+      {\edef\TX@ckpt{\cl@@ckpt}}
+      {\edef\TX@ckpt{\cl@@ckpt\abx@resttrackers}%
+        \abx@savetrackers}
+      {}
+      {\blx@err@patch{'tabularx'}}%
+     \apptocmd\TX@endtabularx
+      {\ifnum\value{tabx@nest}=1% only clear trackers for top-level tabularx
+        \abx@cleartrackers
+        \fi
+        \addtocounter{tabx@nest}{-1}}
+      {}
+      {\blx@err@patch{'tabularx'}}}
+    {}%
+  \@ifpackageloaded{csquotes}
+    {\@ifpackagelater{csquotes}{2009/05/30}
+       {}
+       {\blx@error
+          {Outdated 'csquotes' package}
+          {Upgrade to csquotes v4.4 (2009/05/30) or later.\MessageBreak
+           I found: '\csuse{ver@csquotes.sty}'}}%
+     \BlockquoteDisable{\let\blx@thecheckpunct\@gobble}%
+     \@ifpackagelater{csquotes}{2009/08/27}
+       {\appto\@blockquote@prehook{\abx@savetrackers}%
+        \appto\@blockquote@posthook{\abx@resttrackers\abx@cleartrackers}}
+       {}%
+     \@ifpackagelater{csquotes}{2010/06/09}
+       {}
+       {\newcommand*{\@quotereset}{}\newcount\@quotereset}}
+    {\@ifpackageloaded{babel}
+       {\blx@warning@noline{%
+          'babel' detected but 'csquotes' missing.\MessageBreak
+          Loading 'csquotes' recommended}}
+       {}%
+     \newcommand*{\@quotelevel}{}%
+     \newcount\@quotelevel
+     \newcommand*{\@quotereset}{}%
+     \newcount\@quotereset
+     \newcommand*{\@setquotesfcodes}{}%
+     \let\@setquotesfcodes\relax
+     \newrobustcmd*{\initoquote}{\@quotelevel\@ne}%
+     \newrobustcmd*{\initiquote}{\@quotelevel\tw@}%
+     \newrobustcmd*{\textooquote}{``}%
+     \newrobustcmd*{\textcoquote}{''}%
+     \newrobustcmd*{\textoiquote}{`\relax}% block ligs
+     \newrobustcmd*{\textciquote}{'\relax}% block ligs
+     \newrobustcmd*{\enquote}{\@ifstar\blx@enquote@ii\blx@enquote}%
+     \def\blx@enquote{%
+       \ifnum\@quotelevel>\z@
+         \expandafter\blx@enquote@ii
+       \else
+         \expandafter\blx@enquote@i
+       \fi}%
+     \long\def\blx@enquote@i#1{%
+       \begingroup\initoquote
+       \textooquote#1\textcoquote
+       \endgroup}%
+     \long\def\blx@enquote@ii#1{%
+       \begingroup\initiquote
+       \textoiquote#1\textciquote
+       \endgroup}%
+     \appto\blx@setsfcodes{%
+       \sfcode`\`=\z@
+       \sfcode`\'=\z@}}%
+  \let\do\noexpand}
+
+\begingroup
+\@makeother\#
+% \relax: gobble newline -> titletoc.sty
+\AtEndPreamble{%
+  \addtocontents{toc}{%
+     \boolfalse{citerequest}%
+     \boolfalse{citetracker}%
+     \boolfalse{pagetracker}%
+     \boolfalse{backtracker}\relax}%
+  \addtocontents{lof}{%
+     \boolfalse{citerequest}%
+     \boolfalse{citetracker}%
+     \boolfalse{pagetracker}%
+     \boolfalse{backtracker}\relax}%
+  \addtocontents{lot}{%
+     \boolfalse{citerequest}%
+     \boolfalse{citetracker}%
+     \boolfalse{pagetracker}%
+     \boolfalse{backtracker}\relax}%
+  \patchcmd\addtocontents
+    {\string\@writefile}
+    {\string\@writefile{#1}{\defcounter{refsection}{\the\c@refsection}\relax}%
+     \string\@writefile}
+    {}
+    {\blx@err@patch{\string\addtocontents}}}
+\endgroup
+
+% trick hyperref into believing we're natbib
+\let\NAT@parse\@empty
+% trick showkeys into believing we're havard
+\let\HAR@checkdef\@empty
+
+%% Allocation
+
+\providecommand{\@gobblefive}[5]{}
+
+% Counter to track nested tabularx environemnts so we don't
+% try to patch the commands more than once below as this undefs some
+% macros and an error is thrown
+\newcounter{tabx@nest}
+\setcounter{tabx@nest}{0}
+
+\newcounter{listtotal}
+\def\thelisttotal{\the\c@listtotal}
+\newcounter{listcount}
+\def\thelistcount{\the\c@listcount}
+\newcounter{liststart}
+\def\theliststart{\the\c@liststart}
+\newcounter{liststop}
+\def\theliststop{\the\c@liststop}
+\newcounter{citecount}
+\def\thecitecount{\the\c@citecount}
+\newcounter{citetotal}
+\def\thecitetotal{\the\c@citetotal}
+\newcounter{multicitecount}
+\def\themulticitecount{\the\c@multicitecount}
+\newcounter{multicitetotal}
+\def\themulticitetotal{\the\c@multicitetotal}
+\newcounter{instcount}
+\def\theinstcount{\the\c@instcount}
+\newcounter{maxnames}
+\def\themaxnames{\the\c@maxnames}
+\newcounter{minnames}
+\def\theminnames{\the\c@minnames}
+\newcounter{maxitems}
+\def\themaxitems{\the\c@maxitems}
+\newcounter{minitems}
+\def\theminitems{\the\c@minitems}
+\newcounter{citecounter}
+\def\thecitecount{\the\c@citecounter}
+\newcounter{savedcitecounter}
+\def\thecitecount{\the\c@savedcitecounter}
+\newcounter{uniquelist}
+\def\theuniquelist{\the\c@uniquelist}
+\newcounter{uniquename}
+\def\theuniquename{\the\c@uniquename}
+\newcounter{refsection}
+\def\therefsection{\the\c@refsection}
+\newcounter{refsegment}
+\def\therefsegment{\the\c@refsegment}
+\newcounter{maxextratitle}
+\def\themaxextratitle{\the\c@maxextratitle}
+\newcounter{maxextratitleyear}
+\def\themaxextratitleyear{\the\c@maxextratitleyear}
+\newcounter{maxextrayear}
+\def\themaxextrayear{\the\c@maxextrayear}
+\newcounter{maxextraalpha}
+\def\themaxextraalpha{\the\c@maxextraalpha}
+\newcounter{abbrvpenalty}
+\def\theabbrvpenalty{\the\c@abbrvpenalty}
+\newcounter{highnamepenalty}
+\def\thehighnamepenalty{\the\c@highnamepenalty}
+\newcounter{lownamepenalty}
+\def\thelownamepenalty{\the\c@lownamepenalty}
+\newcounter{maxparens}
+\def\themaxparens{\the\c@maxparens}
+\newcounter{parenlevel}
+\def\theparenlevel{\the\c@parenlevel}
+
+\newcount\blx@tempcnta
+\newcount\blx@tempcntb
+\newcount\blx@tempcntc
+\newcount\blx@maxsection
+\expandafter\newcount\csname blx@maxsegment@0\endcsname
+\newcount\blx@notetype
+\newcount\blx@parenlevel@text
+\newcount\blx@parenlevel@foot
+\expandafter\newcount\csname blx@sectionciteorder@0\endcsname
+
+
+
+\def\blx@uniquename{0}
+\def\blx@uniquelist{0}
+\def\blx@maxbibnames{0}
+\def\blx@minbibnames{0}
+\def\blx@maxcitenames{0}
+\def\blx@mincitenames{0}
+\def\blx@maxbibnames@type{\blx@maxbibnames}
+\def\blx@minbibnames@type{\blx@minbibnames}
+\def\blx@maxcitenames@type{\blx@maxcitenames}
+\def\blx@mincitenames@type{\blx@mincitenames}
+\def\blx@maxalphanames{0}
+\def\blx@minalphanames{0}
+\def\blx@maxitems{0}
+\def\blx@minitems{0}
+\def\blx@maxitems@type{\blx@maxitems}
+\def\blx@minitems@type{\blx@minitems}
+
+\newlength{\labelnumberwidth}
+\newlength{\labelalphawidth}
+\newlength{\shorthandwidth}
+\newlength{\biblabelsep}
+\ifdef\bibitemsep % memoir
+  {}
+  {\newlength{\bibitemsep}}
+\newlength{\bibnamesep}
+\newlength{\bibinitsep}
+\newlength{\bibparsep}
+\newlength{\bibhang}
+
+\newbool{sourcemap}
+\newbool{citetracker}
+\newbool{pagetracker}
+\newbool{backtracker}
+\newbool{citerequest}
+\booltrue{citerequest}
+
+\newtoggle{blx@tempa}
+\newtoggle{blx@tempb}
+\newtoggle{blx@runltx}
+\newtoggle{blx@runbiber}
+\newtoggle{blx@block}
+\newtoggle{blx@unit}
+\newtoggle{blx@skipentry}
+\newtoggle{blx@insert}
+\newtoggle{blx@lastins}
+\newtoggle{blx@debug}
+\newtoggle{blx@sortcase}
+\newtoggle{blx@sortupper}
+\newtoggle{blx@autolang}
+\newtoggle{blx@clearlang}
+\newtoggle{blx@defernumbers}
+\newtoggle{blx@omitnumbers}
+\newtoggle{blx@footnote}
+\newtoggle{blx@labelalpha}
+\newtoggle{blx@labelnumber}
+\newtoggle{blx@labeltitle}
+\newtoggle{blx@labeltitleyear}
+\newtoggle{blx@labelyear}
+\newtoggle{blx@natbib}
+\newtoggle{blx@mcite}
+\newtoggle{blx@loadfiles}
+\newtoggle{blx@singletitle}
+\newtoggle{blx@firstinits}
+\newtoggle{blx@sortfirstinits}
+\newtoggle{blx@useauthor}
+\newtoggle{blx@useeditor}
+\newtoggle{blx@usetranslator}
+\newtoggle{blx@useprefix}
+\newtoggle{blx@setonly}
+\newtoggle{blx@dataonly}
+\newtoggle{blx@skipbib}
+\newtoggle{blx@skiplos}
+\newtoggle{blx@skiplab}
+\newtoggle{blx@citation}
+\newtoggle{blx@bibliography}
+\newtoggle{blx@reencode}
+\newtoggle{blx@citeindex}
+\newtoggle{blx@bibindex}
+
+\newread\blx@bcfin
+\newwrite\blx@bcfout
+
+\def\blx@onlypreamble#1{%
+  \gappto\blx@dopreamblecmds{\do#1}}
+
+\def\blx@dopreamblecmds{%
+  \do\blx@dopreamblecmds
+  \do\blx@onlypreamble}
+
+%% Initialization
+
+\def\blx@blxinit{%
+  \let\blx@blxinit\relax
+  \blx@initunit}
+
+\newcommand*{\labelalphaothers}{+}
+\newcommand*{\sortalphaothers}{\labelalphaothers}
+
+\def\blx@secinit{%
+  \csgdef{blx@sections@\the\c@refsection}{true}% just to say we have a section for tests later
+  \ifcsundef{blx@bsee@\the\c@refsection}
+    {\global\cslet{blx@bsee@\the\c@refsection}\@empty}
+    {}%
+  \ifcsundef{blx@fsee@\the\c@refsection}
+    {\global\cslet{blx@fsee@\the\c@refsection}\@empty}
+    {}%
+  \blx@ibidreset@force
+  \blx@idemreset@force
+  \blx@opcitreset@force
+  \blx@loccitreset@force
+  \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
+    {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
+    {}}
+
+%% Auxiliary commands
+
+\protected\def\blx@safe@actives{%
+  \let\blx@if@safe@actives\if@safe@actives
+  \let\if@safe@actives\iftrue}
+
+\protected\def\blx@rest@actives{%
+  \let\if@safe@actives\blx@if@safe@actives}
+
+\protected\def\blx@regimc#1{%
+  \xappto\blx@blxinit{%
+    \let\noexpand#1\expandafter\noexpand\csname
+    blx@imc@\expandafter\@gobble\string#1\endcsname}}
+
+\protected\def\blx@regimcs#1{\blx@regimcs@i#1&}
+\def\blx@regimcs@i#1{%
+  \ifx#1&\else
+    \blx@regimc#1%
+    \expandafter\blx@regimcs@i
+  \fi}
+
+% {<field>} => \do{<item1>}\do{<item2>}...
+
+\def\blx@imc@docsvfield#1{%
+  \blx@imc@iffieldundef{#1}
+    {}
+    {\expandafter\expandafter\expandafter\docsvlist
+     \expandafter\expandafter\expandafter{%
+       \csname abx@field@#1\endcsname}}}
+
+% {<handler>}{<field>} => <handler>{<item1>}<handler>{<item2>}...
+
+\def\blx@imc@forcsvfield#1#2{%
+  \blx@imc@iffieldundef{#2}
+    {}
+    {\expandafter\expandafter\expandafter\blx@imc@forcsvfield@i
+     \expandafter\expandafter\expandafter{%
+       \csname abx@field@#2\endcsname}{#1}}}
+
+\def\blx@imc@forcsvfield@i#1#2{\forcsvlist{#2}{#1}}
+
+\blx@regimcs{\docsvfield \forcsvfield}
+
+% {<list>|<listmacro>}
+
+\protected\long\def\blx@listloop#1{%
+  \expandafter\blx@listloop@i#1|&}
+\long\def\blx@listloop@i#1|{%
+  \ifblank{#1}
+    {\blx@break}
+    {\blx@do{#1}\blx@listloop@i}}
+
+\long\def\blx@break#1&{%
+  \blx@done
+  \undef\blx@do
+  \undef\blx@done}
+
+% {<listmacro>}{<listcsname>} => matches in <listmacro>
+
+\protected\def\blx@filter#1#2{%
+  \def\do##1{%
+    \ifinlistcs{##1}{#2}
+      {\listadd#1{##1}}
+      {}}%
+  \blx@runfilter#1}
+
+% {<listmacro>}{<listcsname>} => matches in <listmacro>
+% Slightly odd use of filtering to do citation sorting.
+% Same as blx@filter but it keeps \tempcnta in step with the
+% resulting number of things in the filtered list. This is
+% because \tempcnta is used to set citetotal - this use
+% of filtering for cite sorting has the side-effect of stripping
+% duplicated like \cite{foo,foo} but we need then to keep citetotal
+% in sync.
+
+\protected\def\blx@filtercitesort#1#2{%
+ \blx@tempcnta\z@
+ \def\do##1{%
+   \ifinlistcs{##1}{#2}
+     {\listadd#1{##1}%
+      \advance\blx@tempcnta\@ne}
+     {}}%
+ \blx@runfilter#1}
+
+% {<listmacro>}{<listcsname>} => neg. matches in <listmacro>
+
+\protected\def\blx@notfilter#1#2{%
+  \def\do##1{%
+    \ifinlistcs{##1}{#2}
+      {}
+      {\listadd#1{##1}}}%
+  \blx@runfilter#1}
+
+\def\blx@runfilter#1{%
+  \begingroup\edef#1{\endgroup
+    \unexpanded{\let#1\@empty\dolistloop}{#1}}%
+  #1\let\do\noexpand}
+
+% {<code>}{<string>} => <code>{<string>}
+
+\protected\def\blx@xsanitizeafter#1#2{%
+  \begingroup
+  \abx@hook@xsanitize
+  \def\blx@tempa{\endgroup#1}%
+  \edef\blx@tempb{#2}%
+  \expandafter\blx@tempa
+  \expandafter{\detokenize\expandafter{\blx@tempb}}}
+
+\def\abx@hook@xsanitize{%
+  \blx@safe@actives
+  \let\protect\string}
+
+% {<code>}{<string>} => <code>{<string>}
+
+\begingroup
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\&=\active
+\catcode`\"=\active
+\catcode`\'=\active
+\protected\gdef\blx@xmlsanitizeafter#1#2{%
+  \begingroup
+  \abx@hook@xsanitize
+  \def\blx@tempa{\endgroup#1}%
+  \edef\blx@tempb{#2}%
+  \let\do\@makeother
+  \dospecials
+  \catcode`\<=\active
+  \catcode`\>=\active
+  \catcode`\&=\active
+  \catcode`\"=\active
+  \catcode`\'=\active
+  \edef<{\string&lt\string;}%
+  \edef>{\string&gt\string;}%
+  \edef&{\string&amp\string;}%
+  \edef"{\string&quot\string;}%
+  \edef'{\string&apos\string;}%
+  \endlinechar\m@ne
+  \everyeof{\noexpand}%
+  \edef\blx@tempb{\scantokens\expandafter{\blx@tempb}}%
+  \expandafter\blx@tempa
+  \expandafter{\detokenize\expandafter{\blx@tempb}}}
+\endgroup
+
+% {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
+
+\protected\long\def\blx@inputonce#1#2#3#4#5#6{%
+  \ifcsundef{blx@file@#1}
+    {\blx@info@noline{Trying to load #2..}%
+     \IfFileExists{#1}
+       {\blx@info@noline{... file '#1' found}%
+        \listxadd\blx@list@req@stat{#1}%
+        #3\@@input\@filef@und#4#5}
+       {\blx@info@noline{... file '#1' not found}#6}%
+     \global\csdef{blx@file@#1}{}%
+     \@addtofilelist{#1}}
+    {#5}}
+
+% {<write>}{<precode>}{<string>}
+
+\protected\def\blx@auxwrite#1#2#3{%
+  \if@filesw
+    \begingroup
+    \blx@safe@actives
+    \let\protect\string
+    #2%
+    \immediate\write#1{#3}%
+    \endgroup
+  \fi}
+
+% {<file>}{<signature>}{<true>}{<false>}
+
+\def\blx@ifsigned#1#2{%
+  \begingroup
+  \let\blx@tempa\@firstoftwo
+  \edef\blx@tempb{\csuse{blx@sig@#2}}%
+  \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
+  \openin\blx@bcfin #1.#2\relax
+    \ifeof\blx@bcfin
+    \else
+      \endlinechar\m@ne
+      \readline\blx@bcfin to \blx@tempc
+      \ifeof\blx@bcfin
+      \else
+        \ifx\blx@tempb\blx@tempc
+          \readline\blx@bcfin to \blx@tempc
+          \edef\blx@tempb{\csuse{blx@ver@#2}}%
+          \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
+          \ifx\blx@tempb\blx@tempc
+          \else
+            \blx@warning@noline{%
+              File '#1.#2' created by wrong version}
+          \fi
+        \else
+          \blx@error
+            {File '#1.#2' not created by biblatex}
+            {This file was apparently not created by biblatex.
+             Rename it or\MessageBreak move it to a location were
+             TeX will not find it. If this error\MessageBreak
+             persists, consider redefining \string\blxauxsuffix.%
+             See the biblatex\MessageBreak manual for details}%
+          \let\blx@tempa\@secondoftwo
+        \fi
+      \fi
+    \fi
+  \closein\blx@bcfin
+  \expandafter\endgroup\blx@tempa}
+
+\def\blx@sig@bib{@Comment{$ biblatex control file $}}
+\edef\blx@ver@bib{@Comment{$ biblatex version \blx@bblversion\space $}}
+\edef\blx@sig@aux{\@percentchar\space $ biblatex auxiliary file $}
+\edef\blx@ver@aux{\@percentchar\space$ biblatex version \blx@bblversion\space $}
+\let\blx@sig@bbl\blx@sig@aux
+\let\blx@ver@bbl\blx@ver@aux
+\edef\blx@sig@bcf{\detokenize{<?xml version="1.0" encoding="UTF-8"?>}}
+\edef\blx@ver@bcf{%
+  \detokenize{<bcf:controlfile version="}\blx@bblversion
+  \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}}
+
+\edef\blx@msg@aux{%
+  \blx@sig@aux\blx@nl
+  \blx@ver@aux\blx@nl
+  \@percentchar\space Do not modify this file!\blx@nl
+  \@percentchar\blx@nl
+  \@percentchar\space This is an auxiliary file
+  used by the 'biblatex' package.\blx@nl
+  \@percentchar\space This file may safely be deleted.
+  It will be recreated as\blx@nl
+  \@percentchar\space required.\blx@nl
+  \@percentchar\blx@nl\string\relax\blx@nl}
+\edef\blx@msg@bib{%
+  \blx@sig@bib\blx@nl
+  \blx@ver@bib\blx@nl
+  Do not modify this file!\blx@nl\blx@nl
+  This is an auxiliary file used
+  by the 'biblatex' package.\blx@nl
+  This file may safely be deleted.
+  It will be recreated as\blx@nl
+  required.\blx@nl\blx@nl}
+
+% {<true>}{<false>}
+
+\newrobustcmd*{\lbx@ifutfinput}{\ifboolexpr{%
+  test {\ifdefstring\inputencodingname{utf8}}
+  or
+  test {\ifdefstring\inputencodingname{utf8x}}
+  or
+  test {\ifdefstring\inputencodingname{lutf8}}
+  or
+  ( test {\ifundef\inputencodingname}
+    and
+    ( not test {\ifundef\XeTeXrevision}
+      or
+      not test {\ifundef\luatexversion}
+    )
+  )
+}}
+
+%% User feedback
+
+\protected\def\blx@error#1#2{%
+  \begingroup
+  \blx@safe@actives
+  \PackageError{biblatex}{#1}{#2.}%
+  \endgroup}
+
+\protected\def\blx@warning#1{%
+  \begingroup
+  \blx@safe@actives
+  \PackageWarning{biblatex}{#1\blx@noline}%
+  \endgroup}
+\protected\def\blx@warning@noline#1{%
+  \begingroup
+  \blx@safe@actives
+  \PackageWarningNoLine{biblatex}{#1}%
+  \endgroup}
+\protected\def\blx@warning@entry#1{%
+  \ifdef\abx@field@entrykey
+    {\blx@warning{#1\MessageBreak at entry '\abx@field@entrykey'}}
+    {\blx@warning{#1}}}
+
+\protected\def\blx@info#1{%
+  \begingroup
+  \blx@safe@actives
+  \PackageInfo{biblatex}{#1\blx@noline}%
+  \endgroup}
+\def\blx@info@noline#1{%
+  \begingroup
+  \blx@safe@actives
+  \PackageInfo{biblatex}{#1\@gobble}%
+  \endgroup}
+
+\let\blx@noline\@gobble
+\AtEndOfPackage{\let\blx@noline\@empty}
+\def\blx@imc@BibliographyWarning{\blx@warning@entry}
+\blx@regimc\BibliographyWarning
+
+\protected\def\abx@missing#1{%
+  \mbox{\reset@font\bfseries#1}}
+
+\def\blx@err@patch#1{%
+  \blx@error
+    {Patching #1 failed}
+    {This is an internal issue typically caused by a
+     conflict\MessageBreak between biblatex and some
+     other package. Modifying\MessageBreak the package
+     loading order may fix the problem}}
+
+\def\blx@err@nolang#1{%
+  \blx@error
+    {Language '#1' not found}
+    {The localization module for '#1' could not be found}}
+
+\def\blx@err@invarg#1#2{%
+  \blx@error
+    {Argument '#1' invalid}
+    {\ifblank{#2}
+       {The argument you have supplied is invalid.\MessageBreak
+        See the biblatex manual for details}
+       {#2}}}
+
+\def\blx@err@invopt#1#2{%
+  \blx@error
+    {Option '#1' invalid}
+    {\ifblank{#2}
+       {The option you have supplied is invalid.\MessageBreak
+        See the biblatex manual for valid option keys and
+        possible values}
+       {#2}}}
+
+\def\blx@err@confopt#1#2{%
+  \blx@error
+    {Conflicting options\ifblank{#1}{}{ (#1)}}
+    {\ifblank{#2}
+       {The option you have supplied conflicts with another one.\MessageBreak
+        See the biblatex manual for valid option keys and possible values}
+       {#2}}}
+
+\def\blx@err@optdef#1{%
+  \blx@error
+    {Conflicting options}
+    {The option '#1' is already defined}}
+
+\def\blx@err@nodocdiv#1{%
+  \blx@error
+    {\@backslashchar#1 not provided by class}
+    {The document class does not seems to support #1s}}
+
+\def\blx@err@nosec#1{%
+  \blx@error
+    {Section '#1' not found}
+    {The reference section '#1' could not be found}}
+
+\def\blx@err@nosort#1{%
+  \blx@error
+    {Sorting scheme '#1' not found}
+    {The sorting scheme '#1' does not seem to have been defined anywhere}}
+
+\def\blx@err@secfirst{%
+  \blx@error
+    {'section' not first filter}
+    {When passing multiple filter options,
+     the 'section' filter must be given first}}
+
+\protected\def\blx@err@nestcite{%
+  \blx@error
+    {Nested citation command}
+    {Citation commands may not be nested}}
+
+\def\blx@err@nestenv#1{%
+  \blx@error
+    {Nested '#1' environment}
+    {This environment may not be nested}}
+
+\protected\def\blx@err@citecmd#1{%
+  \begingroup
+  \escapechar\m@ne
+  \blx@error
+    {Command '\@backslashchar\string#1' undefined}
+    {The citation command '\@backslashchar\string#1'
+     has not been defined\MessageBreak by the
+     selected citation style}%
+  \endgroup}
+
+\def\blx@err@endnote#1{%
+  \blx@error
+    {Missing or incomplete endnote support}
+    {There does not seem to be endnote support available\MessageBreak
+     or the available support is incomplete.\MessageBreak
+     If you continue, I will fall back to '\string#1'}%
+  #1}
+
+\def\blx@err@matchparen#1{%
+  \blx@error
+    {Unbalanced parentheses or brackets}
+    {\iftoggle{blx@footnote}{#1 in foot or endnote}{#1}.\MessageBreak
+     This error is triggered if \string\bibopenparen\space and
+     \string\bibcloseparen\MessageBreak or
+     \string\bibopenbracket\space and \string\bibclosebracket\space
+     are unbalanced\MessageBreak or mismatched}}
+
+\def\blx@err@nestparen#1{%
+  \blx@error
+    {Too deeply nested parentheses or brackets}
+    {#1 nested too deeply%
+     \iftoggle{blx@footnote}{\space in foot or endnote}{}.\MessageBreak
+     This error may also be triggered if \string\mkbibparens\MessageBreak
+     or \string\mkbibbrackets\space are nested too deeply}}
+
+\def\blx@err@filter{%
+  \blx@error
+    {Invalid filter expression}
+    {The filter expression you have supplied is invalid.\MessageBreak
+     See the biblatex manual for details}}
+
+\def\blx@warn@nohyph#1{%
+  \blx@warning{No hyphenation patterns for '#1'}}
+
+\protected\def\blx@warn@citecmd#1#2{%
+  \blx@warning{%
+    '\string#1' not defined by citation style.\MessageBreak
+    Falling back to '\string#2'}%
+  #2}
+
+\protected\def\blx@warn@nostring#1{%
+  \blx@warning@entry{Bibliography string '#1' undefined}%
+  \abx@missing{#1}}
+
+\def\blx@warn@conflopt#1{%
+  \blx@warning{Conflicting options.\MessageBreak#1}}
+
+\def\blx@warn@depropt#1{%
+  \blx@warning{Deprecated option.\MessageBreak Ignoring '#1'}}
+
+\def\blx@warn@bibempty{%
+  \@latex@warning{Empty bibliography}}
+
+\def\blx@warn@losempty{%
+  \@latex@warning{Empty list of shorthands}}
+
+\def\blx@inf@refsec{%
+  \blx@info{Reference section=\the\c@refsection}}%
+
+\def\blx@inf@refseg{%
+  \ifnum\c@refsection=\z@
+    \blx@info{Reference segment=\the\c@refsegment}%
+  \else
+    \blx@info{%
+      Reference section/segment=%
+      \the\c@refsection/\the\c@refsegment}%
+  \fi}
+
+\def\blx@inf@creset{%
+  \blx@info{Resetting trackers}}%
+
+\def\blx@msg@cundef#1{%
+  Citation '#1' undefined}
+\def\blx@msg@cundefon#1{%
+  Citation '#1' on page \the\c@page\space undefined}
+
+% Dummy as biblatex 2 is biber only. Some style may still use this though.
+\newrobustcmd*{\RequireBiber}[1][2]{}
+
+% \blx@list@active                      active aux files (basename)
+%                                       [internal list]
+% \blx@list@inactive                    inactive aux files (basename)
+%                                       [internal list]
+% \blx@list@bibfiles@<auxfile>          aux file -> bib file mapping (refsections)
+%                                       aux file (basename) -> bib files (full)
+%                                       [internal list]
+
+\let\blx@list@active\@empty
+\let\blx@list@inactive\@empty
+\listeadd\blx@list@inactive{\jobname}
+
+\protected\def\blx@regbibfiles#1#2{%
+  \forlistloop{\blx@regbibfile{#1}}{#2}}
+
+\def\blx@regbibfile#1#2{%
+  \ifcsundef{blx@res@loca@#2}
+    {\blx@regbibfile@i{#1}{#2}}
+    {\ifcsstring{blx@res@loca@#2}{local}
+       {\blx@regbibfile@i{#1}{#2}}
+       {}}}
+
+\def\blx@regbibfile@i#1#2{%
+  \ifinlistcs{#2}{blx@list@bibfiles@#1}
+    {}
+    {\listcsxadd{blx@list@bibfiles@#1}{#2}}}
+
+\def\blx@check@logreq{%
+  \begingroup
+  \ltxrequest{biblatex}{{\iftoggle{blx@runltx}{1}{0}}}{%
+    \provides[type=dynamic]{
+      \file{\jobname.bcf}
+    }
+    \requires[type=dynamic]{
+      \file{\jobname.bbl}
+    }
+    \ifdef\blx@list@req@edit
+      {\requires[type=editable]{
+         \forlistloop\file\blx@list@req@edit
+       }}
+      {}
+    \ifdef\blx@list@req@stat
+      {\requires[type=static]{
+         \forlistloop\file\blx@list@req@stat
+       }}
+      {}
+  }%
+  \logrequest[package=biblatex,priority=5,active={{\iftoggle{blx@runbiber}{1}{0}}}]{%
+    \generic{biber}
+    \cmdline{
+      \binary{biber}
+      \infile{\jobname}
+    }
+    \input{
+      \file{\jobname.bcf}
+    }
+    \output{
+      \file{\jobname.bbl}
+    }
+    \provides[type=dynamic]{
+      \file{\jobname.bbl}
+    }
+    \requires[type=dynamic]{
+      \file{\jobname.bcf}
+    }
+    \ifcsdef{blx@list@bibfiles@\jobname}
+      {\requires[type=editable]{
+         \def\do{\file}
+         \dolistcsloop{blx@list@bibfiles@\jobname}
+       }}
+      {}
+  }%
+  \endgroup}
+
+\def\blx@logreq@active#1{%
+  \ifblank{#1}
+    {}
+    {\@latex@warning{#1}}%
+  \blx@rerun@latex
+  \blx@rerun@biber}
+
+\def\blx@rerun@latex{%
+  \G@refundefinedtrue
+  \global\toggletrue{blx@runltx}%
+  \global\let\blx@rerun@latex\relax}
+
+\def\blx@rerun@biber{%
+  \global\toggletrue{blx@runbiber}%
+  \global\let\blx@rerun@biber\relax}
+
+\let\blx@checksum@old\@empty
+\let\blx@checksum@new\@empty
+\let\blx@pagesum@old\@empty
+\let\blx@pagesum@new\@empty
+
+\def\blx@checksum#1#2#3{%
+  \begingroup
+  \blx@tempcnta\the\numexpr0#2*0#3\relax
+  \blx@tempcntb\blx@tempcnta
+  \divide\blx@tempcntb10
+  \multiply\blx@tempcntb10
+  \advance\blx@tempcnta-\blx@tempcntb
+  \xdef#1{#1\the\blx@tempcnta}%
+  \endgroup}
+
+\def\blx@addchecksum{\blx@checksum\blx@checksum@old}
+\def\blx@addpagesum{\blx@checksum\blx@pagesum@old}
+\AtEndDocument{%
+  \def\blx@addchecksum{\blx@checksum\blx@checksum@new}%
+  \def\blx@addpagesum{\blx@checksum\blx@pagesum@new}}
+
+\protected\def\blx@check@rerun{%
+  \begingroup
+  \blx@tempcnta\z@
+  \iftoggle{blx@runltx}
+    {\blx@tempcnta\@ne}
+    {\ifx\blx@checksum@old\blx@checksum@new
+       \ifx\blx@pagesum@old\blx@pagesum@new
+       \else
+         \blx@tempcnta\@ne
+       \fi
+     \else
+       \blx@tempcnta\@ne
+     \fi}%
+  \iftoggle{blx@runbiber}
+    {\advance\blx@tempcnta\tw@}
+    {}%
+  \ifcase\blx@tempcnta
+  \or
+    \blx@rerun@latex
+    \blx@warning@noline{%
+      Please rerun LaTeX%
+      \ifx\blx@pagesum@old\blx@pagesum@new\else
+        .\MessageBreak Page breaks have changed%
+      \fi}%
+  \else
+    \blx@rerun@latex
+    \blx@warn@auxlist
+  \fi
+  \endgroup}
+
+\def\blx@warn@auxlist{%
+  \begingroup
+  \edef\blx@tempa{%
+    Please (re)run Biber on the file:\MessageBreak
+    \jobname}%
+  \blx@warning@noline{%
+    \blx@tempa\MessageBreak
+    and rerun LaTeX afterwards}%
+  \endgroup}
+
+\AfterEndDocument{%
+  \blx@check@rerun
+  \blx@check@logreq}
+
+%% Punctuation and capitalization
+
+% 1001       apostrophe (\printnames only)
+% 1002       abbreviation period (dot)
+% 1003/1250  comma
+% 1004/1500  semicolon
+% 1005/2000  colon
+% 1006/3000  period
+% 1007/3001  exclamation mark
+% 1008/3002  question mark
+% 1009       suppress punctuation
+% 1010       new paragaph
+
+\mathchardef\blx@sf@apo=1001
+\mathchardef\blx@sf@dot=1002
+\mathchardef\blx@sf@comma=1003
+\mathchardef\blx@sf@semicolon=1004
+\mathchardef\blx@sf@colon=1005
+\mathchardef\blx@sf@period=1006
+\mathchardef\blx@sf@exclam=1007
+\mathchardef\blx@sf@question=1008
+\mathchardef\blx@sf@nopunct=1009
+\mathchardef\blx@sf@par=1010
+\mathchardef\blx@sf@threshold@low=1002
+\mathchardef\blx@sf@threshold@high=1009
+
+\csdef{blx@sf@1250}{\the\blx@sf@comma}
+\csdef{blx@sf@1500}{\the\blx@sf@semicolon}
+\csdef{blx@sf@2000}{\the\blx@sf@colon}
+\csdef{blx@sf@3000}{\the\blx@sf@period}
+\csdef{blx@sf@3001}{\the\blx@sf@exclam}
+\csdef{blx@sf@3002}{\the\blx@sf@question}
+
+\csdef{blx@pm@,}{comma}
+\csdef{blx@pm@;}{semicolon}
+\csdef{blx@pm@:}{colon}
+\csdef{blx@pm@.}{period}
+\csdef{blx@pm@!}{exclam}
+\csdef{blx@pm@?}{question}
+
+\def\blx@setsfcodes{%
+  \let\blx@setsfcodes\relax
+  \let\frenchspacing\blx@setfrcodes
+  \let\nonfrenchspacing\blx@setencodes
+  \ifnum\sfcode`\.>2000
+    \blx@setencodes
+  \else
+    \blx@setfrcodes
+  \fi
+  \@setquotesfcodes
+  \sfcode`\(=\z@
+  \sfcode`\)=\z@
+  \sfcode`\[=\z@
+  \sfcode`\]=\z@
+  \sfcode`\<=\z@
+  \sfcode`\>=\z@}
+
+\def\blx@setfrcodes{%
+  \ifnum\sfcode`\A=\@m
+  \else
+    \blx@setazcodes
+  \fi
+  \sfcode`\,=\blx@sf@comma
+  \sfcode`\;=\blx@sf@semicolon
+  \sfcode`\:=\blx@sf@colon
+  \sfcode`\.=\blx@sf@period
+  \sfcode`\!=\blx@sf@exclam
+  \sfcode`\?=\blx@sf@question
+}
+
+\def\blx@setencodes{%
+  \sfcode`\,=1250
+  \sfcode`\;=1500
+  \sfcode`\:=2000
+  \sfcode`\.=3000
+  \sfcode`\!=3001
+  \sfcode`\?=3002
+}
+
+\def\blx@namecodes{%
+  \ifnum\sfcode`\A=\@m
+  \else
+    \blx@setazcodes
+  \fi
+  \sfcode`\'=\blx@sf@apo
+}
+
+\begingroup
+\let\blx@setazcodes\@empty
+\def\blx@tempa{%
+  \xdef\blx@setazcodes{%
+    \blx@setazcodes
+    \sfcode\the\blx@tempcnta=\@m}
+  \ifnum\blx@tempcnta<\blx@tempcntb
+    \advance\blx@tempcnta\@ne
+    \expandafter\blx@tempa
+  \fi}
+\blx@tempcnta`\A
+\blx@tempcntb`\Z
+\blx@tempa
+\ifnum\inputlineno=\m@ne\else
+  \blx@tempcnta"80
+  \blx@tempcntb"9C
+  \blx@tempa
+  \blx@tempcnta"C0
+  \blx@tempcntb"DF
+  \blx@tempa
+\fi
+\endgroup
+
+\def\blx@spacefactor{%
+  \ifhmode
+    \ifcsundef{blx@sf@\the\spacefactor}
+      {\the\spacefactor}
+      {\csname blx@sf@\the\spacefactor\endcsname}%
+  \else
+    \the\blx@sf@par
+  \fi}
+
+\protected\def\blx@leavevmode{%
+  \ifhmode
+  \else
+    \leavevmode\spacefactor\blx@sf@par
+  \fi}
+
+\protected\def\blx@leavevmode@cite{%
+  \ifhmode
+    \ifnum\spacefactor=\blx@sf@par
+    \else
+      \spacefactor\@m
+    \fi
+  \else
+    \leavevmode
+  \fi}
+
+\protected\def\blx@imc@setpunctfont#1{%
+  \blx@ifpuncthook
+    {\gdef\abx@puncthook{%
+       \ifdim\lastkern>\z@\unkern\fi
+       \blx@imc@resetpunctfont#1}}
+    {}}
+\protected\def\blx@imc@resetpunctfont{%
+  \blx@ifpuncthook
+    {\global\let\abx@puncthook\@firstofone}
+    {}}
+
+\protected\def\blx@setpostpunct#1{%
+  \blx@ifuspunct
+    {\global\let\blx@postpunct\blx@dopostpunct
+     \ifdef\blx@thepostpunct
+       {\gappto\blx@thepostpunct{#1}}
+       {\gdef\blx@thepostpunct{#1}}}
+    {}}
+
+\def\blx@dopostpunct{%
+  \blx@thepostpunct
+  \global\let\blx@postpunct\@empty
+  \global\undef\blx@thepostpunct}
+
+\protected\def\blx@postpunct@agroup{%
+  \aftergroup\blx@postpunct
+  \let\blx@postpunct@agroup\@empty}
+
+% {<characters>}
+
+\newrobustcmd*{\DeclareCapitalPunctuation}[1]{%
+  \cslet{blx@cap@\the\blx@sf@par}\@empty
+  \csundef{blx@cap@\the\blx@sf@comma}%
+  \csundef{blx@cap@\the\blx@sf@semicolon}%
+  \csundef{blx@cap@\the\blx@sf@colon}%
+  \csundef{blx@cap@\the\blx@sf@period}%
+  \csundef{blx@cap@\the\blx@sf@exclam}%
+  \csundef{blx@cap@\the\blx@sf@question}%
+  \ifblank{#1}
+    {}
+    {\expandafter\blx@defcapstring\detokenize{#1}\relax}}
+
+\def\blx@defcapstring#1{%
+  \ifx#1\relax
+  \else
+    \begingroup
+    \blx@setfrcodes
+    \ifcsdef{blx@pm@#1}
+      {\expandafter\endgroup
+       \expandafter\let
+         \csname blx@cap@\the\sfcode`#1\endcsname\@empty}
+      {\blx@warning{Ignoring invalid punctuation mark '#1'}%
+       \endgroup}%
+    \expandafter\blx@defcapstring
+  \fi}
+
+% {<characters>}
+
+\newrobustcmd*{\DeclareQuotePunctuation}[1]{%
+  \csdef{blx@qp@comma}{\blx@postpunct}%
+  \csdef{blx@qp@semicolon}{\blx@postpunct}%
+  \csdef{blx@qp@colon}{\blx@postpunct}%
+  \csdef{blx@qp@period}{\blx@postpunct}%
+  \csdef{blx@qp@exclam}{\blx@postpunct}%
+  \csdef{blx@qp@question}{\blx@postpunct}%
+  \cslet{blx@pq@comma}\@empty
+  \cslet{blx@pq@semicolon}\@empty
+  \cslet{blx@pq@colon}\@empty
+  \cslet{blx@pq@period}\@empty
+  \cslet{blx@pq@exclam}\@empty
+  \cslet{blx@pq@question}\@empty
+  \let\blx@quotepunct\@empty
+  \ifblank{#1}
+    {\let\blx@ifuspunct\@secondoftwo}
+    {\let\blx@ifuspunct\@firstoftwo
+     \expandafter\blx@defquotepunct\detokenize{#1}&}}
+
+\def\blx@defquotepunct#1{%
+  \ifx&#1\relax
+  \else
+    \ifcsdef{blx@pm@#1}
+      {\appto\blx@quotepunct{#1}%
+       \cslet{blx@qp@\csuse{blx@pm@#1}}\@empty
+       \csdef{blx@pq@\csuse{blx@pm@#1}}{\blx@postpunct}}
+      {\blx@warning{Ignoring invalid punctuation mark '#1'}}%
+    \expandafter\blx@defquotepunct
+  \fi}
+
+% {<mark>}{<characters>}
+
+\newrobustcmd*{\DeclarePunctuationPairs}[2]{%
+  \ifcsdef{blx@sf@\detokenize{#1}}
+    {\ifnum\csname blx@sf@\detokenize{#1}\endcsname>\blx@sf@apo
+       \ifnum\csname blx@sf@\detokenize{#1}\endcsname<\blx@sf@nopunct
+         \expandafter\blx@defpunctpairs
+         \expandafter{\the\csname blx@sf@\detokenize{#1}\endcsname}{#2}%
+       \else
+         \blx@err@invarg{\detokenize{#1}{}}%
+       \fi
+     \else
+       \blx@err@invarg{\detokenize{#1}{}}%
+     \fi}
+    {\blx@err@invarg{\detokenize{#1}{}}}}
+
+\def\blx@defpunctpairs#1#2{%
+  \blx@undefpair{#1}{\the\blx@sf@dot}%
+  \blx@undefpair{#1}{\the\blx@sf@comma}%
+  \blx@undefpair{#1}{\the\blx@sf@semicolon}%
+  \blx@undefpair{#1}{\the\blx@sf@colon}%
+  \blx@undefpair{#1}{\the\blx@sf@period}%
+  \blx@undefpair{#1}{\the\blx@sf@exclam}%
+  \blx@undefpair{#1}{\the\blx@sf@question}%
+  \ifblank{#2}
+    {}
+    {\begingroup
+     \def\blx@tempa{#1}%
+     \let\blx@tempb\@empty
+     \blx@setfrcodes
+     \sfcode`\*=\blx@sf@dot
+     \expandafter\blx@defpair\detokenize{#2}&%
+     \expandafter\endgroup\blx@tempb}}
+
+\def\blx@defpair#1{%
+  \ifx&#1%
+  \else
+    \ifnum\the\sfcode`#1>\blx@sf@apo
+      \ifnum\the\sfcode`#1<\blx@sf@nopunct
+        \eappto\blx@tempb{%
+          \cslet{blx@pp@\blx@tempa @\the\sfcode`#1}\noexpand\@empty}%
+      \else
+        \blx@err@invarg{#1}{}%
+      \fi
+    \else
+      \blx@err@invarg{#1}{}%
+    \fi
+    \expandafter\blx@defpair
+  \fi}
+
+\def\blx@undefpair#1#2{%
+  \ifcsdef{blx@pp@#1@#2}
+    {\csundef{blx@pp@#1@#2}}
+    {}}
+
+\protected\def\blx@resetpunct{%
+  \DeclareCapitalPunctuation{.!?}%
+  \DeclarePunctuationPairs{dot}{}%
+  \DeclarePunctuationPairs{comma}{*!?}%
+  \DeclarePunctuationPairs{semicolon}{*!?}%
+  \DeclarePunctuationPairs{colon}{*!?}%
+  \DeclarePunctuationPairs{period}{}%
+  \DeclarePunctuationPairs{exclam}{*}%
+  \DeclarePunctuationPairs{question}{*}%
+  \DeclareQuotePunctuation{}%
+  \def\abx@dot{\ifdim\lastkern>\z@\unkern\fi.\spacefactor\blx@sf@dot}%
+  \def\abx@comma{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{,}}%
+  \def\abx@semicolon{\abx@puncthook{;}}%
+  \def\abx@colon{\abx@puncthook{:}}%
+  \def\abx@period{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{.}}%
+  \def\abx@exclam{\abx@puncthook{!}}%
+  \def\abx@question{\abx@puncthook{?}}%
+  \global\let\abx@puncthook\@firstofone
+  \global\let\blx@postpunct\@empty}
+
+\blx@resetpunct
+
+% {<character>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifpunctmark#1{%
+  \ifhmode
+    \begingroup
+    \sfcode`\*=\blx@sf@dot
+    \ifnum\sfcode`#1=\spacefactor
+      \endgroup
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \endgroup
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {<true>}{<false>}
+
+\protected\def\blx@imc@ifterm{%
+  \ifhmode
+    \expandafter\blx@imc@ifcapital
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {<true>}{<false>}
+
+\protected\def\blx@imc@ifcapital{%
+  \ifcsdef{blx@cap@\blx@spacefactor}}
+
+% {<true>}{<false>}
+
+\protected\def\blx@imc@ifpunct{%
+  \ifnum\blx@spacefactor>\blx@sf@threshold@low
+    \ifnum\blx@spacefactor<\blx@sf@threshold@high
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {<character>}
+
+\newrobustcmd*{\autocap}[1]{#1}
+
+\protected\def\blx@imc@autocap{%
+  \blx@imc@ifcapital\MakeUppercase\@firstofone}
+
+\protected\def\blx@imc@nopunct{%
+  \leavevmode\spacefactor\blx@sf@nopunct}
+
+\protected\def\blx@imc@isdot{%
+  \ifnum\blx@spacefactor=\blx@sf@period
+    \spacefactor\blx@sf@dot
+  \fi}
+
+\protected\def\blx@imc@adddot{%
+  \blx@addpunct{dot}%
+  \ifnum\blx@spacefactor=\blx@sf@period
+    \spacefactor\blx@sf@dot
+  \fi}
+
+\protected\def\blx@imc@addperiod{%
+  \blx@addpunct{period}%
+  \ifnum\blx@spacefactor=\blx@sf@dot
+    \spacefactor\blx@sf@period
+  \fi}
+
+\protected\def\blx@imc@addcomma{\blx@addpunct{comma}}
+\protected\def\blx@imc@addsemicolon{\blx@addpunct{semicolon}}
+\protected\def\blx@imc@addcolon{\blx@addpunct{colon}}
+\protected\def\blx@imc@addexclam{\blx@addpunct{exclam}}
+\protected\def\blx@imc@addquestion{\blx@addpunct{question}}
+
+\def\blx@addpunct#1{%
+  \unspace
+  \ifnum\blx@spacefactor<\blx@sf@threshold@low
+    \csuse{blx@qp@#1}\csuse{abx@#1}%
+  \else
+    \ifnum\blx@spacefactor>\blx@sf@threshold@high
+      \csuse{blx@qp@#1}\csuse{abx@#1}%
+    \else
+      \ifcsdef{blx@pp@\the\csname blx@sf@#1\endcsname @\blx@spacefactor}
+        {\csuse{blx@qp@#1}\csuse{abx@#1}}
+        {\csuse{blx@qp@#1}}%
+    \fi
+  \fi
+  \csuse{blx@pq@#1}}
+
+\providerobustcmd*{\unspace}{%
+  \ifbool{hmode}
+    {\ifdimgreater\lastskip\z@
+       {\unskip\unspace}
+       {\ifnumgreater\lastpenalty\z@
+          {\unpenalty\unspace}
+          {}}}
+    {}}
+
+\newrobustcmd*{\bibsentence}{%
+  \leavevmode\spacefactor\blx@sf@par
+  \ignorespaces}
+
+\newrobustcmd*{\midsentence}{%
+  \leavevmode
+  \@ifstar
+    {\ifnum\spacefactor=\blx@sf@dot
+     \else
+       \spacefactor\@m
+     \fi}
+    {\spacefactor\@m}}
+
+\newrobustcmd*{\addslash}{%
+  \unspace/\penalty\hyphenpenalty\hskip\z@skip}
+
+\newrobustcmd*{\addspace}{%
+  \unspace\blx@postpunct
+  \space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addnbspace}{%
+  \unspace\blx@postpunct
+  \nobreak\space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addthinspace}{%
+  \unspace\blx@postpunct
+  \hskip0.16667em\relax
+  \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addnbthinspace}{%
+  \unspace\blx@postpunct
+  \nobreak\hskip0.16667em\relax
+  \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addlowpenspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{lownamepenalty}\space
+  \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addhighpenspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{highnamepenalty}\space
+  \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addlpthinspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{lownamepenalty}%
+  \hskip0.16667em\relax\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addhpthinspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{highnamepenalty}%
+  \hskip0.16667em\relax\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addabbrvspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{abbrvpenalty}%
+  \space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addabthinspace}{%
+  \unspace\blx@postpunct
+  \penalty\value{abbrvpenalty}%
+  \hskip0.16667em\relax
+  \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\adddotspace}{%
+  \unspace\adddot\blx@postpunct
+  \penalty\value{abbrvpenalty}%
+  \space\blx@imc@resetpunctfont}
+
+\providerobustcmd*{\noligature}{%
+  \penalty\@M\discretionary{-}{}{\kern0.03em}%
+  \nobreak\hskip\z@skip}
+
+\providerobustcmd*{\hyphen}{%
+  \nobreak-\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\nbhyphen}{%
+  \nobreak\mbox{-}\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\hyphenate}{%
+  \nobreak\-\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\allowhyphens}{%
+  \nobreak\hskip\z@skip}
+
+\providerobustcmd*{\nohyphenation}{%
+  \lefthyphenmin\@m}
+
+\providerobustcmd*{\textnohyphenation}[1]{%
+  \bgroup\nohyphenation#1\egroup}
+
+\blx@regimcs{%
+  \setpunctfont \resetpunctfont \ifcapital \autocap \ifpunctmark
+  \ifpunct \ifterm \nopunct \isdot \adddot \addperiod \addcomma
+  \addsemicolon \addcolon \addexclam \addquestion}
+
+\appto\blx@blxinit{%
+  \appto\nocorrlist{\isdot\adddot\addperiod\addcomma}}
+
+%% Style definition
+
+% {<bibstyle>}
+
+\newrobustcmd*{\RequireBibliographyStyle}[1]{%
+  \blx@inputonce{#1.bbx}{bibliography style '#1'}{}{}{}
+    {\blx@error
+       {Style '#1' not found}
+       {The bibliography style '#1' could not be found}}}
+\@onlypreamble\RequireBibliographyStyle
+
+% {<code>}
+
+\newrobustcmd*{\InitializeBibliographyStyle}{\appto\blx@hook@bbxinit}
+\@onlypreamble\InitializeBibliographyStyle
+
+% {<entry type>}{<driverdef>}
+
+\newrobustcmd*{\DeclareBibliographyDriver}[1]{%
+  \long\csdef{blx@bbx@#1}}
+\@onlypreamble\DeclareBibliographyDriver
+
+% {<entry type>}
+
+\def\blx@driver#1{%
+  \ifcsdef{blx@bbx@#1}
+    {\csuse{blx@bbx@#1}}
+    {\ifcsdef{blx@bbx@*}
+       {\blx@warning{%
+          No driver for entry type '#1'.\MessageBreak
+          Using fallback driver}%
+        \csuse{blx@bbx@*}}
+       {\blx@error
+          {No driver found}
+          {I can't find a driver for the entry type
+           '\abx@field@entrytype'\MessageBreak
+           and there is no fallback driver either}}}}
+
+% {<type>}{<true>}{<false>}
+
+\def\blx@imc@ifdriver#1{\ifcsdef{blx@bbx@#1}}
+
+% {<alias>}{<type>}
+
+\newrobustcmd*{\DeclareBibliographyAlias}[2]{%
+  \csedef{blx@bbx@#1}{%
+    \expandafter\noexpand\csname blx@bbx@#2\endcsname}}
+\@onlypreamble\DeclareBibliographyAlias
+
+% {<key>}[<value>]{<code>}
+
+\newrobustcmd*{\DeclareBibliographyOption}[1]{%
+  \@ifnextchar[%]
+    {\blx@defbibopt{#1}}
+    {\blx@defbibopt{#1}[]}}
+
+\long\def\blx@defbibopt#1[#2]#3{%
+  \ifcsundef{KV@blx@opt@ldt@#1}
+    {\ifcsundef{KV@blx@opt@pre@#1}
+       {\ifblank{#2}
+          {\define@key{blx@opt@pre}{#1}{#3}}
+          {\define@key{blx@opt@pre}{#1}[#2]{#3}}}
+       {\blx@err@optdef{#1}}}
+    {\blx@err@optdef{#1}}}
+
+% {<key>}[<value>]{<code>}
+
+\newrobustcmd*{\DeclareTypeOption}[1]{%
+  \@ifnextchar[%]
+    {\blx@deftypeopt{#1}}
+    {\blx@deftypeopt{#1}[]}}
+
+\long\def\blx@deftypeopt#1[#2]#3{%
+  \ifcsundef{KV@blx@opt@typ@#1}
+    {\ifblank{#2}
+       {\define@key{blx@opt@typ}{#1}{#3}}
+       {\define@key{blx@opt@typ}{#1}[#2]{#3}}}
+    {\blx@err@optdef{#1}}}
+
+% {<key>}[<value>]{<code>}
+
+\newrobustcmd*{\DeclareEntryOption}[1]{%
+  \@ifnextchar[%]
+    {\blx@defentryopt{#1}}
+    {\blx@defentryopt{#1}[]}}
+
+\long\def\blx@defentryopt#1[#2]#3{%
+  \ifcsundef{KV@blx@opt@ent@#1}
+    {\ifblank{#2}
+       {\define@key{blx@opt@ent}{#1}{#3}}
+       {\define@key{blx@opt@ent}{#1}[#2]{#3}}}
+    {\blx@err@optdef{#1}}}
+
+%% Auxiliary commands
+
+\newrobustcmd*{\citereset}{%
+  \csuse{blx@hook@cbxinit}%
+  \@ifstar
+    {}
+    {\global\cslet{blx@bsee@\the\c@refsection}\@empty
+     \global\cslet{blx@fsee@\the\c@refsection}\@empty
+     \blx@ibidreset@force
+     \blx@idemreset@force
+     \blx@opcitreset@force
+     \blx@loccitreset@force}}
+
+\def\blx@save#1{%
+  \ifcsdef{blx@saved@#1}
+    {}
+    {\blx@safe@actives
+     \csletcs{blx@saved@#1}{#1}%
+     \blx@rest@actives}}
+
+\def\blx@restore#1{%
+  \ifcsdef{blx@saved@#1}
+    {\blx@safe@actives
+     \csletcs{#1}{blx@saved@#1}%
+     \csundef{blx@saved@#1}%
+     \blx@rest@actives}
+    {}}
+
+\newrobustcmd*{\savecommand}[1]{%
+  \ifcsdef{blx@saved@cmd@\detokenize{#1}}
+    {}
+    {\cslet{blx@saved@cmd@\detokenize{#1}}{#1}}}
+
+\newrobustcmd*{\restorecommand}[1]{%
+  \ifcsdef{blx@saved@cmd@\detokenize{#1}}
+    {\letcs{#1}{blx@saved@cmd@\detokenize{#1}}%
+     \csundef{blx@saved@cmd@\detokenize{#1}}}
+    {}}
+
+% {<name>}
+
+\newrobustcmd*{\savebibmacro}[1]{%
+  \blx@save{abx@macro@\detokenize{#1}}}
+
+\newrobustcmd*{\restorebibmacro}[1]{%
+  \blx@restore{abx@macro@\detokenize{#1}}}
+
+% {<name>}[<args>][<optarg>]{<definition>}
+
+\newrobustcmd*{\newbibmacro}{%
+  \@star@or@long\blx@newbibmacro}
+
+\def\blx@newbibmacro#1{%
+  \ifcsundef{abx@macro@\detokenize{#1}}
+    {\blx@defbibmacro\new@command{#1}}
+    {\blx@warning{%
+       Macro '\detokenize{#1}' already defined.\MessageBreak
+       Using \string\renewbibmacro}
+     \blx@defbibmacro\renew@command{#1}}}
+
+\newrobustcmd*{\renewbibmacro}{%
+  \@star@or@long\blx@renewbibmacro}
+
+\def\blx@renewbibmacro#1{%
+  \ifcsundef{abx@macro@\detokenize{#1}}
+    {\blx@warning{%
+       Macro '\detokenize{#1}' undefined.\MessageBreak
+       Using \string\newbibmacro}
+     \blx@defbibmacro\new@command{#1}}
+    {\blx@defbibmacro\renew@command{#1}}}
+
+\newrobustcmd*{\providebibmacro}{%
+  \@star@or@long{\blx@defbibmacro\provide@command}}
+
+\def\blx@defbibmacro#1#2{%
+  \expandafter#1\csname abx@macro@\detokenize{#2}\endcsname}
+
+% {<name>}
+
+\newrobustcmd*{\usebibmacro}[1]{%
+  \ifcsundef{abx@macro@\detokenize{#1}}
+    {\blx@error
+       {Bibliography macro '\detokenize{#1}' undefined}
+       {Use '\string\newbibmacro' to define this macro}}
+    {\csuse{abx@macro@\detokenize{#1}}}}
+
+% {<field>}
+
+\def\blx@imc@thefield#1{\csuse{abx@field@#1}}
+
+\def\blx@imc@strfield#1{%
+  \ifcsdef{abx@field@#1}
+    {\detokenize\expandafter\expandafter\expandafter
+       {\csname abx@field@#1\endcsname}}
+    {}}
+
+% {<plainlist>}
+
+\def\blx@imc@thelist#1{\csuse{abx@list@#1}}
+
+% {<namelist>}
+
+\def\blx@imc@thename#1{\csuse{abx@name@#1}}
+
+% {<field>}
+
+\protected\def\blx@imc@clearfield#1{%
+  \csundef{abx@field@#1}}
+
+% {<plainlist>}
+
+\protected\def\blx@imc@clearlist#1{%
+  \ifcsundef{abx@list@#1}
+    {}
+    {\togglefalse{abx@bool@more#1}%
+     \csundef{abx@list@#1}%
+     \csname c@#1\endcsname\z@}}
+
+% {<namelist>}
+
+\protected\def\blx@imc@clearname#1{%
+  \ifcsundef{abx@name@#1}
+    {}
+    {\togglefalse{abx@bool@more#1}%
+     \csundef{abx@name@#1}%
+     \csname c@#1\endcsname\z@}}
+
+% {<field>}{<macro>}
+
+\protected\def\blx@imc@restorefield#1{\cslet{abx@field@#1}}
+
+% {<plainlist>}{<macro>}
+
+\protected\def\blx@imc@restorelist#1{\cslet{abx@list@#1}}
+
+% {<namelist>}{<macro>}
+
+\protected\def\blx@imc@restorename#1{\cslet{abx@name@#1}}
+
+% {<field>}{<macro>}
+
+\protected\def\blx@imc@savefield{%
+  \@ifstar{\blx@savedata{field}}{\global\blx@savedata{field}}}
+\def\blx@savedata#1#2#3{\letcs#3{abx@#1@#2}}
+
+% {<plainlist>}{<macro>}
+
+\protected\def\blx@imc@savelist{%
+  \@ifstar{\blx@savedata{list}}{\global\blx@savedata{list}}}
+
+% {<namelist>}{<macro>}
+
+\protected\def\blx@imc@savename{%
+  \@ifstar{\blx@savedata{name}}{\global\blx@savedata{name}}}
+
+% {<field>}{<csname>}
+
+\protected\def\blx@imc@savefieldcs{%
+  \@ifstar{\blx@savedatacs{field}}{\global\blx@savedatacs{field}}}
+\def\blx@savedatacs#1#2#3{\csletcs{#3}{abx@#1@#2}}
+
+% {<plainlist>}{<csname>}
+
+\protected\def\blx@imc@savelistcs{%
+  \@ifstar{\blx@savedatacs{list}}{\global\blx@savedatacs{list}}}
+
+% {<namelist>}{<csname>}
+
+\protected\def\blx@imc@savenamecs{%
+  \@ifstar{\blx@savedatacs{name}}{\global\blx@savedatacs{name}}}
+
+% {<field>}{<true>}{<false>}
+
+\def\blx@imc@iffieldundef#1{%
+  \ifcsundef{abx@field@#1}}
+
+% {<plainlist>}{<true>}{<false>}
+
+\def\blx@imc@iflistundef#1{%
+  \ifcsundef{abx@list@#1}}
+
+% {<namelist>}{<true>}{<false>}
+
+\def\blx@imc@ifnameundef#1{%
+  \ifcsundef{abx@name@#1}}
+
+% {<field1>}{<field2>}{<true>}{<false>}
+
+\def\blx@imc@iffieldsequal#1#2{%
+  \ifcsequal{abx@field@#1}{abx@field@#2}}
+
+% {<plainlist1>}{<plainlist2>}{<true>}{<false>}
+
+\def\blx@imc@iflistsequal#1#2{%
+  \ifcsequal{abx@list@#1}{abx@list@#2}}
+
+% {<namelist1>}{<namelist2>}{<true>}{<false>}
+
+\def\blx@imc@ifnamesequal#1#2{%
+  \ifcsundef{abx@name@#1}
+    {\@secondoftwo}
+    {\ifcsundef{abx@name@#2}
+       {\@secondoftwo}
+       {\blx@ifnamesequal{#1}{#2}}}}
+
+\def\blx@ifnamesequal#1#2{%
+  \begingroup
+  \let\blx@tempa\@empty
+  \expandafter\expandafter
+  \expandafter\blx@ifnamesequal@i\csname abx@name@#2\endcsname
+  \let\blx@tempb\blx@tempa
+  \let\blx@tempa\@empty
+  \expandafter\expandafter
+  \expandafter\blx@ifnamesequal@i\csname abx@name@#1\endcsname
+  \expandafter\endgroup
+  \ifx\blx@tempa\blx@tempb
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+\def\blx@ifnamesequal@i#1#2{%
+  \expandafter\blx@ifnamesequal@ii#2{}&}
+
+\def\blx@ifnamesequal@ii#1{%
+  \ifblank{#1}
+    {\blx@namebreak}
+    {\blx@ifnamesequal@iii#1%
+     \blx@ifnamesequal@ii}}
+
+\def\blx@ifnamesequal@iii#1#2#3#4#5#6#7#8#9{%
+  \setkeys{blx@opt@name}{#1}%
+  \ifdef\abx@field@hash
+    {\eappto\blx@tempa{{\abx@field@hash}}}
+    {\appto\blx@tempa{{{#2}{#4}{#6}{#8}}}}}
+
+% {<field>}{<macro>}{<true>}{<false>}
+
+\def\blx@imc@iffieldequals#1#2{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\ifundef#2%
+       {\@secondoftwo}
+       {\expandafter\ifx\csname abx@field@#1\endcsname#2%
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {<plainlist>}{<macro>}{<true>}{<false>}
+
+\def\blx@imc@iflistequals#1#2{%
+  \blx@imc@iflistundef{#1}
+    {\@secondoftwo}
+    {\ifundef#2%
+       {\@secondoftwo}
+       {\expandafter\ifx\csname abx@list@#1\endcsname#2%
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {<namelist>}{<macro>}{<true>}{<false>}
+
+\def\blx@imc@ifnameequals#1#2{% FIXME
+  \blx@imc@ifnameundef{#1}
+    {\@secondoftwo}
+    {\ifundef#2%
+       {\@secondoftwo}
+       {\expandafter\ifx\csname abx@name@#1\endcsname#2%
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {<field>}{<csname>}{<true>}{<false>}
+
+\def\blx@imc@iffieldequalcs#1{%
+  \ifcsequal{abx@field@#1}}
+
+% {<plainlist>}{<csname>}{<true>}{<false>}
+
+\def\blx@imc@iflistequalcs#1{%
+  \ifcsequal{abx@list@#1}}
+
+% {<namelist>}{<csname>}{<true>}{<false>}
+
+\def\blx@imc@ifnameequalcs#1{% FIXME
+  \ifcsequal{abx@name@#1}}
+
+% {<field>}{<string>}{<true>}{<false>}
+
+\protected\long\def\blx@imc@iffieldequalstr#1#2{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\expandafter\expandafter\expandafter\ifstrequal
+     \expandafter\expandafter\expandafter{%
+       \csname abx@field@#1\endcsname}{#2}}}
+
+% {<field>}{<true>}{<false>}
+
+\protected\def\blx@imc@iffieldxref#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\blx@whichxref
+       {\blx@iffieldxref{#1}}
+       {\@secondoftwo}}}
+
+\def\blx@iffieldxref#1#2{%
+  \begingroup
+  \letcs\blx@tempa{abx@field@#2}%
+  \letcs\blx@tempb{abx@field@#1}%
+  \csundef{abx@field@#1}%
+  \blx@getdata{\blx@tempa}%
+  \blx@imc@iffieldequals{#1}\blx@tempb
+    {\aftergroup\@firstoftwo}
+    {\aftergroup\@secondoftwo}%
+  \endgroup}
+
+\def\blx@whichxref#1#2{%
+  \blx@imc@iffieldundef{crossref}
+    {\blx@imc@iffieldundef{xref}
+       {#2}
+       {#1{xref}}}
+    {#1{crossref}}}
+
+% {<plainlist>}{<true>}{<false>}
+
+\protected\def\blx@imc@iflistxref#1{%
+  \blx@imc@iflistundef{#1}
+    {\@secondoftwo}
+    {\blx@whichxref
+       {\blx@iflistxref{#1}}
+       {\@secondoftwo}}}
+
+\def\blx@iflistxref#1#2{%
+  \begingroup
+  \letcs\blx@tempa{abx@field@#2}%
+  \letcs\blx@tempb{abx@list@#1}%
+  \csundef{abx@list@#1}%
+  \blx@getdata{\blx@tempa}%
+  \blx@imc@iflistequals{#1}\blx@tempb
+    {\aftergroup\@firstoftwo}
+    {\aftergroup\@secondoftwo}%
+  \endgroup}
+
+% {<namelist>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifnamexref#1{%
+  \blx@imc@ifnameundef{#1}
+    {\@secondoftwo}
+    {\blx@whichxref
+       {\blx@ifnamexref{#1}}
+       {\@secondoftwo}}}
+
+\def\blx@ifnamexref#1#2{%
+  \begingroup
+  \letcs\blx@tempa{abx@field@#2}%
+  \letcs\blx@tempb{abx@name@#1}%
+  \csundef{abx@name@#1}%
+  \blx@getdata{\blx@tempa}%
+  \blx@imc@ifnameequals{#1}\blx@tempb
+    {\aftergroup\@firstoftwo}
+    {\aftergroup\@secondoftwo}%
+  \endgroup}
+
+% {<string>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifcurrentfield#1{%
+  \begingroup
+  \def\blx@tempa{#1}%
+  \ifx\currentfield\blx@tempa
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {<string>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifcurrentlist#1{%
+  \begingroup
+  \def\blx@tempa{#1}%
+  \ifx\currentlist\blx@tempa
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {<string>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifcurrentname#1{%
+  \begingroup
+  \def\blx@tempa{#1}%
+  \ifx\currentname\blx@tempa
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {<string>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifentrytype#1{%
+  \begingroup
+  \def\blx@tempa{#1}%
+  \ifx\abx@field@entrytype\blx@tempa
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {<true>}{<false>}
+
+\def\blx@imc@ifmorenames{%
+  \ifundef\currentname
+    {\@secondoftwo}
+    {\iftoggle{abx@bool@more\currentname}
+       {\@firstoftwo}
+       {\ifnum\c@listtotal>\c@liststop
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {<true>}{<false>}
+
+\def\blx@imc@ifmoreitems{%
+  \ifundef\currentlist
+    {\@secondoftwo}
+    {\iftoggle{abx@bool@more\currentlist}
+       {\@firstoftwo}
+       {\ifnum\c@listtotal>\c@liststop
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {<category>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifcategory{%
+  \ifdef\abx@field@entrykey
+    {\blx@imc@ifentrycategory\abx@field@entrykey}
+    {\expandafter\@secondoftwo\@gobble}}
+
+% {<entrykey>}{<category>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifentrycategory{%
+  \blx@xsanitizeafter\blx@imc@ifentrycategory@i}
+
+\def\blx@imc@ifentrycategory@i#1#2{%
+  \ifcsdef{blx@catg@\detokenize{#2}}
+    {\ifinlistcs{#1}{blx@catg@\detokenize{#2}}}
+    {\@secondoftwo}}
+
+% {<keyword>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifkeyword{%
+  \ifdef\abx@field@entrykey
+    {\blx@imc@ifentrykeyword\abx@field@entrykey}
+    {\expandafter\@secondoftwo\@gobble}}
+
+% {<entrykey>}{<keyword>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifentrykeyword{%
+  \blx@xsanitizeafter\blx@imc@ifentrykeyword@i}
+
+\def\blx@imc@ifentrykeyword@i#1#2{%
+  \ifcsdef{blx@keyw@\the\c@refsection @\detokenize{#2}}
+    {\ifinlistcs{#1}{blx@keyw@\the\c@refsection @\detokenize{#2}}}
+    {\@secondoftwo}}
+
+% {<true>}{<false>}
+
+\protected\def\blx@ifciteseen@global{%
+  \ifdef\abx@field@entrykey
+    {\expandafter\blx@ifseen@global
+     \expandafter{\abx@field@entrykey}}
+    {\@secondoftwo}}
+
+\protected\def\blx@ifciteseen@context{%
+  \ifdef\abx@field@entrykey
+    {\expandafter\blx@ifseen@context
+     \expandafter{\abx@field@entrykey}}
+    {\@secondoftwo}}
+
+% {<entrykey>}{<true>}{<false>}
+
+\protected\def\blx@ifentryseen@global{%
+  \blx@xsanitizeafter\blx@ifseen@global}
+
+\protected\def\blx@ifentryseen@context{%
+  \blx@xsanitizeafter\blx@ifseen@context}
+
+\def\blx@ifseen@global#1{%
+  \ifinlistcs{#1}{blx@bsee@\the\c@refsection}}
+
+\def\blx@ifseen@context#1{%
+  \iftoggle{blx@footnote}
+    {\ifinlistcs{#1}{blx@fsee@\the\c@refsection}}
+    {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}}
+
+% {<true>}{<false>}
+
+\def\blx@ifciteibid@global{%
+  \blx@imc@iffieldequals{entrykey}\blx@lastkey@text}
+
+\def\blx@ifciteibid@context{%
+  \iftoggle{blx@footnote}
+    {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
+    {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
+
+\def\blx@ifciteibid@strict{%
+  \blx@ifcitesingle
+    {\blx@ifciteibid@global}
+    {\@secondoftwo}}%
+
+\def\blx@ifciteibid@constrict{%
+  \blx@ifcitesingle
+    {\iftoggle{blx@footnote}
+       {\blx@ifmpfncheck
+          {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
+          {\@secondoftwo}}
+       {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
+    {\@secondoftwo}}%
+
+% {<true>}{<false>}
+
+\def\blx@ifciteidem@global{%
+  \blx@imc@iffieldequals{fullhash}\blx@lasthash@text}
+
+\def\blx@ifciteidem@context{%
+  \iftoggle{blx@footnote}
+    {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
+    {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
+
+\let\blx@ifciteidem@strict\blx@ifciteidem@global
+
+\def\blx@ifciteidem@constrict{%
+  \iftoggle{blx@footnote}
+    {\blx@ifmpfncheck
+       {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
+       {\@secondoftwo}}
+    {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
+
+% {<true>}{<false>}
+
+\def\blx@ifopcit@global{%
+  \blx@imc@iffieldundef{namehash}
+    {\@secondoftwo}
+    {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}
+
+\def\blx@ifopcit@context{%
+  \blx@imc@iffieldundef{namehash}
+    {\@secondoftwo}
+    {\iftoggle{blx@footnote}
+       {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}}
+       {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}}
+
+\def\blx@ifopcit@strict{%
+  \blx@ifcitesingle
+    {\blx@ifopcit@global}
+    {\@secondoftwo}}%
+
+\def\blx@ifopcit@constrict{%
+  \blx@ifcitesingle
+    {\blx@imc@iffieldundef{namehash}
+       {\@secondoftwo}
+       {\iftoggle{blx@footnote}
+          {\blx@ifmpfncheck
+             {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}}
+             {\@secondoftwo}}
+          {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}}
+    {\@secondoftwo}}%
+
+% {<true>}{<false>}
+
+\def\blx@ifloccit@global{%
+  \blx@loccit@check{text}}
+
+\def\blx@ifloccit@context{%
+  \iftoggle{blx@footnote}
+    {\blx@loccit@check{foot}}
+    {\blx@loccit@check{text}}}
+
+\def\blx@ifloccit@strict{%
+  \blx@ifcitesingle
+    {\blx@loccit@numcheck{text}}
+    {\@secondoftwo}}%
+
+\def\blx@ifloccit@constrict{%
+  \blx@ifcitesingle
+    {\iftoggle{blx@footnote}
+       {\blx@ifmpfncheck
+          {\blx@loccit@numcheck{foot}}
+          {\@secondoftwo}}
+       {\blx@loccit@numcheck{text}}}
+    {\@secondoftwo}}
+
+\def\blx@loccit@check#1{%
+  \blx@imc@iffieldundef{postnote}
+    {\@secondoftwo}
+    {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
+
+\def\blx@loccit@numcheck#1{%
+  \blx@imc@iffieldundef{postnote}
+    {\@secondoftwo}
+    {\expandafter\blx@imc@ifpages
+     \expandafter{\abx@field@postnote}
+       {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}
+       {\@secondoftwo}}}
+
+% {<true>}{<false>}
+
+\def\blx@ifmpfncheck{%
+  \ifnum\numexpr\value\@mpfn-\blx@lastmpfn<\tw@
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+\def\blx@mpfnsave{%
+  \xdef\blx@lastmpfn{\the\value\@mpfn}}
+
+\def\blx@mpfnreset{%
+  \global\let\blx@lastmpfn\z@}
+
+\blx@mpfnreset
+
+% {<true>}{<false>}
+
+\def\blx@imc@iffirstonpage{%
+  \iftoggle{blx@footnote}
+    {\blx@iffirstonpage{fnpage}}
+    {\blx@iffirstonpage{page}}}
+
+\def\blx@iffirstonpage#1{%
+  \ifcsundef{blx@#1@\number\c@instcount}
+    {\@secondoftwo}
+    {\expandafter\blx@iffirstonpage@i
+     \expandafter{\number\numexpr\c@instcount-1}{#1}}}
+
+\def\blx@iffirstonpage@i#1#2{%
+  \ifcsundef{blx@#2@#1}
+    {\ifnum#1>\@ne
+       \expandafter\@firstoftwo
+     \else
+       \expandafter\@secondoftwo
+     \fi
+     {\expandafter\blx@iffirstonpage@i
+      \expandafter{\number\numexpr#1-1}{#2}}
+     {\@firstoftwo}}
+    {\ifnum\csuse{blx@#2@\number\c@instcount}=%
+           \csuse{blx@#2@#1} %
+       \expandafter\@secondoftwo
+     \else
+       \expandafter\@firstoftwo
+     \fi}}
+
+% {<count1>}{<count2>}{<true>}{<false>}
+
+\def\blx@imc@ifsamepage#1#2{%
+  \ifcsundef{blx@page@\number\numexpr#1}
+    {\ifcsundef{blx@fnpage@\number\numexpr#1}
+       {\@secondoftwo}
+       {\blx@ifsamepage{#1}{#2}{fnpage}}}
+    {\blx@ifsamepage{#1}{#2}{page}}}
+
+\def\blx@ifsamepage#1#2#3{%
+  \ifcsundef{blx@page@\number\numexpr#2}
+    {\ifcsundef{blx@fnpage@\number\numexpr#2}
+       {\@secondoftwo}
+       {\blx@ifsamepage@i{#1}{#2}{#3}{fnpage}}}
+    {\blx@ifsamepage@i{#1}{#2}{#3}{page}}}
+
+\def\blx@ifsamepage@i#1#2#3#4{%
+  \ifnum\csuse{blx@#3@\number\numexpr#1}=%
+        \csuse{blx@#4@\number\numexpr#2} %
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {<string>}{<true>}{<false>}
+
+\protected\long\def\blx@imc@ifinteger#1{%
+  \begingroup
+  \def\do##1{\uccode`##1=`\%}%
+  \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
+  \makeatletter
+  \catcode`\%=9
+  \endlinechar\m@ne
+  \uppercase{\scantokens{\def\blx@tempa{#1}}}%
+  \ifx\blx@tempa\@empty
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {<field>}{<true>}{<false>}
+
+\protected\def\blx@imc@iffieldint#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\expandafter\expandafter
+     \expandafter\ifinteger
+     \expandafter\expandafter
+     \expandafter{\csname abx@field@#1\endcsname}}}
+
+% {<string>}{<true>}{<false>}
+
+\protected\def\blx@imc@ifnumeral{%
+  \blx@ifnum\blx@hook@ifnum}
+
+\protected\def\blx@imc@ifnumerals{%
+  \blx@ifnum\blx@hook@ifnums}
+
+\protected\def\blx@imc@ifpages{%
+  \blx@ifnum\blx@hook@ifpages}
+
+\long\def\blx@ifnum#1#2{%
+  \begingroup
+  \let\protect\@unexpandable@protect
+  \uppercase{\edef\blx@tempa{#2}}%
+  \ifx\blx@tempa\@empty
+    \aftergroup\@secondoftwo
+  \else
+    \makeatletter
+    \catcode`\%=9
+    \endlinechar\m@ne
+    \everyeof{\noexpand}#1%
+    \uppercase{\edef\blx@tempa{\scantokens{#2}}}%
+    \ifx\blx@tempa\@empty
+      \aftergroup\@firstoftwo
+    \else
+      \aftergroup\@secondoftwo
+    \fi
+  \fi
+  \endgroup}
+
+\def\blx@hook@ifnum{%
+  \def\do##1{\uccode`##1=`\%}%
+  \do\ \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
+  \do\i\do\v\do\x\do\l\do\c\do\d\do\m
+  \do\I\do\V\do\X\do\L\do\C\do\D\do\M
+  \blx@donumchars
+  \let\RN\@firstofone
+  \let\Rn\@firstofone}
+
+\def\blx@hook@ifnums{%
+  \blx@hook@ifnum
+  \def\do##1{\uccode`##1=`\%}%
+  \blx@dorangechars
+  \def\do##1{\let##1\@empty}%
+  \blx@dorangecmds}
+
+\def\blx@hook@ifpages{%
+  \blx@hook@ifnum
+  \blx@hook@ifnums
+  \def\do##1{\let##1\@empty}%
+  \blx@dopagecmds}
+
+% {<field>}{<true>}{<false>}
+
+\protected\def\blx@imc@iffieldnum#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\expandafter\expandafter
+     \expandafter\blx@imc@ifnumeral
+     \expandafter\expandafter
+     \expandafter{\csname abx@field@#1\endcsname}}}
+
+\protected\def\blx@imc@iffieldnums#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\expandafter\expandafter
+     \expandafter\blx@imc@ifnumerals
+     \expandafter\expandafter
+     \expandafter{\csname abx@field@#1\endcsname}}}
+
+\protected\def\blx@imc@iffieldpages#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\expandafter\expandafter
+     \expandafter\blx@imc@ifpages
+     \expandafter\expandafter
+     \expandafter{\csname abx@field@#1\endcsname}}}
+
+% {<chars>}
+
+\newrobustcmd*{\DeclareNumChars}{%
+  \@ifstar
+    {\blx@defnumchars}
+    {\global\let\blx@donumchars\@empty
+     \blx@defnumchars}}
+
+\def\blx@defnumchars#1{%
+  \ifblank{#1}
+    {}
+    {\expandafter\blx@defdochars
+     \expandafter\blx@donumchars
+     \detokenize{#1}\relax}}
+
+% {<chars>}
+
+\newrobustcmd*{\DeclareRangeChars}{%
+  \@ifstar
+    {\blx@defrangechars}
+    {\global\let\blx@dorangechars\@empty
+     \blx@defrangechars}}
+
+\def\blx@defrangechars#1{%
+  \ifblank{#1}
+    {}
+    {\expandafter\blx@defdochars
+     \expandafter\blx@dorangechars
+     \detokenize{#1}\relax}}
+
+\def\blx@defdochars#1#2{%
+  \ifx#2\relax
+  \else
+    \xdef#1{%
+      \expandonce#1\noexpand\do
+      \expandafter\noexpand\csname#2\endcsname}%
+    \expandafter\blx@defdochars
+    \expandafter#1%
+  \fi}
+
+% {<cstokens>}
+
+\newrobustcmd*{\DeclareRangeCommands}{%
+  \@ifstar
+    {\blx@defrangecmds}
+    {\global\let\blx@dorangecmds\@empty
+     \blx@defrangecmds}}
+
+\def\blx@defrangecmds#1{%
+  \ifblank{#1}
+    {}
+    {\blx@defrangecmds@i#1&}}
+
+\def\blx@defrangecmds@i#1{%
+  \ifx&#1%
+  \else
+    \gappto\blx@dorangecmds{\do#1}%
+    \expandafter\blx@defrangecmds@i
+  \fi}
+
+% {<cstokens>}
+
+\newrobustcmd*{\DeclarePageCommands}{%
+  \@ifstar
+    {\blx@defpagecmds}
+    {\global\let\blx@dopagecmds\@empty
+     \blx@defpagecmds}}
+
+\def\blx@defpagecmds#1{%
+  \ifblank{#1}
+    {}
+    {\blx@defpagecmds@i#1&}}
+
+\def\blx@defpagecmds@i#1{%
+  \ifx&#1%
+  \else
+    \gappto\blx@dopagecmds{\do#1}%
+    \expandafter\blx@defpagecmds@i
+  \fi}
+
+\DeclareNumChars{.}
+\DeclareRangeChars{~,;-+/}
+\DeclareRangeCommands{%
+  \ \,\space\nobreakspace\addspace\addnbspace
+  \addthinspace\addnbthinspace\addlowpenspace
+  \addhighpenspace\addlpthinspace\addhpthinspace
+  \adddotspace\addabbrvspace\&\psq\psqq
+  \bibrangedash\bibdatedash\textendash\textemdash\bibrangessep}
+\DeclarePageCommands{\pno\ppno}
+
+% *{<code>}
+
+\newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum}
+\newcommand*{\NumcheckSetup}{\NumCheckSetup}
+
+% [<pagination>][<postpro>]{<string>}
+
+\newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{%
+  \begingroup
+  \def\blx@tempa{\blx@mkpageprefix{page}}%
+  \iffieldundef{#1}
+    {}
+    {\iffieldequalstr{#1}{none}
+       {\def\blx@tempa{\blx@mkpageprefix@i}}
+       {\iffieldbibstring{#1}
+          {\edef\blx@tempa{\blx@mkpageprefix{\thefield{#1}}}}
+          {\blx@warning@entry{%
+             Unknown pagination type '\strfield{#1}'}}}}%
+  \@ifnextchar[%]
+    {\blx@tempa}
+    {\blx@tempa[\@firstofone]}}
+
+\protected\long\def\blx@mkpageprefix#1[#2]#3{%
+  \ifnumeral{#3}
+    {\bibstring{#1}\ppspace}
+    {\ifnumerals{#3}
+       {\bibstring{#1s}\ppspace}
+       {\def\pno{\bibstring{#1}}%
+        \def\ppno{\bibstring{#1s}}}}%
+  \blx@mkpageprefix@i[#2]{#3}}
+
+\long\def\blx@mkpageprefix@i[#1]#2{#1{#2}\endgroup}
+
+% [<pagination>][<postpro>]{<string>}
+
+\newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{%
+  \begingroup
+  \def\blx@tempa{\blx@mkpagetotal{page}}%
+  \iffieldundef{#1}
+    {}
+    {\iffieldequalstr{#1}{none}
+       {\def\blx@tempa{\blx@mkpagetotal@i}}
+       {\iffieldbibstring{#1}
+          {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1}}}}
+          {\blx@warning@entry{%
+             Unknown pagination type '\strfield{#1}'}}}}%
+  \@ifnextchar[%]
+    {\blx@tempa}
+    {\blx@tempa[\@firstofone]}}
+
+\protected\long\def\blx@mkpagetotal#1[#2]#3{%
+  \ifnumeral{#3}
+    {\setbox\@tempboxa=\hbox{%
+       \blx@tempcnta0#3\relax
+       \ifnum\blx@tempcnta=\@ne
+         \aftergroup\@firstoftwo
+       \else
+         \aftergroup\@secondoftwo
+       \fi}%
+     {#2{#3}\ppspace\bibstring{#1}}
+     {#2{#3}\ppspace\bibstring{#1s}}}
+    {\def\pno{\bibstring{#1}}%
+     \def\ppno{\bibstring{#1s}}%
+     #2{#3}}%
+  \endgroup}
+
+\long\def\blx@mkpagetotal@i[#1]#2{#1{#2}\endgroup}
+
+\newcounter{mincomprange}
+\newcounter{maxcomprange}
+\newcounter{mincompwidth}
+\setcounter{mincomprange}{10}
+\setcounter{maxcomprange}{100000}
+\setcounter{mincompwidth}{1}
+\def\abx@rangeproclimit{100000}
+
+% <*>[<postpro>]{<string>}
+
+\newrobustcmd*{\mkcomprange}{%
+  \begingroup
+  \@ifstar
+    {\blx@comprange\blx@comprange@ii}
+    {\blx@comprange\blx@comprange@i}}
+
+\def\blx@comprange#1{%
+  \@ifnextchar[{#1}{#1[\@firstofone]}}
+
+\def\blx@comprange@i[#1]#2{%
+  \let\blx@tempa\@empty
+  \protected\def\blx@range@out@value{\appto\blx@tempa}%
+  \let\blx@range@out@delim\blx@range@out@value
+  \let\blx@range@split\blx@comprange@split
+  \blx@range@chunk{#2}%
+  \edef\blx@tempa{\endgroup
+    \unexpanded{#1}{\expandonce\blx@tempa}}%
+  \blx@tempa}
+
+\def\blx@comprange@ii[#1]#2{%
+  \protected\def\blx@range@out@value{#1}%
+  \let\blx@range@out@delim\@firstofone
+  \let\blx@range@split\blx@comprange@split
+  \blx@range@chunk{#2}%
+  \endgroup}
+
+\def\blx@comprange@split#1{%
+  \def\blx@comprange@abort{\blx@range@out@value{#1}}%
+  \blx@imc@ifpages{#1}
+    {\blx@comprange@range#1\bibrangedash\bibrangedash&}
+    {\blx@comprange@abort}}
+
+\def\blx@comprange@range#1\bibrangedash#2\bibrangedash#3&{%
+  \ifblank{#3}
+    {\blx@comprange@hyphen#1--&}
+    {\ifblank{#2}
+       {\blx@range@out@value{#1\bibrangedash}}
+       {\ifblank{#1}
+          {\blx@range@out@value{\bibrangedash#2}}
+          {\blx@comprange@check{#1}{#2}}}}}
+
+\def\blx@comprange@hyphen#1-#2-#3&{%
+  \ifblank{#3}
+    {\blx@comprange@abort}
+    {\ifblank{#2}
+       {\ifblank{#1}
+          {\let\blx@tempb\@empty}
+          {\def\blx@tempb{#1}}%
+        \blx@comprange@hyphen@i#3&}
+       {\ifblank{#1}
+          {\blx@range@out@value{\bibrangedash#2}}
+          {\blx@comprange@check{#1}{#2}}}}}
+
+\def\blx@comprange@hyphen@i#1-#2&{%
+  \ifblank{#1#2}
+    {\expandafter\blx@range@out@value
+     \expandafter{\blx@tempb\bibrangedash}}
+    {\notblank{#1}
+       {\ifdefempty\blx@tempb
+          {\blx@range@out@value{\bibrangedash#1}}
+          {\expandafter\blx@comprange@check
+           \expandafter{\blx@tempb}{#1}}}
+       {\blx@comprange@hyphen@i#2&}}}
+
+\def\blx@comprange@check#1#2{%
+  \blx@imc@ifinteger{#1}
+    {\blx@imc@ifinteger{#2}
+       {\blx@comprange@comp{#1}{#2}}
+       {\blx@range@out@value{#1\bibrangedash#2}}}
+    {\blx@range@out@value{#1\bibrangedash#2}}}
+
+\def\blx@comprange@comp#1#2{%
+  \def\blx@tempb{#1}%
+  \def\blx@tempc{#2}%
+  \let\blx@tempd\blx@tempc
+  \ifnum\c@maxcomprange<\abx@rangeproclimit\relax
+    \numdef\blx@tempe\abx@rangeproclimit
+  \else
+    \numdef\blx@tempe\c@maxcomprange
+  \fi
+  \blx@tempcntc=\blx@tempe\relax
+  \ifnum
+    \ifnum\c@mincompwidth<1\space1\fi
+    \ifnum\c@maxcomprange<10\space1\fi
+    \ifnum\c@mincomprange<\blx@tempb\space\else1\fi
+    \ifnum\blx@tempb<\numexpr\blx@tempcntc*10\relax\else1\fi
+  0=\z@
+    \expandafter\blx@comprange@comp@div
+  \else
+    \expandafter\blx@comprange@end
+  \fi}
+
+\def\blx@comprange@end{%
+  \numdef\blx@tempb\blx@tempb
+  \ifnum\blx@tempe>\c@maxcomprange\relax
+    \numdef\blx@tempc\blx@tempc
+  \else
+    \numdef\blx@tempc\blx@tempd
+  \fi
+  \edef\blx@tempb{\blx@range@out@value{\blx@tempb\noexpand\bibrangedash\blx@tempc}}%
+  \blx@tempb}
+
+\def\blx@comprange@comp@div{%
+  \unless\ifnum\blx@tempb<\blx@tempcntc
+    \blx@tempcnta\blx@tempb\relax
+    \blx@tempcntb\blx@tempc\relax
+    \divide\blx@tempcnta\blx@tempcntc
+    \divide\blx@tempcntb\blx@tempcntc
+    \ifnum\blx@tempcnta=\blx@tempcntb
+      \edef\blx@tempd{\expandafter\@gobble\blx@tempd}%
+      \numdef\blx@tempe\blx@tempcntc
+    \fi
+  \fi
+  \divide\blx@tempcntc10\relax
+  \ifnum
+    \ifnum\blx@tempcntc<10 1\fi
+    \ifnum\blx@tempcntc>\c@mincompwidth\else 1\fi
+  0=\z@
+    \expandafter\blx@comprange@comp@div
+  \else
+    \expandafter\blx@comprange@end
+  \fi}
+
+\def\blx@range@chunk#1{%
+  \blx@range@chunk@sep#1\bibrangessep&}
+
+\def\blx@range@chunk@sep#1\bibrangessep#2&{%
+  \notblank{#1}
+    {\expandafter\blx@range@split
+     \expandafter{\@firstofone#1}}
+    {}%
+  \notblank{#2}
+    {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
+     \blx@range@chunk@sep#2&}
+    {}}
+
+% <*>[<postpro>]{<string>}
+
+\newrobustcmd*{\mkfirstpage}{%
+  \begingroup
+  \@ifstar
+    {\blx@firstpage\blx@firstpage@ii}
+    {\blx@firstpage\blx@firstpage@i}}
+
+\def\blx@firstpage#1{%
+  \@ifnextchar[{#1}{#1[\@firstofone]}}
+
+\def\blx@firstpage@i[#1]#2{%
+  \let\blx@tempa\@empty
+  \protected\def\blx@range@out@value{\appto\blx@tempa}%
+  \let\blx@range@out@delim\blx@range@out@value
+  \let\blx@range@split\blx@firstpage@split
+  \blx@range@chunk{#2}%
+  \edef\blx@tempa{\endgroup
+    \unexpanded{#1}{\expandonce\blx@tempa}}%
+  \blx@tempa}
+
+\def\blx@firstpage@ii[#1]#2{%
+  \protected\def\blx@range@out@value{#1}%
+  \let\blx@range@out@delim\@firstofone
+  \let\blx@range@split\blx@firstpage@split
+  \blx@range@chunk{#2}%
+  \endgroup}
+
+\def\blx@firstpage@split#1{%
+  \def\blx@firstpage@abort{\blx@range@out@value{#1}}%
+  \blx@firstpage@range#1\bibrangedash\bibrangedash&}
+
+\def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{%
+  \ifblank{#3}
+    {\blx@firstpage@hyphen#1--&}
+    {\ifblank{#1}
+       {\blx@range@out@value{\bibrangedash#2}}
+       {\blx@range@out@value{#1}}}}
+
+\def\blx@firstpage@hyphen#1-#2-#3&{%
+  \ifblank{#3}
+    {\blx@firstpage@abort}
+    {\ifblank{#1}
+       {\ifblank{#2}
+          {\blx@firstpage@hyphen@i#3&}
+          {\blx@range@out@value{\bibrangedash#2}}}
+       {\blx@range@out@value{#1}}}}
+
+\def\blx@firstpage@hyphen@i#1-#2&{%
+  \ifblank{#1}
+    {\ifblank{#2}
+       {\blx@firstpage@abort}
+       {\blx@firstpage@hyphen@i#2&}}
+    {\blx@range@out@value{\bibrangedash#1}}}
+
+\newcommand*{\ppspace}{\addnbspace}
+\newcommand*{\sqspace}{\addnbspace}
+
+\newrobustcmd*{\RN}[1]{%
+  \begingroup
+  \expandafter\RNfont
+  \expandafter{\romannumeral#1}%
+  \endgroup}
+\newrobustcmd*{\Rn}[1]{%
+  \begingroup
+  \expandafter\Rnfont
+  \expandafter{\romannumeral#1}%
+  \endgroup}
+
+\newcommand*{\RNfont}{\uppercase}
+\newcommand*{\Rnfont}{}
+
+% {<init>}{<entrytype>}
+
+\protected\def\blx@imc@usedriver#1#2{%
+  \begingroup
+  \let\finentry\blx@finentry@usedrv
+  \let\newblock\relax
+  \let\abx@macro@bibindex\@empty
+  \let\abx@macro@pageref\@empty
+  \csuse{blx@hook@bbxinit}#1%
+  \blx@beglang
+  \blx@driver{#2}%
+  \blx@endlang
+  \endgroup}
+
+% Punctuation
+
+\protected\def\blx@initunit{%
+  \global\togglefalse{blx@block}%
+  \global\togglefalse{blx@unit}%
+  \global\togglefalse{blx@insert}%
+  \global\togglefalse{blx@lastins}%
+  \global\let\blx@unitpunct\newunitpunct
+  \blx@imc@resetpunctfont}
+
+\def\blx@begunit{%
+  \toggletrue{blx@tempa}%
+  \iftoggle{blx@insert}
+    {\iftoggle{blx@unit}
+       {\begingroup
+          \let\blx@begunit\@empty
+          \let\blx@endunit\@empty
+          \let\blx@endnounit\@empty
+          \blx@unitpunct\blx@postpunct
+        \endgroup
+        \global\togglefalse{blx@unit}%
+        \togglefalse{blx@tempa}}
+       {\blx@postpunct}%
+     \iftoggle{blx@block}
+       {\begingroup
+          \let\blx@begunit\@empty
+          \let\blx@endunit\@empty
+          \let\blx@endnounit\@empty
+          \newblockpunct
+        \endgroup
+        \global\togglefalse{blx@block}%
+        \togglefalse{blx@tempa}}
+       {}}
+    {}%
+  \blx@postpunct
+  \blx@imc@resetpunctfont
+  \iftoggle{blx@tempa}
+    {}
+    {\global\togglefalse{blx@insert}}%
+  \blx@leavevmode
+  \begingroup}
+
+\def\blx@endunit{%
+  \endgroup
+  \global\toggletrue{blx@insert}%
+  \global\toggletrue{blx@lastins}}
+
+\def\blx@nounit{%
+  \global\togglefalse{blx@lastins}}
+
+\def\blx@endnounit{%
+  \endgroup\blx@nounit}
+
+\protected\def\blx@imc@newblock{%
+  \global\toggletrue{blx@block}}%
+
+\protected\def\blx@imc@newunit{%
+  \global\let\blx@unitpunct\newunitpunct
+  \global\toggletrue{blx@unit}}%
+
+\protected\def\blx@imc@setunit{%
+  \@ifstar\blx@setunit@i\blx@setunit}
+
+\long\def\blx@setunit#1{%
+  \long\gdef\blx@unitpunct{#1}%
+  \global\toggletrue{blx@unit}}%
+
+\def\blx@setunit@i{%
+  \iftoggle{blx@lastins}
+    {\blx@setunit}
+    {\@gobble}}
+
+\protected\def\blx@imc@finentry{%
+  \unspace\finentrypunct
+  \blx@postpunct
+  \blx@initunit}
+
+\protected\def\blx@finentry@usedrv{%
+  \unspace\blx@initunit
+}
+
+\protected\def\blx@finentry@inset{%
+  \blx@setunit\entrysetpunct
+  \global\toggletrue{blx@block}}
+
+\blx@regimcs{%
+  \ifdriver \thefield \strfield \thelist \thename \clearfield \clearlist
+  \clearname \restorefield \restorelist \restorename
+  \ifcategory \ifentrycategory \ifkeyword \ifentrykeyword
+  \ifciteseen \ifentryseen \ifciteibid \ifciteidem \ifopcit \ifloccit
+  \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype
+  \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal
+  \iffieldundef \iffieldxref \iflistequalcs \iflistequals
+  \iflistsequal \iflistundef \iflistxref \ifmorenames \ifmoreitems
+  \ifnameequalcs \ifnameequals \ifnamesequal \ifnameundef \ifnamexref
+  \iffirstonpage \ifsamepage \savefield \savefieldcs \savelist
+  \savelistcs \savename \savenamecs \usedriver
+  \ifinteger \ifnumeral \ifnumerals \ifpages
+  \iffieldint \iffieldnum \iffieldnums \iffieldpages
+  \mkpageprefix \mkpagetotal \mkpagefirst
+  \newblock \newunit \setunit \finentry}
+
+\appto\blx@blxinit{%
+  \def\ifnatbibmode{\iftoggle{blx@natbib}}%
+  \def\ifcitation{\iftoggle{blx@citation}}%
+  \def\ifbibliography{\iftoggle{blx@bibliography}}%
+  \def\ifciteindex{\iftoggle{blx@citeindex}}%
+  \def\ifbibindex{\iftoggle{blx@bibindex}}%
+  \def\iffootnote{\iftoggle{blx@footnote}}%
+  \def\ifuseprefix{\iftoggle{blx@useprefix}}%
+  \def\ifuseauthor{\iftoggle{blx@useauthor}}%
+  \def\ifuseeditor{\iftoggle{blx@useeditor}}%
+  \def\ifusetranslator{\iftoggle{blx@usetranslator}}%
+  \def\iffirstinits{\iftoggle{blx@firstinits}}%
+  \def\ifsingletitle{\iftoggle{abx@bool@singletitle}}%
+  \def\ifandothers#1{\iftoggle{abx@bool@more#1}}%
+  \protected\def\pno{\bibstring{page}}%
+  \protected\def\ppno{\bibstring{pages}}%
+  \let\nopp\relax
+  \protected\def\psq{\sqspace\bibstring{sequens}}%
+  \protected\def\psqq{\sqspace\bibstring{sequentes}}}
+  
+% Make sure that commands which might pop up inside an \edef will be defined
+% as something. If they are taken \AtBeginDocument then we assume that all will
+% be well. If not, then provide a definition which will give an error outside
+% of a citation context.
+\AtBeginDocument{%
+  \protected\def\do#1{%
+    \ifdefined#1%
+    \else
+      \protected\def#1{\ERROR}%
+    \fi
+  }%
+  \docsvlist{\pno,\ppno,\nopp,\psq,\psqq}%
+}
+
+%% Global formatting hooks
+
+% capitalization
+
+% {<text>}
+
+\newrobustcmd{\MakeCapital}[1]{%
+  \begingroup
+  \blx@mkcp@init
+  \protected@edef\blx@tempa{#1}%
+  \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end}
+
+\def\blx@mkcp@init{%
+  \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}%
+  \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}%
+  \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}%
+  \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}%
+  \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents
+  \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents
+  \def\IeC##1{\blx@mkcp@iec\IeC{##1}}%
+  \def\@tabacckludge##1{%
+    \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}}
+
+\begingroup
+\catcode`\"=\active
+\gappto\blx@mkcp@init{%
+  \ifnum\catcode`\"=\active
+    \def"#1{\blx@mkcp@bbl"\noexpand#1}%
+  \fi}
+\endgroup
+
+\def\blx@mkcp@parse{%
+  \futurelet\@let@token\blx@mkcp@eval}
+
+\long\def\blx@mkcp@eval{%
+  \ifx\@let@token\blx@mkcp@iec
+    \expandafter\blx@mkcp@getiec
+  \fi
+  \ifx\@let@token\blx@mkcp@bbl
+    \expandafter\blx@mkcp@gettwo
+  \fi
+  \ifx\@let@token\blx@mkcp@sgl
+    \expandafter\blx@mkcp@gettwo
+  \fi
+  \ifx\@let@token\blx@mkcp@dbl
+    \expandafter\blx@mkcp@getthree
+  \fi
+  \blx@mkcp@case}
+
+\def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{%
+  \blx@mkcp@case{#2#3{#4}}}
+
+\def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{%
+  \blx@mkcp@case{#2#3#4}}
+
+\def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{%
+  \blx@mkcp@case{#2#3#4#5}}
+
+\long\def\blx@mkcp@case#1{%
+  \begingroup
+  \def\i{I}\def\j{J}%
+  \def\do##1##2{\let##1##2\do}%
+  \expandafter\do\@uclclist\relax{\relax\@gobble}%
+  \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}%
+  \blx@tempa}
+
+\protected\long\def\blx@mkcp@end#1\blx@mkcp@end{%
+  \let\blx@mkcp@iec\noexpand
+  \let\blx@mkcp@bbl\noexpand
+  \let\blx@mkcp@sgl\noexpand
+  \let\blx@mkcp@dbl\noexpand
+  \protected@edef\blx@tempa{\endgroup#1}%
+  \blx@tempa}
+
+\def\abx@dosingleaccents{%
+  \do\"\do\'\do\`\do\^\do\~\do\=\do\.%
+  \do\H\do\b\do\c\do\d\do\r\do\u\do\v}
+\def\abx@dodoubleaccents{%
+  \do\t}
+
+% {<text>}
+
+\newrobustcmd*{\MakeSentenceCase}{%
+  \@ifstar\blx@mksc@i\blx@mksc@ii}
+
+\def\blx@mksc@i{%
+  \ifdef\abx@field@hyphenation
+    {\xifinlist\abx@field@hyphenation\blx@cmksc@lang
+       {\blx@mksc@ii}
+       {\@firstofone}}
+    {\blx@mksc@ii}}
+
+\long\def\blx@mksc@ii#1{%
+  \begingroup
+  \let\blx@tempa\@empty
+  \let\blx@tempb\@empty
+  \blx@mksc@init
+  \protected@edef\@tempa{#1}%
+  \expandafter\blx@mksc@parse\@tempa\blx@mksc@end}
+
+\def\blx@mksc@init{%
+  \blx@mkcp@init
+  \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}%
+  \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}%
+  \def\do##1{%
+    \ifx##1\relax
+    \else
+      \def##1{\blx@mkcp@nil##1}%
+      \expandafter\do
+    \fi}%
+  \expandafter\do\@uclclist\relax}
+
+\def\blx@mksc@parse{%
+  \futurelet\@let@token\blx@mksc@eval}
+
+\def\blx@mksc@eval{%
+  \ifx\@let@token\blx@mksc@end
+    \expandafter\blx@mksc@end
+  \fi
+  \ifx\@let@token\bgroup
+    \expandafter\blx@mksc@group
+  \fi
+  \ifx\@let@token\@sptoken
+    \expandafter\blx@mksc@space
+  \fi
+  \ifx\@let@token\blx@mkcp@nil
+    \expandafter\blx@mksc@getone
+  \fi
+  \ifx\@let@token\blx@mkcp@iec
+    \expandafter\blx@mksc@getiec
+  \fi
+  \ifx\@let@token\blx@mkcp@bbl
+    \expandafter\blx@mksc@gettwo
+  \fi
+  \ifx\@let@token\blx@mkcp@sgl
+    \expandafter\blx@mksc@gettwo
+  \fi
+  \ifx\@let@token\blx@mkcp@dbl
+    \expandafter\blx@mksc@getthree
+  \fi
+  \if\noexpand\@let@token\relax
+    \expandafter\blx@mksc@cs
+  \fi
+  \blx@mksc@other}
+
+\def\blx@mksc@end#1\blx@mksc@end{%
+  \blx@mksc@eject
+  \let\blx@mkcp@nil\noexpand
+  \let\blx@mkcp@iec\noexpand
+  \let\blx@mkcp@bbl\noexpand
+  \let\blx@mkcp@sgl\noexpand
+  \let\blx@mkcp@dbl\noexpand
+  \let\MakeUppercase\relax
+  \let\MakeLowercase\relax
+  \protected@edef\blx@tempa{\endgroup\blx@tempa}%
+  \blx@tempa}
+
+\long\def\blx@mksc@group#1\blx@mksc@other#2{%
+  \futurelet\@let@token\blx@mksc@ingroup#2&{#2}%
+  \blx@mksc@endhead
+  \blx@mksc@parse}
+
+\long\def\blx@mksc@ingroup#1&#2{%
+  \if\noexpand\@let@token\relax
+    \blx@mksc@locase{{#2}}%
+  \else
+    \blx@mksc@nocase{{#2}}%
+  \fi}
+
+\def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other}
+\csuse{blx@mksc@space} {%
+  \blx@mksc@anycase{ }%
+  \blx@mksc@endhead
+  \blx@mksc@parse}
+
+\long\def\blx@mksc@cs#1\blx@mksc@other#2{%
+  \ifcat\noexpand~\noexpand#2%
+    \blx@mksc@locase{#2}%
+  \else
+    \blx@mksc@nocase{#2}%
+  \fi
+  \blx@mksc@endhead
+  \blx@mksc@parse}
+
+\def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{%
+  \blx@mksc@other{#2#3{#4}}}
+
+\def\blx@mksc@getone#1\blx@mksc@other#2#3{%
+  \blx@mksc@other{#2#3}}
+
+\def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{%
+  \blx@mksc@other{#2#3#4}}
+
+\def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{%
+  \blx@mksc@other{#2#3#4#5}}
+
+\long\def\blx@mksc@other#1{%
+  \blx@mksc@locase{#1}%
+  \blx@mksc@endhead
+  \blx@mksc@parse}
+
+\def\blx@mksc@locase{%
+  \appto\blx@tempb}
+
+\def\blx@mksc@nocase{%
+  \blx@mksc@eject
+  \appto\blx@tempa}
+
+\def\blx@mksc@anycase{%
+  \ifx\blx@tempb\@empty
+    \expandafter\appto
+    \expandafter\blx@tempa
+  \else
+    \expandafter\appto
+    \expandafter\blx@tempb
+  \fi}
+
+\def\blx@mksc@eject{%
+  \ifx\blx@tempb\@empty
+  \else
+    \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}%
+    \let\blx@tempb\@empty
+  \fi}
+
+\def\blx@mksc@endhead{%
+  \ifx\blx@tempb\@empty
+  \else
+    \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}%
+    \let\blx@tempb\@empty
+  \fi
+  \let\blx@mksc@endhead\relax}
+
+% {<language,language,...>}
+
+\newrobustcmd*{\DeclareCaseLangs}{%
+  \@ifstar
+    {\blx@defcaselangs}
+    {\global\let\blx@cmksc@lang\@empty
+     \blx@defcaselangs}}
+
+\def\blx@defcaselangs#1{%
+  \ifblank{#1}
+    {}
+    {\forcsvlist{\listgadd\blx@cmksc@lang}{#1}}}
+
+\DeclareCaseLangs{%
+  american,british,canadian,
+  english,USenglish,UKenglish,
+  australian,newzealand}
+
+%% Main formatting commands
+
+% [<entrytype>]{<name>}{<definiton>}
+
+\newrobustcmd*{\DeclareNameFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defnameformat{nfd}*}
+    {\blx@defformat\blx@defnameformat{nfd}{}}}
+\newrobustcmd*{\DeclareIndexNameFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defnameformat{nid}*}
+    {\blx@defformat\blx@defnameformat{nid}{}}}
+
+\newrobustcmd*{\DeclareListFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defplainformat{lfd}*}
+    {\blx@defformat\blx@defplainformat{lfd}{}}}
+\newrobustcmd*{\DeclareIndexListFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defplainformat{lid}*}
+    {\blx@defformat\blx@defplainformat{lid}{}}}
+
+\newrobustcmd*{\DeclareFieldFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defplainformat{ffd}*}
+    {\blx@defformat\blx@defplainformat{ffd}{}}}
+\newrobustcmd*{\DeclareIndexFieldFormat}{%
+  \@ifstar
+    {\blx@defformat\blx@defplainformat{fid}*}
+    {\blx@defformat\blx@defplainformat{fid}{}}}
+
+% {<macro>}{<class>}{<*>}
+
+\def\blx@defformat#1#2#3{%
+  \@ifnextchar[%]
+    {\blx@defformat@i{#1}{#2}{#3}}
+    {\blx@defformat@i{#1}{#2}{#3}[*]}}
+
+% {<macro>}{<class>}{<*>}[<entrytype>]{<name>}
+
+\def\blx@defformat@i#1#2#3[#4]#5{%
+  \notblank{#3}
+    {\blx@resetformat{#2}{#5}}
+    {}%
+  \def\blx@defformat@a{#2}%
+  \def\blx@defformat@b{#4}%
+  \blx@xsanitizeafter{\def\blx@defformat@c}{#5}%
+  \afterassignment\blx@defformat@ii
+  #1}
+
+\def\blx@defformat@ii{%
+  \expandafter\forcsvlist
+  \expandafter\blx@defformat@iii
+  \expandafter{\blx@defformat@b}}
+
+\def\blx@defformat@iii#1{%
+  \cslet{abx@\blx@defformat@a @#1@\blx@defformat@c}\blx@defformat@d}
+
+\def\blx@defplainformat{%
+  \long\def\blx@defformat@d##1}
+
+\def\blx@defnameformat{%
+  \long\def\blx@defformat@d##1##2##3##4##5##6##7##8}
+
+\def\blx@resetformat#1#2{%
+  \let\blx@saved@do\do
+  \def\do##1{\blx@resetformat@i{#1}{#2}{##1}}%
+  \blx@safe@actives
+  \dolistcsloop{blx@biber@datamodel@entrytypes}%
+  \blx@rest@actives
+  \let\do\blx@saved@do}
+
+\def\blx@resetformat@i#1#2#3{%
+  \ifcsdef{abx@#1@#3@#2}
+    {\csundef{abx@#1@#3@#2}}
+    {}}
+
+% {<name>}{<name>}
+
+\def\blx@letformat#1#2{%
+  \blx@safe@actives
+  \afterassignment\blx@rest@actives
+  \csletcs{#1}{#2}}
+
+% [aliastype]{aliasname}[formattype]{formatname}
+
+\def\blx@defalias#1{%
+  \@ifnextchar[%]
+    {\blx@defalias@i{#1}}
+    {\blx@defalias@i{#1}[*]}}
+\def\blx@defalias@i#1[#2]#3{%
+  \@ifnextchar[%]
+    {\blx@defalias@ii{#1}{#2}{#3}}
+    {\blx@defalias@ii{#1}{#2}{#3}[*]}}
+\def\blx@defalias@ii#1#2#3[#4]#5{%
+  \blx@safe@actives
+  \afterassignment\blx@rest@actives
+  \csedef{abx@#1@#2@#3}{%
+    \expandonce{\csname abx@#1@#4@#5\endcsname}}}
+
+% {<macro>}{<id>}{<name>}{<field>}
+
+\def\blx@getformat#1#2#3#4{%
+  \blx@safe@actives
+  \afterassignment\blx@rest@actives
+  \ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#3}
+    {\ifcsundef{abx@#2@*@#3}
+       {\ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#4}
+          {\ifcsundef{abx@#2@*@#4}
+             {\letcs#1{abx@#2@*@default}}
+             {\letcs#1{abx@#2@*@#4}}}
+          {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#4}}}
+       {\letcs#1{abx@#2@*@#3}}}
+    {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#3}}}
+
+% [<entrytype>]{<name>}
+
+\newrobustcmd*{\savefieldformat}[2][*]{\blx@save{abx@ffd@#1@#2}}
+\newrobustcmd*{\savelistformat}[2][*]{\blx@save{abx@lfd@#1@#2}}
+\newrobustcmd*{\savenameformat}[2][*]{\blx@save{abx@nfd@#1@#2}}
+
+\newrobustcmd*{\restorefieldformat}[2][*]{\blx@restore{abx@ffd@#1@#2}}
+\newrobustcmd*{\restorelistformat}[2][*]{\blx@restore{abx@lfd@#1@#2}}
+\newrobustcmd*{\restorenameformat}[2][*]{\blx@restore{abx@nfd@#1@#2}}
+
+% [<entrytype>]{<alias>}[<entrytype>]{<name>}
+
+\newrobustcmd*{\DeclareNameAlias}{\blx@defalias{nfd}}
+\newrobustcmd*{\DeclareIndexNameAlias}{\blx@defalias{nid}}
+
+\newrobustcmd*{\DeclareListAlias}{\blx@defalias{lfd}}
+\newrobustcmd*{\DeclareIndexListAlias}{\blx@defalias{lid}}
+
+\newrobustcmd*{\DeclareFieldAlias}{\blx@defalias{ffd}}
+\newrobustcmd*{\DeclareIndexFieldAlias}{\blx@defalias{fid}}
+
+% [<format>]{<text>}
+
+\newrobustcmd{\blx@imc@printtext}[2][]{%
+  \ifblank{#2}
+    {\blx@nounit}
+    {\ifblank{#1}
+       {\let\blx@theformat\@firstofone}
+       {\blx@getformat\blx@theformat{ffd}{#1}{}}%
+     \ifdefvoid\blx@theformat
+       {\blx@nounit}
+       {\blx@begunit
+        \blx@theformat{#2}%
+        \blx@endunit}}}
+
+% [<format>]{<field>}
+
+\newrobustcmd*{\blx@imc@printfield}[2][]{%
+  \blx@imc@iffieldundef{#2}
+    {\blx@nounit}
+    {\blx@getformat\blx@theformat{ffd}{#1}{#2}%
+     \ifdefvoid\blx@theformat
+       {\blx@nounit}
+       {\blx@begunit
+        \def\currentfield{#2}%
+        \expandafter\expandafter
+        \expandafter\blx@theformat
+        \expandafter\expandafter
+        \expandafter{\csname abx@field@#2\endcsname}%
+        \blx@endunit}}}
+
+% [<format>]{<field>}
+
+\newcommand*{\blx@imc@indexfield}[2][]{%
+  \blx@imc@iffieldundef{#2}
+    {}
+    {\blx@getformat\blx@theformat{fid}{#1}{#2}%
+     \ifdefvoid\blx@theformat
+       {}
+       {\begingroup
+        \def\currentfield{#2}%
+        \letcs\blx@tempa{abx@field@#2}%
+        \expandafter\blx@theformat\expandafter{\blx@tempa}%
+        \endgroup}}}
+
+% [<format>]{<file>}
+
+\newrobustcmd*{\blx@imc@printfile}[2][]{%
+  \iftoggle{blx@loadfiles}
+    {\IfFileExists{#2}
+       {\listxadd\blx@list@req@edit{#2}%
+        \blx@imc@printtext[#1]{\input{#2}\unspace}}
+       {\blx@nounit}}
+    {\blx@nounit}}
+
+% {<macro>}[<format>][<start>-<stop>]
+% => <macro>{<format>}{<start>}{<stop>}
+
+\def\blx@listargs#1{%
+  \@ifnextchar[%]
+    {\blx@listargs@i{#1}}
+    {#1{}{}{}}}
+
+\def\blx@listargs@i#1[#2]{%
+  \@ifnextchar[%]
+    {\blx@listargs@ii{#1}{#2}}
+    {#1{#2}{}{}}}
+
+\def\blx@listargs@ii#1#2[#3]{%
+  \blx@listargs@iii{#1}{#2}#3&}
+
+\def\blx@listargs@iii#1#2#3-#4&{%
+  #1{#2}{#3}{#4}}
+
+% [<format>][<start>-<stop>]{<namelist>}
+
+\protected\def\blx@imc@printnames{%
+  \blx@listargs\blx@printnames}
+
+% {<format>}{<start>}{<stop>}{<namelist>}
+
+\def\blx@printnames#1#2#3#4{%
+  \blx@imc@ifnameundef{#4}
+    {\blx@nounit}
+    {\blx@getformat\blx@theformat{nfd}{#1}{#4}%
+     \ifdefvoid\blx@theformat
+       {\blx@nounit}
+       {\blx@begunit
+        \blx@namesetup{#2}{#3}{#4}%
+        \expandafter\blx@nameparser\blx@thedata{}&%
+        \blx@endunit}}}
+
+\def\blx@namesetup#1#2#3{%
+  \def\currentname{#3}%
+  \c@listcount\@ne
+  \c@listtotal\csname c@#3\endcsname
+  \blx@namesetup@i{#3}%
+  \ifblank{#1}
+    {\c@liststart\@ne}
+    {\ifnum#1<\@ne
+       \c@liststart\@ne
+     \else
+       \c@liststart#1\relax
+     \fi}%
+  \ifblank{#2}
+    {\c@liststop\c@listtotal
+     \ifnum\c@liststop>\c@maxnames
+       \c@liststop\c@minnames
+       \ifnum\c@uniquelist>\c@liststop
+         \c@liststop\c@uniquelist
+       \fi
+     \fi}
+    {\ifnum#2>\c@listtotal
+       \c@liststop\c@listtotal
+     \else
+       \ifnum#2<\@ne
+         \c@liststop\@ne
+       \else
+         \c@liststop#2\relax
+       \fi
+     \fi}%
+  \blx@namecodes}
+
+\def\blx@namesetup@i#1{%
+  \expandafter\expandafter
+  \expandafter\blx@namesetup@ii\csname abx@name@#1\endcsname}
+
+\def\blx@namesetup@ii#1#2{%
+  \c@uniquelist\z@
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@opt@name}{#1}}%
+  \def\blx@thedata{#2}}
+
+\define@key{blx@opt@name}{uniquelist}{\c@uniquelist#1\relax}
+\define@key{blx@opt@name}{uniquename}{\c@uniquename#1\relax}
+\define@key{blx@opt@name}{hash}{\edef\abx@field@hash{\detokenize{#1}}}
+
+\newrobustcmd*{\bibinitperiod}{\adddot}
+\newrobustcmd*{\bibinitdelim}{\addnbspace}
+\newrobustcmd*{\bibinithyphendelim}{.\mbox{-}}
+\newrobustcmd*{\bibnamedelima}{\addhighpenspace}
+\newrobustcmd*{\bibnamedelimb}{\addlowpenspace}
+\newrobustcmd*{\bibnamedelimc}{\addhighpenspace}
+\newrobustcmd*{\bibnamedelimd}{\addlowpenspace}
+\newrobustcmd*{\bibnamedelimi}{\addnbspace}
+
+% [<format>][<start>-<stop>]{<namelist>}
+
+\protected\def\blx@imc@indexnames{%
+  \blx@listargs\blx@indexnames}
+
+% {<format>}{<start>}{<stop>}{<namelist>}
+
+\def\blx@indexnames#1#2#3#4{%
+  \blx@imc@ifnameundef{#4}
+    {}
+    {\blx@getformat\blx@theformat{nid}{#1}{#4}%
+     \ifdefvoid\blx@theformat
+       {}
+       {\begingroup
+        \blx@namesetup{#2}{#3}{#4}%
+        \blx@indexnamesetup
+        \expandafter\blx@nameparser\blx@thedata{}&%
+        \endgroup}}}
+
+\def\blx@indexnamesetup{%
+  \let\bibinitperiod\bibindexinitperiod
+  \let\bibinitdelim\bibindexinitdelim
+  \let\bibinithyphendelim\bibindexinithyphendelim
+  \let\bibnamedelima\bibindexnamedelima
+  \let\bibnamedelimb\bibindexnamedelimb
+  \let\bibnamedelimc\bibindexnamedelimc
+  \let\bibnamedelimd\bibindexnamedelimd
+  \let\bibnamedelimi\bibindexnamedelimi}
+
+% {<name1>}{<name2>}{...}
+
+\long\def\blx@nameparser#1{%
+  \ifblank{#1}
+    {\blx@namebreak}
+    {\ifnum\c@listcount<\c@liststart
+     \else
+       \blx@nameparser@i#1%
+     \fi
+     \advance\c@listcount\@ne
+     \ifnum\c@listcount>\c@liststop
+       \expandafter\blx@namebreak
+     \fi
+     \blx@nameparser}}
+
+\long\def\blx@nameparser@i#1{%
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@opt@name}{#1}}%
+  \blx@theformat}
+
+\long\def\blx@namebreak#1&{}
+
+% [<format>][<start>-<stop>]{<plainlist>}
+
+\protected\def\blx@imc@printlist{%
+  \blx@listargs\blx@printlist}
+
+% {<format>}{<start>}{<stop>}{<plainlist>}
+
+\def\blx@printlist#1#2#3#4{%
+  \blx@imc@iflistundef{#4}
+    {\blx@nounit}
+    {\blx@getformat\blx@theformat{lfd}{#1}{#4}%
+     \ifdefvoid\blx@theformat
+       {\blx@nounit}
+       {\blx@begunit
+        \blx@listsetup{#2}{#3}{#4}%
+        \expandafter\blx@listparser\blx@thedata{}&%
+        \blx@endunit}}}
+
+\def\blx@listsetup#1#2#3{%
+  \def\currentlist{#3}%
+  \c@listcount\@ne
+  \expandafter\c@listtotal\csname c@#3\endcsname
+  \letcs\blx@thedata{abx@list@#3}%
+  \ifblank{#1}
+    {\c@liststart\@ne}
+    {\ifnum#1<\@ne
+       \c@liststart\@ne
+     \else
+       \c@liststart#1\relax
+     \fi}%
+  \ifblank{#2}
+    {\c@liststop\c@listtotal
+     \ifnum\c@listtotal>\c@maxitems
+       \c@liststop\c@minitems
+     \fi}
+    {\ifnum#2>\c@listtotal
+       \c@liststop\c@listtotal
+     \else
+       \ifnum#2<\@ne
+         \c@liststop\@ne
+       \else
+         \c@liststop#2\relax
+       \fi
+     \fi}}
+
+% [<format>][<start>-<stop>]{<plainlist>}
+
+\protected\def\blx@imc@indexlist{%
+  \blx@listargs\blx@indexlist}
+
+% {<format>}{<start>}{<stop>}{<plainlist>}
+
+\def\blx@indexlist#1#2#3#4{%
+  \blx@imc@iflistundef{#4}
+    {}
+    {\blx@getformat\blx@theformat{lid}{#1}{#4}%
+     \ifdefvoid\blx@theformat
+       {}
+       {\begingroup
+        \blx@listsetup{#2}{#3}{#4}%
+        \expandafter\blx@listparser\blx@thedata{}&%
+        \endgroup}}}
+
+% {<item1>}{<item2>}{...}
+
+\long\def\blx@listparser#1{%
+  \ifblank{#1}
+    {\blx@listbreak}
+    {\ifnum\c@listcount<\c@liststart
+     \else
+       \blx@theformat{#1}%
+     \fi
+     \advance\c@listcount\@ne
+     \ifnum\c@listcount>\c@liststop
+       \expandafter\blx@listbreak
+     \fi
+     \blx@listparser}}
+
+\long\def\blx@listbreak#1&{}
+
+% <*>{<key>}{<code>}
+
+\protected\def\blx@imc@entrydata{%
+  \@ifstar
+    {\blx@xsanitizeafter{\blx@imc@entrydata@i\blx@saveentry}}
+    {\blx@xsanitizeafter{\blx@imc@entrydata@i{}}}}
+
+\long\def\blx@imc@entrydata@i#1#2#3{%
+  \blx@ifdata{#2}
+    {\begingroup
+     #1%
+     \blx@resetdata
+     \blx@getdata{#2}%
+     \blx@entrysetcount
+     \blx@setoptions@type\abx@field@entrytype
+     \blx@setoptions@entry
+     \addtocounter{instcount}\@ne
+     \blx@execute
+     \blx@beglang#3\blx@endlang
+     \endgroup}
+    {}}
+
+\protected\def\blx@imc@entryset#1#2{%
+  \blx@imc@iffieldundef{entrykey}
+    {}
+    {\begingroup
+     \long\def\blx@entryset@precode{#1}%
+     \long\def\blx@entryset@postcode{#2}%
+     \let\finentry\blx@finentry@inset
+     \let\do\blx@entryset
+     \blx@imc@docsvfield{entryset}%
+     \endgroup}}
+
+\def\blx@entryset#1{%
+  \blx@ifdata{#1}
+    {\begingroup
+     \blx@imc@clearlist{pageref}%
+     \blx@getdata{#1}%
+     \blx@setoptions@type\abx@field@entrytype
+     \def\abx@field@entrysetcount{1}%
+     \blx@entryset@precode
+     \blx@driver{\blx@imc@thefield{entrytype}}%
+     \blx@entryset@postcode
+     \endgroup}
+    {}%
+  \let\do\blx@entryset@i}
+
+\def\blx@entryset@i#1{%
+  \blx@imc@entrydata{#1}{%
+    \blx@entryset@precode
+    \blx@driver{\blx@imc@thefield{entrytype}}
+    \blx@entryset@postcode}}
+
+\blx@regimcs{%
+  \printtext \printfield \printlist \printnames \printfile
+  \indexfield \indexlist \indexnames \entrydata \entryset}
+
+%% Localization
+
+% [<wrapper>]{<string>}
+
+\newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{%
+  \blx@bibstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@biblstring}[2][\@firstofone]{%
+  \blx@bibstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibsstring}[2][\@firstofone]{%
+  \blx@bibstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibstring#1#2#3{%
+  \blx@begunit
+  \blx@hyphenreset
+  \let\bibstring\blx@imc@bibxstring
+  \let\biblstring\blx@imc@bibxlstring
+  \let\bibsstring\blx@imc@bibxsstring
+  \lowercase{\edef\blx@tempa{#3}}%
+  \ifcsundef{#2@\blx@tempa}
+    {\blx@warn@nostring\blx@tempa
+     \blx@endnounit}
+    {\blx@imc@ifcapital
+       {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}}
+       {#1{\csuse{#2@\blx@tempa}}}%
+     \blx@endunit}}
+
+% [<wrapper>]{<string>}
+
+\newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{%
+  \blx@bibcpstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@bibcplstring}[2][\@firstofone]{%
+  \blx@bibcpstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibcpsstring}[2][\@firstofone]{%
+  \blx@bibcpstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibcpstring#1#2#3{%
+  \blx@begunit
+  \blx@hyphenreset
+  \let\bibstring\blx@imc@bibxstring
+  \let\biblstring\blx@imc@bibxlstring
+  \let\bibsstring\blx@imc@bibxsstring
+  \lowercase{\edef\blx@tempa{#3}}%
+  \ifcsundef{#2@\blx@tempa}
+    {\blx@warn@nostring\blx@tempa
+     \blx@endnounit}
+    {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}%
+     \blx@endunit}}
+
+% [<wrapper>]{<string>}
+
+\newrobustcmd*{\blx@imc@biblcstring}[2][\@firstofone]{%
+  \blx@biblcstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@biblclstring}[2][\@firstofone]{%
+  \blx@biblcstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@biblcsstring}[2][\@firstofone]{%
+  \blx@biblcstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@biblcstring#1#2#3{%
+  \blx@begunit
+  \blx@hyphenreset
+  \let\bibstring\blx@imc@bibxstring
+  \let\biblstring\blx@imc@bibxlstring
+  \let\bibsstring\blx@imc@bibxsstring
+  \lowercase{\edef\blx@tempa{#3}}%
+  \ifcsundef{#2@\blx@tempa}
+    {\blx@warn@nostring\blx@tempa
+     \blx@endnounit}
+    {#1{\MakeLowercase{\csuse{#2@\blx@tempa}}}%
+     \blx@endunit}}
+
+% [<wrapper>]{<string>}
+
+\newrobustcmd*{\blx@imc@bibucstring}[2][\@firstofone]{%
+  \blx@bibucstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@bibuclstring}[2][\@firstofone]{%
+  \blx@bibucstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibucsstring}[2][\@firstofone]{%
+  \blx@bibucstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibucstring#1#2#3{%
+  \blx@begunit
+  \blx@hyphenreset
+  \let\bibstring\blx@imc@bibxstring
+  \let\biblstring\blx@imc@bibxlstring
+  \let\bibsstring\blx@imc@bibxsstring
+  \lowercase{\edef\blx@tempa{#3}}%
+  \ifcsundef{#2@\blx@tempa}
+    {\blx@warn@nostring\blx@tempa
+     \blx@endnounit}
+    {#1{\MakeUppercase{\csuse{#2@\blx@tempa}}}%
+     \blx@endunit}}
+
+% {<string>}
+
+\def\blx@imc@bibxstring#1{%
+  \blx@bibxstring{\abx@str}{#1}}
+
+\def\blx@imc@bibxlstring#1{%
+  \blx@bibxstring{abx@lstr}{#1}}
+
+\def\blx@imc@bibxsstring#1{%
+  \blx@bibxstring{abx@sstr}{#1}}
+
+\def\blx@bibxstring#1#2{%
+  \ifcsundef{#1@#2}
+    {\protect\blx@warn@nostring{#2}}
+    {\csuse{#1@#2}}}
+
+% {<string>}{<true>}{<false>}
+
+\def\blx@imc@ifbibstring#1{%
+  \ifcsundef{\abx@str @\detokenize{#1}}
+    {\@secondoftwo}
+    {\@firstoftwo}}
+
+\def\blx@imc@ifbibxstring#1{%
+  \blx@xsanitizeafter\ifcsundef{\abx@str @#1}
+    {\@secondoftwo}
+    {\@firstoftwo}}
+
+% {<field>}{<true>}{<false>}
+
+\def\blx@imc@iffieldbibstring#1{%
+  \blx@imc@iffieldundef{#1}
+    {\@secondoftwo}
+    {\ifcsundef{\abx@str @\detokenize\expandafter
+                          \expandafter\expandafter{%
+                \csname abx@field@#1\endcsname}}
+       {\@secondoftwo}
+       {\@firstoftwo}}}
+
+\blx@regimcs{%
+  \bibstring   \biblstring   \bibsstring 
+  \bibxstring  \bibxlstring  \bibxsstring
+  \bibcpstring \bibcplstring \bibcpsstring
+  \biblcstring \biblclstring \biblcsstring
+  \bibucstring \bibuclstring \bibucsstring
+  \ifbibstring \ifbibxstring \iffieldbibstring}
+
+\let\blx@hook@uc\relax
+\let\blx@hook@lc\relax
+
+\AtEndPreamble{%
+  \toggletrue{blx@tempa}%
+  \toggletrue{blx@tempb}%
+  \expandafter\patchcmd\csname MakeUppercase \endcsname
+    {\protected@edef}
+    {\blx@hook@uc\protected@edef}
+    {\togglefalse{blx@tempa}}
+    {}%
+  \expandafter\patchcmd\csname MakeLowercase \endcsname
+    {\protected@edef}
+    {\blx@hook@lc\protected@edef}
+    {\togglefalse{blx@tempb}}
+    {}%
+  \@ifpackageloaded{textcase}
+    {\expandafter\patchcmd\csname MakeUppercase \endcsname
+       {\def\i}
+       {\blx@hook@uc\def\i}
+       {\togglefalse{blx@tempa}}
+       {}%
+     \expandafter\patchcmd\csname MakeLowercase \endcsname
+       {\@uclcnotmath{}}
+       {\@uclcnotmath{\blx@hook@lc}}
+       {\togglefalse{blx@tempb}}
+       {}%
+     \expandafter\patchcmd\csname MakeTextUppercase \endcsname
+       {\def\i}
+       {\blx@hook@uc\def\i}
+       {}
+       {}%
+     \expandafter\patchcmd\csname MakeTextLowercase \endcsname
+       {\@uclcnotmath{}}
+       {\@uclcnotmath{\blx@hook@lc}}
+       {}
+       {}}
+    {}%
+  \iftoggle{blx@tempa}{\blx@err@patch{\string\MakeUppercase}}{}%
+  \iftoggle{blx@tempb}{\blx@err@patch{\string\MakeLowercase}}{}%
+}
+
+\appto\blx@blxinit{%
+  \def\blx@hook@uc{%
+    \def\bibstring{\blx@imc@bibucstring}%
+    \def\biblstring{\blx@imc@bibuclstring}%
+    \def\bibsstring{\blx@imc@bibucsstring}%
+    \def\biblcstring{\blx@imc@bibucstring}%
+    \def\biblclstring{\blx@imc@bibuclstring}%
+    \def\biblcsstring{\blx@imc@bibucsstring}%
+    \def\bibcpstring{\blx@imc@bibucstring}%
+    \def\bibcplstring{\blx@imc@bibuclstring}%
+    \def\bibcpsstring{\blx@imc@bibucsstring}}%
+  \def\blx@hook@lc{%
+    \def\bibstring{\blx@imc@biblcstring}%
+    \def\biblstring{\blx@imc@biblclstring}%
+    \def\bibsstring{\blx@imc@biblcsstring}%
+    \def\bibucstring{\blx@imc@biblcstring}%
+    \def\bibuclstring{\blx@imc@biblclstring}%
+    \def\bibucsstring{\blx@imc@biblcsstring}%
+    \def\bibcpstring{\blx@imc@biblcstring}%
+    \def\bibcplstring{\blx@imc@biblclstring}%
+    \def\bibcpsstring{\blx@imc@biblcsstring}}}
+
+\def\abx@dostrings{%
+  \do{bibliography}%
+  \do{references}%
+  \do{shorthands}%
+  \do{editor}%
+  \do{editors}%
+  \do{compiler}%
+  \do{compilers}%
+  \do{redactor}%
+  \do{redactors}%
+  \do{reviser}%
+  \do{revisers}%
+  \do{founder}%
+  \do{founders}%
+  \do{continuator}%
+  \do{continuators}%
+  \do{collaborator}%
+  \do{collaborators}%
+  \do{translator}%
+  \do{translators}%
+  \do{commentator}%
+  \do{commentators}%
+  \do{annotator}%
+  \do{annotators}%
+  \do{commentary}%
+  \do{annotations}%
+  \do{introduction}%
+  \do{foreword}%
+  \do{afterword}%
+  \do{editortr}%
+  \do{editorstr}%
+  \do{editorco}%
+  \do{editorsco}%
+  \do{editoran}%
+  \do{editorsan}%
+  \do{editorin}%
+  \do{editorsin}%
+  \do{editorfo}%
+  \do{editorsfo}%
+  \do{editoraf}%
+  \do{editorsaf}%
+  \do{editortrco}%
+  \do{editorstrco}%
+  \do{editortran}%
+  \do{editorstran}%
+  \do{editortrin}%
+  \do{editorstrin}%
+  \do{editortrfo}%
+  \do{editorstrfo}%
+  \do{editortraf}%
+  \do{editorstraf}%
+  \do{editorcoin}%
+  \do{editorscoin}%
+  \do{editorcofo}%
+  \do{editorscofo}%
+  \do{editorcoaf}%
+  \do{editorscoaf}%
+  \do{editoranin}%
+  \do{editorsanin}%
+  \do{editoranfo}%
+  \do{editorsanfo}%
+  \do{editoranaf}%
+  \do{editorsanaf}%
+  \do{editortrcoin}%
+  \do{editorstrcoin}%
+  \do{editortrcofo}%
+  \do{editorstrcofo}%
+  \do{editortrcoaf}%
+  \do{editorstrcoaf}%
+  \do{editortranin}%
+  \do{editorstranin}%
+  \do{editortranfo}%
+  \do{editorstranfo}%
+  \do{editortranaf}%
+  \do{editorstranaf}%
+  \do{translatorco}%
+  \do{translatorsco}%
+  \do{translatoran}%
+  \do{translatorsan}%
+  \do{translatorin}%
+  \do{translatorsin}%
+  \do{translatorfo}%
+  \do{translatorsfo}%
+  \do{translatoraf}%
+  \do{translatorsaf}%
+  \do{translatorcoin}%
+  \do{translatorscoin}%
+  \do{translatorcofo}%
+  \do{translatorscofo}%
+  \do{translatorcoaf}%
+  \do{translatorscoaf}%
+  \do{translatoranin}%
+  \do{translatorsanin}%
+  \do{translatoranfo}%
+  \do{translatorsanfo}%
+  \do{translatoranaf}%
+  \do{translatorsanaf}%
+  \do{byauthor}%
+  \do{byeditor}%
+  \do{byeditor}%
+  \do{bycompiler}%
+  \do{byredactor}%
+  \do{byreviser}%
+  \do{byreviewer}%
+  \do{byfounder}%
+  \do{bycontinuator}%
+  \do{bycollaborator}%
+  \do{bytranslator}%
+  \do{bycommentator}%
+  \do{byannotator}%
+  \do{withcommentator}%
+  \do{withannotator}%
+  \do{withintroduction}%
+  \do{withforeword}%
+  \do{withafterword}%
+  \do{byeditortr}%
+  \do{byeditorco}%
+  \do{byeditoran}%
+  \do{byeditorin}%
+  \do{byeditorfo}%
+  \do{byeditoraf}%
+  \do{byeditortrco}%
+  \do{byeditortran}%
+  \do{byeditortrin}%
+  \do{byeditortrfo}%
+  \do{byeditortraf}%
+  \do{byeditorcoin}%
+  \do{byeditorcofo}%
+  \do{byeditorcoaf}%
+  \do{byeditoranin}%
+  \do{byeditoranfo}%
+  \do{byeditoranaf}%
+  \do{byeditortrcoin}%
+  \do{byeditortrcofo}%
+  \do{byeditortrcoaf}%
+  \do{byeditortranin}%
+  \do{byeditortranfo}%
+  \do{byeditortranaf}%
+  \do{bytranslatorco}%
+  \do{bytranslatoran}%
+  \do{bytranslatorin}%
+  \do{bytranslatorfo}%
+  \do{bytranslatoraf}%
+  \do{bytranslatorcoin}%
+  \do{bytranslatorcofo}%
+  \do{bytranslatorcoaf}%
+  \do{bytranslatoranin}%
+  \do{bytranslatoranfo}%
+  \do{bytranslatoranaf}%
+  \do{and}%
+  \do{andothers}%
+  \do{andmore}%
+  \do{volume}%
+  \do{volumes}%
+  \do{involumes}%
+  \do{part}%
+  \do{jourvol}%
+  \do{jourser}%
+  \do{newseries}%
+  \do{oldseries}%
+  \do{edition}%
+  \do{reprint}%
+  \do{reprintof}%
+  \do{reprintas}%
+  \do{reprintfrom}%
+  \do{reviewof}%
+  \do{translationof}%
+  \do{translationas}%
+  \do{translationfrom}%
+  \do{origpubas}%
+  \do{origpubin}%
+  \do{astitle}%
+  \do{bypublisher}%
+  \do{page}%
+  \do{pages}%
+  \do{column}%
+  \do{columns}%
+  \do{line}%
+  \do{lines}%
+  \do{verse}%
+  \do{verses}%
+  \do{section}%
+  \do{sections}%
+  \do{paragraph}%
+  \do{paragraphs}%
+  \do{in}%
+  \do{inseries}%
+  \do{ofseries}%
+  \do{book}%
+  \do{issue}%
+  \do{number}%
+  \do{chapter}%
+  \do{mathesis}%
+  \do{phdthesis}%
+  \do{candthesis}%
+  \do{resreport}%
+  \do{techreport}%
+  \do{software}%
+  \do{datacd}%
+  \do{audiocd}%
+  \do{version}%
+  \do{doi}%
+  \do{url}%
+  \do{urlseen}%
+  \do{file}%
+  \do{inpreparation}%
+  \do{submitted}%
+  \do{inpress}%
+  \do{forthcoming}%
+  \do{library}%
+  \do{abstract}%
+  \do{annotation}%
+  \do{citedas}%
+  \do{seenote}%
+  \do{quotedin}%
+  \do{opcit}%
+  \do{loccit}%
+  \do{ibidem}%
+  \do{idem}%
+  \do{idemsf}%
+  \do{idemsm}%
+  \do{idemsn}%
+  \do{idempf}%
+  \do{idempm}%
+  \do{idempn}%
+  \do{idempp}%
+  \do{confer}%
+  \do{sequens}%
+  \do{sequentes}%
+  \do{passim}%
+  \do{see}%
+  \do{seealso}%
+  \do{backrefpage}%
+  \do{backrefpages}%
+  \do{thiscite}%
+  \do{january}%
+  \do{february}%
+  \do{march}%
+  \do{april}%
+  \do{may}%
+  \do{june}%
+  \do{july}%
+  \do{august}%
+  \do{september}%
+  \do{october}%
+  \do{november}%
+  \do{december}%
+  \do{langamerican}%
+  \do{langbrazilian}%
+  \do{langcroatian}%
+  \do{langdanish}%
+  \do{langdutch}%
+  \do{langenglish}%
+  \do{langfinnish}%
+  \do{langfrench}%
+  \do{langgerman}%
+  \do{langgreek}%
+  \do{langitalian}%
+  \do{langlatin}%
+  \do{langnorwegian}%
+  \do{langportuguese}%
+  \do{langrussian}%
+  \do{langspanish}%
+  \do{langswedish}%
+  \do{fromamerican}%
+  \do{frombrazilian}%
+  \do{fromcroatian}%
+  \do{fromdanish}%
+  \do{fromdutch}%
+  \do{fromenglish}%
+  \do{fromfinnish}%
+  \do{fromfrench}%
+  \do{fromgerman}%
+  \do{fromgreek}%
+  \do{fromitalian}%
+  \do{fromlatin}%
+  \do{fromnorwegian}%
+  \do{fromportuguese}%
+  \do{fromrussian}%
+  \do{fromspanish}%
+  \do{fromswedish}%
+  \do{countryde}%
+  \do{countryep}%
+  \do{countryeu}%
+  \do{countryfr}%
+  \do{countryuk}%
+  \do{countryus}%
+  \do{patent}%
+  \do{patentde}%
+  \do{patenteu}%
+  \do{patentfr}%
+  \do{patentuk}%
+  \do{patentus}%
+  \do{patreq}%
+  \do{patreqde}%
+  \do{patreqeu}%
+  \do{patreqfr}%
+  \do{patrequk}%
+  \do{patrequs}%
+}
+
+\newrobustcmd*{\NewBibliographyString}[1]{%
+  \forcsvlist\blx@newstring{#1}}
+
+\def\blx@newstring#1{%
+  \ifcsundef{KV@blx@lbx@#1}
+    {\gappto\abx@dostrings{\do{#1}}%
+     \csgdef{KV@blx@lbx@#1}##1{\blx@defstring{#1}{##1}}}
+    {}}
+
+% in *.cbx/bbx/tex: <key> = {<string>},
+% in *.lbx:         <key> = {{<longstring>}{<abbrevstring>}},
+
+\def\do#1{\define@key{blx@lbx}{#1}{\blx@defstring{#1}{##1}}}
+\abx@dostrings
+
+% in *.cbx/bbx/tex: (implicit)
+% in *.lbx:         inherit = {<language>},
+
+\define@key{blx@lbx}{inherit}{%
+  \blx@lbxinput{#1}{}{\blx@err@nolang{#1}}%
+  \csuse{abx@strings@#1}}
+
+\def\blx@cfg@defstring#1#2{%
+  \csdef{abx@lstr@#1}{#2}%
+  \csdef{abx@sstr@#1}{#2}}
+
+\def\blx@lbx@defstring#1#2{%
+  \blx@lbx@defstring@i{#1}#2}
+\def\blx@lbx@defstring@i#1#2#3{%
+  \csdef{abx@lstr@#1}{#2}%
+  \csdef{abx@sstr@#1}{#3}}
+
+% {<language>}
+
+\def\blx@lbxcheck#1{%
+  \ifcsdef{blx@lng@#1}
+    {\expandafter\expandafter\expandafter\IfFileExists
+     \expandafter\expandafter\expandafter{%
+     \csname blx@lng@#1\endcsname.lbx}
+       {}
+       {\blx@err@nolang{#1}}}
+    {\IfFileExists{#1.lbx}
+       {}
+       {\blx@err@nolang{#1}}}}
+
+% {<language>}{<definitions>}
+
+\newrobustcmd*{\DefineBibliographyExtras}[2]{%
+  \blx@lbxcheck{#1}%
+  \csgappto{blx@hook@extras@#1}{%
+    \blx@defbibextras{#1}{#2}}}
+\@onlypreamble\DefineBibliographyExtras
+
+\newrobustcmd*{\UndefineBibliographyExtras}[2]{%
+  \blx@lbxcheck{#1}%
+  \csgappto{blx@hook@noextras@#1}{%
+    \blx@undefbibextras{#1}{#2}}}
+\@onlypreamble\UndefineBibliographyExtras
+
+\def\blx@defbibextras#1{\csgappto{abx@extras@#1}}
+\def\blx@undefbibextras#1{\csgappto{abx@noextras@#1}}
+
+% {<language>}{<language>}
+
+\def\blx@letbibextras#1#2{%
+  \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}%
+  \global\csletcs{abx@extras@#1}{abx@extras@#2}
+  \global\csletcs{abx@noextras@#1}{abx@noextras@#2}}%
+
+% {<language>}{<strings>}
+
+\newrobustcmd*{\DefineBibliographyStrings}[2]{%
+  \blx@lbxcheck{#1}%
+  \csgappto{blx@hook@strings@#1}{%
+    \begingroup
+    \let\blx@defstring\blx@cfg@defstring
+    \blx@defbibstrings{#1}{#2}%
+    \endgroup}}
+\@onlypreamble\DefineBibliographyStrings
+
+\def\blx@defbibstrings#1#2{%
+  \def\do##1{\csundef{abx@lstr@##1}\csundef{abx@sstr@##1}}%
+  \abx@dostrings
+  \csuse{abx@strings@#1}%
+  \setkeys{blx@lbx}{#2}%
+  \let\do\blx@defbibstrings@i
+  \csxdef{abx@strings@#1}{\abx@dostrings}%
+  \csgappto{abx@strings@#1}{%
+    \ifcsdef{\abx@str @bibliography}
+      {\letcs\bibname{\abx@str @bibliography}}
+      {\let\bibname\@empty}%
+    \ifcsdef{\abx@str @references}
+      {\letcs\refname{\abx@str @references}}
+      {\let\refname\@empty}%
+    \ifcsdef{\abx@str @shorthands}
+      {\letcs\losname{\abx@str @shorthands}}
+      {\let\losname\@empty}}}
+
+\def\blx@defbibstrings@i#1{%
+  \ifcsdef{abx@lstr@#1}
+    {\def\expandafter\noexpand\csname abx@lstr@#1\endcsname{%
+       \csexpandonce{abx@lstr@#1}}}
+    {\undef\expandafter\noexpand\csname abx@lstr@#1\endcsname}%
+  \ifcsdef{abx@sstr@#1}
+    {\def\expandafter\noexpand\csname abx@sstr@#1\endcsname{%
+       \csexpandonce{abx@sstr@#1}}}
+    {\undef\expandafter\noexpand\csname abx@sstr@#1\endcsname}}
+
+% {<language>}{<language>}
+
+\def\blx@letbibstrings#1#2{%
+  \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}%
+  \global\csletcs{abx@strings@#1}{abx@strings@#2}}%
+
+% {<language>}{<exceptions>}
+
+\newrobustcmd*{\DefineHyphenationExceptions}[2]{%
+  \ifcsundef{l@#1}
+    {\blx@warn@nohyph{#1}}
+    {}%
+  \csgappto{blx@hook@hyph@#1}{\blx@hyphexcept{#1}{#2}}}
+\@onlypreamble\DefineHyphenationExceptions
+
+\def\blx@hyphexcept#1#2{%
+  \ifcsundef{l@#1}
+    {\blx@warn@nohyph{#1}}
+    {\begingroup
+     \language\csname l@#1\endcsname\relax
+     \hyphenation{#2}%
+     \endgroup}}
+
+% {<language>}{<mapping>}
+
+\newrobustcmd*{\DeclareLanguageMapping}[2]{%
+  \csgdef{blx@lng@#1}{#2}}
+\@onlypreamble\DeclareLanguageMapping
+
+% {<language>}{<success>}{<failure>}
+
+\def\blx@lbxinput#1{%
+  \ifcsdef{blx@lng@#1}
+    {\expandafter\expandafter\expandafter\blx@lbxinput@i
+     \expandafter\expandafter\expandafter{%
+       \csname blx@lng@#1\endcsname}{#1}}
+    {\blx@lbxinput@ii{#1}{#1}{language '#1'}}}
+
+% {<mapping>}{<language>}
+
+\def\blx@lbxinput@i#1#2{%
+  \global\csundef{blx@lng@#2}%
+  \IfFileExists{#1.lbx}
+    {\blx@lbxinput@ii{#2}{#1}{language '#2' -> '#1'}}
+    {\blx@warning@noline{%
+       File '#1.lbx' not found!\MessageBreak
+       Ignoring mapping '#2' -> '#1'}%
+     \blx@lbxinput{#2}}}
+
+% {<language>}{<lbxfile>}{<message>}
+
+\def\blx@lbxinput@ii#1#2#3{%
+  \begingroup
+  \setbox\@tempboxa=\hbox\bgroup
+    \aftergroup\endgroup
+    \blx@inputonce{#2.lbx}{#3}
+      {\global\cslet{abx@strings@#1}\@empty
+       \global\cslet{abx@extras@#1}\@empty
+       \global\cslet{abx@noextras@#1}\@empty
+       \blx@maplang{#1}{#1}%
+       \def\InheritBibliographyStrings{%
+       \blx@letbibstrings{#1}}%
+       \def\DeclareBibliographyStrings####1{%
+         \begingroup
+         \let\blx@defstring\blx@lbx@defstring
+         \blx@defbibstrings{#1}{####1}%
+         \endgroup}%
+       \def\InheritBibliographyExtras{\blx@letbibextras{#1}}%
+       \def\DeclareBibliographyExtras{\blx@defbibextras{#1}}%
+       \def\UndeclareBibliographyExtras{\blx@undefbibextras{#1}}%
+       \def\DeclareHyphenationExceptions{\blx@hyphexcept{#1}}%
+       \begingroup
+       \blx@saneccodes
+       \makeatletter}
+      {\endgroup
+       \csuse{blx@hook@strings@#1}%
+       \csuse{blx@hook@strings@#2}%
+       \csuse{blx@hook@extras@#1}%
+       \csuse{blx@hook@extras@#2}%
+       \csuse{blx@hook@noextras@#1}%
+       \csuse{blx@hook@noextras@#2}%
+       \csuse{blx@hook@hyph@#1}%
+       \csuse{blx@hook@hyph@#2}}
+      {\aftergroup\@firstoftwo}
+      {\aftergroup\@secondoftwo}%
+  \egroup}
+
+% {<language>}
+
+\def\blx@langsetup#1{%
+  \blx@lbxinput{#1}
+    {\edef\blx@languagename{#1}}
+    {\blx@warning
+       {Language '#1' not supported.\MessageBreak
+        Using fallback language '\blx@languagename'}%
+     \blx@lbxinput{\blx@languagename}
+       {\blx@maplang{#1}{\blx@languagename}}
+       {\blx@err@nolang{\blx@languagename}}}}
+
+% auxiliary macros
+
+% {<field base name>}
+
+\newrobustcmd*{\mkbibrangeshort}{%
+  \mkbibrangefull{short}}
+
+\newrobustcmd*{\mkbibrangelong}{%
+  \mkbibrangefull{long}}
+
+\newrobustcmd*{\mkbibrangeterse}{%
+  \mkbibrangetrunc{short}}
+
+\newrobustcmd*{\mkbibrangecomp}{%
+  \mkbibrangetrunc{long}}
+
+\newrobustcmd*{\mkbibrangeshortextra}{%
+  \mkbibrangefullextra{short}}
+
+\newrobustcmd*{\mkbibrangelongextra}{%
+  \mkbibrangefullextra{long}}
+
+\newrobustcmd*{\mkbibrangeterseextra}{%
+  \mkbibrangetruncextra{short}}
+
+\newrobustcmd*{\mkbibrangecompextra}{%
+  \mkbibrangetruncextra{long}}
+
+% {<short|long>}{<basename>}
+
+\newrobustcmd*{\mkbibrangefull}[2]{%
+  \iffieldundef{#2year}
+    {}
+    {\printtext[#2date]{%
+       \csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+       \iffieldundef{#2endyear}
+         {}
+         {\iffieldequalstr{#2endyear}{}
+            {\mbox{\bibdatedash}}
+            {\bibdatedash
+             \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}}}
+
+\newrobustcmd*{\mkbibrangetrunc}[2]{%
+  \iffieldundef{#2year}
+    {}
+    {\printtext[#2date]{%
+       \iffieldsequal{#2year}{#2endyear}
+         {\iffieldsequal{#2month}{#2endmonth}
+            {\csuse{mkbibdate#1}{}{}{#2day}}
+            {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+         {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}%
+       \iffieldundef{#2endyear}
+         {}
+         {\iffieldequalstr{#2endyear}{}
+            {\mbox{\bibdatedash}}
+            {\bibdatedash
+             \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}}}
+
+\newrobustcmd*{\mkbibrangefullextra}[2]{%
+  \iffieldundef{#2year}
+    {}
+    {\printtext[#2date]{%
+       \printtext{%
+         \csuse{mkbibdate#1}{#2year}{#2month}{#2day}}%
+       \iffieldundef{#2endyear}
+         {\printfield{extrayear}}
+         {\iffieldequalstr{#2endyear}{}
+            {\printfield{extrayear}%
+             \printtext{\mbox{\bibdatedash}}}
+            {\printtext{%
+               \bibdatedash
+               \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+               \printfield{extrayear}}}}}}}
+
+\newrobustcmd*{\mkbibrangetruncextra}[2]{%
+  \iffieldundef{#2year}
+    {}
+    {\printtext[#2date]{%
+       \printtext{%
+         \iffieldsequal{#2year}{#2endyear}
+           {\iffieldsequal{#2month}{#2endmonth}
+              {\csuse{mkbibdate#1}{}{}{#2day}}
+              {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+           {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}%
+       \iffieldundef{#2endyear}
+         {\printfield{extrayear}}
+         {\iffieldequalstr{#2endyear}{}
+            {\printfield{extrayear}%
+             \printtext{\mbox{\bibdatedash}}}
+            {\printtext{%
+               \bibdatedash
+               \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+               \printfield{extrayear}}}}}}}
+
+\expandafter\newrobustcmd
+\expandafter*\csname mkbibrangeiso8601\endcsname[1]{%
+  \iffieldundef{#1year}
+    {}
+    {\printtext[#1date]{%
+       \blx@isodate{#1year}{#1month}{#1day}%
+       \iffieldundef{#1endyear}
+         {}
+         {\addslash\blx@isodate{#1endyear}{#1endmonth}{#1endday}}}}}
+
+\expandafter\newrobustcmd
+\expandafter*\csname mkbibrangeiso8601extra\endcsname[1]{%
+  \iffieldundef{#1year}
+    {}
+    {\printtext[#1date]{%
+       \blx@isodate[extrayear]{#1year}{#1month}{#1day}%
+       \iffieldundef{#1endyear}
+         {}
+         {\addslash\blx@isodate{#1endyear}{#1endmonth}{#1endday}}}}}
+
+\newrobustcmd*{\blx@isodate}[4][]{%
+  \thefield{#2}\ifblank{#1}{}{\printfield{#1}}%
+  \iffieldundef{#3}{}{\mbox{-}\thefield{#3}}%
+  \iffieldundef{#4}{}{\mbox{-}\thefield{#4}}}
+
+\newrobustcmd*{\mkbibdatelong}[3]{}
+\newrobustcmd*{\mkbibdateshort}[3]{}
+\newrobustcmd*{\bibrangedash}{\textendash}
+\newrobustcmd*{\bibrangessep}{,\space}
+\newrobustcmd*{\bibdatedash}{\bibrangedash}
+\newrobustcmd*{\finalandcomma}{}
+\newrobustcmd*{\mkbibordinal}[1]{#1}
+\newrobustcmd*{\mkbibmascord}{\mkbibordinal}
+\newrobustcmd*{\mkbibfemord}{\mkbibordinal}
+\newrobustcmd*{\mkbibneutord}{\mkbibordinal}
+\newrobustcmd*{\mkbibmonth}[1]{%
+  \ifcase0#1\relax
+    \blx@warning@entry{Month out of range or not an integer}%
+  \or\abx@bibmonth{january}%
+  \or\abx@bibmonth{february}%
+  \or\abx@bibmonth{march}%
+  \or\abx@bibmonth{april}%
+  \or\abx@bibmonth{may}%
+  \or\abx@bibmonth{june}%
+  \or\abx@bibmonth{july}%
+  \or\abx@bibmonth{august}%
+  \or\abx@bibmonth{september}%
+  \or\abx@bibmonth{october}%
+  \or\abx@bibmonth{november}%
+  \or\abx@bibmonth{december}%
+  \else
+    \blx@warning@entry{Month out of range}#1%
+  \fi}
+
+\protected\def\blx@imc@printdate{}
+\protected\def\blx@imc@printdateextra{}
+\protected\def\blx@imc@printurldate{}
+\protected\def\blx@imc@printeventdate{}
+\protected\def\blx@imc@printorigdate{}
+
+\let\blx@imc@mkdatezeros\@firstofone
+\protected\def\blx@imc@stripzeros#1{%
+  \begingroup
+  \setbox\@tempboxa=\hbox\bgroup
+  \aftergroup\endgroup
+  \abx@hook@xsanitize
+  \if0#1\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\@tempcnta#1\relax
+   \expandafter\egroup
+   \number\@tempcnta
+   \@tempcnta#1\relax}
+  {\egroup#1}}
+
+\blx@regimcs{%
+  \printdate \printdateextra \printurldate \printeventdate
+  \printorigdate \stripzeros \mkdatezeros}
+
+% {<language>}{<strings>}
+
+\def\blx@maplang#1#2{%
+  \csxappto{extras#1}{%
+    \noexpand\blx@resetpunct
+    \expandafter\noexpand\csname abx@extras@#2\endcsname
+    \expandafter\noexpand\csname abx@strings@#2\endcsname}%
+  \csxappto{noextras#1}{%
+    \noexpand\blx@resetpunct
+    \expandafter\noexpand\csname abx@noextras@#2\endcsname}}
+
+%% Babel interface
+
+\def\blx@beglang{\blx@clearlang\begingroup}
+\def\blx@endlang{\endgroup}
+\let\blx@hook@endlang\@empty
+\let\blx@hook@initlang\@empty
+\def\blx@hyphenreset{%
+  \ifcsundef{l@\blx@languagename}
+    {}
+    {\language\csname l@\blx@languagename\endcsname\relax}%
+  \ifcsundef{\blx@languagename hyphenmins}
+    {\blx@sethyphenmins\tw@\thr@@}
+    {\expandafter\expandafter\expandafter\blx@sethyphenmins
+       \csname\blx@languagename hyphenmins\endcsname}}
+\def\blx@sethyphenmins#1#2{%
+  \lefthyphenmin#1\relax
+  \righthyphenmin#2\relax}
+
+\begingroup
+\@makeother\#
+\gdef\blx@mkbabel{%
+  \pretocmd\select@language{\blx@langsetup{#1}}
+    {\ifdef\blx@thelangenv
+       {\def\blx@beglang{%
+          \blx@clearlang
+          \begingroup
+          \blx@imc@iffieldundef{hyphenation}
+            {}
+            {\blx@hook@initlang
+             \def\blx@endlang{%
+               \blx@hook@endlang
+               \csname end\blx@thelangenv\endcsname
+               \endgroup}%
+             \csname\blx@thelangenv\expandafter\endcsname
+               \expandafter{\abx@field@hyphenation}}}}
+       {}%
+     \blx@langsetup\bbl@main@language}
+    {\blx@err@patch{'babel' package}%
+     \blx@mknobabel}}
+\endgroup
+
+\def\blx@mknobabel{%
+  \blx@lbxinput{\blx@languagename}
+    {}
+    {\blx@err@nolang{\blx@languagename}}}
+
+\newrobustcmd*{\DeclareRedundantLanguages}[2]{%
+  \begingroup
+  \ifblank{#2}
+    {\def\do##1{%
+       \global\csundef{blx@rlm@##1}%
+       \global\csundef{blx@rlm@lang##1}}}
+    {\def\do##1{%
+       \csxdef{blx@rlm@##1}{#2}%
+       \csxdef{blx@rlm@lang##1}{#2}}}%
+  \docsvlist{#1}%
+  \endgroup}
+
+\def\blx@clearlang{%
+  \iftoggle{blx@clearlang}
+    {\iflistundef{language}
+       {}
+       {\ifnumgreater{\value{language}}{1}
+          {}
+          {\expandafter\blx@clearlang@i\abx@list@language}}}
+    {}}
+
+\def\blx@clearlang@i#1{%
+  \ifcsdef{blx@rlm@#1}
+    {\expandafter\expandafter\expandafter\forcsvlist
+     \expandafter\expandafter\expandafter\blx@clearlang@ii
+     \expandafter\expandafter\expandafter{%
+       \csname blx@rlm@#1\endcsname}}
+    {}}
+
+\def\blx@clearlang@ii#1{%
+  \ifdefstring\languagename{#1}
+    {\clearlist{language}}
+    {}}
+
+% Used to pass regexps to .bcf
+\def\regexp#1{\expandafter\zap@space\detokenize{#1} \@empty}
+
+% Have to do this otherwise the '~'s in the .bcf strings are not expanded
+% This is done for the .bcf later in the style but since we have to do all the
+% data model things much earlier, have to set this here and reset on finishing
+\let\blx@tsave~
+\let~\space
+% Data model and supporting macros must be loaded early
+\blx@inputonce{blx-dm.def}{biblatex default data model}{}{}{}{}
+\let~\blx@tsave
+
+% We need to now load any style data model
+% Order of precedence is:
+% <datamodel option>.dbx, <style option>.dbx
+% This has to be done before the real options processing so we need to
+% pick out just these two options to look at. You can't do this with keyval,
+% you have to use kvoptions. So, pick out these two, pass through all
+% others and delete datamodel option as we don't care about it when we come
+% to really set options below
+\SetupKeyvalOptions{
+  family=blx@opt@eldt,
+  prefix=blx@opt@eldt@}
+\DeclareStringOption{datamodel}
+\DeclareStringOption{style}
+\DeclareDefaultOption{}
+\ProcessLocalKeyvalOptions{blx@opt@eldt}
+\ifx\blx@opt@eldt@datamodel\@empty
+  \blx@inputonce{\blx@opt@eldt@style.dbx}{biblatex style data model}{}{}{}{}
+\else
+  \blx@inputonce{\blx@opt@eldt@datamodel.dbx}{biblatex style data model}{}{}{}{}
+\fi
+\DisableKeyvalOption[action=undef,local]{blx@opt@eldt}{datamodel}
+
+% Override with user-defined data model if there is one
+\blx@inputonce{biblatex-dm.cfg}{biblatex custom data model}{}{}{}{}
+
+% These are internal fields which are not part of the data model but
+% which need to be dealt with along with data model fields in places
+\def\abx@dointernalfields{%
+  \do{childentrykey}%
+  \do{entrykey}%
+  \do{entryset}%
+  \do{entrysetcount}%
+  \do{entrytype}%
+  \do{extraalpha}%
+  \do{extratitle}%
+  \do{extratitleyear}%
+  \do{extrayear}%
+  \do{fullhash}%
+  \do{labelalpha}%
+  \do{labelnumber}%
+  \do{labeltitle}%
+  \do{labeltitleyear}%
+  \do{labelyear}%
+  \do{localnumber}%
+  \do{namehash}%
+  \do{prefixnumber}%
+  \do{sortinit}%
+}
+
+\def\abx@dobooleans{%
+  \do{singletitle}%
+}
+\def\do#1{%
+  \newcounter{#1}%
+  \newcounter{saved#1}%
+  \csedef{the#1}{\noexpand\the\expandonce{\csname c@#1\endcsname}}%
+  \csedef{thesaved#1}{\noexpand\the\expandonce{\csname c@saved#1\endcsname}}%
+  \appto\abx@dobooleans{\do{more#1}}}
+\dolistcsloop{blx@biber@datamodel@names}\do{labelname}%
+\dolistcsloop{blx@biber@datamodel@lists}\do{pageref}%
+\def\do#1{\newtoggle{abx@bool@#1}}
+\abx@dobooleans
+
+\protected\def\blx@resetdata{%
+  \let\blx@saved@do\do
+  \let\do\blx@imc@clearname
+  \dolistcsloop{blx@biber@datamodel@names}\do{labelname}%
+  \let\do\blx@imc@clearlist
+  \dolistcsloop{blx@biber@datamodel@lists}\do{pageref}%
+  \let\do\blx@imc@clearfield
+  \dolistcsloop{blx@biber@datamodel@fields}\do{options}%
+  \abx@dointernalfields
+  \def\do##1{\togglefalse{abx@bool@##1}}%
+  \abx@dobooleans
+  \let\do\blx@saved@do
+  \c@citecounter\z@
+  \iftoggle{blx@bibliography}
+    {\c@maxnames\blx@maxbibnames\relax
+     \c@minnames\blx@minbibnames\relax}
+    {\c@maxnames\blx@maxcitenames\relax
+     \c@minnames\blx@mincitenames\relax}%
+  \c@maxitems\blx@maxitems\relax
+  \c@minitems\blx@minitems\relax}
+
+\protected\def\blx@saveentry{%
+  \let\blx@saved@do\do
+  \let\do\blx@savename
+  \dolistcsloop{blx@biber@datamodel@names}\do{labelname}%
+  \let\do\blx@savelist
+  \dolistcsloop{blx@biber@datamodel@lists}\do{pageref}%
+  \let\do\blx@savefield
+  \dolistcsloop{blx@biber@datamodel@fields}\do{options}%
+  \abx@dointernalfields
+  \let\do\blx@savebool
+  \abx@dobooleans
+  \c@savedcitecounter\c@citecounter
+  \let\do\blx@saved@do}
+
+\protected\def\blx@savename#1{%
+  \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
+  \csletcs{abx@name@saved#1}{abx@name@#1}%
+  \csname c@saved#1\endcsname\csname c@#1\endcsname}
+
+\protected\def\blx@savelist#1{%
+  \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
+  \csletcs{abx@list@saved#1}{abx@list@#1}%
+  \csname c@saved#1\endcsname\csname c@#1\endcsname}
+
+\protected\def\blx@savefield#1{%
+  \csletcs{abx@field@saved#1}{abx@field@#1}}
+
+\protected\def\blx@savebool#1{%
+  \csletcs{abx@bool@saved#1}{abx@bool@#1}}
+
+% {<code>}
+
+\protected\long\def\blx@bbl@preamble#1{%
+  \gappto\abx@preamble{#1}}
+
+% {<message>}
+
+\protected\def\blx@bbl@warn#1{%
+  \begingroup
+  \def\item{\MessageBreak-\space}%
+  \def\break{\MessageBreak\space\space}%
+  \edef\blx@tempa{%
+    Biber reported the following issues%
+    \ifdef\abx@field@entrykey
+      {\MessageBreak with '\abx@field@entrykey'}
+      {}%
+    :#1}%
+  \blx@warning@noline{\blx@tempa}%
+  \endgroup}
+
+% {<field>}{<code>}
+
+\newrobustcmd{\DeclareFieldInputHandler}[2]{%
+  \ifblank{#2}
+    {\csundef{blx@fih@#1}}
+    {\long\csdef{blx@fih@#1}##1{#2}}}
+\@onlypreamble\DeclareFieldInputHandler
+
+% {<list>}{<code>}
+
+\newrobustcmd*{\DeclareListInputHandler}[2]{%
+  \ifblank{#2}
+    {\csundef{blx@lih@#1}}
+    {\csdef{blx@lih@#1}##1{#2}}}
+\@onlypreamble\DeclareListInputHandler
+
+% {<name>}{<code>}
+
+\newrobustcmd*{\DeclareNameInputHandler}[2]{%
+  \ifblank{#2}
+    {\csundef{blx@nih@#1}}
+    {\csdef{blx@nih@#1}##1{#2}}}
+\@onlypreamble\DeclareNameInputHandler
+
+% {<entrykey>}{<refsection>}{<field>}{<value>}
+
+\long\def\blx@bbl@addentryfield#1#2#3#4{%
+  \csxappto{blx@data@#2@#1}{%
+    \def\expandafter\noexpand\csname abx@field@#3\endcsname{#4}}}
+
+% {<field>}{<value>}
+
+\long\def\blx@bbl@addfield#1#2{%
+  \csxappto\blx@bbl@data{%
+    \def\expandafter\noexpand\csname abx@field@#1\endcsname{#2}}}
+
+\protected\long\def\blx@bbl@fielddef#1#2{%
+  \def\NewValue{#2}%
+  \ifcsdef{blx@fih@#1}
+    {\csname blx@fih@#1\endcsname{#2}%
+     \ifdefvoid\NewValue}
+    {\@secondoftwo}
+       {}
+       {\blx@bbl@addfield{#1}{\expandonce\NewValue}}}
+
+\protected\long\def\blx@bbl@fieldedef#1#2{%
+  \edef\NewValue{#2}%
+  \ifcsdef{blx@fih@#1}
+    {\csname blx@fih@#1\expandafter
+     \endcsname\expandafter{\NewValue}%
+     \ifdefvoid\NewValue}
+    {\@secondoftwo}
+       {}
+       {\blx@bbl@addfield{#1}{\NewValue}}}
+
+\protected\long\def\blx@bbl@stringdef#1#2{%
+  \begingroup
+  \edef\blx@tempa{\endgroup
+    \blx@bbl@fielddef{#1}{\detokenize{#2}}}%
+  \blx@tempa}
+
+% {<field>}
+
+\protected\def\blx@bbl@verbdef#1{%
+  \begingroup
+  \let\verb\blx@bbl@verbadd
+  \def\blx@tempa{#1}%
+  \let\NewValue\@empty}
+
+\protected\def\blx@bbl@verbend{%
+  \ifcsdef{blx@fih@\blx@tempa}
+    {\csname blx@fih@\blx@tempa\expandafter
+     \endcsname\expandafter{\NewValue}%
+     \ifdefvoid\NewValue}
+    {\@secondoftwo}
+       {}
+       {\blx@bbl@addfield{\blx@tempa}{\NewValue}}%
+  \endgroup}
+
+\protected\def\blx@bbl@verbadd{%
+  \begingroup
+  \let\do\@makeother
+  \dospecials
+  \catcode\endlinechar=12\relax
+  \blx@bbl@verbadd@i}
+
+\begingroup
+\catcode`\<=12
+\catcode`\>=12
+\uccode`\<=`\ %
+\uccode`\>=\endlinechar
+\uppercase{\gdef\blx@bbl@verbadd@i<#1>}{%
+  \endgroup
+  \edef\NewValue{\NewValue\detokenize{#1}}}
+\endgroup
+
+% {<counter>}{<value>}
+
+\protected\long\def\blx@bbl@countdef#1#2{%
+  \csxappto\blx@bbl@data{%
+    \csname c@#1\endcsname#2\relax}}
+
+% {<boolean>}
+
+\protected\def\blx@bbl@booltrue#1{%
+  \csgappto\blx@bbl@data{%
+    \toggletrue{abx@bool@#1}}}
+
+\protected\def\blx@bbl@boolfalse#1{%
+  \csgappto\blx@bbl@data{%
+    \togglefalse{abx@bool@#1}}}
+
+% {<list}{<itemcount>}{<value>}
+
+\protected\def\blx@bbl@listdef#1#2#3{%
+  \def\NewCount{#2}%
+  \def\NewValue{#3}%
+  \ifcsdef{blx@lih@#1}
+    {\csname blx@lih@#1\endcsname{#3}%
+     \ifdefvoid\NewValue}
+    {\@secondoftwo}
+       {}
+       {\csxappto\blx@bbl@data{%
+          \csname c@#1\endcsname\NewCount\relax
+          \def\expandafter\noexpand\csname abx@list@#1\endcsname
+          {\expandonce\NewValue}}}}
+
+
+% {<name>}{<itemcount>}{<value>}
+
+\protected\def\blx@bbl@namedef#1#2#3#4{%
+  \def\NewCount{#2}%
+  \def\NewOption{#3}%
+  \def\NewValue{#4}%
+  \ifcsdef{blx@nih@#1}
+    {\csname blx@nih@#1\endcsname{#4}%
+     \ifdefvoid\NewValue}
+    {\@secondoftwo}
+       {}
+       {\csxappto\blx@bbl@data{%
+          \csname c@#1\endcsname\NewCount\relax
+          \def\expandafter\noexpand\csname abx@name@#1\endcsname
+          {{\expandonce\NewOption}{\expandonce\NewValue}}}}}
+
+% {<entrykey>,...}
+
+\protected\def\blx@bbl@set#1{%
+  \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
+  \csxdef{blx@setp@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}%
+  \begingroup
+  \blx@tempcnta\z@
+  \expandafter\forcsvlist
+  \expandafter\blx@bbl@set@i
+  \expandafter{\detokenize{#1}}%
+  \endgroup}
+
+\def\blx@bbl@set@i#1{%
+  \advance\blx@tempcnta\@ne
+  \csxdef{blx@seti@\the\c@refsection @#1}{\the\blx@tempcnta}}
+
+% {<entrykey>}
+
+\protected\def\blx@bbl@inset#1{%
+  \toggletrue{blx@setonly}%
+  \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
+  \csxdef{blx@setc@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}}
+
+% {<keyword>,...}
+
+\protected\def\blx@bbl@keyw#1{%
+  \iftoggle{blx@skipbib}
+    {}
+    {\forcsvlist{\blx@addkeyword{\abx@field@entrykey}}{#1}%
+     \blx@bbl@fielddef{keywords}{#1}}}
+
+\def\blx@addkeyword#1#2{%
+  \listcsxadd{blx@keyw@\the\c@refsection @\detokenize{#2}}{#1}}
+
+% {<options>}
+
+\protected\long\def\blx@bbl@options#1{%
+  \begingroup
+  \let\blx@tempa\@empty
+  \forcsvlist\blx@bbl@options@i{#1}%
+  \edef\blx@tempa{%
+    \endgroup
+    \ifx\blx@tempa\@empty
+    \else
+      \def\noexpand\abx@field@options{\expandonce\blx@tempa}%
+    \fi}%
+  \blx@tempa}
+
+\long\def\blx@bbl@options@i#1{\blx@bbl@options@ii#1==&}
+
+\long\def\blx@bbl@options@ii#1=#2=#3&{%
+  \ifcsundef{KV@blx@opt@ent@#1}
+    {\blx@warning@noline{%
+       Ignoring undefined option '#1'\MessageBreak
+       at entry '\abx@field@entrykey'}}
+    {\eappto\blx@tempa{%
+       \ifx\blx@tempa\@empty\else,\fi
+       \unexpanded{#1}\ifblank{#2}{}{=\unexpanded{#2}}}}}
+
+% \blx@data@<section>@<entrykey>        data hook
+%                                       key -> data
+% \blx@miss@<section>                   missing entries (blacklist)
+%                                       section -> keys [internal list]
+% \blx@sort@<section>                   all entries, sorted
+%                                       section -> keys [internal list]
+% \blx@sbib@<section>                   all entries in bibliography, sorted
+%                                       section -> keys [internal list]
+% \blx@bsee@<section>                   seen citations, document body
+%                                       section -> keys [internal list]
+% \blx@fsee@<section>                   seen citations, footnotes
+%                                       section -> keys [internal list]
+% \blx@type@<section>@<entrytype>       type hash
+%                                       type -> keys [internal list]
+% \blx@subt@<section>@<entrytype>       subtype hash
+%                                       subtype -> keys [internal list]
+% \blx@segm@<section>@<segment>         segment hash
+%                                       segment -> keys [internal list]
+% \blx@keyw@<section>@<keyword>         keyword hash
+%                                       keyword -> keys [internal list]
+% \blx@losh@<section>                   shorthand hash
+%                                       section -> keys [internal list]
+% \blx@slistsbib@<section>@<sectiontype>@<sectionname> all entries in
+%                                       bibliography of a type sorted
+%                                       in a particular way
+%                                       section -> keys [internal list]
+%                                       sectiontype -> "shorthand" or "entry"
+%                                       sectionname -> sort scheme name
+% \blx@slists@<section>@<sectiontype>@<sectionname> all entries of a type sorted
+%                                       in a particular way
+%                                       section -> keys [internal list]
+%                                       sectiontype -> "shorthand" or "entry"
+%                                       sectionname -> sort scheme name
+% \blx@catg@<category>                  category hash, global
+%                                       category -> keys [internal list]
+% \blx@set@<section>@<entrykey>         parent -> child mapping (dynamic entry sets)
+%                                       key -> key,key,... [csv list]
+% \blx@setp@<section>@<entrykey>        parent -> child mapping (entry sets)
+%                                       key -> key,key,... [csv list]
+% \blx@setc@<section>@<entrykey>        child -> parent mapping (entry sets)
+%                                       key -> key
+% \blx@seti@<section>@<entrykey>        child -> index mapping (entry sets)
+%                                       key -> index
+% \blx@pref@<section>@<entrykey>        pageref hook, temporary
+%                                       key -> pages [internal list]
+
+\def\blx@ifdata#1{%
+  \ifcsdef{blx@data@\the\c@refsection @#1}}
+
+\def\blx@getdata#1{%
+  \csuse{blx@data@\the\c@refsection @#1}%
+  \blx@setcitecounter}
+
+\def\blx@getdata@cite#1{%
+  \ifcsdef{blx@setc@\the\c@refsection @#1}
+    {\expandafter\expandafter\expandafter\blx@getdata
+     \expandafter\expandafter\expandafter{%
+       \csname blx@setc@\the\c@refsection @#1\endcsname}%
+     \blx@ifdata{#1}
+       {\def\abx@field@childentrykey{#1}%
+        \begingroup
+        \blx@getdata{#1}%
+        \edef\blx@tempa{\endgroup
+          \def\noexpand\abx@field@childentrytype{\abx@field@entrytype}}%
+        \blx@tempa}
+       {}}
+    {\blx@getdata{#1}}%
+  \ifcsdef{blx@seti@\the\c@refsection @#1}
+    {\letcs\abx@field@entrysetcount{blx@seti@\the\c@refsection @#1}}
+    {}}
+
+\def\blx@execute{%
+  \blx@imc@thefield{execute}}
+
+\def\blx@setoptions@entry{%
+  \blx@imc@iffieldundef{options}
+    {}
+    {\begingroup
+     \edef\blx@tempa{\endgroup
+       \noexpand\setkeys{blx@opt@ent}{\abx@field@options}}%
+     \blx@tempa
+     \blx@checkoptions@entry}}
+
+\def\blx@setoptions@type#1{%
+  \ifcsdef{blx@opts@type@#1}
+    {\begingroup
+     \edef\blx@tempa{\endgroup
+       \noexpand\setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}%
+     \blx@tempa}
+    {}}
+
+\def\blx@checkoptions@global{}
+\def\blx@checkoptions@type{}
+\def\blx@checkoptions@entry{}
+
+\def\blx@entrysetcount{%
+  \ifdef\abx@field@entrykey
+    {\ifcsdef{blx@seti@\the\c@refsection @\abx@field@entrykey}
+       {\letcs\abx@field@entrysetcount{%
+          blx@seti@\the\c@refsection @\abx@field@entrykey}}
+       {}}
+    {}}
+
+% {<section>}
+
+\def\blx@bbl@refsection#1{%
+  \begingroup
+  \c@refsection#1\relax}
+
+\def\blx@bbl@endrefsection{%
+  \endgroup
+  \csnumgdef{blx@labelnumber@\the\c@refsection}{0}%
+  \iftoggle{blx@reencode}{\blx@reencode}{}}
+
+% {<entrykey>}
+
+\protected\def\blx@bbl@missing#1{%
+  \listcsxadd{blx@miss@\the\c@refsection}{\detokenize{#1}}%
+  \blx@warning@noline{%
+    The following entry could not be found\MessageBreak
+    in the database%
+    \ifnumgreater\c@refsection\z@
+      { (refsection \the\c@refsection)}
+      {}:\MessageBreak
+    \detokenize{#1}\MessageBreak
+    Please verify the spelling and rerun\MessageBreak
+    LaTeX afterwards}}
+
+\protected\def\blx@bbl@keyalias#1#2{%
+  \csgdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}}
+
+% {<entrykey>}{<entrytype>}{<options>}
+
+\protected\def\blx@bbl@entry#1#2#3{%
+  \begingroup
+  \edef\abx@field@entrykey{\detokenize{#1}}%
+  \blx@setoptions@type{#2}%
+  \blx@bbl@options{#3}%
+  \blx@setoptions@entry
+  \edef\blx@bbl@data{blx@data@\the\c@refsection @\abx@field@entrykey}%
+  \csuse\blx@bbl@data
+  \cslet\blx@bbl@data\@empty
+  \blx@bbl@addfield{entrykey}{\abx@field@entrykey}%
+  \blx@bbl@addfield{entrytype}{#2}%
+  \blx@imc@iffieldundef{options}
+    {}
+    {\blx@bbl@fieldedef{options}{\expandonce\abx@field@options}}}
+
+\protected\def\blx@bbl@endentry{%
+  \csuse\blx@bbl@data
+  \ifcsundef{blx@pref@\the\c@refsection @\abx@field@entrykey}
+    {}
+    {\blx@addpageref{\abx@field@entrykey}}%
+  \nottoggle{blx@setonly}
+    {\listcsxadd{blx@slists@\the\c@refsection @entry@\blx@slist@name}{\abx@field@entrykey}}
+    {\toggletrue{blx@skipbib}%
+     \toggletrue{blx@skiplos}%
+     \toggletrue{blx@skiplab}}%
+  \nottoggle{blx@skipbib}
+    {\listcsxadd{blx@slistsbib@\the\c@refsection @entry@\blx@slist@name}{\abx@field@entrykey}%
+     \listcsxadd{blx@type@\the\c@refsection @\abx@field@entrytype}{\abx@field@entrykey}%
+     \ifdef\abx@field@entrysubtype
+       {\listcsxadd{blx@subt@\the\c@refsection @\abx@field@entrysubtype}{\abx@field@entrykey}}
+       {}}
+    {}%
+  \nottoggle{blx@skiplos}
+    {\blx@bbl@shorthand}
+    {}%
+  \nottoggle{blx@skiplab}
+    {\iftoggle{blx@labelnumber}
+       {\blx@bbl@labelnumber}
+       {}%
+     \iftoggle{blx@labelalpha}
+       {\blx@bbl@labelalpha}
+       {}%
+     \iftoggle{blx@labeltitle}
+       {\blx@bbl@labeltitle}
+       {}%
+     \iftoggle{blx@labeltitleyear}
+       {\blx@bbl@labeltitleyear}
+       {}%
+     \iftoggle{blx@labelyear}
+       {\blx@bbl@labelyear}
+       {}%
+     \blx@bbl@prefixnumber}
+    {}%
+  \blx@bbl@titles
+  \blx@bbl@hooks
+  \endgroup}
+
+\def\blx@bbl@shorthand{%
+  \ifundef\abx@field@shorthand
+    {}
+    {\blx@setlabwidth{\shorthandwidth}{%
+       \csuse{abx@ffd@*@shorthandwidth}{\abx@field@shorthand}}}}
+
+\def\blx@bbl@labelnumber{%
+  \ifdefempty\abx@field@localnumber
+    {}
+    {\ifundef\abx@field@shorthand
+       {\ifdef\abx@field@localnumber
+          {}
+          {\csnumgdef{blx@labelnumber@\the\c@refsection}{%
+             \csuse{blx@labelnumber@\the\c@refsection}+1}%
+           \edef\abx@field@localnumber{%
+             \csuse{blx@labelnumber@\the\c@refsection}}}%
+        \blx@bbl@fieldedef{labelnumber}{\abx@field@localnumber}%
+        \iftoggle{blx@skipbib}
+          {}
+          {\blx@setlabwidth{\labelnumberwidth}{%
+             \csuse{abx@ffd@*@labelnumberwidth}{%
+               \ifdef\abx@field@prefixnumber
+                 {\csuse{abx@ffd@*@prefixnumber}{\abx@field@prefixnumber}}
+                 {}%
+               \abx@field@localnumber}}}}
+       {\csgappto\blx@bbl@data{%
+          \let\abx@field@labelnumber\abx@field@shorthand}%
+        \iftoggle{blx@skipbib}
+          {}
+          {\blx@setlabwidth{\labelnumberwidth}{%
+             \csuse{abx@ffd@*@labelnumberwidth}{\abx@field@shorthand}}}}}}
+
+\def\blx@bbl@prefixnumber{%
+  \ifdef\abx@field@prefixnumber
+    {\blx@bbl@fieldedef{prefixnumber}{\abx@field@prefixnumber}}
+    {}}
+
+\def\blx@bbl@labelalpha{%
+   \ifundef\abx@field@labelalpha
+     {}
+     {\ifundef\abx@field@extraalpha
+        {}
+        {\ifnum\abx@field@extraalpha>\c@maxextraalpha
+           \global\c@maxextraalpha\abx@field@extraalpha\relax
+         \fi}%
+      \iftoggle{blx@skipbib}
+        {}
+        {\blx@setlabwidth{\labelalphawidth}{%
+           \csuse{abx@ffd@*@labelalphawidth}{%
+             \ifdef\abx@field@prefixnumber
+               {\csuse{abx@ffd@*@prefixnumber}{\abx@field@prefixnumber}}
+               {}%
+             \csuse{abx@ffd@*@labelalpha}{\abx@field@labelalpha}%
+             \ifundef\abx@field@extraalpha
+               {}
+               {\csuse{abx@ffd@*@extraalpha}{\abx@field@extraalpha}}}}}}}
+
+\def\blx@bbl@labeltitle{%
+  \ifundef\abx@field@extratitle
+    {}
+    {\ifnum\abx@field@extratitle>\c@maxextratitle
+       \global\c@maxextratitle\abx@field@extratitle\relax
+     \fi}}
+
+\def\blx@bbl@labeltitleyear{%
+  \ifundef\abx@field@extratitleyear
+    {}
+    {\ifnum\abx@field@extratitleyear>\c@maxextratitleyear
+       \global\c@maxextratitleyear\abx@field@extratitleyear\relax
+     \fi}}
+
+\def\blx@bbl@labelyear{%
+  \ifundef\abx@field@extrayear
+    {}
+    {\ifnum\abx@field@extrayear>\c@maxextrayear
+       \global\c@maxextrayear\abx@field@extrayear\relax
+     \fi}}
+
+\def\blx@bbl@titles{%
+  \ifundef\abx@field@indextitle
+    {\csgappto\blx@bbl@data{%
+       \let\abx@field@indextitle\abx@field@title}}
+    {}%
+  \ifundef\abx@field@indexsorttitle
+    {\csgappto\blx@bbl@data{%
+       \let\abx@field@indexsorttitle\abx@field@indextitle}}
+    {}}
+
+\def\blx@bbl@hooks{%
+  \ifcsundef{blx@hook@bblitem@*}
+    {\ifcsundef{blx@hook@bblitem@\abx@field@entrytype}
+       {}
+       {\csuse\blx@bbl@data
+        \csuse{blx@hook@bblitem@\abx@field@entrytype}}}
+    {\csuse\blx@bbl@data
+     \csuse{blx@hook@bblitem@*}%
+     \csuse{blx@hook@bblitem@\abx@field@entrytype}}}
+
+\newrobustcmd*{\AtDataInput}[1][*]{\csgappto{blx@hook@bblitem@#1}}
+\@onlypreamble\AtDataInput
+
+\def\blx@setlabwidth#1#2{%
+  \begingroup
+  \settowidth{\@tempdima}{\bibfont#2}%
+  \ifnum\@tempdima>#1%
+    \global#1\@tempdima
+  \fi
+  \endgroup}
+
+\def\blx@bblstart{%
+  \let\preamble\blx@bbl@preamble
+  \let\warn\blx@bbl@thewarn
+  \let\refsection\blx@bbl@refsection
+  \let\endrefsection\blx@bbl@endrefsection
+  \let\entry\blx@bbl@entry
+  \let\endentry\blx@bbl@endentry
+  \let\missing\blx@bbl@missing
+  \let\keyalias\blx@bbl@keyalias
+  \let\sortlist\blx@bbl@slist
+  \let\endsortlist\blx@bbl@endslist
+  \let\set\blx@bbl@set
+  \let\inset\blx@bbl@inset
+  \let\keyw\blx@bbl@keyw
+  \let\name\blx@bbl@namedef
+  \let\list\blx@bbl@listdef
+  \let\field\blx@bbl@fielddef
+  \let\strng\blx@bbl@stringdef
+  \let\count\blx@bbl@countdef
+  \let\true\blx@bbl@booltrue
+  \let\false\blx@bbl@boolfalse
+  \let\verb\blx@bbl@verbdef
+  \let\endverb\blx@bbl@verbend}
+
+\def\blx@bblend{}
+
+% {<instcount>}{<entrykey>}{<refsection>}{<labelnumber>}
+
+\protected\def\blx@aux@number#1#2#3#4{%
+  \blx@bbl@addentryfield{\detokenize{#2}}{#3}{localnumber}{#4}%
+  \ifblank{#4}
+    {}
+    {\csgdef{blx@labelnumber@#3}{#4}%
+     \blx@addchecksum{#1}{#4}}}
+
+\AtEndDocument{%
+  \def\abx@aux@number#1#2#3#4{\blx@addchecksum{#1}{#4}}}
+
+\def\blx@addlabelnumber{%
+  \begingroup
+  \nottoggle{blx@skiplab}
+    {\iftoggle{blx@labelnumber}
+       {\ifundef\abx@field@shorthand
+          {\ifundef\abx@field@localnumber
+             {\iftoggle{blx@omitnumbers}
+                {\let\abx@field@localnumber\@empty}
+                {\csnumgdef{blx@labelnumber@\the\c@refsection}{%
+                   \csuse{blx@labelnumber@\the\c@refsection}+1}%
+                 \edef\abx@field@localnumber{\csuse{blx@labelnumber@\the\c@refsection}}%
+                 \blx@bbl@addentryfield{\abx@field@entrykey}{\the\c@refsection}%
+                   {localnumber}{\abx@field@localnumber}}%
+              \blx@auxwrite\@mainaux{}{%
+                \string\abx@aux@number{\the\c@instcount}{\abx@field@entrykey}%
+                  {\the\c@refsection}{\abx@field@localnumber}}}
+             {}}
+          {}}%
+       {}}
+    {}%
+  \endgroup}
+
+\def\blx@addprefixnumber{%
+  \nottoggle{blx@skiplab}
+    {\ifdef\blx@prefixnumbers
+       {\ifundef\abx@field@shorthand
+          {\edef\abx@field@prefixnumber{\expandonce\blx@prefixnumbers}%
+           \ifundef\abx@field@prefixnumber
+             {\blx@bbl@addentryfield{\abx@field@entrykey}{\the\c@refsection}%
+                {prefixnumber}{\expandonce\abx@field@prefixnumber}}
+             {}%
+           \blx@auxwrite\@mainaux{}{%
+              \string\blx@aux@numprefix{\abx@field@entrykey}%
+                {\the\c@refsection}{\expandonce\abx@field@prefixnumber}}}
+          {}}
+       {}}
+    {}}
+
+% {<entrykey>}{<refsection>}{<numberprefix>}
+
+\protected\def\blx@aux@numprefix#1#2#3{%
+  \blx@bbl@addentryfield{\detokenize{#1}}{#2}{prefixnumber}{#3}}
+
+\def\blx@bbl@slist#1#2{%
+  \begingroup
+  \def\blx@slist@name{#2}%
+  % This macro (\key) will only be called in shorthand lists
+  \def\key##1{\listcsxadd{blx@slistsbib@\the\c@refsection @shorthand@#2}{\detokenize{##1}}}}
+\let\blx@bbl@endslist\endgroup
+
+\def\blx@addpageref#1{%
+  \begingroup
+  \blx@tempcnta\z@
+  \let\blx@tempa\@empty
+  \def\do##1{%
+    \appto\blx@tempa{{##1}}%
+    \advance\blx@tempcnta\@ne}%
+  \dolistcsloop{blx@pref@\the\c@refsection @#1}%
+  \edef\blx@tempa{\endgroup\noexpand\blx@bbl@listdef
+    {pageref}{\the\blx@tempcnta}{\blx@tempa}}%
+  \blx@tempa}
+
+%% Data input
+
+\def\blx@bblinput{%
+  \begingroup
+  \iftoggle{blx@reencode}
+    {\ifdef\inpenc@prehook
+       {\inpenc@prehook{}%
+        \inpenc@posthook{}}
+       {}%
+     \inputencoding\blx@bibencoding}
+    {}%
+  \blx@info@noline{Trying to load bibliographic data..}%
+  \blx@blxinit
+  \blx@bblfile@biber
+  \endgroup
+  \iftoggle{blx@reencode}
+    {\ifdef\@enablequotes
+       {\@enablequotes}
+       {}}
+    {}}
+
+\def\blx@bblfile@biber{%
+  \blx@secinit
+  \begingroup
+  \blx@bblstart
+  \blx@ifsigned{\jobname}{bbl}
+    {\InputIfFileExists{\jobname.bbl}
+       {\blx@info@noline{... file '\jobname.bbl' found}}
+       {\blx@info@noline{... file '\jobname.bbl' not found}%
+        \typeout{No file \jobname.bbl.}}}
+    {}%
+  \blx@bblend
+  \endgroup
+  \csnumgdef{blx@labelnumber@\the\c@refsection}{0}}
+
+\def\blx@reencode{%
+  \begingroup
+  \abx@hook@reencode
+  \let\protect\@unexpandable@protect
+  \def\do##1{\cslet{abx@name@##1}\relax}%
+  \dolistcsloop{blx@biber@datamodel@names}\do{labelname}%
+  \def\do##1{\cslet{abx@list@##1}\relax}%
+  \dolistcsloop{blx@biber@datamodel@lists}\do{pageref}%
+  \def\do##1{\cslet{abx@field@##1}\relax}%
+  \dolistcsloop{blx@biber@datamodel@fields}\do{options}%
+  \abx@dointernalfields
+  \long\def\abx@field@execute##1{%
+    \unexpanded{\abx@field@execute{##1}}}%
+  \csuse{abx@preamble}%
+  \def\do##1{%
+    \csxdef{blx@data@\the\c@refsection @##1}{%
+      \csuse{blx@data@\the\c@refsection @##1}}}%
+  \dolistcsloop{blx@slists@\the\c@refsection @entry@\blx@sorting}%
+  \endgroup}
+
+\def\abx@hook@reencode{%
+  \ifdef\@enablequotes{\@enablequotes}{}%
+  \def\IeC##1{\unexpanded{\IeC{##1}}}%
+  \let~\relax
+}
+
+%% Bibliography
+
+% {<name>}{<start code>}[<end code>]{<item code>}
+
+\newrobustcmd*{\defbibenvironment}[4]{%
+  \long\csdef{blx@env@#1}{#2}%
+  \long\csdef{blx@endenv@#1}{#3}%
+  \long\csdef{blx@item@#1}{#4}}
+
+\defbibenvironment{bibliography}
+  {\list{}{%
+     \leftmargin\bibhang
+     \itemindent-\leftmargin
+     \itemsep\bibitemsep
+     \parsep\bibparsep}}
+  {\endlist}
+  {\item}
+
+\defbibenvironment{shorthands}
+  {\list{\thefield{shorthand}}{%
+     \labelwidth\shorthandwidth
+     \labelsep\biblabelsep
+     \leftmargin\labelwidth
+     \advance\leftmargin\labelsep
+     \itemsep\bibitemsep
+     \parsep\bibparsep
+     \def\makelabel##1{##1\hss}}}
+  {\endlist}
+  {\item}
+
+% {<name>}[<default>]{<code>}
+
+\newrobustcmd*{\defbibheading}[1]{%
+  \@ifnextchar[%]
+    {\blx@defbibheading{blx@head@#1}}
+    {\blx@defbibheading{blx@head@#1}[\bibname]}}
+
+\def\blx@defbibheading#1[#2]{%
+  \csundef{#1}%
+  \expandafter\newcommand\csname#1\endcsname[1][#2]}
+
+% {<name>}{<text>}
+
+\newrobustcmd*{\defbibnote}[1]{%
+  \long\csdef{blx@note@#1}}
+
+% {<name>}{<code>}
+
+\newrobustcmd*{\defbibfilter}[2]{%
+  \begingroup
+  \def\blx@flt@error{\csname blx@flt@errortrue\endcsname}%
+  \let\not\blx@flt@not \let\NOT\not
+  \let\and\blx@flt@and \let\AND\and
+  \let\or\blx@flt@or   \let\OR\or
+  \letcs\({blx@flt@(}  \letcs\){blx@flt@)}%
+  \def\section##1{\blx@flt@error}%
+  \def\segment##1{segment=##1}%
+  \def\type##1{type=##1}%
+  \def\subtype##1{subtype=##1}%
+  \def\keyword##1{keyword={##1}}%
+  \def\category##1{category={##1}}%
+  \edef\blx@tempa{\noexpand\blx@defbibfilter{#2}}%
+  \ifdef\blx@flt@errortrue
+    {\blx@err@filter}
+    {\let\the\relax
+     \let\blx@flt@item\relax
+     \edef\blx@tempa{\blx@tempa}%
+     \ifdef\blx@flt@errortrue
+       {\blx@err@filter}
+       {\csxdef{blx@filter@#1}{\blx@tempa}}}%
+  \endgroup}
+
+\def\blx@defbibfilter#1{%
+  \blx@defbibfilter@i#1 &}
+\def\blx@defbibfilter@i#1 #2&{%
+  \blx@defbibfilter@ii#1==&%
+  \ifblank{#2}{}{\blx@defbibfilter@i#2 &}}
+\def\blx@defbibfilter@ii#1=#2=#3&{%
+  \ifblank{#2}
+    {\ifblank{#1}
+       {}
+       {\ifcsdef{blx@flt@#1}
+          {\csname blx@flt@#1\endcsname}
+          {\blx@flt@error}}}
+    {\ifcsdef{blx@flt@#1}
+       {\csname blx@flt@#1\endcsname{\detokenize{#2}}}
+       {\blx@flt@error}}}
+
+\def\blx@flt@and{ and }
+\def\blx@flt@or{ or }
+\def\blx@flt@not{ not }
+\csdef{blx@flt@(}{ ( }
+\csdef{blx@flt@)}{ ) }
+\def\blx@flt@segment#1{%
+  test {\xifinlistcs\blx@flt@item{blx@segm@\the\c@refsection @#1}}}
+\def\blx@flt@type#1{%
+  test {\xifinlistcs\blx@flt@item{blx@type@\the\c@refsection @#1}}}
+\def\blx@flt@subtype#1{%
+  test {\xifinlistcs\blx@flt@item{blx@subt@\the\c@refsection @#1}}}
+\def\blx@flt@keyword#1{%
+  test {\xifinlistcs\blx@flt@item{blx@keyw@\the\c@refsection @#1}}}
+\def\blx@flt@category#1{%
+  test {\xifinlistcs\blx@flt@item{blx@catg@#1}}}
+
+% {<name>}{<code>}
+
+\newrobustcmd*{\defbibcheck}[2]{%
+  \csdef{blx@bibcheck@#1}{%
+    \togglefalse{blx@skipentry}%
+    \def\skipentry{\toggletrue{blx@skipentry}}%
+    #2\undef\skipentry}}
+
+% options
+% We need a 2-pass structure for options in \printbibliography and
+% \printshorthands because section and/or sorting have to be set before any
+% other options and these also determine which list to use for later filtering
+
+\define@key{blx@bib1}{segment}{}
+\define@key{blx@bib1}{type}{}
+\define@key{blx@bib1}{nottype}{}
+\define@key{blx@bib1}{subtype}{}
+\define@key{blx@bib1}{notsubtype}{}
+\define@key{blx@bib1}{keyword}{}
+\define@key{blx@bib1}{notkeyword}{}
+\define@key{blx@bib1}{category}{}
+\define@key{blx@bib1}{notcategory}{}
+\define@key{blx@bib1}{filter}{}
+\define@key{blx@bib1}{check}{}
+\define@key{blx@bib1}{heading}{}
+\define@key{blx@bib1}{env}{}
+\define@key{blx@bib1}{title}{}
+\define@key{blx@bib1}{prenote}{}
+\define@key{blx@bib1}{postnote}{}
+\define@key{blx@bib1}{resetnumbers}{}
+\define@key{blx@bib1}{omitnumbers}{}
+\define@key{blx@bib1}{prefixnumbers}{}
+
+\define@key{blx@bib2}{section}{}
+\define@key{blx@bib2}{sorting}{}
+
+\define@key{blx@los1}{segment}{}
+\define@key{blx@los1}{type}{}
+\define@key{blx@los1}{nottype}{}
+\define@key{blx@los1}{subtype}{}
+\define@key{blx@los1}{notsubtype}{}
+\define@key{blx@los1}{keyword}{}
+\define@key{blx@los1}{notkeyword}{}
+\define@key{blx@los1}{category}{}
+\define@key{blx@los1}{notcategory}{}
+\define@key{blx@los1}{filter}{}
+\define@key{blx@los1}{check}{}
+\define@key{blx@los1}{heading}{}
+\define@key{blx@los1}{env}{}
+\define@key{blx@los1}{title}{}
+\define@key{blx@los1}{prenote}{}
+\define@key{blx@los1}{postnote}{}
+
+\define@key{blx@los2}{section}{}
+\define@key{blx@los2}{sorting}{}
+
+\define@key{blx@bib1}{sorting}{%
+  \ifcsundef{blx@biber@sorting@#1}
+    {\blx@err@invopt{sorting=#1}{}}%
+    {\blx@printbibchecks
+     \def\blx@tempc{#1}%
+     \edef\blx@tempd{%
+       \blx@xml@sorting{%
+         \csuse{blx@biber@sorting@#1}}}}}
+  
+\define@key{blx@los1}{sorting}{%
+  \ifcsundef{blx@biber@sorting@#1}
+    {\blx@err@invopt{sorting=#1}{}}%
+    {\blx@printbibchecks
+     \def\blx@tempc{#1}%
+     \edef\blx@tempd{%
+       \blx@xml@sorting{%
+         \csuse{blx@biber@sorting@#1}}}}}
+
+\define@key{blx@bib1}{section}{%
+  \ifcsundef{blx@sections@#1}
+    {\blx@err@nosec{#1}}
+    {\c@refsection#1\relax
+     \def\blx@tempe{#1}}}
+
+\define@key{blx@los1}{section}{%
+  \ifcsundef{blx@sections@#1}
+    {\blx@err@nosec{#1}}
+    {\c@refsection#1\relax
+     \def\blx@tempe{#1}}}
+
+\define@key{blx@bbg}{section}{%
+  \ifcsundef{blx@sections@#1}
+    {\blx@err@nosec{#1}}
+    {\c@refsection#1\relax}}
+
+\define@key{blx@bbc}{section}{%
+  \ifcsundef{blx@sections@#1}
+    {\blx@err@nosec{#1}}
+    {\c@refsection#1\relax}}
+
+\define@key{blx@bib2}{segment}{\blx@key@segment{#1}}
+\define@key{blx@los2}{segment}{\blx@key@segment{#1}}
+
+\def\blx@key@segment#1{%
+  \ifcsundef{blx@segm@\the\c@refsection @#1}
+    {\blx@error
+       {Segment '#1' not found in section '\the\c@refsection'}
+       {The reference segment '#1' could not be found in section '\the\c@refsection'}}
+    {\c@refsegment#1\relax
+     \blx@printbibchecks
+     \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}}
+
+\define@key{blx@bib2}{type}{\blx@key@type{#1}}
+\define@key{blx@los2}{type}{\blx@key@type{#1}}
+
+\def\blx@key@type#1{%
+  \ifcsundef{blx@type@\the\c@refsection @#1}
+    {\blx@warning{Type '#1' not found}%
+     \let\blx@tempa\@empty}
+    {\blx@printbibchecks
+     \iftoggle{blx@tempb}
+       {\togglefalse{blx@tempb}%
+        \blx@filter\blx@tempa{blx@type@\the\c@refsection @#1}}
+       {\let\blx@tempa\@empty
+        \blx@error
+          {'type' used multiple times}
+          {When passing multiple filter options, each entry\MessageBreak
+           must satisfy all conditions (AND conjunction),\MessageBreak
+           hence some options may not be used twice.\MessageBreak
+           Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
+
+\define@key{blx@bib2}{nottype}{\blx@key@nottype{#1}}
+\define@key{blx@los2}{nottype}{\blx@key@nottype{#1}}
+
+\def\blx@key@nottype#1{%
+  \ifcsundef{blx@type@\the\c@refsection @#1}
+    {}
+    {\blx@printbibchecks
+     \blx@notfilter\blx@tempa{blx@type@\the\c@refsection @#1}}}
+
+\define@key{blx@bib2}{subtype}{\blx@key@subtype{#1}}
+\define@key{blx@los2}{subtype}{\blx@key@subtype{#1}}
+
+\def\blx@key@subtype#1{%
+  \ifcsundef{blx@subt@\the\c@refsection @#1}
+    {\blx@warning{Subtype '#1' not found}%
+     \let\blx@tempa\@empty}
+    {\blx@printbibchecks
+     \iftoggle{blx@tempb}
+       {\togglefalse{blx@tempb}%
+        \blx@filter\blx@tempa{blx@subt@\the\c@refsection @#1}}
+       {\let\blx@tempa\@empty
+        \blx@error
+          {'subtype' used multiple times}
+          {When passing multiple filter options, each entry\MessageBreak
+           must satisfy all conditions (AND conjunction),\MessageBreak
+           hence some options may not be used twice.\MessageBreak
+           Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
+
+\define@key{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}}
+\define@key{blx@los2}{notsubtype}{\blx@key@notsubtype{#1}}
+
+\def\blx@key@notsubtype#1{%
+  \ifcsundef{blx@subt@\the\c@refsection @#1}
+    {}
+    {\blx@printbibchecks
+     \blx@notfilter\blx@tempa{blx@subt@\the\c@refsection @#1}}}
+
+\define@key{blx@bib2}{keyword}{\blx@key@keyword{#1}}
+\define@key{blx@los2}{keyword}{\blx@key@keyword{#1}}
+
+\def\blx@key@keyword#1{%
+  \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
+    {\blx@warning{Keyword '\detokenize{#1}' not found}%
+     \let\blx@tempa\@empty}
+    {\blx@printbibchecks
+     \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
+
+\define@key{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}}
+\define@key{blx@los2}{notkeyword}{\blx@key@notkeyword{#1}}
+
+\def\blx@key@notkeyword#1{%
+  \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
+    {}
+    {\blx@printbibchecks
+     \blx@notfilter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
+
+\define@key{blx@bib2}{category}{\blx@key@category{#1}}
+\define@key{blx@los2}{category}{\blx@key@category{#1}}
+
+\def\blx@key@category#1{%
+  \ifcsundef{blx@catg@\detokenize{#1}}
+    {\blx@warning{Category '\detokenize{#1}' not found}%
+     \let\blx@tempa\@empty}
+    {\blx@printbibchecks
+     \blx@filter\blx@tempa{blx@catg@\detokenize{#1}}}}
+
+\define@key{blx@bib2}{notcategory}{\blx@key@notcategory{#1}}
+\define@key{blx@los2}{notcategory}{\blx@key@notcategory{#1}}
+
+\def\blx@key@notcategory#1{%
+  \ifcsundef{blx@catg@#1}
+    {}
+    {\blx@printbibchecks
+     \blx@notfilter\blx@tempa{blx@catg@#1}}}
+
+\define@key{blx@bib2}{filter}{\blx@key@filter{#1}}
+\define@key{blx@los2}{filter}{\blx@key@filter{#1}}
+
+\def\blx@key@filter#1{%
+  \ifcsdef{blx@filter@#1}
+    {\blx@printbibchecks
+     \blx@bibfilter\blx@tempa{blx@filter@#1}}
+    {\let\blx@tempa\@empty
+     \blx@error
+       {Filter '#1' not found}
+       {The filter '#1' could not be found.\MessageBreak
+        Use \string\defbibfilter\space to define it}}}
+
+\define@key{blx@bib2}{check}{\blx@key@bibcheck{#1}}
+\define@key{blx@los2}{check}{\blx@key@bibcheck{#1}}
+
+\def\blx@key@bibcheck#1{%
+  \ifcsdef{blx@bibcheck@#1}
+    {\letcs\blx@bibcheck{blx@bibcheck@#1}}
+    {\let\blx@tempa\@empty
+     \blx@error
+       {Check '#1' not found}
+       {The check '#1' could not be found.\MessageBreak
+        Use \string\defbibcheck\space to define it}}}
+
+\define@key{blx@bhd}{heading}{\blx@key@heading{#1}}
+\define@key{blx@bib2}{heading}{\blx@key@heading{#1}}
+\define@key{blx@los2}{heading}{\blx@key@heading{#1}}
+\define@key{blx@bbs}{heading}{\blx@key@heading{#1}}
+\define@key{blx@bbg}{heading}{\blx@key@heading{#1}}
+
+\def\blx@key@heading#1{%
+  \ifcsundef{blx@head@#1}
+     {\blx@error
+        {Heading '#1' not found}
+        {The heading '#1' could not be found.\MessageBreak
+         Use \string\defbibheading\space to define it}}
+     {\def\blx@theheading{#1}}}
+
+\define@key{blx@bib2}{env}{\blx@key@env{#1}}
+\define@key{blx@los2}{env}{\blx@key@env{#1}}
+\define@key{blx@bbs}{env}{\blx@key@env{#1}}
+\define@key{blx@bbg}{env}{\blx@key@env{#1}}
+\define@key{blx@bbc}{env}{\blx@key@env{#1}}
+
+\def\blx@key@env#1{%
+  \ifcsundef{blx@env@#1}
+     {\blx@error
+        {Environment '#1' not found}
+        {The environment '#1' could not be found.\MessageBreak
+         Use \string\defbibenvironment\space to define it}}
+     {\def\blx@theenv{#1}}}
+
+\define@key{blx@bhd}{title}{\def\blx@thetitle{#1}}
+\define@key{blx@bib2}{title}{\def\blx@thetitle{#1}}
+\define@key{blx@los2}{title}{\def\blx@thetitle{#1}}
+
+\define@key{blx@bib2}{prenote}{\blx@key@prenote{#1}}
+\define@key{blx@los2}{prenote}{\blx@key@prenote{#1}}
+\define@key{blx@bbs}{prenote}{\blx@key@prenote{#1}}
+\define@key{blx@bbg}{prenote}{\blx@key@prenote{#1}}
+\define@key{blx@bbc}{prenote}{\blx@key@prenote{#1}}
+\def\blx@key@prenote#1{%
+  \ifcsundef{blx@note@#1}
+     {\blx@error
+        {Note '#1' not found}
+        {The note '#1' could not be found.\MessageBreak
+         Use \string\defbibnote\space to define it}}
+     {\def\blx@theprenote{#1}}}
+
+\define@key{blx@bib2}{postnote}{\blx@key@postnote{#1}}
+\define@key{blx@los2}{postnote}{\blx@key@postnote{#1}}
+\define@key{blx@bbs}{postnote}{\blx@key@postnote{#1}}
+\define@key{blx@bbg}{postnote}{\blx@key@postnote{#1}}
+\define@key{blx@bbc}{postnote}{\blx@key@postnote{#1}}
+
+\def\blx@key@postnote#1{%
+  \ifcsundef{blx@note@#1}
+     {\blx@error
+        {Note '#1' not found}
+        {The note '#1' could not be found.\MessageBreak
+         Use \string\defbibnote\space to define it}}
+     {\def\blx@thepostnote{#1}}}
+
+\define@key{blx@bib2}{resetnumbers}[true]{%
+  \ifstrequal{#1}{true}
+    {\iftoggle{blx@defernumbers}
+       {\csnumdef{blx@labelnumber@\the\c@refsection}{0}}
+       {\blx@warning{%
+          Option 'resetnumbers' requires 'defernumbers=true'.\MessageBreak
+          Ignoring 'resetnumbers=true'}}}
+    {}}
+
+\define@key{blx@bib2}{omitnumbers}[true]{%
+  \ifstrequal{#1}{true}
+    {\iftoggle{blx@defernumbers}
+       {\toggletrue{blx@omitnumbers}}
+       {\blx@warning{%
+          Option 'omitnumbers' requires 'defernumbers=true'.\MessageBreak
+          Ignoring 'omitnumbers=true'}}}
+    {}}
+
+\define@key{blx@bib2}{prefixnumbers}{%
+  \def\blx@prefixnumbers{#1}%
+  \iftoggle{blx@defernumbers}
+    {\csnumdef{blx@labelnumber@\the\c@refsection}{0}}
+    {\iftoggle{blx@labelnumber}
+       {\blx@warning{%
+          Option 'prefixnumbers' requires global\MessageBreak
+          'defernumbers=true'}}
+       {}}}
+
+% [<options>]
+
+\newrobustcmd*{\printbibheading}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \@ifnextchar[%]
+    {\blx@printbibheading}
+    {\blx@printbibheading[]}}
+
+\def\blx@printbibheading[#1]{%
+  \def\blx@theheading{bibliography}%
+  \let\blx@thetitle\@empty
+  \blx@safe@actives
+  \setkeys{blx@bhd}{#1}%
+  \blx@rest@actives
+  \blx@bibheading\blx@theheading\blx@thetitle
+  \endgroup}
+
+% [<options>]
+
+\newrobustcmd*{\printbibliography}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \@ifnextchar[%]
+    {\blx@printbibliography}
+    {\blx@printbibliography[]}}
+
+\def\blx@printbibliography[#1]{%
+  \toggletrue{blx@tempa}%
+  \toggletrue{blx@tempb}%
+  \def\blx@theheading{bibliography}%
+  \def\blx@theenv{bibliography}%
+  \let\blx@theprenote\@empty
+  \let\blx@thepostnote\@empty
+  \let\blx@thetitle\@empty
+  % defaults
+  \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
+  \let\blx@tempc\blx@sorting% sorting scheme name from "sorting" option
+  \edef\blx@tempd{%
+    \blx@xml@sorting{%
+      \csuse{blx@biber@sorting@\blx@sorting}}}% sorting scheme from "sorting" option
+  \edef\blx@tempe{\the\c@refsection}% default refsection is current
+  \blx@safe@actives
+  \setkeys{blx@bib1}{#1}% Set sorting and section only, if present ...
+  \blx@rest@actives
+  \ifcsvoid{blx@slistsbib@\blx@tempe @entry@\blx@tempc}
+    {}
+    {\letcs\blx@tempa{blx@slistsbib@\blx@tempe @entry@\blx@tempc}}%
+    {\ifcsvoid{blx@sbib@\blx@tempe}
+      {}
+      {\letcs\blx@tempa{blx@sbib@\blx@tempe}}}%
+  \blx@safe@actives
+  \setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options
+  \blx@rest@actives
+  \csxappto{blx@xml@slistsbib}{\blx@xml@slist{entry}{\blx@tempe}{\blx@tempc}{\blx@tempd}}%
+  \ifdefvoid\blx@tempa
+    {\blx@warn@bibempty\endgroup}
+    {\blx@bibliography\blx@tempa}}
+
+% [<options>]
+
+\newrobustcmd*{\bibbysection}{%
+  \begingroup
+  \ifnum\blx@maxsection=\z@
+    \blx@warning{No reference sections found}%
+  \fi
+  \edef\on@line{\on@line}%
+  \@ifnextchar[%]
+    {\blx@bibbysection}
+    {\blx@bibbysection[]}}
+
+\def\blx@bibbysection[#1]{%
+  \def\blx@theheading{bibliography}%
+  \def\blx@theenv{bibliography}%
+  \let\blx@theprenote\@empty
+  \let\blx@thepostnote\@empty
+  \let\blx@thetitle\@empty
+  \c@refsection\z@
+  \blx@safe@actives
+  \setkeys{blx@bbs}{#1}%
+  \blx@rest@actives
+  \togglefalse{blx@tempa}%
+  \blx@refsections}
+
+\def\blx@refsections{%
+  \ifcsvoid{blx@slistsbib@\the\c@refsection @entry@\blx@sorting}
+    {}
+    {\toggletrue{blx@tempa}%
+     \begingroup
+     \expandafter\blx@bibliography\csname blx@slistsbib@\the\c@refsection @entry@\blx@sorting\endcsname}%
+  \ifnum\c@refsection<\blx@maxsection
+    \advance\c@refsection\@ne
+    \expandafter\blx@refsections
+  \else
+    \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+    \endgroup
+  \fi}
+
+% [<options>]
+
+\newrobustcmd*{\bibbysegment}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \ifnum\csname blx@maxsegment@\the\c@refsection\endcsname=\z@
+    \blx@warning{No reference segments found}%
+  \fi
+  \@ifnextchar[%]
+    {\blx@bibbysegment}
+    {\blx@bibbysegment[]}}
+
+\def\blx@bibbysegment[#1]{%
+  \def\blx@theheading{bibliography}%
+  \def\blx@theenv{bibliography}%
+  \let\blx@theprenote\@empty
+  \let\blx@thepostnote\@empty
+  \let\blx@thetitle\@empty
+  \c@refsegment\@ne
+  \blx@safe@actives
+  \setkeys{blx@bbg}{#1}%
+  \blx@rest@actives
+  \togglefalse{blx@tempa}%
+  \blx@refsegments}
+
+\def\blx@refsegments{%
+  \ifcsvoid{blx@segm@\the\c@refsection @\the\c@refsegment}
+    {}
+    {\toggletrue{blx@tempa}%
+     \begingroup
+     \let\blx@tempa\@empty
+     \ifcsvoid{blx@slistsbib@\the\c@refsection @entry@\blx@sorting}
+       {}
+       {\letcs\blx@tempa{blx@slistsbib@\the\c@refsection @entry@\blx@sorting}}%
+     \blx@filter\blx@tempa{blx@segm@\the\c@refsection @\the\c@refsegment}%
+     \blx@bibliography\blx@tempa}%
+  \ifnum\c@refsegment<\csname blx@maxsegment@\the\c@refsection\endcsname
+    \advance\c@refsegment\@ne
+    \expandafter\blx@refsegments
+  \else
+    \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+    \endgroup
+  \fi}
+
+% [<options>]
+
+\newrobustcmd*{\bibbycategory}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \ifx\blx@categories\@empty
+    \blx@warning{No categories found}%
+  \fi
+  \@ifnextchar[%]
+    {\blx@bibbycategory}
+    {\blx@bibbycategory[]}}
+
+\def\blx@bibbycategory[#1]{%
+  \def\blx@theheading{bibliography}%
+  \def\blx@theenv{bibliography}%
+  \let\blx@theprenote\@empty
+  \let\blx@thepostnote\@empty
+  \let\blx@thetitle\@empty
+  \c@refsection\z@
+  \blx@safe@actives
+  \setkeys{blx@bbc}{#1}%
+  \blx@rest@actives
+  \togglefalse{blx@tempa}%
+  \forlistloop\blx@bibcategory\blx@categories
+  \blx@endbibcategory}
+
+\def\blx@bibcategory#1{%
+  \ifcsvoid{blx@catg@#1}
+    {}
+    {\toggletrue{blx@tempa}%
+     \begingroup
+     \blx@key@heading{#1}%
+     \let\blx@tempa\@empty
+     \ifcsvoid{blx@slistsbib@\the\c@refsection @entry@\blx@sorting}
+       {}
+       {\letcs\blx@tempa{blx@slistsbib@\the\c@refsection @entry@\blx@sorting}}%
+     \blx@filter\blx@tempa{blx@catg@#1}%
+     \blx@bibliography\blx@tempa}}%
+
+\def\blx@endbibcategory{%
+  \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+  \endgroup}
+
+% {<entrykey>,...}
+
+\def\blx@bibliography{%
+  \blx@bibheading\blx@theheading\blx@thetitle
+  \blx@bibnote\blx@theprenote
+  \begingroup
+  \blx@bibinit
+  \let\@noitemerr\@empty
+  \let\blx@noitem\blx@warn@bibempty
+  \ifnum\bibinitsep=\z@
+    \let\blx@initsep\relax
+  \fi
+  \ifnum\bibnamesep=\z@
+    \let\blx@namesep\relax
+  \fi
+  \csuse{blx@env@\blx@theenv}%
+  \csuse{blx@hook@bibinit}%
+  \let\blx@do\blx@bibitem
+  \let\blx@done\blx@endbibliography
+  \blx@listloop}
+
+\def\blx@endbibliography{%
+  \csuse{blx@endenv@\blx@theenv}%
+  \blx@noitem
+  \endgroup
+  \blx@bibnote\blx@thepostnote
+  \endgroup}
+
+\def\blx@bibheading#1#2{%
+  \begingroup
+  \edef\blx@tempa{\endgroup
+    \noexpand\blx@bibheading@i{\expandonce#1}{\expandonce#2}}%
+  \blx@tempa}
+
+\def\blx@bibheading@i#1#2{%
+  \let\newrefsection\relax
+  \let\newrefsegment\relax
+  \ifblank{#2}
+    {\csuse{blx@head@#1}}
+    {\csuse{blx@head@#1}[#2]}%
+  \let\newrefsection\blx@newrefsection
+  \let\newrefsegment\blx@newrefsegment}
+
+\def\blx@bibnote#1{%
+  \ifdefempty#1
+    {}
+    {\begingroup
+     \let\newrefsection\relax
+     \let\newrefsegment\relax
+     \noindent
+     \csuse{blx@note@#1}\par\nobreak
+     \endgroup}}
+
+\def\blx@bibinit{%
+  \iftoggle{blx@citation}
+    {}
+    {\toggletrue{blx@bibliography}}%
+  \blx@blxinit
+  \blx@resetdata
+  \csuse{blx@hook@bbxinit}%
+  \bibsetup\bibfont
+  \blx@setsfcodes
+  \csuse{blx@bibsetup}}
+
+% {<entrykey>}
+
+\def\blx@bibitem#1{%
+  \blx@ifdata{#1}
+    {\begingroup
+     \blx@getdata{#1}%
+     \blx@bibcheck
+     \iftoggle{blx@skipentry}{}{%
+       \global\let\blx@noitem\@empty
+       \blx@setoptions@type\abx@field@entrytype
+       \blx@setoptions@entry
+       \blx@thelabelnumber
+       \blx@addprefixnumber
+       \addtocounter{instcount}\@ne
+       \csuse{blx@item@\blx@theenv}\relax
+       \blx@initsep
+       \blx@namesep
+       \csuse{blx@hook@bibitem}%
+       \blx@execute
+       \blx@initunit
+       \blx@anchor
+       \blx@beglang
+       \bibsentence
+       \blx@pagetracker
+       \blx@driver\abx@field@entrytype
+       \blx@postpunct
+       \blx@endlang}%
+     \endgroup}
+    {}}
+
+\let\blx@bibcheck\relax
+
+\def\blx@initsep{%
+  \blx@imc@iffieldundef{sortinit}
+    {}
+    {\ifnum\c@instcount>\@ne
+       \blx@imc@iffieldequals{sortinit}\blx@previnit
+         {}
+         {\addvspace{\bibinitsep}}%
+     \fi
+     \global\let\blx@previnit\abx@field@sortinit}}
+
+\def\blx@namesep{%
+  \ifnum\c@instcount>\@ne
+    \blx@imc@iffieldequals{fullhash}\blx@prevhash
+      {}
+      {\addvspace{\bibnamesep}}%
+  \fi
+  \global\let\blx@prevhash\abx@field@fullhash}
+
+\newrobustcmd*{\AtBeginBibliography}{\gappto\blx@hook@bibinit}
+\newrobustcmd*{\AtEveryBibitem}{\gappto\blx@hook@bibitem}
+\@onlypreamble\AtBeginBibliography
+\@onlypreamble\AtEveryBibitem
+
+% page tracker
+
+\def\blx@pagetracker@context{%
+  \blx@leavevmode
+  \ifbool{@filesw}
+    {\ifbool{pagetracker}
+       {\protected@write\@mainaux{}{%
+          \iftoggle{blx@footnote}
+            {\string\abx@aux@fnpage}
+            {\string\abx@aux@page}%
+          {\the\c@instcount}{\noexpand\the\c@page}}}
+       {}}
+    {}}
+
+% {<instcount>}{<page>}
+
+\protected\def\blx@aux@page#1#2{%
+  \csgdef{blx@page@#1}{#2}%
+  \blx@addpagesum{#1}{#2}}
+\protected\def\blx@aux@spread#1#2{%
+  \ifodd#2\relax
+    \csxdef{blx@page@#1}{\number\numexpr#2-1}%
+  \else
+    \csgdef{blx@page@#1}{#2}%
+  \fi
+  \blx@addpagesum{#1}{#2}}
+
+\protected\def\blx@aux@fnpage#1#2{%
+  \csgdef{blx@fnpage@#1}{#2}%
+  \blx@addpagesum{#1}{#2}}
+\protected\def\blx@aux@fnspread#1#2{%
+  \ifodd#2\relax
+    \csxdef{blx@fnpage@#1}{\number\numexpr#2-1}%
+  \else
+    \csgdef{blx@fnpage@#1}{#2}%
+  \fi
+  \blx@addpagesum{#1}{#2}}
+
+\AtEndDocument{%
+  \def\abx@aux@page#1#2{\blx@addpagesum{#1}{#2}}%
+  \def\abx@aux@fnpage#1#2{\blx@addpagesum{#1}{#2}}}
+
+% hyperref interface
+
+\appto\blx@mkhyperref{%
+  \let\blx@anchors\@empty
+  \ifundef\hyper@natanchorstart
+    {\protected\def\blx@anchor{%
+       \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors}
+         {}
+         {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}%
+          \hypertarget{cite.\the\c@refsection @\abx@field@entrykey}{}}}}
+    {\protected\def\blx@anchor{%
+       \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors}
+         {}
+         {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}%
+          \hyper@natanchorstart{\the\c@refsection @\abx@field@entrykey}%
+          \hyper@natanchorend}}}}
+
+\appto\blx@mknohyperref{\let\blx@anchor\relax}
+
+% List of shorthands
+
+\newrobustcmd*{\printshorthands}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \@ifnextchar[%]
+    {\blx@printshorthands}
+    {\blx@printshorthands[]}}
+
+\def\blx@printshorthands[#1]{%
+  \toggletrue{blx@tempa}%
+  \toggletrue{blx@tempb}%
+  \def\blx@theheading{shorthands}%
+  \def\blx@theenv{shorthands}%
+  \let\blx@theprenote\@empty
+  \let\blx@thepostnote\@empty
+  \let\blx@thetitle\@empty
+  % defaults
+  \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
+  \def\blx@tempc{shorthand}% sorting scheme name from "sorting" option
+  \edef\blx@tempd{%
+    \blx@xml@sorting{%
+      \csuse{blx@biber@sorting@shorthand}}}% sorting scheme from "sorting" option
+  \let\blx@printbibchecks\relax
+  \edef\blx@tempe{\the\c@refsection}% default refsection is current
+  \blx@safe@actives
+  \setkeys{blx@los1}{#1}% Set sorting and section only, if present ...
+  \blx@rest@actives
+  \ifcsvoid{blx@slistsbib@\blx@tempe @shorthand@\blx@tempc}
+    {}
+    {\letcs\blx@tempa{blx@slistsbib@\blx@tempe @shorthand@\blx@tempc}}%
+  \blx@safe@actives
+  \setkeys{blx@los2}{#1}% ... now we have correct \blx@tempa, set rest of options
+  \blx@rest@actives
+  \csxappto{blx@xml@slistsbib}{\blx@xml@slistlos{shorthand}{\blx@tempe}{\blx@tempc}{\blx@tempd}}%
+  \ifdefvoid\blx@tempa
+    {\blx@warn@losempty\endgroup}
+    {\blx@shorthands\blx@tempa}}
+
+\def\blx@printbibchecks{%
+  \togglefalse{blx@tempa}%
+  \iftoggle{blx@defernumbers}
+    {\global\let\blx@printbibchecks\relax}
+    {\iftoggle{blx@labelnumber}
+       {\blx@warning@noline{Setting 'defernumbers=true' recommended}}
+       {\global\let\blx@printbibchecks\relax}}}
+
+% {<entrykey>,...}
+
+\def\blx@shorthands{%
+  \if@twocolumn
+    \@restonecoltrue\onecolumn
+  \else
+    \@restonecolfalse
+  \fi
+  \blx@bibheading\blx@theheading\blx@thetitle
+  \blx@bibnote\blx@theprenote
+  \begingroup
+  \blx@bibinit
+  \let\@noitemerr\@empty
+  \let\blx@noitem\blx@warn@losempty
+  \csuse{blx@env@\blx@theenv}%
+  \csuse{blx@hook@losinit}%
+  \let\blx@do\blx@lositem
+  \let\blx@done\blx@endshorthands
+  \blx@listloop}
+
+\def\blx@endshorthands{%
+  \csuse{blx@endenv@\blx@theenv}%
+  \blx@noitem
+  \endgroup
+  \blx@bibnote\blx@thepostnote
+  \endgroup
+  \if@restonecol\twocolumn\fi}
+
+\newrobustcmd*{\AtBeginShorthands}{\gappto\blx@hook@losinit}
+\newrobustcmd*{\AtEveryLositem}{\gappto\blx@hook@lositem}
+\@onlypreamble\AtBeginShorthands
+\@onlypreamble\AtEveryLositem
+
+% {<entrykey>}
+
+\def\blx@lositem#1{%
+  \blx@ifdata{#1}
+    {\begingroup
+     \blx@getdata{#1}%
+     \blx@bibcheck
+     \iftoggle{blx@skipentry}{}{%
+       \global\let\blx@noitem\@empty
+       \blx@setoptions@type\abx@field@entrytype
+       \blx@setoptions@entry
+       \addtocounter{instcount}\@ne
+       \csuse{blx@item@\blx@theenv}\relax
+       \csuse{blx@hook@lositem}%
+       \blx@execute
+       \blx@initunit
+       \blx@beglang
+       \bibsentence
+       \blx@pagetracker
+       \blx@driver{shorthands}%
+       \blx@postpunct
+       \blx@endlang}%
+     \endgroup}
+    {}}
+
+\DeclareBibliographyDriver{shorthands}{%
+  \iffieldundef{shorttitle}
+    {\printfield{title}}
+    {\printfield{shorttitle}}}
+
+% Reference sections
+
+\newrobustcmd*{\newrefsection}{%
+  \ifnum\c@refsection>\z@
+    \endrefsection
+  \fi
+  \refsection}
+\let\blx@newrefsection\newrefsection
+
+\newrobustcmd*{\refsection}{%
+  \begingroup
+  \edef\on@line{\on@line}%
+  \ifnum\c@refsection>\z@
+    \blx@err@nestenv{refsection}%
+    \blx@endrefsection
+  \fi
+  \ifnum\c@refsegment>\z@
+    \blx@err@nestenv{refsection}%
+    \blx@endrefsegment
+  \fi
+  \@ifnextchar[%]
+    {\blx@refsection}
+    {\blx@refsection[]}}
+
+\def\blx@refsection{%
+  \begingroup
+  \blx@hook@fileverb
+  \blx@refsection@i}
+
+\def\blx@refsection@i[#1]{%
+  \endgroup
+  \global\advance\blx@maxsection\@ne
+  \global\c@refsection\blx@maxsection
+  \expandafter\newcount\csname blx@maxsegment@\the\c@refsection\endcsname
+  \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname
+  \blx@inf@refsec
+  \blx@secinit
+  \if@filesw
+    \blx@auxwrite\@mainaux{}{%
+      \string\abx@aux@refsection{\the\c@refsection}{\the\c@page}}%
+    \ifblank{#1}
+      {}
+      {\let\blx@bibfiles\@empty
+       \blx@xsanitizeafter{\forcsvlist\blx@refsection@addfile}{#1}%
+       \forlistloop{\listadd\blx@bibfiles}\blx@bibfiles@global}%
+    \blx@refsection@biber
+  \fi
+  \blx@info{Setting label 'refsection:\the\c@refsection'}%
+  \label{refsection:\the\c@refsection}%
+  \endgroup}
+
+\def\blx@refsection@addfile#1{%
+  \ifcsdef{blx@res@labl@#1}
+    {\blx@refsection@addfile@i{\csuse{blx@res@labl@#1}}}
+    {\blx@refsection@addfile@i{#1}}}
+
+\def\blx@refsection@addfile@i#1{%
+  \ifcsdef{blx@res@loca@#1}
+    {\listeadd\blx@bibfiles{#1}}
+    {\listeadd\blx@bibfiles{\blx@stripbib{#1}\detokenize{.bib}}}}
+
+\def\blx@refsection@biber{%
+  \blx@regbibfiles\jobname\blx@bibfiles
+  \begingroup
+  \let\blx@tempa\@empty
+  \blx@bibdata\blx@tempa\blx@bibfiles
+  \blx@auxwrite\blx@bcfout
+    {\let\do\blx@datasource}
+    {\blx@xml@endsection\blx@nl
+     \blx@xml@comment{SECTION \the\c@refsection}%
+     \blx@xml@bibdata{\the\c@refsection}{\blx@tempa}%
+     \blx@xml@section{\the\c@refsection}}%
+  \endgroup}
+
+\protected\def\endrefsection{%
+  \blx@endrefsection
+  \blx@inf@refsec}
+
+\def\blx@endrefsection{%
+  \blx@endrefsegment
+  \blx@endrefsection@biber
+  \global\c@refsection\z@}
+
+\def\blx@endrefsection@biber{%
+  \ifnum\c@refsection>\z@
+    \blx@auxwrite\blx@bcfout{}{%
+      \blx@xml@endsection\blx@nl
+      \blx@xml@comment{SECTION 0 (cont.)}%
+      \blx@xml@section{0}}%
+  \fi}
+
+\AtEndDocument{%
+  \blx@endrefsection
+  \def\abx@aux@refsection#1#2{\blx@addchecksum{#1}{#2}}}
+
+\protected\def\abx@aux@refsection#1#2{%
+  \ifnum#1>\blx@maxsection
+    \global\blx@maxsection#1\relax
+  \fi
+  \blx@addchecksum{#1}{#2}}
+
+% Reference segments
+
+\newrobustcmd*{\newrefsegment}{%
+  \ifnum\c@refsegment>\z@
+    \blx@endrefsegment
+  \fi
+  \refsegment}
+\let\blx@newrefsegment\newrefsegment
+
+\newrobustcmd*{\refsegment}{%
+  \ifnum\c@refsegment>\z@
+    \blx@err@nestenv{refsegment}%
+    \blx@endrefsegment
+  \fi
+  \global\advance\csname blx@maxsegment@\the\c@refsection\endcsname\@ne
+  \global\c@refsegment\csname blx@maxsegment@\the\c@refsection\endcsname
+  \blx@inf@refseg
+  \blx@info{Setting label 'refsegment:\the\c@refsection\the\c@refsegment'}%
+  \label{refsegment:\the\c@refsection\the\c@refsegment}%
+  \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
+    {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
+    {}}
+
+\protected\def\endrefsegment{%
+  \blx@endrefsegment
+  \blx@inf@refseg}
+
+\def\blx@endrefsegment{%
+  \global\c@refsegment\z@}
+
+% Reference section/segment auto-reset
+% we are prepending to the commands so that the resets happen before
+% the part title is typeset otherwise \cites in there could be "ibid"
+% which makes no sense
+\def\blx@refpatch@part#1{%
+    \ifundef\part
+      {\blx@err@nodocdiv{part}}
+      {\toggletrue{blx@tempa}%
+       \def\do##1{%
+         \pretocmd##1{#1}
+           {\togglefalse{blx@tempa}\listbreak}
+           {}}%
+       \docsvlist{%
+         \H@old@part,%    hyperref
+         \NR@part,%       nameref
+         \@part}%         latex/koma-script/memoir
+       \iftoggle{blx@tempa}
+         {\blx@err@patch{\string\@part}}
+         {}%
+       \let\do\noexpand}}
+
+\def\blx@refpatch@chapter#1{%
+  \ifundef\chapter
+    {\blx@err@nodocdiv{chapter}}
+    {\pretocmd\@makechapterhead{#1}
+       {}
+       {\blx@err@patch{\string\@makechapterhead}}}}
+
+\def\blx@refpatch@sect#1{%
+  \ifcsundef{#1}
+    {\blx@err@nodocdiv{#1}\@gobbletwo}
+    {\blx@refpatch@sect@i}}
+
+\edef\blx@refpatch@sect@i#1#2{%
+  \def\noexpand\do##1{%
+     \pretocmd##1%
+       {\noexpand\blx@refpatch@sect@ii{#1}{#2}{\string#2}}
+      {\togglefalse{blx@tempa}\noexpand\listbreak}
+      {}}%
+  \noexpand\blx@refpatch@sect@iii}
+
+\def\blx@refpatch@sect@ii#1#2#3{%
+  \ifnumequal{#2}{#3}{#1}{}}
+
+\def\blx@refpatch@sect@iii{%
+  \toggletrue{blx@tempa}%
+  \docsvlist{%       order does matter:
+    \H@old@sectm@m,% memoir+hyperref (what a mess...)
+    \M@sect,%        memoir
+    \H@old@sect,%    hyperref
+    \NR@sect,%       nameref
+    \scr@sect,%      koma-script 3.x
+    \@sect}%         latex
+  \iftoggle{blx@tempa}
+    {\blx@err@patch{\string\@sect}}
+    {}%
+  \let\do\noexpand}
+
+% Bibliography categories
+
+\let\blx@categories\@empty
+
+% {<category>}
+
+\newrobustcmd*{\DeclareBibliographyCategory}[1]{%
+  \ifcsundef{blx@catg@#1}
+    {\global\cslet{blx@catg@#1}\@empty
+     \listgadd\blx@categories{#1}}
+    {\blx@error
+       {Category '#1' already declared}
+       {The bibliography category '#1'\MessageBreak
+        has already been declared}}}
+\@onlypreamble\DeclareBibliographyCategory
+
+% {<category>}{<entrykey>,...}
+
+\newrobustcmd*{\addtocategory}[2]{%
+  \ifcsundef{blx@catg@#1}
+    {\blx@error
+       {Category '#1' not declared}
+       {Use \string\DeclareBibliographyCategory\space to declare}}
+    {\AfterPreamble{%
+       \blx@xsanitizeafter{\forcsvlist{\blx@addtocategory{#1}}}{#2}}}}
+
+% {<category>}{<entrykey>,...}
+
+\def\blx@addtocategory#1#2{%
+  \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}%
+  \abx@aux@category{#1}{#2}}
+
+% {<category>}{<entrykey>,...}
+
+\protected\def\abx@aux@category#1#2{%
+  \xifinlistcs{\detokenize{#2}}{blx@catg@#1}
+    {}
+    {\listcsxadd{blx@catg@#1}{\detokenize{#2}}}}
+
+\AtEndDocument{\let\abx@aux@category\@gobbletwo}
+
+% [<options>]{<resource>,...}
+
+\renewrobustcmd*{\bibliography}[1]{%
+  \begingroup
+  \def\blx@tempa{file}%
+  \def\blx@tempb{bibtex}%
+  \def\blx@tempc{local}%
+  \blx@xsanitizeafter{\forcsvlist\blx@addbib@legacy}{#1}%
+  \endgroup}
+\@onlypreamble\bibliography
+
+\def\blx@addbib@legacy#1{%
+  \begingroup
+  \edef\blx@tempa{\endgroup
+    \noexpand\blx@addbib@resource{\blx@stripbib{#1}\detokenize{.bib}}}%
+  \blx@tempa}
+
+\def\blx@stripbib#1{%
+  \expandafter\blx@stripbib@i\detokenize{#1.bib}&}
+\edef\blx@stripbib@i{%
+  \def\noexpand\blx@stripbib@i##1\detokenize{.bib}##2&}
+\blx@stripbib@i{#1}
+
+% [<options>]{<resource>,...}
+
+\newrobustcmd*{\addbibresource}{%
+  \blx@addbib\blx@addbib@resource}
+\@onlypreamble\addbibresource
+
+\newrobustcmd*{\addglobalbib}{%
+  \blx@addbib\blx@addbib@global}
+\@onlypreamble\addglobalbib
+
+\newrobustcmd*{\addsectionbib}{%
+  \blx@addbib\blx@addbib@register}
+\@onlypreamble\addsectionbib
+
+\def\blx@addbib#1{%
+  \@ifnextchar[%]
+    {\blx@addbib@i{#1}}
+    {\blx@addbib@i{#1}[]}}
+
+\def\blx@addbib@i#1[#2]{%
+  \begingroup
+  \blx@hook@fileverb
+  \blx@addbib@ii{#1}{#2}}
+
+\def\blx@addbib@ii#1#2#3{%
+  \endgroup
+  \begingroup
+  \def\blx@tempa{file}%
+  \def\blx@tempb{bibtex}%
+  \def\blx@tempc{local}%
+  \undef\blx@tempd
+  \setkeys{blx@addbib}{#2}%
+  \blx@xsanitizeafter{#1}{#3}%
+  \endgroup}
+
+\def\blx@hook@fileverb{%
+  \let\do\@makeother
+  \dospecials
+  \catcode`\\=\z@
+  \catcode`\{=\@ne
+  \catcode`\}=\tw@}
+
+\define@key{blx@addbib}{type}{\def\blx@tempa{#1}}
+\define@key{blx@addbib}{datatype}{\def\blx@tempb{#1}}
+\define@key{blx@addbib}{location}{\def\blx@tempc{#1}}
+\define@key{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}}
+
+% \blx@res@type@<resource>      resource -> type
+% \blx@res@data@<resource>      resource -> datatype
+% \blx@res@loca@<resource>      resource -> datatype
+% \blx@res@labl@<resource>      label    -> resource
+
+\def\blx@addbib@register#1{%
+  \csxdef{blx@res@type@#1}{\blx@tempa}%
+  \csxdef{blx@res@data@#1}{\blx@tempb}%
+  \csxdef{blx@res@loca@#1}{\blx@tempc}%
+  \ifdef\blx@tempd
+    {\csxdef{blx@res@labl@\blx@tempd}{#1}}
+    {}}
+
+\def\blx@addbib@resource#1{%
+  \blx@addbib@register{#1}%
+  \listgadd\blx@bibfiles{#1}%
+  \blx@regbibfile\jobname{#1}}
+
+\def\blx@addbib@global#1{%
+  \blx@addbib@resource{#1}%
+  \listgadd\blx@bibfiles@global{#1}}
+
+\let\blx@bibfiles\@empty
+\let\blx@bibfiles@global\@empty
+
+\def\blx@bibdata#1#2{%
+  \forlistloop{\blx@bibdata@i{#1}}#2}
+\def\blx@bibdata@i#1#2{%
+  \blx@xmlsanitizeafter{\blx@bibdata@ii{#1}{#2}}{#2}}
+\def\blx@bibdata@ii#1#2#3{%
+  \eappto#1{%
+    \blx@xml@datasource
+      {\ifcsdef{blx@res@type@#2}
+         {\csuse{blx@res@type@#2}}
+         {file}}
+      {\ifcsdef{blx@res@data@#2}
+        {\csuse{blx@res@data@#2}}
+        {bibtex}}
+      {#3}}}
+
+%% Citations
+
+\newrobustcmd*{\AtEveryCite}{\gappto\blx@hook@cite}
+\newrobustcmd*{\AtEveryCitekey}{\gappto\blx@hook@citekey}
+\@onlypreamble\AtEveryCite
+\@onlypreamble\AtEveryCitekey
+
+\newrobustcmd*{\AtNextCite}{%
+  \ifundef\blx@hook@cite@next
+    {\gdef\blx@hook@cite@next{\global\undef\blx@hook@cite@next}}
+    {}%
+  \gappto\blx@hook@cite@next}
+
+\newrobustcmd*{\AtNextCitekey}{%
+  \ifundef\blx@hook@citekey@next
+    {\gdef\blx@hook@citekey@next{\global\undef\blx@hook@citekey@next}}
+    {}%
+  \gappto\blx@hook@citekey@next}
+
+% {<style>]
+
+\newrobustcmd*{\RequireCitationStyle}[1]{%
+  \blx@inputonce{#1.cbx}{citation style '#1'}{}{}{}
+    {\blx@error
+       {Style '#1' not found}
+       {The citation style '#1' could not be found}}}
+\@onlypreamble\RequireCitationStyle
+
+% {<code>}
+
+\newrobustcmd*{\InitializeCitationStyle}{\appto\blx@hook@cbxinit}
+\@onlypreamble\InitializeCitationStyle
+
+% {<code>}
+
+\newrobustcmd*{\OnManualCitation}{\appto\blx@hook@mancite}
+\@onlypreamble\OnManualCitation
+
+\newrobustcmd*{\mancite}{%
+  \csuse{blx@hook@mancite}%
+  \blx@ibidreset
+  \blx@idemreset
+  \blx@opcitreset
+  \blx@loccitreset}
+
+% {<entrykey>}{<message>}
+
+\def\blx@citation#1#2{%
+  \ifbool{citerequest}
+    {\blx@citation@entry{#1}{#2}}
+    {}}
+
+\def\blx@citation@entry#1#2{%
+  \blx@bibreq{#1}%
+  \ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment}
+    {}
+    {\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}%
+  \blx@ifdata{#1}
+    {}
+    {\ifcsdef{blx@miss@\the\c@refsection}
+       {\ifinlistcs{#1}{blx@miss@\the\c@refsection}
+          {}
+          {\blx@logreq@active{#2{#1}}}}
+       {\blx@logreq@active{#2{#1}}}}}
+
+\def\blx@citation@set#1#2{%
+  \blx@citation@entry{#1}{#2}%
+  \begingroup
+  \def\do##1{\blx@citation@entry{##1}\blx@msg@cundef}%
+  \expandafter\expandafter\expandafter\docsvlist
+  \expandafter\expandafter\expandafter{%
+    \csname blx@setp@\the\c@refsection @#1\endcsname}%
+  \endgroup}
+
+\def\blx@citation@inset#1#2{%
+  \blx@citation@entry{#1}{#2}%
+  \expandafter\expandafter\expandafter\blx@citation@inset@i
+  \expandafter\expandafter\expandafter{%
+    \csname blx@setc@\the\c@refsection @#1\endcsname}\blx@msg@cundef}
+
+\def\blx@citation@inset@i#1{%
+  \ifcsdef{blx@setp@\the\c@refsection @#1}
+    {\blx@citation@set{#1}}
+    {\blx@citation@entry{#1}}}
+
+\def\blx@citation@all{%
+  \ifbool{citerequest}
+    {\blx@bibreq{*}%
+     \global\csletcs
+       {blx@segm@\the\c@refsection @\the\c@refsegment}
+       {blx@slists@\the\c@refsection @entry@\blx@sorting}%
+      \ifcsvoid{blx@slists@\the\c@refsection @entry@\blx@sorting}
+       {\blx@logreq@active{}}
+       {}}
+    {}}
+
+\protected\def\blx@bibreq#1{%
+  \begingroup
+  \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
+  % citeall is always order "0" - this make no real difference as biber
+  % ignores all other citekeys in the section if citeall is present
+  \ifstrequal{*}{#1}
+    {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{0}}}
+    {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}%
+  \endgroup}
+
+% {<set>}{<key1,key2,key3>}
+
+\newrobustcmd*{\defbibentryset}[2]{%
+  \@bsphack
+  \begingroup
+  \blx@xsanitizeafter{\def\blx@tempa}{#1}%
+  \let\blx@tempb\@empty
+  \let\blx@tempc\@empty
+  \blx@xsanitizeafter{\forcsvlist\blx@defentryset@add}{#2}%
+  \ifcsdef{blx@set@\the\c@refsection @\blx@tempa}
+    {\expandafter\ifdefequal
+       \csname blx@set@\the\c@refsection @\blx@tempa\endcsname
+       \blx@tempb
+       {}
+       {\blx@error
+          {Conflicting definitions of '\blx@tempa'}
+          {The entry set '\blx@tempa' been defined before.\MessageBreak 
+           old: \blx@tempa\space = %
+           \csuse{blx@set@\the\c@refsection @\blx@tempa}\MessageBreak
+           new: \blx@tempa\space = \blx@tempb\MessageBreak
+           I'm ignoring the new definition}}}
+    {\global\cslet{blx@set@\the\c@refsection @\blx@tempa}\blx@tempb
+     \edef\blx@tempa{%
+       \AfterPreamble{\blx@setreq{\blx@tempa}{\blx@tempb}}}%
+     \blx@tempa}%
+  \endgroup
+  \@esphack}
+
+\def\blx@defentryset@add#1{%
+  \edef\blx@tempb{\blx@tempb\blx@tempc#1}%
+  \def\blx@tempc{,}}
+
+\protected\def\blx@setreq#1#2{%
+  \begingroup
+  \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
+  \blx@xmlsanitizeafter{\def\blx@tempb}{#2}%
+  \blx@auxwrite\blx@bcfout{}{\blx@xml@citeset{\blx@tempa}{\blx@tempb}}%
+  \endgroup}
+
+% {<entrykey>,...}
+
+\protected\def\blx@citeloop#1{%
+  \begingroup
+  \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
+  \blx@tempcnta\z@
+  \blx@tempcntb\z@
+  \let\blx@tempa\@empty
+  \forcsvlist\blx@citeadd{#1}%
+  \blx@thenotecheck
+  \ifnum\blx@tempcnta>\z@
+    \ifnum\blx@tempcntb>\z@
+      \multicitedelim
+    \fi
+  \fi
+  \letcs\blx@tempb{blx@slists@\the\c@refsection @entry@\blx@sorting}%
+  \blx@thecitesort
+  \edef\blx@tempa{\endgroup
+    \c@citecount\z@
+    \c@citetotal\the\blx@tempcnta\relax
+    \unexpanded{\forlistloop\blx@citeprint}{\blx@tempb}}%
+  \blx@tempa}
+
+\def\blx@notecheck{%
+  \ifnum\blx@tempcnta>\@ne
+    \blx@warning{%
+      Package option 'sortcites' enabled.\MessageBreak
+      Verify postnote placement}%
+  \fi}
+
+\def\blx@citesort{%
+  \ifnum\blx@tempcnta>\@ne
+    \blx@filtercitesort\blx@tempb{blx@tempa}%
+  \else
+    \blx@citenosort
+  \fi}
+
+\def\blx@citenosort{%
+  \let\blx@tempb\blx@tempa}
+
+% {<entrykey>}
+
+\def\blx@citeadd#1{%
+  \ifcsdef{blx@keyalias@\the\c@refsection @#1}
+    {\edef\blx@realkey{\csuse{blx@keyalias@\the\c@refsection @#1}}}
+    {\def\blx@realkey{#1}}%
+  \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon
+  \expandafter\blx@ifdata\expandafter{\blx@realkey}
+    {\advance\blx@tempcnta\@ne
+     \listeadd\blx@tempa{\blx@realkey}}
+    {\ifnum\blx@tempcntb>\z@\multicitedelim\fi
+     \expandafter\abx@missing\expandafter{\blx@realkey}
+     \advance\blx@tempcntb\@ne}}
+
+% {<entrykey>}
+
+\protected\def\blx@citeprint#1{%
+  \advance\c@citecount\@ne
+  \addtocounter{instcount}\@ne
+  \ifnum\c@citecount=\@ne
+    \blx@getdata@cite{#1}%
+    \blx@precode
+    \ifnum\c@citetotal>\@ne
+      \blx@resetdata
+    \fi
+  \else
+    \blx@dlimcode
+  \fi
+  \begingroup
+  \ifnum\c@citetotal>\@ne
+    \blx@getdata@cite{#1}%
+  \fi
+  \blx@entrysetcount
+  \blx@setoptions@type\abx@field@entrytype
+  \blx@setoptions@entry
+  \blx@backref{#1}%
+  \blx@pagetracker
+  \csuse{blx@hook@citekey}%
+  \csuse{blx@hook@citekey@next}%
+  \blx@execute
+  \blx@loopcode
+  \blx@citecounter
+  \blx@citetracker
+  \blx@ibidtracker
+  \blx@idemtracker
+  \blx@opcittracker
+  \blx@loccittracker
+  \ifnum\c@citecount=\c@citetotal
+    \def\blx@thecheckpunct{\blx@err@nestcite\@gobble}%
+    \blx@postcode
+  \fi
+  \endgroup}
+
+% cite counter
+
+\def\blx@citecounter@global{%
+  \ifbool{@filesw}
+    {\ifbool{citetracker}
+       {\immediate\write\@mainaux{%
+          \string\abx@aux@count
+          {\the\c@refsection}{\abx@field@entrykey}}}
+       {}}
+    {}}
+
+\def\blx@citecounter@context{%
+  \ifbool{@filesw}
+    {\ifbool{citetracker}
+       {\immediate\write\@mainaux{%
+          \iftoggle{blx@footnote}
+            {\string\abx@aux@fncount}
+            {\string\abx@aux@count}%
+          {\the\c@refsection}{\abx@field@entrykey}}}
+       {}}
+    {}}
+
+% {<refsection>}{<entrykey>}
+
+\protected\def\blx@aux@count#1#2{%
+  \csnumgdef{blx@count@#1@\detokenize{#2}}{\csuse{blx@count@#1@\detokenize{#2}}+1}}
+\protected\def\blx@aux@fncount#1#2{%
+  \csnumgdef{blx@fncount@#1@\detokenize{#2}}{\csuse{blx@fncount@#1@\detokenize{#2}}+1}}
+
+\let\abx@aux@count\@gobbletwo
+\let\abx@aux@fncount\@gobbletwo
+
+\AtEndDocument{%
+  \let\abx@aux@count\@gobbletwo
+  \let\abx@aux@fncount\@gobbletwo}
+
+\protected\def\blx@setcitecounter@global{%
+  \c@citecounter0%
+  \csuse{blx@count@\the\c@refsection @\abx@field@entrykey}%
+  \relax}
+
+\protected\def\blx@setcitecounter@context{%
+  \c@citecounter0%
+  \iftoggle{blx@footnote}
+    {\csuse{blx@fncount@\the\c@refsection @\abx@field@entrykey}}
+    {\csuse{blx@count@\the\c@refsection @\abx@field@entrykey}}%
+  \relax}
+
+% cite tracker
+
+\def\blx@citetracker@global{%
+  \ifbool{citetracker}
+    {\xifinlistcs\abx@field@entrykey{blx@bsee@\the\c@refsection}
+       {}
+       {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}}
+    {}}
+
+\def\blx@citetracker@context{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\xifinlistcs\abx@field@entrykey{blx@fsee@\the\c@refsection}
+          {}
+          {\listcsxadd{blx@fsee@\the\c@refsection}\abx@field@entrykey}}
+       {\xifinlistcs{\abx@field@entrykey}{blx@bsee@\the\c@refsection}
+          {}
+          {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}}}
+    {}}
+
+\protected\appto\abx@savetrackers{%
+  \global\csletcs{blx@saved@bsee@\the\c@refsection}{blx@bsee@\the\c@refsection}%
+  \global\csletcs{blx@saved@fsee@\the\c@refsection}{blx@fsee@\the\c@refsection}}
+
+\protected\appto\abx@resttrackers{%
+  \global\csletcs{blx@bsee@\the\c@refsection}{blx@saved@bsee@\the\c@refsection}%
+  \global\csletcs{blx@fsee@\the\c@refsection}{blx@saved@fsee@\the\c@refsection}}
+
+\protected\appto\abx@cleartrackers{%
+  \global\cslet{blx@saved@bsee@\the\c@refsection}\@empty
+  \global\cslet{blx@saved@fsee@\the\c@refsection}\@empty}
+
+% ibidem tracker
+
+\def\blx@ibidtracker@gobal{%
+  \ifbool{citetracker}
+    {\global\let\blx@lastkey@text\abx@field@entrykey}
+    {}}
+
+\def\blx@ibidtracker@context{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\global\let\blx@lastkey@foot\abx@field@entrykey}
+       {\global\let\blx@lastkey@text\abx@field@entrykey}}
+    {}}
+
+\def\blx@ibidtracker@strict{%
+  \blx@ifcitesingle
+    {\blx@ibidtracker@gobal}
+    {\blx@ibidreset@gobal}}%
+
+\def\blx@ibidtracker@constrict{%
+  \blx@ifcitesingle
+    {\blx@mpfnsave
+     \blx@ibidtracker@context}
+    {\blx@ibidreset@context}}%
+
+\def\blx@ibidreset@force{%
+  \global\undef\blx@lastkey@text
+  \global\undef\blx@lastkey@foot
+  \blx@mpfnreset}
+
+\def\blx@ibidreset@gobal{%
+  \global\undef\blx@lastkey@text}
+
+\def\blx@ibidreset@context{%
+  \iftoggle{blx@footnote}
+    {\blx@mpfnreset
+     \global\undef\blx@lastkey@foot}
+    {\global\undef\blx@lastkey@text}}
+
+\protected\appto\abx@savetrackers{%
+  \global\let\blx@saved@lastkey@text\blx@lastkey@text
+  \global\let\blx@saved@lastkey@foot\blx@lastkey@foot}
+
+\protected\appto\abx@resttrackers{%
+  \global\let\blx@lastkey@text\blx@saved@lastkey@text
+  \global\let\blx@lastkey@foot\blx@saved@lastkey@foot}
+
+\protected\appto\abx@cleartrackers{%
+  \global\undef\blx@saved@lastkey@text
+  \global\undef\blx@saved@lastkey@foot}
+
+% idem tracker
+
+\def\blx@idemtracker@gobal{%
+  \ifbool{citetracker}
+    {\global\let\blx@lasthash@text\abx@field@fullhash}
+    {}}
+
+\def\blx@idemtracker@context{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\global\let\blx@lasthash@foot\abx@field@fullhash}
+       {\global\let\blx@lasthash@text\abx@field@fullhash}}
+    {}}
+
+\let\blx@idemtracker@strict\blx@idemtracker@gobal
+
+\def\blx@idemtracker@constrict{%
+  \blx@mpfnsave
+  \blx@idemtracker@context}
+
+\def\blx@idemreset@force{%
+  \global\undef\blx@lasthash@text
+  \global\undef\blx@lasthash@foot
+  \blx@mpfnreset}
+
+\def\blx@idemreset@gobal{%
+  \global\undef\blx@lasthash@text}
+
+\def\blx@idemreset@context{%
+  \iftoggle{blx@footnote}
+    {\blx@mpfnreset
+     \global\undef\blx@lasthash@foot}
+    {\global\undef\blx@lasthash@text}}
+
+\protected\appto\abx@savetrackers{%
+  \global\let\blx@saved@lasthash@text\blx@lasthash@text
+  \global\let\blx@saved@lasthash@text\blx@lasthash@text}
+
+\protected\appto\abx@resttrackers{%
+  \global\let\blx@lasthash@text\blx@saved@lasthash@text
+  \global\let\blx@lasthash@text\blx@saved@lasthash@text}
+
+\protected\appto\abx@cleartrackers{%
+  \global\undef\blx@saved@lasthash@text
+  \global\undef\blx@saved@lasthash@foot}
+
+% opcit tracker
+
+\def\blx@opcittracker@gobal{%
+  \ifbool{citetracker}
+    {\blx@opcit@tracker{text}}
+    {}}
+
+\def\blx@opcittracker@context{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\blx@opcit@tracker{foot}}
+       {\blx@opcit@tracker{text}}}
+    {}}
+
+\def\blx@opcittracker@strict{%
+  \blx@ifcitesingle
+    {\blx@opcittracker@gobal}
+    {\blx@opcitreset@gobal}}%
+
+\def\blx@opcittracker@constrict{%
+  \blx@ifcitesingle
+    {\blx@mpfnsave
+     \blx@opcittracker@context}
+    {\blx@opcitreset@context}}%
+
+\def\blx@opcit@tracker#1{%
+  \blx@imc@iffieldundef{namehash}
+    {}
+    {\global\cslet{blx@lastkey@#1@\abx@field@namehash}\abx@field@entrykey
+     \xifinlistcs\abx@field@namehash{blx@trackhash@#1}
+       {}
+       {\listcsxadd{blx@trackhash@#1}\abx@field@namehash}}}
+
+\def\blx@opcit@reset#1{%
+  \begingroup
+  \def\do##1{\global\csundef{blx@lastkey@#1@##1}}%
+  \dolistcsloop{blx@trackhash@#1}%
+  \global\cslet{blx@trackhash@#1}\@empty
+  \endgroup}
+
+\def\blx@opcitreset@force{%
+  \blx@opcit@reset{text}%
+  \blx@opcit@reset{foot}%
+  \blx@mpfnreset}
+
+\def\blx@opcitreset@gobal{%
+  \blx@opcit@reset{text}}
+
+\def\blx@opcitreset@context{%
+  \iftoggle{blx@footnote}
+    {\blx@opcit@reset{foot}%
+     \blx@mpfnreset}
+    {\blx@opcit@reset{text}}}
+
+\let\blx@trackhash@text\@empty
+\let\blx@trackhash@foot\@empty
+
+\protected\appto\abx@savetrackers{%
+  \begingroup
+  \def\do#1{\global\csletcs{blx@saved@lastkey@text@#1}{blx@lastkey@text@#1}}%
+  \dolistloop\blx@trackhash@text
+  \global\let\blx@saved@trackhash@text\blx@trackhash@text
+  \def\do#1{\global\csletcs{blx@saved@lastkey@foot@#1}{blx@lastkey@foot@#1}}%
+  \dolistloop\blx@trackhash@foot
+  \global\let\blx@saved@trackhash@foot\blx@trackhash@foot
+  \endgroup}
+
+\protected\appto\abx@resttrackers{%
+  \begingroup
+  \blx@opcit@reset{text}%
+  \global\let\blx@trackhash@text\blx@saved@trackhash@text
+  \def\do#1{\global\csletcs{blx@lastkey@text@#1}{blx@saved@lastkey@text@#1}}%
+  \dolistloop\blx@trackhash@text
+  \blx@opcit@reset{foot}%
+  \global\let\blx@trackhash@foot\blx@saved@trackhash@foot
+  \def\do#1{\global\csletcs{blx@lastkey@foot@#1}{blx@saved@lastkey@foot@#1}}%
+  \dolistloop\blx@trackhash@foot
+  \endgroup}
+
+\protected\appto\abx@cleartrackers{%
+  \begingroup
+  \def\do#1{\global\csundef{blx@saved@lastkey@text@#1}}%
+  \dolistloop\blx@saved@trackhash@text
+  \global\undef\blx@saved@trackhash@text
+  \def\do#1{\global\csundef{blx@saved@lastkey@foot@#1}}%
+  \dolistloop\blx@saved@trackhash@foot
+  \global\undef\blx@saved@trackhash@foot
+  \endgroup}
+
+% loccit tracker
+
+\def\blx@loccittracker@gobal{%
+  \ifbool{citetracker}
+    {\blx@loccit@tracker{text}}
+    {}}
+
+\def\blx@loccittracker@context{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\blx@loccit@tracker{foot}}
+       {\blx@loccit@tracker{text}}}
+    {}}
+
+\def\blx@loccittracker@strict{%
+  \ifbool{citetracker}
+    {\blx@loccit@stricttracker{text}}
+    {}}
+
+\def\blx@loccittracker@constrict{%
+  \ifbool{citetracker}
+    {\iftoggle{blx@footnote}
+       {\blx@mpfnsave
+        \blx@loccit@stricttracker{foot}}
+       {\blx@loccit@stricttracker{text}}}
+    {}}
+
+\def\blx@loccit@tracker#1{%
+  \global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
+  \blx@imc@iffieldundef{postnote}
+    {}
+    {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
+     \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
+       {}
+       {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}}
+
+\def\blx@loccit@stricttracker#1{%
+  \global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
+  \blx@imc@iffieldundef{postnote}
+    {}
+    {\blx@ifcitesingle
+       {\expandafter\blx@imc@ifpages
+        \expandafter{\abx@field@postnote}
+          {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
+           \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
+             {}
+             {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
+          {}}
+       {}}}
+
+\def\blx@loccit@reset#1{%
+  \begingroup
+  \def\do##1{\global\csundef{blx@lastnote@#1@##1}}%
+  \dolistcsloop{blx@trackkeys@#1}%
+  \global\cslet{blx@trackkeys@#1}\@empty
+  \endgroup}
+
+\def\blx@loccitreset@force{%
+  \blx@loccit@reset{text}%
+  \blx@loccit@reset{foot}%
+  \blx@mpfnreset}
+
+\def\blx@loccitreset@gobal{%
+  \blx@loccit@reset{text}}
+
+\def\blx@loccitreset@context{%
+  \iftoggle{blx@footnote}
+    {\blx@loccit@reset{foot}%
+     \blx@mpfnreset}
+    {\blx@loccit@reset{text}}}
+
+\let\blx@trackkeys@text\@empty
+\let\blx@trackkeys@foot\@empty
+
+\protected\appto\abx@savetrackers{%
+  \begingroup
+  \def\do#1{\global\csletcs{blx@saved@lastnote@text@#1}{blx@lastnote@text@#1}}%
+  \dolistloop\blx@trackkeys@text
+  \global\let\blx@saved@trackkeys@text\blx@trackkeys@text
+  \def\do#1{\global\csletcs{blx@saved@lastnote@foot@#1}{blx@lastnote@foot@#1}}%
+  \dolistloop\blx@trackkeys@foot
+  \global\let\blx@saved@trackkeys@foot\blx@trackkeys@foot
+  \endgroup}
+
+\protected\appto\abx@resttrackers{%
+  \begingroup
+  \blx@loccit@reset{text}%
+  \global\let\blx@trackkeys@text\blx@saved@trackkeys@text
+  \def\do#1{\global\csletcs{blx@lastnote@text@#1}{blx@saved@lastnote@text@#1}}%
+  \dolistloop\blx@trackkeys@text
+  \blx@loccit@reset{foot}%
+  \global\let\blx@trackkeys@foot\blx@saved@trackkeys@foot
+  \def\do#1{\global\csletcs{blx@lastnote@foot@#1}{blx@saved@lastnote@foot@#1}}%
+  \dolistloop\blx@trackkeys@foot
+  \endgroup}
+
+\protected\appto\abx@cleartrackers{%
+  \begingroup
+  \def\do#1{\global\csundef{blx@saved@lastnote@text@#1}}%
+  \dolistloop\blx@saved@trackkeys@text
+  \global\undef\blx@saved@trackkeys@text
+  \def\do#1{\global\csundef{blx@saved@lastnote@foot@#1}}%
+  \dolistloop\blx@saved@trackkeys@foot
+  \global\undef\blx@saved@trackkeys@foot
+  \endgroup}
+
+\def\blx@addbackref#1{%
+  \ifcsdef{blx@setp@\the\c@refsection @#1}
+    {\ifcase\blx@backrefsetstyle
+       \blx@addbackref@i{#1}%
+     \or
+       \blx@addbackref@ii{setp}{#1}%
+     \or
+       \blx@addbackref@i{#1}%
+     \or
+       \blx@addbackref@i{#1}%
+     \or
+       \blx@addbackref@i{#1}%
+       \blx@addbackref@ii{setp}{#1}%
+     \or
+       \blx@addbackref@i{#1}%
+       \blx@addbackref@ii{setp}{#1}%
+     \fi}
+    {\ifcsdef{blx@setc@\the\c@refsection @#1}
+       {\ifcase\blx@backrefsetstyle
+          \blx@addbackref@ii{setc}{#1}%
+        \or
+          \blx@addbackref@i{#1}%
+        \or
+          \blx@addbackref@i{#1}%
+        \or
+          \blx@addbackref@i{#1}%
+          \blx@addbackref@ii{setc}{#1}%
+        \or
+          \blx@addbackref@i{#1}%
+        \or
+          \blx@addbackref@i{#1}%
+          \blx@addbackref@ii{setc}{#1}%
+        \fi}
+       {\blx@addbackref@i{#1}}}}
+
+\def\blx@addbackref@i#1{%
+  \ifbacktracker
+    \blx@leavevmode
+    \if@filesw
+      \protected@write\@mainaux{}{\string\abx@aux@backref
+        {\the\c@instcount}{#1}{\the\c@refsection}%
+        {\thepage}{\noexpand\the\c@page}}%
+    \fi
+  \fi}
+
+\def\blx@addbackref@ii#1#2{%
+  \expandafter\expandafter\expandafter\forcsvlist
+  \expandafter\expandafter\expandafter\blx@addbackref@i
+  \expandafter\expandafter\expandafter{%
+    \csname blx@#1@\the\c@refsection @#2\endcsname}}
+
+% {<instcount>}{<entrykey>}{<refsection>}{<page>}{<page int>}
+
+\protected\def\blx@aux@backref#1#2#3#4#5{%
+  \ifcsundef{blx@pref@#3@\detokenize{#2}}
+    {\global\cslet{blx@pref@#3@\detokenize{#2}}\@empty
+     \expandafter\blx@onlypreamble\csname blx@pref@#3@\detokenize{#2}\endcsname}
+    {}%
+  \ifinlistcs{#4}{blx@pref@#3@\detokenize{#2}}
+    {}
+    {\listcsgadd{blx@pref@#3@\detokenize{#2}}{#4}}%
+  \blx@addpagesum{#1}{#5}}
+
+\AtEndDocument{%
+  \def\abx@aux@backref#1#2#3#4#5{\blx@addpagesum{#1}{#5}}}
+
+% {<true>}{<false>}
+
+\def\blx@ifcitesingle{%
+  \ifnum\c@citetotal=\@ne
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+%  hyperref interface
+
+\appto\blx@mkhyperref{%
+  \protected\def\blx@imc@bibhyperref{%
+    \@ifnextchar[%]
+      {\blx@bibhyperref}
+      {\blx@bibhyperref[\abx@field@entrykey]}}%
+  \ifundef\hyper@natanchorstart
+    {\long\def\blx@bibhyperref[#1]#2{%
+       \blx@sfsave\hyperlink{cite.\the\c@refsection @#1}{\blx@sfrest
+         #2%
+       \blx@sfsave}\blx@sfrest}%
+     \protected\long\def\blx@imc@bibhyperlink#1#2{%
+       \blx@sfsave\hyperlink{cite.\the\c@refsection:#1}{\blx@sfrest
+         #2%
+       \blx@sfsave}\blx@sfrest}%
+     \protected\long\def\blx@imc@bibhypertarget#1#2{%
+       \blx@sfsave\hypertarget{cite.\the\c@refsection:#1}{\blx@sfrest
+         #2%
+       \blx@sfsave}\blx@sfrest}}%
+    {\long\def\blx@bibhyperref[#1]#2{%
+       \blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest
+       #2%
+       \blx@sfsave\hyper@natlinkend\blx@sfrest}%
+     \protected\long\def\blx@imc@bibhyperlink#1#2{%
+       \blx@sfsave\hyper@natlinkstart{\the\c@refsection:#1}\blx@sfrest
+       #2%
+       \blx@sfsave\hyper@natlinkend\blx@sfrest}%
+     \protected\long\def\blx@imc@bibhypertarget#1#2{%
+       \blx@sfsave\hyper@natanchorstart{\the\c@refsection:#1}\blx@sfrest
+       #2%
+       \blx@sfsave\hyper@natanchorend\blx@sfrest}}
+  \let\blx@imc@ifhyperref\@firstoftwo
+  \def\blx@sf{\spacefactor}%
+  \def\blx@sfsave{%
+    \blx@leavevmode
+    \numgdef\blx@sf{\spacefactor}}%
+  \def\blx@sfrest{%
+    \ifhmode\spacefactor\blx@sf\relax\fi
+    \gdef\blx@sf{\spacefactor}}}
+
+\appto\blx@mknohyperref{%
+  \protected\def\blx@imc@bibhyperref{\@ifnextchar[\blx@nohyperref\@firstofone}%
+  \def\blx@nohyperref[#1]#2{#2}%
+  \let\blx@imc@bibhyperlink\@secondoftwo
+  \let\blx@imc@bibhypertarget\@secondoftwo
+  \let\blx@imc@ifhyperref\@secondoftwo}
+
+\blx@regimcs{%
+  \bibhyperref \bibhyperlink \bibhypertarget \ifhyperref}
+
+% {<entrykey>,...}
+
+\protected\def\nocite#{\blx@nocite}
+
+\def\blx@nocite#1{%
+  \@bsphack
+  \AfterPreamble{%
+    \iftoggle{blx@bibliography}
+      {}
+      {\ifstrequal{*}{#1}
+        {\blx@citation@all}
+        {\blx@xsanitizeafter{\forcsvlist\blx@nocite@do}{#1}}}}%
+  \@esphack}
+
+\def\blx@nocite@do#1{\blx@citation{#1}\blx@msg@cundef}
+
+% {<macro>}[<arg1>][<arg2>]{<arg3>}
+% => <macro>{<arg1>}{<arg2>}{<arg3>}
+
+\protected\def\blx@citeargs#1{%
+  \@ifnextchar[%]
+    {\blx@citeargs@i{#1}}
+    {\blx@citeargs@iii{#1{}{}}}}
+\long\def\blx@citeargs@i#1[#2]{%
+  \@ifnextchar[%]
+    {\blx@citeargs@ii{#1{#2}}}
+    {\blx@citeargs@iii{#1{}{#2}}}}
+\long\def\blx@citeargs@ii#1[#2]{%
+  \blx@citeargs@iii{#1{#2}}}
+\long\def\blx@citeargs@iii#1#2{%
+  \blx@xsanitizeafter{#1}{#2}}
+
+% {<macro>}(<arg1>)(<arg2>)
+% => <macro>{<arg1>}{<arg2>}
+
+\protected\def\blx@multiargs#1{%
+  \@ifnextchar(%)
+    {\blx@multiargs@i{#1}}
+    {#1{}{}}}
+\long\def\blx@multiargs@i#1(#2){%
+  \@ifnextchar(%)
+    {\blx@multiargs@ii{#1{#2}}}
+    {#1{}{#2}}}
+\long\def\blx@multiargs@ii#1(#2){#1{#2}}
+
+% {<macro>}[<arg1>][<arg2>]{<arg3>}<punct>
+% => <macro>{<arg1>}{<arg2>}{<arg3>}{<punctcmd>}
+
+\protected\def\blx@citepunct#1{%
+  \blx@citeargs{\blx@citepunct@i{#1}}}
+\long\def\blx@citepunct@i#1#2#3#4{%
+  \blx@thecheckpunct{#1{#2}{#3}{#4}}}
+
+% {<csname>}[<arg1>][<arg2>]{arg3}[arg4]{arg5}<punct>
+% => <macro>{<arg1>}{<arg2>}{<arg3>}{<arg4>}{arg5}{<punctcmd>}
+
+\protected\def\blx@citexpunct#1{%
+  \blx@citeargs{\blx@citexpunct@i{#1}}}
+\long\def\blx@citexpunct@i#1#2#3#4{%
+  \@ifnextchar[%]
+    {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}}
+    {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[#1]}}
+\long\def\blx@citexpunct@ii#1#2[#3]#4{%
+  \blx@thecheckpunct{\blxcitecmd{#1}#2{#3}{#4}}}
+
+% {<code>}<punct> => <code>{<punctcmd>}
+
+\long\def\blx@checkpunct#1{%
+  \begingroup
+  \def\blx@tempa{\endgroup#1}%
+  \futurelet\blx@tempb\blx@checkpunct@i}
+\def\blx@checkpunct@i{%
+  \expandafter\blx@checkpunct@ii\blx@autopunct&}
+\def\blx@checkpunct@ii#1{%
+  \ifx#1&%
+    \expandafter\blx@checkpunct@iii
+  \fi
+  \ifx#1\blx@tempb
+    \expandafter\blx@checkpunct@iv
+  \fi
+  \blx@checkpunct@ii}
+\def\blx@checkpunct@iii#1\blx@checkpunct@ii{%
+  \blx@tempa{\blx@postpunct}}
+\def\blx@checkpunct@iv#1\blx@checkpunct@ii#2&#3{%
+  \edef\blx@tempa{%
+    \expandonce\blx@tempa{%
+    \ifcsdef{blx@pm@\detokenize{#3}}
+      {\csname blx@imc@add\csname blx@pm@\detokenize{#3}\endcsname
+       \endcsname}
+      {\noexpand#3}}}%
+  \blx@tempa}
+
+\long\def\blx@nocheckpunct#1{#1{}}
+
+\protected\def\blx@citeinit{%
+  \iftoggle{blx@bibliography}
+    {}
+    {\toggletrue{blx@citation}}%
+  \blx@blxinit
+  \citesetup
+  \blx@setsfcodes
+  \blx@postpunct@agroup
+  \blx@resetdata
+  \blx@leavevmode
+  \csuse{blx@hook@cite}%
+  \csuse{blx@hook@cite@next}%
+  \let\blx@citeinit\blx@resetdata}
+
+\protected\def\blx@citecmdinit{%
+  \blx@leavevmode@cite
+  \iftoggle{blx@bibliography}
+    {}
+    {\blx@initunit}}
+
+% *{<command>}[<wrapper>]{<precode>}{<loopcode>}{<delimcode>}{<postcode>}
+
+\newrobustcmd*{\DeclareCiteCommand}{%
+  \@ifstar{\blx@defcitecmd*}{\blx@defcitecmd{}}}
+
+\def\blx@defcitecmd#1#2{%
+  \begingroup
+  \escapechar\m@ne
+  \edef\blx@tempa{\endgroup
+    \noexpand\blx@defcitecmd@i{#1}{\string#2}}%
+  \blx@tempa}
+
+\def\blx@defcitecmd@i#1#2{%
+  \blx@checkcitecmd{#2}{#1}%
+  \protected\csdef{#2}{%
+    \blx@citecmdinit
+    \@ifstar
+      {\blx@citepunct{\blxcitecmd{#2*}}}
+      {\blx@citepunct{\blxcitecmd{#2}}}}%
+  \@ifnextchar[%]
+    {\blx@defcitecmd@iii{#2#1}}
+    {\blx@defcitecmd@ii{#2#1}}}
+
+\long\def\blx@defcitecmd@ii#1{%
+  \protected\csedef{blx@cite@#1}{\blxciteicmd{#1}}%
+  \blx@defcitecmd@iv{#1}}
+
+\long\def\blx@defcitecmd@iii#1[#2]{%
+  \protected\long\csedef{blx@cite@#1}##1##2##3##4{%
+    \begingroup
+    \blx@citeinit
+    \unexpanded{#2}{\blxciteicmd{#1}{##1}{##2}{##3}{}}%
+    ##4\endgroup}%
+  \blx@defcitecmd@iv{#1}}
+
+\long\def\blx@defcitecmd@iv#1#2#3#4#5{%
+  \protected\long\csdef{blx@citei@#1}##1##2##3##4{%
+    \ifblank{##1}
+      {}
+      {\def\abx@field@prenote{##1}}%
+    \ifblank{##2}
+      {\let\blx@thenotecheck\relax}
+      {\def\abx@field@postnote{##2}}%
+    \def\blx@precode{#2}%
+    \def\blx@loopcode{#3}%
+    \def\blx@dlimcode{#4}%
+    \def\blx@postcode{#5##4}%
+    \blx@citeloop{##3}%
+    \endgroup}}
+
+% {<type>}{<name>}{*}
+
+\def\blx@checkcitecmd#1#2{%
+  \ifblank{#2}
+    {\ifcsdef{blx@cite@#1}
+       {\blx@info{Redefining '\@backslashchar#1'}}
+       {\ifcsundef{#1}
+          {}
+          {\blx@warning@noline{Redefining '\@backslashchar#1'}}}%
+     \ifcsdef{blx@cite@#1*}
+       {}
+       {\csedef{blx@cite@#1*}{%
+          \expandafter\noexpand\csname blx@cite@#1\endcsname}%
+        \csedef{blx@citei@#1*}{%
+          \expandafter\noexpand\csname blx@citei@#1\endcsname}}}
+    {\ifcsdef{blx@cite@#1}
+       {}
+       {\csdef{blx@cite@#1}{\blx@err@citecmd{#1}}%
+        \csdef{blx@citei@#1}{\blx@err@citecmd{#1}}}}}
+
+% {<name>}{prenote}{postnote}{citekey}{punct}
+
+\newrobustcmd*{\blxcitecmd}[1]{%
+  \ifcsundef{blx@cite@#1}
+    {\blx@err@citecmd{#1}}
+    {\csuse{blx@cite@#1}}}
+
+\newrobustcmd*{\blxciteicmd}[1]{%
+  \begingroup
+  \blx@citeinit
+  \ifcsundef{blx@citei@#1}
+    {\blx@err@citecmd{#1}}
+    {\csuse{blx@citei@#1}}}
+
+% {<multicitecount>}{<name>}{prenote}{postnote}{citekey}{punct}
+
+\protected\def\blxmciteicmd#1{%
+  \c@multicitecount#1\relax
+  \blxciteicmd}
+
+% {<multicitetotal>}{<multiprenote>}{<multipostnote>}
+
+\protected\def\blxmcites#1#2#3{%
+  \begingroup
+  \blx@citeinit
+  \c@multicitecount\z@
+  \c@multicitetotal#1\relax
+  \ifnum\c@multicitetotal>\@ne
+    \let\blx@ifcitesingle\@secondoftwo
+  \fi
+  \ifblank{#2}%
+    {}
+    {\def\abx@field@multiprenote{#2}}%
+  \ifblank{#3}%
+    {}
+    {\def\abx@field@multipostnote{#3}}%
+  \usebibmacro{multiprenote}}
+
+\protected\def\blxendmcites{%
+  \usebibmacro{multipostnote}%
+  \endgroup}
+
+% {<command>}[<wrapper>]{<cite>}{<delimiter>}
+
+\newrobustcmd{\DeclareMultiCiteCommand}[1]{%
+  \ifundef#1%
+    {}
+    {\blx@info{Redefining '\string#1'}}%
+  \@ifnextchar[%]
+    {\blx@defmcitecmd{#1}}
+    {\blx@defmcitecmd{#1}[\@firstofone]}}
+
+\def\blx@defmcitecmd#1[#2]#3#4{%
+  \begingroup
+  \escapechar\m@ne
+  \edef\blx@tempa{\endgroup
+    \protected\def\noexpand#1{%
+      \blx@citecmdinit
+      \noexpand\@ifstar
+        {\expandafter\noexpand
+         \csname blx@mcite@\string#1\endcsname*%
+         \expandafter\noexpand
+         \csname blx@mcitei@\string#1\endcsname}
+        {\expandafter\noexpand
+         \csname blx@mcite@\string#1\endcsname{}%
+         \expandafter\noexpand
+         \csname blx@mcitei@\string#1\endcsname}}%
+    \protected\csdef{blx@mcite@\string#1}####1####2{%
+      \begingroup
+      \blx@citeinit
+      \noexpand\blx@multicite
+        ####2%
+        {\unexpanded{#2}}%
+        {\string#3####1}%
+        {\unexpanded{#4}}}%
+    \protected\long\csdef{blx@mcitei@\string#1}}%
+  \blx@tempa##1##2##3{##1{##2}##3\endgroup}}
+
+% {<command>}{<wrapper>}{<citecmd>}{<delimiter>} =>
+%  <init><command>{<wrapper>}{<cites>}{<punct>}
+
+\def\blx@multicite#1#2#3#4{%
+  \begingroup
+  \def\blx@tempa{#1}%
+  \def\blx@tempb{#2}%
+  \def\blx@tempc{#3}%
+  \def\blx@tempd{#4}%
+  \c@multicitetotal\z@
+  \blx@multiargs\blx@multicite@i}
+
+\def\blx@multicite@i#1#2{%
+  \ifblank{#1}%
+    {\let\abx@field@multiprenote\@empty}%
+    {\def\abx@field@multiprenote{#1}}%
+  \ifblank{#2}%
+    {\let\abx@field@multipostnote\@empty}%
+    {\def\abx@field@multipostnote{#2}}%
+  \let\blx@tempe\@empty
+  \let\blx@tempf\@empty
+  \togglefalse{blx@tempa}%
+  \blx@multiparse}
+
+\def\blx@multicite@add#1#2#3{%
+  \togglefalse{blx@tempa}%
+  \advance\c@multicitetotal\@ne
+  \eappto\blx@tempe{%
+    \expandonce\blx@tempf
+    \blxmciteicmd{\the\c@multicitetotal}%
+    {\expandonce\blx@tempc}\unexpanded{{#1}{#2}{#3}}{}}%
+  \let\blx@tempf\blx@tempd
+  \blx@multiparse}
+
+\def\blx@multicite@end#1{%
+  \edef\blx@tempa{\endgroup
+    \expandonce\blx@tempa
+      {\expandonce\blx@tempb}%
+      {\blxmcites
+         {\the\c@multicitetotal}%
+         {\expandonce\abx@field@multiprenote}%
+         {\expandonce\abx@field@multipostnote}%
+       \expandonce\blx@tempe
+       \blxendmcites}%
+      {#1}%
+    \iftoggle{blx@tempa}{\relax\space}{}}%
+  \blx@tempa}
+
+\def\blx@multiparse{%
+  \futurelet\@let@token\blx@multiparse@i}
+
+\def\blx@multiparse@i{%
+  \ifx\@let@token\relax
+    \blx@multiparse@ii{\blx@multicite@end{}}%
+  \fi
+  \ifx\@let@token[%]
+    \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
+  \fi
+  \ifx\@let@token\bgroup
+    \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
+  \fi
+  \ifx\@let@token\@sptoken
+    \blx@multiparse@ii\blx@multiparse@iii
+  \fi
+  \iftrue
+    \iftoggle{blx@tempa}
+      {\blx@multiparse@ii{\blx@multicite@end{}}}
+      {\blx@multiparse@ii{\blx@thecheckpunct\blx@multicite@end}}%
+  \fi
+  &}
+
+\def\blx@multiparse@ii#1#2&{\fi#1}
+\csdef{blx@multiparse@iii} {\toggletrue{blx@tempa}\blx@multiparse}
+
+% {<name>}[l|i|r]{<cite>}{<multicite>}
+
+\newrobustcmd*{\DeclareAutoCiteCommand}[1]{%
+  \ifcsundef{blx@acite@#1}
+    {}
+    {\blx@info{Redefining autocite command '#1'}}%
+  \@ifnextchar[%]
+    {\blx@defautocmd@i{#1}}
+    {\blx@defautocmd@i{#1}[r]}}
+
+\def\blx@defautocmd@i#1[#2]#3#4{%
+  \begingroup
+  \escapechar\m@ne
+  \edef\blx@tempa{\endgroup
+    \noexpand\blx@defautocmd@ii{#1}{#2}%
+      {\string#3}{\string#4}}%
+  \blx@tempa}
+
+\def\blx@defautocmd@ii#1#2#3#4{%
+  \protected\csedef{blx@acite@#1}{%
+    \blx@citecmdinit
+    \noexpand\@ifstar
+      {\blx@citepunct{\expandafter\noexpand
+       \csname blx@acitei@#1\endcsname*}}
+      {\blx@citepunct{\expandafter\noexpand
+       \csname blx@acitei@#1\endcsname{}}}}%
+  \protected\csedef{blx@acitei@#1}##1##2##3##4##5{%
+    \begingroup
+    \blx@citeinit
+    \if l#2\noexpand\unspace##5\fi
+    \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##5}\fi
+    \blxcitecmd{#3##1}{##2}{##3}{##4}{}%
+    \if r#2##5\fi
+    \if f#2\noexpand\iftoggle{blx@footnote}{##5}{}\fi
+    \endgroup}%
+  \protected\csedef{blx@macite@#1}{%
+    \blx@citecmdinit
+    \noexpand\@ifstar
+      {\expandafter\noexpand
+       \csname blx@mcite@#4\endcsname*%
+       \expandafter\noexpand
+       \csname blx@macitei@#1\endcsname}
+      {\expandafter\noexpand
+       \csname blx@mcite@#4\endcsname{}%
+       \expandafter\noexpand
+       \csname blx@macitei@#1\endcsname}}%
+  \protected\csedef{blx@macitei@#1}##1##2##3{%
+    \if l#2\noexpand\unspace##3\fi
+    \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##3}\fi
+    ##1{##2}%
+    \if r#2##3\fi
+    \if f#2\noexpand\iftoggle{blx@footnote}{##3}{}\fi
+    \endgroup}}
+
+% {<characters>}
+
+\newrobustcmd*{\DeclareAutoPunctuation}[1]{%
+  \ifblank{#1}
+    {\let\blx@thecheckpunct\blx@nocheckpunct}
+    {\let\blx@thecheckpunct\blx@checkpunct
+     \def\blx@autopunct{#1}}}
+
+\AfterEndPreamble{% babel
+  \begingroup
+  \makeatletter
+  \endlinechar\m@ne
+  \scantokens\expandafter{%
+    \expandafter\gdef
+    \expandafter\blx@autopunct
+    \expandafter{\blx@autopunct}}%
+  \endgroup}
+
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<namelist>}<punct>
+
+\newrobustcmd*{\citename}{\blx@citexpunct{citename}}
+\long\csdef{blx@cite@citename}#1#2#3#4#5#6{%
+  \begingroup
+  \blx@citecmdinit
+  \blx@citeinit
+  \ifblank{#1}
+    {}
+    {\def\abx@field@prenote{#1}}%
+  \ifblank{#2}
+    {\let\blx@thenotecheck\relax}
+    {\def\abx@field@postnote{#2}}%
+  \def\blx@precode{\usebibmacro{prenote}}%
+  \def\blx@loopcode{%
+    \ifnameundef{#5}
+      {\blx@warning@entry{'#5' undefined or not a name list}%
+       \abx@missing{#5}}
+      {\printnames[#4]{#5}}}%
+  \def\blx@dlimcode{\multicitedelim}%
+  \ifblank{#2}
+    {\def\blx@postcode{#6}}
+    {\def\blx@postcode{\usebibmacro{postnote}#6}}%
+  \boolfalse{citetracker}%
+  \boolfalse{pagetracker}%
+  \blx@citeloop{#3}%
+  \endgroup}
+
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<list>}<punct>
+
+\newrobustcmd*{\citelist}{\blx@citexpunct{citelist}}
+\long\csdef{blx@cite@citelist}#1#2#3#4#5#6{%
+  \begingroup
+  \blx@citecmdinit
+  \blx@citeinit
+  \ifblank{#1}
+    {}
+    {\def\abx@field@prenote{#1}}%
+  \ifblank{#2}
+    {\let\blx@thenotecheck\relax}
+    {\def\abx@field@postnote{#2}}%
+  \def\blx@precode{\usebibmacro{prenote}}%
+  \def\blx@loopcode{%
+    \iflistundef{#5}
+      {\blx@warning@entry{'#5' undefined or not a literal list}%
+       \abx@missing{#5}}
+      {\printlist[#4]{#5}}}%
+  \def\blx@dlimcode{\multicitedelim}%
+  \ifblank{#2}
+    {\def\blx@postcode{#6}}
+    {\def\blx@postcode{\usebibmacro{postnote}#6}}%
+  \boolfalse{citetracker}%
+  \boolfalse{pagetracker}%
+  \blx@citeloop{#3}%
+  \endgroup}
+
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<field>}<punct>
+
+\newrobustcmd*{\citefield}{\blx@citexpunct{citefield}}
+\long\csdef{blx@cite@citefield}#1#2#3#4#5#6{%
+  \begingroup
+  \blx@citecmdinit
+  \blx@citeinit
+  \ifblank{#1}
+    {}
+    {\def\abx@field@prenote{#1}}%
+  \ifblank{#2}
+    {\let\blx@thenotecheck\relax}
+    {\def\abx@field@postnote{#2}}%
+  \def\blx@precode{\usebibmacro{prenote}}%
+  \def\blx@loopcode{%
+    \iffieldundef{#5}
+      {\blx@warning@entry{'#5' undefined or not a field}%
+       \abx@missing{#5}}
+      {\printfield[#4]{#5}}}%
+  \def\blx@dlimcode{\multicitedelim}%
+  \ifblank{#2}
+    {\def\blx@postcode{#6}}
+    {\def\blx@postcode{\usebibmacro{postnote}#6}}%
+  \boolfalse{citetracker}%
+  \boolfalse{pagetracker}%
+  \blx@citeloop{#3}%
+  \endgroup}
+
+\renewrobustcmd*{\cite}{\blx@err@citecmd\cite}
+\let\blx@cite@cite\relax
+\newrobustcmd*{\parencite}{\blx@warn@citecmd\parencite\cite}
+\let\blx@cite@parencite\relax
+\newrobustcmd*{\footcite}{\blx@warn@citecmd\footcite\cite}
+\let\blx@cite@footcite\relax
+\newrobustcmd*{\footcitetext}{\blx@warn@citecmd\footcitetext\cite}
+\let\blx@cite@footcitetext\relax
+\newrobustcmd*{\smartcite}{\blx@warn@citecmd\smartcite\cite}
+\let\blx@cite@smartcite\relax
+\newrobustcmd*{\textcite}{\blx@warn@citecmd\textcite\cite}
+\let\blx@cite@textcite\relax
+\newrobustcmd*{\supercite}{\blx@warn@citecmd\supercite\cite}
+\let\blx@cite@supercite\relax
+
+%% ifthen interface
+
+\def\blx@TE#1#2{%
+  \TE@throw
+  \unexpanded{%
+    \iftrue\@nameuse{fi}%
+    #1{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
+
+\def\blx@xTE#1#2{%
+  \TE@throw
+  \unexpanded{\iftrue\@nameuse{fi}}%
+  #1\unexpanded{{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
+
+\let\blx@TE@hook\@empty
+
+\appto\blx@blxinit{%
+  \appto\blx@TE@hook{%
+    \def\ifhyperref{\blx@TE\blx@imc@ifhyperref}%
+    \def\ifmorenames{\blx@TE\blx@imc@ifmorenames}%
+    \def\ifmoreitems{\blx@TE\blx@imc@ifmoreitems}%
+    \def\ifciteseen{\blx@TE\blx@imc@ifciteseen}%
+    \def\ifentryseen{\blx@TE\blx@imc@ifentryseen}%
+    \def\ifciteibid{\blx@TE\blx@imc@ifciteibid}%
+    \def\ifciteidem{\blx@TE\blx@imc@ifciteidem}%
+    \def\ifopcit{\blx@TE\blx@imc@ifopcit}%
+    \def\ifloccit{\blx@TE\blx@imc@ifloccit}%
+    \def\ifsamepage{\blx@TE\blx@imc@ifsamepage}%
+    \def\iffirstonpage{\blx@TE\blx@imc@iffirstonpage}%
+    \def\ifcurrentfield#1{\blx@TE{\blx@imc@ifcurrentfield{#1}}}%
+    \def\ifcurrentlist#1{\blx@TE{\blx@imc@ifcurrentlist{#1}}}%
+    \def\ifcurrentname#1{\blx@TE{\blx@imc@ifcurrentname{#1}}}%
+    \def\ifentrytype#1{\blx@TE{\blx@imc@ifentrytype{#1}}}%
+    \def\iffieldequalcs#1#2{\blx@TE{\blx@imc@iffieldequalcs{#1}{#2}}}%
+    \def\iffieldequals#1#2{\blx@TE{\blx@imc@iffieldequals{#1}{#2}}}%
+    \def\iffieldequalstr#1#2{\blx@TE{\blx@imc@iffieldequalstr{#1}{#2}}}%
+    \def\iffieldsequal#1#2{\blx@TE{\blx@imc@iffieldsequal{#1}{#2}}}%
+    \def\iffieldundef#1{\blx@TE{\blx@imc@iffieldundef{#1}}}%
+    \def\ifnameequalcs#1#2{\blx@TE{\blx@imc@ifnameequalcs{#1}{#2}}}%
+    \def\ifnameequals#1#2{\blx@TE{\blx@imc@ifnameequals{#1}{#2}}}%
+    \def\ifnamesequal#1#2{\blx@TE{\blx@imc@ifnamesequal{#1}{#2}}}%
+    \def\ifnameundef#1{\blx@TE{\blx@imc@ifnameundef{#1}}}%
+    \def\ifcategory#1{\blx@TE{\blx@imc@ifcategory{#1}}}%
+    \def\ifkeyword#1{\blx@TE{\blx@imc@ifkeyword{#1}}}%
+    \def\ifentrycategory#1#2{\blx@TE{\blx@imc@ifentrycategory{#1}{#2}}}%
+    \def\ifentrykeyword#1#2{\blx@TE{\blx@imc@ifentrykeyword{#1}{#2}}}%
+    \def\ifcapital{\blx@TE\blx@imc@ifcapital}%
+    \def\ifinteger#1{\blx@TE{\blx@imc@ifinteger{#1}}}%
+    \def\iffieldint#1{\blx@TE{\blx@imc@iffieldint{#1}}}%
+    \def\ifnumeral#1{\blx@TE{\blx@imc@ifnumeral{#1}}}%
+    \def\ifnumerals#1{\blx@TE{\blx@imc@ifnumerals{#1}}}%
+    \def\ifpages#1{\blx@TE{\blx@imc@ifpages{#1}}}%
+    \def\iffieldnum#1{\blx@TE{\blx@imc@iffieldnum{#1}}}%
+    \def\iffieldnums#1{\blx@TE{\blx@imc@iffieldnums{#1}}}%
+    \def\iffieldpages#1{\blx@TE{\blx@imc@iffieldpages{#1}}}%
+    \def\ifbibstring#1{\blx@TE{\blx@imc@ifbibstring{#1}}}%
+    \def\iffieldbibstring#1{\blx@TE{\blx@imc@iffieldbibstring{#1}}}%
+    \def\ifnatbibmode{\blx@TE{\iftoggle{blx@natbib}}}%
+    \def\ifcitation{\blx@TE{\iftoggle{blx@citation}}}%
+    \def\ifbibliography{\blx@TE{\iftoggle{blx@bibliography}}}%
+    \def\ifciteindex{\blx@TE{\iftoggle{blx@citeindex}}}%
+    \def\ifbibindex{\blx@TE{\iftoggle{blx@bibindex}}}%
+    \def\iffootnote{\blx@TE{\iftoggle{blx@footnote}}}%
+    \def\ifuseprefix{\blx@TE{\iftoggle{blx@useprefix}}}%
+    \def\ifuseauthor{\blx@TE{\iftoggle{blx@useauthor}}}%
+    \def\ifuseeditor{\blx@TE{\iftoggle{blx@useeditor}}}%
+    \def\ifusetranslator{\blx@TE{\iftoggle{blx@usetranslator}}}%
+    \def\iffirstinits{\blx@TE{\iftoggle{blx@firstinits}}}%
+    \def\ifsingletitle{\blx@TE{\iftoggle{abx@bool@singletitle}}}%
+    \def\ifandothers#1{\blx@TE{\iftoggle{abx@bool@more#1}}}}}
+
+% {<listmacro>}{<filtercsname>} => matches in <listmacro>
+
+\protected\def\blx@bibfilter#1#2{%
+  \begingroup
+  \edef\blx@do##1{%
+    \def\noexpand\blx@flt@item{##1}%
+    \ifboolexpr{\csexpandonce{#2}}%
+      {\listadd\noexpand\blx@tempa{##1}}%
+      {}}%
+  \let\blx@done\relax
+  \edef\blx@tempa{%
+    \let\noexpand\blx@tempa\noexpand\@empty
+    \blx@listloop{#1}}%
+  \blx@tempa
+  \edef\blx@tempa{\endgroup
+    \def\noexpand#1{\blx@tempa}}%
+  \blx@tempa}
+
+%% Auxiliary macros
+
+\newrobustcmd*{\mkbibquote}{\enquote}
+\protected\def\blx@imc@mkbibquote{%
+  \blx@ifuspunct\blx@usquote\enquote}
+
+\def\blx@usquote{%
+  \ifnum\@quotelevel>\z@
+    \expandafter\blx@usiquote
+  \else
+    \expandafter\blx@usoquote
+  \fi}
+
+\long\def\blx@usoquote#1{%
+  \begingroup
+  \initoquote
+  \textooquote#1%
+  \futurelet\@let@token\blx@usoquote@i}
+
+\def\blx@usoquote@i{%
+  \blx@usqcheck
+    {\ifx\blx@postpunct\@empty\else\blx@dopostpunct\fi
+     \textcoquote\endgroup}
+    {\blx@setpostpunct\textcoquote\endgroup}}
+
+\long\def\blx@usiquote#1{%
+  \begingroup
+  \initiquote
+  \textoiquote#1%
+  \futurelet\@let@token\blx@usiquote@i}
+
+\def\blx@usiquote@i{%
+  \blx@usqcheck
+    {\textciquote\endgroup}
+    {\blx@setpostpunct\textciquote\endgroup}}
+
+\def\blx@usqcheck#1#2{%
+  \def\blx@tempa{#1}%
+  \def\blx@tempb{#2}%
+  \ifx\@let@token\space
+    \blx@usqcheck@i\blx@tempa
+  \fi
+  \ifx\@let@token\@sptoken
+    \blx@usqcheck@i\blx@tempa
+  \fi
+  \if\noexpand\@let@token\relax
+    \blx@usqcheck@i\blx@tempb
+  \fi
+  \expandafter\blx@usqcheck@ii\blx@quotepunct\relax&}
+
+\def\blx@usqcheck@i#1#2&{\fi#1}
+
+\def\blx@usqcheck@ii#1{%
+  \if\noexpand#1\relax
+    \blx@usqcheck@i\blx@tempa
+  \fi
+  \if\noexpand#1\noexpand\@let@token
+    \blx@usqcheck@i{\blx@usqcheck@iii\blx@tempa}%
+  \fi
+  \blx@usqcheck@ii}
+
+\def\blx@usqcheck@iii#1#2{#2#1}
+
+\newrobustcmd*{\mkbibemph}{\emph}
+\protected\long\def\blx@imc@mkbibemph#1{%
+  \emph{#1}\blx@imc@setpunctfont\emph}
+
+\newrobustcmd*{\mkbibbold}{\textbf}
+\protected\long\def\blx@imc@mkbibbold#1{%
+  \textbf{#1}\blx@imc@setpunctfont\textbf}
+
+\blx@regimcs{\mkbibquote \mkbibemph \mkbibbold}
+
+\newcommand*{\bibleftparen}{\blx@postpunct(}
+\newcommand*{\bibrightparen}{\blx@postpunct)\midsentence}
+\newcommand*{\bibleftbracket}{\blx@postpunct[}
+\newcommand*{\bibrightbracket}{\blx@postpunct]\midsentence}
+
+\def\blx@parenlevel{%
+  \iftoggle{blx@footnote}
+    {\blx@parenlevel@foot}
+    {\blx@parenlevel@text}}
+
+\newrobustcmd*{\blx@bibopenparen}{%
+  \blx@opencheck\bibopenparen
+  \blx@postpunct
+  \ifnum\blx@parenlevel=\z@
+    \global\blx@parenlevel\@ne
+    \global\c@parenlevel\@ne
+    \expandafter\bibleftparen
+  \else
+    \expandafter\blx@openparen
+  \fi}
+
+\newrobustcmd*{\blx@bibopenbracket}{%
+  \blx@opencheck\bibopenbracket
+  \blx@postpunct
+  \ifnum\blx@parenlevel=\z@
+    \global\blx@parenlevel1002
+    \global\c@parenlevel\@ne
+    \expandafter\bibleftbracket
+  \else
+    \expandafter\blx@openparen
+  \fi}
+
+\newrobustcmd*{\blx@bibcloseparen}{%
+  \blx@closecheck\bibcloseparen
+  \blx@postpunct\blx@closeparen}
+
+\newrobustcmd*{\blx@bibclosebracket}{%
+  \blx@closecheck\bibclosebracket
+  \blx@postpunct\blx@closeparen}
+
+\def\blx@openparen{%
+  \ifodd\blx@parenlevel
+    \global\advance\blx@parenlevel\@ne
+    \global\advance\c@parenlevel\@ne
+    \expandafter\bibleftbracket
+  \else
+    \global\advance\blx@parenlevel\@ne
+    \global\advance\c@parenlevel\@ne
+    \expandafter\bibleftparen
+  \fi}
+
+\def\blx@closeparen{%
+  \ifodd\blx@parenlevel
+    \blx@closeparen@i
+    \expandafter\bibrightparen
+  \else
+    \blx@closeparen@i
+    \expandafter\bibrightbracket
+  \fi}
+
+\def\blx@closeparen@i{%
+  \ifnum\blx@parenlevel=1002
+    \global\blx@parenlevel\z@
+    \global\c@parenlevel\z@
+  \else
+    \global\advance\blx@parenlevel\m@ne
+    \global\advance\c@parenlevel\m@ne
+  \fi}
+
+\def\blx@opencheck#1{%
+  \ifnum\numexpr\blx@parenlevel+\@ne
+    \ifnum\blx@parenlevel>\@m -1001\fi
+  >\c@maxparens
+    \blx@err@nestparen{\string#1}%
+    \blx@errormark
+  \fi}
+
+\def\blx@closecheck#1{%
+  \ifnum\numexpr\blx@parenlevel
+    \ifnum\blx@parenlevel>\@m -1001\fi
+  >\c@maxparens
+    \blx@err@nestparen{\string#1}%
+    \blx@errormark
+  \fi
+  \ifnum\blx@parenlevel<\@ne
+    \blx@err@matchparen{Unmatched \string#1}%
+    \blx@errormark
+  \fi}
+
+\protected\def\blx@errormark{%
+  \rule[0.25ex]{1.25ex}{1.25ex}}
+
+\AtEndDocument{%
+  \unless\ifnum\blx@parenlevel@text=\z@
+    \blx@err@matchparen{%
+      Unbalanced parentheses or brackets in the document body}%
+  \fi
+  \unless\ifnum\blx@parenlevel@foot=\z@
+    \blx@err@matchparen{%
+      Unbalanced parentheses or brackets in a foot or endnote}%
+  \fi}
+
+\newrobustcmd{\mkbibparens}[1]{%
+  \begingroup
+  \blx@blxinit
+  \blx@setsfcodes
+  \bibopenparen#1\bibcloseparen
+  \endgroup}
+
+\newrobustcmd{\mkbibbrackets}[1]{%
+  \begingroup
+  \blx@blxinit
+  \blx@setsfcodes
+  \bibopenbracket#1\bibclosebracket
+  \endgroup}
+
+\newrobustcmd*{\parentext}{\mkbibparens}
+\newrobustcmd*{\brackettext}{\mkbibbrackets}
+
+\newrobustcmd{\mkbibsuperscript}[1]{%
+  \unspace\allowhyphens\textsuperscript{%
+    \begingroup
+    \protected\long\def\mkbibsuperscript##1{%
+      \blx@warning{Nested superscript}%
+      \mkbibbrackets{##1}}%
+    #1\endgroup}}
+
+\newrobustcmd{\mkbibfootnote}{\blx@mkbibfootnote{}}
+\newrobustcmd{\mkbibfootnotetext}{\blx@mkbibfootnote{text}}
+\newrobustcmd{\blx@mkbibfootnote}[2]{%
+  \iftoggle{blx@footnote}
+    {\blx@warning{Nested notes}%
+     \addspace\mkbibparens{#2}}
+    {\unspace
+     \ifnum\blx@notetype=\tw@
+       \expandafter\@firstoftwo
+     \else
+       \expandafter\@secondoftwo
+     \fi
+       {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}
+       {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}}}
+
+\newrobustcmd{\mkbibendnote}{\blx@mkbibendnote{}}
+\newrobustcmd{\mkbibendnotetext}{\blx@mkbibendnote{text}}
+\newrobustcmd{\blx@mkbibendnote}[2]{%
+  \iftoggle{blx@footnote}
+    {\blx@warning{Nested notes}%
+     \addspace\mkbibparens{#2}}
+    {\unspace
+     \ifnum\blx@notetype=\@ne
+       \expandafter\@firstoftwo
+     \else
+       \expandafter\@secondoftwo
+     \fi
+       {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}
+       {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}}}
+
+\newrobustcmd{\blxmkbibnote}[2]{%
+  \begingroup
+  \blx@blxinit
+  \blx@setsfcodes
+  \blx@postpunct@agroup
+  \toggletrue{blx@footnote}%
+  \csuse{bib#1notewrapper}{#2}%
+  \endgroup}
+
+\newcommand{\bibfootnotewrapper}[1]{%
+  \bibsentence#1\addperiod}
+
+\newcommand{\bibendnotewrapper}[1]{%
+  \bibsentence#1\addperiod}
+
+\AtEndPreamble{%
+  \def\blx@theendnote{\blx@err@endnote\footnote}%
+  \def\blx@theendnotetext{\blx@err@endnote\footnotetext}%
+  \ifdef\endnote
+    {\def\blx@theendnote{\endnote}%
+     \ifdef\endnotetext
+       {\def\blx@theendnotetext{\endnotetext}}
+       {}}
+    {\ifdef\pagenote
+       {\def\blx@theendnote{\pagenote}%
+        \ifdef\pagenotetext
+          {\def\blx@theendnotetext{\pagenotetext}}
+          {}}
+       {}}}
+
+\newrobustcmd*{\mknumalph}[1]{%
+  \begingroup
+  \blx@tempcnta=#1\relax
+  \ifnum\blx@tempcnta>702 %
+  \else
+    \ifnum\blx@tempcnta>26 %
+      \advance\blx@tempcnta\m@ne
+      \divide\blx@tempcnta26\relax
+      \blx@numalph\blx@tempcnta
+      \multiply\blx@tempcnta26\relax
+      \blx@tempcnta=\numexpr#1-\blx@tempcnta\relax
+    \fi
+  \fi
+  \blx@numalph\blx@tempcnta
+  \endgroup}
+\def\blx@numalph#1{%
+  \ifcase#1\relax\blx@warning@entry{Value out of range}\number#1\or
+  a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or
+  n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else
+  \blx@warning@entry{Value out of range}\number#1\fi}
+
+\newrobustcmd*{\volcitecmd}[1]{%
+  \begingroup
+  \def\blx@tempa{\endgroup#1}%
+  \@ifstar
+    {\appto\blx@tempa{*}%
+     \blx@volcitecmd@i}
+    {\blx@volcitecmd@i}}
+
+\def\blx@volcitecmd@i{%
+  \@ifnextchar[%]
+    {\blx@volcitecmd@ii}
+    {\blx@volcitecmd@ii[]}}
+
+\def\blx@volcitecmd@ii[#1]#2{%
+  \appto\blx@tempa{[#1]}%
+  \blx@getformat\blx@tempb{ffd}{}{volcitevolume}%
+  \@ifnextchar[%]
+    {\blx@volcitecmd@iii{#2}}
+    {\edef\blx@tempa{\expandonce\blx@tempa[{%
+       \expandonce{\blx@tempb{#2}}}]}%
+     \blx@tempa}}
+
+\def\blx@volcitecmd@iii#1[#2]{%
+  \blx@getformat\blx@tempc{ffd}{}{volcitepages}%
+  \edef\blx@tempa{\expandonce\blx@tempa[{%
+    \expandonce{\blx@tempb{#1}}%
+    \noexpand\volcitedelim
+    \expandonce{\blx@tempc{#2}}}]}%
+  \blx@tempa}
+
+%% Control file
+
+\begingroup
+\let~\space
+\@makeother\<
+\@makeother\>
+\@makeother\.
+\@makeother\:
+\@makeother\?
+\@makeother\"
+\@makeother\-
+\@makeother\=
+\@makeother\/
+\xdef\blx@xml@file{%
+  \blx@sig@bcf\blx@nl
+  \blx@ver@bcf\blx@nl}
+\xdef\blx@xml@endfile{%
+  </bcf:controlfile>}
+\xdef\blx@xml@comment#1{%
+  ~~<!-- #1 -->\blx@nl}
+\xdef\blx@xml@options#1#2#3{%
+  ~~<bcf:options%
+    \noexpand\ifblank{#1}{}{ component="#1"}%
+    \noexpand\ifblank{#2}{}{ type="#2"}%
+  >\blx@nl
+  #3%
+  ~~</bcf:options>\blx@nl}
+\xdef\blx@xml@option#1#2{%
+  ~~~~<bcf:option type="#1">\blx@nl
+  #2%
+  ~~~~</bcf:option>\blx@nl}
+\xdef\blx@xml@ordered#1#2{%
+  ~~~~~~<bcf:value order="#1">#2</bcf:value>\blx@nl}
+
+\xdef\blx@xml@sourcemap#1{%
+  ~~<bcf:sourcemap>\blx@nl
+  #1%
+  ~~</bcf:sourcemap>\blx@nl}
+\xdef\blx@xml@sourcemap@maps#1#2{%
+  ~~~~<bcf:maps#1>\blx@nl
+  #2%
+  ~~~~</bcf:maps>\blx@nl}
+\xdef\blx@xml@sourcemap@map#1#2{%
+  ~~~~~~<bcf:map#1>\blx@nl
+  #2%
+  ~~~~~~</bcf:map>\blx@nl}
+\xdef\blx@xml@sourcemap@perdatasource#1{%
+  ~~~~~~~~<bcf:per_datasource>#1</bcf:per_datasource>\blx@nl}
+\xdef\blx@xml@sourcemap@pertype#1{%
+  ~~~~~~~~<bcf:per_type>#1</bcf:per_type>\blx@nl}
+\xdef\blx@xml@sourcemap@step#1{%
+  ~~~~~~~~<bcf:map_step#1/>\blx@nl}
+
+\xdef\blx@xml@displaymodes#1#2{%
+  ~~<bcf:displaymodes type="#1">\blx@nl
+  #2%
+  ~~</bcf:displaymodes>\blx@nl}
+\xdef\blx@xml@displaymode#1{%
+  ~~~~<bcf:displaymode>\blx@nl
+  #1%
+  ~~~~</bcf:displaymode>\blx@nl}
+\xdef\blx@xml@dtarget#1{%
+  ~~~~~~<bcf:dtarget>#1</bcf:dtarget>\blx@nl}
+\xdef\blx@xml@dmode#1#2{%
+  ~~~~~~<bcf:dmode order="#1">#2</bcf:dmode>\blx@nl}
+
+\xdef\blx@xml@labelalphatemplate#1#2{%
+  ~~<bcf:labelalphatemplate type="#1">\blx@nl
+  #2%
+  ~~</bcf:labelalphatemplate>\blx@nl}
+\xdef\blx@xml@labelalpha@element#1#2{%
+  ~~~~<bcf:labelelement order="#1">\blx@nl
+  #2%
+  ~~~~</bcf:labelelement>\blx@nl}
+\xdef\blx@xml@labelalpha@part#1#2{%
+  ~~~~~~<bcf:labelpart#1>#2</bcf:labelpart>\blx@nl}
+
+\xdef\blx@xml@inheritance#1{%
+  ~~<bcf:inheritance>\blx@nl
+  #1%
+  ~~</bcf:inheritance>\blx@nl}
+\xdef\blx@xml@inherit@defaults#1#2{%
+  ~~~~<bcf:defaults#1>\blx@nl
+  #2%
+  ~~~~</bcf:defaults>\blx@nl}
+\xdef\blx@xml@inherit@data#1{%
+  ~~~~<bcf:inherit>\blx@nl
+  #1%
+  ~~~~</bcf:inherit>\blx@nl}
+\xdef\blx@xml@inherit@type#1#2#3{%
+  ~~~~~~<bcf:type\string_pair source="#1" target="#2"#3/>\blx@nl}
+\xdef\blx@xml@inherit@field#1#2#3{%
+  ~~~~~~<bcf:field source="#1" target="#2"#3/>\blx@nl}
+\xdef\blx@xml@inherit@block#1{%
+  ~~~~~~<bcf:field source="#1" skip="true"/>\blx@nl}
+
+\xdef\blx@xml@nosorts#1{%
+  ~~<bcf:nosorts>\blx@nl
+  #1%
+  ~~</bcf:nosorts>\blx@nl}
+\xdef\blx@xml@nosort#1#2{%
+  ~~~~<bcf:nosort field="#1" value="#2"/>\blx@nl}
+
+\xdef\blx@xml@noinits#1{%
+  ~~<bcf:noinits>\blx@nl
+  #1%
+  ~~</bcf:noinits>\blx@nl}
+\xdef\blx@xml@noinit#1{%
+  ~~~~<bcf:noinit value="#1"/>\blx@nl}
+
+\xdef\blx@xml@sorting#1{%
+  ~~<bcf:sorting>\blx@nl
+  #1%
+  ~~</bcf:sorting>\blx@nl}
+\xdef\blx@xml@presort#1#2{%
+  ~~~~<bcf:presort\noexpand\ifblank{#1}{}{ type="#1"}>%
+  #2</bcf:presort>\blx@nl}
+
+\xdef\blx@xml@sortexclude#1#2{%
+  ~~~~<bcf:sortexclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl
+  #2%
+  ~~~~</bcf:sortexclusion>\blx@nl}
+\xdef\blx@xml@exclude#1{%
+  ~~~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl}
+\xdef\blx@xml@sort#1#2{%
+  ~~~~<bcf:sort #1>\blx@nl
+  #2%
+  ~~~~</bcf:sort>\blx@nl}
+\xdef\blx@xml@sortitem#1#2{%
+  ~~~~~~<bcf:sortitem #1>#2</bcf:sortitem>\blx@nl}
+\xdef\blx@xml@section#1{%
+  ~~<bcf:section number="#1">}
+\xdef\blx@xml@endsection{%
+  ~~</bcf:section>}
+
+\xdef\blx@xml@slist#1#2#3#4{%
+  ~~<bcf:sortlist section="#2" type="#1" label="#3">\blx@nl
+  #4%
+  ~~</bcf:sortlist>\blx@nl}
+\xdef\blx@xml@slistlos#1#2#3#4{%
+  ~~<bcf:sortlist section="#2" type="#1" label="#3">\blx@nl
+  ~~~~<bcf:filter type="field">shorthand</bcf:filter>\blx@nl
+  #4%
+  ~~</bcf:sortlist>\blx@nl}
+
+\xdef\blx@xml@bibdata#1#2{%
+  ~~<bcf:bibdata section="#1">\blx@nl
+  #2%
+  ~~</bcf:bibdata>\blx@nl}
+\xdef\blx@xml@datasource#1#2#3{%
+  ~~~~<bcf:datasource type="#1" datatype="#2">#3</bcf:datasource>\blx@nl}
+\xdef\blx@xml@citekey#1#2{%
+  ~~~~<bcf:citekey order="#2">#1</bcf:citekey>}
+\xdef\blx@xml@citeset#1#2{%
+  ~~~~<bcf:citekey type="set" members="#2">#1</bcf:citekey>}
+\xdef\blx@xml@svalue#1#2{%
+  \blx@xml@option{singlevalued}{%
+  ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
+  ~~~~~~<bcf:value>#2</bcf:value>\blx@nl}}
+\xdef\blx@xml@mvalue#1#2{%
+  \blx@xml@option{multivalued}{%
+  ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
+  #2}}
+\xdef\blx@xml@toggle#1{%
+  \blx@xml@svalue{#1}{\noexpand\iftoggle{blx@#1}{1}{0}}}
+\endgroup
+
+\def\blx@bcf@options@global{%
+  \blx@xml@comment{GLOBAL}%
+  \blx@xml@options{biblatex}{global}{%
+    \blx@xml@svalue{alphaothers}{\labelalphaothers}%
+    \blx@xml@toggle{labelalpha}%
+    \blx@xml@mvalue{labelnamespec}{\blx@bcf@labelnamespec}%
+    \blx@xml@toggle{labeltitle}%
+    \blx@xml@mvalue{labeltitlespec}{\blx@bcf@labeltitlespec}%
+    \blx@xml@toggle{labeltitleyear}%
+    \blx@xml@toggle{labelyear}%
+    \blx@xml@mvalue{labelyearspec}{\blx@bcf@labelyearspec}%
+    \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
+    \blx@xml@svalue{maxbibnames}{\blx@maxbibnames}%
+    \blx@xml@svalue{maxcitenames}{\blx@maxcitenames}%
+    \blx@xml@svalue{maxitems}{\blx@maxitems}%
+    \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
+    \blx@xml@svalue{minbibnames}{\blx@minbibnames}%
+    \blx@xml@svalue{mincitenames}{\blx@mincitenames}%
+    \blx@xml@svalue{minitems}{\blx@minitems}%
+    \blx@xml@toggle{singletitle}%
+    \blx@xml@svalue{sortalphaothers}{\sortalphaothers}%
+    \blx@xml@svalue{sortscheme}{\blx@sorting}%
+    \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
+    \blx@xml@svalue{uniquename}{\blx@uniquename}%
+    \blx@xml@toggle{useauthor}%
+    \blx@xml@toggle{useeditor}%
+    \blx@xml@toggle{useprefix}%
+    \blx@xml@toggle{usetranslator}%
+  }%
+}
+
+\def\blx@bcf@options@type#1{%
+  \blx@xml@comment{#1}%
+  \blx@xml@options{biblatex}{#1}{%
+    \blx@xml@toggle{labelalpha}%
+    \blx@xml@mvalue{labelnamespec}{%
+      \ifcsdef{blx@bcf@labelnamespec@#1}
+        {\csuse{blx@bcf@labelnamespec@#1}}
+        {\blx@bcf@labelnamespec}}%
+    \blx@xml@toggle{labeltitle}%
+    \blx@xml@mvalue{labeltitlespec}{%
+      \ifcsdef{blx@bcf@labeltitlespec@#1}
+        {\csuse{blx@bcf@labeltitlespec@#1}}
+        {\blx@bcf@labeltitlespec}}%
+    \blx@xml@toggle{labeltitleyear}%
+    \blx@xml@toggle{labelyear}%
+    \blx@xml@mvalue{labelyearspec}{%
+      \ifcsdef{blx@bcf@labelyearspec@#1}
+        {\csuse{blx@bcf@labelyearspec@#1}}
+        {\blx@bcf@labelyearspec}}%
+    \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
+    \blx@xml@svalue{maxbibnames}{\blx@maxbibnames@type}%
+    \blx@xml@svalue{maxcitenames}{\blx@maxcitenames@type}%
+    \blx@xml@svalue{maxitems}{\blx@maxitems@type}%
+    \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
+    \blx@xml@svalue{minbibnames}{\blx@minbibnames@type}%
+    \blx@xml@svalue{mincitenames}{\blx@mincitenames@type}%
+    \blx@xml@svalue{minitems}{\blx@minitems@type}%
+    \blx@xml@toggle{singletitle}%
+    \blx@xml@toggle{skipbib}%
+    \blx@xml@toggle{skiplab}%
+    \blx@xml@toggle{skiplos}%
+    \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
+    \blx@xml@svalue{uniquename}{\blx@uniquename}%
+    \blx@xml@toggle{useauthor}%
+    \blx@xml@toggle{useeditor}%
+    \blx@xml@toggle{useprefix}%
+    \blx@xml@toggle{usetranslator}%
+  }%
+}
+
+\def\blx@ctrlwrite@biber{%
+  \begingroup
+  \blx@safe@actives
+  \let\protect\string
+  % options
+  \edef\labelalphaothers{\labelalphaothers}%
+  \edef\sortalphaothers{\sortalphaothers}%
+  \blx@xmlsanitizeafter{\def\labelalphaothers}{\labelalphaothers}%
+  \blx@xmlsanitizeafter{\def\sortalphaothers}{\sortalphaothers}%
+  \edef\blx@tempa{%
+    \blx@xml@file
+    \blx@xml@comment{BIBER OPTIONS}%
+    \blx@xml@options{biber}{global}{%
+      \blx@xml@svalue{bblencoding}{\blx@texencoding}%
+      \blx@xml@svalue{bibencoding}{\blx@bibencoding}%
+      \blx@xml@toggle{debug}%
+      \blx@xml@svalue{mincrossrefs}{\blx@mincrossrefs}%
+      \blx@xml@toggle{sortcase}%
+      \blx@xml@toggle{sortfirstinits}%
+      \ifdef\blx@sortlocale
+        {\blx@xml@svalue{sortlocale}{\blx@sortlocale}}
+        {}%
+      \blx@xml@toggle{sortupper}%
+    }%
+    \blx@xml@comment{BIBLATEX OPTIONS}%
+    \blx@bcf@options@global
+  }%
+  \ifdef\blx@opts@type
+    {\def\do##1{%
+       \begingroup
+       \blx@setoptions@type{##1}%
+       \begingroup
+       \let\protect\relax
+       \blx@checkoptions@type
+       \endgroup
+       \xappto\blx@tempa{\blx@bcf@options@type{##1}}%
+       \endgroup}%
+     \dolistloop\blx@opts@type}
+    {}%
+  % displaymode
+  \eappto\blx@tempa{%
+    \blx@xml@comment{DISPLAYMODES}%
+    \blx@xml@displaymodes{global}{%
+      \csuse{blx@biber@displaymodes@global}%
+    }%
+  }%
+  % sourcemap
+  \ifbool{sourcemap}
+    {\eappto\blx@tempa{%
+      \blx@xml@comment{SOURCEMAP}%
+      \blx@xml@sourcemap{%
+        \ifcsdef{blx@biber@sourcemap@user}{\csuse{blx@biber@sourcemap@user}}{}%
+        \ifcsdef{blx@biber@sourcemap@defaults@bibtex}{\csuse{blx@biber@sourcemap@defaults@bibtex}}{}%
+        \ifcsdef{blx@biber@sourcemap@defaults@biblatexml}{\csuse{blx@biber@sourcemap@defaults@biblatexml}}{}%
+        \ifcsdef{blx@biber@sourcemap@defaults@endnotexml}{\csuse{blx@biber@sourcemap@defaults@endnotexml}}{}%
+        \ifcsdef{blx@biber@sourcemap@defaults@ris}{\csuse{blx@biber@sourcemap@defaults@ris}}{}%
+        \ifcsdef{blx@biber@sourcemap@defaults@zoterordfxml}{\csuse{blx@biber@sourcemap@defaults@zoterordfxml}}{}%
+      }%
+    }}
+    {}%
+  % labelalpha template
+  \eappto\blx@tempa{%
+    \blx@xml@comment{LABELALPHA TEMPLATE}}%
+  \def\do##1{%
+    \eappto\blx@tempa{%
+      \blx@xml@labelalphatemplate{##1}{%
+      \csuse{blx@biber@labelalphatemplate@##1}}%
+      }%
+    }%
+  \dolistloop\blx@biber@latem@type
+  % data inheritance
+  \eappto\blx@tempa{%
+    \blx@xml@comment{INHERITANCE}%
+    \blx@xml@inheritance{%
+      \csuse{blx@biber@inherit@default}%
+      \csuse{blx@biber@inherit@data}%
+    }%
+  }%
+  % noinit
+  \ifcsdef{blx@biber@noinit}
+    {\eappto\blx@tempa{%
+      \blx@xml@comment{NOINIT}%
+      \blx@xml@noinits{%
+        \csuse{blx@biber@noinit}%
+      }%
+    }}
+    {}%
+  % nosort
+  \ifcsdef{blx@biber@nosort}
+    {\eappto\blx@tempa{%
+      \blx@xml@comment{NOSORT}%
+      \blx@xml@nosorts{%
+        \csuse{blx@biber@nosort}%
+      }%
+    }}
+    {}%
+  % sorting
+  \def\do##1{%
+    \eappto\blx@bcf@presort{\csuse{blx@bcf@presort@##1}}%
+    \eappto\blx@bcf@exclude{\csuse{blx@bcf@exclude@##1}}}%
+  \dolistcsloop{blx@biber@datamodel@entrytypes}%
+  \eappto\blx@tempa{%
+    \blx@xml@comment{SORTING}%
+    \blx@xml@sorting{%
+      \blx@bcf@presort
+      \blx@bcf@exclude
+      \csuse{blx@biber@sorting@\blx@sorting}%
+    }%
+  }%
+  % datamodel
+  \eappto\blx@tempa{%
+    \blx@xml@comment{DATA MODEL}%
+    \blx@xml@datamodel{%
+      \blx@xml@datamodel@entrytypes{%
+        \blx@bcf@datamodel@entrytypes
+      }%
+      \blx@xml@datamodel@fields{%
+        \blx@bcf@datamodel@fields
+      }%
+      \blx@bcf@datamodel@entryfields
+      \blx@bcf@datamodel@constraints
+    }%
+  }%
+  % files
+  \let\blx@tempb\@empty
+  \blx@bibdata\blx@tempb\blx@bibfiles
+  \eappto\blx@tempa{%
+    \blx@xml@comment{CITATION DATA}%
+    \blx@xml@comment{SECTION 0}%
+    \blx@xml@bibdata{0}{\blx@tempb}%
+    \blx@xml@section{0}%
+  }%
+  \immediate\openout\blx@bcfout\jobname.bcf\relax
+  \blx@auxwrite\blx@bcfout{}{\blx@tempa}%
+  \global\undef\blx@tempa
+  \endgroup
+  \AfterEndDocument{%
+    \blx@auxwrite\blx@bcfout{}{%
+      \blx@xml@endsection\blx@nl
+      \csuse{blx@xml@slistsbib}%
+      \blx@xml@endfile}%
+    \immediate\closeout\blx@bcfout}}
+
+%% Customisation
+
+% nosort
+\newrobustcmd*{\DeclareNosort}[1]{%
+  \begingroup
+  \let\nosort\blx@nosort
+  \let\blx@tempa\@empty
+  #1%
+  \global\cslet{blx@biber@nosort}\blx@tempa
+  \endgroup}
+\@onlypreamble\DeclareNosort
+
+\newcommand*{\blx@nosort}[2]{%
+  \eappto\blx@tempa{%
+    \blx@xml@nosort{#1}{#2}}}
+
+% noinit
+\newrobustcmd*{\DeclareNoinit}[1]{%
+  \begingroup
+  \let\noinit\blx@noinit
+  \let\blx@tempa\@empty
+  #1%
+  \global\cslet{blx@biber@noinit}\blx@tempa
+  \endgroup}
+\@onlypreamble\DeclareNoinit
+
+\newcommand*{\blx@noinit}[1]{%
+  \eappto\blx@tempa{%
+    \blx@xml@noinit{#1}}}
+
+% sourcemap
+\newrobustcmd*{\DeclareSourcemap}[1]{%
+  \booltrue{sourcemap}%
+  \begingroup
+  \let\maps\blx@sourcemap@maps
+  \let\blx@tempa\@empty
+  #1%
+  \csxdef{blx@biber@sourcemap@user}{\blx@tempa}%
+  \endgroup}
+\@onlypreamble\DeclareSourcemap
+
+\newrobustcmd*{\DeclareDefaultSourcemap}[2][]{%
+  \booltrue{sourcemap}%
+  \begingroup
+  \let\blx@tempa\@empty
+  \let\blx@tempb\@empty
+  \let\blx@tempc\@empty
+  \let\blx@tempd\@empty
+  \let\map\blx@sourcemap@map
+  #2%
+  \ifblank{#1}
+    {\setkeys{blx@sourcemap@maps}{datatype=bibtex, defaults=true}}
+    {\setkeys{blx@sourcemap@maps}{#1, defaults=true}}%
+  \eappto\blx@tempa{%
+    \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}%
+  \csxdef{blx@biber@sourcemap@defaults@\blx@tempd}{\blx@tempa}%
+  \endgroup}
+\@onlypreamble\DeclareDefaultSourcemap
+
+\newcommand*{\blx@sourcemap@maps}[2][]{%
+  \let\blx@tempb\@empty
+  \let\blx@tempc\@empty
+  \let\map\blx@sourcemap@map
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@sourcemap@maps}{#1}}%
+  #2%
+  \eappto\blx@tempa{%
+    \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}}
+
+\define@key{blx@sourcemap@maps}{datatype}{% characters
+  \eappto\blx@tempb{ datatype="#1"}%
+  \eappto\blx@tempd{#1}}
+\define@key{blx@sourcemap@maps}{overwrite}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempb{ map\string_overwrite="1"}}
+    {}}
+\define@key{blx@sourcemap@maps}{defaults}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempb{ driver\string_defaults="1"}}
+    {}}
+
+\newcommand*{\blx@sourcemap@map}[2][]{%
+  \let\blx@tempd\@empty
+  \let\blx@tempe\@empty
+  \let\perdatasource\blx@sourcemap@perdatasource
+  \let\pertype\blx@sourcemap@pertype
+  \let\step\blx@sourcemap@step
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@sourcemap@map}{#1}}%
+  #2%
+  \eappto\blx@tempc{%
+    \blx@xml@sourcemap@map{\blx@tempd}{\blx@tempe}}}
+
+\define@key{blx@sourcemap@map}{overwrite}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempd{ map\string_overwrite="1"}}
+    {}}
+
+\newcommand*{\blx@sourcemap@perdatasource}[1]{%
+  \eappto\blx@tempe{%
+    \blx@xml@sourcemap@perdatasource{#1}}}
+
+\newcommand*{\blx@sourcemap@pertype}[1]{%
+  \eappto\blx@tempe{%
+    \blx@xml@sourcemap@pertype{#1}}}
+
+\newcommand*{\blx@sourcemap@step}[1][2]{%
+  \let\blx@tempf\@empty
+  \setkeys{blx@sourcemap@step}{#1}%
+  \eappto\blx@tempe{%
+    \blx@xml@sourcemap@step{\blx@tempf}}}
+
+\define@key{blx@sourcemap@step}{typesource}{% characters
+  \eappto\blx@tempf{ map\string_type\string_source="#1"}}
+\define@key{blx@sourcemap@step}{typetarget}{% characters
+  \eappto\blx@tempf{ map\string_type\string_target="#1"}}
+\define@key{blx@sourcemap@step}{final}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempf{ map\string_final="1"}}
+    {}}
+\define@key{blx@sourcemap@step}{fieldsource}{% characters
+  \eappto\blx@tempf{ map\string_field\string_source="#1"}}
+\define@key{blx@sourcemap@step}{fieldtarget}{% characters
+  \eappto\blx@tempf{ map\string_field\string_target="#1"}}
+\define@key{blx@sourcemap@step}{fieldset}{% characters
+  \eappto\blx@tempf{ map\string_field\string_set="#1"}}
+\define@key{blx@sourcemap@step}{fieldvalue}{% characters
+  \eappto\blx@tempf{ map\string_field\string_value="#1"}}
+\define@key{blx@sourcemap@step}{null}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempf{ map\string_null="1"}}
+    {}}
+\define@key{blx@sourcemap@step}{origfield}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempf{ map\string_origfield="1"}}
+    {}}
+\define@key{blx@sourcemap@step}{origfieldval}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempf{ map\string_origfieldval="1"}}
+    {}}
+\define@key{blx@sourcemap@step}{origentrytype}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempf{ map\string_origentrytype="1"}}
+    {}}
+\define@key{blx@sourcemap@step}{match}{% characters
+  \appto\blx@tempf{ map\string_match="#1"}}
+\define@key{blx@sourcemap@step}{replace}{% characters
+  \eappto\blx@tempf{ map\string_replace="#1"}}
+
+%%%
+
+\newrobustcmd*{\DeclareLabelalphaTemplate}[2][]{%
+   \ifblank{#1}
+    {\blx@biber@latem{#2}{global}}
+    {\forcsvlist{\blx@biber@latem{#2}}{#1}}}
+\@onlypreamble\DeclareLabelalphaTemplate
+
+\def\blx@biber@latem#1#2{%
+  \begingroup
+  \let\labelelement\blx@latem@element
+  \let\field\blx@latem@field
+  \let\literal\blx@latem@literal
+  \blx@tempcnta\z@
+  \let\blx@tempa\@empty
+  #1%
+  \ifdef\blx@biber@latem@type
+    {\ifinlist{#2}{\blx@biber@latem@type}
+      {\global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa}
+      {\listgadd\blx@biber@latem@type{#2}%
+       \global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa}}%
+    {\listgadd\blx@biber@latem@type{#2}%
+     \global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa}%
+  \endgroup}
+
+\newcommand{\blx@latem@element}[1]{%
+  \advance\blx@tempcnta\@ne
+  \let\blx@tempb\@empty
+  #1%
+  \eappto\blx@tempa{%
+    \blx@xml@labelalpha@element{\the\blx@tempcnta}{\blx@tempb}}}
+
+\newcommand*{\blx@latem@literal}[1]{%
+  \eappto\blx@tempb{%
+    \blx@xml@labelalpha@part{}{#1}}}
+
+\newcommand*{\blx@latem@field}[2][]{%
+  \let\blx@tempc\@empty
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@latem@field}{#1}}%
+  \eappto\blx@tempb{%
+    \blx@xml@labelalpha@part{\blx@tempc}{#2}}}
+
+\define@key{blx@latem@field}{uppercase}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ uppercase="1"}}
+    {}}
+\define@key{blx@latem@field}{lowercase}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ lowercase="1"}}
+    {}}
+\define@key{blx@latem@field}{final}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ final="1"}}
+    {}}
+\define@key{blx@latem@field}{strwidth}{% integer
+    \eappto\blx@tempc{ substring\string_width="#1"}}
+\define@key{blx@latem@field}{varwidth}[true]{% "v"
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ substring\string_width="v"}}
+    {}}
+\define@key{blx@latem@field}{varwidthnorm}[true]{% "vf"
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ substring\string_width="vf"}}
+    {}}
+\define@key{blx@latem@field}{varwidthlist}[true]{% "l"
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ substring\string_width="l"}}
+    {}}
+\define@key{blx@latem@field}{strfixedcount}{%
+    \eappto\blx@tempc{ substring\string_fixed\string_threshold="#1"}}
+\define@key{blx@latem@field}{strwidthmax}{%
+    \eappto\blx@tempc{ substring\string_width\string_max="#1"}}
+\define@key{blx@latem@field}{strside}{% left|right
+  \ifstrequal{#1}{right}
+    {\eappto\blx@tempc{ substring\string_side="right"}}
+    {\eappto\blx@tempc{ substring\string_side="left"}}}
+\define@key{blx@latem@field}{compound}[false]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ substring\string_compound="1"}}
+    {}}
+\define@key{blx@latem@field}{ifnames}{%
+    \eappto\blx@tempc{ ifnamecount="#1"}}
+\define@key{blx@latem@field}{names}{%
+    \eappto\blx@tempc{ namecount="#1"}}
+
+% [<exceptions>]{<options>}
+
+\newrobustcmd*{\DefaultInheritance}[2][]{%
+  \begingroup
+  \ifblank{#2}
+    {}
+    {\setkeys{blx@inherit@default}{#2}}%
+  \edef\blx@tempa{\space
+    inherit\string_all="\iftoggle{blx@inherit@all}{true}{false}"\space
+    override\string_target="\iftoggle{blx@inherit@override}{true}{false}"}%
+  \let\blx@tempb\@empty
+  \let\except\blx@inherit@except
+  #1%
+  \xdef\blx@biber@inherit@default{%
+    \blx@xml@inherit@defaults{\blx@tempa}{\blx@tempb}}%
+  \endgroup}
+\@onlypreamble\DefaultInheritance
+
+\newtoggle{blx@inherit@all}
+\newtoggle{blx@inherit@override}
+
+\define@key{blx@inherit@default}{all}[true]{% true|false
+  \settoggle{blx@inherit@all}{#1}}
+\define@key{blx@inherit@default}{override}[true]{% true|false
+  \settoggle{blx@inherit@override}{#1}}
+
+% {<source>}{<target>}{<options>}
+
+\newcommand{\blx@inherit@except}[3]{%
+  \let\blx@tempc\@empty
+  \ifblank{#3}
+    {}
+    {\setkeys{blx@inherit@except}{#3}}%
+  \eappto\blx@tempb{%
+    \blx@xml@inherit@type{#1}{#2}{\blx@tempc}}}
+
+\define@key{blx@inherit@except}{all}[true]{% true|false
+  \eappto\blx@tempc{ inherit\string_all="#1"}}
+\define@key{blx@inherit@except}{override}[true]{% true|false
+  \eappto\blx@tempc{ override\string_target="#1"}}
+
+% {<type,type,...>}{<type,type,...>}{<spec>}
+
+\newrobustcmd*{\DeclareDataInheritance}[3]{%
+  \begingroup
+  \let\blx@tempa\@empty
+  \forcsvlist{\blx@inherit@i{#2}}{#1}%
+  \let\blx@tempb\@empty
+  \let\inherit\blx@inherit@field
+  \let\noinherit\blx@inherit@block
+  #3%
+  \xappto\blx@biber@inherit@data{%
+    \blx@xml@inherit@data{%
+      \blx@tempa
+      \blx@tempb}}%
+  \endgroup}
+\@onlypreamble\DeclareDataInheritance
+
+\def\blx@inherit@i#1#2{%
+  \forcsvlist{\blx@inherit@ii{#2}}{#1}}
+
+\def\blx@inherit@ii#1#2{%
+  \eappto\blx@tempa{\blx@xml@inherit@type{#1}{#2}{}}}
+
+% [<options>]{<source>}{<target>}
+
+\newcommand{\blx@inherit@field}[3][]{%
+  \let\blx@tempc\@empty
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@inherit@field}{#1}}%
+  \eappto\blx@tempb{%
+    \blx@xml@inherit@field{#2}{#3}{\blx@tempc}}}
+
+\newcommand{\blx@inherit@block}[1]{%
+  \eappto\blx@tempb{\blx@xml@inherit@block{#1}}}
+
+\define@key{blx@inherit@field}{override}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\edef\blx@tempc{ override\string_target="true"}}
+    {\edef\blx@tempc{ override\string_target="false"}}}
+
+\newrobustcmd*{\ResetDataInheritance}{%
+  \global\csundef{blx@biber@inherit@data}}
+\@onlypreamble\ResetDataInheritance
+
+% {<name>}{<spec>}
+
+\newrobustcmd*{\DeclareSortingScheme}[2]{%
+  \begingroup
+  \let\sort\blx@sortdef@sort
+  \let\name\blx@sortdef@field% legacy pre-biblatex 2.0 compat
+  \let\list\blx@sortdef@field% legacy pre-biblatex 2.0 compat
+  \let\field\blx@sortdef@field
+  \let\literal\blx@sortdef@literal
+  \def\citeorder{\blx@sortdef@field{citeorder}}%
+  \blx@tempcnta\z@
+  \let\blx@tempa\@empty
+  #2%
+  \global\cslet{blx@biber@sorting@#1}\blx@tempa
+  \endgroup}
+\@onlypreamble\DeclareSortingScheme
+
+\newcommand{\blx@sortdef@sort}[2][]{%
+  \advance\blx@tempcnta\@ne
+  \blx@tempcntb\z@
+  \let\blx@tempb\@empty
+  \edef\blx@tempc{order="\the\blx@tempcnta"}%
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@sortdef@sort}{#1}}%
+  \let\do\@firstofone
+  #2%
+  \eappto\blx@tempa{%
+    \blx@xml@sort{\blx@tempc}{\blx@tempb}}}
+
+\define@key{blx@sortdef@sort}{direction}{% ascending|descending
+  \ifstrequal{#1}{ascending}
+    {\eappto\blx@tempc{ sort\string_direction="ascending"}}
+    {\eappto\blx@tempc{ sort\string_direction="descending"}}}
+\define@key{blx@sortdef@sort}{final}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ final="1"}}
+    {}}
+\define@key{blx@sortdef@sort}{sortcase}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ sortcase="1"}}
+    {\appto\blx@tempc{ sortcase="0"}}}
+\define@key{blx@sortdef@sort}{sortupper}[true]{% true|false
+  \ifstrequal{#1}{true}
+    {\appto\blx@tempc{ sortupper="1"}}
+    {\appto\blx@tempc{ sortupper="0"}}}
+
+\newcommand*{\blx@sortdef@field}[2][]{%
+  \advance\blx@tempcntb\@ne
+  \edef\blx@tempd{order="\the\blx@tempcntb"}%
+  \ifblank{#1}
+    {}
+    {\setkeys{blx@sortdef@field}{#1}}%
+  \eappto\blx@tempb{%
+    \blx@xml@sortitem{\blx@tempd}{#2}}}
+
+\define@key{blx@sortdef@field}{padside}{% left|right
+  \ifstrequal{#1}{right}
+    {\eappto\blx@tempd{ pad\string_side="right"}}
+    {\eappto\blx@tempd{ pad\string_side="left"}}}
+\define@key{blx@sortdef@field}{padwidth}{% integer
+  \eappto\blx@tempd{ pad\string_width="#1"}}
+\define@key{blx@sortdef@field}{padchar}{% character
+  \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
+  \eappto\blx@tempd{ pad\string_char="\blx@tempe"}}
+\define@key{blx@sortdef@field}{strside}{% left|right
+  \ifstrequal{#1}{right}
+    {\eappto\blx@tempd{ substring\string_side="right"}}
+    {\eappto\blx@tempd{ substring\string_side="left"}}}
+\define@key{blx@sortdef@field}{strwidth}{% integer
+  \eappto\blx@tempd{ substring\string_width="#1"}}
+
+\def\blx@sortdef@literal#1{%
+  \advance\blx@tempcntb\@ne
+  \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
+  \eappto\blx@tempb{%
+    \blx@xml@sortitem{order="\the\blx@tempcntb"}{\blx@tempe}}}
+
+% [<type,type,...>]{<string>}
+
+\newrobustcmd*{\DeclarePresort}[2][]{%
+  \begingroup
+  \blx@xmlsanitizeafter{\def\blx@tempa}{#2}%
+  \ifblank{#1}
+    {\xdef\blx@bcf@presort{\blx@xml@presort{}{\blx@tempa}}}
+    {\notblank{#2}
+       {\forcsvlist{\blx@defpresort\blx@tempa}{#1}}
+       {\forcsvlist\blx@undefpresort{#1}}}%
+  \endgroup}
+\@onlypreamble\DeclarePresort
+
+\def\blx@defpresort#1#2{%
+  \csxdef{blx@bcf@presort@#2}{\blx@xml@presort{#2}{#1}}}
+\def\blx@undefpresort#1{%
+  \global\csundef{blx@bcf@presort@#1}}
+
+\newrobustcmd*{\DeclareSortExclusion}[2]{%
+  \forcsvlist{\blx@sortexlude{#2}}{#1}}
+
+\def\blx@sortexlude#1#2{%
+  \begingroup
+  \ifblank{#1}
+    {\global\csundef{blx@bcf@exclude@#2}}
+    {\let\blx@tempa\@empty
+     \forcsvlist\blx@sortexlude@i{#1}%
+     \csxdef{blx@bcf@exclude@#2}{%
+       \blx@xml@sortexclude{#2}{\blx@tempa}}}
+  \endgroup}
+
+\def\blx@sortexlude@i#1{%
+  \appto\blx@tempa{\blx@xml@exclude{#1}}}
+
+% [<type,type,...>]{<field,field,...>}
+
+\newrobustcmd*{\DeclareLabelname}[2][]{%
+  \blx@defmvalue{labelnamespec}{#1}{#2}}
+\@onlypreamble\DeclareLabelname
+
+\newrobustcmd*{\DeclareLabeltitle}[2][]{%
+  \blx@defmvalue{labeltitlespec}{#1}{#2}}
+\@onlypreamble\DeclareLabeltitle
+
+\newrobustcmd*{\DeclareLabelyear}[2][]{%
+  \blx@defmvalue{labelyearspec}{#1}{#2}}
+\@onlypreamble\DeclareLabelyear
+
+\def\blx@defmvalue#1#2#3{%
+  \ifblank{#2}
+    {\expandafter\blx@defmvalue@ii\csname blx@bcf@#1\endcsname{#3}}
+    {\forcsvlist{\blx@defmvalue@i{#1}{#3}}{#2}}}
+
+\def\blx@defmvalue@i#1#2#3{%
+  \blx@addtypeopt{#3}%
+  \expandafter\blx@defmvalue@ii\csname blx@bcf@#1@#3\endcsname{#2}}
+
+\def\blx@defmvalue@ii#1#2{%
+  \begingroup
+  \global\let#1\@empty
+  \blx@tempcnta\z@
+  \def\do##1{%
+    \advance\blx@tempcnta\@ne
+    \xappto#1{\noexpand\blx@xml@ordered{\the\blx@tempcnta}{##1}}}%
+  \docsvlist{#2}%
+  \endgroup}
+
+% experimental
+
+\newrobustcmd*{\DeclareDisplaymode}[2][global]{%
+  \begingroup
+  \blx@tempcnta\z@
+  \def\blx@tempa{\blx@xml@dtarget{*}}%
+  \forcsvlist\blx@defdisplaymode{#2}%
+  \csxdef{blx@biber@displaymodes@#1}{%
+    \blx@xml@displaymode{\blx@tempa}}%
+  \endgroup}
+
+\def\blx@defdisplaymode#1{%
+  \advance\blx@tempcnta\@ne
+  \edef\blx@tempa{%
+    \blx@tempa
+    \blx@xml@dmode{\the\blx@tempcnta}{#1}}}
+
+\DeclareDisplaymode{original,romanised,uniform,translated}
+
+%% Package options
+
+% [<entrytype,entrytype,...>]{<options>}
+
+\newrobustcmd*{\ExecuteBibliographyOptions}[2][]{%
+  \ifblank{#1}
+    {\setkeys{blx@opt@pre}{#2}}
+    {\forcsvlist{\blx@typeoptions{#2}}{#1}}}
+\@onlypreamble\ExecuteBibliographyOptions
+
+\def\blx@typeoptions#1#2{%
+  \blx@addtypeopt{#2}%
+  \csappto{blx@opts@type@#2}{#1}}
+
+\def\blx@addtypeopt#1{%
+  \notblank{#1}
+    {\ifdef\blx@opts@type
+       {\ifinlist{#1}{\blx@opts@type}
+          {}
+          {\listadd\blx@opts@type{#1}}}
+       {\listadd\blx@opts@type{#1}}}
+    {}}
+
+% load-time only
+
+% Have to have a dummy for this as it's set much earlier but is passed
+% through to here where we just ignore it
+\define@key{blx@opt@ldt}{datamodel}{}
+
+\define@key{blx@opt@ldt}{style}{%
+  \def\blx@cbxfile{#1}%
+  \def\blx@bbxfile{#1}}
+
+\define@key{blx@opt@ldt}{bibstyle}{%
+  \def\blx@bbxfile{#1}}
+
+\define@key{blx@opt@ldt}{citestyle}{%
+  \def\blx@cbxfile{#1}}
+
+\define@key{blx@opt@ldt}{natbib}[true]{%
+  \settoggle{blx@natbib}{#1}}
+
+\define@key{blx@opt@ldt}{mcite}[true]{%
+  \settoggle{blx@mcite}{#1}}
+
+% load-time and preamble
+
+\DeclareBibliographyOption{backend}{
+  \blx@error
+    {'backend' is load-time only option}
+    {The 'backend' option is load-time only and cannot
+      be\MessageBreak set after package loading}}
+
+\DeclareBibliographyOption{debug}[true]{%
+  \settoggle{blx@debug}{#1}}
+
+\DeclareBibliographyOption{loadfiles}[true]{%
+  \settoggle{blx@loadfiles}{#1}}
+
+\DeclareBibliographyOption{mincrossrefs}{%
+  \ifnum#1<\z@
+    \def\blx@mincrossrefs{1}%
+    \def\blx@minxrefs{1}%
+  \else
+    \def\blx@mincrossrefs{#1}%
+    \def\blx@minxrefs{#1}%
+  \fi}
+\def\blx@minxrefs{2}
+
+\DeclareBibliographyOption{texencoding}{%
+  \ifstrequal{#1}{auto}
+    {\undef\blx@texencoding}
+    {\def\blx@texencoding{#1}}}
+
+\DeclareBibliographyOption{bibencoding}{%
+  \ifcsdef{blx@bibenc@#1}
+    {\letcs\blx@bibencoding{blx@bibenc@#1}}
+    {\def\blx@bibencoding{#1}}}
+
+\def\abx@mapbibenc#1#2{\csdef{blx@bibenc@#1}{#2}}
+\abx@mapbibenc{inputenc}{auto}
+\abx@mapbibenc{x-ascii}{ascii}
+
+\def\abx@mapinpenc#1#2{\csdef{blx@inpenc@#1}{#2}}
+\abx@mapinpenc{utf8x}{utf8}
+\abx@mapinpenc{lutf8}{utf8}
+\abx@mapinpenc{x-ascii}{ascii}
+
+\DeclareBibliographyOption{safeinputenc}[true]{%
+  \settoggle{blx@safeinputenc}{#1}}
+\newtoggle{blx@safeinputenc}
+
+\DeclareBibliographyOption{sorting}{%
+  \def\blx@sorting{#1}}
+
+\AtEndPreamble{%
+  \ifcsdef{blx@biber@sorting@\blx@sorting}
+    {}
+    {\blx@err@invopt{sorting=\blx@sorting}{}%
+     \def\blx@sorting{nty}}}
+
+\DeclareBibliographyOption{sortcase}[true]{%
+  \settoggle{blx@sortcase}{#1}}
+
+\DeclareBibliographyOption{sortupper}[true]{%
+  \settoggle{blx@sortupper}{#1}}
+
+\DeclareBibliographyOption{sortlocale}{%
+  \ifblank{#1}
+    {\undef\blx@sortlocale}
+    {\edef\blx@sortlocale{\detokenize{#1}}}}
+
+\DeclareBibliographyOption{sortlos}{%
+  \blx@warning@noline{%
+    sortlos option is deprecated, use 'sorting' option to \string\printshorthands}}
+
+\DeclareBibliographyOption{maxnames}{%
+  \numdef\blx@maxcitenames{#1}%
+  \numdef\blx@maxbibnames{#1}}
+\DeclareBibliographyOption{minnames}{%
+  \numdef\blx@mincitenames{#1}%
+  \numdef\blx@minbibnames{#1}}
+\DeclareTypeOption{maxnames}{%
+  \numdef\blx@maxcitenames@type{#1}%
+  \numdef\blx@maxbibnames@type{#1}%
+  \c@maxnames#1\relax}
+\DeclareTypeOption{minnames}{%
+  \numdef\blx@mincitenames@type{#1}%
+  \numdef\blx@minbibnames@type{#1}%
+  \c@minnames#1\relax}
+\DeclareEntryOption{maxnames}{%
+  \c@maxnames#1\relax}
+\DeclareEntryOption{minnames}{%
+  \c@minnames#1\relax}
+
+\DeclareBibliographyOption{maxbibnames}{%
+  \numdef\blx@maxbibnames{#1}}
+\DeclareBibliographyOption{minbibnames}{%
+  \numdef\blx@minbibnames{#1}}
+\DeclareTypeOption{maxbibnames}{%
+  \numdef\blx@maxbibnames@type{#1}%
+  \iftoggle{blx@bibliography}
+    {\c@maxnames#1\relax}
+    {}}
+\DeclareTypeOption{minbibnames}{%
+  \numdef\blx@minbibnames@type{#1}%
+  \iftoggle{blx@bibliography}
+    {\c@minnames#1\relax}
+    {}}
+\DeclareEntryOption{maxbibnames}{%
+  \iftoggle{blx@bibliography}
+    {\c@maxnames#1\relax}
+    {}}
+\DeclareEntryOption{minbibnames}{%
+  \iftoggle{blx@bibliography}
+    {\c@minnames#1\relax}
+    {}}
+
+\DeclareBibliographyOption{maxcitenames}{%
+  \numdef\blx@maxcitenames{#1}}
+\DeclareBibliographyOption{mincitenames}{%
+  \numdef\blx@minbibnames{#1}}
+\DeclareTypeOption{maxcitenames}{%
+  \numdef\blx@maxcitenames@type{#1}%
+  \iftoggle{blx@bibliography}
+    {}
+    {\c@maxnames#1\relax}}
+\DeclareTypeOption{mincitenames}{%
+  \numdef\blx@minbibnames@type{#1}%
+  \iftoggle{blx@bibliography}
+    {}
+    {\c@minnames#1\relax}}
+\DeclareEntryOption{maxcitenames}{%
+  \iftoggle{blx@bibliography}
+    {}
+    {\c@maxnames#1\relax}}
+\DeclareEntryOption{mincitenames}{%
+  \iftoggle{blx@bibliography}
+    {}
+    {\c@minnames#1\relax}}
+
+\appto\blx@checkoptions@global{%
+  \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames\blx@minbibnames
+  \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames\blx@mincitenames}
+\appto\blx@checkoptions@type{%
+  \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames@type\blx@minbibnames@type
+  \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames@type\blx@mincitenames@type}
+\appto\blx@checkoptions@entry{%
+  \blx@maxmin@cnt{maxnames}{minnames}\c@maxnames\c@minnames}
+
+\DeclareBibliographyOption{maxitems}{%
+  \numdef\blx@maxitems{#1}}
+\DeclareBibliographyOption{minitems}{%
+  \numdef\blx@minitems{#1}}
+\DeclareTypeOption{maxitems}{%
+  \numdef\blx@maxitems@type{#1}%
+  \c@maxitems#1\relax}
+\DeclareTypeOption{minitems}{%
+  \numdef\blx@minitems@type{#1}%
+  \c@minitems#1\relax}
+\DeclareEntryOption{maxitems}{%
+  \c@maxitems#1\relax}
+\DeclareEntryOption{minitems}{%
+  \c@minitems#1\relax}
+
+\appto\blx@checkoptions@global{%
+  \blx@maxmin@num{maxitems}{minitems}\blx@maxitems\blx@minitems}
+\appto\blx@checkoptions@type{%
+  \blx@maxmin@num{maxitems}{minitems}\blx@maxitems@type\blx@minitems@type}
+\appto\blx@checkoptions@entry{%
+  \blx@maxmin@cnt{maxitems}{minitems}\c@maxitems\blx@minitems}
+
+\DeclareBibliographyOption{maxalphanames}{%
+  \numdef\blx@maxalphanames{#1}}
+\DeclareBibliographyOption{minalphanames}{%
+  \numdef\blx@minalphanames{#1}}
+\DeclareTypeOption{maxalphanames}{%
+  \numdef\blx@maxalphanames{#1}}
+\DeclareTypeOption{minalphanames}{%
+  \numdef\blx@minalphanames{#1}}
+
+\appto\blx@checkoptions@global{%
+  \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
+\appto\blx@checkoptions@type{%
+  \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
+
+\def\blx@maxmin@num#1#2#3#4{%
+  \ifnumless#3\@ne
+    {\blx@err@invopt{#1=#3}{'#1' must be greater than zero}%
+     \let#3\@ne}
+    {}%
+  \ifnumless#4\@ne
+    {\blx@err@invopt{#2=#4}{'#2' must be greater than zero}%
+     \let#4\@ne}
+    {}%
+  \ifnumless#3#4
+    {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
+     \let#3#4}
+    {}}
+
+\def\blx@maxmin@cnt#1#2#3#4{%
+  \ifnumless#3\@ne
+    {\blx@err@invopt{#1=\number#3}{'#1' must be greater than zero}%
+     #3\@ne}
+    {}%
+  \ifnumless#4\@ne
+    {\blx@err@invopt{#2=\number#4}{'#2' must be greater than zero}%
+     #4\@ne}
+    {}%
+  \ifnumless#3#4
+    {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
+     #3=#4}
+    {}}
+
+\DeclareBibliographyOption{terseinits}[true]{%
+  \ifstrequal{#1}{true}
+    {\renewrobustcmd*{\bibinitperiod}{}
+     \renewrobustcmd*{\bibinitdelim}{}
+     \renewrobustcmd*{\bibinithyphendelim}{}}
+    {\renewrobustcmd*{\bibinitperiod}{\adddot}
+     \renewrobustcmd*{\bibinitdelim}{\addnbspace}
+     \renewrobustcmd*{\bibinithyphendelim}{\adddot\mbox{-}}}}
+  
+\DeclareBibliographyOption{firstinits}[true]{%
+  \settoggle{blx@firstinits}{#1}}
+
+\DeclareBibliographyOption{sortfirstinits}[true]{%
+  \settoggle{blx@sortfirstinits}{#1}}
+
+\DeclareBibliographyOption{abbreviate}[true]{%
+  \ifstrequal{#1}{true}
+    {\def\abx@str{abx@sstr}}
+    {\def\abx@str{abx@lstr}}}
+
+\DeclareBibliographyOption{dateabbrev}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\abx@bibmonth\blx@imc@bibsstring}
+    {\let\abx@bibmonth\blx@imc@biblstring}}
+
+\DeclareBibliographyOption{language}{%
+  \ifstrequal{#1}{auto}
+    {\toggletrue{blx@autolang}%
+     \def\blx@languagename{english}}
+    {\IfFileExists{#1.lbx}
+       {\togglefalse{blx@autolang}%
+        \edef\blx@languagename{#1}}
+       {\blx@error
+          {Language '#1' not supported}
+          {Failed to find a matching '#1.lbx' file}}}}
+
+\DeclareBibliographyOption{clearlang}[true]{%
+  \settoggle{blx@clearlang}{#1}}
+
+\DeclareBibliographyOption{babel}{%
+  \ifcsdef{blx@opt@babel@#1}
+    {\csuse{blx@opt@babel@#1}}
+    {\blx@err@invopt{babel=#1}{}}}
+\def\blx@opt@babel@none{%
+  \undef\blx@thelangenv
+  \let\blx@hook@initlang\@empty
+  \let\blx@hook@endlang\@empty}
+\def\blx@opt@babel@hyphen{%
+  \def\blx@thelangenv{hyphenrules}%
+  \let\blx@hook@initlang\@empty
+  \let\blx@hook@endlang\@empty}
+\csdef{blx@opt@babel@other*}{%
+  \def\blx@thelangenv{otherlanguage*}%
+  \def\blx@hook@initlang{\@quotereset\@ne}%
+  \def\blx@hook@endlang{\blx@postpunct}}
+\def\blx@opt@babel@other{%
+  \def\blx@thelangenv{otherlanguage}%
+  \def\blx@hook@initlang{\@quotereset\@ne}%
+  \def\blx@hook@endlang{\blx@postpunct}}
+
+\DeclareBibliographyOption{indexing}[true]{%
+  \blx@opt@index{#1}}
+\DeclareTypeOption{indexing}[true]{%
+  \blx@opt@index{#1}}
+\DeclareEntryOption{indexing}[true]{%
+  \blx@opt@index{#1}}
+\def\blx@opt@index#1{%
+  \ifcsdef{blx@opt@index@#1}
+    {\csuse{blx@opt@index@#1}}
+    {\blx@err@invopt{indexing=#1}{}}}
+\def\blx@opt@index@true{%
+  \toggletrue{blx@citeindex}%
+  \toggletrue{blx@bibindex}}
+\def\blx@opt@index@false{%
+  \togglefalse{blx@citeindex}%
+  \togglefalse{blx@bibindex}}
+\def\blx@opt@index@cite{%
+  \toggletrue{blx@citeindex}%
+  \togglefalse{blx@bibindex}}
+\def\blx@opt@index@bib{%
+  \togglefalse{blx@citeindex}%
+  \toggletrue{blx@bibindex}}
+
+\DeclareBibliographyOption{sortcites}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\blx@thecitesort\blx@citesort
+     \let\blx@thenotecheck\blx@notecheck}
+    {\let\blx@thecitesort\blx@citenosort
+     \let\blx@thenotecheck\relax}}
+
+\DeclareBibliographyOption{hyperref}[true]{%
+  \ifcsdef{blx@opt@hyperref@#1}
+    {\letcs\blx@hyperref{blx@opt@hyperref@#1}}
+    {\blx@err@invopt{hyperref=#1}{}}}
+\def\blx@opt@hyperref@false{0}
+\def\blx@opt@hyperref@true{1}
+\def\blx@opt@hyperref@auto{2}
+
+\DeclareBibliographyOption{backref}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\blx@backref\blx@addbackref
+     \let\abx@aux@backref\blx@aux@backref
+     \booltrue{backtracker}}
+    {\let\blx@backref\@gobble
+     \let\abx@aux@backref\@gobblefive
+     \boolfalse{backtracker}}}
+
+\DeclareBibliographyOption{backrefsetstyle}{%
+  \ifcsdef{blx@opt@backrefsetstyle@#1}
+    {\letcs\blx@backrefsetstyle{blx@opt@backrefsetstyle@#1}}
+    {\blx@err@invopt{backrefsetstyle=#1}{}}}
+\def\blx@opt@backrefsetstyle@setonly{0}
+\def\blx@opt@backrefsetstyle@memonly{1}
+\def\blx@opt@backrefsetstyle@setormem{2}
+\def\blx@opt@backrefsetstyle@setandmem{3}
+\def\blx@opt@backrefsetstyle@memandset{4}
+\def\blx@opt@backrefsetstyle@setplusmem{5}
+
+\appto\blx@mkhyperref{%
+  \ifHy@plainpages
+    \blx@warning@noline{%
+      hyperref package option 'plainpages' enabled.\MessageBreak
+      This may cause problems with hyperlinked back\MessageBreak
+      references. 'plainpages=false' is recommended}%
+  \fi
+  \ifHy@pageanchor\else
+    \blx@warning@noline{%
+      hyperref package option 'pageanchor' disabled.\MessageBreak
+      This will cause problems with hyperlinked back\MessageBreak
+      references. 'pageanchor=true' is required}%
+  \fi}
+
+\DeclareBibliographyOption{block}{%
+  \ifcsdef{blx@opt@block@#1}
+    {\csuse{blx@opt@block@#1}}
+    {\blx@err@invopt{block=#1}{}}}
+\def\blx@opt@block@none{%
+  \let\blx@bibsetup\@empty
+  \let\newblockpunct\@empty}
+\def\blx@opt@block@par{%
+  \let\blx@bibsetup\@empty
+  \def\newblockpunct{\par}}
+\def\blx@opt@block@nbpar{%
+  \def\blx@bibsetup{\interlinepenalty\@M}%
+  \def\newblockpunct{\par\nobreak}}
+\def\blx@opt@block@space{%
+  \let\blx@bibsetup\@empty
+  \def\newblockpunct{%
+    \unspace\space
+    \hskip  0.11em
+    \@plus  0.33em
+    \@minus 0.07em}}
+\def\blx@opt@block@ragged{%
+  \let\blx@bibsetup\raggedright
+  \def\newblockpunct{%
+    \unspace\penalty-9\relax\space}}
+
+\DeclareBibliographyOption{pagetracker}[true]{%
+  \ifcsdef{blx@opt@pagetracker@#1}
+    {\csuse{blx@opt@pagetracker@#1}}
+    {\blx@err@invopt{pagetracker=#1}{}}}
+\def\blx@opt@pagetracker@true{%
+  \if@twoside
+    \blx@opt@pagetracker@spread
+  \else
+    \blx@opt@pagetracker@page
+  \fi}
+\def\blx@opt@pagetracker@false{%
+  \let\blx@pagetracker\relax
+  \let\abx@aux@page\@gobbletwo
+  \let\abx@aux@fnpage\@gobbletwo
+  \boolfalse{pagetracker}}
+\def\blx@opt@pagetracker@page{%
+  \let\blx@pagetracker\blx@pagetracker@context
+  \let\abx@aux@page\blx@aux@page
+  \let\abx@aux@fnpage\blx@aux@fnpage
+  \booltrue{pagetracker}}
+\def\blx@opt@pagetracker@spread{%
+  \if@twoside
+    \let\blx@pagetracker\blx@pagetracker@context
+    \let\abx@aux@page\blx@aux@spread
+    \let\abx@aux@fnpage\blx@aux@fnspread
+    \booltrue{pagetracker}%
+  \else
+    \blx@warning@noline{%
+      LaTeX not in twoside mode\MessageBreak
+      Falling back to 'pagetracker=page'}%
+    \blx@opt@pagetracker@page
+  \fi}
+
+\DeclareBibliographyOption{citecounter}[true]{%
+  \ifcsdef{blx@opt@citecounter@#1}
+    {\csuse{blx@opt@citecounter@#1}}
+    {\blx@err@invopt{citecounter=#1}{}}}
+\def\blx@opt@citecounter@true{%
+  \let\blx@setcitecounter\blx@setcitecounter@global
+  \let\blx@citecounter\blx@citecounter@global
+  \let\abx@aux@count\blx@aux@count
+  \let\abx@aux@fncount\blx@aux@fncount
+  \booltrue{citetracker}}
+\def\blx@opt@citecounter@context{%
+  \let\blx@setcitecounter\blx@setcitecounter@context
+  \let\blx@citecounter\blx@citecounter@context
+  \let\abx@aux@count\blx@aux@count
+  \let\abx@aux@fncount\blx@aux@fncount
+  \booltrue{citetracker}}
+\def\blx@opt@citecounter@false{%
+  \let\blx@setcitecounter\relax
+  \let\blx@citecounter\relax
+  \let\abx@aux@count\@gobbletwo
+  \let\abx@aux@fncount\@gobbletwo}
+
+\DeclareBibliographyOption{citetracker}[true]{%
+  \ifcsdef{blx@opt@citetracker@#1}
+    {\csuse{blx@opt@citetracker@#1}}
+    {\blx@err@invopt{citetracker=#1}{}}}
+\def\blx@opt@citetracker@true{%
+  \let\blx@imc@ifciteseen\blx@ifciteseen@global
+  \let\blx@imc@ifentryseen\blx@ifentryseen@global
+  \let\blx@citetracker\blx@citetracker@global
+  \booltrue{citetracker}}
+\def\blx@opt@citetracker@false{%
+  \let\blx@imc@ifciteseen\@secondoftwo
+  \protected\long\def\blx@imc@ifentryseen##1##2##3{##3}%
+  \let\blx@citetracker\relax}
+\def\blx@opt@citetracker@context{%
+  \let\blx@imc@ifciteseen\blx@ifciteseen@context
+  \let\blx@imc@ifentryseen\blx@ifentryseen@context
+  \let\blx@citetracker\blx@citetracker@context
+  \booltrue{citetracker}}
+\def\blx@opt@citetracker@strict{%
+  \let\blx@imc@ifciteseen\blx@ifciteseen@global
+  \let\blx@imc@ifentryseen\blx@ifentryseen@global
+  \def\blx@citetracker{%
+    \blx@ifcitesingle{\blx@citetracker@global}{}}%
+  \booltrue{citetracker}}
+\def\blx@opt@citetracker@constrict{%
+  \let\blx@imc@ifciteseen\blx@ifciteseen@context
+  \let\blx@imc@ifentryseen\blx@ifentryseen@context
+  \def\blx@citetracker{%
+    \blx@ifcitesingle{\blx@citetracker@context}{}}%
+  \booltrue{citetracker}}
+
+\DeclareBibliographyOption{ibidtracker}[true]{%
+  \ifcsdef{blx@opt@ibidtracker@#1}
+    {\csuse{blx@opt@ibidtracker@#1}}
+    {\blx@err@invopt{ibidtracker=#1}{}}}
+\def\blx@opt@ibidtracker@true{%
+  \let\blx@imc@ifciteibid\blx@ifciteibid@global
+  \let\blx@ibidtracker\blx@ibidtracker@gobal
+  \let\blx@ibidreset\blx@ibidreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@false{%
+  \let\blx@imc@ifciteibid\@secondoftwo
+  \let\blx@ibidtracker\relax
+  \let\blx@ibidreset\relax}
+\def\blx@opt@ibidtracker@context{%
+  \let\blx@imc@ifciteibid\blx@ifciteibid@context
+  \let\blx@ibidtracker\blx@ibidtracker@context
+  \let\blx@ibidreset\blx@ibidreset@context
+  \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@strict{%
+  \let\blx@imc@ifciteibid\blx@ifciteibid@strict
+  \let\blx@ibidtracker\blx@ibidtracker@strict
+  \let\blx@ibidreset\blx@ibidreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@constrict{%
+  \let\blx@imc@ifciteibid\blx@ifciteibid@constrict
+  \let\blx@ibidtracker\blx@ibidtracker@constrict
+  \let\blx@ibidreset\blx@ibidreset@context
+  \booltrue{citetracker}}
+
+\DeclareBibliographyOption{idemtracker}[true]{%
+  \ifcsdef{blx@opt@idemtracker@#1}
+    {\csuse{blx@opt@idemtracker@#1}}
+    {\blx@err@invopt{idemtracker=#1}{}}}
+\def\blx@opt@idemtracker@true{%
+  \let\blx@imc@ifciteidem\blx@ifciteidem@global
+  \let\blx@idemtracker\blx@idemtracker@gobal
+  \let\blx@idemreset\blx@idemreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@idemtracker@false{%
+  \let\blx@imc@ifciteidem\@secondoftwo
+  \let\blx@idemtracker\relax
+  \let\blx@idemreset\relax}
+\def\blx@opt@idemtracker@context{%
+  \let\blx@imc@ifciteidem\blx@ifciteidem@context
+  \let\blx@idemtracker\blx@idemtracker@context
+  \let\blx@idemreset\blx@idemreset@context
+  \booltrue{citetracker}}
+\def\blx@opt@idemtracker@strict{%
+  \let\blx@imc@ifciteidem\blx@ifciteidem@strict
+  \let\blx@idemtracker\blx@idemtracker@strict
+  \let\blx@idemreset\blx@idemreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@idemtracker@constrict{%
+  \let\blx@imc@ifciteidem\blx@ifciteidem@constrict
+  \let\blx@idemtracker\blx@idemtracker@constrict
+  \let\blx@idemreset\blx@idemreset@context
+  \booltrue{citetracker}}
+
+\DeclareBibliographyOption{opcittracker}[true]{%
+  \ifcsdef{blx@opt@opcittracker@#1}
+    {\csuse{blx@opt@opcittracker@#1}}
+    {\blx@err@invopt{opcittracker=#1}{}}}
+\def\blx@opt@opcittracker@true{%
+  \let\blx@imc@ifopcit\blx@ifopcit@global
+  \let\blx@opcittracker\blx@opcittracker@gobal
+  \let\blx@opcitreset\blx@opcitreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@opcittracker@false{%
+  \let\blx@imc@ifopcit\@secondoftwo
+  \let\blx@opcittracker\relax
+  \let\blx@opcitreset\relax}
+\def\blx@opt@opcittracker@context{%
+  \let\blx@imc@ifopcit\blx@ifopcit@context
+  \let\blx@opcittracker\blx@opcittracker@context
+  \let\blx@opcitreset\blx@opcitreset@context
+  \booltrue{citetracker}}
+\def\blx@opt@opcittracker@strict{%
+  \let\blx@imc@ifopcit\blx@ifopcit@strict
+  \let\blx@opcittracker\blx@opcittracker@strict
+  \let\blx@opcitreset\blx@opcitreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@opcittracker@constrict{%
+  \let\blx@imc@ifopcit\blx@ifopcit@constrict
+  \let\blx@opcittracker\blx@opcittracker@constrict
+  \let\blx@opcitreset\blx@opcitreset@context
+  \booltrue{citetracker}}
+
+\DeclareBibliographyOption{loccittracker}[true]{%
+  \ifcsdef{blx@opt@loccittracker@#1}
+    {\csuse{blx@opt@loccittracker@#1}}
+    {\blx@err@invopt{loccittracker=#1}{}}}
+\def\blx@opt@loccittracker@true{%
+  \let\blx@imc@ifloccit\blx@ifloccit@global
+  \let\blx@loccittracker\blx@loccittracker@gobal
+  \let\blx@loccitreset\blx@loccitreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@loccittracker@false{%
+  \let\blx@imc@ifloccit\@secondoftwo
+  \let\blx@loccittracker\relax
+  \let\blx@loccitreset\relax}
+\def\blx@opt@loccittracker@context{%
+  \let\blx@imc@ifloccit\blx@ifloccit@context
+  \let\blx@loccittracker\blx@loccittracker@context
+  \let\blx@loccitreset\blx@loccitreset@context
+  \booltrue{citetracker}}
+\def\blx@opt@loccittracker@strict{%
+  \let\blx@imc@ifloccit\blx@ifloccit@strict
+  \let\blx@loccittracker\blx@loccittracker@strict
+  \let\blx@loccitreset\blx@loccitreset@gobal
+  \booltrue{citetracker}}
+\def\blx@opt@loccittracker@constrict{%
+  \let\blx@imc@ifloccit\blx@ifloccit@constrict
+  \let\blx@loccittracker\blx@loccittracker@constrict
+  \let\blx@loccitreset\blx@loccitreset@context
+  \booltrue{citetracker}}
+
+\DeclareBibliographyOption{parentracker}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\bibopenparen\blx@bibopenparen
+     \let\bibcloseparen\blx@bibcloseparen
+     \let\bibopenbracket\blx@bibopenbracket
+     \let\bibclosebracket\blx@bibclosebracket}
+    {\protected\def\bibopenparen{\bibleftparen}%
+     \protected\def\bibcloseparen{\bibrightparen}%
+     \protected\def\bibopenbracket{\bibleftbracket}%
+     \protected\def\bibclosebracket{\bibrightbracket}}}
+
+\DeclareBibliographyOption{maxparens}{%
+  \ifnumless{#1}{1}
+    {\blx@err@invopt{maxparens=#1}{}}
+    {\setcounter{maxparens}{#1}}}
+
+\DeclareBibliographyOption{date}{%
+  \ifcsdef{mkbibrange#1}
+    {\protected\def\blx@imc@printdate{\csuse{mkbibrange#1}{}}%
+     \protected\def\blx@imc@printdateextra{\csuse{mkbibrange#1extra}{}}}
+    {\blx@err@invopt{date=#1}{}}}
+
+\DeclareBibliographyOption{urldate}{%
+  \ifcsdef{mkbibrange#1}
+    {\protected\def\blx@imc@printurldate{\csuse{mkbibrange#1}{url}}}
+    {\blx@err@invopt{urldate=#1}{}}}
+
+\DeclareBibliographyOption{eventdate}{%
+  \ifcsdef{mkbibrange#1}
+    {\protected\def\blx@imc@printeventdate{\csuse{mkbibrange#1}{event}}}
+    {\blx@err@invopt{eventdate=#1}{}}}
+
+\DeclareBibliographyOption{origdate}{%
+  \ifcsdef{mkbibrange#1}
+    {\protected\def\blx@imc@printorigdate{\csuse{mkbibrange#1}{orig}}}
+    {\blx@err@invopt{origdate=#1}{}}}
+
+\DeclareBibliographyOption{alldates}{%
+  \ExecuteBibliographyOptions{date=#1,urldate=#1,eventdate=#1,origdate=#1}}
+
+\DeclareBibliographyOption{datezeros}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\blx@imc@mkdatezeros\@firstofone}
+    {\let\blx@imc@mkdatezeros\blx@imc@stripzeros}}
+
+\DeclareBibliographyOption{autocite}{%
+  \ifcsundef{blx@acite@#1}
+    {\blx@error
+       {Autocite command '#1' undefined}
+       {The autocite command '#1' has not been defined by
+        the\MessageBreak selected citation style}}
+    {\letcs\autocite{blx@acite@#1}%
+     \letcs\autocites{blx@macite@#1}}}
+
+\DeclareBibliographyOption{notetype}{%
+  \ifcsdef{blx@opt@notetype@#1}
+    {\blx@notetype\csuse{blx@opt@notetype@#1}}
+    {\blx@err@invopt{notetype=#1}{}}}
+\cslet{blx@opt@notetype@foot+end}\z@
+\let\blx@opt@notetype@footonly\@ne
+\let\blx@opt@notetype@endonly\tw@
+
+\DeclareBibliographyOption{autopunct}[true]{%
+  \ifstrequal{#1}{true}
+    {\DeclareAutoPunctuation{.,;:!?}}
+    {\DeclareAutoPunctuation{}}}
+
+\DeclareBibliographyOption{punctfont}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\blx@ifpuncthook\@firstoftwo}
+    {\let\blx@ifpuncthook\@secondoftwo}}
+
+\DeclareBibliographyOption{labelnumber}[true]{%
+  \settoggle{blx@labelnumber}{#1}%
+  \iftoggle{blx@labelnumber}
+    {}
+    {\setkeys{blx@opt@pre}{defernumbers=false}}}
+\DeclareTypeOption{labelnumber}[true]{%
+  \settoggle{blx@labelnumber}{#1}}
+
+\DeclareBibliographyOption{labelalpha}[true]{%
+  \settoggle{blx@labelalpha}{#1}}
+\DeclareTypeOption{labelalpha}[true]{%
+  \settoggle{blx@labelalpha}{#1}}
+
+\DeclareBibliographyOption{labeltitle}[true]{%
+  \settoggle{blx@labeltitle}{#1}}
+\DeclareTypeOption{labeltitle}[true]{%
+  \settoggle{blx@labeltitle}{#1}}
+
+\DeclareBibliographyOption{labeltitleyear}[true]{%
+  \settoggle{blx@labeltitleyear}{#1}}
+\DeclareTypeOption{labeltitleyear}[true]{%
+  \settoggle{blx@labeltitleyear}{#1}}
+
+\DeclareBibliographyOption{labelyear}[true]{%
+  \settoggle{blx@labelyear}{#1}}
+\DeclareTypeOption{labelyear}[true]{%
+  \settoggle{blx@labelyear}{#1}}
+
+\DeclareBibliographyOption{uniquelist}[true]{%
+  \ifcsdef{blx@opt@uniquelist@#1}
+    {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
+    {\blx@err@invopt{uniquelist=#1}{}}}
+\DeclareTypeOption{uniquelist}[true]{%
+  \ifcsdef{blx@opt@uniquelist@#1}
+    {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
+    {\blx@err@invopt{uniquelist=#1}{}}}
+\def\blx@opt@uniquelist@false{0}
+\def\blx@opt@uniquelist@true{1}
+\def\blx@opt@uniquelist@minyear{2}
+
+\DeclareBibliographyOption{uniquename}[true]{%
+  \ifcsdef{blx@opt@uniquename@#1}
+    {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
+    {\blx@err@invopt{uniquename=#1}{}}}
+\DeclareTypeOption{uniquename}[true]{%
+  \ifcsdef{blx@opt@uniquename@#1}
+    {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
+    {\blx@err@invopt{uniquename=#1}{}}}
+\def\blx@opt@uniquename@false{0}
+\def\blx@opt@uniquename@init{1}
+\def\blx@opt@uniquename@true{2}
+\def\blx@opt@uniquename@full{2}
+\def\blx@opt@uniquename@allinit{3}
+\def\blx@opt@uniquename@allfull{4}
+\def\blx@opt@uniquename@mininit{5}
+\def\blx@opt@uniquename@minfull{6}
+
+\DeclareBibliographyOption{singletitle}[true]{%
+  \settoggle{blx@singletitle}{#1}}
+\DeclareTypeOption{singletitle}[true]{%
+  \settoggle{blx@singletitle}{#1}}
+
+\DeclareBibliographyOption{defernumbers}[true]{%
+  \settoggle{blx@defernumbers}{#1}%
+  \iftoggle{blx@defernumbers}
+    {\setkeys{blx@opt@pre}{labelnumber}%
+     \let\blx@thelabelnumber\blx@addlabelnumber
+     \let\abx@aux@number\blx@aux@number}
+    {\let\blx@thelabelnumber\relax
+     \let\abx@aux@number\@gobblefour}}
+
+\DeclareBibliographyOption{refsection}{%
+  \ifcsdef{blx@opt@refsection@#1}
+    {\letcs\blx@refsecreset@level{blx@opt@refsection@#1}}
+    {\blx@err@invopt{refsection=#1}{}}}
+\def\blx@opt@refsection@none{0}
+\def\blx@opt@refsection@part{1}
+\def\blx@opt@refsection@chapter{2}
+\def\blx@opt@refsection@section{3}
+\def\blx@opt@refsection@subsection{4}
+
+\AtEndPreamble{%
+  \ifcase\blx@refsecreset@level
+  \or % 1
+    \blx@refpatch@part\newrefsection
+  \or % 2
+    \blx@refpatch@chapter\newrefsection
+  \or % 3
+    \blx@refpatch@sect{section}{\newrefsection}{1}%
+  \or % 4
+    \blx@refpatch@sect{subsection}{\newrefsection}{2}%
+  \fi}
+
+\DeclareBibliographyOption{refsegment}{%
+  \ifcsdef{blx@opt@refsegment@#1}
+    {\letcs\blx@refsegreset@level{blx@opt@refsegment@#1}}
+    {\blx@err@invopt{refsegment=#1}{}}}
+\def\blx@opt@refsegment@none{0}
+\def\blx@opt@refsegment@part{1}
+\def\blx@opt@refsegment@chapter{2}
+\def\blx@opt@refsegment@section{3}
+\def\blx@opt@refsegment@subsection{4}
+
+\AtEndPreamble{%
+  \ifnumgreater\blx@refsegreset@level\z@
+    {\ifnumgreater\blx@refsegreset@level\blx@refsecreset@level
+       {}
+       {\blx@err@confopt
+          {refsegment/refsection}
+          {The 'refsegment' option must point to a
+           lower-level\MessageBreak document division
+           than 'refsection'}%
+        \def\blx@refsegreset@level{0}}}
+    {}%
+  \ifcase\blx@refsegreset@level
+  \or % 1
+    \blx@refpatch@part\newrefsegment
+  \or % 2
+    \blx@refpatch@chapter\newrefsegment
+  \or % 3
+    \blx@refpatch@sect{section}{\newrefsegment}{1}%
+  \or % 4
+    \blx@refpatch@sect{subsection}{\newrefsegment}{2}%
+  \fi}
+
+\DeclareBibliographyOption{citereset}{%
+  \ifcsdef{blx@opt@citereset@#1}
+    {\letcs\blx@citereset@level{blx@opt@citereset@#1}}
+    {\blx@err@invopt{citereset=#1}{}}}
+\def\blx@opt@citereset@none{0}
+\def\blx@opt@citereset@part{1}
+\def\blx@opt@citereset@chapter{2}
+\def\blx@opt@citereset@section{3}
+\def\blx@opt@citereset@subsection{4}
+
+\AtEndPreamble{%
+  \ifcase\blx@citereset@level
+  \or % 1
+    \blx@refpatch@part{\citereset\blx@inf@creset}%
+  \or % 2
+    \blx@refpatch@chapter{\citereset\blx@inf@creset}%
+  \or % 3
+    \blx@refpatch@sect{section}{\citereset\blx@inf@creset}{1}%
+  \or % 4
+    \blx@refpatch@sect{subsection}{\citereset\blx@inf@creset}{2}%
+  \fi}
+
+\DeclareBibliographyOption{bibwarn}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\blx@bbl@thewarn\blx@bbl@warn}
+    {\let\blx@bbl@thewarn\@gobble}}
+
+% Entry options
+
+\DeclareBibliographyOption{useprefix}[true]{%
+  \settoggle{blx@useprefix}{#1}}
+\DeclareTypeOption{useprefix}[true]{%
+  \settoggle{blx@useprefix}{#1}}
+\DeclareEntryOption{useprefix}[true]{%
+  \settoggle{blx@useprefix}{#1}}
+
+\DeclareBibliographyOption{useauthor}[true]{%
+  \settoggle{blx@useauthor}{#1}}
+\DeclareTypeOption{useauthor}[true]{%
+  \settoggle{blx@useauthor}{#1}}
+\DeclareEntryOption{useauthor}[true]{%
+  \settoggle{blx@useauthor}{#1}}
+
+\DeclareBibliographyOption{useeditor}[true]{%
+  \settoggle{blx@useeditor}{#1}}
+\DeclareTypeOption{useeditor}[true]{%
+  \settoggle{blx@useeditor}{#1}}
+\DeclareEntryOption{useeditor}[true]{%
+  \settoggle{blx@useeditor}{#1}}
+
+\DeclareBibliographyOption{usetranslator}[true]{%
+  \settoggle{blx@usetranslator}{#1}}
+\DeclareTypeOption{usetranslator}[true]{%
+  \settoggle{blx@usetranslator}{#1}}
+\DeclareEntryOption{usetranslator}[true]{%
+  \settoggle{blx@usetranslator}{#1}}
+
+\DeclareTypeOption{skipbib}[true]{%
+  \settoggle{blx@skipbib}{#1}}
+\DeclareEntryOption{skipbib}[true]{%
+  \settoggle{blx@skipbib}{#1}}
+
+\DeclareTypeOption{skiplos}[true]{%
+  \settoggle{blx@skiplos}{#1}}
+\DeclareEntryOption{skiplos}[true]{%
+  \settoggle{blx@skiplos}{#1}}
+
+\DeclareTypeOption{skiplab}[true]{%
+  \settoggle{blx@skiplab}{#1}}
+\DeclareEntryOption{skiplab}[true]{%
+  \settoggle{blx@skiplab}{#1}}
+
+\DeclareTypeOption{dataonly}[true]{%
+  \settoggle{blx@skipbib}{#1}%
+  \settoggle{blx@skiplos}{#1}%
+  \settoggle{blx@skiplab}{#1}}
+\DeclareEntryOption{dataonly}[true]{%
+  \settoggle{blx@skipbib}{#1}%
+  \settoggle{blx@skiplos}{#1}%
+  \settoggle{blx@skiplab}{#1}}
+
+% Option processor/scheduler
+
+\DeclareOption*{%
+  \begingroup
+  \def\blx@tempa#1=#2&{#1}%
+  \edef\blx@tempa{%
+    \expandafter\blx@tempa\CurrentOption=&}%
+  \ifcsundef{KV@blx@opt@ldt@\blx@tempa}
+    {\endgroup
+     \eappto\blx@theoptions{\CurrentOption,}}
+    {\edef\blx@tempa{\endgroup
+       \noexpand\setkeys{blx@opt@ldt}{\CurrentOption}}%
+     \blx@tempa}}
+
+\def\blx@processoptions{%
+  \ifundef\blx@theoptions
+    {}
+    {\begingroup
+     \edef\blx@tempa{\endgroup
+       \noexpand\setkeys{blx@opt@pre}{\blx@theoptions}}%
+     \blx@tempa}}
+
+%% Initial setup
+
+% Set defaults
+
+\setkeys{blx@opt@ldt}{style=numeric}
+\setkeys{blx@opt@pre}{%
+  sorting=nty,sortcase,sortupper,sortcites=false,
+  maxnames=3,minnames=1,maxalphanames=3,minalphanames=1,
+  maxitems=3,minitems=1,mincrossrefs=2,useauthor=true,useeditor=true,
+  usetranslator=false,indexing=false,abbreviate=true,dateabbrev=true,
+  backref=false,backrefsetstyle=setonly,pagetracker=false,ibidtracker=false,
+  idemtracker=false,opcittracker=false,loccittracker=false,citetracker=false,
+  citecounter=false,block=none,language=auto,clearlang=true,babel=none,
+  date=comp,origdate=comp,eventdate=comp,urldate=short,autopunct=true,
+  punctfont=false,defernumbers=false,refsection=none,refsegment=none,
+  citereset=none,hyperref=auto,parentracker,maxparens=3,
+  bibencoding=auto,bibwarn}
+
+% Load compatibility code
+
+\blx@inputonce{blx-compat.def}{compatibility code}{}{}{}{}
+
+% Restore catcodes
+
+\blx@catcodes
+\undef\blx@catcodes
+
+% Process load-time options
+
+\ProcessOptions*
+
+% Load citation and bibliography styles, configuration file
+
+\blx@inputonce{biblatex.def}{generic definitions}{}{}{}{}
+\iftoggle{blx@natbib}
+  {\blx@inputonce{blx-natbib.def}{natbib compatibility}{}{}{}{}}
+  {}
+\iftoggle{blx@mcite}
+  {\blx@inputonce{blx-mcite.def}{mcite-like commands}{}{}{}{}}
+  {}
+\RequireBibliographyStyle{\blx@bbxfile}
+\RequireCitationStyle{\blx@cbxfile}
+\blx@secinit
+\citereset
+\blx@inputonce{biblatex.cfg}{configuration file}{}{}{}{}
+
+% Process preamble options
+
+\blx@processoptions
+
+% Deferred setup at end of preamble
+
+\AtEndPreamble{%
+  \blx@checkoptions@global
+  \c@maxnames\blx@maxcitenames\relax
+  \c@minnames\blx@mincitenames\relax
+  \c@maxitems\blx@maxitems\relax
+  \c@minitems\blx@minitems\relax
+  \iftoggle{blx@firstinits}
+    {\ifnumequal\blx@uniquename\blx@opt@uniquename@full
+       {\blx@warn@conflopt{%
+          'firstinits' conflicts with 'uniquename=full'.\MessageBreak
+          Setting 'uniquename=init'}%
+        \setkeys{blx@opt@pre}{uniquename=init}}
+       {}%
+     \ifnumequal\blx@uniquename\blx@opt@uniquename@allfull
+       {\blx@warn@conflopt{%
+          'firstinits' conflicts with 'uniquename=allfull'.\MessageBreak
+          Setting 'uniquename=allinit}%
+        \setkeys{blx@opt@pre}{uniquename=allinit}}
+       {}%
+     \ifnumequal\blx@uniquename\blx@opt@uniquename@minfull
+       {\blx@warn@conflopt{%
+          'firstinits' conflicts with 'uniquename=minfull'.\MessageBreak
+          Setting 'uniquename=mininit}%
+        \setkeys{blx@opt@pre}{uniquename=mininit}}
+       {}}
+    {}%
+  \nottoggle{blx@labelyear}
+    {\ifnumequal\blx@uniquelist\blx@opt@uniquelist@minyear
+       {\blx@warn@conflopt{%
+          'uniquelist=minyear' requires 'labelyear'.\MessageBreak
+          Setting 'uniquelist=true'}%
+        \setkeys{blx@opt@pre}{uniquelist}}
+       {}}
+    {}}
+
+\def\blx@checkencoding{%
+  \ifdef\blx@texencoding
+    {\blx@info@noline{%
+       Input encoding '\blx@texencoding' specified}}
+    {\ifundef\inputencodingname
+       {\ifundef\XeTeXrevision
+          {\ifundef\luatexversion
+             {\def\blx@texencoding{ascii}%
+              \blx@info@noline{%
+                No input encoding detected.\MessageBreak
+                Assuming '\blx@texencoding'}}
+             {\def\blx@texencoding{utf8}%
+              \blx@info@noline{%
+                LuaTeX detected.\MessageBreak
+                Assuming input encoding '\blx@texencoding'}}}
+          {\def\blx@texencoding{utf8}%
+           \blx@info@noline{%
+             XeTeX detected.\MessageBreak
+             Assuming input encoding '\blx@texencoding'}}}
+       {\ifcsdef{blx@inpenc@\inputencodingname}
+          {\letcs\blx@texencoding{blx@inpenc@\inputencodingname}}
+          {\let\blx@texencoding\inputencodingname}%
+        \blx@info@noline{%
+          Input encoding '\blx@texencoding' detected}}}%
+  \ifdef\blx@bibencoding
+    {\ifdefstring\blx@bibencoding{ascii}
+       {\blx@info@noline{%
+          Data encoding '\blx@bibencoding' specified.\MessageBreak
+          No need to reencode data}%
+        \togglefalse{blx@reencode}}
+       {\ifdefstring\blx@bibencoding{auto}
+          {\let\blx@bibencoding\blx@texencoding
+           \blx@info@noline{%
+             Automatic encoding selection.\MessageBreak
+             Assuming data encoding '\blx@bibencoding'}
+           \togglefalse{blx@reencode}}
+          {\ifdefstrequal\blx@bibencoding\blx@texencoding
+             {\blx@info@noline{%
+                Data encoding '\blx@bibencoding' specified.\MessageBreak
+                No need to reencode data}%
+              \togglefalse{blx@reencode}}
+             {\blx@info@noline{%
+                   Data encoding '\blx@bibencoding' specified.\MessageBreak
+                   Backend will reencode on the fly}%
+                 \togglefalse{blx@reencode}}}}}
+    {\def\blx@bibencoding{ascii}%
+     \blx@info@noline{%
+        Data encoding not specified.\MessageBreak
+        Assuming '\blx@bibencoding'}%
+     \togglefalse{blx@reencode}}%
+  \ifboolexpr{%
+    togl {blx@safeinputenc}
+    and ( test {\@ifpackageloaded{inputenc}}
+          or
+          test {\@ifpackageloaded{inputenx}} )
+  }
+    {\def\blx@texencoding{ascii}%
+     \blx@info@noline{%
+        Input encoding '\blx@texencoding' forced by\MessageBreak
+        'safeinputenc' option}}
+    {}%
+}
+
+
+% Deferred last minute setup
+
+\AtBeginDocument{%
+  \blx@checkencoding
+  \if@filesw
+    \blx@ifsigned{\jobname}{bcf}
+      {\blx@ctrlwrite@biber}
+      {}%
+    \blx@bblinput
+    \blx@maxsection\z@
+  \fi
+  \csuse{abx@preamble}%
+  \blx@inf@refsec
+  \blx@inf@refseg}
+
+\AtEndOfPackage{%
+  \AtBeginDocument{%
+    \let\do\undef
+    \blx@dopreamblecmds
+    \let\do\noexpand}}
+
+\endinput
-- 
cgit v1.2.3

