From edfb7bae16633aacc19b5b10e736b3e2a1606d70 Mon Sep 17 00:00:00 2001 From: Thorn Avery Date: Fri, 11 Jun 2021 07:15:52 +0000 Subject: [PATCH] first commit --- README.md | 6 +++++ out.png | Bin 0 -> 47138 bytes svg.rkt | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ test.svg | 1 + xml.rkt | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 README.md create mode 100644 out.png create mode 100644 svg.rkt create mode 100644 test.svg create mode 100644 xml.rkt diff --git a/README.md b/README.md new file mode 100644 index 0000000..b09f397 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# racket svg macros + +simple macros to make generating svg's a little easier. + +`test.svg` is what the current script produces +`out.png` is that `svg` passed through inkscape at 10x size diff --git a/out.png b/out.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8360e69d722e1dd92ea80eee06e1c7226977af GIT binary patch literal 47138 zcmeFZcR1Dm|37}@r9ns~qtH+pMfP6FEPI7eA)92cNJV6Zh+}6RD?7VVly&Gh_Q>X# z;n?GMe|o(?-_Q5DzW@Hd*Y&-=*SD)K;+)6xG47B1xZQ5|6Qr)HKuOL>jzXa*l@#x2 zqEMtW$iL%9;U_BTT@&!-#8X9mClo3w9r;JnS-ji`KV)#0yYH;!@Wk2e(KB7%FSTn^7H5*Ec7QK*Y3r8_d(?&$d;kLU;Hi3fkNP7XSHZp3%0RV5Cu{<(dG z_0mJ>=K)tw{Rv4QV>_boNZ#!4&$KZ%Q~4*Gm(q{(ah^6(&^w33$hU`WtYmf#gMA%MgC z?vFUe$4~el%3FU4(R~Wy5w^zGkz>nc*7?NlfZ?rTRqIbly%^CD;3_DAcX9h^gK(OXVeO zP-};~r5tUY(QNY2GPCZQQ`0NVs|81JA5{;IyKJp$)9opRj;<;XglRS%LH+SfMFNCHs+D@IZ?c+1E?%8?~OVd#-S zRg+(1)h&5IKUw3L5q6q0H(GShgFvL}`1xm}xp!St;Rs5b9f?w#CRMfi1VyH+oKnMu zxS{+WV=omZCMLq%oR*16^0P|xw_DmqMv1&1LKqntwG9n(|Bg4=O#F;2GCy&z#5Ge* zM|QJV{uO7R0u$=iJQC&ps6^&;8Xp{FV-pP4oE(O#bZolwI=6{)Wge?f%F4>DM(TXX z64O&tWumUB{QjsE#c$epvMo_e?-;Xtia3^2Q#sxKK%LUvwCl8Zd&w+VggI;9F8|%0Rh^{nk1%&&qj@zNRa6p4F7t znusDSEZo$*Ei~(FKymIy2YVJejf~V+gn)Q0=t27TJFK;miG4Dfl|AV5}$9+Ha{uZaVZF}OpJe-bv5bk zG1M+Cau{r<(^Y*7;G|?FWhIk)erMbzMkVjEmK*kN=)obViY@Rbx^(L^3Rrh_V9%6U zX)g;K7LlNa|GhI0OM83^J$GLQdIwxj_SO^{@pgLrcFPdo(=!L7eB57mIMA(=D#g$8 zl^f-Mea4W${Y(@kEs}=JeXktr8(y_18|Xa0zA!+nUGh;=liG8R)S?WZ#bwPEw{YR+ z`$__xy|48bbU$R!`%Q9~{e1GR+7%%zPt$p$%XBw}+>-6<_gpDYp8OtRyXl^kMg4sF zW!3UGiWt=_3Q5WHdrIm4*L5aLAQ?2z>?NzcpAc{a<;U9rw=U54&eta5+S*LKO+n|) zib2iw$p@Z3Wm{kr(y>OaeG%u%=7>~X#=bHqe}M-IfeR@eGqZ8cs_;OPw#s0qg}XkF zg1bgtP5kd2@vq934FQzftrn8$uo1<7OucsX3G38vFVUh>3^X7|%RZ8t<7=9{`mK2@ zn3i)bgWE?*%ys?^yZ$UPgdJd*Hi1J*8GnD% zFf+HHO1bg@SEkvoNBMXrx53l|`zj?3?VrZeN$Vf!&h7ReK`px?mqPn9)q&zkpnA`R)YKgk}M%99icP8zYhHJ_4Em=O~RqZyIs*<6y?;!4*BUmF= zs>fsdgGEy3-o^-vX;Sm2XOqf%)4uyztKQ*KcOxG;IHRN=9WFFN(xG@Iv(HK}wq>?@ zWX~RNpQW2Ew)k0gVPQeFB=R?5ohnF#29@#~N#L_D8tq@0?yFv`YN>pBo3OOh1NJy3 zKC;j@r4J*@9FF(~mP?w6w{jgQx2xJ1_A*t~_DJ$1u-mj`*k zB?eRq8t&1T$QX_Gd+PN<8X^w6=MD9LtlCm7-e;w@VyUaMSw zT_ZUI3HhJT70dEY?EY1Cvgs+%@s%3b_%T{Jo#YhX;$go8KG74-Qais!NLdW$n_ipq znq0?_AS_4sA!I${oTb9HL!!eA`K@18dAPxN0h`CFnzd+(s>V0et&mX#7!HzXGudbo zmcz9xgtYL>B9nero$YHoIxGeFH&0_udhzH*f3b0mH>~w^X;s4XG{;# zkJ7ayOb#qQQa*}e6M~DQbM;nRf1>DUs6^{q?vt_$y+yJKLJqoyh6()x1Neb~+`2kR z;`%zKqC)Robla1dwkJAzdRexDxsKzFR?X4u@!}rEjUfzIMmFBYx4;P}=c9#;Z+)~)BzD|BB(cR?+ zmz7`FZAQPn#^mM>6s{^LTd7&6J{uJl2&|9Qa9lOroM=0qRoRvx)P(-0pwRKpW)h^8 zXULeO<=);4b=|qnK3#e9Bhg+L;zl6L^ZWHXLrc*ulq2irGN&ww1iV45XPJG?UwJ04 z`65wbmzIF<{_dWrL%46m5nT5BKQta=1ZxrUkOA7Ye8bAe=PPa+mJ7F4KF>aa%2tKr zq~+vw>7V7+9X>Cx=5!}A>G`(R-o$mOPR_y_&F{{#xRH@U1!j*saCP5gswEeMdrw?3 zD7Ea2NY=-CjFw?1;R|W;tQ+a?Op8T zDh&}~72SltO)Nc$Zo@g{<>i;NIK$wa2vu_hIEjtHbT#j>Got&OG$GLwW+GVgx9)oo7^se4CPL@8;w$TJc7$(n#G-^baYrPFBkNg z78~hY#Y&k>nEiDp;`LnG1bSwWuzWT4K^nVO=2`DBY0Cb{?en20_7iA_Ti&?r@(hoR zusEGwBN9d0^qZ)4Amzzf5kehR*ST$8##iR9I9XF)Zz8ojO6>yK>U$ND1DjmE!frV_ zqmKg)^*)NPZ}7Sl*1Hb+8w%#-IL6P-&IXB`KvQ_qxJ5!T!VK3wm?lTQ`uAJf_-#mY zO0A-}s^@u!z)s~%Vtj-ldxh|K7tFV4e|K7n&fD9Pv6Rmx_;OUxC8ppuqN`OwN)z0) ztRGkMLsk>1QGNud!PIH;H2V`Jl|1+$<%;Dp!rbMqbyj>WnA6|i?>w6kOL%dNnQgNd zc9QFWwO}oV#D;A~X>40`^#a_V#N{(bq~&^}Jd>Yge#-9xtEChgOfheH|05bx3S~&$ z!QPV1cw^}H;IyP(hw>8XF#Q6)h>=#D+4S~2caOxpjrE}Y>!y82pG1i>%7Rn3pf3Cl z_?LNMQ*wsnk{_f$b91;DJ!Ac%$=$-e4c~)`y4^``F{vv%bhX3$E?#`5%C8^a(ipZX zsH-{SKbQ#KfwxV9vGq5^Q5Mhlg&V zaX$C+zi$aMY__l0!@7=8#-%P@33vBs%ungT9wg32Nz;KUIpY zoU)CZwT27@*TO)BTJpi}beZcyKYi3y9GH3^k6~Rr zJel9r8N~kZ_Y4kRa60|DuCZVVg0Uz#t>_H2kZSGli}qESQ!|9z!fuv>%_e%Sm_XuO z&s;NSp|<3bt5+#2(H$4VH*R|Gb?S270A>_ww_uSI*VK~c`KQI|EWiMu22pp-6JH>X za9S--OI-bBkZV&|TaHN*VQB^T@7zEMuDZ3Zi>G+ES24PD!8zXPW;nfQPml1;ij9*f z^~6mT3hBPtb!x4L^1|2=--A8RUB_|?uiVL&*g3lT&DX2m!y)PwQeusF*rILv(o>qS zL;=;lZ|AK4L21(=TX8!6sEel)dfLQel6G%7P%4B+!(-OTKP1sB5>hxY#Yw^C11=L;Qr>JM6Rz z+}hl%tR}1B_)^i@N}eo#&XIM|g`7myECHu$Uj0oOb#=y&s5!;E?5UH%TEI0o%Og1( z{bIMFgN~P%S4a>?15{QNRV^uiP;~Hrk2}7Yw`#Wtf#j{oU1B_+MHr5WTt3x%K;mQ& zqj&E zBjZeYKg}Suru$%7jT?kIPe)7Z4D8K>rB`qLz+W`=rw62+S54)1Q8qo1&N&Rkj;t`$QPW^9tgcALZVasKld zT@i=JtwDb-n+_GUGW)D`THD%&z-YG`Ej!cXR7(Wb1sDRw04%|W`cqx}3+b_{6BH}M zUQ3}ODwEYai`9u0nRDz9b$q^O2@X#1$0}zyj|E+CL}z+laP57>DD}JsXKOUE&J5A< zJgh5C?i%1W?{M=-1n#%7=QJ2kM3Rwk$?a^MZM~3O8H=tN*?Bthsbj0NTyXSjzCQauvgFn~3*R9*GAswS6 zz25iJ?$LKrDq-m*pCzb0w6?C@i%WS;K_}YQEpNBNf6D1HO8V;IFn}ZB2FvXRO2Mm%i}JI)fjRPEz_pJk7IiXY{tEF*I) z;=Zmt>G1umzKpxE%?1_E{J-kklzDGG%j!cjTz`&^PI9P@2^wVn8z<>g6(&l^jyt1M zP-NOf_!y=7ES`ujyjLnPbq9v}>Y$A}&AC*@q3PKnVv`RAwBX4gObehKiBp%g(nCr>fd7Y3;hB&@papYy|N08E-5C>ph& z>(1}5!Y?$Nw4bMQV*H%_R*>CpL!?bLL9opul5aO$#A#~g)fv^N@dAQ{+sl*gq)?NQ z!&yBhp0D^_VU5Qiw+5f9C)PG8UO}yON+`E+hHQFP?fFWSwVhokkD9qshGx}#aSJ+m z#Nmx`WZ{EWD3M~oeP1kE8Me%-1lZ|2`lBbL3r?y|q|dwxPt{i~t10IUSP3Sy5x!Ay zhrqQJ9uMK;cOhtJ>8DGFcHZT=4plNE+|4_|_qu1dR@s8rc2}{~vT1};C?e!K|6sB5 znevg=ftP5GnwsJ1s}2%{|9(GH=Kgn#{)|q5ES1Qe=_Id$Rd1g)1&?y>Mr3!v|3)Z! z2#B-++@u203FomKAyl|V{aE-_mYj3gnTik<(gOb``pT6n3u&Y|IlLql@meXV_ z*xII&Vk|#|XZssnUCQ6_p&osDn*8X(eR?g}V_Mkb%a!jXdRE?~+Su4Q#XHr`ku;_+{;-Ztch`d?@w;~Pd=i0x!3)G+wYi;+m) z<200YUUqt$QK5T5qG9>3t?HF;SrnpEFIjd|+9h}9<4(tf15~05cfv}hi9djwZf#x) zg>sNXwlZ?C*;r3cuT`l7ha2a&X#119Xu4_M5Q+&Oba06^9%0#A!>NU{Ypm2xODuK1 zyLxwGr*4&pp;}926oc#lhUDKJsI8MM=Lt@*kqKv;3Bq64HMXkm@ffC0f6HBWe>&Os zc}UJXEAU3!1igC9y=&v%Ar?-M)o`VMtzi8J^=AkW3D$Qp1FrG~lQgiDOK)20h-{SU ze~3q{UiycLt+w(Je{er9vOX8K(-A27k+a})S_dHGh-JB_4!KCp2c1@O-=PYgVO=cbU9z?Ls%*<;D8bz3&58-}zB14ni$hlKa zwkp4#$6LuIazGWJ(vz8@lBbWU2MpFpkjXsK`$yxmx8#zr{!bl+=-YyW*)*dB|8TLX zI8*1An-w!1vecoMbgV)d_~eBKpEg7^dkAiq09b6Q2r)$$VoH!%o*{edlM&7+{&C!9o~!Ji@M5+LsFaz{h&eqdY9-RI zs6+%LlA~yVdAqJKN=;JVBH5?>nkrg&V%03owd_^+&okjbt&brdTCs5|@mxH!m}_2l z!OdL{gU{#ro`eis#HPeDUCE97st2k z{a#R%p16)qacUP)ICJe@Z=n-j-p=|&Qp9Mp2ajes4)%djej$&QiMXgQklk^Tt;oFnFD(Fr zo(c~?Wv4-gKi7iFP3`Q~2&|TtR{D6jlyMV_Z;k8HaJ~YIk2Y3vC(qb(_9}5>gO2C# z!Lqm-pGA9@h5}Ot9C(rC2wli+fj}%qa)OHq^<^1}ksr0YMoaSrk<%?KnhWGmEaCx%&03*P?kTry7jCdhor6m*^$a#V_P5j8|J-e7d$&-MhNQhXMVa8HjQ z?Sd&uK6!M}0%O9#YoIzfy+<5!Z9i+6u2QSFlc28tfC4Qjrf31My_fAwj^Amv0enW1 zf^ZudZ0`a%gB*G}>o>-_Ms+GXyJUpbL0uv@oj@lQ02R~vPG`S2v+;+Lw;m^Z@@fSW zd(R+JGg$k|hv+;_hkH}zw#G@fJs2a3L^8TEq8HRT2oZ(u=hXgDPeMW*=NUV_3L%@0 z%DxhdT-ZGyAD@N@jAs|@%KChtYDrnS#1uc9z=&(^Rrfm{4$-2uB81gU%zbQD?CsE@ z^u}cmyj%k7;{KP5NBC~`OA3g3UE>~EMK<|YFbQau~X5-OqfnCy!-;DXklgk z%YNWd_4kL*HXXPs$2f0=j*n+VAQFQ*@2yW0m~#|#T-qE0o8c#}G4_9dc*TSRsT2e}`Cpw=dtNjV?Zk|6j%(b}R zg;se$!ukZW-b3BoCNV`Q3CUG_a!hM)!b-{tInLXutCW^>IY!)<7jdZZY;`6AW2#bh zM?{=5PM2~spYZ$9id}edXRaey~h9y8D%4dv|LU-`|fhs&=K6 z#WeT8w~(6&w{-{SPUCNwiy_uVGs-d9N>ALv;pbGeK5E7!)W3m6fQ@n32>t3+HlCo` zxuUIWv~LR#FYO2Siskdc9bLICQV)#wN1J;Sn*$2jfMk-_$Vn%8gM{BS^K_}47Afxz zk&%ru%g)OPzyZg+lIXqiYel?bnse^9ZfyXoK7hi_{}fuiO6v9#(uLD}HtbFrr@r_qLSIokRLi&*S#Ae<;gQ=oHmUxRi zI;fl@JztYeE>oTqW{^1k3?4D;Ex07dE?%>~8y53w^fJFDY7& zyKFmkO*63>%FkWjE$iU7O!f@{Q?(8@*7Ye3tG?q$jzkA{VrOzGmZc`8qP(0Ct)<%e zl3G&uWDZA?DIvv_*&OeC)zGLcSB;WLpJzwQrmfQ2$hWt7Q$_e`sNGCrmC-+%}uxm z2v1&Ee=itG$OD?2Ttzk~{rhEY-D<7t*@FFfk)ya3JH4DMB=l*`o13Sk5K|M>+bS3<{!tEf!DHh4(8p zJ}lX;4*<6~$CyrsUs8D%j}#uIkAIK@4fq|6DK;z7-`g8Gs9p6oU3(m2g?f0f<`q>c zRHmNF`xgxWoME|bCzLUzP>djT9yk%g;-c=qytz15%gAUb;UI*b=QiM0xUL*60r2uj zGE}!jClD*Z?y{+X841z5yUEJ(@rZc<6#O?Ju$!m#M6WhdiHccwu_Z!0u9|#r7;s5{ zQh2FmwX46Mz`ql_L5h0U*qn`%(lpvn<(Sf$7^-%&X^R&)3`tMg7@-2NtH*v&&2m}( zddvoh@OUZTIx3NgQ~0i~vzPLtSFdFcc}w5?8r9spASZI&ZsR4mKj&KyQIxw@ z{fBI$*&nJUPzt}h%hee`dH%7g4nw9&LZ+d8=vd*s#(Lw76v05m$Om+PQrQ{Se zgI4q^vITczx$p@4sAu9+#y0IO1R+V`g5xVy(OFi+)yZ+pMaF-d#-A;qp^!xVi2Xps zrzM5M%Jb$G5Au(O4CoA(+4K-rlMiaXMMyjzQGvXqqJGb=4K0GRs%u>AiWBFYBvpL> zC8XmJ!QFeFcs&_A*QvmQZ=jaSLjX&&w_$?({4<;5;fLl8wUSvqHkMMz+H5mAJ2MNb<-G6Pb$J6IHv`pZWfehDS3UJA>b2I_D&? zE?w*No0w3++>wNN{)5i&=i1yg%l^7~_i3DpSDe>673P-q7njh}b7_LjB7S#fh0c_T zx%lV(mKA;e@S!w9s_&0W?aP8FLrzui0(aeJnz8p^xwa$;LnK{=yg=;Z>O{?n{uqP2 z_YW(*Cxg+arFou$_v<^M@)B~c7RCxJeRWk8&dH4!q>9kc$HqqaEDzIF zMmq6}BgLYUer7X#QDxVC(&kUOQ9Xyc%mrbZ&A(QRBDe=q%sLzQuI5AK07;6*?-!TZ z)@hyB5#Y~zARl7l^cD>019*iVWM&~b&38>r(+eu67^k0cDXDa>MmwQ`B3B!&)wVY; z#jHXgm_67ZImqSq-D)w{Yri^+9AlOwk$uQ*#7EY^;;KVD%%yns*bpj!8rGw49b&B6 zTs0Cb43)Hz4-wyNHr7X7f$r+=MhNCkxM7LmN_{@o$4!EHXi=YA5}quq)BU0vwQ8f~ z)SXFt%k>*c)al<*CJzrA4|%V)AqZ~3TB~<^NH>>nXT*{u>J;_9{1LXh@~QGB7E`GDqHe)T6KV-mXTE-%m-7N<$#CuZ}zU*J`K*ZSg6F4kw!scJk- zOu5|704*vix`sX2#cm_dS}ua%O<0@$9zp&^9SX?kvVdiCyqp~wlhb@r6T)tA&TP#+ z>*?r7L1=%`#m_(l7Jz#Vur#`tgG#xzvuheHbcI|rv$obK*5r9*cY)D)EsWWlG)1ZX zzu`nc*Gm3SUjm&dq(iS{)=HTp;r#oM0 zrUOZI9Iz6Dl@@dDURS=GH*Z$$Z_l~xZ%wys?8W`2lmbhD^q+v}Amqa?=yw#!M;iDm z0M-6InhG_j@6jJ6D%1TjF}x4pllM3D(~^=1LyXVx7#&3WK+zv?b6Q2a!q+k+2Xzwh z`;X0RtL4e+by6$L&YLLLyO27MplTp8@P1l{-8VxVt{y07th5J zER-8%X1`7Y)!!6{sSyX{mn?tLUPXCl_nYeuN?jc6fHv!rr(D}t9Aop?6Y&1iXs0kx z0kO$XLUMb<6ZB_D+^@^a87B!LdS?)X1>|89Fi@$P39MPP2-)_g zR4>&Tf(+&)GAO4?Vt!uNeenQpB@O5ZMHQWTmKX;Emf(D zINa`RuQY9fy|2`S<)ORt^tIM%T@4Kk4w-8xaDjvUC?C#jRO)1rmJg5>yU7E)BN5_= z768pK&cB1GmUc!Cp0@^ZC0 zurVtKdEnkQu^(l+iYj%DfzYrVqkH5HDDRUeICR3CU`JwwJ?N0{l>*Yr5$l zyt}}H3cft8f}{niC0-kgc#rACti{E}I4zy`2za9R!0|P1eh!;K3uT-vAG=63{$JLgMGG zH_H{kjYS6;pMPI?3?8GjOsP(p3l2`pd5_SIJ?ucDy|k98VV)*e8Sb|t#LfSP+WNb%-#%tDj(mwONvCy zb8+&Mt$@BmR)<8$P!SFD;%-8i*y7WqrN30cJd}R*0G+7EgtXsd6?2>Uz)mu zVukdGBevX2K=dF&{%C!S1Lw4$(g*@#e3UUgI7z=ZGZg%;c5I zUSL{m$NhmZsDm6z{=A^=)A$9V#dq{kKd7Mmgc#&7;eyr=_DMp?nYBdwwFrvs*7MA8 zova4G_*lQ`F6rm;E5_Lj7IaXZJZbr_`iPlYVl4tN>v;Y@v<}s3Cw`M?oAZo8I0&YgQ$s44(}AtMn7|J&xu@0#>fKUn5M4GhKH zvy2PUa>rYbPv>(37tRQD+V8%;9AuSE%wF>;B_a;!?^WK?d2r|ceEEqH>`w#K>0{5v z>xGSLY||?0AdoV%9^0xCEM%?wZ=;Gp*)-W_=tx%k0OOpZxUlHoB%)gT|OSlIWDncs|u!%=Td)p8!y_X z*)d+?Nwm(YB*8H{oldC&)*6LU=Y1jc&1$i%#~25^DsW)64=6l`Ki8U|0wAP@Lxu7g5x*0-#*s$Ywn*3fA?t!79A?S+?eSPZzL0sTJ|8qft zR9zTRFrt(jiSK9sO9fLjXGD!6Khz6L|N3k!Gg54Rw^ixSA$|P)^}kOndghhn0UnFz z`q%D!`+=;#Cq+-O{5#Zlws%r901|>fVG0n(=T}z`ShaI7!Ez846)fj;q~^QU6sNtt zJyp&S(}P3lhum4`i-K^LC{*;TxtQMl{r$KoX^xL6S&vnZXd|*CnBzCb3jbjo?u^rE zMY5W9@t0KJ|Fis0R23C>$JW;$otBHlq33pvrab-6P+4EB3P6`K#TqeaVv+9Ms^mui zqy`$8tnOE&0p~&IbV^ZEFu^6>Y40J~AteOTLvdIXcy9eI>r6MZE?`fI_91J#dHxWZD)sYn$DG9ItsW%+c$A%<*2ct8kl2k~mOMal(#ixCi}z|EFUqOR0XZa58k-BmUMS ze_Y=G^u7?Az641hPdL#5CPy z5MpIj_DHE0{S6@bS33`{2^K|H7$g94e2W#Mid3*LgT+vh6Y4|%nR~jrfNK`+2AKqN z-O}801GQUx8vvGBBnT0VJOvn09Dwe=z|k2F-l*@~QD@v5C`IsRM6Fh#?g$MuU9vP?uqw zxLw3X?dy8YSY{a;)5q^6_-=a!jKY*dH$_;l7KZ+-S^tj9irxkR&TJ-(+s z+%B>407Qa49(C-V#&rupJT!h4hs`e1V^DuG?0@yB1MK=>h5I0_s;UY^J6Y*rqRJMD zF7H>pn_aUnIUB05NIM?-mk31=cR*xHoX%2Bg!;6q*~53q`j%Zk|DjH3VFuuN^Rta{ z4D~$4nfOk%9&>j9tUS5_YP7Z=gOWBjd*wy-6)2P2L+GTEDOV?z?5*j1E3< z4$5CymhA|H*Y&qwC^(y+pO2JW0v;=7)21PL@?_y+4i3jIGUGRxDBx_(vqW}Z{_afj z4-)|#m52!V>z0~8hm{G7Tk@V36NS={LbQPWLB_o`1E^_%6$M{(@o&g&AkJE}pg;ut z`yGN!;JdpUqi={j!6xPV9&Gsb#POIyG2CshW4iem-gx$#V(}00NA?RbKg5~T&*gcO zWh%X}(*78dr&)Y0Ls0;_pLmi&m?E-jLMYAdUBpgJAbm{=GH*w~r?&w>55iQL*Txn= zuHf)`Ci%di{CJn!h0uIP?xU}P-63O&EoNd&JP@cTCzXx zsKW@X5K_R0N$qd?hZAiJ8;{n%cc?a1JgOZC=#*g4KSyakggko!I&XJkf+KnB8~QqV zT@iDTdJWfH{FAHq;b}FmYqfQ{-3s1tt&jrRMc|TgYA1^B0X$HUnJJ&V)oOwGw;^Yo z3Ss`n5_JPWOu4?hO}<^99mmNfyGukush-P<96KGrIrC-U(+Z%En5Kk+=MKTPzhZ4Z z0c?+4y|#*-MN=6xI3Y~~dY@qw)FhdKK!UT(}+_4KEGcUK1uhjj2>?^I`QB%*>&-DW+( z8Xy;OlSJcGw8r~!@@9swWRoGmW6KFNPZ~Q(G}8HkMaMN>@lmm*DBgZ^G40wb)#I1G zvqm^uTryk&y@$)v>dqCv6lp2EQN@mK&yI^~*qf2*Urm^QR&u=NDr3q&HQ`Czeawa)wOu^7IV!T8~A2GGe6LePK94 zf-+|xSJCqt<9{tDe5|shM2lK#_tSfBlLE-G=q@EDnDOTP7tei;>j4|~{Jw~A%&4Tm zQO?P}do-tyxL+j~y>+siwQHeGr{ds={#H8Eb>7)!k5G#JpY?BG`0EY?my3>7&z`vJ zp-rrM3XBY@UGo8e>iYdVt-ZZHZNV<26VYCSOJnlg{fofjzh|8zT`OSe8a|)o}w+sjHi#}dA8;7CxD-#Jp-zZ*hNfX;4hJ{}Qw zLv5CmpRZzPX9uDo{BW%o9=Ez3eq+_ggh(WUP#hDVkRSlQ7U53;9b;Z!m@E8Iq901Z z?DZGTh|&O;OIEyMvKzbB8M!Y$G&ID0@U{x%>TrGGKhT4scj_NZL4mGlBJx*9CkB+4 zc{y5Hn4%({-w)WUwZ@-?H|zO+l%htV9C6c3sbSxh$aO>>OIcit()gE;V9mi`ly!7; zlvx9O2WoRa4rTq_8d(W(dic-T>Xh(7DRw`N2q72IKgk7Xp}Opy^|duiICyI-tInym z1cbONC@8qJ0G(X;!NEL8;H?l|LC7HqlxOOtd3#SV>$=7%$dEN!C~5s1@?q95dSYhEC1EdNsXR-F$XBO4WKUTLQ}cwdqV`Y%)haJ% zkfKtY?{7gtjuGQAd4Z7^YmZ=EFowmj)0T(1o=wTq=y=idXmal17{7T9gY57)6zLsE zhuJX}@8!t`qp`+SafHRJ0wn^1Y+YK?vf8k@ZBG{11lq{%)HKPv5?L+ilP>u(;1Q5+~OHBfAZIY=eR} z53-6&3z46U;^Vxe>&6^oA@ru3f4QfgEOnP*Ns&xB%oVMd^C?j|5St@9$T8v??s@@L z2+cG50a>I$xR}40)K)|&!PWpV)*7gA;C@yRsR6AQh-?dS2lR>&|iYTOVxYm3I8!jdEoya3wvWiat&*x=fz9e;Yg_g)u@>Bj|sBxt-xZIr3_< zvM(h!DzR43IYCya@;X00!i2ryN-qlKuA-ZCL@NuOqcz;cd9dQ!{nNlC)nm_aJoGk0 zLR8lCt6k}LdQ)F5Xue+1eqA-8UuS2 znu3&N(~qlmO_RZt+`#aRy{7CwHO*C0)Wdm-n239?Z_nL*Cmt15B*N@K9-{GsYbGdd z@n}c{37<^jewu#|LUbFH+kVJns@4m7d9efNXITK>5a>T@X{X)BtELaLww}W=$oS|s z3e^Y@<*zB?O3p3QjqnSo%hECmzfS0+z6`4P)m-atU_;zn@-=ZAa?yMBYs?(lZJ~z6 z6MIYwwK*nh3a&W5<8a!E`IJbL2^kh@xrbb8g@N9DAxJA)Xfd1?daO)#`g@u&==uqy z(}J#U`L)0OG<8e|N&P2kX?O?fBnuhS)r=-F1BRt#|Lz-x<@cy1Hy`r9Q2qkc;~GK{ zX-O_UzwOn2zL2VZ`Q_B%dqB-{^$Ne0%hvU?rBm0Xwt_%>Z*nI(+gTihlG_!&J3_Bh zcSrnl)fL(BCm|FGVY zm9E8PHWA}r3$wGGK(T3exD~Ygva1-%1i(fN>vlCv&k}PP6pm0GrKP0*v*xM5>A;A7 zl3%vn-&2dKw!RC}p2R2l z;$Y!dRFQc^3&F6hS{2jA zmK{hWOCW|h#}5LAoa8o6SW?kSG5e03mfwo3jKaKGZNu3(gRDM~daHH!zc~{V2;X6?+MBf+ zr7n;0!|SBCQd6$D@dIyb|J|eaT zL0UmlQqmh-bSy-fpH}u??v3%gA+Pxf3y6_cnrs!$((j3C8nuVJq-w(O>Ds7wvn0F# z1sxLKoBf3Jxw0xYHa2Xa->mZ(2OmNgL-!tmKS4l+22}l!aZ->m6^$8e3j*EofQ!yC zeg!g|G5%NqdlNZioIhZ=_kVdtp{L-i=^Wp!Od50?s|hOJy@H%K8{@unC_PVef@qdf z&*`9V`6l(oGN(?8T1>Lv61W1bW$+Sen2G#DjCl;bGgm^JHFPOliO3cQvxH2i%}UUL z@v3Q#)Wo(!$1if0<-+Ik~sCO z^1*kdi%O)Vq^eG-lPp)@chWq|*KNKB6nSJ-Y6nL(DEQCK&9lD|K7kC%j0~z~PbQJ5 zs(}6{X`21RJt|QPGxG~0hh};>?5*yF_XPO!zwFA>+S4txYcrq_eIS9%A~+Bxu{`0r zIq>SlnaisF2xl+S11&Qs)R#ZVgRtu&ZO~vLFvj}y-!?b+&CB$ZD}txXaaIMDl_LMk zFF3j;`4wcsljdw5%p$#gC=~q#uqcgDcLCRxiC^Lr5|43NYHsmB3&ZaaTJL*+1>edA z=7C9opa2r5QPfTX;;ZTAA~Fj$@HDy{U7*}_7_NB}61w)G{M&nCWW)ppJz>zH<*N3d(}g3< z)9$b3B?mN5TrCUztob-A2REoaOAkAc5}bE$f$kgS2PnkjAH6jk4S-nPeSafJSY^x6 zN5#inho)QsjhGM{H!MZ<_uuYWAkI~hCMI~vvX6;_*T4Y!31`F5*v>REBfv~(#B@ei zRh^QiXQ9O_Oz<9qeyL?7dKQ{z{9Zr}b4DuOL1&BCKr^Ik z{3?HncJI0Wb`5uRzUpRG!qMF{s^TBxHyz<=x{warB;2O^8VmV}<7F7}(23lgT^3<@ zty%)2^c?YUlja7;KJ!=+Y$lVGIC4*uclJUKc;lvV zO|O+;D)ZHa;s188y%_!G`cj(!4MDI_0c zp)698W7-)_8$Ld>cTF_y?DALR9lx@e-xxW(ZE5l{3QCH-_V@rbF>E-XT|lI#Ly`C@ zNBJ#}JbXGzKB#8LYpyXZs&m+e-a?|XU#xnE2Cwz%T#P!jS0D#FS6H7UJ8q2Z2myF| z$0Q-a!hnY^|49>0w~<|KU@LU298n@q>_J12LO!ZueAj2Lhya*bx7WzduzxrIE47~$ zLo`>BJzwr&n_**Ds#b7$u~X7{71088LVuc8x!!LG4!3>gO<6cCRYbjw@n8A=^A3aN zlA@H4c(S?ZlWw%7Q~nfO9kKPh<~q8%^3fbg!y9!Qv(W6vHA8h|WZm+?viqwXcn+%O z9HdAQ_*bA{DlbgYftwa=U$^xH%0{_pPDv2X1LSFC};o_{t6ne`oxi^WC8yhAcyyR%8rTK^~ z?iM{fQ}_2`=jN`1&d*fGch28w6f8kGAqtAOv=f5C20pr9U*u3uK9t3^aCh~1`M2@`&-IHxsAg`Yl9 zpU_4gO^$pljeVTYRKR2VW5RRGbeN`Ou?Zq{%HxqPJIJ=r@#r|ix}D*|%>tm!xZ*Ud z^(f)m1Pj+@^)52R#|fT;2VHw?GxS=XH6l<*{!TUNe~o-90W^#~hgK|`o%MwulzOZH zB6#*x4`;YRr!~~!%qx=MP5?ZJVqX?J9El15gqJhKCplLfgXd4(t#Z!JmVytzLFCk# zkW-!G8R`H~dlobp;q8E`J(9xK3c4#3zZ%ePRY1oJN?n(2#_#3xLj7aAI5U+WpEmld zTymMcmu2z|%9M{$GvBx^>INTzla=I&c@K@f$iA%9j3&)l;!ox2s{DU+{dqW5@BTlI z@8(izqDWFH8A^zZ(WD}ohsaQgOi{+nR3xM_L^39}jgmQYrHDf2qDV3)A!PnO?ycA7 zynlcE&ULQqTqmr(_FDJ4*Yo*!K8ELM+!Hv6hc)KVTRIgA8M&&ItAv@1iUn3d(5f>t zbk|+|)G5Dgt2TafKlde0c*PLtMNzDMG4`x8H1#CzDQqz-UUABM=li8|kQ2i0dT2q4 zTq0Wf!q$|>gI{ZEV(t1Hdp}=_)-X3uMv)N<*){j7uSInLb>7_GKwt^ex&%`Y73i>p zQk3qW6uJDf8;0+`%Xs*Bkc`@4H%=Yw%kXgjlD`+&Lzj8E>M^2F3s zrA8enU%-^)j#T7}R7|GPXeL@^1_p_F=L-9-kFLM;uLrbpaDCJT+Tru>-0 z!fOJUR#Y=4@|&ofej%qTLSFasAZi=!X3kD3|D_q~5aBc}o^IHcb2zc@%A>v!^B*+# z%o1Gc^b1U3n>$ZOS|@3>CZp-(&16pR`gk{VRwvNEvV4E;(K%Xy|I*;)`Do0Nltb5N zs}&6}-@PfD%gR@|nA<1Kv0<6H#s&-ZRGG5}Teo-_U#s58vG;gv?JFA~1$^fvPe|g; zz`aOw#p-K8^;Q_ApKkPE-N!d)wXD*7E=xqtOTK8*eJ;84xF_$x0uAr{kaTB!(;$_i zusKnWPuL4mCi>im?0>^tf<12QAd455cyn3=%aSC<*_7rhH(XlwH(y2Nz_KZ9^Qa?e zunILEqC;6L9oK13RD{b_Oa|3Ib=%oF+M5S$FPO$3jA3Zm&LED;j%QJVir(!deWGe7Br611Mx85hO?a4p zsp~x-d+WF5P%ktvN3SF*ILuVGtx>n@5!{hRzWGlUn&OB_yq^*#zbOreun#DEY+#U3K2|h2Yu)~6 zw@1>z-!f(*dW9@TudeUkR~ zmK>L?@L3+Le&YK@qo4OTN4p1?Wo&Px&t4Bbd>3Y%wYxRx<4(UKhqa5Fi(K;o9fBL3 z6e;PD1Q-@Q0B{tb6dGJX_jktEnUbgZp#pEDqB$5@{|An(3==$BWbmas<w9X9)ET-_^>I(F)|Lh=RKXhWk#Fz0@q|o}cO$>R=wOXr7;+ z-|+S8%&@yV_;dQB#Z*-uLg=#Tu4+gt+nS6wA#?omTU@l6+xs;DeyRpCT zw5>x%TLqgHJ;Ew33qht=3fDIRb%Pl~~6r zOzV!FV7F6O8B19;P7}O#CdzI~dBL^4<%YAliBt4ZpNAl?RbSS=v}2w$)<)^V!a_0( z8hz9@eH=6+Zq>Zlhk}OQRpQ-S3Om>bl{GXPo{xcf!PUj#Qb`>luT*k6OGVCYwu||0 zv7|&SzA!oY6mi_K1sS=x@4+82qF=!4(yn}0sLAx-p`)#38QQ1cr7G9{;=3RbyprBE zc!&m%CiETpzRK&UlywqutHAicZm@8?$mRK2-GAc3yg#+404d+fyhSbG`k}?k`is|E z!rzX5@hPc%{ihpd-)N@~duPsq1^%>XByzClrRO5B6`z6)*4M!?_o8*OF^AE#P$jW+ znn7NI;RxX|P=1Fm{cvm`RqWD9tttoT!dfizPXi>qz3uZmZNkkPr72-sr+v$cvNroL zb3DY}eQ~+KM&|sOH3Nnsq=S;}Py9}y!nSx|bh^bKNCS7mx zPWtHSyQ|{SP(qcIfdcDb0ID*Y$`(j%n%`v(-z`Wn%Zz_qi&U?goN!tR#V@v{K2h3ow|W;kOKAs zyi)_K_;CM1wWo__TfC%S`?<_<7ZvBdfzouQx&&d4g0yfMh=VsJ<;jmqwpH zUm5ZDmS{J`if1akmtumvZ;Zy*KF~fDrUe9?T3v)_8ZjI@mt%YaFVL-!E z{g}6P?u?Ow%`uusF`Xwukyk!vX8X}SnUS5Z(-@Bg-O+> z6(_xjHpIgkCU0oioaWKoEi`O~7Y ztW;CD6$J1}*-hxmp0J(&!z69rHV*VnKnK5pUF^!X=0k=bi(IE{ z%h(;n6xl}q+Hh9h7{;5E9Cwep*W`y))X%?uSt?%U@Fx6Q3?daXT)VD#CHWj!Tfs=b zB|d5X4lh#V#43rUj6>0BHg~?D@*b>{tKnH(?bBI{UP3dD`nTBNn0PXGqr!@z~Rxx9y zwce*LCW6jW@L);jid|s!xb7#mWhUSg8N>h~cY#%4$`{6=MN8?d49W$QmkNO)GCjI$ z7whC&cM_0-j5uElY_YAXX!0=K;(3gF8GUox<~?~jsO}3!Ymw1kS33aE!i?b&IsGkH zH~-r~*B;d_yIur!GJ#aG%$p=CRX(cBznHe!`&+jzrphrm*WIge{h=V}kp`Q7va7XkQm&YtB|TsZGN(>ni<`8+J>wimI-z#nLw`C*PL z1^o-Ian64~p1|r4ssg?1-66cRtgLx9qa>uG<$% z!HoOmG$rC4z}LefH~&tdT$nfOe&e4ePR#{s;S;nCzM7Se6#(iw|NGhfvxgmUyu7|X zvz)_{YcH=2Uh?n4Lb=P+Qv+P=`1<+9%33|dkT=qxx9VZP`OnG!eGmWpEd#Y`2@1Ex zR)mL#M|7>qc@ejK{sI56(*jTz=xG2Pp~t4?-u%+K|J$AUbrvRfQ%})mUhKbF>kO=M z{@)cPa9+Umtp~gLdIAPne;@yMH1&6dF*bqDwyLyXtl}==Q-@Co{yWytVFF%%}~R%C6cSVI-29^gW-8joP5@)^cwHO+Nck4+XPYH z+rzWxKKBcDvwM@+1;jfC$_YclS%vc041#& zui$2}tr~YF4yXj!z7%oQTgvKp-bJRw+Fxw{=hz-y%F2~{ z&z*gut*rm=S0=KxF#D_fDcL&22pZ7w2$P@5$;owO5=8xc@x_UvYqR1&U+IhXjK=e~ zm!BocZ_>ST_>F045iuL>wQV-dZnnH5wz^{VzpcymZ-IZMcx4d*0r^A!o<-BVN&i}G zT?%B#*8y4|$^Ex4b@8O~_G>Qg@9T?L$u&!yyM9cIc=ApaNOf{5-n9O=pFBgC{_NIU z7@!)NnVI<>_{c((;(FHQy8`NB&2Fr|-*wn=9_AJdC1Y4itr|62Fwq{!;>+ZAg_}nd zZ&hagrTp6dc*OEfx{om>*aNMsZtCM`>@{YdiS%F8WpJ5{5 zI+hU~BFNROyz2u?9K22m&}yx_E=k(rw(y3Ef0f6&kg=Gg8b9Y8ucHIA{RW!_uVgJF`>hVT>^|ZX9QnpTbc7%JMyCb#w zSQx|nI^RW=_>yq(MH!u1M_59e+1NN0G&bXZ;AP{cv3m9DD)T^4MqXb==|F%NeEVHx zW-h-Ir5@So*VNZPf%R%`ijsXQ))LWkZM?!A@q;gUDE9=X!V)N4=!N3pqJf6L-&As? z+4KTo-n5(ye~lb>xxT)+f^G%Ey5E@Tc?GENf)jmydo~eL3O*<1Sp4e)4U5@U>g;!& zv?YIIW@#CKdJWQnqd8yg9~oCgXn)LWK6gX4J-|nGf&0JP_WXATT)7S!0tFs|xS8tbetIF;kLYvFeHzjgKG#NPM+^zt;)a zq-B6{{<`T zk_G4PNp&*lJA?Dp-_kaly>YJ&)8X{{aKgDTLwu-UiJW=8$*IEhh^6Bz2Tsb{3+nIE z?lPuVe^LH0fRmswZRGyCRq`q6@oD0*fTiFyW=jBmsq9pb(CtZ33K(zaIasE!p= zB0ep!{n?J)C1)N;bw&H-VK9wDuo$MdGO?eGpecKOZJh~J;EE&GvCt^yV4UO^@$5xy zZzg|U&kjAO-gvm_9BnR9Q`|7TMy*OkfW8Pl4zCVd(QJ@*EY@37XBQ0+6A_*M%IoL1 zvwPd0J(!fl8|gkf;WX&nCYdr=Jyl_LWH$D?((7fAVvw(J!cmRtdV3dx!g*@gTo$}6 zi9XT^BA6`Ksj(gLY~h$~>Js5C*|_5Cde094h~8{dtn%6(gsgvClSjr!b<<+^yrl)N zqZZ9N5qS-$B+AK}PgODcQW@Lwfe6i@#wMOXpsN_Gj43o1hTn4!t7{gVFFGho(uDfP zx@qsDsYjX5{e>|&95%@a61532o>W#+Qc@XHj8`S3SuhT-(K%M)HVIOxXV%1|lV@7G zIJ`T;@DqLirFcJSGuL$f4ugn2ldb1jl3>7s22~jcMXix#)2)cgG&wbOu#=-UcJOZT zAI=bYQ#`j=@oo)wzcUXP{|;$*F&zh#M7E8sllEzet4WyzL6o`0Y0ou+tc&Yky`fcv zCp`W&;2356AuN_WQ+90^fcgWN$K~f_!@5R$c8aF#uysz`{9~L^WTWJwI zF;>kz#u>zIW0y|7_~I17U4{Z4s864*I1#D=tfQf`>0RARlUoZ=R(fuK_ef$j)IFyQ ztrHX-8~6qr$~XQ!TfrS{m9KGL63CtWCw`4ji;^-2zHiV6P9&nV$n4#mibhv;-|(iy zwnqsU*msCJrGOpNcVnZ*ryFtXOSw^*U0EB>YgD;&9&=()IIS|4H5@EDibhpy##KpN zE|yZ&yFUI(TJtA|qJj77u^UwIxZa z09?M#>H;83V#rAZA1kWT-yYL=fu*}FsHL6m)TJ|s2M`{00sxp$Uizc@c%Vk@FExp4 zL)FJB?$~dO;Rc-j2nkK$;x*soW7U&T9RxBGiyCR7(C-K0iZG^6ba}`+1 z+8M$~N7X!&V5UHGb5C0OVW;*4XH>kos6Xz zPueM$U&#q z)E!1l+@|B)58FmUiw%prCmQBM$8kEt%pna zHIn)}cenh_*4h&2hpOVl=ic$~hF|;mo8^8Eov-h&R4+A$yNawxJC|I$$t^rRMz1Pz z4gwDfY^IsX>Hb^_$;*k)?~;#$4Qb#~)cuJ$NtOL}PNHZ;y!W@Oy9SDC0tlzzCG0kg zVw)btGtM2;-Y~Fl0<v60YGtCni$c*2NR@cd9I*vXg*YF>bBYiL(S0Y z(cyKw?`HG{#)`?--!yi8-)|+=Xqk*2XAZF|hv4*9hkhvwnll{36t>_D3&*E&@m~H9 z`p0BW=lMC$1cisHZ-S5O%}N1B#9PTn>b)ry=XgjLJ_kR%<{`Ip@2rg@7f@hNP4HSu#Q2l=M-`rCf1;qzzho3_7DoD-zVjBKtLeMnWabp>dy zezhTK#Q~;W^nphechAdhPBWq)F=}fXzjI!EIEJ{~f{8~3`9lZBx1uQhX1=z~M7GY3 zEfa=ZmwJo-!5{@0#6gC+^BAv1-OcF|A*n=Q*c5K0PF!0JaH((XE?aH$%+z>49I(hB%{RjA z;ugDl72?xIBaYx0q@7O&+E;NUpCF&g_bzPu(;g+Z#6NHAVA%H1k*UFA1CH6>w@zh8 zoVvxBHbwr9{C|d$*H&7CSibGiPh#En;!iQC$55qqvVgPx{o73u) zjCV8V$ph)H1?pkzpyt}A7F`>4(3wHMt)C{=`?1 zhNJ;gns-)&)GTI`B`_=@?c+jhD#(5>sd%vU=W0MvIFRpg! z+D`}1KKG!guO+@^&Vz+H-?Aca=Wv^I9lu9%vRa_xGDIlBIy^hpl!+x8bY8@z&%) zxAFWXPs^{>O-PfcPT)08j#YC7`<~xd&)t=oePNl~xl#LUYxUnE0&Nk=O^it7?F~#} z%|3A8M0SWd#_Rt4b1$wlz)*tCZlqE)bRcA;cnk)6hX_9{vis?J5H-;y;I}EM$8gQ? z%EJ~XQ9amJY(Pxm!mgD%rkydjgLt;Dml|!aUuTt&)Mg&=zsdUg=9!?2osyN_=Mzy_ zYXe$ZN98>TbCQHdmZ}a8IV0ir*mKm@ou^NP(U$Mp)=|mbQ$NNr({q9VA3GG(n;{XT z5^Ao)tiId1q=tdqwnB1B=S)E25RbETj~cPXgp#B_EFbY-O}@O_#CrpY>hWu3+)P@? zSfF@tgA-yt)2hBYY)CO%b-~$d z6&{W~qZ9ihyU5jp9`;y-@y`}0*TJh>0qUFk&6M^3I3bXQr3LLD-7J9c0zmxwog)*3 zOa~~i#grfLU}2X}9Zr$bNw`eq*G`C4dYymQFtUR}W{RB2OLNMSL`^`6pKUw5kwd-E8zJ*Y`R)2fHZ{12n0hmB0&o2 z6OBNh3Q0Xlr_-_ihM*6O6jspb8VK7?^cy=@(JiuXGLf$zs8(3_1zhJHimF9XF2i!# zFjHHp5&Kg8&LOh;W28V3WQ&#K6Armi?G+1C^Ik%t!k4F;`aBX{{qJNj{!P2T-%_iZ z+(L^3Y(V9*@yes-7SKSH!;zGwv1ac?e5r`)2kaEtZ!SgmXaC3Hy6;c`(93Sq(QY@t z{FeXm=8pGV`}PT5F~FP%!1sR%WOsn8Qe)j!k|P)6LQc6c?Wd8@ zLpn<>JAfkz|2|I^JI}r~jY|##Fgg>DKwtm;q}|C+QtM;fChyp~xSuJj=AWJ&;CLNK zxyt86C+Kx*x_!e&Rw5-VDpMnhH!-htn=5OqI2CWw#cZH ze-^-2dZFag0&4E$Ub?e z>mtk@-+Tl?Z$%61|G84k)_gs>^iTT#y&59+=vs!Q+A&+OV#d`lVz`aT)KsTd`ekIx+L_Fp)W zeQ7a$5AO8*k6DMNw1X@@U76{`RpaH{{$hmkKwm8(!CyOsMIC#zG4mqngJHbDE$4UgBT8xzQ~*jt8V5@A9TjYjBq0;N5m&)J7R&D{5n+h?A~3;4|^ zGV^P@u$Hzqtxi#LFHk%~nCg(hY@LOKt@B-Sv0s3}Xdl?Fzw5`?-)AfNU%c#nV6o~K z{0bakm8@J}Z~sW@=v*Ar2~u{+rvS z&j@o*JN=DmV}^G8Yrx%P;SxvqG!1qO+o;0f3ckoxN=JkApV&3D$B$o|W=nke&`SV_ zL&r>neV!&=$zPxS-qar7k_=8c6@|yP5a+)2No@Yj)7=Xz z*CPZ@?P5I(;uY|>4i^SDyBFF~lblGw!E*xv_=TsupLk(KUI{zLUKD30IM)CIO=cKZ zT8E1;sIyu8yXdXBP9ky2cCpTaQt)H}a!Do3@i4UK(!=-fidAdfI{PDe-)nNQDEQsN zq;o;M7WpI7m!wBni9<|SVkQ~d!XGv%CB-&;JXlTdIsbR{f4_c^Guivw8f#a6Cp)_= z%NOlSyMxN#R}wQPAZ}kBi=@x+Ra=h|UZBrryrH+V7R4l8c{DOjd^w5Na@De!5IK zZlS61SNE{_EXGaxxIBu-Zhs$yqe>m&%uN&x79^lWb}f3o<|z5TtFYhiqHdoH10wI( zIwD2z&W2_1^Iop@whnLa6jG^Hj+VBQs?o-|IQ{77pWPgDWbC4`{fqt*RehLeSSvaK-?48!{t{(YwdGfTG-307sb2?ESt7b8IOxG zT=m;_+t2}`oYE^e2sF_i+8TX>^OC}XbLNf**bbuz zmiN;*!kVh>+PZG@Z>|%X@0JBA-zDm!>rfv}{ii-^Iv4VB_6?@dYTlXBu%COD|Erd0 zv*6FLgX-r!IOT-I584{no}<_WS!=hhXo;7bSoTBPGI5YXSQ)H;S+U9YCpKo&UX zT`B8#Q|iq#P?l{sh#&IAR{YkuGr7q<$Z0ya!rX+z{_dV+^%rVcube;(u3=ns2=d0Y z$Ju9(pblp=4-E)l{E9|}uJFX%ZHEzCRH*L+S(q5GWVTEg1g>&0KjIcI)#(dwE05aq zr@fpiAJs>OB_Gm=W509~Tqd&{RM2KlNHQpcq2qCb-#sdCdPzwuH9!9>327k;Po%0; zG(VoTzbXWKT*6@?iaWIKw+am)IqeuO4pKRD(-xZ=BcIa2*);T@rN0i0#bRcZB(0l# z@x`UgIEoRZrD7G=P9z?@YF)$V@VU@AXDfXFQM|g>60Z^g|AcRw4QA<8|v7ZIva*zRtr)rS>O_<_se0NZKAei-TqwWCLms*Fr#YjunicTSms zptk{05d~g-BX{d#WhMjk5JRc=@p1T-pf{1$FMTj-fZnsAeV=-&yTTJ0CA2XF^E7Yb zCpkp`O`!UO_@|!M5?zK^L@0+Gdq<3u zIIn*9k>-60h#A&fxnE*!^Z~brC~#?LYl~lC1us5)t<>v`de3zjk$NWre$6jFxgU5v&ChY+n@iI4}AOUXZ{l%@ss*JW#ByIcrjO z+ebs=`RUcK%p9eTtfnYqW_)2Vbls2Bh0QZ>@q8YalvmOCWH0h#F6N2r zd8{Fdz;~h6RqTJ-c+I`tPXYPPC*C%Q7%>ODBzv+uAw6A{I0Fzji@iFTCyQjJS2Bdy z7jGVc2Dxa*PP#hy|G#v)sNMm{$@aF7J$CBntkkEp*lb`7{+V?K%)AuCAUShIY z^LCSg)X)9qa80~D(JBAwyZ+3w3gF9s=LSgJwO!=gTvK;z(zDk5jKG737Vcd8;lfKF zi|sdA552j(R%OefV_ssMVz2#uTNbMfz4TA9z9RlCX7<>*>B*3t$BsQ%zSH!%&Z$qW_%*kKx?r}?wb%Ri?ePWALG-wWm|}_>xnnp%uAEry9Z4c z-sX*G)=&PqRb=trq_n5s#cdGHM;LI_xvrxUWq3g+lEewfsxN!0GAqKJ6FvJg^4{LS zwQA-U(1|+?nu)v@v^K>k<3@m_aMJEkT>T&iP5I%4GDp4AE_K74B>v_^g?i1OV(6Ui zQv>R6BR6x^#46&=M|5&XYhe=5l0wac6_-qm$}n;}DshV%0T+nhtP8o__=BpqL@3&Nm&yF~+fEW0%LoGgqHPvmuqPA7R^@YzE zoCS&oRI)Csm1ff<%nZ+O!n?e}&HdTf6e2Ny4tKt{11}~qIXQEDMKp}GrLiTg>CJYi zW;9XwZ5}^R#1gn58O6Q#lU)5~@~}Q!fxyMt4F$_T7b(8e33|j`_vPr5>g8c=_a6%kH)EdvZffoMwpKgu}zB4CKS?v7d zcq{p!UHGtG{V1}LYG5Rlh0LXE*O@;P|FpYM7GUS8=zkIXHB~Uzpj_)f0-W&pY!B}n zyODKBTYw=Xn_WKn##=G@(3S(6E|Ae1la@H(q1 zTauvStVT6ec&^~$v%q)o;{jj1vnbx48uIw(uEHz*xS)gz7Mt>Z!kpMe(Q}RV7Be?z zv@W)ru=3?$_CRZjR_@+4cG{APhxZ-XN8TIEs*-8#YXN^aNM>eb5qU!+2ob{)&+4M% zQbeT_)G503x#m5S!q#;#p6s^!uxO1`3<9$Xe`G83-5eXEGvGjdH{W`KHEW8>DVt-o9pE}CUlyPx`J>IjhHP2b7L zn3Ja669m-(S{0bJ=UO)ATChvAYc6 uahHZSNcBdJET;e|9J*wXLoL&P0fj+k_FW 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 p&;{gXK=BWbu>t diff --git a/xml.rkt b/xml.rkt new file mode 100644 index 0000000..f42c1ec --- /dev/null +++ b/xml.rkt @@ -0,0 +1,86 @@ +#lang racket + +(require + (for-syntax + racket/base + syntax/parse)) + +(define (tag-start name attrs) + (string-append + (format "<~a" name) + (apply + string-append + (map (lambda (x) + (let ([t (car x)] + [v (cdr x)]) + (format " ~a=\"~a\"" t v))) + attrs)))) + +(define (single-tag-end) + "/>") + +(define (tag-end name content) + (string-append + ">" + (if (list? content) + (apply string-append content) + content) + (format "" name))) + +(define (tag name attrs content) + (string-append + (tag-start name attrs) + (tag-end name content))) + +(define (single-tag name attrs) + (string-append + (tag-start name attrs) + (single-tag-end))) + +(define-syntax (mtag stx) + (syntax-parse stx + [(_ name:id + ([t:id v:expr] ...) + content:expr ...) + #'(tag + (symbol->string 'name) + (list + (cons + (symbol->string 't) + (if (number? v) + (number->string v) + v)) ...) + (apply string-append + (flatten + (list content ...))))])) + +(define-syntax (msingle-tag stx) + (syntax-parse stx + [(_ name:id + ([t:id v:expr] ...)) + #'(single-tag + (symbol->string 'name) + (list + (cons + (symbol->string 't) + (if (number? v) + (number->string v) + v)) ...))])) + +(define-syntax (define-tag stx) + (syntax-parse stx + [(_ name:id) + #'(define-syntax (name stx) + (syntax-parse stx + [(_ attrs:expr content:expr (... ...)) + #'(mtag name attrs content (... ...))]))])) + +(define-syntax (define-single-tag stx) + (syntax-parse stx + [(_ name:id) + #'(define-syntax (name stx) + (syntax-parse stx + [(_ attrs:expr) + #'(msingle-tag name attrs)]))])) + +(provide (all-defined-out))