From c56a4fce6615a9d97261f2c162164fff2195280c Mon Sep 17 00:00:00 2001 From: Aviv Eyal Date: Fri, 8 Jul 2016 22:34:25 +0000 Subject: [PATCH] Only load refs that are actual commits Summary: Fix T11301. Git is git. Test Plan: tagged a file! run discover. no crash. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin Maniphest Tasks: T11301 Differential Revision: https://secure.phabricator.com/D16261 --- .../PhabricatorRepositoryDiscoveryEngine.php | 9 +++++---- ...habricatorWorkingCopyDiscoveryTestCase.php | 1 + .../engine/__tests__/data/GT.git.tgz | Bin 6830 -> 7568 bytes 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php index ca9f7c5dc9..a4f697da0c 100644 --- a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php +++ b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php @@ -174,12 +174,13 @@ final class PhabricatorRepositoryDiscoveryEngine continue; } - // In Git, it's possible to tag a tag. We just skip these, we'll discover - // them when we process the target tag. See T11180. + // In Git, it's possible to tag anything. We just skip tags that don't + // point to a commit. See T11301. $fields = $ref->getRawFields(); + $ref_type = idx($fields, 'objecttype'); $tag_type = idx($fields, '*objecttype'); - if ($tag_type == 'tag') { - $this->log(pht('Skipping, this is a tag of a tag.')); + if ($ref_type != 'commit' && $tag_type != 'commit') { + $this->log(pht('Skipping, this is not a commit.')); continue; } diff --git a/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php b/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php index f912a551c5..a15cb3d79f 100644 --- a/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php +++ b/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php @@ -30,6 +30,7 @@ final class PhabricatorWorkingCopyDiscoveryTestCase $this->assertEqual( array( '763d4ab372445551c95fb5cccd1a7a223f5b2ac8', + '41fa35914aa19c1aa6e57004d9745c05929c3563', ), mpull($refs, 'getIdentifier')); } diff --git a/src/applications/repository/engine/__tests__/data/GT.git.tgz b/src/applications/repository/engine/__tests__/data/GT.git.tgz index b53e9a2d1c2eceeb3e3c3fbdf6c9223debdb02dc..afd7e04a9680a39f0093a7677349ac8ac305653a 100644 GIT binary patch literal 7568 zcmV;B9dF_viwFS99Dr8<1MEF(j3mcdYX>AxJ0VW^K|l)B^{#Jr*3+}yJ+Iw8?;h*j zi+w)dow-LWa<_L^(_KB&-kI*X?w;KppU;Y-JP;(Y90^Dq5x~Oyvjh_0AcaQ^!Vkd6 zN#rO(1ms8{IYuPdfjlh4_f=KT^vvw-Bi@~J>?z5|u8u{$a5KWJlPtuUeiA!BsSUE8YPcEA6Gw%l~C>PGv^ z1f2fG;x_az7vOP8FO&)IMwl1DQ}{{#LK-X# zX_XPj4@lc@!H635sw~Wrdt8r&1ko6|UKOTTccU6fkEh{7y-q5OxK+;&n4Klmv*AC& z8qKKPnUPlfAPN&}vudP4LjXm&-iUgOHYxvp<$h*G;r`fxUFiQ<{!P6+ z(*MI~ee^FF`@jO6{^ecKAAG?P{fE&8>F>~dan>kMYRp;&r6pDbXS`s~mJ3BoFV32? zR=!xu?`91oaA7O^55(@Je>q<;NA`ahZR3XD{Pc?Qlzz)cuRfpopBwM~zd!r@M}F<< zcgQ~F+e0?=QSB^P|5k{n5uyJn@G=^-7~TcjfZ4Hy!wer_DL# z!17l*PaEK7Qu2 zpZ?y5pZ-Moi^0R|-+1nkmybO6&^x~MiQoIw(y``?fAFU-uO9yTSAO@=N5Am6_AfvD z!OJ)Q@TsM*UT@^Q4O*Z4yPo6kxdqsn{g>x|BMYyB~V(^>1aKeBj1!|N9Ha?#jPnsE^X8fB(5( zIvxJ`&uL%!@{`8r-u=`^=l<<_?|#(!X%bW-MANFv@J2H+QqfcKToE@&8!=n`64E8<_tY>Hqz28#f$#?%9*4bhCQX zv(IEdIQH1`$3FA5m)`ra$G-NF*I)XF&%FNF-SfGzfBd_fU%cLcj@rJoKKZAGH;4W& zj`IJ*X@m4PXY#sJu=32XfM`aZTC@4`%*>2k){9Qjrtp2XSlG=P+v@*Pz8n8FdHlCH z^8bg^Hg32rbNBJHdWq_Q|Ge=lHwCTeyDfI_e;j-AOQ)ay z-`_NL%Omgp#`Oky)b_AR`M>MP;_|+&!9{#4`3ITrjsF=K5*W$<5L&>TIRgI+r)!Mb z;q<85;_cO>{EJ!}wm$_RyN~~y`NGKm8%mS(w^?WfZZmRyZ|~RGPXB|t@6Z1L3yk#t zFxpwqqYY+*326GE8~H)|5Mj0(k*MZ|#BuA4q!Y}MCXr8Y1TWX?4$6%z#!qIG@^AT` z<5u@+jcw(>IN<-43nTw;DD9l(2W&-2bw%0ng9eS(SP+7|lX;>mDO3Xu-)8VF3R+A_ zRcL@;99j?ITivhHdL5j|R@0^t3p?FJ-LHl9#PZSg-tMUNH7Wo5QuhmZjRd3mB&)3*a|L02s^*?&a80r6Ev~dFDC-qQ69Ul@+>Oqmj7$(Y^P9)&Z|_FfR)6GRFt}fKbv5d<-&^h95@tHgP?&l;v)uZ;s_)w*WD)Tlm_e>enly@7;Duze<;fLriUx5Vyp=-MDL(K?E94$( zBQpnsr*h|fx`H1b8X2IzCgs28`>XqO`{T#b|E1DM{|}}0&>vjDNE1$6E~JfSeQ#{R zcJw#P#XkLC%tQB){vSdcKQLW!z3H%~jDvz)^gz>c!V}~OBF_D&P@8Z-K(!8PoLZ|r z0Rw&|5EZTuhX$C$ZZ#_4?Ncvo;>ErkpZSbWm`5vhCISmMdlu%9p@cZp01K%JCRB5Z z!Zw)2ZIpPVg)D$&G_*w{W&Xxnulxs0qs?Z$4QAG=?U@SLPX0?qsZah(dSO)mGnBSd z`3ISEoi6V(clUrSCzTzpwN2czq?_r5mtvL|7E=}ApiMM{BJ02r}A&rn6;XGA3)u&c0@0ttIPx0 z7n1pAlz!4((G775JaK{-16^gdWAH@>pbB=YHF^bT7g|HC%?DjuYa~1EmDU*a|0TwT z>Hin{<3Hg4kKX?=l(sYZmsZ~bu>qkGB1uWuvMdl5r&WicQhK0QgW9_moCN2g)Xb3+ zK6LP^BNu<4TaWzj{n4MdZREeK=ktB?U&xn7@!z4eo!b9O-M3al((pC?fYLC76#Vl#)f>fEt_QCh$HYVV@#Y^U3gi`4cI1vc~A9QvJs60n9J zv3gtXcr%z_MpyEd0BZ}7U>Q71i(Me|3Z?}PZZz;!S#{TAijh&=Ewts02UGRH^I@&qhW+PO%_4si@d zP9+Nm&3GW0Oypa#{FBA~_^^c@Fp&%L#c=-K!DK=wx5Ks;$n9c3@Ih>5Artq+^MIi^ zu9Db>#Dq#TUpx?_yWhnm1KT`{{`}k)s}3$2(}8P}e#J3AF^Q^8)XYFfWR+{^n2a*O z?c0q`_RT2$47$bW{;oZ1gYfQbVdy9ab~M9w13Mivh&XXl#F((>lSJv5BJ+Rv2xbgH zZZ$^I#^rS4pp)pYW)xmIqD~|RsvuN~I#{%(PLT(R3PU8xr>3UJy)xgJm{VAc8V!XW zU|hU=sh>J@NMRwhIy@i_zU?N%b0aXLng9R8C9U6%$~j{V@s7kUdL=D>70 z1<$nes=mXf3byaE^gMjVDH6;re!7UD&5N}Z#_MsCKS6F8NO%Z``5?L&E3Ant^3(WucaE#jO>V7UR#b8T zc8O&|iA|;w1jQqK|EgIs(X(n6=>os^+6H)*;1xmd@tQQXcb-M?p%_4Qh?PI@=y=n1bGDBBwGlKB~j6lzikn*99u+Tly|Y?EurKR zj3D;YH3?-$*n6NP2M-eA?yZ5V7XUhAo+1kbq^6pl!YIsbLb2lBfGN85xlS;#Gb-%>rE`2ZSE_-sXV2F=?ba3i>k_It0-lURWY6yFv7>;29_RP+yYmz(GiK4YN(IxZlvrh!>Lr~O3l(R^ zF3p-VGY%YT3bT4a9%7I7Rz-5l#c@kR%XRrqao-^?wB(y#qkz+jKmc0FoHz@@7(S%; zD3~|{#vS+(a4GP^kTmNw!pj74;U|!Uc|7Gt*L>IB430xsXS4?V0h92uP9BS>Fiv#a z774rln96+&7^hkHWg5?+mdsd)m=G|D7x66x_`-5gs|p+?dWTJFF?^Rf*m|DT00;rf zP_SX-)-jinbSC1B_Pf7G*b_dQV!5;^iE_|+uvRgML<7Ht?>`5;N>Bjb!2aj}WWg7J z^CM1z`-lBqZn^xG>39IaIx1Rm>n^f|Pfq)Fpi)Q-9ZsCntuWvs90i#y30=?PJjVBS zxrHTL5&)1%yqi%2$${dPQ@^jE~N{Xi{RY7mgp_*n(bMU2Bt#H{?Fk|N}urHhOA+%vy~yVh)yhSSwUE9doeMpcqAnj=Br z2XkZ*^hiT!9H2Mgs+URl)w7%`2E{{pxXuE(u_&S(xDANi2>VNd*Zp8sjmL26Hkpr_ z&i9CT2Y$@3;lK)9&j~8P0FmaR_L>{UqSDbHB5zD`x&Aq%D5Cc!v?zW<^4LCdHxHq~ z9_)Bd*i;8v5mIRZajSEE(-N|^JaQrKj_F3YI(2oNey(S;4Wuw%sYB@wDK%~64!$MZ zVE$ibZ1&It+{XVi^x{DNzo?Jue}~d`*R$O;<1g0CuR^~Fhjoq>J(MP^Z*ZbJSV(`5WF2WZTr?V)+XTv(COaA zlLIw|)mtO&{}ydM`oCLXHq7%sob?CvzcIT1F`Tv+^`G0F`+d|>Qb&s$f1MbmR9F1C z2R<=s`oU7n!C1j2kpiypcM~hvG*ZwhWb3UM-LHDlL`5g+XL7bj$5$90*E>g{({Ms# zw&sJo4ru1OU!H~&bXex62~k=AJMV6QRH#i{n^AmTWgZJ?JxeMrv6Q^tqjdq2B@(=# z4=e-$Y(@eBaUkXN$vb2?U=1V)Gq{Uq&)jwL)WxIAM^2m}4-%f@^+-CLzHojrH??p+ zlbf2D?%Bp1Id4oi(;1kq3Lp^ea!Aw*6EL+(u;76__#hDn9r0{ofj?Hb%K@Op+-hOX zEu3!cRi;Fb*$&)lEh3XvhM2lu%HscL$lV|VK3O7n(FXPWgv;OI7`3A=(A~cu&#jEX|2kOeN5c!70-9pUXq1PRscgc%Qz zIYJSu6uY&_B%UXDGLg8bfpJ8{cAi$lWo`WelJsG%wdWK3#vjOsukE<#;y{uT`3LEUL3@DDH_BCbjk8fvQO`M9bvP}fa#c!98 zd%||3;)6ofFv*Fr^h=;{r54r6ApjWTXgoXXVl8UWYDQh4Z5D}e7LURw%3k;iyvij3 zz~RHwn5;c?NWp)$UP8PqA=gthbOHl>Ooa9rt;dXtao+^(dKm?V`52RJqEjT!g?Pvf z(MLIXOavIQBYZ!sa4XM*qa>yTn$+vETH>(65e96-k)>Vk?z7KEsV96a;jhII$!-bb zgc*cTuHm$Bi7s;qC=V-ukc+N&QG6BD!W0Q`0!9siZKJ3?4;~=*S1yQd9gr?{_(Ih0 zCFkmi4|90MAe89MfjI<7jUrj5xrWHfb#@~uD5?}i9>k40{!hR}a-TFoFM)d_vnTQ1 zLG*&eYRKS+2_{!Up9gNGQ;NJ%VO_pMM+t-E7jeKvqYpV9TwI9hGjTie&0x;a@w#=D8V3$Etodiph1$FNI!8(n$6c@nd#Nw$t zKX^`GIV7Kh^NbjtihJOpM)=j;-FKOZFBxlvx$~YXr^>ijp+x z;s{F}R&CM14mY*tHM+)lxKrsG*+d#NVC$Gh%;Ch0C$$`u4GPCyEQyt(F{dbGik$Q; z)^B&vfsxlXRJrkN=Mxty)OHH!6Un3engbw%r-H~Nb45|U8!!uB;{y!kdhs{#Vy?Ar zM{8Sv0}R@NW0zc^1B@c>4M2ZUx5dM~B6;R9Av2Yh3reADF-5(tjMypqCFnAK)i4dhflz5tJ{oY6ftl)c{xBRFT&BF%@vf~ zK?7ID4-Cu!{xNNztTH%p^1q%f-6j&c$QS}`_kq^rrY5;pu46F=ESRC^Z*TM8aZ9*j z%tcv&R{2^aj#|O*qJv}{5!uPcx%E!mCky-+*p_cg2P0lq;tXRLiYWUKvkHwY=mpqV z!@34;kXL!0R3s)_0gr~jk4mS~Tc#`<4EN%O;7u#{2?rf!irHFREfC&loX5osDzNvY zk-;o026Fm14fQQYBhMLhHLU;`NcgKDKvhIpzx?3=go|GowVJNoVV?vP0Y&!bgDrkP zq}7biITBTX&#cU1z{jLe3;zHFoAgQ7|F?H6t#MY-u|8-A5kwb?3on_HCUz$Cy}y~H zl}ys01*;e$B9yduzDGMa$qX}zq#!=(#)XKFjpDX;WAPt|i!S^FLZOJ@&aI*g7lP-U zd%wp#lFXFM7fkMfuQQq6*LTl7k9*F!=L+|8&oE$uaoNDyiuMvHC0k-~F&>7n(h+mg zb4{LXJYE9GXd(3pjKmxyHIdW+4kemU;3z=Bq^;ynbfcNc+gt>u%*G0<n4ODGp#X%p}6&m=mY%ew+VA5CE zmez_ga0=A*4!;)Umj*gsLjk?f-UfaEtQ!~c(Cy5+m`$=F3@;&pN{C$u%sTP~pzI<` zRPNLZg5E;@()jh#gE0mNBX{6)Lbl3IgxDu*PQ(OuXN8At)*Bi6?Z16qfCI4u@8kb7 z%mMqa;}|ObHxn2)|J#Fk0EhYfdOUtf0twk-QCew5i!wwpKE@}T5mm_MNtHlic7XwT zX^-I<)Pg$gR+lUWgZ{guw(#K5W@9U|9*4Zq>_+yxK0|X+1gWMnU+_9;H{vAkm~qB^ zWGB3VYf(L5V3ht8rwXHjC61yX>afx2Zp8^#S!+8AeVxJstWDUWbmyng){V(j;XTCu zpeH7pjNG7-`{}L%Y^uFYwWd;GpcMTnovkI1h=uqle1g5S1Aul=WR;{kQ?l78j7Q=g zlL+{+JsNv!1$0i+Yqh0~2-K1d3?YW?5dDn-u5@B0T0JS_KTL7Qk5@DI{q86()S_6G z9_1P8ZpkyMKK&eEat;r+DH zY*i4FQ&>)>E^kh;Id*l|@ZK1~SM!BaVni^q>1lSF*4x>$?EHDAr3S;;3$rX`2tQ2! z@L{vn{|!j_|Jv%sm#$3e5-`f~=K~(m(k>C)LM(`QNmG_&?o7`d9hCCl6`-QyPE?^f4O# z1^QPXmXiNjfRg{m8wThf{weWNz1gZC zSRdoizu^Ctq4Gaw1BR;wj%!wZ&keK+w?iY;L*IAnp|7QZOWBL}an=Wj*Y}?kosvXvC&+~kp zyWB9$(5@TYt0?||G$FqK(GPYe)yIDHZ|ME>uiLJ=|05H)aB+1RK2E^%(3>AT{qysW ze{|*bPk(qz{O`#pb2nG5T<*hLx!l9QizoNonJ2DQe|hiZw}1Ze@4X+N`Q-Mi-`_WK zkFBoME?io{T5GE-`1x#3XIlQ&jP}>v-+p@IsXJfpe0=ZGzwh7qdd>g!#NB^xKJxy{ z-+lJg^!68@-_Curc32Z|%t6wBvo#shAHf*yt(|yeUEC*WHrDhTe$&!oI}JedQH5%QV!5^Dw=NEhTAj1c~;vLk;pP| zXyndD9{vcUai`iQcl3p_`mf3nMD7VqxS!qzySUy zU<4W;|E6sz`JV~wg8u_G0*x>KE!R=@|4cy1|Kl$IlYRT7U_birx&O`7bC?m*QTCrq mAc|<_;-G0Nud=fEDo~(6fdT~z6ev(|)ZjllXJG;W$N&Jo=`1t= literal 6830 zcmV;f8d2pRiwFQ`y^c`;1MNLqY$VxLvq7NkN|XRXA_xWUmYr?4x2xX|+q3q@;~BEE zyR)0jBdcV_GjqG@R(EB(t9q-d?QwP{5{U2tfr$Kp#0M(^Um%bo7NkTWfXIVK6cHsN zLIQ#WAHYXK5U(I{&bha$tE)Y3d)96zyLB|4?ykO%bMJYdd#burK6BzwsZ`pP3ZvIn zlU^&ehJ01Ps!5f_ZS9?yt;2&opte*K|=mk#b`Fkbpv{B1o4xsdZ$LFru6TyiX zf+OkwY8~XiS#4+be=eZtzxBeUOBb)+x^VvD)k|02eav&r)c>`l|JOqLH`?_~|IY(1 zx=!fuJ~O?+zzH*@|3(8P|EA~KPWOc7m?i(!W;><-8?8#_|IG!io1QPWwcOb8vps*n z!yVxVj_0y={1Q1tgY9~5SILM(7}`Zp_$W=8*c zfTBM|fG0J_L+Ssl{%0lcC@niZ!U26ktYhzT)I|i@k*mosaN0os6Pt7 zITG*r=VxF2)RoWu-nakybD#Oze?I%|;=f*57^Ux4-(z?S+5)1yydfNfAxh6`Umu%YZjke z`F`)eKJn^TH-F;OpTE-H`;%{e;M?E%$HJ>0deguB)0dxpy8f?K{a5+te*KF-c_sM6 zA2mMp*;lK-^0q(z*|onv?bT;6o&TwbR=d7xnQc*7;Z3_{S8dB`ckJrQipg6I!G*=^ zwWG{2)BaE7e`_HB^$O8zD=RH#;B$d;^44Rvd_| z0;)Vj{>qK^>79J~i9Jd_wv;`25O&27MsLqfhn0)RB3Y6Is<{gq&Wv;^B{rVX32+G1IKslF>S-tO!lDsTAu42{k;^-M zAs>o@qZFAh)MHSh$E3he`lJBqB~2@#el>!g0jg{?)aW6b#$Bc_zWd_UTjwucR+1;@ zrcUhf$F-ceE6f8MExufRLSKBBeqURAO*(Bt{>Kv>o9rXZkpF5cUH?(TX98vNKMyz# z`9~AK1ri1F)Y)S?Iux>zE=AgN!Jzxy5n5|$@kw+%TUvh*9vFc9h#n925yhnRK2Tr4 z5D(B8N6{BB%6=N-r1V8XqCrXH82i}{-4437D^35AdrR9wqh0^k3 zd14uB>_)Xb%okv|E}+1Smjb5WT!f)@P=8gO-Mhzx*@LZ;*ETljvPLEZP>ZoE>qD3SgH1S7}bkf4!0Ue{+FD$-nLS3ok*jou z`qIEMb8_}LXpkZL6`bKUjLcjs^=wIM*bxw6%IC{k;G12ffrmUmiyZluwhU^bM^n)%_;vci~r{XhmHSLfT;BJ z!~=s#Rbj&2+d*{(G1#EPLZ7?A5aOrcpSBz^Z!}>?_A)p@((iS*n4bOMS{HJjp%wO%7cMl1_N~VzFSWKj;e(w zMBxaT{9&9$J0O#vY;;_i{D*@n`9J>j&n)?`SDLly{C_6@bAjWO|5@h%t~UW`yw72Y1IX)TUtFJliN+VyEnm`h8a0c)Y5?w62!p zUGBI+xQ?@T^1T3}^F9wT?2ZaQfF#1D69m5FIo5u7oJBtq zvkG(|BnHxgbOaIIvgG+g>X#?jivk#D*!R@2jLl7zv6SaIz$9)+O9Gb^xP)p|fTLvV z0Nh#N4~U4N8)h{DL%=eSY#2Iy%w+=UuY(SsSg6h(TW30MkcVLefL#1etibuqaj zQ7dUVc~m0lO&n?%CO3O{0%9Ps4A1TF!F&7;tA}9s);F2)A+{K?G9IC@=eBNbKKI=E z7OvW`SpGUQKD>RSk}v2=MC9?#1>g7lHMR+QWFR$;JoK7m5;{06>9SMQl@5YTkQ|l8$As+XU$4;mm;<$?F zN6&vp3e!w6rDIYWMiy+nE@8_5^F@aT$D00`;r~_fXUm-3sFLMcd-_AkiVd-d=S=ML3>PEhgE0rA!5!!&Sls$BdchNuHRrxo$FW%5GS@d(g(%GQATpzHt zumW!&{H}DA@_0y)k1(TM?20f2ZW2_vC1+2cPDdSJeS=SS%B8xR$Im+_8+sHk^-k{_4 z9TRxXCU^TbyLV5SvkE&42%{YZPC#sdoc?GSj*+%RD9ssp;b{EmCkgdMnn8yyS^|Nm zo+>XFwA|UV8onGng)EjXQEL%!6P@4Z(ZCC7+6C`NjEa6=f_9UP0^L0H$%g1K%5xz+ zV|{FFvjK0+2s$svIz{XWS>0N>Mw0o%}K88403nW|CIpZD+xzZYSo znk9-;FoFow9QFvO7&Di|@+l2A0tFhl}QK(7JVHVpUHJy+0K)lJzfM(K9U z7vMMQixXo__=kkA?1U1%KQd=wQ$u;oIPi9Gvr6%56a`IUY#9eRVO;;@lP?bO=@9f1 z#EB|;iq;OI=O<=E27iiSa20suxTzEt@D7j zXlR6bfZLT55(Vgttvnu`Ohq44`u{RQ(3_LR85 zUM_B4e)s#XSGLcp>w}<+JG>mVz~gHf>W^1HW+s|4(h6%gTwM*b^v(q81sHI^hbX?e zT>0kG^@_2|4SV~E0xM(t+!9!>^$k`n;HUc#)k3VeRKDSsiweE!HhqQBB;qI_LSjqt zkf|}3O3Q^sIdJZ}9C@)u>)Uti+IFEJ#{r&LdW_Uiz!nquzf2Pv8?a0FRa0t93~3-`6D);fzOsBWt*q-OA!AL~CoiIP68ZzjVdVkB+h zHG-xkO}b2Xaa(jDGPi<#t$B~{2r75b#zr=g2Jyu%rV&awu%MvUM%my&Fv8#QRHCt_ zX>6Ij;F=_K4pT6EeVHWWy|q}iMR0pLqYJU zK7kkWpm}4hZNeU4(FQnn$r)l~aB3N0TR>A)?jeI`S4f%Zj2uu3V~gp?5@pXvEU>@e ze&0cz4V=jDh@gm>1hG4XkqOcm%5){}3wby+0NGY&7}Y38$Whi3OKSsC_TVBqvz(K~4+x8-8O)@pfwUUm-9FSxN+1u=4 zl7@1ev?QD{;-aG5R&`qxZLQ>Y*+4Ol%P$i&3RrZ(4g%I_NM`#MVWb!66$E z<#8~B0_?q1Ent=fvpgwILw!rzNHs%aO)C)w622bcmOl(YNc@6uG<2+(eG*vs z9NC{bn|;BtCMk+@)K8n0T7jFLqVf}1e3R-E!7U%Roc+B?-k1i4SW^j zoH&_90?eqI{t|8xFgqsET#%V!%5$RL`v^9KSIIR3XYIvSRINZ#gG3_QbYJv&I8GPK zm2j*WlXc=zUJIp(x{q}s_;gM}-Pj|ardJ|YR6DCYO*J_xkHkbv;41X^Fc^oN0cHnL zcnUx}h^tgMh8b$&L#b-UTd6%K!hFE`XfL=*&BujlVA!CKXBfuJKgIOaqpbYI=ymEn zw!#Y>dg5P)ZSLEsoVvD8o5WT8Ghwv&kDZ%tSx)?o;l@Lf&M19UtAKP(B zVr7xz{!*vSguLn0z|b!16to-G;`H9%T7BCCO`jjC9rw665Px72uX z`T#;q%pPnO)xin4>pt%a?cCJFSJ6NZh9l4ipt_NX_YG%m%H5sF z@Qm~ST0Ncrh4;)jiYMnt!?Bv~mSEGKQ!07P@xK&scplB2oQP_?jgz*Cxm^X@!zV$6|vilIC1Zz6x zy76HOunrj?Ow>eBk{eudD>;?Gp@t*sr6-Po>GW3>W*A@*7o-=PxD&BBaR5LO6lEo; zkFJJ|%J>!S0e2*}%17gDo(SALE^MfBMBtVTu!I1@A^MC5+-NIf?nxy7VT*k$=4NhL z!C`KpEK064smd$}oqnG@am$f$XcYYUKrYby>M0d?S7j+qD%XmOb;>C#AHP^2XCswH za!MV3hZ%qX-X2+AU}f+;%QqL;LV2N#4ruviOuRC<LnkN0B&-_{m#5+lIu@yFRB@!Jzmu=RCTNg%`6 za)Bih;iq|j=xM9f?-`h||HohYPcXy&w=4B}`uw+6%bx!;7dWi_@AN(MPQXSkcfqli zu{H0iL?WtgP%7Ph+<@dAU&EHxWnW-!>g2??0#h0l{IXJF zQW_3J-hNmx#InBf)O3XTdKD1!6->*LahRs zS28Vduq=E)2SrmdB9GDK-HY(Prfc#BMtEP>qmEa&Ey6wdunt+ZNT+iu=c=>qvn*M3 zcb@hG>oo|M=x$GynTqQ#5RH6)H1K3XSa61tkaW5bRbQVRveQ>u!e!G@&FxE z(5AS3R_|onf|h2`1A3>MPRtF$d$@_Aq3RfGhFKlshE)73O9=6x(e;u+o2JTu@e+&} zJxZhcQa*8eM54W3h&<{AOe9&wXhP~to1Gi~ zH1u*&E)I4%w*dChm@trVG3Y`3dn-~{i!ZBp3k%~h@KiQgPMwgIiHhoIk+}pxF|13^ zT4ak8vlgSXxe41q>Cl*0B)yX(UxQu9<3^#418u{Bn~Z>M=jE;MXm*pO#CYog@1mJK|VwVVwBkaLUQpxJCNgh{DLA(Qz!5K>< zu!_Ez*1Xi<0Qzl3-UCmZMZY!@M%eGeY3W5wS(&5o+i~G5J*o75hj^>P*sa>X!+ydv z)$cggni};rEqYnvyXo%H2_-{K4PI2BikW!w`cnmMLOD@zLk4#Z^dFvoyJV0sFDD}( zd5mk1g$@&>*kV$hOYCCgQkL$g)X7s+`*PZ$X$Bc&kU<6+WRO7y8Dx+_1{q|KK?WIQ ckU<6+WRO7y8Dx+_21kJZ2Ui64?EuIC0HGd{8UO$Q