From fdced12fdf7b9ed6454728f16f0d44a573330db1 Mon Sep 17 00:00:00 2001 From: John Rouillard Date: Tue, 5 Mar 2024 13:03:46 -0500 Subject: [PATCH] docs: add older docs and link them from a Sphinx controlled doc doc/sc.txt I can't reference html docs relatively directly from a sphinx toctree. So I created a new sc.txt to link to the existing: software carpentry overview (precursor to overview.txt) software carpentry design (precursor to design.txt) I also added a link to a short paper that Ka-Ping Yee wrote on Roundup's prototype and issues with other systems (bugzilla/jitterbug). doc/design.txt add link to the original precursor doc spec.html. doc/html_extra/roundup_short_paper.html, doc/html_extra/images/jitterbug-2.gif The paper, lightly edited to make image references work. Original location/name was: http://www.lfw.org/ping/roundup.html aka http://zesty.ca/roundup.html. Also added one missing image. Other images were committed some time ago. website/www/olderdocs.txt add link to new sc.txt website/www/Makefile copy the three docs and images to the published tree. Tried to use html_extra conf.py parameter as is done in the docs directory that creates share/docs/roundup/html as part of the release process. But that results in the file going to the top level directory of www.roundup.com and not to the docs subdirectory. There seems to be no way to control this, so makefile cp rule for the win. --- doc/design.txt | 4 +- doc/html_extra/images/jitterbug-2.gif | Bin 0 -> 32390 bytes doc/html_extra/roundup_short_paper.html | 164 ++++++++++++++++++++++++ doc/sc.txt | 29 +++++ website/www/Makefile | 1 + website/www/olderdocs.txt | 2 + 6 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 doc/html_extra/images/jitterbug-2.gif create mode 100644 doc/html_extra/roundup_short_paper.html create mode 100644 doc/sc.txt diff --git a/doc/design.txt b/doc/design.txt index 92ac025f..b3064aca 100644 --- a/doc/design.txt +++ b/doc/design.txt @@ -8,7 +8,9 @@ Roundup - An Issue-Tracking System for Knowledge Workers ======================================================== -:Authors: Ka-Ping Yee (original), Richard Jones (implementation) +:Authors: Ka-Ping Yee (original_), Richard Jones (implementation) + +.. _original: spec.html Contents diff --git a/doc/html_extra/images/jitterbug-2.gif b/doc/html_extra/images/jitterbug-2.gif new file mode 100644 index 0000000000000000000000000000000000000000..7898599ce450136d687f25185a8d9267c441c7e4 GIT binary patch literal 32390 zcmV)VK(D_?Nk%v~VSNG*1N8s^000000Du4h)BphP00930H#`7j5deSy0Dyo1pdbMM z{{aC38eeB0w-hgah(JIzD82WCH*H0RR900000000000000000000000000000000000000000 z00000EC2ui0DS@v0{{m8K!9*aEEtl#jsd`_?1@A$la&+q&HfPsR8goTEOh>2$+Zh;~~W+Ez*l#`Z~n3s*2oR^-R zpr4|lq@$*#sHdu_tgEiAu&=VQw6nIgxVO5wyt}@=z`wU`i@zd|0GG$h%+1cn#FNj{ z)YaD4*xB0K+}+;a;NjxqNphsgk|E9V)aa(W6F_B3-JqDbuG;k4;(#iPAzvShH%~%C)Q4uVBN9 z9ZMGMGM(_=eJePyt=qS7KgzANe--|HD<=r#5Y^_MrkC7C^l(jhB0>O9rr@g2+7>T@i3X2&#O8!YNyyd=_ddg$qVV=$nW3NT`yq`l;xxxRS#tG>%FI z={v!liK(wP4qMH1qW-Dur==!KDwMR+8f&Q08XD&|)yk>rn|IQgYOdghYtF6-(MZpL z{+FtSJK~t-jB0Stqm8It#0|b^>~@ptCmXCc)x1?C@j8 zz1v2wfE5euf5HaX4R4*6nrFgRwrOyM)@BRxwcTDh<;dK6?DD=`J}mRhqVZ_%qy0s? zEInrLr{dM3-_(SQE?WQI#Kee}T#Yh$v6K`-6yszEbM^VScC+02;VmB|Qz zUgy*^K(=a@_F-#t?e>>tuZixBq_JDxj)S#rSeV{v&UN#QcjTOR?m3K;pKZ3`Jc&;4=cuQydS;>Hz3xO3TP}P4ys^)2 z`|Y^ruKVu1_wM`ezy~k<@WdBy{PD;qul(}NH;;Vny+hA?Bn}A?FC)%pul@Gickli8 z;D;~%_~e&wzU))MJC7L-t>FIq@W(Iz{Pfpv|NZ#qumAr1_wWDz01Ti22S~sI8t{M! zOrQc6$iN0V(11HZ!}_36fd^Xff*8!81~cLtmOnlJ^9tIh#q*i@uPYB<*K6%l@g)Z$>ntEZwL{{RvK& z)>NJSRB1e~iPN1{w3{~NVL(+{Ql1vIr8k{v3lEx7k`gqiK1HfV5vtFqrWC2^d}&27 znnsNR)u=h8Aw4r^Pc-6lsbGaERnfZBoGO)>KLsmMtNPZkvem8@y{TK}+SIM0^RL$2 zYgJ<^Rl&}csA=6QVf!l1t7=uME3K^ZHe+B37@4g=<@*npGbT^|6O_tWh(2R@c5ZpU2f}T`QYd z+X~mXn(b;}FFRWpjeQaDRky(v``QUcpAzuSJzB zZ{fOL_O{o(oeisZzkAxOS{AwRwJU5{dfL@Km$}gmBWG2s-Wq}yEx^<+dbulKp~}<1 z^+oGyDa=|M{#LR4ZLoPU>sqH(=S0t!(NK-Cm`QwGKa=>(UZnDf9X!kadInj-m=5(mGptEci<+xSeQ*>(ed<T8~fPCuC*D3jO=DR``PVOwP=|Q z?P^>5+M-l;c8QJcZhQONi~ZzQJs(<^YI zzW2@Ve*63101vpp2Tt&U8~or1Pq@Mt&hUmi{NWIfxWp$;@rqmg;uz03#6`PmjeGp# zAP>37M^5sRoBZS`Pr1rNZpK2^`{gi?IS)BLZJFEr<~V0z%a@(=p8H&pBi!E%X)eha zB9MhgUt!W~xb&tU5a~}>deoUd^`-v*{EI=)p9O|aNS?#+fLoV(0mDuLu;0+^VkaQk z(Oz}~uHEfthkM!wNcO9H@z!Z{BG*%iJ)?7bhkBQK5Ch-#!Pk9;c()Rg4NO&4DUaW6_yxpKi4M%x^Zxa^hrSP$@BHZd-p99}e)f9^ z{O4PK^1Y0G0fbP1@dKdzs!|J_Ib`!Q4k z9smIW00ACQ0>8I?0RVX0*Zx8asCW&?fc(dOhbKeVXIp1we)j-~a&7 z0p-^LW0-~_NP@#>f+;wM$hU&{7i2FegAqu14LF1g=!ck>gDpgWB`^asU;>C(0tJYH zxi^G|c!NdQg>dGCHAsXkq=*54fGu={EaZrW_=%CoLY%llGXMbqaDXIGil?ZFn>d1B z_jev(0-yMaT=+uW{&$LGNPZm`6n2at&T03ZnK4^f~Sc};Rd5(yPCh&*oSc9xMj#21|hA4|RXo#8E zic2_zvFHJyIE^nvfIomi8*2bJ=uk1GTL zo>~5t2f34mSONyfis>1Jg{hlgDWEG9k#6Y#k!hC2DUlHQmWP>~B{+uwaF-nkl0;yl zdwGI=`AaT%ol6Ovv-pRF*^m3#La`W`K!}gCn3&?oiPkupNhy;)d4-)wlLanUsq7j%a#> z_;{6BsF_F^mN$x><~gK{d6|y+l0=D+JISPQ>VQycpEH1;2atu`If?_Bl?H06J^l)& zMH*6`Sd}#h0A?DFRw|Ga+NN$=s>bP-5HP34X_g+!01%+8X{x74#HYtss4(!6rMHoG zNdYL>qHgx0FJ!BhYK}kng9{3flA4>7dZ}Ldrg;i|PKd7H8m^v-cyP9!59&e%n2EJ1 zgrb>=oe7++dV7(Xia;2!1Us-lntl74u(djg3tEY|>YrKKt2BwDYznOEx~^WR0B5MN zGvELYu$~+GvBcV}&T2%^T6`t?rx6gSp|_XKX_taphuV0Di+Y_;dXAKMfK7OSO}c$s zSh2C_mH3#cntF{68;%F-s|ZS(SqT9FTBU~ z+MO6XiA=eJIy;);8nFraso@E<6ne4U_puu5mZf-x4#1;p=>Q4<0SG{{B}+sndwLH5 zvoSk*Df<8{Izs;)q)nf=JQJ-D{=+Cnyov@67& zS;>hz*qI&BnFIg<1OSf`D}AatyE$6BvS^{$iJ$HYuKyXDL)nj7XpL&?x7&!Dz*>-S z8+!_%w+N~LcWQ<_>HsF700;m9#QV2F6u746oQG}8m#AcAo!v@o^l6!mr;?<2 zv9y@EUb~dM`<_f2uWBl~shf!LIhv6fiB9^c2iXBR>bhilwe5)hwg!x|2wa4|ySqu* zy9oQcJgbus9J_3LxyNgWrTVcYpa1~?05hNj3^2Xdi@iUjy`-1227r79V3&!zcP>gn zc}Smz8LKN4#2k`BtRWg4UQiMtMnh#hdmh}gQX`a*R}8xK>q5tCxuv>(o;d^Nmjpdb!aQWcr01OATYM2vsM0xq;)`AR2cwq= zp6Sb_GvvkZYmL0B!}J@&J7|FOD6VEJ#a-I3i2R7Ldrvi(zz5vOT}!zMyRQx`rnvf_ z)<}SrJh3|1rWlO7R8YodtV3uldMR7DrMJQj(84m*f-wF}$8{{2(I`VVOu1U?glD_6 z`O3*Il#>H^n%rr}IBc(poX7+WecqUgU^}n@yT_|}kIzh+n=E}<{F1m#!J$i-y7|eV zJO!dW$~aWYqF1PETzqQG$}vQ<4v~kKD9h?Af$v<9nkayh`^T_cx|3VFSZT<&Jjv<^ zwN2R1+8NM$?9ULp$o#p5>nP7!%+4z$p0%8*p}el(JVfFgdMo_Kr0Z zv@GQ#IMESW(cvtI^LMz$ zH@Gl>%EcGQKvuIWZG9x|&Unm+0ttifEY(#Ve*R1N(l`CSdN|cxy?Z`wn?RjI7Y%w5 zz`ZDYt=X!$epvwyjn!9O(z7hryxf0L4cB)~*Le-q7Z|2>P1Sp?gkvp4Wes{9eR_V1 z)Jd(l)ydSw8`CWP)PilKP7T?W9ofN`&6oXugY83wJ*b1a!be?tr>xk>_|d}Fe6JXB zP{-O*=h{>U+wLRV`37;VZQHMn+p(?Nv#r~m?b$*dtw$XJFFV?zC)yf0s2Y8IO6_uA zCvivz-AX6jOh?_d&D++U-LP$W+U?uFea69Ee9}6t9*Nd1d#!qzvc}EaZ2iK0_ucSq zkr$n^ehRZN8+t~a(RkUt?9FwJz0UC+{^0L-(boE>*Gk`pt;TgZt%hpasMp>g{oVpT z;XfzND4N&?fURzfq5@#lLht||U;r_YmnrPgtxS@0OyMeybEQnq45v|G#z)+4KIBRMr{mp` z8J^+v4FJSlaPCkupaBOKI^pJ>MmgEmtNeShvOOk0rfrP z(&~9I?%rp5KJC5GLk;lTzP-;G;{srpFnz9YBvQ#bvrH z*vBtXMYR0N-v0c~j{ZP^5(*c?VbPdWE>TG46B?B+om1=anyqHB+-;Lf3@5*1bGUp~ zYu8Gbixij7=c|iZyCl z>=+E1shZfiOZ(bsOB}pPR*NBr|ej&WWbQ22N4Kmq+o!;B104g70L+107r{?FiniZNra~gB1CzT zDZ-RX{#USe<+9c4C#;~lfEMjZr`Ioo*}M_Urm!GCcGm3K!xrud)^$tuDGS&|YqGCQ z#ZB#+2HDwVT)Q@H8&#^lcirSZjoXy&TP(r&;$0dRY+$qQ+D+4XSg_ePLL};xQ*ou9 zJ|rg%iU6R&$&8NhjI11)WhR%SKH;oM3TIBowt52M3~t+@>QDlBHGVCcK7iZQRZ6TQ=oIPq><5xU^Yl2M))QM@ZU?6@m2ybxd9r@7}| z>5Io9|6y^B^&E3gK$AY0gd~+jfsZ2q3}6JKKoAj7fR;wl)?4hETg50H}tnNkl?@cSb_Lb&v@K${dq@FvxCGLynxU@HpE*c{}=mmjJ7 zGoN3l!s^b%29|reFpwqsDMR| zTxeU=b}=P&`V=&i0=W_fN#>oek0<5JXiEWEJ!MSO0z-<)rX?pS<}2ePEEb*r;%fIjH;_!oCDL3x}^ z;KdhT_~p$%AN};zU!Q%{!Ct*dE8{byq$suDgZoXkrfK&D$N!&l@ zOWl&5cRxK`O%eOSgOnT?n#OrgU>GDA0691|0VWWHAr#>VNyxkfzN>*1v_$PxXu&Tf zh->}pT?c81l(Ll&hdI>Y4tcnQ=4k?cEfgaDZl^!gh)IJptl<)S@dhV85sFci;uNV^ zMJrwri&@m-7P;6(FMbh>VHD#S$yi1+o)L{?d|wKO*hWj_{%;Qb>l*KtSVvx@5s!J) z;~x3gM?d}%kbxBB9@pqbL%y+yanvCAQe#I)J`$3Vl;k8SSxHM?5|fz(pdB#LNl$(f zl%W*mC`l>G3&N0p`%|JOS=mZgz7m$Pl;tdG`MVXA5|_EuWiBsxL`H6~mcbO}Fo{`A zV;&Qk$ce^oZ%GbILTQ~bDk5O=~U-B z+1XBaz7w9}l%ot2X-#|H6QB9i=RT9U0&FI+p8OQ(KnYq3J`|!6 zmFPq%T2YH$6r&l{=teo(QICEUq#+gQNJ&~!lb#g*r72bEN?F>{lK%6Et3>EbXsZNJR-K89c8a@)_6|hsS z>tG36Si>F`v58geVj0_5#}3x100``4pQ_6h@O7awlmlfcTh+&Y7PO%i?Py6`TGO7E zu$<*ACP2{I)~>*{uf6O`7Mab>sur-Q)$MM1+gsoM7P!GpL1b|YSk}6hld-h}W|^tk zI21Rpo)zwNsasv^UKhK-g|2Zepxj$}7qkApwC!`ZE7{ujUj7Vv;W%ipQicex0jEeZPC$o(341_YMygehEM3zPM| z5T3zt?@M3#c6h0=x~+!&dtnow7{w{hu7;t?;RU-mykYufQ(3HH8{ZhmIUa3>AvdS#~!w?kZYU7A{&^=S=REFxjft%NS4Kz;G`%) zoLT+;mBmNy@|xM)W&%6esbVH&nZ;}62V>dIdDiou(aU24*EhD{#qWWfi)IpMHNuG= z?xGdlXhuKU(UFGqq$OQxN?+R2nf}J~rZwGZPJi0dp$7G+MO|uApW4)^M)j&y-D+09 z+SRd!^`o&0=MBp@(1K=gm1BBk{vw*s!4~$gOY3L;0y@`IW-g)6>|`|)8`{y9wp>eW zYh>q|&N3dap&<lN&2D$M8{Y4hcf9F6Z+q7p-}lyc zzWKdxfA^c*>IV3~*)4E_4;$<_f{`%CZUUjQeJ?dBgc-FPvb+3ON>?n77(ZQ_Yqa&Bf7#H!K z`O9&j?>y{rm;2o5esZ{L{qA+w``-DEa-!GT=(tX{vT0lAUb7v(-bT3$7%u~mH(u=O z?)%jn?|8>g9`i!yI^;jj`JQt<^E0pf<2}#w%8x$uP?z|ZoqYEB4qA83PV-hxE^@}( z{_=KDLG4rT^V@s;_q`YX(0AYY;3pvWBTv4|^FDl*m%j9-xBT>-&-1@GJ@A7^dyK!g zZ6_;!@ykcP__r?k>P!Fe=U4yAK@a`##~k$QPdW6DZ+hTgp8WD>|LV)$W5Fl;;+QSt z5U;%4?&N~+^ir<=`Sj1_=x_QSaQyD?{-`ekClLQ05b~mr0hzD(fUg3P&jLem0*$Z! z7H|VS@b@Ti{8BIjSup=3ko4;B1VirntjgN{58J5B@Q8{4w+s9Z@B(3QlD`S1$s&ky@B4_glIF3|G+5Db}625+td z2a);`5fVGk4$08?%rFmY(92q{4Uvx5cu)=#uhyuL5(81>xNs2XPZ9et5)sh?!SD%B zasQr93|Ic}3sn*IqR$j(&=6Ho2$`@IU-0-y@eI=t`_}N-HgWr4FNS3A(6kB=VoD2R}~~2{QF$k{TOQ^PUnauTtwU(#wpI z;{G_2@ODk@hzul)OC)yeQ>e9>xa4EN|EUm8*2~#rl&MnO{GA9!=XHG6Rk}i=lgAT7T zp-b^*AOT3zG)ogTPg6BhGd0z1HD8l8VN*6^lQw75Hfs|%Z&NpOlQ(zMH+vH}e^WSv zvou|kIEV8!jT1SKlR1~uIhzwYpHn)cGdTHgE|2mJV~;VNZQ8oiJHIons?8|1&ohw- zH0!bHz*9ZflRe4qI>|FTmvK91&lz{mKC22p?^8eXlRvMjKmT(-0~A09R6q-q{y-1Z zKob-}7gRwTltCZVK_e7G36$t2R6+x^LNC-pH&jDAltVw%Lqilq8FVwv&MV7v#x#y8 z?J=&jvOQDGMN{iV*UK<9(nLEmK2vEvn=z}NZLNHCMlTFV>uN}YG`Pg`JqHg(y|2bt z6s}^_NGl9V>uO4)^tWo1D-rWVbCjV})G=w#ss=zz2OvzxR7|t#OuGs{{{yT3V@TPQ z_C&!-cdJO}s!r#WPKz!{0Z<3EO)1gS2C*tl&y-BBs!+?6tB4U!OHNL~s!`(Q!5Hw2+iD zv6K5g(-Q%8(Y7j7MKw&nN>NX>LZ!=1{nJg^6i!jqRE@P!s46o^vm(IHf^bPYWr4XUsWqlmdP{# zY+=+oy;VuMw9q=0TnDvKL)CFpwQ7;}Xy=x4;T98_7FwG%Z}paML$+Ec7h10ts|0t+ z2sdo?6mj{qY*TbBam(AvHBEh0P{%Y;=~Zf-c2SXaO?&rQRkdm1c6WytUiFq*t2JqZ z_jijla7SQp3m3(1c5Dq6Ea6ZrLz67Ql-fKuzyh|du-17`7kX7pY}t@(4>l3{h)fGe22HaI*FSc3;kg}o|f zxypl6jDfq-f$h>uMU#Eq%0+?KPG5LcmsNNp^@7_sg9!{~#}}(+_`*QAfkk*RdDh6Z z_k=&Tuz(nEM>juP6^mQ=s!aE4*;QGI_h_#*beHz5z&NXz*s9pr#A;YeZ@3fb5p8#s zf~lCWu-Jz~R%GY2hZvD z(KvXswUDXycRkr!H&<@^SYq!JSv3}O?N*e_{&8pb#XRvTbD^CcyBS7WB>MZbGLZiwUE!4nJ>1KmD!dLS!#`SWTp9xv6-6t z_{}CYkVzMpy;*ckICq!XYQt)meOZQo8IliIm|0h6yYzKc3zN5ZoS!zC`M3se`ERZD zb3HkiubH1wnVj?4oTHYYg*28~n5-81p#Axl`B;d>>SPHQqci%KAKAj-c)JpFN&mEt z|5#fA_?kHuqD>f~|COSvHl<%0n@jA-BwD4Nd7LGTq}i%@XBnM`bzKv>n+sZ(HJYf~ z*=FHce}{RV7k69%7*@;Kic`9u1G=C7AzEIe`KD>wsiFF&x%!oX>#N1ts@7RepLTgU znRk8Htl!m#>58K(%%hgkxUCe`nnBr?{q~tBHk%3Al=&5)v-zk0nXd(V zqNBO3|0}20YNrW!tLy5mzZrkC^rN>FTzA%go4TgmidajTWYfBLO*xc9dzH}|c@H{> zeHVB2vuROVc~@JuM|r}+nuEU>f$7v@3#+nkJD8JNo*%fb>DZX<7@5&)jG^|i)he-#Q_#~O1B2RfIXdc{ZApsn_vJ)P1! z*Ud$J&q;u#n}5D?b^c?w9IJ1Ak8$0~nO4S= zo#mI_yjM3<{-51!kDTco9grox*FX7`Up#s3_R80K;IW+JRNQGhyxVhKcQKvoV_U?( z+pt#Ny_#O#i!sd=Q@`Wgz{35h_g?N@nCbieu$cYj-+hjweWd3K?)@C_oqO&Vztqtj z>d{-ncU0a_euW)hvYj6D^SI%k_~8p*>7*U;H@~+Mzobb&-621oqdw;8dBHgglVwfO zh)(urt@dx<_H!TicVG9ZmiH}<_Iv;Lg`fC`-}s5YM1`C6A^!C#YvNHK`sMyG@%y^_ zcjntX`m=xC1%I^&Kfy!)@H2Eoae4g9UqsK}{L>%(*I)f9l>IMM{NKO*<)8lN-~Q{L zwWlBc!}A-v_Z$0b9tcvxA+cx_0*=Zhv*~<7qtYq0YQ18M$!vAY{er{dF&XO>&eG~N zyX{U}ETB2P4qB~9dVoqL`d0w(`2kkwk-Q};&J;0{IhI9APEuA*LRt=CW^#6VelBgI z%>XQ#vc=h{;vMpd_*IAq`oW4A>Ye729-W2tf&vE%5A%Zl5+f%oFZJr`rmEJl?)ClI z&Jx<*B04WN77c_C5Q!U&A8iV%t8=oa2rkFVSBYBI&*SH3)~A(rD?*DlXBr7twPwAt zW$VyCMaPna6B02+#EBBmF&hF8$uUVAH|h&15{a>qCQtfm)DWN?fdlhU%NA&mwF>^* zR=)W*1S3U>JIV1RA`0ZYPDD{6MRt$U(xgtGYC=Z}r<;HR2^v(0u+~kgY#xH!c@E>a zphmoWB(jd*j$vV1l?`o_IbuSpZa`SG%3s_1=zJ^UU^V-I0G_2JCVXN6y zaT=XK!C9=RWN6&KAMK_s`k8Iq(R1aRKCBu_I=`p`yGHAz>FV0c_)Vn@r=?5B31e+l zIGHk7az81K^~nTn;Jj@Ao`$OhwsX(aUq834J!4Ul-Mh=4dvrOG5$4aMPp^JG`}XeN z!;ddN{dOyfb? z*((&P3Y$WT_{}gV9ljleXn?xeCJcf z(kaLVf3mHfP`<}<5fBS2u~!tw%%8cm3hWifT!_5$beZV$bXbTAZVZJ*Yb^v#9PQ&6{{*=E;?9cosn-8S1p zxV@^+8mw_(Ihf?q&wO#j}?2-%$&79 zsl1iKWM<-wOv?=;=C8G@4)p~RVUV098SQC;o zjg?Cyz^`7}tPn7tD9ol&qnOJJXG4<7Oj`D3j!3y?J0S_UYW{4VN7`mLx`{cAW$u_b z8K)J{SkRwYl$`La?B~-Tt@%EkHi+qAJasCkFR7k5-7G&JgK0CBsiq z_D>A0VI%BZ`4EA!ii-}qp@P~dDWet!Hat6@P)~`rU}UtSUQ;4ft7_G&Vl}H;-6~f* z7(0;aOKy7vjxkMoGnNLDkqE4k*vy$ewlZgXh*ab(%V;`-K60(jjO+JeqfQqBQDI#j zEMW_4*upkZB_X}1sHg&^{sC$ZgTNzkJCCAUtoQi zbYDx-P<8{eW|-y}xw}QaH8O_}>_`@*GAE? z;FN6@b2>7V_II@FYw#kIsm0g3SkR&j4K?wYkYWVDJ=ynTf#e5p*l`NpljDC8qoZkk`(DwB(=oU2bsSJbQVl&EA* zGeDin=BGZI#0-`tqzO#^(B@Lp&h&$Bj$xHyE!&jCIQ6psQmScs*7?-G#Iy0lx@WTP zQ`CQkb8UaDYHecr)-mODo^|}`S#8<69%h%WBRS(K9J|>0U@bSXOw1JaS=P?*vEP&} zzQ0!6+V!z=E@&#nP;+^6q-F%U-C6E)n>*d*MuWQBjqZ25JKpe~x4i33?|a)j-}v6Q zzWdGZfBQS$>;^c&+dc4r7d+tzU%0{>&hUpjoZmMNRIBxzPiPCr&(qd6$2;zE1X}pQ zuFf*B!7Xf3e>~+XuW>&XJMw4qIpfmS1z4(QbJ5`Z=B(6t&U?=DpZh%MKp(o$i%#^T z8$IbrU%Jwp&UF5!pU&x0zj@T3KJ}|xJ?mKCy4JhS^`v_*$-jj153l^IpGbDv z={#|lTO8)Fj%~RANb5ki{aV;YS>B<-?Nf{$)Lp8(IEUS}z6*=(tU)|fnB7ok8|uCq zr#VV_!l;W_gkVcOA5f*$d1ZdSl}F84=zErH#v_K;756pCA&OsTa4hpX!aRb?*~;p) zgO%$fJ(@%;`X;YE)u{Ist4sLu$nzLK(aH>gz=r$f@HO|w*gKlpN*L794E*FOmuxJ-i zvETdE-v0KTgyYQ=21h7I(?ngiH@Q zZ3+iw;OekR3bJ4sjNol;7X=~UN&KBD1YXGv-pR4sjW|kBP@p@N)1^VjT%jO3J>Pga zQ=8Ert8AeA4T%Y^pquo_=n-M*&4vsaQ2Pj>;gLuedf^w2h}x+H#d#m=$sKG(8{zd+ zF&s$ql?l!mS`xmAri|C-F&XZKjuc*s07c>ak;;S|8VB;Bfelq}(P1QHVUR(Xh=E}v zI^rXqhX|oc4KBhBx}Nx*!hq-q1v*Lu*`5J{PXQt!6EYg<_(&gummC7(pao$dx(PwG z{?!w@(j{Oa1|3j`=u$#SVw@=8l^tIL#+n-bgY&duF*4N*9Tl5ANFCbMc}1Td@)iTN z;u9i{>y%<2ni4y`Vp=RCB34il2}!oNl-9u1wsjvK{bEh!pxN!98_phbJW4yF&E{1j z94XaM?bQ@!iW|}4sL4WVe{4YG5SbX(Yzg zj4;mHG}RhR?wUxZz)W6CP1Xh_vV=;K9ZRZUff+dFE%#EK@k`gJx;mO=#SW1H8;o?+MNzpLT zwPa-_Zspvip;wkASgM!kSYP$c1NQxmW6I!2UZ0u`Bi>^UYZb`d(zFl;gA@T*IVMf`0^`BoP znm-nh?ZjdHMb8OhM=C|60ahlVF{Ev*CTvQk5RFlQX{Qk_;u72@2&v^^d}dWJpgLv@ zPr{yDYLxY;Rb1^HceZDk9Z=zX7Y34Gl7&WXF5273SBAR8FLSDwup)V+;aN7aPNbMi!=neq|OES$^79dooaPrB8PLXo)46kSr9wl9$Tf9#F`Qxr+;}()Z zcpAodE=GB-B#e%xUbY5pjwu#KqlgY+px$SVD(RpWlAwYknbt>Z;z=%AQgG5yZbHeE zw&h@=q0FHti{fCeHs!7!o-eQ}wW3IWUaO==S#I4Q0fJbkJZ$UaUuF#_J`%&Y zN)iVhR>+F%$PQLwRoJ?ETI;=Krp6_>zGU_N>Y(bCkmX+$%2~$lrv{bRoB`F?$kh@G zD<^me$r5eR8m(6WW`d?3DiaJY z*|zO&b{e_7+NE|SmBK5h66emrpa{Ziq1NTkW~^tij+i#%5uTZ5eXYk@=ad=l-k9y< zq3z1XsGjBx4v{F$x|ii1*~A*DA#ETe!LE8UH0~_`Z9&^d2c5qD|!Cn!8Y#xyCyFcC~0^-(f|Rd-OB8M&Efz`Y+jky z-BQoz`YGndD(N0n{+jN|@@C3<)15{X%Vwf_N)_BbWc!t>P;n{Da*CoE;`OGJ8zE;m z{#S7V7z%GJ`~~ekV6fY%>jo?C#ToDGY3k$JnyKw@!)V_TQv&#^f%r0IWQp)(^{Nto z8SqlE{toZ97B68UEb@kJWL~i~C2<%}vDn?}i+=Fx{w^7ZMByGF8`C1<_8JHKW`hDS zhD2PtkwhNzF~s?C9|Q6q3vwXS+a3>cz8NwhAF?7d@*+EOBSQic=f{GYXBzV>9Ak1O zx11023lMYh|DIJQi*guCvdB@g2Mhjj%eJG}@m$q?9V@?bEW`3F%W^H#ax2?%)4B33 z=Q1z*axVk(FCW7uCvGR7A+v(8DLktHkFvXraWfb3D4^^QcQCG6GWp7=`9gCtxUna0 zvo?w`w~H<#_$sxzlbGbba@ucd7=dxJ}!-$Yy{ndqe1Hq`}3v>G#DF8zMgTnUh}t>@0b)wNIyzF z@J;lA4Yn2Q@BuX2Ui6>H@#@iWyLRy%XGr396~8g5awDVP;0>PFM6rMJ@@e zPQwy$OP?ve7IZwTtY~8MCjLaAfiyHobBrktVT6Xw3!>mDQm{1k-JaTP0lTJB(^wA| zvr`|l119u_BnM_-oetc3_8Ly_B*Odn**9TpNbP z8yX%~JNExQ6VKkR`q3X!tK6LQ^#K#E*9dlJdp3L6E2_P88OF5#9xqK7#U^&*apW{# zg(56Q_9_nK00v0_f+Sz_wGdq=IfnK^o$dmrE>wGTHna9ylgS&C8FQK{A!4rj+UJ%^ zblze12-YsIOpq=LEWU~}@se{8W1=!wp81Kz_yA&RtZ8NH>{efzPOtE6BVbRP@SAqt zIAS+p|F$olvNfCY{@Or)i=M$fYvSFth-xWlHjwG}wHX85XXI7;kqo%XMTt1X11bGDf^J74f_ zYizYH!-^+GhX?n*M)exkI2PydP#$Jr4jJBNwm1FzPNYCxI@f1%0RZ;vhW=7 zvl&Hb zO1Maz_(vQ0WG>o5svu@I)dp=QZf18lH#M8D^>2Eyo@=aT&-o%!uUWQkgfF$7r{0(^ zY-N9S;?ySN96ETS{<&DHd0I0%_z5>+`}sg)kOgY4EFPj|`pi~4n1mpwh6Fl$FC$Nz z)2`oRiN~=O59z{=sD@rp*G_?fo_V5Y^mc1;cYpF}w>6|&r!rO+oZ)tW^%iqiq4s8> zr9CUwPrS{@Ra&?_;`M!@qX8{%RXhHk9(}QdqLvokGgwb z6MPS4duC@Toyf4~3U868IKtDY>@E;Pf^1dAJAW?tI5)VI(=(M@bhZinr1$9nUoCRk zqU$32UG?t4D|>)C*@f?Urr|hjMrZ^h>5W!86rgB|HoJXmFskd3Jge>{mnQBe`;npV zq~m$gD<%v6GVj|aY08r*?!tVq68o^)pQ+v-MDF2ELmD>C`)WLS_%173;|-ECv(n#U zuA4gngS#BIeYWd$b01ieCTeCwJ)Mg(9?IHLJRtvpR8yYoqNWlf@Bj zH@?>kAvZpxo9bRr1>nR#KCe@cd~@uw0qic_ZX`50@nt-BZ~V05yT_w_%+soUM7Fj2 zP}OtD!+$TjKf&m?s^G&k;mgX06a9>yNYqOo{95}8P2GpTekr>SQZn#@L}SFUxr6l2R^ zbXvVG&e(5w$~_&8GEUK+TkJL6Y_=^sLhx|$aq>d$bM(YoS@ufIPWVsPQBo1s)Oyy|(Dr`Dp?~NC?mCof z447?BXem@^kl@3E5QUAwb&Fy|G!Cgq+9KlAzz(cY%Ax%W5FV4-rV`t)}hsoZYwvgihOigN1ucjq+Z;@ABzusdwlTnwbQFd zOna)9ELe+od=8K@=KA^dmsRmRdR!a1e6t`@YK$}pF^gl7r8I-+GW6ku{F=e&&QWHmAw37j| zgK@4^xtp}JTZ=U|)ccNAcE2liEtS!EQ1vn=FcWN*8(Npumc(rSvEBAtrJ_+pC%_6*Ae$z|)*E)ArXpG3O__hgh)RvBe+vwW6Ub6xyZpLB(7V`ZFk z)_Lb;MIHC$a-$7d)taN*aTnu~MtW(bwNm>YN@NH`f97Q#(Hb5yXN|9ufqnr zX|c;varCDN2o|ySwG$R*AaKwbJ}Zid^PM@O^*8^!2iAbLtT}V{fwaRR?Slf096OQ z|J?0!GYMUGAXhr=5n*@W)8F>M@DD5KNP~4^hMBAZq&YRIO@`@{0CTe^FGS-_D?A|z z$45ZtU{HX4N=gb-V!+h7FM9A}ocwG@znz5XDZ!&4@VZyQr({qzPI1PPph1`qDu#(7 zbm5zzn8Fv{MubyD5}9iF#Q~~Nj7?+`9AJn;WBwtKI||I(TxO=7`q_*K0r6cO?Px({ zNwJGpbkdRhc#9}r@riw;#{YyuBrW)*kZUp@rUDWaNK!>j7ra6pEO|*xW>S-z!XmO03MJSj*{^8LqTU26vocPB+`f)E#T;!g5xfnY+sTzVL z;j(aa%rcUve?t&uGoATNXh!pr8lapSqr=9Sxp8kn%-$T22)qf#Qk)UwBb@XINL(f) zgyNya1b_riL)JK+y zuvJ8V^=l=ys#31<%&XS~Yy1pK*1e+TTH+H?n*=*0x4yv}hm~t$%g4FI5frA^(JLz< z=*_=fR<+~|OI8h$SqN=rt~*<-OB-9zR6*9XW>qL!SNmIKmSnT9{Yptb35MAMuC8{u zD~lQ!qsa24uh`HF0Xx`8Jpl#&MA+>LYz;+N>KYbhp7d-HlAE*I+V!@n^x;8AHCfCp zExusnZfq41DDQd~Q~Et=T)PpZ4eCaWG$g4|G}4KEd_H34XrxIiF<%NS=k=iM!-{Zil=V5~^(;}6S4KmYxxD2r zrwqmqma$lA{H5L6CBy#rrLr&8EKw@wlg*Y=ijRXioHkcELJ_j8@tzD<&T7`mwh45o z1&oL~`~kUJ_A+P(N}X(y7P^r}i<$Y1PY4NGE3N)>o7I}>Gi};IqGooUi;do7(IM5{ zm~%srMCwf2;v0ULH9%t*T3oaDv5>ZLYbIU5Jo|)&!yXd0Lk$>Bn`hba9`&l7Tq0D9 zSjTqaDGSxQ?n#;?(JT9MOTzrz(eYZk6)r5RJzD8HW7N}xCMg#MDc=**vqDkXBcYA8 z=fi~283f#Dlcmp8DqcyH{w|-VOdtXl3 zzzg>6;fZ_T4*xBt_rvLVhx(|dPWZ?RcJPNNyyh;iti)@6@sA$a-d)~XZ{6I4ugy^G zg{r2*(5aC?RVVCEs{5WhXY%8TbvcZGeB_6tnsqlN4@dhbnVP-K3=c1c-c9?Hc9%yQ z59CLax4}4}$&6_lW5tKRQ>|Ar`RiwY`^}-)fO4$)cXxDqYwUR6$5+@U1IwA1H=o1+ zwP7QV{@vId91|XGYlqF#wS;rMh3h*?(UXp=sLipu-~+S)YY_j#xZt{stb4$di$B>3w;8j)#w(e}o39hRHueZOh#R!t`=}cF1+0h- z|3ja^vabb^3AIb&IEZ+q4bw6G-Ba9;^)x zJV5nO!31ES_u4q6=X$yd^gQZ2GldevKRk~@w4vTYK}M9fp&Fk=4xv%#Ba$#HR8oaMTPq z)D&slmeiBL)w4ld#KAqJG{_4PH>^j11T29xCTdhKYZNnVOq5rQL*L>sq$|h_^r%s8nn4fy^I^a z+)KagOThd~sL9K~j2gle%)&%W#Y{}bT+DAPOK7o0JlsfY$w7~F%b|lp%q)}$#7O$P z#^_7SerQN~+)S03Nj5-D(~J_EoIjjgxv~?@c0fC}TTLk(N!uJbldMCtv_k09JFkQt z-r*gbLL%WDBdFrK*;_mDVNOMR!Q33I)}+GEBs=%w$ML|Q{LvpHdZ;?9l5&hH;aW?s z)6D3sEVyJexl~EI>>F)lsBu~-GWBWjW>$&`V%RBSNa8xz^M96?pq9v%ee4Fr$PcSMAA9)%b{ZAz8>*7)%;Kkn@+|m(Gs-) z$C^w5&BcSLqwSp1Bg#G-EvM}hCLMFob^^m-*uZ8S!Z1CcRns&dEIMgQQ#D;vXj;Ay zjh?n}1ror7HoC%@3eJCcCHdUb1N}VmgQ8%H$S#GdUGmZZs;BZ>l0wa;!nrU%e74jy zEH<4~O085o@HRw|zpsi@SD;heLdz8Ght~in7L}mkT*fbD{-p2>upj*?cB;7u4bwjz zR5E=wdLu3(s64x+uf!vVS}5Z@&O_BDE)~I4{jnw@vGGGg zS$(yR%N$1)!HF9}tP(lHqqXOJOgIhJP6gJpjLlG;P01Q;|(cJC!~aomkLourrNC zjGa%7Jy?#7L66;3kfqrsC0Qs9NPjfaV`15X#Z?aes}F=#7GI48nHAQW1x?_r%VXt2 zr?r)zMZcCM*r_Fn(a9y0vCX3-&{d;QwldWsFYH{lYsO=22q2`l{j*W}#oPYZ>06ZYTubp@TLoVn6<@VQw4q%(!WFyp z-CBhV&2?o5(v-=+@WhKs$6LKLDUu`_5=0!c;1;Bu>;)BR!&LzW;R$`ULnyvJ7+;-f zTj^-vxINv{Z0bxvC--&lcROUT-D zoniJxU8Y4@cOtclpjJGBbAH%kRu`Qmy;J00ShY;EjaBd)Dl`VfE0sBmHNeb;$C}*F?cFx_`)H6R z1WY{(O&#dpRo?&wB3cgN+RR^dz&Y*8QZW6ZCJDC4HOAB(CLv{1^Ryhe3TdDYYFP_t zn01zGHfVIVWLVT;mhQ)I{=DHP++ssqz{#47S7AdY%;S?N|(^MuI1vwO|NFa1y;PHwprnAPh>9MhI7Xx z{^B&G555o*+MQndU~DlJMlY>B5M;&3Mr9Z5>y6G-qn2Vj&O?26-(BWKsb;6v6~JUH zj(a`g$nL*v?L<_?>!`k7|K)7hE$W{MY_3&Y;=N)G+~FGmL@)M5ss=$b+^)<9HYUTp z60~2mW=)R9?er5}^aX8M&SvhYTU%D^M;&fZoVmrOkX78c2VrDqJ3zRGZoL++o~G_6 z6zJ zUSHAHX439%f8AV(P6iVk$Llg7;&~y;W=7s4ag%b#fz4>)d+!HttG`yg3Abk-KK?&Rd(jv?(x0WZ4nJ}r0&|^_Hkc^?;THO zCKtR2XS4}V>H9X>eKzte2hrRfbN7~SAgAvsp35qp@`oA9H?K-Lx5_!Mb2`6s;l%T+ zv~xb!^FIG`I{$GAhjOx3+OsxuL~n6nuIF;DZ#MsO8t3supY(Pn%W_ro(56fax8J`! z%*Oom#SH#+P#<+s_w-UHbyOF1RZn$P$4YXJ@kgI=b*^y=ru6){a>KTDP9*8i#`NsY z=S^>KYSZ-(VR2$VayfW)LhtS2Eo|UE_U6EKT&HfZMv*ROy(c|%rLZHNGSvi+kE`NW z<^iFYPR=L0-sV_xXy@mw6l+Ik&o+1Vo03v*cTo~nj9=V7?RwSwO7ekpW7N~^b$3Y5 z-tA?la7`!j@PN?@f>#fAZG9hiet&60{R(sk6k{Lw?oRezKj}4xcSxUgZ8XsMgjf3P z-pF`RFTzkA^{FMZIhqb}n^WUW4p@QJ=r}&!aNJPtns(f-c13A)2ljGVj|Jc;Rd0{a zB>wth1=rt|k8M}oQ9(XNI9W1_v$)4Lu{SHpAEl!7o^6fa_;wfi;H_jUMpju$`g>Q^ z4Ha;wf9!LL`&NCY8Qp0OVv_@h&|=wE9ESOfl{QNae8GRFk%rllo^OxO^lZmtCD7A8 zRr(6{z?3I$Aza4zjKmAQ=Wx7N2LHG4@mU4N2 zR~I!-ldouDa{J78#?9~1yl>X7f6&{Vd$+#$!~R}Ky`d5Y=+G_rCwKjkon>vW1;}$>Xs(O2fTIQ;nY3C(=-zvkz{^10NXPl8|Pg(S^CVOK}>a)Ko{h;0I@hcCR0o%(x^Ntp~$ART8&PN)~@#p4vWX+?##;N zYSYQA`0O2x%JjPZjxTF8`M&>82WK_|Fk^U#n5ejDVX?A85-Ca2_$UdWB9d7lB9yr) zQX#oWT8aqOg$kIu+Uoj>rV2YtTl*zz>!m7}+v{t!_bcowYie9t2{{>=e5sNt66y&Z zDjIo=eP~uIIP5*U^esN#?Oo2qJFearyzcIGo?=*-jorLV>8MPCsTtbY50o_$^|0Y0 zQtRNmg{jmqd`m zt|GLO)FuV^=^tFlhnyyK!m7;Q&}6i(L$$Z>OVhe~v4({er;#Dy+^C^FyG?E>P2AYI z*`;w4;f`Ss;*5wgGmj$IMr-RFy3Z2Tx2CFoeOfy=b%nD!+0B~@dfe;J zr=Q&i_{Fe`i@$ z;eqaHxQ2SV=;dK;AcFS9b`W;xn@;1zhEsM7;)0rsF}~QFjCsg6Tz&J|_n8&cCC405 zLAv#vNzZMDoOSngmsgDm!ssM}FT#f#f*wvuVJv7kIU{Wdb;)IzE?T)^h*xqLqLdA$ zCnkb`43v%=bEI^sV01RW(U}(lG=%9ER~M>X{a!Q7Y3`Xut*1|P=XqzhBIoh=Lmc3%Bzk! z23p{8KN>n@bkLE6Bxg#x;?iieqWUGIlHTg&hM8u$CH}QzdaA9O*Ls_3o2WLqX`SF= zdk37h$k}45F;*$6t+oE4Yp=c12Q0H+05xooX%%}}qDn2wS);~D8!ohW%}Q#UoNCHS zw@upm@Vp2o9O=d6T59g9DvASZX@K1};)Cp!h@z|P_?qulJ`!4}zm*kBl9AF8^y9Lv zG}{oH(0aRFr&dz@?74kO=rf6CBCWK~LBreSyYF)BZjDU8N!}NH!nCn3fVN!6p#6p< zB-#F9c3HBL8T^Wbn5z2ShwL>dBDW{w+OwNwlI-aiw(Vvhr4gn~w}o07&UfG{<0X+5 zTd#KIFJFT_r?C3Tyqwv_+FXI!ap}B@x|DaP{@vB1{~~%zS{vpaceYG^dKh9~PWHc= z2Yj~YX0iQo?0lU&=Uu)Fv$)IXus%E>uqRJ?6EMeI`^=ixOytdkf{r!wtroBSH>uOL zdiTn+EWXbC(!P)F{blxF?gX#h{K4hVe;D`THSsw8Vk|#@S!1U!z4cMgSh`~h_Wtla z{VC8L30zVfkhj1w@K1ZQLk_WShbZ?=XF&05+u%&K3b#GQew_l5+kUs8hUn%yCX7|d zBBZ!)kPr_Ov6l^Rh{GJ}aECnXp$~TzK@>U8!oG1Rkmkz87%SJtNb>Pzgesyl28gWpea?-li`X9N zRz=2b%a2^7RHF{brA3ZPk)Rx9#u#ZdX*mm(jRYS#B#BD|zA--*#2kN|fjjnvLX*22 zZvf_M6Hp$>sJ1``U%TI0!@WjpxP)4>YBzSbfv8-Cuc0#98A8Yol1P? zbv_!eZ{ZYNg`^gD7}iIQ7S44cl_E-mTC|fQ5}w{;sZ-&x&^Y45p=b-x1{r0{5L)a` z?MZ5_yl6;e{;ZmL6DuAwMKq_KX@sSOkT&1rjYqcYsdV)p`s7HnBd#-|99g2ERJhN; z4K58NRnO4`7s?ck3{!HGTWY>4Ldb#@k6A$36bk2)gVNQh6?|z!0hU3C(o~{Z1%zDX z>bIqCRwF81ElcfcP5`3wl6ocJX!~kY2RbUQlXb0T&EZ>?c2+Vl<%ci@Hq5IQthC1C zQ9y$mo)tkip|JJrIsShc)7oZIxsvf~9vV2^&4PDl;T`92<5JwSA(yWO@yr?CE06fX zcfRtiFKFnC-}>fvzxwSjfB);>00Vfy0xmFt4{YEBBY43It`UPD9N+sk7{U~uu!Sp( z;R|ax!vwC=^U}Myz23GU-Yu_*PmJQ2oG-R`#ULF;%iXx3HpMiqv5igZQsRDgdfJ_7 zjLotQDn(1kL>{t{i;UzWD>=zbUb2&$4CNK?P&(zxxlv5zgzS)*6d%>lKdh}~XfOMBW8 z{I#biz2{2jy1Ufwwzrw5Y_ova*#m=ioWG6kbc4;>hUPJ)x4Z34s(aq_9!t2HGVajg znox|cx4-|5Ks?vl-Pwls^#G3Wgfo!PEN=Iw^&M({D}3S<_ldxPo!58!INm_6xW_+! zABK0@;lPCWvpLR`euI4F^k#S2^n9$1ADrbhulX469h7_{I^sW4xy^r$Y?rGK+c6(D z%4^#G1QRHI=}d3B)1MCYs7rn7RIj?#qn`AuYklil2l~o!t`eQ!n&)?90@u%u_Oz?r z>RDgA+q>>{kPAJ4L`Pz)vC##kV_@%m@4Mgs4*0+ee(;1Zyx|Y;cco_?@r-Z0;T0cu zkAs~fVz27SCBFE#Yku>bS2_zIp8~yie)OL=LF7L^_t|Dw<3^vk*-e0f(aV1JS1*0$ zY5#WHpPu5AFG%Ird-r3gLiD&VzVST|dg31+?YiIn#8c1ab=uwBuC{{m6NCNiYk&LP z@4olH-~FXG|N7uBzxll)e$YD~;k~cN@9T*9*T-Jz=dZv0?~i|7rQh`OUwZ!k{}uik zuz&0Kd>40Zt5$j5&K2ypF}4etkIM@L$>X9D@7 zKNn~MZ&~&=+j1XFUrjf+R>kESP*LID!=@4mg;BE?93I*bxKwa65N- zJ;#9aw}ay3gEh#5-_V3W_<{yVatK&-Ge{kIr-Q&jShoNkQBhJvRSQuVdRs^lmW3Cr zq8elegMTdu5u7;*oNu`gBh2Atw)0sxP$|B zR_mNdmxK-oLi6-iY~WRTC`S7PR}$kQ zd}xM#*f7?DC(9Iz64;BLC~~xhaV|D?M_6`cNQ)2@G(}@k%a{}N)J+*l8^cr zbltdYL|Af0SZ@CqZIy^k1PP5iHA^B1SwFJ`()f^D#V|*eG^kLK7I|#^Sa*Epk@cX3 zD+yO!f1o zNOLzPlOdD!iYRhfi9?Tfp^{qpH!!pXbz@kAl>{*fmApoiR_Kqemz64bIxhJIXNi{! z0he(JYf^~}RHS1QjC2$I?qKP@;HqQ@t2TU zYJzzdgn3+sIgUsvNsMWO!tj}(NotZQeKu*As2NGB`Gnrkny!gyqR9xPNp8t?li4tQ zX1GShX`IKIL!4QT$jO}AsGD+0g)di=+BTb8$eh=Soob|<{+FG`>736Qm>4N;zG;=f ziIvK?eCf$~v#6eD*Mi^~o(!dtbSayOc$e*opKHgS`B{7ZoCu$xDW3R7o*ZeOhk2j; ziJ)4yp9wm3@A;nqDxcrjkM)^_Nyq{hilG^*p&QDf9qOSU3Zfw@q9dB24oRXXilQOv zpAWie0h)6I8je?KpbSc*XV-Q$T6HWMpHd~A^hureiK9W9qpv5VQ>UY*#+#D?qn0P5 z<9MV`N>{KMVn14;P->-|<)UG?q`)_f!gr-#x>8a~nZg*H#0aKmic3kF2%#vBqll(& zT5ZuebUtcu_6etVT0UwDB=cF71j=6L23QIqhVCF(j&wi2FaTDNs75 zY?Y}jd1Hr=L_DFyOrkMXm`DqcngWYD0Hdm?UjY89VsNUE+D3YM2yEJV&Gib83aY#61*r-KzN)Hm8leX`nUhMUc1cL*n2T&+B3ZI9FJvjIL^#JdRDfeR zt@JIVN~(;yt)rT#-U_Zvz^kR&1&!*hj{2?V8my7Ts)pdI1?r@^C?*Lht<8uf9%V>} zrH-n!QOdZK(yFbZ%BbQxu%TM8#|punh~W>#9GJDuc&rrx2qmFjTJ?Rfnl0 zJmm6I(z=is6EzDH2IeZR;d-(rtFQ^XvMsx?C(E)ByFl#zE%RiwrKPgIs;dXfv@UC|-~P(2O)IlAE2nfvrwUl5K{YEq+mdLdtcmnb z>KL}}C@!j%w5GbP4Xd_NJFY4VvuiuG3PiK-`lrHasY;2rQ`0kHv`Y7MIE+=V{7R5O zi!lc)swR83E(^DCd$bq4j48SV9)0%Z$DzZ7bj|4YE+P`&QQzM`mW1Gu&wHqwLp;N&_XtT{$p5|)|&^yBQ`@kR^ z!7VJqc(A^Fy1(tKyEClAH`l>2NVyan!aFR)vQxrvc)_ol!9%RX@X*7CSiZq$3`;D< zOpL!7dBS~)vnp%~EIh?B`@&co!(FVzHGIW4tibStt||KtX`2UZEXH2<#fTWhYa70G z+y~){s&5>5WURlX$-nWsv}9n%Z43x_tjE09#K1Vea~#M4Tdt_<#wZKPvx~5hoUVuK zwufwUd|ZWC%%nM+#B?0~wUIo^#9+#0apY|n%U%u{K@evHGRT(Z4@& zwi{grvdhtNY0+9-3MVbX9&NQC{l_`X(*K*%P`nZ&9lP=jyY*aSZd|e?{j0273qYOD z8|~9wFaf=g)D`~Gt@d%$hvCx3YsMH%%u)Ncx~$H2X2?Wss?Y2STrJQ%JqD1w)V5I8 ze*n%8E7W%Y)?HoFEmPB78pY{Mt~%YaZT(bRJqvg(3}DUI?vU0Qjn+d=2Y*c-3q6<( z{hKOH3bJsj#+=oHjLMU(tEddm{Or0W9n_7B*_Yh9pAFic4caLyyeJ#m{XEvHYtRPW z&pQ3Is6EL~&DsZj+LbNaDKG&^o!hv5*15ggOyJwVt=q%B)Vpomy&c>?z0<30+N6ET zwT-Tq{Ljq{uA+_80qxw_9T;(a&T}2JwY=Jr?YON?-m{yu<=x6&ebq4A)ajkg$jsjF zZQiLp-v0G{+w+~?jqBczyUm>K-(#)J+w8Dw?FGd>+`#p0ec-sQ;0EsC01n^z z?a%!kySyym@2suz9ntKq-~YYch&`H$ox(QV6xa;VK7HSgI^nt8;sGArc--Ct4&DQf zx-mZC9sasG{;L7b&%KJ_R-NHI?$+7t+A~hp39jU4t>h72)=$3VO;FrYF5#_f+28Er zIKH@$UC_aM&GPNc>MPAxE5~8%<=`vctgGfPKIB_&2OG}eKfd2U&bHE9<8U74?u^V~ ze#?~&<7+P11?}eQ?c`J*;Z^|Uho0zDzT}Lqa4na9|fsP zw@%%uoZ=r&zE$o<$mA3j^GJ?+`?|?_TJ>rj<^C|$^cK#10V2| z9_ZT+;`S!uz1itm{OOBu5Y4^Jnmy81ZsoK++Uwlv*=_NuE#04O($1W^o&DNk4f1L{ z^1*x1*4^=!?b-ot$r-=T)s69{eY#=b+rgdOIWOf4&fvwK^FI&t;@$D1zN;(#Z}dlQ z)iE#R^quiHFY{C}?esg-QqkMVW7u%L@Jib7pUl`0U-gdR^Su4$qul(UBjUvTV8H&f=L5 z;}xFks=t1o500QO*IO*+6o| z0}t*d&-}kUtexEY)NK5uZQIoS&z4;BDWCn$hx3;!LL|MS1~YYGIG)rwR!k}N`E5ug$|D_x}Ogz6J@sl7^0q4wp!poJ6dqR35FciV88m0yjB3JwHK1 zMMp_XO*gdwGFP`26N_A#oS>wrXe~)tS;J0yeSd+2g@=iYIdyeo6O|nyBby;BaFH{O zt*^1OwYRyuQ&Oohm5-Qbt!mA$vcd^@z2D*E<>%?S*~OJ!k@96JDm+Rjk=#jtP@_p5iI#3%yLZ3MP?eM`Pg-Bk$;~(xZ(+lSL#ox%w`n7k(crSg zh!b&T%a;#o9m$x{#3+C-=1NK!b7|A3g(=R-)@0+ADj!Q0O&N7<+qXw)&dAw_XP;mv zizPE<~F=Kgow%2d15Qckgy|JACfgtMBOpg<|KVejEGm z@8QpJ&U&Zo*sueJom<9z3gYhmD=t7@juRt5{sc_${*3>|U=YCp{ll)n2ovltz6&ul zBfNpe^9?jB^cxJp>I@7cIRzs$u*4Ku%&tTe(<2Z@6~+H9 z)EiL77-1|ly8?kNcG!(xjn!GhE)6Hszsv*vl$|=!5LVb=wtd#yEN6YC)~AXLZofG^ z9gbW6zHK+dXsMZ&qH4_*kq%!S{Y6f9`Gqgsh=wHhR%^rQ*WiP@ffpHhKcjax;Si2k zVq*T?v$sCWefZpoIqsMgg_EI=DLys*iC}85^;qSV@u;{pK5fmf-XmGA*=9XJW`$ue zLsKi|n}H7cN5#C1IjWP95nAb`)yR33oj=4ioS&Jl+GCgNgIQpiHO|QDua|Z@6Q~{b z8SJxx#(Lz7jgAXxUC@r3WwG%I^5u(52Ci#|sFvIBSk)dkx`AgN=ctH(jkb@iaUJU$ zvB@c&Wc@xRt|9zy#Ahz#*1aV3l?AFC#g}xjBP{<6T2Wr5Ft<(eRJa-6H_`T zuC0jpSsoYh7|5f*Q7JnlSrk7vMeGTZkwifw#!?5!W6|hd`wD~|vxUhN3;+%T;N%`W z8A?x{;ge$+r5i?h%1TzpSaLvBi##C#SniDGuS{2KpIkzZXg8iBtu2jfYOwDQx7WLgiHTG$hClgrZu%G z2$EU7M9z*~Qo`4usM(}*Ix1PpGL*7*1*hx{i&YMds3{rx&QL~ls+&CJRIysmcUrZo zT*YNq!75QvMaobEttP6-TF_Q8%TwKprmEc2(H4AEq;qXSNl(g6y`~bZxU}jT7z$Of zdNrI^&1*LcD^uF(|Rwb$Sq>X*-WuF>ZzdCle-^^@a|C(Fi@>ZXkkH z)T!d6+T*VN)(mpBYe?ye*V+zttA*t*8?b6y#E!SPR94VSgKX+Ej+Q= zUHgi+m*-s&f+6hO(mFG!2Bs#V6im?RR(A#<4FO$A>SCc#w!7uUY#KJ~VI5D{!x`o< zeRC{f3Y!`BnMf@ zK*q6C;cH_hZx*$#wQ_o>T;gV)_*c?>)Pm0-*AR>}yLa8lg||!CBYQQyX*Tbej|^x; z^LYNaK3+7E#jI#YQ#cPYUCe%)OjG~zY>ok~BWagwXAxgH&iyGWZ9!aRD#uyXH_+DQLSR>vir@cBF&`j8&%8} zI>~65G<*3iSc$UvxUOZ=yy3dmGGR%3+&i(u6~${ZNZ&g}CBwwt(Rv%mGN zS*lW7zQ85&$PJ6~kaIk^EH^C2S>E!2yFBJJm#nz=5=Kmu`;aCn4ELUCWMgBy! zQoc&fR8p1o)OW_xVWApTsmof-g6{V%(>vMq?)BDE@9K+~?xuAk9ZmHvuttN0+DFxU z3=+`RzBK$*sK*-Q^_BJAo1OKz+gjj1&i9aIj(3qumd5A}xwwJ1^Cp)&V^Tf^o`KJr05PwWoan z|GCA{Zl_tM=zT%H-ko}$BKROLK58tz8r#>tE6Vg?fEyWon9K*KdfG?zaUa?!?_T=d z|48zafc>_JpFGYVBhbB{{*F+e{NX2m8XM1j_0QiR;Ky`h+z zFaQZ~01dDJ5%2&NFaa5G0Uc0;#tjkN@BJX@h*aYOF)#x)a05B813mBqK`;bGa0E$k z7ZT6Oh+qQs55Pv_cU0j8T`&e=a0X?t25ImHZ7>IMa0hj;2YK)ZeJ}`ta0rF42#N3r zjW7w3a0!*L37PN-oiGZaa0;cc3aO9@PteIGkOH;nPw1!w!7vQPa16e{(u^5f<7?CjLh z@dG8i@ENV~8nH1OwQ(D{u^YYd8%xm^CP4)N;uhMlpU^QK)o~r!u^rv<9pNz^<#8VA zu^#R59`P|B^>H8hu^;{M9|1BT1#%z>@|c=o9Mvcj6>=dNvLPMvAt5p%C2}GuvLY?= zA~7-}HF6_4vLik6BSA7GMRFubaw09D7o`XsRdOX+vL#*eC1ElqZ}B86aCv0%CUG(+ zb#f)Y1do(gV~o39xc5>GCEE@-Fc*FZHq=k3cI! z(F45FD?MN*oU#jXp)5_{EfsSy*%B>1UPu{qsKoG(b_4JIV7a)eu%g(=2=QH`}u@fpa;PlS1uND)qBNJro!DQ$R&@L`k$nRg*w%(>4#3 zE5Y*!7&Ji%^E{tYHV|_{BeOo&QVW!GKK0@(0YF3V^FxJnNLw*PP4q~SG)V;%MZJ?n z)6zf#KtaV5Mq?BSf>Lj4)Hh`SN8M9LcT^RO(*)L2J~xy|&GbxB(MXkaP1&?fPqZ() zlLQjeK*94Yqtr#eG9n7ofM}FAC-g_TH0RRtN8^)Fw{$s!6ipR%Q5C^W9raNm^)s1N zMPJlTTT~Ps^h$lGM!yt8ebh?_RR*-+{zmIFQ5p4A%~VYzbyZolM46OM50pyf)GNU< zEM?R%;dDg@6;uaxK$w$5Q8ieJ6cbCbSdH~qku?+Hv_NGuHWf5B+afm|kt~NGAcgf> zu{B$BvN0C3TitR&X*F7Jl~1d2C}GewrZ*NYOOYFv36^-pR%Ohwr~CRZvi)O1$S@> zw{Q*ja1l3g6?btNw{ac!aUnNyB{wA~!EoXAaHSzOCUvw|vd_e9 +Roundup: A Simple and Effective Issue Tracker in Python + + +
 
 
Roundup Short Paper
[LFW]
+

