From d6aa1f42573e5a8bd4e73213da3f181895684a31 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 27 Jul 2016 23:07:13 -0700 Subject: [PATCH] Update frontend build instructions --- source/developers/frontend.markdown | 24 +++++++----------- source/developers/frontend_add_card.markdown | 9 +++---- .../frontend_add_more_info.markdown | 5 ++-- .../frontend/polymer-build-architecture.png | Bin 26057 -> 0 bytes 4 files changed, 15 insertions(+), 23 deletions(-) delete mode 100644 source/images/frontend/polymer-build-architecture.png diff --git a/source/developers/frontend.markdown b/source/developers/frontend.markdown index 5b1bd012b40..ab417f0850a 100644 --- a/source/developers/frontend.markdown +++ b/source/developers/frontend.markdown @@ -39,19 +39,18 @@ $ script/setup ## {% linkable_title Development %} -While you are developing, you need to have webpack running to have your JavaScript changes be made available. +While you are developing, you need to have Rollup running to have your JavaScript changes be made available. ```bash $ cd homeassistant/components/frontend/www_static/home-assistant-polymer $ npm run js_dev ``` -The source code for the frontend can be found in two different directories: +The source code for the frontend can be found in three different directories: - UI: `homeassistant/components/frontend/www_static/home-assistant-polymer/src/` - - Core: `homeassistant/components/frontend/www_static/home-assistant-polymer/node_modules/home-assistant-js/src/` - -After your changes have been accepted into the home-assistant-js repository, you'll have to update Home Assistant Polymer to use the latest version of it. This can be done by updating `package.json`. Look for the line that contains home-assistant-js and update the SHA to the SHA of the last commit. + - Core: `homeassistant/components/frontend/www_static/home-assistant-polymer/home-assistant-js/src/` + - Panels: `homeassistant/components/frontend/www_static/home-assistant-polymer/panels/` # {% linkable_title Building the Polymer frontend %} @@ -59,15 +58,10 @@ Building a new version of the frontend is as simple as running `script/build_fro * **home-assistant-polymer**: Install NPM dependencies. * **home-assistant-polymer**: start frontend build. - * Compile all used JavaScript to `_app_compiled.js`. + * Compile all used JavaScript. * Install Bower dependencies. - * Vulcanize all Webcomponents to `frontend.vulcan.html`. - * Minify `frontend.vulcan.html` and save it as `frontend.html`. + * Vulcanize and minify the core and panel sources to build dir. * Copy the webcomponents polyfill `webcomponents-lite.min.js` from **home-assistant-polymer** to `components/frontend/www_static/webcomponents-lite.min.js`. - * Copy the final frontend build `frontend.html` from **home-assistant-polymer** to `components/frontend/www_static/frontend/`. - * Generate MD5 hash of `frontend.html` to signal caches to redownload the UI. - -

-Polymer build architecture diagram -Polymer build architecture diagram -

