)O#npA4igI5x-v-eXW7?MG&9Py%y9C#3?SE7y1KfCrAn2I4+{;YO~>x2ySW6VKLRZt>({2A
zJasz#a^&NTfKzwKdXiVh(BJlFd{m{A$L}G$>xBW#ntsu!IIrGMZ{L5Q(CCMB^X@~s
zdMk{!1_Y2zo7Vije?aenJqPu;^@bQ=h%?1E$em_t5+}QA{%A+9w
zv>>%7t3D;Ku}t{r-s-i$(Rfy{F5rvJbUtZc9|On^h?J{vJ$b0?q;NfHyb@yrwFG?Z
zdQBzQt0%c$HFiCQk9B}Z+LB!e2zhgA_D)xKZ9(DV2rO6n+3wsP$0@ql5JeZObVYyd
z<^>%ygPT1qE5O6|aR;1+^A&;=idxXo)YK&7$RCI4>b2`MXh44|YhXaJkDt(=p^wP_
z*!7I_*j(^;NC+K2e1J9`x{SwficVPSp82WD%HYf7>*GabbW5dHu4Mf3my#v!@&;I_
zTmBjk;ajzT{Y?y?+OMIgG`~hF)mne6_bO@3lD4+RygUKi)aV495AJ6{XZ41xdMwCcHg#*Urc-xKXf%1dSEEVWw$z^(u*G7We+{@^FvcsqfdI-rR7QHeMfV!r
zz|(oC0c3uIqUu3rQ0*J|e-EkwRfDQu1BB!8)V_ouMWG;c)IFR1di}tH!pDCRRIZfq
z4#U!0x0lyR=G`fxBTCvM&HH$0teoQ=lLyWce7KJ5J9&JAv|Ne)*6NrUaB2NCeBa@%
zhQG8CPA;-3M8Q*^UZQ`66Q$Gcs3BwZ(Hzk0Y
z9npBNWc&HZ4A%v7+3os4#i4(nAVuUph^CQ&8>$fudk7a{guwYe$M{4mE}>
z904Iz(~&}}ndY&4p&{hYo}hT2h2T~PRxv8_Vsx`1jG2Fh`8DAa#?IX{kLSCi8-
z&-S<@mYwoW4P!ZFXS(DL2|TQu1jzlcRx{zt@r^c+91=i$Zzrg!_zb~yetN*E+x&8zsnMt@)q2L01;kf_5Svi3`QR$x%P1^-+Ob_<
zzbv2`3s|nQ8%pUp*QXozBp6RBwprmioM+zq0BbD_tWdIwkpF*BJ|@FCq!n<)x{DUf
zO$$7Ihm09OxdzPafY%~b$B?~kn-pAboC%*+qy+$kE%ijH{mmf&!YLP0!j~q4=hqZR
zRcE|
zHK-BeXGmRcB?W(gUk}1O(r%%{(?a+msGN=ioNE_Ae9tbnL+kl2*LGYN?$E05q^BGg
zgUag+3o^ovm%@kA4P}6SAR<0inmKh+DxPrgTX0GMc{q&`&c=+}(XmvmYULN~p1Gx5
z^%fbx`Z9b<@Raar!1Kmn*|%8??f#s4(>68vo#EqdS8RVaWcWO_;Pa~w0YJd_X-mB~
zcDi2y!mkQn_D)&120&cQZl;}{
zxeg4Hz{54EJId<>Gq^7Kea>2VD2tC7F*M=urMs9Fx@U0Ol{;W_y!+99cEG35u*i(!
zKmQ!U4$6NHm=k~!d{6_~`J`q;2CtFE`4~PZ&9B)Tl~1cWnE-oRO-%E$j01chKEr1r
z!H0Eyl+Gu)AD~a)Qg4copP&aF-4u_~avLh+=jH%VB?0Kl0H#x@X${+GzgP%gKfaM*5?X&WYjQI3VO$2bXMHjo`WpaTBW}gg
z>pY*lPKK$sZwn+`Hdm3#vjwMJ%=jemlnn=z)%gHa)9d7CX_^VIueH6}+xnB*3q$G6
z)=$$mH~J_$pV;kc;KTjwevm)I4gdpcAK?x=p8(pFh3mZne6s677JyG4Dp&nHUb%;B
zV*7tdb3T*Hlv9`WwIBq1yrWw97lPewhoPb<*BFyXaWx
zGnJO3!2teC-l)QPD%Xp8WF+!_Rzh@2^p8dV(50{J>uuS=Jo2u;}Yw<
zcD*osif&g1PfokZYQJW_YQL;cI#k})-O@a*-oyE1_~3f2;ew)K0i6nC7Ir<2xaNNg
zF#C|cwf1~ETgcLc-3%j^x)f1+4B*=V*NcE&0JvuW?i!B16lOFK=f=Xn5URGNy7E>o
zegeXqT800AA!nCL(C#XxCTX>6R#%rZD0@YE+s!CHTdqF&Tco5xsQHqSdY>chhO2#=
z?8I>#1zDEP=9oTK&!K_w4x}zaBl7`8xHC_jBq=qIx-r^6%X%Q(OA<&Qw6(KD4V}AKJs}
zt0jCcYj0l`pZ5~A7whbU_BuJm?{jim#@{XEKZ-$JAaCdbbRYV_lFlzkpLKr`ul>p~
z)GyR@ly}&67M}}6QMmBw-gTKz_in`U?a}?SdiD^d4JB(!ZztLb?H1KbI!fyGS$ldz
zy?Sco)FX@b;yd>B=)O$IJ1Ro{P%1?ERH}3j?)_(D%*OEIBYncAkMs#o9PJ-PEI#Mo
z@n=F&6fC?tcZ!F|t4n7|T{M5{+LgS!bt5mx6X%|M-o3jhZ-5yH?Qnv6YO6c#=%LY0
z@w{86c6RS7YF9U?YZq3$kbC?HEr(JdDx^}RHL%wI9>cvuI|H_x&Re1xIvU{>$`a3|
z-`(VEgrdlQZ0_Jl8g3UEqSzUhhsb12(7iX
zCGXz7>HMZm6m#h!y?lT4h~7MXO7Rg9bZzfm+B$l)c#j{T+5-0sfVN5s}+YhogIIz19+=iwW1?#ZuBND
zj&h6Sw{PjhiWTHxZ%5vM$OrO+{3UtWw4rnED@dK3Omf`Xy^B2Cv?Bj@4zvXdXlqY_
z4tA7-^Tld`^Bn3b6g(WEr`iza#|d5VJ~LqI2Z-)EZ@EV!y~DCVHXItZ`8Exa#OK4c
zK;(P)US5OO;x&JTqR1X=TeT$C8i2R5MGHCy*W*9GlvjLGsp$6^(`h|m+YGn!guEaR
ztaaRF0i~s;k}_`W+(8?xEy>%?hI}AD+cvZX(yIBi)9y{kDDMdolyj7WuH@jPKYqdW
z8Y7J!MLI<)jmQGkFwfgG$m14`@(!h$+wYRw{(CH(M*@GiQ2vasQQpIA$f@}#uPqcs
z)>v)Xf>uGx8a1NB3m0aCFAbn2+`msr2??YfvDdHDYV59E2MF0o*R*I(hiAwgH`xh@r8TT$;qzwZG(0praaz(nmi26?%?_a*8^{DsUt*mHy(yPrj
z(+#y7r_Su~ZMsDpjz6Lo?^KjmB)(PgwR}%j0DbNdMm5yh?E;k=ytSK96q4;Us85S(
z)uPjD){rt{u3e*fNXb*p&1nYUnNq(2t-zRt9Z`-CuV2%ejvZ)$c|8gkF`Pc)XJsTO
zCDDI2=TWp6pEIBM0V&{}AHlZLdRv4sqdzm`K4WRyXyeAa}dkiYUnKoW;EnWOUs
zoPR=}(laQ(fopNkQz>1eDFJw$SB8+G^KKG)`>^7KqR_;WI<;w0?OOEk@@0~P|4iq`
zL4#;w&6+f|K?9lsO{`m&JVuPjlA>Qdc|w2l;h>%a2Z&CmjMVqd6Ce^2l7=3MWG4TYE@}zeRF#C_;D7nW*~np
z{|W$qty704LSw2_q0|2Uq>O6^50E?Ng|D?bX4S`!v~9w8npwRn%`>Y*F3_U7wP~qY
zZCYNhHmx+PMXT!6q&1K8dt3v
zjjdW0DY!l*Vjie;$v;-FLW2@R%HZyI>$q_=1?$ePSzXjTXkpE2v=~}avnnmCQH54i
zuR<%URb~jh6+k3IKYv94f6^LOd*=oqr(Um9v7{ZZKd5QN!5A^U4wS^_{JVdok7>kl
zBJ?RWn|pwS9-c_I-V9t3fVsuI3WhYVvMD7*M`!tS?1xsbrV$k@(r`mV8dknMc>^kC
zq{8LkeAznYped7SLWS})t%@m4mo&4o3C*oyLJO)?66IRin3kIwle>u#L-4l(h?9`;
z6#?Wpp}6PoTmeM-z4jm}>;Hc~q}5e_JfHy^vo;t!f*HCwl;-b_0J!JqJ3t2bWY~%T
z{8G#d~Z1Ml^+GT#+V2
z)1aA^D$p#5kMoTUX<5bcv=WkbvXCU-e*r*W#Xa}60hH747^L5Xq*Q-WM#R(i08KgP
z<1`(HVe~C(Jm(nw(9e&A?wjFyB4kAX<|pO=uBiZU8AdHBXdJZTq@N$n!uUj;l0tH*
zk!F*%u06QYoraasp>Y)r=~rkH3r@(I3ect-!4)f(qiGckXg0LS(14beFUt^oPyn&y
zUjT54;+_vV0XPf*PTqeSLGM#Okuv_c`J7X(cnu!2i5;%}lJlf9d^^{9iga59V7_Bw
znKCp*uMCYVQG&KQJBtm397&0Zw0_ty3Y;~IlyT|MK{~Q|Gb!Vk$3_~eTZ+aSmZM*x
ziF_1agcc!@50BAN#xp#Y8)9rk{mbgpgPS)=8Jh+Vq*0|xir`IP5Lp0j430wpTwkcC
zKBT8heV_qlbhVq1Q^MDeQ;P4q@Wm!1CMnx&udB;m5}JR^(tu~{`dKaJP^)R%XsG9(
zMNLRSqCep4%Mb#%o(vsBh_u`h$9APk(bdzZNg4i&7gO63#i&L0x+)_B&FYeP#=KT8|n#l{^b|?6^#iu9CEzJqqTt+
z7GwipZJ{AJPk#4~giE`s4vu|cyZdlejO>}TyQYi0nGOL`l33Zd%kk?NY*qwc@oli3F-v^
zdqaJp{z%CKp#Fey05ljH3Jr&HcocV8_<9kN`=hwqY6g(O!>$;zoN<7DbXda92Ds9w
zfB}C1KT-RcL8udvs=KUZ=#(I;g`&{JD5S;_&~N}X4B!pHaR3}_boJ`=Dn4E@o6ey5
zPEOPwX}PmOS?UC_ORgF|jFfTv{5f*cgVPxRK3vlu4ap!hB7>np_}vg_7&HPJ1y{^v
zGs4$+&9dtkHzRn5#yMl(UWdh}scf(HpBsM+tNAp{{UE8~X!#AkcKFJJd@t9BnswSP
z#f)$x3H|&5V9{oT%oqzu#z3PD3}_TI5*kz*b3wd>q>Px`x2d;L1?qvpb&vApMD@Xa
z&NXWQ)HsrZ=Y`W-S|Oe5&_Ik}217$J^BXQ{1T+eAhQ>mkt|
z-`dMvYdY_sZ)_I0HI&xzwr;&XDr8*{z%k)HABuAijA6(KzxIuo#klySn(
z7tW_o1JU&k;*@KElnV_vC?k$wMst66Y{UcW@?YAJ8V3C${O?g5x|!F8RK&M}^}I!b
z?c!v?ekntf4MP2H?li;e6kWX=NAEtSa#j%a7Ux$Y<7m3)Nz&`;PJ*=-d@TDV7}vNZ
z3vFB$2}05K{LGk&k;)WkvXK!@f+j)}pfP~b1>5U4j~qcWtt@FEoR7yZtf7CBM&ogt
zGoEIwcIv^~w6dh@s4JK0GIq;cIdq7w9zI0ZpzF|;{lPr0!SmvBG{wXyuPymu|DzLD
zWcUiQC10>{Z6w$&J|ft=F)nYO_%6c)!Ek&$uuDeO_-CpY!kdGrlJ4J-i05#cT4~
zMUgdTnwroIXu63BO=IDF3N(KS8fR3IMj_RX#?cu+kCw#eW1tDxWH7aIC7M>FDm@7g
zqx{DEH*d(*vKhY9C_gVHy(nZ&*cp0Oh?kNO^bO$Y3uqz*howAd)=H-kr|DJ;SekPi
zEyv?~_+DOv*WxvcB74lmen8e7Xm(Wy$C=O!Xc{yHngmT$Xp*F<)p37cO
z1&K9yrE^vllY+dKd086K6w71I*9rRTpLi`(aB$H9NUne=2{18O`H>7>65oq8ieAh7
zQY^%7XctKfYC$;8gXTiBp;^#OXof;FCC$ce=Y?ia-I}}#X~GT`8Hkz)6JL7
zZkj5HcVDL0K1RW(82{T{36&nS2ceLGAG1t$*~_qy%jB0v1}T3Cm_Y(hR-#>@4g#uy
zQ9^QYP8l1LjBiOz??_JL9lBPGBYH%$rf#1Kw|`WlIq;(0qq)}hg=-rRYg=1y_jK|5
zkj$?n^XOaU8_!k=#SbMj=CBMrdVvNM%-IloT*^F`QV=@(t&9yQ=QxkOxclga6FHOm
z)S2WDXtq!NXRBtJHEQ}>7k>-U>zy<{9
delta 9666
zcmV;zB|X}k!vgTR0+1sDoVT$hWOskHcOFnxoLd_{H_6TY6H62XK@kNgTn!Wa${oFWv}(F
zIlvTG@~n54?;B`SSs?~$zU}7#-^IbMV$Ih^biTIgv^z=;Uu(KKz7^e?;QW6&Wm5AB
zilV~N`(Sj-1wW(d*vHN%!nd33X6=&02j|*I%RRe@LwPHKUToh)cZc-G
z&y6Sn=fpwR>KM_zdM0!S0?2>Y;fx;fW>ss;pZ8sv(wDDZk0+OD;W_n(E(1XCVPa=9
z1$@2cN71!AsSFSR1z_%iL-IL=iXE?7A0OI%@*3?paa91<2G^SpSxT<6BC;=DzDlLO
z{q}bmd;m{KyMRw}J{%?RW((j^#@yDFKDQMqJzUPvHdA5DbEQw4%9nozwRw|U^9^U`
zW7lh=2_HKjB~Emq+moCrd5X)Jq5)iZxGn&6U^#gHq}Ht64ozn56l6PfTb9jaHGB;x
zY@`O`;Cy4k$zoI(nGFyAuK>(wt20nu^Jzl(+Oc%qw=NZ|l&(5k{~HKz)T&hmPSq{J
z)c8k$@-`WD-JO=Ul9
zA;ki^Q+R7_KfYdG;TsCmD?`5mVAPIu7a+!)R(%5yf8ghlmDRru^eU!YyLFeEqFJyU
z1^{IcF)${*eQ0I$Z?yBo@1);tz5tR5z(QIEta1o7z(v~S^SFN*iNBXd9cQg4bJT)n
z0J^95*6fopr|I8ceHDY@Zu*rbnZcYPmn9w2><)Y2g1AyW3?5U3J#U&*fpRvc2xr;y@T*$GAUIYus(F
z?V$KtRVdM^3B7yzgbIt4DPslrZUDG=%UXcSSa7>zaLa#PMmn^;iZ<;utU!yf7jNRX
z3YvXLDls@128TmMUr}%?Np6*&cVQi~swD|(!sC(R+=zKs*y8?Vu;eOMd>A@`Lx6Jy#+W7yn5%3X@Tbvik2F>EE
z5AK%_KA!bS&S$0Je1I=MfT_a)-cV=|D)xW=MECpn7Xv;q4eQ)Zs;c#eEO8our4LGa-h3|
zdf^?8Idp&Y5L{E4>%ZJIe3Bu>*SC>++4(Nvo(GNfXbYaV0o&p?RVvRAMD5$RkH&ul
z9>}VLaf)>T0GB?*smt6AaKekU
zFzP4+D5T(DW0P~bb?QJ|VL?Skx`#`on06tC&k69c94W)Q<;|k5Pn_K9iW)wE2j{y7
z`0meiq6ae_pC|xd-PV49&sT&G9j|{dX!go8Xcn6eVbCm&TQ*ZeZaNsgvFp`M$H-7J
za}UV{(0oMDSV|iat#-X3$Xx>fUthr2i|AgrxDToM{=fyJZdOp;=v
zB&WLt@#nMn{!egP={XGjR)g~VyxaIE%v>87Kmq%%sEm6qly|`bShWZE(Vm#=G(BWL
z)c`=YVh7yQD+)vF`+N?MZa8%d*P6iL0(ZyIrX!a~ud9~;@Nd5-(dd=Cgmm5x4al|l
zn^eABxqEnaX{gAc@y*L+dbEFf4*1}HB76%NK1a%22+eO%tI(!yymLP(?E*fv^QqyZ
z)Y;CL6)wKV`aqiSamTB6KH0bh&d2a^>V@-39WUS;1NcUTlDP~%2tWqeQR>hbN@3UQ
z2lWAXZbWyxLY=aSx_?u+^A)X(mj7oYfZI-I(J_VMtKvWiASM8W2Mm7&YXb|rh__eP
zrlThMbcItg10{lW)2;!fOrJn+&&1^ZcFqzpVhvIB0d
zti3DnyYI^L9B|V3G4#W!gdC*Dd;qe;9XK0LGuIuUT5w42fX$Gq9VZ0~DYhA!42)Rd
zmg@8C;Qa5G?4XM`AMk%Y0Otw;K=K!n@z|y0l((6GJTpYy)(^eY^OU_*-j@8u%#6RA=#OgM{3-9%tQ}RXi1<*un6gSA3EN1QVj>N
z;E1RdtKiMG&h*H~i*6vrO5j}uut)LpZ2(yFUYl{R14#9k;jBsZjIYO;8h_7!AIRFu
z^3BDBdw^(F4!eJuys6;2@HlF|F{^g78wz6>%VEof?l$4xV}KY$=JN3kfV0FsFt!1R
zJE>~VMRe$V0s!8R&kN~l(xaT#E{+VK^GA)tyqzsL^~&MP0DKvXnp384v!L8k$k*XQ
zrk_2%^llc9ZZ|V8e2$bd%ZVP&aiT|aohZ%A(O%)S=92zeLHFV!mD;f|EkCD(5Fnxd=ZcP&1$o3X30yCtyO)i6Mc*5l8p?+oc@
zz{QZs!IOWxDZ|ONAd8)KADR`OK41sSZx=3Ip>FfHyyKK^4fVlY>ym%YCp#UJy
z3tLZHN7s`dVd;&B%*&}_Z_b|Xr7}1-_)%to5@>F*i4LC)o@~@XM^z(o()Eads>VR
z^)w$D;)z;MREUT9@R0s{4~?%w_xmo->v|nU*J}m%906Z*q6E8xneBBRFc5zRfGpIJ
zgA{+V;ATbDPB*=v>v<~|Hv)SA!dcPbq`K{lShv9eHJyyzja`nfQP2FU@_B^=%k?DR
zHv!^KnH!!c@qP+*c!!1rQNT}^vP^pAtpnK+PhC%D05Nv)=cPHW1%;)yU#}*i#?u(Z
zj8I?0-@BFaMCgbk(U5pW9HhgS@4g!{upfW%5;Vl|)kme_g^r0C-VC1Ld?I`}`ZYV7
z>y-ZX;h9V9D03;R3B6oopZH*g%R3?M&T*tifbX$q3)QnZ4rbCy$62IahEE!|NOd2>
z$93PUrcjmH
z*OIW7MRc0Go8_)IKNX`n?=!z$|yOAAXCapgpI#
z3uea?Qt{DCx7g*lvB%eACbI(ROgw*Ph```4IL^q>EHeWOjAHd6EU
z#YX|Ss6~FKl?jKx!I3Akaj&C
z>4|5H?5CbiwhE4xUI+F_yIZ6U2J&%B<0+e3W0*Vxqm(R&G$b3Z3=})u-rRp^Xt-W$
zxSo^R^={fjwt&x?D9&<|(zRR{RePOxe-?lk(HvLEg12ZDcsLNsDv8|p6~InnLFM)sZW0eH`DFpNo}WxQrz7%vKtdfnl+PQLHQuM^c-dHmYdeOEVdeTxa!m#o_oS@_
zq;LM-aT9$8`oev)>WzQ#Pxunz@ZwFT8;{4mGwJ<44L3%Dsp7VPg7%&zj>x0e=*Xqp
zbm&3?Hz?}*Z$tqAx~n_lPP4-ak+Xg47UKU@<;#}YUr|^0O4+hyZ}AxPgPV{=Evzzq
zTBzY$EWiiZ6B-VhHyT|<*K5bFCp8*?k6o{^+V$cs32h_btCdMf
z7UdKOO$dt*V9}Dp$AMb!NMb#ctm`s|+gLyY!i@VF3a%%PS0vZtMniJF
zMgY%BbiKMn*Q*mJSW(aL9d>~7rk
zGJFgnJ0ySCclp5Oulf7js7MaV03HX3oaXsFjan=uc+G0sb3QrC(9Mf#VS84Ki9wX~
z@EHy4*N2P@E0fpk>2&T|qRiNFTecq=MPH1tF5bKgLsG46NN<k13vk<1ptl`0UQDNhEah-WsFw}
zcRd@K>(vH))c{{r9F0aP5XFH|*=fm>oBmk%I5ug_=(tOj>OO|@7}6!D
zT6TXjmb}^6QAL|Uk~>}gd&!y^d0J*T`LhHd*I3%x+6Lvyl}(AgdX?53_+8b-Gb;NI
zXbD`kBKy$cBiU!-?&d@s{+%2q1m_H1vMcAUGMfUi#*1Aq3}D{$i$=wL*)Dqd`VC!8
zNTN$OlIYy!SlSQ~L5?k3@N<8HbfF?6E4+WfE{NWRHq1nK`$|Z=OCauamo&LmqC5d>-}*Iwrr@xd5v>jQl5?F;+}FndvI8RJ%3MzxD!a*CPaLl#
zIzr6=AG@Bd=z8@<*Q?2{$MCUs6Ny{0ivb~TPR-xxYOnZM_&6f<%Rk&!*m9h#i;aJg
zb+K|+)NEeRF*CUN)3OXaJdZozEPP(95JOfAx|*06=j{7wFP%Gofd=&JOBMC>DEaO^
z`sL~!3O{fm=L9wvoQ#Q~pZD&jHG9rr`Ayadi`_G?s`y8rq0n`~R6)C3X0@tDPrfT#
z<_2$og}QuLhnP;Zub*6qJ7zX024Nuz#%-$1GVZn$9T_z%|wf;e2pEE6NJS
zy@D-CwayYSM6i@&)0vA{8;!n
zqV&rdZ8j*sVN)fobl#mJIHIWS;=GTC#_~Dd0cqeY!iV#?zLUl`NXu2}q(;ZgfQ$Ff
z!t?fSF!-*eLW=wlIzm6<4Y*6<>y+Q4UQ5ObMz;H~LFC%nIp>QnzDS!jZSuRwqp?`w
z@RkFp-Vu%WN;aK{%klD<&2E3!2PzGH1IeQBK{Q2K8nN@K0AE(P6=V$ntpOlXX=o#*
zYDJS*s-=xz(7MK2e+Y57wI1Mm1^56SB*K>!ieqT~L`6{n*Nc|9p5{;)a_UHTTDVeT
z6UYX#as`A?9ap+q)1-*o7aKzUnRFhnXsBFuR38hUJT_J?Zw9EAVxWKg01ky(ui)i4
zxSEundA7$LvE-E4W@RL$>|B@JEP{voz5wK5xL0GvAIHBmf#eVY;%hrVw!#{M*WB!g
z!&i8TEl1McAjbD^snH$@l^$+lVHJbcc*_BQS{FS37f+3Jc95BV|~K0_J-
zM>L!7F*_^r$nRvt07^ArZU?*qsXCEdoLXk!bfaAOG$JbkAgr%1NEL1Y0T52PkQ}}&
z3A`{{99fMI^DbzCksvEWbi3)w0IAtP$164*d7aPVJ$&Kjq>3;fswgVpdeQlY%88mo
z<%WRI0_UJcOqqWscDYq$0Dd|Mi%7f0jvy<=zoYcETEV%t0>szsVw*MAce%FXx^S~b
zeJ8GRoQkTXH6+RqJ6?((ayOI!`Zp2rvFh~66Ed;F!EeFI0p#H{MmVc;t|TN=%^KAn
zvwIena#iak04*i>P6Yu^*omZ1({0
zy?GCxl?Wg1yH4(WqWb~*?Dh30DLy3Vc6)ExQd(g{WqjQP04hZQy%@l3x@saUIR9l3
zO7MN6U^m-TsoWsA+sRGB7$w*7-f(>vrT?9k;?sY}zXX^NO&d2l6qocM2ivpWnGaq9
z0GA6}v2;4lrQk!cs!bas38&4LrSg2iX%{m-5j=Ur0p)c*0A+iD!t6|P;SF_gQH40X
zQw3uvz1HD=)>`YglJg1Ot{OgE&+Z3>Gwc8`!gL>Z*dGX>V@0^$Q@|&=9%Kdhq@i++
z_v3$+n>Z)Ak2vQuK0^g{S)U3*z{fkP6@NjnyKOemc0@z5Bg#N){zg5mx{ALxBzK*#
zWBXP*aP^^5-TelT!^Gh1!2MTL$@dmO=yqlVHIyRB6#N8xb_qC{B
zKLw{a6t(Mx;gfZ{5_nSDO;?3A4poKaUFlGUICRMhvVRTdli-8vwSWr>N(OXFj9Gu!
z_0-~;FT(sy_6F0rbgY=A3A-6aEM|1wbR^*04A;93JqBeM!2>lKJN(b*dYa?;7%PybyBNyXA0@kg@U0Vd=BEz
zUAqbj0hp1{W;dw2rn=JRZfbvR5k7ax)t0WE1#RsDb?(GUQ4}8kfqbD1h>9t`)>pV!
zNqnBMww)`f)lRMU?F9wm^Qu;@D8LmzWAJ+Ppw%5a(#p1NDWF4p3I{}yT_GGdLQ$eN
z@ey#bB0IFB2-h}(B0ILHD7*~43EB*8!97@tf}Z8x-t_#z11c=iU%sS+
zix*R%i!+4)qIFOh6fP>*u_Yb%TTH6-bduuowyhM@vN?sfX+`Uyh}JF?*~*y;aK2;>
za2`ROp^pt$=)NX|B~JL6#fs+5h_xKx`8RD!$KiVX=a-6#cS?UH{V;7RtpaRo;dVh#
zFcgS;{p{&MS(%w6kBeJ2Q-FgVg*ZFXIw;JkC9Q`vYCg@hdkHcudO`#h9Qx2%O(!j>
z2|uG)X4jOKLO#~kw0GXTeDGxfwA5R-=tXKOX-4ve3$zToYgYn7cGBfdo6z1F(*);}
z$IFxy3P&fs3IKnuY0->=S~$=;D73k~92{Rw_@qVj;sYq9Wlae2tdjUV!r#W4d>b~T
zRcJ0=KYmQ|xOwUn1@!Aja~&MW3+eV0>OXnBe)5D?q2BYewxp8$U#hrUKS&L|ntd?w-Bz>?kdh}`SkN@UGs&_6EykFI9Z`xm&z{lp_U*{SqCQ0o8%l5SwLH>a
zyr7Nl!)XD2&Vc&cTGLW!1+=PBLkh65lE4YqaHx)u;!gxnstHM^a79V{{jso~Da|*n
zOG#(WkQ9IXXF6987(nCe)S<}@8qg$YyqOsV4jYyyML)fFkLJQbgZlRqoK7B@uU}Kd
z@b76(y}Go(ssSyuvLqiX3-W7dK})Ub)3OHUw8GMyK`5m$Wd0RWd;$PDj?0JDB`YSM
zL3q`yL5nOc=;__NdBB>6v^)*~j;mLX#zP~kSEqj?;o&5Y^FQt;Kg`oWw{L0V
z*fBJ{Rt=hCUXMJX`DUiH$lR2C>zk6ld0kpsuMRDT#L)`L)Zr5X*e>t0@a&TKd&9G;
z5qZ})7v_9YaKkYLuIFxILZfTeq)|0$AO%}e8s>p=m;7njQZy)uBoFR>H;f)llW^ae
zb!vYJngh+NQvTLR8iBb
z8Pn|Q#^h1GsvxgwM&xT^M1IDG48chm5Ql#t#U})ijONi?FO4o#?PNRwDbRcInK1)5&9GR=VaIM>L4
ze5zC;e@NWPLZU+d0sup$YlLT)#NQjU0M}#y=z~#91{w#=I20B}GcZ0;Wn_>PDx`ne
zbd7U=^!KA76|`t{6$2UvO<=(ZS(5?UR71F86@8jgS&wEy^9}UKr&2|R;EfE3g?|Bn
z3#Ds>XP3m^8{;cfph-FvXmpt}w87n7Xdt9`k(NfQh76&|88b*8r}z9w`_`@{c^n8_
zO@p<|(I^9b8V8N%V&t3ohl>nhU9%5N;kdYzvt*A@4FI^&etQpv!hL9
zkd8L>g8Eg^)@(u!L!UYh%bxd}q9p#_=nMFIGlT%HJ4441A}zPau}!&hbneIzl1KQ0
z1=PAsY3cw)%$-B>h>6}wJpg}TKQtmepq`MMB-EM=pBvN*>I(n|r~wT53x~tsLK!7v
zn9nE%i0QWv)C=JCgt|i=zx$5Hp)uixLyFf}TI+9RMUDX02^xgY>91aq6wk1hJjkpb
zb;7;6!6Cbg5cbkz;j;uE)E^oI6)=eI0)49JR5FPE%wli_fB+4I`s;t_P+zDw)Twl7
z+O=vW$>Vr*G&uvzwz|54+M#RxNs(k|LW;=g?d?H)@Nt+)=M0
zb%59Sn4Ts#JQBWbjm|i@3L>$l49+4;BnCqd7^o*suKB5LzfpoO!XvBJw$HA~rIG--{
zN7p-mQ?4FTE;LlHf-r&^!QHVT53DQw(T3Dm=sW1YjndGik`1Y!X-qc4k{LA7(2yoT
za{?e%|azaK`^?d_;PoR7yZtihs2V7bj5s~OAOy74xxJn1_A>=`>brUaU`(j17z0k{|nDI$;%tuVhR9XB^W_jAy&4gw^)1hfHO&2v2
zyPfBmLuP+eVUEi|Lur
zVJJ-F#q>iZFQ)$k!`s3v#oNN17C`gstK|jFgFGP*Xf8BI)La(M^?*Dfp9X4qLv!oZ
zCNCQ+@^xxXi(5OBZ)+#HgzqhIXi75y>pV*{T3~-^R`RPk{@26T#@ff%rXfl4u~uuL
zC~s(ihP-XmS_Cb{%SFqeCD3AMk&PA3u_UjCmNXCYm^NWef*m=O7U-EODw;}@3k266}7ktj?iLJe$XmATUy;zeOwMLg_b~mO(7f?
zv+OeS%GbV8il2k651w7zU(a^3fM3scvgFsZ{qy4g0a=EwXv#N@zyJUM07*qoM6N<$
Ef)6sawEzGB
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 476b3453..87468d67 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -39,6 +39,7 @@ app.templates.aboutPage = -> """
Questions & Answsers
@@ -83,6 +84,11 @@ credits = [
'2010-2014 Jeremy Ashkenas, DocumentCloud',
'MIT',
'https://raw.github.com/jashkenas/backbone/master/LICENSE'
+ ], [
+ 'C',
+ 'cppreference.com',
+ 'CC BY-SA',
+ 'http://en.cppreference.com/w/Cppreference:Copyright/CC-BY-SA'
], [
'CoffeeScript',
'2009-2014 Jeremy Ashkenas',
diff --git a/assets/javascripts/templates/pages/news_tmpl.coffee b/assets/javascripts/templates/pages/news_tmpl.coffee
index a767f935..1fa38b55 100644
--- a/assets/javascripts/templates/pages/news_tmpl.coffee
+++ b/assets/javascripts/templates/pages/news_tmpl.coffee
@@ -24,7 +24,10 @@ newsItem = (date, news) ->
result
app.news = [
- [ 1392508800000, # February 16, 2013
+ [ 1393027200000, # February 22, 2013
+ """ New C documentation """,
+ ], [
+ 1392508800000, # February 16, 2013
""" New Moment.js documentation """,
], [
1392163200000, # February 12, 2013
diff --git a/assets/javascripts/views/pages/c.coffee b/assets/javascripts/views/pages/c.coffee
new file mode 100644
index 00000000..aa6daf83
--- /dev/null
+++ b/assets/javascripts/views/pages/c.coffee
@@ -0,0 +1,6 @@
+#= require views/pages/base
+
+class app.views.CPage extends app.views.BasePage
+ afterRender: ->
+ @highlightCode @findAll('pre.source-c, .source-c > pre'), 'c'
+ return
diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss
index 9baf4415..1a627c4e 100644
--- a/assets/stylesheets/application.css.scss
+++ b/assets/stylesheets/application.css.scss
@@ -28,6 +28,7 @@
'components/mobile';
@import 'pages/angular',
+ 'pages/c',
'pages/coffeescript',
'pages/d3',
'pages/ember',
diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss
index 8d8df115..417ce20b 100644
--- a/assets/stylesheets/global/_icons.scss
+++ b/assets/stylesheets/global/_icons.scss
@@ -48,3 +48,4 @@
._icon-d3:before { background-position: -4rem -6rem; }
._icon-knockout:before { background-position: 0 -7rem; }
._icon-moment:before { background-position: -1rem -7rem; }
+._icon-c:before { background-position: -2rem -7rem; }
diff --git a/assets/stylesheets/pages/_c.scss b/assets/stylesheets/pages/_c.scss
new file mode 100644
index 00000000..9bc384e3
--- /dev/null
+++ b/assets/stylesheets/pages/_c.scss
@@ -0,0 +1,22 @@
+._c {
+ > h2, > h3 { @extend %block-heading; }
+ > h4 { @extend %block-label, %label-blue; }
+ > p > code { @extend %label; }
+
+ .t-dcl-begin pre {
+ margin: 0;
+ padding: 0;
+ line-height: inherit;
+ background: none;
+ border: 0;
+ box-shadow: none;
+ }
+
+ .t-lines > span { display: block; } // numeric/fenv, string/byte, etc.
+
+ .t-spar { // language/switch, language/for, etc.
+ font-style: italic;
+ color: $textColorLight;
+ }
+ .t-sdsc-nopad dl, .t-sdsc-nopad dd { margin: 0; }
+}
diff --git a/lib/docs/filters/c/clean_html.rb b/lib/docs/filters/c/clean_html.rb
new file mode 100644
index 00000000..ed7d5995
--- /dev/null
+++ b/lib/docs/filters/c/clean_html.rb
@@ -0,0 +1,37 @@
+module Docs
+ class C
+ class CleanHtmlFilter < Filter
+ def call
+ if root_page?
+ doc.inner_html = ' '
+ return doc
+ end
+
+ css('#siteSub', '#contentSub', '.printfooter', '.t-navbar', '.editsection', '#toc', '.t-dsc-sep', '.t-dcl-sep',
+ '#catlinks', '.ambox-notice', '.mw-cite-backlink', '.t-sdsc-sep:first-child:last-child').remove
+
+ css('#bodyContent', '.mw-content-ltr', 'span[style]').each do |node|
+ node.before(node.children).remove
+ end
+
+ css('h2 > span[id]', 'h3 > span[id]', 'h4 > span[id]', 'h5 > span[id]', 'h6 > span[id]').each do |node|
+ node.parent['id'] = node['id']
+ node.before(node.children).remove
+ end
+
+ css('table[style]', 'th[style]', 'td[style]').remove_attr('style')
+
+ css('.t-dsc-hitem > td', '.t-dsc-header > td').each do |node|
+ node.name = 'th'
+ node.content = ' ' if node.content.empty?
+ end
+
+ css('tt').each do |node|
+ node.name = 'code'
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/c/entries.rb b/lib/docs/filters/c/entries.rb
new file mode 100644
index 00000000..9e8dc854
--- /dev/null
+++ b/lib/docs/filters/c/entries.rb
@@ -0,0 +1,44 @@
+module Docs
+ class C
+ class EntriesFilter < Docs::EntriesFilter
+ ADDITIONAL_NAMES = {
+ 'Conditional inclusion' => %w(if else elif ifdef ifndef endif).map { |s| "##{s} directive" },
+ 'Function specifiers' => ['inline specifier', '_Noreturn specifier'] }
+
+ REPLACE_NAMES = {
+ 'Error directive' => '#error directive',
+ 'Filename and line information' => '#line directive',
+ 'Implementation defined behavior control' => '#pragma directive',
+ 'Replacing text macros' => '#define directive',
+ 'Source file inclusion' => '#include directive',
+ 'Warning directive' => '#warning directive' }
+
+ def get_name
+ name = at_css('#firstHeading').content.strip
+ name.sub! 'C keywords: ', ''
+ name.sub! %r{\s\(.+\)}, ''
+ name = name.split(',').first
+ REPLACE_NAMES[name] || name
+ end
+
+ def get_type
+ if type = at_css('.t-navbar > div:nth-child(4) > :first-child').try(:content)
+ type.strip!
+ type.sub! ' library', ''
+ type.sub! ' utilities', ''
+ type
+ end
+ end
+
+ def additional_entries
+ names = at_css('#firstHeading').content.split(',')[1..-1]
+ names.concat ADDITIONAL_NAMES[name] || []
+ names.map { |name| [name] }
+ end
+
+ def include_default_entry?
+ at_css '.t-navbar > div:nth-child(4) > a'
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/c/fix_code.rb b/lib/docs/filters/c/fix_code.rb
new file mode 100644
index 00000000..ef160b7f
--- /dev/null
+++ b/lib/docs/filters/c/fix_code.rb
@@ -0,0 +1,21 @@
+module Docs
+ class C
+ class FixCodeFilter < Filter
+ def call
+ css('div > span.source-c').each do |node|
+ node.inner_html = node.inner_html.gsub(/
\n?/, "\n").gsub("\n
\n", "