From 368a66598bc617f0e9fc74cd5db8cdf03e971ba2 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 03:19:48 +0200 Subject: [PATCH 01/10] Part 1 of the series on enabling the DevWorkspace Operator as workspace engine Signed-off-by: Mario Loriedo --- ...ile-v2-and-the-devworkspace-operator-p1.md | 149 ++++++++++++++++++ .../che-workspace-engines.png | Bin 0 -> 80805 bytes 2 files changed, 149 insertions(+) create mode 100644 _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md create mode 100644 assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md new file mode 100644 index 00000000..a012ccec --- /dev/null +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -0,0 +1,149 @@ +--- +title: Devfile v2 and the DevWorkspace Operator - Part 1 +layout: post +author: Mario Loriedo +description: >- + How to enable the DevWorkspace engine and what it means from a user point of view +categories: [] +keywords: ['devfile', 'devworkpace'] +slug: /@mario.loriedo/devfile-v2-and-the-devworkspace-operator-p1 +--- + +![Locally trusted certs]({{ site.url }}{{ site.baseurl }}/assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png) + +With version [2.28 of Che](https://github.com/eclipse/che/releases/tag/7.28.0) we have introduced a workspace engine, [the DevWorkspace Operator](https://github.com/devfile/devworkspace-operator), that supports v2 of the Devfile specification. Although the default engine is still the che-server we plan to replace it with the DevWorkspace in the next few months. + +Switching to the DevWorkspace engine has some important consequences. Notably on the authentication subsystem that will be lighter and more flexible, on the workspaces network managed by a central gateway powered by [Traefik](https://github.com/traefik/traefik) and simpler configuration options for Che administrators. + +This is the first of a series of three articles reviewing the changes introduced with the DevWorkspace. Here we will discuss the changes from the point of view of a Che user. The second part will be about the point of view of a Che administrator. The last part will be dedicated to the DevWorkspace Operator. + +## How to enable the DevWorkspace Operator +Che default workspace engine is the che-server. The DevWorkspace engine needs to be explicitly enabled. The following [chectl](https://github.com/che-incubator/chectl) command deploys Che on OpenShift configured with the DevWorkspace Operator as workspace engine: + +```bash +chectl server:deploy --installer=olm -p openshift \ + --workspace-engine=dev-workspace +``` + +The command above works for other Kubernetes distributions too (`-p openshift` should be replaced) but, after chectl has completed, the CheCluster CustomResource requires a patch: + +```bash +# For vanilla Kubernetes only +kubectl patch checluster/eclipse-che --type=merge -n eclipse-che \ + --patch '{"spec": {"server": { "customCheProperties": {"CHE_INFRA_KUBERNETES_ENABLE__UNSUPPORTED__K8S": "true"}}}}' +``` + +## Changes from a Che user perspective + +### New Devfile spec (v2.1) + +Here is an example of v2.1 Devfile: +```yaml +schemaVersion: 2.1.0 +metadata: + name: python-hello-world +attributes: + che-theia.eclipse.org/sidecar-policy: USE_DEV_CONTAINER +components: + - name: python + container: + image: quay.io/devfile/base-developer-image:ubi8-7bd4fe3 + volumeMounts: + - name: venv + path: /home/user/.venv + memoryLimit: 512Mi + mountSources: true + - name: venv + volume: + size: 1G +``` + +The Devfile specification has gone through the release of v2. Here are a few notable changes: +- It is compatible with the specification of a Kubernetes API. The DevWorkspace CRD is an extension of the Kubernetes API and it’s generated from the Devfile specification. +- It removes [chePlugin and cheEditor component types](https://github.com/eclipse/che/issues/18669). +- It introduces the volume component type. +- Events and parent are two new components types. +- Besides Che it’s used by the OpenShift Developer Console, `odo` and the [Devfile Docker plugin](https://github.com/devfile/devfile-docker-plugin). + +The documentation for Devfile v2.1 is [https://devfile.io/docs/devfile/2.1.0/](https://devfile.io/docs/devfile/2.1.0/user-guide/index.html) and a migration to v2 guide + +### A new way to specify the editor and its plugins +As mentioned above, version 2 of the Devfile, doesn’t include cheEditor and chePlugins component types anymore. + +The recommended way to specify the editor of a workspace is to include the file `.che/che-editor.yaml` at the root of the workspace git repository: +```yaml +id: eclipse/che-theia # mandatory +registryUrl: https://my-registry.com # optional +override: # optional + containers: + - name: theia-ide + memoryLimit: 1280Mi +``` + +The recommended way to specify a che-theia plugin in a workspace is to include the file `.vscode/extensions.json` at the root of the workspace git repository: +```json +{ + "recommendations": [ + "ms-python.python" + ] +} +``` + +It is also possible to define a Che editor and its plugins inline in a Devfile attributes. But that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). + +### The Devfile should live at the root of the git repo, not in a registry +The recommended place to publish the Devfile is within the project source code. Along with the files that we have just seen above to specify che-theia plugins and the editor: + +``` + |--- devfile.yaml + |___ .che + |___ che-editor.yaml + |___ che-theia-plugins.yaml + |___ .vsocode + |___ extensions.json +``` + +The Devfile should be versioned and its version should be synchronized with the version of the source code. Having the Devfile at the root of a repository makes it possible to use a simple factory link to the repository to start the workspace. + +Versioning the Devfile with the source code has two consequences: +- the `project` section of a Devfile can be omitted: it’s implicitly set to the git repo where the Devfile lives +- Che source code examples include a Devfile at their root (those Devfiles used to be published in the Devfile registry) + +### Only one running workspace per user +A user cannot have more than one running workspace at the time. This limitation is related to the persistent volume strategy (“common”) that is used by Che. The same Volume is mounted by every workspace of the same user. This is implemented using Pods `volumeMounts.subPath` property and guarantee that the number of Volumes mounted by Che matches the number of user. + +## Current limitations and Timeline + +Although most of the work has been completed, Che with the DevWorkspace enabled is not ready for production yet. Here is a list of open issues: +- [An admin should be able to specify secrets or config maps that need to be provisioned on each user's namespace #20501](https://github.com/eclipse/che/issues/20501) +- [Support custom certificates for git hosts for devworkspaces #20528](https://github.com/eclipse/che/issues/20528) +- [Support Pod tolerations for DevWorkspace Pods devfile/devworkspace-operator#614](https://github.com/devfile/devworkspace-operator/issues/614) +- [Che with Devworkspaces should be able to use Dex as identity provider on OIDC enabled k8s #20362](https://github.com/eclipse/che/issues/20362) +- [Create v2 devfiles for Getting Started samples](https://github.com/eclipse/che/issues/19341) +- [Support overriding Che Theia plugins preferences and sidecar through .che/che-theia-plugins.yaml](https://github.com/eclipse/che/issues/20596) +- [Adapt Che-Theia Activity Tracker extension to DevWorkspace mode (idling)](https://github.com/eclipse/che/issues/20460) + +The complete list of issues and the due date can be tracked on the [GitHub milestone](https://github.com/eclipse/che/milestone/140). + +## Conclusion + +In this post we have described how to enable the DevWorkspace engine and reviewed the changes from the point of view of a user of Che. + +In the second part of this series we are going to look at the changes from an administrator point of view: +- It’s possible to deploy only one Che instance per Kubernetes cluster +- Devfiles are not in the registry anymore +- Keycloak is not required anymore and Che users has to be Kubernetes users +- Simpler configuration: namespace, persistent volumes, network +- Use of external routes not supported +- Metrics + +The third part of this series will be about the DevWorkspace Operator: +- Extending the Kubernetes API to provision Development Environments +- Relationship between the DevWorkspace CRD and the Devfile v2 +- Relationship between the DevWorkspace Operator and the OpenShift WebTerminal +- Comparison between the DevWorkspace controller and the che-server: + - single tenant + - no knowledge of IDEs and their extensions +- DevWorkspaceTemplate and Plugins +- Auto-mounting Secrets and ConfigMaps + diff --git a/assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png b/assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png new file mode 100644 index 0000000000000000000000000000000000000000..30f999afc66b991e2e31fcaa71e1385a9345535c GIT binary patch literal 80805 zcmd4(bySpH_XiHcNP~2UNGKpkBi*AQh_rNfr*sW4V4)Jy4T6B=&>$Tm(k0y@-7&<# z!0#F#y`NjZKJUAJYrTKGxR!Hqo!V#D+55B45UQ#ycNOnC9vT|jRr!Z9kI~RDy3o+B zu;E|%KpTIO3=>Kia0R3vk=*qbA>-h?59<<=7GJRkYU0V$ucO4}~QFCWUE>jCEruUm-0dZ9=_si(NISb)G6-_< zaPi!d#A9G!5O=k(5`8Qq`*S$(o5U>}cXt<2Zf-9xFD@@WE@xM3Ze9@)5pJHl+;{JC z0zEk0e4N}(y*ZuS82>ZLuX$uF-OOEWUEFP*ofuH_nwmL#xJ%r+g<9yJpa0P5Zfo`5 zm7LsuZVT8TH>!o3my3t{pSgjd;;6TxDz3Jcz{;rkC3(ev^!)AJ&vnGPQH%eJnE&kb z$6H{ll6d0W|FBIGkJ@Mf8x0MNCNFbO!yA1w6*uLEX5|a^o52iBWR@fpckf}4-@JnJ z>Xo~Js*EN0!GmWlE5Y~?^H{7=43d^3^GDNs3?~M=%=5t?gs(a=+zRFBk`#B5<|hLS zLIYNe*Yu~0HICi;-L=Q|Q|ETxJI&O3?0lRn5*_w%-57m?21UbQKtsm?qk)KnP>;}C z#N$1pd*9^`+da>{4A(c`aE+*MJeC+AzRu)7Kb!>K$eO7Q(5sGuW|iMHxpMoTfj{Q} zuV7SFsT*0!B|q7_@3Gn?^VO} zVO~yZm$|3}bRR`d?L!lmf(_GQ`#K#K&3nH{{Iyaj&Za2@`7F;!Ev0yS;+bg5RV_{J zPa{Gzj@oZZALZD;5Tp0gD}SmYa_XNK5MgLFRh{HCUW5ji2l;ADNa3#_zmC$Khw( z^%8TrR~|yUTz;iH#`X$Wd5_MQLD@gqANd3X z<2!2<2@TVp+Dlg4;X&#f#$MPdJhZ$s)8r^IM_PiC1eVWAI)|wAPxJgMn7Ro{uKpDJPo4rSmzgiu z>Q7iJ&FNo%oT_mJXkg$3b?8V7B`Z@hyr!2L>>CWEWcZJ={4?qo4Xgy{oajfS!#fF* zHrI(>2~1r|v7bFw$M|!VpZ%XPmgK=7miIXEI|6gBq}yAjTfF*HqkbxAh6@INx1w>~ z*B5f%prt1lZCcAdIXHg`;CoE-XOT*pa+JEgmp7>rIFcXscIlau;!+B+!T*ztTDf^% ztr5K89Z%RJyI^1;Rd3Lg4pBcJ{EEe+%N~vLe&RoLmG}!a^lHy+dQvU6L{VGF4_d)z z7)BNkE=|~^^2hF`oBW>*fctP(HM@D$shHgKA!}EESRAwur+(^{wy4;%p+8v}i3!p( zU#ZUF5?*#@;RxK|xE6Z#&ptmbc9j{ufzmxYkN(E%-2TmM^siU{k3{}s)B$AU(*!lM z{B+k2jsqP#=*OI;ZR!8y#!sO%+{%FI7xTkI%=QkMJ^kB^sKE{YWBo56Xnz99UUNdz zrL+}6T`u!Yj;tD#}A!%=*yiE?NUs}We z-1JCTmhyj4fG1~iWn-`?$LV%r6S8254_fFVt^DHef=(jwE~4GNViAC_>{Y(?zx4V6 zlS{cr7mC!02b&xal)3*jqkkz@5SS0tF^*1k@z_ zS+5cObv`rj>89@pHS`>&kshUUN&lCIe`_NHlS>|Q zgVN`sAv->i&PjCY$Eox;8Q9|3P$uHXoKEG&JV&GbyY{h4Kz(GJiNZhf!%X5XhR^_# zRIxyO-2?InoZoqzp#%~WypyZV^B=on6-EbHV$z$`V*l37U1mN}>5=gaQ@Xf~ps~UG!FYsB z5Lh?8d6?rjEs2x|(Fm2=Wy(uV{8&Jh0ffNcT2hw(Ni3{k!=FsrR@;F*9p4fva#r0s+vJp$_8v z6_5SPVDJ>d_sWoycNP6>Gnf~Ln3esr@DTpr zw_r;OFhD6N<-Zf5{z6kc0=$o(5@|6yQ`d=Plz|4+Bw{Km{Z#OU|!{Ikgn zM^J2)!eipUa`bl&{m!>X4}-M16@*vasec=4^C)BVJ5Il{Qgb9K&dPX*VMUS0cZf1o zFcl7g4((Yo;pj&G*Xl0%{M-p}1{sLGXjcaL)D9x%G0;t~jxWXq0c{jg&nF;9CGOANgjhNNnSmd$)qnMMTBS-#k=bx z7xZ=e&96X}aaOU9!N{kts%PrbJd>X&aPTg9Mc)J0DwxQ66=VsbY~&*YPyMX#1_ZJ2 zf`0bVXkQ{9%QZSW!VvRGHrD6hj4=#yas5)W2O0B;RraHWxXBgv2ZD8im&2Y~hm%)*d{JXX&Mfjb~uhUPv1OgGiX05#m^F}b>`SNOHs&4Ha- zNTN$)jOmv{2fx5zqkKAW>AQ~Y;y7FHQ@PX~KSqpW0c|d`>~6ImGEC>Q>iM8oYxXK8 z8tsA&U+A_V6DcdS2``W(VI$PJdpV44bb&XbttOk|1DF8_+ZnAs)#TNwcob@8`hQE?1C?y8g=6Hgw0U0+ zeK!@fz}Q$CBC#Bq43i5sItI71k6!%I?%+W4Vt&m)3YU53@Oxm_2Vj68L&LV(xR1}T zf`&xUDGzp1sI5`j&7fK;kft>bLyF*2a^O%YTED&UC%B;{NIGz95`kFH*DL_l<&2FB zNH{R(hh>jEh+n{zs2K^(bFGTxexh*@jMd4ThL0Q+<4jQzZ^XK%Vw zZQ`9MDUh_)zTI#VCM8F45I92^!yQ3hGV|EQ9n{^aZi|;_Gq$@uqu%u4TOh+Y%e+RMy-C>2m0GIEbK+|} z>M(xhhm?LMrq#k2^)FNmH)@yP`jet2uX@j-g!6seSm3NES;cvHdi@KL?%ToTc3}|I zfb5#UhKC9;{a9N<@t*w71ikHT4y7>yy%2B??rPeJdk*I(VL6i?Qi@R~H{o&0w?R!< zk#Lw@ZOKa{$G!AjZRTs=%e;6yE*=q$$VVM+#%OSH`@EySYpxs3!Oi$QRsCj0kjses zJxKS??JLlV+r(Z+&K2LRJ5(mz`Xxf72}PK^5yRCB!Ejh_f*ST9IFO8_0ZFMbRY~G?XYf7EzA#K4^rAkguVKtlmB0yw^EE zI+BC%8M2j37_pjl#qbQbjOk`Xp#!lF2OlM;o=hYM%_5ZI4zViu~Y<48r)*(>(Z z=gCh%Ck1bah?hOm(Ju1O6mxa6&XP;NuHSqpsFaYBMgyuH_2^ZYmMHOz2<%ogao#u= zT@NtXz>g2)^*Cz@Wl6hs!)yA9C6?@*g7SP8J<_Jc`$-5<5jAOp*LiAZ)NK$crAgI?_@20swexB*fiwa$P}6u8%4Ox#C<4j#SSxA zwrJ)lFTlVmta_r}%l2c(twa)qAuYYEeyOyfH!hv(wkZ8qrRnu@d8mn5$PDWmeleQS)lo@$zKN)b?ZOIIBpwyPkK18qca z{CnGsbq|_t=k{CnHko5#YEl??Wx-?h#gNcCs?qH|ZVYh{m+FxoH@Ek3-5hOC${OLR z+(YRMaSV5&`VGUKS6(#>Mxpc;QXU}2(QothJ_o^XNtj7+Vj_ZyAv0HQhvYEkJQT!z zlc0N2;1GUQD_aKelBBE4y>G_f-5b_dk^|1}n77RzJoJv6GuB?-0YN=*YHY?M11(##?!6d>2x(pb>dM%}I7H*^h?!GbY9zgGW=i-hS#9~Kjq_d^){V`Wgy!XB zXSy9EVvpeHOx8q)lZfa=awGM-cIjruZ7PBfo-WF;SKH1M8?n{A!y`FKgKx28i^_aT^AH2vP-Cwz z+8ZMpwd%B$MJwyW+#J zGT;L#zJGLE5v7Sua1nDjdxRD^qJ7Sv_5fJ;s~q#b^r)-Ur6hswS+`;(XK-PK@(rte z$LpY`?Z#ZxeQ%47lt4^>FMe3l?7H+E;k5_L2xEoA~L(u)Q;dnNgL6=hY3eDYn zVEc>Jv=0jH%;QI?fW7WW2chdS1~ol`$lRB*C^B*oee1hnPh;Sa%&zo;l0%0W2nK|& z(a_*uwy8(+?`I(TbtgEcMzG=8v$>3w!{$)qWAqK90g0P=PcQe0FxG*T;>jK06!u}_ zVa;mL7TO=jc6bgR!}UIX8c@$T!N9}HS6|xsTvG=fDoM7xjeD-S(_vOJD^q!_#9USK z$u+y>tsEV-M!|?lXB6{0V~qiR?pyjEGhLqWdyu^D$5ULcViMzArJ~upWKXvrRT|L- ze5f;UGp2!-O%vUu{XOJn05V}bu#KQbiT~-o$=Xo%GjAI3JwEsYNPc&&!_;dN{PP>8 zRm2b90*MZ}=`cA4!+-#YV&whhh%}G|$^kUXEDahwhTJ9&e-G{%AUMflD@-nA7Z>gf=DKV0ysTE(fiZm|#J`wg*>;aklIB{ex+`cl zLRhYKM#w4M5rJ_({Tb{Ly*Q^;deBPwuI9uwu5(Sn&*u=SzG-ue;p16ix_=N$8EA2wQrNM_T>Qvb-$3ix!1JE*{|7e(U+m z6d29`le7$cQ}Xwel>rmL2p$J1lKp#?Ut`fg6D;5ijx+P8&;H(ghZw-AKo&{=9q{jd zUnGG9ae|(a55(!RyDK!AF4AbYEOEz4>=!1P|C&Hd^BCzvByKDgaP* z)PaNlhsph9=VJh!;K2OCkNyuJ@$YFOAplRxq-1se!2EuSA`%2_>kbgK{vDIqL}7PG z-q!nnZzjj-dGzk;|KL~;6ap-IJ!WXT$e(CaHA3cZs7xNk|5D|E0>D5-8?s_MaccIQSvv~iuL_U< zQLOldSFxiTHE?Wv8Fv1Se1=f)Bp)owfr03Uk^#UYwIu|kQvPpo|5phnZUOAoUxW($ zy%_>D7plzLQvO|G^-&6IFJ6N6*X9frpc#%U-uw50fW>P-sT{(vNB=OKpTr%8HWx}( zPDNWuolW#(9nW|fo6RIUl*yMI^ohNw-TO?#5+~1h031QMeWDwMs8j$S2okI2fq)m! z=rEJ&nNQ%^)Lih2ptYd10*-~N~V|Khq2gX#xx;+1Wy zh>u8YdVijp^Zo7_r`_oEbEa$8uj4fyH|${gZI;T#q+5N{pF?Pkr#L{y>Sigh5{4X_ zs2m~i0^_R%K=|P2rzYX?H;zNoNLej19K5}S{htl8J#>B%v zot${@R>B~hC#_VCksj)$|53d^Sj*3>n$&)7-Iqe$lP)EtQ{|xR(u&I>1MU-Ee8W1! z@np=&ZGP?_D7O)j*JJvEmePh+U}WPvawjmb#ATs%zC-HbNdo++x=CVs ztgzZs1|~uWIUF=a(m2(a?v8gz3VL50q|<*e-f9G$E)WF@iw9QEc;a8|MFcVl`gPsO zm9d=0Cc8Lak;3+xgLs+w-2I!=1JB~b+*Qpn8Sjj)qkx(;Q*+8%TD0snaSz?Qj3z%4Ee|!snD#q`R>e4fDp$)kF_M< zc~^F$$=Y{-AB5yF>I3qb=95iJary>tbEW{=ZyHP~-s6~- zz4U52Gu#cKKQ~GJmV};5MD*c}WKc#>iVWYu#bK`01K)vr*hOw!)c;cBe;ygQF&)1Q8kYc+(>9=u{N#u?+Ip`m$AIX#wSMrG)(rn9W%>>Dj6AiPt5 zkXfOS;gi@JW{sxwZARnuv&b7nota9ijvPdesDU;!R6W6Jki3WOT>!WO9RYF@lH zJ~z8o^4Ksp&DTz+Jv-iLQmX;xzr>z(y9v4FEN2_9DuGA-h@ZVLR8nU5J&VMh$6Jj5 zQ2MWPn*oOLh=x@?s3X+ML;eB~JN9czPQ2lMpFTGbX0PXr$Jh_w!4~_-W#JhWmWof8 zdh4QIy-^upCsmA`1ci zo128Dkm=YQ!LqWi#`LC&30?1hK_4KjXbgdmw7|!V>2u(E3%(mgRIzIJS8B%aoA$z- zF^D8jOnA&cznSNB_EFGLhO$F+hdTwv49I#a!eWBWF+Csn z54ZD!ZD2Lr7(vx#7+D-S>jBlKv*5{gL6k4t71nTs7xHKhF7qpxcxQN3;Uuqg^Y6Re!}S_%YN_A zd>{w~*}uhj_YdnLt9+1tQAXm+9wf&nb_U?Ve68Gi4`2Ex14{=mL??FuF$ z2rQO)u|c7Td3K1%Hlp@`88&Wv!0dDJy8f!G)1<63W*13Y@T9T&+t*8g0}Z0)`-0Z< z<~UsA`Za25+z<^IWXm48Y0{S>V%q#DG3nV-qo>cw!V968jnO`?x=m88Y=L%i z;@902+6E+>6~oH!ibm`N0&3P8@sIAP9%XYw?r`KLTB`VeBTG(e`}2U{1=&|f0kw^8 zuG!+Tj*@=E^_%Cl7*Tc%19zbJvAW0!>b^%Q+@b}t=swA_&G`iLa9pZFFPKc@LFx{H zwW^5C!Ad_7IZiaI>UZq!L(3j@WfA5s1-zh-)HX?Pv(e%{L74fb*S<;7pEP45=K=wXthIPab7<3;4QW zE+mHElwwSkkZufm<`3VumO9gAaAd}df&dVyQSQsp+rwjQ@UDddBX~X-rreh-#63X3 zStNFQuoWqHME3;~eBTb(25*k80#D zu7;zvbHmKzJdN}7*6ao$?|j3}l=Wa^D(GVhj7etI57d@;>lIO3Ra0CBUW$B;l7L&l zF1IS8Vfo7be9SlyQiAfBnudN`l`WW52E{$FyngtK_C0!M!fIVV@RRGm~~7`|2s>3=pjxG#XOB9)Sy6M zGsjx#v))i9vgs1J6N37$B~IUodUYcq=}D}>AjjPz^_+~^=QK{&9DwMur92H@_zCl( z+{%w`GZdSz*UD?|d&_y|6SyrCf zja6>+6^@y961}!I>p<*hqva2p&q!7X+>XPhtdk|71J(-#L)a>>Cs^iBIs7#RpW_F{ zhCOM1ML_zcq{+@(aDQNF1Xg=-*cN~pUQ8}s6eun(zPZp7=-U2@0vb1!*UeR>X;P33 zYH}J(g5TTaY=yU#jckb~=eIkmRw{{NEZ;fn{K_tecq`1#5E zIEF!&s6Y-23rqadgc6%@mEA}_82{M*cH(ii0%m92(YWggoX~}GJ7N|do|G%oETZ7` zz-zyA=tLpMXKl?oYq~N^n;2+?tWd@J9mI zv_*e6E-MFLJjX}5`0k>dqIS+#+!HvKyB4s@VYuG^Z&uOTq!-M=Lujl|iB$E56!J1s zkQaz!~S^ z{frHa8mZcF{!5CogusiANV>oIb>NCCw7HP$>phA;JlU^<_zM}-E~?ZCQIza-EpEXh zhe_jmY;4f6UXb+sHcfTEAO!RdKx49r(kRPSeu7I>zrZDwN$fg&f7e}L?1AhoK+Y0J zJ_RsJmq2$~+hR8N#W@pxn33ST3HIMJ&_WDvcv&H%O4Dy~Hk1j}Q~xOQJ{^EpK%)R) zL@NrKlMFzxfjIt0<>^g!a0CtyE{k(=tNXS1&+M@u0NL=pYbr{j1~ z4V-fz86fBrSxEuI251A%_gV^d&npx$#lwE_c7PAG9jI`9w%cMRJ#8=N+YQp)(SDcF zy0gz)<&NpiK@_PrP2R&%@A|t!V2^47NX6h$@%2o?2R(ctoYm8J_q<_zsPhyn9q~0c z7!@hCa0l$Yu1XSHdmkNa9w8w(4je`y?8P;iMQ-~VtE2kPSFy0MrK4d@7l?UV6+b<$ zp5tN>|B*x4LiYn^(pu>?we%D(9kLS1|IPFryC1c_0;0*hQ6zX^mKRPzc12jE;t`HHQB1f`IaWWr*X-H< z5tT*jJAGvK-fh92l3?}*(%Du?0sYG&-3MhmK<4H*uvuw{$xVXejS=^Cm|`k!$apPn z5Se$DL#Er{>*1a5>Dp)LH8Uc=7iXEfetd|qscRge=1DYuvNSm}8+eJNEmxn}-vg3= z=ek~1E-7FZC4fm^0&J`|=CIfE-T6+5#OAvM{Kn33jS`VbnqQy!bFQ=Ld#>L%)Bun* zi2yM-Jk0aNT?2B>72=xGfp%wFZr7x8x?GnhDA*l#RcX8cz z?L6&{w_M4HmOdsbO1qNUgv!3P4LxFw3vWUIW5Yt_deX_Ltia{o4pqbIgO(9(V;~XQ zVrB4H&&$OE0)I%x*yHL6t7MaqtAaR3a1Vbbw>Gy4h!L46hz{~c z>{i7zj#EV3TF-VPr3rBZ08l_kB6kFucha!8w>J;eZ{1c84oxX0F7mY-*sjsi8s_F{ z1w5cfx=7|u^vt7zO14F81jW24P~L4bN1+Q}lp7xg5=8|Y?=RYI6qfhl0ikf&t~1pC z97q}$JREK_9s`oYw%nC=D@@P*3MZbr-D%K${wk0Cc>4YQxML8kr&y`Wozd?}L#nk$ z*4=gB$S#x1u)6)g?s7OB@I4-&iv~3n>m9-(cwK${b^7>&lHm$p=h7qoxj)U$joxi=;tdF&OxWxQ} zB~BNLY@}d}vvJMqzSB=Ek|eSAp5c9$7spNXsaa1Y6vvDZL-DdJ2*;WV2_C@|^Kxms zqgQs_ZdFrGbx9H_vMb0)Ba{0T{-fVEjw<1FT!JS>R9UXK&lr(v%J%Ec_AqXO-gnm8CV%NZbF9oU=p+qnaH*CQY)%%UC4 zn^HKpnoybj$IYa31$O$&lojz@t4k8%SZy;@HaRskM_KAxYcrVn+*Nn(iRToht&+(A zq1@sPg@}oO_KMgVH~rYPu31gGcwnhr!OG8z#H;7Rsxxp)D#H$ol zVvsb}qA_)MQCfcrHzqak;#BSO2LhrrImVjhFY$81Av~#pPUCEeJ5aYkgKd!4Pl8QU zj>yzbzlAP2QLQ`?f58W3Dp~u+fM7EB12Pm>0H69~p)Gm+9CnF-t)_T2Y#0uTpc+09 zVh%YqA&(~Go6eV3Q*y|zE`Up4bXc`0h-J)SRAK8SWBAMPyg=o1Y`uPo-@ z-g)k|Q;i*(}DuibQiHJ?*iV}p#Ik=*&Ep=<^FrVBU>X_lxWcINn6QQ73{E15Bw`@TK< zY&r7Z`V>Utvg_%Sc>6}f$bfpBm%&o80&5lrgt~L2{9g3knJ>3hN3Xs@!rBbkk<}RZ zhb?;0BqcVZ9B1}n+@eZa}L^TNsDK%bENOVG7ZzBX^^%FQX%ji-GAj3|e9 z1hP_!Vll25nyg=kO>339;+1?9ZKM}l-mz-7Ol}dKL!i+wjS8KkGY5d(?B3zDXQHf^TzMXIGU5jEv7rNMU zw2_gvn!Wg9#*N`C-@G09{ETsAs_G;x?DlThf#;dIR+SkW?t!n!_DufN#H4b@CU7Cj z6>`=3i3p8WksgI)$|>LHY2HAs=a;Xt{2W#FCC1m@^@q|uo+;#yU!j|~fLRr^w@awz zOR@kK3vX|yoQ?qLOD%hor=pfe6=^4$T1gY9rJw+eH=%2 zq7~C^l9&)Ut-3j0iHH@>a^z{wleb|nk}q1n#!_XeB=_<4z80Q3Fyr?0j1Qu@d|q^` z2?rzR0oYhquiQ#WU2{nCvNcwnGx{yY(H8m*;rECuGMr^?7x!yR#_%QW0jlWeLfoa46M;MV#y1fHb z*VGy@vD@0u;HKz#5)N2LyVu7z>ms4THoO;|pXlz>y!v9T>%!eL96TX^m!Cf-CN)>w zU-MG7z)VS@Am<|qgs06Ym2eBbBi(dmpL2+5P}_eolPFlYGzgO59sm|QO7by*iPha2 z9KG~@Df!iuH{Ha=g-3LoeWlSe+a#$`FuOUZ!IL6@Q^6Q6%`i_gKooTU)ixi>{#$NA?rh;3p9G8DaCCfr zpL{p;F6R@V2=~-jNen1rwk_f%{HP;pE*YIojy*T-euLe-N%5d5scPsV#N`|V^7iq! z#=Cj*X%@hJ=>@?xdI<~BC&uCBx=hfb5z2A9=Ii?~^tzhp4z+x+mQUU=$(gP4_XV&H&+RNv4_a$`wa?xm(`T~tRxen9Ar zzB45lFT`I0d2fns_0WA-Dglw%Jlvau=Zfsou#C}SP(p7MN=S2Ln;3DI!6iew7&zq5 z$MyLnuaV^7^)yU>O=XnCEB;6?gSVXrJ5Hvv^3Bf+NTIbx7^!!@Py$d)zD-GI-}F3? z3*KgEu5eyp0dQ;Z`>UW7JP`C{Pyo}0=}ewv$o2&`Kik)krvVQi%|y8SdEB&n01dL1 z*w8f{P)tvZM-UCEwH%WAAX?ti#pYG=+vU`9OZ-SjpuB9FcvWbcXZp5;d+nohU00QW z{pdCazpLye9$l>!2uFMDXGF<(n`2H|d6FqThC&b<>dy{Eq7Fw{w+a>>+M_A}rI#){7!_9^lJ+Cl|*XA3uH+hv%s{ z2Jl?U?P_m@EqtJ0ub?lxFto@AC(58_&LyvRv<2iu;g326r;k+QeG%{0819BU)WPy( zpcOCLG>Ge4tNIIa=Pafwg}zS`j8s?W1u*0l6D6?WP{beWer8!roNctyf%I2A?icH+ z%7Rx2CZ#URK$+nR`(DH5O2+23VR^wSfjnVI*IO6A{uV&@2FGGGyhmzE>nNWPvqV|Q z;~vbAlT$526_zHMK^tA5C}kmPmLITfvu-g?Y9HubywwzJq^w;2bXUdJilg^w? zWa4XfWnl4|QjUF~OYzoNyayT-Oo#imXZ4|5$$RwMp3or796MBz%l^n$YfBU6tJ!Py zOlB-7P{M-OvD~E9L!v_V6_VRU39=T;bU0TQ`6J7k{J5O2RcyAd;B5r^T%Qb28hlsO zJKEyvcxr!i1E?%Wf<3ahkvv)rbW?m2~( zS#6L`D2DCcC_?}K$v8`K1FQYP#`1^yO)q;i+d+=}8Qa`c$_u0i{qF73&lr!F+xk<(n2>w6aw9 z-4VVhH!&Kkd4~77-BQ2Xr7G{LluJ$-O%mJqkIDx&~7WqZ1 z%Fw1(0Wvq&Q%&2kX|WTum{lvdzi;Tut&n0VYR48Jmr(0ztuHFCrJK`rF1%*)dEdbJ zt`+6-dl?|%X!Eps6gI3Vi?dqU*$>%vYr!|#4c^rZf*eh-2yfRc1|RfGNex_QP>(s= ztZz!V7(9GDOrIFgt)YC}w4PtF@2+U6p|!F)9sa=nwN2`+-h@(^!!yXBA`QIPSpEIt zE0LQ@Acfnun`UCgQil}7`L?F*ja8KO%L0gqPnDUvCd!AR;bcVulvG8R6jXj6@Qn>e zuj`K)=FWLWyfRu7-}^+CMR06q9>d%I>Ep_}6fw;bfCjxXigw=!I^Bq3PR-JO%MnDc z_5Q+c=BCiFMq<~2wJEDg`8Uzj)BHp}r>*KsAp9j9lT zCt9xFr)6L@>FP`1+Qy6Ww8LZV<8=*7RNYb;IeW~HZf-~o)Gd(-Mr6)%qHsUG^_E`c zF#`SSfTX!m;C9LB02U{vsqy9^ky4W6W=UJ?-TbNE=OaC3Ck5+HoWey{bF;a=WhNrU zwkp(ZagTXAL(@FIxn^0`oWIJxG|4v^x|4I3 z(8trzaTqXMV?fjYVdv~L1TK!b^I368^+;$WqR~w;(2>nEIr($@-p5(OX&Nb;Gbtg7 zPe2fIPUrE>-g*wGy$2R#q<>$t7dpp>_K@n>#4+32xJVyzs9cggD~cu?xJ+7S*Q^Ti zY7?INQe79A8#^+5f|~>5nVC7X%}Gx5RM3cD*O-CvBR}K?+g=)HoR1>fDHg1F*@ zs;J#*4r9JXM@s()ME;ptxhQk(&g@~1(1VVE({AJEr|OAnIb@u~lp~gxx>Tdtf!`S& z9NSmNfk3EpRi^;p`z-Kvv`o)%sf&{@P5HFFzHW`}l21tmBmndmb4zL~vv%tn&afFp zJj#o!eMBBj!4|w;hffqNEj*d{c3!y-TsbY!FOKZMn(>G!Dbh1SVNe@|nu#2=`c|L6 zEH{mW)#fz9f?~LREeGIRdvTHljWCn9-1%}#!W`}RHYDAMM3mzUUibDJfP)+@ZJ z;mf`?QwpDnPoHd4y+XQ0$IKg{)Sdmg7}fZ)s^hNu8l&YWRT6z);S(byb7={>@Jo+%9pzfxa_^?urkkgR9+$5*23u^u`#O<_&8Yu^T~w}x&EcifZ55$q?~^Ht8tAniuh z`IYpn<}BmcQO?)lQ-xu>Upwh+DC*Vgij79B`P3QDkO9Q3e2CS+^Q5HquH)Lu3wQ*qsqC?I?Vp^LZUDzGN8N$z&PSzug^YxSa>Rv z8=%tSIdf19v(p!>nUC4G%<4UQrI*|TlfmTNLsjJS_2H|UeN0baRdq+-=RQqOWEb`B z+6#{$Y3D~2veXHwE1d)l$f}G5iV~_Ax2HY3tlqr=N%t+U_^!pbze(Pp6&o1hnm=gQ z`Ix-E^bIQ5G=98cdCoA!46g?;qcWxPwv-v?Qg=Qz)t$LzFtbziKk74M_qtizgCepNYFF}H3t z*%<=dY~&}VMVf`ST`U@h0iGOBCFU(DlT+8YbUxtk)(mPWi)`E- zCWt9w%qc^7M{BGl3n2#AQr8i6}ug6FVJiz_LrFhKSUJT@z`i)L&2w(S*Uxc%u4 zn`JK3fy5Pr2qfV!-mVSuu8u*^R8MGvo6_>>*w zX3_A{r&z}-*~Ero>d69Zc^0S97o%78Yu#-vLhPk2w<>RH*P9mjOQEgy4IZK3G^>n{ z(fs-{kb~|!MH9AqQV;ot&zs}=%Ew|d_m4(Yv^Cqb_zqA-!4D|~#`SQQ%_HZUh3C%? z%IX&#syOdLfSBNcJ1yYp^mw;qS`W(odp|i27Zx)s#GN3+hxEoYj>E`$vG}gNtDQ*O zPN)hn5f7lhqmy&lmpxDb9%7Gipvn zN_F{U)c|w&TUmr9t8k8}b)wyJvb{Bp0!t?lVh66U(Dvx0Z76*1X-x?rb-71kc;oFj z{WPo6tuu^@sszqrnquhSXHf|vy$CLTB)z&w{h8ux21MH_+i-}Iv0c6trP70R^}r6X zS&~%+-#z&KZ!FCI?cFm%dzqWnasUcTYv)_KMhXNQxul|bcTd^y?VcGI)&uvlLQW4> zu=U11U)m*)_Mf)VUl6Yr*r4iNpVT+}?p&fOrcF*F!ot_Y4-)%R4r?RWRvF$21Z-Xb zwE#C^OH5jV2jZTdvE&cZeZG>MN1?;Oqk4JBtWsq7{g|E2K;=VWLpb?rfe!+-O$J=F z{qV9^9JeB^AN5T~hdRfhoq-RlqPRt5xiG6qX}6PD!zT`wXQC7qtZn5q#sbJE)RkT|rTBuEdt@LW2;bFihZ!)S7)Y;!!cAkYzwSFuHMh%3JH8A@4+@ zXv~J55T}Ccz5h%91b@dQGw5fR)VsW6@jh@(;KtxoUG6YHOKeqrqh+tLfZw(C7pYl- z*9`ZhwN#`w)7LBC>zV`*%l32cQCsGpN$2covr)t#UK5TkkyT0Lq>U0`jBIuDIj-dU zetzM2w&(l*u=kc>QEuV;sEnjY3BpEF0qKww5Ew+IyBq255Re!Uun1{}lo+IY=ukv* z0O?N2p(Le-^NxG#*8TJU<$O5jy3YB1&*ICUwS&@zICUUAV@M;1&Fyyz=qPInRP8d9pq_dF>EYc zzc9J>EhsNV)S4N6AU;Sk8o4&~=CC%s3_Eptg3H#lWvk3}lrdJFr+YZ3+J^R=uC1!? zQ9;8Zs$ziY;Ec~cnej?&-b|}0PG89ia?EbMo$QO7Ahl7STk?4Pw} zO9MR?k=DmrOX(^5Sgl~_cO$*nx`?JGlXM#n` zQN^dm0k{#oex`KAd4>FWO|Kv*9L8Se33TRWv*j|;Rpa@WM6Msa<3kkQw6u`*y-FvK zFnn4#29Tvbu+H~Zw{24$iUOpzh0q{yB;FWjl4iit#!DyBy<3Ca)0z_eer{?-^Ox)p zD9IokIXB}U;_zP6Smth#qX0<9cRe$)lU&|{(SAMk~@>S zvf3dPL1$03LcYmuP*ZvckYibHVkxeY=@YSSkaHJ5jOSh8c?Md)6I6lXODKLT^xqnN0UXqUbfh-?s=l3ykfl^FL5fr z!d8=iDbcuk;7ZS?X}&h|w8Gt`)6CIF=NZs~#e(>f(T9tfqmt(>$?PRf9hO))d-T0q z_r_j^vywOy=FZPd>25Ng7o=C4cc=b9^-G0vBG@Xt|g_k;1_k2!L|Y% zMuc0*@rdjpvn@?c6cWo@$xp;j*GO2<|x$q#jbj{;d$%kmhSvG*E&L;8;{cszFhl4t4g$hB!8#H!}61(&F=eHa=7 zxLz@)H>#IlbbN7c4@H=FI7A=5@>~y4nL6ju<=l)NZ{>OWvEIrNoMfo6YVqh(=NTv6X*Ig;*b+3Qca)q;H9 zlqQ&3LQtfBlhT2d_!JEZe>>xy8}v#v+PLNMzO0>=ibJO~LziS%l)e^56Ay9=XFBKLVPz|1oWz4t-msC^NMs6T}@b;F1-pX_X0c8B)hK(0zWS-xy? zRP@o#S-3C z65aM?oEHEo#@c>QbGXE6!%>;{!5;_ zu~PFhax;T`mCix)xtSjmk4cg8{xIkU1qSWCT0;7Mps{rKl64He*`I07hb0m!#r@NI zucGk^^#+5HL&Jbw+klZLrpjfw&H-e0_v#0dwR+Xs33)VIHgpksQ~=L`P-Ha&Tw)2( zor)1J<9IKClN+KYfQf-Kd)(_4r0>*Nbv?Lyb50i4tvDS%k$q7;Ce+CKWMVK)kZEz(bwE?w@H$p|akG(=GMsGsIlF>{ zZg39$+vcGvrg9hn z_L0n4MRZk7Aa6q>b?H!RJWPQ|Ff~r2EWH{aP=o^NqX6XL$+~*_I$f8;39zcXf?odf zfIT;>M&W~z0s3#<6a<1d>O7SI0Rj5{*h@rdil3bUCO_}lobJfm_r`G^U)GMY(b0J- z*sXy`-OuyoXv|>~Iz}reQ*6e)x^yI6`$=?0UkF8TJm?XhtmjZ7=vQRZ<}NlEUyg=# z0r*MZcWAO&&9r%pqF&nIb}*XnziRE-DO~5*w-&MK@9Dxkxm-K#IVphI>j@N&28;F24=n)@eB9!i zg_kV!u$D34go4<82V6WimY5f0HY>n%*OHhR*F6cSjYti5{nWi-N&0%Uagq$J8>_Ac z4C^-yrJ13*{@8tDxSo6C+yaX>xF9jWDL$LEP?pSu2LvZIy2f9D)+SkAfhwN(z?_B) zbt{5WJty*RK7ox2jp~;ajU^jvcJH?mNl*if3L$xg$%2w5kteG++v-HFrS9;lQ&8(q ze;y|Tbj?JV02j^u$YOj0bnl6!L2<3-8gGy!AZDGAzk9Ikcrj zD7L~iU?1i+Bti+m9|)EPJmaZ!k@ZRI$fSX3#cBb?NkY4F29gFUg@ZV`Tx}iTL<|6G z%AkGY$pP=*SZuTzUhn+J45!CERbxK&55$a0O(c2l-J{lEi$iN#^*;!^*YWY=gHqR} zt_-~*Y<8_eTmU(-)MI4+f^SMG5>6rkFegiRilD{(sXU0_tBG%@I>_%?TOTdkP4H`OtHvEBk6_LD2N9SdDV@wHn4Tq1Hs$4 z&j`c8y4#o3-Td)(=8|g5T8%9nWq4TF0XdPp@Mpfn8|@XdQ3tzn2kro&a9*K&$S3u_ z6jax<1p}uh-m~nZT=ig%!^ggLbt(2b4JWO9Nfjx4Cm9sXt_#)p)fI*=|?&SFCn}I-j;*OhuC%N6VP6Wj9XzvZq zPf4+b`MS0A>aQHStKaw6nx}-l zs?&7|T^|T>$+qGCRyBz5pP}0vlTMnshBl6z1YjJD4K&6&5d@TydnsJKOA?rGd&2op zY;ICPlDaq1LI#Xe!6p-Z{;eaeOL{R1NS`GO&T=K`hb50~8>>#B7SkyQ*LV4RwUV?H zm=#{JTpr2GUjq#~?pCZ%MEg(EIZ#T!O(R8@*WVK=h6WY?M$Nti8f50lW~+1#Pz^R; zPd|Z)k1%aiOeQUl3|DSB+`kq`z0g{0u#;E_H>iQg$Z9Udf|GHs= zxMxL0ak1^^W8Dh_I(DX2cEcVFNM-Kq@+G|600mf>zNJ7x_%B9<4I&I9i*=$S@}h+j zy_R{ETC@-aRlt$0D$v$~qOi*a+9h23uX)2Wjha&cwohVZz=vm^FxHzA1yTpsy&om< z5G3X|uUl1r)75m41;iHMud`J8@BoIoHH(AQc>i5dH1r=P1K5)_Xt8pE6de)FUjH{D z999_Tof#7qulR@S+frB-zV$z-Hs1VH*XNjyX1iObX>(J3M~we~!vA7F6)k}2-zBoU z|7Ri7475T4pgHr0CxMs5#U-k@3=zfUVDvC{ag|6M@IPdayFk7_m@09R-~8}e zV5kIjSTL<~G>*6i(DQo+tWEI$tcoy;yR&XF+mA-O|I*ATNswcx>{Ml?m3iBw6&nA3 z2~&-}<@Ns`)fb3a^|J2j#ut5Ux$)=A z;=tt*<{ke3gY+vWS|~(-RtF%O{K2F8nSskEm}!>3@q~WfTK*7lC-|q!cK_3==*j^a z8$ZN-c{oAU>l*;b-$wI8Co#(nNF2L%9aoVn9^4O5&RjnwHUX2PgD*{7KauXM;5@jT z8F7a=r1 zFDl>Z%;s(udVVDAdD2+*UPC|U4z7863wZj0zmP>hp;}cGSU11M=FdXw^aW_)4iEEE zKoZ~jp-B#*R>82A#a(R30LjkQ3)?l3^l8Gyl5$Z&oe^ok4K?P&{5$jtvnSZXB>|Bd zHV@K*aiQz@z=0b(;?s9oeQ*LUk64{NeIB3$vWiw|>?0Wj@&-J37-#*Afp-BR;lG0{ zDU1Af+EtVXXpy)7bau6H@|7R4Oh}-Ya?SYVyh?cnPQ2I1cS3@k_-@1?i<^Lg(zk*c zqLU|$FXXn9GqC^+6gbC`)1O7VbwtywK(-1Y)5VBZn*dloR}=jTEEd;?3xXjSn}B|v z5C-RKF|REH9LX1W)vfRnv{+i3@}e$Uu*gs2mV`NH?(vaiK-hBZd^OZdv7}7=m6s6X z7pvYe0KJ_6nYrwR%s>6B>{<|@61Y)4oGu8WicayxGh5A#aUFUz|`lYLG}i<+!6yyN0_$y zr@q6JF+^`&T`2F&xnttW$?C~exCnEBS&dQPtYXX?ws{wj1rxP<-Bm~svCdonCnb(# z+4}C6LFx>1)A;j^cdGR67Dxl_5(CLs9RuxJ@2;tBCWs@`FUjY0YEZWqnT9opYt@gH z7ZeP%iB#ytA7{%sd-ppXe%cHf|Qf?+a>rM zw3;`q)m)RY#Jvh-0@klraYFZ#!GvdVmN87SY3ZrhMN-v?>qH?&eDYGEMQ@g*q@>=D zjp;m2=<1)H3BjkROLD`}Nw2^D1n*eak6n=hs+35sie0E~29ttKe-WZ&7X!a@@E1~i zl>e+fNmc8EWNtSx3ogV3*Y@=ohsH0C#u=@rL@lC50#TVWwF5bBf1l~xu*;>#A{LG zT7H}G2WN!~^N!kSkdq%k`rC&TjoUme4TCTSw+Oz1!n zEmspv(2EpJ3;4q-Aq34 z4H4)ymJb&%`8TO?06ORZ@jD&m_T`==^@={XzWxi1?@FBK%J6firw$0Hz=?iSf2H2O zI7N2AbtDcdpFUVtXo4Y1Dj)}EjghshLcL8y2>9|)els1r;$ZA!I|Ydmwu4RT$z{or z#5bmzMNZmda5_+Pp6aMTF4DgRP)<}g(}7mJT-cE3GjS&a;<22`Py}@sd!pj8GawjY zTEdfRV@SoSa@5rizzG;p`Bxbf=~}g08?`^~EtI^ZWf_bUw)J_p_H6C!WJC}b^NK9^ zeVM*O72*{g+ZXVc9Cf}uQx;G3GAZ#{%X6A$9gJt_u_=&zTQ~#|Vx)tN3HX;Cm@o!3 zvNX2c020@0+`$W%0nJRG*U~*A=LD*AEr{|mMiAr!$xexjztDBZC%%I>K^Bekaz#Mg z4ZyvsUs16CvRzf$#!v+l)W(ouSKk!4!-h;P_GU~6g3~dzP~lb}AYgb|=bZJ%$xS<- z4t@jcW(muFHcTHm@F=_(c z5Gm6H%$-wh2)Hw*>sCohNx0MArb~2Di)z8Rs4RZf5S}E>DVDV$a?yb6Fv@)~D38tk&^A%h476Q;NjHBeUOtDgC zs5rRZ1CX4+_~#779aI?ApCXN_EA39W>S0IK;u?D+L>msWfLi1=BAmVZ8DKykcT`sG zi&gGRk0&8{P2k!A_qS`$07cLS0JM#|Gk8T>0h^deF@dI)#EDDR;MfA5s>Uy zwqFYL4F~bvq1XNBNAh#nf#@M}bFMf&l+!NOBPgmI7!azstI{)SgWl^=BivMgo;jcu z1f=0lD^{B`=*5^b9+vb0eCi*Gs7m7meTVuE_mFNAeOplL$Y~DjTY;J}_W9;LRDSar zU%yW<9k1_g1?@yF#Xi1aaS+6a^siFvLx4>{m~3nOVH;LO{msi3lZ;+p8aK8m_}NuJ znEnCgqrwt-g;pGu$QJiI|stNDOLF#~BpZ%5oyI3G%795Bq5{9yps{_(vkV;$wdxD~O z$R~Q?14_ksSD^>r3Ji!IJBGI#FL|!kIeyC+eonV8qQzz(e98YEfehIinv@*jtoj$| zqHo5pMOqa`L>+MZ#s0O@%U9SuLvZ1wac!Q=I;Ck?*Ol9fP2RhD-PqsS9w*$e5^eGE zTGu5J!+$?Ryz%noyTB{tFX=&@XX#eF6$*m&$%^Im_l z$oRsPbZuHJ;~T6keFcw#RHsk9NmX(D3BNv;Nw_2tHozn+ng@ItLjK_k5nTGfOQ8S! zhs8}Sq@ty^(`p&`pDTa=n*Ck=kTL%ckK&Rw0S5Ze{OL6@1|~81((nJ#W1*!F=~c0Q z|MT~|GIp?VW3QtGET8?UOjdMtF<&(b7@f>UntXmABnj{ z#(*9WWKn<{gX$8m{?^4%PT|$=E|cvFOldc63FzG&)q?_ zpRQv5I$Q?mOX-!U(ruDRb5m}iI|Xt^HpVDfEiwPO8u!v;F^gt%@@!MYi$M&$(IRDGuR$UL ze^lYe4QN-rhRf))v8!I7oWTLP@pu3IXJBA4m+A+RAS!puF-2MbTMoSiMBJ)(O?6p> zVhtnr1(M6Ft+uG{W8=v*l~0dsEeYE#pevIo?%sRPYEdxt^+m6xR=Uq}1oq{C>GX26JOJK<*uju<86;>)4u>=$pMqq}owOHpB+`j*^49ir|) znr*r%KH8kSaEi8c;l;LnevA97X^6q}P2gs}m5q&&j&z!KO6ulE3u>d+wJ&f}v%QkS zll;x9tFMik6QSQl0x78+CRnI^+7Pc;>I$-ef$#s`BQk9L+poQwJq(Xb+uuybXeoH) zB9%UiB2XgdFxtKxAKU}9r&;3K=e9S|tbDWOL}q%w*kn+#yu$cAW2=&B;(%&+D)g3Op7h9X5Sgcf02k)I}&DbY2&4QaL&J*?mm z6f3~;#R+LR;EghQf%eybrzhg;V_W;R(sz3sE_kbZ{Na{IOwVn;BVw<5)Rr&`XXayjmno8P<7Sx zD&!+3G{1EXiz@_W)iVuNs<_=W_J%5s}$%A%~bn55xEA$`wR{jX$iPY|3_YtIk^E<-QHWS!ubz9YWj)pV0R*&qpkYAp3e%dK%w^Nr6LQQC#pm0%j&+&WiK64ueVwfcqT;Y0 ze$K(_;h+f+VyID-~`MrQ;o3) zmmod(fFg6l9jjlbAjlc{YTk6Sq1%3uHOkosIY6rloS}0)55ex_kkMrJ7?Nfs8mmpU zpD`n#bU8no5yy|x)s5m96VTktIT?|c4;amufK87^N%~FrKq~e74CHBj9g<$xdcD<& z+7N79?3t)AGmYtu)G8q=^SD3R=svwnQ|=zQ?9@x|3o>nM+yA>GVVOIv^ay$^Q}JU^Gux%p-l zUtG&2eCSP2d`gGq-EUF%{5Js&_A*oJ`c)nOT@^ zU}h5D&QtHf8JC_g+95#18Eu0{+kIAL86H75)zI5FBiY$}rsSo3Sg=vpJ-Vn-tu&i` zOcs!iCB{+uwW)b}tS!VRP|V*>G6oecb~h5~l;Ky>Z;&;t}}Z^uql-AK5hVS}-X2v|(+SdJHau!{x7EJpH?*rq;I0cu$Wd1S!n;WVrAaf2mYs*X zjgz;jvYtem=~0bnWzr`N>$m2?>)``$OoPqITgD{a)Pv2}R@Ix}kG(#N!H!?t`zsKu z>%&^d&ZEmnZY0V%jWXW}vM0(=|%I_pqt_bjO1AVDxN&}1HLa8)P~G*DJN$d5T> zn$X#e8>1hmE^_pW_KQB_Ib5!7(V7Ur4-Ji(R@5Qqk|{OHSt92lTtRqDim$fY5DrLq zge1yksDkCWY%vTKLVsIoQC`QToqXkWEjicL!<@w^{2q&&0r%ag(p(1YNd*6bVv~g1 zmfYGqj1oJg4YoMx1Ye9w!aMJ|@t+&IscF}09O)a1T25H8Hwg9)x8IFn(x%4O;Ad{b z?zFTq8-a;EN`7H3`Ij$$87i3|I=x68z+@gxq`nr!(JnVXrP>o}#tPD7wkv&edSf!J zk;_90;c4JDSgLY4>)hjXXN!c*X=A;_r^OJu$wV7p*ho8b!}y9^#+_MyECFZi;NP5` zU#(@i37Rs(DGC=G z+XmSCx#Oh0zII_Bx9bG<&{j8SuJBcuJLo3Ah-TP|$n=w|Y=*d=>I>atP7)Kbigfj- zT&a<;NkS-J7hTa%Ip{;7kU>F-ISAFGY|GYfa(iruKAV|GZkc4CX*^#)<`_6jwZ#9h z0TUJ+XLvT!OvUd7gl}=K;j?H<`4wyUxuDeq6uRAS&&~EtwL($kLIQCv&@NBzT(4F^ z;}p|3nSC@;96o-CWy5KR*Gm#Ren|B`v{|95ap&>r`X_z_`SWt5*?Flbs&{lMHZcT? zL%H9+bL)h6l%4=z3tIM++ugpTU!(x*R(~v!A>?Z6<6mYpU_uEeFO`@{V7$A2i&KK* zeNzf|v5r@o;xi}7&>EXlMLQ?KljU~X?OvW_-;IuD&Zu@{ zJ*#Kfog058C-h8|nmaWrBvR)prh7C^iqE4yif(LACG)2*XdkO2To&j%s5YbUq=->m zaEu&nlRq3$pKP{CNjGj5(Zt{%LnyN80d=7l+qp@IeU=ei=QdF4k?GtkYa`gVlORDH=%X*>90uz6&I z5$sqPfjkNEtWFp%^T+Old*KSYk0%}mwc7V6+X}WjPbdf#51g6Q@U(eQIraDXdYp?Q zluz3yjzx}>T*gE&hQ~|5+ZYk?Ld&e`3t@souiJA&S;O6d4kTdDgaJ zle2%;_gfyCc}TwBw3`<4xg{Yk)$26Ui12XI&?><;)fozi$#{+x3VtJ>p)lh1(B8Z; zqx85@1Nki2+_QroF*_j_8jY3p$#&*`1=c&I0cu8H#%hPsxAOQAhFeY&S@QLR-9aKF z()fD1by9n2GkVk9pcgM=m*3KY#Dm!>z23A|4gtjf*-0xnue!;nE*(Lm2 z4oeBCh22}w&BVQPUi=jCFD1$8oApDp@DK;5btfUXn5aDg!t1y_`Jpj_{G9+1ezdNL z%wGJA-nwzg5dKh3Yl-sShcerKEF>u zmCsuad`8syk0RVWU!5ro*keSMEN=8I-NOIKs8EdbITb&ktF9#QEi5U6&mKB{iCkepu?(zM{*vd@^G?S3-QD+3xrPqJ`1N-LpL)&A`zLXkms-}VbIKf! zWf^{?;!keI$`>E7UvlHe>4XOl#U66>lQZJ;PmFQu@|@fPB(ViY?BDZ>2C&&E7Mc5% zxrZ&c9Nj6&KI|^5t6{FBskeRKD$!0>Tr%nDS12J_r=zWfMFn^nuwR`wkbm@BY#t}k z$;%afu*VLaY!_ad&^wG>PUXL#whB-p7Z!2QDUYz}@0x5(#r{+*Y(u~;L#`iCv1RvU zFT!I;_S`{CMw-BuJDyXQ9&wnP=&4+0q{4|C?e`9ge5cesW|@M&*@=o$M!U^sPaIeq z*o1FmC>n1C0A4bS(&j`mi%5huDw~1YS?l6 zFOWiEcr7-U!p zXubWR1;B(kGaNIK%0+Jet}!*=k()!tY>$21P|9)Iu(o>m;KyLT72ZAU(UT)zgrCGYW( ztuVZpfpTKW>q{8yf%RX=PKLrq2M1+gmVsU*1B{B?Tyjs1cX;e z7!0vDyfJBH-5eLF5=DBBPy+_Pd)nlqw^sp0aHkcKGb=EM9NHHm&@j!UklHeiA1xy2ebY*9>GF3KG*l|JePGO$OC?V_fGiN#zdZSM|G{F3 z;d^FFig-_V`1n{G^(H;|Fs_;Jsn^g$JsQQntNlLynVE;eqASBg&HA?E;Y1rxsJCyTMJ&VT7J57*9_(CS{ zZ#!KTA>dc|PvMULM=uduyZvhN_hy>q}OgkTO_Po?myuYzoFFUhu)5Pe$GrdUtsW%%_wYA z6_3^7K#C*6+SWFlDmOe3B#6$fZ$r~x)n(62<$jGxKpsPltQ7qIGjw(rsqf4Y8DxHo z&vC=QqA6$qRigmiD2g8x*MA%HRn&D;*02$*gJVcHmMi$lJkngRw5PmC|3;0&q_vpn zr-&-S!lKaV4^8(LmmQA;HA*1oI#EHQ)f~=bzI>fCk~xgsPa=Ib z^A0#W%+_)y9=d1xOjg#z7IN_PtR)LGn!m1RXW7@yKF2!YpeIj0v3u_eE#f9Y5ahrr zy@CX7H}&V(1O*>s6qZ3blgu{!oupS^VSU<|(5ox(BsnTTybzq7b!*@RcpU~AAL=ZL^_4VTMvN5ofXuYo*C+0fKd2DAp|mB$ z#Gdk&U{pRYblQOoQ)WXXl~%-7&w6^xpu9OoUSN`OkI2@MMRDi~3BvO=6aKyF&7xuK zptRl5=KdwjfN4|*5l;7pj;NQ)AyKmtj9feHM$`RK(J;8s=mGthImLcwf0OZjq@NU0 z(Pmrm;tBqi$Pl>|UV{s7b4|8dVkO+Oq<^%|3%RZ#O_FV)vk-7jH*55H_i zNS@Lv#flHn95$Y6W?mtPOW@alod3GN11!Oc_q3$y7IX!sA==KSSYI@G-EYLUjG{;h&+ZK+p;PuN4H(pOSdCpZd+h+s66Hw^Qj)>oIthJcY z+oY&xV3*-@UlI+-V%^kjVX)pNH>|GjxNR-i{SeAIXP-B43jNkSQO90Wze;OpoKllt zz4Epn_4uuamYcqb?`E3cBTxAO1Q2({g(Ow($qs+4$BkuzKSrkj|8*4=4G^EB(S@Rm ze6PKAzaYs4NkH-a(h3Tj*$u2L=>BRF`k6UZUNPScn{1nd@{BAN#qfFuF6m?tneo>B(Oe?h~#??=Uzv~jX?Ffl_=*&1bg!{3i>GI8{^wV;N-iQ~W_A%ck8_bj&$~bOZswn5=H?g$YA{zc&ZJNfLopp8m zZ7Q|*($np)-47h<7Mkw(6>T-YkqZ-by>?SI0z8jDHl1W9kRJ6xg|1&j+D6H}-QtSk zP?4INR}ANGrCx$$QoM85iYsKH%&aDBo8ctO5eBkYPBUfgM*8HO1&zV>Au|u*w{9?2 zq((N?^#K0Ds3hp!-23KH6vrJBUt-{tuAadKwyY6kPFj^F)|3pVPl7XHb}2x@V@)>i8`sshCr*!FCS106*Q-K%GqS$&VLWqcee&+-s@k%`op>)RWw|S1~YMjazPQ zm$@yr9Zt}O({8Pd`5|T^F4XhK5d**FG=S78Db_|Pw(nj>j;KK7sJ)wHmCU-=rv?%c z!{MT&d)`$@6e=~@=ZraKCBp#|4X`+k1SPMOD5lU#WLxCg^p5pC*kXB=r9|@EDC`dc zg{{?YZaT(az`To>FKlTGg^>ZRjecg;lLn(@(kZ;r`(Jyh@S-iA#XlnH(1v(Vd~I%b zp8=Vj+K6koeF`%7RN7+U!}|RwDT)eoC^X><-Q*1XIzY{Nmb)ycRVMw+)HKIvj;Y z=IBhKo~OJ$c0ddYG-r*2Y$#>VrF--XU~#8!Q6x42HL#ntvxS9Qr3b#%u@|wSpR7T^ z>7sJW?ez<#y&-!v!9%c0nBq4(L>bI^OgEbCvdJEy-uZGmd!}0^PjVFH&D!kw%6H1u zXE{_`3Z5;nv5IX?Q;k-b&;h4byV5Po1jsKdy>*ohkY!q^(9o3Xo+?!K*C>Z}3x54M zUWfO~jBd$EPWGP4wp69kY0yauQU50nZU~fIKs4z>u(B)Ui|^pU@mlm5e{G`>l2me8 z5U26iBU%hhJ&n0*VyDgIoFB+! z0f&zKrUPWZStzi@7IIwYle4TSKr~?Q7I~gu`!=>%wCjcl(J8PHg6KdR2xH^gB0>T0 z`z^JeLiTRJNEa2nT*U80)pZz_H|FYsT zi&jo7Oj~KUn1cELg4M#pMlW+exE`T?jGWKh@QkbYxwomMFAc-)#P+5sn|;-A;aNaJ zkg*2cYa(x8iD;nDu~TsI_eGo;tU62i0dTV@V)QBljc&-uz?x$2o6@zFI~nD0+Ou78+VcC;{y`1`e(jUl<4knDFuOyrM zj^$d2?U;&sxJ$y>s(+5xS^DSz1|N{vY|gCwG3$A=%w27I3_&R`U+k75-6?;(!`d67 zMRTo3dE{g9cq%HwfKy_)XCQDqX)AzjkocM1Q)2+8H}jg|pNeFtU{ZUTzP%da@-uMg zUe~#4$mb?*B}R~F$h{eGGUd0h(aP%<@v&%EB=@7>#y_Yw2#CTt_o@?vyy#@A1DD}_kSJ&q_z1#YH654Y*FlyAwNy1_`_WZ^_5300)L?DGtE}g>S z{15yBYEMHQCD?OzUstZ}LiyggYFbMa{3zlQ2oG~gTG}hNeChH>)^W|t)|V?Mluptk z!qeZ)#t8vEyBRyjPsz^Jt<%kq21kB3!k1uhxLZPONAHP5M&HYtKDpDlKG9%DlrUYL z65Wr)AjE*wnXtk3#o-#OgzvOlI<+wPf?=0s`Y+gpsbCCnJ>?4jDH|l?w5vZLt94uR*pYgMv^iqI8oE5U5HMLn@u@fJ&oA;SQ z#lP=W#hCG-%rW@^VRDrP2b<$qM{PXzvv{%@uu;3!uBKK|&-X19t9D5Fx2Izo$bHCogv>1Y}0?dowt6w6u6zj;F`ykg*kLxZOVn0N+4=EDPh! z?H^;;5482ALMXv@MSvhWj@kM^jMd{7X7{z#UvP>5rgfRcj+X`pjs62(1g^uHVr`w2 zsZvn7##o{5$Uf{CcRKX0cuibl^Jmb+C94MOx)7y*{s-_0R>I>z-czEs$_hRG0*@(= zo1&cMArtu58*bce;Z6*1$z=PduI5TDex^f4BHZJA1ZnR*0*JLwgino+G=n|ze(5PN z1JE7;(5w7^8W=?h1Rb~0Yq=*3eqUURuzO22kee{4rj!}5nCCCp(>c5v<&0A6mf?a#!(T8U5D4^ zr{~Csku@>79QU?35!hgK_$$$_=(SR!e_ViXC^X6Y063fuf)x|OGeo@XkkT7kxjw;klvEA+*sGSrJlTe|tN{{`>o(*Jk z{(hq4WsBEl@6aA2QFQHApBh6LDPwon^?AmhzT%I6?|9Hpgl_ygUXZyU+#yG*`ppY$ z*$j?1SC@X+TNUHzg?jz-ngqco*Q7)DLc6i!-u>G@CZGtuGRfyR^4xP@b3|%Kf_3j* z@A~0-_@E;0&$H$tOk!`?k3^)3eOYX1Jpb`Aw4=@8-wke892vg2jpdR;Sgz0;p$%|p ze|bR`diCJ@axrbDMK)e8$xZ9B$5{9;zW%!9<)DYk{z5 zpL>7$Jx~GHKz-+kj1R4Lv9rI>VSBd6*e^&*@asUnFUw9KN>O!tR)yG)-HBv23x$BNF{y^lNEpevc0azb_Di%Dbb!P+8%`5wSK8d`2J z1&kPLpt7r50V;@?ex4O$zAe@hH(OsUew5L98ePdN z`Xlf{uHx3j064zPGpTMWFw_j71G_*9uRP+%HSnt=xIz z-Q!0mD?rj;)AUDk&81pW-4Fd2M0`a~!>QuJ_gn~n&UTQ6YtGE!XZNM2*yrCF9_d*% zBYWB9bs+z)0^%|ExyqUMHR69wu9<^d&J)DjoF9J(rLj_;YzH9TA!EP9fBeKk2DIc2{(gK})wRfW$}W9wQe-L4kE_2t zk>QM)A5GZi!GPHneWmQ@>g?A$=rO6i1=j9T-&Bbwd;V+J{hT#JZq8{m543>U60-_1 zZvGlbe~xvs&_Gd}>||%g;-@O{&dj2}M5TYr0$3N?`R?~GTuF|kXhx(LMCe}DuS>0! zj#%|(bZLh0Yy6Q^@w1Gd_4&oU{`YUc4Afuk5@mzIJjk5k_mBIsIAVAW$Ot6`@|jaN zM>1YE1=wUi76l`ia^;@4m3}`U_;HaC4Q-i!B{lk|9xZ1EXK?tAr2L5-K_3RNXqI-` z-rD^r=%=RxJvvSbNI{6%_5P_)U|)#Y<@#-*U*PB1``5D}8+bs4(gdvjgBSVkWgU+J z{*CZcm(?3TTla6F;6p$^!i(*XMFxVquhhgm(qdZ2fRsPrjs0b<@YDUsGFw_61TTE< z{y$xh1G2=KbyHW#|E=xMpXlEJ7yoZQ7<0@V{gxU7^QC5n0givhvXMCWqp_ZMNOLa; z@(H)6zYG8Ta{k$py`gx%@OO4wR9y?jV$M_VDpZ3j68LAx>P78ul*1*90D~n&`SvSF z&kXW+yJ(W8VH&j4tKY1>RZ^KiWuWVNJX#f;-DX~&>_zWPzK2m2e&onA##gf!U-THO z5YV>qmv-CPlhu~RHCF=QU(5D3z*cQnIwQezILJ&&K$<^>SSB~{{5^5DOz8r5f&1}u zOMEC|MBzStUW;_K40o;up*sy_-BZo8bnP3f^f&t%A&HmlKH5FF;27SvrY+8*n&Dz zC3CGXl4cB5$FD{xs&3ZI4DJjvWG;bErf2%XiHU+Y2_Imte%fmGGR6SHyI$J$V{&qG zx2&v8qWao%e?dQ-jOjPtfW57f&|RDin(7redx9(*jcnaUzH&^v&TkOX?#ljiAwz;? zD>?kV0$hM?h5*MZs;ZCEb5L9Nd8Oy#J>ZI-*%ItDn>^*^nsJ5%zsmpDca==6z>^(| zqw&Vm{0tw8O)K~oyJaU=F_lW$At_0=w%!!+A?vSZv3m7^)x1tZGFk&qnvl9?CCjHF z=S9`ki9V6n=n9> zOg#Z&g+s5+!rva06@AAc4XpUoBY* zq*jCP;%Lw~W%@n%E7m%{Z-&*DFPEAu)#3E~S@LphFp1r}U09*gcmg%a46Sct8i;4w zO>9+CQfkxdGn1=8tr5XwY zKu|tLR6z81ljwD7YU+#f($XCZ&+SjN;pPH3)wIuNFRd>019TOj13T4w z>7DJ*hXN>Sf)BR~2S?_==Ff4rsDHIKYW4iM`&=u`3p>{&Ytf-EQe0-pq&L2>M(g<* zCW((rzH*w0yaZL0#?Sf991Tw8+b-xEgR1Z_Zgk(DWA)NyPyZp2*Kb$u#oxg%F4N}>(y>RYH z8Wt_nVYzrxI>8qN`r2OXyk`_}EF+vHXM^TJodi+x9l+1bI$S1CI2&_v z7?zhImM#7{+s2f5yoYu-%`_&)eJHbjRnyQ^M`3im6{-l68x9LsPU!DecU9p9iMcn9 zw*pf_-5zCvTNMT5ewuh$MzQKw+%o+WDU{N3Va~**4ApaISoMAV?r^=osVWUe_Y5>a z^_BM$O+%YZQIG89IejfyiGm+fRgX9N_lv!;A-nG4?)yS>@+ob1p6^t_`jNe+u&KOE)j05TxBSR2v33jd0CY-wupkK-!>k2LZ8rgb9GW|ggqttWor;#f5@kSv!CPz)U6wmj&#S3R_T(**nxdq7LTNlF#?Wh{O%<1;hQ(x;-t+zQ}pvbub z_5y}1l4k{P`0d9bidKm;Q)b&mTN3>`^pP`p-ko4`3O&~;%61}~Cu{C$X+ue0z;9ij zn3cQta!7(qY8RSWPuP3`%}5Su?!lN0F2SXAEb!jH?`u=pb#P@yCX3M|TzCtZxgNnm z%dZY0iRe)C8^Fyc;Cu`yZfO%^sWM5sK;R9(H!^f~!J4ML+Iqg1vjcT3@`h6jvVQ895A_jCeES z;lHzB(aDIoZ~PcQWKi&?gPRzW!wyd2z~^Jyx?TISjjCfl(|pz>!TEPT3E-aZR-uH3IX>S zj@&HG)Q}ihi(2gZRiebpYK26r+4fLGSl6ShlIXKBcy6j+(kjm z2bTF8gZ5}Bw+li0R!9+2ruSH-=a2Ke@DRRTxn@j}F%!8~8V&qbeQFTx?Z~HWeC`2bF#voE zd?TCGw2(A=ydeXZUDFK8hBYXN_|LmRmKrOH*cUWhb~`}(h^k|;&GoaoEKc~vd;i7` zg3qm)ryopbhNRxr5N(qRv#~7hUpYm``^VgOREFs*<;~*Be}0W7&*IaXB(PEAZ_4N5hk*$dKafC08uT$xGT`8{z5&}3v8gb(+0CFhQJ4y+h<8yRc-~lVN=(-# zKovUlVVB*xOJ)OR=_iqxK)w6#AvKw>j5fJI2tk=hkd$y%Lz|98&-+ZcaV81gH zoz!-OGmAkBDyQDy3Ul7M_`E{fF(M>UX_ZsGKxWfqjqPVr1>+JMv7UV{aX!B#rk?K8 z___Fz`c|}@Mj?$}qg&2qnRD<+LfrSjqZ=C;|JNlOOS9k1WlrSYxm z?j}}Nb#DnISK`|i3j%05b-%kM)juM3#Y&>rHW3I1E_DLi#-LYsva4(TG{o^4V&aA- z^+u_e417BEvd#)&q6>4k1KBBI{C>A^Fh3 z$@bkLNo36v(ni*klD_oDt{W4l)fUc zwy3X}`!x0OP(9u9mj}&7n>1%-&u4QgfR7_qH%Ev)5sM=SCKUIU0&tACf3EN>%u!5T zy$bL!p1U8r0Ewb<8o~}vBZ>f%3Ty8A2I4@)gl%C$HL5u}u&lT^LqTEmoU%a&K3IRA zWNOmfLEPM;PRQU}iLvG0?rrP~xV+;G{$Nxl2f&A6>%bUx1BZ|22UOGaWp}47pD(?n zZzZt1IL|f*KgO(SZ7#P?S+`8GUj!>^65=jX#;2Sr#JZYa>hJey`E+pW%NOVH|H`c! zHl;acqqBGr7kYb+cuvz|N(%N`uwRYjgx72LJxO+^&gM4&a4>=hpOE|y2Jr_+v;jD( z#3^h8MB*I2R0a0Ms<31P65v|g?$3^=zy;%hiwj1L!0dDuf}2KroL7(T0(gqD%NKf% zf8Z&J%E2yJBa%9=u{7y7g8gPAJKL&1-v02Ao*S7K4-vw*7@H25tYV|!;z@QEe(~>T zV{`ux0+kca$Ck19}43I>$3b{+l5CpSvSmuLf9bw*D7TrYM3}bT)uQL9HLVcqtJdHbO(% z%Sp+Hb3|(&z2pNTdP}ZJk$ROvNj-;ez*TW{fGm(W$`~i-(Qc0 zsU<)(esuCO-QmEc&n2aZ&1`7mgpe=d$|v2f_a=STH_dhRT)L9{pE5{`-n56xh<{ z&BL)2fB)ituS1?vaEQ;zaev^oVSxU%-GY)Q;)ltFJ>2lZzM<63W|`k1$DU^9=g&c7 z@)yal;!Xk6ag3%)j$10CWj@{n?nx4mXxwtGO?2{WmSxsAQLh9j&C z#u^am8?`PQk9HPHpA^Iw{G$cS@Zg=1yvC#G9D;oL61C+CfUBtV49>)z_ZznJs1{K^-xG$hqb{<|#XeaHP~ zfEdZ90~TrUNic8`c-P&F7TqXf2y|zZo&`7Sc!Z=%{ri&Y&>AI{U&f(Hqh2`(ny!s&KkR7WNA~dR#<76^WB~uQ zZT@;D!A4YEgNpDU%cQAom7V4BO>)1_HnJVpYim3QKLjf5<9T}A6E^Ay#OmwU*?H%* zW-Og~?+9lUBp4c8_-=4X9hH2U(2@5Zcds>KVKL@``bT@Pe*b8CA_R3xL>x~P51U+U z+eDziR>w%7{Z|NN+qaEPQM%Qb?hZ2%`JPt#f2nw=k5!y_v1$716&nM1*0?_b^146U z)8#d$RR&9KtW{s@H8dXOAy&E&;-O?vr@m!2ZHPkDbl5Mo>86Bu(wJdRVbtz((4YM& z?nn;x7gTccz^4odVt9z^fkKlg?p&S|K0(?^+Z$} zdAz*h2DhZd6VeKyr(|_r!PVb%i-uO-fu0qQ;y>RSWv_L}^YB&1H6Yj*|N2 zw$lbnayca0f^m~OGWtx~RE-@K^bckPwm+YjlWE1YL;HvFo@k|EHT*|;7@V(7A>g)M zpc9jF+ceM9QJ-bbK~{0jzCH%wvqH4gY;XE#Cn2y6F4KW^j2I$U;E(kkd?W3dnbZ4w zcG1%Dh3OU7ZuJv#8g&!dB+onj~0@Mi}s;LjNJa_jAa#I({rJwD$V_#N{bet^N-10{EYHh3z>8vB+uK63? z!yr>XK5`A8rLwxw&8%%heucv&GkQes>4s5F-a@-0t(P*&Lw)}G*RHqH#}DdR?Di4< z2_MTGI-qt6B{pCqms17H@m?)z-%#r(LreJYEvkpkIOWhTkl!8z3k^+6yVEtato7h| zl}$g96u} z?$^Qh=pPWdD2=^L8+I?B^{KOIfSU#ur0h8Efwg8-iLrjud`qnmCZuDatd970W2N8W z5U=ABpD%Y;)RqZ97^?zPW3A3B?y@4+sgdCb>5ZmnqYs5g1UL(?vO5v$dxq!Yr1KCFapd zalRht8SLpcw%zJ1W--j#cF?5FXKNu3<5PRiAy@E*cg5N@89pz-kaAt%IC^_&-B#cR zoe;vT%HM9cT_+)l;rbPZt7Op_HBoH(06e!(ShvOppMMl+(A=zf#X1Y}XRO_-ThQVh}>jqp109*=4TP?WYuf}PF9XHw{2Ug4PecMg^j1 z|HB1Pw%#x2JLn(--hxm};ixF(+5ftw<)xbKv>yEIpfB3Cv0I}J3N^to8%o1^UMZw7 zBaxF<&(QN@$;o%6c1pgu?1(i*k2Y94;_Usb37yThN^6|6x7b+*sXNMDZe$&F(E4U= zO}(j7i4l;zl00972ilyheVxG9`#XoQl8M7$#r|B-em5O{R?Vl2&qY*R)3`-nwb7v`gh*4 zcd&37#%v}bNW?_=IVYlpN;urO;hL}4q4OrgQTY8$qNp4PN*qeyjP4$~4B$CNk zR!is_Af)Wa#C(;MzPWxl1r&0Ps^A{p4RYC|@+FEH{)<^F#D~im8Z7UVcqy4y>^=iO z@`7TXpz-e}El(Nmo52Yp8%WCD859Z5&l*|YM@hT&;Y~o@_J>qeVNE|IRPc9>Kqj}} z?(#<136?Jd=H?xzsa|orYcbh`;sgYn!|SQ=8q)~XiI@AT32_74H;rzZ=!h53VpsxA zs^GQ<0T1T)oj<@}fQg)*&n;Q;!hXjU*Mfu5vWPczGEf9x`s&HgRNZ{f5xAiQpPuSJ z6XJfs%Gb5+girs3W10hrp^YJpQxn#ejTEs$bgq@ClmO}|MJ4><&44yV6R*8Jo6pC` zhAs*CmHd~xq>}~M6`P=~pKD|vZ_2!VDsZa8;E}$1VXdl8!{uXiaGN9=lZU?KU}Tiqv)z3v-8a00D$*Eah>KX|@{^>8#CpR-Ev((8xN=8-{fw6M@ zbUS%ef=1KIs&L8rS&3|kP7yLcZ0g}w_JcnoXofC~L-O9O|sErgpq5r#Iqj zeE{NJ*_L(PvrEGUgMu+<4}RBYVqpWxzlDDOJs1LVc7*$6(%PyoKf~CcEqOC!#Z9~t z+?=b}^e3I`sq&6zj8iPYYv&qOZHi%#cZs>*;7Jk&jdot-*b4+4Bdcz5g`tbx%7-%O z`L~GpG9z^l+6;{a?COZXS8&#hdBPKiWzVu^%F8W-W#ktH7OlAsO^GJiXTMb>b`e(W z>Nrc|ys!#n0grm|rYPZhqvByM&zyR|+l{V5;(&o)o@I>9bZ+;za6^`B&K4i7rCUb_ zhAYu4=v-0iRTo!n?usUqceb%U@897Xo4JhNj22BG>=X^1WW*^Y{MlLf=wm_jSIu$e z-Ixs{EtJhh{5*JV!{~tL>K`jmPW-gir?Hijp)zYq%#gM8Ig&k-gqw64n5@7{itZ>v z$23Hl`e@ja0>R!}g`Z~j-bmslILNFml=bydwj@SY#tg!F!AQC&0pi8pT2-a^B( zM_@6(J_6v}U3i&>bN9`EBETJ>ATsG$ZVFIlx+XMHgmifTh*;t-&d0g#uuQ&c(O0fd zflDb9onMP?6kvJP;!#@#2;7%U9#O+uR=A`ipNQ$B26$NJ5j0kyf=ycs088ZV68}B6 z0wSGBF0y0UsI2&(R2M-0(_v(Is^Y{ z=6_M6|GpXw1ki-@KvMdD*rNZqNdHH@^xq;qpyI?7xY<9r#y^3Bf1L{aCP0vSi%sLt zzfrgj?MEu-8|kLM_V;IN3Ql&W2B1vRZjpwZhG8k3T4}l_-pW2G1UKhrFZ1Wc{;OfM z>lvWWN&Aa!Q10UFKlk#bGfU@tF6fHcivk4A4Y~N8EfI$kfZYs1qC2bP(k4kv{5+ zjs~2YBW#jYC+{D{J8aua9%ESC5{AvX$ZSV;zkplEXjm@G;fpp&#jCQyaEs2Eh8vnp zH!~@(xHW^*&If8GD_r0I1O)F*l=Rbo*9IpN1-pRV-f`R;n-(9JMUJGlHlmk&p?y)5 zR#&GmtEE(zHy!rYA|2JL_|G!9d8NLJ?#D47E>=yC@v<9pt$I` zpW*0$s#GU~6z~PY700mcwX8pbm@ZW67By(TK2#9+NI3>E((F8Yu3uwrrJeoJ3a}TJ z2aBG^W2gHOxx+om>c4Y5uh9xBp_YxVlXU{qWfpjjFRDnt!hL=eRixbEx*MF0m3sXE z7W|IwPxrzdE}mMFF((R}cfoL<04RzuXd`knU+qZ**~fGfAMQ*(*0;vSe0A2N$*a8) zzWB(k@pNEr<+FgZ)rfq-cZr1S&0Y3;xf|J6-lr>I-C^~FCHm3a&WjS>&r)xgb0q<_ zE37V|<)wIi5Pr1eBi{KT)W8vfdKE!DN6M1uHk4iaqr(mXm zdw4f>%D0lo(u2U_P%CqR%2yApyeaVT7Vy2J#YADfQD19hshEVf zf<>qC9rRd>C3t?Ep{=e`XvY^4pGJ9gI|i0EjddB5h->YLNxx*Q;vP0o$(vLFKTY>O zaveNyw4n7r2|`}k??z1$wX&DM_>~I9p16lUC`pMo&-yuiQ45y7SMW#1m;i;<;>x#8 zg!7$E(2zh{NOU%`lJ;02;L8^d6DB#I`trIlX_GLhK&KInKqY1%3$L8Nb(>8eSmi>U zV$I14LkWG0I5A6L!ZZrU?kMC1i{D}JY>s_lVd2sTjB%^mQ9O%~`BMn0R}QnDqO}hE zr2#Xe6=w_`IcnZ<_h+s+IP+w0UiSihaDX>6GCMK?53y460Vd$C53(nm%+&-O0HcXrfRV6K zc!z4r0)mEk$H!aK;ft^o5-kOOpPP=K&&+@aR--t9C%vq{42e%|WFSuzXV_zFWA+NU zRPf!p$*G*wc$E22&HBxVSAKpFYx2{vz7RU0yw6L;AidXuJl5lVzkmVTRNtQ{$_T-cm==A*7`bzi8w-}n%Y0ySu0sxJ{j#Of(aUIXH;7g4Gi*9769 zXh=BeX=wj7MB+*(%k8!}#_?x~y`8ZyIXyCR$LU8@(FQX?*5U;tsL=+kI)y0_88sAQ z_UO7An8n7_EW;m18VqcjI%FOMA1juLRF)I9gaexy0VFm%5D@Cfv^1kYP) zp4ZIoa}SHAKl^L!l6f~ef{a{Jh@w9V@jR+&B%)fwwe@EC#`bB3Yn+s52h>;E_HdHr z7+Sq>?L5rH$Th{TnPK^W96dh8LmyX4N^vLn=Y7^MyzZ4@K5RH}z}xRPLnfv*gwTiO z#_+dtg@l=Z6p{C@3B+D+HqJYU7=5O%uj;rMzRe&$k{xid({0&%!f)LAiPpsHi;?uM z!r4k_kuQ2*DBY_AuuLX>8{Gr{PDFV`LY2TSD&boOEpN`m6X$?UX?P*D69AVLVg__q`?(iQ? zerQ!E!X+Mnf`h`Z)^vEdN0b@PFOL!eMX~4Ofo%3ee<}^ryxqK+Ko5gM=nBT37z{60 zjY*c;vwc_1O{J~qyjta~J4gb3l3^8hW)T8W6*;sbZ}RjwvHKecjI5i}U#yLH{*F!~ zVez)E9mO6MhZWfsqkxt~Cv8W=aJIQ{QY#U&&a(^5;EPB66SB3YXHENcDaEN--NT%I z(lR5<$k>5}K=8^=FXGm%O+N(~b6;dryDa9mE<`a{I z{AI4i=&9HCje(`Y-u=zT*wQT1(erM%9W)5pV>dNCy>VM8+GUX(qu!$LXJjx;@7lDe zYeN=9C$(Cdj*!&LaA)>f*Eft{Gx^~)a-1NCaS?>~51pRXRo1(QWhc6=l!14TO`U6xnc?g?EH0BJU(>((1!;e7+fw*M@0b*u-p+*p5ssop-I9IHd9(w{E5K=~R8rw)Lb z%-g?`WTRi223|E#&vNxk0V7P1i1WoGpu%(1t_osJ4j*rE-O6mRgWVfLW4{yHQ8{r00*St|E8`doX^6#T2QvIhy`Ip%Lq?rMx(<{v(RDxBL) zQDvP^Wo!4Jf$E@r%@SAirU=vVN+$NK6P+8F6R7afWoXc+DRhDyJhmapfjUnZPg6Qd71T z4v-l?Z1+MGA})t$vijM`}}(Pq?ml32In z#r-PI!thMcd*gKNNC&Y$Una;(zty7b@M1$;eQ>%qkP;t6#n=Ja7g{MZGH1i2S& z9(yCe9B>dQqlWi;xt_;boJ3~Zek+teX2G^NXGCf%+X7EMZDXV!h(UVZu9?_6D2Ss% zL+H}qyTBi^SPI%sK4`n05?0mxi`XzifNI!=s$M1To|Uoyf697nL*V5ai+Iktk;6S` zbA3u3R4>hc?K~u(MOk%h*lxK4A_b_~3biI+OZ2~gZVP{wmlyJG>%PLn1Kqaz#cq!r zk*bA`a4pE0%6e3afPzN?z0Vwx^}t?}5Yt?fi0Kt0wsh9lllPe2&bn(jVBHiK+M<`<`z7)Y)ddwGAP$Txw=RYO|IBm{&c9aZd)H`g>i|MKO5?XJI zIV=p?L*7(Ml{>Pyu2t88r?SO1(|m--3iCzzb*<)&r5l_4*M!29?x&xM4B@SA706jx zTwNZTlE&s3Ip8@JY9f+X-d6CnBM zn8zJmOa8HePdm|6P`|2{=CRU@Es3M{&~qb(+}r#gWpkndj{CbMzvI4m_!i74E8^Bh z0a}LPpsGNL%v(|oEfCOs)EDPUE(Ge<*r;mRyw__Li(d51g~oqSPv?*83(eY>0N=Zo zKRF1*&cDc!Zdh>P*hhYczoRNNr%!iLVL+ef0S%;2KiatBkby{;;MkyTdt_iJS;E&AxoWQWQoj3EOUY2gP}C}Y zzVBX(p(XxZSMQMwZBb4i=d~+|OaHO>ZQ9R;{RCOrlGUAjXklxKi8FnVEDVdMmuatX z{Yn5Rom6hR2+y=}1Z)-0d}p60U8d5s^ZqCBnkQ-J2(f0C)fo}htRzp2#}Ykfrn9Gs zBl`VG9ry=T4_(}^iJxfe)XstHwRfRzTf~C#nOf=GR-KV>#%J*z!05rQV7+}6zI4fYu+eh zuaxzyb57nGx|+6{{AjF@9UjlvyjUgXen-z>Ih0!*t#)k&kuuAH~4<4xjc5yi4fSPY+;SfG0&B z4n3qg-0XpMbp|5^s8$)6*sAYbx=T7X%c4zJ1iIB%5WVO_=xVpLWW5T-{$t7cjTaC+ zr=KB#F)qrM3-;mrxoBqzFAC6uQbOb&79@3ow3dCZT_l~=-uQ2oU zdIOBEv5VN4EQDj-sCdmcxJz~g4Oj+I{lx9nx>pqhRa-aBMilVXd9B|=oB_?hW{nl4 zb$Mn}teJC}ym4zkcQaO9p=DKpg;#OQMSY(~+@k+BG>GxnsEaFDaJ|D$X|2PNio|xI zT_FuGy{CUzE3`hfMK=sT{u`n0@JT~{{99oK@{Mg}Z0~sL(xtbq7Agx{uTK0n8={P1 z{6)BjE`%bk4NPPLlU^0+8Jmbx$qo-f?Oz(s?x5$G&Ifvf^51Qh`e?YXirDUrT zR^@dyPh8Y-^oy`Jt#YBgLQlROcBa@%jm2kTkyS~MTCyVv42Vf$K6-7ZUbTD~+%K;d zWM%7jj{`I;Wg&+a)lR3m4Tt41Effz}n^PjWC7n$L_626JUyyMRUT4fKAr9(u8%B&zTM8UC7uFg6s_NmoCscUpZ zv&^jDw{Nr=!V*}r-2r$LZqVCeF{W_Os61_znr)!5M37weu*-UF^VL(% zGhC6D_9Q4@OMTM$!r}F51WV(X3ulg7vcG|K{f+*I(Qm}$=|w)b=o{^Gr%<77+7Pws z?T?DU^NmUE%YoR%{ua*pMbBlhN&>TS1*EqbA!?&=b)vKWLk=vOyrTN6P&Iw3hVTKa zb`_e3zswcqqhZLiiSK(U-+%B;#Yo_f-Ei%<3NyN==4?MlAToLb0TMgcKx4)~DX{o{ z;<-mez*wJ4J0FGe$wc*H=|L{v!uw)ehcz^lR5mk zEB~EimzI_a!!()7?UjWx>^ro!9i^B^LS0p+S@&WRgI@3}guiPO z-_V>8Vx7Yi;d=V2&s-*ZXCsyYW$M?PlXSIi)53xPou3orf!ZE8#1zpO%H|43XDag(BT)#pH4-U3Sl?RcN_qyTo zaUnlH9tx})o*$J_ymI@En@dW5FRYklg{oyKqVDz@)nt5dE>7TW&E1>hAl!a|_}*2j zCOr`0rMYBSOTkKIJSA*FBjXqIz%cox*;$TLfK=Pf0I6&bx$LXLMN*bqrnic3sJ=^( z9g138yDgbP_?7zR((6A$Q|-LRR%gAFZarEnz#99KF)J>^{9)4NTy*MVrvl_zZ1Fphsjt%}MYay0DN887xczM3;sE%lHQ-sX0Hgb8(YGz0r(q&I`nLCmsk>rU zm}S>uAE${paA>V@ppBxp#gSW^SE|h3Uw0N->QfA_RKsS97N>V4LuFbmr!luO+!NHpmYi0EOSyF6cmV(JXx#!@} zmTI()-x{J7wdc`Tw{sTsfgS7e>_Ki)f83d&Y9Gu#RSV zmAHe4y)(AlsM=$jvYKT-@~MC#+%cs8un66pI~KHe6n-L<4K~K>#AgQUvaVKc_jL(j z*(8WQZxxfO=xqSr7 z$?ssvxW}u4XVT1F@)4#4;}NdeIjdumOp=%1MPvh_O~$UH2;p1js~d#yal6&}`Bnb0 zHPFg(FI?f?z-eAw;eO1%La8tKcLnI~@NZK8tK3gGvzb=8^Kf&!w19Urigfe!`{;`U zz1QTk~gRiA3bT|q(#dX z*!08SPiH98$g-gMc(}Q1$ms}+Tyw=ZO`KEw?y=lawCLp4cAhb;hXA8xlO7OTEfm`? zG&_sO*>fG^1tO3H9J!79)FfjzF}kqPfU@UpkFsiT=iXV`dUpC89&NGHu1nglYZeIZ zzzMUQ23N>#j>w=U?vV*s}gk=Kun=g~Ic3h)=9YQ0XeyF-sU|IW?Ml!$G&MscD zJTzv`kZ{$$U@tCjEHu{)mkldQU-IKjre0u(i}FQW5M&LEZo?{#K@t-QR4Dd?@iWon z*GY$z+}o8{sQBf}P0udC1=1AU_Jzatf8 zvWr{MU)rUATL^3R9{7(*%0!vpc>4POuK4!&5=E7{AnuN2gZ{@@v3MuS|i1CLUzCTNFLT?mO9q~I|H@L9N z&V5$ti7n|Xlq^zInTWeR*G1cF8itNQR{3i_c=B^j+{;RVD|KTw^$1LTt=h4WZ)~jPvzCUpu)z&6spI zR`k)R-`d4@>*;*kZA_bVB83xoQG)xUaoGa#UiYw&iPzR=wM1nt1El@9;mFJnJ{h z0P-*>{H%#w&&jk_&%K!!aSAhS0z0=a=-4i`dnYw!&`=G1QW6rHIi6B0q)Srydr`7YGi~`7d9% zh8Q@ph-|vg6)@eh8-L-^nQlxR@a~vdc#l1+Ya`piw6XSXlm%a=L>yJ~mbE4;k>PbU zMG~j_D+F7XL&WFz9p{y^0PLAAbG`Qs$!0sDuAtB>Z_(}FXVhJjAitGw?P=Oh%pdc$ znO;<$0{I=bOvV8}lmGN^dqhsLn@ObIZeb1Oe*}P^g1+{Klt#qTJ8{Cn!g`$8S_+SL z&K!np(Yw4~yqGAsN>*gKJz2g1!w+iDzlVj;jE>^Si2B*2vs|wX&^MFEQ#xGW9uM}? z;|b2$9qK)%LN0BQl!GL>(8KK-8?T007Q%W%ah|c@|Kh)3V&j)1KY}}byYTGtwjk}+ z?S}Of?3HcfVkJK|Aw_h+KH=XchSu_K> z879RfJ06BNDc-Blk^E6c_?7nNqn_H^oLw3yU0%Oi*R9;={yy$17@0>J5hbSz;o7>i z;P;kkV#g!3a$~}sZ;HFOrI)Yg?d$Gax-i%awiHTPV-i8Au)G%!QdF@P2 z(0-pgV_)*67XYZuLFSqR4Fdu?Hs)W8zd8;$ zT^-2H$_?DW4XLg$dSfo(yQRamoMj?j_I{*d124X8OhK+Tea6%gGAnh8#5shW?Di`3n%!zaph6Y;){#y{7oUO z>B=U7^K>E?X=S7GzAekC{R=*(U%XcuJ5~BE4r)GyZI-)6EEXMX7iNuKx7_V z2PCq{D`9(g#DQRN12x}R<*3TJty|euUu_}ys=dm$bFuX_J#7r*z}{$iagGO{=Cb=I$2;a$Mb?n z+*siBaURoHW-|JVLEh?@(e%}Gr>6VYHIY*$gak>t#HL%_+=)l%o?xdrKglp|kneet zH~)Q=vy|L^_*>EyrFZ4u0>fBhE^e(bs{e@Z>xLX2(tbUREvuB=bkUmIa|$?z4~7Qe z4ct|0)Eadg$evcQBkQ~!AS9c{6}~&)T$!a#PW?^d z(219swf@UgA##91N0KBgOr+1(Y(wpg0m4H?U1@Te^aXo-zE|{J-2X*c4w(dBWAEBV zgRDsOYX}ofpQNh_v86+{(Qh>^ORAxLNcwW_a4g&1bQKqCc*)Cx5lSuDceyy{zz{2T?@bT$DkUnW*s}P$`c!b9X4OA+uD)i^Sd;B zZ=yMuE=)2$tZri#G{(DDtEu}Lljd9{D*Vf35@0uIof;r*8Hay~V1B>kwMGhcpZxmF zV_AgX&Uj(;qe{qEl!j&&`k zHuTsRyYp+l`LWNQa~hE!~VD zNOyO4NrRMhy~DlNTi^Hn_11cSy|vC_ojEg{y?>p1@AK#;1GB3%mT_d`Yt;U)axz~R zE2}OK*OR^LrsQdhn#B%@xNmj|OSOj|fH-2|OZJ z9;078g8Aw-h7{BmP}pPG#LRL*B9 z*Of;CK&qTXj=L#xFU57(XJG&+Wz0-Y$u*$UesG+Ot3m77(qfBU6s5RyKo*3Q?!1Rg zVW1J<^Yn?eBfY_%^{+-ouqm?XwPfKYddJ>#0Y^<6Ypc)ZiY!rn=Mbv@1flI76>XM{ z2m(V2FATeg=JTYU3DP;E!+Tidj$ZE8G~@i(EcBMg;w$Ru8szyIBcy5H$IlmT6Sv!Y z<)!Wcsk-JkJ(Bu{8>UXVO_ozH7C4T)87+%Z4ABi}+nbzzV}2LT(EqgzjYW8f-cR~W zND^0x;=R zDWWL6Ig9tM_U`Is;7>?GwdE-C@tk6WxMZ8L`F6&ecMRF%RmM&b0%qhS84Nvpg(lTYnO(370OlxXM-_u6{Y;B$Rm2$B7)@Le_1q+?Z0);aWSTNFEk{Fj`}uwEKAO-701}0k89hyz^lTLgJfG zUGncdvnz(Mi(W6$9txgKo2>7Y-!AvF(p)%RQtk?0ZDq&gnZ@D`oHFy-u^)*ZMXut( zNfHbh0Cm0VAp}@2pgV^vm058sjFL8%32^i?=v7>bk|>0@NYpG4GV^!6UJ*tF%W0>39HG{I9ytYHR+xWrJi|G6&mOq+u`>;! zOVn($f2;+_jlC?19VDbIl z^2sLW4d{;bH8sdeimaVv$Ok=EteNjA1cOJFV*<&h9sWkH(RZ9N<@|M^Qhs}&epJ|? zRj*RDr7iUjFQ?NpL^)3CCIRD5%z74)9sHN-;YSWPceZi)QM{-rDf7Y*!|K_6jxmR@ z60B#O21-9PUXc2y-pzqWngD-RLP%8gasNnu=6+6%Z#0pf5y+6xWlE2Pn ze>2Ib_WHFADS2~a4QXD*U`sMK1g=xZfrvB_>1M=DSza)*Skx0 z;y@E3(HU{w^ywtqJByNgaWnS_e6BJ;H>rwpMsnPywBanU9xI1d+aKd;*YT-CLr#z7 z1n0)s+*iv+f}ZWolq?j|);s`!D(#^(*_|Hutk3 zhm4S?7S&;+>1Bv?npNxZ@58{@OgUveBgH%1UClYGA4rK$XK4#Y@w%EIg2E-lpUfVw zAcuq-6G~Jq`50KI8_(u-Ev~oMiMtei+-x-2uG0|p2<$Ey@kTs7S^h$P{fUHmDLbVO z?pyB?vlMKkUYzJK(~oAfOUZlQXjg{SsjDvR!fDrGT5<0mG_Ru$Nqr#3LoXc^&zr`T zP~cA-nr93xTDq?ByPki}7thvq@sGfFrf5xB!ESf;OKb(&f-2I#z&rT#xR~)^71MYz z30OktCLaqSEW$MM-|+K9tS)$SX`YP|jzrzG@uNGz6WYSwP!pmYpqw|7S~MSELYMVc z##U_BICwf(XWCa9PpkhhRuo3h3FmjvR+GG2*2}-&QjfMX3fTi(przuo)JAZXn#DNa7fM* zNJcQ_S+^uRfzdnN8Rn1{;EH*J&m+;OwfyB|1#MdUBIlWZ;tE3ZQUEF9=KYEyt=PE0 zlO|YwkUe4(@k5%G>t^XN*I{E!C2Qa$gW?Obh^a^+$ChJ@aNp6{dOAI|bhCzn z!Pl~1_F)O$9(0e{NO*&Ap>k-y{AKdc@$jSjqg_;*6Ll^mvjQ&{>k9jj_iR4hrdE=M z`^Pir-6YjY-t%5j-OYwI#cW*y+ngLqt|UaYmvG3Y=Hs{^()KNq8z%vhC*?g5|KP`v z(6wW=HXbj;@V*U&_f3|s?3Si%8oGFMWf<;WN@~i%CS)$uzp~aH2=xQHUD%MeeB$Ll zSr)dUi=Bo$4ZO7p7rqMt9~!Q&=U#fot6CAc(%cbd!OD$hGu_~6O~m+k65qLZTK zsbHr(62=-#Hpd=tvx}UG-`s-=uCy)JwIa0Ow$OdJMH%#HYIRS0&C|g`5Oq*daoEpQ zxtf%8&j~RB8VNS9_#@TyD8+Ei$jfQQyT2G5TxRLedU*R3=v?-x?+#S&1mc@peA<}1Vf7T5 zSdhL9RH6ovlYzEHM9z!e*2wN;Bbsu7Z5q*3x}79fHss!+KeKCR?I6EXfpBpW*_`#_ zYYVreA3E231{yTD2K_uHs4iA=^I7N#uLXlqgitd!s|LNPylBrRSootZsKkJcEIx2zjSy2pjD0FApUTEmmw-N}ps+ zLuZrV4y9K1oDT)CukHNQJ~(&!02@-ctGZ=B+6p(R#Tr~P1PY&WAk5y;<;oK6LuA-W zB=d#B1I*Ji&i$7)lTT90*}fcA$f-kjYB6*sNOe7Zdn@oO^XkAWGHkW1)ip}J2o zs}w(sFd$&_J@ATb zsO@CP`$-FOi=~F^pfeD*@rbu$n-XJLGf?lnwWzmS|7yNMGbJ@Kp7{%8KScG2N9hD~ zSTGpUNFb`Mj<-v@MPk^sTN<2$;~tH%@j_C(9*lE-;xFRE%^(t8x1C$@tjOUL#7btf zTKE|GxFFWR%28AXdBtqa)6q;DVPGpmI-g#~+aqD~G5EWeWTgs->q)x&X?oi!+Veq` zypM0p4R5-J+=t)J;-wk6dT^Z#PXnD3;=eAoNI%_3?U5%1;e<8tl%RMrWxGmos@@{$ zTy$Da$Ab`HIQu2OS)0pXtbWb9baMi`5o$G-&p&y%N_A}#yzY~9uEv}@=h}tewtuOT z_O5X(s5Lov-Y2+D3XIcs0eL>H@T^Ncy47}W`$pu<^dli)MD}Ch*UtoiF#L5ztHK_u z7IN=|KcMOJBk(Y5cIc`LMXs`Brg={kx-AQ|;B@fuz+@d7SH!1%yfW0BDZl2RSa;X^ z3bPZMIU1Hun_hMXvibR?j7k15&N`pFmZ7biSOfyfzV22W5rDI3ssdPRnQc{t$N%c0jW|D=V2qf~r#@Q82B zE9F)p6^P-H|W(@wAF-GJxBdW3rVga&NWw|+IbVVwMiAp zeawqvgItOHirOa@wO(b<&#YLgJVmSYF<`C}Inn5w@_mFs$(+qeT?^CEl*V zk-=ozQRh6zJA1(NdW{*^H6Df13W^v4Nn-P(cY)^nm2POHFO7!!TXsuQgFdy2Xh^7i zXpUM__)!|5(3;2iS@|7%EyEc~`uj@x#&!Z-7bI!GKG)6`&}0_70-Ip<1C49NgQeN; zEBVAquz>b8QxG^w6dxfdgdnqwl&y>6O3UqHNU;AyrKG|;jz98!NmirZOw{dMNlW$4 z;&mzxU7)LpU;8^bg}Z`RRxmoAJL`5i_n%B-_1#M0G}Su+JU|(@El37(M3kltdz_mV zOBFYP<(A6D1bi-n_Qh?c7vv8P=3|A3T%kKOHLY1wY_nsZa_GR)pPFA-L+~HL1pDjU zi__SR+gKo)8;vmPp0nxJtr9|=RtO)0#w1iK6wH+@@-rNLySX>{?(9Y{%>WZAjse-$NRRB8>3G)rqELK zb5iMk_W`A4}tSA*XSbG6xKHCk~G~Oi7*IoLRn$I$X5d;e|BJ5yOE|Sk*>k9 znuOT8bwvm-YQHdFs_hpe8Hq1(%zqQYzX_y^xFLH*5!+^<;baQ~=hVwX-e*}lfyTOP zICaUI{KV$34&2^bjThURDaIU|amDp>_uvYWa183*Q%yAL7>n8V?fj17k&L3&J?{hSvA z+GFraJpvcs=6sp-3oX^=5ocJmB!o3IhQXoMCtIw1|evU>^J=B`Z zG48d16?JbCeXY1kZ>w4xUlPrI5S2j3N`HZxY{8dqlAx|F0|!u?UJSsj8Et{QCgub3 z6ZJ%aX`!7`R{=EtZE6n_0=~(?6&fjLfS@MiI|Vxr7=Mq-@x6?mq3>e%_2+qu`99M} zI*jg*_`F4v*#lo;amH+k#;mg+`R z62287;gD-F$0uv)p{q(_B3_!S+Q$05&tNdn|MLQ?KUb#6WaL3KKqm8r*@}$1Kf*?lS3?rW&hQH&ZQfD-v0pe&fauV0w$IoLD^e4}s4PUAy`vG?| z6OIN+*0)~`;3%?qxJU+Bu)?!u40+nVu^bhl^zsEG`iYF1$8}_Hqe!Ds+^+b)@`_5{qRG)UNibWu9m1z2k5rEL&mX;3 z6U!;722O_lyAge`B4lQWPo$KPZx+2m9mwku6=SUM1&A4OQ}^J90?>}v(#eS6n-KI< zsC}wrv~0sfu)(rO>MAa=9v^5dt2uJamqyDiCsF*>nGsd@V?AOExi*rGe;V;guVwI(x5mL>Ymi38;W4yFW#s-^YB-2o;q`<6uduaT4{> zqer}UGU6}QS5HfFw?C<9s`(eD_rP*w1Io0t4qq(w4}{OkF8j^Xm@c<>hp&UxBCKJrLRFy2UJy%znl z6Btf>yZ0SFO-JPA6VO69gor(R+v6lAL4_K(;uYZK{GFe>WkCxp)-=aNQ5Wq`GRvQ= z;lVTe3!^p7MGc82$?pbrwlgP-Pb46!`-?Q7m{nYD3F9qmd>^5ZgemEv9y3;pw2CxK zVUiWg<%KQ9Nn>Rq%jN9aV-8}nfg36oy`%qL7BpRrY^8l_C0jo3tfBZAYOPnGQ$nLE zIZRLfZ$;Nb&9Z18&E7*zU3Y|S8D+9M%>xZL*?+2(8)Cp_Rmg;qPYI60?p-}yz^zVb z@6-DBPrLnKx_Lpjy~Gm>Eo6{T_AH@5+-CL(WR`LPo~~Y2rS~*#(>Qb3O{T-)OYj>D z+C^nKJx89o5DyAJ8BM_0{}VCj;3rhd?;S^WXK9azX^EJi75!c-(>#)|zB)w5X-(nG z=_kbDs6jCzBTPQKpdffW17A@AcG2f@ckeGJ>UaGe9RhoN^YWS5>T*`+_s%5Tc>RxJ zQ<^FY1Tr7L*@e4XjT*SHw*f}B?+~SU1(2pcT=72~azXUzF5%5$51w~=>7x-N5xn@D z?`&(UKaQ9eRyGx+HEf;5KB~k7k!iT@45f7Kp{w;U5!!s4`O{52G{>2^_To@1R0uPZvC)V z9{5q=qyLuTUv6<_C;(&ew|Ro%f5Z3(!bAiBDE`|}zrNSR0IY{bqHe%{SL!erAEZQ5 zF1skQ-~O8$q}jtcrCBRB<^ARBFNho^r-0Y$&~+D%|hS z!xQv(6n-J{KhX!cQ}XtY|2^WL?DzO!4rRHkw<`W9Gm-vqu+h!zyB2hAlkM4 zkI|Fm3=4%h1aH}#%PJ%_y&s@EoiVdfKr+MkwBls>_iR|)jemcIvODONhmN}@J>9>h z_Yc6LTL6v57{FW_^jmZdJS`9*<8X*e;QZVgs7(6zsnJsc9>_Ct)qe@zpC7?C4@)En zODj787xzCPczB}x9EPc(7(M2}pZUinGK)Dp_G0X8v|!Cer1@kh)0TYak?S{zsHo1j z*L0_9|Bf~a6*Ka8G}Of&o>wLUw#)pWYO4F+Wc`I@5a67`8Pd}Kk6A@G0N1v;1j>+lBW=g&TZ?0yJ5 zfYZUMaq0hn?~{niTmQ)4X|;+qJlc0*6G!pCNF(t;nvsr4<^M(7)rSZmJ>nq(QB7=q z?OIY(!{g$apB5q_h@Qmx23Yoy_adv@2gz^^%d=@#`Pli^Rons>j7?E)*8y>e63D*R z2-PEWk@}639;(DPz6h2#t0mfIJf_1vZdQrBEwd+-&0HD>{fb>-H-)OZKHN>X( z1q~I+P!uwN@TL7k1=C%(VWCfmvVzo!0df|KDYyVI?W8m_x@P3(=Qmzwo`i|WVjy}^ zhpHBu=*;6YHheiRitS*pO!5zU0ZPI8;6*K(YkBfIhcfw*grD7^tBjr2z=L@bk$mvN zV-ht2Fu~z8<&0}m`7l82WC{yb?gsLU7+R_U=-@BZ%6sRHdat5HQyM?(*vvwHnk>=YSA=f_ElwO%yv>^mI%2O}``;+SagsW6iS`o+x8{SePpJ z;!6-62w&0=ztiLy7$|z1PY-htVdRs5n=QcUs6LXWbRvdREj2j$7d}jOdyZnUJs(QDNO+ocXZ3Rpa?+3I->k{6~h9ZT6y9RBGmwGarP`I<~q}R z*G@(6irH+p(t8tSyoP4GX^+hZx@BRK3Y;wQ%eFcjj%!} zXHXSS3)MaiD)d=AoLm1>v$l*>XWKcF$m+48k2&!)tp%r7?uo*LN+LYhhy zdnz2mIk-0tRR;9+bXT?5BP*;C%4XWN;o=e&9t0NH+-ysNEENem`^34HSPWsuKK#{x?1=cikmc(nel2_{L44cZ?yTJ&kl{|X9hQ~W;8v0@tA*0GPVA$>jWU3esXw`QD#*S~x z1Z*>ygF?CaPTzIL%xcosMGH1o&anLhMrjKOS0(8ctf>Bl)M^&^x_1MolLgd*aLrk*Q=cc|l)^K$&*S-$E9*B^&gIY7G0s6Er zj-kNugNQ38ZF~794lXX?V17)92p8tEXL>pep2f#!Y~*r+ARuESI+!t2Zl1XkPLPaf zN&(Y&eu-ZW?Kw>DmW0>g+0em*UcVVU`LKjKH1Oyt(c`XG){zS>-AK+EYM&lz0vwLH zOdW4~S)sXbD-}_l&eyW2;;@wo%`A}+Xm8CEHELjewco*IbGYoaPIvB6-kdh!`&L4D z<}0VqdL9XOw_3gu8Pu>fKa&o;KV379e-@l5!2rL^7krkco2^N2Q2R(?;ivDNL5DM1 z@Oj{r2B||K0pWG85cEK8g$O0WgwV{S>O|Ggyo1@@24w`hL-*Zn>{R8eUOW&gyE!Gn z!;;);%%l%sr2xa>hXYV@Gcw3@c`fI4r2P)u4am}hR!*Q~az-HHK~^jv-!(>t_fzk< z4J&sbZ8O)weu5K2`UOnmCS8IN-^`b%VsD#dUo6mn)$}8{Zl=R#(Z}UNrlIr4ZLPbE zBrDlh`zb^!RP*)E7@mGA9hty~cp;HIS^-pphlHwu+7~Nt9dDXz;S_XQ0 zWS8B}0|PdUZW|D=)dripyZhqtdf%n5yRe%|VI-b`c)hqc3Mx@N=aQ7Uu;p>Hv9)3w z&f*JSBHY=miL{VmS|wOE|K@Mcocrg|f;@5vwPvn0@}3uXHuWMdKST33h!Z*rbCJ@< z6;&$N3UFu^`hIEj=KZ!|--t{l{c&3e;%-}enNa>N1Ye45H0W}Xu@_u`Po59LcUlyQ#r=zYi-kmRxQ z94p`Mu%JwNShn~_7BSxElNENgN3b7EFO&HuIS8j{f1azlu|kYz*lK{>B;XeXiDVt* z&1N&cS%fFZM>G`xdxb~Ku_!e8+(P`Kj{+tiL8C;*J-rAJzgv(7{v@e*hFpFV4r-l0 zA94YSdZ5WR;DYgBdmFlr(h{X{9;@C`p|%y&zAYz)WF-T0NEWG+CxLV(cmet>c1WEG zuqflC;Fmn7d9Pz}rkCsQJhIutM3~T*JyQ-G@qCvL1)1fO=kZOF*n*cTsP(%vvnyDGD(M?U$ppkp? zpgymT3r+y_sREm@!b93vUtT^8Y;nOu4=huUUWC0!+wdgp^j1Ay@fzwIjczUt7^sA= z57M{nIEMS!KLnNhyh1x}hVenk@4%|@>m|viXX?S_MNYh$5^SjBqU)iK10bg4FrlWG zhsxAX6-^2Sfg!DVC0j6ZYsGyWxYZAT2!gJj5>&mBZ4O~SmQc7qi# zrzb72JfC)OK5_4=KvQIdD!~;GDQ?e`D~o}=(4@rKssqn!yvwG_^)!C7v-Fq_g0My_lHfJ7f5`w;MqhKs~(x_di2ISFn0DAuhaf$tg>t+<}JaHk-_F4cK4p9rFo zNX+z8Vs$A#&jhbj4P5$P^By6AcQp+SXn^%97%+_%`<{uOvB{93%d`aP1WDX-FRc^D ze8JRS_7N2i3|i55bg}C#C@X9j`Ita-q|utw3Q!LyplVuKZMSSey$Q_q_0zbG+YtpZ z*au!1bGar$yD#+j=f2t(G`)5Ebgw^I34Y=&=3w>eV^9u)(b&o17>h8T>bHwIgj4bU zCk>0q9E^kHYo0DI7NM@&EQ@V!%%sKZ30B_m!I|g#%h-KEZJc#a&`qr*GSC}r5vIudw5fOrlq93c~~($C@@CCCPNLP6Ekdmk7PbwZuIiyI}l%DIva7Z zq*Q%RTfO)M;Pq@@OFtUkL)bTH+DE0&Gm?YqB{InGrba%EQ&xvn4QM`wV_qpJp$PE* z0ozaBrxdYRfXhkAf_%z+I!7z1{b=)E3MdP5g0P(ub6(|*r;pP_Z(SFd$K~9es-Xdt zi4`Lw9rzhAH)D2rdFjf#0qo86aqQbG3@`yE&=x_}>Sg~;$J8?RVCIH^t7OMYvKg14 z++N4cb!G^P+<&eX$ytQ+EN4b~d_kT{1RQ=K)5yKR$QB-d9kXt+lLU2m-R7pSGPbjEK%bj7O-P)7x@qB6D$5x;ql9_V=Q?IQgTT7NhN&1Ad`c#>fLX)Tg} zkc3^28dN3YXFLsf6o#Rpp-GgKM@mRydLW7c9W09_{qt5`R40eEFaxjv@R;3QNyy7* z2(+Sau=}?-a374p+uhvz04D4P^^iy0-whfe*FCGa@Zzkv-)a;Po0Q2I{BT>@dojH+ zRz#@cG`wmbDl_`s*gP%$6PDF3N@F&=`e)@cnu4~|87e4Hi6TKgjKBvWnveD!3(~0e z>WNKWIXuVD{eJE+&nXUO{GRNuD8_!^v)-9sJ_<{nW%}lV(G9~3A9A1mtj&x(S{_tu zX=9bqV)X&{ibPsd9hUyVLa2Ey#r}rzNi0hQP=MD#$|(nI#tWoFxkd4%u-)T!7xz+e z1Mz7zB(wM?0_XwvetnQRx_IbIYSXt(g#vu>#dI)?a6#JqtY1dt_ue*&M}J!F&$t>^ zFnLwKluS?BNhM_TRKr^sJ8PDar-}bzCd#&;kjC`RYd_6v)571Pb}L0P+}ojmcPCvf zJQ3U1(@FZ`8P>2hl!nO$Io)U$&rRoZu6vNhGmc?>i0qxF?AhFN(tMka_Zq@bzl(~G z-4-6xYK&qW%Fo==n;xi8)0mob+8Ktr5*J^`w|y=rg7FdFfgd^%Bl&tl++wb&VI;oZ zhPZZXH>56f%d(d>uqY^t4yJsFSHzR7W&a&D0aoqdBJ)O~#O!q%eW$%s`_DWA-~#-* zD5HR2?t6v0+(W?e-!3b8AUGp15OC4^U&FWq{v=gY&MUxT|C!$T`;D~8gE6{TE!h39 z0{{4pFjQoH~-HtAo2rE;HEA9Swrg4!Z z%Nrd0{7|0#2ZQ|iQ3UycQ(AGQ^!`;5_>&>?`2lX+iL4r={O|lu9^DG?bIxIh%G4in z^k;VG*Ue5OAT!@gO4$F`G(NKc_M6Vjah&rHxVjNRXQ+~I}aJ) zZ{#H>e}Dvp3W$L|ay&mF33HVFTK~*_k7EF@c7c7Bhw;0#ff=czwQ1RNfXvp#KxXFO zT3+ZeER$qYRSf=wf-Tx_^VV84^WrgzJCIQxQ;GZ=5=AhP+{#|hw%8zh`%@<-p+hn^ z1J}}Y7&93|$|vG}{ZQly=sA=}(wa<0ROeAp*564}C6h6J0|U}ggBa5+DSVFtypB?! zSVrwt#q9bOr0$-Yw2o#r`SmZ4Q0uhKVSE7qf7x>lxyS51eaiPj#`lXEPj~9{UAibBpCiv(uI351JmQIkz<Eu2eMbC)zv=(%E9K-1q5p%oM0&9h zsq{P0*~$V{eV*)O{7JA`tV8|AVrKI)Y%08N$uS$9KINv?Dx_Z8hrYZ}*t5p1#0J9T z2yWwz>5z-n^uws{X{`KWHNRv04M{rr88~w9C6g)VN#!us^ut|K|*%ANFX*`g; zjC@F5{(i-ZH>bSv^X^V4ZO8oxn{wtE90orX%|DoL?H&JX5OqpG*-WC|UQxbW(oC5^c|~(mr0U<>`t`u6kPd$@za+s;%sSzeXN%UThT|rQeua@xF5KK z!k?+VRrUVha-ab#?NSczHVKpOa$5n2DKb9W{1N~#B?e;h#dVzf;(_*Y6{U=YDm!_! z8En0BR2XjB@LCpJ((QT!a^~)G=p$@M!kbc_3Kxlv{7{V`>k+Y8n0hc z{UW^vl3SkUFmx)ZEKgrkMCLEflOZoJXi1^Y;}}jlM|qmowrDn#1lCnR2}Jf!20MiU zk!d@H-;BvUE;19*)680vdbWzuck|z@g&(tY6m!GYgiQauFH#*MJlbxW6?#^rm-B}l zh|psm>XS^8-fR6xD!0$cDPwQ4z89mmQAz%b>Cw|gwvy_EPW1`SsLbo-J1R@_22{@L z14tLAg#m|^T$vc8jpNQOB-d7`_RdVEK&L8qXO`pa#az)#+Mi2yxJ+BTyN#)(1%tI3 zzvZ9-V0R!QbP0OY^Epc?qVq<~rCfRzN8WrVj}`z4GV5I+ z*niYwis?Viav$3{X!ZZ3^{&C~Zfi*LYwE$Q+OKjrDgRKRo3|` zvo%|z@N?@Q*Z?x$nx2V9Lj$=;N`%M~cfuc)6QbkT{;7se5e)~9VMZ9FA?RGkwd>lN zI@N{A+ggxe0+3F?0K8~RxQ}(yhWW}tO8*C%girX+y|7Rm1+m=aFH8e+r142vLz9vd z%z}@QVn}gRlKHUzFcuy(%L)w{fjY$BKKn=ZBNB7&2x{eCos{UIApc{00K0LI#MwgC z*NdqVR7vLYlJSFejInFB+U{fDNIspRCy!OxBRHC_ly0aaD^&1Dlr)MEot+Mwo91I| zzOpGIea}@*Y&&h@02LBX9I5z2MT|3mV?`Nrdmr|fwA^e7i^H8@|I4S7W(B1( zr+l5jA$0PInkY$2B6eL5DNzWcHZtlPAor}ata4vof2N7PhUSN#-G+9z<9;MM_e7$? zIm+5hao~+zRP7Vzt`dSIjW==w!s&W;=AAkTwWVKF`k1?H>gY8M;(k@|PGy=s3o|OL zs%>E2S8^d;sn|sJE(l)ybYW_c7m?HXi+KT!9c>LuVBgKlqMuG{iCSw>kt|^B$xji! zE-AX@0TNAyk^p;h2`oD2NtzG(qiTwn@CqS0Z^ba}JIN2S@vom5*rpW`5_2Kj^5I!A zOXbn<*ag>ryt(N@zuW7|eoXIe(YCi% zB+!rvCpae?U=&9vQ{GpmvM$;ks=9r*vip#ib&HhhbbxYppm#wN-d@2Fy~wGk&yswQ z+P92`fQ3Q&h;$`SL4-E5KR8namMuiYvbl-p`bzsCUhXMtis-qKnC~5_x_R2y@i-fN zZ(o)b-WjtF?0@-q(ng@?L+z<5opxw~g*p3z=M-x;6$$9|ckY9lxsR^nRc@>?s+RD^ z?n1o#Ytr%iDhK-yCg-?Ho7o1%HuYlNa22!y*8ihfV`bqFWV|Npaxa7st3~EN~#o)4^_$Ek=X; z{=Utb4v{mP@sXIyFLnQ$AWB<-XxvdnGXopePGhog)171pua9M+4n2}5%Q?1tn0+QJ zCdHd1x=9HGy?2`Whq$F~?7$W>bkTZ3Ki-XH+EUcT2+tX(wB%XNBHzh%yEUL*nWjDM zNO#34j^-g@iXD(T61X@IDWc;ZK-vquQ+t9+V1cENu!JWcj=?PYstIpfmu!E?VGt+# zmJnF(1Kl+Rctb~;?CtT`jjwh1c_(L7ipwr?xjjDY)oHeIChfHWn`Y_gpZ53n8`U6@ zulqP>FD+K@D(Z0Gv&;_3aY>w!@UK@d?R{iQ9vrykebbL0wGedAyt17rR?&nn!TQ6c zlgko&VD%O4_~+f~FprLbGB3$5(r1qgovL5ihM1bxu-C)X(@z%C2i{f=pa(tcxrk3T zh+i^S7i+`i_es&{DX{j87`Y%_Hqxl3x0tQpvjTrE0v7Z6pQ3%%;{5jX83{P*h@rBf z+UGSGNORy|ArgCB9}kaYzhFld^+hE1z8}@5Ep%d!)G)C6hd_{lT*Nc7%o2&;<@y-) zbDwa>?W(kx^pUsXvX^=}gt%yZ=wk}bmLJBs5}j%Eq@FY(a3iF%oM^vDp{$|7PaGtE zl1`XCLKuBUce8@$F8>W<@W#^(y=|5v!m|)#Sm`k0@awYP@)08%elZl(NYsd^h_OND z_Qfd3U+~`YJ%4NMPe;xhJ)V6hp6hoEUT-eM9E9=>ks!FsE^bP0jM>Ys{E*YyJRI&+ zlR6^y6G+v|_SCkVqYGbPJr2X1e)((+PZCldddF^?kJsZSWc}2o1Z>93VffjmmG3)y z9JmE9FWfWi>O@`xoCs#5LFZewTYP8o%Eiu{l~6V7mk;-Q93@hM<)E|^=1xA;rg>j( z|J;jrH+cOcV0>ox$~D}M$0_@XQbKS0w!+6Qe##{{_HiY1o#Ds-z*sl^#m78-7G zTm$Zsv)_GLDY*S4Rj7i!)@Xt~i1)6OjiREUsc7u6t@brGNB`U~3FiU^-W1H1yN zY&;k4dI|_=0=ndL;A={RW+o;a(IbY<0ZraCe2f zIY83Uiu)qlA=G$pXy1Y0+ASm^(BL8^f_zlpXSNpcoj>%ch0{n4<+%PQN-~FgLK9-urn8)yE0`qG1`HtNxW~*dDva3!za@FC{i{aF7z_%I4Eq{ z8AFNqg^32CvOB;Vdz8&7DZf=l{z3v-2hz`aOCzZvH*6IyXqqPn7t^QjN#N@smo$Bz zNUk5el8)h?kqUJISir(L0bZVP_g*a|oq6$g@1}aYQ!YhMWC7T!k^%_$4qM*%wdIsN44V=J_i209T8Z z#9`Y?dW+5`IqnDZ zt{|Djkf_Xi9M9VBv2w2%AhGt%d>qqE0X(uKxG-*sGaA4sX?LRDTVap7w!+`LUvqHg z{j{|k9c3Os)relK{IoQ%x=mku2SJ# z=_0cY4x!Phw_byiPPf?^>*7Sha}JNU@|F|Z=t@z8q)?3e!xY6-+a)E9&0?a^bCf5m z8GCNhNz)@)Xk%;1Az+Eja4tms7-fyrv&renHfAk~3yiy}^iFPKcTPVoiEzH2vLU~z z<{3I+?r;>foy?2tof27g*8t;ZyR0PeEavGN2AwmO0-NRuSgZ26J9vpljyR*2hy1tjcVW@&h5oDI=^EL7{_}-+Oz5L^ zhZHOOw_do%ho)`@!h(2v#5~g^N9mxhCUPNRfReW`NJZILj`d`cpZL)%3>Ppdgp9@|dK_(~$t<|rw+Cs(`6%w|=3lDUV0Nix zjk?u<26u0t-U$9)KBQO3Fv^j8NU8s>JAw8AM3{ryzE7WW79-62hL=RIms0mg$LQE( zUBqCsklxd3#<35Q6JE1b`LlT%?^vrjyehqHYGmq1A&nC^|5)qYt8LLO7-k#TLs9*e zy+d(-Y5s{X$IZChAU!`-S>S+$?jUVDFY92AMC&NJ#K*!}O7#px(ZHy_%No*&mkx;j z8>EMQ%NkX=Nc1wE5I?yIg4(4fdJ2JN9S83{4fy_@Ka{C7v3)ZY|D ztR#>c9#t-U{>!-meD{8`vjBGHIyHX@gt6&OMPMSKDR?| zv8h#93%X;fn7IeMHmS5wEB4j;jGS}xh?%1!o|%wXUVeH3)ED(%j-C)X%aGdQ-MCyZ z2;}?2osWi=ZX~Em=ABFF8y;{ET-w&kw4fEiRc~2M;s$Q;EJ0Ry>Hwy>$ zJ!r~|$%h3cF714P+wq4PtweNVHkj|VnP!0#eW^5O-u;uSr~$2h>V+`l+Y7yuSQnBi z3Q&P8*_Y>=Tce$eTH1cw?^BcXi0`&kPtxCft&*ckuQ%6aUz>B$yjiX6?aGZC5HY#g zT2$CyG<~qfKU-t_h%2P<139WyD%^o?+97;($6DEVT1h%&)~Jh|`!ENz3-Ws&y!RSS zhO%yY)(#1(m-FQrZOH~yD)^`l^=0X2dg|R`p{7y5Zt{iysS%B z$lB^9NdP<3ERR?bMt#<`q08JHhOIrqW=e2)+Sx7WJ$41Hwdyz@mJg>uOhtOJ)Y|A= zn~lv$;%&^&v~(|I(TC-Ys=&6;Kz%!7mH97k{UN)PY*O3V=T1W&TT2owN<7dx8dWcY zOZ7=+Rh9u8XtQE*o{tP`7=?g4PkIk>Njd3}jbH2cM7K^=BpFGjTy4LC&ZaALnjjmi z-8KwpcZQgjzUXV`{F(V>oTx*ngGuf539>4-ktNg0+Dc2r%zQr+vebz0Pho7UXEW)> z*gUXS*zT4GK>^*8rvl%L3$!&qh=*#IHdXXeQtV?jVGPb^k>S|hw6$zHoKd0a$7tj= zKu2ij@*JMs62^ii7aRz9B{%27n^6K;^>t?{R>(FO&c&}MhVa8#t~|PmKZ`#|L_Qrj z)XtdG*5LH7*gB&VwtU`6S8a6#;Z^<{NT(}HCj3}KPhu(&jX@82G%GB?&PIIVYhero z=-jLKO>;g~aZ%}V@^%~G&OHFSNS;jzH&y5i2@FU!Q2I5eQ7gRM-cz zHAB1eo4{8&&t_&V-Ii2vkiA5`%W}=*RYjXso3g~m?r%Ux-k_tMFWd`dO-!ws;A%Wu zIN@2P>}buMt~EG_%f_ArZU{zYs;F@4=D^7s@^8YRiF7E811#_QQz87Au7Xf<+O{&ND`&Lo&Au4K)aDwOlygJ9zlR&{#uhm4@;obtjXasE}Z-I z84*nf1E@&lLoz&BzWIlOZr9^DWzDW;7rsB$Vj%{QM11|mshb1;wV<_w9kX`8)%|z%#TLtWszOrdRs6P+nZZ zo3RDf6B4iZ>v&G6Qj7dJ_0Xkb3Nf>yI`vEaLuaCJDXo?M(rZwN68Rui62wYUCFps? zDqgBTPGITo@)yIo7k2`q!7VxoE;Vs6oz-qlZYc;b*KkLID<5yaG@v^L5e9NrJ3hNX zypXJ6r}+Xm_L@X&D$(#23kmbRId+!v_p3$HBO#xTGIWy1n?gn}uQ3papzLRJIvR7? ztsZRi6&Vih)BgodVQ3vC4SRXVu%-%f?#PuQA3 zCF38GE3ZL|eTl^8Ty__;p4+3o)L+-zOOAvI|IR-GF#Xv41gT!|P4QpzO)ZYZCJ0Rk zxNGU&ZtX*k$gsfS6vNJ2tz02o=S{2alRjuT|YTWY?tl74k58p4tV->}~ytcL#bW2iPeXI7%`aV#wT zw(F)mn+I4Q5%r}RdjRd|Ek;t-OiG-@cg^ac+_ATd*Sqf~g%!U#|EPVp`NQs-#Lcj7 z)15#4S{|+GL}19ud9$JJ%H5zctPW#+GllVFKjB8lY)SVxKsuS|ZnOtK!LIu4@aRy& zi>Hw3vP5F6eJo)fj!xASDqq)lVFsopsSr-LU@BqDP395-Ype8}jJqi4$<(Xk03BbQ zZx`LUjaHg1B?;8p#|XV;2~V|mzO;jZBa6N>4mYfK2A0CtZKmA&n(f>ZzH2Iy^+|SK z$5#gqp?^$S`RimbBSg!SV>ZvTroN5%3+PKWLB95FS>AcXnzqMC3l}cj++C6aLZAz55DwZ)s>`7N$nKw zps9YYD$QDfO0Rc^Ha$k%DWF;Dr;{du}eE{eDvBZ9goqiz{TK{<}&3aP)np-oNXT##2Z(x6s*^oKi2 zw8EhL%k)aBqzWNCa^-{>?w2qAIQ*QJ1!k_KRpz7;mr=XA_nRhBt!H7L?W=pKvn;=X zQu1wkya90YGLE$6QU93=B2OOp^ z3(q#^7Uo?>uzwoFWNnvP-^N(3vkd`fP&+d?Jsk1{Oiu&`d28?)lxcdM86hP}<6J#* zmg7!FCq4%q1V@ctUF-YvhqbO&;oDj66v>W88u_1%Dxin6?F`Eiw|>m(elEITo#S=| z3x4mvYm_^+KdOf-t^6^{eS1a-2d?zV{!IP{Y3FXR={sW1In5^%mT-6M$m*>WVa)3NEhHd@DThmHoth@2PSFEHfx!qH(R zzJSVojT3Vyo*T5*IFIbE-CSK9P8XSBAt-)L{{Yh?keHsxJ3%!%IxTxSdi%bMR}%_O z6E0HhgG!QroincwXQQ(&uX2Eb60W!KCdfue{jz6A*ZBO6XC)m;)e~@KzVUad-;cWk z`{N8VMd8S7Ur@y+XyC9A63*+~_Hw;X#e&dWL(f8;J&)dCO+7-2tPkfttY_RC z6<;7AvHJMGy>SjtCwtzh6#aCKMn3omiyC{WN%+cY-%Z!pov|1JKUIs@-u|sVlZ9l{ z&IZ-q<_(d)&!^01za~m146<9Cj4P6Fq@$3OuT(JB(&3wX*Y~5LamW$=&r=4;Lj64R zD<+QLiPJf|>-)C(%+UUy#hps~s~-N$*yGvvR)?EU?{mzDX50e;0tNj0uVv2uvOgz3 zbXJ1Da=g&h`&BX1vb?;WG|SEZ$PEcZQ0mBI(z>4(-uN&1dvX0`CRdZqPq7aGEp zCcNO5+2(!bPpgsE+izxPmh|jNYOXFgd$RGFVu0C&`wVZP7a2OlvCQ#avUcIyx=XRA zmvt=jPRftSUA`rvyydIOwd@7|75DsLXELl~s>~_muix+J1Pp0e>*GH-S(5&+d^%!R z7xOFN1(Vy<;AW3<8F9Ek z>`8a!Y`$Oe7JMK1pKLt)LGnME$p&>!6-R2XXY)-JHY?6)w|Ji{dHZMQ?&{+3^*`Bu zI5VX(|6#pg0}n-TMgx~?DJ)%k4o}+Txp`InE$I`{Z`${Mdy%_-PS)M``%6|{SU=ez za$&vm7k+58vaM(Ews+cRJ&lhQ?8&5fs}}ozicF2mCG8t+{`_tG!1L+jW4V>DFDy%6 rzT?$bcc*nzE`!rQ1`)7==|5xCml}g|b6#QK)=LIYS3j3^P6 Date: Tue, 12 Oct 2021 08:43:03 +0200 Subject: [PATCH 02/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Michal Vala --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index a012ccec..457797e1 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -11,7 +11,7 @@ slug: /@mario.loriedo/devfile-v2-and-the-devworkspace-operator-p1 ![Locally trusted certs]({{ site.url }}{{ site.baseurl }}/assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png) -With version [2.28 of Che](https://github.com/eclipse/che/releases/tag/7.28.0) we have introduced a workspace engine, [the DevWorkspace Operator](https://github.com/devfile/devworkspace-operator), that supports v2 of the Devfile specification. Although the default engine is still the che-server we plan to replace it with the DevWorkspace in the next few months. +With version [7.28 of Che](https://github.com/eclipse/che/releases/tag/7.28.0) we have introduced a workspace engine, [the DevWorkspace Operator](https://github.com/devfile/devworkspace-operator), that supports v2 of the Devfile specification. Although the default engine is still the che-server we plan to replace it with the DevWorkspace in the next few months. Switching to the DevWorkspace engine has some important consequences. Notably on the authentication subsystem that will be lighter and more flexible, on the workspaces network managed by a central gateway powered by [Traefik](https://github.com/traefik/traefik) and simpler configuration options for Che administrators. From 90643a4d19bada43e770690627dc0cdf19945a7b Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 08:43:20 +0200 Subject: [PATCH 03/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Michal Vala --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index 457797e1..ea3d7ce7 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -99,7 +99,7 @@ The recommended place to publish the Devfile is within the project source code. |___ .che |___ che-editor.yaml |___ che-theia-plugins.yaml - |___ .vsocode + |___ .vscode |___ extensions.json ``` From 51c692eaff03d23932856f5558e53cb4f8224c94 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 09:50:02 +0200 Subject: [PATCH 04/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Michal Vala --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index ea3d7ce7..c54e7410 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -89,7 +89,7 @@ The recommended way to specify a che-theia plugin in a workspace is to include t } ``` -It is also possible to define a Che editor and its plugins inline in a Devfile attributes. But that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). +It is also possible to define a Che editor and its plugins inline in a Devfile attributes, but that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). ### The Devfile should live at the root of the git repo, not in a registry The recommended place to publish the Devfile is within the project source code. Along with the files that we have just seen above to specify che-theia plugins and the editor: From f530de593de10e2754fd77431b57f437eac21383 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 10:41:19 +0200 Subject: [PATCH 05/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Lukas Krejci --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index c54e7410..61ad1e09 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -110,7 +110,7 @@ Versioning the Devfile with the source code has two consequences: - Che source code examples include a Devfile at their root (those Devfiles used to be published in the Devfile registry) ### Only one running workspace per user -A user cannot have more than one running workspace at the time. This limitation is related to the persistent volume strategy (“common”) that is used by Che. The same Volume is mounted by every workspace of the same user. This is implemented using Pods `volumeMounts.subPath` property and guarantee that the number of Volumes mounted by Che matches the number of user. +A user cannot have more than one running workspace at a time. This limitation is related to the persistent volume strategy (“common”) that is used by Che. The same Volume is mounted by every workspace of the same user. This is implemented using Pods `volumeMounts.subPath` property and guarantees that the number of Volumes mounted by Che matches the number of users. ## Current limitations and Timeline From 8e93728fbd73b51de4073786d68a172237e54137 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 10:41:29 +0200 Subject: [PATCH 06/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Lukas Krejci --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index 61ad1e09..f8d30451 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -132,7 +132,7 @@ In this post we have described how to enable the DevWorkspace engine and reviewe In the second part of this series we are going to look at the changes from an administrator point of view: - It’s possible to deploy only one Che instance per Kubernetes cluster - Devfiles are not in the registry anymore -- Keycloak is not required anymore and Che users has to be Kubernetes users +- Keycloak is not required anymore and Che users have to be Kubernetes users - Simpler configuration: namespace, persistent volumes, network - Use of external routes not supported - Metrics From 5d48a265396a2c4bd38cfa35a74fcbe4834a4daf Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 10:42:40 +0200 Subject: [PATCH 07/10] updates after Lukas feedback Signed-off-by: Mario Loriedo --- ...0-12-devfile-v2-and-the-devworkspace-operator-p1.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index f8d30451..afa0cc9b 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -65,7 +65,7 @@ The Devfile specification has gone through the release of v2. Here are a few not - Events and parent are two new components types. - Besides Che it’s used by the OpenShift Developer Console, `odo` and the [Devfile Docker plugin](https://github.com/devfile/devfile-docker-plugin). -The documentation for Devfile v2.1 is [https://devfile.io/docs/devfile/2.1.0/](https://devfile.io/docs/devfile/2.1.0/user-guide/index.html) and a migration to v2 guide +The documentation for Devfile v2.1 is [https://devfile.io/docs/devfile/2.1.0/](https://devfile.io/docs/devfile/2.1.0/user-guide/index.html). A [migration guide from v1 to v2 of the specification](https://devfile.io/docs/devfile/2.1.0/user-guide/migrating-to-devfile-v2.html) is included. ### A new way to specify the editor and its plugins As mentioned above, version 2 of the Devfile, doesn’t include cheEditor and chePlugins component types anymore. @@ -89,7 +89,7 @@ The recommended way to specify a che-theia plugin in a workspace is to include t } ``` -It is also possible to define a Che editor and its plugins inline in a Devfile attributes, but that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). +It is also possible to define a Che editor and its plugins inline in Devfile attributes, but that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). ### The Devfile should live at the root of the git repo, not in a registry The recommended place to publish the Devfile is within the project source code. Along with the files that we have just seen above to specify che-theia plugins and the editor: @@ -103,11 +103,11 @@ The recommended place to publish the Devfile is within the project source code. |___ extensions.json ``` -The Devfile should be versioned and its version should be synchronized with the version of the source code. Having the Devfile at the root of a repository makes it possible to use a simple factory link to the repository to start the workspace. +Having the Devfile at the root of a repository makes it possible to use a simple factory link to the repository to start the workspace. For example [workspaces.openshift.com/#https://github.com/eclipse/che-docs](https://workspaces.openshift.com/#https://github.com/eclipse/che-docs) is a factory link: when a user click on it, a workspace defined by the Devfile in the repo [github.com/eclipse/che-docs](https://github.com/eclipse/che-docs) will be started on the public Che instance hosted by Red Hat at workspaces.openshift.com. -Versioning the Devfile with the source code has two consequences: +Recommending to colocate and evolve a v2 Devfile with the source code has two consequences: - the `project` section of a Devfile can be omitted: it’s implicitly set to the git repo where the Devfile lives -- Che source code examples include a Devfile at their root (those Devfiles used to be published in the Devfile registry) +- Che samples will include a Devfile at their root (those Devfiles used to be published in the Devfile registry) ### Only one running workspace per user A user cannot have more than one running workspace at a time. This limitation is related to the persistent volume strategy (“common”) that is used by Che. The same Volume is mounted by every workspace of the same user. This is implemented using Pods `volumeMounts.subPath` property and guarantees that the number of Volumes mounted by Che matches the number of users. From 65fc2b5263f54b0d1d6fb7f7e6a552ba46965a0d Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 17:04:46 +0200 Subject: [PATCH 08/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Florent BENOIT --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index afa0cc9b..af0ea319 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -11,7 +11,7 @@ slug: /@mario.loriedo/devfile-v2-and-the-devworkspace-operator-p1 ![Locally trusted certs]({{ site.url }}{{ site.baseurl }}/assets/img/devfile-v2-and-the-devworkspace-operator-part1/che-workspace-engines.png) -With version [7.28 of Che](https://github.com/eclipse/che/releases/tag/7.28.0) we have introduced a workspace engine, [the DevWorkspace Operator](https://github.com/devfile/devworkspace-operator), that supports v2 of the Devfile specification. Although the default engine is still the che-server we plan to replace it with the DevWorkspace in the next few months. +With version [7.28 of Che](https://github.com/eclipse/che/releases/tag/7.28.0) we have introduced a new workspace engine, [the DevWorkspace Operator](https://github.com/devfile/devworkspace-operator), that supports v2 of the Devfile specification. Although the default engine is still the che-server we plan to replace it with the DevWorkspace in the next few months. Switching to the DevWorkspace engine has some important consequences. Notably on the authentication subsystem that will be lighter and more flexible, on the workspaces network managed by a central gateway powered by [Traefik](https://github.com/traefik/traefik) and simpler configuration options for Che administrators. From 917a319f4ad78070b2a59765645edbb8a868584e Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Tue, 12 Oct 2021 17:04:57 +0200 Subject: [PATCH 09/10] Update _posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md Co-authored-by: Florent BENOIT --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index af0ea319..836cdedf 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -21,7 +21,7 @@ This is the first of a series of three articles reviewing the changes introduced Che default workspace engine is the che-server. The DevWorkspace engine needs to be explicitly enabled. The following [chectl](https://github.com/che-incubator/chectl) command deploys Che on OpenShift configured with the DevWorkspace Operator as workspace engine: ```bash -chectl server:deploy --installer=olm -p openshift \ +chectl server:deploy -p openshift \ --workspace-engine=dev-workspace ``` From 5e2159208540a086c0d5d3e46f79d2e5bbb75ca7 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Wed, 13 Oct 2021 15:07:05 +0200 Subject: [PATCH 10/10] Updates after Florent feedback Signed-off-by: Mario Loriedo --- .../2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md index 836cdedf..04c46fe4 100644 --- a/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md +++ b/_posts/2021-10-12-devfile-v2-and-the-devworkspace-operator-p1.md @@ -62,7 +62,7 @@ The Devfile specification has gone through the release of v2. Here are a few not - It is compatible with the specification of a Kubernetes API. The DevWorkspace CRD is an extension of the Kubernetes API and it’s generated from the Devfile specification. - It removes [chePlugin and cheEditor component types](https://github.com/eclipse/che/issues/18669). - It introduces the volume component type. -- Events and parent are two new components types. +- Events and parent are two new top level devfile properties. - Besides Che it’s used by the OpenShift Developer Console, `odo` and the [Devfile Docker plugin](https://github.com/devfile/devfile-docker-plugin). The documentation for Devfile v2.1 is [https://devfile.io/docs/devfile/2.1.0/](https://devfile.io/docs/devfile/2.1.0/user-guide/index.html). A [migration guide from v1 to v2 of the specification](https://devfile.io/docs/devfile/2.1.0/user-guide/migrating-to-devfile-v2.html) is included. @@ -89,7 +89,7 @@ The recommended way to specify a che-theia plugin in a workspace is to include t } ``` -It is also possible to define a Che editor and its plugins inline in Devfile attributes, but that’s not recommended. More informations can be found at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). +It is also possible to define a Che editor and its plugins inline in Devfile attributes, but that’s recommended only when it is not possible to colocate the devile with the source code. More informations about IDEs plugins with v2 of the Devfile can be found [in this blog post](https://che.eclipseprojects.io/2021/06/23/@florent.benoit-devfile-v2-and-ide-plug-ins.html) and at [https://github.com/eclipse/che/issues/18669](https://github.com/eclipse/che/issues/18669). ### The Devfile should live at the root of the git repo, not in a registry The recommended place to publish the Devfile is within the project source code. Along with the files that we have just seen above to specify che-theia plugins and the editor: