%% pgflibraryoffsetpath.code.tex
%% Copyright 2023 Jonathan Schulz
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008-05-04 or later.
%
% This work has the LPPL maintenance status 'maintained'.
%
% The Current Maintainer of this work is Jonathan Schulz.
%
% This work consists of the files
% pgflibrarybezieroffset.code.tex, pgflibrarynfold.code.tex, pgflibraryoffsetpath.code.tex, tikz-nfold-doc.tex, tikzlibrarynfold.code.tex, tikz-nfold-doc.tex, and tikz-nfold-doc.pdf.
%
%
% A commented version of this file can be found on https://github.com/jonschz/tikz-nfold .
%

\usepgflibrary{bezieroffset}






\gdef\pgf@nfold@cached@miterlimit{10}
\let\pgf@nfold@old@miterlimit\pgfsetmiterlimit
\def\pgfsetmiterlimit#1{%
 \pgf@nfold@old@miterlimit{#1}%
 \edef\pgf@nfold@cached@miterlimit{#1}%
}

\global\let\pgf@cached@linejoin=m%
\let\pgf@nfold@old@setbeveljoin\pgfsetbeveljoin
\let\pgf@nfold@old@setmiterjoin\pgfsetmiterjoin
\let\pgf@nfold@old@setroundjoin\pgfsetroundjoin
\def\pgfsetbeveljoin{%
 \pgf@nfold@old@setbeveljoin%
 \let\pgf@cached@linejoin=b%
}
\def\pgfsetmiterjoin{%
 \pgf@nfold@old@setmiterjoin%
 \let\pgf@cached@linejoin=m%
}
\def\pgfsetroundjoin{%
 \pgf@nfold@old@setroundjoin%
 \let\pgf@cached@linejoin=r%
}



\def\pgf@nfold@miterjoin{
 \pgfpathlineto{
   \pgfpointadd{\pgf@nfold@join@centre}{%
     \pgfpointpolar{\pgf@nfold@firstang+.5*\pgf@nfold@deltaphi+90}%
       {\pgf@nfold@shiftamount/cos(.5*\pgf@nfold@deltaphi)}%
   }%
 }%
}

\def\pgf@nfold@beveljoin{
 \pgfmathsetlengthmacro{\bevelouterprotrusion}%
   {\pgf@nfold@shortenstartjoin pt - .5*\pgflinewidth*abs(tan(.25*\pgf@nfold@deltaphi))}
 \pgfmathsetmacro{\bevelshorten}{2*\insidepercentage*abs(tan(.25*\pgf@nfold@deltaphi))}
 \pgfmathparse{\bevelshorten < abs(sin(.5*\pgf@nfold@deltaphi))}
 \ifnum\pgfmathresult=1\relax
   \pgfmathsetlengthmacro{\bevelextension}{\bevelouterprotrusion-\bevelshorten*\pgf@nfold@hwidth}
   \pgfpointadd{\pgf@nfold@join@start}{\pgfpointpolar{\pgf@nfold@firstang}{\bevelextension}}
   \pgfpathlineto{}
   \pgfpointadd{\pgf@nfold@join@end}{\pgfpointpolar{\pgf@nfold@secondang}{-\bevelextension}}
   \pgfpathlineto{}
 \else
   \pgf@nfold@miterjoin
 \fi
}

\def\pgf@nfold@roundjoin{
 \ifdim\insidepercentage pt<.5pt\relax
   \pgfpointadd{\pgf@nfold@join@start}{\pgfpointpolar{\pgf@nfold@firstang}{\pgf@nfold@shortenstartjoin}}
   \pgfpathlineto{}
   \pgfmathsetmacro\pgf@tmp@firstang{\pgf@nfold@firstang+90*\turnindicator}
   \pgfpatharc%
     {\pgf@tmp@firstang}%
     {\pgf@tmp@firstang+\pgf@nfold@deltaphi}%
     {abs(\pgf@nfold@shift@fraction)*\pgf@nfold@hwidth}%
 \else
   \pgf@nfold@miterjoin
 \fi
}

\def\pgf@nfold@token@join#1#2#3#4#5#6#7#8{%
 \def\pgf@nfold@join@centre{#1}%
 \def\pgf@nfold@join@prevend{#2}%
 \def\pgf@nfold@join@nextstart{#3}%
 \def\pgf@nfold@firstang{#4}%
 \def\pgf@nfold@secondang{#5}%
 \pgfextract@process\pgf@nfold@join@start{%
   \pgfpointadd{#2}{\pgfpointpolar{\pgf@nfold@firstang+90}{\pgf@nfold@shiftamount}}}%
 \pgfextract@process\pgf@nfold@join@end{%
   \pgfpointadd{#3}{\pgfpointpolar{\pgf@nfold@secondang+90}{\pgf@nfold@shiftamount}}}%
 \pgf@process{\pgfpointdiff{\pgf@nfold@join@start}{\pgf@nfold@join@end}}
 \pgfpointtaxicabnorm\pgfutil@tempdima
 \ifdim\pgfutil@tempdima>0.1pt\relax
   \def\pgf@nfold@deltaphi{#6}%
   \def\pgf@nfold@shortenstartjoin{#7}%
   \ifdim\pgf@nfold@deltaphi pt<0pt
     \def\turnindicator{1}
   \else
     \def\turnindicator{-1}
   \fi
   \pgfutil@tempdima=\pgf@nfold@shift@fraction pt\relax
   \pgfutil@tempdima=\turnindicator\pgfutil@tempdima
   \advance\pgfutil@tempdima by-1pt\relax
   \pgfutil@tempdima=-.5\pgfutil@tempdima
   \edef\insidepercentage{\pgf@sys@tonumber\pgfutil@tempdima}%
   #8%
 \fi
}


\def\pgf@nfold@process@join{%
 \pgf@xa=\pgf@nfold@deltaphi@start pt\relax
 \ifdim\pgf@xa<0pt\relax
   \pgf@xa=-\pgf@xa
 \fi
 \ifdim\pgf@xa>1pt\relax
   \edef\pgf@nfold@jointype{\pgf@cached@linejoin}
   \if\pgf@cached@linejoin m%
     \pgf@xa=.5\pgf@xa
     \pgfmathcos@{\pgf@sys@tonumber\pgf@xa}
     \pgf@xa=\pgfmathresult pt\relax
     \pgf@xa=\pgf@nfold@cached@miterlimit\pgf@xa
     \ifdim\pgf@xa>1pt\relax
       \def\pgf@nfold@tmp@joinmacro{\pgf@nfold@miterjoin}
     \else
       \def\pgf@nfold@tmp@joinmacro{\pgf@nfold@beveljoin}
     \fi
   \else
     \if b\pgf@cached@linejoin\relax
       \def\pgf@nfold@tmp@joinmacro{\pgf@nfold@beveljoin}
     \else
       \def\pgf@nfold@tmp@joinmacro{\pgf@nfold@roundjoin}
     \fi
   \fi
   \edef\pgf@nfold@macrotoadd{%
     \noexpand\pgf@nfold@token@join{\pgf@nfold@cur@first}{\pgf@nfold@prev@segment@end}
       {\pgf@nfold@cur@movedfirst}{\pgf@nfold@prev@angle@ii}{\pgf@nfold@cur@angle@i}%
       {\pgf@nfold@deltaphi@start}{\pgf@nfold@shortenstartjoin}{%
         \expandafter\noexpand\pgf@nfold@tmp@joinmacro%
         \expandafter\noexpand\ifpgf@nfold@closejoinsedgecase%
           \pgf@nfold@token@finish@edgecase{\pgf@nfold@cur@movedlast}%
         \else%
           \pgf@nfold@token@finish@normal%
         \fi%
       }%
   }%
   \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
 \fi%
}


\def\pgf@nfold@token@finish@normal{%
 \pgfpathlineto{\pgf@nfold@join@end}%
}

\def\pgf@nfold@token@finish@edgecase#1{%
 \pgf@nfold@join@end%
 \ifdim\insidepercentage pt<.5pt\relax%
   \pgf@process{\pgfpointadd{#1}{\pgfpointpolar{\pgf@nfold@secondang+90}{\pgf@nfold@shiftamount}}}
 \fi%
 \pgfpathlineto{}%
}



\newif\ifpgf@nfold@continuesegment
\newif\ifpgf@nfold@closejoinsedgecase
\newif\ifpgf@nfold@angletoosharp
\newif\ifpgf@nfold@intersectionsnotloaded
\newif\ifpgf@nfold@lastconnsubpath


\def\pgf@nfold@process@segment{%
 \if\pgf@nfold@cur@visible0
   \if\pgf@nfold@cur@type m
     \if\pgf@nfold@start@arrowcode1
       \ifpgf@nfold@lastconnsubpath
         \if\pgf@nfold@prev@type f
           \if\pgf@nfold@next@visible1
             \edef\pgf@nfold@macrotoadd{%
               \noexpand\pgf@nfold@extendtotip{s}{\pgf@nfold@cur@last}{\pgf@nfold@next@angle@i}
             }%
             \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
             \let\pgf@nfold@cur@type l
             \let\pgf@nfold@cur@visible1
             \let\pgf@nfold@cur@angle@ii\pgf@nfold@next@angle@i
             \let\pgf@nfold@cur@tang@ii\pgf@nfold@next@tang@i
             \def\pgf@nfold@deltaphi@end{0}
             \pgf@nfold@angletoosharpfalse
           \fi
         \fi%
       \fi
     \fi
   \fi%
 \else%
   \let\pgf@nfold@cur@movedfirst\pgf@nfold@cur@first
   \let\pgf@nfold@cur@movedlast\pgf@nfold@cur@last
   \def\pgf@nfold@shortenstartjoin{0}
   \def\pgf@nfold@shortenendjoin{0}
   \pgf@nfold@closejoinsedgecasefalse
   \if\pgf@nfold@prev@visible0
     \pgf@nfold@continuesegmentfalse
   \else
     \pgf@nfold@continuesegmenttrue
     \let\pgf@nfold@deltaphi@start\pgf@nfold@deltaphi@end
     \pgf@xb=\pgf@nfold@deltaphi@start pt\relax
     \ifdim\pgf@xb<0pt\relax
       \pgf@xb=-\pgf@xb
     \fi
     \ifpgf@nfold@angletoosharp\else
       \ifdim\pgf@xb>0.5pt\relax
         \pgf@yb=.5\pgf@xb
         \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}
         \pgf@yb=\pgf@nfold@hwidth\relax
         \pgf@yb=\pgfmathresult\pgf@yb
         \edef\pgf@nfold@shortenstartjoin{\pgf@sys@tonumber\pgf@yb}
         \pgfextract@process\pgf@nfold@cur@movedfirst{%
           \pgfpointadd{\pgf@nfold@cur@first}%
                       {\pgfqpointscale{\pgf@nfold@shortenstartjoin}{\pgf@nfold@cur@tang@i}}}%
         \if\pgf@nfold@cur@type c
           \pgf@process{\pgfpointdiff{\pgf@nfold@cur@first}{\pgf@nfold@cur@supporta}}
           \pgfmathveclen@{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}
           \ifdim\pgfmathresult pt>0.1pt\relax
             \pgfmathveclen@{\pgfmathresult}{\pgf@sys@tonumber\pgf@yb}
             \pgfextract@process\pgf@nfold@cur@supporta{\pgfpointadd%
               {\pgf@nfold@cur@first}%
               {\pgfqpointscale{\pgfmathresult}{\pgf@nfold@cur@tang@i}}}%
           \else
             \let\pgf@nfold@cur@supporta\pgf@nfold@cur@movedfirst
           \fi
         \fi
       \fi
     \fi
   \fi
   \if\pgf@nfold@next@visible1
     \pgfmathsubtract@{\pgf@nfold@next@angle@i}{\pgf@nfold@cur@angle@ii}
     \pgf@nfold@clampangle
     \edef\pgf@nfold@deltaphi@end{\pgfmathresult}
     \pgf@xb=\pgf@nfold@deltaphi@end pt\relax
     \ifdim\pgf@xb<0pt\relax
       \pgf@xb=-\pgf@xb
     \fi
     \ifdim\pgf@xb>178pt\relax
       \pgfutil@packagewarning{tikz-nfold}{Angle too sharp, expect visual errors}
       \pgf@nfold@angletoosharptrue
     \else
       \pgf@nfold@angletoosharpfalse
       \ifdim\pgf@xb>0.5pt\relax
         \pgf@yb=.5\pgf@xb
         \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}
         \pgf@yb=\pgf@nfold@hwidth\relax
         \pgf@yb=\pgfmathresult\pgf@yb
         \edef\pgf@nfold@shortenendjoin{\pgf@sys@tonumber\pgf@yb}
         \pgf@yb=-\pgf@yb
         \pgfextract@process\pgf@nfold@cur@movedlast{%
           \pgfpointadd{\pgf@nfold@cur@last}%
             {\pgfqpointscale{-\pgf@nfold@shortenendjoin}{\pgf@nfold@cur@tang@ii}}}%
         \pgfextract@process\pgf@nfold@cur@movedlast{%
           \pgfpointadd{\pgf@nfold@cur@last}%
             {\pgfqpointpolar{\pgf@nfold@cur@angle@ii}{\pgf@yb}}}%
         \if\pgf@nfold@cur@type c
           \pgf@process{\pgfpointdiff{\pgf@nfold@cur@supportb}{\pgf@nfold@cur@last}}
           \pgfmathveclen@{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}
           \ifdim\pgfmathresult pt>0.1pt\relax
             \pgfmathveclen@{\pgfmathresult}{\pgf@sys@tonumber\pgf@yb}
             \pgfextract@process\pgf@nfold@cur@supportb{\pgfpointadd%
               {\pgf@nfold@cur@last}%
               {\pgfqpointscale{-\pgfmathresult}{\pgf@nfold@cur@tang@ii}}}%
           \else
             \let\pgf@nfold@cur@supportb\pgf@nfold@cur@movedlast
           \fi
         \fi
       \fi
     \fi
     \if\pgf@nfold@cur@type l
       \pgf@process{\pgfpointdiff{\pgf@nfold@cur@first}{\pgf@nfold@cur@last}}
       \pgfmathveclen@{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}
       \pgf@xa=\pgf@nfold@shortenstartjoin pt\relax
       \advance\pgf@xa by\pgf@nfold@shortenendjoin pt\relax
       \ifdim\pgf@xa>\pgfmathresult pt\relax
         \pgf@nfold@closejoinsedgecasetrue
       \fi
     \fi
   \fi%
   \if\pgf@nfold@prev@visible0%
     \ifpgf@nfold@closejoinsedgecase
       \edef\pgf@nfold@macrotoadd{%
         \noexpand\pgf@nfold@token@edgecase@movetostart{\pgf@nfold@cur@movedfirst}{\pgf@nfold@cur@angle@i}%
       }%
       \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
     \fi
   \else
     \ifpgf@nfold@angletoosharp\else
       \if\pgf@nfold@cur@type z\else
         \pgf@nfold@process@join
       \fi
     \fi
   \fi
   \let\pgf@nfold@prev@segment@end\pgf@nfold@cur@movedlast
   \if\pgf@nfold@cur@type i
     \let\pgf@nfold@connsubpath@tang@i\pgf@nfold@next@tang@i%
     \let\pgf@nfold@connsubpath@angle@i\pgf@nfold@next@angle@i%
   \fi
   \if\pgf@nfold@cur@type l
     \ifpgf@nfold@closejoinsedgecase\else
       \edef\pgf@nfold@macrotoadd{%
         \expandafter\noexpand\ifpgf@nfold@continuesegment%
           \pgf@nfold@token@lineto@continue%
         \else%
           \pgf@nfold@token@lineto%
         \fi{\pgf@nfold@cur@movedfirst}{\pgf@nfold@cur@movedlast}{\pgf@nfold@cur@tang@i}%
       }%
       \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
     \fi
   \fi
   \if\pgf@nfold@cur@type o
     \def\pgf@nfold@macrotoadd{\pgf@nfold@token@closepath}%
     \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
   \fi
   \if\pgf@nfold@cur@type z
     \def\pgf@nfold@macrotoadd{\pgf@nfold@token@closepath}%
     \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
   \fi
   \if\pgf@nfold@cur@type c
     \ifpgf@nfold@continuesegment
       \pgf@subdividecurve{\pgf@nfold@cur@movedfirst}{\pgf@nfold@cur@supporta}{\pgf@nfold@cur@supportb}{\pgf@nfold@cur@movedlast}{\pgf@offset@max@recursion}{0}{\pgf@nfold@addcurvesegment@callback@continue}
     \else
       \pgf@subdividecurve{\pgf@nfold@cur@movedfirst}{\pgf@nfold@cur@supporta}{\pgf@nfold@cur@supportb}{\pgf@nfold@cur@movedlast}{\pgf@offset@max@recursion}{0}{\pgf@nfold@addcurvesegment@callback}%
     \fi
   \fi
   \if\pgf@nfold@cur@type i
     \edef\pgf@nfold@macrotoadd{%
       \noexpand\pgf@nfold@token@invisibleline{\pgf@nfold@cur@movedfirst}{\pgf@nfold@cur@movedlast}{\pgf@nfold@cur@tang@i}%
     }%
     \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
   \fi
   \if\pgf@nfold@next@type t%
     \ifnum\pgf@nfold@end@arrowcode=1
       \edef\pgf@nfold@macrotoadd{%
         \noexpand\pgf@nfold@extendtotip{e}{\pgf@nfold@cur@last}{\pgf@nfold@cur@angle@ii}}%
       \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
     \fi%
   \fi%
 \fi%
}


\def\pgf@nfold@addcurvesegment@callback#1#2#3#4#5{%
 \if#50%
   \edef\pgf@nfold@macrotoadd{%
     \noexpand\pgf@nfold@token@curveto{#1}{#2}{#3}{#4}{\pgf@tmp@tang@i}{\pgf@tmp@tang@ii}%
   }%
   \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
 \else%
   \pgf@nfold@addcurvesegment@callback@continue{#1}{#2}{#3}{#4}{#5}%
 \fi%
}

\def\pgf@nfold@addcurvesegment@callback@continue#1#2#3#4#5{%
 \edef\pgf@nfold@macrotoadd{%
   \noexpand\pgf@nfold@token@curveto@continue{#1}{#2}{#3}{#4}{\pgf@tmp@tang@i}{\pgf@tmp@tang@ii}%
 }%
 \pgf@nfold@addmacro\pgf@parsed@cur@conn@seg%
}



\expandafter\def\csname pgf@nfold@intersec@cache@2@3\endcsname{\pgfqpoint{2pt}{0pt}}
\expandafter\def\csname pgf@nfold@intersec@cache@2@4\endcsname{\pgfqpoint{0.94063pt}{-0.33333pt}}
\expandafter\def\csname pgf@nfold@intersec@cache@3@4\endcsname{\pgfqpoint{0.94063pt}{0.33333pt}}
\expandafter\def\csname pgf@nfold@intersec@cache@2@5\endcsname{\pgfqpoint{0.64167pt}{-0.5pt}}
\expandafter\def\csname pgf@nfold@intersec@cache@3@5\endcsname{\pgfqpoint{2pt}{0pt}}
\expandafter\def\csname pgf@nfold@intersec@cache@4@5\endcsname{\pgfqpoint{0.64167pt}{0.5pt}}
\def\pgf@nfold@intersec@numcached{5}

\newif\ifpgf@nfold@ontheedge
\def\pgf@nfold@extendtotip#1#2#3{
 \ifpgf@nfold@intersectionsnotloaded
   \pgfutil@packageerror{tikz-nfold}{%
       If `nfold' is larger than \pgf@nfold@intersec@numcached\space and you use
       an `Implies' arrow tip you need to say \string\usetikzlibrary{intersections}}{}
 \else
 \pgf@nfold@ontheedgetrue
 \ifnum\pgf@nfold@index>1\relax\ifnum\pgf@nfold@index<\pgf@nfold@order\relax%
   \pgf@nfold@ontheedgefalse
 \fi\fi
 \ifpgf@nfold@ontheedge%
   \if#1s
     \pgfpathmoveto{\pgfpointadd{#2}{\pgfpointpolar{#3+90}{\pgf@nfold@shiftamount}}}%
   \fi
 \else
   \ifcsname pgf@nfold@intersec@cache@\the\pgf@nfold@index @\the\pgf@nfold@order\endcsname
     \pgfextract@process\pgf@nfold@arrowintersect
       {\csname pgf@nfold@intersec@cache@\the\pgf@nfold@index @\the\pgf@nfold@order\endcsname}%
   \else
     \pgfintersectionofpaths{
       \pgfpathmoveto{\pgfqpoint{-1.4pt}{2.65pt}}
       \pgfpathcurveto{\pgfqpoint{-0.75pt}{1.25pt}}{\pgfqpoint{1pt}{0.05pt}}{\pgfqpoint{2pt}{0pt}}
       \pgfpathcurveto{\pgfqpoint{1pt}{-0.05pt}}{\pgfqpoint{-0.75pt}{-1.25pt}}{\pgfqpoint{-1.4pt}{-2.65pt}}
     }{
       \pgfpathmoveto{\pgfqpoint{-3pt}{\pgf@nfold@shift@fraction pt}}
       \pgfpathlineto{\pgfqpoint{3pt}{\pgf@nfold@shift@fraction pt}}
     }
     \ifnum\pgfintersectionsolutions>0
       \pgfextract@process\pgf@nfold@arrowintersect{\pgfpointintersectionsolution{1}}%
       \immediate\write17{tikz-nfold: computed intersection cache@\the\pgf@nfold@index @\the\pgf@nfold@order: \string\pgfqpoint{\the\pgf@x}{\the\pgf@y}^^J}
       \expandafter\xdef\csname pgf@nfold@intersec@cache@\the\pgf@nfold@index @\the\pgf@nfold@order\endcsname{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}
     \else
       \pgfutil@packagewarning{tikz-nfold}{did not find intersection}
       \pgfextract@process\pgf@nfold@arrowintersect{\pgfqpoint{0pt}{\pgf@nfold@shift@fraction pt}}%
     \fi
   \fi%
   \begingroup
     \pgftransformreset
     \pgftransformshift{#2}
     \pgftransformrotate{#3}
     \if#1s
       \pgftransformxscale{-1}
     \fi
     \pgfutil@tempdima=\pgf@nfold@hwidth
     \pgfutil@tempdima=\pgf@nfold@shift@fraction\pgfutil@tempdima
     \pgfextract@process\pgf@nfold@startofextension
       {\pgfpointtransformed{\pgfqpoint{0pt}{\pgfutil@tempdima}}}
     \pgftransformshift{\pgfqpoint{.42\pgflinewidth}{0pt}}
     \pgftransformscale{\pgf@nfold@hwidth}
     \pgfextract@process\pgf@nfold@arrowintersect{\pgfpointtransformed{\pgf@nfold@arrowintersect}}
     \global\let\pgf@nfold@startofextension\pgf@nfold@startofextension
     \global\let\pgf@nfold@arrowintersect\pgf@nfold@arrowintersect
   \endgroup
   \if#1s
     \pgfpathmoveto{\pgf@nfold@arrowintersect}
     \pgfpathlineto{\pgf@nfold@startofextension}
   \else\if#1e
     \pgfpathlineto{\pgf@nfold@arrowintersect}
   \else
     \pgfutil@packageerror{tikz-nfold}{Invalid argument to \string\pgf@nfold@extendtotip: \meaning#1}{}
   \fi\fi
   \pgftransformreset
   \fi%
 \fi%
}


\def\pgf@nfold@start@arrowcode{0}
\def\pgf@nfold@end@arrowcode{0}

\def\pgf@nfold@parsearrows{
 \ifpgfutil@tempswa%
   \expandafter\pgf@nfold@parsearrowmacro\pgf@start@tip@sequence\relax
   \let\pgf@nfold@start@arrowcode\pgf@nfold@detectedarrow
   \expandafter\pgf@nfold@parsearrowmacro\pgf@end@tip@sequence\relax
   \let\pgf@nfold@end@arrowcode\pgf@nfold@detectedarrow
 \else
   \def\pgf@nfold@start@arrowcode{0}
   \def\pgf@nfold@end@arrowcode{0}
 \fi
}

\def\pgf@nfold@parsearrowmacro#1{%
 \def\pgf@nfold@detectedarrow{0}
 \ifx#1\relax
   \let\pgf@next\relax
 \else
   \ifx#1\pgf@arrow@handle
     \let\pgf@next\pgf@nfold@parse@arrow@handle
   \else
     \ifx#1\pgf@arrow@handle@shorthand@empty
       \let\pgf@next\pgf@nfold@parse@shorthandempty
     \else
       \let\pgf@next\pgfutil@gobble@until@relax
     \fi
   \fi
 \fi
 \pgf@next
}

\def\pgf@nfold@param@Implies{Implies}

\def\pgf@nfold@parse@arrow@handle#1{%
 \def\pgf@tmp{#1}
 \ifx\pgf@tmp\pgf@nfold@param@Implies
   \def\pgf@nfold@detectedarrow{1}
 \fi
 \pgfutil@gobble@until@relax
}

\def\pgf@nfold@parse@shorthandempty#1{
 \expandafter\def\expandafter\pgf@tmp\expandafter{#1}
 \expandafter\pgf@nfold@parsearrowmacro\pgf@tmp\relax
 \pgfutil@gobble@until@relax
}



\newcount\pgf@nfold@order
\pgf@nfold@order=1

\def\pgf@nfold@preparenfoldpath{%
 \ifnum\pgf@nfold@order>1\relax
   \ifdim\pgfinnerlinewidth>0pt\relax
     \pgfsyssoftpath@getcurrentpath\pgf@nfold@cachedpath%
     \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
   \else
     \pgfutil@packageerror{tikz-nfold}{Must set \string\pgfinnerlinewidth\space to use nfold, e.g. by setting /tikz/double distance}{}
   \fi
 \fi
}

\let\pgf@nfold@old@path@check@proper\pgf@path@check@proper
\def\pgf@path@check@proper{%
 \pgf@nfold@old@path@check@proper%
 \ifpgfutil@tempswa\else%
   \pgf@nfold@preparenfoldpath%
 \fi%
}

\let\pgf@nfold@old@prepare@start@of@path\pgf@prepare@start@of@path
\def\pgf@prepare@start@of@path{%
 \pgf@nfold@old@prepare@start@of@path%
 \pgf@nfold@preparenfoldpath%
}

\let\pgf@nfold@old@stroke@inner@line\pgf@stroke@inner@line
\def\pgf@stroke@inner@line{%
 \ifnum\pgf@nfold@order>1\relax%
   \pgf@nfold@render@cached@softpath%
 \else%
   \pgf@nfold@old@stroke@inner@line%
 \fi%
}




\def\pgf@nfold@parsemoveto#1#2{%
 \ifx\pgf@cur@conn@subpath\pgfutil@empty%
   \def\pgf@nfold@parser@last@moveto{{#1}{#2}}%
   \def\pgf@cur@conn@subpath{\relax}%
 \else%
   \def\pgf@nfold@macrotoadd{\pgf@nfold@processmoveto{#1}{#2}}%
   \pgf@nfold@addmacro\pgf@cur@conn@subpath%
   \pgf@nfold@lastconnsubpathfalse%
   \pgf@nfold@process@conn@subpath%
   \let\pgf@nfold@last@closepath@from\pgfutil@empty%
   \let\pgf@cur@conn@subpath\pgfutil@empty%
   \pgf@nfold@parser@setupfirst%
   \def\pgf@nfold@parser@last@moveto{{#1}{#2}}%
 \fi%
 \pgf@nfold@parsesoftpath@finish{#1}{#2}%
}

\def\pgf@nfold@parselineto#1#2{%
 \def\pgf@nfold@macrotoadd{\pgf@nfold@processlineto{#1}{#2}}%
 \pgf@nfold@addmacro\pgf@cur@conn@subpath%
 \pgf@nfold@parsesoftpath@finish{#1}{#2}%
}

\def\pgf@nfold@parseclosepath#1#2{%
 \let\pgf@nfold@last@closepath@from\pgf@nfold@parser@previous@pt%
 \def\pgf@nfold@macrotoadd{\pgf@nfold@processclosepath{#1}{#2}}%
 \pgf@nfold@addmacro\pgf@cur@conn@subpath%
 \pgf@nfold@parsesoftpath@finish{#1}{#2}%
}

\def\pgf@nfold@parsecurveto#1#2{%
 \edef\pgf@nfold@macrotoadd{\noexpand\pgf@nfold@processcurveto\pgf@nfold@parser@supporta\pgf@nfold@parser@supportb{#1}{#2}}%
 \pgf@nfold@addmacro\pgf@cur@conn@subpath%
 \pgf@nfold@parsesoftpath@finish{#1}{#2}%
}

\def\pgf@nfold@parserect#1#2#3#4{%
 \pgf@nfold@parsemoveto{#1}{#2}%
 \pgf@xc=#1\relax
 \pgf@yc=#2\relax
 \pgf@xd=#3\relax
 \pgf@yd=#4\relax
 \advance\pgf@yc\pgf@yd%
 \edef\pgf@temp{{\the\pgf@xc}{\the\pgf@yc}}%
 \expandafter\pgf@nfold@parselineto\pgf@temp%
 \advance\pgf@xc\pgf@xd%
 \edef\pgf@temp{{\the\pgf@xc}{\the\pgf@yc}}%
 \expandafter\pgf@nfold@parselineto\pgf@temp%
 \advance\pgf@yc-\pgf@yd%
 \edef\pgf@temp{{\the\pgf@xc}{\the\pgf@yc}}%
 \expandafter\pgf@nfold@parselineto\pgf@temp%
 \advance\pgf@xc-\pgf@xd%
 \edef\pgf@temp{{\the\pgf@xc}{\the\pgf@yc}}%
 \expandafter\pgf@nfold@parseclosepath\pgf@temp%
 \pgf@nfold@parsemoveto{#1}{#2}%
}


\def\pgf@nfold@parsesoftpath#1#2{%
 \let\pgf@cur@conn@subpath\pgfutil@empty%
 \let\pgf@all@parsed@subpaths\pgfutil@empty%
 \edef\pgf@nfold@parser@last@moveto{{\the\pgf@path@lastx}{\the\pgf@path@lasty}}%
 \let\pgf@nfold@last@closepath@from\pgfutil@empty%
 \pgf@nfold@parser@setupfirst%
 \expandafter\pgf@nfold@@parsesoftpath#1\pgf@stop{}{}%
 \let#2\pgf@all@parsed@subpaths%
}%

\def\pgf@nfold@@parsesoftpath#1#2#3{%
 \let\pgf@next\pgf@nfold@@parsesoftpath%
 \ifx#1\pgf@stop%
   \def\pgf@nfold@macrotoadd{\pgf@nfold@processlast}%
   \pgf@nfold@addmacro\pgf@cur@conn@subpath%
   \pgf@nfold@lastconnsubpathtrue%
   \pgf@nfold@process@conn@subpath%
   \let\pgf@next\relax%
 \else%
   \ifx#1\pgfsyssoftpath@movetotoken%
     \pgf@nfold@parsemoveto{#2}{#3}%
   \else%
     \ifx#1\pgfsyssoftpath@linetotoken%
       \pgf@nfold@parselineto{#2}{#3}%
     \else%
       \ifx#1\pgfsyssoftpath@curvetosupportatoken%
         \def\pgf@nfold@parser@supporta{{#2}{#3}}%
       \else%
         \ifx#1\pgfsyssoftpath@curvetosupportbtoken%
           \def\pgf@nfold@parser@supportb{{#2}{#3}}%
         \else%
           \ifx#1\pgfsyssoftpath@curvetotoken%
             \pgf@nfold@parsecurveto{#2}{#3}%
           \else%
             \ifx#1\pgfsyssoftpath@closepathtoken%
               \pgf@nfold@parseclosepath{#2}{#3}%
             \else%
               \ifx#1\pgfsyssoftpath@rectcornertoken%
                 \def\pgf@nfold@parser@rectcorner{{#2}{#3}}%
               \else%
                 \ifx#1\pgfsyssoftpath@rectsizetoken%
                   \expandafter\pgf@nfold@parserect\pgf@nfold@parser@rectcorner{#2}{#3}%
                 \else%
                   \pgfutil@packageerror{tikz-nfold}{Unrecognised soft path token `#1'}{}%
                 \fi%
               \fi%
             \fi%
           \fi%
         \fi%
       \fi%
     \fi%
   \fi%
 \fi%
 \pgf@next%
}%

\def\pgf@nfold@parsesoftpath@finish#1#2{%
 \def\pgf@nfold@parser@previous@pt{{#1}{#2}}%
 \let\pgf@nfold@sectolast@segment\pgf@nfold@last@segment%
 \let\pgf@nfold@last@segment\pgf@nfold@macrotoadd%
}

\def\pgf@nfold@process@conn@subpath{%
 \let\pgf@parsed@cur@conn@seg\pgfutil@empty%
 \ifx\pgf@nfold@last@closepath@from\pgfutil@empty%
   \expandafter\pgf@nfold@processmoveto\pgf@nfold@parser@last@moveto%
 \else%
   \expandafter\pgf@nfold@processmoveto\pgf@nfold@last@closepath@from%
   \expandafter\pgf@nfold@processinvisibleline\pgf@nfold@parser@last@moveto%
 \fi%
 \pgf@cur@conn@subpath%
 \let\pgf@nfold@macrotoadd\pgf@parsed@cur@conn@seg%
 \pgf@nfold@addmacro\pgf@all@parsed@subpaths%
}


\def\pgf@nfold@processmoveto#1#2{%
 \pgf@nfold@process@moveup%
 \let\pgf@nfold@next@type=m%
 \let\pgf@nfold@next@visible=0%
 \edef\pgf@nfold@next@last{\pgf@x#1\pgf@y#2}%
 \pgf@nfold@process@segment%
}%

\def\pgf@nfold@process@line@common#1#2#3{%
 \pgf@nfold@process@moveup%
 \pgfextract@process\pgf@tmp@tang@i{\pgfpointnormalised{}\global\let\pgf@nfold@tmp\pgf@tmp}
 \let\pgf@nfold@next@type=#3%
 \let\pgf@nfold@next@visible=1%
 \let\pgf@nfold@next@tang@i\pgf@tmp@tang@i
 \let\pgf@nfold@next@tang@ii\pgf@tmp@tang@i
 \let\pgf@nfold@next@angle@i\pgf@nfold@tmp
 \let\pgf@nfold@next@angle@ii\pgf@nfold@tmp
 \let\pgf@nfold@next@first\pgf@nfold@cur@last
 \def\pgf@nfold@next@last{\pgf@x#1\pgf@y#2}%
 \pgf@nfold@process@segment%
}

\def\pgf@nfold@processlineto#1#2{%
 \pgf@process{\pgfpointdiff{\pgf@nfold@next@last}{\pgf@x#1\pgf@y#2}}%
 \pgfpointtaxicabnorm\pgf@xa%
 \ifdim\pgf@xa>.1pt\relax%
   \pgf@nfold@process@line@common{#1}{#2}{l}%
 \fi%
}%

\def\pgf@nfold@processcurveto#1#2#3#4#5#6{%
 \pgf@nfold@process@moveup%
 \pgf@offset@compute@tangents{\pgf@nfold@cur@last}{\pgf@x#1\pgf@y#2}{\pgf@x#3\pgf@y#4}{\pgf@x#5\pgf@y#6}%
 \let\pgf@nfold@next@type=c%
 \let\pgf@nfold@next@visible=1%
 \let\pgf@nfold@next@tang@i=\pgf@tmp@tang@i
 \let\pgf@nfold@next@tang@ii=\pgf@tmp@tang@ii
 \let\pgf@nfold@next@angle@i\pgf@tmp@angle@i
 \let\pgf@nfold@next@angle@ii\pgf@tmp@angle@ii
 \let\pgf@nfold@next@first\pgf@nfold@cur@last
 \def\pgf@nfold@next@supporta{\pgf@x#1\pgf@y#2}
 \def\pgf@nfold@next@supportb{\pgf@x#3\pgf@y#4}
 \def\pgf@nfold@next@last{\pgf@x#5\pgf@y#6}
 \pgf@nfold@process@segment%
}%

\def\pgf@nfold@processclosepath#1#2{%
 \pgf@process{\pgfpointdiff{\pgf@nfold@next@last}{\pgf@x#1\pgf@y#2}}%
 \pgfpointtaxicabnorm\pgf@xa%
 \ifdim\pgf@xa<0.1pt\relax%
   \pgf@nfold@process@closepath@zerolength{#1}{#2}%
 \else%
   \pgf@nfold@process@line@common{#1}{#2}{o}%
 \fi%
}%

\def\pgf@nfold@process@closepath@zerolength#1#2{%
 \pgf@nfold@process@moveup%
 \let\pgf@nfold@next@type=z%
 \let\pgf@nfold@next@visible=1%
 \let\pgf@nfold@next@tang@i\pgf@nfold@connsubpath@tang@i
 \let\pgf@nfold@next@tang@ii\pgf@nfold@connsubpath@tang@i
 \let\pgf@nfold@next@angle@i\pgf@nfold@connsubpath@angle@i
 \let\pgf@nfold@next@angle@ii\pgf@nfold@connsubpath@angle@i
 \let\pgf@nfold@next@first\pgf@nfold@cur@last
 \def\pgf@nfold@next@last{\pgf@x#1\pgf@y#2}%
 \pgf@nfold@process@segment%
}

\def\pgf@nfold@processinvisibleline#1#2{%
 \pgf@process{\pgfpointdiff{\pgf@nfold@next@last}{\pgf@x#1\pgf@y#2}}%
 \pgfpointtaxicabnorm\pgf@xa%
 \ifdim\pgf@xa>.1pt\relax%
   \pgf@nfold@process@line@common{#1}{#2}{i}%
 \else%
   \begingroup%
     \let\pgf@nfold@process@segment\relax%
     \pgf@nfold@sectolast@segment%
     \global\let\pgf@nfold@tmp\pgf@nfold@next@tang@ii%
   \endgroup%
   \pgfextract@process\pgf@nfold@next@first{\pgfpointdiff{\pgf@nfold@tmp}{\pgfqpoint{#1}{#2}}}%
   \pgf@nfold@tmp%
   \pgf@nfold@process@line@common{#1}{#2}{i}%
 \fi%
}%

\def\pgf@nfold@processlast{%
 \pgf@nfold@process@moveup%
 \let\pgf@nfold@next@type=t%
 \let\pgf@nfold@next@visible=0%
 \pgf@nfold@process@segment%
}

\def\pgf@nfold@addmacro#1{%
 \expandafter\expandafter\expandafter\gdef%
 \expandafter\expandafter\expandafter#1%
 \expandafter\expandafter\expandafter{%
 \expandafter#1\pgf@nfold@macrotoadd}%
}



\def\pgf@nfold@token@lineto#1#2#3{%
 \pgfoffsetline@{#1}{#2}{\pgf@nfold@shiftamount}{#3}%
}

\def\pgf@nfold@token@lineto@continue#1#2#3{%
 \pgfoffsetlinenomove@{#1}{#2}{\pgf@nfold@shiftamount}{#3}%
}

\def\pgf@nfold@token@invisibleline#1#2#3{%
 \pgfqpointscale{\pgf@nfold@shiftamount}{#3}%
 \pgf@xc=-\pgf@y%
 \pgf@y=\pgf@x%
 \pgf@x=\pgf@xc%
 \pgfpathmoveto{\pgfpointadd{}{#2}}%
}

\def\pgf@nfold@token@curveto#1#2#3#4#5#6{%
 \def\pgf@tmp@tang@i{#5}%
 \def\pgf@tmp@tang@ii{#6}%
 \pgf@offset@bezier@segment@{#1}{#2}{#3}{#4}{\pgf@nfold@shiftamount}%
 \pgfpathmoveto{\pgf@bezier@offset@i}%
 \pgfpathcurveto{\pgf@bezier@offset@ii}{\pgf@bezier@offset@iii}{\pgf@bezier@offset@iv}%
}

\def\pgf@nfold@token@curveto@continue#1#2#3#4#5#6{%
 \def\pgf@tmp@tang@i{#5}%
 \def\pgf@tmp@tang@ii{#6}%
 \pgf@offset@bezier@segment@{#1}{#2}{#3}{#4}{\pgf@nfold@shiftamount}%
 \pgfpathcurveto{\pgf@bezier@offset@ii}{\pgf@bezier@offset@iii}{\pgf@bezier@offset@iv}%
}

\def\pgf@nfold@token@closepath{%
 \pgfpathclose%
}

\def\pgf@nfold@token@edgecase@movetostart#1#2{%
 \pgfpathmoveto{\pgfpointadd%
   {#1}{\pgfpointpolar{#2+90}{\pgf@nfold@shiftamount}}}%
}


\def\pgf@nfold@parser@setupfirst{%
 \let\pgf@nfold@next@type=f%
 \let\pgf@nfold@next@visible=0%
 \edef\pgf@nfold@next@last{\pgf@x\the\pgf@path@lastx\pgf@y\the\pgf@path@lasty}%
}

\def\pgf@nfold@clampangle{
 \ifdim\pgfmathresult pt<-180pt\relax
   \pgfutil@tempdima=\pgfmathresult pt
   \advance\pgfutil@tempdima by 360pt
   \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}
 \else\ifdim\pgfmathresult pt>180pt\relax
   \pgfutil@tempdima=\pgfmathresult pt
   \advance\pgfutil@tempdima by -360pt
   \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}
 \fi\fi
}


\def\pgf@nfold@process@moveup{%
 \let\pgf@nfold@prev@type\pgf@nfold@cur@type%
 \let\pgf@nfold@prev@visible\pgf@nfold@cur@visible%
 \let\pgf@nfold@prev@tang@i\pgf@nfold@cur@tang@i%
 \let\pgf@nfold@prev@tang@ii\pgf@nfold@cur@tang@ii%
 \let\pgf@nfold@prev@angle@i\pgf@nfold@cur@angle@i%
 \let\pgf@nfold@prev@angle@ii\pgf@nfold@cur@angle@ii%
 \let\pgf@nfold@prev@first\pgf@nfold@cur@first%
 \let\pgf@nfold@prev@supporta\pgf@nfold@cur@supporta%
 \let\pgf@nfold@prev@supportb\pgf@nfold@cur@supportb%
 \let\pgf@nfold@prev@last\pgf@nfold@cur@last%
 \let\pgf@nfold@cur@type\pgf@nfold@next@type%
 \let\pgf@nfold@cur@visible\pgf@nfold@next@visible%
 \let\pgf@nfold@cur@tang@i\pgf@nfold@next@tang@i%
 \let\pgf@nfold@cur@tang@ii\pgf@nfold@next@tang@ii%
 \let\pgf@nfold@cur@angle@i\pgf@nfold@next@angle@i%
 \let\pgf@nfold@cur@angle@ii\pgf@nfold@next@angle@ii
 \let\pgf@nfold@cur@first\pgf@nfold@next@first%
 \let\pgf@nfold@cur@supporta\pgf@nfold@next@supporta%
 \let\pgf@nfold@cur@supportb\pgf@nfold@next@supportb%
 \let\pgf@nfold@cur@last\pgf@nfold@next@last%
}


\def\pgfoffsetpath#1#2{%
 \begingroup
   \pgfmathsetlengthmacro\pgf@nfold@parsed@hwidth{#2}
   \pgf@x=\pgf@nfold@parsed@hwidth\relax
   \ifdim\pgf@x<0pt\relax
     \pgf@x=-\pgf@x
     \def\pgf@nfold@shift@fraction{-1}
   \else
     \def\pgf@nfold@shift@fraction{1}
   \fi
   \edef\pgf@nfold@parsed@hwidth{\the\pgf@x}
   \pgfoffsetpathqfraction{#1}{\pgf@nfold@parsed@hwidth}{\pgf@nfold@shift@fraction}
 \endgroup
}

\def\pgfoffsetpathfraction#1#2#3{%
 \begingroup
   \pgfmathsetlengthmacro\pgf@nfold@parsed@hwidth{#2}
   \pgfmathsetmacro\pgf@nfold@shift@fraction{#3}
   \pgfoffsetpathqfraction{#1}{\pgf@nfold@parsed@hwidth}{\pgf@nfold@shift@fraction}
 \endgroup
}

\def\pgfoffsetpathindex#1#2#3#4{%
 \begingroup
   \pgfmathsetmacro\pgf@nfold@shift@fraction{-1+2*(#3-1)/(#4-1)}
   \pgfoffsetpathqfraction{#1}{#2}{\pgf@nfold@shift@fraction}
 \endgroup
}

\def\pgfoffsetpathqfraction#1#2#3{%
 \begingroup
   \pgf@x=#2\relax
   \edef\pgf@nfold@hwidth{\the\pgf@x}
   \edef\pgf@nfold@shift@fraction{#3}
   \pgf@x=\pgf@nfold@shift@fraction\pgf@x\relax
   \edef\pgf@nfold@shiftamount{\pgf@sys@tonumber\pgf@x}
   \pgfprocessround{#1}{\pgf@nfold@cachedpath}%
   \pgf@nfold@parsesoftpath{\pgf@nfold@cachedpath}{\parsedpath}%
   \pgftransformreset%
   \parsedpath%
 \endgroup
}

\endinput