PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities
Viewing File: /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
% Copyright 2008 by Till Tantau and Mark Wibrow % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \ProvidesPackageRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/utilities/pgffor.code.tex,v 1.18 2010/03/23 14:47:45 vibrovski Exp $ \newdimen\pgffor@iter \newdimen\pgffor@skip \newif\ifpgffor@continue \let\pgffor@beginhook=\pgfutil@empty \let\pgffor@endhook=\pgfutil@empty \let\pgffor@afterhook=\pgfutil@empty % Stack emulation % \newtoks\pgffor@stack \pgffor@stack={{}{}{}} \def\pgffor@stackpush#1{% \def\pgffor@stacktemp{#1}% \expandafter\expandafter\expandafter\pgffor@stack\expandafter\expandafter\expandafter=% \expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter% {\expandafter\pgffor@stacktemp\expandafter}\the\pgffor@stack}% } \def\pgffor@stackpop{\expandafter\pgffor@@stackpop\the\pgffor@stack\pgffor@stackstop} \def\pgffor@@stackpop#1#2\pgffor@stackstop{\pgffor@stack{#2}#1} \def\pgffor@emptyvalues{, \pgffor@stop,}% \def\pgffor@foreach{% \pgffor@atbeginforeach% \let\pgffor@assign@before@code=\pgfutil@empty% \let\pgffor@assign@after@code=\pgfutil@empty% \let\pgffor@assign@once@code=\pgfutil@empty% \let\pgffor@remember@code=\pgfutil@empty% \let\pgffor@remember@once@code=\pgfutil@empty% \pgffor@alphabeticsequencefalse% \pgffor@contextfalse% % \let\pgffor@var=\pgfutil@empty % \pgffor@vars% } \let\foreach=\pgffor@foreach \def\pgffor@vars{% \pgfutil@ifnextchar i{\pgffor@@vars@end}{% \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%] \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{% \pgffor@@vars}}}}% \def\pgffor@@vars@end in{\pgfutil@ifnextchar\bgroup{\pgffor@normal@list}{\pgffor@macro@list}} \def\pgffor@@vars@opt[#1]{\pgfkeys{/pgf/foreach/.cd,#1}\pgffor@vars} \def\pgffor@@vars#1{\pgffor@var@add#1\pgffor@stop\pgffor@vars} \def\pgffor@@vars@slash@gobble/{\pgffor@@vars} \def\pgffor@var@add#1#2\pgffor@stop{% \ifx\pgffor@var\pgfutil@empty% \def\pgffor@var{#1}% \def\pgffor@mainvar{#1}% \else% \expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@var/#1}% \fi% } \def\pgffor@macro@list#1{% \expandafter\pgffor@normal@list\expandafter{#1}} \def\pgffor@normal@list#1{% \def\pgffor@values{#1, \pgffor@stop,}% \ifx\pgffor@values\pgffor@emptyvalues \def\pgffor@values{\pgffor@stop,}% \fi% \let\pgffor@body=\pgfutil@empty% \global\pgffor@continuetrue% \pgffor@collectbody} \def\pgffor@collectbody{% \pgfutil@ifnextchar\foreach{\pgffor@collectforeach}{% \pgfutil@ifnextchar\bgroup{\pgffor@collectargument}{\pgffor@collectsemicolon}}% } \def\pgffor@collectforeach\foreach#1in{% \pgfutil@ifnextchar\bgroup{\pgffor@collectforeach@normal{#1}}{\pgffor@collectforeach@macro{#1}}} \def\pgffor@collectforeach@macro#1#2{% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter{\pgffor@body\foreach#1in#2}% \pgffor@collectbody% } \def\pgffor@collectforeach@normal#1#2{% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter{\pgffor@body\foreach#1in{#2}}% \pgffor@collectbody% } \long\def\pgffor@collectargument#1{% \expandafter\pgfutil@in@\expandafter\foreach\expandafter{\pgffor@body}% \ifpgfutil@in@% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% {\pgffor@body{#1}}% \else% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% {\pgffor@body#1}% \fi% \pgffor@iterate% } \def\pgffor@collectsemicolon{% \let\pgffor@next=\pgffor@collectnormalsemicolon% \ifnum\the\catcode`\;=\active\relax% \let\pgffor@next=\pgffor@collectactivesemicolon% \fi% \pgffor@next% } \def\pgffor@collectnormalsemicolon#1;{% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter{\pgffor@body#1;}% \pgffor@iterate% } { \catcode`\;=\active \gdef\pgffor@collectactivesemicolon#1;{% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter{\pgffor@body#1;}% \pgffor@iterate% } } \def\pgffor@iterate{% % Must do all of these in case the internal stack is used. \let\pgffor@last=\pgfutil@empty% \let\pgffor@prevlast=\pgfutil@empty% \let\pgffor@dotsend=\pgfutil@empty% \let\pgffor@dots@pre=\pgfutil@empty% \let\pgffor@dots@post=\pgfutil@empty% % \expandafter\pgffor@scan\pgffor@values} \def\pgffor@stop{\pgffor@stop}% \def\pgffor@dots{...}% \def\pgffor@scan{\pgfutil@ifnextchar({\pgffor@scanround}{\pgffor@scanone}} \def\pgffor@scanround(#1)#2,{\def\pgffor@value{(#1)}\pgffor@scanned} \def\pgffor@scanone#1,{\def\pgffor@value{#1}\pgffor@scanned} % Check for dots. \newif\ifpgffor@dots@in@ \def\pgffor@dots@in@#1...#2#3\pgffor@stop{% \ifx\pgffor@dots@@#2% \pgffor@dots@in@false% \else% \pgffor@dots@in@true% \fi% } \def\pgffor@dots@@{\pgffor@dots@@} \def\pgffor@scanned{% \ifx\pgffor@value\pgffor@stop% \let\pgffor@next=\pgffor@after% Done! \else% % Check for dots. Quicker than \pgfutil@in@ and not suceptable % to false-positives when a token sequence ends in a single full-stop. \expandafter\pgffor@dots@in@\pgffor@value\pgffor@dots@...\pgffor@dots@@\pgffor@stop% \ifpgffor@dots@in@% \let\pgffor@next=\pgffor@handledots% \else% \let\pgffor@next=\pgffor@handlevalue% \fi% \ifpgffor@continue% \else% \let\pgffor@next=\pgffor@scan% Done! \fi% \fi% \pgffor@next} \def\pgffor@after{% \global\pgffor@continuetrue% \pgffor@atendforeach% \pgffor@afterhook} \def\pgffor@handlevalue{% \let\pgffor@prevlast=\pgffor@last% \let\pgffor@last=\pgffor@value% \pgffor@invokebody% \pgffor@scan% } \def\pgffor@invokebody{% \pgffor@begingroup% \expandafter\pgfutil@in@\expandafter/\expandafter{\pgffor@var}% \ifpgfutil@in@% \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@value//\relax}% \expandafter\pgffor@multiassign\pgffor@var/\pgffor@stop/\pgffor@stop/\relax% \else% \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@value}% \fi% % Execute assign once code. \ifx\pgffor@assign@once@code\pgfutil@empty% \else% \pgffor@assign@once@code% \fi% % Execute assign before code. \ifx\pgffor@assign@before@code\pgfutil@empty% \else% \pgffor@assign@before@code% \fi% % \expandafter\pgffor@beginhook\pgffor@body\pgffor@endhook% % Execute assign after code. \ifx\pgffor@assign@after@code\pgfutil@empty% \else% \pgffor@assign@after@code% \fi% % \pgffor@endgroup% } \def\pgffor@multiassign#1/#2/\relax{% \def\pgffor@currentvar{#1}% \def\pgffor@rest{#2}% \ifx\pgffor@currentvar\pgffor@stop% \let\pgffor@next=\relax% \else% \let\pgffor@next=\pgffor@multiassignrest% \fi% \pgffor@next% } \def\pgffor@multiassignrest{\expandafter\pgffor@multiassignfinal\pgffor@valuerest} \def\pgffor@multiassignfinal#1/#2/\relax{% \def\pgffor@temp{#1}% \ifx\pgffor@currentvar\pgffor@mainvar% \ifpgffor@alphabeticsequence% \pgffor@makealphabetic\pgffor@temp% \fi% \fi% \def\pgffor@test{#2}% \ifx\pgffor@test\pgfutil@empty% \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}% repeat \else% \def\pgffor@valuerest{#2/\relax}% \fi% \expandafter\expandafter\expandafter\def\expandafter\pgffor@currentvar\expandafter{\pgffor@temp}% % \expandafter\pgffor@multiassign\pgffor@rest/\relax% } \def\pgffor@gobblespaces#1{\pgfutil@ifnextchar x{#1}{#1}} \def\pgffor@handledots{% \pgffor@gobblespaces{\expandafter\pgffor@@handledots\pgffor@value\pgffor@@stop}% } \newif\ifpgffor@context \def\pgffor@@handledots#1...#2\pgffor@@stop{% % Define the context if any. \def\pgffor@dots@pre{#1}% \def\pgffor@dots@post{#2}% \def\pgffor@dots@stripcontext#1##1#2\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% \pgffor@contexttrue% \ifx\pgffor@dots@pre\pgfutil@empty% \ifx\pgffor@dots@post\pgfutil@empty% \pgffor@contextfalse% \def\pgffor@dots@stripcontext##1\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% \fi% \fi% \pgffor@gobblespaces{\pgffor@dotsscanend}% } \def\pgffor@dots@value@process#1{% \expandafter\pgffor@dots@stripcontext#1\pgffor@@stop% \expandafter\pgffor@dots@charcheck\pgffor@dotsvalue\pgffor@@stop% \let#1=\pgffor@dotsvalue% } \def\pgffor@dotsscanend#1,{% \pgffor@alphabeticsequencefalse% % Strip context and check for a character sequence. \def\pgffor@dotsend{#1}% \pgffor@dots@value@process{\pgffor@dotsend}% % \pgffor@dots@value@process{\pgffor@last}% % % calculate skip% \ifx\pgffor@prevlast\pgfutil@empty% \ifdim\pgffor@dotsend pt>\pgffor@last pt% \pgffor@skip=1pt% \else% \pgffor@skip=-1pt% \fi% \else% \pgffor@dots@value@process{\pgffor@prevlast}% \pgffor@skip=\pgffor@last pt% \pgffor@iter=\pgffor@prevlast pt% \advance\pgffor@skip by-\pgffor@iter% \fi% \pgffor@iter=\pgffor@last pt% % do loop \pgffor@loop% } \def\pgffor@loop{% \advance\pgffor@iter by\pgffor@skip% \let\pgffor@next=\pgffor@doloop% \ifdim\pgffor@skip<0pt% \ifdim\pgffor@iter<\pgffor@dotsend pt% \let\pgffor@next=\pgffor@endloop% \fi% \else% \ifdim\pgffor@iter>\pgffor@dotsend pt% \let\pgffor@next=\pgffor@endloop% \fi% \fi% \ifpgffor@continue% \else% \let\pgffor@next=\pgffor@endloop% Done! \fi% \pgffor@next% } \def\pgffor@endloop{% \pgffor@alphabeticsequencefalse% \pgffor@scan% } {\catcode`\p=12\catcode`\t=12\gdef\Pgffor@geT#1pt{#1}} \def\pgffor@doloop{% \pgffor@begingroup \edef\pgffor@temp{\expandafter\Pgffor@geT\the\pgffor@iter}% \edef\pgffor@incheck{{.0/}{\pgffor@temp/}}% \expandafter\pgfutil@in@\pgffor@incheck% \ifpgfutil@in@% \expandafter\pgffor@strip\pgffor@temp% \fi% \expandafter\pgfutil@in@\expandafter/\expandafter{\pgffor@var}% \ifpgfutil@in@% \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}% \expandafter\pgffor@multiassign\pgffor@var/\pgffor@stop/\pgffor@stop/\relax% \else% % Convert to alphabetic sequence, if necessary. \ifpgffor@alphabeticsequence% \pgffor@makealphabetic\pgffor@temp% \expandafter\let\pgffor@var=\pgffor@temp% \else% \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@temp}% \fi% \fi% % Insert any context, if any. \ifpgffor@context% \let\pgffor@temp=\pgffor@dots@pre% \expandafter\pgfutil@append@macrotomacro\expandafter% {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@var}% \expandafter\pgfutil@append@macrotomacro\expandafter% {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@dots@post}% \expandafter\let\pgffor@var=\pgffor@temp% \fi% % Perform assignments before loop body. \ifx\pgffor@assign@before@code\pgfutil@empty% \else% \pgffor@assign@before@code% \fi% % \expandafter\pgffor@beginhook\pgffor@body\pgffor@endhook% % % Perform assignments after loop body. \ifx\pgffor@assign@after@code\pgfutil@empty% \else% \pgffor@assign@after@code% \fi% \pgffor@endgroup% \pgffor@loop% } \def\pgffor@strip#1.0{\def\pgffor@temp{#1}} \def\breakforeach{\global\pgffor@continuefalse} \def\pgffor@gobbletil@pgffor@@stop#1\pgffor@@stop{} \newif\ifpgffor@registeriscount \def\pgffor@ifcsregister#1{% \expandafter\pgffor@@ifcsregister\meaning#1\pgffor@stop} \def\pgffor@@ifcsregister#1#2#3#4#5\pgffor@stop{% \if#1m% It is an ordinary (m)acro. \pgffor@registeriscountfalse% \let\pgffor@csnext=\pgfutil@secondoftwo% \else% \if#1u% It is (u)ndefined. \let\pgffor@csnext=\pgfutil@secondoftwo% \pgffor@registeriscountfalse% \else% \let\pgffor@csnext=\pgfutil@firstoftwo% \if#4u% It is a co(u)nt \pgffor@registeriscounttrue% \else% Assume it is a dimen or skip (bad assumption in the general case). \pgffor@registeriscountfalse% \let\pgffor@csnext=\pgfutil@firstoftwo% \fi% \fi% \fi% \pgffor@csnext} \newif\ifpgffor@alphabeticsequence % \def\pgffor@dots@charcheck#1\pgffor@@stop{% \edef\pgffor@dots@charcheck@temp{#1}% \expandafter\expandafter\expandafter\pgffor@@dotscharcheck\expandafter\meaning\pgffor@dots@charcheck@temp\pgffor@@stop% } \def\pgffor@@dotscharcheck#1#2\pgffor@@stop{% \if#1t% \afterassignment\pgffor@gobbletil@pgffor@@stop% \expandafter\chardef\expandafter\pgffor@char\expandafter=\expandafter`\pgffor@dots@charcheck@temp\relax\pgffor@@stop% \edef\pgffor@char{\the\pgffor@char}% \ifnum\pgffor@char>64\relax% From A-Z? \ifnum\pgffor@char<91\relax% \let\pgffor@dotsvalue=\pgffor@char% \pgffor@alphabeticsequencetrue% \else% \ifnum\pgffor@char>96\relax% From a-z? \ifnum\pgffor@char<123\relax% \let\pgffor@dotsvalue=\pgffor@char% \pgffor@alphabeticsequencetrue% \fi% \fi% \fi% \fi% \fi% } \def\pgffor@makealphabetic#1{% % Convert the number in the macro passed as #1 to a-z or A-Z. \pgfutil@tempcnta=#1\relax% \ifnum\pgfutil@tempcnta>95\relax% \advance\pgfutil@tempcnta by-96% \expandafter\def\expandafter#1\expandafter% {\pgffor@alpha\pgfutil@tempcnta}% \else% \advance\pgfutil@tempcnta by-64% \expandafter\def\expandafter#1\expandafter% {\pgffor@Alpha\pgfutil@tempcnta}% \fi% } \def\pgffor@Alpha#1{% \ifcase#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?\fi% } \def\pgffor@alpha#1{% \ifcase#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?\fi% } \newtoks\pgffor@toks \def\pgffor@addcstotoks#1{% \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter\def\expandafter#1\expandafter{#1}}% \pgffor@@addcstotoks} \def\pgffor@addregtotoks#1{% \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter#1\expandafter=\the#1}% \pgffor@@addcstotoks} \def\pgffor@addiftotoks#1{% \begingroup% \escapechar=-1\relax% \expandafter\pgffor@@addiftotoks\string#1\pgffor@stop} \def\pgffor@@addiftotoks#1#2#3#4#5\pgffor@stop{% \endgroup \csname if#4#5\endcsname% \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#4#5true\endcsname}% \else% \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#4#5false\endcsname}% \fi% \pgffor@@addcstotoks% } \def\pgffor@@addcstotoks{% \expandafter\expandafter\expandafter\pgffor@toks\expandafter\expandafter\expandafter=% \expandafter\expandafter\expandafter{\expandafter\pgffor@tokstemp\the\pgffor@toks}% } % Set up the pgffor scopes. \def\pgffor@atbeginforeach{% \begingroup% } \def\pgffor@atendforeach{% \global\edef\pgffor@remember@expanded{\pgffor@remember@code}% \endgroup% \ifx\pgffor@remember@expanded\pgfutil@empty% \else% \pgffor@remember@expanded% \global\let\pgffor@remember@expanded=\pgfutil@empty% \fi% } \def\pgffor@default@begingroup{% \begingroup% } \let\pgffor@remember@once@expanded=\pgfutil@empty \let\pgffor@remember@expanded=\pgfutil@empty \def\pgffor@default@endgroup{% \ifx\pgffor@assign@once@code\pgfutil@empty% \else% \global\edef\pgffor@remember@once@expanded{\pgffor@remember@once@code}% \fi% \ifx\pgffor@remember@code\pgfutil@empty% \else% \global\edef\pgffor@remember@expanded{\pgffor@remember@code}% \fi% \endgroup% % \ifx\pgffor@remember@once@expanded\pgfutil@empty% \else% \pgffor@remember@once@expanded% \let\pgffor@assign@once@code=\pgfutil@empty% \global\let\pgffor@remember@once@expanded=\pgfutil@empty% \fi% % \ifx\pgffor@remember@expanded\pgfutil@empty% \else% \pgffor@remember@expanded% \global\let\pgffor@remember@expanded=\pgfutil@empty% \fi% } \let\pgffor@begingroup=\pgffor@default@begingroup \let\pgffor@endgroup=\pgffor@default@endgroup \def\pgffor@stack@begingroup{% \pgffor@toks={}% \pgffor@addcstotoks{\pgffor@mainvar}% \pgffor@addcstotoks{\pgffor@var}% \pgffor@addcstotoks{\pgffor@body}% % \pgffor@addcstotoks{\pgffor@last}% \pgffor@addcstotoks{\pgffor@prevlast}% \pgffor@addcstotoks{\pgffor@dotsend}% % \pgffor@addcstotoks{\pgffor@assign@before@code}% \pgffor@addcstotoks{\pgffor@assign@after@code}% \pgffor@addcstotoks{\pgffor@remember@code}% \pgffor@addcstotoks{\pgffor@remember@once@code}% \pgffor@addcstotoks{\pgffor@dots@pre}% \pgffor@addcstotoks{\pgffor@dots@post}% % \pgffor@addregtotoks{\pgffor@iter}% \pgffor@addregtotoks{\pgffor@skip}% % \pgffor@addiftotoks{\ifpgffor@alphabeticsequence}% \pgffor@addiftotoks{\ifpgffor@context}% \expandafter\pgffor@stackpush\expandafter{\the\pgffor@toks}% } \def\pgffor@stack@endgroup{\pgffor@stackpop} % Keys stuff. \newif\ifpgffor@assign@evaluate \newif\ifpgffor@assign@once \pgfkeys{/pgf/foreach/.cd, var/.code=\pgffor@var@add#1\pgffor@stop, scope iterations/.code={ \csname if#1\endcsname% \let\pgffor@begingroup=\pgffor@default@begingroup% \let\pgffor@endgroup=\pgffor@default@endgroup% \else% \let\pgffor@begingroup=\pgffor@stack@begingroup% \let\pgffor@endgroup=\pgffor@stack@endgroup% \fi% }, evaluate/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% assign/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% evaluate once/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% assign once/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% remember/.code=\pgffor@remember@parse{#1},% count/.code=\pgffor@count@parse#1\pgffor@stop } \def\pgffor@assign@parse#1{% \pgfutil@in@;{#1}% \ifpgfutil@in@% \else% \pgfutil@in@={#1}% \fi% \ifpgfutil@in@% \pgffor@assign@@parse#1;\pgffor@stop;% \else% \pgffor@assign@parse@old#1\pgffor@stop%% \fi% } \def\pgffor@stop{\pgffor@stop} \def\pgffor@assign@@parse#1;{% \def\pgffor@test{#1}% \ifx\pgffor@test\pgffor@stop% \let\pgffor@next=\relax% \else% \let\pgffor@next=\pgffor@assign@@parse% \ifx\pgffor@test\pgfutil@empty% \else% \pgfutil@in@={#1}% \ifpgfutil@in@% \pgffor@assign@@@parse#1\pgffor@stop% \else% \pgffor@assign@@@parse#1=#1\pgffor@stop% \fi% \fi% \fi% \pgffor@next} \def\pgffor@assign@@@parse#1=#2\pgffor@stop{% \ifpgffor@assign@evaluate% \ifpgffor@assign@once% \pgfutil@append@tomacro{\pgffor@assign@once@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% \else \pgfutil@append@tomacro{\pgffor@assign@before@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% \fi% \else% \ifpgffor@assign@once% \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#1{#2}}% \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% \else \pgfutil@append@tomacro{\pgffor@assign@before@code}{\def#1{#2}}% \fi% \fi% } \def\pgffor@assign@parse@old#1#2\pgffor@stop{% \pgffor@assign@@parse@old#2\pgffor@stop as#1using #1\pgffor@@stop} \def\pgffor@assign@@parse@old#1as#2#3\pgffor@@stop{% \pgffor@assign@@@parse@old{#2}#1#3\pgffor@stop\pgffor@@stop} \def\pgffor@assign@@@parse@old#1#2using #3\pgffor@stop#4\pgffor@@stop{% \pgffor@assign@@@parse#1=#3\pgffor@stop} \def\pgffor@remember@parse#1{% \pgfutil@in@ a{#1}% This matches the 'a' in 'as' or 'intially'. \ifpgfutil@in@% \pgffor@remember@parse@old#1\pgffor@stop% \else% \pgffor@remember@@parse#1;\pgffor@stop;% \fi% } \def\pgffor@remember@@parse#1;{% \def\pgffor@test{#1}% \ifx\pgffor@test\pgffor@stop% \let\pgffor@next=\relax% \else% \let\pgffor@next=\pgffor@remember@@parse% \ifx\pgffor@test\pgfutil@empty% \else% \pgfutil@in@={#1}% \ifpgfutil@in@% \pgffor@remember@@@parse#1\pgffor@stop% \else% \pgffor@ifcsregister{#1}{% \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand#1=\the#1\noexpand\relax}% }% {% \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% }% \fi% \fi% \fi% \pgffor@next% } \def\pgffor@remember@@@parse#1=#2\pgffor@stop{% \pgffor@ifcsregister{#2}{% \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{\the#2}}% \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% }% {% \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{#2}}% \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% }% } \def\pgffor@remember@parse@old#1#2\pgffor@stop{% \pgffor@remember@@parse@old#1#2\pgffor@stop as#1(initially )\pgffor@@stop} \def\pgffor@remember@@parse@old#1#2as#3#4\pgffor@@stop{% \pgffor@remember@@@parse@old{#1}{#3}#2#4\pgffor@stop\pgffor@@stop} \def\pgffor@remember@@@parse@old#1#2#3(initially #4)#5\pgffor@stop#6\pgffor@@stop{% \pgfutil@append@tomacro{\pgffor@assign@after@code}{\edef#2{#1}}% \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#2{#2}}% \def\pgffor@test{#4}% \ifx\pgffor@test\pgfutil@empty% \else% \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#2{#4}}% \fi% } \def\pgffor@count@parse#1#2\pgffor@stop{% \pgffor@count@@parse#1#2\pgffor@stop from 1\pgffor@stop\pgffor@@stop} \def\pgffor@count@@parse#1#2from#3\pgffor@stop#4\pgffor@@stop{% \pgfutil@append@tomacro\pgffor@remember@code{\noexpand\def\noexpand#1{#1}}% \pgfutil@append@tomacro\pgffor@assign@before@code{\pgfmathparse{int(#1+1)}\let#1=\pgfmathresult}% \pgfmathparse{int(#3-1)}\let#1=\pgfmathresult% } \def\pgfutil@append@macrotomacro#1#2{% \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter% #1\expandafter\expandafter\expandafter{\expandafter#1#2}} \def\pgfutil@append@tomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}} \endinput