Page MenuHomeCode

No OneTemporary

diff --git a/img/index.html b/img/index.html
new file mode 100644
--- /dev/null
+++ b/img/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd"
+ >
+<html lang="en">
+<head>
+ <title>Restricted directory</title>
+ <link rel="Stylesheet" href="../css/zed/theme.css" type="text/css" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+</head>
+<body>
+ <div style="width: 960px; margin: auto; margin-top: 3em;">
+ <h1 style="font-size: 3em;">Zed</h1>
+ <h2>img directory</h2>
+ <p>As you can guess from the URL, this directory contains <em>image files <em>.</p>
+ </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/img/login/invite.png b/img/login/invite.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..18d3dbd6a28d25516652bfe9176ae16d155dbc2a
GIT binary patch
literal 22968
zc%0m~1#_G+vo2_inVBJAW@ct)W{+{k%n--ScFYtrGmn`mj+tT17&9|%zH{%nyR}tk
zf558htyfY#Ppj4HmbxQVm1WS7iIJh8pwQ%GCDoyzpbh?gUl3vc&42;sWB-0cZc@5#
z8je<Oo@OopC^1V%a{#3r$jlm`4luLyb{+)?LP5b&+G^^$=_)DmTR4K4&HjU7_5wLU
z{ig|vcsZF_*aO@s%>mZ74nouy9X-^Pww6NFI$TPuN=_008(Uc)7l4M3vZjTPy#=2o
zwTLjKpcnr?0U&^z8KoBp=-|rlB}DySa{2%D|1-@(P5ECCH+v!K|D}|!k}9QyqYHqN
zi<y<lf|Z+<lADd0jf0bihli1pot2H1g_WI!jh%^&ho6I;pOuyJe>duXtGQTO@vBQp
z|L?W_jfALe+}xb_Sy((hJ()c@m>pfLS=jja`2Hh<ot^0)g2~m}!OhHz$-(vWe@l=A
zxLUZ_I=R_8I#B*+Y-aB0?j}S{{oh*vIsG584zB;(O#ckV;$`N<!p6+X^8WxTDgA##
zL7@MGc6Cz+Sp9#aT{XR(04(YNS4Vdji+=}a_4z+!Cw>VRfSH@4i>9L^@V~97YUAkU
z=xXEWL@A-cMX6)!VCm@T`d?@zC4M;vS2r^U3xJ%Y5cR(qW?NfJehx`?X>N92ab7NN
zF*Y_yX<jxlUS3vdJ}GfdaXwCN@&D#ZI$F4c01j^d&9(f$xf1^)_dkyCzt{j5TMvMx
zw2LE%^1n9BZ~H&%!uLPx^1ry2|FbS)|09>>pE4}}uVeo2seiunpYH#0+JA%p<MsfD
zf4=VW&#9N`2p^%KV9Zn%HKjg2KK}mwn~{<6{{H^<_V)Dj^!oaGbaZrgclYx0^8EaK
ze0+R$b#-=j_VDm<e}8{_d;9qKcye;W&CPv&etvm*d2@4feSLj;dU|njF+4ncaBy&V
zc(}2#v9q(2m6bI+J3BHmvbwsuxVV^^nK?N*xxc^P(b2)r&)?YC_~*}`-QC^azkmOW
zjlI3S?d|QBmX@)xvD(^N2m~@WH@CUD+27wkGc!|ISh%#b)YH?Go0~g2I=a5TURhZw
zEG#@fKfkuNmY$xzyu7@!vQk=F%FD|;F)@*!pTD)W_3PKK>FMd@<YaMi@u{h)g@uKo
zp`m}#Gd?~pEiK*J+M1o6-Q3*V-rk;*lhfAL*3{J0+1Z(wmseI+R$pH~I5^nV)z#3@
z(B0i#U0t1+m{?U+H83#n^XE?i0fB;o0y#Okii(Q9zP{q(Vl6E#K|w(<7~I?2tEZ<|
zUS19YfrNyF>gwv0l$2s(VgLX@NlA%_h=`w`pRKK}sHmunjEtnDq?(#qQc_Y)O-)fz
zk(88_goK2fo13bts<X3mYHF&itZYa~NJ>hIn3z~ZM1+}{SzKJ)j~_oYG&H=tymWMQ
z($dmGLqii15>!-FyuH0092|^{j1&|Uw6(R>)zuXh73JmSb#-+;JUpVKqit+#3=9l>
ze0<{L<Ms9REi5by4Grz>?JX@Wm6eqP0|R4YV@*s<qN1W)U0ow1Bdx8i|6M%azkhde
zaWOYHH#RnQbad3z)O2!k^7r=#0)b&+VZp({0RaJ4R#xur?m<C8zP`TU;o)|6cBZDL
zoSdAF8HmCEZr?FCb!Cl@|KBvI?t`KNC@A$~IY}{1uhr9RcnK27eG85>drqWc2rZJ_
z4=CuMjt)Fp{U#=^<9~tTvbMf{m*eXwywLHWSeF<A71;mQ(;>vvv@c4&_?mj!yp#(6
z{*h^I+dH+|<SvIWrfhWF`TpmA4v_g*SoQv6Wg;{qHC4NV+167}LE-Sev_tsua<Ap#
z96!Zp$7q4iA!+51)a!+7;=`H*Pd@frH8-8@gP3Wmqu+DiXiMB}st<dmpG(ewEU6fv
zksxTR|8c<vsB<4MO`ntqPHlF}dE0Ke$N`f4IV)qgM?#mdOdxpl#qFarK67t6I45cn
z5`Kz0_@FmX%CuTvY?!M(eZCk)h|dL%5zCg})4}D4W4Q^(Ole3tlhV*352%qsTcLa;
z<>PieHGkNGGgnuGM+|BxHtw!@bOPR<N1tPf+LW|}gHs1+aVZTc2W?SeAD0lL%sbt^
z=Cb5INPy6T>n;2k7wtE5zAX$aw*(%RX{~5M>QV{3QH<!@)cEpPK;?s+f)N(~t6RlH
ztJo7JCyo;j6G7j@w1Di&qd#uH;qk%>${3NOW9XdViU}1qQ+p<13Y@C%2o)Re##1QX
zyJvoF<{p>c$=l@ptWca+xHN^?h7I^3-!rC4^a}q+lrewj%eKQ=!0lA_%aTDNCyGCO
zWpeemqvtUU2diTKJ=AICn0~oLnDdbS-k_dDUUEqy3zU?qWX%S=GrcaE_s6>q9LKl2
z)#5L89v2(!%8lR^JG&&0+_sOarI&DspA{?<AyJMhy%rQro#BjPnwqLv-dBks1W6zA
z-hm%m>HL6^$%#UuQ2}nF@6C;kH@7FXo!Ck);HYK0S#)v{|Bu}fDWeQLP6=8%B$_%^
zIW+A_>rfrX5DsEp*h(#52zr;hPj#JAd+Wt@+s&2M(WmS(7+fTZ0Ng?K27=$5K@Mf4
zJR-cUpO)?7Oxjj|aT(@VsF&$!j~#n|m8PytI@S~ob6LzP)!{OjXir_*e6yRgspp`{
zF43zd|8hm!keM%D!%jNa#sQ+3uQ3K^Hfhv;hv+U_6~hbFeom&Rtf?emfLY6o;=(Jk
z+N1EkgvjVHI~X<lWVtyn&0KKD5O~?bO8gKtz0x~wIHr%niW$vqvmSs<DSy9xJ_@!~
zv&LYF0nKj1#tV8>W^y6(8_U&*yTYs0EV#bxRb~U^)Jn}O13{oe9#5Y5!6iNt#h@tc
zJ9qcKuM8gVPqPR*%&BCG*h`Dm9T*Nu`fqIm?WsB}I`@|N$>~I2qiWfELaD#xE44ff
zuD`#HF-<HjE}1MR{8~HAh@i;%+i|&Gnz=B}eKuQZ!ezbOC2cGf)vUU*s@KZu6L8m{
zbn<$6|70HiD=-Jeh{I6qJ{rkQ*?ESiLx%~{;2-~T<{%xafZrj#Oie4d<mXnhzu31>
z*@95}YkBQ>;hHdxSp}Nm9%W9yGJ1sD_~rPhx*-^aF}Ru((v<2+;i*%O1dOGH4pOJA
z(<<ud+HmvqX<yip9Tjo1=W1AgyM<&|TOoQdJ=Gj~y1AUER`Y`a7$568RHm&>EOlXj
z#cO};e33@{R9oovx3Sc=GUjaYg~#W$3Om(wYcaYNrOSt)Ttn0HTqybD@5$7L?@>!3
zi-@4_W6IpWr?6Bzf1^ggk9w@!igzZU`hE+_&z(0a0k;G$dXA0Jh&|zPeW6l>%*%Rn
zXjLoq<{#AC0xx=7)(K*&RKc`%Q{;8=m#4Wh0yJCtz)tKo9awFI@lCH0RVwA4WJCuI
z;@+{rtccK8mAqWT)J}^`N?54n#jtAV`!abrLiTjCx81Z*fMgrqGxi&6QG5Dp>aJ`y
z%TSVG(&K)xiSl>np0BoQ`$PMd2ELD7LTEnnKwAAQVib^0aWnYarkB4~y^`;nUT#{R
z@nyFsuz{my%Vb0c!$9fqVN^Ir5@1il6l4x(Fw^~RIaX0`Fp-ffuW-AZSw1|jM2@;*
z1j+I9c-s9q_px}XUT=<;!LkPfDDazY*$l&K)GWU8fxmDCY@}uo^xkg~q$ug58dcIm
zdAh4%m%5Q%kQoAiD*o!pOjT+P=A}YIBxrV?!Edj@lM8?r1CcVIdH!TnF|#Gwtd!a>
z_2cS+2?{WrHV&ler3GhC-j4|Zfp+vUESkL2n@tW!R|%-{vF`X)RTG?Q!5k9taWgU3
z!NumAXwj$bdLqK5<>PmDP6x%OdW4GSJC!X6NyOEa0&)RN1nmG$wlaR8gO)Ppm(_u4
zHkE?Zaq#JOf?+1g>M5}V%FACjRD0%H@1sBJQS4&_+(&cP;q-3irKIi1<RF`1cDQge
zdhBv!*tQ+|t~gb-x_ydbM2V;O9?$jJDr#_=aJiyt<t0IrUT{PNt#U1QacLGBKOP-<
z+>hvfy5ui(zff}$Gv8GEL`2;egw{uih;sV-*Vg)TZYCW4-TY6E>mlnRn+jmeWUows
z`xtbPxtoFfi<6yI&YU$jHk@<;VJS~KeWuT(|7;ucflHkvICFB7yVp`okg@4gkbcO{
z@@-K6>)-}T@u-kRTid`{Tbu98Ne{$R5TrNFoCBJD3y9Z4GW6N{nZhlBJAx>twr%$S
zJoSIM9u=Sv^1Is}quBIK+!Q&ztw4%Hc4x;ElLO67j+ngFUA&WI0{|y>uw!uUkwAlu
zmFXhw#MwX<%l*6^IQt3as;Ad$jM^@jtH<+y85)t4s1itjcCjIPX{!5aBC-X<HQH7U
z|J5Oro1GA;h)|wIu3s9xxml3PqVD=C@P(;4Q)}e@Hgb=?I?C|eHHxDXznG`xOo-y)
z@i;qNhkvY~y26gL*}#$P`$Kjm#{1np9|UZ{#r4#c!XxtWY%*0t{&=!J(6U%9+#&P=
zsEOZq!ZpImmO@fkN+_%a^=PHSjRUd5zLDw3&N0@)4TgYLJ0g|7g&8EAv1(qdz1C9H
zTo~)o|GQ0BMq|I@-;*&mPEykzD!f}SRj>9E8=+Wbc{~oc>P$QD*wz6;qMh)9dwwa;
z!Y!Wb(;7^yFd?Bei85Z;8fe<my}kQ@OhL7w4PEbmjv?UQ^nMk&)BA*@ksNZ>Q!^_#
zlPAuyeIdw&NP<O?%*6XHI-Wd7D5<IDbo~B|iB%DX-1tUh(&J=|+qXRko^F8s2)baL
z2vWEIuo)2GcTo-d(e}Kx(g<tP*?zH(vH4`VG-N=~V$#!Ga_dP2w13bVPD`Kvv(K)t
zS!aD`+|gz`*QRtq;r;UF%2Ufl@pNj^viW_s^Jv&WXY&Q;$M;9vRcHNG6e&MJx_cl-
zkB9>sQT;w2bDVlq<Z~9(N!x+z#E-L7*Z52dkk5;(E5O`vKlQT#J!r|{<Ej>?$Is<(
zGTXD(Eyu?>?tDI5gU!0*ZOj>EqAayEN4D4(IFU6eWb2^Zv_iZ~j}v_zkG44PNV4W9
zTseQgXZ1FT5;>s)_Vf20Yh#i*?{at9BmuDe_OQqB)5f<4Gi~B&(-OuQh9N?KLGnN0
zfo76rte{hxyhQa9goU+$4b90(Si5>$%bB_H9Uf-qJ|FLK%6I$gr?gwBWb*!e75-wZ
z2)=K+jn|zrR^XrBFU^4e)hWR$6e#_Gfi_vcmwzr~<g0N8(n6PM=J;2sOgXf47}kvM
zj6ZH)Y3j)IZ`5N={dV$wl^mY_YjXtNun%~@9%2AAGsN;7$^Mxkd}(MXEX0QeYR73~
z$+~-3AyEtgMQ|-hkbjx-$#;I@s@7)MbI@oX-2)%!`YnD^2yL9u+iL1yKT+S=)!@fo
zb=}=Xks0>kPOaIze!QMxV3M<C2+?}w?#|@fATj`tsH8sYk%dZkrBzm5CzI1Fj~pz)
z#&GG8xG?e=w}_b%iqZUq7n^1?MS^)OFUCXG1~q8&R`hyOb}$Qfx3&tk__sQZ?_S-e
zt;W6HjBckSZ0t^lf?{v(?acppJeU+OFosKI$8MKI&Z0?;v{#lr#iZ`(wJa@7|75m~
z^%0l43~5T1kNeDv`YvutDD(GDdeKxfi*aEg?zl59<X<&;b$@l$pU^!^b3xYS;`emq
z(S5`J_(df3r90l%FYEpqzBD0XHI_<p-L#g;+222apMMG;KOdoU%?f7%8E(WZ9ob0}
z8?KakTUP*iAP{-`3p#$7+OH^$W3SJ3JEVD7HG(?FPQLP;r2#VgU5+^pMpjMM@4O9U
zvb*r!>oRPBms@?XHa`b(%2JwVtxAkSOd}}k5=*vd5+!l&h)|4y)h8R<v}h1%6jv^P
zXI#}*o0519Z)E6blo$Dt0oo*Z4cM$nz<ZiOchzQ;wR;W?F;ec)_87RKktNzF=Z-aw
z{0ceCg`mO7NVRcDKOx}kZZ&`)f~H>w&SxWDBKgq;KLkq(oZN^%Q=eN$bc~eoI;y{Z
zULK&sk_i-Zl`oD1*m}klS4=Fh3I9y^xL0u`7j85pl9~-p&Up#!t!7+Rcl#CwWLf{K
zdLxQeFy@xxPO?)3Xsq7U6$^uWh;Lmvkp0xen}#;*r(we#>v!5gCN4thDcyP5IxLcs
zD9`KtfFi7eESWkl8_>u{lLvUU0`;a#vK8Ierr|hs6y_&IlFUcIHyvJ$Ia>ud29iAW
z!VY#^R)hoG=sSd$+Vs3r_@&<_)CJ3!W1FRl8<Qg}duOW*t}ccgp^;laRK|)!S20+!
zbr5|uOq12uw{DKHx~{UP-d!d?_`Kh&)4MO`+LbeI!XzAQ@>fl+xY1`|rNUT<USNoX
zg1J1*?pCXl;U2y4Rm5$WqTNZRL$G*JJQjvwv^1%vd0x*KCl~n~GhME1hw?vyO-B$O
z0ShG^S3qOO&WStpgs*TlU(IRT56>AOSN5id9$YbUJo792S-Kc^4I4B@c<K&sG4Hss
zy2gw;jjwFp(WEUT-G4`7*7#}<0r=AYLuDSi^IJ>d=cn@pqwEoj@{UZEC7$%*a~qi2
z_<F^=n4;4~+X?k$@(&f;6s!nyO)8ijA#NOyAv+d16Er!zp^IL_7Hef5V#skB$~znT
zTl_Z>)hH^bM4Z^P;x70$fgHaNHO9HfMk&0e4>fDkbu@-TicDeT8SgE#RqW-G?DfR*
zEhIc5JpGeNJsXxs@c=^8eCp&@oA20F85kl#<Ms2ZO$l2c^4IQ{%e>N<{Lqr<-(MsH
zE?R2O<M37oATIOQ;-+A0S3Tvc#rcP-{f)Mz)B>atmWz}V#F(gWlA>!|k&U?dm7+w)
z13wVd&5{aXN+F~8OIrBJI7hmKCG%|3)qPnScqTr3%GN-SHGbb}>B8NsbJ1C&+Bk(3
zVZ6(nzfZ4^*vsU8rJF_J2_Q}u4K@Y)U2LA@R1xbI^AonHpb&*)q12zu-GqW~39NCV
zbcD%R{L+=+=bLsQO`Jo#7*^@2Kf`pU#1d>EPjoZ=TZvqwk`EovL-f}{BtR~zJ|Q4^
zCXJiHf!hEwjLj$sON~3SJdT#VP#FVPO+d(UT6_b+LB7fD^06zoN!qB~^7eni=$+i@
z<o|QMDOcagvGsSo%L{yRzj7LsSa?}>Z0w6|-5A>lnjFaSG*3JcJJgz&B5OvP{Yv+>
z(1RzLcSON4_tnkzO7~2_yE9Q^6W(lufEiyS7OeQGGn}y|Ng=`!BOs%{pO>y8HK=Q<
zFxGzUBI{%b6BnudF}>xCTK2L8n{?Of^BDtO{1ol;+u!11IMkPKx4km>FjBlZxypIB
zI$|kpi5Cw`o%LSek$~7zF==A0(6B0l55d*JJJ$jOI=4*C-}}68lyv;ciKK<x`@Du%
z>+v-?Oa`~ZFQt0=c+%bh&|yBaHN|DyTUWOy@vFq@B_0#~VC4`%$9d666+)W^XVj0!
zlih<Vi9c=T3=7DqN0h6UThK}bziT#3t8EmnZofZF4$MWP5Ha7+QWk8-8^O%<f9DBg
z&y~Y9aA?tINHj^^nEB;X2n+;rS(7Nhk@ZR8tyCZ!7BF2;s==*XQygSeiS()mPi}#e
zJ3iTEio95=IjNA<yAZ|!J`fF;boODQz~t!CCRf7t_n=Xg8Uf#@-BkF7t~-0=3D~BY
z-mUv_DSL+D0qNJVfJw#M48p$O)#ytb4v<=tU&gH}5TAk{rI?y;UJRIlR5;<-o^wTi
z?Q4g!a~QRqxvbG~K^^VBX23Dy>-24Z6t#VeA=jB<_Y?7)DueH>vY5=jq!9cvTiWS(
z7|y!{!U=qsYws<|NSUjNkKr6Yj_0Xu`t;bIpUvVoi#)pFK0M_xHklR6Ufs;P8INpI
zH_PUn)x1d+E)1I>vk7epf9122#lHd429sk73T(|?_jhZJjh4S)Omwq-4*T4CBSXk`
z*T#lxAI8gt@gUGu)$c*NSpS`P{KmSgqnCI4?f@4@74moRUL3KJsi^<cGlPevdgpS&
zXI=ZJjjHTJWn+_{jDk$XDZTfx@qy@Hgleo*izGDz8&7VCb*%`~FZ*=jPn$VUh1z=w
ztL{sgMJhkn+5BM5lE~{44X5f*_aGVnCW?*79(fCPR(U@YSaOugh0O(fZ;y?%o3ZrQ
zh~q@6nzwhnMOI4o`EJe?8TIg|r#UEj=jl;GPGa|6zO^4M7)m2Hon%*TCx4-KaQwlj
zYwh6{Q}uDWmsMIA>U(mA{V7ihW$W8OUk5rFHACR;nLc?b|C(UqmD>t}r;I%AdGe+K
ze!4)_3wYgb9?J{YP5~VvK8Sesw?dRb>$j7-R2frsPQho#E?+wS)((|qj=HdsSLEvJ
zeM21Pf!aWxG4j*uhHLplg<3z8-G&CYk=V)513+ymzfD-gw-u?I#c)=LPz3>+JNRga
zUOX#jDWzw>I9v_T+suO32<K%}|Hj(RuXVHqX!v9b?!a(seu^dS+RlEEK~~gXyt5t?
zcim8M48B03NTJph-?MNQaHHD47!t)t2-_v3(Y;1)S?8@|i0U?)7$et5IH~X;G_sBR
zmaa<Vu7RWL$;mKfmKPB>Wv@;@j+*pvx+Q*sWZQ#x(5e>{Rgl_$ju^;o!WPd~-O2pZ
zsi^?6(zqS}@hjUi$>?VFdlJ+jzF7bc6DT<N=cu0!j4cJJYjYc);>^Y9q}mDL%l?zT
z_d(r4XWKx+E<j7|)|>Wl9xtEbrW(CEJEgeK7;!Ok-CE#kqVxufFWUx-cX?ozHpiUr
zC(Jm$<DyN?vU-CnVj{zDw`Wv1#{m0{bO&_ET)b<xG7eTK_0O~XS6wi$xvJdX0#4gq
zEG~6}b6)VmL2@jCJ~g~%`0M=?aPvavkLBVLEMzl&>i$GEk*Q3X0MY-x@ks%9s!{3L
z*}r1lET$mx(<pjE{8#X9gI05qBniHIO6Ou)hWpuIe0IXC-b&;*E?AS`Z5%bqo{6Hq
zaL1WnPlc?ts}Y}nEtr|}8r|2bp$_@yoE1AZs{eA>e`SM7?B)nrwo+|aC<M>t{;Tln
zdQVou;`Z!yJf)VS<=Tl^mio`I?V|tQqFbl@>;-t{_)O33%_kz-(I()?Q@`kO65YD~
zt5Af9Xj>5fz9v#yhGIh0jlui`z%LqDsP^vJ9}nT%2HcBptUo9Ftvoq(P-_#<+XypI
zdps|TEp<|$WiU4?zp?heYin|i9WEO`+p!K&jU4cB)=c9oMf|AxR2n8b;VX(ySj}Pv
ziS*xAN1Uip&&>>Uw|c1Dp?F<8gMU{2e)ZQXZ9tToU4D`tdNr+pL22A73+$*6)+NUC
zArx$5tQLXUM{NLzVtvEwt>#ah<M<?#f7Umk7np7(&yPXCXY={A^GkP%e5*-I;3LY*
zaWrv9JiJ{vhyK@MH?s7*>X}nx0zAm%!!=6f!i@>(k4NzcP=P((ls*hNI+!+%U~gZ@
z*~BQf9GTz&e)D8)Cym5ZInrUeS0RJz0-sovHuLhj9wrG(x|2R<AcaoGx?rK{^;Jys
z1zpZ_GNt7C_U2)M2;-mOpj{S%QW8yY!C_FN6U*1vieQ?L)C~dmshZ*;=?C0alR1~?
zMI{PVxE<qKi3z8zDQ6gols1Y9(X7SmgGeSvsUh%w^&iV{{m{w7KXq5bnBNtN=6;F{
zCsLk;RwUC)Z_5%1u@ycD(4B|j`Wrb|yPNma5jn8hD0lnK!+#DlG-%6I>pw?8m1(Pg
z;TS#lt?jlS;gK@~`&!rg?;EStXXPJAL~DoBe!l$!sMN&@N`d#<3FqQlW%v*{`&)Y`
zj4u)5=~Gn)i`jZqSs=Rnoet1Df>o$=WJl)rMGpIGd#-X)SM$k=PrUu({a3bL{>C@c
zFW^k0mMI;&+Z&HBb@_j`tH+WXh8<AQKAHc^dFszk_e@N3|J7s*G+Xuo51l4dV9flK
z9g}R*HruepbB4N-#&q1FD+!Hik7lNh?&iCBKu44*%J0QFlg<YNg)d+O5!)Q7D~O*>
z{T1f64o{oUit<G$Oe?)|?L7@HS-Kq_#M~bVjEc**UiH`7Wr)(;sJ08PJGze}vjFjP
znXvr}YD0=|)Y)YFECozv!$5#PpVz62WQWkr*{3u;5tDU%I;4EWyDA_WV_pXCCv`;E
z``$MHzRU@2m1i|dRF%xmZ|L7Ox@u*O<d}oKtYeLpvhEV~Z<0!LXC2=Bp443YGy(^5
z-0$YE8g+7kq;V>p6l#tpFaEB0V-q@<nCPL1J*N%L^{TXOo&7VbZ!09&(K;2x!l;JN
zI`Y9<DAh?A9@AYD5n{rl4f<+8K(Ae`;_>OjMEJ14={xD+v`)CEQ8zcPqvN0U!bn1z
zS1;H8s=|W=I6;m<?Ey@%^fEQCayf7HR6^oMeKNZr@IJuhSgdBq?#E&z1rqlPUlG=(
zPijI8n(mqXj#Fo9Zf%YLr`nokj>R>_^YH*qWbcpc`|cLI&%>q$EY^HYuYQSJ!uSOu
zqfMt;%juEK$_b=q4VJ!f5n+|ygZvnzm%LSsk`ZnSR|8q0>LNVlfFRGnzYmTWiR+16
zzcN?!_e&I{FV=0wBOKlN|M<Qy5b<^U`)l~M^B&Te3w2u8d{+3SOX8WJcrI=VcTy?8
za>=X+gRYFY@<CkDApd=wG3u;cfL#2KqPO(dZ|bxb0<c2MZx<KmgufYT8Cqy<6r=(E
z!%jvX&Bb{q9Y6OeR$_!V$UKt7@VwWA)U_zim?tYz45M~pdYu|2)p!m2m%|&XV{W&2
zYJ*)rOzf<`Scu)pkG|B&#7Q*t_!%c9*gx>SI_PKTu&yrU?6~N!eH|6a&Y)rGaI1wJ
zaZhT%SUgLlgP6fqy-}qMVr6-E_+G-npva!OkO2p59%4(xx7crW=g(c8qhZvFbj>~K
z<W;bi0sIXdg{&>i>y&Bs@ZJkf4$e{Qj)^Zk@9CT>la=1B<(0jIGQuAb5S|cL$nDUg
zrim;_rrjzD{AIbDk9-<Psrk*-iQ$La`Rtm{o$SIFeM34TrGc5ER3jGuj9fug-h`tA
z_bTJkyVAkZ_Frf&-dZyQMNh{_CmZFrk7ze*J4Ixf28D9Bj5R-hm<p;?3mPqNB5v7L
zdl&MMp9}9(m&<vERt{tIT*opY3<R6t)8sR4E;XE#Lhiz!1#`N{T+lVJNi`B?je%2g
zI_ZCWb0<xDl%C6J7mA`gRl=<Q<qkdw?XqC~)w}_d5PH?*!~}tR?)SG_8SPK;;OOrt
z8f4GgecxHa5oq${A`;q-I=(-*(^htrI$C!A(oUd!Gpz{6F^qF-T$|VT7KvK*TJhD}
zuVQ!6T1zMG2foBc`}2D9MoC9jb#B89EzEr_59fZ<lvL)1w@|`u**%kRi0PN58%p79
zJsZe%AV~RkF?zYjy&ut7Ay+NbU6|L$P&#LnYZ6(oq<r%XvA{#cPhdJm)%vI~aQh0q
zK)2_jpQlaE9CuYUwV{*DyHEc!TRU0yoIBx5abnKbBU{c7?+)h?)qsFu*^<rivaQEY
zi^hh=W?XdhCEGaG1uJuM&viUHo$8eR1jSQ`YDGkDEPd5~ZQ2ZL4rcJI6|SW{#m>o5
z_(xgq-~#`S>=Q=OS?AO(5UkiWNGB!vs%L)-M$gHTA@WUvMGrMs6ryR7ZZ`2ax*%ib
zzfOjm&lS<ZCLW0>?o@>7*Rs)ijM{;pYEER^OCBo~u6(+%#AYLwCDoV!h71UD73=AR
zv#*ZLEl86^2F36BFW})<{xa*#+KhE!ae0Xq9uxEw!nUBIN4nFBevqbYlS#3I(ot><
z!Zwlv^OnpJmsFNl{F!1<B?{lgEzPVi3_VD3fU|TRt8PjSw82uBOViv-j}hGUy4A$_
z3VBJP)ApAHN3?KCZm>3m>`+(W65?5_inhDJk5Ms<;1400uhKeAwfTLrgC8xony<h#
zS+o*ebYQD&4tkt&j;numwIQ>1TkpU<BlkJu$vXSS+rs>MGH@*J)i8`}S6_gzLpmv1
zc_*(O#Gu2<(3}xTiO3}p`m=)9;FF|0j8wXs%FI2*pXC#JHX_|rwW#0-+WtK!5~LKi
zhrxkKo0ZhAr8H2~sYZ-H6*r})4}mohQL1;qz(>D^^>4FSs|#0P4W|Ce{7>lLtUYWL
zIh>NYIFPP&9OeLiwCQ6_-nEcY+QO`Fym6ow(DMVrOv9O<Z*9^rHCltDzkoPgi+?mo
zy#TIROl2nqrk$OMETnQ;oxvFfEt{(>^mhZuCX^*x-I-&$z`L!+uF^1{wN4PIjCrxM
zy$vNXtk>G&^ww>&A{=Ya5@=4A!?cJ?O>;6~Tty>+$n{u(q#jb4lMKJLpiQZf^+r58
z`v;^{w~fDVC2dmHT$9%am&3p{5Xl8X9tfoU@u+h#2IjeYox^5=_`et^{fUsEb^A>9
z#jMBY>OBNuxPsLshA_08hDnDx{!i)97UtGo;NxD;$yosojkQ!BFy*UJ&CfY$aUh4d
zoY$xTt1)dGJo8k~l;k?by??$*pVZo9f+OmTJV!&wF?D}*WUz4v3V9dZoEG8@1u%N$
z4LjoE(xOz8H~sEd3r)LGPE4X0kEVN@mzlh|$g8oK9`MmMp!TquZCB$ujm0u3O7=vR
zd9sQR5=N9AFCGl!lIIo}!iUMdkhB_iL0gFRTrH9eSS<W8Yn7?p=%YNY8Q8WH!O0%S
zqgN@-z1~(9nR(Vt=C15Mn8c^+9Kn3$ceC>~(9{drhB;Yxpovm3lUYE8p6#xfS&d{m
zrvo&9I~a3hxz=k3Z;V$3org<jBpt_5lGvG<yAk2gl=WNtCO1DB#$xbZs)R+7X}i+_
z$)&OcO_1s<I`Yts)4toDspm0+k-5JSA?xn%HEN+@R#XfacEb7oe1q8-GD)dJUYf}+
z;xnagYDm+V?=k7KEXyY~AUakc8e@Kl6fqv<-mH=p;JU4ZWCvG}eI$Nc!J=|s+}~Bz
zxOO*a1s*2+{8Q`-(01ba@UEyq0in=3>vl@kSb30|@F%1V2qIIEE22$jpO*GuUX+{5
zu591YiI@~bZIxV?`iVJ3uY9S2L%TiNlgG;X?ZfFNJ34KW{O!c&7KpJyn0xq&m`Wt>
zutdN}Cx^F9KOa`-gtvM)P@e&u$w0T6VbhC<m(Zk?NQaY8OyX#{JzC*PtMz-{UD$No
zIEl#tjithc^PA^OA0kn;+~FxS64Rpmpd`a*MkVaG>z}t0X>eOfVdO+44t7qv4HzzY
z0kA1d#Zo-@`<W~FA8l<K6k7Yv95no>VuYdN*K{*TY8=%0(ucPHr$k97bW)DM%A`+-
zOqA)YG9x5{e%l{vhX;tv6y&rLX_EbVKh~OAwdVktLP=+OeOB(E+nJYY`XcE@!qd8^
zT}-)#sF0td7*x74$vsO~h1kxypREZo<-*J_u_}aa+HIlm^Kg)uc-q^0kL_XJBQNt8
z`kon)JhJOfwa4wy<1vasO*ehh3xBR0Iu2f3*&#lNCt&DIx{flRqmKMZm%AA|wpq`{
zV9&`nc5gxH1GY`uWx$o^44Tu53;79YRTl@lwT|PiIen{Qy?n%NZ{sPXWGiPABw(SO
zpRbebCBEC|F<!3s-W{&WkBR9EU}pYtc3!JN>NfZ;#XWf7ZD`I;6HT|~t;Ca9!VIb+
zVYeTL4N^~nrb8FtPS45gdlT>gP9Bs0o@n*|3W5f*7>(VcBt)6YKEGpHWi1mVJ&{Az
zm>VyoDDuESbd^T1{R#Op-W7rm<d)(xGyBL6Ur=^6q=iLD?j)%)cr|I~Dx%$Z!>cy%
zgFuElK%Y}h4(heb$dDfse!v92Nnqrhl$9<%e@4XUpx#x)c+1st{aaRt&=pxmsLZ6a
z$N*Y{|7Q`1<oMcNI?jFzeyDi|4Yv`=V`pDbGVIM4_NBmyxSpSceo~K`A1FZ<gme<k
zL?a%l_wg~MmL+@KJ>VaD(?8F)-_X7I5s+RC%U300Un2!@3o}I0&F}~7X43P-#T&A}
zDKmS~kc;(eFFOTM$^H}>q+n1Yw^vb;W6D{+oDu(qAr7_<Cq^YDrV{+}NjwzEIqQy%
zzCgXokUZr`89qu@7Ftx3-zEP#I^;V=pLZjX2XBFv-YD!Y64F&U5)M}nlMOkY<x3p{
z8Q4GM!^iC{GJpBpZ6u-^6|W$;GOp=sU~hp_9gJ9F!%%+;4E!*tzQ3L;qRrY=u-m^=
zsF}I>)<wZIA1Feb91Wr{>mo|RLk1Z-dW^5`VH($~&Sl?F2HVK7$QH!VvRTfU_PG{0
zHCgfW#tMW)Yzib~b@1fZ2s-|Ki4KHsd>bBOC&U(WT$%mp0a>0L8n(+PF8@obM1X#i
zr7<?Vt^6qtSvuQm3ZcS890k|mY_e>OQD@+pZ86nAS2sP&yw*nG19H_Hv{JHu*$5LV
zW0Syx8rB3E%t?<?72_4+l%B=JGvq^4@&uDecwIsz_{4A$6J2$3F#j#S{@u^Br#2_+
z2=J^NLzyYKE_v+ly7Ev6?z#<!pZfj@Xt1dBdz*0mQYC?(6Vl4~?He%VQ)r+lpjDf^
z`KX}LkoXT2#}Hf&EbxvsGcP8{iwV9$-?TS+cGP+FDbimV<(Gai;(G=7l)Hyzq<cF$
z)MStf#b%?7PK_1oVQPUZe+9iF4HX{&aqyg2J5=&$=Esqpbp><WPidh@C+V;mVxqu>
zz7}}$K^1o764#lf5zMZ`)e`$Q|GTzt^}g~tJ5zEzb4|^o_XpGtsW2WdZsDO;)Ehs=
z!p%A+IxMrakfh1e^wWMYv$;IMXnLxvJIOQ9%Jr84^u!!F36U<j>rB2<?{0|{7Q_<$
z>>PH@%485gzJKJ?wVrR*>*O3`9X<w8FdbB=^xhv*p-k-dk?bW*10|jtTB%188@=Q!
zRSA<@ml4EI>TR|sS&cN~%bQ>d=k4|ML6%K+soS@`VR~WWUV*(>faLxkn2`qDTq7X+
zLX<&^1h1UALF5?aI-j`L!#~u_XE4Ccv&sC(h(=*t0r5uAsjiPs=^x5-W+yva3>j6%
zc{k_FNBda);W8}-o9a9*k|v+Ljv)Op4WGiefjdb~ax_b%!RIXS>+BwBc@|bP_Y<nL
zkRy=rcRb{JD*Ftj+n=mXD07>`97~12j3>;>{$`Mp11E`HU$p_7O}k!n?rXEEHJUyw
zO2<RYr{=%~VkkQ<OoZNaHKg&^K4zeqO!@5Vn}h{(p{BlBCGj3=;Zo}DKF@tk?d$b5
zLRupJ>DUI5+@V>P#3OYgHv=bRkkJ#>C)`Pl-VL5->TlUL%v>lNG^_q%nRX>wleid3
z@5QHH0^RydJl#UI%3yOr6(wk$iY=zGwnGke2Hf;zPbFQ(Z>Ddb0(254v^6z1ea|)#
z&U57r2qCML15N6uR7jitvyLbe;9;U@ZAVF(ouY+4;h$yOQSL^HD1aZI6rhEZOP~Q<
z)mD0!B$bN|y?M<(T9P=Td^u|7f>E5YDOoX{%k<Huhv}$Qq5?@E=h)a-DJc?eT&{ro
z$x;L^6tk>bMlrMwS!zL^_8L|X1Cg3|IVF9$sj5IGC}vhqW0c;1kJxYgX{~`4Xp`1F
zq)I)D!GUVt%kME!JO%8bcs4Cw*c4j2b9nk)tKClrsrJsXCxP1zkc`caqm=*xC;u46
zx)+SJ6~ZU#xoHT1RrN1;_#g(x`X`GE-48@rK{HZ>fN4xtPK!Fpe!E~}qVHo-ZXI_%
zU5Q$S?CPZ`lQ7nu+M&j!=gVzJHytXO6wqq46;rk4D=Uxh`#c7Ag;pJ1e9a+|v`Fmi
z^Hp5+jaC*OKzZaMhZ(1@>Bymj+NXP=PBa0*(u%=OR89LZW(#^Y;xeq?gq(OUSJklZ
zH?x$agJd7RY^=j9wb`e{cHKQa3B;qF13Ue<fXP?siZ`o;<TS8jNLV?UJ9lQw=PI#E
zXgbAObI4CSSD#jt>Ho}kBr4LP1~K2pe3q2{QymnwL~?t1fuuMu4Yxp-qW>~Ua}n_U
z!N1pIuH?Wz@`T5*tel9nYP9zC^e;(AVIw3yQzn}qJAR%irakIkKnQY|#6@mJWvtAm
z?szY2I6{wUlRQnoqxP*Ke=f!ehv{!%p~G8LODVoxgXF^2selDn=1~_X{@h7DjeJs2
zP~f@fyx$m`F*IhH^P61*?2AER_hnGQ-{r5YGP`A%&-KO1q;RGai0ZSUH0x7}rz&D9
znoTEM@&=_xMarb~_9K6^dXlW3mME!kgW8d%H>#?d@b;IWz$82llbhEIHTV;+KoLbn
zIRaYt#C2-Ek^V0j5O(uH{Gu8K@LEI>8fswZWe4KuUtY~l9#Sk7WKr;!V$l2U@6^wp
z7aQwvvs(vQ6Fjv;TH4y*?hi}|*Sy~S7FCbJSTF>$S;&(XzH8XE)LoJgbc0CQ9MQ>W
zmybEt*aQ~DrqvSJS&(Z3XC|1^2e4x4)y%9<2X8z$=3G5B_9v7Kz@0sSIlkU|{r$o}
zt<ogFsjoeOf+C!&BJJL9u_`q(aU+(t2o3sgoMO_7<IC^UlZ?&-<gTZ2>=pB4qp4QS
zsNo_@CE<Cpb@86ZJ5Fo-iTjkK6TPMk47KZm4{*Kkb|gBs3Qd7~1Q8Cli#9F~Iq$Q7
z9)#O9NoE{st(y65@Zx0ni6!<N5b2O3rRvR5SdJxWtEo!_bAuJ^?_R4&<vR7%xjTG+
zMT+c=+I&U5JIplmGF7PR{3N)-l?Ub~`Ax+=AN<AqV|eB~rY7e7?U1<#pNc#Q^j1<<
z69r!{Q)Gvh(!x<hyBzh;*r|I&m|zVvi0C*QrctQa*mdLZ@VNh2Msts~`Ev1L#}_s)
zO}!Nx`zpU%TDBSOFD2Fx(O(9Q&Sf37Q@ckS-g~=C7-8{!=$nf5f0HY=VoUO$3c4kz
zr24@53Rs1_Vznh`FnyuNL|j?c@7%kwM-P4Rqj;k(3r%?=R;^8W!^(5R+zzsnOp{|A
zru#fuErPb68dUX&tWTKi;G&?u<ad)7VG_iVRnkq!pPvvB-P|6EytA&wey3y+SaRSZ
zCISrNunhM<t7ga4TQCghvY`W3F8M;}WTz|>zlV;Ud6d4m5N};S5fi((_?<`4g=ufO
z31Zj0VCA2Vo-zB18KcV_Lg=$7xOhZ-a1rWi5cH?*?cuBp0;oQ8CnzI^xM{3oaL=;|
z<s4pb3OQ`^S90Egl;Mm0az$8M>iaJssxxqW9F_qbc#V!)({B9y)~$8{0ZBXzUqMbz
zDs)rL$mnPG((3$tvd+fh;(;5#UkT!3r72Mm*N&^N1dWyn<k&44cX<qnnrP5a>I8=Z
zS_?`X0x?L&z!&}1<4W^;3JNk2-Y#U(cGVU-nzH#$D(?XZ)JS_#_<;kU#&}b8tHmG+
zzALl9rzxXO8Jali#tv{7Gw=orIr^-et*rb28d+J%gfn1t8f|E6CBmjI;4)*+ao91D
zgMUVwYgevVI`isj$$Sm5W1tVpC#c$5JPa;+SXQP);(8H-q2f;PjNJp54ii{`_%EN&
zF@aOBZhf{v;ce6#$9eLj7;I`o+86m2!}yVKOP~qpuww+TvBsNBeWRN8(S?MJ4E0~g
z+Ro0-@>WI~e5@NmQMXQs_MFqG#5FyiBpIq!MCYucBiZl7%R#_3Rk*dKPg}!av0}2d
zdhd@oi{KZY+$mxq&P>6~?NJbmvK$lR+x1`4l@xe%VWBi@t~sC9YMkyT;wvkzFiZOg
zBfsb}>Os?QIGS(@?pa-<3skd;Kehe*`fueY#_bu(Dm--8%oGwi$sE>5svrd+a@7D`
z_*ksbu3rDI+}!sLQ2eTmt`P7u=t<yV=@g0^1&``vdfLXtMOu1l;}JKFq4;t+_7I?h
zKW+HRzF}TK1QT!5D*0mQn7XVhf++zu+sc%Zv-u4j1(o}OZc|1#guV87gl7p!wsx$%
zJ}iQzIOGm@v;IU6jA8n$h8oh>+uTUF0_N+H#ns20KQLL=YYYgOP^Lr>kmt#z;7^AC
zZiV*sVkK#th>%3tedUH<n)}x>m%_ip?=5d(Z>V-*BJd8vvt3yxEXZNSRscImThNYi
z`MQ$+tVBT;{U*u4-0O*N^qU9ouegl8hnBmRR!U(X=SVrU%4njQ&l!{fsTllf86Kf@
zBr;u2e&+K=fsY!xsasvZXU>&Ab(_Y~xAnKex3_g8@+n<22l0}w&dy1Tm-ox_l`fBq
z8kIW(J#oBpchWD6I3z$<PO4!bfHoh!8qpyS5iJ#2M$9{>Qle>fK971(M23foi>tV>
zW)k4YKx=DrnR%!QY9hogNx}+rB|@xDrScMrS5G}n?iv-iKH&kD^-z972+rcMLW_;F
z0sykZfgL{V?9c7b$S4m7=rl!^0+reBMu!_K-434&Cgwzh_P;U)s$pReB*x7iqVllS
zvjxP&p4k*lhcOfbC`;UZ{qbeQJnUuU?GWoUhEaemHFPX29o4<&QOj0Qf}4e+fig1F
zSDlHXYVN_s6<mF;-6h{X`a_8c$&wv55d8>yGk*ytuXUA9ad5M0^J?p+3y|h!9?^Sh
zYIY>XuVr+W;jf<c#Ut!8=;E!N#NIZ<`sV5w8l0{a@JkHp7mnJOdmOZ}Q$Zf@x3AVB
zBiGihwzu!^4?|iAWrMpWwmHH#yfGe*oZ+lve6rQ$RB6q)JN#4Wb<9M1QLf=Bn~Qs`
z8pEDD0=s;C1j$vlWzEjv9%smNRSlOijX<`S9Sshh-i92b9_unDj&8(S{9lRc)3U3U
zTZNs$U#fak2`#`*t$1YI+E9GDkpmfMF#4FZUk2mdtw9_00hohQdX(hH#3YWnW?fJ<
z43KTEaKwR}TCPb#H?e#~3=$<I@kmulDY&b2$WF{=(l7V#yWYC^BDwCgZ9O7|l^Bn8
z{r&y*T{yiqyU~3-bNhA;0!-TWatCn%#t<^gO53Nu`p9Fff|1gle5tmZE4%`Ve}%ZQ
z?7@hoXs}C`AX@0{Y9S2i7P5??@=$?Anjk!c@4Wzn9+1p6lwUEn0p_VyT2VNnb2D6I
zh%Kp%tY+BJ9UKBG!53Q>XOa!kLrdjTvdde5DBW*jGP2Mxl$E&nU>St(GJP~-Zd}b)
z5HddPmeE9)?X-qbZ?0^b`x1s2!O-Zi=nzoZhK6I7EjaeB_-a)*zCZ$L8HgDKlylb#
zY=kPZQgY8Q4`JoDK~dW#Bqf82w-ID5iaSNlbyub=VYP`Q`Ye?ra4OMn>&tIku3jOV
z9B!#souH*zYzc#<Vl$OZd+P=`J=#c`S=tTU54pMz!A);$HT0%@W<W5>E$)+Ka0z3n
zMQIT7a^aj~xa`fMO4!0)(Uanq!^fst-9Q<wRvbr|+3uvmg}Bx7tY_z(S3<c!pzpZ9
zxB42CQOlU`f@A%0dfR^BR##JwaC*Xu*P_^C*3DOZNv5x3g@d)!(`G;fN@!>pGvqC;
zA`5%ky*iz5i03tb_I-$x$U6Js0yTR9KDLwLsxxd1EOvdc{Q_>j(Du+HH0GOH07S64
zA|xALAvIOAtbzj=!;^;mw)x#3gOuVV<f+)BadsZ87Q$`i<rr6I2rzzS%!$Z2*#;Yr
zg`5FHAS}FLW?$rjbkneOnHUITgGQ0CZLRShp~<u9FXOrv;0ap}4-UY=b%XmZD~)}*
z{G@pJ3KFogu6ko>2EmO>V2ZMqX=x$p1X)?K%-8Yb$4qG~pvCTU!E4`);(&`{spQk8
zlhSm)Ud5OZ-4GJez-I}F_(ft=Xi==t*~-_cG>}cT_M0FiW0z>CPo9@_H|jU5GW>d`
za-J(=-LbYAUA?ZU*#L}=RP!8q;o10jJHKhmB#aD_sC_d`>k-<$5<m=mV*JrQKy}Ec
zwKu2}#_)}qvws2&Q{`e!L{qm}kl?x?gkSy3CyT-$emc|>WDJ6I#|u+wKe6XiOhtvt
z$jgzH?Qa<90@6d!+PFx-baA>MEJCJA?K#Rh*Q_7hefASu7`0p@>PA~lkicbexw=QP
zxZ~@^kn=x<C*Q15C`1ypPOWa?_@}CUTYW99v3|oMC_GrZ6CAXq9m!)Sv(olc{Q4y4
zBn2Mi{_bTeV__Hq7`w2`)N4~KvxO&dHcaD<)hddn#FbJfjHF{j{mWuVAE$aPIE{=y
zi1FzX<unscjVB^_Oblv{O)#}HK;q^MhoUEuQ)uk1Rw>6#f2%~AJ>;{Zw~V|ec_k73
zX(p{hGy53l9S+qKVpg}6edyfA9!w(2QJm*KjdW2*bx+M8XQQtoMF|gMD-QHZlog7K
zg2dRqsBFm&l%f0{imEFd3!yEskFJTb9M|+_`+UDp7Kw<+6(qh^xXX*)c70p`(fFym
zsdvyt9$SVw-aD`J?BAPXv~mxu)zJmZjUnRYN007-Z0a6SGASV*TdIjCpZk>zMRaw~
za?bG!4}F(|f}rf<zDQMQb}En5H4zo{dRGta;#iml0+;3*t!-FEoX2)WKD<v}(u9S5
zZbx{gJjhMbN-|tMrB`e2cF~z&X)Go<ijvsfn`oNS%JwCjXaop!u%o?hH&GKe!HQ~l
zs}O{H$PRTssEP=z=oyP-BTJWV)}>yEMq2TMPR~0|D8F>xW3Qu9X0t2c{_=j#n%TH#
zxy}ED1k&PoA?SL%wdj7bxUg7a%L%R2+7ZRiLQ$#F=+wR2xpXs&_dVR8Tz`YE7ZI;q
z3YE5|v6)vFg@l=O6%(rlB;nF#i(PI0UWbLnL{O|M=y-YF=qc<4ddX;5Zzi7TpSt<9
z{oTi6*%}{_H2VQt?-xP3_edFY29xs95n`hKRho5FsC2p%?l+mBEE|T^^quTi)qz*>
zFc_*Wuf9QbE+)CmUh1V7-v@o+$v@yaK{>UXjc{Ra$an)Y?q_PHR`yaI&d5;1OAZdR
z0)fthAg|7ce)7X20UT;UN7=d+X|o1?`HIYIO(g@^K*GA}^#{w|ZL8MbZ%+)ZPQ`5M
z>Gt<pfZ&j_0j;Ig<P84K!{z5o4@d_`8?(R5GXpvEBQpNL50*3nx4pOyb!@lQCG&pn
z>8IIHAcG(Y=2O$kA0|zrtEP;VbyEaezveDjhnzrCkaaCn6T?Y0#pz_zCu_m$2u44|
zZ_S+4<6bHsIhr~Za_$1$z@+nlvnyY{>?rE1QD^~{ROg~>lk^<D%GF=+D|EBylHxC3
z52k7szu$8=EQ~xn>okL<)ZqyAEqKKjW8?1Q58HmtJLxMffBK`0kN2V^{S`4?%~DIZ
zCT3pdC%i^*PiM2lAIcq#6GQha9HGKsl7lTJLz5m0%CeRy)@%xOSZHc=lp@QBb|=~u
z*uAjAmXWaPgIJPLj~>JDzR!3Hq^)=ZE;ZD^?O_9R7G+r_xxj1+C1z&>p>F>*R~u``
zohp9Unb4cI@8y*EB?4kV5&UQ*#2?Y0E20wiV$gjND%(j(z=69T<)n=UVjf|UI0ibQ
zXW}zx2usOxnucqdfGI_$no0#FDB!jOQLjOIeZ4WeNh?MDw(g>?vBc#wBD<j|Ns|E_
zbOuupG31#&?Cc(yUJr)^EN88<r^0KKqpH4l>||Z=mv}%44=%`_rIuC}+D1SfCn|c#
zl%QsQac3>?T!IAQ=3k;F0B*ByUE`rcqMDNJf4>?PM~<@ig}RSQ=bzJg?K1AmzzyVL
zV%cOkb0WFh`T4j2Ly&WdQj5F*axbUzUdb5Ba2KUe-*!;8tFMGLb*Oewkh5VSWr&%Y
z%%}<}j|~!*6kznLS4ZH(G)C6QM=a%xeE{&E#as_8*P#_<dq2qLo8&LJl5&~MSQRVr
z0Oc5KCylpTc(?%KjY_h=fp&HiaN27JDOsI-_~8S&9L-OnIHY|yu2Wa}b0b2cZt>7^
zgUNoAgI-y4N(&<qAj-2H69RSlJs)u{Z-v$4-sqcrrKQvRXP5sgIv2(0{MD9{w${4h
z)Z)y{x;zk-xl)Q<6{e|BZE9Obp@+|Yh~o!AR~9s3;L8zQhv}UY_5uf1T^1v@fwb#?
zcDr&|f&h^iimV=8Krlfaayq%$Z1Pq3tIC^PnXPTrjtalSnQd=s^Mz_}R_MZ2LBxzf
zgbUk0Koo`=2~6ussd5thtFdAmsD0QxVmE0Sol-h1xN7Kv6gadnnA3CoRRsmkYM<8x
zJ7G#J;X3mT#^;YgP2CeA_QHv8QwSX5ju0$|$vd15ntY;(72Ck>qeZzTv{pyJZC{y8
zwrYd{q4?0JAxvJM&+1J#iKk4=rm!vfv{4WQK2*_JyyGdDF9EJ_vKB=%7?)E};Unvk
zV#YSm^2@dqt6HZch<O@qRzB9n^oEe}SX4)()C^AmPez1lhJ{nbB~3uY+q8hU)3Q9q
zTPiFn;c)EO2HtqKvDGB#;01oD43({>g{m0Cq7MElXtf?Aap1^89bFdBoCe!oV5|#E
zfds2nQcQzIpuUSC+uAFi4V5ckt0YIRF3p9q%NZ4mL2F=*5$4vwLc-)V2dFr93Bj~1
zgHc+a3E#Uec5DN+yS^TCD6|5jQ{m#UhE+uuTe#&a)UdHjD}*0hBh?b7>i#$>Lm8vM
z<0^GJsqTy++d$F>=k{9UEGsBs;X)R!?eB%LRVWr{wQ!mhSRvws>C6n7ag7YTdw>@N
zMujTP1a>u+Yy)LKBxd?dY9qmMlfwm8jqNJc3VNYz)mlBTXF!<1@ZnnWr!PK1VRJr;
zs02o@!+<p4$!W1<8@P3#)LvpTFnS&%DHN3<t0#-l(TiXU$24LpC5#io=>jr+V;A&h
zGF;FBe@<~~+}#pWwwmqtMms7@ENkR|Ea0n1b5TLDFt%`J7;G>SI2;WVC&<Jb9;T9f
zI9>%jta@NsJf>nW)n74X8>qd1qNc;DmeYiagXLUgwUifdc42H41~|Qyg|3W<wDFHj
zZ(@m;p9Ap`7=j>F1dm@xiz(Yc()O#z%DrB<pd&cgG%4PHvI?SIObysBz-&Q^$tiig
z0Q+cls;FN86kUelm7I!TaLcLKvJGf1zLZh!Xkg()2Y6xibjtl=T^YTwFhLEX10_kq
z{y3nY(ZQ7j0^u28R~*k^#Je$O8_=A-(UstkE37PZXz>2uRZuWrs4G*jT4=Bse9TFb
zq9WgnI<-qEM!8C!=T(?e;Lyt27_$u|z4>*1yw_wgv4q&CF1F#l;GK0;SO{AME$})9
zEIl`G`x-Jk2L@(D>Io(I!RXPpvRJbXoO<;@QJ%%`Ga2Cl3k-_xi<Sl4sHPXdR!gBc
zg{e5D5<}-_i_8eeVEKjzlAsg}MwEXu=4>@dEq|4!G*#!&dO{C(DDhwo`NaXo1=gTe
zM81*h`O7?mCB%89K&&cE{suolMd%o<+^xp&&(mVf7Mkwg$NDl0ylMvOI)()ss$ZN}
zLwUidHAuJ5&NG!!Je3o9`0aDKLvWzII8h5)k&0E*UW>)dqnTyPz&3FDm%CZ<&Kx-_
zz;mwR{xAIGFG_b2O34#C8pf@L5c2wbjb`4k_Bptc8-sQZhci;X27f_YRf8TCURw^f
zfm6Gl?HsmOTWPIcM*v|6>cWfiY4C<}j)tXfc0RTMtx;fLIS-A>i3P)V6qb2$OhqAR
zf!%H|cUo8yy|HdN*akFbUTPdj$#$3w49^3X7Ca#|D+^vx%m`ph3ra(X*>$ttG4LFx
z0*;JRMQyo3Nx*TGQmRnITI_1gF1N^4Nc-_+VH*e>|M2~+VON_)0ZT(1CT3}&?RI4t
ztJJhnh0)IoEj@!Rtj~x8gJscI_b30McnvxQ^bg@(DNW^7em8-zuPqbXK+<auwha`!
z3QR0CU5v!xXGfmbh7~hj5?<O6f~{ITtMtW1@dY8FYPlo^|Klhb>P*RND=4uFDD_?1
zGO-1^@Xob8<C*0?IUL;pPg+qVGS!f`(!z_tvEZ0u#uOSUaFC)iaV)l4tzO^}t?5g_
zNgM~Jqk?sGx69?Mc32D;Qh0p1*aiY+FaN%yC)MsZX<;y?l5z<IL0{N@no2SAK%Qu}
zT6%KaI51lSkIEKhw;($PW<yfIZV{cmwaroCGjRyLOS5cj1M6NtuqkUI-kxLD6Bwr?
zfQJy_1_Ry|cWKHQUMpy-g7k)T!-E!!RuY~c%LorjBOslF9pu$^d$r$UVi59P((<tl
z1a{wluXogw>U0Y{0T!@a@x=Dz9a1YBHXy`Qf*=jq2N9P(IJ#X8%i;P(AAp0e2}gnO
z0Z~ZL&MqkNxmgnFIklW@1Dej?j%?fLv3ps)PR|n<i2=Gej?QptD`vTfZhC*5mL!4E
zOJ>VLw%RB>*<`{0`2jYNEl!c}`WL3U+*#3(Zop)UUCYWg5NLVx@|PPjTo$>OH8O;B
zIGZ9T`&T2BKbD~&Hsjd7C<&}m5YOwXjX)C&3>l5k2C*W~*TGP+A_<%|S>be6c)c`_
zU?*yqmu(=eWfw?-i>th5v)V|&L)sXJQPSLnV5MP&3JcmPvlWpl3=C!z-I!Jn*hXcx
z@UqDn8@!WWx->fh6>q&j<^F1aj>)V?(f(V@%oYg4sa+3>M(h^gJz1Vps(@Ql!5)5T
zHyBx|gAzD9Wwwl@1WHm1y_%ZgX<Dr(!`8iL(?zFmnnxx#djV1uhGCE`U*d2ym}uY`
zy&o()TWGsKKF&&MZK{U4OQ@8<v#BV!gDPJAwL<-Q!AoZq3WFXV`~^r!oH3{k1}&#F
zsI}4EWH@<@4tcIi0ST5RVHllmvE-!FEP?X>N?U%mum$>;e2-^1FNYNb9ie9!9!_ou
zCTr5sf#oJlveJA-+Q`BAHZ;h>5RPH=dL>RVMjoFpl%49u66@fT%?aXmYp`B|i2E$4
z!Dq2r6|9b=`p>Kc+d$yfJDc)%WF$CDYAvrb3JmOe1bitRovJ?~Q&zAXoP&J|3bhW$
z1du5}5kSG`C*fE{RhX;2XZ2qp(l&}zs+G-bAHpREEsc^O<W{%W%rY41c&J$swjfV?
z@V0G7pUYwfwhLRWcpwe1l>tYQ$tu}$8ZW|WS;0U<Aw)5r(NoXYvqF@(W`9Kp$h^qO
zC~W#mh6ex$Mn_;cF1`><kh{~(TAh+Ke7izy14-N8y?Q%t$B5mhW?2KPWq>pQ!W_^B
z$*V1MdnrO;6tC41;$cQ=zAEC>Ge6^0G^f);M-eO{NO=%!`jBBNosQA!IZ+c(o~5Cj
zb0kq&wnA(H-Ag|o_~Y8(NV(5sHh_4S5m<OjgSa~}SwLUbdIN&1xP@h3GteTaiVzq*
zc-G*yBP<|5cY!G>87l7XGOU&-;kN{1v}&3*Dk;^#8!N^(5U4$V_UJ#&=W|<~C2j+}
zH5&*YfUM_WCxF=JH2==!lE_CH?oAeEWizgKfwBzTu#Oi`c1U?HD#Ljm#naUUh%5nI
zqY8>KkQ|nUeFXkbG%LpzM7vu%KX}l5evc=<Je@WQS_6nT1*4J2K;%opORIu_krz-x
zpR?0AGt7Wb7Ktf!f?jWgcO;9W?0|dYIh@R`acT*S&>LAsg`$`WBXn923Q_dGlU9-~
z49HHs`A=p3vCW0qUIiRUrZpN3K>7)>h>lP0nZA$>im6YA%BHT;3XVx&OBfudI2~&+
z$h}qtfG9dNlp`q8^Yi8NC2+#9z$h_FkVA<u>XaB?+PT7PVVU8_U*E6XkhM3j#OigM
zS*@UE865~V2{^8dnw;H)EQ2USs|cd*Pj)GQU%B!V2NDRB)M-s7Q+k8dq$NnPVu}H_
zxt&{|-WxLmq&g6|tCQp9N)@d8DTjYvdA5Ptiw{pe`*-E$!jAGbM~>TIpbbEM!Goj{
zr|nVG7gD~Uz6K;Xnktyn%J@T9G{^t#Q(+*fgHsl*CRz}S{g{%(o1O*&yZ7B}15ppB
z#Mu0!HU|R(Ow4&SZROblWk|aC+MU1e=JyxwEzY)pa9hn7X@x<@ao}rGfvgRYJwNbb
z<<3!v`3yRFxgf0Cv2Sk$&SGDoUIkACDikKS+-%^1h$#sQuYfH|noD1K<a&&wn5^xW
z-W!+efRR{Fta}k`r52~BKm2;LzGi5+wc6n~X+c_Q5cE0%4l@k)W39xQDr8Q{Kq??f
zNvt$;(RxyJ`DO2$2*RjV7-+LxZlcvZ2Z9_b{T=Zyw|-!&GIE@5?6ttbPX==s6{dLq
z;0t0a?)+Tb_3^XcukH5~yX+S5s98-cBj^bwr=p}+g-XTVm2Djf=3J8AirH4)*`Pgq
zm?D5^OASI;gLw0|xI6z=&^%xHuF%bEbN7MQ_34dVIb*tc`~|Xw-|kDVyn5%YBO6M4
zQXGz|ss=f19AXF+Dk4SDU=d{Hv{$Or2J;zFArQQ0>U_xQV_uk0!p?mIyzN_1QS9x>
zSgY)#a}(KvVsFB&mz#6PKYPJ!CHcK|_J;%aF2H+|%B^CRRj-;fovDJuR9>;H8}Y#s
z3_3Z10;doeRzE$lZuf~4ngJP_)~E$OSS@graBk|+Pdonbz!wK63)gqHYgPeU7&|1D
zeR|-C?bv3It2)PRRx>yPqcIW{2P4ni^jY5aCq$}wOXs0s9Rdz)e}Co%&3`vLK+LGq
z3j#1+EsyDYXPW2q*ww&F)oP+M-_BQmxcuFb`ixX(wU-bNz+f1O!A@SW;6GU`o1T%1
zERX3Tlf^_7;XqEN`(u{Ff8)z`lb+ytonQpXEv4UoX6Y||+1Y|`wPyFF!@E9wu%%|i
z2L%DAKs*Kl2eG_|24AqWSurPjLt+&&h{0E|aF0_Iin7mUn_$^D+X}S23J$#Hbrg|&
zeNC{H%(r&;#a#z%G<X~VSCxuW!BQm5hfzs(rLNxRwpwBtjft87zn9{JgSrnq_jspm
zf95d}Ap3&-@yfza*A81L`rW=!2amnLQZG-yZc}oy<S#>~ew*fsAPXsVg-siReV>T5
zO@ojWry{AGZ{|qn?tQjuqf*Hcn2Jk%ZEdjy>wu5o^t9h^vE=x?CYlupOo|$$uDuz3
zr!!NyC8Qg{|Mg@YOzH>6c#iVl3DqKhVy~Rw09>x=<u%84yN6Ng)CG2@y(2HLsmboD
zwi*bGqJrlxCr8Fe0WdPX=ZY*L*$tkfN5l~(2u`XnUdLh1FGB89ebMU_U^}$)q-L$L
z-MYm@DA^Kwo82X@%*@QZ619%d>A|xI_y0&qeqk@vRA;)R#<E2eDUsmO1quyT!o-1q
zyjH8k+V+L^3l}f<nRtw-y1M4r20qEtbBwjEpsm&AYHf98c4WF*9dg!aGzts|Fk!zx
zf>P>&Ca1$n>j+9Z=PI3~o7KUAAkmDGMa84C;5&r|9VSXDb%GY;i1u*JUAy<im9vKU
zqic`t^&N7KFjrL-WW$?_TkGn8@#Z<)tYC!Q{%~s*MX2<Np+lotqsg93ze1;?V9bWW
ziNCX&B@tPu$#BSXgC|gNqZ}UUlyX9h(6ccA##~_==QO9E)nxr~dd=x=VBLdqjxhKg
z1$KM3J-fWs)e7&YDsZc{f*v;K!1z}^yeD~d=+L38LqmP-)oLXMZ@f||IZ-drsjb>*
zjya0142PHEh<nc{Md-9z@ToW=CBn42q|P%*fwjjr@aZ9eV=NU8r@cJ8+zyPl6<+;S
zZB=M_LMfgAG8QK%CyyqJzl;ubw^uM?w<NsJQi_44qjg9W8yO;76572=NhnF2A_P6q
z9tH$}DZ7^arLH*Jb?@aUd2dBUb%C?ZS#G!ILGyJwt1ND#4*D;Yu=jQM?+Kz!9vT|T
z=y2;f=^`6x>rIAEp4pb6VIAA#Q8APvfrrGDdZWqB>U4UbJaDR<uKnTv9^1hE5rUvg
zERF(4fwLU0Hh{Lk;V5w%VUIs%8OVTZ&z}DN{$y!+@)T01FD0r1j*?>I*>qFX^POJe
z?b~A702=@)N=4|5*7!$vI}8jQSVIsTGxGEQAltHQa-E^U>UUH*s+~@FF?<yyTasha
zDuExT+xvRDM7kN>{qP6847a<mKuv&T3Qm?1ht8qmL7LflvTTNHo19XD;~=wEaXdpi
zx=w80dbLo_5K4H7sru02|3S93UpaL~pD)Kz;&Axk^?(J{4hP87tY!hjDRte5XP~F6
ztFH@KF5uh0C!-rk#GZ_HKgi)=C%4pI2;vE`^LV;$HuF3SFmAZFOcGj#=k<(MZHbTj
z<REZTCx?6t!6{X|xB1flAltyteOkTAYqgXBk5&aQuk<@AN_<wcmcub`V&zcRfXCC<
z1Ne$JVgs}y<*q_|x{+7%1TOW)0*h2(u%I;^=OQz<Z&27N!+0t)I;tEFXX?(sUy*W`
zeQ|az&vAn5`?UW>wq@_Tb#%Hr$C8r+Ot-qiZ?RY!tZtgeaJKj2+3&U`4~z`-czXJJ
z`nr0$Al3}<dtYvQT@}0%R)<T@j3UKzSmX@2ldY-JKOiZ`OJ!Fse{Q>W`@q@Bm`Zcz
z`$JBv)t>l9;D3>==4gk&!c9s`gT>-6u~;e^tm)|r0i%eC`+>C14{zjmdpy8+dm!Mx
zE>Bk%_|21>(4JA0m=#|wh=&nycm$f`l)O$kebL9%5m+b~lr9-)YSP8+od;*y=+-L-
z{`md-?VA5dwt<T^YOUPtwOXwW@WRjrpVw-VvjmFy#hR+7?A;TU=QAK(Y4yOH$H&@p
zyN~Q^`QS*FodLcd1g$D~*B~#bS)F+Lb$Sy{tb_w;PXD?rT(y2hUgwKooA#}rRV&=?
zbgS2w<MUaqUXz&?Fw(GT_he%9#&5URpNIDbf;BMU85tQX+?#x47qGvwAMd8<@L)o~
z=>b|TY<|(|NvV=1&1r{{ppQjOV6CwY>>8jAYO^`r4Q)5wWHOl*Mgk==w$D`M`!C&&
z8%*v4+B*V%_H=FjeV4R*SoT-09z60G@MSudhBaU%VeQWHVmKxZpcgBOIAN)LBk+HZ
z?WsprHLEt6P3ClKy4wx+*L5mvPRaD(;U6CS-fYX?zj<R#(cP~OPyO}2LWaaKOv$qf
zg@M%*1iSZ>S8g~65XUk~IL8}A350p{quT$2Y&Ac%!qfN)T5d9>n`t@CGAfGxe0Qj5
zxaI82e|>!5<jaR=XlL!oI!2{bGDbBVtVVEz<;bZ((t|dJ(8GhUDn_Ry=-iiHFxnTx
zHgF}&%EC5xV7VqaZD1Kf#d}^~KvCj`U&rx+R;^}%*{YaaxC68MYYRi@Kt^lr|9^^=
zQb?$2J2fK1)_%GPuL!RMXcwapFEG^tlb+IEQVj47mEqtMljH>ktvCmtnh$uThHr$P
zIEMhAh*WJuQRSkHQzJ8Mg(nzD^N8{S!<HME@_2x?5qBtQ=WjI{h;WFBi}OkXgI2&D
zdOYpAW_AG%0kzCv($>EWudqGkyTw^V6tqA{0z3=AFD_L?q6uqM#rQaQ#CgQ|1-WBk
z3+3lTONdJvwriXk6kveD78nYQpdC{pB0Qk;^7v&Zk=nh_SfbC*FTf+fA;{qfUvDhD
zKg8JEX~C(H9k#7brlP=92Mk(J?ZX(;O0o%A*%E?$pyO%9%@Aq6bi(@fxxynnY;{Yt
zL<Gb@d#uIy`9%}RnP537#lr{MgTU>9bke%8+h7UVfeYJH9d^=U90KA3{2YAZ?j>YJ
z&pu-gK|xjy<0*qDI0r}AYSftX@PiK&5?5YKUf?uDF!BisN`~Z}8Vy^t@-kD6gP)&|
zU(DqwxlPeM1|qC{YAftV!xpm@B??+J=s2D1R=#efl%z;d<*CuI#b_$XYXjT;&OH=#
zpfpZs7N+}-hAk$TYGiAgL|H>$IJl$j)M(gZ8F4AvQ8{=+hH?N9U;thD+F*A-Z%+UK
N002ovPDHLkV1mefn|S~L
diff --git a/includes/objects/invite.php b/includes/objects/invite.php
new file mode 100644
--- /dev/null
+++ b/includes/objects/invite.php
@@ -0,0 +1,169 @@
+<?php
+
+/*
+ * User invite class
+ *
+ * 0.1 2010-06-29 02:13 Created by hand
+ *
+ * @package Zed
+ * @copyright Copyright (c) 2010, Dereckson
+ * @license Released under BSD license
+ * @version 0.1
+ *
+ */
+class Invite {
+
+ public $code;
+ public $date;
+ public $from_user_id;
+ public $from_perso_id;
+
+ /*
+ * @var int the user_id who have been claimed the invite
+ * Will be NULL as long as the invite haven't been claimed
+ */
+ public $to_user_id = NULL;
+
+ /*
+ * Initializes a new instance
+ * @param int $code the primary key
+ */
+ function __construct ($code = NULL) {
+ if ($code) {
+ $this->code = $code;
+ $this->load_from_database();
+ } else {
+ //New invite code
+ $this->generate_code();
+ $this->date = time();
+ }
+ }
+
+ //Generates a unique invite code
+ function generate_code () {
+ global $db;
+
+ do {
+ $this->code = genereString("AAA111");
+ $sql = "SELECT COUNT(*) FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '$this->code' LOCK IN SHARE MODE;";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ $row = $db->sql_fetchrow($result);
+ } while ($row[0]);
+ }
+
+ /*
+ * Loads the object Invite (ie fill the properties) from the database
+ */
+ function load_from_database () {
+ global $db;
+ $code = $db->sql_escape($this->code);
+ $sql = "SELECT * FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '" . $code . "'";
+ if ( !($result = $db->sql_query($sql)) ) message_die(SQL_ERROR, "Unable to query invite codes", '', __LINE__, __FILE__, $sql);
+ if (!$row = $db->sql_fetchrow($result)) {
+ $this->lastError = "Invite code unkwown: " . $this->code;
+ return false;
+ }
+ $this->code = $row['invite_code'];
+ $this->date = $row['invite_date'];
+ $this->from_user_id = $row['invite_from_user_id'];
+ $this->from_perso_id = $row['invite_from_perso_id'];
+ $this->to_user_id = $row['invite_to_user_id'];
+
+ return true;
+ }
+
+ /*
+ * Determines wheter the current invite code have been claimed by an user.
+ * @return true if the code have been claimed ; otherwise, false.
+ */
+ function is_claimed () {
+ return (bool)$this->to_user_id;
+ }
+
+ /*
+ * Saves to database
+ */
+ function save_to_database () {
+ global $db;
+
+ $code = $db->sql_escape($this->code);
+ $date = $db->sql_escape($this->date);
+ $from_user_id = $db->sql_escape($this->from_user_id);
+ $from_perso_id = $db->sql_escape($this->from_perso_id);
+ $to_user_id = $this->to_user_id ? "'" . $db->sql_escape($this->to_user_id) . "'" : 'NULL';
+
+ //Updates or inserts
+ $sql = "REPLACE INTO " . TABLE_USERS_INVITES . " (`invite_code`, `invite_date`, `invite_from_user_id`, `invite_from_perso_id`, `invite_to_user_id`) VALUES ('$code', '$date', '$from_perso_id', '$from_user_id', $to_user_id)";
+ if (!$db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Unable to save invite code", '', __LINE__, __FILE__, $sql);
+ }
+ }
+
+ /*
+ * Deletes the invite
+ */
+ function delete () {
+ global $db;
+ $code = $db->sql_escape($this->code);
+ $sql = "DELETE FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '$code'";
+ if (!$db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Unable to save delete code", '', __LINE__, __FILE__, $sql);
+ }
+ }
+
+ /*
+ * Creates an invite code
+ * @param int $user_id user id
+ * @param int $perso_id perso id
+ * @return string the invite code
+ */
+ static function create ($user_id, $perso_id) {
+ $invite = new Invite();
+ $invite->from_perso_id = $perso_id;
+ $invite->from_user_id = $user_id;
+ $invite->save_to_database();
+ return $invite->code;
+ }
+
+ /*
+ * Gets invites generated by the specified perso ID
+ *
+ * @param int $perso_id the perso whom to get the invites
+ * @return Array an array of string, each line being an invite code
+ */
+ static function get_invites_from ($perso_id) {
+ global $db;
+ $sql = "SELECT invite_code FROM " . TABLE_USERS_INVITES
+ . " WHERE invite_from_perso_id = $perso_id AND invite_to_user_id IS NULL ORDER BY invite_date ASC";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ while ($row = $db->sql_fetchrow($result)) {
+ $codes[] = $row['invite_code'];
+ }
+ return $codes;
+ }
+
+ static function who_invited ($perso_id) {
+ global $db;
+ $perso = Perso::get($perso_id);
+
+ if ($user_id = $perso->user_id) {
+ $sql = "SELECT invite_from_perso_id FROM " . TABLE_USERS_INVITES . " WHERE invite_to_user_id = '$user_id'";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ if ($row = $db->sql_fetchrow($result)) {
+ return $row[0];
+ }
+ }
+
+ return null;
+ }
+
+}
+
+?>
+
diff --git a/skins/zed/account_create.tpl b/skins/zed/account_create.tpl
new file mode 100644
--- /dev/null
+++ b/skins/zed/account_create.tpl
@@ -0,0 +1,51 @@
+{include file="perso_header.tpl"}
+
+<div class="grid_16">
+ <img src="{#StaticContentURL#}/img/login/invite.png" title="{#CreateAccountImageTitle#}" alt="{#CreateAccountImageAlt#}" align="right" />
+ <h2>{#CreateAccountTitle#}</h2>
+ <p><em>{#CreateAccountIntro#}</em></p>
+ <!-- Edit Perso form -->
+ <form dojoType="dijit.form.Form" id="AccountForm" method="post" execute="document.getElementById('AccountForm').submit()">
+ <input type="hidden" name="form" value="account.create" />
+ <div class="row">
+ <label class="firstLabel" for="username">{#YourLogin#}</label>
+ <input type="text" id="username" name="username" maxlength="11"
+ value="{$username}" dojoType="dijit.form.ValidationTextBox"
+ required="true" trim="true" lowercase="true" class="medium"
+ promptMessage="{#EnterUsernamePromptMessage#}"
+ />
+ </div>
+ <div class="row">
+ <label class="firstLabel" for="invite_code">{#InviteCode#}</label>
+ <input type="text" id="invite_code" name="invite_code" maxlength="6"
+ value="{$invite_code}" class="small"
+ dojoType="dijit.form.ValidationTextBox" uppercase="true"
+ regExp="{literal}[a-zA-Z]{3}[0-9]{3}{/literal}"
+ promptMessage="{#EnterInviteCodePromptMessage#}"
+ invalidMessage="{#IncorrectInviteCode#}"
+ />
+ </div>
+ <div class="row">
+ <label class="firstLabel" for="email">{#YourEmail#}</label>
+ <input type="text" id="email" name="email" maxlength="63"
+ value="{$email}" class="long" required="true" trim="true"
+ regExpGen="dojox.validate.regexp.emailAddress"
+ dojoType="dijit.form.ValidationTextBox"
+ promptMessage="{#EnterEmailPromptMessage#}"
+ />
+ </div>
+ <div class="row" dojoType="dojox.form.PasswordValidator" name="passwd">
+ <label class="firstLabel">{#Password#}</label>
+ <input type="password" pwType="new" />
+ <br />
+ <label class="firstLabel">{#Password#}</label>
+ <input type="password" pwType="verify" />
+ </div>
+ <div class="row">
+ <button dojoType="dijit.form.Button" type="submit" value="Save"
+ iconClass="dijitEditorIcon dijitEditorIconSave"
+ />{#Save#}</button>
+ </div>
+ </form>
+</div>
+{include file="perso_footer.tpl"}
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Mon, Nov 25, 04:28 (2 h, 13 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
20838
Default Alt Text
(37 KB)

Event Timeline