From 900ba306bc38afee3232ddd024ea78320f4e3c7d Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Wed, 22 Jun 2011 12:09:53 +0400 Subject: [PATCH] Eliminated Pair. --- .../inspectionProfiles/profiles_settings.xml | 11 +- jps/.idea/libraries/Javac2.xml | 8 +- jps/.idea/misc.xml | 3 - jps/.idea/scopes/scope_settings.xml | 5 + jps/lib/javac2-all.jar | Bin 500028 -> 514601 bytes jps/src/org/jetbrains/ether/Pair.java | 18 + .../ether/dependencyView/ClassRepr.java | 21 +- .../dependencyView/ClassfileAnalyzer.java | 12 +- .../ether/dependencyView/Difference.java | 2 +- .../ether/dependencyView/Mappings.java | 2 +- .../jps/builders/StandardBuilders.groovy | 634 +++++++++--------- .../javacApi/Java16ApiCompiler.groovy | 177 +++-- .../javacApi/OptimizedFileManager.java | 4 +- 13 files changed, 466 insertions(+), 431 deletions(-) create mode 100644 jps/.idea/scopes/scope_settings.xml create mode 100644 jps/src/org/jetbrains/ether/Pair.java diff --git a/jps/.idea/inspectionProfiles/profiles_settings.xml b/jps/.idea/inspectionProfiles/profiles_settings.xml index 9ae8684e375e..24c0574ce220 100644 --- a/jps/.idea/inspectionProfiles/profiles_settings.xml +++ b/jps/.idea/inspectionProfiles/profiles_settings.xml @@ -1,11 +1,12 @@ - + - - - - + + + + + \ No newline at end of file diff --git a/jps/.idea/libraries/Javac2.xml b/jps/.idea/libraries/Javac2.xml index bdf5e5bfa822..d478577bdeea 100644 --- a/jps/.idea/libraries/Javac2.xml +++ b/jps/.idea/libraries/Javac2.xml @@ -1,15 +1,11 @@ - - - - - + - + \ No newline at end of file diff --git a/jps/.idea/misc.xml b/jps/.idea/misc.xml index 1c91dd1a2eb5..513d1dec1c76 100644 --- a/jps/.idea/misc.xml +++ b/jps/.idea/misc.xml @@ -1,8 +1,5 @@ - - diff --git a/jps/.idea/scopes/scope_settings.xml b/jps/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000000..922003b8433b --- /dev/null +++ b/jps/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/jps/lib/javac2-all.jar b/jps/lib/javac2-all.jar index 7b4c10aa3eaa49c33791cdb90f0ca7bc5185897c..5f7f2ae671cb2ea77837b41240e6aef4764d4fa5 100644 GIT binary patch delta 67631 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

