From c0cd58244635c610c604066e9542058b310a706d Mon Sep 17 00:00:00 2001 From: Sithara Nambiar Date: Tue, 29 Sep 2020 23:10:17 +0530 Subject: [PATCH] sdc changes for identifying helm package as a vfm Issue-ID: REQ-341 Signed-off-by: Sithara Nambiar Change-Id: Ide4736655c01dd25dae5afe1207a292a6bcd6951 --- .../impl/ComponentInstanceBusinessLogic.java | 2 +- .../sdc/be/info/ArtifactTemplateInfo.java | 4 +++ .../src/test/resources/Files/VNFs/helm.zip | Bin 0 -> 40052 bytes .../datatypes/structure/HeatStructureTree.java | 9 ++++++ .../sdc/heat/services/tree/HeatTreeManager.java | 5 ++- .../heattotosca/to/FileDataCollection.java | 12 +++++++ .../services/heattotosca/HeatToToscaUtil.java | 13 ++++++++ .../services/heattotosca/TranslationService.java | 35 +++++++++++++++++++++ .../types/candidateheat/Module.java | 2 ++ .../CandidateServiceImpl.java | 11 ++++++- .../ManifestCreatorNamingConventionImpl.java | 6 +++- 11 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 integration-tests/src/test/resources/Files/VNFs/helm.zip diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java index ffccc978db..baa794c6cc 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java @@ -859,7 +859,7 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic { if (!type.equalsIgnoreCase(ArtifactTypeEnum.HEAT_ENV.getType())) { finalDeploymentArtifacts.put(artifact.getArtifactLabel(), artifact); } - if (type.equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.HEAT_NET.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.HEAT_VOL.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT.getType())) { + if (type.equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.HELM.getType())|| type.equalsIgnoreCase(ArtifactTypeEnum.HEAT_NET.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.HEAT_VOL.getType()) || type.equalsIgnoreCase(ArtifactTypeEnum.CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT.getType())) { artifact.setTimeout(defaultHeatTimeout); } else { continue; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java index 21589e0723..ab088ec3d8 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java @@ -59,6 +59,7 @@ public class ArtifactTemplateInfo { private static final String ARTIFACT_TEMPLATE_ENV = "env"; private static final String IS_BASE = "isBase"; private static final String CSAR_HEAT = "HEAT"; + private static final String CSAR_HELM = "HELM"; private static final String CSAR_NETWORK = "network"; private static final String CSAR_VOLUME = "volume"; private static final String CSAR_NESTED = "nested"; @@ -140,6 +141,9 @@ public class ArtifactTemplateInfo { else if (type.equalsIgnoreCase(CSAR_HEAT)) { correctType = ArtifactTypeEnum.HEAT.getType(); } + else if (type.equalsIgnoreCase(CSAR_HELM)) { + correctType = ArtifactTypeEnum.HELM.getType(); + } else { correctType = ArtifactTypeEnum.OTHER.getType(); } diff --git a/integration-tests/src/test/resources/Files/VNFs/helm.zip b/integration-tests/src/test/resources/Files/VNFs/helm.zip new file mode 100644 index 0000000000000000000000000000000000000000..225143b873f6f33aa801b579d2fce40c98b365af GIT binary patch literal 40052 zcmb4q19WBC+HGuG726ftwpA6|wylb7+pO5OZCA{Slb7ng@AmEPzyEjN8Ds4+PDakR z*4}%rIlnc(wd5p$K~Mky03ZNVeBR`GXH%fWKfY;wG(-R#06krMLv05`OB)Ma2SZvz zD<@?oNC4o`971gk7#D3v7ia)LkRxCKfZr}uV$>32(lp{Ul#M$Ia^$0u;gi7E6(}QX zJ-Zp2e!Cg3YuP&~6!_C)xpUWj>FE#gb89aTeSSdE1{xk#UJ|AUTtE=BIII(TS~ZC9T}?JWG2X>5m6#m`~T&#uYw1*0KxF23SR| zZA0NETIs2i68BY?Cbv;8N$L%kw*Q?;;ShB>Tav`xOL&>$}gdd9wzGYkTZJ?(W$Ok+>x7@c8Y? z0paAq#GO98d0fL)!-J9vZKIjcE};iE~>2{L$rjoK&+b$ z7qZfcnIFA^2Y;LnKD)1OBgobbl98bSm#GKR%x2-B+DMDbcjL+Z=$sv&n4ZMm(Fq)* zrH-u~+tF)3`#Ci}mzLJLX?4B{!XH>T*H*Vdf3oTXEGd%OT2|e9OjYgWVyh?@%gma(mZ1{1reHt}D+J?oQga z-_1y+9UrRLV=*QNzzwr`r(7nuAauEC2wY??@{z=rl{7?*RbttAT&aK|uk2S~pXh-zFXb zleV_gNBavK{1L!9cv9}SNdLM(eFRYY7pK_M{T5^9+o4u@N3@Hcl=3A52EHQVT=QaB_MJ7*^& zu`p*wlEsU+4b8wsW|Z%xCZ)A-ESyKUTN1Ysq;ot8?0GaBRYZh=5b+wJ8izmJ6|kSb zrbE2usyV)43gtzyC&djuv6~|~RZ1nKb_1A$*k;0>$$I^jQT6rAM3E84? z@$X_dw~8BPDIQK2i0E_xzXWK5YRZCTi)mD>b!lB><;ixS*bUu0g@fI`1Z8YrJ& z^y868m*nuTwu7X&6W5eZ(*k?5C4EQNKRNaKiT($SenIiM-71P32mnCs14h_?hLMfA zG0nf#&dK3-Vfls4U+phAnop9qPNPQ{+`OS6Y#CHP-mU+xBAGd3mD(sa%cPD@KU7*n zqo0>ezUc`@2plR7WhvJSjb`Kh9?7}6+`7D`#SekR5-+cr4Z#GWedt|=zTaS+ zOCr+a;`G!huj|TdrR(PPtDT_)1lb6~JiJvNbw3+wj4p_K^7HtrZ>W5QoT=BEK)u#Z z(Z!}$723mM7GAjTW71$r#~aWO5o2;)vgp~G1rYzFo3grtjBt1?We=PR8vdqH9)2RE zZ$ZMduObGb`+f~|`@r*d$S>Eu9xc&=wu_QVRr4o;m03v-kK3ju{KZ&EndHuCGYxJo zU&}Y5J78D>V5_DVO_Kmnm`xf-*F{F#0@kax1g`mkbX-CQ?2vNg@)Zo`&NWMsm!&~+ z*Ps%2V-AaDdfN_Ci$#JxW&DA3O%!_hpaZ{Rtl2)CpC9hFft)}ePA_ck=d~jmxeLRE z`EmPT*xM1asp5MaRCw#pmJyDIjudb0Zov)sm%uq`rmG^hc??IdEcGUbP~2Eg${O7- zwM~wt1lY{oCg`T+$doU8{lxnNkyGXba#T*M$5J2U82r)j|Aa^@BN`iBJ6%irzr*q< z8b+%=&avHhel_6zlf1%$VqqVKmf6?#%FmL{Q{*{iJ zrAKJLS5@Qo4e;GH^9DphKQDu7{+a)2d&y`34y4c9I94ESy^-m8IS2=dZ1>USBI0aq zEdDF+v%B-Se~GSF#esCe$x&GFIiQxl2}};8dXk^jo6%tmIcfG<*dncr^|0l!zAY(C z+2g{4`Bnr$LU|m4;^^FnOOWq;&NzmDj>=|dwJ+nKK%;Y#84bPYjFqc712F`gpRi7f zvpx3kdVZr#B=Z}+rl0gqMXw%97n|QQSP01osJvTtF7$paOLuuTm^?3{(t~EynKZZs zq+(JXG?UHoIEXehQj;f8mTZus4sJoWp3ZaGMT48SpEj7;lpi(21gV4nj~REMQGTaq zVp-V}D@dv2NqzhY!F*Q9%Xh#eceaU!8yZR}@9&-PKCnM>W@M|O1n!#gWK}|d0Z2)^@?{s=ueI$sAMN^66R)AMsN&ZvpT~xm zf*o%LsZ>@WC`An+rNA1%w5eKI;+0XwZGpm3{S>`tHWIegU2y$xr7XR@BXEf)i==(D z2$j_y2D6WM7&Y+1-N{^)t_?}Fg*j0|Fw0atmrC!$w9Bl`@u!_4%FW_pkMa!2nVF7S zlE~XdcgnDKp)XhMP2E4&PN3Co{sHq}`c35hescXU01^KQ=6_md{MSl8pVkLYs!!ApKH<2@+UU2}LCD5`MBE>1^PrDJ(rW<*D6?;qO|0z46)@ zyPivG4~6;4W22Kr`50XdFgrbUdEGSuB_u_p`z&c2M?gTr@_hi1Flgv7VOaF zcD`q8b*ou{UCsOm8K6t^RJ|I`R4uxs>K=^e`Xqi)(iW-t4`>cr<{H_30?Dg_knSAQ zLYO^u0>xBLqG(x+X~dZg2TIE+>4hb-!Ok(UtlGfI5En_J&P_Xh$wv@ak`exuL7WEm zGwjPznlc`L34TnV48DqP<&kn`5@j$2oNk>^o%zn%R{DvZpBM$`SSy2!9FUWX(tdC; zBh+tss>)7~5zxzC@f?&bZLvi?aKd^$wenf+Zmcgd+~vLjXISdW93tC!1{B7{(~YeB zZc)T4^DBm1@JV{^%xcEr%i4e7>9?G+%O{BCL&(kk$9(X=*70QNs1?PAkPh zkP_qN?8HLTIMfkkP%sqMAJ)>}CG6t;;^V8Zta{JeQ>sNY z{AJYf?swWLas!nSuZGn96cN9O*!VQBa{(JkKFg+2^Ctw)96HS$>tcIcv$pLC2~2?W z9fDBt^B)swj$O{)TX!BPzTDi8-YVrMRKPPzD%ca(IvHmmq%HrDSQ6W_DM#gJU7}UK z;cqjr4B6=li*o>@iTK_$?B(h}fe~RR)XdWLtSpM@S7(0)tb7i(biM9Inxtuq&Zv|z zKPpI@Y5bwECFX)Q*dxeXa%T$_=5Lp58CmijFo^+<7t`R*X*b7*?uc25k}_io<%kIo z^@UVkL}4ZDXgI`)VMa2ipA#M=>9%3mTeM#1gbe3|w^k7%IMMaG1_1^|DPyM`@itJ{ z%Ecs__&0_Dx*8Jib*xP0ZCb)67nD(W)EB4A0LV*CHNBf7j2xj_*Zn7F5{SF5fg%iv zMPkGXrsh126E;m)V?uHp!);|tOxo786*@FI|mpsNsGz8|%A7^Z`awyBEoo?a(K;kcEyXrV}V*Fq>!H*TwKMDAM ztB+?Y(&7Fe`uI#GF+p|P=3RgSIb6?K9l0zHGc@zQK}=gFznEBXHjE?WadUOh?(0JC zwCz!3%;jeQyW>elT`dYq66+Yd6OLvrn7lmz&`KKsHw-zggPLc%Bv;NTAwl1(8V-C3o}!78JkGGDYtd33%xZnPf{akI=jQ$QDpME5ee&c=3C0gSM()Qz_<+YQeG^e)XZzc%Ky`;ANfjY*oYwr~2b% z{GtUfQ*AKG4_XlTpoRZUX8vn}Na~LKNc2BsCM@KvhUYZ1bi-+WFMhqEltn>Vc>w@S z{d1$C1q=B|>!L3TkS~ImpHs7s&*LGsyOD)8siHeOu9yu)9)~cGiA{&hy8)ilVxddv z`v?KyPt{=LvoPjdBz~OPXwIxMQmWWoi2Qu6a&lI8^09#F8Iw6fPmKaOMPf7&*Zl0? zW)^8SB-|!_0`s|3C`j@!6OU!2a-&SyNaNM$rqTDvfOyDDI!Fyazv2)!Qpy~(tZOyk zP3{Lxf=S}EL>mZkp(c^QA&4$W_@Jo+BcjWg2GTI#-o}<7 zh1?*h$3NRO?aRSD=~s?A@$;y{@^1KaUY^>Y!Mq^`_{+pau9OWA*M}h^wOXW zx_h%chZ}~H2>S~Gc6W)&uL~w}>ge^2O|}W10cdm>cQbaHn9-lqAr>YUNJsWXFs|Eq zGe$a^M%mrGUVoZ@Zsp#)HjLE9%`z6$;KrqJPO?vj2Y-8fcGsRE4!KPZ2_Gz4-tmLd z-$GjG6x}px2FWfKsw-O?RAXqZUPTR~Xx;`fkbM?zxP{3yCj6DdJJG2Nyj%}CI^XY_ zwm?@|UYn(j5xTe&js2VeK>=-@XFf2waizpg8-tIXB~=tjL_k&S4(>jSa92D#D`hiA zEbr(OYj#?t0~$%a_Y>W~wy4}?PuzmF%ff`y$^QDjnYOvR)buktk~6Ny=0pQocD1}7 z%vzvA&MN$zPQZl?dpi{%0eGYt0Gw<98N}69wlU88&p;(!0KfbP{W5a?d&2)u>(FF* z>ks`J+J-+$*G}juxsrQY`KiETU&Qgg zkpM%oBO_!Wm4kqWhCA@|!}EH-q)K0op3Ls4eaIIyV>q%W{{JXn;%x>6p})x&5KRQj zhkSW`$QP`=kZY;$eOV*}h`I49c*Z1^|l zDEI!Lbospa3oGIq>7b!K2q#pN4`PedlM@sGq^~RA89o zP>q9Fb&D5pcQ9Fx6B|p{l*0_U3Y0FqO%=Arr4^dUhn)}`9Yta^LDr*X6H61Ep+~nBn3q|cH8z>RNxezo0GLJA{a=ERN1(GeOH!B(&Pp;%w8}3H5TbI;&7*Mvp zi_3iw2eeT zBFR3Na^KbpAmpFab&QU|cFx>VH{qFDBZb>mpr^{yU%#CogG_Q+MT>y+$@<2 zIv_D}#5@X2I)1F+V*97to~QkA zs_kEC7xYUNjC$yx(jFrgv-?Hi6KGH~Y62zOR*n6k(76NBh*lGBU(ZCF`n>|E?`CmD z=XEx4;IznWF2UI12m8CavA1kQ*j!k_gB^^JR%D~aU%G!tP92!=^;yA$m>``v67*;Z zvr2}FtHvk8#FIya=k#4B*jhRd%uOQl^CZHJ9CC7mS*j!|BqTp1rO=h`btRPo_dsd)so$ZN z*$S<5D&BL#C%`A5g?TpyNDlsA3kR@pbF%n>~k4XH9*3FOrc!lrFXnu`# z$WV$=?wY-h92Pct+agm^A72n`D5ar=2x3Q~!r=N$uHD$`CB^0C}3 z8Q*6_T@$ogxp^Zo<$AqoEoG>Jv|}R{xDiwsgo82-%Q9t7$4T*Z^E@qr!Lqpu723&k z5g`8=3oxNUwgSpZwATHaFXK43hj{w=h0EuR`Z=$`^8D6N90-+IogeUHX$L zqi@}EWfz?_{PZ8D2z=7IhE8Pu`t^dI7y=GRcvtQDL1S#Iu;n(6`HOA~P+HHbPrpUB zZ9p9?f@C6e?QPdb*=ckIq|Og3z>Bc>vK4nV4Q>gku+k{W1Yu4V*@H%G>nE%S4@^-X zS6H_m{e99eQ>5oNQv~OCQ)Ij9 z%wjXshr;n9iE5!fzB9WPlTSR^F}D-udJazYC8g(rt*6?iHSYY51gxC-r&8ocwT7!Wya*ITE8v#Zz^` zzf2L`RuPp3aq$Oo%n@8HhxMorQv~T>rbtaYMtNQTDeE5y`jxE)lo(-Ze^4*xM-lcf z2>PJjzai)!l7RKZe=lOg6{+SaPMr!$S?4B|L4{Y^D^y}?$mq?GTJ_1kDBX1~Lc(Hq zC(1#AqykG^e&fEl(fGOMnC$Hp-`PJaEey2IT3(j#BX`UO_Jb+Vq=gRGAI21T?||p> za|4dN4oQw}@vL5=h620PC5<4^{vaXZ7d1>LdqrBSPr4kM(kcj{)K0>Do#?lIs{Ea; z-yYPd;1%Q8tw2HzJaZ}q)Z@uaCcYzm3IEPP)I9W{Daj27lMkg3s^dAd?rBL4UJFg! zE>p2$bS@IdNpYRj9zI&utD`;d_VqHkWeVY-ho4ufI}i!A!N&`_KC%|9HbO7c-~?5o zS_N4(?iKiFSxRYf9rzk~A!rx#EZqdIO|=)~Q1R-fvGJAjM4e28jqM5O$Ltl8p58+JSFprK}W(zFgvBu_wI z_odtI=eBm-j?U&!FoVx_y1>D^R>r=uqiV)s$Wp89qCfo|;-dAfY@y@xKq5;V32C$@ z?yF6v?4-(-@rGgf12!j9j*Td298i>lZ{Dk4{o~P=ygV)0r9Id=dN9x&&w-rVl6_E- ztH=EGl56|4A=Pl*=w3O-`j+S3PnZO?zh5LDoFex@#xZX4a@S2R_rgFVr{x%i(hukx zzs)a3=TY+1FADP{?GsLPft5vCc_ti811ELNMvq*FR?Gd^j2nfObMD}O-;gv9SR0?3 z+^F7%2{exFy7(Vps9>({-m2)P5&y2$Kjl_^EV^-_hR60zRQ0U z^U(j~+6vjr3rBeW4zEuL@2^c&&3mN*}FgCe_0v-4iY1aSPLg>^>E z=a~nvT^c$?p@Bfc8fo^>2s&A6$q`~Flv`7)FfvD^+Q2@?$!Cc!_qJHRRNpwV;#M6Q zpi(OGVH&nlJ@!W^vXFps9jX<&Eh39ASJ+=6k22$8FMt|mo%RwnrGep^RXK5>4JM?dH4E1DBflT=)l1RCOMlV5s zamVj3;+OhtfgkhEe>}Hejpd)8o70CB>3@)kzJWc>FQ@hYz9L!&T{~K1xBsnJiWd$6 zz+E1o1ps_DFA3E{j}o~3tu<_`Ep{nCu(IcqSRaJ2WdWT{zN9_8)exT}VHk4OrFR@L zu|M?iaD|)pVt>!1+xK%1#*OB2jkaVc1^qsPv7*7*H;z)O45*By&|1=ImC))15$F;v z%^_~h*%l3n8mvjpW;^&v?$vk23hR~abNdwG%}TJWMq9%g80#&X?oOA~cc#|i&Kee? z_bh}#TNDjGMI}R8_fHM26_Z31!A{Ym@{UFP-yX>S1E&C9{g{mj%Fh5FfBZ86_j^HX zcYpk6-G2|hza_-~z{>4WyzqYX2>s4H{jilJBTMrc7}9FPkiiJgbe5)i5S#00Aq3OQ zC7#Zm&i8QRaxsqnDmXn9?r^31HbmG#K@8%!Uv7sO0Rm&$q>%Se!(zVTj^)YpKSA7# zrJoQHU&{25;NTZWdZsCTPtG+AjLOs{5sC#HWvm*GSFwxx>S2P2Q(o{QqSYj?nML|)k-!!5!OURiz5vZp0%o+x>N~1vL8);9E-t}JO%5u8sZ>d$gBAu_YJXeMlLu5& zg`(7VOdz$&3NnM8Uj>|}yh?YIC35Tt*DE(empddSNE4(Mqqu^7ma)9vtl&UB46A(O zNDyA`B)B%_lFMy?4Z$b0aU)9_G(H$EaCNn{UAggK>Ujqg{utl^CcMr zx9+wy=IQ&Mp;5Ep5`VQJ)??xM#4T5}39S5t3SBACDImSZBi%VZbulsV0{l3ptxD?re0EWX;2EEf=)E*QSz-PpJ?niYhWh>T=cqZ@l z7&$)CCF~W|0|~o+bspVO7%V+2_y{ugBoim7qV+ARRRVU-Kaqo%+6 zjNqLUUxNT!(Zno$MnY1TQY(H7N!m7Pohdl|y;f58GtwB{c4pQ{c}#0@fXP z>Q{VH)Rg$!68wf}l{0;3vrOf9A(jWeOLdc8%MM>Jbem+Vuw<%~Y$)$CC#vkOYqPDD z{YVJ59;cH^QLFi6_}cdsM%uoV2Bj5B zf%gpquE=4&czK8*+{Y!CuM{e!-4C0$sbktV8(F6uNdUJ$=8$e?4-V-PSG01c_`Y|0 zrzm&cJu63BC$-;T0mP2DpD0nHXqAFxl~}ljCU?F+K0xkleH<}9=7sum?6sG*YV$=w zM;}))NLYZC?d#hNy6Bgc@1*SVOTNi^0iYx}a>3k5I!?(Btw$#{Dz1Ox`>>va5FT0I#OkUW{+bqWN4)%2JCs#Elg;*@%b;N*d&>*e& z_;Y^kGK^$J%$Tq>Tv$w_D`!i^5GM^W{k0w%Oi_w;6 z=C>R!->}9uPjm*zba-LtCc3PPSp7%0haVf*+t@pK*s+O!ObIZ#0{5-1PMmCbS-+>u z5DaS&%;t=9dAav^sKU#>Zr5akUsU^p0-z)vf*Ff@^z-i|8;#w0Wq{saFAfv;Bmz?y z1~BLe?q37vsoLzYo49ze!_z&okZLpSXEF`OLTr3u^kFki#5-%QUiA206 zk*%%B-S?JGIusG<3!F~H6e(ar@`n*qsZK-?Lp33CW@4JIDQsS31S3k*rNnbJDd3Gq z$ef(rD^qrSf52j;uold z#S=8B0E+xHHee$P#^2sK9tpb7QJyeb_|>I^JD0VUltQ!87v}ZAZ4&TRAkirKZ*23t z!#0r^v_Pb#64hxVdq>8^P0YZ|_k$y}Q|MdlLm zOJPLg$Y%hsSZio~XghVZPmdD$N&PtwhiVBJd0;~TRe zSFbHy8}ye@r;|8j@Oma1RD=*cL7ols;lFJ>P9=Mo#DWmIS0%HDD1wPsc708wH>hz? z9Hbvj70Z2Dz7EzqJ;Yfv8IWr|q&kGMmqM&6G>AHYCOKaAIkH_E9S3aml+Q;FD-Fnf z+U7>yxJcp|@I3d>`L+~>_XVtV);)Gjr$Q=!I-YMH)f}LZ!rS;cR|zIHu$H4brD_a& zp{vB#UQ$JG2SMgjp{h>c!WgJaz3D!Qzlya5b?1}plXrPIh_KHW+QP{80=FhZ?7(e; zm#~g$@HNn)ZQ%UP?il3vvq$l6&K*JLZyMhQt`QL5>|}9>3wT|=z{S~hbNDJeVz-|0 zy1ty&n{m8@ZCM3JfZ&FyI2e36!u5YzuKq2^loEqVXE)? z|JUz-{^mb>{C&szuloh-;W^j_{YWL*e&5aapGm2ewZX^k^*^VN|8SpY8rs%7YzW>L zMb$1XaXzb_?W}XToNmgiz$*9E9Ll7aVXMRwD>BOU$IhKK86XhiHVRPtE5*6dW8b)U zA8)WZc_$&XGD4nhiV{B$O5PM_?GmRv}0cyuTv+4TG;BA88sVT zlC8_0LV$WnqzmMcFGuKW#h$f=hWEd{YsW1 z-}1`_nnukI)iy1s(KDM#Njbo|;)c-5I2$m(OLlo`kX*KIN71xEA)5M(T1U2c*Lu25 zf16L^!R*pNX9L>zdh#Vr^uyComd3N*Xg&jic~D5U1(s%gSmD<~x)?Yksf-iA+0$Na zG*zEUZk+}&^F;8cDarRx^sQ)^KXShkldQ}j#0=0A{zP%9_C1u00I2?I6y1I_dgICV zkRVjUlK6HAZv1bKg{12Wx1YtpiM|`r>w%kFHJA-m_a|V|=*+l!+LY?KlC^^d%q^o} z=QVRwcWC|GJ0O*EAMF)LflAR3LPcZr>-E z{Da-2wQde#&U2XFoOSQW#%r+3frW=vL$N3N`(1?6# zdk%=hQ=Xc$%T+7aY~wr|Nbamsv+^yBDNdjV@0Qh=s>#0cvud+D`=GpYhkTx=(!>!; zGmcVP*F8#|n8zGXbyC~0Kmk>D;t9LG>!||?xv%n;6&DjtOP~1DbTdu5UN~Q*vX|MK zLClpz8(7%z63x25*kbWUnQR3;)tzV?AFq4*#VooI6?XS!l;*)A&~<5Sj^@Zd)9_>C znhs%<6k5(fj8>x7+#Z}mI+10G-FAu1GylV6~4_7>_is*S+7 zFThu3FN_Fu>WJSsd|Jq4E20(yiPqj!PtT-ul36Xq$+Nt$RM9)|D7mhP2z@R3jGJNx z&C)l*$&iffVCGD(#=j4x>eSUcVAJ=>tK6&#*b++G468l>iZM;JD_E4l?+dIskE@nfyMQJBK^1JTGU}=_7*R-tO(m zh^zdwywggGJ>9rf+8mie-Vq>|Jxc;%?&eT|@~S{y>B?;VUHLMZ^Cr5pL>Gx^ZC`#= zwT1CGS4D-)^djsDW1VU?y!9AGK=><8+kWwZxuzk*mt`oqFJ><(_My|!CL$y_l|3Fl zGYpTAso8R(cc5*<-yFIs$Q`y%tK* z<=d7o|197cahF|Q{b_{9uXxXKr!GhBts-}QyRD{7{rUwpfpum^sI4xNNZL~m3o7~? zD)P=9EUP+u#|#jfmW*`~obG<#KhbayRL+6%d%la`Fy1EzY_y~wPAzah2W^f6IIT%# z9MF5qwjGX$uU2ojA}bOcH6D^_fo00HsmwyPoF^~ib({$OGMA&+fo6CXnl5ql`R9~J zJv(pi;OyqE?VUN3-+mxXCq5WCaDR%7Qm8wX;^k~`6wk`gsK~@?QKaIHw(EZ~y{yP! zOZgsxrT3!oiLHtauWZ`k@Yb625LoXg-FPeeQ+Cc&4T`qMdJ&TG&zt?z-&FDs)o_-V zR9O4aD7_Eo9q%tXrEBM4YNV_0@Lwv&cr<@_4?RNQ#Ve}dWaH6%8UCp*-RO>Ret^Ty zL@bLgLq*ubW`rdw;fNM%aMzgoror_DW?vi?8iRx+30V|@c8}{3nZ`8vMaeq)w{FMs z&o!_MSpG)W0+kVZZ_Jq6_Qbli2oq?QCsMe^W>I=_CPus_v!7D3#(AG8B*7 z%U7R%=b@ZfA$C+KngkJp3nfw{=Iyv${tn)irA6yE)YF%H;TgF4L!%BC$<%@0Fg8!w zC|1pwx`j{DFXChK&=43ys`bwaG7Tl-?R3X?o%v{e{?r{y@^Ah%wu^xbyS<>$qNW$K zxhseqyo&5%&!*mwZ&*pGuZ?5h&{*msMF@37SWdo&HRh<*I?)|m%1Xo8CsG7lHwjP= zFqK|)$Iz-$-0%miR51>I)p>63fNB+6P6@g(20vXIN*9=chvDp)90mxMx z%HmV3Czi%shb|VHN@8pe|A9Z|O}R~Bn1=tALVirF6s9-_5fc2s0g6!2&Q#jUl@#)Z zVhPp26)9Ii|3q4KLOzm4{L&UZtpn}k=qPkonvV=Ls4ZDCP#a$1rF{t2(-oEx8Q?c@ ziYd}A)N4|6uB40bZgX+RDDt_|iK^HQ9?_^CY#K=B?0Wd9Q3n5M@xtT1-E-#hT zGPH@e7nb|%8}9BB{01=~=m6s-hD)hS!wKgx{PvAJ${Qvrf47|;sr10fP5P2if?MZd zjfoX+kdo!p4Fe`C3#yd7$4{G73q<}D>|6g^rZcuv z&|w3P`G+=IUO2_?5)`o`d(2VxZ~O^EE8vRL+K8SK$8N1B9@~b&1JU9m>nxmHlg>`M z42KFjq!9|_{ zoiG1mhA3l&^3Z=kMI+Rkpq7LHcrlkCwBSmF>Ymix&TdXQ$ZwjMv z5YY%PJdW!)$UedYAe5~iXd&c1dWfwnBd4QLG^wAw0KyHPc#uL6@^;q4;M>({wOmvT z03ZUN#Jf@_iimtV5`Hv1!{;JuR!8WaZ#su)ai9}TH{ka!w$GnIrHDgZar(F<3E^iR zWG%HYsVthv!IJk9yYzj;(#HWK<#%jBY5~0SVTch&9MeiMMaLpA#uYNnGc`RP9XyXb zUY%U+o$h~}I4aiLu>*b{2}D=je7!lLdVkqjAYb(P(Z~7I%iTI234iBg8;>KcJlwFf zt*NPvqxJp7s!&J;%K@h-K6LGTGr=sP0}1jo#qCKS?!K!+Q1d-}Ql=_aS?^~fj9A}I88w8t~@^mLy>Y1V;!w_in{H8lGZd&9Q z2(}=ri7PPpc%cE5^+SRDB2iIuS&|0HQa}6waaDZKbY4ZYIUrItqu4|sL4mq1&!?{M zKONgx7fe>QGTyvAt~XA-MocmVSS2AreW~81Vu(?8PUOYlZQ_SA3BE4d8PusG%j+Q` z@gVqZ4@zaLgf{dU7?}>>+nLv8L{mdo4RhCfsXKPh@((a|5d@V!tpV_l%}alOZ4~Gh zPlcSHoEeJX2O?B*A>XQ38KAuKN6*2ST1gqEo44U)hN0dZvy z$T|@4 zP_oxY(QhPJUQY;JKGiz?=rsD-$iI;z2>f26|MA6_GZksqt|}>={zN&_TKQ`dFTxmz zA*bp$nVrt7t}KS&yHRouSB0P9P~sJ#2R>OqR62j1@Z6?8G(Pcn)C&5Mme2@TmUp~%OXM~@aUdF5q5o|Q;GN9Vj`{hx( zS{=<#wO+1v0wd{m^pE}3dsUgRIahtq0j&hppTfe7dbE^3@7SX>4Lp`F8s3SRLRtcf z8L<}h1&y!MB-jEg7qIBySZf`yBx-X9Xif$?Hd#ym_!7~OMx&Jb=^%?r`cS|$632LP zgZAk@?Dh7gyNaM=Wt(a4#Ebfikf8s`Jd3;>A zaWu?z?3@1d89e1jR#33`E$=5OabUnxQ7wr*#LLtIA~GMSM+t9Vh(I-J%hx=v(he%g z-Jw(e?+E!tR6oB3S#o|BoArqOgdVm~Dq)c%R$no({2cv}(LXZ{o6vCcfJ=Bn9i>5A z`@1}Fp>9PaeDC^VCJW@;e$HY-wyk8ssKz?$BW_#32tq#H(y}enS+; zxr;40JAwk6%bK5bf|Ur5667V1sS8TIY4SCwzt}B zARdAtkzFgOzBdh$j~l?{a;?+Vew;PZ1Q)^}tLW!0j6{s9r5op-#cT80f8;gGnw==i zZyPkv1C-W&^1d1KBW>XlS#EJ4@H@>kZD%lzyiBs-#Kg$Syj6&DII-OEX0RADC*mp+I+aHzm;sUIw=3?%Tq@q`-cJ`qeQ09!No$Ur1V**3#hLL;E$n zzZ{wTy;FPA%J)`P*Su@fh>5SHVkjY2 zinLz&JR^A2odKgk_@iSp%x6lB>=K9i&-H4wmp~bw<`ExJQwmoaB$JOl7{#0q@)t zwk5gurVT%`+>(5;PbmiIwl+$2fS zd84h3(XGJ(eEWRho}2dBfOQxJOl#%B&Vy>OphuNz;w{w?Xz~CG6U*&d^b8U<7&E)R z4JBSl$8VP!b?Jnd?3f@!Qtssqv_(%H9YO4Q1c&g=c%@EN;DM;S9D?f}(CwsKy2giC zjLrfqNi}DE_JZGK% ziVYg;{OY0O+vHOP9;pDl(R<9G1;ZY_kG~IdOA$NtQs;Mp%^as*JKm4{xhEF#J>E#3 zez^Y$%S&4K2a;{SqK>Q(wL4tTWS}TrOgKOHVOBr`z(Xbt54OVIC6{IehBq!lu!;w+BcQxoFh~haP`N zheTNIU;MyfOU#7a^FU+cJf2c^p^>~UsX7ogIwI#hc`0`W>cY|w; zrSlJE>qS8qK!Vs}g1lI7-CHF1OmLZoIEn64^Gvx@CcrsF&aS&EiC4He;*vO1dx+LC zvz@J&m-xXBqgKgXnN1?Ogro#}#5HSc%GaE`I7UAtgc-W)Zr0J~7Vae8`Z4cg0)LYC zPGbO6HtKv|ud`^oMN|rp1Y}dbDg}oQu-=J4U2K!RL zZ((ccg?S|sOBQGSeJON&O>jfdvPZn!Ui0kmM~nffV7uZh9Y*z|QN}LD;a*Hplxo&b z_!SuP0c)2|@*di>CiEX9>e!#j+q_`+GX%hM;9jp4ZH@`nL#lLq`G$MR@HdVLNO!P| zhAfk&MQ`D=jRMPD3eX-J2$deH%aH18RKOI*{J8^B;~t?pn{6IK6G7AIW^QhMuPDkx z7ViN`B6L~qhiezVi_Ry#(jWj=>yDkP!)PQIu){AQkbbI&g-sp;K$SWcsB{2yf@;zQ ziUG{S2J+6%xf92VnDV7}M^_0S`@m$C`Wz(npu9r&mm6B|D4@wdY-o5ag#49=VCoM|Me3mT#_`Y2YE*o?ol}Em+^H#9L zQOvpZ{cQbh@bQEilf3=TuJw&nBWu38STW(xNfqJDvUp;mCU^8l(I<)ux`Z27MNV(H zq6=RhtLfHz7y`N3Y8DP^#{F<=apUyeF=;H=T(R>VT&=vFvtb@`>-8|by5@Ze!q=hg z3MnxOBtqtWg($;Cb?&-3q_?pFrn%5yF>$zpkpL6fLbQxvmoORzJ2#DrpRn|YAEFJM zr=7y9;#I$=kWdGuFd-6cPU;p>A^i7!OftASPhNwba1%#MnMfBaT?7eqenr$ zK^sBwVEBQzmTIxO;F$z#3QwJ_Ln$2>2V&5Xxak>WXvLYnn8(LaU5DZ*NiR%ZN2aU`k}(PqarGjIQGE;+CFGp3bjosGl+WsQJT5 zj%*VdG4JP{;MkSJ&W5&I`)mBLe#CM%9-$m5Hi5r$O@(UCE2qCyDT{4YND*c>d01te zMH7cLp;p{`HTbZ6)h1ug@{j-1-d9FdxpwU?X^~PI>29P`k#3|@ zK)OR3X=wzcJEW0rX{1X+x};0#l4hN?wy#^zz1{mex3k^B?X5l zFo4dVTlFYs-XSdf0H_?)f6zRPI|*xsCx zXacv9SU0MIOGHF;sx9dmq(#F!7*7^nxen1gL=?YZ_SbgZi?7>|9+gxW7oZ(}D5E_v z`V8R8=m+roSD%E^%l@ zeX_F|tBhZ=z4|&FniNKSzW7w8Ex zmc6ZacvMoMt&g+G*x6D?q+KLuhBotved0;E^E2b%TtBSv%)P-&2k@%v^gw^@;SQx1 z%^cz=rRaG~x0uMHpIGGIEzaIrxuIUU|6)fMyC4u=y=dFuJ}-=~IXw;utZ-b(s7DUt z@nj#pWD{jj>6nbT0l}l;4}pwSWX|Hgbzikj^%3(8)vW!NkCbrfauo#LK>25tL(4;a z#M8N?Qz_mjV!^3q#6`zeVdJ_S7BusVS^)p%@5v}$c_f;?RdN6BNUvqDJYGTgt zb>{ZIHEZ|uynkKuU4rVC!3wtSaKA*9gCLl(_0w5InDD3uiRet>-c&E z*JtQFImOf%q)xbBNr;{!;8swvSMm`TJCwVUc^$8CD=QK*IUpR7?kK~HaCV6ir$5xR z`33Sb>A{Z>5rze}MMzk9YUc0LqO&J#qbVv#%_NKaoJ^%nmHiNS>Mu0Zkwy{v8KfT; z!gFTY1$R{(f-*i6DeUa~yZg2(h-;V;$_tXAC7nA;Tz3*yiYNZTg1Psh-S7A-6R33hpKL=*KOv)ZcddpiNB|2UP_X z8?h#z%F%n5jmP=S_Y3I4;MG)y0_A9Hl!I(b2=gE{)uqZ|t;sCC7(=52r6XfMk~rG2 zW=0)ii*$K)q|19@9aY#eZxOa_EPEi@kM>2!B%$z8Bld1vj-0tDe;&c>3N5vD0_P`$ zu%q-HgH?laHrVSGa6H@^i84^{k;-7d$;WU!U2JAPq(W-EBRw^hz7OhEM$T-39iVK;Fdqdpc zxsD3DN5rU@gsUURNRKA zydU1^={oUP$jMaBzw61Wj*1`BSJ-X+0jq#2A289Ji+(6 z9ZI9E{a5X}?G?(+bEz(XG%1frPkU%mPB9~8%pcX>lUqd!t+mG?(>toqdGvXpc_G7T z)2Qmvn@o9ANy}an2Sv}^s5dJ2GKlVEC;B)pLN#X%>&h~X4Qq_$cS}hPrE@jiSC0`E z60<;!Zw#yH<+-HWj^AUu}w; zeitu>onr$#CqZ203r_@U2Tu0Arn)r|mevtMm~OWkRLRM(YzCo|$)xoZgWh`bprTc* zEvEh|sw~U9h@w4sJQoeKC|M1!JxzHtpE0jb`ZO}W)dFnrGDzj#!52d#G`bK~3lZS# zPGc?`&q=|TkLyL7f}mj4<67l>9lk&V5v6PT=Cm-guR`HnsdiH=>@7rBs&W%{Aqc2? zhhE7j&ZkD2Z6_YXs3q;s2ZaZ#SwoE2m=^j=>?bW$RbJSOka8FYFxXcPTIN8{NczmT zktseA=1+`-&Qn4rG(9pojMJ7OvAruto%|(c(doHAoYC_*WrLCN3SUp*94g1hQ1BJm zqKbsU>*ISXi?r2Gwq;n&ZdE^zK`KJ8SySTrfEtE&`9@M9FDX>Bq^OBExc7dp=4*xz z_aCSbD#Nzi2|fwTkvG9xTvxV3gU@3xMSkUE+VXypvS71CZ>EH5AhKVQba@0$gj(S+ zl)F$F-;@texvU_nR}Gc!lc3}-PAAsu6qn_EOr3TjAUiPy1%)8QQPLrkcgw3Z`RWx0 zmJMaMll<*M--)V3Rf;x9veY_5E(t+-c(S{V5OgCuR~SA&)3CuV9fc?I0(^8*`nKBO zAl$#yQv(CtNAOn31G#hVftc^uzXJV%OK%Rs{lm%fH@s_&kR~J$$6avyBGApFAb!mU ziv)v%ioEhm7)wn!j+*GZ(4C`jM?hU~Ur%39jp*GnW~g2!`CGMKBJ#EVg(rbU{-L{e zD|hGlU>!?z31r`zt7B73jl^MmM&i6&O8xkVV+XgQZ8Yj!b?Tv*#?C{DIrGHZ0))c0 z*0i-7vi>|Yg2X4VrXpzLSvcJ)g>-_p%_1yQwG$za4|{haGE`l--v$&&oD(#}3c26< zK~=)gyOc47;w`WMY0QBi3{dNh^v%q*t_ji5+x{mxBGQUjE0p;cg*#Ak1URA$005}~ zG}@wa4|GMP*d(1eS#_9|9_Y!l8mq~3vOQ5!Vv|xfGtsutb5fACd?*Ss1K3dJd!5dP z))%L>+p4Md7Hdj7oa&uoUT*fo@)6B2Sjl#r2N?GLX)M5c2!04}Qt^l``x+NNZ8P_; zXM~r@DO#~Bp7U?TW9PRRifGx5dI$BaMVt4O_vBIMz<3XXdIV9%bn3=PME&N-k4P89PrJ zIt`WTZ%xqIj}|t;OpK)+^Fm`%2OVx?K6KGea7lnBl%)D|_`#mOzp?{&>nRImIFf%x z2eGjh>1IHNa~K8LU}Y>8@BdI zeX@zs&4G?6M?MLP(T%s5eSM0kV%n+W{0vZbRYYYeE{QdxUU47p#1;bC*H(Zl1e@J2 zoDsJDXpsFS4rhlV#(IIaf%PY`Kmt$ui=(gkvXs#9`dB1k)zBp~-a#(o%Ypr8^*ifs zG%8f=v^u^g7>`{;&DcB|Mtxelf*_^}phJr>lh>@t9~0@W8oAkUjo5l5QY3!HTYX*Q z*-#FrsIP`R<`8EfLxUgf*(}+vGv6|c?kaylr|nmIf>MdhCM++wk%H8c8E8#NlR>fA z?BqNeA|8E*Xo|KBbk2&wXBN{mf8~v1eR9(1o(8*keknQs<&m@FI@ z{@k`T<4T$9rjG8*-4-;UgQh0?TN5(OO~6@I%v7bQ1?15@*vmH;c`ddR-z zQw#@0_a+3blEcrp6*FO{3Th|bBdd`$ixz9#UpqN;7raHKJH2<7vIk5}u77y@>9#w+ zf#U&?WQYEepi0D*7Kl8%*LUo`1M{K}*x~T8?2_Oq@ZrU5gY|6utxF$Z%9<_smuD_1 z2tEOq)PNDD7f%ZJd8_k)B0*TY7Yixir3JJI?vw`Lf6LnW=8guh-ojN*>N*$z0Q`V+ zQT|xHphTzt;+j=8x18d*w`F({=qdkf+oMd=tV6nd9JxB<^9ozSi*=UzmicE720O_m z!)V32>}pT8Va20Kx-24|C2Zl%@!c9r^kc@2ckyNJipX@}qUf%o2`|O$CvMn2YiW9O zeBj!6@fkLKPH2Dt`ck`}0Qv&c4JAmp>CR4yA*WPVInfs%pr31n*BS3!;?IcGQqagm z$hgGIE2b1y7a^$WA!t!qSX`bdVVNiskdVTUgTe#Q6Xks*nz2x*i0;DgnY7N6wxR6l zeO`*vnBA;y*f)f2h~eM3=)c_~!%J|B#|r2*^K767Sg+~s4s3jd`@R)LfP|yPTknIB zNU9zSaW?THx%c~2syOX60A(bddm79amO_thabA+;phetWmsaV^906ED!6kcP)&ynT=Gjfs=DTcx& z^FLYip;A1FZW|bGB-l{PO`Vp^Oygw4lH`o13KrWtIf9{dv9MFK_!`zqNu_|Dg?tSvS|Gp_U3~u#hTTUXDJR@26fVZIV6ZW^n zR>((h7gXE!8k-a_#ztO2Jz1kA+e;w#@;m0mI#fUB#R`FOz69bAz5vouz82u13u!76 z@}b4KEG91%gG(x+eKH(nxHN>lU!q9Q&mgDC&rHcyxj`6 zd@B<`qbGWRb69!4pgEF{zC9$TG0GNI3coDjB5zZBAEL3vPcpV58}D4{-N2}uowZnk zRzo5CRlN!V^oV_tZev*C~}yVU7k@w zI%6lsFUiuFFZ8u@JQ+>H4mpn+6euew_B|3gb6>c8Wb(SPrav>@ir!3{%F(=wU4O(; z%+mbAk;{#pPnR;qXXgwCGBglNAoh;=Mom~ncFJV@{!96N>2$6#?%~+NLl^28Qs#Y> zLPcLz#Vpy8XvhH#0>gXRkz?(*46ttFy|nv?6%&{xSWv@E##C*SrnpvoFfy=4i$Rq5 zRP*v6CZeaOv3Vq6w@YvDl9s2s&J2M3OtM@P9vyOIpd_=PV$_(vm45++i@}c}s?#yw z9p|{CCC0FYl5=YpnIU~**5-V3b$xejA?EUPTVr7n20Kv2HSi+g35Q;j<;IFiW6F7i zW_AXr|eL;3XZvHuoL@EZCxAbPbYl#5B!6C_)v#S()xiFNc z>y^gb?d`%~w%45R4cB6$TBYIe!uD@H+3TCd0eB!S!zl6-zdCi0P*o{jZQRdvP#@uW zTR%C8FV0~7X=sh-Gh)q@l6e~*%l(Qvw z_sSR|j!I+dc~Z{V!6)ERU0XMR_~#R_()O;C04zvz4D=xWc>;nIZ2vzVfwU*AA9Z+_ z!m|>l%)S&19U%F6HHnhMJrK$zB^%pZX(Y(OR1Z(eYODNAKgWln4mtq^;$1qi^}Cq9 zB+>Z~e~oY5n0N zi`xesfv`uIcf$wNBLm^L_*T?N#n@isjoEW4d349Hd~_P3IuD|Sna#%>fPj#URT1Dn zCo}O6O(#_oh4b;=cq#t$Zab~C&cXY97Mi>uZu?pL{OyOQUQ1`ZB(y?@y>N437u!g} z7S2Fq^7NKVcX-a1apdu*Rv|=UaZ1sx-m)o)0gf**--p0s&<9CBbC>R}beEoq+*u6IWhs6*g!-N=@h0Mjb=Hv(Y?Y}IRJpUBrrxY#dG&DWIW?x2HN;$SKI2dGPyNY|5 z2!o%&6ULuj#JFZX96d++R_1=F@kVqoXE&w)XscFi$p=UTs%+@b2J_vIYkVfTUMkZd zW%CirQlVPi>%H$e&`M})4#jG~uQ$J%chj@_gsymD|6oVrSc39*zqk_^LYU0^T z#)FDboA@QG4*W@aTq*3`=R_(VrHHgEC*z#<`2bx;3b~=sW3^uP>Fr69sghEwL(yqS z8u_}A&+i_%dKs_vvYfJnA_fhuBO{CSx^-B89eVT{TW!bB^Ot9$c@yq7{KIg02HFgntaLoB1*|k@M0Cuxv|8YEwbZ8R9NB^W zw8nG0{s6hO2PnjESV*X~3vl!Xid=MM^a3w-m)--P5ZPT)h^4(q5SVi*Lu;5rJ4Ur> z6dzz1!it#9@lAg*D6b-?GN2R}j9yeyJM(b-UZ>YAJC=tE)LIiirTK#J=$4y-b)SUv z;eDUI=?^mLwQ{eVN{QcUI$Dv)=f9QnDaAl~{O)NVsXtXw1*G8Gon_DGAB~=n1_wNK zAfX!6vlK~}(VWjql{F^h;i#`U{cM@7tnBW$t~@j}v9Ve0@WO5cfZr5JS#ggEko!hg zPFlBM2%+^c1Tt5DM}MZM(;GJ&E{es~Rb5`5&-)Jj7i%flmtXgLZLLpw<~H_t*~faO z+zWW2`Zi&4nUC1*ozrIeE~PAW2DL!+J?)6vR}(s&Wm>}9S&ar`K`Ey8*xZoBS|KyE zAsvgD6g0KiP^g#InnKomvAO+~lGOyTn&|?VN_S1x8YZ)LD%IZeuM0ZWYYJAF?=25EmzT55G!?G54Tef~rL*MdPWJnGH{+Wmm61?Qq_FWels-C9RR?mNpiG5*Mc+sT>KFzVJHmQD~%DxBUu?`8383kw4kq(C$|2nQe#C?#DyC zC@#&9xpj^hMBbqjwkGbkiE0~3pBzAR?#D7m3L8^1bQ%^_ ztWP@-mm6%$P?I~to8KF#nVI$#lWZmwi4s#XQiPgBjKUgmu0|2}IlRLo|N= zvv@I=H~QFCYTEDx3w%@SB)c5sO=I@Qw2+J^vxB94hb~Z7q`(M0`-%wQ;;x=sA5gxN ztZqc13_(+yFF`Kvv5rP*kmf7jb+m8~McV*l09y~)C^7WgD3lXXD>V`GU6f^&fKEvV zN~svv8pvTO)tSI>{X8@`It%ZHsGQJs0Aco?rg3hP5-sD9oSu|0S?|_bPRiF%B^xnT zYCOtFx}FCa7)6Y>a@R< zs7gi8eY4!wEE})NW#V+VJa8%%dICw8 za67s-gm}nzTXkUUZL#i6@!oslC2<_^ZYM-scs3@-H<^wABOiZF(&e$vMYjt5yIAj5 zJ(lF;##^%?SeIieBW&5iadXh>O68Yn1YWv_vm-90Ex;kpxWp46TB$tn6LWI5mHE4- z?Q$gQVV3N8oKoBKqj|{I?Waw}`j1tL(tBra1H@19dqT7k>9%+$LEMuuBn82!&V+l& zk1rHyRdfOr>~h$*$QyRcCr*c@YG<-iHZ&%ROUT|Xw>)cdjrMxI^Mu4U+x@J#e=g)R zQr?7hYSCxY#uqd#=MIN;CzCE>5FFvahzZBK2%xeU6Za~RsCxZxL0KH_}o+R-#-ZEZbjZrtY@->WG zWhZ()gihxy^uqnL)Jg?-h~YYs{$BTD)}>M%D3$Gt&GFa-nqrC~=l+*sup z56yjxa_2Epd_ZCSRF>5+9x{IKM2IhYw%_YV0|H1Ru@vxaV>8bUIeSza&`%h^7a48C z0&f7}RRNw%FDltB?N%gWPzVAYw0(jvGE#ifV!}f53O|w_+$vQ5%Ku&;{?Wwi0h;gj z8Cu)=!r^$5!E<=&R}y!0BSR-t1k%w_>CAUOVcKe=8} z>;pxog6_IEvlAw@ehlg9Zp60O(X zKs2&79_lbLO>JK$Q4KZV0%2;sGx1b=7AIPBsC#OSN>(Eba7c^>vN3K-yhe zx<;VnH=94tEpVN$|F?0E8z1V85B0`}dgDXA@uA-MQ2&>FsJ9^SA-}~Dep=M6M4aE? zgWvah@v^JDRA;Qn(zfel=*HFVVg6i9pUM>DPwK7LXa{bx&m%%E#kXs%jP08O(W zmcS!!`@NFtAGPKFc|gD|xn5i3D*g<@Rs0_V@;~h_a4W7C&A4jC6zQs!>;3gVZ4cPe z^{NL~Eun!5c3kPNUuq!yyZ*YaWq%bv8TA@IsKb7F|9@D4;PJRF`F$0C4C5O9F9P8I zZa!TXguaT84bok>(m$a0|7E2Ac8B`w9S`%`j`sni+VlheCoSK9*ZJ3#e6PMd9`4_Q z|Glp7?|ST8i@+mtT?Y4?QSk0v?x~3Pw?_X_6!&+wzwP(n*?e6+_G*LUL7bJp>CLMR z{$&dO4~G!p+7Px90Dh8X{pWE5H{-e}>(yq!6JAIBM~T+o8T>J3*JaAC8Z@T*+2GI8 zWB+js{BD4L7`m=VcGb}8Plm2)jr|J~KhFH?5@c6Rs8U~V%P)dtziYz}1J~7Rt{Qm# z;JSgo)UNq=My{*7Ts6|lc-_b^S}*@>06fR8Yh7G5fXRB@z^}>|APfJnE`Cjy{$>FH z0DqZd;|5$wo(7@)MRxMHuW~!;@D23WH0rCJ(DW;XhHq`5+ zlC*Io0ooe=ehpv8y_-({~_1}I&{C4HJZvgn& zn+t*jdvkx&lfQZ@ufC+WA>beUmLLmYzvV9$pg~Mg0Duhi=NP165N!ee*9{~5h7o?l z2)|*3gZF~}i!6?tXvR%6<0hJM6V14ZX52(G{+FT|-^)RP?;qE13*U31{=6UD{&tD^ z?*{a57~waJ@Eb<>4I})95q`r6zhQ*mFv4#b;Wv!%8%FpIBm7@8!nsrgWQ*`Vzug9T zEPu@i??7+X=R9CtE`@U|NctiS^TE_MvWShiq{K{# znv@56MkkuEoJaE(Hu1++969bB6COKT_te}af5pSih{KeNx!a5ROjV;e=`)FS4|}wz zdsd@{6Bxmxi0}Lye7i2^b2Vgi;ql)K?A3aIkC}a!9{F9&>_-^#`c?hv+t$DOj`-)r{og_U sePB-{;ydKO5A6NA46g?Ed}IGAum@h0e-n0t1Hb{&Km^6QIPgsTKNI4q0{{R3 literal 0 HcmV?d00001 diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/structure/HeatStructureTree.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/structure/HeatStructureTree.java index 8d1b5912df..a65db6f2ea 100644 --- a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/structure/HeatStructureTree.java +++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/structure/HeatStructureTree.java @@ -50,6 +50,7 @@ public class HeatStructureTree implements Comparable { private Set nested; private Set other; private Set artifacts; + private Set helm; public HeatStructureTree() { } @@ -165,6 +166,14 @@ public class HeatStructureTree implements Comparable { this.other.add(other); } + public void addToHelmList(HeatStructureTree helm){ + if (this.helm == null) { + this.helm = new TreeSet<>(); + } + + this.helm.add(helm); + } + /** * Find item in set by name boolean. * diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManager.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManager.java index 4ac09fbddd..b441fc8660 100644 --- a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManager.java +++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManager.java @@ -251,7 +251,10 @@ public class HeatTreeManager { } parentHeatStructureTree.getOther().add(childHeatStructureTree); } - } else { + } else if (FileData.Type.HELM.equals(type)) { + parentHeatStructureTree.addToHelmList(childHeatStructureTree); + } + else { artifact = new Artifact(fileName, type); if (!artifactRef.keySet().contains(fileName)) { artifactRef.put(fileName, artifact); diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/to/FileDataCollection.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/to/FileDataCollection.java index a9147b838f..b156078430 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/to/FileDataCollection.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/to/FileDataCollection.java @@ -32,11 +32,16 @@ public class FileDataCollection { Collection addOnFiles; Collection nestedFiles; Collection artifactFiles; + Collection HelmFiles; public Collection getBaseFile() { return baseFiles; } + public Collection getHelmFile() { + return HelmFiles; + } + public void setBaseFile(Collection baseFiles) { this.baseFiles = baseFiles; } @@ -109,6 +114,13 @@ public class FileDataCollection { this.baseFiles.add(baseFile); } + public void addHelmFiles(FileData helmFile) { + if (this.HelmFiles == null) { + this.HelmFiles = new ArrayList<>(); + } + this.HelmFiles.add(helmFile); + } + /** * Add artifact files. * diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java index 6649c90adb..d204281d6b 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java @@ -220,6 +220,19 @@ public class HeatToToscaUtil { return null; } + static FileDataCollection getFileCollectionsByHelmFilter(List fileDataList, Set typeFilter) { + FileDataCollection fileDataCollection = new FileDataCollection(); + Map filteredFiles = filterFileDataListByType(fileDataList, typeFilter); + for (FileData fileData : filteredFiles.values()) { + String fileName = fileData.getFile(); + if((fileData.getType().equals(FileData.Type.HELM))) + { + fileDataCollection.addHelmFiles(fileData); + } + } + return fileDataCollection; + } + static FileDataCollection getFileCollectionsByFilter(List fileDataList, Set typeFilter, TranslationContext translationContext) { FileDataCollection fileDataCollection = new FileDataCollection(); diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java index 339d6ff023..6d22a3602c 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java @@ -70,6 +70,12 @@ public class TranslationService { return types; } + public static Set getTypesToProcessByHelmTranslator() { + Set types = new HashSet<>(); + types.add(FileData.Type.HELM); + return types; + } + /** * Translate heat files translator output. * @@ -81,6 +87,8 @@ public class TranslationService { List fileDataList = translationContext.getManifest().getContent().getData(); FileDataCollection fileDataCollection = HeatToToscaUtil.getFileCollectionsByFilter(fileDataList, TranslationService.getTypesToProcessByTranslator(), translationContext); + FileDataCollection fileDataCollectionHelm = HeatToToscaUtil.getFileCollectionsByHelmFilter(fileDataList, + TranslationService.getTypesToProcessByHelmTranslator()); if (fileDataCollection.getBaseFile() != null) { for (FileData fileData : fileDataCollection.getBaseFile()) { @@ -93,6 +101,13 @@ public class TranslationService { } } + if (fileDataCollectionHelm.getHelmFile() !=null) { + for (FileData fileData : fileDataCollectionHelm.getHelmFile()) { + translateHelmFile(mainServiceTemplate, fileData, translationContext); + + } + } + ToscaServiceModel toscaServiceModel = HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext); @@ -145,6 +160,26 @@ public class TranslationService { } } + + public void translateHelmFile(ServiceTemplate serviceTemplate, FileData heatFileData, + TranslationContext context) { + String heatFileName = heatFileData.getFile(); + Map inputs = serviceTemplate.getTopology_template().getInputs(); + if (!Objects.isNull(inputs)) { + + inputs.entrySet().forEach( + stringParameterDefinitionEntry -> { + List inputParamVFModuleList = getVFModulesList( + inputs.get(stringParameterDefinitionEntry.getKey())); + if (!inputParamVFModuleList.contains(FileUtils.getFileWithoutExtention(heatFileName)) ){ + inputParamVFModuleList.add(FileUtils.getFileWithoutExtention(heatFileName)); + } + } + ); + } + inputs.putAll(inputs); + } + private void handleHeatPseudoParam(String heatFileName, ServiceTemplate serviceTemplate, TranslationContext context) { Map translatedHeatPseudoParam = diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/candidateheat/Module.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/candidateheat/Module.java index d25341469f..25a004e890 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/candidateheat/Module.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/candidateheat/Module.java @@ -23,6 +23,7 @@ package org.openecomp.sdc.vendorsoftwareproduct.types.candidateheat; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.openecomp.sdc.heat.datatypes.manifest.FileData; @Getter @Setter @@ -35,5 +36,6 @@ public class Module { private String env; private String vol; private String volEnv; + private FileData.Type type; } diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java index 5535416838..8bae5e8193 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java @@ -262,11 +262,20 @@ public class CandidateServiceImpl implements CandidateService { if (Objects.nonNull(fileData.getType()) && fileData.getType().equals(FileData.Type.HEAT)) { Module module = new Module(); + module.setType(FileData.Type.HEAT); module.setYaml(fileData.getFile()); module.setIsBase(fileData.getBase()); addHeatDependenciesToModule(module, fileData.getData()); structure.getModules().add(module); - } else if (HeatFileAnalyzer.isYamlOrEnvFile(fileData.getFile()) && + }else if (Objects.nonNull(fileData.getType()) && + fileData.getType().equals(FileData.Type.HELM)) { + Module module = new Module(); + module.setType(FileData.Type.HELM); + module.setYaml(fileData.getFile()); + module.setIsBase(fileData.getBase()); + structure.getModules().add(module); + } + else if (HeatFileAnalyzer.isYamlOrEnvFile(fileData.getFile()) && !FileData.Type.isArtifact(fileData.getType())) { structure.getUnassigned().add(fileData.getFile()); } else { diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/ManifestCreatorNamingConventionImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/ManifestCreatorNamingConventionImpl.java index 539e98df5a..3f061b059c 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/ManifestCreatorNamingConventionImpl.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/ManifestCreatorNamingConventionImpl.java @@ -184,7 +184,11 @@ public class ManifestCreatorNamingConventionImpl implements ManifestCreator { FilesDataStructure filesDataStructure, List fileDataList) { if (CollectionUtils.isNotEmpty(filesDataStructure.getModules())) { for (Module module : filesDataStructure.getModules()) { - FileData fileData = createBaseFileData(FileData.Type.HEAT, module.getYaml()); + FileData.Type type = module.getType(); + if (type == null) { + type = FileData.Type.HEAT; + } + FileData fileData = createBaseFileData(type, module.getYaml()); fileData.setBase(module.getIsBase()); addEnv(module, fileData); addVolume(module, fileData); -- 2.16.6