Roundup: A Simple and Effective Issue Tracker in Python

+Ka-Ping Yee +(original site: http://www.lfw.org/ping/roundup.html) + +

Please note that there is a new, active Roundup project +led by Richard Jones. Please visit them +at SourceForge. + +

The Roundup prototype is open source. You can +download it here +(roundup.tar.gz, 32 kb). +Or play with the live prototype! + +When prompted for authentication, you can use +one of the test accounts: "test", "spam", or "eggs" +(password same as account name). Roundup's e-mail address is +roundup---lfw.org. You can't +create new accounts, but you can read the mail spools for +test, +spam, or +eggs here to see what they're getting. + + +

A detailed design proposal +for a more advanced issue-tracking system based on Roundup +has been submitted to +Software Carpentry's +open source software design competition. This first-round +submission was +selected as a finalist. A more +detailed implementation guide was submitted to the +second round of the competition. + +

You might also want to check out +other Python-related stuff on this site. + +


+ +

This short talk will share some experiences from developing and using +the issue tracking system used by my development group at ILM. It integrates +two modes of access: e-mail for gathering information, and the Web +for search and retrieval. We currently work with it daily and it +does its job pretty well. + +

Fine-Grained Mailing Lists

+ +

The key strength of Roundup is that it generates a small virtual +mailing list for each new issue. In a way, this is like implementing +private conversation rooms in e-mail. Although the mechanism is +very simple, the emergent properties are quite effective. Here's +how it works: + +

    +
  1. New issues are always submitted by sending an e-mail message. +This message is saved in a mail spool attached to the newly-created +issue record, and copied to the relatively large user community of +the application so everyone knows the issue has been raised. + +
  2. All e-mail messages sent by Roundup have their "Reply-To" +field set to send mail back to Roundup, and have the issue's +ID number in the Subject field. So, any replies to the +initial announcement and subsequent threads are all received +by Roundup and appended to the spool. + +
  3. Each issue has a "nosy list" of people interested in the +issue. Any mail tagged with the issue's ID number is copied +to this list of people, and any users found in the From:, +To:, or Cc: fields of e-mail about the issue are automatically +added to the nosy list. Whenever a user edits an item in the +Web interface, they are also added to the list. +
+ +

The result is that no one ever has to worry about subscribing to +anything. Indicating interest in an issue is sufficient, and if you +want to bring someone new into the conversation, all you need to do +is Cc: a message to them. It turns out that no one ever has to worry +about unsubscribing, either: the nosy lists are so specific in scope +that the conversation tends to die down by itself when the issue is +resolved or people no longer find it sufficiently important. The +transparent capture of the mail spool attached to each issue also +yields a nice searchable knowledge repository over time. + +

User Interface Decisions

+ +

The web interface to Roundup aims to maximize the density of +useful information. Although this principle is important to all +information presentation, it is especially vital in a web browser +because of the limited window real estate. Hence Roundup avoids +repetitive or unnecessary information and tries to fit as many +items as possible on the first screen. For example, Bugzilla +initially displays seven or eight items of the index; Jitterbug can't +even manage to fit any items at all in the first screenful, as it's +taken up by artwork and adminstrative debris. In contrast, Roundup +shows you about 25 high-priority issues right away. Colour indicates +the status of each item to help the eye sift through the index quickly. + +

In both Jitterbug and Bugzilla, items are sorted by default by ID, +a meaningless field. Sorting by ID puts the issues in order by +ascending submission date, which banishes recent issues as far +away as possible at the bottom of the list. Roundup sorts items +in sections by priority so the high-priority items are +immediately visible; within sections, items are sorted by date +of last activity. This reveals at a glance where discussion is +most active, and provides an easy way for anyone to move an issue +up in the list without changing its priority. + +


+(The following has been added for this web page and was not +part of the short paper in the IPC8 proceedings.) + +

Screenshots of the Web Interface

+ +

Here is the Roundup index, the first +thing presented to you when you go to Roundup. Note the use of +colour coding and the attempt to dedicate maximum space to the +description of each issue. + +

In comparison, here is the first +screen you see when you use Jitterbug. No information is +actually visible! You have to scroll down to the +second screen before you get to +see any bugs, and even then your view is limited to a paltry +eight entries. The boldface on the item descriptions helps, +but the visual effect of the table is still swamped by the +powerful green header line -- which contains zero bits of +new information. + +

As another example, Bugzilla presents somewhat more information +than Jitterbug in its index view, but +forces you to go through three +bewildering screens replete with form widgets +(one, +two, +three) before you even get to see +anything. Examination of the index view +shows that one-third to one-half of the screen area (depending how +you count it) is wasted on trivialities or empty space, and the +most important column, the description of each issue, +is shoved off of the right side of the page. + +

copyright © by +Ka-Ping Yee +updated Sun 2 Jul 2000 +
+ diff --git a/doc/sc.txt b/doc/sc.txt new file mode 100644 index 00000000..f87320df --- /dev/null +++ b/doc/sc.txt @@ -0,0 +1,29 @@ +.. meta:: + :description: + + Original documentation of the Roundup Issue tracker. Includes + historic Software Carpentry submissions and a short paper. + +=================================== +Software Carpentry and Short Papers +=================================== + +These papers are the original artifacts of Roundup. They can't be +included easily in the table of contents for the documentation, so +they are referenced here. All of these were written by Ka-Ping Yee, +the original architect of Roundup.. + +A few of the pages have been updated to correct links. However you may +still have to use the `wayback machine `_ +to access some of the links on these pages. The papers in +chronological order are: + + * `See a short paper explaining Roundup `_ + + * `See the original overview document for Roundup submitted to the + Software Carpentry competition `_ + + * `See the original specification document for Roundup submitted to the + Software Carpentry competition `_ + + diff --git a/website/www/Makefile b/website/www/Makefile index 72503c4d..8f22afa3 100644 --- a/website/www/Makefile +++ b/website/www/Makefile @@ -34,6 +34,7 @@ html: docs -e '/ Design (original) + Software Carpentry and Short Papers + docs/developers Notes about the MySQL Database backend