From 08e80bb6790e8a9c5d36fb0610635f191aaaebc4 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Thu, 15 Mar 2018 14:04:29 -0700 Subject: [PATCH] Add lorax 19.7.10 (lorax-composer) Documentation under /lorax-composer/ --- lorax-composer/.buildinfo | 4 + lorax-composer/.doctrees/environment.pickle | Bin 0 -> 1809047 bytes lorax-composer/.doctrees/index.doctree | Bin 0 -> 6371 bytes lorax-composer/.doctrees/intro.doctree | Bin 0 -> 9986 bytes .../.doctrees/lorax-composer.doctree | Bin 0 -> 30204 bytes lorax-composer/.doctrees/modules.doctree | Bin 0 -> 2743 bytes lorax-composer/.doctrees/pylorax.api.doctree | Bin 0 -> 547469 bytes lorax-composer/.doctrees/pylorax.doctree | Bin 0 -> 427411 bytes lorax-composer/_modules/index.html | 117 + lorax-composer/_modules/pylorax/__init__.html | 469 + lorax-composer/_modules/pylorax/api.html | 114 + .../_modules/pylorax/api/compose.html | 417 + .../_modules/pylorax/api/config.html | 202 + .../_modules/pylorax/api/crossdomain.html | 160 + .../_modules/pylorax/api/projects.html | 359 + .../_modules/pylorax/api/queue.html | 659 + .../_modules/pylorax/api/recipes.html | 978 ++ .../_modules/pylorax/api/server.html | 151 + lorax-composer/_modules/pylorax/api/v0.html | 1672 +++ .../_modules/pylorax/api/workspace.html | 195 + .../_modules/pylorax/api/yumbase.html | 201 + lorax-composer/_modules/pylorax/base.html | 161 + .../_modules/pylorax/buildstamp.html | 152 + lorax-composer/_modules/pylorax/creator.html | 707 ++ .../_modules/pylorax/decorators.html | 124 + lorax-composer/_modules/pylorax/discinfo.html | 133 + .../_modules/pylorax/executils.html | 519 + lorax-composer/_modules/pylorax/imgutils.html | 559 + .../_modules/pylorax/installer.html | 482 + .../_modules/pylorax/logmonitor.html | 217 + lorax-composer/_modules/pylorax/ltmpl.html | 759 ++ lorax-composer/_modules/pylorax/sysutils.html | 202 + .../_modules/pylorax/treebuilder.html | 414 + lorax-composer/_modules/pylorax/treeinfo.html | 151 + .../_modules/pylorax/yumhelper.html | 219 + lorax-composer/_sources/index.rst.txt | 28 + lorax-composer/_sources/index.txt | 28 + lorax-composer/_sources/intro.rst.txt | 67 + lorax-composer/_sources/intro.txt | 67 + .../_sources/lorax-composer.rst.txt | 104 + lorax-composer/_sources/lorax-composer.txt | 104 + lorax-composer/_sources/modules.rst.txt | 7 + lorax-composer/_sources/modules.txt | 7 + lorax-composer/_sources/pylorax.api.rst.txt | 94 + lorax-composer/_sources/pylorax.api.txt | 91 + lorax-composer/_sources/pylorax.rst.txt | 141 + lorax-composer/_sources/pylorax.txt | 138 + lorax-composer/_static/ajax-loader.gif | Bin 0 -> 673 bytes lorax-composer/_static/basic.css | 540 + lorax-composer/_static/classic.css | 261 + lorax-composer/_static/comment-bright.png | Bin 0 -> 3500 bytes lorax-composer/_static/comment-close.png | Bin 0 -> 3578 bytes lorax-composer/_static/comment.png | Bin 0 -> 3445 bytes lorax-composer/_static/default.css | 256 + lorax-composer/_static/doctools.js | 247 + lorax-composer/_static/down-pressed.png | Bin 0 -> 368 bytes lorax-composer/_static/down.png | Bin 0 -> 363 bytes lorax-composer/_static/file.png | Bin 0 -> 392 bytes lorax-composer/_static/jquery-3.1.0.js | 10074 ++++++++++++++++ lorax-composer/_static/jquery.js | 154 + lorax-composer/_static/minus.png | Bin 0 -> 199 bytes lorax-composer/_static/plus.png | Bin 0 -> 199 bytes lorax-composer/_static/pygments.css | 62 + lorax-composer/_static/searchtools.js | 560 + lorax-composer/_static/sidebar.js | 151 + lorax-composer/_static/underscore-1.3.1.js | 999 ++ lorax-composer/_static/underscore.js | 23 + lorax-composer/_static/up-pressed.png | Bin 0 -> 372 bytes lorax-composer/_static/up.png | Bin 0 -> 363 bytes lorax-composer/_static/websupport.js | 808 ++ lorax-composer/genindex.html | 1491 +++ lorax-composer/index.html | 133 + lorax-composer/intro.html | 172 + lorax-composer/lorax-composer.html | 226 + lorax-composer/modules.html | 158 + lorax-composer/objects.inv | Bin 0 -> 2851 bytes lorax-composer/py-modindex.html | 246 + lorax-composer/pylorax.api.html | 3038 +++++ lorax-composer/pylorax.html | 1611 +++ lorax-composer/search.html | 105 + lorax-composer/searchindex.js | 1 + 81 files changed, 32689 insertions(+) create mode 100644 lorax-composer/.buildinfo create mode 100644 lorax-composer/.doctrees/environment.pickle create mode 100644 lorax-composer/.doctrees/index.doctree create mode 100644 lorax-composer/.doctrees/intro.doctree create mode 100644 lorax-composer/.doctrees/lorax-composer.doctree create mode 100644 lorax-composer/.doctrees/modules.doctree create mode 100644 lorax-composer/.doctrees/pylorax.api.doctree create mode 100644 lorax-composer/.doctrees/pylorax.doctree create mode 100644 lorax-composer/_modules/index.html create mode 100644 lorax-composer/_modules/pylorax/__init__.html create mode 100644 lorax-composer/_modules/pylorax/api.html create mode 100644 lorax-composer/_modules/pylorax/api/compose.html create mode 100644 lorax-composer/_modules/pylorax/api/config.html create mode 100644 lorax-composer/_modules/pylorax/api/crossdomain.html create mode 100644 lorax-composer/_modules/pylorax/api/projects.html create mode 100644 lorax-composer/_modules/pylorax/api/queue.html create mode 100644 lorax-composer/_modules/pylorax/api/recipes.html create mode 100644 lorax-composer/_modules/pylorax/api/server.html create mode 100644 lorax-composer/_modules/pylorax/api/v0.html create mode 100644 lorax-composer/_modules/pylorax/api/workspace.html create mode 100644 lorax-composer/_modules/pylorax/api/yumbase.html create mode 100644 lorax-composer/_modules/pylorax/base.html create mode 100644 lorax-composer/_modules/pylorax/buildstamp.html create mode 100644 lorax-composer/_modules/pylorax/creator.html create mode 100644 lorax-composer/_modules/pylorax/decorators.html create mode 100644 lorax-composer/_modules/pylorax/discinfo.html create mode 100644 lorax-composer/_modules/pylorax/executils.html create mode 100644 lorax-composer/_modules/pylorax/imgutils.html create mode 100644 lorax-composer/_modules/pylorax/installer.html create mode 100644 lorax-composer/_modules/pylorax/logmonitor.html create mode 100644 lorax-composer/_modules/pylorax/ltmpl.html create mode 100644 lorax-composer/_modules/pylorax/sysutils.html create mode 100644 lorax-composer/_modules/pylorax/treebuilder.html create mode 100644 lorax-composer/_modules/pylorax/treeinfo.html create mode 100644 lorax-composer/_modules/pylorax/yumhelper.html create mode 100644 lorax-composer/_sources/index.rst.txt create mode 100644 lorax-composer/_sources/index.txt create mode 100644 lorax-composer/_sources/intro.rst.txt create mode 100644 lorax-composer/_sources/intro.txt create mode 100644 lorax-composer/_sources/lorax-composer.rst.txt create mode 100644 lorax-composer/_sources/lorax-composer.txt create mode 100644 lorax-composer/_sources/modules.rst.txt create mode 100644 lorax-composer/_sources/modules.txt create mode 100644 lorax-composer/_sources/pylorax.api.rst.txt create mode 100644 lorax-composer/_sources/pylorax.api.txt create mode 100644 lorax-composer/_sources/pylorax.rst.txt create mode 100644 lorax-composer/_sources/pylorax.txt create mode 100644 lorax-composer/_static/ajax-loader.gif create mode 100644 lorax-composer/_static/basic.css create mode 100644 lorax-composer/_static/classic.css create mode 100644 lorax-composer/_static/comment-bright.png create mode 100644 lorax-composer/_static/comment-close.png create mode 100644 lorax-composer/_static/comment.png create mode 100644 lorax-composer/_static/default.css create mode 100644 lorax-composer/_static/doctools.js create mode 100644 lorax-composer/_static/down-pressed.png create mode 100644 lorax-composer/_static/down.png create mode 100644 lorax-composer/_static/file.png create mode 100644 lorax-composer/_static/jquery-3.1.0.js create mode 100644 lorax-composer/_static/jquery.js create mode 100644 lorax-composer/_static/minus.png create mode 100644 lorax-composer/_static/plus.png create mode 100644 lorax-composer/_static/pygments.css create mode 100644 lorax-composer/_static/searchtools.js create mode 100644 lorax-composer/_static/sidebar.js create mode 100644 lorax-composer/_static/underscore-1.3.1.js create mode 100644 lorax-composer/_static/underscore.js create mode 100644 lorax-composer/_static/up-pressed.png create mode 100644 lorax-composer/_static/up.png create mode 100644 lorax-composer/_static/websupport.js create mode 100644 lorax-composer/genindex.html create mode 100644 lorax-composer/index.html create mode 100644 lorax-composer/intro.html create mode 100644 lorax-composer/lorax-composer.html create mode 100644 lorax-composer/modules.html create mode 100644 lorax-composer/objects.inv create mode 100644 lorax-composer/py-modindex.html create mode 100644 lorax-composer/pylorax.api.html create mode 100644 lorax-composer/pylorax.html create mode 100644 lorax-composer/search.html create mode 100644 lorax-composer/searchindex.js diff --git a/lorax-composer/.buildinfo b/lorax-composer/.buildinfo new file mode 100644 index 00000000..ee6d8d3b --- /dev/null +++ b/lorax-composer/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 972a8f4b79671d03d004b6b084c1be20 +tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/lorax-composer/.doctrees/environment.pickle b/lorax-composer/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..1d5ac8e11bc401146854bf8608bf4700d7ff49a4 GIT binary patch literal 1809047 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 z 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¨1Y2(X{Vb=Ypm=shvzUhT)?_uHPj@%JP2L>BQ6a zOl8xauL>hOgcK0YDa7HMR_&bPo<-Q@DAHz_GG!DhWar*&6GY-u6gNj&mU)Nid*+x| zcRMx%utm2Vb~}Q!!HT{ANG6{VB~##a5zfO09mRe2Pv^kY@=p+ZEBw9`DY4 zHw=cjvU_$B+Zi!&aX8ySP9;Is?7ocG5#7B=$6=tlYtEnp%jJ1*hm$rCHt(Fvu=J;? zZ!>|>bmCadU`2C|BS;&FCZ#Gj+k$8lf*oca)@|cd%l^!^Dck$Qj3Y^#*4M>%*O?d0 zEMa(ru5#~{-LX4Fq|2OxNP8f%WzAOwyHHDpCEuYu9|)%-SSd_lP1#=F73aM+Xw5r< zw8dOz&H$QBi(!EbTw>JurTZ&w_!q*Wqe$$vC-|kKadC9X!F6rC!l$*pkBqHLt#ffJ z*XnR(br{Zd5NWg2c-c_&k2F{o!Cn$@Sv$*19$L#dmb>IM4`o@KTa(T*b#4Hi(MfAO zCUra>J*MWN=hV~O9l6ywCgG;}Ax1uAeaWtwsA!0(PbS9C>7Xn($nbMmaSUm*rjdiP znK{XwM>#I1?LNy^{1frdodY2_!L*3vXu-bmh)IbKC`xz2$V{29+BEWRBeUPo$)`=! z3X6tN6tk&#At0Dl!f-gvj|;UpeYC7ocvc7Oz@#0OVAzx3 z!zjp+9$rZs5^!>qqrz5pytvGi=T9E)q|=&-48~^KXk8$WAP8G4`xdV2xI{!>x7^>? z*|dmTGr}VsM%p}7<_tpxZ(9(LA_QB4{vmQ{cXJq=weR-!hDSRN6cd`Lw^-q+krC2k zh{RD*gRn)3TmS!92a=W>Yh)PC4NCHHl)Nq^N1}-b1N0q;{%Q{g;qgvA?Qt~66PIiY zN0VDk9}x>JF+PcmHE(PuJlVlqus1e$Wj%$0 zTq|wGE_Y{7KkRL7Siu?_ho{)F&-JId3=dCr>S@RFY^}AQHm!Y*l~4^ljX<0x=JBoF znB45?4q^Q8HaWO8nw9J`D0?(y>zx5u-Disgs}FXe&vZO#Q2aDy?Y+go;}xng-+5}keHFHaB#}{0?*?Ypo1k3j#v!?Y`HKe z-YQm9&v$@nOGp_rKovGsEDPWT1kkZng!tOt=nI`{TIWzbf`sRQ3~-g*(HBvR-qz(s z?1^A&(C!IC%Pfu#zt}0Kc@LsJ`?igy^@U$Th)Rcm12S`neSN8uzMvgKG%MMcQI>A* zq92;a9mHX-yARqgciQ8JtAx&|uq}XB5P)k9oCa0iuRVdMP@*F%ywWkGZE=*&meyI7 z`m3nU{&3_)-?7`$^qtgSP!|)U-(T%;&cQEVXuV5=sAyk9TDrLN;E?*j6PygeeLVZR z0Rd94b-ZaV?pz=t`lO^L(AN=^^V0vv*q5f4j~9 zzpw4XM3>hr8|}6Z;TC9zy)v=pQDs!bBXb zzyGpX$dk^&EB`i!|LpnW4`YSQ;Y0ZFlW8FXe^~u0t4|wPy{9*F{L2Ty0uRr-1%5Iq z@R%xaXQ+9|uNMWc{@Y}#|3_y|$jBix`486dVP0#@D^+0p53dZ=E?>3EKi;(ym{6zA z9Roih6L{}t;A>p|pC;VMK1^zzNqMOA&nHMd_^r}8Z?IdMB$-=j15w-SL6NgM0ZwW6=VH~&9P>)!_rIYj?{(TA7sKCI`%w6>U*Q|7Pszh0ir@sATZ zBn9r51#kV^q-q2f_`m;c{kI|iWlsP7NCX` z*62T)+J~_{)(+gE37Oo7%L4!YeVz$?P&2_Z9#BRoB2xqu){3{kKW{@Ap$b{6+ttUvvFy*bnR8W8H3` z|EDKJ|9T#?Y4ecpe)-!}{`Y4zK1}65e?IhI*7ae2`^?V+roTV89JnJL_@V9K{ePR% zfA)as!(btY=tKDMto2_bf0)1l6L6Q~@84I@u~{d-854L-H1O(p)xScHT2%tiD+eF^ z+oYNW7XQCr-~PUWkjef1!vA@#A0~Xrgnjlpus#3tC+_}wE;H~2*nhp<|M1^t{GWa7 zsKx)k58eIyIzPn?8X0zdWj*A4#BzfJK!yE6XoU#9RcT2pHgIWRbs>ufpA%v` z@@-pn=+e~RzmQ*eIq&jFRZJl8RCe$MF^aaPfiEixd@SOk3nG4ax8S9aa>u~u2?BS7 z^D_`hDhyyE}SyLIjn+#>MV*}y%oc0Gfyx-49d!23^vulaB6!0T_`v}NItub=D| zd_8b^|ju!CAQOI0WE zE`s1Yfs2DIST|MmPOVaT(lk}zN5WbJw+s1h!&IGHrwV+hhmXbOs2ja%;QmkGbK1>1 zwd&lXTkze$Qr&~^1#DI~a>(0d+qG%iJ@|g$f{BdJou^BaQ1)jv%r5_)r}f5tY?}6KV$eja8ZzrYg@N&#N35)6wHx3SMUpq zL=Iei10x6C=oS1jkQ)cT3YaOdLpwOK!LI`;Cn*!0R;jRomdOA>HA0 zM``-cT5$M~=9n6L{>$kUA*4HEz)V3Q=TYR4gWxIkAR8Ytzq%0u`>RLb9iWi{ecgj2 zhYS@f%k zxc^e{&AA~j7$;Im@Gq5r+2G*BiZTDCXtdxYe;+L5VTC_sNduKubt47`Ha2j(6Pzp% zgF;T*zqT}R#R>c{dEo0?f|IK_f$D}2+(ZYym@q})f@(dQ*Ny!zt8dz(nV$hn87TD* zPGyOZU0P}A^SKRs2d55PkSVA{B*io#|F0hSe^3pSLTQviS(L-aD31!Lh)Sr8DyWKT zXoOGE01Z(W^-v$5peAaeHtGcE5%i*viKPvh*sH+*gI?ne-r^nJBW&RPCPCp48Bq`& zF%T265F2q27x54u36KzpkQhmj6v>brDUcdzkQV8X5t)z~S&$XkkQ2F(8+niy`H&w4 zP!J!X5DKFRilP{bqXbH#96m;QR6th*qcWOvVh%#2n1UJj_RUM8Ka;hEV=D z1yd0bk?=EqL3(6BAN0jn_!=pZ3bj!O6;TPLP#R@W7LD*JYN8hEq8=Kf37X_W z7Ge<=V+odG8J1%ORtD%1R50)cw%)<%LaxGv0{;&xj3OwCVknLhD2Y-ijWQ^Ua`+hK zQ2`ZE2~|-I)lmaAQ44iZ5B1?abwLf#5RLFD8lwrC;xjZubF@H9v_fmtPZi)3v=f8S z9v#pTozMfHqbq_j3$xJ;-O(9c@CACJ7rw+-_!_1+KR&9gm@CCa2jWD7Uyst7jO}ma2Z!{71wYbH*gcT za2uPj8Fz3O_i!HtP2(dx5+CCUp5hsv;{{&g6<*^F-r^nJ<4=S#UPMGfScF4IbV7JU zz&J~cM`SSyq9PiiBL-q37Gfg~;vyd6BLNa35t1Sqk|PCDA{A024bmbV(jx;hBMY)3 z8?qw@aw8A&A|LXj0CFN13ZXEHpeTx=I7*--N})8$pe)MaW0Xe)R753IMio>=HPl2c z)J7fDMLo2!i`$}s*bt5IDH@{*n&LAwLvtiX60|~Vv_V_6LlD}d12Q5LI-?7^A{gD! z9X;?lzCcg(!k738U!ym^!MFGheb5*E&>sUZFhGx>Z=?B>l)kpRzI_7!59*7s(F26T zE^#;ZU@!JzKl-6R24El#;V=f_d;EwYID(^?fQfjA_c(^*7>b|pGk(D-oW>MP#TlH% zIh@BbEXM*Y#3fwDD2&D!jKyI5fJvB)@HRgJu83E04c8G}xE0&59kCVS1n3boC~&g(4$csAnh$mM|Ae3M3#MQyW??qwU@jJ5A(mk| z)?h8x;dlIj^*Di(*oN)ch27YP{WySwIEB*~iQiB#b%2j>NxY0JxQc7IjvKg%TeyvT zxQ}Oeju&`|S9py#c#A&~%Gx3$3Zfz!Vj~XXA|8?>1yUmoG9wFeA{X)^AI@3Fc@zwMeM;|WK_t6JK|kb6f5D8_!v*{6xkJWASsezmBMPg!+Y$& zPK4DG4&f025fKT|5d$$13+a&o@sR)tkqC*A1WOFR6lukD$ck*pj{<0fPtg&bP#zWV zzyJ?10TWSOp$2A%Gf`WtgSx1PV+zO7Kx~K>Xo)sxi*^V?dvri&bU{j_LJxc%phwW8 z=x(wy*7lcqTHyad(=h`xF%R>RK30GXSR^jS5-i0sEXN;Mk1g1Web|pfIE*7WiW4}A zQ#g$?IE!a70zAhJ@g{EJHtygq?%_V3;3;0ZpO5sD;|7gZl7E{Gdko6phgYEzlCJ&>HO!gwE)Kt_a2#=!stV5?|qKe2eeU2Yt~G z{V@pNV<>*YuNa0xF#{CFC~-8#VLYZ_DyCsNW??qwU@jJ5A(mk|R$wL8U@cx)(MxO+ zH)9L7VjH$&ANJ!2j^Y@O;}lNg0xqJF6Yf)75wGF~ZsHE^;sGAwinH@7(wa~@ghm*I zML2{<1Vlt6Bt#-4MiQh(8l*=C?!849l?wYq1W$V*@r~3$|h#w&MT};s}o77>?r{&f@|u z;tHHMKx4M4b(&})J7fDMLpDqPl*IIKto(| zRlAJFViPpQXQ-%93GKunbVe6+MKBU;NrExrSoFZ>_yRrA3t!?Ze2sqSj{z8n!T15c zVi<;F1kzhk28Y^SR zpdlKg38pytr(zA(qL4yi47b}yV1>d;tio#Sz)tMKZj99Y8xDvEaSX??M`16{iRW<* z*U>}abChz^QW_5w9^w%m;~Ab~ik7K(C%#8$1B5|r#K8{i!~}_&Pm8L&s(i+$LSLpY2dF$5=Y5@&E0eXP7ME{T`%01t5kH*pKMaS!(~%3`DONPLVZ zc#5i~Rt>Mj*LZ`sh^!C=e~O`u5*lH!13U32Lg|a`e{m2O@sLy@87iU@YN8ez;Zvm4 zoC>Lt26LP~b8*WqzKx6unXpdbca$SePTu#S$#V3arEq$8sm`X}*tB;%OYvauA1b7)Njv5fKSlEtU=E#Pet- zHb+x@hIE;(OE<>jdZ#)HGo4;7lP;VJ(UqxOg#|X=siU z@dBJg#DoDNA!~vF+0a5uOSD33$Z)IkABn(yf312CEjVri{M)(ws(F9HL z8JeLvh8ti6uGooJF(65Rff%Xq8zNg}6pRu_qm=<#qp?$<2`VNIPzmF-jK>kD#Ze?Q zKq5>~n25@ntDwE1I-rD|QxcQ3Oh#vgE~sgewU9qffCA{D@Hu8^o{2BSp6G=yk=!&= zV2+l#I3ylMZ!Oq*btif8W!|!Nd_=c!ychcFP%uZa6 z)Fzn*Crs@m7HL_GC0L3JR&)`|#O1goUd9S>B{Cutt|(l^DseT|U@gYkP2;gn{2hN_ zJtDiBM!^PgBhs5>2HY~}ZM-nROKj4zIb>Ne3U;|l?#34u>xpezwqpl&;(?(aBBPc} z*rTu)`>-F6v^+*;Em?3#;V_QiC|+oJiDTk%l*7k(rSKZ3#M3x~vp9$IxPXhegv)qi zvA3w~q^^RjrjZTr6yD=cgmNC-ve<2e7Q-Mc!l8`C%3_8cHWN2A-$ZyV5pYMmi-=+* z+!OC3su&H?5d#kt9wMd~3y;Ld80w(>gxCsk5Et?AM9Wi*(J~e<#Ft2{B?(@Muki+N zky0TQQX>u0A|28r12Q5LLfiZ>$Sh{T7*~U_2&)hdH5F>1yjTH|5d~2Z4LP;sLT=+O|^W65@JbYHnl8BYqQc} zh8v!lD5a$|T3D&=y}kb<{u$o6r)!I<&*k)d0chhVH1TxfW`p4tgkjj#4(EGzMAa z_xMWTYxKr9xMBF4_*VQ5jSTfE`iOne5B(9_NgW4GwS0y_3g3tH*L6Iy9$ji1F|@GFL)jY3=V3ar-1;vlh5uGqbVJtd}UGNI8 zF-~DTCSW3>JIFE6O-px7Qkaa~4pbiWQ1~2wB9uKeOUrD`!CdrG{Ssf{Yb;P$h_DV+ zI4lvDVi}fW1y!?a2}8F7~`~z$0hMHuHY(mVK?F<0gh=t zj_NkB25u?gf%*Gtd#T18jD$?4(bXZ~K zD=|%BI))p51Qu9qA)XliDLSJIp5Zx`X<3dHScz3wjUoWy5ZA=(NNTZUNRAY^rEnW}a2F{RQlYCDj9Yf`?U4Pf zkOs}f<~U;WkK%#mhe)p_10IQwkx|TqC*o5)!*gU-$bziMhV00J_BOu*cGx*PF~!QK zBCnQwD2R`+OUrINawr}nzd`|Qu-HZv5(^`y9Tp33Oz16&DHO*w&DYVuG#a9WLP?ZD zX&k{(gthW;C?l3dcrgOXi65gpDxe}NA)=N@s4P}NWHAaFn_3eb5Dy}}mI#P0#z0KO zLUn~2h%3fJd?Y|sg=#qCFrGzXg(OIdWT>g77HXpok}IS@N~A(+q(KY2sU- ze7ItgSCL;VfP(l4Z4A{G?GS`Q3WZSwMbTcN1FjkBIy#D-P+P2nQkqMnt3oikp*vbQ z9b4ine2pFopW_SkL@#`aMNW&wC}+@*Q63dg5tUFGRZtbx@Rb3+#wqbMk~-y+p@+lx zIch7^K_AV1QCF;oeqw*r7kx=r&;W5D8i)R@i&~Z`KQrMp*uz?jK&>@@h*BO ze2zY1U)0r74__$s!~}67CSfwBU@F={bH3&e$3W`N}wpfC`F@I97jS&D=RaCiRc!K zfp4A4-=V%k`w8}F*^6JTXc&fL1okQH$4K!vjKXLfP&kM~IE--$;}P8fje!Z`M8p>p z;DqLrNGqnp8SyNpXr78`n2vJ_=MmYaM!^N~BKp~^{9;QiZ@pD7S*l12DT||$2*1h_!FU=8=(;fVG$0~oFLQD!vLS- znE{?-5B4Iw<_L(0NZ6;aA5jqvgB-H&5miexWcp}JTDXK)th za2^+M5wSJLL0rT`d?dgXEmv_3*Kq?kG07EsG7@V}f;$R#aS!*AR3RC9E=Ow3X>d;AJo+j0#|4MtB3_6u@d~eT1V_=)$eobhP#KWZ zkmqrUhF zQd%q(8i);%T1+8{gnte1|ex%A%jx9|JHDgS$s#>ZcvMWgx{H*W`sw>pMF6_o|g%PMN*1<^eH`EpDVU#!;^+jK|95hB8i#|@N zzG$G(5EB$8ViG2!k;12#B2L9LOvf6BVl8HgvvI*DTtrigeTM8>a-fBlme}W@>_<$^ zvCvF&b5zw_4GT0cL~Jc_&`L{dEK*pEC0L4OSdR8uI-nyup)4HtRN;;ximF)L{(94>)GAe=f}!{cKjRnN zaU$KtDb1(xtHLl0#|WHLIFFIyZ@460#wc+#nz}lFh9lxpjKNrp!+4}L@l==~PDFB~ zzzu`m#4X&$JG{p|+{YBnQ_;)e`4ZE_>6n3;n1$I`VJEJ{25iJ5Lp{a(HrU2f8LW0jWG$gYqBeFJ?eSWWpVVyO<_UM`mO}5rv}2DrUny z@jkMPIgk^%@Ic`qPMFY1!2SImd}D1avlPccQDif7_;6cP*Lh4>P$@ES!F zilP{bcq{4_zDS7)v(o&SWJRqt_a1ER7{52 zTI!%K>LH~5v{7(AZ*4kXg)vW@2-+KufejYqUXIWYwGv?ZhDD z6muar@}Rv!2jms=p`+LdozVsP6$+r6*d1S>CkiPPMlbP86cLM}qTN{uy%oMe35AmQ zR{Rcw9hM)^N9>C-TFRmvK1O*|zyK`+QBkafLE`rqj34m8VSI=O;zRt1AsC9E@T*A< zLsdgn!_Nx8;DrHR;#YAPYHF#4c@~?G1rF^(Y!SC&l;+VGgR#i%ijW7j4NwO;#ayT> z*25$5F-q7uCDGfU-ypOVg+U|DpQ16EV1gA*#3W2cWSbBLO|^W6W@wIHu0&sAhL)K~ zZ}<#oqopm{AqX=JIuj91EfP8^biy($M;QZ@#T?CZ(M_Q{YAV#iJcapKfQ49u#ptE^ zOMHc|u|#1hdW+v+g}4&Q#S~a2uErXy#X9_sK3e*sg&o@xvrK3<{?M`>8?X_(up3*j z72B{KJFpYaT*aSbkm0|_VElkKc34~N(YzP=t-JvCiTklcT#79Fo0wp+iMS))MRF}Ea8JCCcBUJINt!3)M>}i?rifE9 z4bxG=VkJ>u`~>d|@E%VTp5jltIF#x$@i|`LC0^k*W@(unGK%;fbKG^9i>_jD$YomQ zBD58SL0mB&!iwP#9ubgHArt; zhy6H!gE)l4ID(@%hT}MalQ@ObID@k|hx53E%eaE8xQ6Svft$F6+qi?fxQF|AfQNX5 z$9RILc!uYAftPrN*LZ`sc!&3hoFYIJ{3(V?8Xz>nAS}WmJR%?>A|W!OAS$9EI$|Iu zVj*J60Fe+|jDxs{hxkZ+B~TKjP#W=*2S|W2Vp){K$0&~q=!Wj7j4G&# zYN(DHsEJyrjXJ1{dZ-US5gF6~4bcdnqA{AFDLz9le2ErliB@QhHfW1>2ts>wKu2^! zArwYe1fwDzXVKl~IEXH9xCSW2aVKSy*DyCsNW?&{}VK(MqF6LoA7GNP3VKJ6q zDVAY5R$wJoVKvrZE!N?8{DJk@fQ{IM&Desi*oN)cft}ce-PnV@*oXZ%fP*-M!#IMY zIELdmfs;6cvp9$IxPXhegv+>stGI^ixPhCvh1R$RifD+A7>J2jh>bXii+G5S1W1TP zNQ@*%ieyNR6o~5T5)G-vG)RkdNRJH2h)l?gEXay%$c`MyiCoByJjjcD$d3Xjh>tMK zpN`pxZ5nY2(p*TvQB<5+Jk1}Fel*7j;j|!-WN~nw~sETT+jvAY-{4z(hd$_we&~+@7>Ggm9)s}%659Mk7%KjRpYaQR#W1XMP=3cq@i&aZ zXpF&FjKg?Lz(h>KWK6+SOv7}{z)Z}-Y|O!2%)@*vz(Op-Vl2T@EW>iFz)GybYOKLp zti$j41M9H?8?gzSk=|XB4A>@a$DejnDEnZSxEp)07yGau2XGLFa2Q8$6vuEJCvXy{ za2jWD7Uyst7jO}ma2Z!{71wYbH*gcTa2t1U7x!=<5AYC=@EA|<6wmM+FYpqt@EULM z7Vq#LeX=36)U=RZ$JqQ3Ewm3$;-Pbx{xX;U}4c z8lWK>;Zr2Gq9kZ4euidfjuvQ%R%nejXp43TLVI*TM|47GbU{}HqZ_)T2R=t~D^G!5 z;+OaeU!ym^!MFGheb5*E&>sUZ5QFeN?ilngeiVmbD1O4v_yxaW7=~j6M&dV&!f1@a zSY$M4CQJ|~ViG1}3Z`Njreg+XVism&4(4JW=3@aCVi6W&36^3RmSY80Vii_n4c6i- z_hi1tAL4p!z(#DsW^BP$Y{Pc!z)tMKZtTHc?8AN>z(M4;Bl6&gcofHQ94BxRr*Il) za2Drq9+z+#S8x^Aa2+>r6Zx&E0Pcu)aS!+L01xp9kMRUg@eI%L0x$6juki+N@ec2? z!%fgmgtp2s2#atCj|hl}NVwqf^hHD!qaiwCASPlVHsT;I;vqf~AR!W=v1v3xQZX66 z5PKq}m5&2BG>=DSF$=OH8?qw@av~QFX+DfwxQ&7eAE6KmqX>$k7>c6= zN}?1>qbjPQ96m;QR6s>kLS{x*{0e&>cPSIle$ogta@v;VbcL^u{;%7T=){ z`l28DV*mzX5WYu3cV`meM{x*-;wSu!U+^o2VK_!$B!0svjK&y@#W;+|1Wd#vOvV&U z#WYMuAy=2em?O?bDX}ybhzqd@i?IYtu?)+x0xR(fudxPeG2Boi@Q1h_8?X_Zuo+vh z72B{KJFpYGup4`@7yGau2XGKGFcW!^565sECvXxe9ne%bBc8=MoW~_xMn(rJ6RwHZ zaRWDT3%4=YP(L8E<}7%i@DPvi7*FsN&+r^C@Ddjca1n3Bw|Iy5_!FUw92#K|7U2*c z5pc?%lhcSSMnP0WLv+MIOvFNL#6eudLwqE_VC($>iNz#HieyNR6iA6wNR2c|i*&eP zfQz_-tGI{z$f_k9vLgp_A{TNa5Aq@(@}oe29zi3Ddm1@Q$kWI}Dg-VbiqU~fgT`Pi z#$h}rU?L{rcI5zfFjbs}`_%$Gz)W!#W@8TKVjfV#An1yI!bc8D%AUwXeBL*XuLTtoAT*O0sBtSx>sTv?H z5{ZeC$bnCcBw|t|Lvo}*N~A(+q(NHDH?;-GAZA1+WJVTbMK)wd4&+2G(8BpaB}95t^VWK0`A!M+>w>E3`%%v_(4vp*=dFBRZiox}Yn9(GA_v1E1pyyfyK6 z=qdKXm-q@_qc_$%cva@jK>5_#3W3{6imf5OvenOCl9L&W$%*O&O#3C%l5-i0sEXN9rH}MHr zEv~^@ti$j41M9H?8?gzSu?1VP4coB;*_=Mvv0L1Oz1WBSIDmsVgu^(3qd11+IDwNm zh0{2Lvp9$IxPXheggjQB7gxn=xQ-hrpimIE#XH#Q1lflB;sZRyBRs|vJjF9S#|ym1 z8@$CkEVW~oAyml#p%DgQ5f0%I0TB@ikr4$^@r@hqZxKU`iCBn@IEagQh>rwFh(t(? zBuI*6NRAXpiM=*@AJU2GkpUTz37L@vS&OR7Mq4MSr_)0BVReQ46(E2X#>o_3;TBpdlLJQ#3{s zG{t9VhURF2fmSpKt;IHIi*^V?dvriYbV6rzL04q*=PomX#ct@19{3zzpeK6aOMHc| z(Hr03TYQH;=!<^nj{z8nLHHhn@dJLu5Ddjn_!+<8R}8~&jKE0zhEW)eF&K++7>@~< zh)I}?DVU0BC|xB$8O#)CVK(MqF6LoA7T|J)09UY3T!h6~f`+97G{SOm1y*7eR$~p; zVjX_RA6SnK*oaNoj4jxTZP<<-*oj@(jXh{?B>4j_U@!fmmW}#6eudLwqDaLiDT}pcg`!Mrb5aNQz`g zjuc3VR7j09NQ>7_pEt-PW=0ldMK)x|2ts>wKu2^!XME=h(Feg|H*`l2e2y>B6TR>yzQWh&jc@QR zzC$1MML$fe6<`wjivutagYZ2D;|KhRpYSt&!LJyG;TVCDh~h9t#b|L1#$p`CV*(~( z5+-8`hB>{5<9nMw7}FJIU?yf^Hs)Y?xd1CLUtEBNScD%8@FSLr%P>S7ik0Fjti?L4 z#|CV~CTzwQY{fQg#}4eq9t<<+aO@Wk;2;j+Fpl6Tj^Q{?;3Q7rG|u2G&fz>R;36&| zS7BNZ$h=~YdM113>Vxx|s>LQ*P9|@2UiI5mc zkQ6a$1c-?gVoIb!YNSD0q(gdSKt^OjW@JHD?6mS-$RXxLF672#g)7J>=EqI(7CsUS zp)iV|D2idblX?eAiltB*Wl$F7@G;7x0xF^sDx(Ujq8h5B25O=fYNHP7q8{qw6Ewh5 zf7+JeQ?W6cpeZuAvS-9zE&I??p%q%A4Tib79*!WfJvyKxI-xVVpeusW4g2kg1L!XH zz~}e^J<$ta;wyZO-ss|V?25i(KlH}{48$Nz)iMo>u>{Mp0zYZ_8Nc9H>{Zx@5#mVv zhEaH^@Cf6@37CjUIBa8%V5&F`(=h|t?9S|%EzZGQ%)@*vz)=Gn!(wp>mSP!}V+B@X z6;@*n)?yug#~;XHl{v9d+=R{8g00ww?bv~x*oEELgT2^?{WySwIE2GEf}=Qw<2Zqn zIEB+VgR?k?^SFSExP;5Nf~&ZO>$ri7cFrZ-6mQ`+?%*!&;XWQ&p217;6<*^F-r^nJ<4+9yIKUu;az`mNird*G5Kat_2#APCh>R$RifD+A7>J3! zrrQtk#P~>ngh+(MNP?tDhU7?rlt_itNQ1OUhxEvRjL3w{$bziMhV00JoXCaT$b-Dd zhx{mjg7^r9P#8r}6va>+B~TKjP#R@W7Ul3U%A*1*q7o{j3aX-^o!to4#OkPlnn+P8 zKuXjR>!Kd&;}bN%YBywS@Tu4sP0$pdp&6Q^1zMsNTB8lxq8)nV5yyn1i{Phxu55g;<2eSc2tP zft6T=)mVeIScmo4fQ{IMYVJ5x$5wG0wqpmvxnhUMZgCIxVjuS70CqcR_TaF11V?cU z$8iF8-ATBIlj12LL&^qA{@da0wN+3A|nc-A{wG2 z24W%>Vj~XXA|B!+0TLn+5+ezcA{mk+1yUjvQX>u0A|28rj>8=nnZ(S^SLg zpF%D%H}W7a@*zJ8pdda%AtW$-LYy|h85C70h9<5gO;KDdfs!bN(kO$nD2IaTc9Ocp*7l|E!rUn?a{?) z+Z7$ej_8EWAysrmFuI{TdY~tI;Y)mlbarQYd?S8~@6ZQ*(GUGG00S`y-(xU-z>m0E zIlwgx5r^U@{ET1lD~4e>Mqngva@jK>5_#3W3{6imf5OvenOCkJj}-e zEW{!##u6;WGAzdmti&p;#u}`}I;?cFv(TK#v8oFJH&9q9TT(N)X%|tg+CF>l|3}V zAS}WmJVIG4G$M(S5d~2Z4bjolF6o6>Vr;}gT*O0sBtSwWLSiIAQY1riq(Dl1ZP4CG zC#FXRWJD%pMiyj6He^Q*{62D;-Mq>=7x=K#NL~#-( zV@gOB(=Z(~FcY&d8*@<4sZt;F#RXW1MfgOa0hWr(FxSKSc~~i~!fLF+TCBtG_yg;) z0UNOio3RC3u?@vNP%MF+;x6pQ9_+_P-FA|fF&q97_N_+woW(ZuM8ftZ+T1E(Q_ zo7{|urw|`q&=rZ07)g*6$&eh=4KM>K#FR*d)JTK0_}cKj(bvxIhYSiCkqMa*jBdz= z?8t$f$c5aA{i+xz_#8`u$#GmmC ze#I~h#|VtXZy1Hq7=y7Ghw+$ziI{}qZXilvsyGePF#|I(3$rl?b1@I|u>cFP2&D~G z21~_dSdJA~iB(vQHCS9ez!Ll}{(<$_fQ{IMt#-sVY!$a*J9c0vc43I2hGMt42gTi# zmB4=S0IHZ|RU8(N;3$saI8NXsPT@4p;4IGJJTBlOF5xn+;3}@+I&R=5ZlQ*i*Th}% z9tyj%6~ROC5gy|Sp5hsv;{{&g6<*^F-s4Y%vLiwx48o$0Rn|oWF(M)%GNK?Vq9HnB zASPlVHsT;I;vqf~AR!VVF_IuDk|8+`I*f;qN=%J3NQ-nxj||9&4sM7$B8!+6*^vGJ zkaUkxkYkGiMrYc#ZQGo-ZQHhO+qP}nwr$&fz3=<8SATs{so*53s@rQW(jYC;Aw3rQ zh_MJ6WJY8{W@JHDWJ7l3Ku+XBZv2Nl$cuc)j{+F&Mll8jWg!$s5ybGZJSK|DVknLh zD2Y-ijWQ^Uawv}q=xC=qp`xsW%BX^>sD|pOftsj=w;ty2P*>JNeKbHrG(uxEK~pqC zbF@H9v_fmNL0hy#dvriYbV6rzL05D`cl1C{^g?g+L0|Mke+3$rl?b1@I|u>cFP2#c`< zOR)^gu>vcx3ahaOOI?V|uwHJ!Mr^`nY{6D+!*=YzPVB;N?7?2_!+spVK^($i9Klf> z!*QIzX`I1XoWprsz(ribWn95kTtfnvT0&fxH*gcTa2t1U7x!=<5AYC=@EA|<6wmM+ zFYpqt@EULM7Vi+rPtK9?QGUW_e8E?I!*~2ZGz&+^dnf(_{_&Xj7Xc6ufe;u$5EQ`> z93c=Ap%5Bj5EkJO9uW``kq{YA@eENA710nKF%T265F2q27x54u36KzpkQhmj6e*Ar zsgN3JkQV8X9vP4knUEP-kQLdG9TQzblaNd1MqcDYK@>t^6hToGLvfTqNt8lqltEdP zLwQs{MN~p%R6$i#Lv_?ZP1Hhd)InX;Lwz(rLo`BTG(ixz*Pv)Bo1r;cpe0(NHQJyp z+MzupqpieVUz5t!_! zg((;<#~_@4_z@oCOvN-z#|+HGEX>9ne7E`^_~{b=g@pzdA%veLLSm_0 zhUHj+LScmo4fQ{IM&Desi*oNL#&<8u^F6_o0?8QFp#{pb*0OQlvrrD7U8skGdPQLIFAdsh)cMPE4YelxQ-jB=r&Rb3%&Uw+%<3yi{%nLl#lQj zPq5i$Y{7H+0x$6juki+N@ec3t0Uz-RpYa7>@ePUm7?Bu1 zjEq1sFoGZ`f+092d)X9(lA#d>VG$1D5djeq36T*6QIW%`$cb1oHp2Ou9v*RIT*O0s zBtSwWLSoeQQ$;-_lgW_+DY4kV670qvq%)8n8ITc~kQrH!71@v-Igk^%kQ)JPWI*JV z`H&w4P!NSs7)4MN#ZVk2P!gpu)#GUzO3N}Ri*hKB3aE%msEjHo?I4!HW7F&jo|;n6 zP}3r{P#bkn9}UnDjnEiP&=k$k94*iitGd_j3F3`Vfg4~{s|-HD2&D!jKw&N#{^8q6imf5Oven& z#4OCl9E^1{8i%=Z9;W+YVFnh;MOcg_Sc+v>julvmRalKRsPE)8z*@Nu>#+e>t^OJ| z%PrW7ZP<<-*oj@(jXl_leJJYTPz(pMyKy4RJ9aOY~mGIFbpYR!9 z@D<Er{DXg-ihmIR0TBp+5d=XIz@-)t!DMiRKuCl_XoNvnghO~lKt#Ov z<{uD6M#WG03o&FoO5cjI}1-`@NW;u(mK1W1TPNQ@*%ieyNR;~oSjP}>2kgER)x zA|28r12Q5LG9wGJA{(+JhC>$kLS=JvyKxI-xVVpewqeJ9;3$(^CMwWgqlKKlH}{48$M|#t;m}Fbu~CjKnC6#u$vn zIE=>xOvEHi#uQA&G)%_~%)~6r#vIJWJj}-eEW{!##u6;WGAzdmti&p;#X79V25iJ8 zY{nLB#}4eoF5L7WxP`rPANJz_4&o3F;|Px87>?rvPT~|!;|$K?9M0ncF5(g{;|i|g z8m{98ZsHbh;|}iP9`54-9^w%m;|ZSP8J^<>Ug8yA;|)TYgrV_Xe!xe3!e@NJSA0W% zm;C_zl)vyBfAEik_%8w=AOayUO1trt`QQCd21f{lL@0zt7=%SQghvEKL?lE;6huWd zL`Mw7L@dNc9K=OD#76=oL?R?c5+p@3Bu5IQL@K04I;2MiWJD%pMiyj6He^Q*>EXoyB=j3#J`W@wHUXpJ^#i*{&_4v6Q$93P!!7j#88bVm>LL@)G4 zAM`~(^v3`U#2^gD5DdjI495tJ#3+o$7>va@jK>5_#3W3{6imf5OvenOCl9L&W$ z%*O&O#3IaeG0nnKxeUv(0xPi!tFZ=au@3980UNOio3RC3u?^d?13R$`yRip*u@C!k z00(ghhj9c)aSX?C0w-|_r*Q^naSrEk0T*!zmvIGGaShjT18q&ccDOC?ptLUoWpG#C zLk5>YM(nrn0X#PF1W)k{bA73qhp|>L4lfP7!fU+2TfD=2e86QdyMoX13%=qTzT*de z;un774~F~DF#-X6MGpAC@5u;^AP9ZDLLMV(PD2iezjuI$|QYedZ_-zG$P*GMwWmG{`R6}*t zKuy#_ZPY=2KVuX?ec1pF(Fl#v1WnNl&Cvos{SR)x&|0=ZTeQP=r*Q{5%1-EvF6fGG z*lCen=qY=lH~OG2`eCF+Mq!{Fguxhsp%{kY7=e)(g{~%HH;k3z(A1A1%`j0;!emUr zR7}Hk%)m^{!fedJXP4g>%$4)7)}^}+^W_38#3C%l5-i0sEXNA0#44=D8mz@Stj7jy z#3pRU7F73zs0Oyn9oUIo*o{5di+$LS12~97IE*7WieoryrRQ)`p2BII!FgOjb%(eH z4&w;Y_(3BrUYja!aMQxKa2t1U7xz%p!nIHr_3+rh6FkK;JjV;X#4EhU8!Yv*Wq2ze5n0eNY5LaD+feghFWKvT$zf z#Xf{H5FQZ_5s?rXM_ru95KTr$48%k%#6}#%MLfj+-=Ewb;v$q8N&! z1kPIc9I88rHSk=%KzWN)Kp;ON1V&|91yxZE)lmaAQ46(E2X#>o_0a$g(Fl#v1WnNl z&Cvoa(F(2625r#}?a=`p(FvW=1>MmDJ<$uj(Fc9e5B)I!12G7LF$6;~48t)3XHDgE z7%j&jo||fXjFsas9uv^nm+vl^ET>>9reQi}U?yf^F6LoA7T~rO+(Az_#$G7u@+*er z7FmInScTPCgSA+P_1J)o*o4j4g00ww?bv~x*oEELgT2^?{WySwIE2GEf}=Qw<2Zqn zIEB+VgR?k?^SFSExP;5Ng6p_}+qi?fxQF|AfQNX5r#@~y!&CVT&+!5;@d~f;25<2W z@9_a2@d=;t1z+(E-|+)K@eBVrDgPn>0^+j?@&!R;P<)l&5JHB;TVI>sA&d-*a0rhG zh=@ptj3|hTXo!yecKX0y{{D-&SpFh5;vg=Hd(#q#C*val5+V^2BMFis8ImIfQX&;n zBMs6b9n#~zkG&6&NoGbCWJL%UQAp&FIgtyw@gMRaFY+Nj3ZNhgp)iV|I7*--N@1qQ z%`B9apB4#81*499T-Cvgg=aRz5`4(D+J7jX%f zaRpa#4cBo4H*pKMaR+yC5BKo^0em%J;^VD+hxhn^kNAYo z_=2zahVS@+pZJB}_=A5OoPQAj0TBp+5d=XI48aisArT6p5e8uq4&f025fKTI5d~2Z z4bc$`u@MJx5fAZ^011%@iID_JkqpVP-UsvzNF`Gv4bmbV(jx;hA`>zr3$h{`vLgp_ zVznFX8vG~oATRPEKMJ5A3ZXEHpeTx=I7*--N+FyN0^w0smP2_|Kt)tSWmG{`RKs8| z8-kj$7HXpo>Y^U%qX8PC5gMZjnxYw+qXk-`6{x}qDpqX&AT z7kZ-)`l28DV*mzX5QbtHhGPWE`f;NiM$0jHjW^ipk-H7UEiwYpJVm2pszs(@I%Z(A z%Wn&2%Q={fd6n zdWPEu?%=!pf&20S9^w(g_!<`$PvtW_#|yl~D6v0P}e8NZrqwrOJ z!*~3^YLj6Ne#<}j$LanTTfJ->0?EJ#f}jY7;0S?`2!+syVj~XXV!D;iKmwT%iI5mckQB*~94U|zsgN3JkQV8X9vP4knUEP-kQLdG z9XXH_xsV(GArJB*AM&FB3Zf7SqX>$k7>c6=N}?3@n?46nR+d9~R6uXL-v^at6;wqv zR7VZeL@m@t9n?j=|NWh*QU?uXBQ!=6G(|HsM+>w>E3`%%G_-<7XfHe9rXN*qp|kAr zzvVm}8X=5FbXasZ&;to%LiCn>&=>vC9|JHDgD@CFFciZu93wCiqc9p{Fc#xb-VXp3 zFi}pzWK6+SOv6JP^awNMEX>9n%*8x}v#Rh&cw5n0qZeRy?Vi$H}5B6do>blj}!+tM2fWrok;3$saI8NXs zPT@4pAdVkP;^Mr#fQz_<%eaE;xPjZagS)tg_jcg}9?C~}j3*fAKn%ij`2sKT3a{}7 zZ}ASlZO|Wll%Mb!U+@**@Et$!6Tk2qfAEhD`WFEZ5P=XFK@b$d5FA5oMip%DgQ zG1k|Safl!zA`&7a3Zfz!q9X=k;-;6~LL3^g&bT?^wV5*#k>6n4VZdyw)Th75;%)@*vz(Op-Vl2T@EW>iFz)Gw_UWYCp z*2;BQj}6#}P1uYr*otjvZ*x0frw<~#u-m{M?8QFp#{nF~AsogL9K|u5#3`J{8JxvA zoW})R#3fwD6{R1A|yr zWXDM#dQTyj%#DLMg#0Lgf+&Rd7XE;uvKWe^1WKY5N}~+=q94kl9Ll2tDxwl9qYA2` z8mglPYN8hEdr&n%U0Lsce}@KWYoHxY%2Q~HW@wHUXo*&6jW%eH4(NzZ=!`C?>C0Iy zoR(+M8+~xqTVBIW+`>~l!)!m*%|Qs$F(ih2*$9lpD2&D!jKw&N#{^8oB$Ty+a+oTo zp{A^b)@Xy}23BA$=3zb-U?CP^F_vH{mSH7UVKvs^xRsv3dbt5_RptBF)UH;OkdBo8E4^>iD@c+vl z`R|{bM?q9XLv+MIOvFNL#6by^L|nu}Gc-p+Btl{&K@HSIa-={?q(U`RM_QyqMr1;I zWI$3RLuO<_R%AnVzrJjjcD$d3Xjh(aigA}EStD2_^~j8Z6#GAN63D31!L zh$^Ux)JTI?XpLH^jXJ1{dZ>>^XpAOkiug!?7HEkEX!w^-&AY^RI#d1cbawmu=jPq9 z1WPdjBhd@JF#|Kv5B)I!12G7LF$=RX48zd_JuwQSF$QBX4&yNa6EO*sF$GgG4b#yF zeK7<>F$Z(801L4Qi?IVcu?)+x0xPi!tFZ=au@38T4cD;=o3RC3u?^d?3%jugd$AAu zaR3K#2#0Y5M{x|taRMiC3a4=fXK@8raSrEk0T*!zmoX3Xu>l)#12_NDsd?wW|3a%* z`_%uN0A2lSt#0U!9_Wc)=#4(;i+<>j0T_ru7>pqpj|mu#5g3V47>zL)i*Xo=VSnk= zyv^VF*{gk;|7}=16Sh4%pd&h=GkTyW#$h}LU?4_dB*tJYdZ9NaU?L`AGNxcEW?&{} zVK%y;E4raO24OIUU?@gmH2R<~hG97Rp+BZ!`d>OVZh=G`hh1iILxQK^@NQA^lf}}`>6bB~c2cQ3hpE z4&_k+6;TP5(FvVV1yxZE)lmaAQ2+%|2X#>o_0a$g(Fl#v1WnNl&Cvoa(F(2625k}C zjVuJl$?@obj#!4}=z^~3hVF=u1n7gl=!gCofPol419@68inlpKvQ7>ik$ zjj$F8hY4~bCSfwZ;X9^bI%Z%dF5xm#BMs(ZJ{Djh7GW`#U@2B%HP&D))?qz1U?cWm zFScMSwqZMVU?+BAH#T82_F+E`;2;j+Fpl6Tj^Q{?;3Q7rG|u2G&fz>R;38r>ba8M+ zUd1(B#|_*>FZ9M8+{HcI#{)dXBRs|vJjF9S|KH!aaGv6oe2q`?Gv3Mf_<)c98^vdQ z!B_miPvpjb_=A7!$G-@GfCz-Z2!fyphECqHGqQVa4um!k1}o%BgqINz5s?rXQ4kf; z5FIfP6S0ui3eq92jE6Jc^6XzaHBb1rd$mvZ|KB2vbw^SpLl5*sa-={7R74;2ML+aM zE!4&U48$M|Mrx$N5DZ0Hq(ddSpOGWI|?S!3d1RD2&D!jKu^@L{?-&E3`&- z^F?fXpaVHh(>6PE!c`CXo_ZNjx|_|7HEkwD2pA~iCx%@d6Sg&$eMFRz5E)Sr z9|@2UiI5b@kQ^zH7U_@?nUEFPkR3UY8~-5>@**GdqW}t`2#TT@ilYW0xsebF5?QW z;u@~w4({Rs9^wg};u)Uf9p2*;KH~>|;t&2w^_PGMgun=b&ljwAM`~(^v3`U#5jz{1Wd#vOvV&UMMj4+6K2Sn zn1$JxgSnW8`B;OsScmo4fQ{IM&Desi*nyqch27YLy*Pk_IE2GEgR{tK({kaGyo@`z ziwAg!CwPiyc#ao%iC1`ycX*F4_=<1%jvx4me^dV@00JTq0wV~5A{c@r1VSPd!XpAA zBMM?77Gfg~k|PCDA{Eji9nvEMG9nYQA{(+J2Xf;-^hxuVzQ`x@qW}t`2#TT%%Ayh~ zqYA2`25O=fYNHP7q6wO!13ID;I->`Aq8ECj5Bg#d24fh8V+2NG6h>nV#$p`CV-DtG z9_C{K7Ge<=V-40~9oAzLHe(C6VjH$&7j|P0_TmVR;uwzO6i(v|&f)?t;u0?73a;WB zuHzo=;}IU?8J^=6UgI6!;{!h83%=q9e&SyzIRFA85JDmpLL&^qA{@da0-_=sq9X=k zA{JsJ4iX{}k|G(BBLz|-6;dM&(jpx)BMY)38w#N?il8V;pd?D6H0F7<%||&|9u-g# zl~5TC&=Aeg9G%b^WzzqpEc(g*7=*zXf}t3O;b`N*+!iC`NQ}W)jKg?L!*sN9TWX70 zayI5+J{Djhw%D1iSR$8V8J1%OR$>j-Vgoi}6E z9M0nsF5?QW;u@~w25#aG?&2Qq;{hJx9p2*;KI03%;s<`>l-)m#Kk}cne>o%1BDf5J z&#!c1uo+`~4jYSYayxclCw5^s_FymeVLuMwAP(U$j^Q}Y;4CiSA}--FuHiav z;3n?iE*{_^p5Q57;3a6PCTNOgXpUBBjTx?wndl@tqX&AT7kZ-)`eFbE zBDk+^AuvP^#VCx%7>va@jK>sAMGr@^C+5hxn1}gTfQ49x_1J)o*n+Ltft}cg{V0UO zxQ6Svgv+>st2l$RxP!ZRgvWS-r+9<6c!&4+h2Qvtf86;4A`k*22!bLQLLwA;IkmkJ zR)#}(L_kDDLR3UUbi_bLWI|?SK~`i#cH}^A{D)#Fju)oNODxLxm&GV&pgby}GOD3E zYM>?>p)p#ZCEB1ZGMWOJ&`EYi7j(rVJjMra{t-Q7PxL}>^h19P!e9)+P>jN8Jn}{7 zF{a3=n1}gTfQ49srC5gLScTQdZFB#_2DuSiuob(o8+))9`>-Dea1cju6sK?+=Wreu za1qyV9k*~BcW@W?a38@D0w3@Z-|!v3@Ed>dk7E!Jfe;qq5FQZ_8*z{jiI5b@kP@ko z9vP4sS&$XkkQ2F(2YHbX`B4A`Q3OR%48>6bB~cC4Q3Ey601Yw5N1?H3Bpag%nxX|- zq7_=B9onN4I-?7^q6d1S7kXm^MxvS%UmfG*cuc@VOu}T$!fedJTr9y-EW>iFz)Gyb zYOKS0Y`{ir!*=YzPVB*6?8AN>!eJc2QH;s{m$5h|kK+_h;|$K?0xsebF5?dF;vVi} zl{?pJJdscF4A1cfZ}ATA@d=-?!PkO~NNOe~!!HBB@vmD;08DX0ry`^bg|G;R@Q8qj zh=j<9g6N2Wn23egh=asPg49TZ^vHmW$b`(ug6znF-1rZ9kQW6|5QR_}MNkwaP!eTO z7L`yLHBb|EP#4Y694*iiozNLw&=uX#9X-$!z0ey2Fc8Bq9AhvRlQ0?6FdcI+7xOS5 z3$PGNuoTO%94oLAtFRhFTpB~MNAATw?8gBd#33BUF&xJUoWv=d#yOnF1zf}xT*VFC z#4X&$9o)qeJjDyV#5=slCwxZWOn(W2h=_#9h=OT$W;$ZZScr>wNQ@*%juc3VR7j09 zNRJH2h)l?gENJ2~Xo?1Y)M<#^2L3}HjWjj|rHFDVU0Bn2s5kiCLJ9 zIhc!in2!}$iB(vQby$xL*oZB5e=D}gt=NX`*nyqcgT2^?{WySwIDwP6gv+>stGI^i zxP{xehxJuh9AZ^`5k}okM#vaAOuA)1V;#jL@0zs zID|(8L_{P+MifLx48%k%#6}z>MiL}P3Zz6Tq(&N~M+Rg>CS*l6j57(xBe(ny1yB$J zFc3vh6qQgJ)leO^P#cZV7_HD6?a&@Q&=ajZc3PvK?2ii`F&8mN4#qGH#~6&oIE=?6 zOvWtCMj2m&%3_gRj3ro#675Eao76R{8*aS#{rkPwNG7)g*6$&ef=kQ!;w&4lZY4(N!i2C^YL zav&#iVU0!BqJS)j5-5oR1`48rtcY!H+}lx0*2V^pn2l&6o8lebjKD~Y!f1@aSWLh~ zOu}SL!*tBTY@|gx%)@*v!BQ;4a#ZlcLPe~StFaF25!e@#AlM;yVi$H}5B6do_TvB! z;s}o71Ww`{&f^Ad;udb>4({R}?&Arb;tk&79p2*uKH>|$;v2r>2Y%uY{_&)XX=h>~ zs0@a%2#2VMhM0(jxQK_uNP?tDhU7?rlt_il$b#JX5BZQEMNkwaP!gq38s$(PHBb|c z&=^h76fMvaReTw(icYdKx}Yn%p*wn@Cwieb24EltVK9baI7VP3;`-na4kJo z5uMN(z0ezd&=&(R5Q8un9UR1t7$?VL0w!V_reg+XVism&9_C{K7Ge<=V;PoX1y*7c zHe(C6VjH$&5BA~!4&o3F;|Px87>?r{&f|x9@Dq3BUEITcJi=py_K*vMSMoL9;4MDj zBTl%4PT~&k;tk%SgO95nu>?!e&rPd89$4fd9^o;b;3=NrIlg(>cdT&&*5Z?a&q(Q! zpXx7v|D$|OY*JGM^(Y924nA;oL`WG53%q6_!pjIaCXXYkjE3llftZMe*ocF;h=(pV zt}7DDBuI%=NR2c|j||9+EQspDkA`3PjdC`(Jf=8MQ&GmkWl;|0F~V(YBr3_usD|pO zgSu#dhPdVH#ci~btB@>n&OpwjW>9UQ3giim;8-GCh1{3aS)#(xJ5!>i&MK5 zb?jhW#552K@sR)tkqC*A1j&&CYrJeNQp+^Rj4a5CY$)N)OQM)8j#4O%GAN63D32pH z?I>!r6Zdc*wM>E9cq8B913uytKI4>0a~iKK{2IaCrb8gKn?e|bML5JZ5C;)uBxIL4 z5M9Q=5trXlv@_5iqc9rrEs_8UkqC*A1WAz$$1Hpt>)amJBeQ`lD1^euX&@Jh$>J!1 zk|>4JD2MVGX5rzeCaYtToQ!(1J{qAhTA(G`pe@>=J-VPPx}iIIIc2@kPxi+E3`A~k z^dH7K0pl^jz(h>KWK6+SOv7}{z)Z}-Yy@>egJFqWie*@i693c=9kq{YC zu)(3*h`2HyikNUkkys`{AK4cZFcIkuWI#q_!W9EokzM9MPUJ#v{D(Zqi+sqB0w{=Y zZeQQ=#HKw(2?wVns#v5ds-Ze+peE{}KANB@TA(Fbp*7l|Euy*&M?*W=9v#pTk8H+c zbd%jN00Ys=jj=UG$St$60Oi0ZO|5-&>10Z zZYcDUy)gg-F$jY(24gV}<1xW$oQO{*&1Xz8FcmW}6Z0@13$PINOrQGbIieLzdP^ji*)e&AsKtx1B zPWRnh2=C-YKwQK_Y>UJ}QY1riq(EAvLwaPu5VxSA$RqP2AM&FJilP{bqYTQT9Ll2t zDxwl9ql*dB71d;Q)Id$#^0E6irpf7OVyBxTr$=fov@p;T?a&_UtaLrP$gbGuB=1K* z*&l;27{f3eBQO#ZFcFh588a{wi?A3=uoTO%94oLAv0dVEut{#l8&lvdI=NAF#x4W9 zu?Kr`00)s9|KSLZ;uKEf0xseNPU4Eo;3{s(+jxfOxQF{_;vhD~3;7bS@EWxo#M<~E zKjI6%;v2r>2YzCVw;YRq5dfEP867Or5j(7OCqf$tgUE=2n23egh=aI@hxkZX>vMdVK(MqF2Y)UIINH>u@398 z37fGE+pz;XaR`U8&gHTmXXIJjllQU6q*;t-2A<;uUg8yA;|<5v^ckQ@J@5DMduo%zQsDJ4sz49cPcDxwl9qYA2`7HXp&>Z2K&qYc`k13ID`y5oi$ z<4p{Z12G7LF$}|T00%J&qcO|DnT=9TUTMrQFcTZ(Ml6sEu?UMX#QqLNMr6V!1Dml0 zThYouYji?q3~|F7iW3$&iE}uQUl#d|EAlFC;3ld$W!3ROK14Hzy*XaV*O+0$XX1nW zh##ijPyCQS@dy7n1_2QWCA_R8g3A!-;Re+c@nr%eL?VnZ2}dHSOokga@+MNsR7i_- zNN)F2Agj!VoXCX=cBUfo$^7VM;qKUgjW~tVs9=$bsDi2p?e-c5wPbBHKtnV_W2~`} zYtcrwMLV=dAM`~(^v56!#t;m}2#mxij7Crd!#Iq`1Wd#Xr(!0i$f=0vd_=+$H?5_} zC^KOirem9hw__J}qn=%;kEk*lF5xncS=DjellSoe5Ah7o@dj`40Uz-NU-1J!@e9B4 z2me^}zX*VU2!x;rhTsT+kO+mWZd%z8RYpT}#K0s>MtmedLL@?3q(e^R!Y`BIH%gd} zB~bwtQOF{N@yWFKj8d{RDxe~&pem}NI%=RMCb{WPMm<>{jnEiP&=h$rk{4}cTeL%a zbU;URLT8+C@=hW((qNE*!5D&}DC2;YMS9aG17^sXSYVNbIAR4yu|}>%L>UQ(Q~(IEVANfQ$HK1)p(4-ozc;#UngM6<-jl{_k6Ye2owIh#NNiCVt4D2=1hW zz`sse05tGM4Uy77Dugx=22l|WAKaimBCd>w_(*_+NQ7B#ZnLohD{%xz@xW$0#25J$ znY}Cv@*zJ;m}VtWN|r_$ltmR(MPMf-2ir!Jdt;N_j2+mCeb|o! zIEbuHUN#()$8pAe<18-7i@1c#xPhCvgS)tg`*?tdsOC{w9j~nFHC`BaiC1`yH+YK= z_=r#VjDKCG0sePQn_Tq~-;Fi_?l@p~5z-=|5D}3O9Wl_wW^_eLnF?u<4rN>hW%0?X zJ|mxj{5a+^IF3THFp8ikN})8$pe)LvJSw3ws-P;y*zmEaA#0)z>Y@P}q7fQnmxXtu zg=~q~rgt2)lkIWAiNA zMpLmsF2o`%{@5fKT)?80!=k#&&}iI5b@ zkQ^zH5~+|HX)p(KkscXv3a4=eSCJ3-Q2+%|1VvHFrCS--oY3p|V)wrytQ`!81{Q9J z2Nr&aR293DY2w>)7Qj zccUKa!kVb+7{v+j2#@g$&rtyt@dj`44)3wf3f5zpO; zP#tNJ4(X8r8IcJaO#Y3?Dzo8)Jc;n`=n+uLKxw3x8Bk7^$2ZgLJH9z!-_gb*ZBff2 zwNVfCF~Yz|G?UG7LY~AKoJAW0ZPCr-?~Z@%Y5;UI&>byoZcFr&{gKlmxiCZy#R!bV zD2&E4JjW3?vZI(I=VA$#Vii_nh6yqgJLFF6!+sR=P548i@1c#xPhB! z<7I78NmfP;C$uIW$cN~Go>*k+EyfG^5}|Ec7`&73|I(>>tziCBUl}U+52)Aq`{(9$ zQ4jUe01eRyjnM>6(G1Pe0xi)BtiA~7>Q9BjWHODaTt#Yn21T3j47Ck8JLM#n2kA@ zi!t7EEEdRx7$?VLiCl_hSdJA~iB(vQHCT&vSdR_Zh)vjxE!c`}*p408iCx%@J=lwV z*pCA^h(kDxBRGl^IEhm@jjW;mk_~6%S)9XpT*75s!Bt$tb=<&B+`(Pk!+ku!Lp;J` zJi${u!*jgAOT5BsY%*y!MKYAINJ*rWsgN3JkQV8X9vP4knUEP-kQLdG9XXH_xlqjnsgB(8KjcAPcFP z2#c`vcx3agRFuI9xWxfbiN9viR`o3I&MuoXM76T7e*d$1RMTugm&Kpw;) z9L6ym#|fOo8JxwxHYfnTSix6ZFmMr=<6xaXge|zt}JA%rBu-FTVii(PeD4?RKxUdVXz%FhPiJD@Hsirs6 zn~5nVF;!Dc?>#0l#T3&`Of{OSzxV4**;$Io_ul*XJ?GDq5;!3lhQkOL38P>%bSB|lpd-OfFb>AU1W192FbPs&GQ@HM216RbX)qmT zKswBXSuh(iU=C!$T*!iXkPY);0pvg~c78HEK=46$2p)!=unQi6 zN8vGe9CpJK@FYA1Ps20tEIbF#!wc{tyaX@9EAT432Cu^#@Fu(kZ^IsV2i}GEU@yE6 zAHaw35$uDH;S=~2K7;-6IeYlKKN9Y8dp$l|{ZZMrnW(LG_ zk`v$<3mWlTZ~oQ?`a(bG4+CHzXfOz3U>2Lrh9LxpLL4|C9ugp(Rc69!E{FgmvtT%k zfRS($+zfw^FMq-~g5zNVq`*X&1gS6?rodE4gK01wWr7}h{Ftc4ml0oK8K*Z?QONpLcp0vq8}I8FVHQ*jz>B6ud81!u!K za4wt&o8f%804{`!;9|H0E``hBa<~GTLkqYHu7+#iTDT6bha2EV7zLx@7T5~6!fmh( zZihSIPPhxU!`*NX+zUJ4KDZw~hcDo3_y%^uE_ehUg~#A=*bPs>lkgNg4bQ-{@Ekl3 zFTg?y$Rc=|;4APdyauns8}K&lfp_3tcn|i%`|tsL2p_>d_!vHcPvJAz5Bn%mAH$af zzk**09)fQP9)LIDEjS22z>n|~{0zUquW$%{gTrtHeuqEcPxuS|hJWBF?4(fdg2rS- z6KD#}pgFXFme2~`CXsufEx~rs9y&lr=mcXZtYe`o!EVqUdO%O;1-+pU^o4%V9|pic z&|nb6Kr9S~Autr;zya})0K*^=lE4YcFdRm}NEij9VGN9gSILssU;@Dum~6(++J zm)GFT2Ppb%Dq z3yPo^+~9!{D1|cc!YU|-3aA7h_@N3`LjZyhf-IN^)vy+7-~?C)>tO?&D1=u%l)_-; zC^cBQQ~thc7d!%w!ftp1o`)CUMR*Bbh1cM9cmp1T$Kh?*1Mk4Qun#_l&tN}%317jl za0q^b!|)gU4INX3PSAX!&;nXQD`*XEpgZ({zR(Z)!vGirF%S!bAr2f64+$^~5+NCe z!w47&6CedrVKSt{Ovr#akO^}k8|K3T$bnqQgT;^!OJFH1hZW$0BJjd0@Iw^@Aq2m| zA*g{9U;~^8r^6Yr3C@JG;A}V_E`ZD73b+!szzuLCY=hh3Zny{jg1_Mbcn}_fhhaB7 z0nfs7@FKhfufl8aI=lfN!bh+VK88==Q}`UdfG^=I_!_=}Z{YwOgdgB%_yxkS27ZIX za0Gsbj+2B=aExFh{?-(lK}%=_t)UIHhYrvgxRDx||q$bdPJ33DL}=0P^hhg`^mC9o9Ap#mzw2VqzP)vy-U!Ft#L zC&Ec^GMoY%;dD3y&Vh5`JlG89!v%05Tm;W@i9ZL|5WE()!R_z>JP12s7wm>7;AwaU z-iHt1Wq1W%hd1C&cnjW!J@6rX1pDA)_yj(MFX1aV2tUBj@C*C{N8uPWqHbyoO`s_> zgXYizT0$#m4Q-%3bbw%$W zr^6Yr3C@Od;9NKlHpBUF0bB@|z@=~*Tn<~{D!3M|gB#%{xEXGN+u;tl2kwOj;URb& zcEc0!Bs>LA!*lRFyZ|r4OYkzh0dK-v@HP}vOx*Ah!F})zd!l*g;#6M~<@ zlLViF&k243U&A->EgXRF;Cna-KfsUh6Z{Onz!CTz{(wK>A2N2YcZ&*bg_s&F~$354RHiZSV)dKjB{3 z0e7)rJG@EoEoe@#1+;~BaEN652LG_iQE1G9CeRhSL4Ozkao_+yRKXA!3d0}~lE4XL zU@VM-@h|~WU?NO{K_nvv(g;q2=`aIk!EErciXRFHE`#N;0t#UzxS$B$W##w4L$Cx& zp$xpR3a*3eVKoFG2qCC}6JQgZ31`9CP)XML;3PO1E@#0Na1~q)H^7Z>6Wk1+lC;m@ zZi4r~y|4rBgZrTk1+y(YMDStQ%VzJxBLp9X$KY{z5}tyKSmk1Pk>E>k1b&BC;WZe- zDnsEtf_tGe2h#ALtJQppaEoLM*|-@B{n^zY*zSc%D^WfRQX11!G|xOoCLH3{zkR zq{B>@1+yUo=0X;nO7y3}e1Z!g2XY|~7Q(Zv@*Lz7TmtV9d>57xTn;Os5ZvH_GVsDG zD2EEDgoj}#OoQnVf-tOsYB(8AffL~**a)Y>nQ#^iBtaTn441$aEVvSq$V4YxP4F7H z9&UhjELaa)3Em2~!8SOD1?R$@1n+|Fa5wzOf}daq!TaESf*-(@Bx4Ia%7VvW0l^$t z2#eqq7Q70t!RxRG-ho~42z&q^!pHCld`koe;0uCZ!dLJ$bcY_`gk(4jN8oq(1O9}+ z;3yn}7F@b5;ctTfKs$o%p#yY;X3$&+uj(dl2#i)E8$I~BC*;9G=mULW01SkwkOnaj z3nfqrLm>_v5DzP$5E5V*BtjB6AsL3l2p9>YU^I+@u`mwC!vsiyi7*LLVKPjCIgkm{ zU^>izbeIXVU@l}qFX#=kAp_~Uvd5^CJ!pvh90Q-pudDXM=kNu5 z317k2@D21HEcAhc1b=`Z;V1YReo?>0@EiO_@Gu;K-{BAV6NV7gQ22}B-|!C{g~mkC z1e!uKXbvr)CA5Op&<5H$ALN|!x@Ey>TU@zzmeV{M&gZ?l827(5I zAO>P#FbsjA5C;y3hXfb~iI4V#oz`Hlt3wzffrUmIaEL;_+T{zU~!y~4`G69paxEWb+8^bz=?1YoD8SH zMmQBtgAE+uiQs}FIGqJ&z$Q2o&VsYy95@%wgUxV0TmTosMQ|}(0++&N5Km!9fGY`Z zfvezZSioWBz;y(#ha2EVxCw5CTj4g?2Dif%k5B9?Q@Bw78qj~Tl!H-}cd<-v=@R#5df}g@?upfd$g%EsB@C)ck zVdw?Tp#^-+f^Xnd4*xU=vda+kWtD#LE7jZ~$aDyE;b%7c1&)x6-(fWo1Yimarotca zCltUk_y>-{F=)g-8bcFk3eDggl5sAyB-jdCLmODa0WO911UtY8c0Lk166^$Bp&N9E z9`Ggm{R(;$>;nf0{s8?64uC-r1FAda8|;voTsK_Vo96Gp&D7zLwY42*?w zFdkeSOc6{ZI0;UIlOYu*!xWebFO!T{AdTQOm<}@_9cIETm<`Q2c`YD=;2g+=xsV0( zARFex0?2`DI2G4IF2Ou_gycR73kfcQ#gGq6U@0V%vBRN&;4)YaE1(co!lfL{Wl&7e zt(LOOl~78s47{)kTr4PpN`gKpCg_IM1OrgOK`(=9f@`4$PJnf=9>VN=4NM?{6gY(i z8{t$q4NiwMU=y4PXTjNU4x9_;!v%05Tm%=xC6LXI=ELO#uYfCI3tRX%TnE>~ z4R9me1UJJiuoZ5F+h7~q4tKzva2ITcyWt+V7k0pXa6dc%55hz6Fzkd~@CZB#kHO=x z8=inC;VF0;o`GlKId~pkfEVE$ALO19RJ>WVj!Rz5$D((Z&p9KS8AZYLh ztNaPE1P4PoMZN;!2s+?$F5N4@L$CyrVK|I{kuVBI!x$I~<6t~YfE1VrlOPo)!xWeb zX)q0jkXJ*&OK=s;g4vJ(b08DuLKe(}OWEu)SU@lbav={E!Xj7<`LK_bKZfN5S3n`G zgj30q)1a838-_t5ltLM#!%QfL3fRPEXM&$#6|9B;1R(@(vdUXfL+}Jx2kT)2oCqhu z$>4$_IEB-=5l$hv5rz>=gwqM00h{1VI1A2(bKqP!4>rU3Z~5lZh@_EE8GU#;C9$e^iRND1h>Q8a1Y!E_rnA5 zAUp&Q!%h;p3mzf(C_Dy_!)|y2o`k2M5`6G9JOj_dbMQR8028Q!QeX;9g;!bd8oUl~ zz?<+EybXKc9e5YsgT3%Rd;lN9N3ah*hMS1~X84TYe)t@|fG^=I_!_=}Z{YxZ2j9b~ za2gzhA7D3`^91}%@E7` z3TR8P9khoI&=ER8XXpZ5p&N9E9?%ndL2u{-eW4%368&K4PjCPX1Pwl+V*C_h2@ZxK zFci8|;q`!cf(bAT5+NCe!w47&8LT`9#t<9}<6t}#lMFXZBsd9DVKPjCsgMTKU^>iz zbeIXx68&?KL2wRa!dy5V&VX!~4+|g%av={E!Xj7<`LG0*LIEs;IGRijSWa*Sc&H*v zpd2c|4^`k{l@ch0GVsDGIFD5}!W+y>j=cDMuXgu7rn+zt1@y|4rB zgZtqDcn}_fhhZn|f?G)BR(OQqqi~EwHsZG@2|fi+!!z(KJO|Ii3sA!rC&0@DUx8QQ zHFzD~fNWNo4{sCP1Mk4Q@E+`i_u&Kh5I%x^@G*P>pTcLbA4U=BX!xAq7w{!~1z*EA z@GTsG@8Ekl2tUA&@DuzDzo_5Hh@ap$f`{P<{0@J>pYRv_4gbJVI0lVKRbyxZO`#by zhZfKhT0v`Q18t!lw1*CG7s=QTQ@A9jLT46qfv(UEx3B8~<^nt$654saU4;V;L zgFz4j3t6xTh7cSIao~V>NPuCG2ua|CWEc)3U?ltqKfxFn3*%rsbYw@JU?RaukP4IG z7Am~0kVbGCOothe4l`jE%!Uk@1DP-vvS1!0u_GreAeaNWkOvE45iEv$XiN3b4hje^ zgUh-5T>*szSHc8VNr6&=W#ENXP!1JP2|hT+4X6>vwwho7`~<5YOmGcU!&+#|F5AI6 zg6m-eoCv4DMmQBtgVW&**aT<7S#UO-1Ls0(vZM{1Pw)b`5H5m?;S#tME`!VA3g}J2 z>;w0bv>k923$BK1;99s2u7?}oM)-u4KZRQeZiQRnHke4Hli&`5cS3W5E#Pi~_rSfd z1MY+S;Q@FM9)gEqC+vc2$l`0^F@lf7Zg>J-yajK=9(V`dh4)}DybmA1C-5nJ2K(W2_yS(1n7sjC68s9jhHv0oH~`2!4aZP{~32;0VFr;Scx|{(`^ZA2wOK^u4)o`JT|4%$Np=m?#lGjxHj&<(mn59kTK;13S#Pv}dqAM}R-Pz`HgAZRcM zVjvaNPxfKZ%6_sB*SoM&n46WMiCqhV_+-L-4`d1ouFg;2P-5j{3p-EcgJfWWg5rgy5&}8SID8;S2Z@ zzJjme8~7Fuz<2OH9E2a>S0X(GKNI{#{RW5NH#iJO;CEO;(w4#yfI9vk3v`8U&>ea}Pv`}`p%3(helVhi zFcJn5)L;%s$I?RMwFdH&p4rIby=*mHNgKLQ3TG&VMW5{Bad5{hB zp|ZK)gIOeFHsrD(4<-;n3M?VG6bfJ&EQb}~f+840mW%}t!4fEiGVsDGD2EED1RwaJ z3RXh^f)Ii*tbuA+3qQh7Py;7GHitSNHV`}!PJ)x+6xax-!fBAk%F|#I!8743I2+D^ zbKyML3{%LGsc<2|i{N6o1TKZk;BvSEu7oYHn#}@m6~U|F8n_m&gX`f2xDjrGo8cDN z3b(>-unlg9JK#>Z3%0}Ea1Y!IJK#RJA0B`QA(O+O3p)w!f>|VTHkGImM!{$( zW-~Vw5L^c1U_9JFX5R=C2~L8mNYK?Vh2T_}4l^JfX2Nn<0WTB%E09TWE__MwD<~!^ zH~dWS7jUsk5ex(k7DGNPfu&FkZkPqLp%7L=F66;)M0yxJ1WTY4%D@Y&pd2co5`5q# zX{%s0!2kpy1m#?G72u+X7Qs3etcMM7BAf&#!zr*4PKDFpbT|Vx!I^LtoDJu|xo{qA zhV$V9xDYOai{TQu6fT3y;R?7Cw!l?zHCzMN!gX*x+yFPiO>i^Z0$br$xD8fw&;huE z;GJ+6Y=^ty9=I2Fzt!r|=o< zhtJ^)_!7Q?ui+c`77oC7@I4%aAK*v$34VrO;8!>VzrkTR0>8r_@F)BQf5Sg;6dIEy zO`s_>gXYizT0$#m4Q-$;w1f800Xjk_IGw{k1G*CI2Hl|t^n_l}8~Q+h7ytu7gFz4j zr*Hx`!VrQ(;T)nr7vcyyARZE67$iaxI3XE^!w47&%{h%NU=+d8a28eC*)WdacvwjF zum~m+oCK*b8O~?H1&~H?8cc^7a4MVz=`a({C;AH@gWw#ueNfrlt?55r#s|Ay<}dbj~@gqz@IxCOStt#BJ` zgWJ__WXWxC7s2gtH{1jF!Vb6(?uQ59L3jurhMlkr9)U;UF?bwy!xQi%JOxj~Gw>`t z2hYO`@FKhfFT*SFD!c}-!yE7>yam%agcL=kNu5 z317k2@C|$m2jDyS9uC3}@FV;LKf^EZD;$E~;4mD4-=T)&o&bLk{1bXoe0sq@1dqZo zXv8^h3{9XZG=t{Q0$M^VXbo+kEwqF7&;dF^C+G}apaxEWuFwr0B54mpPlCOmH}rvf zVF%m=+o3-UfPtXFAc%oj7z{&TD8xeo41+{S0w;V2-$ODChY>ImM!{$p17l$vjE4!3 z0ux~pq{3uKgK01wX22|%4H+;8GGQ)c!92)@`LFjDb=3+KURI3F&6 z3*jQT7%qWJ;WD@!u7E3H3tRk_rse6-vSpD!D1HVLtiqdA3R3zao7z{z?1M4yv=5N;8}vt!SnC} zya+GB%kT=k3a`QI@CLjIZ^7HJ2i}2q;XT-^ej}USg%1gS1pDA)_zd>L=kNu5317k2 z@C|$m2OyV(=fUUj1^mc@pWtWs1%8D?@EaV4Bk()?0e?b&k~RSTBKSA_14m&W3qFQp z1RJrp#?ScE3(ymKL2u{- zeW4%phXF7UG>C=4Fa(A|95^5z5?~l4LJ~M38HPiD5Cd`7_kO6a`njBvXPqNul@IHJ13s@xw(phCDEF`!H z7DGN1z%p14E1(coLMqkLWGE)+1`m`#DU^X1RzaAR*FYsfANZjPwz1%L2oemzlLViF zYJzLw9WK*%VI9Hs@FA;w1Sb(Z89GzJcY#w0o~C|dvo5fS;F)k1oUN9Uv0dOif}7z8 z!QbIxf|tOha2Z?l%?SPqW||cov?62^5+X zc#+^s@G`stufl8a08u>%Ps20t4h!Ce_h2u)4;T!lC4#0QtJsgA|;79lgeuiJ*S2zSm;CJ`~{)E5aZ}`WizMNF&## zL34sFpd|&a6|^SU2HHY9Xb&BrBXokU&<(mn4;Tfbp*Qq_T*!lgpur%Bfmj#}LtrSx zfdk?p0g}K8$uJy7z)1K5{)90w7RJGNm;fozo!saFsRSp(6qpKWFb!^Em75`*;7nLR zLCS#)f^(oR8P*T72+o7w;4t)O!2no5FbB>j(hFcA!9}nb@?i-qg#uUx)tsocP)Kkk zxS$9gA*x5An4lXxPy(e;23}YNI;3Bw`;AL<*Tmjc`sa*@N z6a5=-4GXS?VVsIYh+`E8+{A*L;TG5mx590(4Q_`!;7+&;w!__U58MkoAc^Rm@BqOF z;URb!-iAG}6L!JN@CrNvkHTZ{IP8WepoW7v0a_D%8|ce|e()?j2hYO`@FKhfODG^q z;Z=gK!4wXED!fVXEx3W;jqpBv0PnG2FT4*Qz=!Y=e8MW9!Y2ejh0kC=d=6j0Aa))D zsW2H9b1~(^L00(zeuSUkXZQtvg+p*5n_UD~!WQ_81%Jaoa1@R~BXX!QG=Zkj3<}xh zN_d&9HhRoX#&=l~s|6Lf`c&>ea}Pv`}`p$}w|g1JyhVfDd47HBXCVjva< z!w?t>ao~V>NPz2z>Uy{j?uT_8!g?6NDkEVOjD|5V7RJGNsA01cU?RaukP4H9aClR2 zVXI0{$mMp0T!C@&417aiJWs;QI&3H#yrC>8kQNiv#{((Cx2ud3}LYS>g0k0+UsIQ^cZt{G~lY#0at}KKU`GdE!O6Gi#@)eM{~)Z`6XB;$tofmww_4}a*Y&d zGyM{;DaKz z%Ud#0)(w^UWvOS4M~}%{Sykbcqm*0?xO|}+NxDRkm7X(wwrr6$En{v*-V#Z_HZvn{ zUV3h>HZwa%OVj43<>X~dUpO}{N1MMeXMT2Wx>M6~C4VF%Wc%afZHYQN0gvXEvP zTtP|Tq_R+`DkV9&y1Lp~>I*ylfzo6-_nh}&@?=sYQQ1neq_bE`cu10667W}QNtzKs zNrfv|?yT|``~51CpwC-XsZA(y^bMPM$g zbd`Gw1D;@&UlNii$G`L zrj6TEVm|wO)LRTG3l#?w)H|PKHJ*^kwYY zNSl_b#U*NS&Q*S|&k>Y7^SB*rona2l5wB5n)^Z6LYsbf%aT^C?kDHo6?Z_MS`hp>s zuh`=-R!h{1TynOh*6@`Y=_3thB=$7avvXrLYu_AUO6;nxvt!O$`@s-`W!WAL&{9DD@q34w?YI{shBSQ<~q-^=CWwE$udw2lOLC%$vnu2yls|R1&T_3yN-OoK?c^#q zFP7+?N*0jybouRqmJjEJI=Wn4tjnOowN7R?&3G`Q*($5d^mOG=0p zNr{uf>6HeKc^ykO6j;SmuRutpv8U+!fTQ*mlBkvF8DOk#U0ZDeQ&l4^O?2cBl{TI2 z?&q{tbJmV9Us~dg_=&7VQK3H z9C9Djv@BO3BvtRMfUDSBu1%_x9+muMs#Gk}fp8Z4D<@0QuJ6xcIu?ul(q_~qRaf)h z=#AR6F&efN{!(dSmbT%)(wj-uj31m*0nAmuIbx!&xEN`u7~A^gt{sr}XlaGNNLuJ+ z6`r+HRr#bPSzM;Kc>O_Vl`B+cws&c}`COH2K04;;UcM7xfhwMO_$b$$30*F zF+C8FE|{^$U>V)oHu{EUvVt{1)!8*Srv=JhC3VGBCEg0zUF916ztRz|a23lB0Z*lW zjVCG|bMu;TWtpdf_PFW^n0q1Z<|;F!-#*)4A&v0pbv$c5dcWITQF`6Qm2TOc`fs6h z->Sl)=xw}}rBSJ`EHAF|`i(=BriI^G;rEw^tIR0#JW}mRuVJqGRgX)p=2=_pQN2?u zA477pFZ7Uqg&|`rD~ zb|fp>n#xtKK+t34qIsSQ_42yL74W)>WOT=to5pdaYUZiYOM=6elGNHsi?pB29jGgv z4B|q!iig8otoCnoNyx5HpeDLeP1!06mq;|`Cer3%w8oK;5J|Ol@Ot5ljzX_;oT`Az zj_Z_FN4y!O(OWdnTfpU&#+DU#tQM4k5XK0kTUceZrMbK{DfBWdqVn8Y+dKot0XWsR z>PK5&$6Tq>RpqE~RTjBjDwY(bQ|-qQpQy(i$y;+PId?KLRChyb11mAHMnxneC6$#j zRuHt794{{V4=k62$o(P6z>p&*HYSoFE0$P|s=+!%((|a6J<@du%GjD35LCJ5E3Lcd z`j6e?V-(R56AqP(uYZp!L-ny7bxTkuL@p*70;trAsB$#V+A5ciK}{>6=Haqa6+xkl z0TinBr214#ZKY8aZ*vp%Un?S`iLC#q##3rX=U|y}JsE2k$d1&NF4w*qs8b2oi-x|s zTFP2-H&(}Bq|Lz=@p3U!BStMSFIl6%=ZISu$HqaG9dU{Fzy>{FyT)t09%+>5=OnuC zDV;GHeNEMZ&JwTmvQEM%C2K05-+17DX1w18Qxlb3D`DN%#?gGJZ ziTn^RaXNwpDHRgOa`~}+sven<0vSB? zk!PNeagDQbh5Ai&5Q-l*LX{yBSwa$t-sx34u^JR=%|vw@V5jl61C-OOckDUGvb*T? z^NUk%RWcZ2mDI>Fl@u81Nm;I0H3IiCe&)U=cO!RLuA6{I?));gs#2gLVz(TwDpk}A z(fd|4rIwMc8c~T_jI2>6tv#s~q>08~hDc+L0f}F7Rot z;!s#Ju((X+Hs?R+D)EGBrbsJAa-WgnJDelcy2UZKSxkIF%0d zG(>MvsXM)11L#dfX$z=UmQ_Osom#F-8ZbN(kU`uO^DZY(Ll_B_M!icO5y-LP|2Sfd zohO-lbgI5JT>(n5CZ$$?Y9pzW_0_<+?8aEANAy2Sm(Nozo7I;TBmN|5y!wKb@{CCy z7DXp#UUpu3u90&I+I(qUQPNc(!yT5V7g9Il?Mk z_FIjuom1r0rbXW?%?+aNGPW&>ojfd|+9>e`g47%3Qp3r?@)Ok+33O@Zu&dkwC{C(; zo4*++Or277*{VuNhTF|!+Kb_NhFsUxi@-2l5x^{*AjvrDfV*7B}jP< z%GkX;h6(!3hk(-FmSnNl;0pQAC7NL&N| zh&M;cr57M+G!jORB$WAsp@g`g?fI6(Y($o*RhN0CNL0FNB!@XTSs+b#*^3;2Y##8) zmM$Z@A{krt_$ZCiXDBI=h4QdNo(P7jxn;34_N8if0^Ulw-pRW-$yxo9lcMA_4>eC# zF*1#FB&S_!Fr%h%8xK?E3iVjko!r-@3uSh1f;E+Lg3HbNL_M6WlFoEUOOX14`Z7T! zNv}(ijXFdMs_a$vCQmSpW}gv{aSGCA%*dEGOPiOzSeu@mm6bMcM&#;D=jt(g5N6sb zw5!4#w(+>gEPnM=Y-V{;y;Hqt$$ggV%cV&rVvkbFt;ZFtQRUaZidp)tY*dLde`WaE zR^atgB##vt9hN6IX17y<)>WdeJTn(n{UOCeT{;d|3D1mGGc!^XP{!3&9cdUFHLI=k z8jo1@JG!l}&kaj;p}4Tzss~GA34>)4C-jYQ}xQc-W|#7y1qw zczUR+i+V6mtK12UxMc4P1-ur0oRi+cNhIH(F=_t zDoc&OMK6{kl|{z!MlZ4*wya_cMXzQ%Mp?}slG9Rm5TpK$)hI-&I&5nN>D2nA$}S2^ zUsCEn<8h$1SRJ~tknx1bh?GNbucaE@)~b|93r@zNxaaE`6(6}n)pPF5pJ;NKQI*pD z4Tg+XTWNG`wi}T?_z*c`=2?$Uyk6bcN_$A=X?T4l{#3WOSc-1EG%Qp_VE(T95YmaY zqB5IxQeSH_Mpi7fhCJvu1~b(yOzwE9JI;m5V3E2G*@s?fstZC2hcW&_TeEJPGSUH1 z$7Ylzy(6GE2UIjX_*P?K|0x#px>GCL5<_WF`K-s4P*ooFOjLp_m2f&riA#bQ_Xgp$1U9=*$=n9V5*AH%0Z)j#p^91M2Q{bn1aoLBfi28lG3CqLbGXuBj1w~!Wo_YP zxKuh!`cp`?UljwlQFDE7ke^hpTdUhrAUFG3<7%wVqvpsERivZF;gu(@;n-Eyn&s9h zjkij9LNDWb>UZ<9Gk=f7z)@K-J0(kvC>#>4*=*E|(kYMUio&Ii7^AhM_r+9+wPHw> zewmEY8bh~w(yfJ&_*A0oYuRcdHnL7Ng(m728Z~BE5EYM9+P03q)u@m=(kl2ynlFt?U76Db^#bED#OTVs&6%g-1gnc;C(#k_`;R? zuu(jx(<4FE?UP=tq&>2)#1Xc=arTTo8t2A5M!nJ);!V+at|E`oV)VH#R4BIEk641` zUg>7axVvO{^pjzhI@BWpHPu0utMR3R;WFkzLdD$ER%uD5me^~hYB+Z8O+9C1l;GG18iiIYBnx76pC#v;vW zqa|T)wCFu?w&suQO_FaPc_gOjOMvxcB{?{eBZ^7`OYIqCb=XYroT^?d_>Sb+Ls7@xE36e>QRgMvLPeLqbP3EANh6laB`!}>>OV@ZHgo?}LsEHI*=BZ#R29lv zb@ogJZM4F)IAg+~x##$(=Q01KylNULSCw#`JyG`QBiNen^+#!YqD0HZXz~~}LoiTG zGguyRN*~X5Wt)8}&b&D~mzy(Pn~|QIXG;n*Pt=*x>m*fwGkU>aWcXdu=u(5toH*&Z zxuw0sWL4GO_wl&cETq(oOw-k$bLz2?B(G1+Wu|nok(4>vO08?Jy7OcaO-;5Zg<2&& zY}Hx#mn}0&^bI6^a`!ME^VTG49IH8jS!Vh&6PT!Co6LiVTyIi(^vg{(?IJmD zKWZcAWjjjZjEo#rN@r%wO}8>h)27Q{myGr^6}?i@N0fXI^+X*3MK1ff8i=m(h`!@=ndApPULKoae61vO0iK&^cKH5d0gQ7u&1gy<$;x| z9_=SA(j%~nsVX;S+0`!ul|XAp`ZSw5M__J3*OTI|;;|Lh%5w9Vq!%fFwfAT3*`?Og zD3k>tkGSlOV53x0=jg3iSw|*($%6u>ZRtfrtB_f$9K7tsoLIx9<@3mk2vTm$>sOP; zpQ@Om^HonkvdTGgC{mN#t^Q1kjj1(M`|e{u>Mvnw`aWkQ^c%O9w|^pVNx+fC!y}6YrVy!Kf9J{T<G zCsgdDC`!FhWWN(h{U=33N|)Ill$6VyHJL6Zw>vBP|ImOjjyPF%lw8~TIEHhpgtU(WSB(@@=GZms2}Pv`9tEi-+ImX|L&LQbht%r=D?wxYG4M!9s2tkmxZ#;B<=uJ1H=6@3cTU8VLa zGV-WS2``K21OL_zkH3C_oI*CTDuKw!jNEpNcA|cuwab8N;r@HSPT$xn0`z=p_3|=| z=^5NxjI~ueg;kA?naoNy`ejxh%vhp#*{p-sJ9_f!o>VpxpNwPur(&hX7udgQQ`llN zN)}J1rTl0ydir7{<2Z=uCaAo&BALh&_K-jN)R{e*2yBd4ZG#8U2awj^mmU_8lpJvq|e8m z^c%Jmt@_J|RH}NzTAggGJ5#&WMH=PujXam+2mRexE`Ba3+wi37jTr~2-)>o6yQ?D` zsH=}#rZE%5$QGGpEMw)z%^72Z<7SMxPISJg2_`Z*N2-qFWQsWp@%Y)Img=u|s7ol) z&Xg=LkI6im+EGQ0p4Zm@V~JqZdJo$CU5-nyWFu|BjQ`1anwq8P4Mj?edL>?!tEh2? z|1gSX)vZ!pGeoC1hNZ-D&roA#W|vbEEh8PZN6_qbS)EZMbHs?@R#j{pC}L(d{I`Ll z1_zCp-v1v@k$MxLp1M4XHw5^-&MC4VsQ%`V+SPH7%er)o;z#NFPd!_eJge*4U?(<5 zy|5(HYnifV4jbsbOu6yc#t7^sMGYq;NN+vCc=V*_x;!>CC!?u8l?**tv&BmIHbx{4 zdsh6P?KB$sRBJ*s#ltx1#xq!bJ=NV)@4;Fbt=}p2d^S6O@}`%(ozOtvPHhkwFUX#r zmo_&mdq&i7q58;*%3&g6G|(JsR3C46Rw^$2K&3RP zuLnr7633f$wK@I8?dNe4LqmE`)EdQB=S(IdFyk~h#mYN#j-zo2aq%Zgv$ZB9kCAwo zFI^%vA&eBNxmyinsTmI=GqdR#??t}RNNyD(iVkWZM9OZI`UT$!dr@zqCP)YfWK zX__)ioZXwT$ixTxgASFZNd9V?5xd;3^*Lp%t~#+Q)?}q~ZDob@5{(t4reokr?b{wx zy*(xC$daXZ8%&mG&hqAEs3y5o|Ljb%%mFA=j|iC6D_4^=nDrM3D8crtM)oSrdoq%7 z;JQ=W%!T$5w-`F(4IPK=k*skx;mnC(&B4=Knl1o~d_+V>f$aQX% zzsjKfV;=V0lXc{aHo3WJv+S2?dS%pOepafKv3;2vt0tocndL3Tf$o+*V!t}>CT6tlY~b3|*VU$H&Cm+ujF(B7NR@Hs<@F9+$c1S>u8$r8jZCMoUp>;Ap+K3@ z$56`EB_MEI&P9<&swp1StG8z**GY+yhN#{tGy7AtG`R;-%8dPJ zSqr6+Egw;m$;I>Mrst(6YH8DQv*#|%OILMEu33?A4chj~5U2bSl%k_%(#SxqjJq;J zazpaqb^7c){w7y~`cd5?OXXE+x_Y*FadI{%W`UrL12AGk{n(P1wO`l7a`J4CrYE>vWj^^v?NN87Ly>KbMVXL33a0=(URno zOrDVaq{;*lZh7i|X&e$k= z#E88{AH7x3)h<$&`P9)H8%IYPwPB38p`26w({91A`h1Plk`*gvXf)*PnAr`>aI1oW}jhF~l9u_`ba3%=@^!RT~{o{c}=ewykl~ ztUWQp4@MxvXJ`2oReg{(2-z#wkbhoKuK#%y@V)tj0F8Hyo#CxbKf5O3^?8? z(>p#~K!tK#h3fq;*-APykx3ioy(f|sd#;%IAVoX+ahQ|@i85%;@QdVFtuINjl5DKj ztv#*L7P)#3W?f*^N9w&{Hj6H3b*??G7&R`zv~F{BRPH8B+)k~EE+0lwPdBHh)l1W^v7)aYbl&h`MQ9-3awvdk>|!l#2@3LG^Y32O4$&3 zULytDiJo7cAsYtzxfN&60Khq10RJ)+y(;iunw6+fcVZ zy;WkAZJxnf=S>D$XixBvIZZwI;ohAaooHSR4HnBhIeD8{CXYCV$Q+ZfFL{XEo;RBaEJ)CBrXOm46YBinlNYHMD@md1@-C&%fPH&DE2-slY_`QSu} zvx4VjRgSpiINOwZRoc|o9%xEBs^ndE{XFPejn@i!DrDRy?MYOZxEuttxnvrv)Nect z^~uw8+8?~S9u=LOeJfGXImzy#tNh5>l*yv<_Fs9CbTg{VQA_hp0X26(9b|m+h~Xng zM_(hvs*X^P%wbzQDqYd<*s~RXj+Y*Jp;>P|N&H&>D9SvYDbz=RT+uQIFD=>%O_st zC1W*HQ*}M`x32ZuTQyJAg7TS5KU2%3Fi30H$a85kTW3%{aVqQa=4Ip@+U{^tp>ks> zke4f@T*(bX%`>yICKSxz*_vEE3}9G4%dxoC3`6-Et54q0_ouSG?Fv@69@$RbfRG(T zUvSY?xlxR?IBAecCs+T@r*#~ZY=2aiEaoY^szBupU2h4GBcz#NZ4kLOlIc6?pYXB0 zJ#L#7T;FVfmi}+`%7A9l<{zAd1OS< z8UwC%*UE_u0qa$dH5eIbh_OJ;CN`$YvBWsHR#}ucP-v1E9}kGv9~Vbz0`-6)&Ph%w#Bq0X{3-#|axyr!sHR}@11tI%9satE{$QSOncHGFhKj=7%Jr-~=i{M3s? zt;T0`6m{lWsVF3FJt}+aR9>BtVOL4Gx+=NNtHz(|U+d>m-NjY%)JafLSV?CUwUIeO zY5qW7L~gf{qmz4q?M6YKsHtWu*652?{UqO-m1N7T7`Z7`$-W%M7vy9HiQIU|PG+51 z$>H+ltzAilw2B>O6f)&da+g60J+;vrNX=Opy=xVXenR9U#msJUR7P*}-`fPLT&W_G zA{Dez_v!iJR;>bR23uC?Hv<{4S0&gOHZtb5$xx$Y80VVb)qoHenUTBt2tH|-BeE5U z=wl-ff_(8=ze4oPQs+=US7v@>Kt8Riieu!U>mG33h>VS_vk~>V8nwE$$Y|@?5)z%t z=++f&JUzMcsK=W;#H(jxqH6d_P__Q#YK+`c$%Q(9_?%CzRLecX{8f#X{!0w1+AoZ1 zUfK>pZ)Dcn2vw2S(*{)$>W8McKkd<3xm7pwqw`0Pz$j_9Viwi>l>Di4hbm`232FFG zHz(HC^dSP|4#Wt8d5_9WPoJ+ZHUIW+_bBEt**grX0GUNzA3WfE)xKxx(}%3wkxO3x zR}QSWYNCc$GfK4o!5zzt%a~PZl{@qHWZNy*-oM?bv^+JfO1)1bH#-^gV0c#=MDnc^ zX5Dz@a~ouuJzBrC;?&Ga@`n}8{G7=Q;T%LNU zgHyRpe@vhGWlT4tyA+judAv8K>KeV6N#lVkM4xFd&x2*aSw6I1lx$>Naze6xevzkS zl|);^oH%2(w5lrUWl)OLkwwnGlxFFj%PeNeIa^t<@`%kNo0)A1Nj{%_i&{&Lib~a5 zSw0{4f9?SF(Wr)wPd_FzaVe6zNYd)oqOmeWuMb8T7gp3^Sm~FOX?~KEOrZE%ZJz(y zno(U4e^sGWcjRvEsq-=QUqUg%>YYDkzi zz--(Q*D(1!-Z1?e55@x$xyWs$hi?$8=_u9!j#XPnGD_Wos20f|D>IFDfn;L?tv@S* z=!?K?zR8BiZ2`t4NIne{|L<-Is_T}fOnuEjTMJOX%GIzN{Qs4p`*zV8 zSzl{`)EKQQ?zltb;RDsW^yayC?Qzx4Rrw01zL-~ZC=z;7BQ;yy3$399NXN;R9mi>| z=&wD=Q*!xUoAuEUg3{XhmwB1dn`#;JGV*d}6v}s}a`>XzXGp*JE*>7>?LMdJ9RSSKBXiRmH?O~a@PN8}=K`veO7+b#YAtQ7# zlfCjsii-RbGR!+--9&A~SZPhmFO2xf#}m{%Q~6sVXDm`U%y^9f7Bi@JQ_osze8oPr zVttIwXt&br*AnD=wV{Sy(y+GB3gjIhc`m+Q{^ce0-%9zHewJ$sr9@~2SgXC7uGW^R zt@`S!^Tj55KUjT4LXVrzr^){R{iH{dV#KLctf?HCB+VPIy!#;orGYi_-Bs(HQCCMc zQM)ejxaG^+@-CWK>XEl?WXg%LnPx20=kLg4M00@^pS=u7g~9j*V}??I9dUZr$V10C zBWe7VUDp19N1bL#T-c|^IMoYBk>pD3>H)S4o~f<}2g4uPF*{W`cD!oJib>TFYIWm* zBDcRGydBS{Nu=_Uf*7?2_EPKBQPt1V-_MLmmcjRAJ$AS8Ul}!w)$;T6)%U$!@&QO` zi?SCh4f6OUGF}t;RT>6yR)`Ffr-O1YmA|PS8rP@#-RGA_t&DTWHPFYDLx{9hV&$`t zyxXC&NhV#`UWqpnC6oDzWHeJIM@t1|4B0!i9DS-zrRp|F>(HhC&7nxa)Q?gf8eb5T zG3TH(ts}=EU&Gd9+=M?4B35nYYksl-fK1kFTjwG|> zo2c^7+wmH>SrJ+P`p7)lC~HlVtc^`J<@ak~Q*%1MwNW-3EpMDv(zxM`%<%(jqxrH? z=8nt)F{zaCk91kp%W&ES*jnp@91B+NSA#>hwVwR#{#k`o+ zcW3V3l;6L0%*MIY8zeIJXl;`(+hiSVoOM(Vn19$XDm}(l@|L=_{u1_aN9Oi_JsEm0 z*V=9=`$=sq=VMd8{M(L=jF%Du1@gPK(lR11$@DdR0M^A}ZL^$+H#W)IBIR&E0|#K1 zkIKk#uV7b)vsy}W`ZTbWo>|t83fa-Ajk7k(CXNO+F?JO7%8wPnN+QT>Eaku9td^Fb zwZ4n>w>HkYN7nCAdxuW*pOCOtFXD)XWsdsSY_OmHV)n7Ov6O&@FG%xEGHXw6HX7bo zPUoilPLeS7HBQ?{=K~&D!CJe7bj{0L(C|Uq%Wx@cKajb5Q+{0SLpIBB-G{x_zRF11 z(Z*Rlj#DX_vy-ijylixNW6A1G>e^GC&%i4A)mo*TR4vOaX*h57!a@hn+Ngqfdo;59y44POG*gad0wKDODOx#QnbN1w*p$WQ7fH<2oQQ-1FTvRciax3;Ka zi_MKCs~WD4=k!T#&hJQ-0UlNzp%y60NDelwk!-}mB0#ETa%Uc7km-V8Dw3ELNW zz#?Z(fyKu!9Ojkj%RFS6&zwTB@#GW*%a?e>5?^-;g~pSUSEPJ_0~Y9=0!4Gkq?03l z7cjvB@*aM!b}1W?BkYIqj9XQWIDk0Piai07t>=I|v3Kx0``>;V&M^6N8T#;wL!BJlP&D-giPX=qNi10+w9 zPiO{&Hr^gXNKa^m(-Q$glcx=wFW<*It+nu_|rJ6J~!M!-zWZaQwdu_-V}hln0`ZiUrluKI_8k z%v769idqxE%}p2!tYSS&{9>kd?(^wx<&?~<3#Bu{=#2$!hB_VIl*Wa2#eI0{;%--M z*X)Y8qlI%71eICA>IgGt6UBq$lmImh2v*XU2@cvd*6;C=svC7KMr1a6aN)3D`z<4TYDM+yDXYDtX(Nwd)g zPh1cDdkOr?>TB=cJ&k50!14R(Cj1!TW>+u0fA@EdG`9?Qs&>z#{96fHTCHd%<7{h% zKRxWe(DJcs}vKzmLGLt-h`s zr-TfnXY|{qOI=$K&`9 z;NSY)&!EwHnWCo`o@I)DmMMCO7`MIQ$0JiT7#c^i%kI!}rCw{6aN~oAf~A^Vi}acr zPvxOUFugNYGW!+gcHU)@U&I4|4v1;Nuz98qUX&04x0o-%vK*UVuG1IoX9Lqovk=pl z!@cBpeTrkIf%s;Z`LBBq4Rg?A4nS93ukXHLiZWZDg)*-pj(G#ev2d6}R&2!B@5GHE zj-&vEG+H17ZpOjC&h-Lyo-y{yZ!PePJNK^0awwRyI^BbL9geDABz(W(Erqb z+&b?AD`^fytVx>`8%&RfNMuN8(RCsI3x&c}3u^HevI!}GMzeqjm#`a2Ja0X=72g8Y z36_zMqPB;#y>5G1{_SiHkt+>%8V!@^Kg)96S%EIvNZG(pJx1&X$>@rk@e$j=mZplw zEWgZm6r+L?&6dvw@^3LxE69Q~eQ^wg0?tqABsrzX%eTrMxP2i7=#u0-aX@jl?8pcJ zPcOZ;E6@8w$7ulJUH#exRDBT$J6lSVa`?lk|8TiR_ywM$?%}QsbThd)D&_4vuoU=C z>C$AdMkJfk{<6CmAEQ%M{>IFEn zJUYM^UStmxO7{Pry`&E8%4f>iX24ajUF&c5BnP>N>-Tr{`V?>N;K-eR0S+1Gf2)S{ zlGc_0Hc`j5CCMv^_gE=t&l+^t*|ZUa&M%{?E+#?xVz?=naOo??HZ2@`3j|762$HOHT%rE=(b<(9~dW zf67huDIk=qTRI)gp~Hy?4N;fD6L1gUd<5t$lr|Ap6C?%(V_78JwduLjwSz30fI2=E z+F6?dOaaqi(TQRAjA1$je&@kK_Y8({fpeRyophA5?#984?bO*8&w1CqW z;$q^;n@0g7c?h&ri7dldlfW!U@&?Zkk>s@p zxN%Nb7WlaE+9Z7&VZAarFJAlJe-%sw!C6=?sPhYAk6?|X?x1(v?I~ymDD=}wDEecw z9JtUGv`s32`3wdv4J)-j!-Xq3LTwD3?t=ve7m{ zdcuO?n&k!O1o&h!5J(${jF8B3(3DG4U_M5f0uM;b`sL}fEhhd);0!Nu zSrX-e@{5n8=Thmpd&{M{WJaOq@Gi#Xqy3`GP^bg390dwxkvMSaRA0g8Ff~AkhRGQQ zf3B=1+-U9YmLSVY)b2`*WgtBfX#4}VhC;Irdi1XV;G#^(E8v@;xjI?QpmI<@9sjuO z5q|>z%2qR@3&wvhUp$9xCS+Iq2k`?IlXu?lKaT&QCb1as2n;-}>F3d$vJkG@=*|t<;dIPaN2FONf#_9+gjX120<#-tnYrjf*WJ zU^}=Vin}x5VlK7Y@QKA2c+a_;GPt;dIfrmE=XnGKqxPHEHr_ytx#+@;x1u*Mtgm0V zvGLXyM6rjJSTmaw6E+OH%zOi52rir;txT^C1Z$VqFTQ~i7hb=1{o2M`oV!=9ZQP(Y z@|BzG(9_{eym9T~o$K%^zIA8)*3H|O%TaWj*?qQKD1Y_Fok-KF??$(V_1#V*x(=_= zE*7JY|Di?@4Kz_y|k2O7+XZ)0H8l}%9whc0TAGtPferm?l|GLyX}0-0cj&uWGRoK4la z54T>~e2Ms6Q86vsbg!L>DuG3b>Kpe$0KzXsxEsjUs*z2Wt`Mw_6X{x{r zcA`@6G7_h2vM6%7HcXx3saC}uNln66)&t)Akln5b++@dU$e`lri+$Pfx`r=Dms~z6 zs;W?FCBp*0qIRt2h8T z2@aLtE29K-gA5ybO&$dB%@v%iA+PLiq|-Flkwec!m&K=BRO39gm{ED0 zs9}Lo)|CE_RH;u<)rdZ7)q7;Z#va@$%Yed_Ep4Rfyx|;^#uEjvk=N8d!=`mKRDpku zqRG~idVV4w1DWmHLR+>A+f*#^^P~L@`I>MK70;&sz2NgZp1LOpe|f1iUEdGPDkN`T9N}EYjHwMT#kD5&xj$ zaz&wQBlH#U50b*V?w}FN(N$dj*pIGVQUws(uSkvNTq3xljkZMwTZT{&!0MbCHn}T` z064N8)-C0-SzX;Lw@$f%RZy%axOYnYCX`c~&(I3ugtiLyfGwoCyzoMipg)j{h(9dP zN+E|Wk}ay?mDp8m2mg-2194|-b12uAgxBP2v684mL^r}HxI@-kSjeO`1ylo>7`w`A za?Ol9Bg7#V{sBg7z$~iTj(pr3R9soZMG4HdSQ$FZ!xryvGK&v{v+aw60Q_ zk3O4wqgltTtd4HQ!nJOr7gH`o@B$HO!QkpJvhem2Zh`h*jvuC8F%A?g7`=yxH_NC) zZsv?_6Ntd3@Po2Iy2Q2)^?A;%@~wE&w&l>bsjY6sC|x8q%l0lsRaTwp7NVIX(OZ3B zH!eIDAKHzQ;e!AXl&03&Jc$2(*}nb*__ruNg=yU>G)Vg`^dANA>UXXFfL<+03F-JB z#5)i8#|Zd3y{LKGoW>mg6d{vKDE|;)zmrILS}aIqrikp1|KSkrA1COI)t&e6egi;t zHG)PS|8xlSj}Yhwa2AiV^M4fIi+OGM6L_)xnz;0)yYY|d3p!b*n;jA){uzbJYw$m= zuhI?tS$XI@9_b0|c2?K`H)v0ce-0opD*O}pcpU#p{9C{K7oOKsZwE8Z^KrWJ>=gW& zk>TTX3ce1j%NvmH7lugPh+L#J3a-@<1*D4=9>Mx|qF44{0>YOss(l|jiM>~0A#xT7 zvr6-99M)>A63$EwiFsX~6${xZL}k`&8H3JVEAd>z6uU-~y&eEVQxb8=O?}F9k@xB4 z=s}b9Fa%7XRna_wy`BJ|J@(DZYI#iyt3-}jk;5W>P3qF*cxvTFS zpC?dZwfO$suMd#L{|p`nYt27PsP6+5)`ou$-*s(BqlDX1h$8V<;!@^#j{ZsyD)BD> z2ZZ)NkB`Ukzkq-1cfb8N#lzG( zF)WFvPd}(^g42uVG$B3g@Nm$^)o(G_NikOd+cp>v!~lK;Zsj|tPv3@ik07_}t^Pi= zZfwg-nLmK&9e8MaeP;J&f(6r2nT(Ugr$kxBQ$-?yvACIc4>Xb%+T{v_Z(t(5uW0Vm z0xDa`Sd!jfyH8L`I?t)eTky? z{OVB9cEJ4uVLV)b3Go2AO!M>PvQjsSCg@=IgoierN#IR2C<(wa;-+Isk+IPWOgNZ> zsk|)FtZ~-DFwl0y!dqF0@%|2uc>Co+Z*Mm$mZs0CI{{_?(sXAEBiZ=Jqs< zG-7(vqaoHQvD5Ha@Z87l7AM8`BSj{Z*qEK#V zNXXkV#{+IfcHjLDnW_?aFBK%tG@mx0+rwV>~qfI^PmK6y6%VrzFuo@{5}w+Dm$lFHRIyv)M%qn%+L?hnYG(l11B2P7Tz z2DM$ZZ9bP++(u5lqCF5JL;uw*pE=rPJ_Gh6uL!5XUJNOV-uXlme5KeK01*?^#9%*~ z!A#gk;3_Z(sHSRmABU#*HOo-{zQq#ea5AoN3#f2Z9E-;p(fV1ZXTll>6?t3X2mpkH z*hAEQ){X|jLcWLbEJyckw9@DaJ-!D(r=>Kd(|wVhzJVfK#45=1Ykh}^Tpd`PyGTJV z23Lv`t60_}m#r#K>|6gc>=X)eaFPNw0hF0SWWNHfMR-+6*eYPm$NqcBCfaUR8a}l) zPi_lBQNev*j$T>m1whpd`$lm zh9?033V|S*DKC^?N|q`G2o@}TaFmKlja>xM@)Xp9N2x4TBp@*{L7eLV71 z8FTp1)>g~YPePi!(UeXF^q(zPbLc;jBthv)xl*1Fn;3Ag;Rw_sC{6!2QfD2r6*ppuc9a56S%e zu_g62J0%lY-NvEa0E?{&Y8cz;;EHa+g^@WJOyKe0lVPH0>A0^wfF9UwPEik&j@;Ks zyJ>CTRvp$vl(H7Uk+zQj!ABFqy&1 z6#&k+h>u4!>#7p_ZoWNRYtE7yc;BAM zYy6QZF!%H+Fg?9dnO+7Fs*6uZf$CCycB$H~&bOK~bIrxdVx>}_o0*@l&eUt|#@uwP z+6EuAk=gVKcwqK}p#ZzTJX3i>3RGrh7BJZLHu~Of&CIsv8uN|n66V9~Qln9=FU~K` zE!Llq0y7@~1u7fWndRxZ<+1u6p zc4lE=srf`aQ2oFtFuOcA|AZ8nX-!YJ>Wd4t`I%;QaS80-sMlue(~FhaT4iY#&q0Ej zg{3E=!1U9nKxL7Vuu@%~T^OZ6YQhGqkE{Ztn~wAZFZi8kfF@U!gZu18G_rWo+%jUY zaLNZv7r=TEoVyMwm5T|9xqvUAajAiv+lb*v?OpKMf_fZApK757XxIZXu;3D7sXdC`b z*xQ;7v4zap_;nv13Gfq^o%GZ@2>GeDrU6|3ryiAPfV(fM!iFd(YU@-(*GFmEymXlv zdq)RPbK<3R(4!g}+z@ksEzw`1P-^dG5a=0>qc(bl%Uw`V(JX1I(8)d>9vr*9E{+F* z40PhQ9q>>p2@M4jrX#iCmEqK_JmT~^=1oxaLs37a1RnOR1TczX2USIEhc&vtYSuPY z4?c#&l|R$GWo6QQ(_!JDyeaqT+?bFEBn`rF?BgzSe2^GwY_m)PZX%~mjmdobwxB2*oxsR+KWRF?w-9hPqIA&}Xr5Rr{iIFZd1 z9hmE|+}Zw1xlYmmsxSvG-%CI4NFg`ytd-ttew5-je?C)4rN?LL6`euHmBBLUl{+zu zWD-EeiNF(f6+sLEFe>}ZpO!{g-7R|=?G3&hG#(Clfy-^Qi~;JhbeNwQnh$DQX_6l< zOT&e3qqYSinivw{q(?>KN@8*pf~yZVLdY@P631Xbb-|J5KK9NyBr`1qG`%0U+WjfQ zOxa1)t5dJglY|P}t5Y$o|7zNJ6{eG$JW$Qf8Mh9K*#sEPBmP-<%Nmh2(BeFe4r3@KXgT14zg?x+Mo0EqVSO)np*HF;=5<6|8A0r!j-9qRg8m82c0o;6lfZdNPS?ra)GT zZd`uzGBkVZ79L`fraT(ig}=_XDDtI_&6nUogLUbA9#ptqT_~k0AH` zlV!v(v+d$S;M4#}oBMt!?z6QmoTuiGr?*Z`X@91CxMqhp0C;r6q=fuZ$uF z*Q}X(00-&>gW#nZO(6Idzp+c9Z5ERfqAtI7Z5-vw>v5MoqHos=<$X z1kS9!evSj*6zgE0sp<)xx0wiC7>H`5-*w4a)b6y<4N)Z7R)ddFXb1cZq+MVtw#v0xXszxpc)TZl zx~7xVotM>-Z2~bKPzcjUtj$5A{V+);Njnh=M*z*atOswohacnz*gWq6%>AWpxdl)b z0O^M?%o+)3FC96G88MF*(A^^-nM+$)6Ei>tVY)HnT4)23Q*Us%cH+aZfMA){0lRjW z3?G0c-Fe%d<~b^~;ZgH$E2SkI`Sd*{=W7$ruH8%*^?;n^7>5Q9J#=-L9iQj$(L%vyYs74`@XpLKP({k0!8R{;`D?mNTq?ewk5Mpq$Z#LxrEJWX}^F zJ@e>c?BR3v98hP@p$E1GX2fIDX3C4@+0r!rDYteP%8wT3H|J;5lYoUr4jYczfH4Qt z=-de!5ex+zm9g{%bIPxQBWBD=N7je*Y0N}Tccr>KgF|JU+z2_lJ^D>QIXTB2W~b|( zEzg&$rNzkuc__LHVPJ6PuPN7APuGF6rdfrOUJgwRhpVBE8+cPUBy;kj;zI zgu>v)%Wa9`9H*HT-vO^S)ygpLhNG_vLF zn(K%lGid=leC3^f{G!haRobbAcG9B!1X3~V6C}*NfMGak(=wD#3Nl9^i)^-}&GQ0* zOVgM}TXEO~uDvE>gib9${oq}`-i;6aNsN^_oNWV7p z${g3m(dn8cMWRvw*7JSdZUupt7$dbWe$`LxHAa)lb*{<``es}8#1Grmm2woLADHPK z8l2C&ib<$<3V+6T5-{7(+cuw@6_^y{yqC(!{lH<&d5if=1UT6Nrb%n{(Os-uKQha5 zT2N#+FO}#*`BE8n(YV(|Hp>Q#-(N1g+lqTp>!8$ZwZ4p)aiByk!dPaeM`0VcV)o5> zicaIpQ&ao9wS!8n$xD)1Xm?VN*V$L*4aX^aF~&`g(yiUv06NlMw7zj0G5gfOa-rMc zVOaELEpEeZlSMMzhrO>=+uMAAn5DpU=hp3w^~)F5HotW7b~tHMYf8wWf$a5O1J&t; zg^F=%xSMvgMw(r^vfIz&`Ld^W)5ODjj&$}zzD{8+wM-+2E2xZkz8D%&Ey2L9dcAd_ zcYKshgS{!5ZM^Px-#mp*6jz5WnF?}+;&7gH)lcR$MV5i#s-EUZKJiN8c$Gx3N#qj5 zY{20Hhxqk7*REgMym<4*m1|cw*Dqhmu!LaNa;@%zbfL>PzBIW6J@#0KIO|nrN)@=O z!Aomtxti-mr;{IdV_BxeeF9>$EAY6>V_-ZS8gUv)c)vbu zxj3HZrs`;7?%~6S<*n|p+>5uS`n~o5ar;_0?1~XU&4dN3M&(ZE;a&DsAoMOsi^vRE z7#iChv2t1Cvc--p=6pjYuCLh7(X593yG`oj$}o5Ob1B@y^CV@G+>$+Pu&Z~H$Tsrb zRts0h(1DSSyEru+x@I0tKDljBuDV?CvoE_T^<&CA;~HHxJ4V6QCvUHi;&51D#;#83 zSvgrq9<9OK6Pj8T+fo)Fn2o$pF`Jr?DZ%rUTPw0rGC*gW6p*(%owFAU>5JX|Sn{S8 zf157hB5x*_r=o*W&0BZ(CLO!ys-sq`9Tu7iN*8xZ6PY^DD}iqdjtl#nj3{;9uB}m1 z(>&aTcz>@TC*bL*jboKu&Nhg~w3-{7SmIpi7z!@1xqGsQs}s2@ZoYLq!(#~rxJa?f zW8^QDPPEDWP2$_*;4I0y_tX(v#>S`K;%a4fQB3yZTAVi{u!=b!+Hu-&I8mlv(O-vf4IGi}B51ek78QsZ(&$DlxLk${SV_G)MDhG{#o!{={ew9ui8_K^r0)|(+c z=XRR>eBu|)+*Mv6#;)}8)@g8KS9^g9mZZEDUtofjbUL%@^L$|Jv5h(|(kYX$U6U8aGinGjBs|z^FyX zC4%Y^7QJq0CXq;!$sK{SS^I<2R*ueUgU-_Q<*sB(A#t&B!KwkR%@s3@ zyz;){@M-~eF+NB^CX`?wg5aQ1N;g5eJSp^$AsOY2&xOKJPwxH@Nx53h{83OVM~6-@ zh1Pt#Hs7qzmX;ce)1_Hlhbk>DRFKqbercgmo2|?>n(aVOO5&!ZBffb5vlR8lv18x? zsGV_3v-gR2V~GlS-BO)?#UPu{Kw#Rj21l)%xu8!fbtJetNbZ z@R5+)A8w32d(q&s5`T0kcG@>DT-&&I<7yUDcw=^YZhB#6zB)gvwM4IO1r}Ab`fwJT7l8O{PKGBH=|rp4rRI-FBzj=_6&` z*y)?&(hMtSXP3dh!c!!N$SuM0UbY%yxj1wxy7EUFp-O#mc6w>9w6uu(=o8vLXJE29g#do?&*9Lmubrj(@Qfmv&RxW zM`K2bhW6yFs6o|?#gEO1QaZzi!CD)L%f$vR5zn>SrRIDcLb5TxSX!#Lr?EJ++KV&Q z)_i?>B+yPGDe@IWL7$bES1w$;emEb_RcETROXa1R%JfY25K)n~1s-X1G#uH~D^$yl z;wYQhF*i+YP{EPAD5e5nm~t)TQq7@aL!dH)l{=F@ys)WB%X&tls+10Jd@gpvTt zT4r%ek5&kq+t&|CUpczen3gD<5z9^Gxx^+pnN_quZfXx9i+40yZP7OG9s_@X6$#D~evUBP8;U{@0V=D@9HuoaQ zh!@E4cv?V^3oHqXO=Ku;V`XSSRjD^;rc3R41OQp6EzK^ry^}wb_AJ@l`mY^2`lL1^ zBnfv(u44-=+!iN0mt}S)*O#nPo(a=;^iUe)duJYD%8wzQ$W}+dT5G!AUTDpf7TVME zAmCEF1WmqGnpvpM*QP5=Gwo*jJnBe7QVoo(<1i*939m|yBdSw!)pCsELt@cT76Yur zNYGnd;`a(%cE?D@qupah1l|w`_E8q>?xhI3%#!%{vYE~^0%OxdMc7#Ny3*5^h>@vd zN)ENVaiGs#S{C#0>FY&qZ0n(B<3eu@P)*K-D0<1+7PMA((CTkN$=x*++-h}kYYi7r zsW$F(8ao)qSW|-fRQ6K{*qS~Gd?yA|PR=ok_>LX%n0V}m$%h4*k9UMA^)>Q3? zUFcGlO;bfoOk%(>j2WAY>qj#xq63g8{T?zd4jN^R*8P%ZM6vCVp@5j-eZAD?IH)@+ zI$_HTgQ^Zliik6;!U2WA`Gt&+7cNH7RO0%|5t1M2>Ay`tN z=^kdNQYHZMa0M#VY}_|-<|TXD03(*QT8y}a>d?eyrC+kUkPLlSHjEL6vhFqblVu;h zn=akiga4H`zA>{#8N@GVz(V_LupNfob)U^m^~E`ztdN__#*qDoLpu<5N;XRybZ ztCr@c>kCUu3o}cN)?!fkQFai?MkFLy*2Ep$8A|L2W=#w#jOdS&wBNqvS)-g2&e2tY zL{Sy@KCq1wiVl~G1Zu7nO`;}bPo*hL@DdFRL@w^s(tm@-PR3@%HK&G3H>YWc!&$q9f;k_IkSmClf`s{CsT0OQj<4Kwh+#&JZ17m^qN|n z*u33Ubh}&%aP;BMookm$uJ@csq!F?6J0am9Y15V0Pv`)Oht!vLG4pYSHHiyMIGE(8 zY|%gRupB-ri1OOovO_mBcZ(EoqZf>m42uK+r(b}K)QQIlxH2OZ9cP?`jA3)xHnvLd z+hg5HC@WzEqQ08S{o-#!psC+gW=eQz9igW-{yOX<#&6R6XoEO@1l=-WW?Q1vBb(f= zIsO8nLJoV%-9>t1v_e>Yq|d@u$L}TuWv70CFxAHjHyREldxaZbZkD;RETbMBL{@?; zTSym-Xiy?8QYS}Y4$|p0X$z--3(~_OHeVkEx1h}Nj87jEk}0m?mNo)$C6o!;gJzJV zh%Ab+6yI}EXnAuD*UaHi+-)MlK07p`J55)Y=it^ld%jw&M%Qj!xd}0=dhBwvu15-J z5a;PKHQbA$ADbSm&!gh>Yy~^883fy#oki$Hm!Ks;J(ET4@Tk6yW=p;Xb*Mu#`R9u- zO^>wfNsFUDLMCX-vF6%K)i>H)1VLe-dl0nFGH`K6B3B$@O%3+;nb%YvUOG5fy!uYM z`E%!|=VnKGKcRjWm>VfzWM>m#2Suie(ORBPAx#-A#DST70ETX->zZ9UKRdsWZQu!u zIS#{WIVhRqle)p{CF`S9?QnP{B6{&f;)@govO1+`HCH*musFg{7qCE%M}VCc;yp-M z80_?pfX=n)X#J8VjWCJLu1km%ag3>Vn#mzueksU>EwBvJQ|0HTO1lR#GnEM5Hglse zFL@6h1`Gt)X~SRL;vt=fE2G|%g}i|f(hSJyMBL0fWJ-`jBcf^3lt6nY8_Ir8QQiY- z_V#Mf46GH6=ALBu+%H9U%dlT&ij+}Q zV%K&J3ys`d;yb%d+Y_IUXqiBkamM?zAG$TRAFS*U?1BL+fGff6p?z0Vq5S|mjABwF zJ$x;6)JeHbb%c-shR(@F0B-!eK5dbM_)LDf1)WIE#g?Mpi&vALB&?W=}zk&bWo*$mNA>vC9aq z)34QcTPwpZZ9F9;y6*6|Cd?f$6S26`_KUcq7V`}P$4KrF4hn|DvbZsq(gno%q|*;G zi^#T00Jv*HbRt*W0{KvD@Og^eJIz(B88lc-$}6B4h7ve_3o&S=T3+LtQ>g;f9y~`h zzj}bjLHl&MnuAxWQyk&}X%W&>m{fxba9JUbN&)(itq90oCnfB3#x-8bQk;?i3hjw= z&sz5Oy=B4swhn_OqJsD{YM+U2^u)RcUE%ircBlJDY?q?cJDVBUp&?0yWaZOvJ!ArH z4m^^i0bis{m0)$ng7c1H3LZ2%>2OF9yl{tWO0pClYH3 zHXZJ~%2XO1qdF~+Q=zRWMUj6iu#QN^o(LUWVHAKUNy($X(|LG2jCU?txxyS+mOeJG z=_Yo>m;V?Yuwo+h!)|~luJb}EcLmAyIfE7-0hdq7aSsPUg{kCZ#4>aS)YmMUDyflC zqc7EVhb>v*7&Nt&Zj$kl8&)~OSb0zLSHNIjY@K@yx4YR&MVX6@(a?dSCD7o0uWk`PQbCm zVzsI(elY97lj})H6>MbaFba6iP6XpI?mzHlx`Va{5Wv1K_pV}_Mri1oWf{w2p@=2O7(g`fb4YLwdE-i^ zDoI9w5em)V|KZRc6(+W;;d*MTN0 zO7te^mBIz7L1qb^=Z=fs^9LxwJm<2=G?HAK%J1|#-D1LiSXojiTf1oYvD=JuSa4aU z$?55@FH?1~`6j!P_UqYJy7hK-uCPqch)jctM4|f*iEn;R*G7lrkm2Yh^22u!5$Ux_ zet6i|gal96OVP#-?`G2QY(M)M{em<)6TQwv2_kmSYf_ew8xOt*$vW8wnpU%D z56(wBt%DU)g&NCIYn4VmbGDJtzrM7Fx^C0_JA4nTY2~8qT zRf`(YGrl(V1POC~n0lZyU13gW1H{}#F&++jGKDyiM+SfoPo(I<5K2oKDi60dp%Lv! z`iASo_>Bx(ctq__XPH}#CN9Z&tJxTh&t_6a>0`6pUkjV~QI*2DB5BU}6&CI+Mo(x8 zb~TpUFMCK`ArL`sPx*0@gp&o|$PQEHz3x7bAQXA?2TLci+V-0Lm3swVv?{!`U5+VZQx>ZaV9p#{+WL-| zU&ApL?58Yn6PkWaOlLn1(`m$m>bO(tY3R^s#3zTh=vkI# zuJMWZPH@ss^dXlatZMlv7%(PAw?6L-;zX2w%Iyqgx#yUZ8#AB& zd?v=k8qQzEMEIT$m@W}V84D-NtVqMgd!ed^)St@DWO#!0Q}Ki=Xn*WdY1)}^17~yV z5nQ-k+Ai^r!)R%BkKlhInfODb@-NHb$HUHAUh>T zW%oWpTBbLYCh)aAqXpA78APagTKGB&^&O$=uSz?ay zR}@elv3MVVl@k&dYmp`cd~%nWE}2y z6hr(krwYSwBJiO~$+{F?b|)=;*_+%+H6oGTy0bRc!<|_8XZZbvH8%z+?KDAjP)}~N zC95hC*~CfRO&c?Lj=^waC(el{jn0>xX=`$&Z0j=#k@4S1xsVy2lY5LgN~gB!{Z~(* zQ8-LT(7{pz1-3lz2=tV90j;{QxrNG|G3xY-a0 zy~~H(ZV=E9R$Fi~;F-QaV)GBzV4t485M2G*TaNae!;oW-dp>jO+q}ng&wSjpA(6|h z?6rvi+x~L2KZ?!m>I(Vjp6MFAO%#2^y2jC_9HS3XFO~RFICrsIZz(0%#uL#m5w;&^ zFrJ%Is-P>9+KZFLxSFCd)PUKhQHhQX0A4sYBb?LsMq!E2YH}X1D4W*xl9t#CZ4Xj9 zZ8%T-K0duC7^{ov3;5KcYOkymmf1Vr%|VDSBr+^4+n2PL?bFfH9D$B|gV&WCdxe*G zF^mV2o4l^nl%M!^37n%bqU?WdINy(S>)893gnlcYp_T684cu_^lCbd+w=0=#h8riT zC9~9WsN7%1%y^W;35Oc$Ug((b`{-P;54$kz@T|BmuAsjq9Qbh4#EVEsa%I@pH0jc? zLz=WItN#1)K5#6>%1iAg`U%SBuO$N z$k4?MCn+J0iBjcjV@-yl81^`=9fohf^5M@w#3dTulS|%YbX;})$?H2V8;NdcD~VU1 zPqx}CF0JzE&LzYAq-(vQS+UQjy3!j?Tj=$dlJz(yO2eY-Wr!p_7tK59Xsf*8oH!ki ztxFnG&)5CKmiVwU0sBAc3UBR@+Mh1ZWfpj=$nnku2@c;8#uk1e4`9Q=&~tGrA{0jP zHlM)?Z7_)d*}%3rOctmy7PouD-KNGz#J(DCF6~Zh7kTRZWOpZo!mZHAHJZI{DK(>? z+z&#mWVw(jE7Md^+O<{Uisc8Nhx4(f-czrqXv)fH%D(`YgRx6F#=+47!J}n8_?&OFsoCs$meIXaG*XZ84GL3U;Y&d=3FGMav z+%}7C?x%W+JS^QlAW%;dsWa>aoQii{g95N$2@hW#Rq`KWs}gcbKXW;8J&Be^%LeU*tu6y>A|AMAoRw6h$!sY0x(Ki7VC1D_ zJJn9Mnh9yc#iGBBjHn2M8iPZ^kxz4l1`M?3#?S%^zFZ(+GUSvdtlWFgW!~69F>4+& zeMnRySG*`?fgva4iwhFUmQinj_vF*D<- zrk3f4q|9_*uv?tn2@`ITrOkEFrN%lzA6?P$-E`dLAe|JS)HerflS3&rp_3SSmsW=X zA`czWwx$MDmOV<82se|o;1N2T&RjTQ7!~7jI;trIkJ3%0o8}BSme+^tt`VLgn8!Pi zruo>+q*5f^ZAlddF%WopQr#pZXJ``i(4FMS?3Lh$f-TqqWfp#yk#I%BO&@_>h%gaY zTvVWaI5d_3h31^}Qc5_BZmrGxR~GtqDig#{Z|++uN$ndrCIir^ny?BJkvQR(~Ms~ezS~u7C(f^MGBmJX0h~f zr`0EO8reSAiO>IE&L4@?j%3|T6qZ`3KAtnkrz`ysrcs#w^aP5Z6dym4xC*7Sq}pln z*Mh?LiJM9?Sauqw-}h_CHDE>o9m>PEFn+s1k#Z)wd-pE972f1|f0CYf3yGiP9GW-I z#b_%I=tJxPUD`Dqwp<%Oy=t)i!J$ws< z_27vX6KKwz-O2MH$YU!BA6@=g*tWOQjv1CYH{1`6>^&tB?>OfMzN8*JU8&B7>9NeP z_q3B-J?+gJ4KIpwWGltM*Uk)^*saNlC(!7&ap{E?Sk%Ql6VX9yP-X}MDhG`8_n?DF z;>jLrWDIh*P$+zaEfhxxEA!aB1$)Fl8!_Zr9bmt7ndY6G>&?gMyR#a^|KjaWed=-i zFX7+f-S7R>r#_`Q{mS@op4Bi}sb}@w=kOk`L-8*HdadxnTIq%N?|x6JjI*`4b2?w- zUuKb?cwy}iqsVuqikK(Vre1ya1^yHZ{E_F^{_OMb-~G;10pBiKRXzN_LikfJtbGO* zq~Tqg|pFx3qih`j;y7(ghI*WYor`OJXI@=`I0Y)YC;Qt1}?>xWO zLJ!gd;F_cdj=sR3VS%4~VeOBOC8(UUd-y*~_#b^??e_uxyHg}`?XjE)zQn)D5`Xo% zwQoX`(w%lCMmX=!vB;l$e(kTJ$nQ*5k|F3X6YyuATl=}^vh3j5hh{O~mR}+Kx4*C! zjU51I-10^KEf)EUFRc9~6e*8n zeqrsm#*T)FFAx9k5Psu@wI2a|dbrb#^96p51wQ}$S`|&opAT3`J@l^=dh7YMKA_X{ z!F7Pr(}VxJ1pn<9)=q<0^CzdQ+aCVU6aE`Nz4qOJPq*Ho*V8Ot;NN3`pM7EN7t!6{ zfw2f~F~$Er-g&_PfPg>o+}clpFTOc7XmkbgV1I#NKmFX=p8#08e{Q~~gwKCS@X8Bo zmr;Eh+*2FDo;>#dh~UHL*Z$B5^&EJLH~(XT|EcHJ{t6nC7SRrTl*9fLmYIEi?ea(! zj)JKweuLnD{)M&Q7~6qVfB#d0|Hdi^&AD-@NxW~<5w|+{V(uf`?ZnL{V(P5@cnmQ!586NWDxGfwMRIJ@02}Z;{OV- zfAsgn|1~}y$Nvrft>67EaLO5^9KP7wKR^oE?Lkz$crL0|rWYclifBe})R3b2TDMU? zO{k4+9413}Y#~WJ&y~4eA>2xP@DPqnUx*HRL*%t$I!0tJMvlh%5Q%W%Mhh$46jp1n z4YG;@4IV)*x73>!cRi2@*luKAy>SPL7`w=3yc^vb)?o~du6G*9k%hFYsF_dt+h|su zXt<@i!WP`N7DQJVgh$M$Ux+L#or{uGbyXNX`0B^NQACzrG#lEuI0m0XTMr~OYwY4H z<@Y@4p!jF7Dce27iqJD_B+=t8013lfcZi3_h^yMArsEjg3BwsGU~ z?c33no9oDFeCxvc#Zrxd@Utu|lZi7B(9m-FjE$umbJ%lkdFAweWTNuuM z;O&i>)pj0@4m}cJOM8%t?l;UuO+tu1_AS+Vb>(&A$_h}(JR}7!T$2p)We4l z%Uj)HxfgH2D_q9CKlLhGV>!xu2%{y=;~|5a1aKL<^{3wsdEZBgI;t7Q*Tr%7N@rK~ z$TZ6SL4P>t?E1Xu%s=pqdtITySPlXLmnDQm7+OnUiJ8>M528pz}x8(=j!P6%&P`xEayK z0aCizYxSA8UUD#|hT2GH;P$H4>9@c?`YxGW+`T!DK$1kv8W>u9Ge&2TU_%4AA?@|c zWRP;F&&j5xgR^VA-ot$gyz9G{QrcxlLq&f28h~dB2NOnZg5w}to2gtg{}x?=pnl_6 zAF(jCF=lK`tO;FT@I0;z)Xyf{XeBzJ^b59sE;CiTEUawJv90g5o3iUoHv2INo=a|P zm*O3nCYnkqZ=NI)?2!B{AD4-tbHWG-c_m$=#e#y%^O*9d2~Exr$E5ngOFlo2%R*Z4 z^0k{79ENIdTHabI@$uv4vS&_dV3zG3g6+y~*hzr0BtWB|Y(|8dk5?XZh`lu7kih55 z=r1cvMQ2gKHjo+R85BRZqVRhsEyWf-oh4_vCQV94z67V}$Kd%Og z1gA1r{Fg)6|B0|0t4-aDCa@HM@m~oc|7Svee)R&kMt>FG^IQDC;0^Xjqb>Yj^#x5P zNiEi*|4rX#_g@X4FFE{Y_=NMV?ihD$NvX_u(A3-@$oqRzwmGU?$5$d z$SqR>Ro=&@1y8bDt;*7~tyU{$zKdsDEqAdN0`()?YBA4^Z2Y4OLnIE3i}3Z0qBR^0 zz!CduTx)c8qF44{0>GCqVynMh8SSKR(H{?vv@l~ee59RGFrw|@7hPpedMFwbPlGxLpJO#gVBZ=OV^Y;NMjd~*}? z`(D9s=6I$%=nWg&`~qclx7Ltz-o|$CVRw@c;q};S%D1?+*L#4sqKi^8;IBYMXaM6O zFA1A*36siwg`LSB#x3`aIvOlN!-0FS|FG%4ZpHilD`H{0@BM9Bk}@W%)}vM|)_kFBwIjN$hKP?lkEW$=TezcQ^&M(bcwCVbrDy0njB zgT~v%9S>+B!iA7^b_dE@_oKM2ImhU+xdBqS5 z!vW?LtstE5J z%sZpaNK@>s%$2ll6vAgGU6_>{apOI%bMCcNpBC$Aq!|XR1|<-YO3BQa>2g)PSC~RJ ziK)gu7u!;8_YpoFBmxJ-&xzXlJpR=q%!V*P`~n_$_4w2Hv3hrPQx8OSMB=XtA-;oL zUk?!1`S@ExnBPg5oz*?9NHvW3TSJI%BgBo>yYJt90a#>tj6V|s{4N5NR;vyL)s^_$ zLx}Gn#LDUo?is!l-*q?QyS_ayC&JoG{0KUPUt!w~Qk#h%zD528E8m`X#*J_j(%IV* z9VPxQv;d}!@5aaD_Iq<&3^RC!-xF*Vrc(xT0h)= zw!rMC`3W^`g!OdRd=7ea8NxD^5a*Gd4~SDVLZssRjifO0@{5sMy%=;1n4PB38Ap z4r~4GcK=-Dkeo477q=JiQtKD-We;91sI}LlLJC!6IG}!^!IlUEp}10b^e$FOSBiVK zFfQuZvuD>B98M$gu?&4J;>I>M1@6RR3*X@mptWe+IIEiqeGR)54Ohfd7%LjHLbgsk zc|jIY0bC={Ea&6_cNJ}5Ve8$FEbF`P?$x-w*YUfGFLvDP>y^&48==1oVkD^>OIU?9 zfxDzK`sp-02O>Dof%IM`^_JWJ(h|1oRBfOextHt!wIOT>iY$)i3YEunBG{wo@oC}$ zj*@q}J6$Y_Ddci&_+p=zB!fEhnn9Or)SYZ89Xz{-O)K_cgJOm1QmL`sYV52u;>JwX z{Hilu8cPiJ7xlo0qJTRG;#6ZJKN#%78w-v{>Lfxsg$+O{M3<3vpNV*C?%xt6_(I)u zbfyCnu6W`I1_GrW!TF@$LHMh@PLu9NabcH$z+vsF?r*%roL}Zno;ftzv<@_y}P@O8W>8Jg7uJjPF0p2l($*`~wd4^REzDxHdF`%%68V(6tZ! z$DjlSJYT~x-6pc`6xjk?#LzjZGZ|!6woCpMGNoMs*z%P~gfcW|qT#$M^B?OC!@sFT zVMT>@<6(2fx|3{Eoj7o~tannh(_JBAvr8NW8wrp!Dkh^;9RtxoR9bg;Xclx9c%ziHhaS^Z$Z<3;%c%DlR)VA2KL7C z+Pov+?v`^Wz!(S>;27my{0#kbYZP&V7q3PSmMHJept61!g`{f-#7thI( zA$dN;qLkr;b23#_K(V;B8CDw}b?ohMNhx{;^^^(7e#in55J6U*dj+Bt9x8Q*ySw`B ztHVxfAYb3$zi{Di$gdta%y-LmPue+Y%}Os zpCLDxkeoG~^60lmu++u+z0odNVMm6I($nm&QvnX^Gl)}zri8Y*QRVE(U*sK5RXI>V zR1k6@7w_~!f8r%Gce(s5)(_Xx{KX2B5vwix5Of7%GAkE^pNuV?n&uR@VqtH`^$}R^ zWjQ~K%kvfi+kI%pIn>^*)msSO%S%HmReT=w3B6KqW^L!0BZ`zFGWwd^r7D$lq?ERs zt0i3J+|mKpAYjaTII1%V!ED|xBhWAW8sWE$2RIaPwLs^~B9=BUM_2F)?S*O&2V?Xi z1jBMBeOiugqi0Up6J3;w&DGB9xU<_<*F262Oyf`uhj8M7D`f-Pz4?VE%{0m&yA_)W zhbXJMi2EeFy#q#sI450(n1X*3RZIZwZy)rDPu@ra9YIk$iJq`a8!7>sirA+7cquCK zirq{8A1KRF_3G4k6k=#wjLxD6Ua5uZ|t4G?R5tU3_FU$AkII;`E1D^ zLPeY$Z%uK5!elCx^d|;2_=VbnUve1DMM0Wr6!ag3sn(z|W!;-n!(Xe3INIF-`iX4Y zrLfS>DB5>FgI#z?>L;3E7tw(Mi?TM91-Sp9Uh% zeOQQ!{4U>cE~Jle3d5PRQn=8qp;gUVcG}aoMp$7Ad=G~OnxZ(HYROM9NMeN|3*y4U zuv_xrt)|c`fhj95`POiwMF|bR{#`%2g5n{18S+}B(ao(Bqvh@Lg9(y0_weYyoOelE zq|>gL{$RTiEC!ubS4SyPjxOo?BRjo>NP@&oWNFeZM;v8G-#1}M%q&C%+C1$_u zvD_Q(1XB-?$rlCa%bOJ9h}+u0Ijm&lLsQCl`v!q)u*-mF2`00SvFh>mBT)d8sqCAV z)H%W+LL@Mi+ptG>vi8YfFYkaRemccR<(Zr4x)Rxz2a7br#KT(C9?<$AHvn9qdaz(9 z3T?=Bm8Zb+yW)1Q{tjkTR(rNxVu-v*P<8z56|qwx8b6V~+UPy3rkjbqj9hZb>LYCQ zS6h3-5=AQbNh9l{!IS}REecxdZx{h!*9S4dC(vtaLm3w= zL@)@T8j&Y^5ZdKPu7^SFV|~ZCi;2PdfMG^U1z*@1dK^H8(SFhI_Zl7XvlfKx7wwNC z7|4d!My^Fzknz~MyRJU);jM6tHtsHTk5FTmwS?9ojyE%Cw6J~xE6988+*{XgIMp@$HA8_&y7lDRyg9aqO)Z_gO&R}#IL$qqtUZj3VWeb zl2*k7MwmeOJX#?kbYm=z6m~Yrbwn}81)~hRlbPf+)hx57Iny)(fI#H(USnfhMg#!K zdVNWr2eb{E>q#szlQ^y<7MkhFWmOhOcfJY9u$GjxcF>C0QUBY*-xcGA^bFv3EotAF zLC%wwESMVjkW)G2;vtAd0qZ9=RMOFu;B^aWeaMSTlbGNgbcNN~%1Cy?Ehm)IDC9Kq z!x8r!Y_ikI8Y}m8F~)YIw2RxWF-2cavp^!UGUcRc<1)`jBt0w)ax8@z$nK1;B03R; zq{2#^9Mr9{lEpW@SXeHcyH{~bzD_YYW|QT+xn~i0u#3jB&7~clL_nIc@c22bJwdwZ zeRS5km72@??7X`n>!!G9gwkZlGHEr2N)612M-F-2+tbJHo-y2(;PT>FR;QlT$KuKu zBEiNEm1&89u??$FhEtv*RjM6SmiKn}70Du7?areW$P8XThe9b{1hjKwYd|xN zbV`{EqQxr3Yo|&nJ#}%VY#pK7PiKI;wvg*M>I@n`Dr6GkF>R3gxUxQqVk(=mB~wm?g4+l6A#uBd46n)# zFpz*iz{#f?o2@v4X&-xh$ZS>rlGTW)mA&}QO>azWImXLlRbq>kG+o| zbSkr!1|88j>VjQ4#j6Q#fsJrM+8gcsIio7xuz^8!VGw@KarZKyTB~^k&ez6_@V&K$ zvo2wKK1^|ab0XU(``7eImMnY&9KJ~1=$`I+fn7_O2?&|Cp>8B+o}_Tn76QF2hFYEh z@SR$F-E)kj47fhEIfs|2Ie{vbTZU4X8gXD|dH2AD2i&VY!a^4xtjxe*!!M#1txT6I z$;7$SRU#&AA-{!X%GAe*kYmd*gP5AIUg#sOH7b^N&*?}3mPi!cL--A6_`r6j3<04) zm@-MY1-;I7ltH(O)1&Ult}he1v-Qhjms5K0+ABwC5Yb4_@dATXga;pPbLZmdhvl%6 z3|{JZP^NjJdeJzRaE_gCjrwpT$XH$uPRS3`Qa2y*57SEDK%;goNf#uPtPH7g#;@=_ z@8aN9Gqzym8rnd=h`om}11EIx#pcwD&2!~4ZKTtHzJ48=0?*!FNgQb|U4H$})zMzGu@9oZjT4pTFoO2;1?C8pu?O74alF!1 zv-pd*pEsz_{eMz85BlJlN;y&Ocy3@0S2|beLFnHLcN2>JideGgeAdF z1@KD`^6)fmY{whesJ&Ql4Wt;cFs2xfe#B<1NAz-sMOK}9&;nSm5uXP0PtQG&A(=xk zQ3E1XM8{7yL}_w6vQgU*Zv*vrMK={YT0(K`Tw-As!a)0GlOd9~>)@wC>ADjn`zpz) zC^_x4RtJ?38w1oFoJ-5_eM}^H2hh7&g?F>Ji3@q{K_Bk={Gj%8*r2wsBXZWg4puRk zhD70}*+H@38>T!l`9Yv;-f1z_89YP8Qge0+yi1J*o01`QCKQp?KUlQ4JE+PO|GH{5 zwt%C%Kp8(|AcJ>?@LggByVxO;lN<&bl)R#gNd#TO@4;xNfSO54VS-}3Rb6#mC`->W zR|^gPUTGS)23I2VAenaL5U^az+fTC^zY<=_i#@D39z?H`1D3(FvINe_rKd(nTX+k7I zBdKAu!|L@n8I!RwuETVjn}gnF9YJDt`l8Gul#BeJ8P!XrYkC@KM!uSP5@E50i1Oe( zUjn`eb{X4qb$Nv6_Ka@7i=b58@N&zA4TLZ41hu>dlW`0Pldy`Ez=G?Gzz>?xDrr>k z5(dW*(Z{a89~Rx(UcHIKfMv1{ zj`eDTV*4D7Fw!bVC2a?1Q=vYH+x@@^&b0zGp4S6nYjI5%NaR>?GY2uXzV$=zO!!N$PT5F{DokafkvgEpM$AddI? z&0gOfDUt}DplExwGP@{+Cr~Ft9JH#-gLl1oXUY%n!Uatk^af}zY!WtBFZnv9GR$5v z7vl~X1$!CEf)G&HOsE)4p1%SnVM;6DQn1;3ou8DIa$t*I8(dOQ48A?AEO>+UL%5Vn z0S5hHZFfi5FC!&b1h#hGqr*CjGY}R{Fp^OG(=KA7WT&_BSW!-o2dKM!4pu!+0Btln zIf1zx`Jhl1t8?>-{{a*bQkENRVMv5z?soQudpd_Bz^=V66gCY>plvbLL)1+4ZbfyFqSnJf73o)B*A>_u;oMf@@ zvhK=x&!cyx4tKC}`_7ds*X~}v4c>lFykg<*7&zuGy29w%(*h~#tMkzhvqE5orQq{(w43< zIBE(1PM?A=ec20Ta z8j-B>Hfh3w(n71|Q9ui9UoFuvzlr>!OFtgggC4TcJ>?VB{Fg4x*LpX4U6E`fD7?B0z_}2I_52@`jJsG{xh>+SI ztEcxGH|mEnx-_1ar#$0g9>obO8@+a!`&v(MeeSoqN1&+KS;S0~9o0-7`DBFIi|sox z!n^~?RT2LjLnO&TohhA>SGv2MFn%1KcAU1`g zsyJo@$Nco{Y%U5QpP3J|ac#C8SYx2FXP5e(szpg1B;`_5iLR4EW;gPIO)zEnN#Rcs zR9!jRvTESetO!Jc6I$#Vu|C<) znYYiqgr=U0Y;YznABdz(c_M-kQiF$Gs1W)bB(XbGfIO9>xYWfbHqXy8^n)iqoO(F> z)Kj3OC)^q7!VX=8V>;5M^iYnR2Kc&)@VNyhe`@%$pv6MDk~Af$*HMsKVklb@=@95# z4w#<-G&XVQoX4ITb5|q;cgLKE0h$cvM=oe$9(T3y)7IIfJs9Kg{Si+`SR^&4{SDVL z#tKH3O(5d6Glx4(LC_>UV1`RwSpAx>tpp#56OhcJ6#zOg1nx9>M*!Aye?=HxKX=sA{I~$SDa`W{UR1HD!7xP9>@)_;*zME1Zi*K9DFg_S zjwAJTfpNcgs{tIB#MB6l zL~M^HcYt|}l^JK66KuiG46L(5j2hRSr6T07{A(#AYmfKN5e`rvDs4agoIOF{=*%@5 z>rtRLjTOf0PcQb|E$X;BAr3*C>qg#5n75B`=6V{t1A~%abZNaIAC!2hf z778h>t+ML4X%H}anKc#DSiJ0)>enbDoyTA>3-j;nVCY6nvFs!N{9%eg$oX^L*$II& zCwU{V(nzQ<5-6bF@9p9$7+k1Re%5-fz?@$77NP|(?lb(_rKBI*{z11ve`TCaz$k{G z0-YA(b9zBxhkJIY3L(a8jeT`1+JTiEThHV`B2S3fMIA^iS*TQgL0H5CT3S{fcDnEb z81B{jJ1dpS!a|;8Bd4j@^wY&tFjZw(hp#Q`iQxEl1;U?)`O-kBkt$H-UrG}N=i}(l9K|TC=q8@q)!;$h`9McmV z41FN|a0gCL)RU0qxbe(ox%hh}w9@zC-=YL_GSMCX^>`vNo5TPbe?NY%T|Tw;L#H$r zmY*H*4-oJ;6K&c#5zLw55YqA$0Q;2IT#_2;EESSumM+I>cJVkJTSq zeJec_nHJ6v*_ThPeFexEh}@)da84D^hDhfKzic65;Ng!eA;~=KL>S4qNdB0)N-3wFtl=cVvk0 z3c=P-0js9<%{jt>_*C=c{GOrOJ8JRB<&%K1N-3d~BAw={#5q*C3 znr2j^x?=|;@x>7A62X3E_2=Ke`>h~H!eUv%T?QN&4E(5*Go{qUS3;Cm2^yWk_$eq( zxsrP_@f#uNHT+oph1FkDBKvuq8H^t!!mpgdT()R?5|1KY4KZCOrfaKfnxSr#57MGx zjTnDYnVSjcggknx5Z?&V-Xz+eU;TwKXfq>xi)h=Yz+g)Cy&W!>BIn~D3em0;?OUr~ zb%IIPg7|g_vq5CPdTQ<0fsBJMtQy}TNWu$WBG3=1#Nku;vLo}>n<1XN__4aS`a>q* z+&zH!tq|yU6X=&#e?Wr+L zA<%sS{mSaEx&EtK7S}?UI(}d+fW*@N?@_Cb8zD%OXnt+=HyLlRh3~0V2%!R17}^Sg z-y^FEo`oxe74eIJy>?>UUVHJ1-<}xN+#kGwGtJ#rTnvkq>1C6CZ-zN{jH#ut4VEcI zTP-iG^lK0Jm1Zx@H?iC$iRd15VqEdvg{cUKE4vyg#-Za5Rc>m@v3Fq3hY3OqqT35fsh##C4SoHtNxaL3(vy@qs57e1qva33orCg5yMnk-j!uWJ}!CMKB-GKeo(XcA(vb6%$@Sz8`YT&0(^^5D)Qj$JKI#2Or3U z40;EIKK1E=$cz@_i=_eBc|8*GP2r;vYaJg7G2p^V%fBNzrrm=g{Xo;UFM=BrSmb&Z z9uL!o+a>cerW!#cup2Rkp&p}gFi2ss<-tpU436kI@-u4h*7PPXi@86zMj~2|j35F< z?C};gyaL4GoJ7PCB$BzoIS$uVnU&ak%L&Sy#^~KLH3z#o_^I?~A4kc{_j3IdhyMVu z^T>kS^{{LL1PT9SfZ@u>VmO5yX$WC4w7d^Xkjx#}5EH-4K*04~qSF!e=s36{qnzd5 zxKCpOX<6Wb?q2hAbS{T)4S^h@q&j9sU6q|>o5-W&q{l&Cxyz3lEeXjnS|ng_$~9ar zM}FU|IB@Lhb1JaW1b37p0IVydUs6RVL@o-aLR0{REXSO)7$qUEky zY0hssy$HLU(3=>^`5-Yo5D`TM-d(RorQilQA^0cb8LUz&C04{c$kSLseRK!+(>KEP zWuyVPpWnxgVBGe{rKSu|I4mb=L7)z(!jM)2HZI=M$C=gt0{mO#TnlVxE0y$-&+$7e zBKf!$aW#nOQqkBJV8?J|`i!foTY`}(hBo$*gfZ;0bXRb$=*=llWqCssZVcpN)#z*K zf!x0nox%g8G$Bs{n2dB!FEe?xWy$$6tCnRXJLiMbXwhU;><448rs`DML($RcqMy~E zBiHW!0CPiD99?ttsyh@2iE&GjAa|c6B%P^bD$0CH%fnQ%OqY{k!Nq*UCzQiaeuWu$ zABP|-?(!_h$2FVZuOR5P+*m=Yt##To3M6trFeg$rEEzC0)Vu4wEo0N9DMdCw>xZ8` zAToNZA67x7!19$X2F{=c%rPp>n{fD{-*vjAs}V)q*EE0?w*JABMuq`BEN{p+ySlUz zR;a4trl~i{LK(npDxPw)2C2#@$yB>0)U2*cPPq}q8VQ>inlQ_bK_wCj_6WG;QUmf} zbY$=R4*o6P{R}qlAiMEynF%^rn>VcP0BZGM^@r8$14tdhco)wDd(|Gn-dgRbSvNr# zchhh^!gYvF&61h%j`!2xUnTf=&#Y+Iqf0) zglw_B-<^xt)^QI%Ap8|J!7lj2Y*QL z&#qonYr7u}FWo%gBLXr>2`p#__&#=^VSAx1$D=Y^O)`RbkULa(K50zw+E^<)26!`( z=6FAW#$&5hN+sqa*6t$m*Y-OM;tbchR{Sog0sGN=_;?)uF#fII{e$z&9&!7}39jiR?OoF5mv5!O}2I%AkTF1gChT!67l5RZh@r=h6v z!3_k1g(}Ygz#F)X)jwUz|2utp1MI`lv9N&BaN>5sGD1X2)V2`0I*3w zTot$?8RktYkGOfpRwl@7IOvolraW@%Fy5u*M0N_qf;*Lr0f6iOaNB{p#k=24hT#RP zOWvQ;+%PgYAg#^o=qUr27AGl&z!h}bMB zWvqJ==m3-p3F#_SqG<#rp+3igm3tCvKa(cXYC?c+j|!*e#)ScJ9}#rm!3NWEpu}#q zkg!A;1qE<3TPUDiFGn|l1rm=u=~@FK3;LdJ0?=lvk7gp>O_J8A+Lp~&Bk?LEBsc{- z?-f`{SCNbsH>8G9xS`rX{L+7Z$*M*Ie6%wbg~ML^V9I~T1&xG z!Q{TIZ%HOOBYAfo_vYbPifOu1z(39tpAv0d@1%2o>BNOtM8w~XT<316nlRvg1X56@ zJcLn!w=ap(Y$sTe5sVDAVxQfjrJu8+A4#p=UT0QQStW@`Ep%?*q5*fzTng&}0OSri zYe{zYc)_U~m+?4rzgV3<*Kw8wAtU30h{Cll!D)m*1KDW7OG&QIjB#0R`z1EbGXg+m z112n;;V!~7UAcucd(DJaC1faIw_&41pCO!BUw^nSJXXV1V_^`IkAD)7(mj>i6|%A% z;4-pEOxx?S7I&XSF-QbZ>9pU(FubA$$}nk#ZpILr@Iy^(pB9$rY^n4jF6Ob%XCs70 z1NGp}B=~%YJ49T8=VBSM1=gPKPC|1HU%DZ;)8AksDD4Y-v;M~A>k9!7HQ`drD5Q=6 z4w(dgVy`%=^hP}E-oUFD3n{juaf^n1$2n)U+a!WUglC;-U%{0F=OLbLPHPDW35Fyy z3@NP*WV3{CvhBihg%Emutg#}F5vf+ji`80uI-=uWLdXOpA!yQ&B*L3-DNa$6G6C9A z6D->;<_&PJ+=(MILDFG+jbIfvFjNK-d}a0YPa2SHhuQ22lVUPnIM+&^qby>_C7w+U)YndCW~QdwzgElNUnDNa})OTwdryoSh& zaJ1!t3Jouj`h6@SG4>gG7_f-TI{=;4ayHdLG<7u1 zr4C+gAhwOIB$Ql?Bq92sU96_@84=r?EpJs4{Z+L|%s*Abg#H#N0Ch2v09Vc-R0wKf zdQ(+_L^(AWRXi0oL}4vmh8+o~K-AXW8t%PLVM{@4>nkQ$fYBELBujE3W0`l>@-0i)!ZBO6jji=G!kEf4jDow-06033LIU#cnUUqL8~eh2{rqA)NaMtCq(``B{KRxL9OqEzb^K~eGTdMk)70SyY)8b&QE zcmR_l2)jH9++I5_H)nD25D)vvl}K#-(im`b>LrCxusvYQ5s!zP5mp_Xv*gXbYh6L? zFzRNf_+lScN7?d#QdqFKMOJwu@f)C48b5~(2`j}l32Ce7D>gx3ZfXR}mSp0C11r-_ z>j?9X`KT&Zbj5Wc&zWRa7fls={~vpA0v~C%-3Mi2NSt;cAzl*O!Tw%#+Fd;(mAZSz z^XBPI%^QtcJuR!%EhP0!k2UkFSCUGtvX;{Os?^JCIuJ}e29glKhM2_(i&-29n^}!x zwy+uun8hqMn;}40%)UeZ|FhiXtFKDxnfKynr!~`3)%V?d?z!ild+xdCo^viPx@Da5 z?kUrpkk!M^gI`>i6g`2fh#;vse?Y^XLnIHEcaR2j4VhC-S@nv_MA1eh=?IUL5MA5! z$X}!n+G=q6)2mziwuJa@T5Wu3% z2kpJ-Ri11!o)UNi|0vF8HM0*!ok^#tLUD2Cs?^~bNt03;x&K;v40HPogyf-(vN2$rKMWjkd9%N zK$wbI0)vBLlRjdHmFCO5t5bG>@>ZYNo)9E62sCRVzZaQYM<&5w3Skx6r|Uz8k$_6N zvW^X`aAn*sGUQooQ(WUEVVNwnl!El{QGAFqVW=orFMV)+h{5xri3&hy~k>jL{9H%=7P9U{C zJ45&@YHe4ITTiyR-C`~}EVWB=0Rsn(f|5V3nzKk0Cwx;Ux$g{+%944;cfmKP0k(s> z%{-(JR9v=PjUoi}f_quc+-PfIHAzUI=9Yj6mlwOZR4ZXQzzQiKBDyZ;F0%~t%yO$f zRtU4Lzl-eP_ya$cW8~SS;jbwuZ(W=JDAC6ZPrj-k3gX*V$cBeS`IBHO)qE1dd;k!F zwzLkk_&y@f%Ao^Nb#|7kTszETfM|qnH8UtCGE*36z{N!Rmiq~IoIIWnsW*-{YQ$^q zUU`KMTxoS%Ng6ct##gYUh#7|S7`tNH6|v!<0f>Jq_E#baDvhnO`P4>8(6_ZvOousyO)-EJ24U#3&*<$j_ zNCP)z06muaSQwKHyQm72(An5r*u1yVz@~@VtIL@87nV1d@4SmKm(Gch5%A)~ioFx2 zH|DE(vDobKkfj$BOO79oi-&ayvyNH5}-o5syH4a6#?C59!T9Tm>mZxC!1!8zNm`<6^oM zvQ5x>pTAh-Nj@3vfYb9p9Fq19g5nxB33BQZ4{2viyk zBvY!=uTE*6ds$R3Bn!`|F~07M(}P{X?w%HL8T|TnFj&5vH#p+T>26p|43oJfE>v+- z9I{rBh+oVH?aCL0>T2#wU#Z>9h6JlrdUS%kt4KY<(Nw<*bb&@WIdYXzS|}etXF47s z$_$5>p%iy9hqz(@Y0LZFSxHGgDD@l#!wzW&bC=YIwTdu#%nD^!pUKWAm>7A^j4Z~K zbR5AXb-kX%I%0lCj)GJ=q17Pg)EBuC$33gE_h}jloJl&X3u{;_o;G05O@%0>`O}8f z><Uy!jFn;Xd`LjMgI%Bk<=h~&cGkR&`?*07|Bi;w0vJE8Z;E0DgB!w?TjZfD z=jo)jFgQMZQf)!*$`OH=;Z*(7z@(|gu#ogb=fQyxeB+g4!C;W{La1tail~H>RB^6; zf0nn=An(oQQf->3J1?a~SiX>Sq`pf1T1j{A$tC1`A?k#jskHpHChBB5wm2R0X`0=UT#yKn+^GhNK7TG^Hwm{P-qApN+ff(y$~;CSDK})$@Ob{)D=vGb=n^88 z>wcNIt`nx`X6j#q(iGllB>ZFyJv|_a9 zDvFDVK+o5N>|DZVHApIm`^XMV@Ju`^cBC zMo{zFN-ZTUasxr^w+4p@bxCU{jiZP=77#UwLx||X7%>_oFtdu-jmj&xO2B3b+bSGT zXt|&o`B6NXvGZ9HFtJ!kafQiq6ne49qhyQq5v-X>t7=OWm%-Q;)sUpEiynR<#w2QC zIKqHiE=+ufxayvkKI#|LUMvbo+8fR>X(S5s=(-e>4GcKaLlXYnJy4BfIOlE99y`He zJl@&b{>cKJbnx7$jKhB}RNP>_nDC~vWN=5J4+))(k#Q6ZfYW~D{DOJ%u#bD(<-T8> zg~CYYOeXY1!7=-$;F|J++=%X{hKcL9^}alk>ng{qNej78EsfpgPm4%0yK||gC*o$y z&QkY0J%P!-d?s;fzZ<`sl0=C|n(9(t{v~)A0{;F|d|7#w0gBANH8{{zh56SWmb;WACMQPAAjGQ z8=xesB>{uwUyZj26#Rqu^Q`=9@O%6IZ~i(>G?fRQ6boz1uvAONp4v22pDhsQ@FJ3M za9kfl3Grf~l45-33bctof&!HizGk=;xpm3JbD6)JOHdNtuNj}jfHoXZ!d3tz|-TK%bRzW zHa3czch`%BVr^l4b9wRJ?S=JX?cVy@-HoMIfzx?ePEmhKlqL=MOnAaGYJ_tkf{i@! zwG&Awi&Dbpt(|f(MC$J&fzik$! zS=;1@4DtdOq5TkwU^4x%l>h7Td;9+HLHawACYEZQAgC2j#v*aAzL-ESQn-EXgyJIJ zNX2=vaEi#*vN^>4HpqVtlg4rJF8u8K2gRF52ocAJw-EyhImYnwx4_&UYY2^i(To@P z7pH%cm7*Hn=#w-~5T4;%C?B0N7+{7-JH3rgl<^HtwwQoKR1qeT@Vo<-{luJRX552^ zIuxQV5R26x%3i@7bD6Uy@#B(|6Yg-+cGsJzp)%K(`vkQecK%x1L4Wl_{?Z!9Tl=I6 zAhqA)!6Q8OP9vR$_P&MZiKCsC!f&L}DECO7X5-QamyRy&Ub=N@)x2IrnI@_d;|Y(K zr&ph~o?d&_uxnSEsGs&=f?8;wW%uz|-!sp0B4DHFLu^zF z)qZ-F!Ls!3dWP~oI%LAc z_niRJ%I~S5WMw1jb5wrk^ufLL+pMeX`5aZ3hd1fO%DTq9&r$i_z2zIMNsfGuYFmqX zJpa*Da^5CK0(uHq`3Gby{{~r+{}6sR?=u;B6eBufVT17_D6-OA`Ml;dNs75_2_^qV zmi&&Drsjf)CCk4FFOr-we>2PdPC&#y;BUd_dIXU0gUMqfn3&?@n{tgkgjSb73TV(a z{xJSLEB^?7Z{PpSXC~x`eW9G&Jb9s4VuzN3)l9H!t0qzqC4kX#=jH zeuZcnv(yaP6K(aAEQ{*kg&YMPS$F*^Vi@P(ZVMK}2^!X8TtLP*hcekBQ{Y@NJxQLY`#Je zU-yuokTno$m$DB6$#kLA^K}F&~S!v}HI*sU$EY!;ukH&1&3` z*TZ76l_z=ngiO& zuF3Cl6qX({*j0UKZ5OVNeO*p~g@@RdGrnR?GEMe2zI4cVe+xENI!bbrf>7sK#a^m| zss$MO{$48xTZZ!WO;mV5$!x#mZgC2Fna{Z*609eQ9B}^WNfy;NS*xBkWTR;fzjA?1$u| z$j{arhMS+FOEJe+0CU>$2U=-Bo~5N^@~i@PAMUFs-3RWPCZ)L>$zi6Q1kgs>t;Vx@ z#z3|jWM3e_U+vssobFr)mVm!$56O)fKuT%KV+sj#z$&?%T}1Op4kd9l%~|QG9#c63ZOZ`=9YF3cYzP_nDJW_|8D~ejQjlG6aLPW? zsY)qnU%H60Vd)XL@`~cS>habHv>^Okq8moM#ck0khUmkb5fQS)ZsQz|5jr@A+XJA+ zJNK4v-{>sfy>oN<-Ol>b&FVp@Rq7o-v>KcyT50Ldd$l!uJd_SkD+h*%!AI7%=$85v zE-{iPPK!%d>`4WGnWD+BhADtaMSF5qMa95LuyOa^`r=YuSCYo$qhwDZt4WhjpFP9$ z<%?fK0x2h*j(&`K*%B7|$fefkh>IB_#+sv}dO<}w=4;p{Q^jC?L;TGu(v;JAe4DFa zu0tJBso>frnPs%N7bLA!jToWW7(5w^dD8(1MqJrtp)yBu6*$f%x#Y3hToLD`raW+w zQ8&b+qq@~55h*B8BTiDjMG417nqv?7lS&+vsg*X3MA)DVzxlv$7IA1a!@!hG-eyPJR8+~UBsi7JrbrgRT)te z(V~`u(m8@!^H%G*V9TBc?R%W+1mbfjXD8FeNs!{jDzSfYY;_xDx(u8$aq`!EvOPBB zF%-&+W<&dAd!C`!nn%rKpNyhv;dqNF$h<$5vAu2aRjx~kP$kz}=$XzC*JyJM+;vo> zu}hTgj3;~tClE94$Tme!wi&LCkn!Dt?Ldgvuz7Ou;24LLgGcQ~*S9F}N<})#N4sdV zEna)(pCQ*5crRu5R7oVFf#qx2w!N__i8>!aW9-s+FZn@;GrI+lcO8&nEl;`-_o)$ON<`RO?v!dP;ELMWcahNo8#(AYwvAPYb) zC3O;x&q?GHOhre_WI(8AbuGnc(yE$5B1DC#Fq45Ae=1$Lw1GBzHPl!=mJm|#bM=t3gz!!CyN zz^fW1a9;jO@)VWBi}Nf5?5Y_IZE62hi{812VJqPCO9?_ZbCl&mb47;^o-tL~*uoWO zuhskXOVwa+4}3mf+&R^aBChul3?!6gc+fvdX6a!cxwI0?x=w$4y4ro*KZ4GMQ)Ah2 zW`K0MRw5>v*&aE;N0QuihZjLAG&6OI{hJaYl1NuVRzjY`Wt5i+ ztJb^S0n@)q-Vx4LO}`3%TZ!TkXHi4RC$dT*f{Sti8zf4&@g2{n(dWY2s3cGU@>O3N zIeR(xZS=niTAo7w#7m$dW(HfVekpmzW=gK&A(62RJKR?!wIMr-Nf?&KPd|-PWH6ar z(c|i2h)>n^^6HaSy+pgyD(Hqd5z6F9yYz{)IQT7w%px!+seat+;v`O6lNm%&`p zUm2F3sO_cHmJ>8?WX>tZg#-$qvbt5&?N7kyr0m54=}tuJ2&2h64=@@KG%^&3ZWbie zkCdwg1(=}}tpNI9i@DnZpG(#s)0c)xMoP@4EibP-b7bX|Mr_k&&@YsKt9VTOZTQ_3 z_wY)mWptBP%~%DM*@^e_vYgkFns7ul$tW zS?)bC$mQRk7X1fU^z$pX^_puxcqsqDw9G%mGT*uKvO44&g+&o4|KYUUPq5t2ul%z1 zHt100Kav*uM_K4#<;&WMwRBrw{$ni2`;)~Fu>8ka^xIdyQ*i@(i1nrXCsJ_#B+LBZ z$`9);Oo4bPEW3~LC)2|J6bt{<%FpK=5&Hd9TJDdt+%KF3<>&&Ja1k6evV{&TT(=zxs=KVS1gu>BMIg7FbP9P<2M(C567It=B% zI9^tO|4XrKAnm`b&xm(EGXILc;9cU*PBt+jC`ah#Dd1ts+vqI&+Ca*kV zfhF9l&oaf7|2j&*_33Bv=UMr0;P>|ZKmNf4*QXcPW5bQ~#WhD?L%|6b-M!g7p6DNq zO{RTI{hy5Q6OU+I`eI&A%o{@IT>m~i-Nppk;iZ69LSwl68`B3PIkA70n_>`#a1U`~ ztK9=E&6X$Du59*%KpMFK21+~|?BW@OAP!ny&7H3{4UFEQB1Lphi``G~(4u>eUVRzT zpD@E1aXEPsGkZZ>fP2!;sbs!od>$Hs2L=44zTERWT0&_gVU!$G*7+5`YGq9xj~6$) zq2tYX%Jzdd*4^oya#X0)qFn1}0u9NW);!sNf*iDnKd+GMChhoqPIlA^G@=|1o-j*cWS$&k?WON3JIQ(A#EXbAXGMc+cTjN2QN$%d0{bjEI%Jkg;V3V$4qD zWQNND|28YtByD);ZZ;1SIPMp|A}i)H_R=xvj7_=-;Ty9vasJr?%lX3W1kAaRjZjUf znwK+fC2$Et^XC{a{}?(f1-M>#pv|`rkC0ye^vkm^d*m8i1Sk%4p~?U!L1W7gjyVy@nz~ZsP;KY5H_Pz_)FZ!y zlPODe4F^P)P-WHp*@^xpa6ou>DfdFcqQ9#%m#=*FS9eSJ{t!Uu1oU9yAC^Lz(Nrxn z3>YfD!&^ofNiO~m<~XYsRJM@Pk=q6iC}s(V4h$;sek~_o9806k*51||^O_VF*(Z)Q zRSE^co?hiWBxRZnCoqUW<~t*{}}Iq9A;TX0Jh^V3C{^ls(U22hv5@ z%MMcYRz79lYz78=Oi7coq5i9HydGYp6hhYmXGiHq9BpQ#Gm12XM6s0*zD-xQ*d>+A4x>RVVsN98JSpSHY|Qu)614_}0BS2N_25F=ctNw&s7<`+jUElkgJD~;N#Ypw zs7)m$_u5n>i-$WWr^7Z5U)eLO06pgrcM4eQaX&-~4?+(O1pkk7;?xy%dI=6B0L$@*#}=+@hBn}45H6Tx zeW#Vw_AjiRwUlj(rKnMsCG(=3QJj?$JPYqBMD!q@#kayN?qk8vw<)#3u;H0(QnD#7 z&0)Y;Tz=NOkTjTjtM6o;u_jt!?*TE(F_!u=rdEG(?H)EA2^nf@N;To_SWP$r!6Q5H z7{`6WHh-vHUVi+>>z&tM(*%LSELLmN?o)_FuWRkHFqYOf+n>~5Q_Js}*rxR(-!Y4V z_}{yfKNHTi&q}v_{$uVlMNODsBDs7l<%_XFvP#*cm7J>rEN%f7c>@gDA#fw*oMgSn zd9ZSdER5cSt&4^R2O~-#6FUthyxn4uv}M*3Hn(wW;re&Kj-ZGh?wnKmm;aI=jD7%kpH`zp5etZzb9l6bW1%U^)g8sZc3A5}B z9$En|DFcq1Hk+`a(yZt0z&oHfV$Din-eG$y^bASAq&xgoEB_5sk^cMz;|mNw<&!pq z5G)}(Tpi?hvaGoLng&qU5c!RXs59F==0Y?Nmy0-qbyUq0CTtNRhj6@MJ3&f{8arZ> zw@C>J5+@(oZRolZSvo9}Q*J?1l6zz%ZG;`zl_X#iiREdb;?|fd{!GE8mY*t%9##=< z<6w?3vz9Jg?njRbkgU9MPUhpfjxl%_vfd%SVy34|OsRrEHEt#DPhtwR1hEG7x<&zd z2!M;oP!E*oTb#HR@3C)umQ4ZbqwQ#%Y?{T3yR3F-!3b?|MMNo;nXZiUMjpZAM4Fc` z?P38uM!-$$hxobc$mM6P_yd(2=>p&%bEBZ9jy8?7bM6vIjP4X_G& zq&DneMhe&cFbEABlmm8|cQnJQ{C%fT6tHE$cLQg)dqlpQ)3kb`d>8}zBLH{=T}hmT zz_rv1xe5#s+o^jC$TqSxSa6u+3v{l76+mHg<1fvZ+u)Aedpw@AQB^XBRnVr7 zW!WgeKDRzo>*XbQ{o!TkPcbTU6TXEd>BZnifc?zf0)7Hed; zTnHi6jHz{C@C7emjPaFcBw7HEp#0GWmG&W;p~TLC!4$#rWC;0Rt(WxHs-bw0Hqu9! zc^Q_@{VH$26bKb9h&Z-%Tg#lRiR~|WNSTpYtOZiO@5zhXU8G!eXki3o%Dc&pv0w_} zl{V}6j;p{#yjJBnEzV-Wc9B4^(X&D{uqoE=CvbFP z9DuGMf(lycJX9O$jhd6<+GWy?JctT)R=9M$fed9gZWH4%%G}GCiP&gL1Eh#G>naLl znHam0HZWt7DPWzp_h^4hKgt-`N7>znQ=(>C9kC3YI-z-@fFE=fXNz!#FHM$HaL9aY z;6@xPK|Rmfjl>u;0^(Lco5?^4mdzj=EAyNOq6B=gxOF<*hor=w&xR5y@R(R~*eW*f z-ncto;0od0SrNU|K6c1vvTA%m095XI%6i*y>$u+Zdu4`tg0?$pba4bEr#J{xfXdCQ zYj_ztgot7YIm`B`lqI`Y?Z_NfmATQ;iHrr+IW@8bV&gU58s9`AnPFTs42VhBg!axO z{UL_18G$8x7?$RWz(Gz+1Qae7b0T({NEnX<@f^}Utl)={Bl!9}D6$-5jn2Z;;Z4Fa zyiai?5htT~4kCi41kBMm3qgZ62|s_WTti70XW7_naN|PT3gHNei<%g+P#8-R)%2G@kEKQPsp3%5KLdt6e>tW9z~-&`|wa|R!YniS6_e4 z4)E9uYmR5w*Awk1Z_f~>*hQPkl56BZW2eVd>Lx*`3K`U+USmoTv(l?c7+W2^#ur8) zDkP%C%!r0!2Zge;qfuGbX^bb05tY4&XkpR(C9(!>P)v!gqiuPXYnfE0-%t~Y4c93Y zqVj7I!h?W-;;I(z1O}T)5LP#1YNgUXxe7_0IRabWytFxZ9HMX*E2l#?N%M+)pc zSd({6J9{}vQjf##Ip{5z)VI-tyBnef><#JmB25%8Ve|^O z7^>D5X~Csh9MzSP(H1iN^5Q@zDiSZldQ0WpE7Q<9EHVsX9L15`38o{1@bnPRNff9j zjDXk71I;rsbex{>bhH?!H+gMNaqx|rV)zN{K!27QVsO}SP`GIXgW=|dzlEOnL9kjRuq0d@ z?TJ|bQzRio6*ua6^g6UQ?kRXXsrXOQyoT?Xi^x_huoSp%o+A-tr!6&tJLzyn9ON== z=4^2eKwLd-RPk0Vdk@Esa_ZQwCs+s)F85k9yE~HnN{*Rl1wKG^=jGM-d`()OdQyMaS2WOCo3^i?Zv_&S02`^U0hNthj59C;MxkBos$kNC%| zm2I;?Lisk@xBbI}7F~j1{MzSYRQIk5+q$A*R!LguRFN9Oh%b18%Q#ae+skx8^PRx2 zKI0rmV6+YEytrGtc{eDv?WBK7kwCVFun%cQ_K?f-v;@EjFdS_P4eiL*89?`4$|0-? z*-(x;bkbFiLZ~3>2U*!tt#YMSMIe~;$?W1fM^%JuR#3fi^FJ>jFj$JoJ?xW2%H7={ z|I_dfHy(P*NFo4pPPDy@ZO)K6;5gkgDI~QT2kE#|}Gzs+i}8-J|VY-X2{7$6Q|G*(;5?!$B9v zm@PORDpoLk1%Rl}>BSX>)+&Cs^J?FmqXfy9xr92B3J@jbfgpt@Q6pTK$^{1*$7c$0 zY8E}y2Mk$T1~9_)9wG}}VhhK7#50~akM+OzFp5xeHN-l+0aE9#GRZl^64FmB`hYlx z3^OOaa*lbAfX@*QooG@Dl+eDg5`TaN+=c_0k!CF|nxnz;>WyD1CgkQ@|EZx=6ln32 zlQ&wNVGvP+c#b9EPVZv1#qs*%z5)4RgX2EEhqi}|fitZ|(ec+{Cq@`eUGfD2rl>JD z$=kSviK2!aL%PGi#+<_oIiR+cuBSb)Wj`Mlp|{DRYR63`VQaE(%_Zs(qjvLTo{fmcYw-Nt=fr`YSs}8 z;*7!79WTx_6f4X&Brf?(ySN%>R-(gQPev+|VIojllw$BpZO@!`H8)(xHpU5&aY)9C zb+uw6KuWBU92qs*nepNPo)7SWKio!g;m#hEJw20ELinm+u{B%_;qNC#l(61OXbn}? z?r|3q5laC|*(N)!(9#;~nl^`fV^M~KGoaZS)L^Ja(_Qs>bu46PC71)pZ8h;K+5iSq zlqmru*(&0oI&)PqEYDkXrD^-Gp7Oy9l!LSY`h(M61)O~XN-wa z(@{$VS%ZN^ z`awJ=A@E42ycykxsBMQW8?{)4KQ)v{>PJ_)ge*4hn!0W|i7un%Ch?IYM(V@Vuu?cn zLuYpLC4*RCxPr2O&_igra9KWTv4iUj*Aw-(yPFsaD|Ttn*Ulw;Xye!<&QcNV4W3yp ziz|eY08F~WWfGfH18%FBLrjGS<(}d_G?t1|DrycYWwo5SAV-IfT)5at2H~n`fen^+ z1271Z>X*0y4RLoOv{T9RRd?3#UZod)QaPyev`9`xoCNd5I<*Mt1bxE7!H8H>#LXjG zP%HIu{kJkk2vri|q(q=(&CX?X#IPY>!z5#4v1K{VF^Osv7FEUbsKOF2-(Ai^cae<} zCa(n@xtOWCKqMunDCq*+wUFS%lgVHwHrD5?ps{0IYqMHeQI*~BaHn1S3{^xhLZ_6X z)maE#;0z@rt@k{NhRJ|2WrNQ%h2yy!FkzJ?UX4>;rWhs37#}6VB#F=!7bzuZR4d{j zRJ163HL9Ce7iYR`9@vd=v}_VNV#REt(~#m(5syvH@5daCh=z`sEbe4dKAKgMwVWqp zy_IoJ6fu7pm~h>R131MG7cdpz&4H9cw8r{mJn)0n138Mf!J4i}e#tCF%M^&$!UPqz`a z?&DUN#L|lp=Epq=f1cw9HJrAv&GLmw#h9>#zD!Qj9sLPs>CQ@l?o68>`mE|PHZ&b+ z0v^dkaJp{14o^(#u_CPXpdZ6Q-z27P5a!F4DO`VrxJW(n0(80vQjXJ(P!0|Slvk!i zNL>q;5S0bTk8a}B&UMjG&SB9(G@7;;Rsx#*Rj*AJ13Q<(6Zc#a4Lr}!waM#SxQK9R z5U6tY$nAloz8hf|!E-M0bc91}IKL-!9U^^=$Sb%+!zKnJt?X2(c4%96Icec%fU~pv zaC(#dHyJwfw3Mf84tFCD`^W>#2`3(wf?V^19!84WTiR`?VIdg5i`xNt<^aFh9c)^l zgrfuw=E#VqbNhl9m48T+82E9KSrFjO$%aF~o;2t)1JUd9ouh^5d9%|42)9}9snxzI zx%{F|hP$5O=bfjtXePC1)ZQ>$D0?^QlBG__uo(5x_2UP)kNNO)w}xc~?MsNKYho*zL9K^C~_&tCL?N7qY2JHz)=oDUaxf&H;iGKaa~5 zILvr}C_xwyd3q|3Wj$aNd*GiMxGwYrhvM)Vw5cc89>WgREB6@BE?Vc zF-q(WRp-sxG*%rVTrHo5=sgo=YRnZbpBm6yr^CxpgBL40H>cJ~IknHgvT$c`00tr@ z5D(l`!6TV+6E0#oTrG)Yg;r@Z{BP z&Ny0_kO>mryVkJRJI+U%^(&)&6FW~V=~!}oGbJO=$OGJ61_1)$IVZ+VJ)(8!a_E>5 z$&rhH8%Ho%^tm)daJ0{kt-7y6+FvAtb1v zv~HZko>sA&2$YM32p3%{qa+rD=zJ)ui7Z!sTn-kIxgte6%;^%TXyu!69g7AHn{HlR z@f{9gW!IX}nZ%Tp9>tJ2QEO*;YVFuxa@57{;xO{LEgDqIR|qm#DtZxqm@XtnQ!FqM zH5(O)DnVP}LYdmtiiP=;430FHw(swv2x1MPiR<5qtvB|HrTj?jXMqp za5JWPC>-nLogs`kNX|YKl2e_@0^^O_+Hm>!72o+Q8}Bo?FT9mu58vY1;&?40Dq~~E45pFS)J?Z8tX2IvgXU*I3}m=i>|lvM zK0T2ci=cqG7{pi3H5!#bOwfC$XyAFB8_@jq@W=OY%HD{QuU8^O zZa3NWvt+<7IXUeeW+DUIyhB9F?Ig1k?sFQ_D#wqE1o@V+225aVTOQ- zk}#*2_r#3&C@V&S@$ERfjUS;eOZgTxsYodkBV_FbLudm&3M2d$U=~=bfW^T@K3deQ ze8wJ+*Izlr5Vq(xoQ&|?wNgOD>ER6awJxxMx!Rj#$ugrZmfebil2Oyg&*f6B@D2pW zhx18ejq8mhbO`lwL9I*U)@_{GtH~s_&b1xoxWgM~^B|=s(B!KlvEe}=W*$NZL4#9- z_ul!eYSj(z^ZI8xdRSUzytJ=A0bt#m`nh@{h zmtURO@Hoq-u=&~GivUc~ljqPm#<(*D@O<;M+6QQ=iD5d<)3gN~Uts@|=+x;;egDN+la~E=S@!Lfm5=X#1Ii}W+VbB^i~T<p2H&R`-7W$M-LI^Rf(;|9)ETKVZ2( z^wR22zGTV5=^bI(X89kcCI2IQS^0^TpZWOy?_k5ZGh;Bbm%otK`9;?GnbmIq@NXp& z+%rUMJh+18qJOv{kYEFVoV0lBIw0CD8ig``?x$ z5EH@Sv}0#K;PGFf%F4r)@7G-Jx&uz^`Q?9|!vAjw{~KNcLW)iGl(GC%Y3cu#pjTEt z{P_O2Ou}Ut@c8do_`%9U<&a3Z^1mm@n4kWCV7U*8FB7HDa-#E zqk?Sn{|o*+EB{yg-oF1QUVD*kzG&iLM9k7yJ7DglZRUxdlz8f`)`g2mi!8@L*uTK| z3;Uv^{l%SVu=v5g1`{VwO7;sCD26@0KhAy2mK0JA8~SbB90yG_hh(ew0k&!$xM`B zIi@la0#NxV9u_@9?rc*Y%JF`w)PKTgZpIJ=5^I~ zP*8Kj$Fa2YZV=Se+dQ;^9f!vq#qbdBOJ4Exw2x>yaoX|g9nO)}+ub-9yC+OXm)D05 zmn8+~Y9bEX8XLWP1kddeZUVBs1M>9A@;V(zZoNX)1GuE&gpZ$)#{M-linC*N3n%dD z(2fp9T_~1JvM@X_V=}*fX=m{0dR`Udbu>T<0Pw2O@Alxqsy@j}VmPvXhZFm}7!@`- z>BpI{LByfp!w&KC>SN~PI?f!knJNAcp;O%SQ7hh*3e85ej?yc+Tj?vTJ0MO~ zHSSOB34Q?OAEr^#B z;4Dg6rSZ|{zGy)Ag0qmije>ACOwaCvh*XkjQY@vmPaSGX3H|f#uo}pLH0SCj%~W)U zJx%Hy>7muBrp3h5-XQ-@udRb{r9w!rFGSP^#z^{#J`a@jI{ce3+ju=~vbNrNBY?(I zOs%R%j3?ruh}ULBZj;L3X@uO0GxjuJ2JJxz+aSWrH*0OgUbNq@9wWjVh8&(2x2BGkB56WyGUzCk(4N3eYc$}rNS{zok z>#!q@)f>_hN@RsJzZ{cI;7;ItxIj-nZ($`YN0$Ely}==pe!-1wzVHw%WfJ`@IC|hV zD{o!9HXp^A7gZw}oaa^Tc@KKkY4^~yA9!YIM5m$S#DjN~L@Rg*g!{M%H_O5noOzl< z?YdXxz}BqWjPH;o3{G->S^-&vKu8*2+t+7`FoKSGk{lg5TPPu+*=iD5NjqLVv_PRW z$#@ME3|dDr;~EUAmiHQ}?k(D{Uwz|h-65MO)@H+uL&(mD zmcbd|4p0fRALEJhN_sIar)p#<>qLG5w3l*+FXVn8+#R3#3-VM+{=J{O@ zxwD|01bBgVnz)`feV7KskGdg(M@%U1L*b>Op2Rm8A3EDLGvyp;$rZto<9!qz2uGCb z3@^ul-k@0}6%_a!y1c^^H~|+EZsKXp9%46Cb`!r&G)%pm`Ze`2TOG_%EI?5Xaa6jp zToDHv3rJBoFg^eP&7Q&$4>iF~tQM1PvX$9c^D%?JoqEpF7_p6P1ezg}1eeSwPG+%P zAjJ(IdX{rGN9QNAPGqeH?qu6tckdJ1g-+cevKZj@2O}ej0}SrGg$Jqdm^dfJK1AMD z{Zqfoc9}F4l^fWwFQ>->#VrCjC&x=rrDTm1E! zC&FeW*d1_rYeL3ja-ulEhDNl^BiL)0IT!69A?_hv0MSDr%{?J^g>;$?b=)DpG0Q|I zIchZ%7k5Ok7|>J(sZ$^&Qzy*oa7(XC*(+a=&5pV6?@1ZViSBeV`q~CNN_$F zEQ*Y3Exe2~YFw?(8XyT%A4V=YaOtH=XF_&zJLrWfDELDOlAu^c3D<8$sV0(wr#jH9 z8Wa=lR55Wm61#x@imc2riBOPowJ`(4neki-M&)R{_x077Cq3{3+7nNZTxAV-O+`bN zptL(K(PDQp`r~#rNXLY7>Dz#7LOhDS;Q+UzP^X`SNZoCWE7(;_)L|&X)}ve+xZ{Hw|NLA^6xZitdPQS4xOFGms13vzvnMTZ?7^+W zQOh0gZA!IAqbD0zvq4Q(g`99zcn#YZNGDRZm_+$10JTE2_jl)SFTAsKJLB)fuqDGF zdRNlvlmRdR0$T3go4_Qo?SxAzKn@2?dNVkl0D|2Lo3R86a^f80M#eCfqn(o((RDDE z^G~lmo1wj}4T2xj{|EXe)o`ZiXsiCysJU#19E6|7jOIT_s^q=iF3elzMbz@JYlg}q z$%Zp*7zM2!errRbfn{1(Wad3KWWHCZPmS>uggVU3Dp4?%MgM6(_KzpM6Wm&4ke|;P7-lh@3zY)1)^bCUV z3UfhJ-2(gG6D0qpb+H>&s*53L28ss^m3&PViz)14m-NyPpbP1?fZ!hFTNkT>2=t&I zRkutqCS$v_i@jY-uE}Zgrlde7j$~3|?+}TdEvpM(@kfpin%AzzO45Uf7lv+P>tuB9 z|C)sdT+3WlPk5f)h;rVNGarEXD*-(uTzt(K&GRLAE(4U&~0Htjtbcq>y}H{*z4Fi2c|7eqspEa z!B`BRkw@HKto2F>&SLz!?6EM-mcXCo4$tT~a8|g}^QRCFdgmqIqLLNBB<#epT?nRK zn~q*!h|6-z{^&^uD~CeEgpFc0R<`ERP`GR}!341+1_vh<4hOSQu!XlG-JB_8Bn_a3 zJD9hN?Ur~8L3b7PVM+7Ye>AOLUN4SRVoo%lyd zL>x@qv$LiL;RU`BEqrpe3Q6y!jxV*czDFF{Lo~%bz_emSRWO=(;{iL%+#^`pA1AJ8 zUWxsXSKbHtQbDnlP+OpM6cJ1TbYlSrlRUCa#EytKd_dU=-s$pSEK`Zu% zWelNglG!OVf;Phn0&9+FEijL8z6O+&IU`n{;lz&T4uGMNuP_<&J!Q&_VweIO%1~nC zmvBUInWiO3kLeTntURNSlfkKF3870GNa)j8v@C)z`w#Y!@XIb8QeR81_u*=t-Z7TG z!SPmO;m*S1-8(lHI&159Z`@nlytA;n)WDs`Vcv3EFAajHCf0gyX?2LkvgfY#JSx8Y|I z4YKalv(5x?m<-J@8nYHW1@_&7q8K`guK4_qqLTE2lMna22_GU58g|{sqi{MJ>>&;z zzg5Sei24D$$6TI=QNag1SeRrrp0~jS5;ZD^0ahQRrkBY;u}I=e)Z|uQzOzq3W_e^Q z8XnW#A~nXezeH=pZAsEDAf%gJ-RRnCqMkO5T&?zl(O6%U4_V@~Wy|xLxLG5K=&Gtd zS<#3;X_37uYIUGMKM{c9Ulo_GxJsA?=Kx`*fhe@RiGpKXzs_9XF!yvX*+7@Wrcdqi zBc4H|H3dSS}xz z`237PL5QPbB|<^Zl(2$GecBpeO-`xQn7!K&9SmY3wlS&g7G^cF`eT!cY7p5{BMp;R z5YQ1I4%{sfS{pwiz4YXidy!D%lIcsmqtjV{q(o|1=ddWhlHiLkcJn5E0|OGcgHuMm zgCn3eH(1k}IeI7!%<=-V03i-#4J_RS%bwhnWsiMT?T`uXA^`hDRoGS>-@bCoODJw3 z!Ju>uYT(^WNXc>B!!d{oz&UNz#0MxXw?T2YiTE%i* z8ww~eM6I`DJ^5@$a8eVnEN~vIg>z16+PjS1iYCTyb!$b};SPBYIAz|S+7^u#H)afrL-C@!zZ;O7P zh5c3+iC8X@h;lJLKSL6kk8M~)lL;VK6C+a1XBx4oTi|RDn{RBhRgbL3vnW#@o?qtV z+EoRda5=#1;Bh3tOYf=a*%oacb|@QBN$28mJ3%5FF+vQM

kqWhUX;bsVX+_90NX@T2(kpjR^A5ID*K) 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

q2DOx$rec=tQve0o8&`lmh-Mjzr*N-uS??m zhsWY%nghL1E{pl%d+@s%tt*KP)En>sJy>p5PMlUVLs!X20sV!U*@x-qk8hy!#e^m!c=EfS2bTdK5i-3{Ys=@Z$A!c1i1}$Qmv2 zI#@B&*CH1%&+5&N-IIRnOQ*flUbzJd!tD4V{yZx`!td?-uWi8WSS-S5RQ4b2kBa8v zl>*rU-zdzeGgB-d@6;RGu-C@P>R@jKdDZ*8`b*4Ji9KkHulG+}t>aJt&U3 z`+LYu$VaEgNSYDa!_!We^mnJPeitJU#B%qZ}5F*s`2;;Y3w)Gh|pfa?TrYk1J#HAM=e4rgwR5G8~%hO-OCrHhfFt&T&b)|h#<^8wU6_Fyxq>OFJ(i0J&nZW#NoV_%rDAaf4idr6u@0nT=6@_tdT5H2sq+v@I4DlEXB0q zp@3B|%60%7^D1%xlf`ppmIT(eMqoHW{0AI_@hE(f@oW1SwmFW13UAIiI%z@k;!rg) zqEOG<)*b^d;C|FhnxDZ=i(NQr?RJqnkQTL&4*aAg%tQM%b#SXi?uk6JY9b|!m3W>W z_Z|fy!+1^HO#X@4CQ?TboeyJn!?V2T6J^Uy=NX*v46%Sg4uEcmKZ93&562qBjB%9^ zc&+07eO|#GFvV#O?clgNUGC^c5orjWqMO9iSJS^?wO~Yy_kHtm=5Kz3zC&jB*F}+~!<|XEcjN9X} z9^)Q+5Bq~topC{W!KMzIIG6q_g0}ZUqKknW1Euif>c-KOQb?BrT@KD=2=vB7L}DFru>t?V2U8!Ad4>+2Q_x%^ z;KqgijuJ0yN}yCQz+p7-5_Zdi3!KE8f z%8jr*I2Q=f;SJO1JUD@TI8KN=Ww@t6ri4X_(xbjJtf-l1qw!-G9*pOz4D81$18%SL=>bGLe8;*>0}Aw09$$|5Q)P*IDuvKjLSgF2LD!t<0CI+ZzzLq}n`Aj=6_ zaZpGCMEfDTimo?EBHY^pV-9?cM>h|dGM0SMEw=wOdtU-x*HPV%!xAuI30o2{@GK?h zd68tBV2Fqk9LIKyEZdbOqTm=s%abKr8}lSDF^?V0zLlM_l(n>l(gjLsX$vh~XrX)Q zN>@s0OX&iX7AXJU?<{lY-us^POrYfdefaaI`|h1NXJ*bhbLPyMGc&WNk~AbuS&EX+|5Fl4wjb zk5*2u2`MMMWgQObP#CI@J0M&}}ePz23`5oZNy3>uJ2+b7m3&<6MV^ z`B1oUnAyx4hkJ3dM(q$g8WZ`CZ577?cK3QF<5Ya_(FIRj!8a+MZphK08xK{wD>q9F zDZ96zz|OIH9Z}lsm~av785%k?)P3O4J{gty5z*RnD^oQOM}c1fN(y#Br`9F=o78F# zy`i*!WFaUoOUVMH!(Iq&WfU(96S%mtz|lm+!;Hz2ESV6{%+1Wpp=4f~wNkgGorEex zd&6?iN!tdHpwNzV;ggi2wW+h51aY4ni{durS?ReJGC;ohUOzJ?WU?q)l!+qrA~8BG z%AtkxN0Xv~dvFmEMwoq*6@7AL4`wQZ&@%E{&Txa#XOhb~zBXFUKUoHSbp}-?7N!9h zHCQ2^syLBvs6vz?NOkebjdauW{stpMAFxW5!#fc6x zvr7(1YQ-r4C#zynvM#V`1g)Mok{OQj5pKen8U}5n(aE}=-BZUpo<^0NtdCK5<_w)g zGGu!Y4&v)h<=y6yHoCi-lr10isv%5_FclbdCXU>q0ID5>v+8w;XjQ9#7tp_zt16Dg z?a5&@)agVm2abR-h?|>rQuZWtgsez-T5xVIJqlD@HO-5ga?xz$LYpcNgVgii>fLn*QH40}ijdncAi z$FZA86tfoyA%Qaj_Ac&L^|e#APGC!NrHwMGNG7pC2m5g_hjd|vQvfGWET9uX!evu6 zZ2wc(8#6UK-t9goDxpqVrqn7B5=@AAEbM9i#z-WpE$Q76lhIvvhG>rz96XEGx(6`H z(cdL#9(iPn0Mi*LG|c89a#FnPUK*oy?;4mVzGCGN9Z8B@V1pumNxq}HoYz1{sVn1koc5TZmxdNdHOI{W+5S;Mh4Oo%AFPlcSD|Qeax5a=dexnm)j8Re zC^=awWjp_`lkQ08pLorrgDSA=mfhw?mr+_e*|?k?i8{ko6Ez=tUwszCB}WSD+gW0v z{+do5DV1xbC9PALE=u)Z*3cA{iLeQ4+3mP_v%^JUKf>dQPr|z7-NBp&vijFt)6GEX zZffbuRq#||YGI=?b&NYPF+gE$ZmxG6n?85CM`wt!-86F!rf{AtR zJFMIz9mldMmuNf0kjaU;LNv^U;arn-gUaq*2Y2r|paYnUJWVLA!#D>DSWLA^9{h*J zI=wd${hue#*`^*izxMAN-ZL~P<ME8YB*xol(_WaDouu4ye9Y$=FAME5~} z`W0w*nfN43QuUvki!pF(t8yegNit3`CrFAGkrvSCm>~!YP1dB! z%*20*17LgN0Fb0`HshLPW`5RMY(^eeyR2hZtVLn)av(m7v$EAu>pim$k9H^JmI5W2 zt=ZsA>cKr}K1m%+>a~QP1T4Ec__Z)svd+%l91jp--^1=*OzLDDD$K`Oc4hzIu6=uw z^2%j_HNF;vFec1_=H`euyIXZ^8q0pTHk{rEm0FWI){_4^VUu$@s)n~~C0kH7j+0Z| z8!mGgHbSNiw)-v>je<7Q5^y0qjBIxo__|rXx(RL-b(yQoB?43$_r(n^3O88}_xfvZ z#tt;j7ihn8(OYWDlOdx7^98+a>GTvAc9u@VQzLFk`gD7iP77mVW<6mNN8p7e<~|;< z)FQdLr9X3LhORWEw+}slrhA$PBKeRa4??w}LZz2nHawCs5bRavLN^%Fvz{>Z*8{$)H-Y|>Fb2mrXMK%N~LJp5QBTY0)2XWL$Y$QG^nqpp{u1$wf+>1ZF~ z$7RHYTLXg`SIiT~dqQ;xz-IV9IG}i+Tjh!7;+%=xM6yGC!zklqT@Rl?9tP1bZ>ns} z>C0w%a<`sV2b5EQ7sH3!%%tWz8_?-Ysf|estmZb1F2nV!!fF}_*N-u@VpUPqESQW= zAnHyyAcfxg$Cd)b#8PcUXmOK@=P$0q5yo~o zZRS~m-QuRA6WU{VP|~98&_zcUdD-j>TH-S_2$2wTBPNgzSgE=LmFtgt#o?#Yw^@t= zj710((86gXI0{^R7;m}P10bym&S}v$2FHj2C?1WXgyNE8wV=znnl0z!;4&2+nrkRD z)B=SLNeD)^d1kZkc+Apl3#35$+FNJki9C=N-C$C}GO&_}xnpJg^!QoHCwd|~-Q8@c zREjgJ#3cD#L-{A7I0hbIn}oT_V^{YN;}dmpou>%3Y3j@+>=HUwH0>BQCslDLdWRbr&YZZ#oo7S7TVk!BPxVl;GfJl4Zx(@(kXt#orTcFZD(IMHcN z&wMbsu7)CHp1yD7*B^yEltv_AekcfaIac`V_&va5jIxMaX&np5w3V@H`g*j3PK1ua zxgdVfy=V5kCW*&{z-#qY?z&%4bV{)h}IJ)3``!I`UrGh0RqPz3DZ%2 zU;y0(&k%jQx<;QYMq%`$Q+Yg>4m&knWUz=J8=O-uC*cpYJm}_Sf~w0Mg00?D>EQYx zjXI97UISU^!xuQ9=!rZ%4jTnplFle~4=*d%Sg#ILr9)QXh@k*Efde~m=m(BJKp>}W z;K1-cH;dzjpmu<8I}Ra6%_u{g@)m(|ipFtqof-z0o>f=rESdtbY#;=Z-p%N7I*xOKAgOl*C6E|O=_cMMW1kVGpferyj-o>f9>s>rs39!nSRWCUrP*YRW0h0OR19wPtQ$3ov}ngD zWYT3g?q;5{AqAIy!84w;^I+-nwmegCWXo-W$_G6mB)jDz`D^`XgZ@{S#pBN zQ%}C_;I!7#kgHrDLd~E-v@CJ12;X{yliam~89X|%+g6}2D%hdsl{zqW!LWcdo8Pz; z<@K|a7yCk0)~oU?!1;?DcHHuG)k+ndt|lrosGL1V9yR+rwgb)hz#!X(U8yowO{SDm zlr9SL@G@)+hHH`0DaLCuOIt`hPAn2mLaCWkVkn%8s)nI@hIS&t-lv=Ncm>VFiJiMz-$m8?+72cdQQ6F;*hsGJc>8bsQ2RLBu8 zt71Z{p7ABvyl}Lrw)Kgi)=islLSr;hyGb;Uy1kkW5SX&UAqFW{ve7V@!i{LM;exTB z8rrQr;yW4Me1`@GhU1cabgo0OYwMu6vfAre2i}KySgp#PoSDdgBMc9;4%KMWwi{RR z`Q}~w#oq~OvTz_FfDaU0MMN&kkJ5P>{Q_cAs;mH3fF^Jv7N@s!bDJzclc8wQ7@eP; zn!<@$=+JslHLId5$5DQI$DzcpiE{F~-~b4#3l$;ovD_@1ry-lG%%`cc)P~C;fw2~j z)K0k+En@+_Yy#fdCN9y#(v$T8S!M+M)a(?m9YD;&X~YuT)T+@Qp|y%naP3dN&A_(vvMTaS&ANR zfgc=5pgwg?E_MjkJ6Bs%F;Y)e6p2=GQ5&vF2lI#&$WVQGamfR$1fTZV^0LjEQsN3< z?JY=xFCht9jQ~(5KV1k&Ph$JBI4s<9g}IT8iq?%O=nN0W)A|jm<*Y-P0VX;<{9}h= zH;Z&NRQ($1sBbBGh>`!I=0BRBr{g$E>{d4$Coge&G+kr`x-(~f&?$&&(kb2|B2X5N zUyoG`Gz=j=@YSfB6`nRU$`&bf__sVU4=q<{>6Z8nhHc=v9dCJhPy}V5gm~$@oU{#E>`{pd`FY{nQvMgmXUP*%+?| zzc9%MH>Ki*PTupqQrT{5DI&zMMNhiFZ>n62lWa06Z{|?H(e|mp^H5tjjyM(y{36uJ z3}VS8gcJ)s5uvn0_rUc89Me^+WrazaDKFX0BTgj&l`vfB9h<>Lff0yVUuU&l=99+H23^eZ3!pMGY--|JD@wvy~{8!H(?hcEHq8PuB#cF ze=!C_$|GU}XQ2jsaL<#5c9Cg`l0q`9enduc>x|R~)|R%F`{Gmr$uX%2zTmJ6t`>ZI z3kPaq**K;szU}3Y@0vzwX6Vpmvbrw03ih|ot;Z23jJue1yuwmMhbfUb2z|Q|lCFth zb*Lno(_c8<+)9Jq5hG}g%6nvLf>uOI*ArQ;>Rh4|XYqx_MPjCLdu^d?jU^4zENeF? zLDgoP63k88WEfjCD=80T&!*ePO!lr-+ryBTyvr?M2fLt z`CM^ni}ft5GO7Ig!cmOiE#y)q8*?QBRLH3Hiy3463)#q%n2Co2L8i#QLNCsA3LEV2 zBxZ{`m3)s#U*(AHD4>f6(+l6uqb{3dGl|{#ge*8^TW-`#rmjLt^$%y5#S0|1jg~3& zYgr(NSX*wFj0s8uEaD>zRz=4Q*$#=!6QC7U@C>Q;3Rz%;Q@b`kPZmz_EKkE>r;NIj zYnO)w*tL;yF3^Srr{O~Lw*5gnnS_p-78Tp>tXgfDN+6OBq7Iv1>?*_<)#U_3@=Gie zFpIYi?}yV%cVp=?C)03t7j~Y*!lDS~0T`I3jg|>5GRyfC=pDEL1aozq8zJZ^&EPmU z^XHw}uGezTlM8ex}7vSRtKb|*+^3wK-h1+t>RMRp>(>hBpp?t1q74i zy_1YCQHc(t4O#6-rF=_Nz1yNPcKoP+o^eA9CP5djPiGf&o*{NjrKxtMXnlX4q+2Y_ zh`f`|lgKF%pmx-k^|opTur*l;$+~}*&K(fZi3zQhbw_k&+&R_1ecO(!OFi>8Cf!y! znVJO{UhFd#%grykuR)#TCj^SH1Lz~Z52E;;>xN)f(f`Qd738v!!1-iuz%@|E9vZE@Me$n@*xw2_TcXUed zn@3L2wA3|Q#>$zG%~uF8(8_s98vPpQ)zXpmE$gq*g4BejOFXt(o16xV>iaxfH+`j5 z*LatFv_%4tt+8gBrGxaKwcvQt-&6*xYFkI1SVqm<^EfTV(Gz9X2YP^AgjYhm#r@zY zQ6)HOc$CC+=C7OX!3`lNtJ}6#b}0GSKdHs~Vd*VnHPIH`_!;8^Q@D7r<7#+4MIA_C zOy$1}Te1-=PrW1?k#%#)D`HDF4|G=cGMJwNW}VN&JkKm^ALM$u8&}8$iOCLznU>wh z?5auqEwiTKdw7Z*qB(}Y)zM3Ez^F_NEpjK^hR^Zf({a2EZeKTe5O+B}5ILnv`Gf4j zL<%s8mw~GW9(#WDVq~}V=rEOLsWHoA2Tq-rvbompdt$joc*_N+$*MSNvU40CC|dFK1_y1`2>IzM`E&!p;x&qr7X%eKi^+8A6)3j+cSYqn>)>lvEOS zbXZO^tq|cS*P)h4$+|WgPNf-7GvmQ^sAYlfYjtck93uDm15Qgvf>2aLwbU5Dizpv zm2IJm`Jc}G9~t;4PuG10em9ZiXX5kB^)2Q0S(=>6>9h3{`$SrU@ErY)Yp&$tGv^(h zqT#t2Oiu2er{AMcnDjhfKNp1Wd?B+*&JLBqiu zVAK(Bob|G@s?TVylR{^5grjvT4% zJv4-E3Ws+M4e#GQa$wg`jhB*(V!|<|>DILh@wA&N!Ae zj63(azMZ)%!*1rmH#aXXVvYIQ)2I1-0?v{K>3PiFb@5zYbUi=Hm#6HkcABqTylH)o zwvC;6wJ0Zb>EW~HEW{*H4#RLi(E2uyrsWP*hQ4Tajbd5k;dp^L&!k7jV@|=niEs{MFPXQ;^W!dMJwO*`n*Yw1%JTwpXY9fj$A!UY zg*@%z;PvZWjm(ep7}j%Qr*+Lf`f)qEWY1C8naAzyVdc7Xg@o^8JFjM9DQRhGQh_R6 z_?d&ky8^XHnyUe_1XX|ZHQTHj{F%eZ4`(E?tCTiQ9V+E@+0Ps(&iU|q;%6~wW_pRK zT}hIy`FM~4PX$=P4Vn^{g5Tohg94xnE)D6YyTG#I+`~y6Ve1<|Xx#!}2}+}MlXC~M z5wmy__wp}+u|1CSRJv(N(&Wm2~m09%$%#=BY6R z#2K3T9egO44W(yJJ)#{wCl|57X`wQw)jaa_Mt5WDDh*Brfu-(kL z%$PuwU2J+qn1dSE&R{EZw)e7*p=24~M0$W~dT|kS=XG;c{M=f>OC}AZ2>(%HfJ2K# zAUcFEn}Z5vkOVHG(YysjFScit1-VNn^N!rRj>lb7A zwKlSJ3Q?v`lPfMkaT^;zH_BIov~3Zr^bU~OF9mv z3H+4{(6GG>T|f%v=O{>>a_2n*IQ7C(T@L24Q`oj_aq_$}f`*rbXU(Y}hvMUTarT8$ z0w%)J*<`xzpUFK`Bz=X?LoQ~D6_JaH*a~FKhTXwoO3GM*d>(_azy?546UzXnlVmkxXUpCq zmL_#9enQb>kXvnPDqqR(LTz*MgUaRK(Z_A)5Q~y_q!~n(3PAb|fY^%e^-}^Q(hQjN ztw}LPE}Tkf*fYpd*<)4xd>L?&j@ z2-g4g~DOLfr!V8I{b-+T@w=M4&U}h{ZI}LIK4rq*d*Q8t-!krE9Hi>%k z=4O&YC^a*b^nCC1TE(guUNNY;jsu~Wj%97o&fYStX}55VgZ5!pzVOUO9xV&FalZ$D z^PlCwI9tb5diD$mW1o6tq^)*!qrmNJ7u9uDokxl-*1Irl=F6pcnRJN~PdErgzh4z3 zmS-nVLiZy~7Y@oP2GSr@bbO9Mu{h6A{IWJkU`!O9s+Ot^6>Lndb7X>?RUW)#M0YM9 z=v3!rqDf?ThD$X~O47|`;7H6I8vt76HfauPxf+`zn}x9R=uF3YPpT3MSCy5J6L4!~ zvsNet6un_QC+$!3L}E0P7Gd3oQGKP(%|sg9n1Z85CYciN(xv%w; z57umubrz39nXRJ$-sei-d|AwmZ1j^Mp`K=n^fcW9J)Bc7Q;UaHRt`vmfF7~qVexc- zmkCB~s%w+;jKSJ0%l~B#{>#^e5&%f-$64(15? z4wRrOb)rr+OEjhmbqDFW3~2TlM^pHL(DEAnbCI-J_H+wfPG*ylbE}0LOQ=je=@1c3 zTw8*a_v%;69E)U7hny8!Dv={wkC-MDQk;m4W(dNZCU7CO9q*1V=?`R(IytH_H5Tta z4#bRF5tvt5m9lbj6v(NBA`dW?jhOo5FRQkcN+GaaQB4HEHX_k9s!hS!meZ#?;mave z-(MxpjFJ*XRbgWF{^?ea*4MAAk*Wkt-N^nSzWq*TH2aVDuci%`#%LU{Q=oIuuor|C{7Qz~pvsQ9q)2 zbSfphq+x%73Me4}CCVy~D%Mx#t5)G;J}SjzB0Pv{$3& z+_oN?-HpBquB=Wp3r^LxI;85Q=*?lgV^Pec_b29~bh1c$ow=f2nP$~a*a7Rl7pa`{ z_a@9@vrgg=9kz^2(m|r^j9?2-;)(`NQ%blIfV$j!L~feFXtLC;fqz7sCsArs;g)GG zA0RFowGx9vYbUd9p|^=0@*!*7i~IGBma4nD5L!=3N1q$*$M<(7dOOVFSCvcEr=X4*EOJ+@5@q zi=}v2heh!0NCX%C#Q~X(O9srDAJlR=;zb6_7WHW(e1^tDU}EB&-hMURigw)aU)T;fh8gcplE_* zqGkC2snvl>gL8LYOu89aofIy0a2+-SU;Pp^>c$}6E{@e1)wga+_%hwwAHyJxzO<ovDBnX>$)#uK0AC z%F#Uk4s+l;<|9jLi*k~;$atwbH3tXY1h_mApRug2SE`VcwXguMQpqUN z-NT5>oAMkYd9j;dD#{PZj67&K1Xj#umjmvBU{-jv;ebxYU|vnMvee%J-H)v+@Xg?7 zG9p8{4JjJgeXH70(9xXYE8B)mE!c!3m^fxz97PT5o;>R*(n2dDC%|wl);rg*V2}L@ z4vm#n9K)tgB0G7*ngLTPQx3V}7zc`IPgX`|Sv0z=D4&sF;Tr{F9XW6ojDyQ_sI0tv z&6}Y^4k-S`6&wPi2HiMEg{*yIY#@^k64EZBVJ&0=-*M$RC32(t%5%!b9@L4;D-E$i zA}SwLDA&-*&a~zhQB2KQLu$-G+F(cG0PmG$u(+eUdtq^YYJ6&*b3gwucS>KmTf%Y0 znxJ$!PfNI)x5N~!uTTLuOzp{U~9UJT}DHMlq^81 zaK0q3-|E9Oa$%}_9tfAY@-fM-Aoq7(AE{PY#x3^JtsT7t^yvzg-g5IxnX-r;AnK+~ z1+i3=@)QsXsm)rnR22=>1iP=?#+E5qg7Kf(W#Ct4rp^MLD~By`)NV0ECb(O=D7ki? zwqik$>Ri2Gwdb*y>k=u)jJa7<*8lYc6}Px^5Fm%@pC;sx2IrboVuv@p2}R=FkV-h% zYKm`*6_^LXybUFp*lfZ6C!J(*VU%j!d%K?Q=G20HZ35!O;wNj?kG9u)lxTJoKa(|4A); znGPaX^(wN)E}(UlJ(bpE5+=Y!GbWEw&m)qMFxoni+LDXGc?imbZ8|^o7_1{pD$SjI z0`n%;2kA0qksYv8X*~I$k*iA&mLBGDa%o;%AY5JS8$Bqsi-1Is&qBH&wS{tk7^SQqA|&7`4_K49m?3d~cs^;A!c%`7h39co3P!X`Kbl*XGD#1W187mW(J z@W?fdV5n%ok}bEgME)DWYAW-qvlrK5;kIMm63%cK_CKut)9~T?SKjKEo2gFYIs^ta z@!l=Y{CZdFp;zFszZ5qv^`=dTEcd;8ET3H*T*ZC`QU<{yvmws|i-#(7#UwkFP+Cgj zS1AuOhOA@NdUj;uNB{a*iruVaA!s5`WW;U;QjnBPbYfGkl=`xQ!DMqEP;{{QQ+C`$ z%1{?u9kU}+;nA8$0uOQ0nKzzVC!CYWGY1jUr6*P+B$YJfKN*I`=cf~PTRmt(%i<6> zyK&DZcL2e}X5GXLwM}qIGeox|Jz~d_IG2~L7LpT;OLqIP3UZsq(Q3yv*Z6)Hz4YlM zE~cL0*wIUutm5dE%E9WXbuZ1HT3m)nmyMjMycjbgO>#CZ6#@~Bsi;FIh-ItmIL?W@ zcolCJ7GX3nsgnS2P0?l*6GAsVN0660=L=$9GhFOAI6t1I)KyJ*)Si)Rq6wV-LvJky z8{nqf7MjZa54uSTq)&*HZw&>0N0WQ5S$L83TR3;W z+308ep-}qz^_}=v8P42%@E6Ttu8j3B-98A(=Lk}o5_j~Xs&w4;cToNNbQZW4B{Nqq z>$C7dRi@|0Pc1T3as2ejN>{JA69>dl>#dxFeT^<%x$^2tqsz@V&TOTR7$n$H)zxgo zFLWK=wZ|T^z|G(F`6WKi)E4-_N@9)AknURR`zv0Tdu#ghaYG{Tz7Q5`}S?!*Nh$8vPpNrIf3IdbW}CJ*7Q0o`)=BF{iZA9 z%5TThI(o>@sx@U3mT3rWLqFtL*qZ&~)NMu17&fE)??vnsG~ER0(DP6V^LSC%mF*Q$aU_b|cR zCBc+f@#^HbSNF?5JlanQ5-XKeq3%;%MQp=*Cwe``12!67)5XbI4sxoVr+TB7W_*%5 z9hgxOkVHoAti`Jlk5vJUl4BlP&&M*1P7X}dG}4xLY*CY7M4Yp=Wh=&iRNd&+I+p4NDJ7ld)wk=^_EtJ1gx4LfRUf@Wgk141EG~45N+WLFRiC+rtKvJh5e;@PNWEgq^%O`P*bbzU z2maSd-058H!p!z@X`CFPP$Oo=GTw~e7?r1iu70m{-FoYptG4Yp!!WMJfT{0HjvGLQ zlT6ZL)`wThUanW+Z&mgt4(Sq%=xmI)KZu0UyJM%B1P6y#<8|Q1f%lyseK@}5^Y-MI zG~;f)*AV8dgt-(j$-vVi6TX=5waoX$fv=n&eMlL%8GkYJ>zH|-8%Z~mGv{KaBFO6r za%$ii=SLp|kY)?H;SIJj8k1bNxOYtN5f*`f&9qnqqvh@d}2 z&>aI;pC7HX0@Y=1iGYt_Zzfppzzzi~Fa$1Yi8zYUbP?<=1REWgKR@~~l$P?O;K7R! zZzaSh2EM2pP7~uGybUQa+YjSq@Db|<`>^YiWKL20DqhU|cH;cNz{i?$+yYi&=65jj ziw0hHe)OThTWDz#j}rmjNq}bzyhv-DR3y9$DTz?On;GASTI)XNBxjH5uZZ(K%=+$pqzC-7D+ zHNQl&nVl{BCX&{q9`dZB4Wz3g%Ni1o9BmRDIj<-%G)G{hH_>D!*GODlj*)?TfAfNl zk83Jku| zLPzr0+Isi^qz2oKe-e*I_$mCI82x;}c4Jr*bQ*-&<1+{%*uAN;W83z}et(Owu6Xsx z7V7VB5#~bZWDNmHycCU!mcfbi)wJGv47nQTvG(rQfddcAN!(?Pz03Q>Ux82_n5fsz zEH5wh_4b}VeY)rP!b;C#I1Zo8WNiVLoc3Nv4)`9|Qh{k?Gty56^??Uv)MhY>6Hr17~uh!_vmxFBivwcKstyVyj9?8U^t-Mp*i%OS0D znrlVE!?p{aWI1I!iLR$RQmr*}BT9FKIB^kvLigDrI}t%7G4ZRxvyU}i-B$-E6;6p- znS>xPQfOtKf%-E0B3`T{6OY7_irW!fkWdG@Ic?fSF;^uDPbr-Y%&2Z8K~a%2h7VK9>*#?yyu5lqg2HY&p^L`79{W?qE_?PqN#9Fp2C+3I+`IlTtOMR84)+JFwdzvs=cgsd5I5W~G_nMj%$QD|c zh*g1%P5t&<-ScUb7yMH@)%|PXzPV7ZRrKq%m}o4#kjB71;H!kfNRyuRZNq0wuD-$ zClig7#Yqm;B+!E~PUBRA@QTD`6e29U3MTh6C?zFOMSXIM%gxooZ+Y?lSZ>?iAK8@BcU?07Pqhu}7 zUX!&qRwETw)WHP}{zzH4!=hw0UX+|0XgG+a0MZD2OJyXMLiVakGp^yJVB9e!oU_$o zW`PHoY|d)Y22z@!aWqe0v&uFvJjt3#nO30CGRSU{nZEXxZOrAPafB|Mt6&1Tsb>Kv zUT`%Oi!z0klrpUn%xQItVPA#f5~y#B9=r)FMneFZce=<}?Q+dpT4(|qC_u7;h&9IB zeQOJ^F-R;v$fK7j!Jc>#BU+R_cjB2Lm6~J~xv?fAi|ILHPA|sBJ5E`IpZlx=(6+_N zSA1ZclG9+=%WP~*3&;#P)q{$e&WdWJM5Y3FNoTftV+$8%LP;(z3H4d4;^(v%renEx z!}MDO%Go2HGxsqg2?fC$7FQbCF__?H25=;i+FXY~LpiufdtIS>_YqzfpB|D3> z=~@rNt#fNuBuFL4=#9|B^6di@+>B+0n43Nsx9ls#`}+5cO3K10B08 zyQ(G-$GGNa=kkiM+-CQAXY=x`Yq~k2br4+MB}MT_cyUq<#1w>yuHyNzCLoqi2q7k< zAF>Ln76~Qk27uurqtkB2An}-Ct&)+&F9{@AoO?GR6;P=uX3)u8y-X;{j6a&9jS$6| zE80>^>MI^dKa4twuS9Y>`K)c?(a7BfWeIGw05l;UfpFRd^}k$n(}aGdEZX@|`sxJ4 ztb%%tvshJCSjn=Fd0PPHoMc*Wp@+{LvR z0TR~e49c*31dyt0IlfE|2E*`@R==vpRdwjR3#;#n#4SYIA&rA9vAmuM!BIb7t>ai0 z(o_yi^oHh!v}Sd7G88NA-#I91tz8Q)rPD>Yt(sO_#?4%{9pUQr_FVa~m?XlN96lji zMuKGQDdtR)Ix+yGb3SvvEq0WTNR(YfJWx9;vPqqtY&o!Vxii_Vb__Q;uO5f)>#?p; zdHeO5&;wN*xu>1cbb*rHj*Lqhv8wY>b?k9^9;*4FXZPX)+6=e3X->|kWGLCU7nvoX zh~}UueE8Kf4JH=wzS%`_t&VZHhHWHaj9Nlot(#XhJ%$jdhB7-^lsD@qT&0=iqoKCG z=<{gm=jakot%mS;O*<>2qob7}&Z5P7t36ttZrZc!Ml8n3os@@k zpjE}F_bw1iU*!-CatO6AZfFM6s!RtLdWH(g3a{n#Rc?@ah_^L?_SEvAruk7nHi>Ry zG)V#N(iIk|)wa*(lh}>jxhmvBRnxg#hLL>E0xg+`j7h&*T7;8!5gYy_(gO25P2Val z)4B}9Wa&9@X!ouIIu2@`a33TPWZ2j*$23UTPKAr(Wh}$*xx;mJf?u0qgC+ujK{+{9 zy~ss+801X9jGc!yw+7icnUo;k6aE>~wVK#9&F~fOWyV@bvLvk)6#20h!3fIYS&gAS zFjtwhwQ^+k_*NKM78U7+pu}+-z=cV`GO!x=w7PbJhjN#xdC906fbxuW(wuc1ozgFS zL=6|lp@V907@QtkSUg?rn3$TZcVnfkyIu>>Y3#O8U7;I`bhC37u#erPK+u6ly_eEn z@6|&zRH&qFCPPvMOjk$=WH*VS%{vA?Hz}4VVi=be3kp@bFZxB?1Z}qB&g|?2ZW6oT zdK4+AmcqH(Y?>4gN&uNrHNWh}CNl=q^aH9VLlk5nE}9DeAS*~SA;I8K*kYDtb_@WZ zHiv6Gn^~LWu*{*TpnKSgst&yloDJzq-1budV0}fhbalH3yA|Dc#gE1?0~qo~D2B=E zDqy0-?{J^VIxj_8lrFZO*3MKnX)hjQ1|u+kqD7KXm3*tNELp4@X>F@YQR{Qk@oXso z#NKbsQ}ZVkbOlClXW3h2L5Px(3XT!-)TFa`4kk&>r|h1385uHwXdP(vjUGC0 zwszY$ZKZ(6Tm@(&qCzw3jwK5p65yCA0xRpFln(8Wmu0bcYxxSASSHA2-!61eI-B)f zG#BhP@qh%kwCSeF6F6A`XC-?N(_yev_Xwg3o0URQNk|6fgtKCLiQVo3D<(Zrr}Z=?l&iJc zikYJFQcPDF`3N~?N$RxY7mN@h9Q>^`v@94}U|`_1HJi7s$8k#aL!9D7{mGCp|eUip{alzGkZ=dGXZBsr? z(mEwQ#~WEC^d=p6r);1VisuK~2yZhf@I-~qr4F{OM|Y zehP0Wg~sDb2DuN9wV$2Foh7QA#1xh}X3@)d$Am+%w>|rX_~1Sm@3|N$-S+^!LzX5& zkn_Q92x`M<^S36&_VJL`SzB0LYL*d5a3{(*4Qc+q$gVOZ6}vZ; zuKSddacD?bu1vmj4n?Um*yQiKAlXey$(Fs-Vog)asHJL75B|qA%#N#JL@rJeK6F6_4TaH74OKJHQ!Quj(TK)M4(@TK z6V(iA8_E(BBF7BZU^2F@ktr?!4e6w5b&herjTiuGaq7r(M`uckGUv9TQOZd*E3ZX~ z@5Xb+q3?UeHl6s;7Yc`tc=e^%7?Yg-WViknqS+=qg`0la`;&lODSIcc(IR{(p&EFaKp5KUJt^w5~cgTfj z4moI|jv-MGoJA@_rZ{(WR!Dy`VNSiMs`?<)cgWwzh>tbZQ?%Nnni@i^K0-y*BO&f1 z^Yxh8!r&tN^RUz~PPgW%*+rZjqE)_gD>2j+En8EGsW#LGVaZg6m-d}K-`%bhg+-W4 zIl2JN7kTXyuU1H0J|n=|!a)$)9d}~U@K)vZWJxHpY*A0%nI%Hy^t)?TDUD#NFXzOaOQO>yZYH5scS z9pCW&-;FN+w~I$64KfRG_akJZG!JSzLMhwmB6b%jj}6TGI+FsFQBfmh%afYtjtyT{ zj*dA^bzEki?N${XeVC{|?q3q8?44ymiUxHgZD|xEh zeIJMl1LtkYJ}>m!4Cm3fnN9<7ZFN1KSfFD}8AEo1fz}2`WF`AVlhRxsqc0Q18;H0b zHNBbS$EaG`Y4vfOkD)Gph4v=;v@U6g7b#(~tAw6dHGF7EB2Y9%e4{oo$w|I%C&>a& zv$eX`9l!_UJ5Mk0mbco(BDRCJJn0x2R2+)Gd;NkdmP2B#?}aTR;T}>IcRS^_04Up{ zfF)ahyv`~bCgl4M6~af-b*HR2DbEyYP7InWKsDoX8F?SN1``%Q;`g%DAjEI8ggl#n zQM~2jS%4o-mX^)LveTBKE*{H=-3f52-wD=tW8*9a$!Wki0Bf2uOwK(niCF?(mb18b zyA5Y|GZ7M=lErp3@-S9Gn&e}u##+`-&MqzSLK9yn#{3jJc5v~yWD$H5v}k6brg9RB zcBnTKa*5MMt4HChfKX!(cnZ2BM&N8X=&T$8NlZ9pM}WqmGk6>GR0Iss z!jo0&Y`1Ezx3YwMH(~v9bx%(mjs(h|^J;y$T2K-QNd!xK$XDs)*1=dN|7E)bm&cFW z@VeT7DwcBANr%T7^~&lZ^02&werK_7q}Fc1#6?)NSh%YJ650hVXSt)XrC6(jAh63( zG_m|Vji7E9b6-6$=dogLH?kRL)1&i)10U***myeZydCOT$(*N2+`f<>IgNuzvC zesu&aKkpZ2!|&8A_A2*P_FCm-rk`VOmgoPPvvQ6UwgA*6Y#qeMu|XaNi$h5&x5+jD ze($|jRo8XB*LroY>kZdp+B3_0k*>Q#yPXl)=Z8kL=9OXurGNBdYU?x5*<@;*Dm&O|eV+LSb!sx3n+$bmS`>wpSc9_;T@-s&+Z z&CZ_UfD?0Jz*6KH;FijEDVe47-vpu~PRf`3&dUOx?W&pC(=iMpl&2T}!&Tz`je)x^ zg}V3MYoS!W!vXy^;K^>PR_kpk{jwk>t$;}&=TK|zvm#-P^Qj*jEVeC-ip-){Nfg_s z1!6AO_RgVm_8dHPaF0!acxa|cCU$-uFAUTf)nXH~@p3Of)#C%LD$YnbjGf9KMnVMm z-jAE!iaX|wgl{Le{0nZ=!@!f{L`KulM9G^UJkxLx5IP-vK`uExhz38mF_FbS0z<`n zRwd-HWUkLFuHYOc>A>jV=(s?+goFR}MiF{tTn@x?6CmsMf*+9BJiy_QlZ-i=Spd0w z6a!ffz@M8viB-q0wiSDRuPF9bAryZh>6V+t$)$rsGQXBOp*qx#M^!)L1{>YBDVIA_ zIO}5~VBB9stYTB+xOS5?WH9NCq6d4??wEs~f-O)bl1-J3{gv&_)hH>S*EN}?Qb(`V zY2aFAjvvoDiJdICh*^RdT1s@`l+2J2%HYwwTJ7)b950gM4v4P0vI$jG9-BLEg$s~=`I(5U{Mwr4H#j6 z{kSP!;$Dc($0FMv0VxLVOn`?pXcmHpg_SDalM zIyJTQw4B}I3BOTom}+*itZ|O}Knf>Us!Tv9;S^a|rt?cV-=rE(X}~a*QHHm04yI6< zIhy^`k|5GnPJXz1wKI>$YwU{#l)*Aa{ zhHsh)bx($|R?&9SU;^oaDorE>mjTE=CiTFr@4Ru2fk5@^D}yUwHfPY#z|*q%P3$f~8{zp%)Pv#SvqEr^Q76Cct;xefVnjQ)bXbNd3WuduInIBYG;-y=(fb)ITXKAmu3*R%iGCd|Ng~nlj8fy8HDQhEjFys{i(n27Mn_5%3{wZ-FtA(LBdv(%sHrtk-Z1F(*4#3@`X?Uj zQXCV_jEj75_l1Jn)_5)7vRaDoY%NI+&0)DdL1hbWH#>{pN5;&C(l$!pv5%%fHGxs} zd6mx|RthswCsu+>f5O@ZHmNPn3#d^Xfee|YJic0CdaTpUl;9DBM4s$SjPCxP%+CXoScC{pZocT@d^vu5^<>>Tz^&-w!(5(?WwB6^#9_?tOx2k z?(Pz$rELT@LKz;S#x=c<+qrGK6ToC&Q5YY6&;^mzGAEWMhPfH6?Wt@T5i)zV=mVf$ zQ0{P6lZ{O>pVO0^Wk|`*>S!q3k*(f7u6(;rFb>6O$Hf{MKWRVENu=apPaTd47>%$g zSjVISw0<-~BxpQyvCETt3$R~lmr><=gVdyGlcLn2?piB37RZS)oKsE2R)cio9x z7h6?DGv*RYm8S>MgHt`~^|84nvn6oe=G^i)F383(XZ{2ku4S=I9lvw+CFLz{+lzh;I2Kkw3f}v#G1SffnI`12ps4btC^`z6fn@FO- z*_3*o_)-RX0E==HRsuQ`>RX-y`D3**Ca`M4iI$9zUY$U4-l*5lXn7_PSk;kcUNCB| z;}~QSwNe_rJrfypCn1T74XV`(c!_77ZMNr)d9~}f2#{IgU)G>FHjMn{Cx&pu>nCL8 zOAZ8$ZC6CB?-~%XNjBzURjpVGL zC-liWxA5Cf;y%}bI(781>$Y-Mb)b43edn|T6*VcVuARBjFy5vW$dPLGDzqqoB(nlm zuOOSytO^%ouk{i0yad1V&b7X}RWiuWa0UWr|s=0*E z@x+UW958(>h2W|#J$pxDQu(RM5;U5?SACh5Y2zD_sj>{6YYXGK%{RGGFTLLoG>q?i&s0~&ctEWXn0bI?8xaO4HxP9OinkToE9DXH5_p3zrs*48S33QhL9s8+!B*Q1toWI7LAH4__ zJwJMXkM#;;9?)4h(=~i5&Hia-|JvXKftq*18vhyF8OiiJ%reY-ev2)lVHbWkMfZEm z`~HDXDoJzG`|$hBnB5@$2Y4O);6yKw8q6~)bNKX{y!qnri%u51Bms7CkY-t zk+Sf|X~xem<7d|me$!~C4ciNn$%10|6K2jT^QU+nxN@M&+n7I^DEwK9`p=1a=Q?mi zC0AQHtgaQs{ug=de@W~c2d>oXt#ec z{1ocJyLydxSgV0PQ|mb9{TtTcrhx;>mmI0X-=;|aj!3_`Zt%e%Fnf*>Sh*7ZKF#_$ zX8qJUP+94aY9&3=Cj3L1|MSd$YTe+Ak)NooVTSr2)2v@$*7vSM>-4U8Y7))o`tG07 z?ElQ{yDx$|QK?9_&4qtSGky^-1Ajd5Iqk+uFxCIzUzslxh%YhcD+XSjb_?b0zvVOj zJ2Q3-Y|&fJ6=jbp`T`UFgIRYE?8~t$-PaS@^`Fc+I&k~>(R)P3hA-y}{tEMKq4s(( z@-+3(hp!UE<>kNd0u_cncYbs|=^qEd@U=AGe>2~XyAB?MrsZgplNOc3|4H+Io%tVp z5xS-K9V zjCLxZG9uVYDACr##cB3?GW(0y4ZZ=5QMDCK<8ZGu<9cR1cGtmriq{yRc<-HNzl7P} zunt{Cr685)vSzstau2)`GL3uK?~C6pjfwjqapwAFro;U;g{DGrbiY)SC^1dO@&{;Y zX)q2C)C5u`?Y0lf^5+NU2WvuU7=DO;FAh;0$--qBvb@r{Toc%wAoBtdZ%$>y6`DlF z+H4Sgs3x=8*5{?9hw0~HEo7kFplKvQZU_hu*M!TEknd~RAoz%^xOB*Sq<+pUx4m(I zt7wweq%fRq)HJe6YmythIW8e) zx^jK2CS+n4@1PEk)1>??;Tru&j+7N;pC*!w)(1H-g~u0Qj3=rDua(4=^Czx70;SAW zE}flQ4C7~d=&_&W9oqfK^1Nq->+ooV>+yGD^j;U=Z>h4XI9ox2Vt5k+CpT21vM_cb-nB+C?oO5G^$Zmn>Vi6}3Smd2vK0O|4kFT6v zT#+3Tp*DrtL6}9XFZ^MMvRjzy#l##|8Fu9Z4L+^Nwl-Oku7!DVb?~M2b@aS@X9-K% zv-KHNYl3J9u$MJBVl}AjT?Ag-iM_b+_=;VeYBTxD4)=^4(5va`um_GR78p@&L^aD9 zuiSiawlatHz~KIm<}J?}81F`yfsWJ_c(l*=^kI7nE^yq6k{I}W^ZwzR4vh>~b{)K> za`UdCp%NQ3?&1C!97E}Zvw=w8}=XAKYR;a z9eei=AKY`~NM-M#Aza*bc-PSI{@o)7b`4byj|?3?bYxFY1vgx=QZ>M@LR-2;<`;RJ zs%?T0Zr=iST4cAx6hJg#=?$4}L1`)#vH_kppl+K>4 zTswbUemnv4hlOLtx?YEdtOq#}vc(7o?#fxuC)kVQWc33Vunx$#YDcjP;TU!Y-@Ujn zJ$w8xPo)n2jf=bR^l1p@Fhp@bx?NRo^Mhkg9arVhOZ1>A+-M&+pX0}Pm<6Y?+YHCX za}leF7t#!B42b<5ytqrS)4jx7M|&pGptOpJPsr-)OU{~Gyx+*)aUAz=gz-5&rdk|T zJj1`ga;}37lc3O!K8YEDmx@dCXT{k+@8iwUKlE-(FvP2SIcMeruE?oGBWPM-|FZ+F@ky*4maRaGIiRG z*MWx*^yx&$bCqWoH!|NN2e#?tDdv+h1|M6Yo!Pl^er4o-%Zrm^T(9R+E!HZ-O+efT`-y($z5^G{Tsd%$neKsg zGdl+!FmwID_L-XoE?OD6$Lu`rO{s?`BHPT}H$5v1@W;i+o;MT@;Mc^+rF#21mhFIl z8LF@z24j|k_%*VAnxpgB)Z%149MYt47*CWsbLC9;%+8tXXKtzi;SWe|4jkeeuZJOg zXoMq{_x{Lz74r80;<12v!pu!G`&ULT!R@$u)iE12EFdESvJ>?TPvXy!4Lv=*^)T6M zdcJq6HVKmn;o5Z=Lg8lQ8F^SCOYKZ;a%CCY4w++=If_UiwDXI&zh*Ho%Pq|E&;k;e z3zHOTW_WV5QqHc-&(!9Y5QdB#N15ZY0*bk1SOrYIwOJkHKs?dd%yO(*9cJf`$96oW zSq5^=D>=ptmlvvlUbeKd%mQv}246p0j|Ge~!$S)2)V_qCVB*6Ii7egk-9Vm6=DDJf zN3QWuGEX(Dfp2kOAvIu2mo9Vc{_7+0xUD8Zlh8N=lC5{q`RmGxgMT|54D-@W1-gZAcbR!$BRo%D9(-)(A;)GeJ2rFqv6(B5t;{_1Sa?1Yib!QvN&8`aIFEFo zd;uPf@It|2C|@KmMU)#)uykU6G1DjOO9;g}LqkXFOY&gP7Q@4_$~3+-vp&288BxSb z@o0pX5o*SYc)7fki(qY7#4GSD)*ZVaH27$JcqNj7_*Hl`!VltaMEq*LjI8G!oQr|> z;>cY_?g7Y^FpCic)B%mO*ei~W+*2Yw7RKjZurjmp1gpuiU&H5y(T!m6&9yl+OTxwu zaMp|fFmj2Dx-x;>7+#Cam_5G^k4AVs{-P!`6<}lCRwl-0I!5jlD<0kuKVDiQS9qf& zo-kIw32%+?L--rp_GWo$O|-Wly~Gyl66?cTkqVl<4Ub0nVL@fgcspN4?&)Lm04N3~ zqKz~69a*oV>mp7)c;U$1j^p;27Z#~_vDpa6!aIoQ;0gAd=ZAOV@4*x7E6)$_lHcqm z&kyg$-`dDMW@fPzzwpA5ORTSozv5VU4^pdwK|oJP*BZI!{P-D++{-fq>&Pk62Al$I zFSh1|AHgRj_q~&j6W%MIYve){{qUpm@q~4NAH!QC{5bwbLcdR5%7pd~@P4G9Fya0Q z0slY>{*x`hSrP^8r|>*sBK*_%-3UJ;5XO!V@+Bw25A4L22F!GEv*p56_wqPm_Ur9R zHS5PhKg8z-S*O5uK_Zi_2Z}8GEK(uHAI75*ehz;@ixzo7e^y$EeIg3<36);R`w1m4 zXnsPeKXawa^hX5!&ntRWU%wzPMN*@_A4P(*=obaY1dCvEKgM+D(Z})9 z2)`mAM&w_WmtwgaPp~M$e*#bE(XZimBmBBR82E4SCC8&o&0JaRAbB;z%CLmrvH{I-&m*zZ>Dt1j4}ooG&>--@Oy2bSD05 zP@6SkF@M45hS9r0sl$y^4}Xbw(D<`>G{RruF9qIHL26c|IjJ)dccT5ZAo&|bqD22& zc`3KriS~C$ccT5hfPXFp|A!XfEQzi8Jf2Rpf5h)b_<}$f(f)}qIilUW^QkMdlPBeH znW#C|ARX()!v2}h4YCsY0})C17kmW)zlcX8{44&FfONfQc|b;1u3a*INl^WpqEa&c zyS%g}<9{IC$@rfF{^b<>D=olT5?l6FJe`dHh2M?vHGwcP{x@H8WW2OfjX*dYx^=GG zE-_g<7WqGXZV*rWZn3)QyV$SO=C30SB>e^+jqpwUB}wVCFXjYcS>1LC`@e$lTZ&K# zdzYJuy)|LiG2JP95ndYMt^#7Dxmyc(7R6@X9qCTldkFZ&Dfm74lB4W{I$=nXtU7({ zW*m3hotzb9srTY@gT#335^R-2G8wH56I)o1WYG8Ccr?N#_)Ge7d8tWekeKyuPGZ-# z_Yq9@RZL3Q`^ih0uuho!Bi;4Jr2_td6#RiLz*!Po_#ix;Ef2=;MtF!o7+WrrmvZSW ziQt#x>1??IzZ>D90%70}<4cY$S9R9TVAua#tsCs=hE)i25DO=@sctwcPIlKkfx97v+uamy;|Uf)e%{D*m$*H6X@tE3 zV&(3WmtwgaPp~M$--M@2+sJ_>rHY>zZ#)ziq zotcAI3Co1*!)-`~pJ5!2Mwnn$=xTb)j5BmvP0HtTJ6LCyFvVwHgVgW|e4NIk5su@p ziv7kDEJ*k`a|I2|Mt1MpzLDWA7=xr0kVNo=){rb{qM7 z=%Q_xaB4!!DNEX>HBcCmJo}+k_kDP>Zy-bD6FK6QGS0ftxMD_Hx3cr?PR@z+_);#Ohp zYZUIa0{1$FE3lRYx69hs3!XP99%bzt<)z#nXYHGi?yUVG0e^D}{+1TtEQ#cJE1u5U zx8XN@tpZ`JeLG)rti7xWYi$XuUB0rKEc+cq?tFbGUK-(D{A3E)u#&0omd|A(u*Ssn z9zIn88&voad;&+`i$^2;DE>M}S#SvQtFZQC z3iok=`xS*Nu$Be4%i3QRJfBcJ%GzI(mvVcYwZD#ZXYFqY_;04*pKJlnl1PrFzyKH4WS@_q9-P!sLyud@tPu5u-ExG!?^1Vz3 z)|sfj#iw>w2Mc!@6{fDkqY*B`UuPrIzcrI2v%G7(x zOSv`9)O#V_nYv!U@125Q(gK_%kr?;E)0ui-{BDH%34}5A{(Q+XwOMD40Xyw-l@(>_ zmlC~m^#OQkga`7Ib=HWNY<-X^ z!aY>r9;R>wzOvkQ`MN>yJY4Z8Umqba<>okFABlA5Yem2}rr;edz*!Qh(TS(?^-BD1 zgsTL?`1&Zm8$O;??!mMKp1PUGVZ1cL2tR?D+|#8<$;~Ip*Cr&ucOtr(&kYF>&f^w# z-hxLXJQ;tToh)V*b{pFp1=#dto#Iqaz5i| z$P(%J+E*t5V#jAT!FhRxn1tQNbtN^@hEp+A}{3zId@-*bm#8N1pMVG_$yj~vn0~v zm3TULUxnX@XB7zJ?yLEd1xxXYmYc3I1MvhddsyR-JScxi;!@so8~kM$>CUoYRw zWMG|%>J5Bqmvyl4MtlQP--HK3S@GAI%A!_b>YEkrEduveg)1Wx_TJX7NmGEVQy>EbU`_s;)eeVF@3{XORC_ z@Mwfz#b0uksyNAnB{0@cnNeKJ^caFq2!>x%3`)RXmzOdDodCaqbPuigO#%O83jSMs zX&PFw^TI+aejA7mo;V|+6`#WI)}a-jMyg~?LMxv5E&OA21zQM8t{PpDMJhLq@wwiq z^*g}T2)~QJD(>h#zb7w6YJqdVj|5*Q{sV#g!xZk1n!;^7!6L}`KW4g%>1XiL2!A3V zCTD*tFU4{r6uVF{n*Q$-VdXyO|C zU*R)E^RMw}gulUGkZNWh7{OYsE{uOGFn^~oDvWKp2_+MPACqvm}Cl5l^S`zv6czd`Tb-{NMPJqjEmlVhu{OLM-Lq ziN>}0f8eDN{*#~3=XuBus82oqW%*RDE9*rpU*U6uLxiv56@25x#+sU^okISCM~Hu>G%MQ`Ub=Udrup*4^b6QpNUQtiuc3 zru^iwPgo2JPjpEbN_&WAqwaWmQ@JJz0Qr z^sg!TLct}@a=!;B@U;@`IOCr zme-I3R+1%m^0{I3GH~7EkPp^Q=L46oL>BP#Dm)tDQTR(SSq-3zI1w_6M{}jSdep14 zp(+J#(gKx>o8_fUNAH(gknU{QD&XBIcuxy(mPBIo;^}PIhTn~_T_B7NJNS~aVYHds zSi2>+tG3%KSyLAOXyW%?c{N@d;W7LKa?>ZJdtj++lV{X35R_WX5af>-B={35rblx=UWl4RXHT zfOO~UZUMhB1>e&GoF$PSd+~I>?!)g!xJe+4ulxCu;3qJb#&fdknj9XKq%uKRdty7try4*BWH^M+VDn)-;7i3{XEO_2h0Q|> zcSPWZ6)wl-5qtxiS$w-}ev%-&S&=E5N9Cp5DrfU8NOv|rS-_8`;J3B_XGtW=F+82k zPr>g-7!wF%^KE>|v3WxaHv2yLc6rRYvI65Q!FfD^7sQ(K6L?HB#?g|&Q}Vq`3f7yb zYJ93g!@PvcV;e*`8p@BvJHIv$Pi4E%MbvXE7n`b>p; zmcTt*;c`rU4!(h@EVx~!K39-EPmw88pD!=v_Bd0|Bi)($0s((v3jU%N;4F#ccrl*N z)R*9QBfL}~jHxf|4BlwMoP=PSU{sLcejBU1ROKa-Xwsx7yTC(Vm61Ow;7x4lQC_jOz z7lEm#wvnN~EMLm)XI+WpV|;Effbem=ftkO82i%$X>&ztjRhan+h5I#u`*nrOG4nU@ z4a{Vz&6(-5)!!5ppHvje!rzjYaub{dzs+>Fr#~g|pHAU_rv*HVA_;yMPnUq-!*9fR z3WTxn59Fm>JWC?@AL8i}@JINK2v319@Xzoim4J~;JF!z>d8OVRYV{>t?3Zk=U1Ofg z+Ofz#;Zt`m9}!eI`qNN_KSdf?_-A-D!k^$uot3pk-*kDl@|S}3 zvx-%@^H=gxCXZA1ubJ-T{TqS*+Z6uqTEMd?w)OAvbn<=Bn1j5MsdA{Vxd+$zk zr*2%Qx!gWsSuYm$k9=x)(XPY$D?@@Ld;woU(tpAOZb|$lNg2D8b{u{p=;eQ0ez`xFy90x8D4xHN74Gv@*lGl)JR*a>61JB}yHaYl)w=esl zL*GOuY;5~qJR0F!_)CuPc&OWY!F(KA)ytx93wL=kkU|Tt!?W2Qdp3uKUc`JG^dNZ9I)Cs?xZ8OQVSI<>5F;U37=Tm;Jf>0&{A&xjaRy_dX{x#7%Q zk923|y#@S|6#PCdz*!PodS5)9nfJr*M!3H~7&9;BOOBcMb!Mv4YIl%g)mYvG@H}Dc zdLVuyc#}n#PKxYOBOn zOO8W0uK@}V-OWtxZXU1HE}vLImij0>oljl(-3V0{1U}JViF~pmaM&-q*CqmkBAX>^ znIfz{k#FI1gKU9xZl#FAR-}Vx-FP5=6Mvm&tjUG*tXJ@Ci+E7O?ebEtq4R79(w%3I z7VxW6@W-?OXGv_}PCT7wkHzmsc$`2O&#vK1j%OQ-JY&d+F|eCwrDY4$Yv@hZmR0D( z(;4`9{BDG6St=OF!x>5pWO=>UDi`$1kLzv={lo=oT_=!bYO!f7>v}#njCKNXk)KWQ zh9@99*t-jlMz{fgoxQB*g|m0J;JGp4L526oOS!_%-n~e7_U;q#n^N%oEx=h4+xtX3 zoxKD24R57D7<&i#l4I}AB75zQ^&E%07jdCvZMl0JI_&)Ha`%q5X8>#h>va%M=lLQ0 zZiK_E3V42PGoD)|3T!`mz1E|D+oPl&{X4cDyDj_xivVSZ1Yw!7Bm=8(gwGA5eN9B6 z{o=wfus}ja@Ia6${{fE@*BnV705bSxJ^WA?2tO4M)fiSHdK|fS6Nw zG(t_1)i0;X)A#}lhP7OoaOpWNnP)6Bqr^)Z19iJC%n}&nJRv#DLj0f{7+Fs z08f}hGO9R_MEQVEm z4xbxFuWX_$njsF)MSe8nd3Yca6@Oh!Skns^lkJIn@#x@oWrI~^`LB}FQswZ2_yUr? z8jnVJjU=ba;kEbzxnNy0xpgB#wyWi{$q_pL*Z=RCQHNSNr`_ zZyoRRe9n67t+(E)ie$jnDGf#7lW-p*Yd%nMYIB*$j+mHLP2f0GcHCG;x z$`6{#-ATDZeWRi5o#LyE%gaL~h3g*{hPdk~joLoKvTM#(3HdS(zxOC$FzGQAP496m zZO%~d&U5Ao;rU&_1I2$Y8*#;L&OC|ZHfNp^_#eXXr&HjRM7y6sX>;aTtYe0%AWY6Y z$BjtNY?^qL!H>s2PuoI;sl}f}W;j=##~wKL1r$y1ML8VKm6xywxk8OKS6-INub9fb z!;D>Ppl38y=6SD@3XXnFaB)Xd26g;1OaFV~t=-ZXtM@u8L;W{UV9*&$n-|ov^StxeQreZB6i!# zznX<}qMJX+G;K+DquODsLKCRh2Po~0$A?(Qlv%2R+txjj;!P!@0q>n6Kk76MMDLVF z)%;==jm1Y40^j~iDC54RBdEm3EW6}Jxiu9!5$OFJJjjy&puoU5mNrXhSvX5L`rG~q z%O}F~X}|+ZK9h~OB{oa`i{my+{wMIoj-TOP0iX(_1PGUz!_{ zEZL-WaKryabvRElk6uw=T*2l>k7HS4M%~kYZ_rOkFz<@~XnKTEGL9SC@^r$~MSr;J6L)ngU-d z3|~71PD!-*3n*=n*TFizfFKCd6s*gQNRT&c4Klv@U$0i?mp)gRsWH`952X$B`dDvz zU6hP7Kd}dCWyS)%0r}vy4Fw(d8cn3UjaVl4AXB)#34kEf6Hzq1jj^<$roNqrdK2N< zG~j{Ko5@C8X&dUzaomP_3xQ7x!*eNcN}|nMqO_sj3hPa8YeAS$cXJ~W>Md-j?c6$f zfbjW8C#f?P=|O3O-HY|6H<_{#Z1&KCbJ|LkX9~%Kk=u|Fp4(RNanI3AO5BcRm*kQ? zuiLVF+XIAv?|=f6iLtZ+r_P-Rd?(@AIpBfXyU0ddZ5!}iaoh%cH-S$H!*@@CQxdJ- z1Emf4o><367X)DfK9w7hfCmk@bxyZDeK1>{J$|6RRAL%R8|>*=$G00O7s2N3TRhnQ za{?nWcmOezZ1C7#f{lBO=26<-ETav$wWT+S*_#Cbg1iq3eDW4c8)WL*d64%Np8WzI zsJy>y#8tLIJ^;sUkPj62L1Fm8DR4@n#j{b`ARmJDrgx|yOpyDy5eahqthOy)_vZ>U zb*3VRp|pWM9P3SQ4rQmF)mCcnl-6J$K}LA)D}s-Ej%HHgkt|cr>NIxmD1Z>~xhR_6 z(OBAmQ|HbDo)?~Z0T0wJ$VOak8}NP{w*fB-d>{-jrNAkPRu7`I0UyFTCOHej1iZ|R zNWeF@&A9m$*8gWKPL-*Li_*q>80+|A1Vtm>TZT_;BXpcbe1wGX+o-_fexs2TSY_EY zXA;{cAWXEI+=xVbyToYwj`CaZ&wl}@{#5D&ls5DyV!i2|L_HAtUD86| zJH=PQwCKr~^RJR0KK+`o#eGT#Q2y6hcFox-B@;5p@=gW?65|vUc!GeXO$^%8d18D+ zcuos=V8rRN5jVmn#y4@?CdL^8|5h0O?G!jA(FbRuw2AQ@tm6rSAWUL>j~kK12xbgSGRkUGy7{_hc9ufGXVfbSya7vwDVZP;GIaT~Um1^!AH{%Q)Gl4#*;C~esOjP<7Xx*$y0-rzjXICtKZNJKfCpN>FB@?!ZTvpKaT~u61^&-4 z{G${&CDF)#p|tV)80+{Zh9FG*{=F7CTBJw>S!XKm$t~Icn2+Oo@}r1Ob&RU>Nc_wSJh_3wm5DxVmpCvABOLc z0;eQex+6-P5j$ZW)7%ANGGZ5QL^5KNmW;5MSTpOfqZ6I_Qi)wfWHcpq!#;R+3W}z; zyHtp##2(m(l%Ud@5_?MZFPZ8S!YN^U#dcbvZ6>CY2acX5ptz$cfJ#nhncPf7DZLq} z3Dsw!z_>S-HYuoG=Si`*@XQK$pzA)e5!clw#g}p1CdIx2-!BZ`KLt)nH1ztv$hV@lA>p$v~B(&SjV6^rJ>E|$rzm9HkkgC0Sdy| z-A4|1=P*IUy+czd<8YQ;bJh=?-3ff&98^OXk3fMDZ7gjVsaH6R*=~1^6rQ639w<6j zHsXrfFdmKLHjH_J&kMr~DR4@no&6|n7>iiPS2+Y>!dT))B#axhhH<3SC=3)Dg^n6} zYD)2gC~YW*u#VwwN<=6pCWX?<3L5J&dEg~iP;oEOB+40P*)@mle``Oih108`DndGf z0;ASg+K^Je&O=%io?5^IWsi}KxUx2+9**0P)&<@O!^cwKltf$SqqHGifOSk#7laAv zB5p)N8tahZ4dt;)qux>t!QxXlm7Nw2kby#nD*9*c#@;BUw zL~_&CNFuQ%j@|Y0v8C?e{zV;pw15gziyKhdnBIu>rgswsBc_ojw6@m*ktP5~?n$Y; z`%>}F-_0b1*KQGb+-o$E0&is*eL~xg+`A1J#QJs=P45mYZLFzr_E_`ID9ew*?bj0S z6nVc599jdr%N2Cm!NPI47j5 zn)G?S;DwK@y<#d$4IZWl`(2nvu+j7$3?%Pzoz3kuH&*|R>G z|2d66%0}EK8{p?~+y?kh0)IXXe<1}vkfbQ`?~CoJAzu1=?#{Chz!bm6T1-Fzo5YI zHI_EC6f{m~-|}&93+^2s7YXg(un(c7=yst^I>#A!|Gal*1z%DTVSo39nJ=lxMytgz z^*tW2jl%l^{2&bcFcCP>eHZ)bs(+%iIr9l_MyuS3E+rBEZbnf5MG$&h+U=z-NvB5pXI)37@j`AMETi+VH9aW5q_fIy#|Iov>fkD=hRrLj^?k zzbNp@6f6;0=OBcH`uLG;KRbP~xkN9HrJol_vL$3AZo2i{k~nTXx0Jw_4#Ss8fm0Ig zS{9}C+;UjQ2T}xKJhuWjBA#1$lm60R)hl&ZXm-$cws9jhqqr4W`X7RsCN#!-D`7vp zw=xP$0LPN2+e$dy!nNQ`s@Tq%n%`r6E0sqF@E=Mf5h{7JhE!!^AjfdlO=NUh}T~ael~6^_2D-$Ym(3v z9=?n_)hjwPaOXZ@Qn6B~*C&)mC$v)M+^ZH}Y%yZjQfv>f{Y5ul0Di)xR!C1kTWG+( zeteKA=e$CSwUuI9P*lqOJ8mx|rFur13rX_@rQslfuZ@y13oXmXnYudm>(0Ujzf^70>X#+Nk63qPq6(!(IRDE8|c%3lL$g*a=dFeHdc;aax5r#qb&(K zo;~*&noX2uW6-d)&tkxFAYzWbrXgHTKq?;+0-KZd& z#>$leJZ~GRX-@G)^46RRs*!7R<>KVhX*_s{&k<|(B<)2&&b{5(v4!H<@GU@gMOqBS z^n|!=avf$^CMgRaEL)4ruie!ges-zF9Q!MJ*pgEgp62_OywOr+A7n>DGz=`~?rK!n zQo(F+c$yCjfwaNl*cfO}h~L_?w;|g~$+n4*)iV-ZXo$8}BIc=xF6C0yAV-wo?|q>=m#S+xg)QL$JLPa9~3SaD8i(N7{J7onshw zPzGN2g`s}TSfTC=wz0zbCLOt>;yEcg z&Sy*Gq}AxDU6qTm@;k1Ls&q!;xuV#d^Ao~%Q#hM-+eqU4EAkSkif}4pt0JZnd8Q~2 z`?)i4D5a6K)H!!w-M?gPeUDxTdc9zML>aHbb3 zmHt9;I61qN#Qn0-W18}?fmfbd!}Pu5nGvG7!O%=s8eY9D%|T<8dI^3R!c(7=lQ~4T zrXic5WMSK8mj=q1!;x~eP#)(NI%uYnu*-@wuQ-y@s43K4)u^zSqS@Q@(Ru%$yX}1I zTtoSLE5igZG)m}c$9gm>*?EJYSqkE*0kISoOVb{**~Gq>z<) z?XOS@+@F{4@dUbK26%u1*@hg1s|0RIs-x{0mNyIsDuds79;u}#xLW)UEk39fTU*3_ zP;ycQSa*UEeXzpWvl}Q47Vt3GbYb|7%63G5HAJ(Ohz;1lNFD6`xMU(7``lw-czGAPERo4a9(8~4vP}7H(5dY z$xBjgoanqpg2R=7c_iR$K0MLbFeiZ_n-_D2;Rt2mWkhsXP$)OhO=)Mt+qB^;ikJT1 zaDT%atiw}n(C#Bffg_cG4bRAMu~wG5;rL}k{r@^eAEij?K@a2FJxtkny4gk`nMDIWpWRv`cpP+Xg$>g5^b{ozG?)?2ux4$AypC<1Q9ox#_P|i^J{OE$2zv z?kEM%mNB_mX(QkH6_I5{hI_8%QH+OFF#J4j&o!t;CO2Smm+Qkge%+Wi9PF1z)ce${ zazU(B%gNVOD>>(0ZWt=cursVDKgv_sM8Y_Vn;DPFnlA*$7`K>%XWy` z5glTPMwN)I9HjQB38&k)$={FyGRDxTxY1Gw0D)yR06YSKb(dugANr=~p2 zpwa4lXo6cy(IX`d0#)2sjWx$83meXkIPNqYo^ph5D=|(!QpHn?YABx)hVZl+t*R>* zThaZhL;G8fScg}UIrm_rOGEJtbKMzh3{)3HdcF$l3DMhpdD#$+DG~2wP;+((FHqGR zvkIdFa*m9rk8>rBnXeqY{r6wtVQ6g5MOA4LU^TkgXtW^8=7=7hvN=yvv4u*-VU9BX z^wTnSok_E!jb@9KjyG)htOjv*7-QikkUCFA7)jz6U2VcaF*)KcD@`2IO_>7WCo824yK`6@Cqrk3E^Ek6iIO=5Z=g~hmBEbnW;*9M=EZ5swX5pIXRTgm`Qe;Ly3-Ts{6`-h zMZvj)bl+6EkfpWZ$fLrx8RuL@t}~Qts#-c$!;R`d>2nzD9%RDtEhXjv7aF{dEOqZU zJl|Fxo}#$@DMy}Wwzbp!xnVj}nRtqhVAQ-bl^!%i-%%pAK3=JFs^<;Wca@5v^r`rb z$<8!8*U)`0iEg;#Mr|iUcb3xm&k1N~$9Z-M^X&Ud#WUS2;d0|YM9O?>y4M-CexO`T zt(FnQ_6c#N;rXHRe97m@!?=9ID~#3)GK;CRC`>oJKT=-Fk6>6fyQv!)svj#A-Bw>T z(s5(!TtNSytwaoEeNnwp8Ywm+_bhEa=iExFbCimg6OQb)P7i3yxvF`Vf z75UP_8hVj*etd*QsB`Ws27j*NIk@VT7UBm%DL1M<)VZ2QoTs>n#0^!d{o@LJ)Cl~k z0@($s<8f#s4{ft3{WHVyGv!zZ95yZdp?B@Xt&L+XojAV=4LDyp!eiP9Z2K{7TZudu zC=UbR;#Rm;XgDb@w8)%$hq2}7iswj0qdJy0KC0OB4faCC%JU0t6yk9Y(9ZEx`yz#M zl%eS0ZYrM~Kt*0oRx1+uTW;%ozQ7*Pv)FJyML`ryMT$`)Bk*IkC5$3W#gTLJU7PmjDJj%v$+E& zzHUstDw&eEA{|mXcTvTwm5)QRha!8kC7p9N;nygf7k)|nv>=ALZL&2Gev=p~f=r z&~Zl8t0MzDbYQi6kKy}`^08au-+qMVy|!1)IfD+oL3wy{)G~Xd6U|mKn%$_3Y>qf} z%4kQnc+(ovH0NGyNN!RR_HbHHc-uu8pUt_O7T&B>)Msp2N{%yp%`n`d4B@eTy#C>oDz)&{D`8ejP>cS!Q<-=}DC0*naP_ZL z3j@>5)R2T>tbilu{FpSqRhp@w8LQ!n5Shkd+kgP*58uQ@*~aC6WW7sSd2R3qxAcA@ zlYZ_j3#yT1kwv~=5WoIDS!PSV-+s`dInb)-;Enbrna z&fUux^oWAPJxA2(F)vT53JE>OP(7;hsIu|#j$y$3-Jz5_h7dmI&Nn(erYth$wmO2o zPbn{-0!(i5!!*vd)Z}sHU?Os8fS9Rl*}Htwy7sR4y7d-FJKUpL4O-MQA4CsLd}FpH=w>TYu|EZT?!$-TWwrOX^Z8)s z9O+=x%6P0*7#*?=aB|*T+MII?NnTJAKDtKO^Y+HC4c;vpV_%F?;Op%9(tJwH)^Y%X3losD zZtSI=eTH;z8=fr<&)<}X7RlAa5VhlQ-lR+3RRWn5=1&4?hjnX4{@)c&`J!D`k1jME z|4{78@OPX>*3oWC2g#mw}U^ck@V$@iXP1kNm&4G3&$KKx0Fz9tESvf0cu0 zvVQ^ce_$~#Pe_*+sLTJ9M=tevHwN>IJ0fy#F*+@Fbnt>c&&Nh}B=U$b!86voYa52e z0|vJT!FPT@6_?PR6S(s}?p!k1DL>}&qqRT2AW>k7k?46pYUwSQiE7SymK@6{2gmSnHBk=UO<=gK>d8FHA!Z_%+UE1nTDT@l9I@6%*4s%dmt zMY-7XBbQg2UuKh*mmiI0Gi_%>x2n>yb25}M+It%KY6@q{IGA;2{%+ddz0Qa9&Fad) ze8FqS9ffEIqsSUc!`>cfFwqcWpE#Wc2Q%pMUFx!?lCW{*T}B?W3r35MoCO)e23DJanCcFtg9rvyoX5g^;)Tz!KO0}(|XFpGgO%T_C)4s zlv5^_gim$%yM}B1bS^(~8T7i;aCIq{?S@F~?-+|VN@vR0_Pk}7CZsdjE=Zfp=SeheqSE*-MhCHx@v7(CNrsJ; zflU~iV=`pDk5KH}=CjMk)O^AC_}IB65-<*+)eu zE81Q5EB9DN?Jm1V89Q>yz)k>PZpun=iJ{msO2KCa87Z85Xv9{E56=OkkLFL-yS25U zp6}A&ds==Ka%`;}ylrgo109tz`Xb|8Pv%d~ISUEyRxoGI&7X{Kdz90gGvZDqu19ej z0vEpD3BJ^*`tx=)LI0p88GDtH4R&x0J*rB{|I|(L$sg3rxm_kKla-6-UQmNw@pR*Y zYB}d!YP5~Au!#%~m@M>)Xg_G-|u{_AXekpa<{0 zJJr#isyEb&IV8QPT<`V1#9FJsRbeqxg>Dt|jVuU4rj2;hu(w#RIpxuXJ)G9rGg`%q zc`F?5e@W{QskDMO9kp^_^=6=GdNZ+{)VCyz_Vyy$E3LqGzJ^Z13f|t>)3?=8lP1lW zIjwK+;Id2va`!06s zY;PYzm!p1zn9uBe8Jh=;_4h4V8lCU$iw$RqzLmVeqB>(g0@gRqXjH3}dQZ937!+qX zjgd;Pw?AvFisWnHon%oGv#z}Zu=ljSRWJ<|GqMo1>Hvc89mu-Nk2MCncg81+hrENZ zJ=V9Hbip}#Z)PER2V;NJn~mip_XLhKEIZdb1Y1sb;gs3lp;&Vln%#Zey(4!Y#@)x7 z-G_7cD%?GXyN@@!j|g^ug}aY4yN?WZABDBCzEv94BInqQ;-tjjls6Z9n|-V1@#;ve ZTpZ4qheq*@NbhLEmYoYBdBXa8{vW7TlHC9R literal 0 HcmV?d00001 diff --git a/lorax-composer/.doctrees/index.doctree b/lorax-composer/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e632e201bffe5583ad680e99a2c7a31579de9ea7 GIT binary patch literal 6371 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 a>P$V>@;?Lq7cF_MVCngH#s4V>JO2fKM*JZF literal 0 HcmV?d00001 diff --git a/lorax-composer/.doctrees/pylorax.api.doctree b/lorax-composer/.doctrees/pylorax.api.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a212f8b782b311f871a24e1a2a52aec305da1b0c GIT binary patch literal 547469 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

HM540 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 z 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�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 literal 0 HcmV?d00001 diff --git a/lorax-composer/.doctrees/pylorax.doctree b/lorax-composer/.doctrees/pylorax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4a6f5f7fbe758a4e7576a579d36cf7373d8742f4 GIT binary patch literal 427411 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 Li^IO7zWRRwopnHA literal 0 HcmV?d00001 diff --git a/lorax-composer/_modules/index.html b/lorax-composer/_modules/index.html new file mode 100644 index 00000000..81e79b79 --- /dev/null +++ b/lorax-composer/_modules/index.html @@ -0,0 +1,117 @@ + + + + + + + + + + Overview: module code — Lorax 19.7.10 documentation + + + + + + + + + + + +

+ + + + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/__init__.html b/lorax-composer/_modules/pylorax/__init__.html new file mode 100644 index 00000000..26a0aca7 --- /dev/null +++ b/lorax-composer/_modules/pylorax/__init__.html @@ -0,0 +1,469 @@ + + + + + + + + + + pylorax.__init__ — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.__init__

+#
+# __init__.py
+#
+# Copyright (C) 2010  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#                     David Cantrell <dcantrell@redhat.com>
+#                     Will Woods <wwoods@redhat.com>
+
+# set up logging
+import logging
+logger = logging.getLogger("pylorax")
+logger.addHandler(logging.NullHandler())
+
+import sys
+import os
+import ConfigParser
+import tempfile
+import locale
+from subprocess import CalledProcessError
+import selinux
+
+from pylorax.base import BaseLoraxClass, DataHolder
+import pylorax.output as output
+
+import yum
+import pylorax.ltmpl as ltmpl
+
+import pylorax.imgutils as imgutils
+from pylorax.sysutils import joinpaths, linktree, remove
+from rpmUtils.arch import getBaseArch
+
+from pylorax.treebuilder import RuntimeBuilder, TreeBuilder
+from pylorax.buildstamp import BuildStamp
+from pylorax.treeinfo import TreeInfo
+from pylorax.discinfo import DiscInfo
+from pylorax.executils import runcmd, runcmd_output
+
+# get lorax version
+try:
+    import pylorax.version
+except ImportError:
+    vernum = "devel"
+else:
+    vernum = pylorax.version.num
+
+# List of drivers to remove on ppc64 arch to keep initrd < 32MiB
+REMOVE_PPC64_DRIVERS = "floppy scsi_debug nouveau radeon cirrus mgag200"
+REMOVE_PPC64_MODULES = "drm plymouth"
+
+
[docs]class ArchData(DataHolder): + lib64_arches = ("x86_64", "ppc64", "ppc64le", "s390x", "ia64", "aarch64") + bcj_arch = dict(i386="x86", x86_64="x86", + ppc="powerpc", ppc64="powerpc", ppc64le="powerpc", + arm="arm", armhfp="arm") + + def __init__(self, buildarch): + DataHolder.__init__(self, buildarch=buildarch) + self.basearch = getBaseArch(buildarch) + self.libdir = "lib64" if self.basearch in self.lib64_arches else "lib" + self.bcj = self.bcj_arch.get(self.basearch) +
+
[docs]class Lorax(BaseLoraxClass): + + def __init__(self): + BaseLoraxClass.__init__(self) + self._configured = False + self.conf = None + self.outputdir = None + self.workdir = None + self.inroot = None + self.arch = None + self.product = None + self.debug = False + + # set locale to C + locale.setlocale(locale.LC_ALL, 'C') + +
[docs] def configure(self, conf_file="/etc/lorax/lorax.conf"): + self.conf = ConfigParser.SafeConfigParser() + + # set defaults + self.conf.add_section("lorax") + self.conf.set("lorax", "debug", "1") + self.conf.set("lorax", "sharedir", "/usr/share/lorax") + + self.conf.add_section("output") + self.conf.set("output", "colors", "1") + self.conf.set("output", "encoding", "utf-8") + self.conf.set("output", "ignorelist", "/usr/share/lorax/ignorelist") + + self.conf.add_section("templates") + self.conf.set("templates", "ramdisk", "ramdisk.ltmpl") + + self.conf.add_section("yum") + self.conf.set("yum", "skipbroken", "0") + + self.conf.add_section("compression") + self.conf.set("compression", "type", "xz") + self.conf.set("compression", "args", "") + self.conf.set("compression", "bcj", "on") + + # read the config file + if os.path.isfile(conf_file): + self.conf.read(conf_file) + + # set up the output + self.debug = self.conf.getboolean("lorax", "debug") + output_level = output.DEBUG if self.debug else output.INFO + + colors = self.conf.getboolean("output", "colors") + encoding = self.conf.get("output", "encoding") + + self.output.basic_config(output_level=output_level, + colors=colors, encoding=encoding) + + ignorelist = self.conf.get("output", "ignorelist") + if os.path.isfile(ignorelist): + with open(ignorelist, "r") as fobj: + for line in fobj: + line = line.strip() + if line and not line.startswith("#"): + self.output.ignore(line) + + # cron does not have sbin in PATH, + # so we have to add it ourselves + os.environ["PATH"] = "{0}:/sbin:/usr/sbin".format(os.environ["PATH"]) + + # remove some environmental variables that can cause problems with package scripts + env_remove = ('DISPLAY', 'DBUS_SESSION_BUS_ADDRESS') + _ = [os.environ.pop(k) for k in env_remove if k in os.environ] + + self._configured = True +
+
[docs] def init_stream_logging(self): + sh = logging.StreamHandler() + sh.setLevel(logging.INFO) + logger.addHandler(sh) +
+
[docs] def init_file_logging(self, logdir, logname="pylorax.log"): + fh = logging.FileHandler(filename=joinpaths(logdir, logname), mode="w") + fh.setLevel(logging.DEBUG) + logger.addHandler(fh) +
+
[docs] def run(self, ybo, product, version, release, variant="", bugurl="", + isfinal=False, workdir=None, outputdir=None, buildarch=None, volid=None, + domacboot=False, doupgrade=True, remove_temp=False, + installpkgs=None, + size=2, + add_templates=None, + add_template_vars=None, + add_arch_templates=None, + add_arch_template_vars=None, + template_tempdir=None): + + assert self._configured + + installpkgs = installpkgs or [] + + if domacboot: + try: + runcmd(["rpm", "-q", "hfsplus-tools"]) + except CalledProcessError: + logger.critical("you need to install hfsplus-tools to create mac images") + sys.exit(1) + + # set up work directory + self.workdir = workdir or tempfile.mkdtemp(prefix="pylorax.work.") + if not os.path.isdir(self.workdir): + os.makedirs(self.workdir) + + # set up log directory + logdir = '/var/log/lorax' + if not os.path.isdir(logdir): + os.makedirs(logdir) + + self.init_stream_logging() + self.init_file_logging(logdir) + + logger.debug("version is %s", vernum) + logger.debug("using work directory %s", self.workdir) + logger.debug("using log directory %s", logdir) + + # set up output directory + self.outputdir = outputdir or tempfile.mkdtemp(prefix="pylorax.out.") + if not os.path.isdir(self.outputdir): + os.makedirs(self.outputdir) + logger.debug("using output directory %s", self.outputdir) + + # do we have root privileges? + logger.info("checking for root privileges") + if not os.geteuid() == 0: + logger.critical("no root privileges") + sys.exit(1) + + # is selinux disabled? + # With selinux in enforcing mode the rpcbind package required for + # dracut nfs module, which is in turn required by anaconda module, + # will not get installed, because it's preinstall scriptlet fails, + # resulting in an incomplete initial ramdisk image. + # The reason is that the scriptlet runs tools from the shadow-utils + # package in chroot, particularly groupadd and useradd to add the + # required rpc group and rpc user. This operation fails, because + # the selinux context on files in the chroot, that the shadow-utils + # tools need to access (/etc/group, /etc/passwd, /etc/shadow etc.), + # is wrong and selinux therefore disallows access to these files. + logger.info("checking the selinux mode") + if selinux.is_selinux_enabled() and selinux.security_getenforce(): + logger.critical("selinux must be disabled or in Permissive mode") + sys.exit(1) + + # do we have a proper yum base object? + logger.info("checking yum base object") + if not isinstance(ybo, yum.YumBase): + logger.critical("no yum base object") + sys.exit(1) + self.inroot = ybo.conf.installroot + logger.debug("using install root: %s", self.inroot) + + if not buildarch: + buildarch = get_buildarch(ybo) + + logger.info("setting up build architecture") + self.arch = ArchData(buildarch) + for attr in ('buildarch', 'basearch', 'libdir'): + logger.debug("self.arch.%s = %s", attr, getattr(self.arch,attr)) + + logger.info("setting up build parameters") + product = DataHolder(name=product, version=version, release=release, + variant=variant, bugurl=bugurl, isfinal=isfinal) + self.product = product + logger.debug("product data: %s", product) + + # NOTE: if you change isolabel, you need to change pungi to match, or + # the pungi images won't boot. + isolabel = volid or "%s %s %s" % (self.product.name, self.product.version, + self.arch.basearch) + + if len(isolabel) > 32: + logger.fatal("the volume id cannot be longer than 32 characters") + sys.exit(1) + + templatedir = self.conf.get("lorax", "sharedir") + # NOTE: rb.root = ybo.conf.installroot (== self.inroot) + rb = RuntimeBuilder(product=self.product, arch=self.arch, + yum=ybo, templatedir=templatedir, + installpkgs=installpkgs, + add_templates=add_templates, + add_template_vars=add_template_vars) + + logger.info("installing runtime packages") + rb.yum.conf.skip_broken = self.conf.getboolean("yum", "skipbroken") + rb.install() + + # write .buildstamp + buildstamp = BuildStamp(self.product.name, self.product.version, + self.product.bugurl, self.product.isfinal, self.arch.buildarch) + + buildstamp.write(joinpaths(self.inroot, ".buildstamp")) + + if self.debug: + rb.writepkglists(joinpaths(logdir, "pkglists")) + rb.writepkgsizes(joinpaths(logdir, "original-pkgsizes.txt")) + + logger.info("doing post-install configuration") + rb.postinstall() + + # write .discinfo + discinfo = DiscInfo(self.product.release, self.arch.basearch) + discinfo.write(joinpaths(self.outputdir, ".discinfo")) + + logger.info("backing up installroot") + installroot = joinpaths(self.workdir, "installroot") + linktree(self.inroot, installroot) + + logger.info("generating kernel module metadata") + rb.generate_module_data() + + logger.info("cleaning unneeded files") + rb.cleanup() + + if self.debug: + rb.writepkgsizes(joinpaths(logdir, "final-pkgsizes.txt")) + + logger.info("creating the runtime image") + runtime = "images/install.img" + compression = self.conf.get("compression", "type") + compressargs = self.conf.get("compression", "args").split() + if self.conf.getboolean("compression", "bcj"): + if self.arch.bcj: + compressargs += ["-Xbcj", self.arch.bcj] + else: + logger.info("no BCJ filter for arch %s", self.arch.basearch) + rb.create_runtime(joinpaths(installroot,runtime), + compression=compression, compressargs=compressargs) + + logger.info("preparing to build output tree and boot images") + treebuilder = TreeBuilder(product=self.product, arch=self.arch, + inroot=installroot, outroot=self.outputdir, + runtime=runtime, isolabel=isolabel, + domacboot=domacboot, doupgrade=doupgrade, + templatedir=templatedir, + add_templates=add_arch_templates, + add_template_vars=add_arch_template_vars, + workdir=self.workdir) + + logger.info("rebuilding initramfs images") + dracut_args = ["--xz", "--install", "/.buildstamp", "--no-early-microcode", "--add", "fips"] + anaconda_args = dracut_args + ["--add", "anaconda pollcdrom"] + + # ppc64 cannot boot an initrd > 32MiB so remove some drivers + if self.arch.basearch in ("ppc64", "ppc64le"): + dracut_args.extend(["--omit-drivers", REMOVE_PPC64_DRIVERS]) + + # Only omit dracut modules from the initrd so that they're kept for + # upgrade.img + anaconda_args.extend(["--omit", REMOVE_PPC64_MODULES]) + + treebuilder.rebuild_initrds(add_args=anaconda_args) + + if doupgrade: + # Build upgrade.img. It'd be nice if these could coexist in the same + # image, but that would increase the size of the anaconda initramfs, + # which worries some people (esp. PPC tftpboot). So they're separate. + try: + # If possible, use the 'redhat-upgrade-tool' plymouth theme + themes = runcmd_output(['plymouth-set-default-theme', '--list'], + root=installroot) + if 'redhat-upgrade-tool' in themes.splitlines(): + os.environ['PLYMOUTH_THEME_NAME'] = 'redhat-upgrade-tool' + except RuntimeError: + pass + upgrade_args = dracut_args + ["--add", "system-upgrade convertfs"] + treebuilder.rebuild_initrds(add_args=upgrade_args, prefix="upgrade") + + logger.info("populating output tree and building boot images") + treebuilder.build() + + # write .treeinfo file and we're done + treeinfo = TreeInfo(self.product.name, self.product.version, + self.product.variant, self.arch.basearch) + for section, data in treebuilder.treeinfo_data.items(): + treeinfo.add_section(section, data) + treeinfo.write(joinpaths(self.outputdir, ".treeinfo")) + + # cleanup + if remove_temp: + remove(self.workdir) + +
+
[docs]def get_buildarch(ybo): + # get architecture of the available anaconda package + buildarch = None + for anaconda in ybo.doPackageLists(patterns=["anaconda"]).available: + if anaconda.arch != "src": + buildarch = anaconda.arch + break + if not buildarch: + logger.critical("no anaconda package in the repository") + sys.exit(1) + + return buildarch
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api.html b/lorax-composer/_modules/pylorax/api.html new file mode 100644 index 00000000..f9c805c7 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api.html @@ -0,0 +1,114 @@ + + + + + + + + + + pylorax.api — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api

+#
+# lorax-composer API server
+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from pylorax.api.crossdomain import crossdomain
+
+__all__ = ["crossdomain"]
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/compose.html b/lorax-composer/_modules/pylorax/api/compose.html new file mode 100644 index 00000000..4bf6b085 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/compose.html @@ -0,0 +1,417 @@ + + + + + + + + + + pylorax.api.compose — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.compose

+# Copyright (C) 2018 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+""" Setup for composing an image
+
+Adding New Output Types
+-----------------------
+
+The new output type must add a kickstart template to ./share/composer/ where the
+name of the kickstart (without the trailing .ks) matches the entry in compose_args.
+
+The kickstart should not have any url or repo entries, these will be added at build
+time. The %packages section should be the last thing, and while it can contain mandatory
+packages required by the output type, it should not have the trailing %end because the
+package NEVRAs will be appended to it at build time.
+
+compose_args should have a name matching the kickstart, and it should set the novirt_install
+parameters needed to generate the desired output. Other types should be set to False.
+
+"""
+import logging
+log = logging.getLogger("lorax-composer")
+
+import os
+from glob import glob
+import pytoml as toml
+import shutil
+from uuid import uuid4
+
+from pyanaconda.simpleconfig import SimpleConfigFile
+
+from pylorax.api.projects import projects_depsolve, dep_nevra
+from pylorax.api.projects import ProjectsError
+from pylorax.api.recipes import read_recipe_and_id
+from pylorax.imgutils import default_image_name
+from pylorax.sysutils import joinpaths
+
+
+
[docs]def repo_to_ks(r, url="url"): + """ Return a kickstart line with the correct args. + + Set url to "baseurl" if it is a repo, leave it as "url" for the installation url. + """ + cmd = "" + if url == "url": + if not r.urls: + raise RuntimeError("Cannot find a base url for %s" % r.name) + + # url is passed to Anaconda on the cmdline with --repo, so it cannot support a mirror + # If a mirror is setup yum will return the list of mirrors in .urls + # So just use the first one. + cmd += '--%s="%s" ' % (url, r.urls[0]) + elif r.metalink: + # XXX Total Hack + # RHEL7 kickstart doesn't support metalink. If the url has 'metalink' in it, rewrite it as 'mirrorlist' + if "metalink" in r.metalink: + log.info("RHEL7 does not support metalink, translating to mirrorlist") + cmd += '--mirrorlist="%s" ' % r.metalink.replace("metalink", "mirrorlist") + else: + log.error("Could not convert metalink to mirrorlist. %s", r.metalink) + raise RuntimeError("Cannot convert metalink to mirrorlist: %s" % r.metalink) + elif r.mirrorlist: + cmd += '--mirrorlist="%s" ' % r.mirrorlist + elif r.baseurl: + cmd += '--%s="%s" ' % (url, r.baseurl[0]) + else: + raise RuntimeError("Repo has no baseurl or mirror") + + if r.proxy: + cmd += '--proxy="%s" ' % r.proxy + + if not r.sslverify: + cmd += '--noverifyssl' + + return cmd +
+
[docs]def start_build(cfg, yumlock, gitlock, branch, recipe_name, compose_type, test_mode=0): + """ Start the build + + :param cfg: Configuration object + :type cfg: ComposerConfig + :param yumlock: Lock and YumBase for depsolving + :type yumlock: YumLock + :param recipe: The recipe to build + :type recipe: str + :param compose_type: The type of output to create from the recipe + :type compose_type: str + :returns: Unique ID for the build that can be used to track its status + :rtype: str + """ + share_dir = cfg.get("composer", "share_dir") + lib_dir = cfg.get("composer", "lib_dir") + + # Make sure compose_type is valid + if compose_type not in compose_types(share_dir): + raise RuntimeError("Invalid compose type (%s), must be one of %s" % (compose_type, compose_types(share_dir))) + + with gitlock.lock: + (commit_id, recipe) = read_recipe_and_id(gitlock.repo, branch, recipe_name) + + # Combine modules and packages and depsolve the list + # TODO include the version/glob in the depsolving + module_names = map(lambda m: m["name"], recipe["modules"] or []) + package_names = map(lambda p: p["name"], recipe["packages"] or []) + projects = sorted(set(module_names+package_names), key=lambda n: n.lower()) + deps = [] + try: + with yumlock.lock: + deps = projects_depsolve(yumlock.yb, projects) + except ProjectsError as e: + log.error("start_build depsolve: %s", str(e)) + raise RuntimeError("Problem depsolving %s: %s" % (recipe["name"], str(e))) + + # Create the results directory + build_id = str(uuid4()) + results_dir = joinpaths(lib_dir, "results", build_id) + os.makedirs(results_dir) + + # Write the recipe commit hash + commit_path = joinpaths(results_dir, "COMMIT") + with open(commit_path, "w") as f: + f.write(commit_id) + + # Write the original recipe + recipe_path = joinpaths(results_dir, "recipe.toml") + with open(recipe_path, "w") as f: + f.write(recipe.toml()) + + # Write the frozen recipe + frozen_recipe = recipe.freeze(deps) + recipe_path = joinpaths(results_dir, "frozen.toml") + with open(recipe_path, "w") as f: + f.write(frozen_recipe.toml()) + + # Read the kickstart template for this type and copy it into the results + ks_template_path = joinpaths(share_dir, "composer", compose_type) + ".ks" + shutil.copy(ks_template_path, results_dir) + ks_template = open(ks_template_path, "r").read() + + # Write out the dependencies to the results dir + deps_path = joinpaths(results_dir, "deps.toml") + with open(deps_path, "w") as f: + f.write(toml.dumps({"packages":deps}).encode("UTF-8")) + + # Create the final kickstart with repos and package list + ks_path = joinpaths(results_dir, "final-kickstart.ks") + with open(ks_path, "w") as f: + with yumlock.lock: + repos = yumlock.yb.repos.listEnabled() + if not repos: + raise RuntimeError("No enabled repos, canceling build.") + + ks_url = repo_to_ks(repos[0], "url") + log.debug("url = %s", ks_url) + f.write('url %s\n' % ks_url) + for idx, r in enumerate(repos[1:]): + ks_repo = repo_to_ks(r, "baseurl") + log.debug("repo composer-%s = %s", idx, ks_repo) + f.write('repo --name="composer-%s" %s\n' % (idx, ks_repo)) + + f.write(ks_template) + + for d in deps: + f.write(dep_nevra(d)+"\n") + + f.write("%end\n") + + # Setup the config to pass to novirt_install + log_dir = joinpaths(results_dir, "logs/") + cfg_args = compose_args(compose_type) + + # Get the title, project, and release version from the host + if not os.path.exists("/etc/os-release"): + log.error("/etc/os-release is missing, cannot determine product or release version") + os_release = SimpleConfigFile("/etc/os-release") + os_release.read() + + log.debug("os_release = %s", os_release) + + cfg_args["title"] = os_release.get("PRETTY_NAME") + cfg_args["project"] = os_release.get("NAME") + cfg_args["releasever"] = os_release.get("VERSION_ID") + cfg_args["volid"] = "" + + cfg_args.update({ + "compression": "xz", + "compress_args": [], + "ks": [ks_path], + "project": "Red Hat Enterprise Linux", + "releasever": "7", + "logfile": log_dir + }) + with open(joinpaths(results_dir, "config.toml"), "w") as f: + f.write(toml.dumps(cfg_args).encode("UTF-8")) + + # Set the initial status + open(joinpaths(results_dir, "STATUS"), "w").write("WAITING") + + # Set the test mode, if requested + if test_mode > 0: + open(joinpaths(results_dir, "TEST"), "w").write("%s" % test_mode) + + log.info("Adding %s with recipe %s output type %s to compose queue", build_id, recipe["name"], compose_type) + os.symlink(results_dir, joinpaths(lib_dir, "queue/new/", build_id)) + + return build_id + +# Supported output types
+
[docs]def compose_types(share_dir): + """ Returns a list of the supported output types + + The output types come from the kickstart names in /usr/share/lorax/composer/*ks + """ + return [os.path.basename(ks)[:-3] for ks in glob(joinpaths(share_dir, "composer/*.ks"))] +
+
[docs]def compose_args(compose_type): + """ Returns the settings to pass to novirt_install for the compose type + + :param compose_type: The type of compose to create, from `compose_types()` + :type compose_type: str + + This will return a dict of options that match the ArgumentParser options for livemedia-creator. + These are the ones the define the type of output, it's filename, etc. + Other options will be filled in by `make_compose()` + """ + _MAP = {"tar": {"make_iso": False, + "make_disk": False, + "make_fsimage": False, + "make_appliance": False, + "make_ami": False, + "make_tar": True, + "make_pxe_live": False, + "make_ostree_live": False, + "ostree": False, + "live_rootfs_keep_size": False, + "live_rootfs_size": 0, + "qcow2": False, + "qcow2_arg": [], + "image_name": default_image_name("xz", "root.tar"), + "image_only": True, + "app_name": None, + "app_template": None, + "app_file": None + }, + "live-iso": {"make_iso": True, + "make_disk": False, + "make_fsimage": False, + "make_appliance": False, + "make_ami": False, + "make_tar": False, + "make_pxe_live": False, + "make_ostree_live": False, + "ostree": False, + "live_rootfs_keep_size": False, + "live_rootfs_size": 0, + "qcow2": False, + "qcow2_arg": [], + "image_name": "live.iso", + "fs_label": "Anaconda", # Live booting may expect this to be 'Anaconda' + "image_only": False, + "app_name": None, + "app_template": None, + "app_file": None + }, + "partitioned-disk": {"make_iso": False, + "make_disk": True, + "make_fsimage": False, + "make_appliance": False, + "make_ami": False, + "make_tar": False, + "make_pxe_live": False, + "make_ostree_live": False, + "ostree": False, + "live_rootfs_keep_size": False, + "live_rootfs_size": 0, + "qcow2": False, + "qcow2_arg": [], + "image_name": "disk.img", + "fs_label": "", + "image_only": True, + "app_name": None, + "app_template": None, + "app_file": None + }, + } + return _MAP[compose_type] +
+
[docs]def move_compose_results(cfg, results_dir): + """Move the final image to the results_dir and cleanup the unneeded compose files + + :param cfg: Build configuration + :type cfg: DataHolder + :param results_dir: Directory to put the results into + :type results_dir: str + """ + if cfg["make_tar"]: + shutil.move(joinpaths(cfg["result_dir"], cfg["image_name"]), results_dir) + elif cfg["make_iso"]: + # Output from live iso is always a boot.iso under images/, move and rename it + shutil.move(joinpaths(cfg["result_dir"], "images/boot.iso"), joinpaths(results_dir, cfg["image_name"])) + elif cfg["make_disk"]: + shutil.move(joinpaths(cfg["result_dir"], cfg["image_name"]), joinpaths(results_dir, cfg["image_name"])) + + + # Cleanup the compose directory, but only if it looks like a compose directory + if os.path.basename(cfg["result_dir"]) == "compose": + shutil.rmtree(cfg["result_dir"]) + else: + log.error("Incorrect compose directory, not cleaning up")
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/config.html b/lorax-composer/_modules/pylorax/api/config.html new file mode 100644 index 00000000..d523f22a --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/config.html @@ -0,0 +1,202 @@ + + + + + + + + + + pylorax.api.config — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.config

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import ConfigParser
+import grp
+import os
+
+from pylorax.sysutils import joinpaths
+
+
[docs]class ComposerConfig(ConfigParser.SafeConfigParser): +
[docs] def get_default(self, section, option, default): + try: + return self.get(section, option) + except ConfigParser.Error: + return default + +
+
[docs]def configure(conf_file="/etc/lorax/composer.conf", root_dir="/", test_config=False): + """lorax-composer configuration + + :param conf_file: Path to the config file overriding the default settings + :type conf_file: str + :param root_dir: Directory to prepend to paths, defaults to / + :type root_dir: str + :param test_config: Set to True to skip reading conf_file + :type test_config: bool + """ + conf = ComposerConfig() + + # set defaults + conf.add_section("composer") + conf.set("composer", "share_dir", os.path.realpath(joinpaths(root_dir, "/usr/share/lorax/"))) + conf.set("composer", "lib_dir", os.path.realpath(joinpaths(root_dir, "/var/lib/lorax/composer/"))) + conf.set("composer", "yum_conf", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/yum.conf"))) + conf.set("composer", "repo_dir", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/repos.d/"))) + conf.set("composer", "cache_dir", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/cache/"))) + + conf.add_section("users") + conf.set("users", "root", "1") + + # Enable all available repo files by default + conf.add_section("repos") + conf.set("repos", "use_system_repos", "1") + conf.set("repos", "enabled", "*") + + if not test_config: + # read the config file + if os.path.isfile(conf_file): + conf.read(conf_file) + + return conf +
+
[docs]def make_yum_dirs(conf): + """Make any missing yum directories + + :param conf: The configuration to use + :type conf: ComposerConfig + :returns: None + """ + for p in ["yum_conf", "repo_dir", "cache_dir"]: + p_dir = os.path.dirname(conf.get("composer", p)) + if not os.path.exists(p_dir): + os.makedirs(p_dir) +
+
[docs]def make_queue_dirs(conf, gid): + """Make any missing queue directories + + :param conf: The configuration to use + :type conf: ComposerConfig + :param gid: Group ID that has access to the queue directories + :type gid: int + :returns: list of errors + :rtype: list of str + """ + errors = [] + lib_dir = conf.get("composer", "lib_dir") + for p in ["queue/run", "queue/new", "results"]: + p_dir = joinpaths(lib_dir, p) + if not os.path.exists(p_dir): + orig_umask = os.umask(0) + os.makedirs(p_dir, 0o771) + os.chown(p_dir, 0, gid) + os.umask(orig_umask) + else: + p_stat = os.stat(p_dir) + if p_stat.st_mode & 0o006 != 0: + errors.append("Incorrect permissions on %s, no o+rw permissions are allowed." % p_dir) + + if p_stat.st_gid != gid or p_stat.st_uid != 0: + gr_name = grp.getgrgid(gid).gr_name + errors.append("%s should be owned by root:%s" % (p_dir, gr_name)) + + return errors
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/crossdomain.html b/lorax-composer/_modules/pylorax/api/crossdomain.html new file mode 100644 index 00000000..2c937fab --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/crossdomain.html @@ -0,0 +1,160 @@ + + + + + + + + + + pylorax.api.crossdomain — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.crossdomain

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# crossdomain decorator from - http://flask.pocoo.org/snippets/56/
+from datetime import timedelta
+from flask import make_response, request, current_app
+from functools import update_wrapper
+
+
+
[docs]def crossdomain(origin, methods=None, headers=None, + max_age=21600, attach_to_all=True, + automatic_options=True): + if methods is not None: + methods = ', '.join(sorted(x.upper() for x in methods)) + if headers is not None and not isinstance(headers, basestring): + headers = ', '.join(x.upper() for x in headers) + if not isinstance(origin, list): + origin = [origin] + if isinstance(max_age, timedelta): + max_age = int(max_age.total_seconds()) + + def get_methods(): + if methods is not None: + return methods + + options_resp = current_app.make_default_options_response() + return options_resp.headers['allow'] + + def decorator(f): + def wrapped_function(*args, **kwargs): + if automatic_options and request.method == 'OPTIONS': + resp = current_app.make_default_options_response() + else: + resp = make_response(f(*args, **kwargs)) + if not attach_to_all and request.method != 'OPTIONS': + return resp + + h = resp.headers + + h.extend([("Access-Control-Allow-Origin", orig) for orig in origin]) + h['Access-Control-Allow-Methods'] = get_methods() + h['Access-Control-Max-Age'] = str(max_age) + if headers is not None: + h['Access-Control-Allow-Headers'] = headers + return resp + + f.provide_automatic_options = False + f.required_methods = ['OPTIONS'] + return update_wrapper(wrapped_function, f) + return decorator
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/projects.html b/lorax-composer/_modules/pylorax/api/projects.html new file mode 100644 index 00000000..eafcd805 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/projects.html @@ -0,0 +1,359 @@ + + + + + + + + + + pylorax.api.projects — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.projects

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import logging
+log = logging.getLogger("lorax-composer")
+
+import time
+
+from yum.Errors import YumBaseError
+
+TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
+
+
+
[docs]class ProjectsError(Exception): + pass + +
+
[docs]def api_time(t): + """Convert time since epoch to a string + + :param t: Seconds since epoch + :type t: int + :returns: Time string + :rtype: str + """ + return time.strftime(TIME_FORMAT, time.localtime(t)) + +
+
[docs]def api_changelog(changelog): + """Convert the changelog to a string + + :param changelog: A list of time, author, string tuples. + :type changelog: tuple + :returns: The most recent changelog text or "" + :rtype: str + + This returns only the most recent changelog entry. + """ + try: + entry = changelog[0][2] + except IndexError: + entry = "" + return entry + +
+
[docs]def yaps_to_project(yaps): + """Extract the details from a YumAvailablePackageSqlite object + + :param yaps: Yum object with package details + :type yaps: YumAvailablePackageSqlite + :returns: A dict with the name, summary, description, and url. + :rtype: dict + + upstream_vcs is hard-coded to UPSTREAM_VCS + """ + return {"name": yaps.name, + "summary": yaps.summary, + "description": yaps.description, + "homepage": yaps.url, + "upstream_vcs": "UPSTREAM_VCS"} + +
+
[docs]def yaps_to_project_info(yaps): + """Extract the details from a YumAvailablePackageSqlite object + + :param yaps: Yum object with package details + :type yaps: YumAvailablePackageSqlite + :returns: A dict with the project details, as well as epoch, release, arch, build_time, changelog, ... + :rtype: dict + + metadata entries are hard-coded to {} + """ + build = {"epoch": yaps.epoch, + "release": yaps.release, + "arch": yaps.arch, + "build_time": api_time(yaps.buildtime), + "changelog": api_changelog(yaps.returnChangelog()), + "build_config_ref": "BUILD_CONFIG_REF", + "build_env_ref": "BUILD_ENV_REF", + "metadata": {}, + "source": {"license": yaps.license, + "version": yaps.version, + "source_ref": "SOURCE_REF", + "metadata": {}}} + + return {"name": yaps.name, + "summary": yaps.summary, + "description": yaps.description, + "homepage": yaps.url, + "upstream_vcs": "UPSTREAM_VCS", + "builds": [build]} + +
+
[docs]def tm_to_dep(tm): + """Extract the info from a TransactionMember object + + :param tm: A Yum transaction object + :type tm: TransactionMember + :returns: A dict with name, epoch, version, release, arch + :rtype: dict + """ + return {"name": tm.name, + "epoch": tm.epoch, + "version": tm.version, + "release": tm.release, + "arch": tm.arch} + +
+
[docs]def yaps_to_module(yaps): + """Extract the name from a YumAvailablePackageSqlite object + + :param yaps: Yum object with package details + :type yaps: YumAvailablePackageSqlite + :returns: A dict with name, and group_type + :rtype: dict + + group_type is hard-coded to "rpm" + """ + return {"name": yaps.name, + "group_type": "rpm"} + +
+
[docs]def dep_evra(dep): + """Return the epoch:version-release.arch for the dep + + :param dep: dependency dict + :type dep: dict + :returns: epoch:version-release.arch + :rtype: str + """ + if dep["epoch"] == "0": + return dep["version"]+"-"+dep["release"]+"."+dep["arch"] + else: + return dep["epoch"]+":"+dep["version"]+"-"+dep["release"]+"."+dep["arch"] +
+
[docs]def dep_nevra(dep): + """Return the name-epoch:version-release.arch""" + return dep["name"]+"-"+dep_evra(dep) +
+
[docs]def projects_list(yb): + """Return a list of projects + + :param yb: yum base object + :type yb: YumBase + :returns: List of project info dicts with name, summary, description, homepage, upstream_vcs + :rtype: list of dicts + """ + try: + ybl = yb.doPackageLists(pkgnarrow="available", showdups=False) + except YumBaseError as e: + raise ProjectsError("There was a problem listing projects: %s" % str(e)) + finally: + yb.closeRpmDB() + return sorted(map(yaps_to_project, ybl.available), key=lambda p: p["name"].lower()) + +
+
[docs]def projects_info(yb, project_names): + """Return details about specific projects + + :param yb: yum base object + :type yb: YumBase + :param project_names: List of names of projects to get info about + :type project_names: str + :returns: List of project info dicts with yaps_to_project as well as epoch, version, release, etc. + :rtype: list of dicts + """ + try: + ybl = yb.doPackageLists(pkgnarrow="available", patterns=project_names, showdups=False) + except YumBaseError as e: + raise ProjectsError("There was a problem with info for %s: %s" % (project_names, str(e))) + finally: + yb.closeRpmDB() + return sorted(map(yaps_to_project_info, ybl.available), key=lambda p: p["name"].lower()) + +
+
[docs]def projects_depsolve(yb, project_names): + """Return the dependencies for a list of projects + + :param yb: yum base object + :type yb: YumBase + :param project_names: The projects to find the dependencies for + :type project_names: List of Strings + :returns: NEVRA's of the project and its dependencies + :rtype: list of dicts + """ + try: + # This resets the transaction + yb.closeRpmDB() + for p in project_names: + yb.install(pattern=p) + (rc, msg) = yb.buildTransaction() + if rc not in [0, 1, 2]: + raise ProjectsError("There was a problem depsolving %s: %s" % (project_names, msg)) + yb.tsInfo.makelists() + deps = sorted(map(tm_to_dep, yb.tsInfo.installed + yb.tsInfo.depinstalled), key=lambda p: p["name"].lower()) + except YumBaseError as e: + raise ProjectsError("There was a problem depsolving %s: %s" % (project_names, str(e))) + finally: + yb.closeRpmDB() + return deps + +
+
[docs]def modules_list(yb, module_names): + """Return a list of modules + + :param yb: yum base object + :type yb: YumBase + :param offset: Number of modules to skip + :type limit: int + :param limit: Maximum number of modules to return + :type limit: int + :returns: List of module information and total count + :rtype: tuple of a list of dicts and an Int + + Modules don't exist in RHEL7 so this only returns projects + and sets the type to "rpm" + """ + try: + ybl = yb.doPackageLists(pkgnarrow="available", patterns=module_names, showdups=False) + except YumBaseError as e: + raise ProjectsError("There was a problem listing modules: %s" % str(e)) + finally: + yb.closeRpmDB() + return sorted(map(yaps_to_module, ybl.available), key=lambda p: p["name"].lower()) + +
+
[docs]def modules_info(yb, module_names): + """Return details about a module, including dependencies + + :param yb: yum base object + :type yb: YumBase + :param module_names: Names of the modules to get info about + :type module_names: str + :returns: List of dicts with module details and dependencies. + :rtype: list of dicts + """ + try: + # Get the info about each module + ybl = yb.doPackageLists(pkgnarrow="available", patterns=module_names, showdups=False) + except YumBaseError as e: + raise ProjectsError("There was a problem with info for %s: %s" % (module_names, str(e))) + finally: + yb.closeRpmDB() + + modules = sorted(map(yaps_to_project, ybl.available), key=lambda p: p["name"].lower()) + # Add the dependency info to each one + for module in modules: + module["dependencies"] = projects_depsolve(yb, [module["name"]]) + + return modules
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/queue.html b/lorax-composer/_modules/pylorax/api/queue.html new file mode 100644 index 00000000..4d376ff7 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/queue.html @@ -0,0 +1,659 @@ + + + + + + + + + + pylorax.api.queue — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.queue

+# Copyright (C) 2018 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+""" Functions to monitor compose queue and run anaconda"""
+import logging
+log = logging.getLogger("pylorax")
+
+import os
+import grp
+from glob import glob
+import multiprocessing as mp
+import pytoml as toml
+import pwd
+import shutil
+import subprocess
+from subprocess import Popen, PIPE
+import time
+
+from pylorax.api.compose import move_compose_results
+from pylorax.api.recipes import recipe_from_file
+from pylorax.base import DataHolder
+from pylorax.creator import run_creator
+from pylorax.sysutils import joinpaths
+
+
[docs]def start_queue_monitor(cfg, uid, gid): + """Start the queue monitor as a mp process + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uid: User ID that owns the queue + :type uid: int + :param gid: Group ID that owns the queue + :type gid: int + :returns: None + """ + lib_dir = cfg.get("composer", "lib_dir") + share_dir = cfg.get("composer", "share_dir") + monitor_cfg = DataHolder(composer_dir=lib_dir, share_dir=share_dir, uid=uid, gid=gid) + p = mp.Process(target=monitor, args=(monitor_cfg,)) + p.daemon = True + p.start() +
+
[docs]def monitor(cfg): + """Monitor the queue for new compose requests + + :param cfg: Configuration settings + :type cfg: DataHolder + :returns: Does not return + + The queue has 2 subdirectories, new and run. When a compose is ready to be run + a symlink to the uniquely named results directory should be placed in ./queue/new/ + + When the it is ready to be run (it is checked every 30 seconds or after a previous + compose is finished) the symlink will be moved into ./queue/run/ and a STATUS file + will be created in the results directory. + + STATUS can contain one of: RUNNING, FINISHED, FAILED + + If the system is restarted while a compose is running it will move any old symlinks + from ./queue/run/ to ./queue/new/ and rerun them. + """ + def queue_sort(uuid): + """Sort the queue entries by their mtime, not their names""" + return os.stat(joinpaths(cfg.composer_dir, "queue/new", uuid)).st_mtime + + # Move any symlinks in the run queue back to the new queue + for link in os.listdir(joinpaths(cfg.composer_dir, "queue/run")): + src = joinpaths(cfg.composer_dir, "queue/run", link) + dst = joinpaths(cfg.composer_dir, "queue/new", link) + os.rename(src, dst) + log.debug("Moved unfinished compose %s back to new state", src) + + while True: + uuids = sorted(os.listdir(joinpaths(cfg.composer_dir, "queue/new")), key=queue_sort) + + # Pick the oldest and move it into ./run/ + if not uuids: + # No composes left to process, sleep for a bit + time.sleep(30) + else: + src = joinpaths(cfg.composer_dir, "queue/new", uuids[0]) + dst = joinpaths(cfg.composer_dir, "queue/run", uuids[0]) + try: + os.rename(src, dst) + except OSError: + # The symlink may vanish if uuid_cancel() has been called + continue + + log.info("Starting new compose: %s", dst) + open(joinpaths(dst, "STATUS"), "w").write("RUNNING\n") + + try: + make_compose(cfg, os.path.realpath(dst)) + log.info("Finished building %s, results are in %s", dst, os.path.realpath(dst)) + open(joinpaths(dst, "STATUS"), "w").write("FINISHED\n") + except Exception as e: + import traceback + log.error("traceback: %s", traceback.format_exc()) + +# TODO - Write the error message to an ERROR-LOG file to include with the status +# log.error("Error running compose: %s", e) + open(joinpaths(dst, "STATUS"), "w").write("FAILED\n") + + os.unlink(dst) +
+
[docs]def make_compose(cfg, results_dir): + """Run anaconda with the final-kickstart.ks from results_dir + + :param cfg: Configuration settings + :type cfg: DataHolder + :param results_dir: The directory containing the metadata and results for the build + :type results_dir: str + :returns: Nothing + :raises: May raise various exceptions + + This takes the final-kickstart.ks, and the settings in config.toml and runs Anaconda + in no-virt mode (directly on the host operating system). Exceptions should be caught + at the higer level. + + If there is a failure, the build artifacts will be cleaned up, and any logs will be + moved into logs/anaconda/ and their ownership will be set to the user from the cfg + object. + """ + + # Check on the ks's presence + ks_path = joinpaths(results_dir, "final-kickstart.ks") + if not os.path.exists(ks_path): + raise RuntimeError("Missing kickstart file at %s" % ks_path) + + # The anaconda logs are copied into ./anaconda/ in this directory + log_dir = joinpaths(results_dir, "logs/") + if not os.path.exists(log_dir): + os.makedirs(log_dir) + + # Load the compose configuration + cfg_path = joinpaths(results_dir, "config.toml") + if not os.path.exists(cfg_path): + raise RuntimeError("Missing config.toml for %s" % results_dir) + cfg_dict = toml.loads(open(cfg_path, "r").read()) + + # The keys in cfg_dict correspond to the arguments setup in livemedia-creator + # keys that define what to build should be setup in compose_args, and keys with + # defaults should be setup here. + + # Make sure that image_name contains no path components + cfg_dict["image_name"] = os.path.basename(cfg_dict["image_name"]) + + # Only support novirt installation, set some other defaults + cfg_dict["no_virt"] = True + cfg_dict["disk_image"] = None + cfg_dict["fs_image"] = None + cfg_dict["keep_image"] = False + cfg_dict["domacboot"] = False + cfg_dict["anaconda_args"] = "" + cfg_dict["proxy"] = "" + cfg_dict["armplatform"] = "" + cfg_dict["squashfs_args"] = None + + cfg_dict["lorax_templates"] = cfg.share_dir + cfg_dict["tmp"] = "/var/tmp/" + cfg_dict["dracut_args"] = None # Use default args for dracut + + # Compose things in a temporary directory inside the results directory + cfg_dict["result_dir"] = joinpaths(results_dir, "compose") + os.makedirs(cfg_dict["result_dir"]) + + install_cfg = DataHolder(**cfg_dict) + + # Some kludges for the 99-copy-logs %post, failure in it will crash the build + for f in ["/tmp/NOSAVE_INPUT_KS", "/tmp/NOSAVE_LOGS"]: + open(f, "w") + + # Placing a CANCEL file in the results directory will make execWithRedirect send anaconda a SIGTERM + def cancel_build(): + return os.path.exists(joinpaths(results_dir, "CANCEL")) + + log.debug("cfg = %s", install_cfg) + try: + test_path = joinpaths(results_dir, "TEST") + if os.path.exists(test_path): + # Pretend to run the compose + time.sleep(10) + try: + test_mode = int(open(test_path, "r").read()) + except Exception: + test_mode = 1 + if test_mode == 1: + raise RuntimeError("TESTING FAILED compose") + else: + open(joinpaths(results_dir, install_cfg.image_name), "w").write("TEST IMAGE") + else: + run_creator(install_cfg, callback_func=cancel_build) + + # Extract the results of the compose into results_dir and cleanup the compose directory + move_compose_results(install_cfg, results_dir) + finally: + # Make sure that everything under the results directory is owned by the user + user = pwd.getpwuid(cfg.uid).pw_name + group = grp.getgrgid(cfg.gid).gr_name + log.debug("Install finished, chowning results to %s:%s", user, group) + subprocess.call(["chown", "-R", "%s:%s" % (user, group), results_dir]) +
+
[docs]def get_compose_type(results_dir): + """Return the type of composition. + + :param results_dir: The directory containing the metadata and results for the build + :type results_dir: str + :returns: The type of compose (eg. 'tar') + :rtype: str + :raises: RuntimeError if no kickstart template can be found. + """ + # Should only be 2 kickstarts, the final-kickstart.ks and the template + t = [os.path.basename(ks)[:-3] for ks in glob(joinpaths(results_dir, "*.ks")) + if "final-kickstart" not in ks] + if len(t) != 1: + raise RuntimeError("Cannot find ks template for build %s" % os.path.basename(results_dir)) + return t[0] +
+
[docs]def compose_detail(results_dir): + """Return details about the build. + + :param results_dir: The directory containing the metadata and results for the build + :type results_dir: str + :returns: A dictionary with details about the compose + :rtype: dict + + The following details are included in the dict: + + * id - The uuid of the comoposition + * queue_status - The final status of the composition (FINISHED or FAILED) + * timestamp - The time of the last status change + * compose_type - The type of output generated (tar, iso, etc.) + * recipe - Recipe name + * version - Recipe version + """ + # Just in case it went away + if not os.path.exists(results_dir): + return {} + + build_id = os.path.basename(os.path.abspath(results_dir)) + status = open(joinpaths(results_dir, "STATUS")).read().strip() + mtime = os.stat(joinpaths(results_dir, "STATUS")).st_mtime + recipe = recipe_from_file(joinpaths(results_dir, "recipe.toml")) + + compose_type = get_compose_type(results_dir) + + return {"id": build_id, + "queue_status": status, + "timestamp": mtime, + "compose_type": compose_type, + "recipe": recipe["name"], + "version": recipe["version"] + } +
+
[docs]def queue_status(cfg): + """Return details about what is in the queue. + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :returns: A list of the new composes, and a list of the running composes + :rtype: dict + + This returns a dict with 2 lists. "new" is the list of uuids that are waiting to be built, + and "run" has the uuids that are being built (currently limited to 1 at a time). + """ + queue_dir = joinpaths(cfg.get("composer", "lib_dir"), "queue") + new_queue = [os.path.realpath(p) for p in glob(joinpaths(queue_dir, "new/*"))] + run_queue = [os.path.realpath(p) for p in glob(joinpaths(queue_dir, "run/*"))] + + return { + "new": [compose_detail(n) for n in new_queue], + "run": [compose_detail(r) for r in run_queue] + } +
+
[docs]def uuid_status(cfg, uuid): + """Return the details of a specific UUID compose + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :returns: Details about the build + :rtype: dict or None + + Returns the same dict as `compose_details()` + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if os.path.exists(uuid_dir): + return compose_detail(uuid_dir) + else: + return None +
+
[docs]def build_status(cfg, status_filter=None): + """Return the details of finished or failed builds + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param status_filter: What builds to return. None == all, "FINISHED", or "FAILED" + :type status_filter: str + :returns: A list of the build details (from compose_details) + :rtype: list of dicts + + This returns a list of build details for each of the matching builds on the + system. It does not return the status of builds that have not been finished. + Use queue_status() for those. + """ + if status_filter: + status_filter = [status_filter] + else: + status_filter = ["FINISHED", "FAILED"] + + results = [] + result_dir = joinpaths(cfg.get("composer", "lib_dir"), "results") + for build in glob(result_dir + "/*"): + log.debug("Checking status of build %s", build) + + status = open(joinpaths(build, "STATUS"), "r").read().strip() + if status in status_filter: + results.append(compose_detail(build)) + return results +
+
[docs]def uuid_cancel(cfg, uuid): + """Cancel a build and delete its results + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :returns: True if it was canceled and deleted + :rtype: bool + + Only call this if the build status is WAITING or RUNNING + """ + # This status can change (and probably will) while it is in the middle of doing this: + # It can move from WAITING -> RUNNING or it can move from RUNNING -> FINISHED|FAILED + + # If it is in WAITING remove the symlink and then check to make sure it didn't show up + # in RUNNING + queue_dir = joinpaths(cfg.get("composer", "lib_dir"), "queue") + uuid_new = joinpaths(queue_dir, "new", uuid) + if os.path.exists(uuid_new): + try: + os.unlink(uuid_new) + except OSError: + # The symlink may vanish if the queue monitor started the build + pass + uuid_run = joinpaths(queue_dir, "run", uuid) + if not os.path.exists(uuid_run): + # Successfully removed it before the build started + return uuid_delete(cfg, uuid) + + # Tell the build to stop running + cancel_path = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid, "CANCEL") + open(cancel_path, "w").write("\n") + + # Wait for status to move to FAILED + started = time.time() + while True: + status = uuid_status(cfg, uuid) + if status["queue_status"] == "FAILED": + break + + # Is this taking too long? Exit anyway and try to cleanup. + if time.time() > started + (10 * 60): + log.error("Failed to cancel the build of %s", uuid) + break + + time.sleep(5) + + # Remove the partial results + uuid_delete(cfg, uuid) +
+
[docs]def uuid_delete(cfg, uuid): + """Delete all of the results from a compose + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :returns: True if it was deleted + :rtype: bool + :raises: This will raise an error if the delete failed + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if not uuid_dir or len(uuid_dir) < 10: + raise RuntimeError("Directory length is too short: %s" % uuid_dir) + shutil.rmtree(uuid_dir) + return True +
+
[docs]def uuid_info(cfg, uuid): + """Return information about the composition + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :returns: dictionary of information about the composition + :rtype: dict + :raises: RuntimeError if there was a problem + + This will return a dict with the following fields populated: + + * id - The uuid of the comoposition + * config - containing the configuration settings used to run Anaconda + * recipe - The depsolved recipe used to generate the kickstart + * commit - The (local) git commit hash for the recipe used + * deps - The NEVRA of all of the dependencies used in the composition + * compose_type - The type of output generated (tar, iso, etc.) + * queue_status - The final status of the composition (FINISHED or FAILED) + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if not os.path.exists(uuid_dir): + raise RuntimeError("%s is not a valid build_id" % uuid) + + # Load the compose configuration + cfg_path = joinpaths(uuid_dir, "config.toml") + if not os.path.exists(cfg_path): + raise RuntimeError("Missing config.toml for %s" % uuid) + cfg_dict = toml.loads(open(cfg_path, "r").read()) + + frozen_path = joinpaths(uuid_dir, "frozen.toml") + if not os.path.exists(frozen_path): + raise RuntimeError("Missing frozen.toml for %s" % uuid) + frozen_dict = toml.loads(open(frozen_path, "r").read()) + + deps_path = joinpaths(uuid_dir, "deps.toml") + if not os.path.exists(deps_path): + raise RuntimeError("Missing deps.toml for %s" % uuid) + deps_dict = toml.loads(open(deps_path, "r").read()) + + compose_type = get_compose_type(uuid_dir) + status = open(joinpaths(uuid_dir, "STATUS")).read().strip() + + commit_path = joinpaths(uuid_dir, "COMMIT") + commit_id = open(commit_path, "r").read().strip() + + return {"id": uuid, + "config": cfg_dict, + "recipe": frozen_dict, + "commit": commit_id, + "deps": deps_dict, + "compose_type": compose_type, + "queue_status": status + } +
+
[docs]def uuid_tar(cfg, uuid, metadata=False, image=False, logs=False): + """Return a tar of the build data + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :param metadata: Set to true to include all the metadata needed to reproduce the build + :type metadata: bool + :param image: Set to true to include the output image + :type image: bool + :param logs: Set to true to include the logs from the build + :type logs: bool + :returns: A stream of bytes from tar + :rtype: A generator + :raises: RuntimeError if there was a problem (eg. missing config file) + + This yields an uncompressed tar's data to the caller. It includes + the selected data to the caller by returning the Popen stdout from the tar process. + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if not os.path.exists(uuid_dir): + raise RuntimeError("%s is not a valid build_id" % uuid) + + # Load the compose configuration + cfg_path = joinpaths(uuid_dir, "config.toml") + if not os.path.exists(cfg_path): + raise RuntimeError("Missing config.toml for %s" % uuid) + cfg_dict = toml.loads(open(cfg_path, "r").read()) + image_name = cfg_dict["image_name"] + + def include_file(f): + if f.endswith("/logs"): + return logs + if f.endswith(image_name): + return image + return metadata + filenames = [os.path.basename(f) for f in glob(joinpaths(uuid_dir, "*")) if include_file(f)] + + tar = Popen(["tar", "-C", uuid_dir, "-cf-"] + filenames, stdout=PIPE) + return tar.stdout +
+
[docs]def uuid_image(cfg, uuid): + """Return the filename and full path of the build's image file + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :returns: The image filename and full path + :rtype: tuple of strings + :raises: RuntimeError if there was a problem (eg. invalid uuid, missing config file) + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if not os.path.exists(uuid_dir): + raise RuntimeError("%s is not a valid build_id" % uuid) + + # Load the compose configuration + cfg_path = joinpaths(uuid_dir, "config.toml") + if not os.path.exists(cfg_path): + raise RuntimeError("Missing config.toml for %s" % uuid) + cfg_dict = toml.loads(open(cfg_path, "r").read()) + image_name = cfg_dict["image_name"] + + return (image_name, joinpaths(uuid_dir, image_name)) +
+
[docs]def uuid_log(cfg, uuid, size=1024): + """Return `size` kbytes from the end of the anaconda.log + + :param cfg: Configuration settings + :type cfg: ComposerConfig + :param uuid: The UUID of the build + :type uuid: str + :param size: Number of kbytes to read. Default is 1024 + :type size: int + :returns: Up to `size` kbytes from the end of the log + :rtype: str + :raises: RuntimeError if there was a problem (eg. no log file available) + + This function tries to return lines from the end of the log, it will + attempt to start on a line boundry, and may return less than `size` kbytes. + """ + uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) + if not os.path.exists(uuid_dir): + raise RuntimeError("%s is not a valid build_id" % uuid) + + # While a build is running the logs will be in /tmp/anaconda.log and when it + # has finished they will be in the results directory + status = uuid_status(cfg, uuid) + if status["queue_status"] == "RUNNING": + log_path = "/tmp/anaconda.log" + else: + log_path = joinpaths(uuid_dir, "logs", "anaconda", "anaconda.log") + if not os.path.exists(log_path): + raise RuntimeError("No anaconda.log available.") + + with open(log_path, "r") as f: + f.seek(0, 2) + end = f.tell() + if end < 1024 * size: + f.seek(0, 0) + else: + f.seek(end - (1024 * size)) + # Find the start of the next line and return the rest + f.readline() + return f.read()
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/recipes.html b/lorax-composer/_modules/pylorax/api/recipes.html new file mode 100644 index 00000000..dcbaa657 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/recipes.html @@ -0,0 +1,978 @@ + + + + + + + + + + pylorax.api.recipes — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.recipes

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+import gi
+gi.require_version("Ggit", "1.0")
+from gi.repository import Ggit as Git
+from gi.repository import Gio
+from gi.repository import GLib
+
+import os
+import pytoml as toml
+import semantic_version as semver
+
+from pylorax.api.projects import dep_evra
+from pylorax.base import DataHolder
+from pylorax.sysutils import joinpaths
+
+
+
[docs]class CommitTimeValError(Exception): + pass +
+
[docs]class RecipeFileError(Exception): + pass +
+
[docs]class RecipeError(Exception): + pass + +
+
[docs]class Recipe(dict): + """A Recipe of package and modules + + This is a subclass of dict that enforces the constructor arguments + and adds a .filename property to return the recipe's filename, + and a .toml() function to return the recipe as a TOML string. + """ + def __init__(self, name, description, version, modules, packages): + # Check that version is empty or semver compatible + if version: + semver.Version(version) + + # Make sure modules and packages are listed by their case-insensitive names + if modules is not None: + modules = sorted(modules, key=lambda m: m["name"].lower()) + if packages is not None: + packages = sorted(packages, key=lambda p: p["name"].lower()) + dict.__init__(self, name=name, + description=description, + version=version, + modules=modules, + packages=packages) + + @property +
[docs] def package_names(self): + """Return the names of the packages""" + return map(lambda p: p["name"], self["packages"] or []) +
+ @property +
[docs] def module_names(self): + """Return the names of the modules""" + return map(lambda m: m["name"], self["modules"] or []) +
+ @property +
[docs] def filename(self): + """Return the Recipe's filename + + Replaces spaces in the name with '-' and appends .toml + """ + return recipe_filename(self.get("name")) +
+
[docs] def toml(self): + """Return the Recipe in TOML format""" + return toml.dumps(self).encode("UTF-8") +
+
[docs] def bump_version(self, old_version=None): + """semver recipe version number bump + + :param old_version: An optional old version number + :type old_version: str + :returns: The new version number or None + :rtype: str + :raises: ValueError + + If neither have a version, 0.0.1 is returned + If there is no old version the new version is checked and returned + If there is no new version, but there is a old one, bump its patch level + If the old and new versions are the same, bump the patch level + If they are different, check and return the new version + """ + new_version = self.get("version") + if not new_version and not old_version: + self["version"] = "0.0.1" + + elif new_version and not old_version: + semver.Version(new_version) + self["version"] = new_version + + elif not new_version or new_version == old_version: + new_version = str(semver.Version(old_version).next_patch()) + self["version"] = new_version + + else: + semver.Version(new_version) + self["version"] = new_version + + # Return the new version + return str(semver.Version(self["version"])) +
+
[docs] def freeze(self, deps): + """ Return a new Recipe with full module and package NEVRA + + :param deps: A list of dependency NEVRA to use to fill in the modules and packages + :type deps: list( + :returns: A new Recipe object + :rtype: Recipe + """ + module_names = self.module_names + package_names = self.package_names + + new_modules = [] + new_packages = [] + for dep in deps: + if dep["name"] in package_names: + new_packages.append(RecipePackage(dep["name"], dep_evra(dep))) + elif dep["name"] in module_names: + new_modules.append(RecipeModule(dep["name"], dep_evra(dep))) + + return Recipe(self["name"], self["description"], self["version"], + new_modules, new_packages) +
+
[docs]class RecipeModule(dict): + def __init__(self, name, version): + dict.__init__(self, name=name, version=version) +
+
[docs]class RecipePackage(RecipeModule): + pass +
+
[docs]def recipe_from_file(recipe_path): + """Return a recipe file as a Recipe object + + :param recipe_path: Path to the recipe fila + :type recipe_path: str + :returns: A Recipe object + :rtype: Recipe + """ + with open(recipe_path, 'rb') as f: + return recipe_from_toml(f.read()) +
+
[docs]def recipe_from_toml(recipe_str): + """Create a Recipe object from a toml string. + + :param recipe_str: The Recipe TOML string + :type recipe_str: str + :returns: A Recipe object + :rtype: Recipe + :raises: TomlError + """ + recipe_dict = toml.loads(recipe_str) + return recipe_from_dict(recipe_dict) +
+
[docs]def recipe_from_dict(recipe_dict): + """Create a Recipe object from a plain dict. + + :param recipe_dict: A plain dict of the recipe + :type recipe_dict: dict + :returns: A Recipe object + :rtype: Recipe + :raises: RecipeError + """ + # Make RecipeModule objects from the toml + # The TOML may not have modules or packages in it. Set them to None in this case + try: + if recipe_dict.get("modules"): + modules = [RecipeModule(m.get("name"), m.get("version")) for m in recipe_dict["modules"]] + else: + modules = [] + if recipe_dict.get("packages"): + packages = [RecipePackage(p.get("name"), p.get("version")) for p in recipe_dict["packages"]] + else: + packages = [] + name = recipe_dict["name"] + description = recipe_dict["description"] + version = recipe_dict.get("version", None) + except KeyError as e: + raise RecipeError("There was a problem parsing the recipe: %s" % str(e)) + + return Recipe(name, description, version, modules, packages) +
+
[docs]def gfile(path): + """Convert a string path to GFile for use with Git""" + return Gio.file_new_for_path(path) +
+
[docs]def recipe_filename(name): + """Return the toml filename for a recipe + + Replaces spaces with '-' and appends '.toml' + """ + # XXX Raise and error if this is empty? + return name.replace(" ", "-") + ".toml" +
+
[docs]def head_commit(repo, branch): + """Get the branch's HEAD Commit Object + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :returns: Branch's head commit + :rtype: Git.Commit + :raises: Can raise errors from Ggit + """ + branch_obj = repo.lookup_branch(branch, Git.BranchType.LOCAL) + commit_id = branch_obj.get_target() + return repo.lookup(commit_id, Git.Commit) +
+
[docs]def prepare_commit(repo, branch, builder): + """Prepare for a commit + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param builder: instance of TreeBuilder + :type builder: TreeBuilder + :returns: (Tree, Sig, Ref) + :rtype: tuple + :raises: Can raise errors from Ggit + """ + tree_id = builder.write() + tree = repo.lookup(tree_id, Git.Tree) + sig = Git.Signature.new_now("bdcs-api-server", "user-email") + ref = "refs/heads/%s" % branch + return (tree, sig, ref) +
+
[docs]def open_or_create_repo(path): + """Open an existing repo, or create a new one + + :param path: path to recipe directory + :type path: string + :returns: A repository object + :rtype: Git.Repository + :raises: Can raise errors from Ggit + + A bare git repo will be created in the git directory of the specified path. + If a repo already exists it will be opened and returned instead of + creating a new one. + """ + Git.init() + git_path = joinpaths(path, "git") + if os.path.exists(joinpaths(git_path, "HEAD")): + return Git.Repository.open(gfile(git_path)) + + repo = Git.Repository.init_repository(gfile(git_path), True) + + # Make an initial empty commit + sig = Git.Signature.new_now("bdcs-api-server", "user-email") + tree_id = repo.get_index().write_tree() + tree = repo.lookup(tree_id, Git.Tree) + repo.create_commit("HEAD", sig, sig, "UTF-8", "Initial Recipe repository commit", tree, []) + return repo +
+
[docs]def write_commit(repo, branch, filename, message, content): + """Make a new commit to a repository's branch + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: full path of the file to add + :type filename: str + :param message: The commit message + :type message: str + :param content: The data to write + :type content: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + try: + parent_commit = head_commit(repo, branch) + except GLib.GError: + # Branch doesn't exist, make a new one based on master + master_head = head_commit(repo, "master") + repo.create_branch(branch, master_head, 0) + parent_commit = head_commit(repo, branch) + + parent_commit = head_commit(repo, branch) + blob_id = repo.create_blob_from_buffer(content) + + # Use treebuilder to make a new entry for this filename and blob + parent_tree = parent_commit.get_tree() + builder = repo.create_tree_builder_from_tree(parent_tree) + builder.insert(filename, blob_id, Git.FileMode.BLOB) + (tree, sig, ref) = prepare_commit(repo, branch, builder) + return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit]) +
+
[docs]def read_commit_spec(repo, spec): + """Return the raw content of the blob specified by the spec + + :param repo: Open repository + :type repo: Git.Repository + :param spec: Git revparse spec + :type spec: str + :returns: Contents of the commit + :rtype: str + :raises: Can raise errors from Ggit + + eg. To read the README file from master the spec is "master:README" + """ + commit_id = repo.revparse(spec).get_id() + blob = repo.lookup(commit_id, Git.Blob) + return blob.get_raw_content() +
+
[docs]def read_commit(repo, branch, filename, commit=None): + """Return the contents of a file on a specific branch or commit. + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: filename to read + :type filename: str + :param commit: Optional commit hash + :type commit: str + :returns: The commit id, and the contents of the commit + :rtype: tuple(str, str) + :raises: Can raise errors from Ggit + + If no commit is passed the master:filename is returned, otherwise it will be + commit:filename + """ + if not commit: + # Find the most recent commit for filename on the selected branch + commits = list_commits(repo, branch, filename, 1) + if not commits: + raise RecipeError("No commits for %s on the %s branch." % (filename, branch)) + commit = commits[0].commit + return (commit, read_commit_spec(repo, "%s:%s" % (commit, filename))) +
+
[docs]def read_recipe_commit(repo, branch, recipe_name, commit=None): + """Read a recipe commit from git and return a Recipe object + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to read + :type recipe_name: str + :param commit: Optional commit hash + :type commit: str + :returns: A Recipe object + :rtype: Recipe + :raises: Can raise errors from Ggit + + If no commit is passed the master:filename is returned, otherwise it will be + commit:filename + """ + (_, recipe_toml) = read_commit(repo, branch, recipe_filename(recipe_name), commit) + return recipe_from_toml(recipe_toml) +
+
[docs]def read_recipe_and_id(repo, branch, recipe_name, commit=None): + """Read a recipe commit and its id from git + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to read + :type recipe_name: str + :param commit: Optional commit hash + :type commit: str + :returns: The commit id, and a Recipe object + :rtype: tuple(str, Recipe) + :raises: Can raise errors from Ggit + + If no commit is passed the master:filename is returned, otherwise it will be + commit:filename + """ + (commit_id, recipe_toml) = read_commit(repo, branch, recipe_filename(recipe_name), commit) + return (commit_id, recipe_from_toml(recipe_toml)) +
+
[docs]def list_branch_files(repo, branch): + """Return a sorted list of the files on the branch HEAD + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :returns: A sorted list of the filenames + :rtype: list(str) + :raises: Can raise errors from Ggit + """ + commit = head_commit(repo, branch).get_id().to_string() + return list_commit_files(repo, commit) +
+
[docs]def list_commit_files(repo, commit): + """Return a sorted list of the files on a commit + + :param repo: Open repository + :type repo: Git.Repository + :param commit: The commit hash to list + :type commit: str + :returns: A sorted list of the filenames + :rtype: list(str) + :raises: Can raise errors from Ggit + """ + commit_id = Git.OId.new_from_string(commit) + commit_obj = repo.lookup(commit_id, Git.Commit) + tree = commit_obj.get_tree() + return sorted([tree.get(i).get_name() for i in range(0,tree.size())]) +
+
[docs]def delete_recipe(repo, branch, recipe_name): + """Delete a recipe from a branch. + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to delete + :type recipe_name: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + return delete_file(repo, branch, recipe_filename(recipe_name)) +
+
[docs]def delete_file(repo, branch, filename): + """Delete a file from a branch. + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: filename to delete + :type filename: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + parent_commit = head_commit(repo, branch) + parent_tree = parent_commit.get_tree() + builder = repo.create_tree_builder_from_tree(parent_tree) + builder.remove(filename) + (tree, sig, ref) = prepare_commit(repo, branch, builder) + message = "Recipe %s deleted" % filename + return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit]) +
+
[docs]def revert_recipe(repo, branch, recipe_name, commit): + """Revert the contents of a recipe to that of a previous commit + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to revert + :type recipe_name: str + :param commit: Commit hash + :type commit: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + return revert_file(repo, branch, recipe_filename(recipe_name), commit) +
+
[docs]def revert_file(repo, branch, filename, commit): + """Revert the contents of a file to that of a previous commit + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: filename to revert + :type filename: str + :param commit: Commit hash + :type commit: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + commit_id = Git.OId.new_from_string(commit) + commit_obj = repo.lookup(commit_id, Git.Commit) + revert_tree = commit_obj.get_tree() + entry = revert_tree.get_by_name(filename) + blob_id = entry.get_id() + parent_commit = head_commit(repo, branch) + + # Use treebuilder to modify the tree + parent_tree = parent_commit.get_tree() + builder = repo.create_tree_builder_from_tree(parent_tree) + builder.insert(filename, blob_id, Git.FileMode.BLOB) + (tree, sig, ref) = prepare_commit(repo, branch, builder) + commit_hash = commit_id.to_string() + message = "Recipe %s reverted to commit %s" % (filename, commit_hash) + return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit]) +
+
[docs]def commit_recipe(repo, branch, recipe): + """Commit a recipe to a branch + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe: Recipe to commit + :type recipe: Recipe + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit + """ + try: + old_recipe = read_recipe_commit(repo, branch, recipe["name"]) + old_version = old_recipe["version"] + except Exception: + old_version = None + + recipe.bump_version(old_version) + recipe_toml = recipe.toml() + message = "Recipe %s, version %s saved." % (recipe["name"], recipe["version"]) + return write_commit(repo, branch, recipe.filename, message, recipe_toml) +
+
[docs]def commit_recipe_file(repo, branch, filename): + """Commit a recipe file to a branch + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: Path to the recipe file to commit + :type filename: str + :returns: OId of the new commit + :rtype: Git.OId + :raises: Can raise errors from Ggit or RecipeFileError + """ + try: + recipe = recipe_from_file(filename) + except IOError: + raise RecipeFileError + + return commit_recipe(repo, branch, recipe) +
+
[docs]def commit_recipe_directory(repo, branch, directory): + """Commit all *.toml files from a directory, if they aren't already in git. + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param directory: The directory of *.toml recipes to commit + :type directory: str + :returns: None + :raises: Can raise errors from Ggit or RecipeFileError + + Files with Toml or RecipeFileErrors will be skipped, and the remainder will + be tried. + """ + dir_files = set([e for e in os.listdir(directory) if e.endswith(".toml")]) + branch_files = set(list_branch_files(repo, branch)) + new_files = dir_files.difference(branch_files) + + for f in new_files: + # Skip files with errors, but try the others + try: + commit_recipe_file(repo, branch, joinpaths(directory, f)) + except (RecipeFileError, toml.TomlError): + pass +
+
[docs]def tag_recipe_commit(repo, branch, recipe_name): + """Tag a file's most recent commit + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to tag + :type recipe_name: str + :returns: Tag id or None if it failed. + :rtype: Git.OId + :raises: Can raise errors from Ggit + + Uses tag_file_commit() + """ + return tag_file_commit(repo, branch, recipe_filename(recipe_name)) +
+
[docs]def tag_file_commit(repo, branch, filename): + """Tag a file's most recent commit + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: Filename to tag + :type filename: str + :returns: Tag id or None if it failed. + :rtype: Git.OId + :raises: Can raise errors from Ggit + + This uses git tags, of the form `refs/tags/<branch>/<filename>/r<revision>` + Only the most recent recipe commit can be tagged to prevent out of order tagging. + Revisions start at 1 and increment for each new commit that is tagged. + If the commit has already been tagged it will return false. + """ + file_commits = list_commits(repo, branch, filename) + if not file_commits: + return None + + # Find the most recently tagged version (may not be one) and add 1 to it. + for details in file_commits: + if details.revision is not None: + new_revision = details.revision + 1 + break + else: + new_revision = 1 + + name = "%s/%s/r%d" % (branch, filename, new_revision) + sig = Git.Signature.new_now("bdcs-api-server", "user-email") + commit_id = Git.OId.new_from_string(file_commits[0].commit) + commit = repo.lookup(commit_id, Git.Commit) + return repo.create_tag(name, commit, sig, name, Git.CreateFlags.NONE) +
+
[docs]def find_commit_tag(repo, branch, filename, commit_id): + """Find the tag that matches the commit_id + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: filename to revert + :type filename: str + :param commit_id: The commit id to check + :type commit_id: Git.OId + :returns: The tag or None if there isn't one + :rtype: str or None + + There should be only 1 tag pointing to a commit, but there may not + be a tag at all. + + The tag will look like: 'refs/tags/<branch>/<filename>/r<revision>' + """ + pattern = "%s/%s/r*" % (branch, filename) + tags = [t for t in repo.list_tags_match(pattern) if is_commit_tag(repo, commit_id, t)] + if len(tags) != 1: + return None + else: + return tags[0] +
+
[docs]def is_commit_tag(repo, commit_id, tag): + """Check to see if a tag points to a specific commit. + + :param repo: Open repository + :type repo: Git.Repository + :param commit_id: The commit id to check + :type commit_id: Git.OId + :param tag: The tag to check + :type tag: str + :returns: True if the tag points to the commit, False otherwise + :rtype: bool + """ + ref = repo.lookup_reference("refs/tags/" + tag) + tag_id = ref.get_target() + tag = repo.lookup(tag_id, Git.Tag) + target_id = tag.get_target_id() + return commit_id.compare(target_id) == 0 +
+
[docs]def get_revision_from_tag(tag): + """Return the revision number from a tag + + :param tag: The tag to exract the revision from + :type tag: str + :returns: The integer revision or None + :rtype: int or None + + The revision is the part after the r in 'branch/filename/rXXX' + """ + if tag is None: + return None + try: + return int(tag.rsplit('r',2)[-1]) + except (ValueError, IndexError): + return None +
+
[docs]class CommitDetails(DataHolder): + def __init__(self, commit, timestamp, message, revision=None): + DataHolder.__init__(self, + commit = commit, + timestamp = timestamp, + message = message, + revision = revision) +
+
[docs]def list_commits(repo, branch, filename, limit=0): + """List the commit history of a file on a branch. + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param filename: filename to revert + :type filename: str + :param limit: Number of commits to return (0=all) + :type limit: int + :returns: A list of commit details + :rtype: list(CommitDetails) + :raises: Can raise errors from Ggit + """ + revwalk = Git.RevisionWalker.new(repo) + revwalk.set_sort_mode(Git.SortMode.TIME) + branch_ref = "refs/heads/%s" % branch + revwalk.push_ref(branch_ref) + + commits = [] + while True: + commit_id = revwalk.next() + if not commit_id: + break + commit = repo.lookup(commit_id, Git.Commit) + + parents = commit.get_parents() + # No parents? Must be the first commit. + if parents.get_size() == 0: + continue + + tree = commit.get_tree() + # Is the filename in this tree? If not, move on. + if not tree.get_by_name(filename): + continue + + # Is filename different in all of the parent commits? + parent_commits = map(parents.get, xrange(0, parents.get_size())) + is_diff = all(map(lambda pc: is_parent_diff(repo, filename, tree, pc), parent_commits)) + # No changes from parents, skip it. + if not is_diff: + continue + + tag = find_commit_tag(repo, branch, filename, commit.get_id()) + try: + commits.append(get_commit_details(commit, get_revision_from_tag(tag))) + if limit and len(commits) > limit: + break + except CommitTimeValError: + # Skip any commits that have trouble converting the time + # TODO - log details about this failure + pass + + # These will be in reverse time sort order thanks to revwalk + return commits +
+
[docs]def get_commit_details(commit, revision=None): + """Return the details about a specific commit. + + :param commit: The commit to get details from + :type commit: Git.Commit + :param revision: Optional commit revision + :type revision: int + :returns: Details about the commit + :rtype: CommitDetails + :raises: CommitTimeValError or Ggit exceptions + + """ + message = commit.get_message() + commit_str = commit.get_id().to_string() + sig = commit.get_committer() + + datetime = sig.get_time() + # XXX What do we do with timezone? + _timezone = sig.get_time_zone() + timeval = GLib.TimeVal() + ok = datetime.to_timeval(timeval) + if not ok: + raise CommitTimeValError + time_str = timeval.to_iso8601() + + return CommitDetails(commit_str, time_str, message, revision) +
+
[docs]def is_parent_diff(repo, filename, tree, parent): + """Check to see if the commit is different from its parents + + :param repo: Open repository + :type repo: Git.Repository + :param filename: filename to revert + :type filename: str + :param tree: The commit's tree + :type tree: Git.Tree + :param parent: The commit's parent commit + :type parent: Git.Commit + :retuns: True if filename in the commit is different from its parents + :rtype: bool + """ + diff_opts = Git.DiffOptions.new() + diff_opts.set_pathspec([filename]) + diff = Git.Diff.new_tree_to_tree(repo, parent.get_tree(), tree, diff_opts) + return diff.get_num_deltas() > 0 +
+
[docs]def find_name(name, lst): + """Find the dict matching the name in a list and return it. + + :param name: Name to search for + :type name: str + :param lst: List of dict's with "name" field + :returns: First dict with matching name, or None + :rtype: dict or None + """ + for e in lst: + if e["name"] == name: + return e + return None +
+
[docs]def diff_items(title, old_items, new_items): + """Return the differences between two lists of dicts. + + :param title: Title of the entry + :type title: str + :param old_items: List of item dicts with "name" field + :type old_items: list(dict) + :param new_items: List of item dicts with "name" field + :type new_items: list(dict) + :returns: List of diff dicts with old/new entries + :rtype: list(dict) + """ + diffs = [] + old_names = set(m["name"] for m in old_items) + new_names = set(m["name"] for m in new_items) + + added_items = new_names.difference(old_names) + added_items = sorted(added_items, key=lambda n: n.lower()) + + removed_items = old_names.difference(new_names) + removed_items = sorted(removed_items, key=lambda n: n.lower()) + + same_items = old_names.intersection(new_names) + same_items = sorted(same_items, key=lambda n: n.lower()) + + for name in added_items: + diffs.append({"old":None, + "new":{title:find_name(name, new_items)}}) + + for name in removed_items: + diffs.append({"old":{title:find_name(name, old_items)}, + "new":None}) + + for name in same_items: + old_item = find_name(name, old_items) + new_item = find_name(name, new_items) + if old_item != new_item: + diffs.append({"old":{title:old_item}, + "new":{title:new_item}}) + + return diffs + +
+
[docs]def recipe_diff(old_recipe, new_recipe): + """Diff two versions of a recipe + + :param old_recipe: The old version of the recipe + :type old_recipe: Recipe + :param new_recipe: The new version of the recipe + :type new_recipe: Recipe + :returns: A list of diff dict entries with old/new + :rtype: list(dict) + """ + + diffs = [] + # These cannot be added or removed, just different + for element in ["name", "description", "version"]: + if old_recipe[element] != new_recipe[element]: + diffs.append({"old":{element.title():old_recipe[element]}, + "new":{element.title():new_recipe[element]}}) + + diffs.extend(diff_items("Module", old_recipe["modules"], new_recipe["modules"])) + diffs.extend(diff_items("Package", old_recipe["packages"], new_recipe["packages"])) + + return diffs
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/server.html b/lorax-composer/_modules/pylorax/api/server.html new file mode 100644 index 00000000..1d8ef406 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/server.html @@ -0,0 +1,151 @@ + + + + + + + + + + pylorax.api.server — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.server

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import logging
+log = logging.getLogger("lorax-composer")
+
+from collections import namedtuple
+from flask import Flask, send_from_directory
+from glob import glob
+import os
+
+from pylorax.api.crossdomain import crossdomain
+from pylorax.api.v0 import v0_api
+from pylorax.sysutils import joinpaths
+
+GitLock = namedtuple("GitLock", ["repo", "lock", "dir"])
+YumLock = namedtuple("YumLock", ["yb", "lock"])
+
+server = Flask(__name__)
+
+__all__ = ["server", "GitLock"]
+
+@server.route('/')
+@crossdomain(origin="*")
+def hello_world():
+    return 'Hello, World!'
+
+@server.route("/api/docs/")
+@server.route("/api/docs/<path:path>")
+def api_docs(path=None):
+    # Find the html docs
+    try:
+        # This assumes it is running from the source tree
+        docs_path = os.path.abspath(joinpaths(os.path.dirname(__file__), "../../../docs/html"))
+    except IndexError:
+        docs_path = glob("/usr/share/doc/lorax-*/html/")[0]
+
+    if not path:
+        path="index.html"
+    return send_from_directory(docs_path, path)
+
+v0_api(server)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/v0.html b/lorax-composer/_modules/pylorax/api/v0.html new file mode 100644 index 00000000..89a10432 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/v0.html @@ -0,0 +1,1672 @@ + + + + + + + + + + pylorax.api.v0 — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.v0

+#
+# Copyright (C) 2017-2018  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+""" Setup v0 of the API server
+
+v0_api() must be called to setup the API routes for Flask
+
+Status Responses
+----------------
+
+Some requests only return a status/error response.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+  Example response::
+
+      {
+        "status": true
+      }
+
+  Error response::
+
+      {
+        "error": {
+          "msg": "ggit-error: Failed to remove entry. File isn't in the tree - jboss.toml (-1)"
+        },
+        "status": false
+      }
+
+API Routes
+----------
+
+All of the recipes routes support the optional `branch` argument. If it is not
+used then the API will use the `master` branch for recipes. If you want to create
+a new branch use the `new` or `workspace` routes with ?branch=<branch-name> to
+store the new recipe on the new branch.
+
+`/api/v0/test`
+^^^^^^^^^^^^^^
+
+  Return a test string. It is not JSON encoded.
+
+`/api/v0/status`
+^^^^^^^^^^^^^^^^
+  Return the status of the API Server::
+
+      { "api": "0",
+        "build": "devel",
+        "db_supported": false,
+        "db_version": "0",
+        "schema_version": "0" }
+
+`/api/v0/recipes/list`
+^^^^^^^^^^^^^^^^^^^^^^
+
+  List the available recipes::
+
+      { "limit": 20,
+        "offset": 0,
+        "recipes": [
+          "atlas",
+          "development",
+          "glusterfs",
+          "http-server",
+          "jboss",
+          "kubernetes" ],
+        "total": 6 }
+
+`/api/v0/recipes/info/<recipe_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the JSON representation of the recipe. This includes 3 top level
+  objects.  `changes` which lists whether or not the workspace is different from
+  the most recent commit. `recipes` which lists the JSON representation of the
+  recipe, and `errors` which will list any errors, like non-existant recipes.
+
+  Example::
+
+      {
+        "changes": [
+          {
+            "changed": false,
+            "name": "glusterfs"
+          }
+        ],
+        "errors": [],
+        "recipes": [
+          {
+            "description": "An example GlusterFS server with samba",
+            "modules": [
+              {
+                "name": "glusterfs",
+                "version": "3.7.*"
+              },
+              {
+                "name": "glusterfs-cli",
+                "version": "3.7.*"
+              }
+            ],
+            "name": "glusterfs",
+            "packages": [
+              {
+                "name": "2ping",
+                "version": "3.2.1"
+              },
+              {
+                "name": "samba",
+                "version": "4.2.*"
+              }
+            ],
+            "version": "0.0.6"
+          }
+        ]
+      }
+
+  Error example::
+
+      {
+        "changes": [],
+        "errors": [
+          {
+            "msg": "ggit-error: the path 'missing.toml' does not exist in the given tree (-3)",
+            "recipe": "missing"
+          }
+        ],
+        "recipes": []
+      }
+
+`/api/v0/recipes/changes/<recipe_names>[?offset=0&limit=20]`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the commits to a recipe. By default it returns the first 20 commits, this
+  can be changed by passing `offset` and/or `limit`. The response will include the
+  commit hash, summary, timestamp, and optionally the revision number. The commit
+  hash can be passed to `/api/v0/recipes/diff/` to retrieve the exact changes.
+
+  Example::
+
+      {
+        "errors": [],
+        "limit": 20,
+        "offset": 0,
+        "recipes": [
+          {
+            "changes": [
+              {
+                "commit": "e083921a7ed1cf2eec91ad12b9ad1e70ef3470be",
+                "message": "Recipe glusterfs, version 0.0.6 saved.",
+                "revision": null,
+                "timestamp": "2017-11-23T00:18:13Z"
+              },
+              {
+                "commit": "cee5f4c20fc33ea4d54bfecf56f4ad41ad15f4f3",
+                "message": "Recipe glusterfs, version 0.0.5 saved.",
+                "revision": null,
+                "timestamp": "2017-11-11T01:00:28Z"
+              },
+              {
+                "commit": "29b492f26ed35d80800b536623bafc51e2f0eff2",
+                "message": "Recipe glusterfs, version 0.0.4 saved.",
+                "revision": null,
+                "timestamp": "2017-11-11T00:28:30Z"
+              },
+              {
+                "commit": "03374adbf080fe34f5c6c29f2e49cc2b86958bf2",
+                "message": "Recipe glusterfs, version 0.0.3 saved.",
+                "revision": null,
+                "timestamp": "2017-11-10T23:15:52Z"
+              },
+              {
+                "commit": "0e08ecbb708675bfabc82952599a1712a843779d",
+                "message": "Recipe glusterfs, version 0.0.2 saved.",
+                "revision": null,
+                "timestamp": "2017-11-10T23:14:56Z"
+              },
+              {
+                "commit": "3e11eb87a63d289662cba4b1804a0947a6843379",
+                "message": "Recipe glusterfs, version 0.0.1 saved.",
+                "revision": null,
+                "timestamp": "2017-11-08T00:02:47Z"
+              }
+            ],
+            "name": "glusterfs",
+            "total": 6
+          }
+        ]
+      }
+
+POST `/api/v0/recipes/new`
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Create a new recipe, or update an existing recipe. This supports both JSON and TOML
+  for the recipe format. The recipe should be in the body of the request with the
+  `Content-Type` header set to either `application/json` or `text/x-toml`.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+DELETE `/api/v0/recipes/delete/<recipe_name>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Delete a recipe. The recipe is deleted from the branch, and will no longer
+  be listed by the `list` route. A recipe can be undeleted using the `undo` route
+  to revert to a previous commit.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+POST `/api/v0/recipes/workspace`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Write a recipe to the temporary workspace. This works exactly the same as `new` except
+  that it does not create a commit. JSON and TOML bodies are supported.
+
+  The workspace is meant to be used as a temporary recipe storage for clients.
+  It will be read by the `info` and `diff` routes if it is different from the
+  most recent commit.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+DELETE `/api/v0/recipes/workspace/<recipe_name>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Remove the temporary workspace copy of a recipe. The `info` route will now
+  return the most recent commit of the recipe. Any changes that were in the
+  workspace will be lost.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+POST `/api/v0/recipes/undo/<recipe_name>/<commit>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  This will revert the recipe to a previous commit. The commit hash from the `changes`
+  route can be used in this request.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+POST `/api/v0/recipes/tag/<recipe_name>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Tag a recipe as a new release. This uses git tags with a special format.
+  `refs/tags/<branch>/<filename>/r<revision>`. Only the most recent recipe commit
+  can be tagged. Revisions start at 1 and increment for each new tag
+  (per-recipe). If the commit has already been tagged it will return false.
+
+  The response will be a status response with `status` set to true, or an
+  error response with it set to false and an error message included.
+
+`/api/v0/recipes/diff/<recipe_name>/<from_commit>/<to_commit>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the differences between two commits, or the workspace. The commit hash
+  from the `changes` response can be used here, or several special strings:
+
+  - NEWEST will select the newest git commit. This works for `from_commit` or `to_commit`
+  - WORKSPACE will select the workspace copy. This can only be used in `to_commit`
+
+  eg. `/api/v0/recipes/diff/glusterfs/NEWEST/WORKSPACE` will return the differences
+  between the most recent git commit and the contents of the workspace.
+
+  Each entry in the response's diff object contains the old recipe value and the new one.
+  If old is null and new is set, then it was added.
+  If new is null and old is set, then it was removed.
+  If both are set, then it was changed.
+
+  The old/new entries will have the name of the recipe field that was changed. This
+  can be one of: Name, Description, Version, Module, or Package.
+  The contents for these will be the old/new values for them.
+
+  In the example below the version was changed and the ping package was added.
+
+  Example::
+
+      {
+        "diff": [
+          {
+            "new": {
+              "Version": "0.0.6"
+            },
+            "old": {
+              "Version": "0.0.5"
+            }
+          },
+          {
+            "new": {
+              "Package": {
+                "name": "ping",
+                "version": "3.2.1"
+              }
+            },
+            "old": null
+          }
+        ]
+      }
+
+`/api/v0/recipes/freeze/<recipe_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return a JSON representation of the recipe with the package and module versions set
+  to the exact versions chosen by depsolving the recipe.
+
+  Example::
+
+      {
+        "errors": [],
+        "recipes": [
+          {
+            "recipe": {
+              "description": "An example GlusterFS server with samba",
+              "modules": [
+                {
+                  "name": "glusterfs",
+                  "version": "3.8.4-18.4.el7.x86_64"
+                },
+                {
+                  "name": "glusterfs-cli",
+                  "version": "3.8.4-18.4.el7.x86_64"
+                }
+              ],
+              "name": "glusterfs",
+              "packages": [
+                {
+                  "name": "ping",
+                  "version": "2:3.2.1-2.el7.noarch"
+                },
+                {
+                  "name": "samba",
+                  "version": "4.6.2-8.el7.x86_64"
+                }
+              ],
+              "version": "0.0.6"
+            }
+          }
+        ]
+      }
+
+`/api/v0/recipes/depsolve/<recipe_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Depsolve the recipe using yum, return the recipe used, and the NEVRAs of the packages
+  chosen to satisfy the recipe's requirements. The response will include a list of results,
+  with the full dependency list in `dependencies`, the NEVRAs for the recipe's direct modules
+  and packages in `modules`, and any error will be in `errors`.
+
+  Example::
+
+      {
+        "errors": [],
+        "recipes": [
+          {
+            "dependencies": [
+              {
+                "arch": "noarch",
+                "epoch": "0",
+                "name": "2ping",
+                "release": "2.el7",
+                "version": "3.2.1"
+              },
+              {
+                "arch": "x86_64",
+                "epoch": "0",
+                "name": "acl",
+                "release": "12.el7",
+                "version": "2.2.51"
+              },
+              {
+                "arch": "x86_64",
+                "epoch": "0",
+                "name": "audit-libs",
+                "release": "3.el7",
+                "version": "2.7.6"
+              },
+              {
+                "arch": "x86_64",
+                "epoch": "0",
+                "name": "avahi-libs",
+                "release": "17.el7",
+                "version": "0.6.31"
+              },
+              ...
+            ],
+            "modules": [
+              {
+                "arch": "noarch",
+                "epoch": "0",
+                "name": "2ping",
+                "release": "2.el7",
+                "version": "3.2.1"
+              },
+              {
+                "arch": "x86_64",
+                "epoch": "0",
+                "name": "glusterfs",
+                "release": "18.4.el7",
+                "version": "3.8.4"
+              },
+              ...
+            ],
+            "recipe": {
+              "description": "An example GlusterFS server with samba",
+              "modules": [
+                {
+                  "name": "glusterfs",
+                  "version": "3.7.*"
+                },
+             ...
+            }
+          }
+        ]
+      }
+
+`/api/v0/projects/list[?offset=0&limit=20]`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  List all of the available projects. By default this returns the first 20 items,
+  but this can be changed by setting the `offset` and `limit` arguments.
+
+  Example::
+
+      {
+        "limit": 20,
+        "offset": 0,
+        "projects": [
+          {
+            "description": "0 A.D. (pronounced \"zero ey-dee\") is a ...",
+            "homepage": "http://play0ad.com",
+            "name": "0ad",
+            "summary": "Cross-Platform RTS Game of Ancient Warfare",
+            "upstream_vcs": "UPSTREAM_VCS"
+          },
+          ...
+        ],
+        "total": 21770
+      }
+
+`/api/v0/projects/info/<project_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return information about the comma-separated list of projects. It includes the description
+  of the package along with the list of available builds.
+
+  Example::
+
+      {
+        "projects": [
+          {
+            "builds": [
+              {
+                "arch": "x86_64",
+                "build_config_ref": "BUILD_CONFIG_REF",
+                "build_env_ref": "BUILD_ENV_REF",
+                "build_time": "2017-03-01T08:39:23",
+                "changelog": "- restore incremental backups correctly, files ...",
+                "epoch": "2",
+                "metadata": {},
+                "release": "32.el7",
+                "source": {
+                  "license": "GPLv3+",
+                  "metadata": {},
+                  "source_ref": "SOURCE_REF",
+                  "version": "1.26"
+                }
+              }
+            ],
+            "description": "The GNU tar program saves many ...",
+            "homepage": "http://www.gnu.org/software/tar/",
+            "name": "tar",
+            "summary": "A GNU file archiving program",
+            "upstream_vcs": "UPSTREAM_VCS"
+          }
+        ]
+      }
+
+`/api/v0/projects/depsolve/<project_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Depsolve the comma-separated list of projects and return the list of NEVRAs needed
+  to satisfy the request.
+
+  Example::
+
+      {
+        "projects": [
+          {
+            "arch": "noarch",
+            "epoch": "0",
+            "name": "basesystem",
+            "release": "7.el7",
+            "version": "10.0"
+          },
+          {
+            "arch": "x86_64",
+            "epoch": "0",
+            "name": "bash",
+            "release": "28.el7",
+            "version": "4.2.46"
+          },
+          {
+            "arch": "x86_64",
+            "epoch": "0",
+            "name": "filesystem",
+            "release": "21.el7",
+            "version": "3.2"
+          },
+          ...
+        ]
+      }
+
+`/api/v0/modules/list[?offset=0&limit=20]`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return a list of all of the available modules. This includes the name and the
+  group_type, which is always "rpm" for lorax-composer. By default this returns
+  the first 20 items. This can be changed by setting the `offset` and `limit`
+  arguments.
+
+  Example::
+
+      {
+        "limit": 20,
+        "modules": [
+          {
+            "group_type": "rpm",
+            "name": "0ad"
+          },
+          {
+            "group_type": "rpm",
+            "name": "0ad-data"
+          },
+          {
+            "group_type": "rpm",
+            "name": "0install"
+          },
+          {
+            "group_type": "rpm",
+            "name": "2048-cli"
+          },
+          ...
+        ]
+        "total": 21770
+      }
+
+`/api/v0/modules/list/<module_names>[?offset=0&limit=20]`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the list of comma-separated modules. Output is the same as `/modules/list`
+
+  Example::
+
+      {
+        "limit": 20,
+        "modules": [
+          {
+            "group_type": "rpm",
+            "name": "tar"
+          }
+        ],
+        "offset": 0,
+        "total": 1
+      }
+
+`/api/v0/modules/info/<module_names>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the module's dependencies, and the information about the module.
+
+  Example::
+
+      {
+        "modules": [
+          {
+            "dependencies": [
+              {
+                "arch": "noarch",
+                "epoch": "0",
+                "name": "basesystem",
+                "release": "7.el7",
+                "version": "10.0"
+              },
+              {
+                "arch": "x86_64",
+                "epoch": "0",
+                "name": "bash",
+                "release": "28.el7",
+                "version": "4.2.46"
+              },
+              ...
+            ],
+            "description": "The GNU tar program saves ...",
+            "homepage": "http://www.gnu.org/software/tar/",
+            "name": "tar",
+            "summary": "A GNU file archiving program",
+            "upstream_vcs": "UPSTREAM_VCS"
+          }
+        ]
+      }
+
+POST `/api/v0/compose`
+^^^^^^^^^^^^^^^^^^^^^^
+
+  Start a compose. The content type should be 'application/json' and the body of the POST
+  should look like this::
+
+      {
+        "recipe_name": "http-server",
+        "compose_type": "tar",
+        "branch": "master"
+      }
+
+  Pass it the name of the recipe, the type of output (from '/api/v0/compose/types'), and the
+  recipe branch to use. 'branch' is optional and will default to master. It will create a new
+  build and add it to the queue. It returns the build uuid and a status if it succeeds::
+
+      {
+        "build_id": "e6fa6db4-9c81-4b70-870f-a697ca405cdf",
+        "status": true
+      }
+
+`/api/v0/compose/types`
+^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns the list of supported output types that are valid for use with 'POST /api/v0/compose'
+
+      {
+        "types": [
+          {
+            "enabled": true,
+            "name": "tar"
+          }
+        ]
+      }
+
+`/api/v0/compose/queue`
+^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the status of the build queue. It includes information about the builds waiting,
+  and the build that is running.
+
+  Example::
+
+      {
+        "new": [
+          {
+            "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
+            "recipe": "glusterfs",
+            "queue_status": "WAITING",
+            "timestamp": 1517362647.4570868,
+            "version": "0.0.6"
+          },
+          {
+            "id": "6d292bd0-bec7-4825-8d7d-41ef9c3e4b73",
+            "recipe": "kubernetes",
+            "queue_status": "WAITING",
+            "timestamp": 1517362659.0034983,
+            "version": "0.0.1"
+          }
+        ],
+        "run": [
+          {
+            "id": "745712b2-96db-44c0-8014-fe925c35e795",
+            "recipe": "glusterfs",
+            "queue_status": "RUNNING",
+            "timestamp": 1517362633.7965999,
+            "version": "0.0.6"
+          }
+        ]
+      }
+
+`/api/v0/compose/finished`
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the details on all of the finished composes on the system.
+
+  Example::
+
+      {
+        "finished": [
+          {
+            "id": "70b84195-9817-4b8a-af92-45e380f39894",
+            "recipe": "glusterfs",
+            "queue_status": "FINISHED",
+            "timestamp": 1517351003.8210032,
+            "version": "0.0.6"
+          },
+          {
+            "id": "e695affd-397f-4af9-9022-add2636e7459",
+            "recipe": "glusterfs",
+            "queue_status": "FINISHED",
+            "timestamp": 1517362289.7193348,
+            "version": "0.0.6"
+          }
+        ]
+      }
+
+`/api/v0/compose/failed`
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the details on all of the failed composes on the system.
+
+  Example::
+
+      {
+        "failed": [
+           {
+            "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
+            "recipe": "http-server",
+            "queue_status": "FAILED",
+            "timestamp": 1517523249.9301329,
+            "version": "0.0.2"
+          }
+        ]
+      }
+
+`/api/v0/compose/status/<uuids>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Return the details for each of the comma-separated list of uuids.
+
+  Example::
+
+      {
+        "uuids": [
+          {
+            "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
+            "recipe": "http-server",
+            "queue_status": "FINISHED",
+            "timestamp": 1517523644.2384307,
+            "version": "0.0.2"
+          },
+          {
+            "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
+            "recipe": "glusterfs",
+            "queue_status": "FINISHED",
+            "timestamp": 1517363442.188399,
+            "version": "0.0.6"
+          }
+        ]
+      }
+
+DELETE `/api/v0/recipes/cancel/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Cancel the build, if it is not finished, and delete the results. It will return a
+  status of True if it is successful.
+
+  Example::
+
+      {
+        "status": true,
+        "uuid": "03397f8d-acff-4cdb-bd31-f629b7a948f5"
+      }
+
+DELETE `/api/v0/compose/delete/<uuids>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Delete the list of comma-separated uuids from the compose results.
+
+  Example::
+
+      {
+        "errors": [],
+        "uuids": [
+          {
+            "status": true,
+            "uuid": "ae1bf7e3-7f16-4c9f-b36e-3726a1093fd0"
+          }
+        ]
+      }
+
+`/api/v0/compose/info/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Get detailed information about the compose. The returned JSON string will
+  contain the following information:
+
+    * id - The uuid of the comoposition
+    * config - containing the configuration settings used to run Anaconda
+    * recipe - The depsolved recipe used to generate the kickstart
+    * commit - The (local) git commit hash for the recipe used
+    * deps - The NEVRA of all of the dependencies used in the composition
+    * compose_type - The type of output generated (tar, iso, etc.)
+    * queue_status - The final status of the composition (FINISHED or FAILED)
+
+  Example::
+
+      {
+        "commit": "7078e521a54b12eae31c3fd028680da7a0815a4d",
+        "compose_type": "tar",
+        "config": {
+          "anaconda_args": "",
+          "armplatform": "",
+          "compress_args": [],
+          "compression": "xz",
+          "image_name": "root.tar.xz",
+          ...
+        },
+        "deps": {
+          "packages": [
+            {
+              "arch": "x86_64",
+              "epoch": "0",
+              "name": "acl",
+              "release": "14.el7",
+              "version": "2.2.51"
+            }
+          ]
+        },
+        "id": "c30b7d80-523b-4a23-ad52-61b799739ce8",
+        "queue_status": "FINISHED",
+        "recipe": {
+          "description": "An example kubernetes master",
+          ...
+        }
+      }
+
+`/api/v0/compose/metadata/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns a .tar of the metadata used for the build. This includes all the
+  information needed to reproduce the build, including the final kickstart
+  populated with repository and package NEVRA.
+
+  The mime type is set to 'application/x-tar' and the filename is set to
+  UUID-metadata.tar
+
+  The .tar is uncompressed, but is not large.
+
+`/api/v0/compose/results/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns a .tar of the metadata, logs, and output image of the build. This
+  includes all the information needed to reproduce the build, including the
+  final kickstart populated with repository and package NEVRA. The output image
+  is already in compressed form so the returned tar is not compressed.
+
+  The mime type is set to 'application/x-tar' and the filename is set to
+  UUID.tar
+
+`/api/v0/compose/logs/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns a .tar of the anaconda build logs. The tar is not compressed, but is
+  not large.
+
+  The mime type is set to 'application/x-tar' and the filename is set to
+  UUID-logs.tar
+
+`/api/v0/compose/image/<uuid>`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns the output image from the build. The filename is set to the filename
+  from the build. eg. root.tar.xz or boot.iso.
+
+`/api/v0/compose/log/<uuid>[?size=kbytes]`
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  Returns the end of the anaconda.log. The size parameter is optional and defaults to 1Mbytes
+  if it is not included. The returned data is raw text from the end of the logfile, starting on
+  a line boundry.
+
+  Example::
+
+      12:59:24,222 INFO anaconda: Running Thread: AnaConfigurationThread (140629395244800)
+      12:59:24,223 INFO anaconda: Configuring installed system
+      12:59:24,912 INFO anaconda: Configuring installed system
+      12:59:24,912 INFO anaconda: Creating users
+      12:59:24,913 INFO anaconda: Clearing libuser.conf at /tmp/libuser.Dyy8Gj
+      12:59:25,154 INFO anaconda: Creating users
+      12:59:25,155 INFO anaconda: Configuring addons
+      12:59:25,155 INFO anaconda: Configuring addons
+      12:59:25,155 INFO anaconda: Generating initramfs
+      12:59:49,467 INFO anaconda: Generating initramfs
+      12:59:49,467 INFO anaconda: Running post-installation scripts
+      12:59:49,467 INFO anaconda: Running kickstart %%post script(s)
+      12:59:50,782 INFO anaconda: All kickstart %%post script(s) have been run
+      12:59:50,782 INFO anaconda: Running post-installation scripts
+      12:59:50,784 INFO anaconda: Thread Done: AnaConfigurationThread (140629395244800)
+
+"""
+
+import logging
+log = logging.getLogger("lorax-composer")
+
+from flask import jsonify, request, Response, send_file
+
+from pylorax.api.compose import start_build, compose_types
+from pylorax.api.crossdomain import crossdomain
+from pylorax.api.projects import projects_list, projects_info, projects_depsolve
+from pylorax.api.projects import modules_list, modules_info, ProjectsError
+from pylorax.api.queue import queue_status, build_status, uuid_delete, uuid_status, uuid_info
+from pylorax.api.queue import uuid_tar, uuid_image, uuid_cancel, uuid_log
+from pylorax.api.recipes import list_branch_files, read_recipe_commit, recipe_filename, list_commits
+from pylorax.api.recipes import recipe_from_dict, recipe_from_toml, commit_recipe, delete_recipe, revert_recipe
+from pylorax.api.recipes import tag_recipe_commit, recipe_diff
+from pylorax.api.workspace import workspace_read, workspace_write, workspace_delete
+
+# The API functions don't actually get called by any code here
+# pylint: disable=unused-variable
+
+
[docs]def take_limits(iterable, offset, limit): + """ Apply offset and limit to an iterable object + + :param iterable: The object to limit + :type iterable: iter + :param offset: The number of items to skip + :type offset: int + :param limit: The total number of items to return + :type limit: int + :returns: A subset of the iterable + """ + return iterable[offset:][:limit] +
+
[docs]def v0_api(api): + # Note that Sphinx will not generate documentations for any of these. + @api.route("/api/v0/test") + @crossdomain(origin="*") + def v0_test(): + return "API v0 test" + + @api.route("/api/v0/status") + @crossdomain(origin="*") + def v0_status(): + return jsonify(build="devel", api="0", db_version="0", schema_version="0", db_supported=False) + + @api.route("/api/v0/recipes/list") + @crossdomain(origin="*") + def v0_recipes_list(): + """List the available recipes on a branch.""" + branch = request.args.get("branch", "master") + try: + limit = int(request.args.get("limit", "20")) + offset = int(request.args.get("offset", "0")) + except ValueError as e: + return jsonify(error={"msg":str(e)}), 400 + + with api.config["GITLOCK"].lock: + recipes = take_limits(map(lambda f: f[:-5], list_branch_files(api.config["GITLOCK"].repo, branch)), offset, limit) + return jsonify(recipes=recipes, limit=limit, offset=offset, total=len(recipes)) + + @api.route("/api/v0/recipes/info/<recipe_names>") + @crossdomain(origin="*") + def v0_recipes_info(recipe_names): + """Return the contents of the recipe, or a list of recipes""" + branch = request.args.get("branch", "master") + recipes = [] + changes = [] + errors = [] + for recipe_name in [n.strip() for n in recipe_names.split(",")]: + exceptions = [] + # Get the workspace version (if it exists) + try: + with api.config["GITLOCK"].lock: + ws_recipe = workspace_read(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + ws_recipe = None + exceptions.append(str(e)) + log.error("(v0_recipes_info) %s", str(e)) + + # Get the git version (if it exists) + try: + with api.config["GITLOCK"].lock: + git_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + git_recipe = None + exceptions.append(str(e)) + log.error("(v0_recipes_info) %s", str(e)) + + if not ws_recipe and not git_recipe: + # Neither recipe, return an error + errors.append({"recipe":recipe_name, "msg":", ".join(exceptions)}) + elif ws_recipe and not git_recipe: + # No git recipe, return the workspace recipe + changes.append({"name":recipe_name, "changed":True}) + recipes.append(ws_recipe) + elif not ws_recipe and git_recipe: + # No workspace recipe, no change, return the git recipe + changes.append({"name":recipe_name, "changed":False}) + recipes.append(git_recipe) + else: + # Both exist, maybe changed, return the workspace recipe + changes.append({"name":recipe_name, "changed":ws_recipe != git_recipe}) + recipes.append(ws_recipe) + + # Sort all the results by case-insensitive recipe name + changes = sorted(changes, key=lambda c: c["name"].lower()) + recipes = sorted(recipes, key=lambda r: r["name"].lower()) + errors = sorted(errors, key=lambda e: e["recipe"].lower()) + + return jsonify(changes=changes, recipes=recipes, errors=errors) + + @api.route("/api/v0/recipes/changes/<recipe_names>") + @crossdomain(origin="*") + def v0_recipes_changes(recipe_names): + """Return the changes to a recipe or list of recipes""" + branch = request.args.get("branch", "master") + try: + limit = int(request.args.get("limit", "20")) + offset = int(request.args.get("offset", "0")) + except ValueError as e: + return jsonify(error={"msg":str(e)}), 400 + + recipes = [] + errors = [] + for recipe_name in [n.strip() for n in recipe_names.split(",")]: + filename = recipe_filename(recipe_name) + try: + with api.config["GITLOCK"].lock: + commits = take_limits(list_commits(api.config["GITLOCK"].repo, branch, filename), offset, limit) + except Exception as e: + errors.append({"recipe":recipe_name, "msg":e}) + log.error("(v0_recipes_changes) %s", str(e)) + else: + recipes.append({"name":recipe_name, "changes":commits, "total":len(commits)}) + + recipes = sorted(recipes, key=lambda r: r["name"].lower()) + errors = sorted(errors, key=lambda e: e["recipe"].lower()) + + return jsonify(recipes=recipes, errors=errors, offset=offset, limit=limit) + + @api.route("/api/v0/recipes/new", methods=["POST"]) + @crossdomain(origin="*") + def v0_recipes_new(): + """Commit a new recipe""" + branch = request.args.get("branch", "master") + try: + if request.headers['Content-Type'] == "text/x-toml": + recipe = recipe_from_toml(request.data) + else: + recipe = recipe_from_dict(request.get_json(cache=False)) + + with api.config["GITLOCK"].lock: + commit_recipe(api.config["GITLOCK"].repo, branch, recipe) + + # Read the recipe with new version and write it to the workspace + recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe["name"]) + workspace_write(api.config["GITLOCK"].repo, branch, recipe) + except Exception as e: + log.error("(v0_recipes_new) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/delete/<recipe_name>", methods=["DELETE"]) + @crossdomain(origin="*") + def v0_recipes_delete(recipe_name): + """Delete a recipe from git""" + branch = request.args.get("branch", "master") + try: + with api.config["GITLOCK"].lock: + delete_recipe(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + log.error("(v0_recipes_delete) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/workspace", methods=["POST"]) + @crossdomain(origin="*") + def v0_recipes_workspace(): + """Write a recipe to the workspace""" + branch = request.args.get("branch", "master") + try: + if request.headers['Content-Type'] == "text/x-toml": + recipe = recipe_from_toml(request.data) + else: + recipe = recipe_from_dict(request.get_json(cache=False)) + + with api.config["GITLOCK"].lock: + workspace_write(api.config["GITLOCK"].repo, branch, recipe) + except Exception as e: + log.error("(v0_recipes_workspace) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/workspace/<recipe_name>", methods=["DELETE"]) + @crossdomain(origin="*") + def v0_recipes_delete_workspace(recipe_name): + """Delete a recipe from the workspace""" + branch = request.args.get("branch", "master") + try: + with api.config["GITLOCK"].lock: + workspace_delete(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + log.error("(v0_recipes_delete_workspace) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/undo/<recipe_name>/<commit>", methods=["POST"]) + @crossdomain(origin="*") + def v0_recipes_undo(recipe_name, commit): + """Undo changes to a recipe by reverting to a previous commit.""" + branch = request.args.get("branch", "master") + try: + with api.config["GITLOCK"].lock: + revert_recipe(api.config["GITLOCK"].repo, branch, recipe_name, commit) + + # Read the new recipe and write it to the workspace + recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + workspace_write(api.config["GITLOCK"].repo, branch, recipe) + except Exception as e: + log.error("(v0_recipes_undo) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/tag/<recipe_name>", methods=["POST"]) + @crossdomain(origin="*") + def v0_recipes_tag(recipe_name): + """Tag a recipe's latest recipe commit as a 'revision'""" + branch = request.args.get("branch", "master") + try: + with api.config["GITLOCK"].lock: + tag_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + log.error("(v0_recipes_tag) %s", str(e)) + return jsonify(status=False, error={"msg":str(e)}), 400 + else: + return jsonify(status=True) + + @api.route("/api/v0/recipes/diff/<recipe_name>/<from_commit>/<to_commit>") + @crossdomain(origin="*") + def v0_recipes_diff(recipe_name, from_commit, to_commit): + """Return the differences between two commits of a recipe""" + branch = request.args.get("branch", "master") + try: + if from_commit == "NEWEST": + with api.config["GITLOCK"].lock: + old_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + else: + with api.config["GITLOCK"].lock: + old_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, from_commit) + except Exception as e: + log.error("(v0_recipes_diff) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + try: + if to_commit == "WORKSPACE": + with api.config["GITLOCK"].lock: + new_recipe = workspace_read(api.config["GITLOCK"].repo, branch, recipe_name) + # If there is no workspace, use the newest commit instead + if not new_recipe: + with api.config["GITLOCK"].lock: + new_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + elif to_commit == "NEWEST": + with api.config["GITLOCK"].lock: + new_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + else: + with api.config["GITLOCK"].lock: + new_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, to_commit) + except Exception as e: + log.error("(v0_recipes_diff) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + diff = recipe_diff(old_recipe, new_recipe) + return jsonify(diff=diff) + + @api.route("/api/v0/recipes/freeze/<recipe_names>") + @crossdomain(origin="*") + def v0_recipes_freeze(recipe_names): + """Return the recipe with the exact modules and packages selected by depsolve""" + branch = request.args.get("branch", "master") + recipes = [] + errors = [] + for recipe_name in [n.strip() for n in sorted(recipe_names.split(","), key=lambda n: n.lower())]: + # get the recipe + # Get the workspace version (if it exists) + recipe = None + try: + with api.config["GITLOCK"].lock: + recipe = workspace_read(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception: + pass + + if not recipe: + # No workspace version, get the git version (if it exists) + try: + with api.config["GITLOCK"].lock: + recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + errors.append({"recipe":recipe_name, "msg":str(e)}) + log.error("(v0_recipes_freeze) %s", str(e)) + + # No recipe found, skip it. + if not recipe: + errors.append({"recipe":recipe_name, "msg":"Recipe not found"}) + continue + + # Combine modules and packages and depsolve the list + # TODO include the version/glob in the depsolving + module_names = recipe.module_names + package_names = recipe.package_names + projects = sorted(set(module_names+package_names), key=lambda n: n.lower()) + deps = [] + try: + with api.config["YUMLOCK"].lock: + deps = projects_depsolve(api.config["YUMLOCK"].yb, projects) + except ProjectsError as e: + errors.append({"recipe":recipe_name, "msg":str(e)}) + log.error("(v0_recipes_freeze) %s", str(e)) + + recipes.append({"recipe": recipe.freeze(deps)}) + + return jsonify(recipes=recipes, errors=errors) + + @api.route("/api/v0/recipes/depsolve/<recipe_names>") + @crossdomain(origin="*") + def v0_recipes_depsolve(recipe_names): + """Return the dependencies for a recipe""" + branch = request.args.get("branch", "master") + recipes = [] + errors = [] + for recipe_name in [n.strip() for n in sorted(recipe_names.split(","), key=lambda n: n.lower())]: + # get the recipe + # Get the workspace version (if it exists) + recipe = None + try: + with api.config["GITLOCK"].lock: + recipe = workspace_read(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception: + pass + + if not recipe: + # No workspace version, get the git version (if it exists) + try: + with api.config["GITLOCK"].lock: + recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name) + except Exception as e: + errors.append({"recipe":recipe_name, "msg":str(e)}) + log.error("(v0_recipes_depsolve) %s", str(e)) + + # No recipe found, skip it. + if not recipe: + errors.append({"recipe":recipe_name, "msg":"Recipe not found"}) + continue + + # Combine modules and packages and depsolve the list + # TODO include the version/glob in the depsolving + module_names = map(lambda m: m["name"], recipe["modules"] or []) + package_names = map(lambda p: p["name"], recipe["packages"] or []) + projects = sorted(set(module_names+package_names), key=lambda n: n.lower()) + deps = [] + try: + with api.config["YUMLOCK"].lock: + deps = projects_depsolve(api.config["YUMLOCK"].yb, projects) + except ProjectsError as e: + errors.append({"recipe":recipe_name, "msg":str(e)}) + log.error("(v0_recipes_depsolve) %s", str(e)) + + # Get the NEVRA's of the modules and projects, add as "modules" + modules = [] + for dep in deps: + if dep["name"] in projects: + modules.append(dep) + modules = sorted(modules, key=lambda m: m["name"].lower()) + + recipes.append({"recipe":recipe, "dependencies":deps, "modules":modules}) + + return jsonify(recipes=recipes, errors=errors) + + @api.route("/api/v0/projects/list") + @crossdomain(origin="*") + def v0_projects_list(): + """List all of the available projects/packages""" + try: + limit = int(request.args.get("limit", "20")) + offset = int(request.args.get("offset", "0")) + except ValueError as e: + return jsonify(error={"msg":str(e)}), 400 + + try: + with api.config["YUMLOCK"].lock: + available = projects_list(api.config["YUMLOCK"].yb) + except ProjectsError as e: + log.error("(v0_projects_list) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + projects = take_limits(available, offset, limit) + return jsonify(projects=projects, offset=offset, limit=limit, total=len(available)) + + @api.route("/api/v0/projects/info/<project_names>") + @crossdomain(origin="*") + def v0_projects_info(project_names): + """Return detailed information about the listed projects""" + try: + with api.config["YUMLOCK"].lock: + projects = projects_info(api.config["YUMLOCK"].yb, project_names.split(",")) + except ProjectsError as e: + log.error("(v0_projects_info) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + return jsonify(projects=projects) + + @api.route("/api/v0/projects/depsolve/<project_names>") + @crossdomain(origin="*") + def v0_projects_depsolve(project_names): + """Return detailed information about the listed projects""" + try: + with api.config["YUMLOCK"].lock: + deps = projects_depsolve(api.config["YUMLOCK"].yb, project_names.split(",")) + except ProjectsError as e: + log.error("(v0_projects_depsolve) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + return jsonify(projects=deps) + + @api.route("/api/v0/modules/list") + @api.route("/api/v0/modules/list/<module_names>") + @crossdomain(origin="*") + def v0_modules_list(module_names=None): + """List available modules, filtering by module_names""" + try: + limit = int(request.args.get("limit", "20")) + offset = int(request.args.get("offset", "0")) + except ValueError as e: + return jsonify(error={"msg":str(e)}), 400 + + if module_names: + module_names = module_names.split(",") + + try: + with api.config["YUMLOCK"].lock: + available = modules_list(api.config["YUMLOCK"].yb, module_names) + except ProjectsError as e: + log.error("(v0_modules_list) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + modules = take_limits(available, offset, limit) + return jsonify(modules=modules, offset=offset, limit=limit, total=len(available)) + + @api.route("/api/v0/modules/info/<module_names>") + @crossdomain(origin="*") + def v0_modules_info(module_names): + """Return detailed information about the listed modules""" + try: + with api.config["YUMLOCK"].lock: + modules = modules_info(api.config["YUMLOCK"].yb, module_names.split(",")) + except ProjectsError as e: + log.error("(v0_modules_info) %s", str(e)) + return jsonify(error={"msg":str(e)}), 400 + + return jsonify(modules=modules) + + @api.route("/api/v0/compose", methods=["POST"]) + @crossdomain(origin="*") + def v0_compose_start(): + """Start a compose + + The body of the post should have these fields: + recipe_name - The recipe name from /recipes/list/ + compose_type - The type of output to create, from /compose/types + branch - Optional, defaults to master, selects the git branch to use for the recipe. + """ + # Passing ?test=1 will generate a fake FAILED compose. + # Passing ?test=2 will generate a fake FINISHED compose. + try: + test_mode = int(request.args.get("test", "0")) + except ValueError: + test_mode = 0 + + compose = request.get_json(cache=False) + + errors = [] + if not compose: + return jsonify(status=False, error={"msg":"Missing POST body"}), 400 + + if "recipe_name" not in compose: + errors.append("No 'recipe_name' in the JSON request") + else: + recipe_name = compose["recipe_name"] + + if "branch" not in compose or not compose["branch"]: + branch = "master" + else: + branch = compose["branch"] + + if "compose_type" not in compose: + errors.append("No 'compose_type' in the JSON request") + else: + compose_type = compose["compose_type"] + + if errors: + return jsonify(status=False, error={"msg":"\n".join(errors)}), 400 + + try: + build_id = start_build(api.config["COMPOSER_CFG"], api.config["YUMLOCK"], api.config["GITLOCK"], + branch, recipe_name, compose_type, test_mode) + except Exception as e: + return jsonify(status=False, error={"msg":str(e)}), 400 + + return jsonify(status=True, build_id=build_id) + + @api.route("/api/v0/compose/types") + @crossdomain(origin="*") + def v0_compose_types(): + """Return the list of enabled output types + + (only enabled types are returned) + """ + share_dir = api.config["COMPOSER_CFG"].get("composer", "share_dir") + return jsonify(types=[{"name": k, "enabled": True} for k in compose_types(share_dir)]) + + @api.route("/api/v0/compose/queue") + @crossdomain(origin="*") + def v0_compose_queue(): + """Return the status of the new and running queues""" + return jsonify(queue_status(api.config["COMPOSER_CFG"])) + + @api.route("/api/v0/compose/finished") + @crossdomain(origin="*") + def v0_compose_finished(): + """Return the list of finished composes""" + return jsonify(finished=build_status(api.config["COMPOSER_CFG"], "FINISHED")) + + @api.route("/api/v0/compose/failed") + @crossdomain(origin="*") + def v0_compose_failed(): + """Return the list of failed composes""" + return jsonify(failed=build_status(api.config["COMPOSER_CFG"], "FAILED")) + + @api.route("/api/v0/compose/status/<uuids>") + @crossdomain(origin="*") + def v0_compose_status(uuids): + """Return the status of the listed uuids""" + results = [] + for uuid in [n.strip().lower() for n in uuids.split(",")]: + details = uuid_status(api.config["COMPOSER_CFG"], uuid) + if details is not None: + results.append(details) + + return jsonify(uuids=results) + + @api.route("/api/v0/compose/cancel/<uuid>", methods=["DELETE"]) + @crossdomain(origin="*") + def v0_compose_cancel(uuid): + """Cancel a running compose and delete its results directory""" + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 + + if status["queue_status"] not in ["WAITING", "RUNNING"]: + return jsonify(status=False, uuid=uuid, msg="Cannot cancel a build that is in the %s state" % status["queue_status"]) + + try: + uuid_cancel(api.config["COMPOSER_CFG"], uuid) + except Exception as e: + return jsonify(status=False, uuid=uuid, msg=str(e)) + else: + return jsonify(status=True, uuid=uuid) + + @api.route("/api/v0/compose/delete/<uuids>", methods=["DELETE"]) + @crossdomain(origin="*") + def v0_compose_delete(uuids): + """Delete the compose results for the listed uuids""" + results = [] + errors = [] + for uuid in [n.strip().lower() for n in uuids.split(",")]: + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + errors.append({"uuid": uuid, "msg": "Not a valid build uuid"}) + elif status["queue_status"] not in ["FINISHED", "FAILED"]: + errors.append({"uuid":uuid, "msg":"Build not in FINISHED or FAILED."}) + else: + try: + uuid_delete(api.config["COMPOSER_CFG"], uuid) + except Exception as e: + errors.append({"uuid":uuid, "msg":str(e)}) + else: + results.append({"uuid":uuid, "status":True}) + return jsonify(uuids=results, errors=errors) + + @api.route("/api/v0/compose/info/<uuid>") + @crossdomain(origin="*") + def v0_compose_info(uuid): + """Return detailed info about a compose""" + try: + info = uuid_info(api.config["COMPOSER_CFG"], uuid) + except Exception as e: + return jsonify(status=False, msg=str(e)) + + return jsonify(**info) + + @api.route("/api/v0/compose/metadata/<uuid>") + @crossdomain(origin="*") + def v0_compose_metadata(uuid): + """Return a tar of the metadata for the build""" + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 + if status["queue_status"] not in ["FINISHED", "FAILED"]: + return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") + else: + return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=False, logs=False), + mimetype="application/x-tar", + headers=[("Content-Disposition", "attachment; filename=%s-metadata.tar;" % uuid)], + direct_passthrough=True) + + @api.route("/api/v0/compose/results/<uuid>") + @crossdomain(origin="*") + def v0_compose_results(uuid): + """Return a tar of the metadata and the results for the build""" + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 + elif status["queue_status"] not in ["FINISHED", "FAILED"]: + return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") + else: + return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=True, logs=True), + mimetype="application/x-tar", + headers=[("Content-Disposition", "attachment; filename=%s.tar;" % uuid)], + direct_passthrough=True) + + @api.route("/api/v0/compose/logs/<uuid>") + @crossdomain(origin="*") + def v0_compose_logs(uuid): + """Return a tar of the metadata for the build""" + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + return jsonify(status=False, msg="%s is not a valid build uuid"), 400 + elif status["queue_status"] not in ["FINISHED", "FAILED"]: + return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") + else: + return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=False, image=False, logs=True), + mimetype="application/x-tar", + headers=[("Content-Disposition", "attachment; filename=%s-logs.tar;" % uuid)], + direct_passthrough=True) + + @api.route("/api/v0/compose/image/<uuid>") + @crossdomain(origin="*") + def v0_compose_image(uuid): + """Return the output image for the build""" + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None: + return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 + elif status["queue_status"] not in ["FINISHED", "FAILED"]: + return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") + else: + image_name, image_path = uuid_image(api.config["COMPOSER_CFG"], uuid) + + # XXX - Will mime type guessing work for all our output? + return send_file(image_path, as_attachment=True, attachment_filename=image_name, add_etags=False) + + @api.route("/api/v0/compose/log/<uuid>") + @crossdomain(origin="*") + def v0_compose_log_tail(uuid): + """Return the end of the main anaconda.log, defaults to 1Mbytes""" + try: + size = int(request.args.get("size", "1024")) + except ValueError as e: + return jsonify(error={"msg":str(e)}), 400 + + status = uuid_status(api.config["COMPOSER_CFG"], uuid) + if status is None or status["queue_status"] == "WAITING": + return jsonify(status=False, uuid=uuid, msg="Build has not started yet. No logs to view") + try: + return Response(uuid_log(api.config["COMPOSER_CFG"], uuid, size), direct_passthrough=True) + except RuntimeError as e: + return jsonify(status=False, uuid=uuid, msg=str(e))
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/workspace.html b/lorax-composer/_modules/pylorax/api/workspace.html new file mode 100644 index 00000000..98569aa8 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/workspace.html @@ -0,0 +1,195 @@ + + + + + + + + + + pylorax.api.workspace — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.workspace

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import os
+
+from pylorax.api.recipes import recipe_filename, recipe_from_toml, RecipeFileError
+from pylorax.sysutils import joinpaths
+
+
+
[docs]def workspace_dir(repo, branch): + """Create the workspace's path from a Repository and branch + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :returns: The path to the branch's workspace directory + :rtype: str + + """ + repo_path = repo.get_location().get_path() + return joinpaths(repo_path, "workspace", branch) + +
+
[docs]def workspace_read(repo, branch, recipe_name): + """Read a Recipe from the branch's workspace + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: The name of the recipe + :type recipe_name: str + :returns: The workspace copy of the recipe, or None if it doesn't exist + :rtype: Recipe or None + :raises: RecipeFileError + """ + ws_dir = workspace_dir(repo, branch) + if not os.path.isdir(ws_dir): + os.makedirs(ws_dir) + filename = joinpaths(ws_dir, recipe_filename(recipe_name)) + if not os.path.exists(filename): + return None + try: + f = open(filename, 'rb') + recipe = recipe_from_toml(f.read()) + except IOError: + raise RecipeFileError + return recipe + +
+
[docs]def workspace_write(repo, branch, recipe): + """Write a recipe to the workspace + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe: The recipe to write to the workspace + :type recipe: Recipe + :returns: None + :raises: IO related errors + """ + ws_dir = workspace_dir(repo, branch) + if not os.path.isdir(ws_dir): + os.makedirs(ws_dir) + filename = joinpaths(ws_dir, recipe.filename) + open(filename, 'wb').write(recipe.toml()) + +
+
[docs]def workspace_delete(repo, branch, recipe_name): + """Delete the recipe from the workspace + + :param repo: Open repository + :type repo: Git.Repository + :param branch: Branch name + :type branch: str + :param recipe_name: The name of the recipe + :type recipe_name: str + :returns: None + :raises: IO related errors + """ + ws_dir = workspace_dir(repo, branch) + filename = joinpaths(ws_dir, recipe_filename(recipe_name)) + if os.path.exists(filename): + os.unlink(filename)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/api/yumbase.html b/lorax-composer/_modules/pylorax/api/yumbase.html new file mode 100644 index 00000000..b7738e85 --- /dev/null +++ b/lorax-composer/_modules/pylorax/api/yumbase.html @@ -0,0 +1,201 @@ + + + + + + + + + + pylorax.api.yumbase — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.api.yumbase

+#
+# Copyright (C) 2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# pylint: disable=bad-preconf-access
+
+import logging
+log = logging.getLogger("lorax-composer")
+
+import ConfigParser
+from fnmatch import fnmatchcase
+from glob import glob
+from distutils.util import strtobool
+import os
+import yum
+# This is a hack to short circuit yum's internal logging
+yum.logginglevels._added_handlers = True
+
+from pylorax.sysutils import joinpaths
+
+
[docs]def get_base_object(conf): + """Get the Yum object with settings from the config file + + :param conf: configuration object + :type conf: ComposerParser + :returns: A Yum base object + :rtype: YumBase + """ + cachedir = os.path.abspath(conf.get("composer", "cache_dir")) + yumconf = os.path.abspath(conf.get("composer", "yum_conf")) + repodir = os.path.abspath(conf.get("composer", "repo_dir")) + + c = ConfigParser.ConfigParser() + + # add the main section + section = "main" + data = {"cachedir": cachedir, + "keepcache": 0, + "gpgcheck": 0, + "plugins": 0, + "assumeyes": 1, + "reposdir": "", + "tsflags": "nodocs"} + + if conf.get_default("yum", "proxy", None): + data["proxy"] = conf.get("yum", "proxy") + + if conf.has_option("yum", "sslverify") and not conf.getboolean("yum", "sslverify"): + data["sslverify"] = "0" + + c.add_section(section) + map(lambda (key, value): c.set(section, key, value), data.items()) + + # write the yum configuration file + with open(yumconf, "w") as f: + c.write(f) + + # create the yum base object + yb = yum.YumBase() + + yb.preconf.fn = yumconf + + # TODO How to handle this? + yb.preconf.root = "/var/tmp/composer/yum/root" + if not os.path.isdir(yb.preconf.root): + os.makedirs(yb.preconf.root) + + _releasever = conf.get_default("composer", "releasever", None) + if not _releasever: + distroverpkg = ['system-release(releasever)', 'redhat-release'] + # Use yum private function to guess the releasever + _releasever = yum.config._getsysver("/", distroverpkg) + log.info("releasever = %s", _releasever) + yb.preconf.releasever = _releasever + + # Turn on as much yum logging as we can + yb.preconf.debuglevel = 6 + yb.preconf.errorlevel = 6 + yb.logger.setLevel(logging.DEBUG) + yb.verbose_logger.setLevel(logging.DEBUG) + + # Gather up all the available repo files, add the ones matching "repos":"enabled" patterns + enabled_repos = conf.get("repos", "enabled").split(",") + repo_files = glob(joinpaths(repodir, "*.repo")) + if not conf.has_option("repos", "use_system_repos") or conf.getboolean("repos", "use_system_repos"): + repo_files.extend(glob("/etc/yum.repos.d/*.repo")) + + for repo_file in repo_files: + name = os.path.basename(repo_file)[:-5] + if any(map(lambda pattern: fnmatchcase(name, pattern), enabled_repos)): # pylint: disable=cell-var-from-loop + yb.getReposFromConfigFile(repo_file) + + return yb
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/base.html b/lorax-composer/_modules/pylorax/base.html new file mode 100644 index 00000000..264f2b61 --- /dev/null +++ b/lorax-composer/_modules/pylorax/base.html @@ -0,0 +1,161 @@ + + + + + + + + + + pylorax.base — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.base

+#
+# base.py
+#
+# Copyright (C) 2009  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+from abc import ABCMeta, abstractmethod
+import sys
+
+import pylorax.output as output
+
+
+
[docs]class BaseLoraxClass(object): + + __metaclass__ = ABCMeta + + @abstractmethod + def __init__(self): + self.output = output.LoraxOutput() + +
[docs] def pcritical(self, msg, fobj=sys.stdout): + self.output.critical(msg, fobj) +
+
[docs] def perror(self, msg, fobj=sys.stdout): + self.output.error(msg, fobj) +
+
[docs] def pwarning(self, msg, fobj=sys.stdout): + self.output.warning(msg, fobj) +
+
[docs] def pinfo(self, msg, fobj=sys.stdout): + self.output.info(msg, fobj) +
+
[docs] def pdebug(self, msg, fobj=sys.stdout): + self.output.debug(msg, fobj) + +
+
[docs]class DataHolder(dict): + + def __init__(self, **kwargs): + dict.__init__(self) + + for attr, value in kwargs.items(): + self[attr] = value + + def __getattr__(self, attr): + return self[attr] + + def __setattr__(self, attr, value): + self[attr] = value + +
[docs] def copy(self): + return DataHolder(**dict.copy(self))
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/buildstamp.html b/lorax-composer/_modules/pylorax/buildstamp.html new file mode 100644 index 00000000..b44fc7a9 --- /dev/null +++ b/lorax-composer/_modules/pylorax/buildstamp.html @@ -0,0 +1,152 @@ + + + + + + + + + + pylorax.buildstamp — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.buildstamp

+#
+# buildstamp.py
+#
+# Copyright (C) 2010  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+import logging
+logger = logging.getLogger("pylorax.buildstamp")
+
+import datetime
+
+
+
[docs]class BuildStamp(object): + + def __init__(self, product, version, bugurl, isfinal, buildarch): + self.product = product + self.version = version + self.bugurl = bugurl + self.isfinal = isfinal + + now = datetime.datetime.now() + now = now.strftime("%Y%m%d%H%M") + self.uuid = "{0}.{1}".format(now, buildarch) + +
[docs] def write(self, outfile): + # get lorax version + try: + import pylorax.version + except ImportError: + vernum = "devel" + else: + vernum = pylorax.version.num + + logger.info("writing .buildstamp file") + with open(outfile, "w") as fobj: + fobj.write("[Main]\n") + fobj.write("Product={0.product}\n".format(self)) + fobj.write("Version={0.version}\n".format(self)) + fobj.write("BugURL={0.bugurl}\n".format(self)) + fobj.write("IsFinal={0.isfinal}\n".format(self)) + fobj.write("UUID={0.uuid}\n".format(self)) + fobj.write("[Compose]\n") + fobj.write("Lorax={0}\n".format(vernum))
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/creator.html b/lorax-composer/_modules/pylorax/creator.html new file mode 100644 index 00000000..7ac71cc5 --- /dev/null +++ b/lorax-composer/_modules/pylorax/creator.html @@ -0,0 +1,707 @@ + + + + + + + + + + pylorax.creator — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.creator

+#
+# Copyright (C) 2011-2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import logging
+log = logging.getLogger("pylorax")
+
+import os
+import tempfile
+import subprocess
+import shutil
+import hashlib
+import glob
+
+# Use Mako templates for appliance builder descriptions
+from mako.template import Template
+from mako.exceptions import text_error_template
+
+# Use pykickstart to calculate disk image size
+from pykickstart.parser import KickstartParser
+from pykickstart.version import makeVersion, RHEL7
+
+# Use the Lorax treebuilder branch for iso creation
+from pylorax import ArchData
+from pylorax.base import DataHolder
+from pylorax.treebuilder import TreeBuilder, RuntimeBuilder
+from pylorax.treebuilder import findkernels
+from pylorax.sysutils import joinpaths, remove
+from pylorax.imgutils import Mount, PartitionMount, copytree, mount, umount
+from pylorax.imgutils import mksquashfs, mkrootfsimg
+from pylorax.executils import execWithRedirect, runcmd
+from pylorax.installer import InstallError, novirt_install, virt_install
+
+RUNTIME = "images/install.img"
+
+# Default parameters for rebuilding initramfs, override with --dracut-args
+DRACUT_DEFAULT = ["--xz", "--add", "livenet dmsquash-live convertfs pollcdrom",
+                  "--omit", "plymouth", "--no-hostonly", "--no-early-microcode"]
+
+
+
[docs]def get_ks_disk_size(ks): + """Return the size of the kickstart's disk partitions + + :param ks: The kickstart + :type ks: Kickstart object + :returns: The size of the disk, in GiB + """ + disk_size = 1 + (sum([p.size for p in ks.handler.partition.partitions]) / 1024) + log.info("disk_size = %sGiB", disk_size) + return disk_size +
+
[docs]def is_image_mounted(disk_img): + """ + Return True if the disk_img is mounted + """ + with open("/proc/mounts") as mounts: + for _mount in mounts: + fields = _mount.split() + if len(fields) > 2 and fields[1] == disk_img: + return True + return False +
+
[docs]def find_ostree_root(phys_root): + """ + Find root of ostree deployment + + :param str phys_root: Path to physical root + :returns: Relative path of ostree deployment root + :rtype: str + :raise Exception: More than one deployment roots were found + """ + ostree_root = "" + ostree_sysroots = glob.glob(joinpaths(phys_root, "ostree/boot.0/*/*/0")) + if ostree_sysroots: + if len(ostree_sysroots) > 1: + raise Exception("Too many deployment roots found: %s" % ostree_sysroots) + ostree_root = os.path.relpath(ostree_sysroots[0], phys_root) + return ostree_root +
+
[docs]class KernelInfo(object): + """ + Info about the kernels in boot_dir + """ + def __init__(self, boot_dir): + self.boot_dir = boot_dir + self.list = self.get_kernels() + self.arch = self.get_kernel_arch() + log.debug("kernel_list for %s = %s", self.boot_dir, self.list) + log.debug("kernel_arch is %s", self.arch) + +
[docs] def get_kernels(self): + """ + Get a list of the kernels in the boot_dir + + Examine the vmlinuz-* versions and return a list of them + + Ignore any with -rescue- in them, these are dracut rescue images. + The user shoud add + -dracut-config-rescue + to the kickstart to remove them, but catch it here as well. + """ + files = os.listdir(self.boot_dir) + return [f[8:] for f in files if f.startswith("vmlinuz-") \ + and f.find("-rescue-") == -1] +
+
[docs] def get_kernel_arch(self): + """ + Get the arch of the first kernel in boot_dir + + Defaults to i386 + """ + if self.list: + kernel_arch = self.list[0].split(".")[-1] + else: + kernel_arch = "i386" + return kernel_arch + +
+
[docs]def make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, + vcpus=1, arch=None, title="Linux", project="Linux", + releasever="7"): + """ + Generate an appliance description file + + disk_img Full path of the disk image + name Name of the appliance, passed to the template + template Full path of Mako template + outfile Full path of file to write, using template + networks List of networks from the kickstart + ram Ram, in MB, passed to template. Default is 1024 + vcpus CPUs, passed to template. Default is 1 + arch CPU architecture. Default is 'x86_64' + title Title, passed to template. Default is 'Linux' + project Project, passed to template. Default is 'Linux' + releasever Release version, passed to template. Default is 17 + """ + if not (disk_img and template and outfile): + return None + + log.info("Creating appliance definition using %s", template) + + if not arch: + arch = "x86_64" + + log.info("Calculating SHA256 checksum of %s", disk_img) + sha256 = hashlib.sha256() + with open(disk_img) as f: + while True: + data = f.read(1024*1024) + if not data: + break + sha256.update(data) + log.info("SHA256 of %s is %s", disk_img, sha256.hexdigest()) + disk_info = DataHolder(name=os.path.basename(disk_img), format="raw", + checksum_type="sha256", checksum=sha256.hexdigest()) + try: + result = Template(filename=template).render(disks=[disk_info], name=name, + arch=arch, memory=ram, vcpus=vcpus, networks=networks, + title=title, project=project, releasever=releasever) + except Exception: + log.error(text_error_template().render()) + raise + + with open(outfile, "w") as f: + f.write(result) + +
+
[docs]def make_runtime(opts, mount_dir, work_dir): + """ + Make the squashfs image from a directory + + Result is in work_dir+RUNTIME + """ + kernels = KernelInfo(joinpaths(mount_dir, "boot" )) + + # Fake yum object + fake_yum = DataHolder(conf=DataHolder(installroot=mount_dir)) + # Fake arch with only basearch set + arch = ArchData(kernels.arch) + # TODO: Need to get release info from someplace... + product = DataHolder(name=opts.project, version=opts.releasever, release="", + variant="", bugurl="", isfinal=False) + + # This is a mounted image partition, cannot hardlink to it, so just use it + # symlink mount_dir/images to work_dir/images so we don't run out of space + os.makedirs(joinpaths(work_dir, "images")) + + rb = RuntimeBuilder(product, arch, fake_yum) + log.info("Creating runtime") + rb.create_runtime(joinpaths(work_dir, RUNTIME), size=None) +
+
[docs]def rebuild_initrds_for_live(opts, sys_root_dir, results_dir): + """ + Rebuild intrds for pxe live image (root=live:http://) + + :param opts: options passed to livemedia-creator + :type opts: argparse options + :param str sys_root_dir: Path to root of the system + :param str results_dir: Path of directory for storing results + """ + if not opts.dracut_args: + dracut_args = DRACUT_DEFAULT + else: + dracut_args = [] + for arg in opts.dracut_args: + dracut_args += arg.split(" ", 1) + log.info("dracut args = %s", dracut_args) + + dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + dracut_args + + kdir = "boot" + if opts.ostree: + kernels_dir = glob.glob(joinpaths(sys_root_dir, "boot/ostree/*"))[0] + kdir = os.path.relpath(kernels_dir, sys_root_dir) + + kernels = [kernel for kernel in findkernels(sys_root_dir, kdir) + if hasattr(kernel, "initrd")] + if not kernels: + raise Exception("No initrds found, cannot rebuild_initrds") + + # Hush some dracut warnings. TODO: bind-mount proc in place? + open(joinpaths(sys_root_dir,"/proc/modules"),"w") + + if opts.ostree: + # Dracut assumes to have some dirs in disk image + # /var/tmp for temp files + vartmp_dir = joinpaths(sys_root_dir, "var/tmp") + if not os.path.isdir(vartmp_dir): + os.mkdir(vartmp_dir) + # /root (maybe not fatal) + root_dir = joinpaths(sys_root_dir, "var/roothome") + if not os.path.isdir(root_dir): + os.mkdir(root_dir) + # /tmp (maybe not fatal) + tmp_dir = joinpaths(sys_root_dir, "sysroot/tmp") + if not os.path.isdir(tmp_dir): + os.mkdir(tmp_dir) + + for kernel in kernels: + outfile = kernel.initrd.path + ".live" + log.info("rebuilding %s", outfile) + + kver = kernel.version + + cmd = dracut + [outfile, kver] + runcmd(cmd, root=sys_root_dir) + + new_initrd_path = joinpaths(results_dir, os.path.basename(kernel.initrd.path)) + shutil.move(joinpaths(sys_root_dir, outfile), new_initrd_path) + os.chmod(new_initrd_path, 0644) + shutil.copy2(joinpaths(sys_root_dir, kernel.path), results_dir) + + os.unlink(joinpaths(sys_root_dir,"/proc/modules")) +
+
[docs]def create_pxe_config(template, images_dir, live_image_name, add_args = None): + """ + Create template for pxe to live configuration + + :param str images_dir: Path of directory with images to be used + :param str live_image_name: Name of live rootfs image file + :param list add_args: Arguments to be added to initrd= pxe config + """ + + add_args = add_args or [] + + kernels = [kernel for kernel in findkernels(images_dir, kdir="") + if hasattr(kernel, "initrd")] + if not kernels: + return + + kernel = kernels[0] + + add_args_str = " ".join(add_args) + + + try: + result = Template(filename=template).render(kernel=kernel.path, + initrd=kernel.initrd.path, liveimg=live_image_name, + addargs=add_args_str) + except Exception: + log.error(text_error_template().render()) + raise + + with open (joinpaths(images_dir, "PXE_CONFIG"), "w") as f: + f.write(result) +
+
[docs]def make_livecd(opts, mount_dir, work_dir): + """ + Take the content from the disk image and make a livecd out of it + + This uses wwood's squashfs live initramfs method: + * put the real / into LiveOS/rootfs.img + * make a squashfs of the LiveOS/rootfs.img tree + * make a simple initramfs with the squashfs.img and /etc/cmdline in it + * make a cpio of that tree + * append the squashfs.cpio to a dracut initramfs for each kernel installed + + Then on boot dracut reads /etc/cmdline which points to the squashfs.img + mounts that and then mounts LiveOS/rootfs.img as / + + """ + kernels = KernelInfo(joinpaths(mount_dir, "boot" )) + + arch = ArchData(kernels.arch) + # TODO: Need to get release info from someplace... + product = DataHolder(name=opts.project, version=opts.releasever, release="", + variant="", bugurl="", isfinal=False) + + # Link /images to work_dir/images to make the templates happy + if os.path.islink(joinpaths(mount_dir, "images")): + os.unlink(joinpaths(mount_dir, "images")) + execWithRedirect("/bin/ln", ["-s", joinpaths(work_dir, "images"), + joinpaths(mount_dir, "images")]) + + # The templates expect the config files to be in /tmp/config_files + # I think these should be release specific, not from lorax, but for now + configdir = joinpaths(opts.lorax_templates,"live/config_files/") + configdir_path = "tmp/config_files" + fullpath = joinpaths(mount_dir, configdir_path) + if os.path.exists(fullpath): + remove(fullpath) + shutil.copytree(configdir, fullpath) + + isolabel = opts.volid or "{0.name} {0.version} {1.basearch}".format(product, arch) + if len(isolabel) > 32: + isolabel = isolabel[:32] + log.warn("Truncating isolabel to 32 chars: %s", isolabel) + + tb = TreeBuilder(product=product, arch=arch, domacboot=opts.domacboot, + inroot=mount_dir, outroot=work_dir, + runtime=RUNTIME, isolabel=isolabel, + templatedir=joinpaths(opts.lorax_templates,"live/")) + log.info( "Rebuilding initrds" ) + if not opts.dracut_args: + dracut_args = DRACUT_DEFAULT + else: + dracut_args = [] + for arg in opts.dracut_args: + dracut_args += arg.split(" ", 1) + log.info("dracut args = %s", dracut_args) + tb.rebuild_initrds(add_args=dracut_args) + log.info("Building boot.iso") + tb.build() + + return work_dir +
+
[docs]def mount_boot_part_over_root(img_mount): + """ + Mount boot partition to /boot of root fs mounted in img_mount + + Used for OSTree so it finds deployment configurations on live rootfs + + param img_mount: object with mounted disk image root partition + type img_mount: imgutils.PartitionMount + """ + root_dir = img_mount.mount_dir + is_boot_part = lambda dir: os.path.exists(dir+"/loader.0") + tmp_mount_dir = tempfile.mkdtemp() + sys_root = find_ostree_root(root_dir) + sysroot_boot_dir = None + for dev, _size in img_mount.loop_devices: + if dev is img_mount.mount_dev: + continue + try: + mount("/dev/mapper/"+dev, mnt=tmp_mount_dir) + if is_boot_part(tmp_mount_dir): + umount(tmp_mount_dir) + sysroot_boot_dir = joinpaths(joinpaths(root_dir, sys_root), "boot") + mount("/dev/mapper/"+dev, mnt=sysroot_boot_dir) + break + else: + umount(tmp_mount_dir) + except subprocess.CalledProcessError as e: + log.debug("Looking for boot partition error: %s", e) + remove(tmp_mount_dir) + return sysroot_boot_dir +
+
[docs]def make_squashfs(disk_img, work_dir, compression="xz"): + """ + Take disk_img and put it into LiveOS/rootfs.img and squashfs this + tree into work_dir+RUNTIME + """ + liveos_dir = joinpaths(work_dir, "runtime/LiveOS") + os.makedirs(liveos_dir) + os.makedirs(os.path.dirname(joinpaths(work_dir, RUNTIME))) + + rc = execWithRedirect("/bin/ln", [disk_img, joinpaths(liveos_dir, "rootfs.img")]) + if rc != 0: + shutil.copy2(disk_img, joinpaths(liveos_dir, "rootfs.img")) + + mksquashfs(joinpaths(work_dir, "runtime"), + joinpaths(work_dir, RUNTIME), compression) + remove(joinpaths(work_dir, "runtime")) + +
+
[docs]def make_image(opts, ks, callback_func=None): + """ + Install to an image + + Use virt or anaconda to install to an image. + + Returns the full path of of the image created. + """ + disk_size = get_ks_disk_size(ks) + + if opts.image_name: + disk_img = joinpaths(opts.result_dir, opts.image_name) + else: + disk_img = tempfile.mktemp(prefix="disk", suffix=".img", dir=opts.result_dir) + log.info("disk_img = %s", disk_img) + + try: + if opts.no_virt: + novirt_install(opts, disk_img, disk_size, ks.handler.method.url, callback_func=callback_func) + else: + install_log = os.path.abspath(os.path.dirname(opts.logfile))+"/virt-install.log" + log.info("install_log = %s", install_log) + + virt_install(opts, install_log, disk_img, disk_size) + except InstallError as e: + log.error("Install failed: %s", e) + if not opts.keep_image: + log.info("Removing bad disk image") + os.unlink(disk_img) + raise + + log.info("Disk Image install successful") + return disk_img + +
+
[docs]def make_live_images(opts, work_dir, root_dir, rootfs_image=None, size=None): + """ + Create live images from direcory or rootfs image + + :param opts: options passed to livemedia-creator + :type opts: argparse options + :param str work_dir: Directory for storing results + :param str root_dir: Root directory of live filesystem tree + :param str rootfs_image: Path to live rootfs image to be used + :returns: Path of directory with created images + :rtype: str + """ + sys_root = "" + if opts.ostree: + sys_root = find_ostree_root(root_dir) + + squashfs_root_dir = joinpaths(work_dir, "squashfs_root") + liveos_dir = joinpaths(squashfs_root_dir, "LiveOS") + os.makedirs(liveos_dir) + + if rootfs_image: + rc = execWithRedirect("/bin/ln", [rootfs_image, joinpaths(liveos_dir, "rootfs.img")]) + if rc != 0: + shutil.copy2(rootfs_image, joinpaths(liveos_dir, "rootfs.img")) + else: + log.info("Creating live rootfs image") + mkrootfsimg(root_dir, joinpaths(liveos_dir, "rootfs.img"), "LiveOS", size=size, sysroot=sys_root) + + log.info("Packing live rootfs image") + add_pxe_args = [] + live_image_name = "live-rootfs.squashfs.img" + mksquashfs(squashfs_root_dir, + joinpaths(work_dir, live_image_name), + opts.compression, + opts.compress_args) + + remove(squashfs_root_dir) + + log.info("Rebuilding initramfs for live") + rebuild_initrds_for_live(opts, joinpaths(root_dir, sys_root), work_dir) + + if opts.ostree: + add_pxe_args.append("ostree=/%s" % sys_root) + template = joinpaths(opts.lorax_templates, "pxe-live/pxe-config.tmpl") + create_pxe_config(template, work_dir, live_image_name, add_pxe_args) + + return work_dir +
+
[docs]def run_creator(opts, callback_func=None): + """Run the image creator process + + :param opts: Commandline options to control the process + :type opts: Either a DataHolder or ArgumentParser + :returns: The result directory and the disk image path. + :rtype: Tuple of str + + This function takes the opts arguments and creates the selected output image. + See the cmdline --help for livemedia-creator for the possible options + + (Yes, this is not ideal, but we can fix that later) + """ + result_dir = None + + # Parse the kickstart + if opts.ks: + ks_version = makeVersion(RHEL7) + ks = KickstartParser( ks_version, errorsAreFatal=False, missingIncludeIsFatal=False ) + ks.readKickstart( opts.ks[0] ) + + # Make the disk or filesystem image + if not opts.disk_image and not opts.fs_image: + if not opts.ks: + raise RuntimeError("Image creation requires a kickstart file") + + errors = [] + if ks.handler.method.method != "url" and opts.no_virt: + errors.append("Only url install method is currently supported. Please " + "fix your kickstart file." ) + + if ks.handler.displaymode.displayMode is not None: + errors.append("The kickstart must not set a display mode (text, cmdline, " + "graphical), this will interfere with livemedia-creator.") + + if opts.make_fsimage: + # Make sure the kickstart isn't using autopart and only has a / mountpoint + part_ok = not any(p for p in ks.handler.partition.partitions + if p.mountpoint not in ["/", "swap"]) + if not part_ok or ks.handler.autopart.seen: + errors.append("Filesystem images must use a single / part, not autopart or " + "multiple partitions. swap is allowed but not used.") + + if errors: + raise RuntimeError("\n".join(errors)) + + # Make the image. Output of this is either a partitioned disk image or a fsimage + # Can also fail with InstallError + disk_img = make_image(opts, ks, callback_func=callback_func) + + # Only create the disk image, return that now + if opts.image_only: + return (result_dir, disk_img) + + if opts.make_iso: + work_dir = tempfile.mkdtemp() + log.info("working dir is %s", work_dir) + + if (opts.fs_image or opts.no_virt) and not opts.disk_image: + # Create iso from a filesystem image + disk_img = opts.fs_image or disk_img + + make_squashfs(disk_img, work_dir) + with Mount(disk_img, opts="loop") as mount_dir: + result_dir = make_livecd(opts, mount_dir, work_dir) + else: + # Create iso from a partitioned disk image + disk_img = opts.disk_image or disk_img + with PartitionMount(disk_img) as img_mount: + if img_mount and img_mount.mount_dir: + make_runtime(opts, img_mount.mount_dir, work_dir) + result_dir = make_livecd(opts, img_mount.mount_dir, work_dir) + + # cleanup the mess + # cleanup work_dir? + if disk_img and not (opts.keep_image or opts.disk_image or opts.fs_image): + os.unlink(disk_img) + log.info("Disk image erased") + disk_img = None + elif opts.make_appliance: + if not opts.ks: + networks = [] + else: + networks = ks.handler.network.network + make_appliance(opts.disk_image or disk_img, opts.app_name, + opts.app_template, opts.app_file, networks, opts.ram, + opts.vcpus, opts.arch, opts.title, opts.project, opts.releasever) + elif opts.make_pxe_live: + work_dir = tempfile.mkdtemp() + log.info("working dir is %s", work_dir) + + if (opts.fs_image or opts.no_virt) and not opts.disk_image: + # Create pxe live images from a filesystem image + disk_img = opts.fs_image or disk_img + with Mount(disk_img, opts="loop") as mnt_dir: + result_dir = make_live_images(opts, work_dir, mnt_dir, rootfs_image=disk_img) + else: + # Create pxe live images from a partitioned disk image + disk_img = opts.disk_image or disk_img + is_root_part = None + if opts.ostree: + is_root_part = lambda dir: os.path.exists(dir+"/ostree/deploy") + with PartitionMount(disk_img, mount_ok=is_root_part) as img_mount: + if img_mount and img_mount.mount_dir: + try: + mounted_sysroot_boot_dir = None + if opts.ostree: + mounted_sysroot_boot_dir = mount_boot_part_over_root(img_mount) + if opts.live_rootfs_keep_size: + size = img_mount.mount_size / 1024**3 + else: + size = opts.live_rootfs_size or None + result_dir = make_live_images(opts, work_dir, img_mount.mount_dir, size=size) + finally: + if mounted_sysroot_boot_dir: + umount(mounted_sysroot_boot_dir) + + if opts.result_dir != opts.tmp and result_dir: + copytree(result_dir, opts.result_dir, preserve=False) + shutil.rmtree( result_dir ) + result_dir = None + + return (result_dir, disk_img)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/decorators.html b/lorax-composer/_modules/pylorax/decorators.html new file mode 100644 index 00000000..2e6a9420 --- /dev/null +++ b/lorax-composer/_modules/pylorax/decorators.html @@ -0,0 +1,124 @@ + + + + + + + + + + pylorax.decorators — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.decorators

+#
+# decorators.py
+#
+# Copyright (C) 2009  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+
[docs]def singleton(cls): + instances = {} + + def get_instance(): + if cls not in instances: + instances[cls] = cls() + return instances[cls] + + return get_instance
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/discinfo.html b/lorax-composer/_modules/pylorax/discinfo.html new file mode 100644 index 00000000..0cb566ec --- /dev/null +++ b/lorax-composer/_modules/pylorax/discinfo.html @@ -0,0 +1,133 @@ + + + + + + + + + + pylorax.discinfo — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.discinfo

+#
+# discinfo.py
+#
+# Copyright (C) 2010  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+import logging
+logger = logging.getLogger("pylorax.discinfo")
+
+import time
+
+
+
[docs]class DiscInfo(object): + + def __init__(self, release, basearch): + self.release = release + self.basearch = basearch + +
[docs] def write(self, outfile): + logger.info("writing .discinfo file") + with open(outfile, "w") as fobj: + fobj.write("{0:f}\n".format(time.time())) + fobj.write("{0.release}\n".format(self)) + fobj.write("{0.basearch}\n".format(self))
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/executils.html b/lorax-composer/_modules/pylorax/executils.html new file mode 100644 index 00000000..cb1d5366 --- /dev/null +++ b/lorax-composer/_modules/pylorax/executils.html @@ -0,0 +1,519 @@ + + + + + + + + + + pylorax.executils — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.executils

+#
+# executil.py - subprocess execution utility functions
+#
+# Copyright (C) 1999-2011
+# Red Hat, Inc.  All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Author(s): Erik Troan <ewt@redhat.com>
+#
+
+import os, sys
+import subprocess
+import time
+import threading
+
+import logging
+log = logging.getLogger("pylorax")
+program_log = logging.getLogger("program")
+
+
[docs]class ExecProduct(object): + def __init__(self, rc, stdout, stderr): + self.rc = rc + self.stdout = stdout + self.stderr = stderr +
+
[docs]class tee(threading.Thread): + """ Python reimplementation of the shell tee process, so we can + feed the pipe output into two places at the same time + """ + def __init__(self, inputdesc, outputdesc, logmethod, command): + threading.Thread.__init__(self) + self.inputdesc = os.fdopen(inputdesc, "r") + self.outputdesc = outputdesc + self.logmethod = logmethod + self.running = True + self.command = command + +
[docs] def run(self): + while self.running: + try: + data = self.inputdesc.readline() + except IOError: + self.logmethod("Can't read from pipe during a call to %s. " + "(program terminated suddenly?)" % self.command) + break + if data == "": + self.running = False + else: + self.logmethod(data.rstrip('\n')) + os.write(self.outputdesc, data) +
+
[docs] def stop(self): + self.running = False + return self +
+
[docs]def execWithRedirect(command, argv, stdin = None, stdout = None, + stderr = None, root = None, preexec_fn=None, cwd=None, + raise_err=False, callback_func=None, callback_args=None): + """ Run an external program and redirect the output to a file. + @param command The command to run. + @param argv A list of arguments. + @param stdin The file descriptor to read stdin from. + @param stdout The file descriptor to redirect stdout to. + @param stderr The file descriptor to redirect stderr to. + @param root The directory to chroot to before running command. + @param preexec_fn function to pass to Popen + @param cwd working directory to pass to Popen + @param raise_err raise CalledProcessError when the returncode is not 0 + @return The return code of command. + """ + def chroot (): + os.chroot(root) + + stdinclose = stdoutclose = stderrclose = lambda : None + + argv = list(argv) + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stdout, str): + stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) + stdoutclose = lambda : os.close(stdout) + elif isinstance(stdout, int): + pass + elif stdout is None or not isinstance(stdout, file): + stdout = sys.stdout.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s", " ".join([command] + argv)) + + #prepare os pipes for feeding tee proceses + pstdout, pstdin = os.pipe() + perrout, perrin = os.pipe() + + env = os.environ.copy() + env.update({"LC_ALL": "C"}) + + if root: + preexec_fn = chroot + cwd = root + program_log.info("chrooting into %s", cwd) + elif cwd: + program_log.info("chdiring into %s", cwd) + + try: + #prepare tee proceses + proc_std = tee(pstdout, stdout, program_log.info, command) + proc_err = tee(perrout, stderr, program_log.error, command) + + #start monitoring the outputs + proc_std.start() + proc_err.start() + + proc = subprocess.Popen([command] + argv, stdin=stdin, + stdout=pstdin, + stderr=perrin, + preexec_fn=preexec_fn, cwd=cwd, + env=env) + + # Wait for the process to finish, calling callback_func to test for early termination + while proc.returncode is None: + time.sleep(5) + if callback_func and callback_func(): + proc.terminate() + callback_func = None + proc.poll() + + ret = proc.returncode + + #close the input ends of pipes so we get EOF in the tee processes + os.close(pstdin) + os.close(perrin) + + #wait for the output to be written and destroy them + proc_std.join() + del proc_std + + proc_err.join() + del proc_err + + stdinclose() + stdoutclose() + stderrclose() + except OSError as e: + errstr = "Error running %s: %s" % (command, e.strerror) + log.error(errstr) + program_log.error(errstr) + #close the input ends of pipes so we get EOF in the tee processes + os.close(pstdin) + os.close(perrin) + proc_std.join() + proc_err.join() + + stdinclose() + stdoutclose() + stderrclose() + raise RuntimeError, errstr + + if ret and raise_err: + raise subprocess.CalledProcessError(ret, [command]+argv) + + return ret +
+
[docs]def execWithCapture(command, argv, stdin = None, stderr = None, root=None, + preexec_fn=None, cwd=None, raise_err=False): + """ Run an external program and capture standard out. + @param command The command to run. + @param argv A list of arguments. + @param stdin The file descriptor to read stdin from. + @param stderr The file descriptor to redirect stderr to. + @param root The directory to chroot to before running command. + @param preexec_fn function to pass to Popen + @param cwd working directory to pass to Popen + @param raise_err raise CalledProcessError when the returncode is not 0 + @return The output of command from stdout. + """ + def chroot(): + os.chroot(root) + + def closefds (): + stdinclose() + stderrclose() + + stdinclose = stderrclose = lambda : None + rc = "" + argv = list(argv) + + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s", " ".join([command] + argv)) + + env = os.environ.copy() + env.update({"LC_ALL": "C"}) + + if root: + preexec_fn = chroot + cwd = root + program_log.info("chrooting into %s", cwd) + elif cwd: + program_log.info("chdiring into %s", cwd) + + try: + proc = subprocess.Popen([command] + argv, stdin=stdin, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + preexec_fn=preexec_fn, cwd=cwd, + env=env) + + while True: + (outStr, errStr) = proc.communicate() + if outStr: + map(program_log.info, outStr.splitlines()) + rc += outStr + if errStr: + map(program_log.error, errStr.splitlines()) + os.write(stderr, errStr) + + if proc.returncode is not None: + break + except OSError as e: + log.error ("Error running " + command + ": " + e.strerror) + closefds() + raise RuntimeError, "Error running " + command + ": " + e.strerror + + closefds() + if proc.returncode and raise_err: + raise subprocess.CalledProcessError(proc.returncode, [command]+argv) + + return rc +
+
[docs]def execWithCallback(command, argv, stdin = None, stdout = None, + stderr = None, echo = True, callback = None, + callback_data = None, root = '/'): + def closefds (): + stdinclose() + stdoutclose() + stderrclose() + + stdinclose = stdoutclose = stderrclose = lambda : None + + argv = list(argv) + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stdout, str): + stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) + stdoutclose = lambda : os.close(stdout) + elif isinstance(stdout, int): + pass + elif stdout is None or not isinstance(stdout, file): + stdout = sys.stdout.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s", " ".join([command] + argv)) + + p = os.pipe() + p_stderr = os.pipe() + childpid = os.fork() + if not childpid: + os.close(p[0]) + os.close(p_stderr[0]) + os.dup2(p[1], 1) + os.dup2(p_stderr[1], 2) + os.dup2(stdin, 0) + os.close(stdin) + os.close(p[1]) + os.close(p_stderr[1]) + + os.execvp(command, [command] + argv) + os._exit(1) + + os.close(p[1]) + os.close(p_stderr[1]) + + log_output = '' + while 1: + try: + s = os.read(p[0], 1) + except OSError as e: + if e.errno != 4: + map(program_log.info, log_output.splitlines()) + raise IOError, e.args + + if echo: + os.write(stdout, s) + log_output += s + + if callback: + callback(s, callback_data=callback_data) + + # break out early if the sub-process changes status. + # no need to flush the stream if the process has exited + try: + (pid, status) = os.waitpid(childpid,os.WNOHANG) + if pid != 0: + break + except OSError as e: + log.critical("exception from waitpid: %s %s", e.errno, e.strerror) + + if len(s) < 1: + break + + map(program_log.info, log_output.splitlines()) + + log_errors = '' + while 1: + try: + err = os.read(p_stderr[0], 128) + except OSError as e: + if e.errno != 4: + map(program_log.error, log_errors.splitlines()) + raise IOError, e.args + break + log_errors += err + if len(err) < 1: + break + + os.write(stderr, log_errors) + map(program_log.error, log_errors.splitlines()) + os.close(p[0]) + os.close(p_stderr[0]) + + try: + #if we didn't already get our child's exit status above, do so now. + if not pid: + (pid, status) = os.waitpid(childpid, 0) + except OSError as e: + log.critical("exception from waitpid: %s %s", e.errno, e.strerror) + + closefds() + + rc = 1 + if os.WIFEXITED(status): + rc = os.WEXITSTATUS(status) + return ExecProduct(rc, log_output , log_errors) +
+def _pulseProgressCallback(data, callback_data=None): + if callback_data: + callback_data.pulse() + +
[docs]def execWithPulseProgress(command, argv, stdin = None, stdout = None, + stderr = None, echo = True, progress = None, + root = '/'): + return execWithCallback(command, argv, stdin=stdin, stdout=stdout, + stderr=stderr, echo=echo, callback=_pulseProgressCallback, + callback_data=progress, root=root) + +## Run a shell.
+
[docs]def execConsole(): + try: + proc = subprocess.Popen(["/bin/sh"]) + proc.wait() + except OSError as e: + raise RuntimeError, "Error running /bin/sh: " + e.strerror +
+
[docs]def runcmd(cmd, **kwargs): + """ run execWithRedirect with raise_err=True + """ + kwargs["raise_err"] = True + return execWithRedirect(cmd[0], cmd[1:], **kwargs) +
+
[docs]def runcmd_output(cmd, **kwargs): + """ run execWithCapture with raise_err=True + """ + kwargs["raise_err"] = True + return execWithCapture(cmd[0], cmd[1:], **kwargs) +
+ +
+
+
+
+
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/imgutils.html b/lorax-composer/_modules/pylorax/imgutils.html new file mode 100644 index 00000000..bd9369bb --- /dev/null +++ b/lorax-composer/_modules/pylorax/imgutils.html @@ -0,0 +1,559 @@ + + + + + + + + + + pylorax.imgutils — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.imgutils

+# imgutils.py - utility functions/classes for building disk images
+#
+# Copyright (C) 2011  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Author(s):  Will Woods <wwoods@redhat.com>
+
+import logging
+logger = logging.getLogger("pylorax.imgutils")
+
+import os, tempfile
+from os.path import join, dirname
+from subprocess import Popen, PIPE, CalledProcessError
+import sys
+import time
+import traceback
+import multiprocessing
+from time import sleep
+
+from pylorax.sysutils import cpfile
+from pylorax.executils import execWithRedirect, execWithCapture
+from pylorax.executils import runcmd, runcmd_output
+
+######## Functions for making container images (cpio, tar, squashfs) ##########
+
+
[docs]def compress(command, rootdir, outfile, compression="xz", compressargs=None): + '''Make a compressed archive of the given rootdir. + command is a list of the archiver commands to run + compression should be "xz", "gzip", "lzma", "bzip2", or None. + compressargs will be used on the compression commandline.''' + if compressargs is None: + compressargs = ["-9"] + if compression not in (None, "xz", "gzip", "lzma", "bzip2"): + raise ValueError, "Unknown compression type %s" % compression + if compression == "xz": + compressargs.insert(0, "--check=crc32") + if compression is None: + compression = "cat" # this is a little silly + compressargs = [] + + # make compression run with multiple threads if possible + if compression in ("xz", "lzma"): + compressargs.insert(0, "-T%d" % multiprocessing.cpu_count()) + + logger.debug("find %s -print0 |%s | %s %s > %s", rootdir, " ".join(command), + compression, " ".join(compressargs), outfile) + find, archive, comp = None, None, None + try: + find = Popen(["find", ".", "-print0"], stdout=PIPE, cwd=rootdir) + archive = Popen(command, stdin=find.stdout, stdout=PIPE, cwd=rootdir) + comp = Popen([compression] + compressargs, + stdin=archive.stdout, stdout=open(outfile, "wb")) + (_stdout, _stderr) = comp.communicate() + return comp.returncode + except OSError as e: + logger.error(e) + # Kill off any hanging processes + _ = [p.kill() for p in (find, archive, comp) if p] + return 1 +
+
[docs]def mkcpio(rootdir, outfile, compression="xz", compressargs=None): + return compress(["cpio", "--null", "--quiet", "-H", "newc", "-o"], + rootdir, outfile, compression, compressargs) +
+
[docs]def mktar(rootdir, outfile, compression="xz", compressargs=None): + return compress(["tar", "--no-recursion", "--selinux", "--acls", "--xattrs", "-cf-", "--null", "-T-"], + rootdir, outfile, compression, compressargs) +
+
[docs]def mksquashfs(rootdir, outfile, compression="default", compressargs=None): + '''Make a squashfs image containing the given rootdir.''' + if compressargs is None: + compressargs = [] + if compression != "default": + compressargs = ["-comp", compression] + compressargs + return execWithRedirect("mksquashfs", [rootdir, outfile] + compressargs) +
+
[docs]def mkrootfsimg(rootdir, outfile, label, size=2, sysroot=""): + """ + Make rootfs image from a directory + + :param str rootdir: Root directory + :param str outfile: Path of output image file + :param str label: Filesystem label + :param int size: Size of the image in GiB, if None computed automatically + :param str sysroot: path to system (deployment) root relative to physical root + """ + if size: + fssize = size * (1024*1024*1024) # 2GB sparse file compresses down to nothin' + else: + fssize = None # Let mkext4img figure out the needed size + + mkext4img(rootdir, outfile, label=label, size=fssize) + # Reset selinux context on new rootfs + with LoopDev(outfile) as loopdev: + with Mount(loopdev) as mnt: + cmd = [ "setfiles", "-e", "/proc", "-e", "/sys", "-e", "/dev", "-e", "/install", + "/etc/selinux/targeted/contexts/files/file_contexts", "/"] + root = join(mnt, sysroot.lstrip("/")) + runcmd(cmd, root=root) +
+
[docs]def mkdiskfsimage(diskimage, fsimage, label="Anaconda"): + """ + Copy the / partition of a partitioned disk image to an un-partitioned + disk image. + + diskimage is the full path to partitioned disk image with a / + fsimage is the full path of the output fs image file + label is the label to apply to the image. Defaults to "Anaconda" + """ + with PartitionMount(diskimage) as img_mount: + if not img_mount or not img_mount.mount_dir: + return None + + logger.info("Creating fsimage %s", fsimage) + mkext4img(img_mount.mount_dir, fsimage, label=label) + +######## Utility functions ############################################### +
+
[docs]def mksparse(outfile, size): + '''use os.ftruncate to create a sparse file of the given size.''' + fobj = open(outfile, "w") + os.ftruncate(fobj.fileno(), size) +
+
[docs]def mkqcow2(outfile, size, options=None): + '''use qemu-img to create a file of the given size. + options is a list of options passed to qemu-img + + Default format is qcow2, override by passing "-f", fmt + in options. + ''' + options = options or [] + if "-f" not in options: + options.extend(["-f", "qcow2"]) + runcmd(["qemu-img", "create"] + options + [outfile, str(size)]) +
+
[docs]def loop_waitfor(loop_dev, outfile): + """Make sure the loop device is attached to the outfile. + + It seems that on rare occasions losetup can return before the /dev/loopX is + ready for use, causing problems with mkfs. This tries to make sure that the + loop device really is associated with the backing file before continuing. + + Raise RuntimeError if it isn't setup after 5 tries. + """ + for _ in xrange(0,5): + runcmd(["udevadm", "settle", "--timeout", "300"]) + ## XXX Note that losetup --list output can be truncated to 64 bytes in some + ## situations. Don't use it to lookup backing file, go the other way + ## and lookup the loop for the backing file. See util-linux lib/loopdev.c + ## loopcxt_get_backing_file() + if get_loop_name(outfile) == os.path.basename(loop_dev): + return + + # If this really is a race, give it some time to settle down + time.sleep(1) + + raise RuntimeError("Unable to setup %s on %s" % (loop_dev, outfile)) +
+
[docs]def loop_attach(outfile): + '''Attach a loop device to the given file. Return the loop device name. + Raises CalledProcessError if losetup fails.''' + dev = runcmd_output(["losetup", "--find", "--show", outfile]) + + # Sometimes the loop device isn't ready yet, make extra sure before returning + loop_waitfor(dev.strip(), outfile) + return dev.strip() +
+
[docs]def loop_detach(loopdev): + '''Detach the given loop device. Return False on failure.''' + return (execWithRedirect("losetup", ["--detach", loopdev]) == 0) +
+
[docs]def get_loop_name(path): + '''Return the loop device associated with the path. + Raises RuntimeError if more than one loop is associated''' + buf = runcmd_output(["losetup", "-j", path]) + if len(buf.splitlines()) > 1: + # there should never be more than one loop device listed + raise RuntimeError("multiple loops associated with %s" % path) + name = os.path.basename(buf.split(":")[0]) + return name +
+
[docs]def dm_attach(dev, size, name=None): + '''Attach a devicemapper device to the given device, with the given size. + If name is None, a random name will be chosen. Returns the device name. + raises CalledProcessError if dmsetup fails.''' + if name is None: + name = tempfile.mktemp(prefix="lorax.imgutils.", dir="") + runcmd(["dmsetup", "create", name, "--table", + "0 %i linear %s 0" % (size/512, dev)]) + return name +
+
[docs]def dm_detach(dev): + '''Detach the named devicemapper device. Returns False if dmsetup fails.''' + dev = dev.replace("/dev/mapper/", "") # strip prefix, if it's there + return execWithRedirect("dmsetup", ["remove", dev]) +
+
[docs]def mount(dev, opts="", mnt=None): + '''Mount the given device at the given mountpoint, using the given opts. + opts should be a comma-separated string of mount options. + if mnt is none, a temporary directory will be created and its path will be + returned. + raises CalledProcessError if mount fails.''' + if mnt is None: + mnt = tempfile.mkdtemp(prefix="lorax.imgutils.") + logger.debug("make tmp mountdir %s", mnt) + cmd = ["mount"] + if opts: + cmd += ["-o", opts] + cmd += [dev, mnt] + runcmd(cmd) + return mnt +
+
[docs]def umount(mnt, lazy=False, maxretry=3, retrysleep=1.0): + '''Unmount the given mountpoint. If lazy is True, do a lazy umount (-l). + If the mount was a temporary dir created by mount, it will be deleted. + raises CalledProcessError if umount fails.''' + cmd = ["umount"] + if lazy: cmd += ["-l"] + cmd += [mnt] + count = 0 + while maxretry > 0: + try: + rv = runcmd(cmd) + except CalledProcessError: + count += 1 + if count == maxretry: + raise + logger.warn("failed to unmount %s. retrying (%d/%d)...", + mnt, count, maxretry) + if logger.getEffectiveLevel() <= logging.DEBUG: + fuser = execWithCapture("fuser", ["-vm", mnt]) + logger.debug("fuser -vm:\n%s\n", fuser) + sleep(retrysleep) + else: + break + if 'lorax.imgutils' in mnt: + os.rmdir(mnt) + logger.debug("remove tmp mountdir %s", mnt) + return (rv == 0) +
+
[docs]def copytree(src, dest, preserve=True): + '''Copy a tree of files using cp -a, thus preserving modes, timestamps, + links, acls, sparse files, xattrs, selinux contexts, etc. + If preserve is False, uses cp -R (useful for modeless filesystems) + raises CalledProcessError if copy fails.''' + logger.debug("copytree %s %s", src, dest) + cp = ["cp", "-a"] if preserve else ["cp", "-R", "-L"] + cp += [".", os.path.abspath(dest)] + runcmd(cp, cwd=src) +
+
[docs]def do_grafts(grafts, dest, preserve=True): + '''Copy each of the items listed in grafts into dest. + If the key ends with '/' it's assumed to be a directory which should be + created, otherwise just the leading directories will be created.''' + for imgpath, filename in grafts.items(): + if imgpath[-1] == '/': + targetdir = join(dest, imgpath) + imgpath = imgpath[:-1] + else: + targetdir = join(dest, dirname(imgpath)) + if not os.path.isdir(targetdir): + os.makedirs(targetdir) + if os.path.isdir(filename): + copytree(filename, join(dest, imgpath), preserve) + else: + cpfile(filename, join(dest, imgpath)) +
+
[docs]def round_to_blocks(size, blocksize): + '''If size isn't a multiple of blocksize, round up to the next multiple''' + diff = size % blocksize + if diff or not size: + size += blocksize - diff + return size + +# TODO: move filesystem data outside this function
+
[docs]def estimate_size(rootdir, graft=None, fstype=None, blocksize=4096, overhead=128): + if graft is None: + graft = {} + getsize = lambda f: os.lstat(f).st_size + if fstype == "btrfs": + overhead = 64*1024 # don't worry, it's all sparse + if fstype == "hfsplus": + overhead = 200 # hack to deal with two bootloader copies + if fstype in ("vfat", "msdos"): + blocksize = 2048 + getsize = lambda f: os.stat(f).st_size # no symlinks, count as copies + total = overhead*blocksize + dirlist = graft.values() + if rootdir: + dirlist.append(rootdir) + for root in dirlist: + for top, dirs, files in os.walk(root): + for f in files + dirs: + total += round_to_blocks(getsize(join(top,f)), blocksize) + if fstype == "btrfs": + total = max(256*1024*1024, total) # btrfs minimum size: 256MB + return total +
+
[docs]def default_image_name(compression, basename): + """ Return a default image name with the correct suffix for the compression type. + + :param str compression: Compression type + :param str basename: Base filename + :returns: basename with compression suffix + + If the compression is unknown it defaults to xz + """ + SUFFIXES = {"xz": ".xz", "gzip": ".gz", "bzip2": ".bz2", "lzma": ".lzma"} + return basename + SUFFIXES.get(compression, ".xz") + +######## Execution contexts - use with the 'with' statement ############## +
+
[docs]class LoopDev(object): + def __init__(self, filename, size=None): + self.loopdev = None + self.filename = filename + if size: + mksparse(self.filename, size) + def __enter__(self): + self.loopdev = loop_attach(self.filename) + return self.loopdev + def __exit__(self, exc_type, exc_value, exc_tb): + loop_detach(self.loopdev) +
+
[docs]class DMDev(object): + def __init__(self, dev, size, name=None): + (self.dev, self.size, self.name) = (dev, size, name) + self.mapperdev = None + def __enter__(self): + self.mapperdev = dm_attach(self.dev, self.size, self.name) + return self.mapperdev + def __exit__(self, exc_type, exc_value, exc_tb): + dm_detach(self.mapperdev) +
+
[docs]class Mount(object): + def __init__(self, dev, opts="", mnt=None): + (self.dev, self.opts, self.mnt) = (dev, opts, mnt) + def __enter__(self): + self.mnt = mount(self.dev, self.opts, self.mnt) + return self.mnt + def __exit__(self, exc_type, exc_value, exc_tb): + umount(self.mnt) +
+
[docs]class PartitionMount(object): + """ Mount a partitioned image file using kpartx """ + def __init__(self, disk_img, mount_ok=None): + """ + disk_img is the full path to a partitioned disk image + mount_ok is a function that is passed the mount point and + returns True if it should be mounted. + """ + self.mount_dir = None + self.mount_dev = None + self.mount_size = None + self.disk_img = disk_img + self.mount_ok = mount_ok + + # Default is to mount partition with /etc/passwd + if not self.mount_ok: + self.mount_ok = lambda mount_dir: os.path.isfile(mount_dir+"/etc/passwd") + + # Example kpartx output + # kpartx -p p -v -a /tmp/diskV2DiCW.im + # add map loop2p1 (253:2): 0 3481600 linear /dev/loop2 2048 + # add map loop2p2 (253:3): 0 614400 linear /dev/loop2 3483648 + kpartx_output = runcmd_output(["kpartx", "-v", "-a", "-s", self.disk_img]) + logger.debug(kpartx_output) + + # list of (deviceName, sizeInBytes) + self.loop_devices = [] + for line in kpartx_output.splitlines(): + # add map loop2p3 (253:4): 0 7139328 linear /dev/loop2 528384 + # 3rd element is size in 512 byte blocks + if line.startswith("add map "): + fields = line[8:].split() + self.loop_devices.append( (fields[0], int(fields[3])*512) ) + + def __enter__(self): + # Mount the device selected by mount_ok, if possible + mount_dir = tempfile.mkdtemp() + for dev, size in self.loop_devices: + try: + mount( "/dev/mapper/"+dev, mnt=mount_dir ) + if self.mount_ok(mount_dir): + self.mount_dir = mount_dir + self.mount_dev = dev + self.mount_size = size + break + umount( mount_dir ) + except CalledProcessError: + logger.debug(traceback.format_exc()) + if self.mount_dir: + logger.info("Partition mounted on %s size=%d", self.mount_dir, self.mount_size) + else: + logger.debug("Unable to mount anything from %s", self.disk_img) + os.rmdir(mount_dir) + return self + + def __exit__(self, exc_type, exc_value, exc_tb): + if self.mount_dir: + umount( self.mount_dir ) + os.rmdir(self.mount_dir) + self.mount_dir = None + execWithRedirect("kpartx", ["-d", "-s", self.disk_img]) + + +######## Functions for making filesystem images ########################## +
+
[docs]def mkfsimage(fstype, rootdir, outfile, size=None, mkfsargs=None, mountargs="", graft=None): + '''Generic filesystem image creation function. + fstype should be a filesystem type - "mkfs.${fstype}" must exist. + graft should be a dict: {"some/path/in/image": "local/file/or/dir"}; + if the path ends with a '/' it's assumed to be a directory. + Will raise CalledProcessError if something goes wrong.''' + if mkfsargs is None: + mkfsargs = [] + if graft is None: + graft = {} + preserve = (fstype not in ("msdos", "vfat")) + if not size: + size = estimate_size(rootdir, graft, fstype) + with LoopDev(outfile, size) as loopdev: + try: + runcmd(["mkfs.%s" % fstype] + mkfsargs + [loopdev]) + except CalledProcessError as e: + logger.error("mkfs exited with a non-zero return code: %d", e.returncode) + logger.error(e.output) + sys.exit(e.returncode) + + with Mount(loopdev, mountargs) as mnt: + if rootdir: + copytree(rootdir, mnt, preserve) + do_grafts(graft, mnt, preserve) + + # Make absolutely sure that the data has been written + runcmd(["sync"]) + +# convenience functions with useful defaults
+
[docs]def mkdosimg(rootdir, outfile, size=None, label="", mountargs="shortname=winnt,umask=0077", graft=None): + mkfsimage("msdos", rootdir, outfile, size, mountargs=mountargs, + mkfsargs=["-n", label], graft=graft) +
+
[docs]def mkext4img(rootdir, outfile, size=None, label="", mountargs="", graft=None): + mkfsimage("ext4", rootdir, outfile, size, mountargs=mountargs, + mkfsargs=["-L", label, "-b", "1024", "-m", "0"], graft=graft) +
+
[docs]def mkbtrfsimg(rootdir, outfile, size=None, label="", mountargs="", graft=None): + mkfsimage("btrfs", rootdir, outfile, size, mountargs=mountargs, + mkfsargs=["-L", label], graft=graft) +
+
[docs]def mkhfsimg(rootdir, outfile, size=None, label="", mountargs="", graft=None): + mkfsimage("hfsplus", rootdir, outfile, size, mountargs=mountargs, + mkfsargs=["-v", label], graft=graft)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/installer.html b/lorax-composer/_modules/pylorax/installer.html new file mode 100644 index 00000000..9cf57f2c --- /dev/null +++ b/lorax-composer/_modules/pylorax/installer.html @@ -0,0 +1,482 @@ + + + + + + + + + + pylorax.installer — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.installer

+#
+# Copyright (C) 2011-2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import logging
+log = logging.getLogger("pylorax")
+
+import os
+import shutil
+import sys
+import subprocess
+import tempfile
+from time import sleep
+import uuid
+
+from pylorax.executils import execWithRedirect, execWithCapture
+from pylorax.imgutils import get_loop_name, dm_detach, mount, umount
+from pylorax.imgutils import PartitionMount, mksparse, mkext4img, loop_detach
+from pylorax.imgutils import mktar, mkdiskfsimage, mkqcow2
+from pylorax.logmonitor import LogMonitor
+from pylorax.sysutils import joinpaths
+from pylorax.treebuilder import udev_escape
+
+ROOT_PATH = "/mnt/sysimage/"
+
+# no-virt mode doesn't need libvirt, so make it optional
+try:
+    import libvirt
+except ImportError:
+    libvirt = None
+
+
+
[docs]class InstallError(Exception): + pass +
+
[docs]class IsoMountpoint(object): + """ + Mount the iso on a temporary directory and check to make sure the + vmlinuz and initrd.img files exist + Check the iso for a LiveOS directory and set a flag. + Extract the iso's label. + + initrd_path can be used to point to a boot.iso tree with a newer + initrd.img than the iso has. The iso is still used for stage2. + """ + def __init__( self, iso_path, initrd_path=None ): + """ iso_path is the path to a boot.iso + initrd_path overrides mounting the iso for access to + initrd and vmlinuz. + """ + self.label = None + self.iso_path = iso_path + self.initrd_path = initrd_path + + if not self.initrd_path: + self.mount_dir = mount(self.iso_path, opts="loop") + else: + self.mount_dir = self.initrd_path + + kernel_list = [("/isolinux/vmlinuz", "/isolinux/initrd.img"), + ("/ppc/ppc64/vmlinuz", "/ppc/ppc64/initrd.img")] + if os.path.isdir( self.mount_dir+"/repodata" ): + self.repo = self.mount_dir + else: + self.repo = None + self.liveos = os.path.isdir( self.mount_dir+"/LiveOS" ) + + try: + for kernel, initrd in kernel_list: + if (os.path.isfile(self.mount_dir+kernel) and + os.path.isfile(self.mount_dir+initrd)): + self.kernel = self.mount_dir+kernel + self.initrd = self.mount_dir+initrd + break + else: + raise Exception("Missing kernel and initrd file in iso, failed" + " to search under: {0}".format(kernel_list)) + except: + self.umount() + raise + + self.get_iso_label() + +
[docs] def umount( self ): + if not self.initrd_path: + umount(self.mount_dir) +
+
[docs] def get_iso_label( self ): + """ + Get the iso's label using isoinfo + """ + isoinfo_output = execWithCapture("isoinfo", ["-d", "-i", self.iso_path]) + log.debug( isoinfo_output ) + for line in isoinfo_output.splitlines(): + if line.startswith("Volume id: "): + self.label = line[11:] + return + +
+
[docs]class VirtualInstall( object ): + """ + Run virt-install using an iso and kickstart(s) + """ + def __init__( self, iso, ks_paths, disk_img, img_size=2, + kernel_args=None, memory=1024, vnc=None, arch=None, + log_check=None, virtio_host="127.0.0.1", virtio_port=6080, + qcow2=False): + """ + + iso is an instance of IsoMountpoint + ks_paths is a list of paths to a kickstart files. All are injected, the + first one is the one executed. + disk_img is the path to a disk image (doesn't need to exist) + img_size is the size, in GiB, of the image if it doesn't exist + kernel_args are extra arguments to pass on the kernel cmdline + memory is the amount of ram to assign to the virt + vnc is passed to the --graphics command verbatim + arch is the optional architecture to use in the virt + log_check is a method that returns True of the log indicates an error + virtio_host and virtio_port are used to communicate with the log monitor + """ + self.virt_name = "LiveOS-"+str(uuid.uuid4()) + # add --graphics none later + # add whatever serial cmds are needed later + args = ["-n", self.virt_name, + "-r", str(memory), + "--noreboot", + "--noautoconsole"] + + args.append("--graphics") + if vnc: + args.append(vnc) + else: + args.append("none") + + for ks in ks_paths: + args.append("--initrd-inject") + args.append(ks) + + disk_opts = "path={0}".format(disk_img) + if qcow2: + disk_opts += ",format=qcow2" + else: + disk_opts += ",format=raw" + if not os.path.isfile(disk_img): + disk_opts += ",size={0}".format(img_size) + args.append("--disk") + args.append(disk_opts) + + if iso.liveos: + disk_opts = "path={0},device=cdrom".format(iso.iso_path) + args.append("--disk") + args.append(disk_opts) + + extra_args = "ks=file:/{0}".format(os.path.basename(ks_paths[0])) + if not vnc: + extra_args += " inst.cmdline console=ttyS0" + if kernel_args: + extra_args += " "+kernel_args + if iso.liveos: + extra_args += " stage2=hd:LABEL={0}".format(udev_escape(iso.label)) + args.append("--extra-args") + args.append(extra_args) + + args.append("--location") + args.append(iso.mount_dir) + + channel_args = "tcp,host={0}:{1},mode=connect,target_type=virtio" \ + ",name=org.fedoraproject.anaconda.log.0".format( + virtio_host, virtio_port) + args.append("--channel") + args.append(channel_args) + + if arch: + args.append("--arch") + args.append(arch) + + rc = execWithRedirect("virt-install", args) + if rc: + raise Exception("Problem starting virtual install") + + conn = libvirt.openReadOnly(None) + dom = conn.lookupByName(self.virt_name) + + # TODO: If vnc has been passed, we should look up the port and print that + # for the user at this point + + while dom.isActive() and not log_check(): + sys.stdout.write(".") + sys.stdout.flush() + sleep(10) + print + + if log_check(): + log.info( "Installation error detected. See logfile." ) + else: + log.info( "Install finished. Or at least virt shut down." ) + +
[docs] def destroy( self ): + """ + Make sure the virt has been shut down and destroyed + + Could use libvirt for this instead. + """ + log.info( "Shutting down %s", self.virt_name) + subprocess.call(["virsh", "destroy", self.virt_name]) + subprocess.call(["virsh", "undefine", self.virt_name]) + +
+
[docs]def novirt_install(opts, disk_img, disk_size, repo_url, callback_func=None): + """ + Use Anaconda to install to a disk image + """ + import selinux + + # Set selinux to Permissive if it is Enforcing + selinux_enforcing = False + if selinux.is_selinux_enabled() and selinux.security_getenforce(): + selinux_enforcing = True + selinux.security_setenforce(0) + + # Clean up /tmp/ from previous runs to prevent stale info from being used + for path in ["/tmp/yum.repos.d/", "/tmp/yum.cache/"]: + if os.path.isdir(path): + shutil.rmtree(path) + + args = ["--kickstart", opts.ks[0], "--cmdline", "--repo", repo_url] + if opts.anaconda_args: + for arg in opts.anaconda_args: + args += arg.split(" ", 1) + if opts.proxy: + args += ["--proxy", opts.proxy] + if opts.armplatform: + args += ["--armplatform", opts.armplatform] + + if opts.make_iso or opts.make_fsimage: + # Make a blank fs image + args += ["--dirinstall"] + + mkext4img(None, disk_img, label=opts.fs_label, size=disk_size * 1024**3) + if not os.path.isdir(ROOT_PATH): + os.mkdir(ROOT_PATH) + mount(disk_img, opts="loop", mnt=ROOT_PATH) + elif opts.make_tar: + args += ["--dirinstall"] + + # Install directly into ROOT_PATH, make sure it starts clean + if os.path.exists(ROOT_PATH): + shutil.rmtree(ROOT_PATH) + if not os.path.isdir(ROOT_PATH): + os.mkdir(ROOT_PATH) + else: + args += ["--image", disk_img] + + # Create the sparse image + mksparse(disk_img, disk_size * 1024**3) + + # Make sure anaconda has the right product and release + os.environ["ANACONDA_PRODUCTNAME"] = opts.project + os.environ["ANACONDA_PRODUCTVERSION"] = opts.releasever + rc = execWithRedirect("anaconda", args, callback_func=callback_func) + + # Move the anaconda logs over to a log directory + log_dir = os.path.abspath(os.path.dirname(opts.logfile)) + log_anaconda = joinpaths(log_dir, "anaconda") + if not os.path.isdir(log_anaconda): + os.mkdir(log_anaconda) + for l in ["anaconda.log", "ifcfg.log", "program.log", "storage.log", + "packaging.log", "yum.log"]: + if os.path.exists("/tmp/"+l): + shutil.copy2("/tmp/"+l, log_anaconda) + os.unlink("/tmp/"+l) + + if opts.make_iso or opts.make_fsimage: + umount(ROOT_PATH) + else: + # If anaconda failed the disk image may still be in use by dm + execWithRedirect("anaconda-cleanup", []) + + if disk_img: + dm_name = os.path.splitext(os.path.basename(disk_img))[0] + dm_path = "/dev/mapper/"+dm_name + if os.path.exists(dm_path): + dm_detach(dm_path) + loop_detach(get_loop_name(disk_img)) + + if selinux_enforcing: + selinux.security_setenforce(1) + + if rc: + raise InstallError("novirt_install failed") + + if opts.make_tar: + compress_args = [] + for arg in opts.compress_args: + compress_args += arg.split(" ", 1) + + rc = mktar(ROOT_PATH, disk_img, opts.compression, compress_args) + shutil.rmtree(ROOT_PATH) + log.info("tar finished with rc=%d", rc) + + if rc: + raise InstallError("novirt_install failed") + elif opts.qcow2: + log.info("Converting %s to qcow2", disk_img) + qcow2_args = [] + for arg in opts.qcow2_args: + qcow2_args += arg.split(" ", 1) + + # convert the image to qcow2 format + if "-O" not in qcow2_args: + qcow2_args.extend(["-O", "qcow2"]) + qcow2_img = tempfile.mktemp(prefix="disk", suffix=".img") + execWithRedirect("qemu-img", ["convert"] + qcow2_args + [disk_img, qcow2_img], raise_err=True) + execWithRedirect("mv", ["-f", qcow2_img, disk_img], raise_err=True) + +
+
[docs]def virt_install(opts, install_log, disk_img, disk_size): + """ + Use virt-install to install to a disk image + + install_log is the path to write the log from virt-install + disk_img is the full path to the final disk or filesystem image + disk_size is the size of the disk to create in GiB + """ + iso_mount = IsoMountpoint(opts.iso, opts.location) + log_monitor = LogMonitor(install_log) + + kernel_args = "" + if opts.kernel_args: + kernel_args += opts.kernel_args + if opts.proxy: + kernel_args += " proxy="+opts.proxy + + if opts.qcow2 and not opts.make_fsimage: + # virt-install can't take all the qcow2 options so create the image first + qcow2_args = [] + for arg in opts.qcow2_args: + qcow2_args += arg.split(" ", 1) + + mkqcow2(disk_img, disk_size*1024**3, qcow2_args) + + if opts.make_fsimage or opts.make_tar: + diskimg_path = tempfile.mktemp(prefix="disk", suffix=".img") + else: + diskimg_path = disk_img + + virt = VirtualInstall(iso_mount, opts.ks, diskimg_path, disk_size, + kernel_args, opts.ram, opts.vnc, opts.arch, + log_check = log_monitor.server.log_check, + virtio_host = log_monitor.host, + virtio_port = log_monitor.port, + qcow2=opts.qcow2) + + virt.destroy() + log_monitor.shutdown() + iso_mount.umount() + + if log_monitor.server.log_check(): + raise InstallError("virt_install failed") + + if opts.make_fsimage: + mkdiskfsimage(diskimg_path, disk_img, label=opts.fs_label) + os.unlink(diskimg_path) + elif opts.make_tar: + compress_args = [] + for arg in opts.compress_args: + compress_args += arg.split(" ", 1) + + with PartitionMount(diskimg_path) as img_mount: + if img_mount and img_mount.mount_dir: + rc = mktar(img_mount.mount_dir, disk_img, opts.compression, compress_args) + os.unlink(diskimg_path) + + if rc: + raise InstallError("virt_install failed")
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/logmonitor.html b/lorax-composer/_modules/pylorax/logmonitor.html new file mode 100644 index 00000000..9d0fed1c --- /dev/null +++ b/lorax-composer/_modules/pylorax/logmonitor.html @@ -0,0 +1,217 @@ + + + + + + + + + + pylorax.logmonitor — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.logmonitor

+#
+# Copyright (C) 2011-2017  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+import re
+import socket
+import SocketServer
+import threading
+
+
[docs]class LogRequestHandler(SocketServer.BaseRequestHandler): + """ + Handle monitoring and saving the logfiles from the virtual install + """ +
[docs] def setup(self): + if self.server.log_path: + self.fp = open(self.server.log_path, "w") + else: + print "no log_path specified" + self.request.settimeout(10) +
+
[docs] def handle(self): + """ + Handle writing incoming data to a logfile and + checking the logs for any Tracebacks or other errors that indicate + that the install failed. + """ + line = "" + while True: + if self.server.kill: + break + + try: + data = self.request.recv(4096) + self.fp.write(data) + self.fp.flush() + + # check the data for errors and set error flag + # need to assemble it into lines so we can test for the error + # string. + while data: + more = data.split("\n", 1) + line += more[0] + if len(more) > 1: + self.iserror(line) + line = "" + data = more[1] + else: + data = None + + except socket.timeout: + pass + except Exception: + break +
+
[docs] def finish(self): + self.fp.close() +
+
[docs] def iserror(self, line): + """ + Check a line to see if it contains an error indicating install failure + """ + simple_tests = ["Traceback (", + "Out of memory:", + "Call Trace:", + "insufficient disk space:"] + re_tests = [r"packaging: base repo .* not valid"] + for t in simple_tests: + if line.find(t) > -1: + self.server.log_error = True + return + for t in re_tests: + if re.search(t, line): + self.server.log_error = True + return + +
+
[docs]class LogServer(SocketServer.TCPServer): + """ + Add path to logfile + Add log error flag + Add a kill switch + """ + def __init__(self, log_path, *args, **kwargs): + self.kill = False + self.log_error = False + self.log_path = log_path + SocketServer.TCPServer.__init__(self, *args, **kwargs) + +
[docs] def log_check(self): + return self.log_error + +
+
[docs]class LogMonitor(object): + """ + Contains all the stuff needed to setup a thread to listen to the logs + from the virtual install + """ + def __init__(self, log_path, host="localhost", port=0): + """ + Fire up the thread listening for logs + """ + self.server = LogServer(log_path, (host, port), LogRequestHandler) + self.host, self.port = self.server.server_address + self.log_path = log_path + self.server_thread = threading.Thread(target=self.server.handle_request) + self.server_thread.daemon = True + self.server_thread.start() + +
[docs] def shutdown(self): + self.server.kill = True + self.server_thread.join()
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/ltmpl.html b/lorax-composer/_modules/pylorax/ltmpl.html new file mode 100644 index 00000000..f5eabb61 --- /dev/null +++ b/lorax-composer/_modules/pylorax/ltmpl.html @@ -0,0 +1,759 @@ + + + + + + + + + + pylorax.ltmpl — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.ltmpl

+#
+# ltmpl.py
+#
+# Copyright (C) 2009  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#                     Will Woods <wwoods@redhat.com>
+#
+
+import logging
+logger = logging.getLogger("pylorax.ltmpl")
+
+import os, re, glob, shlex, fnmatch
+from os.path import basename, isdir
+from subprocess import CalledProcessError
+import shutil
+
+from pylorax.sysutils import joinpaths, cpfile, mvfile, replace, remove
+from pylorax import yumhelper
+from pylorax.base import DataHolder
+from pylorax.executils import runcmd, runcmd_output
+from pylorax.imgutils import mkcpio
+
+from mako.lookup import TemplateLookup
+from mako.exceptions import text_error_template
+import sys, traceback
+import struct
+
+
[docs]class LoraxTemplate(object): + def __init__(self, directories=None): + if directories is None: + directories = ["/usr/share/lorax"] + # we have to add ["/"] to the template lookup directories or the + # file includes won't work properly for absolute paths + self.directories = ["/"] + directories + self.lines = [] + +
[docs] def parse(self, template_file, variables): + lookup = TemplateLookup(directories=self.directories) + template = lookup.get_template(template_file) + + try: + textbuf = template.render(**variables) + except: + logger.error(text_error_template().render()) + raise + + # split, strip and remove empty lines + lines = textbuf.splitlines() + lines = map(lambda line: line.strip(), lines) + lines = filter(lambda line: line, lines) + + # remove comments + lines = filter(lambda line: not line.startswith("#"), lines) + + # mako template now returns unicode strings + lines = map(lambda line: line.encode("utf8"), lines) + + # split with shlex and perform brace expansion + lines = map(split_and_expand, lines) + + self.lines = lines + return lines +
+
[docs]def split_and_expand(line): + return [exp for word in shlex.split(line) for exp in brace_expand(word)] +
+
[docs]def brace_expand(s): + if not ('{' in s and ',' in s and '}' in s): + yield s + else: + right = s.find('}') + left = s[:right].rfind('{') + (prefix, choices, suffix) = (s[:left], s[left+1:right], s[right+1:]) + for choice in choices.split(','): + for alt in brace_expand(prefix+choice+suffix): + yield alt +
+
[docs]def rglob(pathname, root="/", fatal=False): + seen = set() + rootlen = len(root)+1 + for f in glob.iglob(joinpaths(root, pathname)): + if f not in seen: + seen.add(f) + yield f[rootlen:] # remove the root to produce relative path + if fatal and not seen: + raise IOError, "nothing matching %s in %s" % (pathname, root) +
+
[docs]def rexists(pathname, root=""): + # Generator is always True, even with no values; + # bool(rglob(...)) won't work here. + for _path in rglob(pathname, root): + return True + return False + +# TODO: operate inside an actual chroot for safety? Not that RPM bothers..
+
[docs]class LoraxTemplateRunner(object): + ''' + This class parses and executes Lorax templates. Sample usage: + + # install a bunch of packages + runner = LoraxTemplateRunner(inroot=rundir, outroot=rundir, yum=yum_obj) + runner.run("install-packages.ltmpl") + + # modify a runtime dir + runner = LoraxTemplateRunner(inroot=rundir, outroot=newrun) + runner.run("runtime-transmogrify.ltmpl") + + NOTES: + + * Parsing procedure is roughly: + 1. Mako template expansion (on the whole file) + 2. For each line of the result, + a. Whitespace splitting (using shlex.split()) + b. Brace expansion (using brace_expand()) + c. If the first token is the name of a function, call that function + with the rest of the line as arguments + + * Parsing and execution are *separate* passes - so you can't use the result + of a command in an %if statement (or any other control statements)! + + * Commands that run external programs (systemctl, gconfset) currently use + the *host*'s copy of that program, which may cause problems if there's a + big enough difference between the host and the image you're modifying. + + * The commands are not executed under a real chroot, so absolute symlinks + will point *outside* the inroot/outroot. Be careful with symlinks! + + ADDING NEW COMMANDS: + + * Each template command is just a method of the LoraxTemplateRunner + object - so adding a new command is as easy as adding a new function. + + * Each function gets arguments that correspond to the rest of the tokens + on that line (after word splitting and brace expansion) + + * Commands should raise exceptions for errors - don't use sys.exit() + ''' + def __init__(self, inroot, outroot, yum_obj=None, fatalerrors=True, + templatedir=None, defaults=None): + if defaults is None: + defaults = {} + self.inroot = inroot + self.outroot = outroot + self.yum = yum_obj + self.fatalerrors = fatalerrors + self.templatedir = templatedir or "/usr/share/lorax" + self.templatefile = None + # some builtin methods + self.builtins = DataHolder(exists=lambda p: rexists(p, root=inroot), + glob=lambda g: list(rglob(g, root=inroot))) + self.defaults = defaults + self.results = DataHolder(treeinfo=dict()) # just treeinfo for now + # TODO: set up custom logger with a filter to add line info + + def _out(self, path): + return joinpaths(self.outroot, path) + def _in(self, path): + return joinpaths(self.inroot, path) + + def _filelist(self, *pkgs): + pkglist = self.yum.doPackageLists(pkgnarrow="installed", patterns=pkgs) + return set([f for pkg in pkglist.installed for f in pkg.filelist+pkg.ghostlist]) + + def _getsize(self, *files): + return sum(os.path.getsize(self._out(f)) for f in files if os.path.isfile(self._out(f))) + +
[docs] def run(self, templatefile, **variables): + for k,v in self.defaults.items() + self.builtins.items(): + variables.setdefault(k,v) + logger.debug("executing %s with variables=%s", templatefile, variables) + self.templatefile = templatefile + t = LoraxTemplate(directories=[self.templatedir]) + commands = t.parse(templatefile, variables) + self._run(commands) + +
+ def _run(self, parsed_template): + logger.info("running %s", self.templatefile) + for (num, line) in enumerate(parsed_template,1): + logger.debug("template line %i: %s", num, " ".join(line)) + skiperror = False + (cmd, args) = (line[0], line[1:]) + # Following Makefile convention, if the command is prefixed with + # a dash ('-'), we'll ignore any errors on that line. + if cmd.startswith('-'): + cmd = cmd[1:] + skiperror = True + try: + # grab the method named in cmd and pass it the given arguments + f = getattr(self, cmd, None) + if cmd[0] == '_' or cmd == 'run' or not callable(f): + raise ValueError, "unknown command %s" % cmd + f(*args) + except Exception: + if skiperror: + logger.debug("ignoring error") + continue + logger.error("template command error in %s:", self.templatefile) + logger.error(" %s", " ".join(line)) + # format the exception traceback + exclines = traceback.format_exception(*sys.exc_info()) + # skip the bit about "ltmpl.py, in _run()" - we know that + exclines.pop(1) + # log the "ErrorType: this is what happened" line + logger.error(" " + exclines[-1].strip()) + # and log the entire traceback to the debug log + for line in ''.join(exclines).splitlines(): + logger.debug(" " + line) + if self.fatalerrors: + raise + +
[docs] def install(self, srcglob, dest): + ''' + install SRC DEST + Copy the given file (or files, if a glob is used) from the input + tree to the given destination in the output tree. + The path to DEST must exist in the output tree. + If DEST is a directory, SRC will be copied into that directory. + If DEST doesn't exist, SRC will be copied to a file with that name, + assuming the rest of the path exists. + This is pretty much like how the 'cp' command works. + Examples: + install usr/share/myconfig/grub.conf /boot + install /usr/share/myconfig/grub.conf.in /boot/grub.conf + ''' + for src in rglob(self._in(srcglob), fatal=True): + try: + cpfile(src, self._out(dest)) + except shutil.Error as e: + logger.error(e) +
+
[docs] def installimg(self, srcdir, destfile): + ''' + installimg SRCDIR DESTFILE + Create a compressed cpio archive of the contents of SRCDIR and place + it in DESTFILE. + + If SRCDIR doesn't exist or is empty nothing is created. + + Examples: + installimg ${LORAXDIR}/product/ images/product.img + installimg ${LORAXDIR}/updates/ images/updates.img + ''' + if not os.path.isdir(self._in(srcdir)) or not os.listdir(self._in(srcdir)): + return + logger.info("Creating image file %s from contents of %s", self._out(destfile), self._in(srcdir)) + mkcpio(self._in(srcdir), self._out(destfile)) +
+
[docs] def mkdir(self, *dirs): + ''' + mkdir DIR [DIR ...] + Create the named DIR(s). Will create leading directories as needed. + Example: + mkdir /images + ''' + for d in dirs: + d = self._out(d) + if not isdir(d): + os.makedirs(d) +
+
[docs] def replace(self, pat, repl, *fileglobs): + ''' + replace PATTERN REPLACEMENT FILEGLOB [FILEGLOB ...] + Find-and-replace the given PATTERN (Python-style regex) with the given + REPLACEMENT string for each of the files listed. + Example: + replace @VERSION@ ${product.version} /boot/grub.conf /boot/isolinux.cfg + ''' + match = False + for g in fileglobs: + for f in rglob(self._out(g)): + match = True + replace(f, pat, repl) + if not match: + raise IOError, "no files matched %s" % " ".join(fileglobs) +
+
[docs] def append(self, filename, data): + ''' + append FILE STRING + Append STRING (followed by a newline character) to FILE. + Python character escape sequences ('\\n', '\\t', etc.) will be + converted to the appropriate characters. + Examples: + append /etc/depmod.d/dd.conf "search updates built-in" + append /etc/resolv.conf "" + ''' + with open(self._out(filename), "a") as fobj: + fobj.write(data.decode('string_escape')+"\n") +
+
[docs] def treeinfo(self, section, key, *valuetoks): + ''' + treeinfo SECTION KEY ARG [ARG ...] + Add an item to the treeinfo data store. + The given SECTION will have a new item added where + KEY = ARG ARG ... + Example: + treeinfo images-${kernel.arch} boot.iso images/boot.iso + ''' + if section not in self.results.treeinfo: + self.results.treeinfo[section] = dict() + self.results.treeinfo[section][key] = " ".join(valuetoks) +
+
[docs] def installkernel(self, section, src, dest): + ''' + installkernel SECTION SRC DEST + Install the kernel from SRC in the input tree to DEST in the output + tree, and then add an item to the treeinfo data store, in the named + SECTION, where "kernel" = DEST. + + Equivalent to: + install SRC DEST + treeinfo SECTION kernel DEST + ''' + self.install(src, dest) + self.treeinfo(section, "kernel", dest) +
+
[docs] def installinitrd(self, section, src, dest): + ''' + installinitrd SECTION SRC DEST + Same as installkernel, but for "initrd". + ''' + self.install(src, dest) + self.chmod(dest, '644') + self.treeinfo(section, "initrd", dest) +
+
[docs] def installupgradeinitrd(self, section, src, dest): + ''' + installupgradeinitrd SECTION SRC DEST + Same as installkernel, but for "upgrade". + ''' + self.install(src, dest) + self.chmod(dest, '644') + self.treeinfo(section, "upgrade", dest) +
+ + +
[docs] def copy(self, src, dest): + ''' + copy SRC DEST + Copy SRC to DEST. + If DEST is a directory, SRC will be copied inside it. + If DEST doesn't exist, SRC will be copied to a file with + that name, if the path leading to it exists. + ''' + try: + cpfile(self._out(src), self._out(dest)) + except shutil.Error as e: + logger.error(e) +
+
[docs] def move(self, src, dest): + ''' + move SRC DEST + Move SRC to DEST. + ''' + mvfile(self._out(src), self._out(dest)) +
+
[docs] def remove(self, *fileglobs): + ''' + remove FILEGLOB [FILEGLOB ...] + Remove all the named files or directories. + Will *not* raise exceptions if the file(s) are not found. + ''' + for g in fileglobs: + for f in rglob(self._out(g)): + remove(f) + logger.debug("removed %s", f) +
+
[docs] def chmod(self, fileglob, mode): + ''' + chmod FILEGLOB OCTALMODE + Change the mode of all the files matching FILEGLOB to OCTALMODE. + ''' + for f in rglob(self._out(fileglob), fatal=True): + os.chmod(f, int(mode,8)) + + # TODO: do we need a new command for gsettings?
+
[docs] def gconfset(self, path, keytype, value, outfile=None): + ''' + gconfset PATH KEYTYPE VALUE [OUTFILE] + Set the given gconf PATH, with type KEYTYPE, to the given value. + OUTFILE defaults to /etc/gconf/gconf.xml.defaults if not given. + Example: + gconfset /apps/metacity/general/num_workspaces int 1 + ''' + if outfile is None: + outfile = self._out("etc/gconf/gconf.xml.defaults") + cmd = ["gconftool-2", "--direct", + "--config-source=xml:readwrite:%s" % outfile, + "--set", "--type", keytype, path, value] + runcmd(cmd) +
+
[docs] def log(self, msg): + ''' + log MESSAGE + Emit the given log message. Be sure to put it in quotes! + Example: + log "Reticulating splines, please wait..." + ''' + logger.info(msg) + + # TODO: add ssh-keygen, mkisofs(?), find, and other useful commands
+
[docs] def runcmd(self, *cmdlist): + ''' + runcmd CMD [--chdir=DIR] [ARG ...] + Run the given command with the given arguments. + If "--chdir=DIR" is given, change to the named directory + before executing the command. + + NOTE: All paths given MUST be COMPLETE, ABSOLUTE PATHS to the file + or files mentioned. ${root}/${inroot}/${outroot} are good for + constructing these paths. + + FURTHER NOTE: Please use this command only as a last resort! + Whenever possible, you should use the existing template commands. + If the existing commands don't do what you need, fix them! + + Examples: + (this should be replaced with a "find" function) + runcmd find ${root} -name "*.pyo" -type f -delete + %for f in find(root, name="*.pyo"): + remove ${f} + %endfor + ''' + cwd = None + cmd = cmdlist + logger.debug('running command: %s', cmd) + if cmd[0].startswith("--chdir="): + cwd = cmd[0].split('=',1)[1] + cmd = cmd[1:] + + try: + _output = runcmd_output(cmd, cwd=cwd) + if _output: + logger.debug('command output:\n%s', _output) + logger.debug("command finished successfully") + except CalledProcessError as e: + if e.output: + logger.debug('command output:\n%s', e.output) + logger.debug('command returned failure (%d)', e.returncode) + raise +
+
[docs] def installpkg(self, *pkgs): + ''' + installpkg [--required] PKGGLOB [PKGGLOB ...] + Request installation of all packages matching the given globs. + Note that this is just a *request* - nothing is *actually* installed + until the 'run_pkg_transaction' command is given. + ''' + required = False + if pkgs[0] == '--required': + pkgs = pkgs[1:] + required = True + + for p in pkgs: + try: + self.yum.install(pattern=p) + except Exception as e: + # FIXME: save exception and re-raise after the loop finishes + logger.error("installpkg %s failed: %s",p,str(e)) + if required: + raise +
+
[docs] def removepkg(self, *pkgs): + ''' + removepkg PKGGLOB [PKGGLOB...] + Delete the named package(s). + IMPLEMENTATION NOTES: + RPM scriptlets (%preun/%postun) are *not* run. + Files are deleted, but directories are left behind. + ''' + for p in pkgs: + filepaths = [f.lstrip('/') for f in self._filelist(p)] + # TODO: also remove directories that aren't owned by anything else + if filepaths: + logger.debug("removepkg %s: %ikb", p, self._getsize(*filepaths)/1024) + self.remove(*filepaths) + else: + logger.debug("removepkg %s: no files to remove!", p) +
+
[docs] def run_pkg_transaction(self): + ''' + run_pkg_transaction + Actually install all the packages requested by previous 'installpkg' + commands. + ''' + self.yum.buildTransaction() + self.yum.repos.setProgressBar(yumhelper.LoraxDownloadCallback()) + self.yum.processTransaction(callback=yumhelper.LoraxTransactionCallback(), + rpmDisplay=yumhelper.LoraxRpmCallback()) + + # verify if all packages that were supposed to be installed, + # are really installed + errs = [t.po for t in self.yum.tsInfo if not self.yum.rpmdb.contains(po=t.po)] + for po in errs: + logger.error("package '%s' was not installed", po) + + # Write the manifest of installed files to /root/lorax-packages.log + with open(self._out("root/lorax-packages.log"), "w") as f: + for t in sorted(self.yum.tsInfo): + f.write("%s\n" % t.po) + + self.yum.closeRpmDB() +
+
[docs] def removefrom(self, pkg, *globs): + ''' + removefrom PKGGLOB [--allbut] FILEGLOB [FILEGLOB...] + Remove all files matching the given file globs from the package + (or packages) named. + If '--allbut' is used, all the files from the given package(s) will + be removed *except* the ones which match the file globs. + Examples: + removefrom usbutils /usr/bin/* + removefrom xfsprogs --allbut /sbin/* + ''' + cmd = "%s %s" % (pkg, " ".join(globs)) # save for later logging + keepmatches = False + if globs[0] == '--allbut': + keepmatches = True + globs = globs[1:] + # get pkg filelist and find files that match the globs + filelist = self._filelist(pkg) + matches = set() + for g in globs: + globs_re = re.compile(fnmatch.translate(g)) + m = filter(globs_re.match, filelist) + if m: + matches.update(m) + else: + logger.debug("removefrom %s %s: no files matched!", pkg, g) + # are we removing the matches, or keeping only the matches? + if keepmatches: + files_to_remove = filelist.difference(matches) + else: + files_to_remove = matches + # remove the files + if files_to_remove: + logger.debug("%s: removed %i/%i files, %ikb/%ikb", cmd, + len(files_to_remove), len(filelist), + self._getsize(*files_to_remove)/1024, self._getsize(*filelist)/1024) + self.remove(*files_to_remove) + else: + logger.debug("removefrom %s: no files to remove!", cmd) +
+
[docs] def removekmod(self, *globs): + ''' + removekmod GLOB [GLOB...] [--allbut] KEEPGLOB [KEEPGLOB...] + Remove all files and directories matching the given file globs from the kernel + modules directory. + + If '--allbut' is used, all the files from the modules will be removed *except* + the ones which match the file globs. There must be at least one initial GLOB + to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB* + so that it will match anywhere in the path. + + This only removes files from under /lib/modules/*/kernel/ + + Examples: + removekmod sound drivers/media drivers/hwmon drivers/video + removekmod drivers/char --allbut virtio_console hw_random + ''' + cmd = " ".join(globs) + if "--allbut" in globs: + idx = globs.index("--allbut") + if idx == 0: + raise ValueError("removekmod needs at least one GLOB before --allbut") + + # Apply keepglobs anywhere they appear in the path + keepglobs = globs[idx+1:] + if len(keepglobs) == 0: + raise ValueError("removekmod needs at least one GLOB after --allbut") + + globs = globs[:idx] + else: + # Nothing to keep + keepglobs = [] + + filelist = set() + for g in globs: + for top_dir in rglob(self._out("/lib/modules/*/kernel/"+g)): + for root, _dirs, files in os.walk(top_dir): + filelist.update(root+"/"+f for f in files) + + # Remove anything matching keepglobs from the list + matches = set() + for g in keepglobs: + globs_re = re.compile(fnmatch.translate("*"+g+"*")) + m = filter(globs_re.match, filelist) + if m: + matches.update(m) + else: + logger.debug("removekmod %s: no files matched!", g) + remove_files = filelist.difference(matches) + + if remove_files: + logger.debug("removekmod: removing %d files", len(remove_files)) + map(remove, remove_files) + else: + logger.debug("removekmod %s: no files to remove!", cmd) +
+
[docs] def createaddrsize(self, addr, src, dest): + ''' + createaddrsize INITRD_ADDRESS INITRD ADDRSIZE + Create the initrd.addrsize file required in LPAR boot process. + Examples: + createaddrsize ${INITRD_ADDRESS} ${outroot}/${BOOTDIR}/initrd.img ${outroot}/${BOOTDIR}/initrd.addrsize + ''' + addrsize = open(dest, "wb") + addrsize_data = struct.pack(">iiii", 0, int(addr, 16), 0, os.stat(src).st_size) + addrsize.write(addrsize_data) + addrsize.close() +
+
[docs] def systemctl(self, cmd, *units): + ''' + systemctl [enable|disable|mask] UNIT [UNIT...] + Enable, disable, or mask the given systemd units. + Examples: + systemctl disable lvm2-monitor.service + systemctl mask fedora-storage-init.service fedora-configure.service + ''' + if cmd not in ('enable', 'disable', 'mask'): + raise ValueError('unsupported systemctl cmd: %s' % cmd) + if not units: + logger.debug("systemctl: no units given for %s, ignoring", cmd) + return + self.mkdir("/run/systemd/system") # XXX workaround for systemctl bug + systemctl = ['systemctl', '--root', self.outroot, '--no-reload', + cmd] + # When a unit doesn't exist systemd aborts the command. Run them one at a time. + # XXX for some reason 'systemctl enable/disable' always returns 1 + for unit in units: + try: + cmd = systemctl + [unit] + runcmd(cmd) + except CalledProcessError: + pass
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/sysutils.html b/lorax-composer/_modules/pylorax/sysutils.html new file mode 100644 index 00000000..c0b86bb6 --- /dev/null +++ b/lorax-composer/_modules/pylorax/sysutils.html @@ -0,0 +1,202 @@ + + + + + + + + + + pylorax.sysutils — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.sysutils

+#
+# sysutils.py
+#
+# Copyright (C) 2009  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+__all__ = ["joinpaths", "touch", "replace", "chown_", "chmod_", "remove",
+           "linktree"]
+
+import sys
+import os
+import re
+import fileinput
+import pwd
+import grp
+import glob
+import shutil
+
+from pylorax.executils import runcmd
+
+
[docs]def joinpaths(*args, **kwargs): + path = os.path.sep.join(args) + + if kwargs.get("follow_symlinks"): + return os.path.realpath(path) + else: + return path + +
+
[docs]def touch(fname): + with open(fname, "w") as _: + pass + +
+
[docs]def replace(fname, find, substitute): + fin = fileinput.input(fname, inplace=1) + pattern = re.compile(find) + + for line in fin: + line = pattern.sub(substitute, line) + sys.stdout.write(line) + + fin.close() + +
+
[docs]def chown_(path, user=None, group=None, recursive=False): + uid = gid = -1 + + if user is not None: + uid = pwd.getpwnam(user)[2] + if group is not None: + gid = grp.getgrnam(group)[2] + + for fname in glob.iglob(path): + os.chown(fname, uid, gid) + + if recursive and os.path.isdir(fname): + for nested in os.listdir(fname): + nested = joinpaths(fname, nested) + chown_(nested, user, group, recursive) + +
+
[docs]def chmod_(path, mode, recursive=False): + for fname in glob.iglob(path): + os.chmod(fname, mode) + + if recursive and os.path.isdir(fname): + for nested in os.listdir(fname): + nested = joinpaths(fname, nested) + chmod_(nested, mode, recursive) + +
+def cpfile(src, dst): + shutil.copy2(src, dst) + if os.path.isdir(dst): + dst = joinpaths(dst, os.path.basename(src)) + + return dst + +def mvfile(src, dst): + if os.path.isdir(dst): + dst = joinpaths(dst, os.path.basename(src)) + os.rename(src, dst) + return dst + +
[docs]def remove(target): + if os.path.isdir(target) and not os.path.islink(target): + shutil.rmtree(target) + else: + os.unlink(target) +
+
[docs]def linktree(src, dst): + runcmd(["/bin/cp", "-alx", src, dst])
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/treebuilder.html b/lorax-composer/_modules/pylorax/treebuilder.html new file mode 100644 index 00000000..6fae699e --- /dev/null +++ b/lorax-composer/_modules/pylorax/treebuilder.html @@ -0,0 +1,414 @@ + + + + + + + + + + pylorax.treebuilder — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.treebuilder

+# treebuilder.py - handle arch-specific tree building stuff using templates
+#
+# Copyright (C) 2011  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Author(s):  Will Woods <wwoods@redhat.com>
+
+import logging
+logger = logging.getLogger("pylorax.treebuilder")
+
+import os, re
+from os.path import basename
+
+from pylorax.sysutils import joinpaths, remove
+from shutil import copytree, copy2
+from pylorax.base import DataHolder
+from pylorax.ltmpl import LoraxTemplateRunner
+import pylorax.imgutils as imgutils
+from pylorax.executils import runcmd, runcmd_output
+
+templatemap = {
+    'i386':    'x86.tmpl',
+    'x86_64':  'x86.tmpl',
+    'ppc':     'ppc.tmpl',
+    'ppc64':   'ppc.tmpl',
+    'ppc64le': 'ppc.tmpl',
+    's390':    's390.tmpl',
+    's390x':   's390.tmpl',
+    'aarch64': 'aarch64.tmpl',
+    'arm':     'arm.tmpl',
+    'armhfp':  'arm.tmpl',
+}
+
+
[docs]def generate_module_info(moddir, outfile=None): + def module_desc(mod): + output = runcmd_output(["modinfo", "-F", "description", mod]) + return output.strip() + def read_module_set(name): + return set(l.strip() for l in open(joinpaths(moddir,name)) if ".ko" in l) + modsets = {'scsi':read_module_set("modules.block"), + 'eth':read_module_set("modules.networking")} + + modinfo = list() + for root, _dirs, files in os.walk(moddir): + for modtype, modset in modsets.items(): + for mod in modset.intersection(files): # modules in this dir + (name, _ext) = os.path.splitext(mod) # foo.ko -> (foo, .ko) + desc = module_desc(joinpaths(root,mod)) or "%s driver" % name + modinfo.append(dict(name=name, type=modtype, desc=desc)) + + out = open(outfile or joinpaths(moddir,"module-info"), "w") + out.write("Version 0\n") + for mod in sorted(modinfo, key=lambda m: m.get('name')): + out.write('{name}\n\t{type}\n\t"{desc:.65}"\n'.format(**mod)) +
+
[docs]class RuntimeBuilder(object): + '''Builds the anaconda runtime image.''' + def __init__(self, product, arch, yum, templatedir=None, + installpkgs=None, + add_templates=None, + add_template_vars=None): + root = yum.conf.installroot + # use a copy of product so we can modify it locally + product = product.copy() + product.name = product.name.lower() + self.vars = DataHolder(arch=arch, product=product, yum=yum, root=root, + basearch=arch.basearch, libdir=arch.libdir) + self.yum = yum + self._runner = LoraxTemplateRunner(inroot=root, outroot=root, + yum_obj=yum, templatedir=templatedir) + self.add_templates = add_templates or [] + self.add_template_vars = add_template_vars or {} + self._installpkgs = installpkgs or [] + self._runner.defaults = self.vars + + def _install_branding(self): + release = None + for pkg in self.yum.whatProvides('/etc/system-release', None, None): + if pkg.name.startswith('generic'): + continue + else: + release = pkg.name + break + + if not release: + logger.error('could not get the release') + return + + # release + logger.info('got release: %s', release) + self._runner.installpkg(release) + + # logos + release, _suffix = release.split('-', 1) + self._runner.installpkg('%s-logos' % release) + +
[docs] def install(self): + '''Install packages and do initial setup with runtime-install.tmpl''' + self._install_branding() + if len(self._installpkgs) > 0: + self._runner.installpkg(*self._installpkgs) + self._runner.run("runtime-install.tmpl") + for tmpl in self.add_templates: + self._runner.run(tmpl, **self.add_template_vars) +
+
[docs] def writepkglists(self, pkglistdir): + '''debugging data: write out lists of package contents''' + if not os.path.isdir(pkglistdir): + os.makedirs(pkglistdir) + for pkgobj in self.yum.doPackageLists(pkgnarrow='installed').installed: + with open(joinpaths(pkglistdir, pkgobj.name), "w") as fobj: + for fname in pkgobj.filelist + pkgobj.dirlist: + fobj.write("{0}\n".format(fname)) +
+
[docs] def postinstall(self): + '''Do some post-install setup work with runtime-postinstall.tmpl''' + # copy configdir into runtime root beforehand + configdir = joinpaths(self._runner.templatedir,"config_files") + configdir_path = "tmp/config_files" + fullpath = joinpaths(self.vars.root, configdir_path) + if os.path.exists(fullpath): + remove(fullpath) + copytree(configdir, fullpath) + self._runner.run("runtime-postinstall.tmpl", configdir=configdir_path) +
+
[docs] def cleanup(self): + '''Remove unneeded packages and files with runtime-cleanup.tmpl''' + self._runner.run("runtime-cleanup.tmpl") +
+
[docs] def writepkgsizes(self, pkgsizefile): + '''debugging data: write a big list of pkg sizes''' + fobj = open(pkgsizefile, "w") + getsize = lambda f: os.lstat(f).st_size if os.path.exists(f) else 0 + for p in sorted(self.yum.doPackageLists(pkgnarrow='installed').installed): + pkgsize = sum(getsize(joinpaths(self.vars.root,f)) for f in p.filelist) + fobj.write("{0.name}.{0.arch}: {1}\n".format(p, pkgsize)) +
+
[docs] def generate_module_data(self): + root = self.vars.root + moddir = joinpaths(root, "lib/modules/") + for kver in os.listdir(moddir): + ksyms = joinpaths(root, "boot/System.map-%s" % kver) + logger.info("doing depmod and module-info for %s", kver) + runcmd(["depmod", "-a", "-F", ksyms, "-b", root, kver]) + generate_module_info(moddir+kver, outfile=moddir+"module-info") +
+
[docs] def create_runtime(self, outfile="/var/tmp/squashfs.img", compression="xz", compressargs=None, size=2): + if compressargs is None: + compressargs = [] + # make live rootfs image - must be named "LiveOS/rootfs.img" for dracut + workdir = joinpaths(os.path.dirname(outfile), "runtime-workdir") + os.makedirs(joinpaths(workdir, "LiveOS")) + + imgutils.mkrootfsimg(self.vars.root, joinpaths(workdir, "LiveOS/rootfs.img"), + "Anaconda", size=size) + + # squash the live rootfs and clean up workdir + imgutils.mksquashfs(workdir, outfile, compression, compressargs) + remove(workdir) +
+
[docs]class TreeBuilder(object): + '''Builds the arch-specific boot images. + inroot should be the installtree root (the newly-built runtime dir)''' + def __init__(self, product, arch, inroot, outroot, runtime, isolabel, domacboot=False, doupgrade=True, templatedir=None, add_templates=None, add_template_vars=None, workdir=None): + + # NOTE: if you pass an arg named "runtime" to a mako template it'll + # clobber some mako internal variables - hence "runtime_img". + self.vars = DataHolder(arch=arch, product=product, runtime_img=runtime, + runtime_base=basename(runtime), + inroot=inroot, outroot=outroot, + basearch=arch.basearch, libdir=arch.libdir, + isolabel=isolabel, udev=udev_escape, domacboot=domacboot, doupgrade=doupgrade, + workdir=workdir) + self._runner = LoraxTemplateRunner(inroot, outroot, templatedir=templatedir) + self._runner.defaults = self.vars + self.add_templates = add_templates or [] + self.add_template_vars = add_template_vars or {} + self.templatedir = templatedir + self.treeinfo_data = None + + @property +
[docs] def kernels(self): + return findkernels(root=self.vars.inroot) +
+
[docs] def rebuild_initrds(self, add_args=None, backup="", prefix=""): + '''Rebuild all the initrds in the tree. If backup is specified, each + initrd will be renamed with backup as a suffix before rebuilding. + If backup is empty, the existing initrd files will be overwritten. + If suffix is specified, the existing initrd is untouched and a new + image is built with the filename "${prefix}-${kernel.version}.img" + ''' + if add_args is None: + add_args = [] + dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + add_args + if not backup: + dracut.append("--force") + + kernels = [kernel for kernel in self.kernels if hasattr(kernel, "initrd")] + if not kernels: + raise Exception("No initrds found, cannot rebuild_initrds") + + # Hush some dracut warnings. TODO: bind-mount proc in place? + open(joinpaths(self.vars.inroot,"/proc/modules"),"w") + for kernel in kernels: + if prefix: + idir = os.path.dirname(kernel.initrd.path) + outfile = joinpaths(idir, prefix+'-'+kernel.version+'.img') + else: + outfile = kernel.initrd.path + logger.info("rebuilding %s", outfile) + if backup: + initrd = joinpaths(self.vars.inroot, outfile) + os.rename(initrd, initrd + backup) + cmd = dracut + [outfile, kernel.version] + runcmd(cmd, root=self.vars.inroot) + + # ppc64 cannot boot images > 32MiB, check size and warn + if self.vars.arch.basearch in ("ppc64", "ppc64le") and os.path.exists(outfile): + st = os.stat(outfile) + if st.st_size > 32 * 1024 * 1024: + logging.warning("ppc64 initrd %s is > 32MiB", outfile) + + os.unlink(joinpaths(self.vars.inroot,"/proc/modules")) +
+
[docs] def build(self): + templatefile = templatemap[self.vars.arch.basearch] + for tmpl in self.add_templates: + self._runner.run(tmpl, **self.add_template_vars) + self._runner.run(templatefile, kernels=self.kernels) + self.treeinfo_data = self._runner.results.treeinfo + self.implantisomd5() +
+
[docs] def implantisomd5(self): + for _section, data in self.treeinfo_data.items(): + if 'boot.iso' in data: + iso = joinpaths(self.vars.outroot, data['boot.iso']) + runcmd(["implantisomd5", iso]) +
+ @property +
[docs] def dracut_hooks_path(self): + """ Return the path to the lorax dracut hooks scripts + + Use the configured share dir if it is setup, + otherwise default to /usr/share/lorax/dracut_hooks + """ + if self.templatedir: + return joinpaths(self.templatedir, "dracut_hooks") + else: + return "/usr/share/lorax/dracut_hooks" +
+
[docs] def copy_dracut_hooks(self, hooks): + """ Copy the hook scripts in hooks into the installroot's /tmp/ + and return a list of commands to pass to dracut when creating the + initramfs + + hooks is a list of tuples with the name of the hook script and the + target dracut hook directory + (eg. [("99anaconda-copy-ks.sh", "/lib/dracut/hooks/pre-pivot")]) + """ + dracut_commands = [] + for hook_script, dracut_path in hooks: + src = joinpaths(self.dracut_hooks_path, hook_script) + if not os.path.exists(src): + logger.error("Missing lorax dracut hook script %s", src) + continue + dst = joinpaths(self.vars.inroot, "/tmp/", hook_script) + copy2(src, dst) + dracut_commands += ["--include", joinpaths("/tmp/", hook_script), + dracut_path] + return dracut_commands + +#### TreeBuilder helper functions +
+
[docs]def findkernels(root="/", kdir="boot"): + # To find possible flavors, awk '/BuildKernel/ { print $4 }' kernel.spec + flavors = ('debug', 'PAE', 'PAEdebug', 'smp', 'xen', 'lpae', 'tegra') + kre = re.compile(r"vmlinuz-(?P<version>.+?\.(?P<arch>[a-z0-9_]+)" + r"(\.(?P<flavor>{0}))?)$".format("|".join(flavors))) + kernels = [] + bootfiles = os.listdir(joinpaths(root, kdir)) + for f in bootfiles: + match = kre.match(f) + if match: + kernel = DataHolder(path=joinpaths(kdir, f)) + kernel.update(match.groupdict()) # sets version, arch, flavor + kernels.append(kernel) + + # look for associated initrd/initramfs/etc. + for kernel in kernels: + for f in bootfiles: + if f.endswith('-'+kernel.version+'.img'): + imgtype, _rest = f.split('-',1) + # special backwards-compat case + if imgtype == 'initramfs': + imgtype = 'initrd' + kernel[imgtype] = DataHolder(path=joinpaths(kdir, f)) + + logger.debug("kernels=%s", kernels) + return kernels + +# udev whitelist: 'a-zA-Z0-9#+.:=@_-' (see is_whitelisted in libudev-util.c)
+udev_blacklist=' !"$%&\'()*,/;<>?[\\]^`{|}~' # ASCII printable, minus whitelist +udev_blacklist += ''.join(chr(i) for i in range(32)) # ASCII non-printable +
[docs]def udev_escape(label): + out = u'' + for ch in label.decode('utf8'): + out += ch if ch not in udev_blacklist else u'\\x%02x' % ord(ch) + return out.encode('utf8')
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/treeinfo.html b/lorax-composer/_modules/pylorax/treeinfo.html new file mode 100644 index 00000000..7b124a85 --- /dev/null +++ b/lorax-composer/_modules/pylorax/treeinfo.html @@ -0,0 +1,151 @@ + + + + + + + + + + pylorax.treeinfo — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.treeinfo

+#
+# treeinfo.py
+#
+# Copyright (C) 2010  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+import logging
+logger = logging.getLogger("pylorax.treeinfo")
+
+import ConfigParser
+import time
+
+
+
[docs]class TreeInfo(object): + + def __init__(self, product, version, variant, basearch, + packagedir=""): + + self.c = ConfigParser.ConfigParser() + + section = "general" + data = {"timestamp": time.time(), + "family": product, + "version": version, + "name": "%s-%s" % (product, version), + "variant": variant or "", + "arch": basearch, + "packagedir": packagedir} + + self.c.add_section(section) + map(lambda (key, value): self.c.set(section, key, value), data.items()) + +
[docs] def add_section(self, section, data): + if not self.c.has_section(section): + self.c.add_section(section) + + map(lambda (key, value): self.c.set(section, key, value), data.items()) +
+
[docs] def write(self, outfile): + logger.info("writing .treeinfo file") + with open(outfile, "w") as fobj: + self.c.write(fobj)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_modules/pylorax/yumhelper.html b/lorax-composer/_modules/pylorax/yumhelper.html new file mode 100644 index 00000000..38b28734 --- /dev/null +++ b/lorax-composer/_modules/pylorax/yumhelper.html @@ -0,0 +1,219 @@ + + + + + + + + + + pylorax.yumhelper — Lorax 19.7.10 documentation + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for pylorax.yumhelper

+#
+# yumhelper.py
+#
+# Copyright (C) 2010  Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Red Hat Author(s):  Martin Gracik <mgracik@redhat.com>
+#
+
+import logging
+logger = logging.getLogger("pylorax.yumhelper")
+import re
+import yum, yum.callbacks, yum.rpmtrans
+import pylorax.output as output
+
+__all__ = ['LoraxDownloadCallback', 'LoraxTransactionCallback',
+           'LoraxRpmCallback']
+
+
[docs]class LoraxDownloadCallback(yum.callbacks.DownloadBaseCallback): + + def __init__(self): + yum.callbacks.DownloadBaseCallback.__init__(self) + self.output = output.LoraxOutput() + + pattern = r"\((?P<pkgno>\d+)/(?P<total>\d+)\):\s+(?P<pkgname>.*)" + self.pattern = re.compile(pattern) + +
[docs] def updateProgress(self, name, frac, fread, ftime): + """ + Update the progress bar + @param name: filename + @param frac: progress fraction (0 -> 1) + @param fread: formated string containing BytesRead + @param ftime: formated string containing remaining or elapsed time + """ + + match = self.pattern.match(name) + + pkgno = 0 + total = 0 + pkgname = name + if match: + pkgno = int(match.group("pkgno")) + total = int(match.group("total")) + pkgname = match.group("pkgname") + + info = "({0:3d}/{1:3d}) [{2:3.0f}%] downloading " + info = info.format(pkgno, total, frac * 100) + + infolen, pkglen = len(info), len(pkgname) + if (infolen + pkglen) > self.output.width: + pkgname = "{0}...".format(pkgname[:self.output.width-infolen-3]) + + msg = "{0}<b>{1}</b>\r".format(info, pkgname) + self.output.write(msg) + if frac == 1: + self.output.write("\n") + +
+
[docs]class LoraxTransactionCallback(object): + + def __init__(self): + self.output = output.LoraxOutput() + +
[docs] def event(self, state, data=None): + if state == yum.callbacks.PT_DOWNLOAD: + self.output.write("downloading packages\n") + elif state == yum.callbacks.PT_DOWNLOAD_PKGS: + pass + elif state == yum.callbacks.PT_GPGCHECK: + self.output.write("checking package signatures\n") + elif state == yum.callbacks.PT_TEST_TRANS: + self.output.write("running test transaction\n") + elif state == yum.callbacks.PT_TRANSACTION: + self.output.write("running transaction\n") + +
+
[docs]class LoraxRpmCallback(yum.rpmtrans.RPMBaseCallback): + + def __init__(self): + yum.rpmtrans.RPMBaseCallback.__init__(self) + self.output = output.LoraxOutput() + +
[docs] def event(self, package, action, te_current, te_total, + ts_current, ts_total): + + action_str = self.action[action].encode("utf-8") + info = "({0:3d}/{1:3d}) [{2:3.0f}%] {3} " + info = info.format(ts_current, ts_total, + float(te_current) / float(te_total) * 100, + action_str.lower()) + + pkg = "{0}".format(package) + + infolen, pkglen = len(info), len(pkg) + if (infolen + pkglen) > self.output.width: + pkg = "{0}...".format(pkg[:self.output.width-infolen-3]) + + msg = "{0}<b>{1}</b>\r".format(info, pkg) + self.output.write(msg) + if te_current == te_total: + self.output.write("\n") +
+
[docs] def filelog(self, package, action): + if self.fileaction.get(action) == "Installed": + logger.debug("%s installed successfully", package) +
+
[docs] def errorlog(self, msg): + logger.warning("RPM transaction error: %s", msg) +
+
[docs] def scriptout(self, package, msgs): + if msgs: + logger.info("%s scriptlet output:\n%s", package, msgs)
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lorax-composer/_sources/index.rst.txt b/lorax-composer/_sources/index.rst.txt new file mode 100644 index 00000000..acd79678 --- /dev/null +++ b/lorax-composer/_sources/index.rst.txt @@ -0,0 +1,28 @@ +.. Lorax documentation master file, created by + sphinx-quickstart on Wed Apr 8 13:46:00 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Lorax's documentation! +================================= + +Contents: + +.. toctree:: + :maxdepth: 1 + + intro + lorax + livemedia-creator + lorax-composer + product-images + modules + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/lorax-composer/_sources/index.txt b/lorax-composer/_sources/index.txt new file mode 100644 index 00000000..acd79678 --- /dev/null +++ b/lorax-composer/_sources/index.txt @@ -0,0 +1,28 @@ +.. Lorax documentation master file, created by + sphinx-quickstart on Wed Apr 8 13:46:00 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Lorax's documentation! +================================= + +Contents: + +.. toctree:: + :maxdepth: 1 + + intro + lorax + livemedia-creator + lorax-composer + product-images + modules + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/lorax-composer/_sources/intro.rst.txt b/lorax-composer/_sources/intro.rst.txt new file mode 100644 index 00000000..01857ee9 --- /dev/null +++ b/lorax-composer/_sources/intro.rst.txt @@ -0,0 +1,67 @@ +Introduction to Lorax +===================== + +I am the Lorax. I speak for the trees [and images]. + +Lorax is used to build the Anaconda Installer boot.iso, it consists of a +library, pylorax, a set of templates, and the lorax script. Its operation +is driven by a customized set of Mako templates that lists the packages +to be installed, steps to execute to remove unneeded files, and creation +of the iso for all of the supported architectures. + + + + + + +Before Lorax +============ + +Tree building tools such as pungi and revisor rely on 'buildinstall' in +anaconda/scripts/ to produce the boot images and other such control files +in the final tree. The existing buildinstall scripts written in a mix of +bash and Python are unmaintainable. Lorax is an attempt to replace them +with something more flexible. + + +EXISTING WORKFLOW: + +pungi and other tools call scripts/buildinstall, which in turn call other +scripts to do the image building and data generation. Here's how it +currently looks: + + -> buildinstall + * process command line options + * write temporary yum.conf to point to correct repo + * find anaconda release RPM + * unpack RPM, pull in those versions of upd-instroot, mk-images, + maketreeinfo.py, makestamp.py, and buildinstall + + -> call upd-instroot + + -> call maketreeinfo.py + + -> call mk-images (which figures out which mk-images.ARCH to call) + + -> call makestamp.py + + * clean up + + +PROBLEMS: + +The existing workflow presents some problems with maintaining the scripts. +First, almost all knowledge of what goes in to the stage 1 and stage 2 +images lives in upd-instroot. The mk-images* scripts copy things from the +root created by upd-instroot in order to build the stage 1 image, though +it's not completely clear from reading the scripts. + + +NEW IDEAS: + +Create a new central driver with all information living in Python modules. +Configuration files will provide the knowledge previously contained in the +upd-instroot and mk-images* scripts. + + + diff --git a/lorax-composer/_sources/intro.txt b/lorax-composer/_sources/intro.txt new file mode 100644 index 00000000..01857ee9 --- /dev/null +++ b/lorax-composer/_sources/intro.txt @@ -0,0 +1,67 @@ +Introduction to Lorax +===================== + +I am the Lorax. I speak for the trees [and images]. + +Lorax is used to build the Anaconda Installer boot.iso, it consists of a +library, pylorax, a set of templates, and the lorax script. Its operation +is driven by a customized set of Mako templates that lists the packages +to be installed, steps to execute to remove unneeded files, and creation +of the iso for all of the supported architectures. + + + + + + +Before Lorax +============ + +Tree building tools such as pungi and revisor rely on 'buildinstall' in +anaconda/scripts/ to produce the boot images and other such control files +in the final tree. The existing buildinstall scripts written in a mix of +bash and Python are unmaintainable. Lorax is an attempt to replace them +with something more flexible. + + +EXISTING WORKFLOW: + +pungi and other tools call scripts/buildinstall, which in turn call other +scripts to do the image building and data generation. Here's how it +currently looks: + + -> buildinstall + * process command line options + * write temporary yum.conf to point to correct repo + * find anaconda release RPM + * unpack RPM, pull in those versions of upd-instroot, mk-images, + maketreeinfo.py, makestamp.py, and buildinstall + + -> call upd-instroot + + -> call maketreeinfo.py + + -> call mk-images (which figures out which mk-images.ARCH to call) + + -> call makestamp.py + + * clean up + + +PROBLEMS: + +The existing workflow presents some problems with maintaining the scripts. +First, almost all knowledge of what goes in to the stage 1 and stage 2 +images lives in upd-instroot. The mk-images* scripts copy things from the +root created by upd-instroot in order to build the stage 1 image, though +it's not completely clear from reading the scripts. + + +NEW IDEAS: + +Create a new central driver with all information living in Python modules. +Configuration files will provide the knowledge previously contained in the +upd-instroot and mk-images* scripts. + + + diff --git a/lorax-composer/_sources/lorax-composer.rst.txt b/lorax-composer/_sources/lorax-composer.rst.txt new file mode 100644 index 00000000..5af3d0f6 --- /dev/null +++ b/lorax-composer/_sources/lorax-composer.rst.txt @@ -0,0 +1,104 @@ +lorax-composer +============== + +:Authors: + Brian C. Lane + +lorax-composer is an API server that is compatible with the Weldr project's +bdcs-api REST protocol. More information on Weldr can be found `on the Weldr +blog `_. + +The server runs as root, and communication with it is via a unix domain socket +(``/run/weldr/api.socket`` by default). The directory and socket are owned by +root:weldr so that any user in the weldr group can use the API to control +lorax-composer. + +When starting the server it will check for the correct permissions and +ownership of a pre-existing directory, or it will create a new one if it +doesn't exist. The socket path and group owner's name can be changed from the +cmdline by passing it the ``--socket`` and ``--group`` arguments. + +As of version 19.7.7 it will drop root privileges for the API thread. The queue +and compose thread still runs as root because it needs to be able to +mount/umount files and run Anaconda. + +Logs +---- + +Logs are stored under ``/var/log/lorax-composer/`` and include all console +messages as well as extra debugging info and API requests. + +Quickstart +---------- + +1. Create a ``weldr`` user and group by running ``useradd weldr`` +2. Remove any pre-existing socket directory with ``rm -rf /run/weldr/`` + A new directory with correct permissions will be created the first time the server runs. +3. Either start it via systemd with ``systemctl start lorax-composer`` or + run it directly with ``lorax-composer /path/to/recipes/`` + +The ``/path/to/recipes/`` is where the recipe's git repo will be created, and +all the recipes created with the ``/api/v0/recipes/new`` route will be stored. +If there are recipe ``.toml`` files in the top level of the directory they will +be imported into the recipe git storage. + +Composing Images +---------------- + +As of version 19.7.7 lorax-composer can create ``tar`` output images. You can use curl to start +a compose like this:: + + curl --unix-socket /run/weldr/api.socket -X POST -H "Content-Type: application/json" -d '{"recipe_name": "http-server", "compose_type": "tar", "branch": "master"}' http:///api/v0/compose + +And then monitor it by passing the returned build UUID to ``/compose/status/``. + +Version 19.7.10 adds support for ``live-iso`` and ``partitioned-disk`` + +Adding Output Types +------------------- + +livemedia-creator supports a large number of output types, and only some of +these are currently available via lorax-composer. To add a new output type to +lorax-composer a kickstart file needs to be added to ``./share/composer/``. The +name of the kickstart is what will be used by the ``/compose/types`` route, and the +``compose_type`` field of the POST to start a compose. It also needs to have +code added to the :py:func:`pylorax.api.compose.compose_args` function. The +``_MAP`` entry in this function defines what lorax-composer will pass to +:py:func:`pylorax.installer.novirt_install` when it runs the compose. When the +compose is finished the output files need to be copied out of the build +directory (``/var/lib/lorax/composer/results//compose/``), +:py:func:`pylorax.api.compose.move_compose_results` handles this for each type. +You should move them instead of copying to save space. + +If the new output type does not have support in livemedia-creator it should be +added there first. This will make the output available to the widest number of +users. + +Example: Add partitioned disk support +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Partitioned disk support is something that livemedia-creator already supports +via the ``--make-disk`` cmdline argument. To add this to lorax-composer it +needs 3 things: + +* A ``partitioned-disk.ks`` file in ``./share/composer/`` +* A new entry in the _MAP in :py:func:`pylorax.api.compose.compose_args` +* Add a bit of code to :py:func:`pylorax.api.compose.move_compose_results` to move the disk image from + the compose directory to the results directory. + +The ``partitioned-disk.ks`` is pretty similar to the example minimal kickstart +in ``./docs/rhel7-minimal.ks``. You should remove the ``url`` and ``repo`` +commands, they will be added by the compose process. Make sure the bootloader +packages are included in the ``%packages`` section at the end of the kickstart, +and you will want to leave off the ``%end`` so that the compose can append the +list of packages from the recipe. + +The new ``_MAP`` entry should be a copy of one of the existing entries, but with ``make_disk`` set +to ``True``. Make sure that none of the other ``make_*`` options are ``True``. The ``image_name`` is +what the name of the final image will be. + +``move_compose_results()`` can be as simple as moving the output file into +the results directory, or it could do some post-processing on it. The end of +the function should always clean up the ``./compose/`` directory, removing any +unneeded extra files. This is especially true for the ``live-iso`` since it produces +the contents of the iso as well as the boot.iso itself. diff --git a/lorax-composer/_sources/lorax-composer.txt b/lorax-composer/_sources/lorax-composer.txt new file mode 100644 index 00000000..5af3d0f6 --- /dev/null +++ b/lorax-composer/_sources/lorax-composer.txt @@ -0,0 +1,104 @@ +lorax-composer +============== + +:Authors: + Brian C. Lane + +lorax-composer is an API server that is compatible with the Weldr project's +bdcs-api REST protocol. More information on Weldr can be found `on the Weldr +blog `_. + +The server runs as root, and communication with it is via a unix domain socket +(``/run/weldr/api.socket`` by default). The directory and socket are owned by +root:weldr so that any user in the weldr group can use the API to control +lorax-composer. + +When starting the server it will check for the correct permissions and +ownership of a pre-existing directory, or it will create a new one if it +doesn't exist. The socket path and group owner's name can be changed from the +cmdline by passing it the ``--socket`` and ``--group`` arguments. + +As of version 19.7.7 it will drop root privileges for the API thread. The queue +and compose thread still runs as root because it needs to be able to +mount/umount files and run Anaconda. + +Logs +---- + +Logs are stored under ``/var/log/lorax-composer/`` and include all console +messages as well as extra debugging info and API requests. + +Quickstart +---------- + +1. Create a ``weldr`` user and group by running ``useradd weldr`` +2. Remove any pre-existing socket directory with ``rm -rf /run/weldr/`` + A new directory with correct permissions will be created the first time the server runs. +3. Either start it via systemd with ``systemctl start lorax-composer`` or + run it directly with ``lorax-composer /path/to/recipes/`` + +The ``/path/to/recipes/`` is where the recipe's git repo will be created, and +all the recipes created with the ``/api/v0/recipes/new`` route will be stored. +If there are recipe ``.toml`` files in the top level of the directory they will +be imported into the recipe git storage. + +Composing Images +---------------- + +As of version 19.7.7 lorax-composer can create ``tar`` output images. You can use curl to start +a compose like this:: + + curl --unix-socket /run/weldr/api.socket -X POST -H "Content-Type: application/json" -d '{"recipe_name": "http-server", "compose_type": "tar", "branch": "master"}' http:///api/v0/compose + +And then monitor it by passing the returned build UUID to ``/compose/status/``. + +Version 19.7.10 adds support for ``live-iso`` and ``partitioned-disk`` + +Adding Output Types +------------------- + +livemedia-creator supports a large number of output types, and only some of +these are currently available via lorax-composer. To add a new output type to +lorax-composer a kickstart file needs to be added to ``./share/composer/``. The +name of the kickstart is what will be used by the ``/compose/types`` route, and the +``compose_type`` field of the POST to start a compose. It also needs to have +code added to the :py:func:`pylorax.api.compose.compose_args` function. The +``_MAP`` entry in this function defines what lorax-composer will pass to +:py:func:`pylorax.installer.novirt_install` when it runs the compose. When the +compose is finished the output files need to be copied out of the build +directory (``/var/lib/lorax/composer/results//compose/``), +:py:func:`pylorax.api.compose.move_compose_results` handles this for each type. +You should move them instead of copying to save space. + +If the new output type does not have support in livemedia-creator it should be +added there first. This will make the output available to the widest number of +users. + +Example: Add partitioned disk support +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Partitioned disk support is something that livemedia-creator already supports +via the ``--make-disk`` cmdline argument. To add this to lorax-composer it +needs 3 things: + +* A ``partitioned-disk.ks`` file in ``./share/composer/`` +* A new entry in the _MAP in :py:func:`pylorax.api.compose.compose_args` +* Add a bit of code to :py:func:`pylorax.api.compose.move_compose_results` to move the disk image from + the compose directory to the results directory. + +The ``partitioned-disk.ks`` is pretty similar to the example minimal kickstart +in ``./docs/rhel7-minimal.ks``. You should remove the ``url`` and ``repo`` +commands, they will be added by the compose process. Make sure the bootloader +packages are included in the ``%packages`` section at the end of the kickstart, +and you will want to leave off the ``%end`` so that the compose can append the +list of packages from the recipe. + +The new ``_MAP`` entry should be a copy of one of the existing entries, but with ``make_disk`` set +to ``True``. Make sure that none of the other ``make_*`` options are ``True``. The ``image_name`` is +what the name of the final image will be. + +``move_compose_results()`` can be as simple as moving the output file into +the results directory, or it could do some post-processing on it. The end of +the function should always clean up the ``./compose/`` directory, removing any +unneeded extra files. This is especially true for the ``live-iso`` since it produces +the contents of the iso as well as the boot.iso itself. diff --git a/lorax-composer/_sources/modules.rst.txt b/lorax-composer/_sources/modules.rst.txt new file mode 100644 index 00000000..a25779d1 --- /dev/null +++ b/lorax-composer/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +pylorax +======= + +.. toctree:: + :maxdepth: 4 + + pylorax diff --git a/lorax-composer/_sources/modules.txt b/lorax-composer/_sources/modules.txt new file mode 100644 index 00000000..a25779d1 --- /dev/null +++ b/lorax-composer/_sources/modules.txt @@ -0,0 +1,7 @@ +pylorax +======= + +.. toctree:: + :maxdepth: 4 + + pylorax diff --git a/lorax-composer/_sources/pylorax.api.rst.txt b/lorax-composer/_sources/pylorax.api.rst.txt new file mode 100644 index 00000000..16ba83ba --- /dev/null +++ b/lorax-composer/_sources/pylorax.api.rst.txt @@ -0,0 +1,94 @@ +pylorax\.api package +==================== + +Submodules +---------- + +pylorax\.api\.compose module +---------------------------- + +.. automodule:: pylorax.api.compose + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.config module +--------------------------- + +.. automodule:: pylorax.api.config + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.crossdomain module +-------------------------------- + +.. automodule:: pylorax.api.crossdomain + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.projects module +----------------------------- + +.. automodule:: pylorax.api.projects + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.queue module +-------------------------- + +.. automodule:: pylorax.api.queue + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.recipes module +---------------------------- + +.. automodule:: pylorax.api.recipes + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.server module +--------------------------- + +.. automodule:: pylorax.api.server + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.v0 module +----------------------- + +.. automodule:: pylorax.api.v0 + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.workspace module +------------------------------ + +.. automodule:: pylorax.api.workspace + :members: + :undoc-members: + :show-inheritance: + +pylorax\.api\.yumbase module +---------------------------- + +.. automodule:: pylorax.api.yumbase + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pylorax.api + :members: + :undoc-members: + :show-inheritance: diff --git a/lorax-composer/_sources/pylorax.api.txt b/lorax-composer/_sources/pylorax.api.txt new file mode 100644 index 00000000..87f5f4d1 --- /dev/null +++ b/lorax-composer/_sources/pylorax.api.txt @@ -0,0 +1,91 @@ +api Package +=========== + +:mod:`api` Package +------------------ + +.. automodule:: pylorax.api + :members: + :undoc-members: + :show-inheritance: + +:mod:`compose` Module +--------------------- + +.. automodule:: pylorax.api.compose + :members: + :undoc-members: + :show-inheritance: + +:mod:`config` Module +-------------------- + +.. automodule:: pylorax.api.config + :members: + :undoc-members: + :show-inheritance: + +:mod:`crossdomain` Module +------------------------- + +.. automodule:: pylorax.api.crossdomain + :members: + :undoc-members: + :show-inheritance: + +:mod:`projects` Module +---------------------- + +.. automodule:: pylorax.api.projects + :members: + :undoc-members: + :show-inheritance: + +:mod:`queue` Module +------------------- + +.. automodule:: pylorax.api.queue + :members: + :undoc-members: + :show-inheritance: + +:mod:`recipes` Module +--------------------- + +.. automodule:: pylorax.api.recipes + :members: + :undoc-members: + :show-inheritance: + +:mod:`server` Module +-------------------- + +.. automodule:: pylorax.api.server + :members: + :undoc-members: + :show-inheritance: + +:mod:`v0` Module +---------------- + +.. automodule:: pylorax.api.v0 + :members: + :undoc-members: + :show-inheritance: + +:mod:`workspace` Module +----------------------- + +.. automodule:: pylorax.api.workspace + :members: + :undoc-members: + :show-inheritance: + +:mod:`yumbase` Module +--------------------- + +.. automodule:: pylorax.api.yumbase + :members: + :undoc-members: + :show-inheritance: + diff --git a/lorax-composer/_sources/pylorax.rst.txt b/lorax-composer/_sources/pylorax.rst.txt new file mode 100644 index 00000000..d5280598 --- /dev/null +++ b/lorax-composer/_sources/pylorax.rst.txt @@ -0,0 +1,141 @@ +pylorax package +=============== + +Subpackages +----------- + +.. toctree:: + + pylorax.api + +Submodules +---------- + +pylorax\.base module +-------------------- + +.. automodule:: pylorax.base + :members: + :undoc-members: + :show-inheritance: + +pylorax\.buildstamp module +-------------------------- + +.. automodule:: pylorax.buildstamp + :members: + :undoc-members: + :show-inheritance: + +pylorax\.creator module +----------------------- + +.. automodule:: pylorax.creator + :members: + :undoc-members: + :show-inheritance: + +pylorax\.decorators module +-------------------------- + +.. automodule:: pylorax.decorators + :members: + :undoc-members: + :show-inheritance: + +pylorax\.discinfo module +------------------------ + +.. automodule:: pylorax.discinfo + :members: + :undoc-members: + :show-inheritance: + +pylorax\.executils module +------------------------- + +.. automodule:: pylorax.executils + :members: + :undoc-members: + :show-inheritance: + +pylorax\.imgutils module +------------------------ + +.. automodule:: pylorax.imgutils + :members: + :undoc-members: + :show-inheritance: + +pylorax\.installer module +------------------------- + +.. automodule:: pylorax.installer + :members: + :undoc-members: + :show-inheritance: + +pylorax\.logmonitor module +-------------------------- + +.. automodule:: pylorax.logmonitor + :members: + :undoc-members: + :show-inheritance: + +pylorax\.ltmpl module +--------------------- + +.. automodule:: pylorax.ltmpl + :members: + :undoc-members: + :show-inheritance: + +pylorax\.output module +---------------------- + +.. automodule:: pylorax.output + :members: + :undoc-members: + :show-inheritance: + +pylorax\.sysutils module +------------------------ + +.. automodule:: pylorax.sysutils + :members: + :undoc-members: + :show-inheritance: + +pylorax\.treebuilder module +--------------------------- + +.. automodule:: pylorax.treebuilder + :members: + :undoc-members: + :show-inheritance: + +pylorax\.treeinfo module +------------------------ + +.. automodule:: pylorax.treeinfo + :members: + :undoc-members: + :show-inheritance: + +pylorax\.yumhelper module +------------------------- + +.. automodule:: pylorax.yumhelper + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pylorax + :members: + :undoc-members: + :show-inheritance: diff --git a/lorax-composer/_sources/pylorax.txt b/lorax-composer/_sources/pylorax.txt new file mode 100644 index 00000000..aa939ccd --- /dev/null +++ b/lorax-composer/_sources/pylorax.txt @@ -0,0 +1,138 @@ +pylorax Package +=============== + +:mod:`pylorax` Package +---------------------- + +.. automodule:: pylorax.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`base` Module +------------------ + +.. automodule:: pylorax.base + :members: + :undoc-members: + :show-inheritance: + +:mod:`buildstamp` Module +------------------------ + +.. automodule:: pylorax.buildstamp + :members: + :undoc-members: + :show-inheritance: + +:mod:`creator` Module +--------------------- + +.. automodule:: pylorax.creator + :members: + :undoc-members: + :show-inheritance: + +:mod:`decorators` Module +------------------------ + +.. automodule:: pylorax.decorators + :members: + :undoc-members: + :show-inheritance: + +:mod:`discinfo` Module +---------------------- + +.. automodule:: pylorax.discinfo + :members: + :undoc-members: + :show-inheritance: + +:mod:`executils` Module +----------------------- + +.. automodule:: pylorax.executils + :members: + :undoc-members: + :show-inheritance: + +:mod:`imgutils` Module +---------------------- + +.. automodule:: pylorax.imgutils + :members: + :undoc-members: + :show-inheritance: + +:mod:`installer` Module +----------------------- + +.. automodule:: pylorax.installer + :members: + :undoc-members: + :show-inheritance: + +:mod:`logmonitor` Module +------------------------ + +.. automodule:: pylorax.logmonitor + :members: + :undoc-members: + :show-inheritance: + +:mod:`ltmpl` Module +------------------- + +.. automodule:: pylorax.ltmpl + :members: + :undoc-members: + :show-inheritance: + +:mod:`output` Module +-------------------- + +.. automodule:: pylorax.output + :members: + :undoc-members: + :show-inheritance: + +:mod:`sysutils` Module +---------------------- + +.. automodule:: pylorax.sysutils + :members: + :undoc-members: + :show-inheritance: + +:mod:`treebuilder` Module +------------------------- + +.. automodule:: pylorax.treebuilder + :members: + :undoc-members: + :show-inheritance: + +:mod:`treeinfo` Module +---------------------- + +.. automodule:: pylorax.treeinfo + :members: + :undoc-members: + :show-inheritance: + +:mod:`yumhelper` Module +----------------------- + +.. automodule:: pylorax.yumhelper + :members: + :undoc-members: + :show-inheritance: + +Subpackages +----------- + +.. toctree:: + + pylorax.api + diff --git a/lorax-composer/_static/ajax-loader.gif b/lorax-composer/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/lorax-composer/_static/basic.css b/lorax-composer/_static/basic.css new file mode 100644 index 00000000..43e8bafa --- /dev/null +++ b/lorax-composer/_static/basic.css @@ -0,0 +1,540 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/lorax-composer/_static/classic.css b/lorax-composer/_static/classic.css new file mode 100644 index 00000000..6cfbfb9c --- /dev/null +++ b/lorax-composer/_static/classic.css @@ -0,0 +1,261 @@ +/* + * classic.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- classic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: sans-serif; + font-size: 100%; + background-color: #11303d; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + background-color: #1c4e63; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: #ffffff; + color: #000000; + padding: 0 20px 30px 20px; +} + +div.footer { + color: #ffffff; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #ffffff; + text-decoration: underline; +} + +div.related { + background-color: #133f52; + line-height: 30px; + color: #ffffff; +} + +div.related a { + color: #ffffff; +} + +div.sphinxsidebar { +} + +div.sphinxsidebar h3 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: #ffffff; +} + +div.sphinxsidebar h4 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: #ffffff; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: #ffffff; +} + +div.sphinxsidebar a { + color: #98dbcc; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + + + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: #355f7c; + text-decoration: none; +} + +a:visited { + color: #355f7c; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + + + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Trebuchet MS', sans-serif; + background-color: #f2f2f2; + font-weight: normal; + color: #20435c; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: #eeffcc; + color: #333333; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +code { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th { + background-color: #ede; +} + +.warning code { + background: #efc2c2; +} + +.note code { + background: #d6d6d6; +} + +.viewcode-back { + font-family: sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + color: #efefef; + background-color: #1c4e63; +} \ No newline at end of file diff --git a/lorax-composer/_static/comment-bright.png b/lorax-composer/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903 GIT binary patch literal 3500 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/lorax-composer/_static/comment.png b/lorax-composer/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95 GIT binary patch literal 3445 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 Xn!ZpXD%P(H00000NkvXXu0mjf= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/lorax-composer/_static/down-pressed.png b/lorax-composer/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7ad782782e4f8e39b0c6e15c7344700cdd2527 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}Z23@f-Ava~9&<9T!#}JFtXD=!G zGdl{fK6ro2OGiOl+hKvH6i=D3%%Y^j`yIkRn!8O>@bG)IQR0{Kf+mxNd=_WScA8u_ z3;8(7x2){m9`nt+U(Nab&1G)!{`SPVpDX$w8McLTzAJ39wprG3p4XLq$06M`%}2Yk zRPPsbES*dnYm1wkGL;iioAUB*Or2kz6(-M_r_#Me-`{mj$Z%( literal 0 HcmV?d00001 diff --git a/lorax-composer/_static/down.png b/lorax-composer/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..3003a88770de3977d47a2ba69893436a2860f9e7 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}xaV3tUZ$qnrLa#kt978NlpS`ru z&)HFc^}^>{UOEce+71h5nn>6&w6A!ieNbu1wh)UGh{8~et^#oZ1# z>T7oM=FZ~xXWnTo{qnXm$ZLOlqGswI_m2{XwVK)IJmBjW{J3-B3x@C=M{ShWt#fYS9M?R;8K$~YwlIqwf>VA7q=YKcwf2DS4Zj5inDKXXB1zl=(YO3ST6~rDq)&z z*o>z)=hxrfG-cDBW0G$!?6{M<$@{_4{m1o%Ub!naEtn|@^frU1tDnm{r-UW|!^@B8 literal 0 HcmV?d00001 diff --git a/lorax-composer/_static/file.png b/lorax-composer/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..d18082e397e7e54f20721af768c4c2983258f1b4 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$HyOL$D9)yc9|lc|nKf<9@eUiWd>3GuTC!a5vdfWYEazjncPj5ZQX%+1 zt8B*4=d)!cdDz4wr^#OMYfqGz$1LDFF>|#>*O?AGil(WEs?wLLy{Gj2J_@opDm%`dlax3yA*@*N$G&*ukFv>P8+2CBWO(qz zD0k1@kN>hhb1_6`&wrCswzINE(evt-5C1B^STi2@PmdKI;Vst0PQB6!2kdN literal 0 HcmV?d00001 diff --git a/lorax-composer/_static/jquery-3.1.0.js b/lorax-composer/_static/jquery-3.1.0.js new file mode 100644 index 00000000..f2fc2747 --- /dev/null +++ b/lorax-composer/_static/jquery-3.1.0.js @@ -0,0 +1,10074 @@ +/*eslint-disable no-unused-vars*/ +/*! + * jQuery JavaScript Library v3.1.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-07-07T21:44Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-