From fe5d26e9c5fafde074dfc9b5c3506db6e090fa35 Mon Sep 17 00:00:00 2001 From: "gtrivedi@redhat.com" Date: Wed, 14 Jun 2023 00:34:57 +0530 Subject: [PATCH] Hermetic build documentation --- antora-lunr-ui/css/main.css | 4 + .../ROOT/images/build-requirements.png | Bin 0 -> 53893 bytes docs/modules/ROOT/nav-how-to-guides.adoc | 2 + .../how-to-guides/proc_hermetic-builds.adoc | 43 ++++ ...ependencies-to-support-hermetic-build.adoc | 195 ++++++++++++++++++ .../partials/con_hermetic_verification.adoc | 5 + .../partials/con_hermetic_verification.adoc | 5 + 7 files changed, 254 insertions(+) create mode 100644 docs/modules/ROOT/images/build-requirements.png create mode 100644 docs/modules/ROOT/pages/how-to-guides/proc_hermetic-builds.adoc create mode 100644 docs/modules/ROOT/pages/how-to-guides/proc_prefetching-dependencies-to-support-hermetic-build.adoc create mode 100644 docs/modules/ROOT/pages/partials/con_hermetic_verification.adoc create mode 100644 docs/modules/ROOT/partials/con_hermetic_verification.adoc diff --git a/antora-lunr-ui/css/main.css b/antora-lunr-ui/css/main.css index 14a30c7d..5559fe0e 100644 --- a/antora-lunr-ui/css/main.css +++ b/antora-lunr-ui/css/main.css @@ -109,4 +109,8 @@ i.fa.icon-caution::before { aside.toc.sidebar { overflow-block: scroll; +} + +.image { + border: 1px solid #000000 !important; } \ No newline at end of file diff --git a/docs/modules/ROOT/images/build-requirements.png b/docs/modules/ROOT/images/build-requirements.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe2d0b729329239c584485a26f980e3cd6461ba GIT binary patch literal 53893 zcmeFZg;N|&7d|@p0s)qw5j?nuV8PuXxC9OE?ry;)xCIZc!QI^=xVzipvMj%S-|zcw z)vdaJz`a$sYPPm(rswR==_AkSetIH4DN12syv6_k082(%Tm=A-)BphS4G0l_#@I_5 z4gQ7hAg%2T0NDNid=QcuvEKjyIUpl0qUMox{N3G$aA0<5DqTUkAaqsYhh|SuI00@_ zzP|Us*N$6n+gts!qlQ~-hDZ`zCUOkAa5{;0x59!y6eyyvN9s7v$W+}L`IWLmLIQZ# z;=cO2nVV0JpH4z=LooMAgZmEoMakky@%ZOwh8DcKPU!b+yYJPftNo zr>nXu;|ggrV{V;y=aVSTk=b75zE%u0;U`BZQ3&fbVmKAbneIphQ$n=XnLwAk%e^F8dC@QTAxDM|hw2x?uKycPAc?|K@#es+zGt`q#kPhO=2v?i)>OXG^tW zM;grKBR4u*g?LigE}O$vaW}y@LW=LVgF>UYY*%$pQ2#a7+9NeRDDy*^#pWH9S}2K- z@LW#_qZJ@`xz}i`}}L1(cXU6Z_Vq% z!oy;{!M%ZwenaX-snEU_CvuH;RFY=)I7$HgkI;bqg`QhohGKgYC11qwTcIXSeCODT zS}^E@4KDe^S{k+g7SZPL9}XT>mugn8j%yp}dfm?ezY1j%?TN-+-%4fQ9XqoMLih0i zhvj(Vp^iKGP{?qd7n#FwED0a%X{v2f@aSqN$K&CNo{SLxIPG$vxKgJPIe@e483M)J z>V%oWQkXx#;k24>)11O&Z%~A-jBu#XikW zJ7sA{jrMDHcM!4aW~fSAm($}-P%Uf6d*|If>$ytfVVwp$*Sp-n)R>ku-s4m6Q@yJb zci?;|$KP$aiw`j2wu3&oU-p?^uNIEnt~|#t!zC}-x8J(~ceg@kt%g@EKsT?y`DWqm z+Oy%p1wpM=h3yj85DwqzPj(`1tLb0;qPa(T_$(=C#&}|_gwD3H6@}t8CowlG^i9cFRUSR z15Gj720Hl<=1qHTOP4FXB+&e$j79W`OzpcPoF5F?@7*Vh`TQPBuTG};ip<61G)!K= z{QMccm4YQ@!%R(RUa#L>LkCJr>CwpMxg7^tNu75_lgqbn1{E^1{f(9v8;-I)4{Ljd z-p>3qjhe`8+TPh=*1bA0Lc&Ql5`3~LTIRVPLU5RHB3ny!N0U$S=TyZ13;5;A$2Z@!!4 z1(K4ICbK!*f9DU>naNwPEV}=858WG7)T-LM+1=hvyrY6gB-j@<)83&A133d9E&8r4 zMH`RH4rVEXnR?ZxdS!D4BW~#QS6`eF9&h;@B;%#n@5>v@W0}KGtO8Z9FMfXCT;sM$ z8m-oRj(&4$>A1i=fi1{?Sy&gG-D2QRcQP$-(%SY}*T+}&0C%}P&*xz~XuIHiTkDsr%sYxMitSwweng*`-VX8E%{%akUmX-jU>*CeG+S8O{mZ}o3 z_SbuphZilieotR>{O<{X*W7j{{0Ecfv&#ifUX6WieCH;6^a4VFCJa^~g!KkK#n2m7!~+iwlr*$0dK%hc9~ar;zNRTHC!uxBej z&(*T>ujKi9-(SLG@@TEgN}Id4EtF@F82Dhn3JpXf!xe3ZN9r(ao_Bwa-DwmP-o)`= zt#R4vAaw`dKAZ1WOf}iFrm;KEPH^j`rsfDa&k_OM#NI~}nztwWZ)6sV6s%3kSUdGQ zyq+EguH)VhK3pFy70NV1Ta?0X+}7bPM#oL+dk5PJBS8c9vV3=q!pIW4Y?t8KO`}40 z25wSrHtuVlkLP$_5xNz)^}Tx}Qb)eW2|XAVD?TE1-|u~Y+Ba50=sxp@;!b5VBpRv{ z{R4XD%S$8o>=#(e$ZqCwu_%!ourJMt1a8-7{nwfyljU5?jyqp3-Z%Uio&1gnq&)vr zh4EWyA(cWm9e)|6tK1_97u#7n6&Pk_Mt>)3Z#cORYeW<-Z!Ep#U;QXDY){B!m$1_O zIaQHhaG{`$+r428L3Xx6zXKKcSZ^CVg?stCMInq2hZ*BkzogprYvKRU;UrBek~5(Z%8gcBfRB^Qj^ab#|~TZ1u;wo8J>vwH$wE{Qs{$2a9{q++sVQx`TX-!trG zVxUl4rvj1SefumEQ!~nZFy(-w-{bY8Fj{^8`2ECGH9hX%8lzzRp@S^-h&->;bxWZSSi?Sc zU&8uFtK0c+PTYmu4(jbM%@h(Md|*MLf7DR{gYj%C?pBvmCho(T^4q3FMdSdiH(a9> zF5!1giAohV{E+=>zVNQJryq{HzEw)xb(DzH<(k#jsgnTMS>Zu{_GYlT48B*>FZ5INC<;H=BO4cbit7#l~mR*xV%o^N9f&_68oIMW!CS#9B(%roy7|RMnTwJ z;=RF?<$R4uB8|eIKY!d#ms=dSiqJ@XOrD=^KR5aetl77vvvXbatIk1TQW_ewdmP0h z$)Kf1Why2EuX}Z1zP6yo^+=;niJ0pF>TIHUck3!;L#lDj#tK7 zeVe&A*#EpsWWckD14vI9BE^kl2(=CO|Ds!J*~liuS!vM*-9eTT$hy=EN$I{%AZ<%XQq>)Gp<7cBZcM`B;$o8dYNZ57lkL*((!iQ;+Z|us-f`XJ{_nmw z>2nQodq~*(mwh-wGDG@?o?Y8p5&e!?#W_A#(BG-sJA3||XPMQzzQ)*kE6!u>P1-aB2UV0`8LNt+w*2WKR+Mt34(X$#(~6O$NqC8czJ*f zutuww_bq!}Vo690So^_aJUm)yROvDgtU>x>y{~F%jjP&x21b`)enfz-=Y84+?F+v9 zLgh;$CLj0BM+pfDCI0J*2zV7;6en;YyxD%H4Bg5`!`}aUIsVrIT^R21U(O05qxjdJ zw2lPP%zfUM8ctk%|M8>Uh^iQl_V5(p)!g^iVu24;C(T37|6qg!M0hEw>-f1Y3BP`T z49Id(+~OiR?6`DVg&Vp%e)GYB&9j}Qxo(mkmZxk+JJhy|`7`hSui(R(C}LEikp=VY z?DXXOha>yS&s}*6N3-VNJr{RU^;J#W1Fo#$ZBz;C6tfQ`9Q|IzIP6-Usk zn*wc&t;6dk?O~(PJcsP@dhW7mcbg~nZ=P?Pa)G3YX(_c6%ymld!14g@O%o#%6O(p6 zhR=SAva$t|aKP?(7)GYR2gf?W*lLN+w<}Fs&9zekH+QP#8r6~}@T$AhpbKd`5AE!^ ziwc|UYB2MRNw2Y@xw+7_TmwGhhog)v$x$~a%-g#=)p}idjg|jQ41|{jIH@3hBfivb z9AoLYi|ty=;HkNvUXr1W^|^qAmA_R=j)1nm`SvbV&zTR1_TBCAK!}u+wQIgMfQKsg zvFp?`$u_tgP`+2mLzC|j4S|*Eoa<1mw}f4e=U}ONthpvzj<}pc-qB~v#Rl6ByQjft z{&N$vtf`Le?HwfH$CA9Pe+snPJ+aN)MGybcumOpI96v6x*loTVf1%6JwUxf*mP?Ii z*yA8p=D5|=qswvp9X{oFdhz$W)55sfD!J)$Z+N=+@ErUP^pT^0Xxg@4U6jMow3;2a z{p#@s+S$?s>bOD8`8`p`*$FAP$+;kjG*msK>iccm9vSy^Bf-BFqH6qIIhRhOMXlF$ z293hcIQ}ocuIKbuiWKs3MrV*GK7X+PmD@Ap)fxD+!G=#r;R12)F?yLg=3qMjrkV`TuYIKk7hyv??pB$yUlwMA`8`ac*bE6#QRB zI_HA(F^ZFuQYu%H5;u7iUe8tMq-SsP%-Fs9Z;umrTGUk0X}p+2EK>8R*f1$A{a0O<5GE6tP(b*% z>#x3-{e8>0Bgoh$6n^(`A4OBHgXb{-8PNei5Vdfn0h^N02s;D@AOd;-K|igpZow3B zKCqre6#$?DL5@j~K+Q``ZBIu#`YDGt8kdGaAb=fSAt|I`F>-0X>Ib^j&9xi+mN8T{ zq9R@sYacn;(jooAbd=*maG~lUzKm8uBL@rN&=MGlvc*4FtfRl5>(w1c_AK3onbh{j z0yT1jH21swq{^X5bX=rX0f{5l(4v*e)SBnCM~YrjRzqUn7wNxP)mxL=IqE4Wv_Fsd zsHcRxypl`$@{;Bq%jY&wg1_dUhDg`G(qZI~GX;Okp}2`GKvde>#6}X~@FPXljWa?( z3kZ0dY=I{_jCCJtG4tm28fFcbSdQu0?;gfqL4{DbA?2A3kfFr_Z^6P2EXc3X>3E3X z^Y_hFY#oL!*5lx7W=w|j8+H6FBw)`7o!Ew!ibYe@ zKKDBd5$bx-=ruCvYFIf2$`t zO+6k)df?8tCiD9vLp05~Jz#)vvnU8m9)KAeAbPEVeuA6S@y4hUQS=sSwGtlA#IyEp zI=lH~UaBDbc|gc({9s2$U++MN4OUsn4F2^W&e7|4dxX0 zAY!)U^x>?z78^l&whANkyFy1sqlaIm2HmmQsZ>4a88&PdWY zqd2#QHiKJz2D;DRD(vF+87ku)46NQ4gD80BNO~fYi+nD{5rE$0t$c)UnYaPT_1sl5 z=uSPvR8LZ1Z%od!dt)c*?6>zrEuZw5SRAmcjxSx4oiT-HSyd<);!Abjq|eg-l)^)Z zr$CA~MnxzjQuZc@8T`4Ew1{#@A1( zh&7sMQdTrXr3Rz>3=@4Rp@g7buf(xElpw${=&SqCNoGv=2jUOCmqf7Iv1}pSRlK=n z@s`?Z9jDrXT7}4f_#>`P-aKzfTU0#<2-X6D(YIl~H_5mC?&9jBv;2-SQ9_Kf@uX4q zWT=NY;+LydMP8uC>hnYPSLQG6Bxeq6x-J(ZBp>mS=5TP4jC#EhzrB%=_U%NjZTeKV zspP-{v>Yek>E=4PCew7gqQs$7Y`esF+vqaBL>>f)bCJlqaa&1EfbpstUSR*X-=AWO ziTfJb$&vfI#R9Xq0t~9P7S|UVreWE5u}H{6Yf@a)Zq;0K1|kpl+(Fyy^=LsdiTQOvb><>OW2rCLiCGLhSpB|Ih*E{~{6*lQe} zJ}08?ZlNQzA2kl%mFqWJsmZ>#2sC{uzx#nSThU(NQF#mMa}hW8OmR9dF3!pI_5SG9 zv$ctZO9iLj9N8OG#p;Tsgnx|kHKBjBBMWlCdM`>(C|I-~IhC=!AKASH4AKpV_w60@ zG`rr;pY{wu>=tr^CuA zO3?Z6A@9R}n6S7wDmhrh&6NXxW+rOu6=E+3c1O=9g_0zR4T29#?*lXGgbVL_@7nRG}VY{O>ubqIV-p+1|jC;@~U@VuEEJ@m8gm7nFA>&k_>P zvAr27^eVM1WjmLckeK!@XOp`oxr8*>o0XG)Hx5&?`H$uhf^JI<8Avlc4O|7@$#PzQ ziwxp?gX2nucG#(nnuYM*MjTdDrfxa-%fkqV(U-$OUpiqxa_g<-wVbZu`!@f|Ze~u|z6%rAy&bSw_E*DmS%> zPD*EH5%;Ze2{PxD>GZn20s^B4_~e8H9c{Y1?JrffSD3ACl7G1)U#`}R@b-amu~^{#elkq$3uyG9SkG^yjN1v}Wxqjm2I(a&A9FJ! zkJLJOGnl9#3vIe+ud}?-q=Y-zZis>ysm~!Ei~SAAc@~C{BscSHsqLmxYYI zQ12<>Wt+520~WTjHO;zm3b^y4DOU{`@HX#cr8=Jmt&{UvA&i&T*@?UY#5Mx(-RXe#h6*6` z@N6L9E|If{ae!>jYt)K5lp4k+I(fJKZLuH&&GOyo*|&f$W$_i~m^5i9I$q}6p@L_G z92Y!tA@iVpoyG^^90($XY(uKAUiwA96NQHAHWcOl9xI?_Z_vT(bPg)j zUVVRUqs{KIDK@{UH2)OU`N*#vTXDqz+QPI<4gOB_BBk(IyUrL?H2Nnr{C`}4Hx#hV zq{`Nx{FV^&v!B`YYu1HTXeQqZX8&Bg|B5NHS}?0+nsbMj)n--kVQvTS8d2X+Q5pBT8xr-;PU!;_I%Q~O{xkT89!iq`_d^e~=CHItu$Vid#< zd2L^}$vKn0NOdvEL5QMSdZUvFMW%AH6a(dtN^;F7X%p0>UeIlrw(37ABy}@{3zdIw zK=opT6nB*bih@i;1Hd4~?fzCeh#+rKq-rYXBWs zQms=Rj?HrWh>S@I#+BBRT2$wLsq#Qn zz2+1J^7icR+kMG>raF(DQoWn2)IzF2E9nn004|C6HX;d4>X4*~zI`Y?WuCVW68rI} zo;bK)UkWQqsHa6ZHmCqh&I2OiL1Urym!>G`C-cgA0Cq$Zt4FNJFam?9#AxCXnpH9Y z2jOi=sN>0v^Ge#$;Fnr0d7Pw_9I(br*A~x$QA(NnE!Pt=8^v=Qse=rLQup$C30rFTv;RKPF0X1 z9bxXm1hjQyEW4Ed12O+~TyFgzw|6#XqRg2}Nnt@!9@D~0R6&|-A}YC436<<=<<+;B zC3ON*Il@L*?|%Ix?^U+6MYY9ST}Q?rZ_|fSVCXjr2s!3{VABd;)e?TOx_3w-GA}9) zqR{=}_EasoA%oO*EQhiDtP4V3zj?$%mHl%W?6uY(5v}_4+mx~XD+&iEVzk^uG|udo z;Zz}4Rd(JRVwBq|iD^zzf?#TPg%2NhL6BloI(NNOr#V->ABcK8X!3M0UGYI(8kM(0 zxD2VH!`#EUcXeY7S{`m9iN*2cu#D*|6;{#Qlc$mUOaO@~4(bDkpG3?PS-OC+%T z2p<3-1W}DfQ0aoIu+f1)QD2V!%&nt~w4+vbZbIjs?vE@3ISwKk5xQ(9fA-83azLX5 zZDj;rphk`8arkV6_3MT^Jedd~f%eh4yTAmyx1T!uIVg~wk?~>yX$0Y?JcgBLtA`91 z=PwaLoMAdBN{Ubk7hS8NP}%n%SH#^#O?cJbs=<1?NzYNx-C8|iHC9Cag665e{)lBN zS8h&q>Khs1Hpfyx_E;&r!y@p0Wm%to+-O7Uu(sAl4qJQTD=$7X%*Lg1Gz}?_W&|dhd2IGmBCRVe>2539@wAym zNd|XZxw2i@Aq4C-Tm4Gf=x%5EXgI?nlJFN5q%6}i*)i}5?Iq9wsRKT1lx z7vBP%T<;4DyU-^0IInIr*ti6V16R~Sm15$>2a7jHc+{%`0Ti9SXJ%!bNAt3+hmg>(!+txXwy&M=F6!4yTgie40i{DdktiVnRP62G zpf)+Er*($K*?SMJ&n=MtoT+rP0dx%n%ts7LfT#rRY4oXgM+GXgavL0UO zcD_6K-DJ2LRdK;SCpT-L?W!h6M!}eHp~a*@%JJ02(4MS1&5EG|ZF#GrVk!yN zj%=Ss3^82nc+>tx-RaD8M{HFjXdbgv8xkhZ$=FvWN@c?GXt`mQKsbci@8gDG-Ze#E0cqwFn&Rn)`voJ!(@J#@cYMZ zIZUSYg-ZXnO55od^%?p@{wUqObh zT-gN;U4MiWVF%lzVrXVKT`( zO8q9pP`=}Y3Xs}P>5+U%m#8jQwfHUI4oME`sC0ARPjeY3x>Kr=z=oO&J6bR?#%v0R9DJe(r?20ofF^&AkC$q6>yI(~W&>C?G^cIdrnbU}XkF>o}+A`-+R4A5lHl zbQ5a{B4PS^+M0Cx|JV6qt*xjIk@?FY%2g1?dWVo zNf7uP7Tu#N3MvV+ejt5gR~c@(I>>|9iJ3bGgXHhIy@&mQM_B%`#i=VFh;XCpz4J3Q z_PuhT{N+hI#Qm0ebnA*BlnImBt%VEk3TGgI#K(Kis( z3hE3?RW-VX;~CTn+HI9+bUaciuffA>8uT?hq5?n5eYp?F>4@RImF~J-i)g z)|LM5vvv?Gv+n$32bQWxT0K<)X6wuAE3}<@)5VpNPV)(1rO^8m<8YwgM<2a4C!Gk- z{1fw~%iBOOsMou`=g4ao-Qy?<>5%g}lsjv1I;ITsRY<`hv7U!$N*aBRc($jffwDWB z$nnW^%^vIY(dUMb1sLY9VoIe9%b%%i%3jOfrD?dOZi%;vL^8%aBi`vI5PX<#5Ds~L z)AW^?B&`IiY=>T%v9ZK+0!Bq}s?3R57kj*^7YK@`5Hs<5A{>GwWdNk$1*-v1I5M7I zyngWwp-*5Zof6LeE%-W+lg&pyM8^)q1|YuuWMFO_@E`+)zTJ7J3?D%%|3KsBX5W8eNJyYgp6lt= z-}kSMG$f_){+ozv+NIcE%7 z(orz*7b9$?2=zgr_)xvS44fqN8OwRkBU0s82*SQ?pc!>3pyhr074FB_^(@Cz3vR(8 zz)75f$DQqyiPr$b;M?8d9sRdM@X9{;rP?zu_WPCVFUhPTVAtr^u->q)2Q{pp>Cb@0 zRZaolnQr;283;Sq*h=|)uB4T;VE{u6*#!GzFD}bo>=qCJ?gsNBO1bd9e~u>~Qg)>v zqGYo$@R!1h=lv*WmdwhVHbP*AD|W_IMC&u3V|4jig;!m3fMyC_it#r7nqHyvMfjK< zDN8zYY$y)&uq&e(eeZ7@x=reS#uPqV%1?O3fZi7Zm6?o&Lk~!=iE{ zT1v8)G(rgXg0u$*ZyB-qy7~nE*D9kc%sg${DW6Fs+*eyH97pXAkCu|^CltoxGDg_O zv0H^a^s$Ng;<@@5q{?He0{7#vH^VTN?PT)sj)0ZNP@I*WvY~=f8r7;f8=sI~reoTG zJT`10k_f-9xo33h2xKuZT>$$Ah=zEJiJBT^Cx|}FIX27rs{OrHUqvuOh(in;z6J=` zB?lZd{Vc_~JrJ9@3I5FaAJ9RH=j4AU%w4#FCMyZlf#|Sb96%4eLUdG7*1sY+>UHV}X2}ztUbVY=|4JQk@yn0UaYQA$PbH52R=gz6_8!K@p`^q__Y0Cc+8+$C z*w0!-$U1Hl41LWMKbsQef_sf(q0*VUn^3OYk|8|N8GH$Hdv&213mq5E{Ie|dsC=*G_q^bOYm?%zKNC#LC7Ax}g!ePQ<^6RRs)zr%ux|fgyb^0XZ^6#tpQpocHS^M>e%20}`9}2C@CHW_!kniHrn9rHaX zXwolzd%wp+PmjB)^n?T3)6qUoPSdQF~EE{T06zuNXg^;B;^;}Hu*Gj#sz?ZB0Iwve5UyTM$I73_v4S~WV*WI>&p)8lM0j~q6%fnfcu&^#`^jvoN;0~s5d`yPkyH-)UvPja_=yjx{fx9SA2SmVIifYxx$lBx27a0 zQkpwU)gYyBQ>plL|FgncAJF>Z1P?wf&Pl7|OEkaC-1#!)0uym=AgS(loG#5Y1)G7{ zNIve9WYSvH#zUW7iad_X<6@A02V)Trz2MBAoB^!`?_*^#(|SPtiz{3Bx~!(^)}|5$ zDLx(YVK#wXwbouG66!F(LtbKMa8(q%Pya?`KJV&P#vuV<(o`VK`6UOTh@3KCxJNI( zSJCg3=^acylrH4Fb93EV?dll2nnBH|0@zIyJp8M0O@)JsJUUR`a9md4eFdzWEAwfL%uAaKbsq7P!-Cv9#uI3Kup5wZ*Rg>V$j}X47|e}K60R8c=ylQg)}TR0tw~uq;My)LXqOnks547(e>HI}f7g4k(Cix_wVc z)BOc5G2YuW0PPpSIskz1od!%O0I)DyeDDl0AhtV9Zv|ijNDlIP4AvYAm`rcD@&u0q z5JP<0(8Nu8)mNf+Pk3!|XTV=q1mm@!65*l9n^TxCjlyR5>BQ=g}&x}Z<6AH8@<@v)>r+1S-rQT-H68}FsqBl>`OTnuV7hXrFP>$4a=Tk;kx=0k?*SS{r2W{zouj86Cibf&7bu_}DBtxD}=TCGr@9 z5;XlLD*f_$?k591>?N3mwgauwZjucbmd%rLxAxjbNr??rsK=>}Psa8$+%vz*dhF?B z3q2ED4Fv2mkAFlRa< zgP#NdUqwqyWkU_166-|%UKe4d?|Naf;dNnf`jd!)|0))4$Z-q4DEZzZ$Gh#Y6>ssc)D zm-;7_KiwGb&3dJf;~XgRu4!Y%YhrcWPzK0!WaHu!F*`6 z-OAGNhB?~!QNo99saMpIcBx-A6xw-6Nkc>Xyi(_y#^&0kk`kmmv|Ga))VB%hNwjZx zILP2dd5OXJLfva`jO{Us3%$M#zUNL?(k&P}m&)KHk z{M+OBC#E?xm>PWJy9ipVBknx??JnByTC4xZB|P^oieFPP0Lg5yZrEfiQs`bvffc(I znt%2xi2RU=Q(#w#^Bj~GH2kVrcZ9V;FzA>)3C|pt7ueGccxaTuAgAOR7LF2{*~1+F zCMY!B3Q}`V*0s=>?|U5YKKICO1u+u|vBEeg<0K-4jw+fXBtD>*l-t;!$ENRZl>gdk zWC_fz$5(J;dlm~6u1@Ubl}cK5p^^IQWXC+M zU3-Tacd0s+g7}PB8f~DBzC`ihUu{902Nd1S1E4S@wW#_(l`WNFgv{K*2ij zBK@U*Zhww$eQ;o3$UWU#a#^yxxv%@*KFew#8q3<}R@B^nfuI4|<0}oayrU-;5$H?L zNiJCzK2Oq|%(6?k`&1E&izgaZv)jB$JZ+K!) zVU~&bohu|3a)H}P>E_Ur+$vHDY<)p`^C(y;K)4}-7|2737jgS* zOll$3Yq(H2*)aS1t`lm=kV2$er5!`Cj1J$>s&3`gi#FISJmXD4Opa#gbkBj@BKi{= zN6{+kc2@+_6Z$xM8MYoFbpH)!y8O);L009vC!`H!Q29mWaCPE&4Kq!>U)}Ay-wM0d zE>zf3i-sN5#z}W|y&?60sDqLO4UHh-RBz;#{8zYPW)&3L$W33rg7BTjnOy$(`bQni zf3JdJwq$QOaO=F8wslh?r90982W=}PLQ&Ippsi>|!z*I)Vx`tGzoI^q$<8F3Jh3a; zeo3RysY)t~WoxwXR8RZSGGXb@(_YBxs)a18$h3%+1{B>e+7TO+#dw0KtKfqd9uS0( z+VB#Ql0)Z{hFYxdidGCZ^0c6kRNSTU#-g%sk?;*Y5}VZE&=0Yii$wIwb`J{((V53v z8wk@c1kTo^X3`59-WK3Hy^$_TY1^kGO)VtqtVOJ9`rrMx975 zeKFEl=H+3O0;3xigI4v=I7B^+F&@XGvTeWJ!^7v3$q~C866ci3kZeOwSgp$WVkK&H<=Go$=+Pg8N84oOE-MHn%RDqnz#)XhQan_Mw<$ zh&-dQdV|yQ*vMhdRZ#8K@Hc}q^#;@4BmlnGcrKy8*NoZU#7#}2z-p9zS^bdMhf*!* z$!ifv>T>{)&9>tq2cDSC;3rlo#JBgp3W1i8ejK7oOCvGy;rQQv+QM2jwec zVvWZgOx7YAXe0Zj+)3;!;(~GIQqqO;IxxI1!hChFUB}k4J{PO2a%&^cvOR|gG$=oH zKxok3{XNP2Me6-p!~@l0nsHqd`0slGEHdOKd`|0kN0(*A+(4rz;T0MVKhg8;2npQ@ zdRIi5e^?7}aeCNm{m=`fSU!TPUrd)xK>IJhdw=en!qIro`pw{x9JE<2J`vf4@BbrF zHixiUCds8zczsqnW8|v?<;@IOd7y?*&dj~$NOO51M$-hxG>$${U{5E0mnyuAKUu># zw(m>T=l>f;*1*h5$H>uAAx-o@yxHjw$%Ot3SalbT1hXOZ|6xRnE2vsR<_aBy(~fp` z&q~m(|3lXefBl1jgKe?Ns?o@r^x(go=??6Q#U@`_*|Ax>Q5nZ9nwX=xDS4%ZN)CDS zpnpl#3@Q>3+L5J3DmaO^*`@f1=2F}J-z%W}lm+VlzQ;i1SnpTa*nfWA74*{o|8uSI zBt2eU+Ac$H5l6>^$)W|U#%;T5mdyVt4lxw0&Ql40{-<63-I_tHpYJ*T)-Im>j|Ux4 z<^hY0l$)zqT5h-8`g+Y#zC!+A9qpEkrgdFsUc#x<;{W4BR~NuJ(X?INj#_=F+MGsM z|7ArNz**6@Ys$;v{}-KF22Q7T9GM&+zsg_>{g+Q2RAR}%49hU%&TZ-VkCMIV;RaBj z{XYiw7z^`7R@z!hrB1`{)Wm0JS-CMQmgEd7fe!t#-HDsECb8S9$GJx4|J*zy78Bl; zwG3t5V;&zL-d`%WZsU?NGdoT;Mvjt`owJ>XjwKMtrBv}8o+C_Tn9Vgx{O7(l*&ki! zkUo3s*3&r_kpQ>^9HDgA{%)klo8wmN#uIwz-O zDymtFjsHH&KO1|Z_-S{?JTaeT;ky4g@jH5xOzkR>hG$8>2ShRlu%;M=8M$1Lh7M7h*wc@F(ODtlG30?ObQIsUIOBA*HWQc zQ8+2zLlm1fcrHU(eRb_%!9S(DWbRwP(3lCm205q3Ynht*Gi}?D21Cus$@A{!@J5$? z&(Zu<5-zJxPhEFY`h;(r*S_5xd}M1UDQikbV_gmnJbs8y)s~91emxC6Y@uXe7+Yj_S^R#HCo70d9>e52`ubdj*RJ!=3tIH6>m+f=K!OI7 z$)jIdplAx&p)h#k{yDT?y#rhb^fcwdwrP8()>?-a*ZcN5lw2<9xF^l>!}}zz5{cw@ zpxTUYHsB87KuXZ;QOBHjYi)FUtrci^a}~FwPmIiMc)rVR<-W3AA^L=zcdtHcodV^3 zC*bB#XVQ7)G4Mjr12HklOpTh!T$T5u%^0T9%yw6EbxL5pSV`Svw>p$^A#6APLy0mV zFAwRofeGcbU6kWqq^ct_#31IFwr#tW2qosV7|);OES}XmnLDYYm2X&UcW`$+tjsDm zYbU|&QE=V7wq$<%Rg~|F=gDSdY>Y|dxpqbbLFdVa zwz$I!SxrbN#B6L95q?X9kb0i0Do`Dk=C&O3==zNB_Gje7PaDN75JK+dC6}edgoFx1 z$>l1Ru)~?GT_$dQt;Q;=l^gQVw4frP>ml1d)`a%{3n;<;b#inUc>b|Py!9kdUYri5p!lQ>4 zGDO3)L0M$&#@fMH#=@vELq7~Q%y(<#wl!ZR-*EVimdj>#zEMpXEi5)JF5Ke^uFjN{ z=5{T8ekXxJ0%i!8&G?b;XCDH_Ya3YXt9u2EFwXZnuCuxd(y?jEYHk*wq`WVbnhxsT(76Ct)u%0Av zXhSY<3blB=#K%J(-lW~Y_o=Z$g)SWF{OH#&r3Y@24WcN`+}m00?QcBVR?Fv`n`4S5 z=RG@OM1Bx-%f+88)5bygh*4^-2Ho5cI;JV!%1Cdo=V-zDP|MM|L;2Rrb_bMnPzAfL zvDEmtnce+jr`5r9rYTw|na^tjNDAEyqU6(cmCR5&k<8R&QQWL~n-^54F>|AH32=i5dHz8W8|dqkyDN@mN=)O}acxLR zYuk@j5Vl*Ktsd z?ZxjbwWxhxK%P8H096ozTe-RMq6ok{vwAR;FgE?Nh8^^5S(iC2y`hLcQ@|zj0sQT% zmq?(KI}dVdm>3sQsIX3XosH1a$lZMcBsX`rnDxtzMI8kLSM~=EEFm}WIBMoiJwBI4 zK;4ohfmwDnp!VLx#H38WrS*EJs5fhUeO)D2_UdeG`0jEQi$V+(?3cBiC+fHS3?gRV z7zMlu&byOdh|6QksnWrrAu>*jHRCuvF1wY^i^ZgB^RZmO;gIG6VxDPxSL|Fi^Oxf) z3QW57`NhS>ro*XIx(-f6$ki>^1f8W1P}N~7cKVYP}xzi29M@pXjV zo8YY%%nS_VoCfh$Qy%a=uHE1Udn8yH2W^lZAFQ2!wHlz{09*^Likh0LZQkl1eurr? zPNskG5|dR>XaX}Mii1)Zsv~V~-gHSh4agf>HZFu8y|7u*e|K9oT-J78X^~)Z42V+J zH*Eox27^)E$&x&=_f#9%rE%Y=&-KOa)l?2IuN$|nL&B?d=at^i)^pXhX>8Ir=hkg{ z2(KKRg~Vtyl&R9W+g+yR6fWQaD=;j7>YyrQzK)Vg`mof)C5)31$k*InwoC`VUhFxDN8Gd$Iv|B42fi#_qq_|0mM`5 zBY^)vv%;R*FvP(o(;a&9v~J!x;GP2@eidteg;Ng33?>p+a5NR2irjvdKP!CR{kZRwBr_p-S z57TQ>M=CbpF=({G57thHcuO?GOZlB&w(@Ux*p)TA!SM*xJVfxK5+Xk*?z_X4VX*%7 z^9?3mSZrDIoyn48^n5eo8eXMcV`bNw{s7Qzl>&+}F!oD%F5zB$)iN|C?U@EBQhz=O z7*57LC3k%PX$97F=;b>s|L ziHYu8Umta_j+dpW#V6adHNQLOM5(_COLFczqw4MNZ{FW1a1L_Dy?uOqyy+0( zvDDfke6?0Z(9_cFICHY8Pv`-Yo7&vikat~WLNOc7?z_FXZ31Qymf*?dWC`!a*~&^3 z6p(?5`~Z#egu={%g0~ww$m5ZoF*3KaK6ZJ2&UXji+=`0jl-%5L4ykc*7soy1WttTy z%K_wJ=zWA9xA12hros43rA-HoY0x|KKj|Or74-G*rYj6{ocAV6=8}0G0I${g@24u- zbv76%dX0_=?3=I#2Y`UtA}%$8gM#!u_9r$5lOFwwpb(W8IL?mKcc;_eX=+bySaRH* zy#izt4_@;(9S2ed2wwKGlW^Hsj5VtHZK|_G9=u2S^yBH-z7tp)Z^BcZ`}2QGlHbi$ z;=$s|+)onhfSUJ0{4tD@dy%Qa_;$L&V11_u@%(b`(0f`--T5;8fwY7^o^QSe3m%Ht zD9qt7fuRKzRH*=7F0+YB@e7+2q}!n=8ormyS!BS2_e(;8_fJAsH!3w%9W2}Bo;0pL zd5g~8oVetrQtMq{0Bg`TJM7A7Dw#6q(Pyf_|c#QVo@8##7P$A?il&!hEi_NOdV%-LdopA-5hVAReXl*fi8dG{6 z>*X1uD1Y0K7iBN9d)Fj^Q0c#mHXo&vJ~kAR^~KAda;ia5^G8&dq|hna`IUYuxqU}IAnK2zfD$*wYm zZ*^gDvDM~KC0IDHtehPFB#u5Zj-!YVkFc%|ZqgRrP3?htyG8(eMO)UH7Q#V3n1BsGcwaje z`0eMf!SgaU>(P;xmNxq8v^yyiAPx*bQ0=eRbpMd{8{x^Pa!FjU6fgIp-(U2a93{k7 zH!fF)h1a_$rWRe{HQck2n``O@y>3o+@Cgl<{aJC;3hTMrLtqS@&)EvE|5UMQ6EsL! ztgNhbS@Lo@m@k_wgFv*k>DPbWnlJ2GK_H($294z_iF$;u@|-YIbasc5OqD^P<4TfG zAF4uz1TeSec1v7nkSDvN2Mc_FYUW~C9>cLUps(rz~AW;fFtI*_To|7wfl1Qc9lOSuZ5}B)s0H-#@gDV{i+(u(dw`a zO$%})CJr**s1|&3aw2@ENfO^e5>7J{%FZ@ARkB1_AaJMK)GD{D{>@6C)g zrgfm4pH?p6x(-)CswD1uCS(RIKklPHe__MG;+&(7TPpm`%fb@=;Jp?wfPTis9nNcY z6M{LM_-@&I4e$=hrEr~=xa6Ue+W+jBo_9k71PI2hqhq7MCK`z?X`l@wY~-YMnLSI8 zBxNmECc6d0nc{M8ZV2&ik=eX`@@gJ(Ft1;pC4fKI;IO&F31!s0T&U=IrBB)b2z;g~ z^No+EO7(Pjg>3txav~oj|Ey2^>R{tyl)yQRtz_}g>HX8~$r_nP=(uy1L};OnyV~|h zR#U=0zvtx*q?hNWcy6B}Rl z$4HQ*MQ#Tcx#RE01eYCCKe!Ll@4O7xD}Z|<@9JQn-Qu3YzwdGtKcXB847$XYm1Ap{ zc{G%JuhpXS&p$7OP7w@6Q;5&r-WRtDC|_omB*^S8Gg!i*yHiWC38HoLcPuD`-Uw`u z!P<9nNk$MMle2LJlYy&~-FqM2Y1?roe&j@PX;IML-X7u&FZurcJ5Vw5H%`q*2=?ec z&Nt5c&B&;wSaN{Z9F6SHJ%2d*>dg~W0}~1NPsf|@fV?y4F6Q0H8?Xmblcn{qRgWDr zIs5f3R_?;>;nNqNfg7&Rwc)9C61J)GFmCS;)0oRp+3f&_x>-C)bu0~D! z2%FAUP8XBd;EPD1*vLrlt*<`vQasCiQDh5E_kMgdjlzDtf=9#VZ^_grU)|w5K=ljS zU)n`Z{RDIaEIF}V5OouiG@%yn%jG=rCFZ-UIEcr^^RPnmsam;@A3rkU>oi(5%rscd z*rS+@<<_k7FgfK-*viDgzWD%-KAYjsR%IG&P3MUWlIX&%5>+aX8=ZEapjb{8WBzCZ zR4oH(ZGW3jhgvQTI6oGrr>FN9yzADku~5_0bo})I4=R|c&Exp%Tjc4pA)ftgpoQt0 zg<0*tZAsyH4qN~I>hlDX=k4NfsoweF>^gF$>9Cw8iW~E9^z&!f?vgo_KOS^#3mJvEcZS$A#Id~XQ{t<&U8wNdC7;mN z2Gd$FyO$o#p-QPE22gcfE(FNZRDBREi}F?Ca`M_4XR@)V>UCPPaOR@O@_%{d&Cj1i zhbw`n1*fbLT$n1;*DlX?=&2n?e$&*BCn$V~l5e1Th4#Rh-C!D9krhfFn{| z{G6p)DLV1VlckNIQeCH zVL>-;fNvomeH@wGCQmxI)P($k{PrhgU;wYJO!;S1(^NJWK2!WD$D22toYr^kT|wGU zZ-{Yw!l`{VwYAT-7gp0mC2?_Zo<6~%^qro{mzTp=J{(`Qhw5DKX48!s3VZKNp3YtC zSr2PdO6D&wQvy{XEhR~=yWAkge=JuDIW9GO^HQ{z-)F>!abNlq4?S61c% zJgfNl=@S7e+smV6Zd?C*dq6UrEG!HYKq|v&!Y=mquK-zCL-!-(M4d|=UeR5%)6L@W zm7gvipW~WuNvK-Y^A;HJKOIp?(ecJ z&d$yz^TH1s;Ur~CsDL)BuKb zTZ#BgBp5Rt9UbeL#@mrB+8JKnSC~B=StdXPSrF1wJjHyK%~h{k8X7uSZ)bROzJGJO z@XV3V3s^7=8m05)pC3i{S&equ-d;Ny_TV2Qc5v9(*k&6XdVm4S3~5bHNHG8O>F>sd zcA5U|ijIi+mxkmnv>;Gne!_6d)Qy6Yu4P8;eL1D^B9hf6OxSZ{9|9$h=kk_v^C>J= zx1JZQhblNpW_Vw_U)DSVG|+N6cb0eH8|81_hm)t^J6${i@c?|Ay`X|B^2O|E%-%Ov zt0p71cPdY>9!{KVNw1wgZsc>lBgzu%{WoXWE}qb26=N?BD2O_KbCO4RuGsMtaG8dpFTmaH1g1 z-T>6Tu>NakV3mFFWBjW`*2p#oP4u@3eH4_hg&87I!XMY>^7G>r`sfNCe#@7wC`c$} zo*SJX=*wtqN{VhYydNsX(C4!Mj$wM`Z)#o8fTI0RA36B?ivQoo^#5sdq_XhZm6w$W z8AS8L$o-D*{S0DjKafGT_74h# zr=Y!VuIeJ8E4E>HOm3CM`6HvMYo_JBGL=c&UY z7gTrQ0jG{3R#|wEKk%)CHm%L`^kyYt2Xigp2?n}${U>G$-wzscL;IYt_}|RB)9Ya+ zx)P-q8nIUe3xU^mgSAOX?z{Qfb)p#_>%K-NMw1uTg;AJbApjO)PtCHZ$F zTjojJt>#jpj7$Twbz%eM#Mu;G5MjhhS(0R)*_3h&(!qI#4q>H_gW-agBBL9 zS;uD&E?})6o3Gh-BRYCOLtGQhGvyp=EBKY}U7)+22fD#|LbvX25~EZkj>ta+qk73( z`A~bb*3N~wwSldQR+UUdjTh;dI5w#5%2q!zc=BkkRWV`lWicD zQJ>c~_M)nBOnOVtq)t*zUnQ^qVaa_GDo-{jN9((l$eR3=P|T*Eei}Nd6Y23IBTC&D zJMZpE%aSUsuVafX_s>I~pNCuH$lbSSjJU;iAEAbPs?tzZNi%`8d`8Vg=bXd&bL4| zqckT$W)*JdZ<^SZG&xaW-BodzVY_&=t49nja!x&YDycHjijBay&me5Ame*X*ih;Uv zF=&=Fo?rG;0X1#EDdsmo5~-%k)UcD%Z4zZXvXg0{US( ziK%O9ZbZjf$G2CvJF;_=$x+qUFNjlk&gkeq2mNO*z@)9y^oeB6{SbIx1{az{dAfP8 zOs&I;u?$2guP5Stv7ZDmuR~#%_QD_g-Chgwo5=svtVlZE5x$tKMBf6pxuf>wdj$5I zp;)46_Jy7!ZPE&>*10z;b?D-1HRrme7?kuJ7yIY0z$j5$iQoJ-sQE1CJc~t#hBf1Dff5XJ60euju~8in^cE?j_#gjkVgWLV(C;I z-ZK|VDg^C^UN=es+o$T-BHB+mwnsB!uD{dMCB$#dyeodh)6=~2Pl0k#ZsQ$4V?MnK zIVoVe)3~9jI@{{5nRYTETu4E{>FDE{XuX7P_Vq*clFdYth%?zr9MKCn8Q9sz7D0cd`OUP1 zd{Ek>f+o5^vd$9rOu$g@I{N-q6#akJPDb@O$w9#jP-h=TR6hgF($vt%sLuge_?E9J zU%d8XE-#g(h^R6DN{N4)h{$R8hLpFu?Zd76PUt^ipxDMP6ND8B5;RlO-nI}W?~N-! z_7m;K{Aw&yOFTNO`2 zlj0iO+8&5Xge55EmwS}mF&`{~PuoCzR`!1DBP0igna;=yZw308#(ED(+l$hl%!ftYu&eOC(S=7?vM&M|Fue*~9n_VZ#I+%9U1 zo?P4&DSm!NIbX9cahq5L^W1u#>9_P2C4V4(2lM^o#pZA!k7aj*69PRwQWuRpW>RgE zt=$6tw=qP5_JqM*^s25rj^VO2Nqi-vw~2H^k|~PNm^B?TVlrQ3%)TrFC#hBQc+=FHW*e&9s>gnEK6z{ubD>n>Ky25 z#v>17<4uIa*%{FNJ?Oh-2lcAC;$M*$eyV&@S%xdMB80?t1;P^&-MS(_GFa=9NrQZ& zdZ(Vz|0r(f%Z_5=O92A|1FuJzT_RAALWMbRsNID=M0tx9I!uNWt!y#jxIN#R6IhWU ziqV9B7rNy2BN8@2ItgVZ3<-`at$x0@r#5Wcd&C+jEv@R70iW!U44<%`R;|#okIvt;#!)-@wZqt&`Y8xF6y$`*Ar!Ka( z%4y3c@p5xA?cb!X+h1iDus6cd`v(WJKHB&%989w3*M^rtgPl(amjr;44@(*NE&F(F0byXQ46B>3*6{N9Dr{sN+uTpnp23@=H+bA7nVZ2Ct7FhO<{o;f*S*gp6~dB6=KNw&wh<~e%GXWX4M#? zT`%Cg^*~L{%#FiQp}uKhyli!WY;xLRG1BKkn^Rl4ZDY?{Z?eZro~2e)q<12irQjX$ zL?XZC$?xP>AEXO^DzX_-6QW-?L@Ok@GJUB^op0Oq_pJ{x2#`g!t4Wj%-MSwyXX}>5 zX@}IJiM7wST&CH0+Aam&gEKzvHUbU^X~SW+Z*p8jyhe<`wFs=-OF2t4x?d}xC7G8ErpqnZq)3LBhVzVRUAK8`CGGbLbjJG(4! zkSnX&WDXL`b6Dt60ezs@itgC%EIi4+!SlFsY0h~oHa1pXO}wYmecb%ZUMF3o z6nN!;z?Y*R6}Y+h=!T2!)Hs1+jQCHnh&VmR>rX-$C@79kH|s^pKmgc)M86GTzZCYa zK{xeh1h3`E2XQwOiBzAN%hSBnk2#flR(I1Gb9oBW3Toml3ij_vplg5iA{CPf(?*(B z6JI>4RaR3j*z0Jb((z$cAn!uGeDeT871N(z=+k8DF?lIIg8aQuXE`gcWHt4Uh}&WG zL4hhwq*MTWZl3j%cm-)IG)c3=buVmi>hdacdW*#x5qo}En=wuA7x}0zjJ&n#Q(zPY zgWZ=4Yt!JsjvHI)kl`Q5%>qhuJNTW$!bvrWMgb)2ZPF;Oj7aIMxm&elVJI6Z|km zqfCFP$}l)EkX5Y``8VSUeAoGKHlfQvOB<|uzT?sLqU~*>pm(`Qw!q(@fOi079<+sd zs-)U!>F59kXMFcwVH%Z!$UuzDwqfp`$w@XL%9f z7?1J`7v^lZP8_!J#(#8~XwMK1>W}Xu3i8IOh*IPYci%muV8mCEjLXS_(J#;Dh%u6K zb4JMLu@avB&PtRN2$Pc@QeRvyE#cN(u=Wo%&wzcN`0_4|uW4+ss4NG6a z_$qTIxKV3{aAuk)97%lyo&eFdTUV{Y?mH((Ep!RGyC%n-r5>l|B9{ZD@GcWB^MlD; z(G(mmtJ(R%U+<^dzfYw{;zmoC>349@u}1%dXPvgpQF5I;hPMTY<)wYCrDX)OrG#~pM9!$@iAu8X z+yqj;Jy6Ssjo_jFLrpZLu&O=g-kZN6_)x>mUCoyG?_@@BxQn1iA^nb*{WM&PUtj9? z1vE&Gm2-^cbUB{UUyl>lVy=5K9y?F=ti z%{b5u`eo#q)RHv<{32~72VpiXw=%V#xDCy}9*1WlhdMZ|6c6_bvc_vm!{nvk%$M82 zma}?lt?$NqnlLG{6%>!^4EvA{#fL3!7tH0>yD>#m+;GdzWzUwDNcp@v+bNTd*%)yy zx|8ac{H5gPBaL1b7RxYfs2)$5-o{$%lLMF2~mY2-W*2j@sCXp z&3qAm^)c`~H`lZOx`;AH{VZP&-+;i*l}h!!X&e}BYIUT8d9j*1wxL*NtF#kEM zb(49ap3K?Bp!aWo!qp3r%ZDF6ex$FtJzk|H4mGj17DpYK7{Pn)8&pS4_48sIq8=NY zCe%geyafG0uUV9rx4E+-+fs;hi9L{fA>@5B-lm01e~KF@##%v+Czt$+bg>ON36+)I z%N>NCUU`c54VbH_-?jdf&tpQsxy3WGd~S=TY+pi4t~|XX>jHmT=nC6^St>m>4I^-W z{G^sydXBuW?}ciS4WC&(aKXW3I)FO%4+N4+A%9v47P!_Wp=YDEdi`9a_K5tJ?IH@jPYL6Vu!bbGdbb&rAaeW(H1CWSR5Abi2bUR8TI zKh~^;YhgDwGZV>zE#P?;k9~4Hws}gxOqVD{g#+~Q%jY?41-i`0My8k-BAo`TH4Jfm zMwLj_8uPJ}iQQh6ykP(`>ot1D>@*0x(ALrE>Ff*=d(-;sUFhU~Sw&4Y@I%vKh=B77hZ>H+ySJ>Y=KI%em!96*+SkPm zXp&*fclsNZp+y5zh}+&P6@}YfX3tZ4edf5$O|&$j5cm+l!*a#O<-|YMIScYFd*Pcd`qC6AI-~Q5@|Fy0R_Z;D+!WiWlB&T;fw=MLDSf%8rYM?ky z#(Tz>KaANLbZPQx3v7QzQK%?KRRL?P(qd*?WHYGCr1TPQWOFd}SEsr_TyS2#FM`^j zVC7FG(m#W$-8rQhB5>n~IP#g-{S9vGaKR0-FP({J$_>pso1_5oEy4iYGMvWYmAtIs#`0f>= z*6M}Y`m(-*Rd27fiiv&wD+1HJNJ@Xk+x=Y&rQSx2h)?z_9Ig*{G%~nzD(n`(*e2eU%cWzs>B4i`$!IHoH9*_6;r! zGfQK0UULztU=(D-DZy~EAo5~e=GC61)k3v5FtOFkZdEiS^Tg4RyzIf3N&$&BrR;eM zTGf}_hkU63;dgefovX9aZE@}xTDakP1vt_XwbnC=R=&n0as4%iE4a8RYzDt3*E$(7 zGs1kYa)<(c&^mlH4_*4Pbp!5M~=;&(1c zr|ZL9oJ4-)Y1Bxw&xR9Kroblb9O}sU8}{21B%fCsaAJHxJJX3xjn%39){!{)yUTfN z&jNn&ZG<5%Ra@W!A}E-Gspqx9vMbH0q&$%~));WnDwmtea~*+QX{5H4k@fH=y4JG_ zO$%e=>G}lAxo(h8V^6~2tbIH6y6|IPM8L(8J$yw*oK_wm_Zh|5rc(k(R!bCW(v$Jz zrtF>|aavPZo<4w`2D-twp{|4-| z;sv&Pf!`=7s{bUOz-n6w{?qM7L7@h+bfp0)(OshC@){sG6K043$Ybs5ABgLsMjsTW z@-Gxx)lv%|R5{z2c*x+bTWE*513O#WY9+n&C@9un*AAaXT>VxM^%{#n7K|r%EliL; zM0ro`XS|g8`qU>4>l8rEM=Gzc82YhNH&7HS=;y+fAECTg%RUZw2Y3g{*Qlat%R9EJ z%Bm`d$085lVx>3+@3tEG8U<2YBQq)?mG`fy{5o2gzozi^CGaC7`-}z1hNnA!3^Lzo zWWN*>iBzQeINUohFi=}t`DcVqd@kraoJWyYR}b{tQKaZgQ+#`U$s5+QN<>1^x9*GG z(99v+@Y|qD)2jB{H*X1vjh5yz2B!#f355t+j1YT_SS=8^lY@h$fbfA`@bmqG6!NM-TGj zi#7X($jC@pX4pVK^W6ftBoxJ06SUBonFax}GDHHoICI>oYxCZoZp_&eurYmIH4X91 z_aRqOPCF(*Z{NRF{2XxKOIrrsm!?W@SfT0$eG=ToJP~bh-~3ndC}Oj)0Qt2ctA|m= z<)!h9mmIK>0!sLEtZ>DDk#;q?E}^xn%^$AE*C#bcYb*tPd{(A;#0z}2oLr;ld7|OO zGd_I=`TRj_#60P%-ydf^qma$by$96OM@KK$4i^IA1)qk)_eM)&n=IvR4whFpoymFl zjOX7u_2h(zy(!tMrg@#NZ;YB{W#*{8j*bpGKEFpo-$Xj@Pv@GiUi)GjQtIO_xl1af zYPcx+aasy_?)?1rDs1Q)o>4)L8ybpnFuy3S=C|NpX|wPN7Ka+uhiPb*$Bm!Jb`i-|kMDa!uK`ZYO+ZLSrl4fliB}$t-0Rb~HR@ZH`=zx>#er z`;bUF8vrZZ#vPAe`(nR|?pwu;YCjOLQmhM0G`tQ=O1j-<|J>KN9gH99>{O7Nl%x>T z(@hgXg1m`>^f>NKGYSe?UJt+>Htyh?{zSeJJqmB)nCB{N_NymLh=sgyc&)GbXsX1> zCw)9T*6k~grkIGf{m8>K{ohqq+V?0R3CphY1)p>x~CzAIabcybb@nv}nwx zwd~;-Bu50E%3oSAxZx*fSG$5wkuk79X!H|7zB&~b9zT#HpCaIPy0`5V7UrD&o)`o& zubyBCG&)&+K&`0exHaDSCFEslY-B`2aypdOrcxAZc;oEt8zIqJ^C)o&tqERD)svZ8 z)nW9q!b;o!ow72U*qe%kf)^?BQ&XFzT7orHtkcu+ackCKppH(}BG-mH2Hmc+m5!hF znX>3_p87qyaaMB?L;g0YN=_+KqSN>=GIG4UJUl<|@sbg7#@h!v$H!~8B*tX^SzOHZ z?Mt)h_~Km3l@7hRd$j59%5%+G3UUr?Q}~$I(eEL+@qBtJC~!6<1FS8r&B4diu)$z| z@@sCZbFF$;9U_o%AheAodu)4u_NoNJUy_fHyb668sCkl=+6MWgW=?4I8xh$N;Dpfx zKU-`exP3Z=K{RGLKP}WB{{7!LCp{Ag8J)ippuv7FiG`8rOoaY~&R8g0A}p+Ss#I8Y z@8qf-;rXqgfP$iPbd=-GN=fF<{*6MAwVqz>``5~QG*sEDx`e(F^YflMI>G7Q-#*+v z98PZG^cdV3MbJ-u)iQe1zTO-VbHl$1EFsZ+>bibKRv zZfIbzGwby9((|*n_T(NfH0)K2Z{c&Rxyy;&EtNc*jrC&|y~c}6yX?%E=qysmYtPFq zJc_lkylgargSUlLI0cGt@t=3$053mUWv(l?{bPH*$Kg>bo|_m7H~_q?LN9V-_Q7mi1D>U^Uf-oL2V%~;t!||UN`bdzrx6cK*GULY7_Q! zse`hzJ<;`$@WhBWBX$Mmn;i~LZeijtxl2TvzL%G*^=r((x_qHtGD#`uH!*RJ4hM1Fsn9cddS z^raT3m08?p(I&;Y8!W`;vR^dK6S+jf?CJf5BF-A6t>51C&kQ?{Y$*L*R7RP=Y0M(h z5)oIIu1if0(X%!aZ0Tw+6pJR)a2r97*DYW>O8ysO=peZ&$fQiMbKKe58fO&{5Lu`I zTU0rTp><`kggoh9zhQTU<$wO*?fffV={pAQ;p+d_;H}c_LaQU69u*D%InE86PVQ~3XW2!0GEyl!_)z@p?J~FBb8hi~F6vYu8|f&%n)c|0gIYN)sK^%nKya$mdh^vorXaCL_L&(kQyq zW-H|jmNx{$DON_Bc(H+Q|KC9CD%BGD74Y^06je36D8vhqc-bcaYGEU~c6T>E`1bqL zPXq;vLRy>m1x2n^Phm28XuYbuq0s=fFClTngNVl(byt+aW$D)gk^a2s*XHKPwj+LU*YeiRR=Ld0$`?lfNcFL|HGAG2kHs}QTdCM}TwS^P>t>bV zYQLfh{=Mw!u{c;G!!pOMb6_GkQ`KD^K`}R`?0}~R00N68tA?ued%)C0PAER5E3ZGC z)cvoS&NS5p_Yq_zfOOe0vI+iY^zZN|? zy3_Fww|;TuHdw&Go+(U)WV0bxn<#PdNeU+bvPCzI2yQGo9*42u&i$6_34U;7eEikr zhqHD5(}Onc+`K$?n#)52e#8;8x$B>e#Ye;~A$ne018cNchA)95b&qC!lz$0kif377 ztQRylF7glr0G^y}!O`ne*Wudz5PfZ~Nrj~qt!n7Qwt zC*c;000jTJX5}E08ina%-Lkx6!)_&uCL)FL^t7OgKXj{&nvP1SFHEl~py$F0X|rM%8ZH(^#H8KffW2o)!E8pT#pR zu;)veEbv&U-y3`k5rUI`oM@1xVX2qN8hIH$8~G#07n`fe5jp%i4)%=VmCcK|6}kfY zHAzumtA14;xlCyDz@h}+myQb=j!6E~{$kB4>hc&U8d72hv*h9W8fu{$Hz~(F^v@S0 zt|YlU#tgr)x}?aDs-lS;hv9X5-k4J0c%Rz)ZQw&px4qBm#q=;`ei1M@uL|Yi72^d{ z9ouc!I@9<@gjW>!Vq5A^u9NaLXbRPn0NZBk`%IYQ}yErfRO>Lyo{>gr`u<8|Gb*AtFhZMp)SU@DPs zns2dTM)nP|^42mrZ0n-T>d0@RDSCpqMU(J!a687i$L!F@X`9I@(K4vZL|eOCs_Ow> z)&E;Mwl)zuG5?thAou*gIJvwPnus-Xu{?Rw;*y%(c5rK7$upD)^kQ_yj6&)>wo56- z1eVH7Vow;=h%!9d35IXE*=#}^AJJt!#Uj7h=02L=UL_;roFIj{9B~4zY+RlGlW9o`0vVnb(uR!cf)_pzmZ~1M$vh6au0<5c#W{y}xaq>)jt}cBW(6ih{O| z)?&8V53BfZ!tcZeJ>At{?hLYHVUrexvu5+KmY;g^8ByES?>N z3HKO<)V%lpJd!+pW)MkLzRhM~4xi3=s;ah?dNg}J_EOOI;F(KZ(nssV|6$y5t+EC% zKgz|aLwU4h&+L2yH)w&%171Mt7&4K1^bU^$+A}(_JZo zr_UjxCUqB&-u;_051(nN+;JV!Bd_=Jx%dv|N6!DfG?=j^oR!8{v8?SOzx#qm!&&G0 z_OTsN$F((uFGyW`;&XRpI13Lzvt9D^*yvonW2|6vySX{?{R$ERKrtfosFauWS$ zU)w;fARW+DyZFVaj)*JwF-5k&&(-)$ip1Gc)Xxa>|4>KhAN_S})#teNTuRJ2Z7g0> zbk2XTyDs~Hbtn$NP>Y2Ia|iB6kMz*c^nE1cWocU6F~+hxWebWXtXk+z77&Hp&=OV(Dhi>F`KY{X>9YVMZWod+8#ycz5h>Ym z0tOOFYPFAis%%Cgy)kGk{%12{)>Fr&-pp3c6(yOA)OhF}izD-kBf1rqM#YjC^Iv;1 zxH{hyL>=8vydT}PP(MwbL|hRzwyMG}Cz7aIjfG2Ffz~#<-cC0ga|hpwXyq-r@3kOm ziu~?)%R#IlC2Z_Jb*@=;nad}sPGu3)B)!J6P+ewP-!Jvzx@39Tg%RW!3D~3g1+WQ^ z(*kQf%p$6iHAuK_b-yRzN=13kYmVTAPPHHCH#+N7kfcS3p|Y}bszbztMdicNwVlR3 zbllb*kTy8W9HkYpD6S8cs)f9oOx!PH39R#8@~rN9+AgF7tnEz(-nqj4 zVnc^e=`b3=l0w1|O)C&nKuMHejTZJ2JZO;NJ`i$Ej7d2aqCem2Lvym2;9ym+_0QiP zN^{?VxGX1W9NRYt2tzK*kyBJN78B~*64_V}Ybm#`4C*UcoOQZkYSh`JXs689sJbZP6?qY)#c%xtF?Fx9xVtW-pJpC}u#*7q_xdOXgCD+hV6`+u^Tn z5S+yo5ojrtOC0eYh}hRH4NGc*Pxo093<)Tw;}w~I)k$BfJgc5>#CSDng~?niYN}Dx zh83dUa5fH*-kt4j$E_W9sFp%uU{s+{%A{a3LCzMUb0okwg1YD$lN2xAsMnZZ3B)Cv zu>6X3-QBy&Xq}w2O6Df?>ziG)ghC#68XQOGy-4A6DzB}jHwBzPD0l(6d!u=oVq)E{ zP5i2g95G!NMF}|qGHMb)5p+2qLql{xLN>=QpMdb2GZNQ>GdryCL~4uwP|iNxEH@8T zaV`#o%_hgovhS0)z9xb+E5*>83-S2p-mN0b*7jbK=JF(9FOp zA5<=_DsJiX0>YC7xK~mkKmL6W3$@Q1wikC<=0pj&J?N>N#vDGsdA?j`H&W7vfD8d5 zbiOS5J``-_qO#>x5Ma$dGo} zJ)i^`C@V%w4PFdkrD2V$z!E^o58?2RVicrgzmnNWav2f5zChiX;N{yGJGhmcAibBK z@2PW+|Amd;5sE%JtFC_MP+c}zq;u2jqGY~Jv=au>CIRLNU|t1C8f z+eA@S2C(Z35!nz7NsR5hgSVgwh2!h}tN=gW_o?|MwDp&1q&)~H69$z8_gj5w;$Sip zufbb8<`y!(XBIG;Rku@v`G(TfF$J8T@dvQh``!Mp4ENuhQ0mj$=cJ(R>y!5XhP&Vy zFN-)yqRc*B;zL2Xq>Dh{8IQa{Q2VD@EQ?f{MS?g83QEbpp$_D41)l*hb-dpQtO3Ik zi5 zqY*9PL7`WKQ-uv_jgRg}GQYV{{>0^Yr^Fw=bL4uxgLx11q@NVN>4P{sAKc`}yDz5x zpN+~zZ~B&Cz5hpRZy6QW_hbzxzX&9_1}6|KxVwbLg1ZI@0fM_W&=7)!;0^&o@Zb>K z0|a+>cN%TnpF{pL^US+u=EL)@VfBZG?!Mf6`<$v>yLMH%^7Hd6pmU9qB7=9n$ZIV84>SJjJMVb;!}LYTeg3UOJZ^2AX)+I!F3rx`smO~8fWoUDAa=HWRRf34<4=Tw{=(Hqix*(k5>@Dd#Mrx{qT4PHmLi;*L( zz8({KTi>FS>UfUN`){OZ!b$V?s=vO;7)n5uOib#ba^R2FXyM`DG%-UZKV0-J&z$XkHwK+e2i1vIDm-$GMD9-~P(U6He{(u74@Sp^|CY zTw>XAa?={qcJ<9?mm?T2TRPYJP7l9G3>7!<3Y6Cz)*tu2jSM5q&_S|k#mlzJC@#b< zLXh{#Dh6W$X|{`x?t*$YiR@E~)z;f&V&6tgNZ8dM<$csi(d&qW zv~*F}8!;`;QUMj{{n20Ig`EXQN!6r>w5eG1zj>N?VtEM>KasTf`s+KrM$j)kI(tAD7?bUjtPQpSCVd5W8&Kl zFj$7RaabsKoT_zEE|A&Px@I#*O?-ZJj8WXYkYkIVxn66NJ+?~p!wgUul5H)%>;8q9aDK-9(rBv8rE`b6iW7d{;vKx+9q8>NW(Tn8FEZeRAwrXC>zYdA0+B%*RS+XZ zZVIZah6I^gFDiH;?=8Ex08`$3Lzi-`iR8!&Nn_m~V&6G}H+tzOe%^nvzwXn2?S)r+ zHVX3Dk^y=GLMyUr#TW>QDDF~~qJ!2}n^awOla@tZ)+A#>5@tVW z9GE*T558*}TS`|5zP`Js$ls{v98O$g5k+=2QZuXMhG0T6%zOXIlA{{9p-QWCOmFkU z6sr4xEiA_4a@k{BweYbKduTIrvWCC)+fF$x1aYTIeXsS;`kEJ_`JqjqZ2oI1b6>=2 z*H67ZzWDolBnUi}=eAqD`_Wz-yhinvMKxhg)k%d^#wzFs6hml%F5AIK@*uZL7@V@`=CFMwsc>QYp6IQKAvY zIg}bL-{qrn=m+T+bm5wGIfzKNbY%ZY88F?3?J7+qi)KVC<{*x6sLZiiMmt&%;Y8rH zMkQ9_VeqR_{9tNR7TpDpgX%E!nYJ#kd$^==k>zme+bj|T^IV^c?B2UAPJa-n_(im% z!H9T{floD|re$t^Ix1i7&pC%^z33s*JGO8dQXS4$ql;hdLXk(Bu3Vq2tYkpkxa?Mg zhsbuHV^rD(l^Av4z4@0{#)}eBdRt4qsKsg~hp>{MQBD0grNt$(f1lJ=5BM*Fe48hv zpu8gl2W=$`+GbLZ{p5S;I2X%RaaXK(vGAjvlv()rS^i)K`0%IaL#tVy?Na|=Z}XhP z8@%>^{rmr0Y2ANQ|JFwEU-%q6ryu`f(PNu(JZ98=J?_*I!rnUfao)GjxqA=PUM{!6 zdnQ_x_FgA8p>KtLH5O=S}|z=v_UIgxx1@y#ZsF`h>yV@tMOL|&P%I1E3ffD~n$8~eK!B)eC z`y?RAu&V9^HE(z2{sY$%vSp4AU(quD8+CgZ$G@xFXL#nF%ufQN+r(Kqws55OWGTL!L?!E2e{cQrc1VajSXI`Wl&^GDB_ zt{R~!gL&44+9-9?>KwTfgZ886<4cCNYj<}~>7J1RDTc7ZMYQ#OqxXktQ` zm}r5Ti%AoFap5?7gA^V{%7^K4^N&<~nN=Ho-u7Mtl5E^fo<@3~wzqpF z3%M$n8j{Rb!LJin{Plf&3WKe+s(fH?;5vSo#P6biEYf^MgtNW&b-%%z9D>jHWYID! zhKKhMjN789<9QwJUT+1)7i|-RluEYVEAGNNC%}Gvc!ve?`=?9fYL7&a@34KvA5hT- zrsV2s4cFE5+dTn5c=qCXv1Re)3`Uspj%0)EuTrk;8}H|bQq5rNnlXhotq){mAKi-4 z8Z<%ol}D(BUcrYeX8a=R1sj7(BWuO30$4ER?o6=n5lgwnlxNR^KrR9(q355~eXy~S zM9zh;tZgqJ?_30*?oKOJc!d&e!{LcZiQ`9yA6W^;cC4B*Gch5jN*|grhi)C`7hk{hhJzGVbNw?6rRck4q4?2)NqgcnUAM-|Y zcVm%Zj4GLwGZ5LJ-Ph34BE*JlU-8%0%m~78M{+&%)(Vj+YHB{4 zImjZZ6yY5l=k6$uF)Kh3IS$JEQM0qwxOJyt>)>})*xYv-kU&_5z3kNgQ=F zE3}F?NnB~{B9U)#ajr_^0zFC#Nl15!^_yPD_vA9n0KKNZS7TysEh8-FWDKI5Po7?lbBk@+eCWO@>PK#8>yG;YPrg zw1KsvQuBn}6~v4`sOcvVW>d+69v9;&fl%nh8JUD&nA=#Ryd%grtBjA21Jgzs`Gp0u zH}Nh%H&L?U<4I*>lFtb!xRJ(Uq#2FPy953hQA(S}D5U#+wJ#2N9P{{iV9 z`q(aGhc<4C)!~{A_#N-r#%UVYPG4Es`Did`4e_r8p{cdGaEa|1an=67yV}$3P=SA8 zJ#|+lYA%yyt*5?IoIk7=el+hsnvo;mS(lvLO)T4Bur)C?t%Jea4+LC^Inm7~as^WQ zCo4@_2cA{Glrrs^3j{;DV5@7K8S*PxaT);v5V4C2lf0X|SA7 z^IdaebC&0w5%t%e740A*&Py}wS^$-5rp)IJN=t#8;rX|-!p{A_YJxS%1)P<2F4%)w z(>(MgXF)TFweWdX_tlbS-^;t+h*4RZ=)Pnw7B{6k*T@0kdXFw+R$TQtkCSlEBMtu! z6=Dyhc3Hqet)mjR9)*{x|B`L4FrqnKg+H}W_Vzj3Nx<1&L^va-JRUJF1 zH|zy=Ep2_dVY1L+Cai3YIWD?B<)a_S(O||ae_zZ|OajX8o}>xpMt8i60TC$~VnB(g zLB2(T^4MX;RGi9vzUyW6rKV-`t;8f(55G5o_0VP#rEmUF>g42P zc1-?#7ysd{d=lqvB1Nty*a-SwUePq6Q&uj`KsAot06Ww7M*T0-PM^Oi_FHk zuCfMH=P-dn4%WqMNB7}=Z%BGZBkFdAGSDYgC@{xiyz=%qxUAYmlImGQG^R|vR%vCg zhOP8fFA4ZQ<*B)F8=B8p5pK&4K%LUx6v7HO;ut=XArMSaFl8qgAJ^F1vpIbB%mf`= z6+K4Z+uPFsVCpu=Wl_pbt^awhJ_kGa(=uBi8#oTME6fU~K;JA+)t4eD~Vi>MF z!|>i36g`jQBg^qxMI}2qxq|eu(2|)s_ovXYqx^-R_mzLcBOG6Mm4bj_ojA48+H~GI z&y5PvVUEXv03+Yr5}ngOj@|Ty~f-k#pxr>rOAZEag)e z)=2X_b^lfX{yRo85SwbUg&g3BPHf^n6C7WNyFk{TY`6)vTlu6wsX6*pAhli z*1*gp-RBF5ZDUBNg_tIqty=c1dGM&QOGm*HLP*deQ&2`4-wu;Czq+>G34x!F67ZH! z<-bTpIbk)G*({?irAF2Fk<7q?mTrJ;$N2!XX^44ir-VTh4WwaLi{@#0lZuC7r(?Kv z=%-_UK1hF9jwc$k_O|$9a0ECbUteFpDQ>6> zv&{2&^uUXofVI}q>8&qa)IZPZ4$6L~$0(_ZqoO`uZTpR1_fA<&ZRgKF63PZiCDPAc zW7!ojJQK*vCmOsf5>+vjy51*j~t@)^UJkaOEWNFe$lCl3eVD%bLA zsaS*i)+;~c$Ny-wQMA;QnF_jJJ6+^uO5FWvbieu7+FmG7X&n+o$b9lf@1g-2@wnVL8B${1!cXdt1`G zA4o);_;I9#yNNqf+N=hrWGWC{nzquD8r$B!Rl zLW&-xRP9d(J8P+{%V(*q-POd|{<{`nZS}ydzPfs{HWRM^YQI+^L{Hy+&BPumIa9a) z19Szeti<==BMa{se=7RrB_m_6ej5cuRJ0ilu7P$&27hl_W`A^A64dNcc~k9j&Jfqr z*7w*WBa^biGle|=+Gx#`*aKG7XPHNgldjs<=C6m82$NUX42;eT+Ieu@+?pc_cF3kDJaClkh`~3y=zm>RYrB%o~% zcm{%SKEL=Q>FRbbe>^vGx>{9Kfz+3lN<(z5_KsQol&t4y3rg}=F16)oaO&9hJlq85 zM_OSkwPPX$ZA&wKo;b@!GyzXd=KE`tZhrHy8gIu0jbtmVPaAqXt%ho7PL#jajVbxv z;Xx3n0h$__(}ox6G`NUfr>}INSJdnl3+cWBHyIa?Ixbd|lM5DkUQ;-*;9&nlGOCd7 z$`5mROtbbI-o&ijRcg=k@kiv}rk{7w<}BI0g+$RYbf~WKlJtvo8g8sx+6OnNVl1et z#W@_Y8jV$!v$nNKg!H{_|44b(!+qn*L zr_HiIjGJT+>-xrwlgJ+eYQcIzu{1u-DcO~WT+YZlkxJHtUfaC(CzlP-E1Uh>)qsHZ zUx=@MZ9VKZ3l!Kv$Z3Z@UTbT3aBeFK(36j=;%EiCg~svDXET3m0tt%leR7Ew-9;7M zrI@-wKt%Lj{o46wdb%8CZUywvjapMjl8EB?Cj4nnclYAqIh@A^cC8hAhfr6rA)7#k zi+F$M65zL3=X}+w4_dx?9iK}hmNIk&t|fX-#L`rsVoLab?y#v#Jy|!|3yisO#f1Fx zkDy7GbA>#08&|=LM7g$ZJY4EIp*~kD85a7V2#m{1&-O2D<2)mdu2!`gIx0y=1ynYt z%1oqBUPUXoop1HTv#<{ji!1;Z<`Z+E<^J>skMHX*w1~{_(#@tF8FwKXry1P-Hq7X) z^}1M)Clb`=rp0k_>R*DetuJ+MZ4VxJUd0Q0i!6LvlnPI+e0^=&d~N@*(NLAr)@0U3 zmCMro&*%Zzj_bPxXi1fgo+pyxT5i7|7EeGZt=A4&ByGbRY%^|%4 zSR{56RPb*JQ^k?<~>6g zy;z)0UqXGKz~^*CRz)lve7bg2D9MMnTwe z`_J6UFP8J3x6;z|be#*`^*2bj2A+!^c(Jk2i;Jh1?z6NY#d*--yNcly%9S6NMJAGK z`93epQalj%K(WF>Ju0p!^5_$APu#-ut#$nO3FDLp%zty14~}25{%xT4V9@u?|NfIR zR|Fa|dJ^{3n6lHiQ5)OL z*tM`U$}x0Tuw$lk)6TF&8IpXCTs^^Alwg&3QRdQdD=N#|$X1L{(3-E~|)2Hhd z$Qr^i(^a+(gM?RT`E#R;dp#_l1{@E-lv}t0I6BCu1x}u)u)mRzZ=V`-QvmwDI`#xP znhj(Sk{>hnqPs_(HD<_rk%dZj%+EI5x#?d&C(FMjNi$USh0uDSA9gj~0cA*0b@gKg zZv!PWE1MLTOU784!k<4;QNQtWu|LnhJR8Ch5(`FoQLL0ZT6eZL!&l4CTW6#Wntbe7 z!vAbvPaZ}$6q0I@zs8kubUdn0I1h@>x$z`O-G+zu6&7b2n6eU}p@ni}q^~T$u-BV6 z>QE&5cB&mw;@A9sa4Y0B7Kdm1K*cqXaq z19FDNdAT-|$xc)4yyIgoUCncZpyi|1MPStQa{4wmiw0AGf~lZ~3TG#Uz0E2`5u036 ziR<;xzJl;X9>f?`Htq{`$G=N`fMRm2i&pXRlPBjtFC9C3dQ$j2Zd($gYip;GDF_M8 z3$B&A+2D;D^R0oDelan)8{+chTrRrS)+q%Ay?~zvbCQm=*f1&vQgxm$0*;5o!vGKoltYATWZX26%vencz89IBAke;9t3SXWi zRRLRxoHn{bi&V{as8NDVAK&N!-A| z^_mxCpaKFekIk1RxXF&3aL#w4PX)qaQHd?qPe8*UqjG2*ka% zR;#L7-XIc=p0LJP7Hl|6@Uk_~ zlq0Lk_wQ0ui%BM6JFr=|gt(r61{Qp=%4c<-2SnZHjhNvb9`4n)x>c7~^fVvX@9NZ1 zD8#ddrr|YN{!{v61A#u6GGD?I35a5#0&tttM+?6ra#d**lK2Vpw@v3ZTBdL&JtA#8 zw(WRH&?hdxfR2Gu$j_c(m4s6?uY8o0kQzvYo?c7fspEMF5bINRpd2`P(^n3Ep`6tU{z60E(A6jN*XH3z)-BDt}KZh8{_%rF7%GVFZoJ z`~zn%XnSaV39=@kHk;pIO}W&19MM7ay((+cIXnlp<@D5FCQB*TiJz3huc6}>;`sCO zC=}zEfu&fh$`B<{t|&J*g*+aUyXFLIuGx3i;Rpfh8wW>6oz}LwPOl{u6$58yuMZZa zkkitaqh#ZYf8}jD@&85qA^1;0>sr`=S(5$%S^L;A9Jsb7_nUw&BvG&DDD z&VPJLyjtVh+p`r@w_W$=_TSqwP>+4fShTDDVSk%cwMR$Kd`QR^(-2!wfJzqLeacYvg9RSjc{1TBnT#P2ee>8%udfJ&aIpyg{7D!6*1}r6lAf_m@RgPf1lc;fBbK zYFX#g!}YA=3$)#f`gX8iWbQ5`D!&_X+Zk*qqrD6LO4{PO3U1`B%$(8c{_0eZ_EfkQ z`3AF=52k~oJ;C}~ciQ$@$CNTv)HGn4qQ|Xg>qHXY;@Ufv01e+O4HHWvA#eRr&`@d_ zCk~ZlQBZhre=+TqR%~hH(&#}6VOe@mx;RW|4)7mAJvzmc0g6e^3@hCE-m0?1euD*D zSgNh9=O{)Ib(YHZ(&EOW;J#3bW5F9?+(mkAJ?U5y;yXK+XeVT zspAE6iyR+*CM0MjX_O9?x$aC?nanT~5^gCAzXHC2Z{V$zlt)iH;J|G38rh}QVtCym z-u2eg=~G@?bMHN0%7{%0oLU!3n;Fk3mKLO?VV)h(w_OW(Kw-#?RNxcY9gxy2-P6zV zRVXc&y2;D5Bq@;4KpBATbIYYkTgH{Pk?VhCGb$BPKN&Dx91H=%bH2to_A1l+6Tn*x z8ilayA9J*7!k%=FXCz*Sv(ilRp$mlf3gQQ~9i8OomV;Zz;p$_K=`T|2@4*iwpa1lgiK^NAJ$t3tPFEJZg7V4clS_8u;iu8+e)50*LA|uzc)T>yT2U(UZW_P9=FPixY#qYcK+pM}h`qglXNY*z z^V6=0?KR=z@^LEy44_$Rz1?_kJCmj%_<@xGkYpkwtpmT8>^|%9xPrqk{yPw#e-S%* zTsk^2R_k^`7)o5ReSh#Uw{*YaMqIlXa)SFJXAQq#~( zFARCz*3&`x_=*YvDv$Eqd<&JxDhTO)o4Uk7*{ZEx#lBy#P?Ghd@$IucXfUooOEvIpr zWwaK7d4XF1pZVZ7PXg&N)jmur=^E6}hBbin|6%<(9!a(!Oc-|fRlbRuP9F~sk2vvU zuF+9Z-Pu{xFw)@tW+$7Eb#_pKuz-aPsz=wH$Jq%g6T7XcGF=Ra?Z0Uq*ST%cYn%3L}>^&J`<DUeDamp)?9R~ITF>7884FfrPC-F^ zW@dR`eraxyC8(?AYq!<)Z26#{eSdxKpZC}hv~-;#Ty<6Z!R%#Zk3$G=^H;Va9(BET zujP+!g%$~>RuR|qQJW*1d4f5*}Cvb6Bu^<`^OsL1ssY2dMTT5Y>d3kx+ zD!Jh8Zi4!{x>kC_&ovm()sZQ{4_KOwyWO~df5dsIUcRJbWSq^eY|sc)3DZ8SK#&RJ zQUK7yOKWlYvvkG65?*2`2!+;gfX+X>jw+g(#HDkhoqR2)z~UdV-wT@_RNoW0EZ^5w zY03F^xhC7XhcokyF52tPo;-c(UJ(9`XnPU|FB!Ch1XnU)GkblUOBQGc!V0F|z7l%C zg}=Eg_41*hX%7H#z3-e}U!Q!9hI8%b&n*RYQQbFw2Gi^q#^?SsJ)}X*V=Llvy^8oFG39DATjw~}JDSkI zO(DGAK6aELTs{r3ny>YZ&+7+$M}&lC7gj|~yi3{D{36oRTQG=3pM&@0)S;IHTp^GtqVwOOn8d5%H;!K-9^v7cU`rSF$;zq4Sc=_WMEQ`A zcwPh=>KC2e!P<@4dG_VN%nbK+Dy}h+HLQo$Ons#9c&sMN zxyWrna<0XD@~t+U-S`(641By{zqk&koT)qUUMbFPXOGhmgAN4?O;X-Ee zgPTlEjGPBNGgU_#2CWH2VgI~j$yuZ7vWqfyTm1uTa*~unH%>I~TM`IafL8i&%&;J4 zTq;v}Y*yDxey8Y>N(9QIPGT)KY+cz{QE#kB9S;40TBW=?6MmCs(3P+@6u(C2Gupm(?lTG3U$qKd<(gEar z5p8MK;-ia$2R=;{og%ZlNh}S?nwxauI@|s4SU2bru9}K7fvh`po5ry{7!i? zze?Y!bJF^PkKD_dAjP?IE77zPC5PPO)S#%CvsJ}a-|b-U*KjTKGvDwOw3W4T!87Pq zG4fX6>3(k~RR5Q|>H`l$6X;F(U_u=*JuV?wpYgnxaFY*h{H2fxg3GSzP) z3Qvl9Nkzv9`MqLKx~;2euw{7r3kllek|Xz#J<%wz=&q|i&XS<%$m%FQWomEMosiA2 z*dRizJ;NVKQ5^S$Mj+Du-mLcZa7w65+QvrgA>M?hlY7tEilNBpsJOI_3$sIIV0p;o z#5!ld!WXoGRD9cc9EbI3-Kg5+g%Y$Z>WYGAMRV^CSiQBU*QQ)<&|3a+F`n<;5E!kU z&Mp<3h~_kA`S?e-H=#I}TBP6fD5sX@)cpB8jM3BJ1onCgkCBdkc_&9^sb04cg2yq)fUBo&LhCN!rvtv0lEymaU2S`KG;#gr?m;#{(&s-rQ4 z$L1m|{aSfzJW?e6rRb-(xXW3wJ_xy;;Qq50Qs9dDdYxm7mYq;iYDQX5)nV6{v`Zh| zi%jp<++{|t2s`>y6F-OMzVt)i>vyWqb6Ee=M0OK@G9FI0S9v*?B%_f}tm!Ct#j>Bp zKBDHR09Nm}ZOI~12ld;uFe*Y}*XcBL^_#)d(5T6X4Ic7i%+b3!&}G`=U)()u5z zGKL3|&s~Q(HBlJ)qNVoAx-s_p%Q^Jy1gU4nT%-+J2@EQ6a02Q5lv4GN!gGubcyA_a z1|af@$d;9|r4z-g@AD_dscde0V*&y`f-I?gMx`g!mHH$8(4luM?iVd1lTzr!CJSJ) zVm1ocU;&pl`S};Mq&3@rb}LNbX!g>PARQ08+|rua-V@}MmeDD%FK~YOXQ*akM9P1F z%#nQf>H>P`%4?_9K*GJ&NXm0{rZA|UJU_t8Z9a98YQXtWwEpY25PIosMUfQwIMX5g6$wk7#w;D2ce_~xTE7@Q*S` z#}e1z{f@8M`^qo(5khwSdjt3W%}nh%i59Ny1DtSVE$ z8Gh6T=&mN)Hp(L?ZiZ2aVwdzLd1^e5{dg(Eh}R5H>&|O(OM@F6gD2#W$=&Q+*9Qua8infb`um4Iy`=gAqsr|e z6W~z|r3!}O;!}h?D}fg@i=ZDZ@7pcb4^&mXE@Rhk8<3aR<=}2I-W`YGR24P31BHfy z_HPYd637=xBfFH6+{mc7%f;2KpGg=vL`2^*vdLDnJcRqXJ>l7=-2GB(zeTfgT97FH z2twjE6ob$9Yu7l&1K@dP`>3DHZB17&0`;80?Ff-V!GdhqN;X|pAI^1zzLI=rq@Ju9 zQ~G+VtLe!I?Jf$keQ&>X{ndw{fNVjQW@Fu+GFNs?{0ka1w}cx7QRU%5akQ&19V@4# zD7Ln41c7$C7)W>T1A%60VyrT3LtT?gx9|}~bYm&|f_!v^ zGhTFM2(idekYv^?Kj6(vDkjL+Ol2{#)ih$mw0W0@r)UdU>WtaBTq3J}yws0)$=cZ? zcqRegC5^>9QG2eZuZ$huA^rA?)s%qYSo`=DE3a#3;^(N*lbv%udocmE6ESiI5r)^Y zrNZ3|GRt<=;dm#=Y0@LQftSaGA{N21&DZ8Qr}~0Ne$D4o!FjoX`%v^UTng-fi{sbK z1-ECn9vXNl?O(nSg>$%zqLlTMDlzuLqN7c}2RDM^F*L0Nvo!wT33g6aU)>_KaKa=aKY|;H|App@967pA zAYa~Kg3VB3z_nhVjvGU@P@jjKxC$msN{TA0h^dmn1M};XRa8+zx&75+Q=v7yBXZfh zv!1(cWy@F@R}SAD{v>!k7WEnFcqhfCNYaImgG07Gw*e;+@fwdx`e;O=sW)eL-NH!b z+o7dpzTR-Y&JA$F4$wN4p21(Ami0v{Vbs0U7VFweYZ53 z=JBjYN zT-w@}H>>FlFm=Npg3 zs{NW!Od{@I1Knr~f=QGNw8}G)R~B9=O%$LfTw+TL#DZQ1JgC&O@Zc`hywee*{H7Ck zmaNKkXQRu9)fDp@GZ=mqnlt*TL6)Ahimpwu-#utoV$T*cw;TmO_T7W4_^&5Q$LhKLef$7(} ztr6_VQlJO6Mk)AVrnJAgOS$FMr0|=RVxIA})=dA2IiBPl(c0fPv5fDLL)Mt{lW}d` zFhIWDFoU&ej?c@%FTmD_6Go%_=7FLK zN_9=*SGQ`7--h>JzV6utxlMQG+D14@=X5H6g`xefZMh~eu? zs?G&#?t(JvV34#r>0tpGc=SNoI`$m@A#Ac=NjEb6hrwlFM+S*g0OU$`W^wnv!>}kH zp&tXV5bP-L!^BcoL0%kwHb@fwR%-jLWb!Eq;MarUiCQQ2aaU%7}@+jd88E%iB%cvs%ra9wtRGSM>)kpkqNmSd(ARewrB? zpGW@7ey|D36z_~*o%lVtb;*k4xXaiA1pNR#mt>EQX=1;4VRPOKSAD%8@I6Y%=JUvy z2TIX=Xq`LHo{FTLDh~C{uwy}-WR^FbH7qLQX9*ESW;#t@MV?UYrA#rR$);QLV$Dr3 zjBA>WX0WL7d$RqjJ2#n1pt>D50VY5~LcVtMW}+in;5axcrMiJc4;7#hE>9YiU`%(A z$-FV!Z0XjS>4m%s-HnssdlH0UrP%cz#~?rOY`&&C@x8Z3F7D-3 zmEhcIKjB}sov7-&H2HN}2o-0vc|mvnLEtC|AJ95K5KgC+athzF1_a3;Fsfd?tUN6eQn`hca{^mExytE*HNdBoGW{QSh+ zoSa6ATw7-~;+V7&2ciwODpu>}+yA%}SIs&t@aI zXYs~8{FFLzLrm?Ut>f+e#{DZAxX}W50a2KkxQ81*TTNi7`BsUnYa2q~~GGN1{rZM7i~x+U%%h zqN1jlNFdY`+3?-x_1O8OIS~OjDcBYq-24MZVq*C{)@0$E7#!5qoGFKi)s8%PHD0BU zuD<*1`znIIc;|N!Dp9Pyu2xF<&TPU10S$&H64I`UN2E!^!O!!qeH(>o{}^Vtp_Y0c z7M!bX`?j~Q%bKPdFTh$?h$K^L8z4ETFTXy25&7xF0J@dENvFc{OzsVB>DiqO5MN2&3Dpgf^_xBrwwvrG zaZ&b*NUrB43$JrO)HZ>__Kt=D_%21HUf}%pDJ6V;2A#=CBL&UF__qhXIV=LM$W~uH zS>&X8M{MrwEZ`RN0>vL@YIHXg_vw8g2=0rLy}6moMe+yxT0^>wCFO? z!bWaJPWheI`Su@22K*E(EQ)Gq0yU#;LzkME>h0p;7rbDF{aH^vHMLIYk3*joEZs*3 zB;$39urUz3#jc%*D^n07-B=^h+{y)l3apSAPs$HqVPfs&XJv{5zuV48;-hXojZe}|kBO|B$}6*nx^+BuD-R30c-1PT2Hrq{+0VxrU=9;_O+&K- zFvIn5 zCrDNqC^a8nTD7m(19*-ga3L8|u|3QqD?D6TfzUDicjP z2cfAu7+zXC8kqDxg+k8XjF-K51+$L7b(GQ7{S&<#Sgby39G09?>Hv~mHu>)em;z`l zkW^lwqN-1V9%M}4y2?GO3|!5OOiV?TfNlhVxL>_?qzzmv=3YKokuEtM4}ULgcls2x z+0!1$dLJzK+5Nn)sp4Wo8J@8ShI;h=TBxrn zgZS29JaIUKVM=(>. Cachi2 is a wrapper around the package managers that makes it easy to prefetch and cache dependencies. It also helps generate a manifest of all dependencies included in your builds, ensuring transparency and maintainability. + +To ensure proper usage of Cachi2, follow these steps for your project’s builds process: + +* *Define dependencies* - Explicitly declare dependencies in a lock file generated by the package manager. Cachi2 only fetches dependencies that are declared in this file. + +* *Reproducible builds* - Cachi2 enforces exact version matching for dependencies, including transitive dependencies. This ensures controlled and reproducible build dependencies. + +* *Secure builds* - While package managers use lock files to resolve dependencies automatically, it is crucial to verify the checksums of all the dependencies to safeguard against supply chain attacks. + +[#supported-languages] +.Supported languages + +[cols="1,1"] +|=== +|Language +|Package Manager + +|Go +|`gomod` + +|Python +|`pip` +|=== + +== Enabling prefetch builds for `gomod` + +.Prerequisites +* You have an upgraded build pipeline. +* You have dependencies outside your git repository. + +.Procedures +For each component that you want to build hermetically: + +. Navigate to your component's source code. +. Open the *.tekton* directory and locate the *.yaml* files related to the *pull-request* and *push* processes. +. *Set up dependency prefetching with Cachi2:* In both the `.yaml` files, add the following prefetch-input pipeline parameter. + ++ +[source,yaml] +---- +param: + - name: prefetch-input + value: <1> +---- +<1> If the package manager lock file is located in the root directory of your project, enter `gomod`. Otherwise, if the package manager lock file is in a subdirectory, provide the path to the lock file in JSON format. For example, +{"type": "{}", "path": "path-to-the-directory-which-contains-the-lockfile}"} + +include::../partials/con_hermetic_verification.adoc[] + +== Enabling prefetch builds for `pip` +Cachi2 supports pip by parsing *requirements.txt* files placed in the root of your repository and then downloading the specified dependencies. These files should be lockfiles, which include all the transitive dependencies. Each transitive dependency in the *requirements.txt* file must be pinned to a specific version. + +.Prerequisites +* You have an upgraded build pipeline. +* You have dependencies outside your git repository. + +.Procedures +For each component that you want to build hermetically: + +. Navigate to your component’s source code. +. Open the *.tekton* directory and locate the *.yaml* files related to the *pull-request* and *push* processes. +. *Set up dependency prefetching with Cachi2:* In both the `.yaml` files, add the following prefetch-input pipeline parameter. + ++ +[source,yaml] +---- +param: + - name: prefetch-input + value: <1> +---- +<1> If the package manager lock file is located in the root directory of your project, enter `pip`. Otherwise, if the package manager lock file is in a subdirectory, provide the path to the lock file in the JSON format. For example, +{"type": "{}", "path": "path-to-the-directory-which-contains-the-lockfile}"} + +. Create a file (for example, pyproject.toml) with metadata (name and version) and place it in the root of your repository. + ++ +[source,metadata] +---- +[metadata] +name = "my_package" +version = "0.1.0" +---- + ++ +NOTE: Instead of a *pyproject.toml* file, you can also create a *setup.py* or *setup.cfg* file. For information on the metadata of these files, see link:https://github.com/containerbuildsystem/cachi2/blob/main/docs/pip.md#project-metadata[Project Metadata]. + +. To generate a fully resolved requirements.txt file, run + ++ +[source,command] +---- +$ pip-compile pyproject.toml --generate-hashes +---- + ++ +NOTE: The command mentioned assumes that you have defined project dependencies in *pyproject.toml*. However, if you have defined the project dependencies in either the *setup.py* or *setup.cfg*, ensure to update the command accordingly. + +include::../partials/con_hermetic_verification.adoc[] + +== Enabling prefetch builds for `pip` with source dependencies +If your project depends on `pip` with source dependencies, you can prefetch builds to improve the performance of the build process. Prefetch builds allow Cachi2 to fetch the build dependencies and provide them to Pip for offline installation in a network-isolated environment. + +.Prerequisites + +* You have an upgraded build pipeline. +* You have dependencies outside of your git repository. +* Download the link:https://raw.githubusercontent.com/containerbuildsystem/cachito/master/bin/pip_find_builddeps.py[`pip_find_builddeps.py`] script directly from GitHub. ++ +NOTE: This script has no runtime dependency other than `pip`. + +.Procedures +For each component that you want to build hermetically: + +. Navigate to your component's source code. +. Open the *.tekton* directory and locate the *.yaml* files related to the *pull-request* and *push* processes. +. *Set up dependency prefetching with Cachi2:* In both the `.yaml` files, add the following prefetch-input pipeline parameter. + ++ +[source,yaml] +---- +param: + - name: prefetch-input + value: <1> +---- +<1> If the package manager lock file is located in the root directory of your project, enter `pip`. Otherwise, if the package manager lock file is in a subdirectory, provide the path to the lock file in the JSON format. For example, +{"type": "{}", "path": "path-to-the-directory-which-contains-the-lockfile}"} + +. Create a file (for example, pyproject.toml) with metadata (name and version) and place it in the root of your repository. + ++ +[source,metadata] +---- +[metadata] +name = "my_package" +version = "0.1.0" +---- + ++ +NOTE: Instead of a *pyproject.toml* file, you can also create a *setup.py* or *setup.cfg* file. For information on the metadata of these files, see link:https://github.com/containerbuildsystem/cachi2/blob/main/docs/pip.md#project-metadata[Project Metadata]. + +. Generate a fully resolved requirements.txt file by using the following command: + ++ +[source,command] +---- +$ pip-compile pyproject.toml --generate-hashes +---- + ++ +NOTE: The command mentioned assumes that you have defined project dependencies in *pyproject.toml*. However, if you have defined the project dependencies in either the *setup.py* or *setup.cfg*, ensure to update the command accordingly. + +. In the root of your repository create a file, *requirements-build.in*. + +. Copy the build system requirements from the *pyproject.toml* file to the *requirements-build.in* file. + ++ +*For example:* ++ +image::build-requirements.png[Build requirements, role="image"] + +. Run the `pip_find_builddeps.py` script and `pip-compile` the outputs by using the following command: + ++ +[source,command] +---- +$ pip_find_builddeps.py requirements.txt \ +--append \ +--only-write-on-update \ +-o requirements-build.in +---- + +. Use the `pip-compile` command to convert the *requirements-build.in* file in to the *requirements-build.txt* file by using the following command: + ++ +[source,command] +---- +$ pip-compile requirements-build.in --allow-unsafe --generate-hashes +---- + +. Add the *requirement-build.txt* file to your project. It does not require any changes to your build process. + ++ +NOTE: `pip` automatically installs the build dependencies when needed for explicit installation. The purpose of the *requirement-build.txt* file is to enable Cachi2 to fetch the build dependencies and provide them to pip for offline installation in a network-isolated environment. + +include::../partials/con_hermetic_verification.adoc[] + +[role="_additional-resources"] +.Additional resources +* To troubleshoot any issues you experience when working with Enabling prefetch builds for `pip` or `pip` with source dependencies, see the link:https://github.com/containerbuildsystem/cachi2/blob/main/docs/pip.md#troubleshooting[Troubleshooting] section. \ No newline at end of file diff --git a/docs/modules/ROOT/pages/partials/con_hermetic_verification.adoc b/docs/modules/ROOT/pages/partials/con_hermetic_verification.adoc new file mode 100644 index 00000000..ae017222 --- /dev/null +++ b/docs/modules/ROOT/pages/partials/con_hermetic_verification.adoc @@ -0,0 +1,5 @@ +.Verification + +. On your application, navigate to the *Activity* > *Pipeline* runs tab. + +. For a pipeline run with *Type* as *Build*, you can review the status of your build pipeline. \ No newline at end of file diff --git a/docs/modules/ROOT/partials/con_hermetic_verification.adoc b/docs/modules/ROOT/partials/con_hermetic_verification.adoc new file mode 100644 index 00000000..ae017222 --- /dev/null +++ b/docs/modules/ROOT/partials/con_hermetic_verification.adoc @@ -0,0 +1,5 @@ +.Verification + +. On your application, navigate to the *Activity* > *Pipeline* runs tab. + +. For a pipeline run with *Type* as *Build*, you can review the status of your build pipeline. \ No newline at end of file