+ * Copy the final frontend build `frontend.html` and panel sources from **home-assistant-polymer** to `components/frontend/www_static/frontend/`. + * Generate MD5 hashes of core and panel sources. + * Create gzip versions of all the sources. diff --git a/source/developers/frontend_add_card.markdown b/source/developers/frontend_add_card.markdown index 8f39ed3232e..2deba80dbc3 100644 --- a/source/developers/frontend_add_card.markdown +++ b/source/developers/frontend_add_card.markdown @@ -19,11 +19,10 @@ Sensors, when not [grouped](/components/group/), are shown as so-called badges o ![Badges in the frontend](/images/frontend/frontend-badges.png) -The different badges are located in the file [`/src/components/entity/ha-state-label-badge.js`](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/components/entity/ha-state-label-badge.js). +The different badges are located in the file [`/src/components/entity/ha-state-label-badge.html`](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/components/entity/ha-state-label-badge.html). Adding a custom card type can be done with a few simple steps. For this example we will add a new state card for the domain `camera`: - 1. Add `'camera'` to the array `DOMAINS_WITH_CARD` in the file [/util/state-card-type.js](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/state-card-type.js#L3-L4). - 2. Create the files `state-card-camera.html` and `state-card-camera.js` in the folder [/state-summary/](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/state-summary). - 3. Add `require('./state-card-camera')` to [state-card-content.js](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/state-summary/state-card-content.js). - 4. Add `` to [state-card-content.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/state-summary/state-card-content.html). \ No newline at end of file + 1. Add `'camera'` to the array `DOMAINS_WITH_CARD` in the file [/util/hass-util.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/hass-util.html#L11). + 2. Create the files `state-card-camera.html` in the folder [/state-summary/](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/state-summary). + 4. Add `` to [state-card-content.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/state-summary/state-card-content.html). diff --git a/source/developers/frontend_add_more_info.markdown b/source/developers/frontend_add_more_info.markdown index 38686a8172d..2364c5b3129 100644 --- a/source/developers/frontend_add_more_info.markdown +++ b/source/developers/frontend_add_more_info.markdown @@ -18,7 +18,6 @@ Whenever the user taps or clicks on one of the cards, a more info dialog will sh The instructions to add a more info dialog are very similar to adding a new card type. This example will add a new more info component for the domain `camera`: - 1. Add `'camera'` to the array `DOMAINS_WITH_MORE_INFO` in the file [util/state-more-info-type.js](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/state-more-info-type.js#L1). - 2. Create the files `more-info-camera.html` and `more-info-camera.js` in the folder [/more-infos](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/more-infos). - 3. Add `require('./more-info-camera')` to [more-info-content.js](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/more-infos/more-info-content.js) + 1. Add `'camera'` to the array `DOMAINS_WITH_MORE_INFO` in the file [util/hass-util.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/hass-util.html#L24). + 2. Create the files `more-info-camera.html` in the folder [/more-infos](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/more-infos). 4. Add `` to [more-info-content.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/more-infos/more-info-content.html) diff --git a/source/images/frontend/polymer-build-architecture.png b/source/images/frontend/polymer-build-architecture.png deleted file mode 100644 index 000e8b5d461d6899b8624b6960be23ef3e0436fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26057 zcmb5VXIN8R*DjjSi-3w0sg~CQ2&hO6#quahwa}yn5fPAH0)`NZSP+5@P>`ZX7YMy3 zp-Ge~JxB>Xlt8En5JL6}KJWg{+1LJY&W{9E)|_k2GRi&fG3Kk=Ci((=5_}*KNZ{7Z zf9`@nU@8d2CdtDE{Bm@t4gmr=zq$3#6|MK23g6pL;#Us8yBcZ!{>>5V_wP6k{*!)HSbpxZ^O46_ zIDfd^juuxBSid==TPC3xkTZTv83zpqdS=&7W5O1?i==&byrwo7R;H) zN8;}?9?M3x3_-fQ?ABj(Jx)@KsF=~gNrmAWPZ-MeixKo_bXvI}bLy6H?~UJKwNOg~ z-aunvvVmMfp=;9Lt6q-Uy9Q|Yq|=1>yAgK#SN~tyq<{%&^iE=BA-$lhe5{sXY3*f8 zOS6_7+o28w%hr?yFlCuTKgHhBLn)~P+@XlU4GKgysEk1$C+;@=?in8qc}Ux|Ym(B~ zN(rp_Mm#brv^U)~?6{RkZ2m>D7j?y#I({4cAlM}{aiTz@r8LH1%ttvOcr(@uQORh> ztrWs4arjE?R7z>;b+kez2V9I@RF7IC>m_yxgdlM%d8U*vkq6?iPo3#j%IS*bcgFqF zoWE>mBeyHB8AcjIKt`44%_43lZX`FpQ4Zca=+cijfxZpodN!b6MDHk!PvH@BUDe&{ zV7>UqqqD*Gh?y_=Y@AM*i8zSaq+qcTf{U<|Dc!7Hl~@ zrNRGj{?7K=9(}9$AJ^*H)F>Y|dOB%pXlzAAZ@9BG%l~I3XyR%Z<44AsKV5C=7md)& zewu?TW-oi}w>9H^k(bWSMx{#>V)h5ly@0u0S=N+D%wugA^Q(sR=bSbk$00aJ~Y7Abzz$^Kt$rDHVGCv^9wI%m` z?R?o<`0kE7%SQe={L=UwpHQjr@)(p@Gx33L?bv%%tKVjC`%YwHPmdT)VN2jHP`W%c1t1f?6_SP0t37=YfO_D1cYaeN2foSpb*H;8X5*5!D*J?ddm3HS-7 zek@Laom|##2nzv;DYu~;OrCy=yKY$z=xmzq^Ua03^W5ZVce9PWCo9LcjZWR&7v{+B zXqh8q*a*#=o|Np#nEdQlRqppje?lZ(=(Ppx{)P0F&WWMvcbS{1dQQsdUbb)jDYcZQ z2OCIx@YWw;;%8x0v=I)z&-<_OKfa*I}jx z$*jFJaQN1s8fkHiHSzmlDOca4!%B#3a)qvW2h4IQHN(d$4mXe1+Yi2wV*lPaGs;hH zzQwOM*`*kEh43<4@M6`Reus#xCv8MJPW>65jh*e(WVDw=lqu(h#utfym9v9qs>j@3 z{fq?dlG5rAF1Yl6T<-|+1!lcaE&tjSH6lR%EO{M`4+$7qoi<%QepD4bbwSR>;sZ4M z-Ov)_5O<_nZVqo?<_BnzE9XRo^O$$v`f!@@7WHK>SjJ(44tyB&jNO z%e8|fBHRM{z(4*>0ohkCGsTe;;<)`JJcg$W(8lsqG#7#n%V7WTx{w&0P&1 zjwW#jo&E{$+xImP5D^utojM-8<*L=P*XeY{6jehKu7o<*y6yO-c3UMWOHka z53OwT%@|)Hh6ya=x?o+n3JG*R5;V2_btX;dZ1dt}4eO+CF}*x!S7Kbp;9V~^NWo5) z>b#hnB6Vf=4R@Ulw&>%4h0+b-NCmL&_7$rvX$+H>-_<#g;k{>lvVok6*KFw z)|?2Pk<}T7YB(kdf2qz?*+qV`-B1tUaOg*a!w1`^{(q%Oyts z>!uJNs0)u&HLj%ZOGO$8a9@CRWH~j!D4!yz{vR$*nEdb0tmoBc{a+d>f(S#)hpXI^ z)SkAOL;|h*ivlfmDrWmGc|3fQeLdlBoq5Hm~Zt3uA`OH4w{%E<{j=^-m zr5isFG#bj4vsui)4Y>Cf2byKd-cJOU4{-Nxby1Rg|FF?l#I;EL%;HZS4Jb{#$wr9hWW|)?>2jCz&*C5VU&>Av=pFm z)b07_LiD%|3WL1`=2YWp$sQ8Ew?0(7n2&PDax4${@9xMz&!i-l&~@*2EWL1%F$L>SVu(orYdCKS6?d5Q;OTf$r^ZesFA|QNjB^4b@}`LfYi8MHnW=%SJ2IlAW;V zZysAYHI~H3_U99dNY2gyc2xY&`|^uIr+-SFwN9($j#-cRS{^-+=|mHCB=J*U=glr@ zs9UNOGU8QbUWnXxN5a8W9aTroJ!l$~_*P!EOH_nI{?ZG{Ld~(6&j1=!^;*h*UJBcc z=E$#8*125cd=rYR{=#Xi8kV{^N7Vgby-~o09@K&3phUC&+JQkcl~IWR#!B|#Eno?A z-*P}|6n~T-XXw65w+7aNzQX}OFbnwv4Y7QRO@48JI(JPkRmX3>K*KhGXm17pP>K6! zukVj`P?Z*&p3B-DzB|L6GEkv|gG=QY1+a8_s>x+LyJyvoFQM51dw1P}z1)LjKf}LF zjMTWHe>??bJ@+~{Jbql?kkQFe(XZ;rhMqZ6Ui&mmC*2N(<$i;|ThqOOD>&WGe~k^| zqmzQN>zlEY%2}vAp_WDRJ_P|p{-h8!Y({}o+|Q%%QP!vKow2v+p>+#7qf3PcYLef( zjQ{$6O7`Tm>9?T4Y|+j4{q44Eb}l?rNdBkp4NLP5CF&efFSXIbNF+Rimpr_?3k)e% zi(q*=hqk~^Oo@6e@K}usri$dMhRWAc|51gz)bQsG@vnR~c{6smBeg}%0WJIesj1k3 zw~wlC3qoPR*1(XQz|<=WV4J*##H3hv^)va4`Sx$E+ne?H_#3_(i==FZ`T{a^S_Ht& znSjCkpKq4Y0nF0>{hNiWN$2rRsV`+A}=v1XZy_)%`ocB z-#73hS2~z_f3(RjLUVRtOiIqo*NWjCatf)kaJ$*1>`;XwWqaoAH}V7VVy2#$XQ6fF zZjxGF1w%2O3F})^_^A6|obT~Wpvp!gc9xm;qVT(QL6KXATm2{#0s#C7JKn&C!Vl0v zj#}0S!1^q+2*d)w&tumVvY&K)(9v|pXOVCAf8q=3|4<-4sb2P|RmNzwQ(xh(6ytHq z-);!a2!t`4=0u$7P{YHbZ%$pNLwUy$*B0-67V4a`zKqD}a;eeNiTtDJGH7ZSqT7qqB5n(QFK$wA6I7LWQAjD-QJbk}NZ~lN8@eVb2iz=F%(4`D2 zVoMA|nmFh+A58S@Bl;ukSgp$eC~bHz(6@C!?KAORdXoG42OXOLi^`KJ_kJ;?mFNZL z*+rr7ydwu^z1e1p8`FS%6Pv3c!&pteh?Z57=QV~F zy;fG6yRXM#8Db0fyJp#BI7FGsy;_nt=c{poHPSW-a($)^!3#m*UOErcU3pAbXHsiL zwFY&8Fd`d?Tzcgdh)FbEW;A{;Lz@!UYL}cM5Y|;Y<;Ee*7n+nQ+d;E`hzW(5;?tdy32bD2uci9gNtk(o-?k#4ihZ1q799r+7y(*RE3&v#eNqW1gna4YTXKg%t5)B%p{&KaULQYpoI>RxtX)FfAEd0NQb)ZH-?<}K1FaqFymd( zxY_a|55`=+Wd#;7o#xg%v_4PtWUNGsL|~4N(cMPIt38c^H4(y zbvgOgxbRk9dAxhkI*z6VKevJJI3)82%;AcGiW ziQAYufyNlqDd^YR-m!-50->aa^bPc&o3rn&G&hhaqvyptNGL)pFnvop`p%*a2~54$ zKT^GHn&m$r0485(#oCIyxKBjuUnoL)tjeGiMG5nUUdUv-9aLOMpeOTU!9$dX?QnJI zsHy+Xv|*wS9OWk~6!P%&xdLW(;ZhJt7ugUqj2wQR7ci%yGUzKk*h@n$L$n+RzUNt6 zdL^d_BK5UK>-QRCQ~25!2HU^k#UpBpxq_5=Uc8l|DG=h5E~D2e+{(3I2c((Zi=m~P zJ84gw{Pk*~Mg773?I9a3_uBknZU}w7je`3@S*a;TpqP1AbwFi5XDjGtWnaKN(f5r{ zR2buY=5UkvpwihhE(>0#THZ)|m>O=(yP`ey>d5jx6F)RkE_eEke%uRnF0PkBOL5$+ znhQVSI^KfwvgBT9E~f@aqi+!AO1a<267Q6IYE{0MVQjPPvSetDU(BLr%Vu+0WSmo2 z3h9e`n19ZH&fhE~>QY?_7n{2}l=V|=&QBkKx$iz9Gy%19wgw476EIHIKkU@2OgxO8JCshkb z$g_-c2+y0x&VJHi-~BAv$=ab|J3ZJT#ns0%y=!q(X*>O$KGp-8TWecreZ4=Lorn$g zKyCK0qd6o+1Zt`{{p&#|{>Qm~xJ(#Z6%fsc9wqNHFqMB6$zo%h%U{A%8vHXMsq@~S znUQ+iehp)|2e$?{&DRb5s|T{sE+w~&mem~IPudKf+RX#^*x2}a6uAsr^(+4t76~)X z;0ZjY|GL8SymUH84EV`pwzI7z7&N`T3JNu{;a{0q-adc10~itYX3_VT(1{0e7LbB~ z)Gr6bXaJFwblFlH=lTfH4`@CnB@{ zrw!|MBe$29dJQQK?b0tGdHUSwp|J;YwR9tHQ#YMpwj-KiB9e{2yFw>lmo`nLiUEtD zLCDBN6;ImgLA|WwbR8`1(fL0(AU6yXRxbQltTy!@=i7LklDO75+P zz-gsP>K;J97kxeTMv!*ndZg2Zg2J?UPw*r8Q!&5KDD|9_vEI8th${o@bY10)@IFxU zdL|I?bixOy-gv*y)r*WU%&(*#5whEbdYNUa)#cOb;~m91BwqDSPMPjO_x56|3ee~nak5!e~oe_L^VYGsRS)KpT|k3a5+pvK?K1CJNE#=%29 z1;!dEJex|etUA7p(@oZhmNnC0 z0O4kR8SU=G8z}1Pcx1~&kJb&QpIx?0EqX`_Wg#<_+?)Er~ zO{W9r`Z(YP#U>E;;kAN?`*_7h0!@nu_M~OImro3Z-vZIUB||L%7{iTb-)KVA+uCsK zN5Tz-0vSI#v*g9hQl$I#h`J#EV>6X%+K{t<-(d4nmm0R))ZadkMJ*o27xD(4A|#WF z*b|DhH-eUe)m-NTQ@1p`w5g$2T9Q_5?{zwek#+d9!*-b$otbv%I3>c-G7BXcVZ+jr zFMRZjQeJ-dJmCsYMHqngRF%=C&~~9BtL~}=DSDQ0*D!Ir@XtDV0=q{dUOf2ofryqx zzA$+`6`xwWsJ!MUtB6)PjFAsCclu;C@S&)O&+pm&QnyFWYNCFJ1^}u4QZd4;JK7o ze5a;ja7_8I!}_1WionqE$@`>jfvxpT;!yj{XPN^cuv_?y=gvOX(l9_1L%XgmX{?AI z)Pt8!ah|16P;?njMo%rV*W@*Nx1-bB8K*NynqSinuAzl6F4wk&Um{$3e(BZvcMliS zB27~%A3YW>xZl-+v8UOjxf79344QCKZM}!c5g1nmY6M9fH{^;U zO>3Y@8l-jUSswPSRo{cMUDvB#E8`5%{M5q2pq=iaqp{LGbEcGX%@~$#RwoqGJel!o z;#2Ac^CLO{bNE=U_hL~rqA&dTZv~rC=C)JXlNXGIlct?)=g^%BeBIfy=biCtll((2>Rq=RSL1G0lzmG_daV?} z#{;CUt_>=~I_25j)2I;w$ti8+If5KU?wNs3*vZQUI30MIUnhnlLA$QV-f+(TJ`KFg zK0>F$CR3KNR;tB5&$d=JO~X3e1`Im@4M7i|;XCZ9x$LUeUEsaCC|Slvz0k3QmTK=| zZs_7p@2f<=3plJ`RdtjLxDq+KE!FbYGf2Jo# zn5JNjtXR+Hpnfbh$**}9vit|t;CpJCjcgRl?j6u_tW*jez~9%$a%8uu$?7_1Xs-e! zWA%6li{l+Z9Dr=shNsARSltT}Ep$ZDXVrQ4rKdqKN4;)yY3UBxmd>($iy=mEez9N~ zm>CxffB1yi>-CP#QL>nyaZ|brS-ltTrdmARXu}`FT{NEjNlHaA8grqz#+Zz0rdrfyH%9pkZ3C- zm6O_$bH4QnjLBy1m*H^1_L5UZIK7PCRY8zf3){G-a`xxzT407_SPESsEt!<#HUK_I zelHZ55LpntO*(h6skp!^RkP(%CAD%3yAvch_FEG(sWgIbjjT(Z(e}CP^AmjZWM{Z6`i^Zw##KZPH#V+x9-*a z&W>(3>}t9TK0CTxwwFQFiQ&7VSt4DPIM4P-o*h#I;sQhNZ9G7Qh}(&0CSFA=3!$B! zy;2=-DjZXTrE2*N6@^en(BhJfRT{Ct#IMwM_FV!Emc5ezO@*kxnULY029@paxMX{yLbSH z#PWBD_H)D@bD-zGi{kvZWw~~Jr`7`bj7)MpT15hqFAZcEH6=3+o`IK?R`WX!h0H`I z+FfuFfDPOs1wH9(JgrQYNPOX>7(Dq{SagC&Um1vRDX*UaqRa5k*gZReMc{q9M0M` zZmX8F-Ob80X{+mm)K`~Qr0DRI%NE+uL7Z#GmK?R#WTqZDUvQ+nyNq9*A6P?4m|}jU zD)kq};bZ^WETu-e(-+M?CcoJ$40ElT+E(YLV~MrdBu}>pJH@YoFJK0e{KNBS@;Tt( z+g#rQ{Cc~%$!4Nq7Ac3k1gSOjBV;#@ajaJ(d02SMC~+%SzQJA`)Usp;LxH`T*9oP{ zRDr;q)@?dw7@4Wo$>J(XMNbbAEInXxz%#lpSw2p4s_{D&lOwCrv&@?&b!4F~n{hxVGw!IRL=opdNS zVIx!JPYNHq&)E7V`w~%#38clO#L0KSjx{z$k$}i#w{|(6pJK+)gKt7sSC?{R(XIhax-t@d~Q*P@xQGfhV7` zWnTaMoC}_Q=_g)W>l4?7AW;DEWVp_JU^s9R0`Lmuw)KFBs`}(5*JMNN0m=us$kMvo z-^Cb^F4|}0Bveu?Rh1XM{`c;qrxpCHo;5A+wWfruMbP z(&?*Y{*Zf~tPyc2oJ=S@5@@4^G*2{OBf(&r%;_*1?0U4{(n~C^e12~inah%z{<#ER z0pidf|K<54Klc*Ry>(TRWwxJb=X&Ts+#KCHZP_a=4aHJL%PFqFW@wG28;a6ekI)L& z9^{+QVC>wVGLQuic;dDoCzp-i$^j zrvU^lF!GE8RCC^Xhc1+dqV>G#8J@(!5r@k_0E?ac1^~7@WJ%aT05t``4gFQwhCm~KuaZiMI z<4oz4e*O+P6lPvZUw5jkO}So`e^L3WAXREXlJViMEQq1?KhAlD>Ncp9Pm5$m=h41u2#M0}sq-us`zvuj8I_{1N4r?RwH}W9 zPY~|zH)*Ke!0(c-a%_^$jr4eJQ6LsEM&}oUAyDm4*8Pd!R%VVBbLStW!8F4Z>qC({ zwVf3rw9>3uUBL}rs$sNCbi(%Az8j?n-vRzcnC$kXUM6xR zX@qF*R^C#xp4n-rIP8@BuAWlcb75pi;WhosVIL$P%qj1jRPL z3kn`(l`k0_#GNSL%_u_XbJ0J>g}Ub%jUsS`U@9=u`IUpKNC zJ0Eh-7IJY5FSS9>A7ac8W@{)J6fnbR;a|&fy6z2ncRLO|gxGdS3*c11kRF``ZI0v~ zVz6QIB^jePD881+`%w?qsM;P5s_V+vNim-io zx{cG;B+{3C7Xo#Vif1`xep8lS|CJeD>Yam(wGD&=R8*cR44}@!zO6`BVs$^t+_zt+ z_N#>ed$^xc1)Lbr^>2RR|9loJ&AspBf&8ozLDBoaEk#Wr_fn0brEe047{XNB;a#(R zFtCtmnD%xZ7H{+gM=vODEVUb(xt4A$t)nM|ZiO^I7M zHZL|04CGDD{uc}UKhqn={{#@{;6k@);U3u!($8=G$LBQa0tD-c% zBXDQP2Ny&6sA;mhSl(N?ZU!=Wl7@j_*{Z? z1Fho%Tm$s;8AQoKM1yFp1SeYM1;)l!nK<@IuyQ`O(HbBlH2+ux+^D7vTT}Yo^mLu` z5e06?8%+2mkClG4J@tLjBRD`!i*{)5pJKa=kMH9Rf#G{8+bb8=H*;KL*7E_ zIcUB#Q9MSVV85@A&P;e0`Nf3$_{2CnX$Edq?1XMas{403geIVY85oQ9#eGYl>unBM zE88qFJz6U)qzCs_{mI30HWTg^{9vm07nS%W)N2T1#wN6oT{2yE!Xz|v>Jdrf}9k^$kRF%qF z%8V1g@;$i9$DWiTpjP5E=fW5BYd5b|<#TdFS{|sh-@|8)xnp2q%pR->fuy&zvjPMp zGvG}}16GrLjaYcizWF;Luhb{TdtVJQTcj4gcr^aaCMF%oQE&K*mg*Q7i}$g#7y$gLj<>~@-OfT?atR8=;rk(3+V}{S&+b}Xwt<~GJKYUX zYOX_pbtUp<4xp3Ip1$wQe>9K{^f-oQzu#C)FbWpj%A(|L_LX;#hSCtfQ>H3#*Z($E zxBJgXe@OivOGkeDDtCd2g#M)@T89oRx6sx#P(I5F4-9gERpNkhw}wgHOvHy%$7rx) zww2Nfi)~)Rw`IMGmhAk{G@A=^XGV^-4XgbaG}SuSU{l$a0=3K&Dz`3BHys)l{UZY> z7d!0zaM=C9T=MXO+q_0@W5nkLdv({|#@XrxFqxeyA>-__TPdfiUZ`*XK#37DoCUwN z#X44{mX9~hgie>Lkc22H!#&*oVQx!{k8HO93*sidW28eEGDg|W@ZfQ_HjVE_CzV1i zv)8U@sHHc+-!vuS=I_3&%6W4T`AI4MVB@OE0HfI`x1ExGZ%Lzpad@@{5Uenj~aWmZh97 zOCNhUY*`U>Dpe{Jba>16vjMwfxcXp8zAZNMT-Yh8->0NV`DMwrW~am4zqPIVriCS6 zN~JfG{a?lLfmVxW$Svh5?yFYbMcQJ6!l*?jN$bf|QX>{cxu4{NANUQp>rHf+p}@@cdUk{%rLI!qEOKl z8KrTPs7UxM<#7OM-WOS4W29d6u(?#2+AQXR;{KV@FN1R}AlY+1;<^p~N&M^10?WTa zxy{P7l=br0lLuUQpLR|NW_x`imOXX-f)BQCvt_^Cw&lw3Q>y2Ms$+aSH7=*YxpEHn zMV*vM@5KCm>M2p5XbCzo>iZoucqofQMTxe{;3TX{^aVJtc+U2clnDJLoOG2g?cP6F z1pGBJdE@srq4Fjv-H<9qGLBvxhuoc7TB#(4(l?4T^yAdB{N{dtnfHDx%3MpyF_6aR@O+?M ze)=rqM7`Hur-G0%`|1K0)p5i@a4M^NYodk1P2PscDX0dJfUOsRa{pOkKD@_Nn@_Ou zoIfJNEi@2;VC-xzttYE{6>`$!E$uaRj?J#8F+-fREFBP={#7?$BZs4!%%s-uj1V>4 z76%Hp{rIUDI3bLQ?#Y%J6QbYzpIPmU=_W=>ktu)JRXSspE3FTaj%2e%xvUWE>jRa z-s$(bFuY{VhfF9Q`1StGFw#$Y;%3IJXNbLR((pu8MV~@Z-9^Oi&$lO+&^|FF?AGM# zVI*^1kGZY_=nyY;t`~J^wrZqpz5c^_PzeXJ3e%SPAY7U;9i}|{(N70=bTjourfiyq z_?s559n8F5T!a5iG;HG+p12(pHV272v;rOhsuXQ=UKl)&Bz=(ZLH9b0Or!7urta7n zcS2#%^FuF5i1Bdltfuewn5P4(ggpiwwmJD)t_5K7%0q+OXR9w_v0>K4m zekd1hwyFCJ=ZiNNPb{oU5T!mny*|gKXOjV z3u-g?B8@g9JQyPOdOo|SNoU1qW4Nm_p2dB2)uR+X;}*|Z7dC+)mz76X6CFZ>B_jfS z6ps+*@txN{)^x82K#LX)c%XhbGl?xp7}72c8NbuHPAW+D1kyEhU$hk2lP#m~U;|bh zLH;r#E$g|ZjF>lk%}2c(8HQQ5o1t8I5z_k@wyc1(=jsFyx)KY-JMmISq?vOWaTTKj z7t)`MG<2^2K11x|^J0UKz6=K1Bt~917Pq$@qJscH9u9cIe*h&I|ROXV>hZ*|NIhHWK_l&YdQJl^o{{@mtCC zHlW%iJ2goVuSKgOg`ut;O&rHrv4DT((+Graa{Ym)x@zIS ze)OrK5DWLx79=d6u=RE%^%M+qWG&l&J!MyU-v|pf4oiVQTGlG?mp|RET2#w@xl1!$ zDE-r6F~7++Qh^Nyr9B}b&z-j2?y@(aY{B9xa#Nu&^}an3XqVVmpJ9szUAX~w7Cp&| zAb=&q*IUh_`e)WMU4aGOCqEl>vqWub_<-<&ULu^|58lkW5&_(x`38^{(KNT~G~tBv zjGEuPHkE=HK$}YHLkB)A@xWJqh#?uf>s?H|G$gPLI1sTN>`_H6V(t{-o(?%DGB_#p z5x*{m7jdgay^wr(PmJ*ZFH9zXDy}2; z{pbK8=2T-b-R39?GkPJ=;AAR~;coFPgeJO*)`v`VKAaK(Hv6&b(g*2V%tNSeM7N3Z z2dy%O6voyEkBxXEL4uQVKz$prUX0)ygEZs;->+~wb&me!9`9M2u}ijEV~?^)NL;A@ zqaxTI%KQ6l%O;r(ADA36Jmz_PFP)@LVpKL|pvO{AmsrHbdHSqLyc zs#ktOR}%^pa_D?-(%=qRgbrUqFSXJ-tH|?0T>_QxP>1G@)zjmEI6bR5yzB--6A|~h z&vhXlY(bfQMS-aP`{Z}5aPjbh+ocK5y%;&dyxtk9lVi!YtBGl<;smf3P6+YH^Ya-j zp*UpaGmAaWQJ5%v&JoDf-i_}_uP8}NzO&HWFkS_4^4ocjR-^&}kV+DVs>`DNOaYku zrSMrTl=9$0{DGf6gPrM>j{{V$D~1u32^X?5ue+zMh$HU_bVil3^4STee17)gk_TByU$lV%Dwla! z#6D}7`>_81^$)9yHOG?CQC&Hz9uPpj)qS{!@r+3INZuwsPWxDbytTatM28E!^uo%0 zPASy?R;#y%HhJR>f6zK|dlmyMnA!aV=Ca-c{1GO%MvOL&?y3XyENcUSkbow= zueRq&OFbcXW8Hgs?t3_dt2iU#YNG**VA?wNPy@nuzPV(6MKHg^}kJ??CIDQi7SS?|2GQja`NXWgDPF|;y>z^x+-MK*QqKA{tf zbk`nwXjsSU)jf!U%KD(yQ@jk6Q&&}s5FUfk(!=eCZ|t)y`4_-+;2@A^WNmJL;6O#` z@M*#s;r*hvmT2kGb3yJWV)j?i(g_sEcd_1X&@BVXy)%IlA;0IQLYCoG0+gC)yC8R- zzs{i_NMrKG+gKkqAQMwFr1Y)%zw3DvnufJl$08 zS9%`;2WAeuYqjy{s@sAstzY1l%Zn7y|XBX?Lkp)}?i_7OBJLktnq;&r__Ti=e zVuRZkD`0^79M+1*9w)3@469=|N2%3tZ0KdQvM`z?Qrq+2A%2X|vG$;h?kV`)xW!NX z#RYl3$k^1|d|pv`n&QPui~zKyQA4V-tPSc7a0KLD$-=;YWJv+dK!L3fCYzM1dKJq{ zHe*W~_|`QT&r$+F+I2R4oG|0E?4P-GO!eeRKDD#>`>#+_PcHT-D(#_K^-}_Bl^e!% z7)3g(9aIRpg7@I-mcAK>;8f&dr=K+GmI7+xsRMJ}%he-jao8o;eKK^dtY!vLN#9QZ z<~#ETc6ivR?xPMCkq0Oai!0p!!y?xRiX$D!f91^v5FlbPARYf(VSyj^Ik^2o;ReqM zB|^u(3aEaMNQtkdhU`?jcNLQrNVUKT!C=w!`O5SAB_Hms*Imzzh{=+t!NG5fdL5LG z^)2oq_XuaWpW0izI%z_M{g)- zBHyy!(*vPPP>#1<26Ok-V@=ZGMx@9R>{oyYO&EHDwp!5Tz|5&={~T=xktKKI{kgI<18tP8tT{EXTe$h-Qq?%pn1WE-5B={FDz^4yGvA5HG zHoqA=?bx=pgGtNs(*JiNKE>?Iz9&UOdy`&|_P1I{Bl5q6x2d7J7vfR~zUrR#VO)fv zw~9h-%XR^@T2}E0QU6)SrWJ}8I`yU!w{GXx(*c&A9|I~~Je03JqZbb{g5c|iM|y&# zX0lF=DBQUI9RAY#31pa`1IW$f)Xzv(fzG7@sl$U)A=S5xo{Zl`{W`lIP5BSEhqf~1 zt#%x`j^5+mTzM<%Vj#GAtZc8tZ)bOi<8)lUO-+o#F_g9)R#?6&SZdmRjB$h##uPjB zoGuU4!vNOUP%v=60MYfOejDfbkHEaJ4_jdlp~ix6kZHKV1WycDE=nC(fJN(qf4Si4UIJq#NY9u?Q<980kx4Q;AG&qeW z+06$3prbrfLu|&#!NY^XN^9UYg+K|sYrRVW-LX5z zhkrcLllSYmVVf#!P+vh0)^$(Z_Z;6y7NZ;}xXF@w-pu<_Q>Nes->|QZ>E5iB**^r& zga}=l)U+L^PuyE2_Pqsb--VTZbG8qdoM-?{&iIFkdPd=)Yix;4AS)#}f_T+AKvt*z2t{c_oc z)yl4!r~x{08E#D-X$q-vz9CMo^`j)JtySEc=B2iTQb3wfvQg$^md5VUSI;T?uQ$HA z8fO8s+XYFcClqd7l!`(GaecjbM+{{l9p!akJYTXr_Rg)Be3!r3M11WONueFrcjiV9 zc7Q-`>qr05Fo2RU?}=dF%W2mX$L!4P8+BwvRIFP+7Y&PH+VMeSB_~ALw;M6C#H;u3 z#O$rwvu}AXl0;tK6caL)QIdb+jGb(luoa}1)XEo4{}#A#1u6s_0y|cV+k)LCANDyz zkmNpdJSfr^26Mkn?Cw8ge|Sx|o+~8dU1IG-?NN#fax822YvUWZ(M~YT zdF+P{Nu&^p7a`FDf`sNQmH*^fEZ z!EZ#xIc1i+d`(pFJeDrqCr}aSC&$xx3CW_jj;ay-U;*=QAFo-&uoE)equ{(Z6BV87 zPH4M?$ZBq7K-kou-rK`R{DY}S83L7{*(FJpC1Mg}Ww3xc?sbr^Chu&rUE?w_*mafsGHK6Ej_*5{3b$l8}(c3=&zpa;vi21oOSWIWNyYuf9Kl!0dqSjwj$fl@(4cd zbIB(5qUu{{obD~Yt;eeU1^?(b*l_PXc8m`@aM=$#d`zw0w5D4=>&NvgrbsW%Ae6hS z&YC)+As~{|TAq!0 zOX}v9?y{L>rzm@ECq&M-(vLZ8Kl*z0zD3moYwH6m0JRX@64IyZx`y$s^K`z^fSt3} zbgncWn%}Tz>hB~H^Y4C)J=!<5`%A9YvDIRWum7KL9c!ae>$E#J2g_{%lIDhj2r>y4XH145EU3mIS zk~qy6I?3oWxA!HemfL2WGR=Iw%aL>8gf6$2?oy1>k)9bui&=@(8-Jlg2|+L8NE0$V zlG}~t-2z95H!ov6Ylc6CVGK$&gRr|c=fq%#$%ZFxJeO4nlMbxnp(~p+tPVDMY?|l2 z0#2JA<15RGNNJ2;->#c3Q5ES$PU`VnjB&zLmTYQ$k?{?1MW<1x%Nh#0CwdyeV zkrH!jjb~SNV6+=G&SIeRXT>sJ863c$L{(XWxIUbaPFG1A_>&VZz4DHGJBd9L{GfAC zASC9{Wb++o{vWq_e-ec#X&N6<;;)BRFyq~FVmlLBYsVc9zNF;Z{(Q~{-HW~b>Dx@2 zrS8em68v6ab=ck7RKwR$j~oy3GD9+B=_ORzhqqZQ+S+Glvc%C|fX9afP>`IeR$aSQe) zg^Rm*XE)sPVZL-QocC=0{4TF#2W{mI;{*N`!4VNW4vWPZ+mo)*v=1}lX`pM zraLPFk(E73A=N%XLmiGR1QSTmg26G>J%vrH2T^Xq{XRLs9&j>A=HBg$$qSsXz*cefNXAu$#_l!(P8-H-Q-Ei(Tb zHX&96u5nHIM*oS<3-10DuZriPheT6`S~=bK^SY-AV&-M7rkSvyu{V?L*}q2@6f7bT z;jzK(jP~G4@3i(^3d|EI922#^)A5~~IsRs<1%Z6}Q-mw?9AQyy6Z(o!(?5T1A+y63RNr#p1a}VlB#C(}_`1~^PN}H% zl+&xyL0|NQ+ZhwAVnbm~)wq-3jvfDJQT`z*yJIliU49!hyT4kXZ%s;W2ONFIWzGZEzRZ#&sEnJ5RlH4QZFr{5RoIe)x^6QoTJ&Iek7U1LAdo|_Y^in zU2jdN@lNox%r*p-Olvc-dB-1GEcSLNer?`tf$O$gS%V2!y8c`^Zlb`;t8%hwR08ew zr&il`tJn+jzZ(0_sHU2(Z6JWsM3i0xMd?KZL^@(Y5kY!ya?=r{gb*QAv4KHEKtKXY zuL;sa?@E;(T96tcK#)M_@SRxh_gU+C*SFq3th1OoGv~~i*|X=`*SyU@{-W=5pH=i0YbPJ#f)Tk~-s?g86oHwj8c%i`d zfYO>CN>4&>x~$&frHl%i#%G6Hp`>+=1}(B3r{wIIsyeQggHOZjx&)Ey6!X}G&$bBP zvR)Y>4ks#?Jx%YHv_GjlqhO_#Vkejz`;t{D=ke|w@dQMJD>e1AQmC5@yd6_rw+wG2> z740J>NxDfi!Nu#eLD{r4%AS4$URNfo!(nnjG#fx+mA5CDF)vF+2^mqqv6`e-CRW{` zMU$=kS-bsIsn+X@7>5TIsp5zP05zhJKZ&WSo+U2%g~OJbY)CPQQ$o=tUx@h}m=?B> zp9`kLy0QO!w~QV;4N%3Ir;K~LFWJgyFSxtaA!Vb6zJ#T+bc1PRihXFW>#uhR<>h!iuo^Sbhtoet2|Gm90J^TJm0t2C^$tJ&o6>V*`1%D>Lueg zJsw#~ZW;Y)y4(J_KBb)UZb16TZP^#EM-)ffYG-+S55rU2?ubl!f0cbf?{Yc*mAfMQ z48UIn73RwUsUQ}PGr>-~%s~!rJlmQ!GV+qyjq%v{;6`2Ed0D|9N$g(<@7cdXSfYj* zsYvgY`%3Pb>+7K)!^_&h5xfM~e%SoEg!fQL(<3zQ@4XdtDp=%M%DdC6i zdO^N>oCS&cCqXY>oE`PFc>!W8E&zd(*gdTlD?uk_SDY`&Heqd#Kn7xv5)GE)jbb9( zNkQZWmvz3fN_LYTlGwQf$=-@g_NMw(^?I)c&n zol?2)qTB%pAMmXFy&FDYyS5w_t?jILjh#N80Z^x32$bv-iMqH52fsdv_h)$qRh-zx z{vL+0{kM`V0}tO%?LW&eh3w~^A{qV$uxyQr@|;Y-6SCQTryW4=5tUOC#sK(bjRKag z`H6v=0H5x(xsgrYjvSAov3%;9$eLX*thAPOEEZI};%)o&bsn_OM0Sqas`j=y%Caiu zc=7P_0NO3v>xlstB)P>o)?mvk%HYocAx_uY>OQ$r7XboDJSBpBeg3g`4F2F{4ZLMJ z$zwW>J=E&_83zh4E;$0v?Rk{49ap$T7Z8X21iPp@cP~C_ROC-fX?A>t2_4~51!sn! zBgiPBf9vPs2YqE5J+`g{U|%Oe9##hY?Lyu4O%z{$ujTDN*j@S3fF5=hU|;zKDg>Wt z{jkO{Agf-**tMW6tJlUY^Ka24_{I~gLsu(}t!W8VtuDe@oCB%<=b_cx$E|w0@!0z4 zE+=-RA_Ci@rvLAaR+jlCMN8J~eZ%m=x21!lAOChH(UmbD4v~UrDVWIO=aAdrzpup4 z@#t=mp-0LsqC^|qKS0)GPw5@a@8OO?hYrVf_B=>_x;^Xi1dwX_j}lT2PWfR}nLeYK zig`8Ho6mNYj}?x4_E|BCkWe)o#z1o}`OLeMC_y>RAQw&(Pg)fUOp_hx0N`ZsKBTv%5Pi^Z~)N8e_V8PgT z4@kT(p;Hdx`-`0>8Zc+$pw~GLl8%pylDVo{a``sMJN>skqfG=;^55D}0i_9kpq%*e9KLh93#RfZD zM(cNou;IZG%gs~PHKp4%Uq{blBmoDAV1|+|tGSl#y!tYt$OL~NT4Th6Im&sq%^PvX zJb85LC-om_mqat@uymBx%dAVeY<90lOHZNJ+3wu_n7R-asFDl7Q2Ux9BMQ#yKf&R! z>rL>hnUEgk2AkGDj?a6G#OqGIbpYpB3(o7xrxJiVBrFZ)(Ck}TKj%48 zw9zFEiQHaDw8g5C!+*Mk1XV-`1l_2sl+YR(o|A7-#S#}?H<2f_GXWe=;L+Re~oWe0Scz^YgbmPytj+_=1Vz=z76om?PRm+VW z-Bh<}4tts6xjh^ru-JVsfCq5Sa}aJFu~E27x;HN^z?Iir)Gbwx7kg4BLi8f{7b&16 zl3V4K2Gc-Pfs7RHYmCROZ7m3K90Xae@Lct9;ZuF$hb_W>jydcUM|vE?*+Z~i$3UR0 zvR4uJ!MtO%$Z}N4d$v{XDZsrNHmz(K+}2yTU@-zsQx8cCIoe(I1*ixg&IxOb8%b#z z>0GOa5U@*fT{1Kn*7f7AP^b@#Y(QvBgvmH99VxgiTdJgN30g&egs4l!7E-P+PeN)SqYaY1cQk0OtOJkz(`E{ip(vGHfyH z)3C1klK_g(d2YU93`W#GK!|q`NGf+Rl$Xu*uH5+@5ebaD>MXUhdT1kOi^4V2oU)>8 zaO_HehSd!T*damwWvvd{=R!Ktt2`S|p>T(5H)xg7naSq0PEjXWe|^uuR0g#XVSX3& zb^e3zCysX-LCoEh0imk5b7VDMhxtw|=E*kHof=?Z@?UFU?YO4J57j_4;KeR|aOlX?sS3yf;#=K5}DL zvh+aN2CkO-HtVy{X~^!pZh$^B*j)96#}k2c<=uc6Ie_ISgNCEjfs5hl);+%WHyV!c z4M)=%ZQMoPb{&nSlSOd%WQWa+L8@NMHO2=~#!FOhqUikBL?NkzeSPmL7@Jr1x1RfXl2) za1?>RvtPa>AvhoAVk`>@DrxM6`Ks%FhGX0 zBxK@IWu086%A|gegiWa-uP!G>Jz$J&wb`1-S~(E6%Ru`pAaZiKH-S#4Io-$&H6E;01sQgFq`N~4PQ8G5RXy+F#` zG;DQ0XSOkD->fye7ShW?D_Fdtm=-YmlJpae&lCARE1a6w*$8?5J_gwO-1m?iFXKL9 zaN zdi4dF;@#n35}?dd{p2#+j)cc-xKNxpZ6BXD6xKNU@tr|j9?{@>-;;G77~fgsmLW-7 z{w5(B5WneXS;Hh6o)3vYI*hqE%gZ7jK1bdFy3&ftq&iARJ{%JzQQ9qyf$L8JN;@Ie zMm^DQZ3uWX|A!K7gG)RC^*$bvfL={Grk8kAY-oE&DPaq8+FAwzI0Xi7L0e{G-Dz9K z5`mBMoUTSyw~`-ZF2^kQX>32KNQ`w~`XOE9@tE;{#;`;ooOwk< zmc@(172&IdnlZ05FQ8HaC5Hbmqgua8nibQt@0fB-*4FwJh51F52JGXnEDIovW6;?= z1^B26$AEGm*}Vj;7+HXeT>Cfg8wmFRB>=XOatstX&UiL?V*j`HxE;t^8TsW$TgLc> z31|M0mEob_Hc?3?J=QlQk2J@tbw*Lvd988wf7}b^qnH{H z3o2#^8LUnvqUQmAh?`DhZ^HrhAX^t-#~4#U+6iV@zDu(Yur}%*b|~mS@sR_DnA;xZ z0C22*87sx5#)Q>`x)T{NdO;9Rl<95FoMsnvx^r2X zWW`sSz<@_mlPbytE{J#UME*!igZ-~T!Gx*uOKbxy*)Lu&qR#n-HDM)Co&*XA(b@;N zzTjcj?S9e7d7ki2i`@MURN}LggzLUfbGDqqRLAU)JlD9`RQ6_jOo37hO_c19rAQte zy8j+(`sm}SvYPTQX1UMYf%qtp7uJc`zX?Ib;R^M?$vu{`_-W;Pq}*djzRv(PsGwcd z0qIlgUH0JxNOAoaI%uYg;u~g-*+=H6Nt~yXn8QJ&tnJ7!U&iFZ6qYc3nR)KL?|*yc z$0`r1Cs)>U3TPd>a>1z(?7>{jOJ=ATevE5mB3sP~wE;zdN1Vz7Kah0Rd?5OLf2KC# z2QX9JUN*sR9g7^>1dnu=Wq)pvTfAcGdQqiFwb^TDska1OzEIvzyWelA9DhwkvXRSF zDa1G0SFtuDQ0R7Z+;J!(A;?^Dh};exz!8rwpEf@um)?V32iu#QOFUOR{TMwFz>H`C zo#olLlVG;0Z03cnw$gnEEgDhmtSbEkCcnI<-6$^`nTP!cIU@_MlJ{0qZSyKi;AFPg z04T9q0$LgXyW+nV8c+h@gG5`P=$UbqAqw@7m!a<+&g>T47t_SEh;WYJ?1cq&*hO;j zyg~`QA|KsThiT32a@Tn8b-ir>f*uFLy^sm@^re)}!~*$a@+^E2xqp@)&nmHkH8Fi` z>IzmQ*?3v-BOXV1(xo78cs12;rZn>Iu1xwCYG`47>pep#651AXf3{C;-6J7ipimT29eEDX8@ z_sAN$Q0*X^*#&M=^zYesqEGXQNPO+CY*JZrvL9A#QiK#;+P+9pTIn%wXuPg*UHE==>)SQl{mU zB^;!+A7H(`oimbDc;lmMXKADH12pxH=y}@}C(hfKA_#EE8~#3sLUhoqnV;T}Y8o)R zUQ=U07Q1lIMg&!KIJ=8})#8MYfr}55O-V$IG-p(CJJD>QLs<8CL-&F=iMrEk_}&z7c1Dw2DKfp~7u@tHxg9yYGv9l(t8U*2Zl%c#ZceUx@TyVojgouCd+1 ziV`GL1Srj-*Z6~p=jN2Z62;pCPQz8s>(=Yf&RH@rGq9bmr>ke#h@_{rrhXa~28)&2 z*1`JlvA@C9@3P-{9+)-zb*sd|e*Wxe2X;%JOTa2l_&Tse5~x?8A#S`GcHLUVATWKo zOA=KXMaUYu$hXJf&6$u;!A2W+ne=`j2<>={-d#YGl7}rCt!5Y6SpB$QB&&Yue+ zQOY|0^fk*drT?smb!}CC9%pyXuo}Hx4CTB24aSoO`kf8TD%{>o0^J>s>xioC$+dV$ zC*&-^a!bK?jVMmjO&j@nQQ&JoCC03Nzvlh?c`mj1H20FhQrF-DS|u&_{q2SG4TwiC zh+daAM6q|VhlVD1$oA!H(>cL((L25h%8`~Ia(E`^MtKY7?YchVoLtigoT zo(E$ko3~k@Eb)i~>u){_K}p-3gw$8pk8JSScW$@AgQC3N9IW~ijMk~J;0X1Wvn)%q zuDL{$c(#_R#4{^k2ZdZr+c6(`Z{R}BX~V-A65Wk;ykCXKhQCNKSPF*s4^By}UD`wA z*FY4lilGzkL*UIK2>#&<&6EJwlHstr+B6{`Jd0ya^q#8rHcx-{>b{Yui((?-WrCZL z%`DV+Jqbj=ik_5he(pY*oYKW5g&cCklk6W%`~b>wEi~OHxGZiQ)^qpNFzCW zj0u33b*|IZ0gmHo>fSP}w|!!V-QeoPp!H!uW zWDpY;NvmvavQT)2Z1j9kS~Jm6?=+POdOZxCCk?~Zznds%a*8~#|FVyHnX?jiio>hw z>C$#|>{u3_b6Z^ST?>;6%58zQx2~>05SO20ZnL$emP{X_EW~c+MjQMrz>m;<-#BbFssy;?AIezRmL)ILi*CLp%dTn~$Jy+M4xQI_XDG63;B4SpFyCMg?Z~9I7V0Dfkc^b1r zne{+L2eqFr0|%SM?&L$HsZAts?1st^7})m=|Jcy zZWg4PsCZLy%nDnrUFW35P@b8AULE*28w$3xbF{h|Mww|fS_Thcyj=(iL729-RE9b~ zhqNe1by}#2okKDc-axnpyC{6rW>v7#(=@yMuGDvSh2}Wp?>DzbGu4OX>YQR&2`UX> zxg#w0DM(qc0v-lzzJ090tOipFz-V058GPklwj3r!qi`EDP;@UWM*qc}K~`u^mhI^B z$4gvn)bs%=^sLXax;TD3Xgte7qa<1G1M?k_P-U9Q6VY-tESbT!Y$0M^<=ne~h-rp> zy9Cx^TX~90O0h`ulYdSj96#wM{LhW6`BQ1pJoPPlq|(2z?cr?XArF7FKNd`uTX z)M8C$_06@slk?Vsj=_uPBCFCqHvj@C=U)cR?!&pL?gN2Lz`8SH%CWF-Ex~D?6G}Gj z=(M|+bO8$}0jQh+jKz4sLnouYzzhMz6A^RFB2RIp=nr;j(XXr}dM}c_^Z)WeetRRo z?)dA;+Zs85k?8wo5}3pj7<1OVNyyXzS&v-is>xn5!HFjvR?C!LDz}QCL>cwpS&X zLDZTb?pkc_R-_b4_D%1ea%W#@p;X>IO9-il8gt_teEEY+!4u;?k9cv)7bK=6clYo? zi6xXwDacj@7vTH?D8W1UGWr*5M|N*YJ=$&O?RTRZ@F;ux+|ePr_Hy=j$I>?{I`O2@ z-jBSNVV|qDS9ndc_*x&fz(b#S#tr!J(4gY@J(3OU=NJ@5acs(!@zAys72T`B_6}(( zYV}B;v+T2ikLsgTBzRU@h1ABBlPm0z6l8JZvo!wc+~2Z>StEu-tj6>K*_t4{LB&L- zu@>biiu{LqE1^m=F0qs+{h2^inQ<-Q4w<(KqRZ|GlW1Z_k|arypg@l#9`OQuZ`)lp zBGjg&g?qR06s+WyXW3*m!XZfcso?Q7j)@NjGTlw*_RB#&v(bd7ufik&XObKBI4ATU z25owb&;C~msD~?egJ^n}q;7!+(mmAHc*`=g9lKN_CqBBK5?)jMIrc{S=NQ-zKmyxQ ze0+nq;~Ga`rj||oMD}f)Hg5|8cxGpWlY(y37d7}+I??TQ-OQ?ksdgSE1BBwH#lL4j<=iWvOf&3oeZ z{e2=Xprmr31??YoE@#G+T*3cUU$YlOghktygHWg@P+9>ja zn{=n$);y)P?)kzP%K)kagFo6h|DnVUGryFl3OUoY4?Soa@Yzi=x8D9_l|kJ2)e05s zS}0Fw;$dNba+KN@&_siX;eov<#NRs!=paeJOQVsyQGUY2Pm z#o+@_*_rkaTe%X88KYrx&@a)?uc?V(@a>TIblQ7 zSKl23QF8tMH@7~mwrvpU2YdQMjh))&-|M7>-diJe>5hy+lKv_*DvD*3H6Pl<+y2w% zCyT{GmE%ik`t^@n34o9aYSlr>(b__>G3ikgc2YujWNa>u&=SNEY|HJ z-vL*@;&J~w8lpfxQvDy^#jX%X|mzi;vv zn30&21n99uTfodqYWzxO|JSnrZ4M~;T?N=2{;mAi!vCh`8r)+b6;y)h10Kn(Huo@` z@Fxb30mo7|&2nWn&hY?@?yo`13#Q+JjenWA^m|yyBFJQ|