^z^!ikP)otZT~oIzXp@fE0Ws^LH<--j z3cslvG#_MUkT|M1#A_jnN|>ull(7pn7!h*b zBK*mU8fbaf%gQ9qLY3AuX4-D*LaIX5q^wjDCm(*XcBoirh=Kzy>(dh)b)J6@Sock3 z%5B8DNk1=h$P)qhKb<1-vohQP*`w>OQvC_3T^Z1zepa&luNj#o<#*3-^U| zNJ2iwF_<@bNoQgVlR}@@2v)}uw5cSSw5)nzPo>J(rosB6RHsG>4jWCmRRvgY;Qq{|%NR$==MPcx6 zLXX8mx!aOnjzD9fQ>>I{#ndhsabiA{yLQJ)om+}^CJO*x^4EUYY=@^#?%iG^o|jP6 zZK1<0F)|CL4#wqGRW?AqeXdkB!_U9S@yHGwo}o4}BX_>kXrAfnh2`%#o zyU;9XKpE{SeMhA2%RMv>zNTn-#%$In1K~MTi+%uAqS;5u6v)Za`izf22 zH#9t%F8T@Dg-&XPaeMh!(2Q>bJ{#tA2ua}#W$MSeal%x*nQ*;xH_t|gNDFUF7*rI89%^O zrq96hq$AksneNr$pNZw!Et*%OCg=~w-qtT5tBp}onI-7+F+L>00-sWN`t zr$)paV9R4nOH*Xv4*0gpC;r?~Yn-5fAPHUK+Xx@Geb({W=`+SlribAh&qT9~B zB?iqqh8ISUijy#&1`U;t=V1HKPzOg4`*PA-{L<tSn3a+aSap1Q}5T37{>{=8opTdV%n6srIPq(nt}2IH|gfqaUAJtLL;k%WaZc zLLU+1&lsH&qV?G3^2PLeHux1;l2>}T=&Gk2hzl25P$XG4;S)n<7nbMKFjg5HpfE)>#qMA(yb6tz=e# z!p+jCNwc07E-iTDPYtt2g^*&e@#OwZsH#$~3%k?LKo_4}iM(~Q>Q!wp{u2{PteCh% z$O+xfQoAr5LJ8MGuLd=Y_VGfMqt2i!in?P^LHY$?Lq==xH@o2hndM#!tL<9Qh_|RYs#z+|+`P;jGqq!N zzj6lOLdH6Y^q5P`UA4Kraf)|*7582WC$y)~W%$v{RMx|mOl!k!xl|!BlT~`T!#oPC zg8l#imNvl#1C^&I>)(QrkL?uz1qQW9A8^I{o*E_yc{Yoi4>0`=@_{*n>5chU$^__j zd_)_*%|FV8FTX4;(4b3v$|EfJKHx^&u_C8V(A|&=f;=g$*VqQ)9wePQ!*^@Lv@?wJ zREzIA8+%)a}eQ8G}dYz|}E zV|X-~peBS@9n5O%BlkoQh4rw|&nfi>OoXYZ$~$L&kQUp0vywQyB%vWz#Qwg{6Q!@H z6mFj}M^Xs*;U-|`1jq>T6Zn6R2fL**W5p?ffJ6*|fF%B{tbZGwNf5jE|Fsy%lg_0O z0KaG;K_L+n;edz2ffEpafeHl%E8ne=;AqIW9o~S4Q{e9fJfo-NKd-1Xglq9v)Ju-x-xdBx^5?7!d`D6{GlGef-{!C z-+gN7k1DDjYo_g=W*$Jht9)|>_@3E40GH*8sDJ2RRy|HU%2)9oAR5d*K%R$PZwwqN z*w0GfVF(7wn{yRZ`>vnCRy#nR0Pb~sc|Vi`h1l-GW5U76ghjl)_tx8&TaYMmT8J>k z1W&f~a6(+nQ}(c)mk$_iI1N%h1p-N6Hjv%O;56}(25Lo+&T)!xe){SKh1hrn*;o1g0HUdrw=3t4T|w(7@!OEWd@zM`&lPc#E8diWZ72W zjR`h^zX*fW#~u5Cww*W)2w)FZJRo4_X%|u=QbHLn&sw+o7bU_9z3>Lk0QlFDZU^Tc zp(n09(F(b`S{w7=O&`Fn{0jxQ0{enTHvEJ%;nhlL-@?XSN0ESU6z?CZrdak(nM%s}g zL{qhv1U=A!ipsEq5)y2M=w;X=k3(Q>4r(=JY?d`?PQi=X9D*sEDw?{jxxd>{@3Z`K zpVIWYoVis5NhN#(bX~QNsdi~muZykH#bYB>Hi+e>0dKC9Y#~vK3<##&o=jHBID-93 z(ge!6<&r0mAQN^wWdoW!QeLw*p1Dyl7HBq3w>doqX}+;)nSUbL@!!+9h8hO;EsPk- z*K0QdO#xZ|5e8hr5<%G{Aqhl1t=Rk?2 z3>RX@ggqN-B@beZa$cwI%cC63$je)^GhsBrdr2&2td2+Z4QL$2F9IXwoSz|4k{$+4 zgo^=1Q%+nHQOd6e9XgRVI#+LD$dPYeYe_@K z1){g17*Yg@0gM@rYVFf9&^~Z{i;uHsNXaRsjDJN_yY_86#NpipdK-80=ep}V$aIpw z+6Cy}rQXEdXH9*cd^GpjAm-ORdRsH0IB+m~XQRC+=B`GdEbLrBNx*v4 z^(CR^k9iQ~Gq6Uq<#4$W(Q}2A?fK)q3@$?c-Ij^SwP@<`9sy3;2OT*&#SE49ZnIcO zPxU!D0F;8u&q@LN;)Y$_(eTJ4Y4-Okv9C+V8+B(i=#zN>>zM?mmDfeWjAWMHY3wIs z^}^ON9PTRdR9ii*ESJObI0+M|o={?5(MKXot(V2}18G1`hIDbXd; znnD`G{{{jy4QAbuGmYZQ*7t3KA~)^H)YgVB0rvgf^XbsOVQ-a2P#kCf=8{2lArOvy zBOroP<4sG-U^lhk-Vvth{Nf{0B|EBs-aP%3Z%|pe+1)diSK9&^%!61RaVkpQfeTwqZ7TII>CX%mjq5O`TZZ>_iG z2za&5b6TwM1JmDxwC*i%k(I@%EscqjZ5(iKVxCTq<>M@NG5GlXMlbw^04dzzU;u+# zI+P_73?PshyXmV?Zd3Zc6%c3|L_&pxNiuTANa_ql55cw|0u^z_*w_B6IdwE|BuGpJ2=#%%-Ap~Z#>lC z5fm>6OCIe|PtwgT?<|W4#4n?{0e&lSF-BA*bjf>4XP3wbr|-}%isoL72+VcH%9i(R zp};2ij@+lmGVqLaZRxLTbc=N=;LgKF3h7>?{q?f)0E3x{Hhm;_VCy{rXyb^U4y{D% z@a@yk7}8|LDCnRN?k41&rw0NR(&OB#-J zIls%ceKA+UP1x!Ui(U78_%@AbF2{*OUjnu2w)$LdgwqpHo8wB^hC)27sMPj|CIlr_ zTE>TI^3l@P?oC?y{O;MTll_>othjVysVPtnH$Q-{OVZahv?mX08V=9nWA>IQaQHLjI@`hTZ(x@Ec7F<4>ocEFA1)aoyga1KjAn75=KtxA(;xI?BCjf!30|+cKndi}wYlJ#M z7CbmRm#s58$9L1)enB9ih#3)X^sx(Wr=3OK-Xw)w=;8=tBzM8t8VOBoZL46qbOI@mnjK9XDAYxcQVMM`hM zY1xD8NY&Y^HQa(z$n+)-K(-sqBI;**pF`PyyGj{H{;-hmQ=Xi)emEqXe`zshX5JEP zS4}HM?^=%KKMjEZ$5F2(lh;48EO%D-zA(<5k6@hH*#1@3?2|Q}Is2hoAOmSUVA9kgL;1l%st> zeH9f@p(dJ80SGmAqn(8`Q|t82&>=BbyNqIUEgNyS(Gk#gjH}!chLO;T>7eTUox80& z-H4E90F`^ygC4czzNhTQN7n_Ati%9XqJhISG>d_Y>J1E z@D;DK6+g=$?9Nl|yq1zz5>a3U3vZ8lkb1 zEMa@F<~XU6mlG}WVN&`cRF&=;K^7_GbMS1oe=8Z~Z;11PrYQEV#)r6;7~(ZYNqP2~$1uumP`M2KNySHYLI6x}SR#0=RcKR|+@ zB_J46KvMB_aWgD}EDCc;^m*gF1D#O=EH9j`&|XaB(cKYOGZK?16q#@ICcbfPp&>e~ z4xUj*7cENW5b4?jAJ0BoYgocJscPM{e%}_Q2uUVNorcCSyq?EBYfNqcP`ays>iB_6 zB>p%nyZ7&1QN4jA!=g>12V0|Gjd*jpfNL56F>t)F%z{oFJCBU>a*&#%P~h&lUKGbX zSt-M8^b3!9(qtCoXk1;BA5{E;+sPejq5J`6J_L1NDfN8pg zD=HMWs*yiNk^^R{Wui2V5yw+=>$!&a*pW*nX(m!-mZj7&)=bkZTy|(>v(6{`J!^`%Nz(q5W9I8PUmg+YAVwdV0#8!xrAA^eC))~-}_QyDSzqJ}Lg zd5a1^i2eG!_+dQWd|Y3m+s}(r{7p45{?Xr{J3?NYO6m zr(CYQ^%P+sZbA!`ke;%zalFtH7n;JbSIB$R>=MvIFtM$JNVc@AdCH5g@w=x=IudC1 ztbO>McAimAn}3V?sgo?Sv}5HBgNn^ zUau=X?!Rm?>t;0?xJW-30IxGYxv;TXBWeupA^PDUw+DJEVcTKnD0D1l{CQ@4)ilhF z3ycLpEM|aK1fr*wXy+CwzA?^{s0D>&G_Ds%{#>pGuYLT=J$DL(FoA5S$?GWB&1Z>6@`E z)t-^yJfmV?X8O>mU-f35C?opeFZ`(uF+7XHgvM)urk}V1z@f;C;cp|W${*+-@vz`9 zt_+CT@VBut-JX%?%31=z^`{i;)8hOtG+L+NglY?L@2DdR1WOuKm~mkw2CB$a0-sP*tPNNBIl z4jp)EnpC0#$ZskNUJ^;{*SSpS*SS@>Ony6=+dGi$hI5+mYmE6?KJ`c3&BflD4OO4U zV_iIvs)BJNn%)k{r$FCy1?!NF!M1VtSk-I9;@J3;Q}^28=oEA~R}#SbQPkL^Qh zPHb$mvaa6?p{ariXD3+hk7yo4KD*EuK`l&nG}M{_3Z#8meQfgqn5B!llM%k6fnq)>)5ib-gS z%=Alu5_QtkODF6yWpR>a!o$SLqgqmnhZS$(PnT%L2+iyR|3)ZcOCuyr&joWtbWIx_ zpK`e{nu00qnZ!n@43#+K%2f7#+*9Oe&!CR@lPUtg+mK!V+jPggllaFYAE`g4SVDe* zb0vIym|O}*`6h6&vn-HXk<7Fzaw}-v|I`@(0~NVRzaZGDy!@=b)ciLzw9Fc_X?5hU z8vO`~t8_WUV~0l|Mse_ja?)>Na%D}bwDo&`otnHTOyM2G-I!zdFNQi_5@NHm@sueW zG(5XF)4DNcm#bCX#%-URRaAB2@y4^GAy5y_OVm9Hz1rfN>Gt2!J#yUSFH~jjq z_JtjyyTsVz5nT$p#1m0(wWt_0I$Z+*LU!wIyNK2qsoVD4Hff;+AW=gpy`bV=>0{GB zy_3YpUN&B?DO+=R?Rf`5yxmhfH?Ko3C}ku|1G*K&W-Ev#cnS=Kb_OrybWGa=P_--@$BF1 za%`NkKw}1{Ur>Y%Qm!$p#HfU~3V#tai^Y(X74X!1;lo7Fl+nW2Dpc?N6Wmp}OJxeF z+9$;^D9JyiCD>U}s(b|WF-Q8ByG9Jgv@fgG5FT+K1pT(W1^9}8;}6f%K0$P69wEs- zl=oyr5NBMU(iBh=lw30?{(`&$B*rmzj=I(z8dkv)qrU9 zb9gCGT;EsA&$eds7;aL(t{>z71^w$)s0K%|Ra^f+*-)?5oHf(mb(m;UoFdyZhm8P? zz(}EX%Trd-WJ{@9iaUyNdCKKGF=jrAb6I8Kx@}A!@i9r}UDC^_aJ}COsD+%B^5rYa ze*q;#0Zj+$liK~4Z_^6=;Y;pWe6zP)eg%4_eY>?-ZbbpF`X>DBw8#E2rO)>Pe*=K{ zI|*XS_2!l6V+5#dIXgSK4~FBaQ=1%L1u;@<8E)BKM6*3Q9odb|Vs+q<-5ik~IX`7c zCRtL+1RkPY>U>j!YvpPKz?zzpAu4!bX`cSFGYpOzguO~GAy}N~8?gBN;=FT5J{3tf z3V%eJ-#F_eG9PpFluKH?lCcaK$nM%^pdGc`fm_@(IKj_HwL(yMP_}T?dg&tyHXA!y zQ3?jB>zcc0IypM#fhXQDP{o|F;(TzEIZ_?^HaUZ{D<_JHE%}iG6lg(dAZ?3*EyaH; zH1jMWSE@?CCs#ISYLP8#3DY)Oc^c9dmtV({^Z@A#(7z>$^%AlAfS~MaYdv$PBkT%u zeujA{zgXCC=K0-gnI(E`6e$YgbtuD>V3w8V{yuNS_Zc}FT$&uPcPL>EHr$5CJdxVW z$HuB@a#kJOm*S2CU{4#2i0fKrsW=PhZGctIQ;!afa+$E}Br^|{uLvpB?c9pm3KWpP(-4&=BsBFq|H~ zCL!B(;YClGMf!i71;AB5DR(b?Phl!5vde`KJC_^s69q z^`}c}op2GCIy66Bxqn-SU1np`mzT+gZ*X57V?GdT?}FAa#ZN&F0hIKELu5%U5wth% zoSxNp9fYv59@Yq5;&wJpneam3)N_`A4G;j*(QInA+M9J@V^)sY;5vlkq{9m;(>TLt z_wiU5%i(WEaeWax4?4>$luWP{ruyKNRj(|Zy29h zsJ);q{ijDG$aZ0#6DhJ%+sB|i{zZlqu^~27WK~lkMlSuxQ$dXmJby-fI55Zoea9S7 zH3Q=g+_^xVbwC3i$X$UUcj$5E=xwC9Ol8w#n{L0{AhY)2F1`x4ZpnC5|w=E!B6AQq<6q4R1MGcZL#gpOJ`FRqy> zrPJPZy##3B8x8`P5Gcb6?`iFT#vI37^RqFiWsYCsiLnia^#w&j>6T{}_%Z{E>7to@ zXik#cmZ6R(hzB4upycRDEoOp*GohaU(5%Bs3u`=(Mp%DF!RnAEBX+CqG7BQi&wNnV z$ZpI9W2x1f{$+xijr?L6C9V&(4b}oV4qZd){l9ZeG#uz`>C|mweW|kmBDmHzOkpB7 z!Uy$tzjPQdVb1+UIz9TbhT7n01Nk(dKpYrx!=x>YslyMM9QK_WRu(OSs0(n_1NM5E z@?9;2OQ)L%Gbyp1^F|KL){?w|qF`jDjIxEzyAeif`dnyihdt%7x_w+=UJOXj*SCIw zKr5$*y45dbAdi^JoUw!f9FO4{u3a*VW?Udg#Liy!&#ATUqg{BYqgf+ye8U`@Gbi|C zLN@NM(9eD!=EXkW8^sr73o~hilZA!iXxB&d%)lHD;{wL>p{MCmj~0Fz^Q)H+LwzyH zD84ysMf-1ss$-NM9VzLIUcwPrh5jx5MSXj5;zw3rfo0RsxACh8kWKj@xrIKW4Q(r@ zjcLzpyCJwA5cVfTCed&k_$!;z)&rvms9n4uL#-#RNGsSeHu1`jDFmV-B^CiCF~l*A zI;f?Wn>?*YyS^IC?4%)0VaEY-!ANUuQY*g#UR{p*rmQ${dnEIWEfWRrBESq&I?T(z zJ^23IOyc-fpK*%|P+iParka3%R9$7NZ=lNuXMf}Gh}4X()$IC2RFJ1^`{;O{_HSmLn1kUvt@QkVe% zVw;u-&iJt3j})EaL+2vIenNB+m2unh+Bqui)e8T+$sc>Jb+#F^Rl z`1h=HBo%HL07-n5!@>xX+AtuFtkDC_3jTbFweY1zyrOB~8queSL|{N=_kC1oE3XhJJOrKp7~*^PJe??IrLMJ|0Q_orC5ZU`DG-2o z+b31@(5eB=H-70M4g<`t%-ReW7gNq-dPQ8&#|YbJ=;sB*b#0qvz$HPtZrn-gDPAx$ z#RA^E<*3g_CSt2#{bDkm4AuFx6$-jlm5d1l0CukT1!^-=&2ZI1OgFiLglPsQYUv@B z`1K0;%Lr=61lg2?2H8^VpoOtAI%eXeBDYj&&-npTkWZO*p+a6=c9D_>xChL4{PaDk z8G(QwC-^qur%OKa4d~&Xo&keDFy%;8?-TRl9_21cOZW{-bP13s1;79J9;_Tm@$^&( zpgP#zs>9TR@{)sRc{3?i-1=al|@+q2SL3SE24>Wjdq~>7a?9nF)0+Zjf0)+tR7sS)qWnpez zXlbwqjRxuJ>lvECYOimamPi;0Y1l%BMLUPkbDJ7ElNOUogNKg|?;CXwta4dOJC&D` z%z}rX4IK~Z>T}5YPq%Z*b6MDF?BJp{-6J|Z7EreFGIN`FXl~RZ+v3P|S8^oJBw+>% zMP@my{halEP-Ky zYzl~H&kc%I*&3y<*pW68*NfGx#pzm82H#2NlMYgaBcg%N$1oDx?vKf}ln?rU3l!wRX)d)7M zB3gE0n@oBwtlgTL85aTt8&r9ybBp?tiEq&$RFUuFF)85{q09%_@4QuiHjdpm=F>Y- zLL*Kqj`NT1NmDe68TLf?)Ov6v$;(ZL@UfSNVO}ei0+d4eBlV*&T&@_E!t4padP|nh zxC3`@2~mE8&j%6WgZKvkCPob+1le>XHppacD#Zd(b$!GG;Js*WZ$S=yuZ0+eXF~|= z5?n(v>-tlP6~)9->BEyc`C-FV-b0rvf0Tu4qFi}Gv@11QF|=45jyY+) zhkmzFBcj{i$GKYoph;)sqh2!!X=g2Y33gzj5G?AzUYuTo%_xrbMv8uEI~^H?)tj$n z7W{5k?|6&%y|SmB)BbuNdQ%;(ctDVml9Q--_)3Q2k)ZBtF~b~z5qC%wTO2Oy(6I-q@i+OFi<*6J7* zB3$p#hUG=89;yr5=SQphNP7mtwIsF!#82$PM)zgzd7EuiLQf0}-Viutp-`CyQZG&V0qGk>xV86mo!Kh2?l1hw{rV*k%Q8qs#)jl;?sO z6$s@+;@=AjJQC>x+y@(D)-u`#bTIP|!E%#BYZ?hx$M>rVi4u9Ue8gRBL7%F{KLop` z0zIt257k^MBL2HVrn=R1kj|=t7K+ad!%#IK5XT&}SZYP^Hp8E^YD7N_X40FKtzAe` z!-fE^MU~3a2H3MLDF?UU*iCpni)4v9>!1>c_CO=*l3RZDKC6IQgElM8aXzt1o|OTv zxD6!$C9L*^{gU0_zO|_!@<@M~l2VU#A?z!hsij%EsKa<&)vaIETR})$tkuw^VOtyU zNQ5ne?iOg{(6jO&5>Jk8PB1p4aF_Ia}VB;U31Cz4t^d$ zfgdVAOnleA1{F3;cSY)!$a*bTmkY(AsEzQQ`Tll3nAUD+NjbX-!11}TN^)~;CWM*7 zI^k&u;Xg7>C%;bcWgSDBUd$BJXHsa~rVS#KKlPrBJe#(bjJ>&utCNN|367TwK?FDv z5C`LiS38w=cq#Z-&=C|edvIo8HO^omH5wDgXyIdB3S!z#nSWRwflrc)Q~hm1yWTY_ zovn|Mm&gr5a!Nijm!kzGd!K9E*UT7}=QIH7q7`=z0YAU1!7cI+NJgi%?MXJim#>`p zSm5wu{!})bbQH5JLTH1VGD27z)&oqCzw|5IgZ7X51;&-_fjav8-&m&0dWvOup#NWN zy#sV6LAM1O+fF97GqG*kwrzf~ZQGjIHYc`|i6^#S?mz#1YrVT(ukK!Fbyrnav%1dN zdspSyJADc5E==UtO62h#{tfZ)YT7R6%?}U3E}4-#n0Li@j8CbLFG4;2aCQ^~4&3&T zK}%BTm15ho9`PkW+_kQ6aXLwJ1>y4QN=F4Yd26pk(tVK_mG+S`jjkLE{c>Tel@-8l zr`S2}%B+^_q99?=Ei?N3x^07e?b68&Y7+(@x^mq%%Bq(RZ3>O);?X}RVx+y8#5g8RUg(3JuT{0(rhZ;;5oedC0&7V?RMMG9oRun_Ku)!=q-#Uwa78-(X&&ejT`v*gs=0H{_VzE+h^5 zptX;<_JQ%OcAe;zk#jC>t`?kS)HADK-a2{dzg=8lPoJbBi&NzCGSePk$6N!je2sq? zD^}7)LhZxNqo=~U^^Hd)ql*+!^Xi>0)~X*>8Zp}hWgSX7#=T}5f?-UEPGlj7y8<*$ zu~liD2Awt3Dv#AogI%JQ;Ahx0XwrUOSKXzH90BcfpOE#03EhBtzQ=*xgc&v_*U4&G z=rXfRqOH=@Tt_$c$1$d>nTb&>gLK_%D_|*7qeX?HXF8Q z3N~gKUkJ_vd25H7LLwZ_HM6Y4B~wZ45II~V9#g6ySgG)d7u<5<=GTCgo;D;Pr`(QL z%TY?UPgTgWA^*uO1M!l|>JkvYlgp^Orf0AV_@PlKoh;HkWPUElk<<%V+>e{AqT*ML zIVX;>O&FQp4A-A4R7d+k)u@tZ_K-1zXJhTDri~q`Ey&Y{`2!O|QN2CrQMS(6GsxnOh*L31D{|#Z|&ksD2g&29`Hppi;!uNB{wQ zxNxf;s$4ls7}ZB@E~Kw11O7sbMJ{cCmU4bzN`*G@qCh&CFQX>V&6A?$m%CE7)~lA* zqT-AqaUF%^=5$4_N5wY5K{tyz^!0y`n<7IH_sid$P&ybOAi4hqFk__sV1~p57^el@O(hh zgmtTFrJ44_(v6Gw%O2KzS}LZbDVjtgiJ1l0ZKJo=)&ef5Y~(;3TliouAB%b+ZWMmH zrL4KhK*5+vYG`(9X{}-IOg2SyR4*uL3)imnJ#|^b%{8SQwoO07H?6O#z>9 z`+NTS%Q>U5bfX_QG^$>?kr3CEq@#j+1*-?TJHYpEO2y2v@w4eC!_NH_O}VHpxRk=o zEGk!qxn)TqBM`y1QhvVFIy+VQV=)FeYwmq)APiXXVr~9>(zfaK_#Z}@oZMGNcu8zJ zN&BDKyx4xBktX$u)PIe{0V?(qDU!Na73G#$aOy&HNq=t2r*Y;BCQg##~#rl&a(1Zc3$LbAZAkxN!v zUQ5(0t`|!zl9XyA=}WCjhT^o+>!F((P82XL;>TW%y55rGAF>3kR}r}Y?aCPGlHy_R zg7Lu^;3mO{@j|g%cIkd8x4Vqcc$d+>&DEeSpbR*O8^E*{dqxZVxJ@j$SQ3Nja8&!< zH~Pz)4;JwPk2)^O7N9rjH7g}NS03$$>70@d-mIzm6RWA4B}pYV#0hR(eyD1o`2o(C zXvGd1k@PI=-tn>iv>IBx4D4-W3#ObgDpIW8h0ZX%)2ZOkXnA+3^J(zdkv&MG8hsX8 zQU?#EViNUHPuGAL;b}aO;Nd}7BT(&W z^QvGvbwO>Zklf*jum-AszDgTIc?bAm$yEJJWmY=6 zKCy2l@c>R6xsIz{qmfHZLLAoeHk(iPy}&L z>XM%G;rOL-J67qOGJ}Kdj58h6J2w0~=Gl>cMHYbMBH3CSM$p@zMfya%2$$^tehBf} z`y@iqfq;}bfq>Zm17T0&YG~cn{?SjnbZ-F4^SGH8~lmndkJGpX{|Zw78pu~i%dvwBUBlWR8B!puF+5Fs*u?5 zjxIq+ir@o85Q0^v2(5s$&*bOFd=+D!xYBxz2}F}_rqSFTN~TJwqpqhR+fD~^O1Y;! zq%W1$m+DUb2&TxBoV(s$KU@Og`7^X1)^C_Djb>DebRI5+0H89d)i=A)wnYq(hep55 zV}x7ei;fl2r#8MiSKUg8pN7dCCS%ZCjCVWPwtBie~U^TJ}vuJL2?lPY4d(M41M&x`BeK-K~u;$wR1Rb#JdrnTQe2k?8%&ec^KOa zMgvjpv@fF<-94K$GIAu)JT#cWX34(jmqqeS--ZdmZ%!0s$~`E zM-6!`1kVR|&dNFl+Jz;{FKDu0<{6~J#!+r9u!g`4f4AG+C!oZO@))#2putM%q&kt6 zp$WrKFjz5vA&uWqCr%$j+uQDg_ZU9SXjUHC*FVMna{rox@+?KoA-9N!={88D9{q{$ z-f*%wQT^gSuiF_iM|^;>PKwFMj8;}y`Ir0u%VcO2NEC(mcY`C+g~9$=v)QU3|17FJ z7Vv+TVX-;%KWnN6`oDYEewo7lhZY3Mxuh)*3Iv4o%@bz(Ppc}=4hhrf+i3#&FVA5Q zHVDH1JUpg}mM56VKtOdQX^fm8`2QZaYYs@rB)neeM&W)68gjOk!oiQ>R*b7<4o}XqyUr0b@}~$@LR|43@7Huxb)T90Xfv4Q_n zeUUP*ALiebDrK;=egwWW6g4hS|QM23Qnz#$j}#m6%n z!wo3TT-G|Dv)FoAZ_;Y6im7rWyWk=!N$Jo|TGnl@J@39;cH1iQt~~FkvToej`RX== zz=~bGD7)zTdL#JeTyuZM`CTkg^va0*06hE3v_cGg@R6V`1PK<+V6s1+Di%=`i~FP# z{0zjxjlk|N4@$Q*%yZMa18-J{yHYUE!w=^i8~LO3qtYa%!o}{-vaO54?@f1mr+DYf zPIm6GVV2%K1?h$Hqs-FRAHcqt zdZLdz$NZJ^yifVMmh;~~dzq=ruNb8%k=yb1<@_fTm*G90|)si_RBI zUFQU^wcW+>Na4fo6{0N_GdWxvP{mWtIh-_LPX$Y}bHv8NFU%TJQky$1q3K)`a#9)B zjJw6qBA<`V@EjZ=i90YBWCb(S(g3N`g_43&^RET|d`Qd#M36Nm-(Gp0AdK)35_8<9 zOe%(AM7GdEMmn@v;Pwn`Ey${^rcf!JKLyQ5*kB{7=X#%cA_&sI`mF1IC>f82m6h?YVjIie{QYdjFaBo$W(V!)>i@g*$e{s$C>fFa@q`l%I?T2l8q67&;=JJXgb7jwnR z!iHUCkuUuOu}K#ARw}=VrsNTBT{zQ=oe~W0CC-Y&(i9BSmL)b%@u-iu*84B!zAAFZ ztRR}Kp_FL_YD*H6^9YgjE@#XEK{|RX^gkFgL+gU#eWOC(GOX-16@Ui)P~~NaG4JHq z_VOIAc&h|<;1l5tqEsHo#v`%!?0oh}2zwL^q}Yo6BOfHm5RIZ>)_Mb^FEbqAis5-GFBD2py=0b^xgXCTE@As6aF$EiEsj4i=7GV#pjL>db;3PN+jJZCU0Ex(9g@ zsfXYYJzfq%mB-U9EgmfH{E&{oR0Bt@i$W}Trb7rNF{&{_l6$@y@ECfuFBOVHxbdb= z7bpIGMERuZIP;(MN#^r6M-J73xG8FJ+o69_)|YVA-trUL82~8IgKX~1TZskP?E3^H zW&*E`UPJ4zZf$(c4-%9(1XxhwMja6`Zt1X)HQiTrndr{;#y`uSEc!Dg;sOma!>_>Z z1En101z`pB6ll$klQi4!g%F!V6R=G9n8qL2E#@1mZYOc?@dv zBCY#RiUX}47XeGAqg(fWUJ8|8kY@QSxy4U!lx#^hSNVtqqXKTM^>sAD{=q zO-V8dKgNo;BddpS^s<0I)Vs!bgkyUI5wY_`Z>@nG-gH3b~S& z4wqKxG%8A%<(3N>v6nj%)O877pqPGPu*MgR9WJw->#QovM4?LC9ju1JA1ki54pQiFJ;kt`?tQpNciH+h_Kt z(BB8wCUP?T!DL<7{=B1)LDb7f8H#;&Lq=aHS3tQ5(;?NG3{x)P$Rw2RoLN`4^oXfF z{Pj3>qK=gz9-(rn5eQ0+9TlhHi-j@HDxn${^?G8IEVKrso~6A+GfwDdyWR8P-gjfe z?p%h`+gPkzZ$-P%q8Yao(s}>ERmxItqP732om{6W-+B_jA>*lq*+UF$B3pEWT6*xs z5125yMD&wkfX)2+edaU$r|T!n>Cf9C>)r5WiJRzy#4GN6QEzQmm#(irh3ceq8%?$J z>>p7oDe5Qs8L?Vcm0PPBg1ak!gywE`L`S~_{9-JTO-MA&Gcn^bwM8xSEBg3FwaS0m z2Pz=ElF_37)c#$bp*DE(>ycaJW+awD;l7!Zcv<#9U@8V20W z;>a>V3t(hC%a#l9<&&v0+5-C@Q7mk=d8EJVCL3!ZOXAoy%n5WHxwG-S2HBA;hDfRI z@FQ^-_58qRHR>MadSB0Qzzwa=or{k-NS$)=7Mjj|vAJdXJvptdbru*9h~<0-<3$|@ z+YaTfL*i8}{6K!aD5XcX@ZD+;6aYr(*?$#`nv@RNn9cX3drAK=hnr#n-|ULDN2YG= z@T6i87TZ^H@q_SE9C?WQaoCVt*yR^%vQ*)?JLN|0s_G_?0Q$y?Hc3ol)ZCvw<074e zAp{AtDpX2#VBNe2RXDe~w>ymyfp6P4-CC4&u;C$n+gWY%Yk^pIe0oEtOBbN#9GJS1 zCO5`Q%02w(02v z6HZ5*D7vIv&qCX1VZ=P$18vd03LvRxe=d@_>W0QL44U6Bo%(88^UQ7(k9rMSvMWB4 zzzh6Z=Ad5!PI42p424L}dI2D1O7hVXZ1C@v4p&Yes{ILr<}HR{qaa8aLA7;D?l}B8faofQ!w~lR2ZO~9go-{sAJWz z4R0ZK6^x5qRJMY{ZMuZp5mWy9xL|N{Yv_5bv!EFY0`OV(F~f6nSnZ--CT`s?&ytt) z!!bxN&l676^xxRDLzeXV(N4!t5s#hxMymBor(I&%((z@Tc@IBZZIStR#|!NaIPtq$ zy0=BqyNy4k61rp9dL6(pXv!uqzzrhs%wE`zIr#o`5^_Z1F=?L9>LnEX(a0z1S=7{i0JFu$CZ&D7$tAVH zO?dVDeG9tMwh}-|P!PK3ILCWrxQ;j(kAs&l233boyd?-(FAX-Pj!_*z-Hf$j?8@J( zzLreX5`NG+WEr$8#JFR0DLY#*#dCN1vs>_Hs@0=|;+jQvHFB+mMUVbPIdr%R)FoJ{ zpRzenU0WHv4Ua*7Hj9RwnMNU4GDgNsZlWmZ9wREl(hvaOnBy;Ekm!^-T(@P^#!-=- z-bB;r6(w0_H|$tH?C1ya;PunG*pX&X=GX8A@?T6T?=r9DPZm|T)wZQCj)xefI+D|U z8Z>+|aq$=QNK%Uv;cz`_$>up#vrX{#z1 zal!YV>=pXMWiw;TVOFj<*M3fa08iW!UTkONq#EY~U5o${tXFiW-y(W>-u=`Y>m!Iu zksRPSt$q4-4=PA4W=<+xIfr;E4m7IP_0AeNQc5^S0Ue9qS8)e)`34*XnXt|$p?Xgw z;SPMu3o%X*%0m$JCr%(!Uf@<ulYJ)6j$CfMs>Lz`|(e#o<1n%46DDH-vxB1xY z3B`#E$|i3b7-yKqUv)J7cX1d;t8BU?WjrG=jnjip!OvbmXsG zw72jYXW$MWY`+1B*}b5CJEHsVeC6*z$AIu8ej(~tY=sBsjvtRbd4A9`pH_uQhhC=W zTh?ljvwuHeF!@N^N8aEtUk#^>$RA=0!VDcTA*?e(Z95~Um&7eaJ#SR?@=qHd#n$_xxO@id96!e*W|)$#eqh2>3~-V5Njp#I4A3} zW7lt`@E9fAD3O$n46E`iTT%m12H*NP^)bVGAk!WCXbng8o3GINJj(r1X2#^3>@P#| ziR>%G@=;)GOFgIMqc9Mz*GTxFO6%P;)HiQzatmsfmyDiOar$TyJ1hCx67`j<%7yXrpY3NV~gq6 z;fAS8cq~L=)#Dq5XB-9q9sEnT#?(}0_%uvj=`Fbi#p-fN-#D$Ddvo@GsC?47g4BWdKC}qyll~V%RH~i?v5U2%Q zs1?N4wkbDG;KU7Wm~DM{)KRr9w%ATB(QFnq@?{$tALlV{o)=I3S;jMPhpn{BF3j?G z2@!GFrVj#{_VO*@#ZD4B(mgg)l9YkO2N5P%*0H>`LmsU^5;|qvh6B&1H6;R%(8kON zvR9YM5od4Wp4M{9G27?r8Q#2kJtT?5X9snWLWbj_4RHt`X~f~glSkdZd61NtO?igr z?gj9_9=m_KK;ORF|98Rz0{hk;NwX3MruvU-c8IVIfBf57R*{x34$K9xbogP8?WdMV zr=9A|Q5H8O<$$N%QphHo$tFiBhf7h|axfCB%`VW8%61E3Nv4(<*CJU^Oy{mlIolKx zjE0jhnU%bL8Ba6{XPyy&9UA~__N;gU$N${V@28k+@7}D12R*)veerbh)_r`3|Mrse z^?nWG&+RBFq|TB8SEU6|lO$a%+RI)qGg)jaJ=wF6QXl9>&8VgqZv?%yp-y`cO04@+ z&O;W4+JJ$0mBmphBIzovVXAO=YO`vBm(0ppdy>^vo>*6{F)h|l)4$W&+56PjcT&*p z?G;8Qfz0lE%Xwm442#41oYdH=zT6q#SW{b#lAH=d`sMiJp$seS-*lg1^AW;cfDE@Njuo zxcdC)J}_CWwX%8)LfOR2G4`t-q9)+cxEO_@tqg&c^;^v9#DLyvJt)DnCR^l;enIX_ z)M_%yA&46O9fAmu(9qfM#&nmsb`yCv=W6N?b8~sFM}rq4JsD+MjMQxKyh@=2q)MPF7Y|`quGBIIAOl74_ zK~bdyCdp7(4PMn;IJ$m}pH*U9G2XnzBXZBu6clXsV0L~3{CG%NIEg6FkU~3teDK{H z#t}U2^AQ-vr4I}?$eEK>yTD)?-5&tMLG=r&X%8@|SVIb%&`2WB$l%M%LrMp{N`r1@ za65^BF`fYifve4)WY4MS@Y9QDTLj?o3wb$n)S9qpT2XjRNtKCs@kdF7js>Bon|zsj z;$V8>>WLbu?y8%VXpQ}FLuoxIux5&pQz@|;InS$eDAD=RP`BEk1I7(Q*i1v*lBG(c zgVtpV{L|c%mwxrxiq3N|RAnY(A-)g^A^wGKrbz*yzT9(L76y{!q>O5&R1PO&Lr1{@ zkLq+vhi@L4SjQVPHs0d4aC1{@(qD-q+xa%-%NsmcNIu?GvrnEK5G#*HdXF@m4Wo(@ zq$RA$s7ZR=P#p;^yLz%^O3g??sr|&R5MT=3EOQ(Pqqs?q8%#(V5+0i;^Hmh+q(2L8 zE6@Q@5X~lA9=ls4++4<=RnH=%R73Nyqj4ZwWax0^%r{Ee=xfcHGG^flpJ@`vMe^NS zI4M!NO*ix#EvA@QNl{H+S4LuEJVr?|8>y|sw~_ey!0Tg9-vtJbSbP%xq%#L8yw}u{ zl35&zdXKHbbsq-b$eYK*e^704?0nGqL01mYF^gN@1`8RA20Vx6h5F5Wbg8JI?Ynzh zD&;CBwHJFb74lW0S=EXt2CSATaSiIs{UWPmBcoVM&sM!%_=1T22{}36F|a+GlD@D# zPkMzw#z!lskP4&ZwU?ysO6&3-& zO@WS+&>UT)J!#59kyLM{0?&E6F=Bs(7(C8P)!`@4o>Twm6W3^Go=;c5!xeHXg7Km1 z0LOvofJWL6>!h|j2is!WD?uN<-7E+_igq_h%vmfS)M;mpLDLW1^}w__zRRN>5U%4{ zbeCx&Qv5yX(B+kv`>ckp!R_G(_|Ij45`hDI_o@tk>ui#D9fG!JSR1BpTU?Lreubqs ztU8fCrVp&{-KrP-1*Wvh3a5(tkK_xLe#E8{Vw;Nc!pPYdl)Xx(J-%EU;W#oM6uVnx z(`)nc-e|l7_$LN~#`ha84|8YQ#eDw{d=FZf+sFJzej{ zbJ}H?C;EfFXOIyb{M=FT%wtCje8oZiBU+b=F+{_;Xx+a?V%<>uIOV85zxLHR{5dZB zNNuUn_u#(lIh1)gjRs$;!Odp?bOW50{hXGAn$E^7-V?LghO~_$cZ^~W9CJKkp9dm$ z&{90(;c`Ej9x!I#JvcM>vI;UN1@AaP?o10`c;?=zZOPZZHNM4Z1u{Es{fpsY)oL2c zq%K(2+%m7B&)nBN17?(?pUB*uG3P}5CqSxEj3Ahecziq~F! zggHHu#gx{$U8na~LqYaN_=3vAMbUO2vsKt0Ss*fAU`2t8h!Bf|Ygx9%uXktn+JuOSj)6FodSY$* zeSpm;9vFik+bd+pmbJYK_(o%xUuzCt9X#Xm$=4!T-@#7BWIa{N`6SeNM4zxZ`2+uA z+`rS1mx99N#H4pb=#GHeCVs;0w9iGNuk+h6dzjjl#(?=)r1`w6ZI4cZ`)IFf;RjB# zds7~KeT&?akJ-zZ4ESq$=9BAcd6MiUf!^#wwA$>i%&nzk9y#X=h&XXeDfEVTSPt96 zy=0SQgxsYYQn1nH2@|Fpag?4yMI8dUErq#JWK?a!rq&9J)>)-qzolN!rj|mP8)aiI z@C)SzZU#CCgdYK?;asAvOjEQDs9$(y(Ib1nQFh9)eK$tv%&QCWlZ)xyP4^5lzDdKy z>NPU{$OJuPU;NSrfV^>^z3?tPL7u%s^jMOaXa0ogEYOB%s2QF^HiHmuSs>atg-0lx z?)gHk0F*9#>jnc3p?~?OqK-yugVg=*9t8WORm09$WkEahLRY0bmTxO|zUn=ujt(XS z$I*x_vy_7?V@>6xuFugl=e!GL46S_eNjv%yYwx{Vzs4Umo9XNt`w9wih1hA(S({L` zaAeQ+?JmCBYB6eM9L(|klBf1O{8GJThzqtq;O=^n@JLxhId`vly3#y<0?)a)$@IN} z#%d^T*PP@RXe?(cQ@dGXL_PXo_}?F*f2xJ86$-$8|KgA!WpR7-@IXKr1VBJc-*HI1 zv_2t7EI^G0w1>(PI-h&uIB60l3UN?r07vBFPiQc-Dv*)CCZs0vgp4?$<46$Z(9EcW z`|Dbm0%(@afjEj_X)2;glISb+%Uae|%{9$6(%RO|>+5P&s@iXP?mOPhp3ucjXKCIu zoL8I9UtgQfX?qy}{&y_oX-px7dUjmen=qpu0YG1GZSju&VbrU)aF0X;JMK*iZOpSb z^BP+>l~OTc+C)q$lMMpMS( zf*DJbKeV|!CbP08xxrGhb=^rhFkmOj9aolISJ)TTVNov8W{CvXD(hPc*0$CZcC_?H z%>abIm8LJ2rfV*xESpY%sd2Qd*MJ~24CFbs5Lywl%gV*P0N32Rq z)zVs>b_J*x44_X}CMAH)*P> zz&I0SQVt)s=$fZ5UrjX#lYA|m2Vtt^5&^EFp1xIPEom$5Y0K^_sw+)Q&Z={FiBwBw zPxI?)gGotLV>q}L2=-{n__*b8kgq{R#hR?m_nyUYjmeFHpcizXcfK)u{yW_HXU*eY zS`PUm1W@Jm6T;igd*Nq|n*_IzZ$W>duU)O?JlRI1D&Gb5DbEnY6mZu114hE_V*m^& zHxClx_$O=0SmEiH3ULf*s4T1;vltJoUc|F!JfM4it0ELf`hginC4ovX$4xXYTyzb} z)O2d)=}gRHLgth#>Qd&^Eb>x^FewrhN(C=Um1-6N$*C|CcyTLYc7JMSFH#$68y7TH z%4Q{9nBpqbEeeux(78mVreS;~#Q-9&%Es0oih_5sE^oBM(YL)3PR~2*SdG#~rwZi~ zQs%H+9oGumWec2B*E)Y#2T~G`md=JS=BkE{maIvqi|BmLaGKGWMpYz^(qG5n$koNv zc2+^g;K&&O7so<++Vv@J4iIfDy=sb=GZbEBZ~*+UE9Davu9&1K6O*T`bHLKsAu8ru zfrDJmi-X>j-~cYz+V7Kx;rp0~4zWX15!BR0Aq5l{AL3wcr0WMSki&#+zuibx``g!7 zBda+*N(--nUt}0JVO}(^D}={v9jkI_NLDrzBN7~o=gBl(V;OS#M`Rc0cOhO5S7^%_ zqYSysze$Ay2Tku)W4+q*eE|79**htJ-O(RCXlZ*h?h0i~XVun6dejf5vZ10gKdt|| zAnU?zj%9l_m58zuDK`kOF*X0%BTc4naJiTxCEIW?&DrWD+KO42#g|oTi0L}LWGBjS zAW;5PE+ijh0ayf4>|QyF!IQ*wrxa1d3Fo^x=QBdoqI`@UzRn)v`T{`O={TSLY}7p_ zlh!eoN~k(0uCyOJ#l@Bobz`k?`#w+FK(U%5NH{R{4){ti+?*1$iWqTi0*{O><4#Tv za{QZjBr)sI)GZp5drD^QsCcVq;g!5Z3c8iNWC{eScnfB?lwMne-iq&aLoQS1m0|Gm zAvL_Tj)LwgXPIvo-vC6r-h;lNKI<mV<@j46`s7CFuJ3B z7+#_Uz*OC#theGzIRl>Yzn2H(9>VJjxn6yl;8xm%RwfngsR2#WQudZF%I+duP@_QK z9hZ|oB9+K^rSBZD^^?CP%6frp810G10K*8BM_ZVpKTiPau09L*i1F#1r}sohn)~qO zD?LJ|$^FL{qixcQ*SQMSx`A?s)eiWBdh+>Os5f`YttmhL)c+>9U3!94eLvaWsRSUyD- zo`n{kIgM`(_aGyvF)e-TmuHqiBRRoua0p6fU8X&E)oZvGTwyYV`@IB?skmE(vp24cek6AFxYFDdmRw zfgW4PMd+^>wS>Kj9JTx}H~>Yzm@H!^t2!n;8 zHU{J5j;AE1P^DbmFDrtl=JAxY3cxh((~``q53~Zw^gOj|jpnUDL;1Xw1XbmqkmO1! z-uUXuKS9Z*Qr3iPDixSY9n>|$>t^MN1c|ySfMvl673D4{NwN-bM#w!^nkHU}8{6{s z4aFC4#di1niN^w`M`O#&V#2MEKRYodJ4L0hJT+Xo5OK8k;I;4A%y<7uX*n}b zw67=6j;kx#6VORSM?tdZYXBRyE9 zFo0U)d-!rISsSTvI;6SgJq9kRtV{Nb^U`A9oKh`4k*F*cP^G}!8a0TYCO9^D?9Zl6 z9?KR%zGFn@Zf>8lDh~1VXB-k~F46NP?fMZ5=r4}zC}kH#O$UyApdBbtthxwH7}hNv zB0@Rj>bj}wvptc;-LZq$tp)S+!0>CaV$8WZI z@a@<3uDxVE_zwVJMaCf^a!6FqPLshNRpi4oZFnr#x!>Z}6FailFPtsi#)?n4V2OqO-_xMS0QAr!N6rN78aU0bacFIN&oLpLS!R z#pa}<+yJ+o0tNFdg&j_O*NZ)cr*sAGfLD(ET=2zr{|;-RMb@MuKIDrnh_m!iFT>9m z7IuEuc$mAIAQl>aTL;?rf}3k=z|=J+&NXJGyDZZ?F_#o=zURIPmnQ8{n!OxUudUN_ zSz-5zzdnq8E>{e2a|Un;w*UMhtPIG0o&+gIk}7S$Azudogm7*=AUgtsUxNY!g%=m8 zhd(Jm1w;a!7ID4~<6M?**{p|K+_Jbf{3?(m#%Tw=EUb+oYC-T)`rw}OJN)73mHk%9 z!8`6No82?$Yn$CO>Z_gIGvmu5$4@z+JNaarog1<`^i+eU{oG@EwA;owDAgY>5SX4gVl#@Y& z@e^WgpbD-;M!h57^#W3PW#GbnWeC zL$6sn4B~WFp_-gwZ#JKsMKY|^h_wVdjC`vAUMh=EA5BU{RS7j~lFHf8K#EM91x507K2B8V(iN^4aZ*NR1lm3B=05YYgptoxdc{;is_Fu#A+`9xJ44)DDuM z=ZHc7Gru+lNPMtTAOOvQdW7HVHl?&!S}ga68GKCMANP5CAdE>{N?-02Zw}wSDbbt0 z5Gc_bzmSZ1aHRvfQerw)2?o&bq@$5>e~ux427E(q^DH;7FipYM^SU&W1t&< zOJgYaBfqKG+O(AiP?fn(?rUt|+BC7aIVMMZ2c4SiI9q)e=0(g|=2mfIm@8QQ5v;eE z%DPLcn(2%OmO4z)^)zd=F~p1kKQd7vnot<@&r{LsB?>uf<9<>w$g+?+h*-=iR?PI} zOe9CuY;YT6wziVtXjyG!u4hok_W0RVv#w*rHMc@Ps!UJcT9^|rr|am?c9>cUTdO?F z+HW<0cl|QM$<39iO|0l@ze`=F*J!ZQyx8|Vw@RbUX|L`fjN1?Y$-uCVBC|^0G;MA^NMqJCJxGHrPZoO_7cBz) zLu8LZ#T9TGeE--?M>hu#PuIxB?h?>B)HNM57YpWbKObR083VaBw9YnlX=Q~XjeT5} zWXYoZS^E321-|G<^XpL)z`dEQQvA(=C*1PnB)mnGaG^mIls$v%6Doeq-O7KWLa3$I zgqpsJmwFqlKMRVHbbT6EM91w9%x}eQ<7VK$gg}&$`!6(LayFyL~?;H;oz#G>M$AE9Al=Q`cA{nS0ZtIz`12DRLB6nY*wq1W zcs#;ZnXAU+)bT}6Gb_$gkfwn?HKDRm$N+7{0dN7ay6D*TsS~=C#N#RP z*-Na2R>-8KI{%VW1l5SlWY`_5K)`@%Lzv@Wh6B1E2C~gJi{ND+Kq1t+=J)w&YOx?U zj*bu7t&X>$%H$G2S1qR))VeT+TgWs7v}myk84xQclgenOXRTA+LWi;i7wrLvE(pD9 zd!e)0A^IJk4fri9$=E#LsAS%|`HT!TsP%(wRI5`f$D~-=OtYoBM5!QI}WuSEyf1O>sh#lzCeJtfz{>+t?YyV>_ zm#QQ@zXz~)6fRto<_C5CDO2VKEVqN7xW#{jN(!mqzqvXf3y z;^1Pm5QUQU8KxIFI>Ivg8LW|B3(~I&Iuu|Np$P?IG@lx!v9?2biD+X01wRUw|_8^KYNydmuQ25Q9P zGSJ7QKOd;%^hoq3Cg%~Fb8$Rk1Qtl@-fpqYr>sG_Yvk}W>VB4jsw@XH`gZqU1O+1W z0Aj!+@pHJHwoy7qXJa>LXtWAjtxdd-4=H7z=HI8ru*P~>F>qK<$+rPcB#_|Nu7VO8 zoZW&t9Q=Xy3}j}}y0p9Ki5a_-MN=Wcwdek4m}`fYkL($6sG|gu;Dp{2D5hP97t^3j zn7H_uNKl)4Sgr%5Rr;>!iZv|N*Nx~zt_{GLzH>k%>-OgM5=sVoM4yNmD_LRAKGx`u zF00XB2-g~Xim|-oDs)QIH{lL zX5z_~WQ^me;s1PzDZa9RjgS0!U7N%BiOlYE)&@zmbPc!WXx1PyK`BiRjXkQG0_MRs zlW=h~;FW1)o1jS-h?lW|Yb|Kq08_{QJvx>_vTaW#o*QsA-c_rUPY-1htB|NYe*lW;4BNHV{(@1J;a*R!ZekZmNnu_dW29Je-O*H;TeW?xbh9;c=o(0ziCC&HbptP{L?9N#N96!mJ8qmXSUEos+hXE zw*_lZz*%G<_2R;n{~gmz_9OgHCe`Seg7~&u`Z>^N==0FWXh-BGedetm{ZA`x z?p=u;Ce25|`^3?F(mTCb$q~dCPelGHmd|onX8W(M_wWJ(&&a^;&_H~CeroS_Mk>to zS|(kzs0&gCCR3?e?h=5u{FZxWXiqnD;YQSwR{}T2$_hLm1=NUax`49sN=Bt!Tx()- z4X95%fN+t|G7#B~=kU1-&c-=BFVS{(5RP?2qU==U7eU6!gYlo>T7>!(6|q@tGhSHmpC$>7WjFPvx4Xl9I-w}ZRnYWkY=*!X} z$+#QzdXYOJ2|gIk5d-arbSNetoyBU+m=Ac-UZWh7*{Np|Mh+Pp-?X7Ls{GwH5i2+E z1pUMbFogHj5v@6&jt93L0s#ZUF8>e^plEByijmJl8IK>exQcWwLQ+@ z0%}HDUC7P7tKb(n{ZQTE{9G|I6DEelUunA8iI9@;ZYc#mZwNmWZz1J3T>pwUUs5vkrG)-|2y+cqWArO z-rsyanEO57d+s^sp1aH)bLZ>W`eW&q0uk{c&FWj)E|&R)?&&XT>FRhz6Z1I^U%i%} zhB4XK;#S$~SQ5~JJE~)`@EqXxs|KQBSUjC}7%GIFBJ;Jjy}SaI+~?fFw?O<_kn4|lPRGd1Lh zgz3>V1XiT=;7+~NRgJNj$z#g)e^uPeehYlm;y&|ICwc#=$aRIRVJaDyOmCf9W;Ufq z(JGcXv-bucoATaMJns_Rv^1BalUCqOV;fa)o5@U5q#(-JlsP9)bg${u5vJ71_B%o` zkJ360#`?17J>oL8#fX+ZFX7DVEw69f^96n>%xu{9awk2`#_Ij0iA(mfpCz_0y)WS& zhd)>+Y*=`8?47X1_#oe%B5G}s(#agj9GSKg z;|U%0!aj_HMKZW~ib3eQsLqP|>RumL)wD15Oq$qdllrR#Ju3W<3w%F?rpUIRVGFRY zWbK&sUpt=7dP?!6OYxgV`P+qM)2^R=X+nZAGo?A@KHM!?lF$Nq&BZ4dGu)qkZdvxF z@*Vs9SZmocjc`%h`#z1I46ceF7S?`bFH^GR;YRf`=h_o8{6j+8x@CSh zOb_~>qaq7jG}Y1G-6iJCYLSDmvU%#}+4kLfW*>ORV{GNY2^CTWi8CWk+7}xX)*@Ad zjSksZ2H$C^={n@}Nl>vyj5#t!;k(*=@X@a}^4FIz&J$TNU0fN7wXl>I{ac&gVp^_o z4NZf;QxkbZ6M1otFZLZDKQ9VxI-bi)ZR9 zH#CL0Nn9YgNp|H<{gSuN3->fK&7Vv=;!ldiWE*_ftH;H1hlD?nbm)FvkGu4;-6Nl? z#7e)^zI#UQD~%;}uB{#pnj8DBs7>lOCb)g&VuG1WOPVc1UtRP!^_^x-_k+JbtvEyJ z@|_#L$tWsP(wRVqTN8e3t@DE-W3OUc1H}DK8>*?lGS4WzaxuJlidAHdBiH^5$*KhS zdc^tPVclN@`h#?YJM8RPd5xKasl9Mynbn9kZ|1n>qb1Lz?u?1GAFVnlmNO`UkSsx}z#21nv8L!f-;y3@z*lX(E?eFMNJ3 z{dkw#MNhJCqEmip4F|7{7cvOQQ1NqH|Bf5ZgeEet{h}V{y}PIE!P%I(Oy;NuZ;gbb zSAMN8Q-6tdzUu=tnFOPmef~s7nH1rC7Ja1Ok|Tj>A-E5dzD#wD)jZ`2la|R z5}!}RI+}bt6f38}BN6E-e(pep$2kXo%}M%LI_~3!va#C~8*Y9nD~-e&&L?PojBK(P zdiHGTV&KF1qQOX<<09R6)#eWZc^Y|nZQrkT$r{Im3nxY!hK>uFB;*>2WaXV+XZ8N<|~3bf>=t87kAwOu#!AA0Pa5>sw?V zPT<<9*2t7*nJ*4eV_A<+2uSr6gM{wA468dVY9b`EOss>u&z6wlQP^8K`* zO7xor$@b6f$+ic?@+LDjbvQO)zm!%?YZ*Q5*YpFj$;AZ<1AL z{IE5lTkYsE@$3Mh!?^8B#}2;;VtKTFx=o&?(mAS4Qo(lJ`YUa-MCxTb$?X>_=EJFwmCw9gjejTm1TirgO8;<2e@8m1m5CS*Sc~ zltzX++?ylP9?NxHwKp{$e5;ls#V@T&#djgyzBP7|Dan2jzt8CWa8f?jeZreQkQth_ zSh0@T4enn0l#^dp!!a#vtA$aDH~4sUTV~-TwXJ%mzj(&0iB4nOI#=>N|upiN`E_X%H-WINoG@r6G}p+ zP@-hwgn*8?5ydMH;i?DP6U~T?OXwxffrHJR4)^#jpUuBkDY5geuhwBpdSRWl=ZFeD zqDF7!LT;zEuxd9@4f`*j{8zlOWiC?U@;=rdQ?N=tUX zm@lvxX(@W${ko;rCFN$wSd$A?r>g92Cl=6(0as}=jf4fg50q4m&S$Oz} z-IS4ESx1|#L&x$3T(#inmz@hnLZjUzt%n(u)^whVao1qaW$g|BEL`kanPJoZjP>&e z|4SKz&&0bizub#k^HYA@o~Qp+LPbZmz>(la?mKF~+Qz?RL>eI)T(Yl3mJxj7<0i|g z62&*F*E6}^rBh^$>pgw2@Hr^Ed3v-#h0gD?2oq@}97#3oW&Q{kFUgRecqq~P*7cx1 zBZrfjw4X?^4Wq$9`OKBYo}qkpp9cH%tIypW5@D$HdsabuW9FHVda|dV-us^8RWDoL zS!q8ds};#>kcjUS-=Dl^S*^e4m%; zzZdYs`CU%4lPzuL5FKt9aS%$;gYFRoGN$*MX*;zWh^eXf83ER^2)eC9$g}#qo9m(Z?uZvaIXi@o;L>`i7dHIp3 zIIct_U+AwOvq0PT+^^02NwWJ$?WEhI=qIf|+OR>A9WP`j zk3Gq>9f2pg*I9y}(|NHdhjC0FIkEECxQh|b7Pu6*(Bj0@h=lvO7)y8e0HtM znXT=>z`q`=F!ajppZkcACOyh z7FpH9s?McqR&|j#ZNnpmF1W8}xsNFqoL_!Bts0`oJ>u6LzoNKkwXX6j@pr+{hxo4A zpR(XG7KiE;UULbY>(zPZ9yz7c`sSzgEt(6=+}-lO9i2&e=W2Yc=fTgU#hq7U(@v5l z6}JjbpS9uN{-wh8VIS^Ax4XuYTD~Z4`-iOD$XdFD>AM1oL1Cs3#3rGa+}(47rXuxE zT|L^)Uw%pY_|O2P=;KL7)};E5|K@g$hO>UMnRg}q=ffoi4#~c%72o}X*}FI@hQ8#^ zgPl3cLH$-axrN{=sj|0AQ;W5`iWJ+0clq}Yt%~mZ4jD%7%sf_{i<_=oq35Kdu$J`G z>@gpG`0Q1hlCi~f%_A*49tuqh`4pSGBIzP2ISv)HjcNCKBko&U0!6fN2Juf79`N2?`Urko&gXN_M_Kyk$9qJ23{bAIJ*@)UNc*&> zGxWVWG#Hucar0+Qxe+@$-e2Y>lQw2HzAk$ERl&6aGl~ofPAl?)w-$~rcjOcI=O>>k zqd!VBZ8{Y8 z)oK3f?6l7l6Maqn3WZ~gw~A$gP29Ih)N;`U9_5M8E|q%o;D~#H#cLTa9Xp+T_K{OU zx8Lm6c+-1f?$B%q_c&kSgkJd~Qw!znSZtx%$I0kQg^ym6%6t=ZV~T~Ou*vY;$1mHM z*OuD_^Qw?F@>?z;QFm8x?9x+1IxRa&EmiJxsmW`0cO3L(c^DE?H`6B5P`#WYcJcbu zr`H4LYv7^t1>R-;!&%YJyyy2gkSi-qeyDD=eMB2wCp-CJrO|fa;)}JFwbl>S7hLpN z{F3bqhKnT+I@3Pld($SZ92%5%RyA+GLnHS0xyF@~jlGTc9XX{|C(ChN`b8fHo~Pb{ zeva11?)7lU;cptqV`M9(sZ8{}!D&NUr_`kEDe%kY0{O@SRrBK2J_fzMN!^Qu_E#&Z z-ozF6e^L_+WF7q_jm(w%wXJ$_?mU|@BQYg8)5cEToHG#;DEo2hdgi1v7unhO#gWlZ zZ+i7RnlH9D+Lz8&KHjdk183UD^RtvPL;SH(?%HB)v!3YMa&8)*#e>%e*cIn!`pHSPGaAVHzeY;mLuq=Gp^Ua%``J3BM`JN&DAA$;=wh5H;R52n=mlxvhl&@bI^s#MQB%RP3O)654h=>vkyV;?%-svu{UynOCn_ZCAI6YeR zJ&Ezn(bRy>k9sPp0ZzU9siK}#{+4Z}k-jn9bHz^}BS-xKoD}y}Vb>!YCP9;!+C8|l z(_`PR=BI)?yJ>o)f=6#WaWad?8C3={fp5;4%!+(jXq%R|da58Wh9xh!!hANDW_qnF z|7Monh4YtI`NtRGkj_LTo3i@0d!di3q@T{(ah>Pi*9|P$eJq;w8!$ti`n?_AN{_7O z(my__XY_#;UtAXN9!mIXpGl_NOc}VHOUtbO{=Mmz`=XN%?iW<7oosLl>Bs$^aTJgG zGVG$4q2@dfkMyd`NQWwuK97EW?w(_N*4~|ol_?s1H^lteuULyKu35~A9b@_!Usk6O z%w8Izc5Iqm)cEb~N&mRJd6_1$t7I(}Z#xf6BMIFLW$*0NwIY{Agp=I8+;2BVM4ew| zd}m(lcJb;|t;;o@CiSPUzbCEB;to`w_&S`imR>H>(fCdIyUaT_jo!K+zsquLwP?Ol zir#*ADkc!SaKzn6#MQfpOyabr-lya#0x@BTxXNGZoTWf`l?ia z+Ve`pwV7T!#}|3Q&ANl4qJA%{j6be~;QYSUdmWy%4O{J{l|98`gc}jT_>20bImlYiui0?ueR+kOerbXYG3R*RkPi@%2K#} zwnr|oOEmoI@2HHoeg!1yueUJ8B+z38zu}Lo(bW68oWJYnpB-rC=3i$v?_h&WAC+Qoi&$hrXR=v~s3tWFFWF*#`WA+-pRm!vRn|*dvV_7SA9uqGG#H( zuST5yjrBQa8=8DOtj_w#dCj;=i_Qy=+tMxHVfP;Fww=YM()M+5&-!(P!xdBa>v}2j zD>rW4+PjF^nG3^MG;8541s_kC^#Xv+MKT)&;FIhi*$-bhw*@6A0oW5;-HSMo%3~Arhx^ zR#2kFf%>L%O@6;58+o`)-x;gPPpZ2sX2M}zR%;{n)f}bWi=(1>tV&OJHJ-TUda0eM z3sw#^efrsH(#1%0o766Nz`!-2Rf?WkX2+`31y$x>Y!264aNEll6(6ygkG|X%-rqV+ z7IEssZ%VBb)%wDPD&C|W6eUi1w^Qh=Ow>AC)C?HEy)wFH7Cuq!@~*r*vH6ILBeTQn zd)>*>$`!t^O+BM;E$Hlv8i?+v?mUwmoGDwm>mV!T-MrT4!z{mzy2#$9EI3}SdRrJg zSn&KUU!DU8f5ea$t~l&KFNMbYB>mH*@6^xo&hZsF@FdnKn5SzuK+OHsV=t9_eWh&Q z?Z&n2no}IGILk`cbOYIUlI_fS{)n#;J-U`lX=c*0ZJ(u_8xtr+IlT$sDEU zO&VkM(mQ#QQ;$Sd2fOwibDwb$IOy(lqo<-Ht-O%JChSYorHI|P(hnYc zllw4Fr%RNDCamTRvu0Z96nP^Qo0IrjI66>U|83wvPl#NIyUzy~eI`2o$4}j~S?lGU;?i~vQL0mOG8(vN;QpQJPI5yS z;y`rch3JS+L--+6;?tfT&>T8EbDM-ABKSrGl0u(W?uLG%gR@cs5+IIap*;`-mI6Nu zW&Lo+Q6s9-kTLGu)IAoxa@)dUBsIMxcrW=Kx(7l++55#A?C7K#)R)2{u~%_9SE`mr z=;pQAomthc2%dT~*V@{8W98(h^xn+6C%;MN>3@*%Jh)wNa*Kc1!p0-(riq=eS_ioQ zs=L)TLQA{RlB_w8zgt^TzUN4M1$!?&w1%Ub`;q6A7tB+M6D+&GZCTZVHs=Co3`YlV zTd3q(aOk4t>7^j{bB~^zG9L}Nt>$!-@-xfHN4Z*sWhNO4cBi+U_$}4vN&1=g`VRI4 zl_y3wV6V{+Vd2z0q)RNqX-A`ISY51rj@u8up!{r>UB-X>dR3HFfc2VTbG4J$Vak>k zVP?;WeL=_4PNc)Q=VZw)uK7~`;;rq?Tve$PI0n(FkPI^pl`Sw4@*_XY1=#fk9r3}K<)lLo?d@}F9$iTx>aIJ}mAV}pYE4Y|xoN_Lrmo;#T<>^xQ6aZorE2oh zH;T1`9?>`{t*FMgmQjn+=Eqo;XJk^Bp?f)AAF1xyC5o9T?fAXtz|j-cis!}{_J?ZJ z#)xroxmmDFU1FGVdnFQSA8;T*kE~==e(eL(+xN%^zq>bT%~mh|lpR=;x-`sHdv~7w zvqStd$F{47()Q{_FN*Voh#ngM=CO69%|B#K_o^D=0mHL;Q?yowHPeOi=T*;D0pHxK%aAfZO%?Y zJ@i+0s4_yk8RclnNkQ!K_Z&-ZA>Baicf(42cul6g$LU)Dffi`ny@fPOmi&{H zo66qD#lzjq$K|x(9;7`UX5$q(FHV}M^8dxxTO;5Hhd+Xzm>E+yv`hQ_xADf zJ>%r=h6;~yvl+oi^J3e3-U*!FDg-ykgT$ikSJ_X)<=g|#`^zJhJ1B_nF$)g zLs)iyBPSuTq$ME{-J;?K?Cwc6J{asJ=GdSp97yKz;FT|vfX%OhZYJTb-Q74 z0?TciwZ9y2QiP6#WX}eNgd{t(ND$BBNItcV{jVF+(6^B|FmMg`k&tk2q3_#`r?Vrj zQZT(L`f*>&*jsBtU^9&cV|K?D@=tX%FI+&dPM>yhm9%&Fku>shI_cu?bi&Bq=Mkyk2LN0qPEepRHay>ijny-cG(JJk(FydwU=Dus?wu$$(i6fSMmPs@+{6c)`F; z=`E({9QxmCK!+M_C`KBxU?y##Q~b zsdJ|K631}iA-Bh#ppS|{AGvHH(*^+YA>_^;Sc0JTd8txJCt#Wb&-Ax2$%2rtdtfU9 z>#=THoHn={TEm`%1SIpuBRfhMr$BE2; zFO2^~&JNvM0_@y}JduGJ2o|WCW#I7cQvzGTklc7=htfR92P#=9USPxhjoakGB)T~b zvO}-DAdqVkxHrf@Qi8 zZ9&yu6GWu;6MYN1_04k)SZob4Ph|_6uY;gBM+O!{`=H&%X#lWTz^uE~+<-2EUdv2w zf?hOfRQ7}PDDNfc!0m^{P_zV(a*Ywt+5IptiqgvhROBN81=pvGplA>tO`89MQYHu2 zQXy@!FmYosf)~qtCy0sHsIwpk<^G5d%K@?R(q=IQk}d}`pvuef;wLb|uK{x<)2qV> zP_Y{o@f`pn4W=z3(qxfg_D$Z!;5nMye>txY{Bdy=FB%j0D+0H&i=&!d<$-9s@Ly5B zJiL<-+}5y{e2JjbQoua3wbLkfZ_txxmNxaAq|UvHanNJ_p!e`!WANvZ9l9?0x5}SI z6E&bf0T>{=XG4rkDZs)61DNk`r(XpIg#Jg?a7u5`lYg#nGC(5pnkqioUxFWvKdpnm z*`fY&8&!~FSj>)%EUwiL)k^}c3kvQv53_P$Xuf{U?o+ zj367SDgGU4d({5Y*_2=jRFkd}(3GR~S9C?`Pp{PAMZM;KMK%1G9h>@kw=$56+5VMN zi(vRR$F;%4?roCVi zk=PQ~@>755WU55^mRs?+(2HFE(qm;XRLE&nFggfJ5q}(Ly(kDT=S8YiiL>{{C2EZS zZeC`HRB|=2xy0`P5m7au0ULp8=rO`DBAf_JgWu7<(n>16?ucx&W>UZC`Gb(otF z;GH4RD!GN4)sIrI-Ni8A zgFz|qpBLtFZrNK<3?oOhh+9@;?YCElL9WRIGqz47S_Bq1ambK~86@UE!m0cdIdTX@UbYd0bHm_mG3!ocfLp@wuhv)+e2%Z_#^(U zS(eX%Qh)2gd<3e&$xEV)fQo-rv~|Ny&V^E~55wGOW5I_(V~*S?d~6a7T6|zpSsz{o zu9^cuh*?^cOp;7Ua;ea~@a(U|v z&>?{Gn`bfGks@6ppY)PgxiQ$+_w4-FgU&;XHM9nlb0A?!gN8u;{6M|s9(@&%p zSf~bC-TFdfT^ps28~mB`F@`_`Mi&qBBT9zEwg2xi{=ego?J%Ayh(Flp--e%c@kjbd zn<2~s=^COUaHvmA2ni#gJlzrc!`Dy{?)Our>9QiE*ZU1Z5h{Ri!B2Y&g)Y-pb6nuZ&>E-2Mq8sa3_ zg}TpW3e>!JLuKHY4pl>rII#=>Q^~<#-#UF-xueu$2O#FZ?pfzdxQc^j9YM3=8)oC( zi}Awqd67$s5dFqlqMgPpa1f}k1{u9|E+O?r=^2s98)! zWpnnx+E@o-Afz1|mu>^Ey1>uYTsnOR&*w%Q-66KWYmqFJR{RwNEtB%!wa6|T<(qqe zFBIEYI^u@?S;s(^TY^5^sy{Oy<)``p{b1JnZ!0(NmX*7+2w#H(A)JY}`a$H#=VLG> znxL!4fQwAU8w4~#|DLA)I|k({HmHR2Rep4Hcq9tuz@DvykkC+w2{|4L+L*TlZ4h>j z>y|)x7Zvg#2dv;-*kQE9h6Gu`s@N}8go=a`CGt58qDJPdU{UPZCq#UoHGBYD+(0a4 z#eihTM+z~r0jCbR)X;Bib} z*v*FNT5e()?Zgry`oA;vfenIj1`A!;F3@(qBWQbxh=9vY6d}kN7600UWk%wiKs*9Y z;Lod5onZk4R>86&Ehj(>C<9O$hZB4dx*3EP0-RtKs3Hk1l-gjy*ue)>-UGWiE!>er zSD?$q1G^KM_WqM$=T3q_B9f19h}BD2n*E8aXq3&(E(_gdnx+mIV>z=o>iEwP(v+F(&2Uy^}W1WVgbfrcDjZ<4XP z0RJw$-Gt!q$nEw`$b<`sn^VsQ!iy?9=L(bw_MtGJ8_bL}xq=LB?cYE&p=V=g;YkUW z32&$<1b;%2DK`*Hfhn}WT>*T>9}c0T@!V;knPD20(LBI%BCV%ERr${w2qPkK29|=@ z=aA!PfF9EYq(ogm#j37o!;mmh)Z)6t4$CxIO+_?n8hHxLR$ z;~cyX>c~Nn_;X;Kc;}*p!E>-Clza~@$oqkbQt%;Ki0}gjQ9eZrt1+as$h;p|wf`Pe zXpEq;`iG!9IwtS1tZl5;QoArlPq0rBp5W@gi9%`H2K)6vQ ztpT8GEEWlHY9Oo!VSoO4PLFs8f`yR!3S9KMf=XOW$(WEle0ooW zf+lsNP?#?aJ`82WZxmqUrX?9Ik`)Hp9|wn4c%^_tj(iCNQ-u6=JaQDuPDdr_CxOzU zaKIJJLJ>|kG6v+$MX>N1odvZDqR2K6rJ*{MWpoiFmsi6^ff{*v5u8sG@_yhVFfZ*R zUdDpZUIMd0AF*J22{wgnKcf~D!0 zQM(K?{Y@I|02MhhI!ww;c(WWyx(rKT*{J_Q^vL98SRPwX_ZI@+zIz31^&YeQg~*X> zSHN~MnSC>KWt@!aKleNMcfPR-0_2Ef6nITah#!6r3%Lp){4p@I)PH-s{Lj7%|99)y z%p}y}M&3q&EE*sdxT0Zos7f5Kj~fYz220(z3|c5z2B8>>21!<=fJf{g5gk;*$4JhC z(8q!-I35GC;6)5DY5XuU8Urh!M)Ji1q}&wGW=67j$*B>WSg=j{{1+ide#OERNMS5k z&*LpOhyV!(j;(-HuT+o83G&v2@lm$Aw z_W=3k)THr13FPv?^tD9%IEe=~QU#zesm32zCjr0$fp}OJNl$?HKtkv7g@edJEpjTP zNfT@#vZ6tz?MwtjpAft(2nvtD|J{!)CW6#ljl~yu5v?R}NJQu~!i+PQ_6qd3lhmlWdU{lf$HcNPA1VkYn#En{T z6B3&aI5V4(59uHa{Y5u%+!uiz1~>k!_k_2sd%-3v6YND&Zh#bE+=~{5ZUD=|WYL0h z2CM}I%54;wk;)9P40p(HLi)+TaUz%-!Cv+z%mZmCZpfIBn>Rs^zScpJI!63{=_c^d z#sEcBGx6)M3BF(fiJBsNvcM_adM4;|8Z&(1G*o4Q|GNWungtXoTcOoxZ^3-D`WSu8 PjzAKUc{}hX7s>wvaV%26 delta 53421 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 diff --git a/jps/src/org/jetbrains/ether/Pair.java b/jps/src/org/jetbrains/ether/Pair.java new file mode 100644 index 000000000000..2feb50239939 --- /dev/null +++ b/jps/src/org/jetbrains/ether/Pair.java @@ -0,0 +1,18 @@ +package org.jetbrains.ether; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 19.06.11 + * Time: 16:48 + * To change this template use File | Settings | File Templates. + */ +public class Pair { + public final X fst; + public final Y snd; + + public Pair(final X fst, final Y snd) { + this.fst = fst; + this.snd = snd; + } +} diff --git a/jps/src/org/jetbrains/ether/dependencyView/ClassRepr.java b/jps/src/org/jetbrains/ether/dependencyView/ClassRepr.java index a45d97fcfbdc..56a60bd872d8 100644 --- a/jps/src/org/jetbrains/ether/dependencyView/ClassRepr.java +++ b/jps/src/org/jetbrains/ether/dependencyView/ClassRepr.java @@ -1,12 +1,12 @@ package org.jetbrains.ether.dependencyView; -import com.sun.tools.javac.util.Pair; import org.jetbrains.ether.RW; -import org.objectweb.asm.Opcodes; import java.io.BufferedReader; import java.io.BufferedWriter; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; /** * Created by IntelliJ IDEA. @@ -27,12 +27,15 @@ public class ClassRepr extends Proto { public abstract class Diff extends Difference { public abstract Difference.Specifier interfaces(); + public abstract Difference.Specifier nestedClasses(); + public abstract Difference.Specifier fields(); + public abstract Difference.Specifier methods(); } - public Diff difference (final Proto past) { + public Diff difference(final Proto past) { final ClassRepr pastClass = (ClassRepr) past; int diff = super.difference(past).base(); @@ -53,11 +56,11 @@ public class ClassRepr extends Proto { } public Difference.Specifier fields() { - return Difference.make (pastClass.fields, fields); + return Difference.make(pastClass.fields, fields); } public Difference.Specifier methods() { - return Difference.make (pastClass.methods, methods); + return Difference.make(pastClass.methods, methods); } public int base() { @@ -89,7 +92,7 @@ public class ClassRepr extends Proto { } } - public ClassRepr (final int a, final StringCache.S sn, final StringCache.S fn, final StringCache.S n, final StringCache.S sig, final String sup, final String[] i, final Collection ns, final Set f, final Set m) { + public ClassRepr(final int a, final StringCache.S sn, final StringCache.S fn, final StringCache.S n, final StringCache.S sig, final String sup, final String[] i, final Collection ns, final Set f, final Set m) { super(a, sig, n); fileName = fn; sourceFileName = sn; @@ -98,7 +101,7 @@ public class ClassRepr extends Proto { nestedClasses = (Set) TypeRepr.createClassType(ns, new HashSet()); fields = f; methods = m; - } + } public ClassRepr(final BufferedReader r) { super(r); @@ -147,7 +150,7 @@ public class ClassRepr extends Proto { return result; } - public UsageRepr.Usage createUsage () { + public UsageRepr.Usage createUsage() { return UsageRepr.createClassUsage(name); } diff --git a/jps/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java b/jps/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java index e8132efdc86b..68becb19dd3f 100644 --- a/jps/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java +++ b/jps/src/org/jetbrains/ether/dependencyView/ClassfileAnalyzer.java @@ -1,6 +1,6 @@ package org.jetbrains.ether.dependencyView; -import com.sun.tools.javac.util.Pair; +import org.jetbrains.ether.Pair; import org.objectweb.asm.*; import org.objectweb.asm.commons.EmptyVisitor; import org.objectweb.asm.signature.SignatureReader; @@ -23,12 +23,12 @@ public class ClassfileAnalyzer { private static class ClassCrawler extends EmptyVisitor { - private void processSignature (final String sig) { + private void processSignature(final String sig) { if (sig != null) new SignatureReader(sig).accept(signatureCrawler); } - private final SignatureVisitor signatureCrawler = new SignatureVisitor () { + private final SignatureVisitor signatureCrawler = new SignatureVisitor() { public void visitFormalTypeParameter(String name) { } @@ -127,7 +127,7 @@ public class ClassfileAnalyzer { takeIntoAccount = notPrivate(a); access = a; - name = StringCache.get (n); + name = StringCache.get(n); signature = sig; superClass = s; interfaces = i; @@ -137,7 +137,7 @@ public class ClassfileAnalyzer { @Override public void visitSource(String source, String debug) { - sourceFile = StringCache.get (source); + sourceFile = StringCache.get(source); } @Override @@ -208,7 +208,7 @@ public class ClassfileAnalyzer { } } - public static Pair> analyze(final StringCache.S fileName, final ClassReader cr) { + public static Pair> analyze(final StringCache.S fileName, final ClassReader cr) { final ClassCrawler visitor = new ClassCrawler(fileName); cr.accept(visitor, 0); diff --git a/jps/src/org/jetbrains/ether/dependencyView/Difference.java b/jps/src/org/jetbrains/ether/dependencyView/Difference.java index 3810c16ea680..a79b00cfe7ba 100644 --- a/jps/src/org/jetbrains/ether/dependencyView/Difference.java +++ b/jps/src/org/jetbrains/ether/dependencyView/Difference.java @@ -1,6 +1,6 @@ package org.jetbrains.ether.dependencyView; -import com.sun.tools.javac.util.Pair; +import org.jetbrains.ether.Pair; import java.util.*; diff --git a/jps/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/src/org/jetbrains/ether/dependencyView/Mappings.java index aa1d939c5a71..bc5291c011b9 100644 --- a/jps/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -1,6 +1,6 @@ package org.jetbrains.ether.dependencyView; -import com.sun.tools.javac.util.Pair; +import org.jetbrains.ether.Pair; import org.jetbrains.ether.ProjectWrapper; import org.objectweb.asm.ClassReader; import org.objectweb.asm.Opcodes; diff --git a/jps/src/org/jetbrains/jps/builders/StandardBuilders.groovy b/jps/src/org/jetbrains/jps/builders/StandardBuilders.groovy index 0e2d8e309ef6..4c1ff8432d29 100644 --- a/jps/src/org/jetbrains/jps/builders/StandardBuilders.groovy +++ b/jps/src/org/jetbrains/jps/builders/StandardBuilders.groovy @@ -16,370 +16,388 @@ import org.jetbrains.jps.* */ class JavacBuilder implements ModuleBuilder, ModuleCycleBuilder { - def preprocessModuleCycle(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - doBuildModule(moduleChunk, state) - } - - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - doBuildModule(moduleChunk, state) - } - - def doBuildModule(ModuleChunk module, ModuleBuildState state) { - if (state.sourceRoots.isEmpty()) return; - - String sourceLevel = module["sourceLevel"] - String targetLevel = module["targetLevel"] - String customArgs = module["javac_args"]; // it seems javac_args property is not set, can we drop it? - if (module.project.builder.useInProcessJavac) { - String version = System.getProperty("java.version") - if (true) { - if (Java16ApiCompilerRunner.compile(module, state, sourceLevel, targetLevel, customArgs)) { - return - } - } - else { - module.project.info("In-process Javac won't be used for '${module.name}', because Java version ($version) doesn't match to source level ($sourceLevel)") - } + def preprocessModuleCycle(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + doBuildModule(moduleChunk, state) } - def params = [:] - params.destdir = state.targetFolder - if (sourceLevel != null) params.source = sourceLevel - if (targetLevel != null) params.target = targetLevel - - def javacOpts = module.project.props["compiler.javac.options"]; - def memHeapSize = javacOpts["MAXIMUM_HEAP_SIZE"] == null ? "512m" : javacOpts["MAXIMUM_HEAP_SIZE"] + "m"; - def boolean debugInfo = !"false".equals(javacOpts["DEBUGGING_INFO"]); - def boolean nowarn = "true".equals(javacOpts["GENERATE_NO_WARNINGS"]); - def boolean deprecation = !"false".equals(javacOpts["DEPRECATION"]); - customArgs = javacOpts["ADDITIONAL_OPTIONS_STRING"]; - - params.fork = "true" - params.memoryMaximumSize = memHeapSize; - params.debug = String.valueOf(debugInfo); - params.nowarn = String.valueOf(nowarn); - params.deprecation = String.valueOf(deprecation); - params.verbose = "true" - - def javacExecutable = getJavacExecutable(module) - if (javacExecutable != null) { - params.executable = javacExecutable + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + doBuildModule(moduleChunk, state) } - def ant = module.project.binding.ant + def doBuildModule(ModuleChunk module, ModuleBuildState state) { + if (state.sourceRoots.isEmpty()) return; - final BuildListener listener = new AntListener(state.targetFolder, state.sourceRoots, state.callback); - - ant.project.addBuildListener(listener); - - ant.javac(params) { - if (customArgs) { - compilerarg(line: customArgs) - } - - if (state.sourceFiles != null) { - List patterns = [] - - state.sourceFiles.each { - for (String root: state.sourceRoots) { - if (it.startsWith(root) && it.endsWith(".java")) { - patterns << it.substring(root.length() + 1) - break; + String sourceLevel = module["sourceLevel"] + String targetLevel = module["targetLevel"] + String customArgs = module["javac_args"]; // it seems javac_args property is not set, can we drop it? + if (module.project.builder.useInProcessJavac) { + String version = System.getProperty("java.version") + if (true) { + if (Java16ApiCompilerRunner.compile(module, state, sourceLevel, targetLevel, customArgs)) { + return + } + } + else { + module.project.info("In-process Javac won't be used for '${module.name}', because Java version ($version) doesn't match to source level ($sourceLevel)") } - } - - patterns.each { - include(name: it) - } } - } - state.sourceRoots.each { - src(path: it) - } + def params = [:] + params.destdir = state.targetFolder + if (sourceLevel != null) params.source = sourceLevel + if (targetLevel != null) params.target = targetLevel - state.excludes.each { String root -> - state.sourceRoots.each {String src -> - if (root.startsWith("${src}/")) { - exclude(name: "${root.substring(src.length() + 1)}/**") - } + def javacOpts = module.project.props["compiler.javac.options"]; + def memHeapSize = javacOpts["MAXIMUM_HEAP_SIZE"] == null ? "512m" : javacOpts["MAXIMUM_HEAP_SIZE"] + "m"; + def boolean debugInfo = !"false".equals(javacOpts["DEBUGGING_INFO"]); + def boolean nowarn = "true".equals(javacOpts["GENERATE_NO_WARNINGS"]); + def boolean deprecation = !"false".equals(javacOpts["DEPRECATION"]); + customArgs = javacOpts["ADDITIONAL_OPTIONS_STRING"]; + + params.fork = "true" + params.memoryMaximumSize = memHeapSize; + params.debug = String.valueOf(debugInfo); + params.nowarn = String.valueOf(nowarn); + params.deprecation = String.valueOf(deprecation); + params.verbose = "true" + + def javacExecutable = getJavacExecutable(module) + if (javacExecutable != null) { + params.executable = javacExecutable } - } - classpath { - state.classpath.each { - pathelement(location: it) + def ant = module.project.binding.ant + + final BuildListener listener = new AntListener(state.targetFolder, state.sourceRoots, state.callback); + + ant.project.addBuildListener(listener); + + ant.javac(params) { + if (customArgs) { + compilerarg(line: customArgs) + } + + if (state.sourceFiles != null) { + List patterns = [] + + state.sourceFiles.each { + for (String root: state.sourceRoots) { + if (it.startsWith(root) && it.endsWith(".java")) { + patterns << it.substring(root.length() + 1) + break; + } + } + + patterns.each { + include(name: it) + } + } + } + + state.sourceRoots.each { + src(path: it) + } + + state.excludes.each { String root -> + state.sourceRoots.each {String src -> + if (root.startsWith("${src}/")) { + exclude(name: "${root.substring(src.length() + 1)}/**") + } + } + } + + classpath { + state.classpath.each { + pathelement(location: it) + } + } + } + + ant.project.removeBuildListener(listener); + + if (state.sourceFiles != null) { + module.project.builder.listeners*.onJavaFilesCompiled(module, state.sourceFiles.size()) } - } } - ant.project.removeBuildListener(listener); - - if (state.sourceFiles != null) { - module.project.builder.listeners*.onJavaFilesCompiled(module, state.sourceFiles.size()) + private String getJavacExecutable(ModuleChunk module) { + def customJavac = module["javac"] + def jdk = module.getSdk() + if (customJavac != null) { + return customJavac + } + else if (jdk instanceof JavaSdk) { + return jdk.getJavacExecutable() + } + return null } - } - - private String getJavacExecutable(ModuleChunk module) { - def customJavac = module["javac"] - def jdk = module.getSdk() - if (customJavac != null) { - return customJavac - } - else if (jdk instanceof JavaSdk) { - return jdk.getJavacExecutable() - } - return null - } } class ResourceCopier implements ModuleBuilder { - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - if (state.iterated) return; + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + if (state.iterated) return; - state.iterated = true + state.iterated = true - if (state.sourceRoots.isEmpty()) return; + if (state.sourceRoots.isEmpty()) return; - def ant = project.binding.ant + def ant = project.binding.ant - state.sourceRoots.each {String root -> - if (new File(root).exists()) { - def target = state.targetFolder - def prefix = moduleChunk.modules.collect { it.sourceRootPrefixes[root] }.find {it != null} - if (prefix != null) { - if (!(target.endsWith("/") || target.endsWith("\\"))) { - target += "/" - } - target += prefix + state.sourceRoots.each {String root -> + if (new File(root).exists()) { + def target = state.targetFolder + def prefix = moduleChunk.modules.collect { it.sourceRootPrefixes[root] }.find {it != null} + if (prefix != null) { + if (!(target.endsWith("/") || target.endsWith("\\"))) { + target += "/" + } + target += prefix + } + + ant.copy(todir: target) { + fileset(dir: root) { + patternset(refid: moduleChunk["compiler.resources.id"]) + type(type: "file") + } + } + } + else { + project.warning("$root doesn't exist") + } } - - ant.copy(todir: target) { - fileset(dir: root) { - patternset(refid: moduleChunk["compiler.resources.id"]) - type(type: "file") - } - } - } - else { - project.warning("$root doesn't exist") - } } - } } class GroovycBuilder implements ModuleBuilder { - def GroovycBuilder(Project project) { - project.taskdef(name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc") - } - - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - if (!GroovyFileSearcher.containGroovyFiles(state.sourceRoots)) return - - def ant = project.binding.ant - - final String destDir = state.targetFolder - - ant.touch(millis: 239) { - fileset(dir: destDir) { - include(name: "**/*.class") - } + def GroovycBuilder(Project project) { + project.taskdef(name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc") } - // unfortunately we have to disable fork here because of a bug in Groovyc task: it creates too long command line if classpath is large - ant.groovyc(destdir: destDir /*, fork: "true"*/) { - state.sourceRoots.each { - src(path: it) - } + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + if (!GroovyFileSearcher.containGroovyFiles(state.sourceRoots)) return - include(name: "**/*.groovy") + def ant = project.binding.ant - classpath { - state.classpath.each { - pathelement(location: it) + final String destDir = state.targetFolder + + ant.touch(millis: 239) { + fileset(dir: destDir) { + include(name: "**/*.class") + } } - pathelement(location: destDir) // Includes classes generated there by javac compiler - } - } + // unfortunately we have to disable fork here because of a bug in Groovyc task: it creates too long command line if classpath is large + ant.groovyc(destdir: destDir /*, fork: "true"*/) { + state.sourceRoots.each { + src(path: it) + } - ant.touch() { - fileset(dir: destDir) { - include(name: "**/*.class") - } + include(name: "**/*.groovy") + + classpath { + state.classpath.each { + pathelement(location: it) + } + + pathelement(location: destDir) // Includes classes generated there by javac compiler + } + } + + ant.touch() { + fileset(dir: destDir) { + include(name: "**/*.class") + } + } } - } } class GroovyStubGenerator implements ModuleBuilder { - def GroovyStubGenerator(Project project) { - project.taskdef(name: "generatestubs", classname: "org.codehaus.groovy.ant.GenerateStubsTask") - } - - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - if (!GroovyFileSearcher.containGroovyFiles(state.sourceRoots)) return - - def ant = project.binding.ant - - String targetFolder = project.targetFolder - File dir = new File(targetFolder != null ? targetFolder : ".", "___temp___") - BuildUtil.deleteDir(project, dir.absolutePath) - ant.mkdir(dir: dir) - - def stubsRoot = dir.getAbsolutePath() - ant.generatestubs(destdir: stubsRoot) { - state.sourceRoots.each { - src(path: it) - } - - include(name: "**/*.groovy") - include(name: "**/*.java") - - classpath { - state.classpath.each { - pathelement(location: it) - } - } + def GroovyStubGenerator(Project project) { + project.taskdef(name: "generatestubs", classname: "org.codehaus.groovy.ant.GenerateStubsTask") } - state.sourceRoots << stubsRoot - state.tempRootsToDelete << stubsRoot - } + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + if (!GroovyFileSearcher.containGroovyFiles(state.sourceRoots)) return + + def ant = project.binding.ant + + String targetFolder = project.targetFolder + File dir = new File(targetFolder != null ? targetFolder : ".", "___temp___") + BuildUtil.deleteDir(project, dir.absolutePath) + ant.mkdir(dir: dir) + + def stubsRoot = dir.getAbsolutePath() + ant.generatestubs(destdir: stubsRoot) { + state.sourceRoots.each { + src(path: it) + } + + include(name: "**/*.groovy") + include(name: "**/*.java") + + classpath { + state.classpath.each { + pathelement(location: it) + } + } + } + + state.sourceRoots << stubsRoot + state.tempRootsToDelete << stubsRoot + } } class JetBrainsInstrumentations implements ModuleBuilder { - class CustomFormInstrumenter extends FormInstrumenter { - final List formFiles; - final ModuleBuildState state; + class CustomFormInstrumenter extends + FormInstrumenter { + final List formFiles; + final ModuleBuildState state; - @Override - void associate(final String formFile, final String classFile) { - if (state.callback != null) { - final String formRelPath = state.projectWrapper.getRelativePath(formFile); - final String classRelPath = state.projectWrapper.getRelativePath(classFile); + @Override + void associate(final String formFile, final String classFile) { + if (state.callback != null) { + final String formRelPath = state.projectWrapper.getRelativePath(formFile); + final String classRelPath = state.projectWrapper.getRelativePath(classFile); - state.callback.associateForm(StringCache.get(formRelPath), StringCache.get(classRelPath)); - } - } - - @Override - void log(String msg, int option) { - System.out.println(msg); - } - - @Override - void fireError(String msg) { - System.err.println(msg); - } - - CustomFormInstrumenter(final File destDir, final List nestedFormPathList, final List ff, final ModuleBuildState s) { - super(destDir, nestedFormPathList); - formFiles = ff; - state = s; - } - } - - def JetBrainsInstrumentations(Project project) { - project.taskdef(name: "jb_instrumentations", classname: "com.intellij.ant.InstrumentIdeaExtensions") - } - - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - if (state.loader == null) { - final StringBuffer cp = new StringBuffer() - - cp.append(state.targetFolder) - cp.append(File.pathSeparator) - - state.classpath.each { - cp.append(it) - cp.append(File.pathSeparator) - } - - state.loader = InstrumentationUtil.createPseudoClassLoader(cp.toString()) - - final List formFiles = new ArrayList(); - final ProjectWrapper pw = state.projectWrapper; - - for (Module m: moduleChunk.elements) { - final Set names = state.tests ? pw.getModule(m.getName()).getTests() : pw.getModule(m.getName()).getSources(); - for (S name: names) { - if (name.value.endsWith(".form")) { - formFiles.add(new File(pw.getAbsolutePath(name.value))); - } - } - } - - final List nestedFormDirs = new ArrayList(); - - state.moduleDependenciesSourceRoots.each { - nestedFormDirs << new PrefixedPath(project.binding.ant.project, it) - } - - state.formInstrumenter = new CustomFormInstrumenter(new File(state.targetFolder), nestedFormDirs, formFiles, state); - - if (!state.incremental) { - for (File formFile: formFiles) { - state.formInstrumenter.instrumentForm(formFile, state.loader); - } - } - } - - if (state.incremental) { - for (String f: state.sourceFiles) { - if (f.endsWith(".form")) { - state.formInstrumenter.instrumentForm(new File(f), state.loader); - } - } - } - - if (project.getBuilder().useInProcessJavac) - return; - - if (!state.incremental) { - new Object() { - public void traverse(final File root) { - final File[] files = root.listFiles(); - - for (File f: files) { - final String name = f.getName(); - - if (name.endsWith(".class")) { - InstrumentationUtil.instrumentNotNull(f, state.loader) + state.callback.associateForm(StringCache.get(formRelPath), StringCache.get(classRelPath)); } - else if (f.isDirectory()) { - traverse(f) - } - } } - }.traverse(new File(state.targetFolder)) - } - else { - final Collection classes = state.callback.getClassFiles() - classes.each { - InstrumentationUtil.instrumentNotNull(new File(state.targetFolder + File.separator + it.value + ".class"), state.loader) - } + @Override + void log(String msg, int option) { + System.out.println(msg); + } + + @Override + void fireError(String msg) { + throw new RuntimeException(msg); + } + + CustomFormInstrumenter(final File destDir, final List nestedFormPathList, final List ff, final ModuleBuildState s) { + super(destDir, nestedFormPathList); + formFiles = ff; + state = s; + } + } + + def JetBrainsInstrumentations(Project project) { + project.taskdef(name: "jb_instrumentations", classname: "com.intellij.ant.InstrumentIdeaExtensions") + } + + def getPrefixedPath(Project project, String root, ModuleChunk moduleChunk) { + final path = new PrefixedPath(project.binding.ant.project, root) + + moduleChunk.elements.each {module -> + final String prefix = module.sourceRootPrefixes[root] + if (prefix != null) { + path.setPrefix(prefix) + } + } + + return path + } + + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + if (state.loader == null) { + final StringBuffer cp = new StringBuffer() + + cp.append(state.targetFolder) + cp.append(File.pathSeparator) + + state.classpath.each { + cp.append(it) + cp.append(File.pathSeparator) + } + + state.loader = InstrumentationUtil.createPseudoClassLoader(cp.toString()) + + final List formFiles = new ArrayList(); + final ProjectWrapper pw = state.projectWrapper; + + for (Module m: moduleChunk.elements) { + final Set names = state.tests ? pw.getModule(m.getName()).getTests() : pw.getModule(m.getName()).getSources(); + for (S name: names) { + if (name.value.endsWith(".form")) { + formFiles.add(new File(pw.getAbsolutePath(name.value))); + } + } + } + + final List nestedFormDirs = new ArrayList(); + + state.sourceRoots.each { + nestedFormDirs << getPrefixedPath(project, it, moduleChunk) + } + + state.moduleDependenciesSourceRoots.each { + nestedFormDirs << getPrefixedPath(project, it, moduleChunk) + } + + state.formInstrumenter = new CustomFormInstrumenter(new File(state.targetFolder), nestedFormDirs, formFiles, state); + + if (!state.incremental) { + for (File formFile: formFiles) { + state.formInstrumenter.instrumentForm(formFile, state.loader); + } + } + } + + if (state.incremental) { + for (String f: state.sourceFiles) { + if (f.endsWith(".form")) { + state.formInstrumenter.instrumentForm(new File(f), state.loader); + } + } + } + + if (project.getBuilder().useInProcessJavac) + return; + + if (!state.incremental) { + new Object() { + public void traverse(final File root) { + final File[] files = root.listFiles(); + + for (File f: files) { + final String name = f.getName(); + + if (name.endsWith(".class")) { + InstrumentationUtil.instrumentNotNull(f, state.loader) + } + else if (f.isDirectory()) { + traverse(f) + } + } + } + }.traverse(new File(state.targetFolder)) + } + else { + final Collection classes = state.callback.getClassFiles() + + classes.each { + InstrumentationUtil.instrumentNotNull(new File(state.targetFolder + File.separator + it.value + ".class"), state.loader) + } + } } - } } class CustomTasksBuilder implements ModuleBuilder { - List tasks = [] + List tasks = [] - def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { - moduleChunk.modules.each {Module module -> - tasks*.perform(module, state.targetFolder) + def processModule(ModuleBuildState state, ModuleChunk moduleChunk, Project project) { + moduleChunk.modules.each {Module module -> + tasks*.perform(module, state.targetFolder) + } } - } - def registerTask(String moduleName, Closure task) { - tasks << ({Module module, String outputFolder -> - if (module.name == moduleName) { - task(module, outputFolder) - } - } as ModuleBuildTask) - } + def registerTask(String moduleName, Closure task) { + tasks << ({Module module, String outputFolder -> + if (module.name == moduleName) { + task(module, outputFolder) + } + } as ModuleBuildTask) + } } \ No newline at end of file diff --git a/jps/src/org/jetbrains/jps/builders/javacApi/Java16ApiCompiler.groovy b/jps/src/org/jetbrains/jps/builders/javacApi/Java16ApiCompiler.groovy index e705c4ef0261..400d3aa6f8a1 100644 --- a/jps/src/org/jetbrains/jps/builders/javacApi/Java16ApiCompiler.groovy +++ b/jps/src/org/jetbrains/jps/builders/javacApi/Java16ApiCompiler.groovy @@ -16,101 +16,98 @@ import org.jetbrains.jps.builders.JavaFileCollector * @author nik */ class Java16ApiCompiler { - private static instance - private OptimizedFileManager fileManager - private JavaCompiler compiler + private static instance + private OptimizedFileManager fileManager + private JavaCompiler compiler - static Java16ApiCompiler getInstance() { - if (instance == null) { - instance = new Java16ApiCompiler() - } - return instance - } - - def Java16ApiCompiler() { - compiler = ToolProvider.getSystemJavaCompiler() - fileManager = new OptimizedFileManager(); - } - - def compile(ModuleChunk chunk, ModuleBuildState state, String sourceLevel, String targetLevel, String customArgs) { - List options = [] - - if (customArgs != null) { - options << customArgs - } - - if (sourceLevel != null) { - options << "-source" - options << sourceLevel - } - if (targetLevel != null) { - options << "-target" - options << targetLevel - } - options << "-g" - options << "-nowarn" - - List filesToCompile = [] - - if (state.sourceFiles.size() > 0) { - for (String src: state.sourceFiles) { - if (src.endsWith(".java")) { - filesToCompile << new File(src) + static Java16ApiCompiler getInstance() { + if (instance == null) { + instance = new Java16ApiCompiler() } - } - } - else { - Set excluded = state.excludes.collect { new File(it.toString()) } - state.sourceRoots.each { - JavaFileCollector.collectRecursively(new File(it.toString()), filesToCompile, excluded) - } + return instance } - if (filesToCompile.size() > 0) { - fileManager.setLocation(StandardLocation.CLASS_OUTPUT, [new File(state.targetFolder)]) - List classpath = [] - List bootclasspath = [] - StringBuffer cp = new StringBuffer() - - Sdk sdk = chunk.getSdk() - - if (sdk != null) { - sdk.classpath.each { bootclasspath << new File(String.valueOf(it)) } - - fileManager.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootclasspath) - } - - state.classpath.each { - classpath << new File(String.valueOf(it)) - cp.append(String.valueOf(it)) - cp.append(File.pathSeparator) - } - - cp.append(state.targetFolder) - - fileManager.setLocation(StandardLocation.CLASS_PATH, classpath) - - System.out.println("Chunk: " + chunk.toString() + " Classpath: " + cp.toString()); - - fileManager.setProperties(state.callback, InstrumentationUtil.createPseudoClassLoader(cp.toString())) - - Iterable toCompile = fileManager.getJavaFileObjectsFromFiles(filesToCompile) - Project project = chunk.project - StringWriter out = new StringWriter() - CompilationTask task = compiler.getTask(new PrintWriter(out), fileManager, null, options, null, toCompile) - - if (!task.call()) { - project.builder.buildInfoPrinter.printCompilationErrors(project, "javac", out.toString()) - project.error("Compilation failed") - } - else { - System.out.println(out.toString()); - } - project.builder.listeners*.onJavaFilesCompiled(chunk, filesToCompile.size()) + def Java16ApiCompiler() { + compiler = ToolProvider.getSystemJavaCompiler() + fileManager = new OptimizedFileManager(); } - else { - chunk.project.info("No java source files found in '${chunk.name}', skipping compilation") + + def compile(ModuleChunk chunk, ModuleBuildState state, String sourceLevel, String targetLevel, String customArgs) { + List options = [] + + if (customArgs != null) { + options << customArgs + } + + if (sourceLevel != null) { + options << "-source" + options << sourceLevel + } + if (targetLevel != null) { + options << "-target" + options << targetLevel + } + options << "-g" + options << "-nowarn" + + List filesToCompile = [] + + if (state.sourceFiles.size() > 0) { + for (String src: state.sourceFiles) { + if (src.endsWith(".java")) { + filesToCompile << new File(src) + } + } + } + else { + Set excluded = state.excludes.collect { new File(it.toString()) } + state.sourceRoots.each { + JavaFileCollector.collectRecursively(new File(it.toString()), filesToCompile, excluded) + } + } + + if (filesToCompile.size() > 0) { + fileManager.setLocation(StandardLocation.CLASS_OUTPUT, [new File(state.targetFolder)]) + List classpath = [] + List bootclasspath = [] + StringBuffer cp = new StringBuffer() + + Sdk sdk = chunk.getSdk() + + if (sdk != null) { + sdk.classpath.each { bootclasspath << new File(String.valueOf(it)) } + + fileManager.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootclasspath) + } + + state.classpath.each { + classpath << new File(String.valueOf(it)) + cp.append(String.valueOf(it)) + cp.append(File.pathSeparator) + } + + cp.append(state.targetFolder) + + fileManager.setLocation(StandardLocation.CLASS_PATH, classpath) + fileManager.setProperties(state.callback, InstrumentationUtil.createPseudoClassLoader(cp.toString())) + + Iterable toCompile = fileManager.getJavaFileObjectsFromFiles(filesToCompile) + Project project = chunk.project + StringWriter out = new StringWriter() + CompilationTask task = compiler.getTask(new PrintWriter(out), fileManager, null, options, null, toCompile) + + if (!task.call()) { + project.builder.buildInfoPrinter.printCompilationErrors(project, "javac", out.toString()) + project.error("Compilation failed") + } + else { + System.out.println(out.toString()); + } + project.builder.listeners*.onJavaFilesCompiled(chunk, filesToCompile.size()) + } + else { + chunk.project.info("No java source files found in '${chunk.name}', skipping compilation") + } } - } } diff --git a/jps/src/org/jetbrains/jps/builders/javacApi/OptimizedFileManager.java b/jps/src/org/jetbrains/jps/builders/javacApi/OptimizedFileManager.java index 75cbcc5cd875..61c4ab7bdcb8 100644 --- a/jps/src/org/jetbrains/jps/builders/javacApi/OptimizedFileManager.java +++ b/jps/src/org/jetbrains/jps/builders/javacApi/OptimizedFileManager.java @@ -210,8 +210,8 @@ public class OptimizedFileManager extends DefaultFileManager { myWriters.add(new DelayedClassFileWriter() { public void commit() throws IOException { final OutputStream result = superOpenOutputStream(); - final ClassReader reader = new ClassReader(buffer); - final byte[] instrumented = InstrumentationUtil.instrumentNotNull(reader, loader); + + final byte[] instrumented = InstrumentationUtil.instrumentNotNull(buffer, loader); if (instrumented != null) { result.write(instrumented);