From a9ff82ceccc390c9c89d492ffafb798da341fb6e Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Thu, 30 Apr 2020 14:23:58 -0400 Subject: [PATCH 1/3] Rough draft --- config.json | 1 + tuts/perform-a-runtime-upgrade/config.json | 14 ++ .../featured-image.png | Bin 0 -> 65209 bytes .../v2.0.0-alpha.6/code.md | 148 ++++++++++++++++++ .../v2.0.0-alpha.6/index.md | 31 ++++ .../v2.0.0-alpha.6/migrations.md | 72 +++++++++ .../v2.0.0-alpha.6/transaction.md | 35 +++++ 7 files changed, 301 insertions(+) create mode 100644 tuts/perform-a-runtime-upgrade/config.json create mode 100644 tuts/perform-a-runtime-upgrade/featured-image.png create mode 100644 tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md create mode 100644 tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/index.md create mode 100644 tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md create mode 100644 tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md diff --git a/config.json b/config.json index f2996db..55dc3f1 100644 --- a/config.json +++ b/config.json @@ -4,6 +4,7 @@ "create-your-first-substrate-chain", "build-a-dapp", "start-a-private-network", + "perform-a-runtime-upgrade", "add-a-pallet", "pallet-in-own-crate" ] diff --git a/tuts/perform-a-runtime-upgrade/config.json b/tuts/perform-a-runtime-upgrade/config.json new file mode 100644 index 0000000..0f32742 --- /dev/null +++ b/tuts/perform-a-runtime-upgrade/config.json @@ -0,0 +1,14 @@ +{ + "slug": "config", + "lang": "en", + "title": "Perform a Runtime Upgrade", + "excerpt": "Forklessly upgrade your chain's runtime logic.", + "tags": [ "Medium", "2 Hours", "Prerequisites" ], + "versions": [ "v2.0.0-alpha.6" ], + "menu": [ + { "title": "Overview", "slug": "index" }, + { "title": "Code Changes", "slug": "code" }, + { "title": "Upgrade Transaction", "slug": "transaction" }, + { "title": "Storage Migrations", "slug": "migration" } + ] +} diff --git a/tuts/perform-a-runtime-upgrade/featured-image.png b/tuts/perform-a-runtime-upgrade/featured-image.png new file mode 100644 index 0000000000000000000000000000000000000000..198e06b5788c948ceeb32d88a42bf2c9c324426f GIT binary patch literal 65209 zcmcFqWm8;TvrQmqaLZu99Rh>9yEC}M5G=U6B{+jiaCdi?1co8Fy9IX$?r?eD|8T3$ zsXBE&?cUwHd-YnqBUF`T&{2s{-@SW>E+;DqdiU-<(tj^9;@h8siXSEK-n|6MNs4KB zE**Dy)tc*St=;PT@b0Z_pz~>3Xqs!fNx-xJ0SK^Bh_VFNMoTt|OX%djZ?b**$y|Wt zt`neR+GZ!UkOINOVCvm)43?M(d`Gp6lY$K+Cu&Qh!7BYo#5KY7Rf(_b0K;;@hxN7Y zmhaZWjY+(@NGow=RxN&!^{nG;&12livg+({uH`RQ7%!9p!zo;XWb^;`^IR9t`3|3C zGl%xG@0EzBa>oniH==He^842F*;m)c-+ejBHLu;CcPAtXeH8wQAuqpp=3^~RpMjMk z;WuRD*Ym-_l%=iI#V^(?$IDISuPp+`_f@x;J#`Y!yioPeXHRzlPi^gne(+__1^IoS z;t^$oQYjgvuzrX4^C5xaOFt7Czbajiwg_F`5R15#(qas5V5w*>|FevBUGQfqdo)2^ zowqvP+ZT<5XQ0W%h786=%S{#n%v6DZEw;IWO?>^=%BE2d>hzxT5$#tV2QvSLux-ci z^>Di%l$gR7mM{2uuV&C2OzT5q`8>Md_Y|g**yPqP>iCVmH9&I8!a``$>uIJ0L;@ny zpJSTdV_v@4vg-S|CWAQ(rQjpkFL<3)vTR?sG<*Gx*TEW_cgcW}i_J+9h+O(j z4!KR94UU0J8dKywZl$-c{}lJJQAC!;`JP`MoQl~E{Ej_ntf2P=@3(9j=pAgC}72RX8?V~C>o$x|N(x#(JTR3!;l!QXZY zq6RRlo!c(&9djDq^MBd;l=B!x=F{}rQDOJ`yney5?(Bcp_@5Q8nOk)Jn{*Z}o2<{o zQ7>j>NiSJ7v%Dk`?}#Rnay3xk0A`}1!(wyJdpxvc&Um4zfrjjW3V3X>#QZ=P+AUl; zg?jo=sr2cT-*fFFMB1Z7yx$9S1bJk;m2_SxKf+jFwiks!iulGn{D%Wu&80W7*|Gl4`dsnwF)wjNXiC?O2{U(NQ zDmdMfbAz$!X~o32b`p$&<8Y*@*9QkregG(flbC|0EO;|sg^GH$!cAz5*>w?{Z0It9 zd`^Wc)zoOs-6^=en;5Np32+RyE}#iXNQAJcETaDGh=qbh6jk{>SE<9r&DPz&0+APv z_3QcWJ%QJ!^?LykKd-w&%>TTBcb^RYa>Fw)7Tyui|F zxFhvJZ%!hZ02~%C85z`!c_kqUDJm0k(=_vgcaPCf&|t}!rQ(h?{$0W$zWy>a-ud)b zVEu73`s`&&GpoKxYaUsOk_% zRihgXbC2LrHO4^mpZ5g8Hc&2de7g>d=ey4pGBt7SG9!$p+%~DB7M!CHvDIRg(^ow8 zfaTiOo4#?sgD~zerp-7KfAxW3)_~IXo121l>!Mfkyytda*LiYL5>=%T%>~mBz#W2L z$$cUzFEr-wOsb?NocGP!Q48N8QP9r~o!ZdI6(+G?Tci2AN9qekjpX!c$i(3=*w*2Y zBRo*l+9835#%DFM%P+#6Oo*Vf!B{%RD|?5NOjk!9rG=Jjo`*|j(PD!Ua##=+I3|5l z$gAYV<(c%8$Ex?M@%=zp#rA*e>whMDoX+{#`wyLHStLRHHYDGxo1!R{DOemI1eGVm z#me8M&Mhy5p2k_q)(g&=j8vb<%0;9TMxCEiF~w^{P=KZCG=F5R!oHk=(=z}z6z*~S zlJFGUsCi_Rl;2r3zjI;OhB$F(pq(6MM#q3jN#WZm)$g84V`i3Nno4T%I` z+n^h<bD)Po~n-K#&;=%o|dnYVB|6`z*A7Ea2cjYy7a&H|r{kp@Nk1@AhS+CnfYI zws_)&B6>B7$cOV}I+ouQagNOiA(G%b+o*b=E*TkrM}4(e?|O^UGiS z_TiR)Q}vlX=}UWc4zm%I$rrEjzW;7#BJU&ns17Js0!-0sGtmg8etcTsO+d0GxCj3fjh%!LDRyQTA(I zbP*+6Xf-NZFOL;-H!=Mh96OeWB_qW z>uQ`%56?5UYSgYH6FoVcQ(6$_nxiVPsjH?2O59DJ= zXWvgYU%vOE73FdPQhzWLn$x5|)ePAB*yG`TY5Y3&5K{9X6IO8=MvPP{!>_u$do@y|pw?LY=%=(l|l98iz!4$FW-40KJ$N4PJZi%<=jk{=>E3 zt}vT};97^FI7z=oD2hH?0#mlrgpF@B>|bySm>Ptp`!g@`1x~~KTZ3~w2~$z!36@Rh zxBKkaR(<0OyC`Dghn5}K9;qvC*!DkNEtdV^*&~rFk*EIdt_R$;Vw<&~Nl`SGbT}>7 zFeYlLVX0I0zoN{VqMx0?`BV~$>JfI*etp?SrX=}8Tl2sM%;I9bm12JX_hk-&3sc;U zgz6KSSnU)xfX?Ce4}0Yi-xV2ctH)ZspZK45gcS8SD%f}bW|0EnQQVH<{c2Dx zJup0rSe3M5Brl7{wwZ`1=1MSMW-zCfa(l{3nnM|+WYRYE`{Bd^Wfit?=zOh+?fH8v zENBq_-|}%Y!e0N~pVat{4=-1XSkLdFEq|<(8%Za!WJ&jKRFscVPf+`~sv}(PJI~6# z3yM543aAdLVpFfj0!5ZeOOn{TlLlPDSvVn?5p$wLDVRP*ZwF7@!~<|)$d|?W<$|fq zF3Ot+9VyrM8I@!`(hI_1Et=iv@l=U2IA?_1>6zUZlb?$Px7fz-rNPNAV{Qj~~ejhzbS_3B;fb4Hi~sJgM^E7$UGR&$^IslN0d+*XB?Nlp~Bl6bs>jv1!iR3RW!tbI}AHpguUN*iSlC@tizfR3= z$P2yM^nP%oVBGNe%Glovu%y1n=;%^@@0KuwMp4`D37s(7L>sYisdTv)R~E7wp=maq zBKyiVnN+hA99QxMcW$HG7noY;!2B7CPgTlHSB_+#O$#8%fxVm zBod}jpl&c{Jtu}42_wdlWvR8Qdf7J|Id}$JIVbwSZ@;imfHqPe63g_C*aNK(wV@j8 zC7{=9%kGDs=dl04_qc(x=SjhM*6Wk8C!ec!38E@Vw{CthY`pr1eqh-`CF`P*5G}fX zda(s}#tw+zH4Y97c+5b?6%P`H{>`vi*ttx-CslMy8YoiNN6e;tW}9fvOWF=CcK6)- z%?st$F;0rwb8tETJ6mbM2_NMpwPUFD<M@Ij3?~Ph}$-Z*`lS{(R+su z2{7jD{DEl!L?mXvI-XBf*nU|P-Hep7(;cahYXitXZWc@Qcu*uaze7bY^TP9eYCo)Y zW=j+f${(FLxOaA=#;r|tWu*uo9Rn3prb$Ob&6feD{`N33F4O6}A*D z0>Qo@$K;Bvr}hGi3;{Dzu+YL`knA(h>`3=kO7>Hs?{!%3e+^HLf-~t&EeSsrn<#@$cJ_N(nGHdBnJ6SUkLHRcUnnJT zKd@L90vr$eMg4p2leUnl8&B83>eT_Xker?%Lo-!Q@$%!h!?Sw-7r*&{M`PcU|A6~A zC!gTU<7Xj|&_1RtW#Iv!PdbemKRQcwC}6DYb{SRH z)qjw_kd^qr1n$YR;X#uK!z#-(iSFl*t#G~<3Wh#xzJIeTugg1X$(4C8yWAN7#68&` z#w$Lpqtg8ucUEhbkM*A8L1NoKLPt_w595A;;8+{&u`Yv@xJ>^CSQcR5Qob20mxquL zoF@U&4jpHYi32Gkx0#!Of=>0aD4Eu6f^LEge_)kxN0Xv!T+yc4j8=s?jV3!?V@75L zc-o!4{P}2nPGpn8iUgHas54q-ov10W==M@e+ zUTKe9hi3b!KA5lZR(^2RkyzUN`e$HR4^pLyc5)LLg{0eNwMlcSXGIhno>n+FCtn9y z&cbTQxc_2l`GMRcv>{iQS`%ZLe#ifI1WN7o<<&yzCKQVhKZX`F^geBAk!9rqAytSD z%)D{P)qZI#(Q-!aq@P)vwy*B>^UC{JmVGR)B4M(Qk$?r7S^ypy-?4o`b2lEY0luOo zGNA%R?FFDYzF@0U|FaOkb&r5ahsOuww?ZKC^s0;@jRX$YaO*!ht32@D=^Ez-*hHOI zq>*Ggci8{Z2tVgF2KpSp&&;n4OgJ1o{F*Hdap#fHLjCfVKQZNT5-|8vATsICy04_dStt9si9zr`+dS&CRSt4)1S5*3-3c!h)vY+Cqvx& z2C-3%4jz?gAD*8)@q@T~eN$I_4{(7i%}m?gQlA6=#6wlisGu2zL^51Cu5ip}SqQso z)bHNz7_3d_echpJ_Nu5@f9!F;ISpHX+!=Tk-98GC_;OVjM)jB$C34HM?%LRW8!u8+ zXLn)n<6@uv-#;+9wD}yejLXm22=LHQ8)>b!ZN3=1#W^L+d-Dbx?Pu^QNr8~k39pb) z(Gh?3+PzfDY+$13j!<{DnW3T1kEBtP9XYN|&)iB`!np*Y&LG3#Ut=oZLKc~H7kSEK zZ*SoJ1nsDVo~BEoySq|9S;hIszD*aYlr#K2n{XRygN+68!~Nxy<`Y2Zdx>9%fuRIS z*y=f|Wb6H8tNnL0yPuox zN&?)}UU=pM_4F0$Bg#Qg+$n@;U2m!4`uxpXOcW`Zv@3rXy)``gcPqy050d=FE|dPo zQAqlOj-5;S;FuJybf0wZ4KM@gH9U&PKW27O2&AYZ(g%pbFLGA(p|H+BYQQv?$EL!T z6H4dDin6u`WpxG{3r96&<247HW&{||nN;HW$-bu_-ms_%0W{&+rw6arvB0*=>3djj zgsB$2tnlVfu&BzvxwdvbdU>qOKgX{>vIb0_Jsys~R*kRl>h*Y?KXeVm-dEPpV%YUt zwpZO9ydLj#3yCzLK~qa@#`Q6qsnOWbPWZm(e)3PIBbYAaW~oGz_G>Q1e52j z#NAA|I^(CJn0c5i8({3eu zn)I+OwM#dyHlCt8%h!l31pLr$pG!(cZi*z=|x9%#NlsHj0) z6x>qXNJM?uVf-WGzkLa+r9flpE?1jYWy#rao^9}Z4&&9;C@uRv#^xWCV+=1qN1KSC zwfvDezP#G{kRQ|7jfDX*nDbt=uuC^gLy+L2&@zpjrr>_d_ec60+NfAU#HM0sOz0&5 zYuUt%*YJN?By@`KC4V%{J%Rh7b=PmVTf#a;vfBHI3etZ0c-1F5A7)$S5UguwU5<($ zMTA-WTSw+lJ9w73a8w_9N~!%BmRuy;f*I-xOM;dc%$?Zy{zLM6x%QCkZB4=I#SP|;p zM;fxKPpvB+ZOn=MdZ_+!LQ5}}7Y#}gght&g>k)DD$%JU-IJjU3`{qHZIfG?+mTx(V ziP5q&BeXqRf(Thc+YuvcZY7#CClXvWD#xVm!{}ZNW5sjICsNwi4z^b>olW&)DtPk@HgB79n{Rq$$K8)&7MpNvY$v zexl5XU6fvIDr&&P{hxzJ(x%}+X+foMm-~~7<~s$yN{1ws30kh|B9e^I-mr;nL7K;YL7eTppyKero(%b1sZ?%A*`e~%E0{^P!LpHUYbE9)F0O3@~$9p%KqR!nRCFMcMuJb zMuU$WO%}})k3JT#!(Z;gR*4XJ6kZ@ah4g`&0m~3)CzeZkhUDuYI4f=hf<%3`twSr@ zYuts!Fr=gI*D-DXqi2boe;MV@Cg1SE8jN%r$$4je*^G7ccN(+u(-#^iWQq&rXSh&>n>gU-L z`3ep1ax&!c7Nye|v%F&hUUA!wO|qlfH~vZGQug61snQQYkqu$QPYe=|lgqM>>=Fib zva44o?KY$rVS@xMFaJ_F^gOfAUSP=Z7=itLIm}S&`Y~95Xm6dg#m@>18}Ib;fd#v@ zjE!$k=L&a;x4EkbtFuC`m)tn>ZS4$=`@AUp&03F%`O|mzpY1YMn-zm>T|uF{g<#s6 z7(xF8Hst-lSy>`)V#G)Pk%wp4?CZ{A?DOM#?993ok&6ElhtRx}EJn`#l`58F)=;xk zuagJ^paJ*%xYR4{MXBy;l|Y}g02VK&ICFNCYiidzK z*x7y9J{LMo#wZrGFkBK__Zn0#7N8fvrSz`=wP|2Jm1kXJZG8E{?ZcBZ?ve%z;>Rfc z6h6zCzeINsJJ0IeKf+9(GIw_!Laq>?C-9*aZvdq)a~~QvBbc`c81+)GyZR}FR82SH z`PK3?Lo=_eP%JIjVk`9G$w#$PE)K5l$lk5%@fP~v;C(#TuP+W9)xD zp(Pk%*RL;fzGrmGV_Bl?-hdB8%)EpG*kHo%Wi4`9KjukZz!)vje+Y?zhcE8erTtDW zt+g?&ETU}txCJ(j _~&%2m2vN*jo9{W>kxhv3b1N_6WZJ5C9ciz$osM=&(7A4{O z?2Sy+Zj7*eFipQL0TnV(3cMf3P9zMfE%3`YK7d=ej9MvCkaG9fInU&?86tru9{;gd zjp`a4-~7s@1M*8;JcwdeIh&XXX#+IJJ=i7)Y}dKjpmhUwC<(SM{LvkurcydRQmyS_ z7<(Z@wFt|DInktUBtA8Mh5qK4tq|Z*cjh9WZZy}n@I=|e7cy0<{@wMUGVB(e#fPPJ zd;5T$u=MeJp&sW_lI&vo+UqeowGs(VqAbWKm{n=y{#c}6r@kGTNtfm2uF8ba3;u(< z)H4EE;347yqB_gXuW>_!grN|Y{KRZfT}Ku6=TLQ$e;?ewc$7|3-Lb=Qo2pU1Hv?hD#`hH3CLssu{Liw>-m{$>+@N z0v5n64wMx2UMDhEKP=r{N!!lxLq->b0=oMc<+7ooAjS?>vkxTx?&v%n8169%`k0gN zCpBovE)ydTum^XmP$u9|Bbye!g=&V^(Or=;&{QJNrSQdfjcPq6PujyZ{>76TBaLEX z$~a{Q(ouZ<$UhV~Yeiy~WqC^8pS|$RpW##ExT9PaV{GDo!Q61qCHVem`6-pH_5`t7 zixh@2lUy{HjmJYx0wbGTdB8a&Cbjm-*|^{e9W~1&WShfxcw<$GWqPEXnef%qAr8^V z{MNFr>5ikC;?46aI+ZnQgX$eeQB2~TcZvv2Z%H>i&@lZ~a8 zCBlUNPkH!;p?(=E0gxt!bMhz3$9%LS4>ksz&=%wjCPs%S2|S)#LWH<2e~ zmCEQ|$R?(D$qkh ztd)%l`Pw6D2t3!fDhQ(C?Q)uM?T8(XO1sA8N7z4tcgKPHYelEpg(t+pvl+qM9jnAP zbW1LcP-4=?f$g7(VE^Z_G!V^Kt}@vWCww4d#dWCNGDUNq?#lMkISLd*P8(`R97%cl zmPUkZ`>V|XXY4@6G0+Dw3oyHTV)U6FehL3ck*rTT3edg%=x~;<)Hmzw0tK?@gP~Li zU~gJ9D7c|(J*1y@&!chwS%`P}?mBy2jM3x4@4!j=AC;*r7GmWf(;;*Y`XOesCGfp~ zgd+5fBvDm#RN&&QzF|6J`H)tWC>e!D= zu8*{RHzZV%?bGo3=Xl>SR91c$)e@*Lv!%uD2jd>MyepUs@c6mnH-6_ybGb{^TGvNF z`CV!Sji)D~O4<3~O|+>b1Q#meW$`^dnl-_ZYV3S7l%wo6ce zGOLC@6Q~wWDt*z7p`@#s3hLESzcFIVyX&a;k(n$uWZbGdpL#M<;+PB z8&E(p7fByClSmqALZA9iqD^~G>l)JqCBu9lJ>;wu(Dqs<^>>5HgoHs3IClrzc4`uu z+k-+`L@XwVNRi$O^v=uOg~(gn$H;>3j}NaKPwMv2hXMxt@i9dE0X8UfZMD;rEUB3a zmd$yU*wFycPB1J!tgMkOqrK9HP*<{KbpMI+b~i%(?y;qenxz*y3HRlZd3z6kk;8_t z3CSE=wV13(wY-cCHD#yQ+)%<-*5j2_%VGTAuw}!a!+peR_VDGu3uKWt9yy3=5oFoQAp!%A3Dcg%;rudLjjL6zEic2TBhvG-yU_Y8p?gcBp= z-w-cBb%mE>f)vt3@dRc&hAf$i?GZ`Nl=-sFN9E$``A5b(7fsr{9&{thMkZd*U))?s zT}2HP3~vho0P(L~q^hK)6{3bRim2f>Yz_LYTR%%VaprC#D&`O7Z*>i`Cehz-?K0Q& z$WD)7odB9K4<49om)NiLnd5n{!g)H%E3BwF{|gKheyjVh1Ki)~mLgZzWxCgEC7L}L z2h}8-=CvS29oKjLEamq~5aV5E5%&-`*;G*0HYqo|ZdtU5O{NQ0VhBG~7Vq~^ZepUZ z-A1P2G!#0QQ0Zzme?#zR@p^@kC%)s!sD)i3Kr9eZq(_cK%k`&&DbH>Aa+p_8P4R(H zOov2+m3-6;KONSj-$|fw9$`3x64GF}$x!tqP)*ir)r^u*T-WGWXx@gR2!A;$0Q!tX zHZWpe*ZG3ekZ4(IA!B9hR96rK|BQvAM%es*4^1=Ck#_TgqFa`Zkc!AF_{-WILg%Zl z{aSlO{0GxFSP~0Ew_eDvqe?g@W`XA_SE+_iH9Dr?6ZG>9S>zC-w}0>RZu|2uUNCY$ zxf7IDe4`t*=uU&Sh}F!OpKe@|ZH%;aiIdSP&6&>t#1l(kNm`_yVxZ}45MXG4Wm1Py zvJ(*oX=IkDzX{8ZTR}&lW8W3O7$$Yq9Zfq>@v7kbb^*LY7&KNbLP+ zK*Wr2anBufds`S3{h94+zsb;$vbLhZjrj;fFS6J6ib6@kQ2kNuACc)*X&mWeo`6}F z8cx=yJ)QC)(0pXE$3pid!B2i zgx1CmVA-m71vFlDQqY3snA>_$p!BMwrm;CCeC<(HDTR1%aIA44PW$>AJ~)XBMX5j| zFy5^EC};TT=BMNJom;ihGj^w6xKpH3+D>?S9QIKvAT=v0nPHHbjFtvJC&HS23Lrl7 zBuJyOT%W*7P->ZEFCd@{*_Gmt;u}#PpLk}hnD@{6=#llXO%vnLE!of+Diz@eZu+cK zRpY3oJ0dtx!ci{Y>g%Z-aDT*GuwP3PVe!r*CmOuRaSr>zatS-%%<@{K70zdOev|d} zzuNiz#-ikHc}(SEh` z!cK-T0kWX7_x1=FX?VW6Ds0Ncr@l1ebu}*BDxcUt^kQMptFjvB3ja5oBnOg+WXTg6 zZw~_yhKh=OrAWSv*{Oux6CK$=d4fwbyY4Ftgzu>Pc7#%tOzJAdLa-`)<3O>=;f0dS zL!du85lp$?Zv2^JmJ;chhu1`z9g{C1fNiWePVbsh8x(!n=VgG*gNdPpgXjVZ5S(p zWjZ4j-?{uOc0a$3XmJ2CMlI?|5}oek-OW#^1DE>nL28P$n!dBD;|}Zs?Mk!E94rL- zq4o;$geIJ{3eFyP{ngH;ooP!yTYD0n1z8_IM?Bg=7q*sH8nmV5XL03_?cL=YI-~Rj zk?fTt3u3ndCj|#;Pv9i}*e_kewz_17npx`5mz%eaM`IiOpX3x@3a`|S6ruOyKzdbWV8cTq}Z z-V$;5_}gDAwSb|yi#OycznRfp^|_R*D@m`K88)nowbs)}+#`!b@JUM=Swd8&Ud0;7 zO7vH5YK=DR4CI`@G>u|$-9rw-gSV@5mIx_#W+p(N{j;Jw!2&#%D{X2j(-~V^Z;`GWyOTDwMx}{lc-X?;nI>va_Gj7YE9w$;Wm;x%1FI|lR#>&LSe|wE?jCE7 z{7WrJs}-zbvjA!`GMvy)LgKgQu^zGu3COTx_c${Nb0l} z7Pg5X>%@!fDr|*8kku9=qzV~Wr{`ex7+&*pMEQ)}n0caBDoh6LNFmfcn%S6ob8_Q5 zXJ!3kGSLJt%3A$vU$q}V|JUSY5WC;wRKv$Z`F~@|RGUNLV*i!bKbnx1&@4)JSQ24a z;moBC3F&%qy77Qc&ZmtVZE_Sk0lK`w3NdP8D9pE1+S7zYQ64YEZ1Q$_GrLlbju}jH zN~9S_!9WyMJ0EziWI+;R{EKUzWBjxJJ}Wu;m1*wTmWG|@nT}TX%7Kj{7u|=Qrzh;# z^?Pd5O9F*;Cm&riJC3xXU@SVxwdE{BBN6*4BF%Kk%~}c=26osbK5RBTjiQ=i*wrQf z5Btf=w|fu*I`9W0Y&ZUB5>197%GEC9l8Z95`DDQ$vtTog#liXcAz|oa-_7@p3kv>9 z@}@LzQaA=z!dXQMGgRDE!4r5`s=+~Y)mZkN9jHks`gs9fN(mWC;aX& zMcquxSu=INLaR2~?Mis-HuNh8BdFC=5-gD+f1ycHd^08TVY?APGNhH?pi;~smV$uuV@VlkgOex@);{a?tF|rV|Myo$|c8)MkNpN z*xJ*Fqk$UG5kd)vRkb#tgC2z?s{MuwAFtLODhYEV^->8{=6;sOVQ@oR4ZLAl+mWd1 zrY%A|4lK;17YE3u@097D)$W~ABi8C@n?}z^ufy!H^0aKkGdmF#E36iBT2^aOzbG`p7C9#j55oh0d3eJzrADM7%7wtJB8({I)CLZ&(MNYL~C1u2|7nQ8LKdV!#w$={6xA}1UcZq{nTL8N#Bx1CIfS6BSzt6Ffhd7c6opaf9 z#$cOwb3VG+YrorR>4Im(TEPG~uycsXhstHUPUQ&S7Glkyg06*d9vudI+57y+ejc#o zNdrhV$^~@LAp;X*nOe!`Z;vt-&d@#ziJ39BAihsx_(QSH_?vGSthQxnK~k9$?`U9H z#T#(v^rk0Tw{A;Q-PwFLZ+79v5o1;d<1`3dJs$1R&X=P3CJhByFVEnj*pKHe%TpF* zPh5vDTHqH~m1Q85D}b%k?3~t2vI@@NGp^H9Kdh5DIUjkI55+$)HTp%F`UK_CH6DRZ z&=&)>sLHpzd%Lz-xj%L(hRBO%ip`j=km$2w`*87T#14%*t@tWNPW!0ud_Aa}n{uQ0 zQDJer_I5rPqQ1FDuW|iNx4lTGB%;bSzwT59XX8z8=b6~W-@<&=JRi5eFHsanBrF@} z@r+SJkQkHPrK$ezYLtwtllHuubyEIp8U@3breu&_5}vqz-_KTISdHTwvOrXazKZ4b zZ_IBl)`+I*thN$S`4fiC5#`cgjX?667pKjlhYzZhPW*3i4y9}uFVPmBRvsI(++b=r z!!Gc6CZT|y(V++xp%kK%gB2jzGcZt>S*N5Lz-A7Q)`2SMT^AY_aBn&|6 zC|fX`{*Ui#*IDz##QCPR=P+GWQ%hT)%EK!_)gOe#e~kP=UYM7{Lg_n4=+NL-O79%p(M0f#(LTLHI6meMmoW=-|0&hovHY4F=#f&;k9Ksis%r3q zXnb}yGAgV`G2og%*~obcP>vf0Y&gh;<`V)|(;`(ylCVaQyVKreIO|v1qG$kuasiKo zh0YDZ5^d!3qy2XmgE=OcY34vHp&Su(lon^2o9^7x{dxxiqZV#|g!1^YqNA2+N^<14N~8EkE(+#@NHlef%Sj3x^W#zlrTtjWXqa#k3+> z&4^x=>re+f^fuf9A=wE#=X1O6)O7NRw>A%*Q0Y;~*KZIPsDD%==H(bhflf^*)s5FDM6FxGl)bJ4d#98Ow6W%glfkJ>t1+DiM@`s|q=Tg9%KQ@PHW z?|r|DV?uqH2t@9?VGl5}?Q41ip9Y2snLf}Kz>Qh2^?Q_0&%n&-%Ba2C+~q!ecFTp) zA(fS2p`0QlC<(E$a3nFq;G41!F17LTy*+Fj$vPUu7t84pcW?N#NeK1iblZ1~C=9}C zF!Y(XY_BOJjcSvSu8Yr!pQ-C^-+tPtsS^r_PSbU;4=CdOu*Yl7IV67-|80(G z{jJJnx?{}!C?9f^`$o1`WmGuT`=$@j@x-3d1v1;k#tSh$$0xB}iCG1lAVr)YBoHmS|E{kiUTy66E@Rkle{r%4>;s_mN29)W z(%GL*a(|gee5X>$*cvFy+`A4zo!&Zb7IR;bcC?Ax? zx^-woYMp=|_^#V_f~ZNZ1AX~;GEzFYg{+0yBKv5-zTNLkBU#br!-XWBd6<+*{2FEY z6H&n~^-G!WY)snUXG|>)?WFfL7?hkXPAJ7kIP2Nv|xqU?pHOgJ(8|2hz zu*ozEK&%^YXcsi=@*er-)(;jgsos0L)bN7b;v0W>7t&cl*;wc=g{obcbSr%$@!8v1 ztF)`2nhA2PBLc79U?=do>zeVXLEC8qdw|2-zY5M8x$bJo{GA*sFYkjQL?`Ii2io#e zSclAs6l000t0|EXz1xJG4~5T3f3VnBfA-~nQSkGBpGj;bKon4d1J-?>HVEc3k%YLq zN_{Ax;n=4~a$O{s%8Z@Rh2UxPx7Wa;=J>&dCpePU*L0v(Im{P|#95F!eYDOZ>5pTC zb?;j9!;q=Z9<~_)Rr{KPG_ql>h|w>=1G|7IC6`gB&i@hh^1~4Zuz2Az@)GFNezrk(a<58~f~X zy>IqLywB8c-1M4d(a}&q9w|^$*bXr-ss{{EAV}5*m^>-4Ix8Fv_ixZiBl{JD6U7wS zlJ6HKsl~Wkm0}Dq7I4%iJKYB^d>{hI10_#2ri{*&7!B20v~slIya+5-pP)Nh(&nR5 z`P=hf$Sn6nb9@{Q=D5%4ienD#;IRG2p9G2~aACLpp`B5OPn^lyGfu^mj>Un)*|xhG z*{)>sbj^)qZ~a6Pi7Qd;SbFFt1D5*69d0>1!}UVa$(FbAC#8K=7Sl!oN0KjPUfx7@;0_(nOwrByTa4= zXxdQ!ACsA~>cv4=HgtKa2U9>PLw>QAtQTR&K+#r z$=OUi)PZj0&J&^%rvFuo;bR%(`Re-D-Gbqf8=H@pw^{vn^~%ADe@1>CJ0Z&r%!8u{ zjN)Gb;M1%EoP~Tr%6md-(gBa=8JW=PAG6-WTlTrm_;fNYrFNoR`N$Gvt-JxhcKTwm z=N#A@>lP&;QH+CPddBGXTiFma078#!YfFPMSa4YcT_TAS(TcPP5o#vJ3vp^sgoVirizys(2%U`>Q~UDHSEo_Md+2@coGb z;=fThrUjNm-#yJlRTXaQy_23rnQ{Q1AJC>1TTrV{2X zJSkkJY7HkFwpot$p-RNudo^`lPpIy#J&HM#PPoH0=!pQGj;`_mTX;MV!@R9?c4&@cPHVqmfE!MBh4p~`=Sei;!~juRic+k zMRD~((F8sBT^+adSl+jW-p)?mpXhm;yta@%(v-V=e8wsqb{11O>lw6e^g`G-zPTry zPWn6av@e`=d|e7^&%u%&p{zk3vH1wwv{>H@V&6Qu31h{u?Vm=GJ3aPwK6u&fBhd8p zU3Br@rY$+3OPRqVe!zp5YX}p!8kc+4ox3+<^B+9l63UP zCLjuF+Ok_6kkyce#9D7MfCYnLgnL9Wd!oN-B`1tJUV3~0?``1Z z5g(^PDRZGgaf6Ge^ym2bQoN#a+73{tCN+RQJp_ZxS zK+($k;T4O?&v=7uilBWpm}1^qJprZh#Mt5{=Sg_+eZYdxnbmOh!`NlRE#KbmPvadB z0c!4taB2#Q_XK=M*a*dTwm;Be!|rArLML@49jhD*_RB(w#J083@Q9G#Z<++iptG?rlrY{SYISu1gy*64k&BgsQh6)PaMdi0fs~$HFum0=nJXo{K%ASa& zuE>i-i&j7WD61X>%IdlD4|Wj3&q-|#mbQPqikQnz{L3NoG(QT$tW0522pHCOfvwvf@xko4@p&v_7-PINf9 z{zbSkYvLO-8;1wc)?~O^K=jKJ;x%>tqAjR~s}4qEs-I!Qp9>K1&HG19bJkVbgyM_8 z!kZuMbf0=3%~XJ#=s*(3B{@Yam#zceLjoE}l)nGALPJ1EOBxh7X{FeKjjOj8k;!=S zjOiPhJSy;>g5LI8;!pK20!h9QyoDYX{YOf1I^!ODJu7na;Hh@2N52*juh$?B6TNh( z@3JFatk}ZP0`>(#X<$MAU$7^(mfBZ(C;Y(Krlzg_jgl%C`nh>A;o_uPzcwvbv==d! zpxR$r%1Ph)!B1>U=B7g^U%yBzMbFEQ5>Xlz%w^IfkP`glNjw;Zg!yrM+fPqgaawU( zVAD6stLgFe=^dOLuipN}%TpF2lAG>01?>Nk=`tg_~^_zE-zJIY%_(@}oSNKOvMWI!0f@WG3 z&m{kB26bHS=pR8jmgu=pC|>=5k!4|2P*B6>kQ$uwSzlDQdk<%gL+H%a&%yxlzF!6oi@PI=%rK%&gO0ywT0fS{*hnEm z0g>67CQLsQs1OMeq;(sWfbQsJ+_m*$QwApf)`Vs)Y@cuTZ?v$v3l>Y&YdqrWq*KwV z8a5BFIa=m=X{4i&32CUErtL@)q+i_V7S8$8h;pajr{bA%K<2zCTsp1D>ZeJGnwe?o zcOXjcWT4FMf}o}`lABW*(3n7#5nq4vyA%K3WufHHdpx*$M+**yPsrxc#PgL`C!Krj zNru6%ZiIhPHsmpy_9me>|hx$2p1xdCC3U+6plm;+N=6(c!Qhkqq3yZ#T*Krg?s zixjY9ImvG}Ti!~xBnlCxU||uFL`06*BxH&Z3WTY675etu??|K&kK2=ayf{4GfMi|}5H2a%=PM+Uw>zmm+*J#E{~$T3a#Wu~=Z8-u zPO2>;XWfQ~13pFhFgw)SX*#Si7@J|}W79r*w1P}JB=uPq7B_+1&Y-tWcd+JIn9U}Q z`V27^LxPQ(h@?&=1Ul_uvQ_kG9b;2;Iz$MA$}-p5ThASwA|L^W)-~Ig>nP=7;U0P{ zMaMz;~&OWhLMAhB#(3sPds1%-gwyF33^yV%F|3Mt5Pyh55 z2*0Vw?{X>2tHT!ZWs9f)Zoya~VzS;|YJ1ilx$vzF$VS> zQAhzhH`Opkv*)m4oWb&3j8cj{hZXhMuw@~32P{8mG9)^Mw|UN$2>l!gZfk2rvDQ^O z1TT*v{q}|5mQLDK08CqKAEfmB7vGtL-&g6CG2KD_Yro|2qx$&0`o;=l5JirqDG#Yz zgP8yg4@6qF8f@a6pfplS^rT1s;V+TyyOz;`Tb;#v?+7w!15qBBXYG z8?;tV@|+FO<8}1#AmjB%nQT0Y8n0l+N6^Cq=+O!~>mkh8jW)ppJxyV*JkZwC8yeaT zNgO-W{@_|hJrT5<4l6ml?mpkrtkX*$URMmpmL1Cp07o_yht?Hmomj^Lhc`6$@11bL z>2-u~7{+b)k64_ELJYVvYD|LxrSa>(u!jyn;ldC$__<6M3U9sOLx%oEYNH6a4pagX zOCp?o{GQk2ox|gaH`u%|c(vkmi!XcrN=UkALyN!&om87lkX7t#E5M@hit-*Rbd+S!JDPWU`sAjNw1V$nA<(-%+0z#C< zNKRcrgNYMMHEQm_tPL~*$xO?2PW_RkKQf%OCBaxre`qFdrAcd%Y{Q|crz6V=fi9Sxx>+#OvaeOV+J1R4(LYg(k6xagZzCFLq zJyqHUcZsDMit8MmMZusX>yb!Hf7e%NX1ft0E<$5UoS{tiHn#k40gNZwjTc4HFl5@0 zPBL^hLF+UxT9vJA1#}DP-Xidh1ejzl>V78242BcKU}9LFj}ZcfW5dC9%?X=ggpj1E z;odzdXP;EVB1kjC&G(FW&Xb#t9-SGky=}nrpV|W9h+3chR+m>@)XAN)-v2(|+;om%KR5l7m=NF?{id%@dx&q-AfRW~>d=e5P=s*4m<#$q&CkTgMZ&YJ}7S z_t^>pku3;Q70rgR2;rESj~o~=$xL2QO#b=vU|!{1O-lMzaBJG?BVTn;b_Z{gS%wqC zT*p0jnX;_)G~04B6{Rf??@u{nXT1olx#j*5&pNwRwCy+iXvp)mUc3`v7?sf?U!fi8Wvp#vEOZi< zXJaSP)+VPPTjBylt=@>92T(FK16p(beQOQ9p((fwj^vc_q@4|PzEb${BPka=sa4p_ z-TJ_YXPnt6G9$n9qahcc({ft|Bl!BQeJ;PCMWZIjGPwHtJuW-H$xKV4l;#UJ_PFHS zdVmv<>r=|Lt^uw1us_5CsFZicx?yq5zUT>(Li}@9I>H8MYi3Y*0T$1?nhW zshp5Z6h%x*N1c~`92y-j4o|$IaQ*wviG_ZP$yTpa>Eu+aGq4Ih0ko+b>(zU866wI#*HpZG!(^T~fI=M{k&nPumLNA~D6n6d`%4Bwu;Le~r#2Ta9)}&Qe&k zb!pBfXW}_hi!HMV1eHQiSz&p1W-s;QSepjlvgX}`@tz9-x}Fys4>B4X4Q#VBR4iKuiSenctPpjAsYV}qQ^ym}p8*KAry+?rNc9y_Agz8E{>8D-dY zAZ6!rOtUUf3Le-yVZJSyZ8?+J2ll448X62xowQG zJoH$~-ouI)KcnT0_OvBRDAK`vi|@Gw&MLp!&fBTgr8|^imSvR*i7z_BPAxt}W!GSj zwHFNw?lHIw_88kwAs-)#}iSo-?aHOl5@5Iz=5^F36R$L+K zMv_>fv<~tJY_VqaK%&hHL&2~!;mm6DsCrv*lM>PfWScTi(-=z} zl?h8W05Sdl7np*);~zq0Og=vs({BZlFP3go4}G{5=#QPlRUElrT^Nzwr z@NJrp84NT2{`z&Ku)Ot!^B8Mc?<@8kQatPICR)Q^eXUEgE_l=BGk{>dZ}`rgBVKz+ z+i@lOny>y~z?+{xLmUZKyN18Lw#R#4H8*9_8r=S}^qh3w4pj@b>Fq}71T}r@6L>|I zfMsbPC!^~BvmyDc;{H^87sdA#2e=f080&cF@c;4a-W&en%(i~?P04uIn~crQ5;lW8 zQqF^WQusvZ97GDD;G-aO(X$+FzRIj@BBms~o|I(CqveGyh&BQO48uJ<#hNm|UHk() zy_rxdCsRq2XHm!kqY%PUizw8b-UKz=aFG8UylBY!Ly$+lSqmEjx8bNIZiw!W+-h`j z#yxJ`p>b@-r5L3xAOC8XPu-C6k@w7EjAfz(KYDn~^DdY{Yt2_~?(vt`jrp&?G!Iw? zW6c+D8t~Q^&Lf0oG_m~Mbv>@SVvbr2qlw`YU+wXWuUMc_E4#Al;jG%N754SQ9+O7k zvE8r$RyK{r`chWiuY=CO8kgMVenwSWYT=mf#mc%YXrlc59=Lv-2nffE!!ceDeDBM% zVsigW8riOQ)CbpIhRK?lGFYoznh`2#aMjf&D8PXP(d?%M_pemMaW@@N;vVePRu5 zEH~XX?HnYu$ zNv8O#udj3EWgYiDper4K4Y?VFOvGxmy_t5f4p7Zv3=HrG6A-LqaMMq75~T3{k)|-Q zbw4Xn*x$KLP&EOo_{ROO%j4UM#}8bzR^IpBk3X%MJ^0q<#^1f(nsleuim^6G;jZK9 zo5#hzyN{DRhd~>IMi58t*Zd06yCjz&r29u3Q(B8jSx}@42BdH|g;AbzO>vlG>5X6V zht`yN2?cm*Ot5h<2&erF#sv?g`GO>JPDEM8v@wMTg@14hD|lHJ4y9p|8J6c0j8Pb4 zS?_6fY_3CIoF3kva^9&fX76ja4EfV94f(gPYw@hJTVzV}ojZqIcEJn+&5s@)^TEIB z@%GCbyz1f^jJEvKclx~enX|O&?tA>)clum$VVn7mL>bH9T+`zv&+4#k$;p>iH#D0U zk4~(t$e*V+E%}n5a3cmcIK9q}Wv9XT=Nr2`{fs)NY^{-HimSiZU=^5-6@@Q@rUWI!bZu`z8*V46n+{n~c#4phBC6`oi1U%b3#WXBKopf`s7B=q zNS{MMp1LGFJvKk|+E$29BF|;OuR5nhQUL^B09jSxl*xDUqL5&Ryavy@ESQ(YO=L^; zpHFobC6zlIJ;FpeJ9X3k-L*a5_0mPMOo0_VdNAX(?TzB=Kls>$vrozmTCC*Ghb92r z@u=pN|Jw@BIV0wI=hZ+64y`GE^Uv2g=fsF#ecc?jL~!GeN1V8&#CW!{yLUM#|4BP*Ri8(K7`rLgr?M!Q;9}TGgdl9?-?n5k>fpxr zd!wlE&;mhYi3jV=a+zdPKL8sM^jsM`hPF6hy1MNL3Y#?t6($p!Ufhej_Ts z#PiN~18{$2`22U*xbpH&ao8T(mvZX%265y@rU&*+ICWc{552L?)i;m1eV68@`xQ6c zulVrihHRM=9N4gY_}vS1nu5D`jff)4*(cV?GR0lH#;o=rD$ZBTIW?LvY(@q_Gl<+~FV6tA#|pG5Pi!Ql!xKWY zmMNnaWAgteMTKe}jypx^wj}||;|@YTK6X$)^~K@P_3!CO5&w)*qqk@2kt?2aR=qtQ ztpbKf7zfN*Til3|kO(OXdw6`DyexV5CNCmMRIV*;K68W1Z6JTZls2fmOK{!=Q)yPV z+zu4CKBZff|Dwi*>&+5-u*R)EJ+kJDhsiMr#~IFZCcMtUSfnwPuoMv;OQ>A^J_(81 z#V@-5K5=uxB(;3_GwZzOxgF|>dk?>MbD#50O=#9j($h>!GS`+|abcS$pVDOS!3k>v z%a^`4hllvjV4qFan|qC826V?>`p7*iiuz^U*-clJF%$%ptJB3vYvI&XV=T zC`{`1_>Ki>Y~@0#U?E|M@A2aB-`OR6`~BzX$>h!Hc=*PM^i)iSFpAMo=j*s~hL3Y2 zzf3#O&i}N$z@@N_7cQUK*_;JNEV!FGj@;~R@;2Z1uoCSGknCV1<=BEj5h!s26Qm`% zhfpb7cnJD~?c02hhRY!P!atz4aDFPm#iP6iECpeTJRAmL1Jv9GJ_U9P$P)-F5z-W4 zydS-KjZ4pM@QgFtD6RP7O?_%HY+Z~o7Jj^If)o*Fo#6Biht?Inf#umxZeoSxk^Lz@ z-jnj~7q$5Mtz&i_G5q!QZv43Bhllz3m$W#%ruf;HEFgtpt*80)xBC3bs~3qQ=Op#X zZ}j=~H!f383@csDq1BWppWHgyfYB0K+~kK^>_Xl}{z;_(0Cwf7spwN#7xuh43ERn|XpF($1^t8vQ5(xxmZ zV_d#vU_VbqST@C#2sjDFcxFoz*>XhC7*q1F{r%v#RpG{>OgOU@rlois&(jmWIM`3W zAv(0YBCI~GFUB!+W;B4AC|T*&P{sf;9$3$@cS17j#tD;R)TC5Uifa2B$=nG_mRkzf83dGG zO726!s?7ZzL@xJ}xg9+L!tJ&fIX;m;bl&dVuP`e>rPoU+8??rb_h61vELzrjhWEUB z0i!jyKRDu^M>F30nnkR&>^ZFX>dgb*_u4t)2oA1k{`T5F?|H>60AKsTfd6{+kPp7z ztu!Z@wlaL;t6kpmf_Y|I&fw+GzO=?WUo^u) zCn8gpKl$7`S6wm3mW8Mo2P)z)0z#3k&iG-HSQP`Pb_+$=0|e&TDm@8%Omk6r(|{YQTMHZeK!RAEzz$yL9pCeGFNqGlici_vdKqMt`Bn#@X!wKAhjiYj{rE@T_44e^IqscOj6?Gaj+el_k zKs1)IL>QeS(k|F6=f|s~fAH288H?}}JRE|;P-a=?>Q2hlqaTGL32ElW3b%0}cUXon zVz0nBL>b!ZSbiqAjiWO9cyLbz1Rx9io0rZJM}qqwOZkUy_W96T=7}T0{v#Qmyr##m zy>W?18oC3+C$H)8^DkQYz1z?%Q2n`J6WOn&gpv6MpLx zYrO2~3C}y<*}{GDnhjokahuHxF-j}`@~i8-_`)_jHzgPgAG>;$7eBMf89VD3qYAX& z9z{qJMS@gusO3}}9{|Wjh^?&>Cd4r`7}gjZz22f`FT}RC(CBOflae0PL^38!0=IZ3 znUi#T3w$@S*}{~^=n@yP_FuP=ctRBiYgcA_4}a^@?9d%=?cV<3ms-rMwFZ?bq%g(p z=5GpZY|)~H0w^CHA4!M{+w^k3FNB~L3sl~M`yY7+2 zy+t-gSQmAlDaB}_(AI%+HZTS7Eu+YD9m09HN`0=nMpthXnFEf#6|mL#IBy4s%_+KW z>=BesP{{E2n`)P0stQow?RZj8l)qp5j%0lF>K^~@?aMUlmfleFe}8de_P}A7uC4xiUmOP^;`N}_Ov#gmf+xO#s@#X#`!15{PL^k zNn*i2-`L}sXEoTlDZyg-;*EXIJ*Cc5PHCdG;tMzSIC*Qr)6a0*leL~^X)Y>2KwG-G z95q%r22*uK83KXFO2#G#z7YZ>28lw)TSyz5kTPO!`vuf$b&RahU)fbMR=ix_dex|? zFk6}8Sd=0zORzRMUL35oa^H2o{u?4&{S7Hh9T8*n7-1E$G*c~Do)-|iwU5^M44n&Y zJOHV*4}ldG^HD!~h2@ZblUsCtD%wOxv}SKc;Ja!ykNljSswTj@eekV3hGkpIztOFQ0Xq3ITt8O_wV# zpJi#*z26`D%XLoKBzf11=ZGS~wYLp9jX~B1YJY=RR zIq$S4S*G~T9Ydsqi_UTGQQy2{K!0d>-KFy=rMTvn9`hZ+!c5KgLq~y-Qif(Lp{_zy z^cbN%n-Iss8{7~w5{nonG`BpLh1MMC0XAJh=^Dfxj7p2oD~;o;>L8Un{M^+MD33+V z-NemNRqFr8#i9Gar(U8>`u_14iyl*t1@(H@Fvw<41|R;8eaF3?3OCKE-fG{#u!wU|z; zhKwRaR72KgT-vlTW%i*5C39(B>DnAJBm)O(YY~BisSP|Py)BueY6s&+@Q``gwdYcl zjL33>BP;;{%c(w%E}z)K#3V49`NPky@!nU>vt=Q2Vydrf@TSXW*uIpYwc*p(Z*cKb z8tmBQ3|X$btiZ*v zKw>MSS0!27ma~R25XaT)U1>qI{W4}+9U?}U(Lo?{1U1{h>GM^=dkE#(g(H*{M-?C; z{irC=G9t5eCd~gZj%&StP2Khrr*lxc(}>JWeSRL5%`oV#FMie)&Mq%^> zAs~tKH{LobGoHy&?-YKO`2&k zWr*X5dOabDBciy5j2aNv(Mr=@J;0!Q*wLN~hNLZ$jzZMj6@jTl?h23@w)#vVZvJMe zg0EiaYW&mpQto}saPMP70Is`z!j^@IZ{Mx>*!z|^ zVN=4MLn+_CXTm#PyZ~0S`(Vm9ZX5Cb*DWH2<4*kJxBL9&mGejej~qz(n`;OB-n%wY zi*3j%ckR0jcm|?$ZSn*qPi}Gmu_&0QPC4n)sbt^=<&v=^LO?AtB(cSe`&d0dSnYn+ zLV`|RXi$D(`IN1K6jksTTpXUriFk1=8JU>JHez~{Sv|A3L!Ere$)~^Jil?3W2Y-J3 zt;aD3-DlFmos% zBUM_Lx2?=6)W|y29k`gZmJv|`CdFhuw{_5(NvcURg+P!b5i^|{ah_EvYb`)B?60$a z_DLol&j)8c96;Z_kyvbY|~_nam#eYWQMANJW8SiW%cgxhy%*yWf@pZMAa&%dC-&G)5z@Xhl?5)Q8!KK|7W zKJdDE>Pf`@)r>#={09I2s%08=IIxoOpZ;#0-??gmnPx<$wDUtKZe;)dm?^?n6?_ac zEP_F!vdZ*etQXa}PIH1uBdi)@^(0?kf;2TG`A8tVj$V71=N*s;)>_wJr>=fh*(_QDygg@bE~Z{0B}KHeA@Zo7ZPJ6|+Qqn@y1d6kcRdBoFBiMZ_% z&5iddZoID#z&KsymCtGOm79nB>gyM2)uA^s{PE{D_>C(Um}xog!-qe!!Ee81iOma= z?#OW8qa!Xnvs0)hkESt|%2qMOM4ZluFh4{hPhSiw^tgQ>|@$a1t7?aLX zy0mSHBd}JYjO5U&v;xg~SzwpKLXmJMNgGE!a4a0X*0#{tQ_I=DAnjSyH= zHo#^*tT;?upGCxN=H?d3W)?{&6NZB|Mxz1sdO|H}lSqS6DOzW)JCGKE!v<{BB5H4^ zHhTh5W5HGMY=j=KIpjHCRi>Fk@oPy;yP1$Ai7NwC+1v^UuC`9w96fW%;M? z_ITS17l?%6=6i;G+g{k=lx;Qo!;Js*H!ECudAk4}LxYy-je{q0OS4-N7 zimX}}Q8q%2yBG;;BnIg>;MjPTdrroR&#|bj7fowpO zFdp{luH4UHbvIINP){sNorE}Q9<8FYwrJlSVagV(Lz(xbev_e%B@Pa-m?{EpJsYz1 z@+}RZgA4|rnia{aNr}(I2v19q(^x^uOGhZjAIUqGAP-Yux%&G9-v7E~qR6m5(0uY6 zJwEXIWg=miWQM=}#s*hiG4Ix-NIv)N4c>6+47Eh?qlYH^>POdk{Y5q2@uCGR@P+U8 z`JHzxv1MNJhTSQ@_@}G9^Mx(8=kn}Ne077DJhROiJ8LLy`HQbO>h=YvH&EL0u`jQ4 z@i`67JGF6Crx5<9Pu#XaWT40;`C_UwDg<0%ilyZ!v4ikdZ!*e%JqA%j$QnXMMMR#I zlFUl>ZwL-|6EkKeYtJm0lXkXcr%t0T$3jn55PFOn_dpnQHYSSeSe5;&pS34cad0=7 zaq;gt(Zu8eB4tKMJ3(2A&AJ#-r`}qi-JU_tEixI884T8ula#p=o=0QxbdtslIvtUX z)ynM0;$vUl;Fn%8PdyP#GRxmz*X0eDwwY;3vP|*M-|cew1x;pJ z5&I4+{@q_~aLL&T?|zx%GJO39JuZ4mgB_b{tanrX;>%r5-7LBE{5Ask{0&`B+Tw5x ztrefYq07>2#1+q&!5G7*zqw8$5xo34a~P{COi?j~FjR6QYza;pThgF^QvPjaf#DZO zLb|O)R72)r$3jHNxPh#-h>{T^lJv)t{p*6&QB#RzHru>qfrZ&x(umV~Y`Unli_v4$ zWPlMlh89V*Rzz_P`#A8ZpE#I9FmL;|*2l^VX|P6Pv_NMXbOu6_={{D}Nt!dn@ho!- zOIXflY_c>fS?Owi^J6P)Ta^6PTb5}xEcfl6uw^0UDJR#MWR^er>>3Xp z(0t@q7Fe8#_{Ob0dIQ5-Uf@=k*WNbZ;F{(aUa^R^aLp}!_8d~Y?=|zeX$wE`AWi34 zO5tFq(m#PpNKMtZeu_fv#|jZ6qBil6>}&a-hdK(cs*mb4b7yCm$O!3 zl+H1Qo+F}&72;ZpxVedhK66b;zu#kZkYTK#7T1~U)QLq3HbonO5E7LR**Lt1{>r0d z!^6}g%|feAZMKD!PEV04Q&6)7P>W?jTJi@ij-4)}h`skhCtSO3Z52oqMLX|`K>;`-ai{LVW!5lOiHp)p^(bbgc7cspMP)4)QKU$V}yM$^;QNk=BwlIv^8P)&@NG;C=ScfqgoO zty@*(%P>5&bC zwVLLlEUeYbtVx$6VKRfZ0;>iXJwf#kAfuR>#4=Nl8K;I}Dmc;;G#YIhNeeYPNcZrA z3|4oM*a7WE#KJ<&39qd4N{sV_CLhP{A0B^*W3S}&*%H`FTds|_q0fsz4pLR}4SXw) z2L>tV*Ts60l1OC&<|R1bvmD97q~>q~QC1im6ksdLRIZXiX^-x$fiK^hio$$7IVWq5dh z#^DXkpZvl+PdT~HqX)+P!*xA=`>hMavEZS78GrHBF2DQE1sXNU!~0YI;4|y|;V&*S z({wcTqUcdIdMPtJIC@_>wYm(Y($fJmg*!JT9X(1~)Z5F923>YPwugOt9yNpBnwp%IA`>khxc7F{ zfg4zyiP^l+rcrNWREAPnZnkQvC!z?dEx7^0*~AB}x5pcjTo6^T;cR)>%1wq1j9+Zk zw%*!8N?jo~O$oF_k^F1}_NA?)Cxzc{QCI?iQc4PQ+v4W3wqi>sWOY%p(22O<^d@Pl zxM$CZ!yB4cT+~5e*mW@D;r$sef6gq%Xu3nq-Mc6JmtUCYj1wAk`zg2HKjE_TTNqN7Z@*=Zb|d2Oy5_^5-r#rMxx`FUa&RrHH?d6gG0UQluV_*Aq;5RqpPMaVwxk zA{eEH!Pqg=LV}BrsCTkl>t;`*(Q1M;V@%p5#rY=Gnj1uo1!m@JEYBr0nkOR#WRoG; za6&yvNa}UR!c?hKSK1&PHBThUj3)M0asdTa8|zy2JQ2Idp0MROQ0VwWS$TmiP`F8# z8Vef)vgCp)83?WN2fWNWs4^$>1jy?9n->kEO90P%P81uFNT9t%TF&yj^!zqL2o9_% ze)zzcD=(i#NWps7aKn#=yy4OgAQ+4d*WNnf6&JOMq{At0x_iX)pEi?oG6Y|~sn4&x zW`TA?ve8%km(Q;9f!EJ7(-QPXhX4GjRes~jIkqj<*chbz-X~Z1;G5<-VRI7XT6)XA zA{nzN6gJ=<$s)j3ROsQ;8x3P|#yJLTo(U4?QvXa#4)!DmH)1n7aHDEAB74H-j+||G zY7IFNIz0lT5o**!3XM)D$XH;s3N{*4z)w%AQp%Dfb}EPDcyXw_`rQpTxG-(e#yE@jV8-@9oHV`-*Jz_LdV1++F~ z*@*FIn1{7ANfI!|@g|Jc1(C`7MVkCUa^4UHd%>wEE6z$bAjMSOq0BM15<-M5O1Duj z94d<`!G=e^7)3~K81T*)FM-tz z$A&N7)Zt>|8HLFvSUW(ceN4JRHrx+ckGMVqahqmq0o&X}nq`c~LndbIx`|rN ziN8#W)~YZUjil3ZnA}B4w1bANXsmtqk793?DGD2P4C$uJ3Zy&&(1@n534^-_YgN7k7vv$TIla zEq$KqQLp^b)x z60p4Rj0TsS*THB_97klC4s6$)eO)M!%3b*jOwY^v!}s1Nll$9S;9R8Q*mXLGdy<12 zksYXxYPRRij+18OOoLh?Mnb3!M(Z17>4a81!AeV(rZj3X0+T0o2YH)8UH3c_&x0@( z6B=*pCwQE4be~AuiW1n1@|ir!+j4CTRvs&XIza04CqqQ}Y#I1NI;pM!qp?^H5?;^tgcLLg-;<1nt5qp9~PN% z7XRFLy1f001)4SYGx^+iy1e|NIa+o1x4r)M0T-RqrrmI#0a+_3Mg~VQG${tcwa4%}$LvfhhNQaVX!o+(O=(GGsIgT5wb5N4kGZ z&d3vaz>B}JC6)*wA`lT)Xsne5JJ4v0RvIH!{=*ofY>Jp{I50DA5!Yv^H|MC;7tzKt z9t}Z_iDiviy^cVmvJ`8zQ-unMqo^b*1%PC6_;U_NWXdf;=tk`~9$15rb=NxEvHLsZ zo`+I~*%Y>-t)lYv!mmN_o>Gi$g~=-A%2Wib!0-ZlwY-kzP%YAeDfxJX!f*=voE-^po~+*2?S)-!WJ+*Y%-@bBO+G&aAXkM zjmfNTb{5Q*oozYaj*`d>gfxe+<33i8G1(ZUGP(oJLdUg-#tQZvR-Cli9W!mLqLgAVGOYC!Z+qc9X_|5GUd=VP4f*%)+=LKt z$HQa3c+-I2edjVs;!--LaJF@!>^&qohs7Yo8f|c87dN>SOmxJ7HObnjp))ya78mF3 z>768Q)pRVB+c>DS=Q>O^E;3J!tY>Uns^z#6>^_un`VN-~3UL44l(SE4U~w1K5AGRr z;hD{HgXOW0+;PfSADAQx@LEcNjE=UvJKi}^y%n7`njvTO6o6hBh#Jo3zJ-kHvrc}k zCoVnGqzDm1R7Z$77t2&J3uCPZ3y>&GnmJjn=(<8domz9ABxw`3=g71n%O<4Rm`Fq< ziKW@75%tDFdTTh(=ZRHfIvcTEt>v@{7dE3(wx4u9wc0Nc$1xAz_Bj|oOdQ8p5hFze zQWRYjQz==+@eT?_L7mQjpZCkGI;+{ED2BfCx$~hRt%l^x6Pg&K*n2pmKQcV~$!(0W ztoAeq*9^}*s|7+Z92j;TP@I2iy>PhRb135lPirFt?Ao94(JyuR-+y+AW+HiH|AasK z>^lGFFKnXSjEUf6tOOS$0!^SA$P*>Wa?&wB)-fY=9D?1Gv zH=>D9<3ot?2sP;w3606pf^$P8IJBvNfxT|8jSI5Nt^#Z ze}ib&9{oPj4w>0;Au?&Bvmrtlgh&uk6DuN&H90e}WGtE>FHuSZCd1kcZ8OKH)B}u2 zu#H)4+@{f7K+|;DmR51sBZvF__4QUwA~iMu^-KkbD(KFhLM^5W6&7nU%w(NLtAoI@ z^^D7zte=F4YOFr|O(%4FY&eegvgXf+}Cb|9AV~7+BM<%7dTbqVC)XWrRQ~WvtPkoyT)96?kq|vjD`F5OnB-UZL&;pXkGLB z|FFUDzH^z`cEq6##fLt=!hd+z5?dDHVvGngAAILi<&)&umcgnJDG^c=SK0KV^tV&|sB z3Fm-E4`%G#R40kub9>*Ol%?5(R^5Hq_wGsAG#AmTyU+LI-D9>cMr@jw`PM}g;Ha@> zY~k_Z5Z(?sjvxc%-sG*b4Y~;_qcSA6k~b;I(lL|0-*j$1LZC$x8A;~1pN}O*)MpVg z4)hJ>h~d{uA>Y1WVj7Lk^0lBDVTfU}22qn*XAxPS=Z?D{Zf|N2#iphWIulc2A{*;E z1YrX3X)0Vd%7t3lWI#4r!DJKaiJ-mX9As^l(P&JR9b(*HCDt32{kS$kkufDX%7^wC z?HPI{`Njtcn>?_GDe%r%%bvq2S3JX!occqPzO`8dzCwx@*V_FYM&si{N{A z4|wKT&0<`0|V zz-mu3*NO5JEWzP*#e7Fniyc?wu_KC3Q|6*G!@eUf@oVd1jMj#|hcg7QbF=F@_8v)@ zWUw^jI-@;@6>}ZIe7h{j#}luPv8|{CuoP5ahb?Grh@#RM#oMZzFq{Rq{}(bsAQ&9D zIkyU{QESaH8Vp!E;i=9+I-d(YS3=@_6siIxSDf5t!dUH`e=?_+PMl@Sq;QGUK2V0hEm~p<<)ocL+>JF@Jw~SkR626=@1#pyAF%z@r;~KH za?f`^Nt~_}j8S7Pk)6uFu;sSIOes4>vF&iV7;)flNp77+Zl`wfx$VMM?S~HzdC4

rxXmp`pj82jFO-+*VF*&>qeCcS@e%IP~Ad6E}==SM@{_JUc?IH7?y@W=nS z%BwEwaQ^AdpsS(Gkjzm=_ud5AlI6a~nf!VNh?yPY>K0roFr2BkZB*C z4Uwei$p{$>P#MH=5ozGfh>Z{oMwU)9qEVAr1c!SKnn|D8mcUxWYTrGFn-^*rYgz4E zhAEuB%>l71UBlrG%>}2`u~u++L-EjKip!tc0qdBdcRZBx+Dn^cN>%bUWpuoAnA%p9 zt#Nf`E)jS)9^|%f##C69#ey50JUTbwFe;_@;MJt*m}IgWW49uO%nO60%#*N1nl%C3 z0r3?+lX;== zhcxhFy!8ATlyV^4-MhwId~Tas?EcW54~;nMq&oGQTa)fOFk$DWgl0WPYsHZb!#Sta zIelk~G*x``>J?7gk?_K&&s0~gM?D+f(=jJ(<=|Zs#V8|L=?R9qNqb?Lg{39tg%Uy! z6FWJC9`(@K5R1a-)TN(U1vX$WPJO+>*dT z`&f`I6zGuq$So#WD3}zFjY4- zm0U*aL}y03A|WD|qoL9|DjOm&x$kW0N$IO>q3$fC-J(>1deTjx9q^co33J(wAw~*c zLcn>aHH!_(-oq(dmlEbXF+w=oxK1--rsWRU`aoleIB81_fPcQRi?#5E=gncKV#-~i zE4v8KZx8~aSYj-!^(~LBWDHfC_WWixZC++^eg>n)WaD*W+eeRAFly{JQhBFH9;RFo zHwCNG;n<)QEX=x&bu=;bM~3ao{||d_9&XuH*Li=|+IydQxbv+!smeSsgb*VELV$!p zPzDJg2!e|JcH{KE_}J=etKE;?($1~@*zLezs~`d@Lx4yObHb2;%v6S|N@}`QcRces zd+)W@`^VbD+UHhKn@G!Rc%G2ljjbiR%dp8!V@$5^$o{;^JtdON3w)Cmh>UUR6ohR~NfZf3S+|$O zQSV(UWjIQ2sF*}1v#KAA6_e1gYr!XuV?KLlkJ}!c@GEawPAvVV3}DIQ1JX!2-4Fx`$Gs46pjEb{2?&eWUM+1V5Fc^i#(GQruI?&NeM5=M%_*wXdE+VLGtB#D3LSq0mv^z%w>U(9q!~{%HJNk^*uQ%^*Cg29-Ojc~P0(h5uSN*r zQ!lqD)hjHwTXaST*zE0NtGj_0u243oY0A(l`BH$=DMMm;*nSh=r*tHO#RE#l}-|!#b zvOu#YQ-SSNaS#N7BvOLoYawer!^AXMSlY>j2U^t2V8SkDyh;=ettqid9HBjdHUUWA z0eEvqE-_VvvI1dXbt`7qLYXLv@qCXXCnp@(S<1ebgO5$PbbmP;DZh4b$R+#BHjGAD zEy-o)RVW3va(?cv0Z%(nrd5+!GWliaRau_3n~cA^t8 zaMP2;;mh|P;pz(mMm@VVnD#R;j!SZGA*Tz}YU}b_BmrqHoOP(qO-4n|wiHQ@M9L;i z(Q%dVD0a?y#7Z%V1pTq5QZ|J|Ycmyuppsk1PsR=tkL=e`6SVOt*SgHe3Ns5W1~cRK}D(kun( zM8-LGbQH)?i8tnye!(GAW-Yl@7ETEW(orA{_SHq~;`x^~@B<&M;sW*Cu8}=D1I6); zh~BtLslJQlvzC}?1XTQxc(jV@576Nd^u+Q(w9P6psVJe)AP5J;$u}I+O~k27nBj&e>fi@a<*t;IWVk_LixYZHIf$p$X^gD$}mpuXyLfWA^U| z*tK9^QrZHM zw&rrmu+U{brcBQ?EGHU&)-7a2u>4y{GbX2*h}Q3*h&g<-`PeuP z`5B-nb75NGS$|MPl@l9^m5q?tn_*^dkqZvYQVn7}Jw#1bh(}|h@c=<=4O9|AwnzZi zBFJwFosHYF`{d7yF|gK&*)bm^BZlDEYRs~@G)D9AiHLUHW2Ry8 zlZTIo)T@1#_xPidM+rB#fImCaQY0%`h`D6>#%FuPc1IJ=9DKHPWLSE;w= zSeT!oUa#UavA3hNiCZGIyVsy(zCp=;CRl^ntS+YWw_$tIvol5+=X2CF5Ghk8Wf4`E zQcSb13+dI<|IHH`<3T@eaALU3mOKx^20Qn4S(=zbSXNIV%Pl_^dl=5&%V zDIB)L_QI6*lBolCzB05%HXB=tnMMgIG)h_0(@fK|Sco>9Oh`_Ry8R6wUyUgTf}QjB zXq{M#8HaGeo`6^xzIg8tPfD)3#1g9vE@`^Q?jH@wJHl zIOc*qUe-N4xvedKU%xbPDF@bv0*O`{;n^I9$fQ9l))~qu<5;5QUXxavkauP-qtZ3_m1mL= zo7_|-E2v(&6%td*Nyoz=`C0fk>mBPMGT#aaL&INvt_ud<^r9KG)@=3_kDZQq)}_{O;=MO+QSuCLyml62G~J=% zi}wt9%{6U=fbKx^soMs;>Dm@j*hH}R-`wY?zJD$mQFG#%c#=LnjT)z!k;x(Qo&3lG zvR*Wrb;UN)34|pp7`7MA#71spz0S22xjrN3I#}Ql8fA@#ELg^8+K4IB4sG)J-F1$3 zwf?C+n>DX7Xq^Q4s0qjczTcxJ%GB!(=4%!Dkz(`IChO}n%q;9>_r6_7zii1>G8vy7 zCZuo+t|Lft*Lm3pxHr^#$HKpBx3@f3@b zcCt6pHz$N$wF)VzmOYHo493aUtZ6^)jx@cIX8%qbs`DqG*y8m1xX&PF&#p!U%)8`NcNXXJD=OTM2#N+%=3=?08J7>%11lHvh~ zoXVbGxh{t!r!xyDG&X;*?e8M+CCYdlUmfyTr%E(?6|MFH=j<)B(1KbJBlH%GJH)bz zo^%jl9}$$nD2(<<1hhFp$bjby`u&LESaD))#7r|t#)n*$~mmS-$uax~GLSXG?A$Kntl{(O)3e__IJ{BVnl_m!=dL8X0e*!%b9wh|(I*uV8|i#8X2dJX6?=2!}zKZV%Qv z69BsXh`~tFsQCzG9NBrIy(yeDL8vs75Lz{fz@Us^tEbtuSVpNBr45HqMm*&}6{R#c zeyz{%e|*T#y{68U7uV3qit_5GRFOh(_u&aY`|b`u_`EW&cuoryD?a>%F4sM?PQ79o zmNxjOPP^fuG`#QcyIgm9jip(iSSi-JirG4eR_O5~HvV;E4#sL2g-&K>hccb68(n&i za322Du{xb8rvq(s>-NN8#jYzd@5T&2NEk7x*_-7IOeIn2qBL4g@dTz5t+dHaU33<6 z?`9>Kf*rheUdxl#=tij!j7E(kv=)@Bb>>TD=Bf<_%?h3H9M(H~INsl&qE?s*w(!i* z7Q2MVBt>phrnF8(SUCyE-Ceo|@|*p>?ARcYLJ}!BxuH0|3884yYR_}tfi{g&h|-E? zZHx@Jh)1jFu!mBSjgk`r1G)uEV(#8u8oeVj!)6cvV?maZ-(*32Z#sAe0^m*!89#>sbLkhtc?;UXE zMKwHWIJO$`@88|wC6|?W>q}aAQgGuP1DhD5p5t}OUcneQ;(cu82Mu_xl zB|pQ=wmprjOFSdf6Q3SH?pupHfC9QtqGmqfIW^>+z23 z=Lmewt@jVvx8$>PAwVm|Z3jmz&w5<2*K!%Y`oNG%Ai3@vsRe}l%GOSi@Rz|KQD8J%Kn?k0&#E@o<#|GZhn%jM3v4u4Rmp@p9;9F>M@lz z8zN(D;BV5kxVDVxpGmutG%edWF3(0A8=$ImhNin$a$XFbF(c)42wTWh93!y!h{u?+ z2q^hgX6Ne++EuoO=d;$?$Hs7-x;jnE-yjg7#Z;X4n3K7522y60Y=R<|1Ngqjcw(u= z$JPZy(`06LkpnyG%r!xT9lUshc+x`?K{&(+ZNXL@B__YxN!@Y^kEFO7aXb!E5Vc%N z%=$IXX3FUpOpafrh0tJl!82-h6d7qg^qDSiysnM!+w`nQj)$DPyKJT3Msx6J$o`!H zzw`r5K6dMnJC7)CIT&-x!Ij6tG!RfBy*MD@5TGiv8Lt}g?xah1ho+r8I(GlxC z#fzU=M@Yf_N5(vMI_7oHw@Kvp9hvaJqakm8Q7d;bBhT@CvN)Upa}Z8zE@km!HzX!S z|5Ns(9VyHd+bjXwltyRhWpPB~L~_&VV%oDyRZg9v zRU!gQ?ZJ$37U<_h}^!hZtGR;<Z;h%PBqX0HjzH2+r$b!&BlSHifA0(wCs!g?djWoRo~500oZI%P1tDsD8h^SnNuMPOA zSI;F~)8mh9PZoy)YG2eoXl)2e_TR_OrXX!Sv$bW05!jg`MeYmsTkdF)b^=l+09`)! zyL^W{sLF*d$H7U`r$1$Nx&)r=bv5AU8J)&}7G`R@k>f5R zF>tYCkp>eX)EKFUR760vT&Fc(VKUcXwbx{$cNXh|HR|zcW`ZrdH6YLJ#N?o`7f50) zIJvGl)m8LWi&lGqbI)(mt}04mhzh%iXo8*$QJxKVF;d#qtn}T|ZzFo7HTpF|ApHR8 z2N*8^A&W+_+gMEwsEc8~U8Y+03NBGu7*7E^v73}AHoWVT9jfSd0+ z$&bCX%6iZ6rfXXWVYw3Tzq!kgzj6-WgN?4@-Jk06j@Qmp3M41jBDMxG=j{m!>sBeB zsc@e$A>+g>k6X z;>>;$!YXDLXDiu8C|#wd1hxVpHu>L&KHp{6yvKEyH>@T89euh(%^P3X#2CYUN51+{nL8Fl;T4y$C28=8!AB8Z* z*K~k1;YgkHwlLQ^6fEe;{UlAgnPEy5nQiFvVIm_JWzNxL30q2&xfmA;kyc4ghjrB! zMo=vcST2`XZZzr4)Y%x$u-Vy5Z_;CTRAIfRc=VX28#bvmW;k$ei*_ZZBuD6|hZv8n zvv(XO9hWt6c|1FHofx+W86YSly(&fqNa=yBV7wa2NDx7y>k!%RK#-f+xH>SUiy-A0 zN7N~b_*P%@wwJXrz}Fv{aQ~5r|LglKoAI$z5uf_nh@W}gJOab&R?J_1w#QGtY8HSS zzc%2%-(Xjo-*sV)(In<$xAb|-OWHJQ0sD7&yyIP6p8xa;)w0KE9P=li+~W1mZ_=np zCXwb(Zs_o%-!sEp(<6)w|LwyY{NS}s=G&f4Rf9Z2@5$mYg-2${a_V9yCN*5f#Bp?%>Vkk9zXr+Hohn5^c8=0Qg@Zu|~>|O|n zV#ObSe2ee7vd;N?N_O2Ua4xAQi^I0^kgg4NfF3w=+mN*A2Q+80FC``Qs!|`xvH_4Yw5NHF3+Lx@1_ce`*F@iNUEjCE%Ai! zWuM~~iIk(@iTr0^k{R3OVdiXogHp;CiA1a7n=w`6)2K8kxAxJTX`shz5Dzeu9$Lp3 zHL<^oG)`VPx`~8dX&suk|7N93^bnV zKo>3DM3VgFvSFnJrNp*;(5%2G0l6pELjLDRJN&{M=BSlD1|!Y?_-KcBymo@sh7VH+t7H{RCc1((%m)g>oZ$NcOcZ}F6~JbwI@ zbCi6;$8PQNT^Cf?w^#x+AHTKBr3cDfa&|Q_cQ)h z&7eC!7vx^J>W7kVYOdJsU#=UhbR?n z6*ZYo(2Us@tDafineDhlx_)yzo{T+eEZ&i}>REBjj9`mnR!RU;db?+3HX5lIBf+RK zh8Ut2UhJbrD;PDw=t<(GsWY`^A$KzA$XtS&Ay0J5>XR%HDcCynX$YFodx(nOz>H7f zc>%HU(ZaJ@3R5IBW$f5A_D&Spk|{nRr5nxTa7hx*N_VLE?GJT$$7|mS%i9L(Q-LMF(HP z&%J(@X3gXCcXer2B~LroW`KU~>jOL~xawkSBzyCn1A0TvE1%OsO8E3`Lzd?PE;%bm z(#xi@K>r#4C%=OlhkUj)6vhI#1JI7$y1_lrsqssGkf+_F3dvZ`cu>gSG&$okMYht9 zJ&}(OhUw2I#{qCWM@+s=F@^LgNAc;fCS5gW9_(Wr?#9&EVqE(66x&prsTHtG2Fnk* zHikG>Xl31$tlRYvbZE6Dh4payBb{=9Nj}c)_Z`t00(4C0ksI;)_aWAArKGnIUVyDG&Q@3a}<3rwKn|v2R3>8D_ZQD_X%UoAK$Ra>z?0a=X`*a zk`I5b$8(-iXU}2@Ap|$wK47I|II^nw=|5QG&u{9m+1H%AyTT+gyz_nQ96qi2wI5kv zzUgt#p%JSc%?mGYB81@H!($#g9`o|6S_mn)=g@?^4~4w(+BQ(-(GHY)9!y8Iq~XQ9h=m4_#3g;i3p83ufKc&lvY} z@?TyS^PZ$UiPUahn!@`_Z@%JKQ9J~lfu*vA=P!HIix9eA@X3X1TZ_bF=An+V!JM34N|64tfjQJiuQLR zsjz_>pF(;iTkr%0LR(69a^nKinv)hbDU(3job;M?hbg;IWkvU-`y}A9_(65F9-napTtp{N$@=v-rFZeZJ2xym21i6C6G{ z;m!*`svqHuUbF(}p))_L2zg49aBAY4e=anI#ZPz=J! zR$$~LC(jcOxJj`S$*6g52Xkg~m&{e#0a$Um9f4sm)<|jSj|>~96}5^DM2RBFMjt#R zp)yoUhQ*mY$VWJ&A5S<1Ogrz_p^=+HHb#+KAs{1R73X`W#tA!8J-RYPO3Bh}IXkqE z|36V!WfuNR8X%9``G0^kuMUoNd5DL(Smkh_kkjMDp_8+%;) z49%DCAMuNCT0{!PS|{S&pX%^4ueB@9)y~&1-X8JO^0AmOCCC^OhISP%a5}FKqG$ zpBQo3evdm3E57`o;>!z1Rt4@szJ_$Q7N*ENG`VG&d&6Lg z4pHeoOQqtXZ7ao;!;cdrTcm5J0W$?Y+qhLGH$^|IT6q-}Kc}d7;g+nV`Mq=vFJVpRv zq!~@rRD2y7sG4Id+rwjAe!`SDZ=RSfbF&s_GAt@!P4WB47D|``P?`Ss`;UzI>Nm!G z|J7{(PHsee=FS0ccwq|?!19JK_xQo<+6W1g(D32UcX{=5TLeCQ<$)1@@QD#Wa$S|* zd;21P^Gi!yyhn1~)2#2q=kAO6uYc9!Z7-iqxD1-#{m=$K^x_t~7Xrdq^Xng2=S|nP zID1El(M0oK-nUN47e(>iG^X>fxN{JIS>K8p(`GKIF-!IkC!w>`pk#rDEX1~hk?Rn0 zdTCbmcdO24{wZ7g0$7+I*c_YKJ_Z4le8F(6SsAKAgnZx&>J^D6 zZL8lIXwF^^=nNuGcQg{iW?$h;L!&AaHEO;w(7HGe6r7ySNE|Ybz|3MN)8Hls2BR3Q zHH})pf!%fLRWES>ceV=Tw00?qMWaw3oY&1#t?;1(ja`27)pG>CVH_FWe{+|&yu{L+l`{Oz7rMOmnl?coxbM*s zKmCWBTz^%WAA0c&+9>|!i(UT18)rCcN0nDT*yrv4qr;o8t+I2@BZ@VD@`){8{LC5` z>@5>UhIiet#dDuh;j;58M6u?NZ`k5l7gu=dIW{XZ1yWLKeGmlyYKwya%0La6Xl*2C z-~ptLMmRQZE@vRe36gQ3FgoP!)A?=VXc8zgC(~9nCFuxf^WmmYxlL@=Y#5!f1aqr6 zU07wN*oEi8Xkyst$Bt)#{rf^ovOMEatJsyR?|B?qv6f|(z{YcHZN)p2Saa?!$zp3t zy=scVG-7JYk@7@R=4QGO5zdH^-rVUw#|lb;NaY!JmRW17nT_E*kPDcKy%cYm_OzkS6#)v{z9#=QUU zw|Lz(E&FrVnvdSn<%Q3v)2K=wI~DN@@7m(I7x}#HWiv=A`1EZw(PlUvCl5}LJ2V$#Uqs z(()IKHU*H(nC;$>m{e!sa1khuKE@P@R#{3ijuczx_GNDH%xuFxoUzV@Sf@4>4;%}5 z9prtaai9$4DPGO`aT{)3j4reBNo8 zLPTEv{&O=~oYkShir-wYa9UH661mc@C}pd<>*l<08YikwB!F;Y)T{IHEL}qvSD24~ zVnn*Kbt+}7;XR+);`^>@vST(tAo#>rtTWTj1-s(B{os&2i#~go?8m?LSDQr2@QZJp zp;?ohT#t!j&C|}Q5G%ubKGosVcgOtNTW8oc?{n{wG4~#x@P-$(@Fd)QXw1!DAMv9v zo5A-4Uw>%Cjkk?>`zvShJyCeCsWd;;S42e9g+V-#MdDvdaqxkbTND85^}001NSKqt z*e4=&nU;bAfR+P%Ip~x-B|FYeQ;ttXS82zh4fi&mvbRqj+U#&lk(1oH*6li64+pn* zmNFk<((mWUY1=gfKFl@j9jB9SCRT>kj^d%?A%{*ybcdQoMX+Pm`X1KHg7bC-G^;R) z4c&oZFmVHPO?J32d9&*B2ZS>^xZ~EDh)2fc2U%;_F<+$|c=pgUb@PcL?vT#=+4ew) zLO`!TSl>irws9qL4v5H#h#SZ=y+YM48A{}vne^Mc;nogUTv$m`z71dd#(>2cp9}X@ zkW%pQ@sLqyxOBfw4nMITbKAo)@BGnub}a;S`-;OWAs3%jMhL;7lQC-@#qa%_7MJX= z@aRg&2R<|4$G&%tAdozID&oC2_WAiY%u@~ohgU*==ffR-{tfdqs54CXYw;=oINpc$L0|7F4jv16@Oa2(PiHIFav(Uc98eDIP%w#XI&}J=O&@j_*l@EdG8L*b zra5o3z+*@s-q~g;j~+B^ONE{WAh+>9%#?$Z;|8Ut)}g6-Cbyw%q{ zbRy!x;}IJ@O{@*o5}du{6L_%MSKR;Dgq6)W_d+lfjBwS|-?R6cZekpN3=&?0iw8(| z{phs%(`!YygU}}R(a42bd0>`F!g)nu%aj%@*SjL^;>xzc7#Z1pvty=%ZruCUyP(M0q2cl5dL@+KGTtq{hVTkae2+yrdY8a{SQ zpPzj74E2g+FgE@W&7(U|{Q6&R^0Tj>Wob6iVEp+8Kll0>b}y8iZa6>R z)7%aLs8D!-Y_(e6v17-)Lx&E@q>B(wM1he12Z}-^=@v>Z%Gzu;g)t^A45C`CO0Bh5 zDwVuSr4q!(_}L7aSj6G%@WmPE%tDv~)!Jx{@XF}&GEo#^j7pr5C;)Z^KM35YxSVll zgK~>2y7axcK{&?IEMzyXJF;v;@(qzP96qgx5@ydv-zF=S13}>ByZwCqnlm{&1I0rp zA`Tu6>5nz@P07-XL@C2K(u8r+^*C7-Zi;v+A=k;z%MHNUma`-%*wwr3emb%!opgI_ z=UJoxL4h-oW@ngU$C8g<4uMOEsjY^{u^?0Aa!fUO8Ktur$RpV3#eDKBeO`NwHJVMi z4X=B?4XX(w!>4cS^YZU*W#8w`cl3GgQ)|iXF1YQ%5wE+Z#cac_EPv<28@&0t20P{g zCd%;JA6(~6*EQL{qf8jXZ~Wy3*I(V>lC!J1zJ**%Q|#^%CaN~XD)KM64}oG#*9DiGhU;^3|&OH*%FxP<}0DGa{v`@T{o-yl4#-7&#-4`~#gafwD5 zi7DR%*wk%>=T+E!*;@(4EJjvPN&bX!(x9>fu1#`4w6hU0WYFjoi_k{tCG(&%+d(`* z!Jsv@ftMtH3JK`wOMxd+rX=i~@wsr1PrF8Dg_nNqQUG%eftRpC(=X8(Xb!DJ491$B za~_RKKIAK%7q-Gi$5=^l8U*Zi7iKC^ds^T$%}>W}v_;!QD(a?|Ygh*&Av;@R=?@c-;(vCx{e$idw9f!d&|@+(gKp7?C|0%>YTf$gdyNPpXhMqMP)9(uud3j-t);0 zm!DVWc~5WTn3oie7Nq#|b$`ZVZTw25;#VpaZ@NHyCjgQnDF$aM3TOIUQK?kCv@irg zko>dqF{)e+irWB(*|2S!;Lgn1=NV9HLTh%BbH4knoOR{DC0M+Y$s|N88`VzXCNbIV zrA;vl!@VifLX-iICZ}wtz^IFTxVN5-XfqkEsgvTfXTihw93x%l9x#scv?t-LMUM;j z1T3^uVwA;D`XkMwr(=8%cFfve_3D=58^X~2?9utl~lNp1G>NAg3T z+v1HcOycJ>eE9QQyzI&b^@>Dmxasyj&$^^etzyG|?tEy(ft>;Miha)y9}k&pN?LWR z5&7sXJ@zg6TycIC0es|3o6IyMFMejjavQ$bMGAQ3b6Sqeli61EGJsCz-CCtA@dbXr z-%q>itU!#%V{z!vp>KJ-kpGNDAxLnA()7i0rlJ5)tJN^Zh)SiBb`rt_fmF)(zxv?# zE4LjoHwmw#ea{r#oY?N#l(wE)Yxly&7{g?+Nv+<-4@&IVe>tsvS2KIw_Y!$?XceO3 z$T5*EhR7B`FbBA^ZLi3RmMi-%avjn`p_5QsGHdko>%_{i)>TK2&e`Fye}|tH2q7$BxzW|kHf;A0D@|vh8BI*V12d;GPm{9T!eCsYVV0R$bkY`% z6SnhYN>KnNjbo%MlC^F=Ziw8eI|D66?n~js*JVJZcK8lcV~NX@bUP*?iiE50dv+^3 z*f-tY=jx~06e=MEw;ddC(OG5Yn-=qV;IT2Y4UdJk&BZve9#bw!mS^ps|LVaZ{gL5& zzPpL%Nj`hmkdx~XuX&y&HGSre9uFK1`H`2+B>-vq9!2qI?_5Tn6a=0i*52gCuWh~i zi}!cGQLR?JFbt(qO3cj6h%gMrWHNa|I){G_hNPeT<$aT4u&p+x#UTCXQmG`vFjP{h zaOYxk-+a6AlzUG$=!JWj@sF`sTccJA3nHN`#KxqS^bV8Kc^OB9FaUcFf_$8C4OJ%WkA~$Qn6dz(|;~FxSA|TvgZ{<|p`cN3qcMm~To3W4j)$l|?RFCilS1 zY09~^yO&X}$;J&Ka@bZ%fl|Vv|Dx!FnG=~L7+D}MO-Jjcq$o))kJrv4V=)DhZ+#rX zR7#ezMM8kgqex9EPfx!_A{Qs?)a*acw|tb+eEx3h#I$QZAXbV89vxFH3-&D9Ey9Vl z2(4i6a)8mAt-c*eE=A*X`_~kdx zQ}U-oZ0RP-4H}jL-;->Od>%Scr8l1Cfup0wzE<>nFIHdL7{tecQXI!3iXyRR&mPh1 z^;lh9{g#-MPh@fMlGl?{BjK5f!8T@>5XJnYf!31?mS--x>ZyBwYTt76^1u@dlStF) zhphI`D2tH|2`MBY%C6A-)u+_K1E0D=N zZZhyQ{Sl8t!|`>+>Xu=yB^XDxZP&)O_2bY2kzt&yfMd(P+`SOsOEb0B%{!em={v;- zC`9y8D4vhg2|xb&Qsg;BMUog9!_tWSX-UIpgmAmS?O)X;lVt#Y!zkc$ahgY^X0FE6yX4>uczlhF3Iz@qhpiB6s zv(IQWGL=fj2qBCYhS5kx^G1zdyw#Jm8#O#n(5U&8%YsR`z==Vd$F`PPs;{ztc8!H* zh%#}WbS0-+z=^X!Qi8b@Jc{DzzDOG|Egra~LR{v|IrTQz4s=AIN;fU&!h6;p?n3>y#`?KcbRb^tXoRWMRny>KuG z=~zRHDdc{dd}W*$%iXDyLMz1Mx+b}W2H@yw#L7m*ORj7aM~aPZ%ma^3c(GUS|eGL6+gS#@ui>?2*TLo$Z4PZ9+j+YRSAMBvrV67twi8Uq$e4NivD1{6zK6Q zN8|Bt&dtrKUayy(!^Oo#^M9&1NawF_WyUE;5`_?EGMOkTC8I&KermlpJbrqs)~r`q zo^LbPu2CCsb znqU9G7Vo%z#`;P2BmT=@Z1S_OZFBZ=In#Nh>-azlf|4NCf`cbK9yl6sx>LgUO6*>& z69ke#dicIa7)7kCby(f#FrGvNzSpP*q8cjVX0z#!$79oMHqAF_-9{t*)+x&GaL?0wOTb=YyZT0eB0?x_!}4PZT<3kcg#bNtx&6!S)OY$Kii;IDNza( zm9j?|mFSII+`h6%YkiIVv#acG4=MQ*qGTGyYY^laZ0()BinC$K$y{zwu2P0d0E;cbYA3%YBW2Z(I23LS?4FY#d`_$z z)_RH2N%B1}&3Y`gZHrnCY`|;Tx1CPO&%scp2vK=^ZwdgUyNSr<>G|#FlA_!g0bg1- zrYX&tE#AsC!_i3*nF1V*P0Z6S^E?BMMS&tM9EN3qN@9w1@Pe33z_TuGSfgA6cRn=c z<RdUN|}8-YLtA5=Se&%7*AqOtZlO1 z84yK^a^Q2`*}FiNKl=-R_^xkUbImoSWTY^Qi;L!iAN-*C2d2FztT+g#Q}|YxSLX5l ztPnyc;|0}fl^~degK@aIbG}KdUSn%8qSK#n=-3)3R<~H3YqB)kqFyOcDH*Dzn5f>Q zJE(H|$psE=cG=TB$)1@$fj>!X$dhPY=_93&lpb+{PUT@XQ|`}+gS9DmQi?o@DkIYr zt>N4QUob66i%9aPq$sxaQVIee_APpZp<-+3-hdV)Ou@NG*|B4;W!Sgq5d`qqDV2$* zJPCnkzsCM$pTnmV!-;KyA6bbwd(mU2;b->y8S}G{@KtoLO0DLM+j zBc63}72gvm1@{~pbHSbprNH`f9$5+5IpPDCKPM;`JG-?(0?ObHn z(gN*fmB&^)6F{%7uIhHXZJN#IbYb{s?HuG2xb_rhC={mG>zPKQArfHHj7B3f9M-hi zgOpNIF2RCVrBy94n8a*$ha6qm1fis8lNEz<~og zDGc9I*YJ-i4)O^a9mL~w4#NGo-|rhhG#U-9wf0~QAsSj~m9X~=<&saiiie}BHH>`4SV}?gIwm55kz~0g<^-2{Jj|l}x&qv4r z>6ejSU~{irgII^%mp;(0&Z0oTN_tzDacQZ@B3tfeUX_`7t;ntG3zqw)Akb=5pjnZu zb~VF^YniV(y(RD^>|26L33_9D(4t7w9|`Ieo7-6}32G(5aH5%ONOsOjo8*~}3}#x1 znUuFQ{{u%Q=nxqTBqmaj(owmZA_Y6Mj-PUr#$kg9XLJ%yCWiDx!D@cG6A>x%MWnCq z$hSq&>_rv7j%pTjEwLe^;4OYB%EQwltM&jVxV^hd02_UMm7;wWOKRcH6| z0?P|?RLVhN4H)>6p|%g!?YG~qZ@>NaC!{cZv*IB6c9_(i`5Q3(eqUfcLuDK)-iJB#B>G|R=0YrcLvP1YAnyUm}%Asd}~0`uKRQcB_7!b`OwGj z=8}u{abV9*8kHK8VK;f&17uLmC>k02(G){jGTy!}dPSr+zm)k(P3shcFjMn(-Z|(* zh>(PIX9Xk(;G7+jQyn<9rRWX~t(suhoMaTjdRH@!^7QXi2N8HKPzr;INeYEwv!}C^ zr~X*e9}8w0GBbEFZ1?9hQyPbimykI7{JHe_To zJ+(R&!XZJ4oQNfI2+VpOeRPGWTDE+(Ts@4VGFby9<924y+|3h z`ieb^CA8KYIyvD3pY8LzKfaS{S#WH_Yk{0a-R6{;nVYB?ZCip@r+&+2BE z;nUvAi>XOr{zQio`*Os)k;ZylUl&t>^J z*uymL;9A1j+cnWJC|$6r)7ok$>Xkeq{^+X0lh)kjyj>m}eOT|tjG|m)VxJ?OA>xCv zW*pjraB@>K36s$wHaxZ()2w<0-G`XkoS4K(JMc__5eEQYD-g4WqPT(%XBbs9;2QYE5~hn8jEn-S1D{ba+(hzFpfgh0V}3x+r~iP z33e|8*{2;_4f&NfFS6Dz@%66@PIs!*DizM!S*4U*SiUETV#TTTE^AvoVg*qY;(L-y zE%7x#o=4o`^0^B=*46yIdTkPhf+lJ};C78x;C zN{LdMIF6F;&-S+>S+!LINn@eGD2&uS-x~ove~cDtk>AN z5YViZlFfr8iegS~_H0pzHO6R$!yzjxr|ZZ&o?y z=LsP}eLKWg|ImLc$RCm}LfY?Ei8zi>O5^(h<+4v4M|hsJlx3`8hf)g9s(h%G18R#U zx`QF3NknfH@$k`APMq$rW1+>uY?FGmM5XLgEysk>gnRF}iwEvM#8WT70)J%p&}C`& zV$v~3Nx2V33hM(wn!J?&m&O?{5-otsfOHR?1R|yJh0G3SF^|B0+^z|B&k42$Fo_IH zGlJgO5G$*N2t3$1BM4*5imX+jUWU!SEnGqv1`|zhWRjLN2UuqkU&Kfk*D2F+gW9#d za}u@8nKl)IDI2}wp_7hYVA?jnkag(*1;UtZ9nG{oetx+dw|6;Xu#Pg1uiz{qA529q z7K>6^B+Dg9e=NBBVaZ*O2qvmdt6t^Yy%l`VBk&|r3PzKNlUrMC^+r~`8^v^cT{bp0 z7>_4tqX~jJJkLXG?QDs1Yk^V_WF|Ew-)FAr`ddA5Mzh~4L(=>s088^v97nXH&8S2Q zISLge-^Un57{-*#Wjg|R9tMcxD7nQI((`Pg@H`sTGW(X=ASB1vdaP{pIdXD?6Kfq7 zXPYd|wWw7}RLTLBa*4@g%w4zKZ0X1GC7eCG%KrI2zBkHl@+|T`Sz)F@vD%R$r?g`0 z-mG)qJ96(saJ>r>5|wf7?{c%6YDuzd*8bj4ZE1#+B(Ea2j!|hAq#(}+-8CnPlwcC2 zePvf1UDNg8gF6}A$sobqT?QXqg1buy1TNg&-QC^Yf`#C&!5sp@{o#K9!rQCY>aX2> zPVG~*YgZL*XrTT_(-7%l+`;F8HQcj@4sHd+01jUFeIo=&%NQ2-RVpi7I%_*!dsK?CAB`&w02PlftD=X8_!-=@7*~Fb@=X$l#1hDP=c8 zMi$F{o`<2dXIKzob~4TPlYwXE_k9(oPxGns6n4MFh<8$XgP@jai*;_{{9-i^XsuwH z+#lxf{r<{bih3qE;oyv5>#lGaR6}>xznXua;L%<=a{aG*q&!-fcmtbb zf=J-gY7-GY1MOSy-R7BG!>KUl%cM(cSG(ontVWr^%%Dbsf6f&D*=n+*l`k?h&k0}Q^cz&1e(GS%hTh@6H)OY4(ZDxFqD>7u}fJ@pr__s z=60jH@q9nh)}Y(CX&M3IuLuj$>87;MaAiOBL?q zZ)w+k39*?8An#Zv)N*!o#g`9;BXMl1*S~2_F)Xo>#KS2U)ovL>`|-UnQF$z>2Ho^u zKlzq_nMqI1=vFd$nS!S*G;7@M;YZFc1-VV?w1Tq>HTr zInebZaQ$DE$j|*_!S?JBZ0eh5(5)AMh6IK47juBN5e^-&5U7HJP#YJM>9!cBJe~w^ zD(Kcai`yKigeg#s;Tgyllw_qY2o5;vCNl2P5(;fyd$A$gyTNe6Fsu2iaugj<$rSRq;qy;oB=tQtx#K=k9MZ6MJwqI-&G1Que$@{O9K=e3I!#(KTUfUl=%r+@%`lcv zW3eSH2MqDOuu5Y|wY9g$+K&uCs570k>+D0I{)3qIH?Jr?-R%Lz;z*w}khK3v8)5w@ zH7xqcNT+dPnZDYVKDlvlBVqG3jPUOmQkm{CYN}spKV9d$Q-PDWRvt7?yF!Im9|yW~sO)7;SwpdEe74HHZXJO!;Nm z1R&Wcl}ZTCV1%&I0Lch-u3WEUgEFU{bjWC%+aR zp?z(OiHu%=g&+`T9Xp$WP|up4tnNpE)EnmRBB)-Lzy_ew9MS4T3PYVW7{`u#r!6`y>SWP`o3**XdV(GjSrrzJ(Z zyZ}EMwEi|9iQwrV!e5{wJP^8!73P0vpONv*!OLhtdG`m^i#&Epm@FEo+;^Ra!DmRg$ShtpD+=1s^LoaeXS3D_`PF zW=nL@l=daFjq5K%#c(nU4iGn~xMo!1Y9~%!nvxPK0HR3%D z#hLs%o8Mt-1PgHA1dzB|f_!Bv&92Eh`@M26V;)Ku_40%G^PwKdjZ9088`* zN2@?8e{js4HG&Mu&~X^?5k^Q`tC!!V6PjP2tDPvsx0CB(%J(%p^ZmJf+L1^5rpkU07xemN=A zxspJ+du}O6gI+wrAR!ERoD4Kqp$x%3yYmOV&c zK=bDf(0P>w31V?gz?bPbnR!Ryt;PMskz*$%buA%|_BPyJSB!{k<$D(>1_hK`zJ z+uwYvK7vVQ*BWvZ3;WX<7B-j$1^Yol(wJ2Zhh9OaPnU>wf6ok2LXw<2$JSIZoMHzk zm*B@1^4-y|bM5&hOwHwQcEchFC_s0&lCm<4{zT zHRC7m(IZGn+-Z2bgUqvVY_pwF!1wm)Hv1FOZW(%?aTIaDJ4yY6+sGIjC~J>_gU!p?yZ+1S{fPS`(~%UP+jxs(({BI2 zZco(n<5E@JjNngSwFv?EICYdOMvQlU;8s5$<$+sFJ;Xqv>QYKI8y>IpiLdjS-+BJZ1iZC36rGk!<vw^ z8ku~H;$8ObPbQ+JrP0D}xw%6MxlnrQq1lGO9n`_NFM+>+cTcr`lFurMj1==Z zcYL!hVnuoEYO6jF+}w;6igUT69OQn7*sa;G0iDkTMJ`Sr%>e-uTdM>lnPLoiJpX1c zqSib=m#1xpLl{VzrMqA{kz>&KYWv=?9l5A#$|7LE6)?LD&QFD>~x~-Jx;j_a=Yc zhL6I*`$`-$vDHox!5r!r?4UB3t%NORvTGz-zhTb1h!z(V*rnA6Qfy|BQ>vQz75qB22#ImS; zU4%+S%;W;Nsb(11Z%D!y7cI`y#MBTRQIv;4GP*!Ax?Rd5SqnZ)>oHlv2?VE7A&hvG zOB^7jh5lR@6k*|jUB4D>e20E4qKRdF`TgGaA5ZP;^{;J4->waz)yM2oks%Ivs zfPh2_V(6KQ;^rx5?thrG3z#@0J-L0xo1s$+YEsl*mr>~U#P{X^lcoLU5i;wy*w5tF zFN1@X%?lJ!EWIwro4)PeY~P9Vv3xRU>yQMsY~UFH6j5v@|Ad3EVExLHx+IiI9DM#Q z>)xi?D`kYMfV~i^n3HG9Qf`)634pl%a&bqTnh@=*Eh|$$iC{&KE==st6iKC}7%~Y1 zefUK^8lDxE&#;{M$}?KtR5VPHVkpSNAjyQj2EO4$_;{l-0-C!gJSmxiJ!b`R+}7?cs+1>F(~RaY{H*@P56O8n8Kxm{47vZp1n_`$L2{Xzwe0 zgnJ_Cf3>;kdyF8DP&CLnh$SFV`qyvrL3XSZ2Tu{zyR6$}i>s^Z^EbVGtlb;SGcR}+ z_7R@3-VyChPdaf?7^*A5)~jvYao>AO<*K(uBNA8uBqy*~7dhGnyQTQc3=X=4Bo)nz zC{>JiRSG|^{>lh+MutQNFf)6UG8A7#UxD{T1GT>PCsHw`#RnJ4;=nL&OnaK1PJA|p z{l&YZ-Pe#7Vpo3LTcT!M9$$QHpFmT`#Av^BGKR5Bq5>PlUsj#dH&ZBs9sOM_X_^qx z_z~HGK^lhNh$j4vylFYy#~|xeRFXb4i48|r%8neSkz{^R7@q1sF!qt+f8t^Fa=jUIKzmlKHDRlAPDr7Y|v+q>0WWGhnk zGfo=QuZSf;*063g%_``)ghw772|)a`eKC!BKl{h{Z-Mnw-f%fi#(^xzG>A>bkFSUP zo1?>h&uyhL`FnMM6dRgJR3KL2IdBchn@K~EiHE@{OZ_0n%0&IA;F&T?+md762Vhif z4(OUEq{fxA_eZg!aoJeeTq1-0^BLKcO)_qe@Such@CkEWZW8SF3E?`k_;U1X=_y0s zu1j$dEN;fo$GFsr=@Sb+o8?&M_ge=nmyx~l+OdZKSL4P&aa6@YjDBspPfGF6U3~G; z5PJVGm^DPO`B5}Iv%O2#k4&l*g!ysilnTLxhv`yZ(8v)6-4VKUSOI*NDv55*?&T`V zWbYgQ%M5_P@>m2JZrMES5~s+)dd?`${F6>^h%;(1r&^soF%-B=FgT6bYUpiy`p5hH ztl77B4wZYZsx8Z4$#fThCmo^?osii@t}`fLEnC5-&C&lV&blY`Tlaumo`^*@Mf%Zo zD$ppUA|v^e>XUfojjM5#)E_0TOhNcGE^->MDU$#N69o9-=vSDB%cbSga2_hX3U;BAo$s zUhbZQm+i}Q6nd^Ac-A_o{5wK{MW1LI8(fYHFF4&(OJOFA-oS6tfa*ky#f?suajuo0 zP}~?T`9YN39}0_t2GIt{b4sKrDH@h6d%bq?QEx?U8_7CfF^?2?qCwlWD+pAWZQfv& zm3>9Rrq5$%$e(`5HMOkv4WHm-+@df|s?inwl1G?8$nWqK|3)qbgc;w#GT~O6hLIR( zux~RUtkHr!v@Q|#7mKs=-hHX|y`K#hFcjnkZL+f?BqJi)tTXIBc^lHfmI*!oWsMxIV6_?=HvYPLf9BXkOry(M!!RG8e;XumyzKr56iL&nYWIu|t zO7{W%u{sP0685Tw(9{Z8&Dj$OUDQ)P#p{#hK>f;qDr^)~qQevn_QN>lFV*EJ_=UQ^ zvR$kHv@KbBoYM_ijKdTokl1uM*;j9VM69MfB#KVcb6KI1vb-(9#Wu*c<8Jc|Qmhc{ zV9Eibe*jo5ZkwDFN2kea3x}FXNg!|+oMH>cljk#vLn+prpS1Uxn<5deI-N)oc{!L*(QJ>qj1X@mq%UEh&$pLk$l7z7#|drO6|wq1Q%-3 z+gMUl8tdUDCj|Gm`CWS{>O0;$HMN8mMq~31sGH(&4Ak(c&8VADsR0%geu!x(Jtre( z#ep6Iel*NSCARtRbQv0%Yf58a;{51mI{&dKDgje6PH*kPQaJUsEF6+NJz0?u43!w0`cebngvKzlZ2SMOLV%kq6kh)${ zmdLe4Hv6TLk#Q0ZU3P#OazRhog$?T4LCeDV7TQ1Y*P!Ft(a`gC(f8y&P#}#+0qOWQ z^oF%@ZmkboyN}68(M3)HevA{nQc|z{Lw`R|ReR9cD7bM+rzB387<1-Rcr!#^B1XxX z(`$WruN1h;nF@n7f~>w8PC#Y92SeWxLy3d)s_Lg2m$yNjFL0xJNAlsjTWQKW@giwK z+?T!tfOUqFmEhbxz3tTRoQpOC2dRF_S;UrFh-+Z9YO?xi41Y!Y6Rxl+yc=MKqA6}; zN$gAbQ!LZ&f$!|>V>H8N5yEfm%-ga1Gy;_ydaI zvz)cFrr_&-czSSGQv~&W*T-Yz(r!T=2HDBuZgdQeCI8i5fBBf+W$@BC14KHWuQt1x zXegm#YY0Va#3D2w!u$g6G6arQ(cws&&TuYzfA+*g!Awn1Yh1e$?r=AOFFNz8uYYXZ ziZ{nZC?qjHUiy`0)0Jo^E;mZQ^W~Fx{tvi#925&SZTHziqaTdX#5TFmzWBzpN-!N(D z1NPOWvLI%A?5tkv-8{!aZSdC54%FJb^2sQuq;r6#d(@<8X0HnDPvfw`Q$}7N5A>YV zA{D1(XtUe96b*y#yEy)V%HhhAJ;A{-o}kA*1IkcCh=jyI3#g-TYiG%@^Xjp-yZ*KK z%440KU9a(epLjybgmeCo_*x|4)@QKPyyL2%UG&Of?|4&*NqU0IwhaatFKyNmy(wj~ zMfclB@_VL~Gt%GL+CWzfN+|~mTq#P>Zaa<(H?ccYOn_;={uT&{?P(WSC>Qir7JU9n zhVf;oPM>Aajp@tTFZy3(BUUE6(ydVw{h-h;ArkvsDEe<5V=b;-*Yvf6c%7lo@ey5Sju1K$iG!co*F7g)c*JaYdGv5e2m@#8%KicW zU`c8Ng0!vjWynYDiHmI=^F!;Ur-hA=SA9vPaLBWGEbO~(?Y_4sPVZ2 zYD@!F1Cl+l#bNcTVM2VuGWEWE(4^W9Nli)Fru#NfsZdG?$vP>4b7f-?bu&f`H--w! zPZjobo39x=4CQPrvo7L=v~%&)*(a2;gXn^pA;9GD6$LIl*FPu;3$F(%wD`?zoA?k# z0kOR)Y7sxRX}tUlPh}=#6y!B$timYUdz#6wyph>!onZdZORGVDQ|D!Zxf<0(08%$w z$S%M+!4D^b^=9V$junJv;Y2!*Wt%Jx8i}1vM+PW)FuW8rwTN%x!Z3|UHTS@mZdqp` z!(;^nR(EfDH?G`p)v|;{#|PhLMbBD`ICyqxM{{nv6Jv4K}}F z*t8ab#q2Zh^Po<+Q9zaA^cQ`rRODd<{siXFas{s{{|D;hXWfU#db;9^2*R6 zQ>lH|H22`bCrNTTGV2W&_?4c+>gon>>bDJe3=)|%LW$p}Ag*4LBE;D2`0HAYpD}~o z>n@(eBKpV73R?Xb3F|K-)lbF>mj|Tej{03uf!X#Rg8kdHm@W2$CLPMtt5P?jFr z{oT`_*ON!RUN2|YheISJByD`MQNFP%G z(>k2r)$21B=qToQOWu>D*&puYr)M_*qUkG}XAqC6%uJOuF)a>gwjewg^UIzDA_YZb|fpoL}G=E4`fo{?zT#SMGaO(wgp^nwISz~lE1h597z>fnad)cw0z)5my zctWK~v+cjlVX(-U3yV5f4$xt6?39wbcg`JZdV10&>lzB^y6(>A$ZW76aI5n3Rr0(d91CO;T?*y6rMHER7 zjI!7vLIVZ@)*Do67FBB&jRk_|jUk_Np3k?ndR;CS|9aov>KP)k`rM^kJ}}ZkzkaQL z%FOKHHSh^|JrOa;+=}ukOHTZ}vTay1ym6rue&}ZjljReeRqm4zI5-H4pyYd^_QFzY z(CqlovvGR+&?(9{X-R6aIvmv#WE#a|Z;DnC^(LuFoD!8FTaqqC)-|AQ_rpK^NzIgADrM%F>qb`Xwp2m8t%8nUL^e?e7kx>=*&{X4%qnPpyNV>`F>VG=2%=OislL2&gZoh{R$b4~0Tp z_V;zRA~MR`EuRt07TZ2&a!maYHS0)Ev$e75f|nR?b-F*nN@doUbU)-q(ck)MqiTtw zFY#00mF;fTTVVhsNUA37AFEUvt=Wk**=*BjUa!xNRo;tiNdiTdrNsIie%19Yc65g% z0Y^p3dHP~^auK6S96vguxSR6Zx{CX~r=`Ke#qA&O{eO#EfG8gBz8#MRL<&ZH{w#$M zkFFlc)YN=tVRBs%n&gI?#&IFJ;^LBW`R#2Z?<>hAt!VZe05J&D#VJjvbSg`37X2hw z_?7Df}5E=FZ4$so-5%P*c*)z9R==p0RsoDmO@b! zlXNirvJ;NU5u*Z5o(_FqfuFse3bdq@WP%UKl${$Xc|>7cMnA4iiH*#_EV1uI>XT;F z$uaEU6}0ITu;~<)pfznet&5E?5@0IFdO#KN<-r)C)`2D8uKCK!lstCc8*3B~@ip!s z+E|fg&LHr3EqySbUFw`Enj_09NxfZavx_2Xz^+!@-?&lgauuC8^Bmdkxi{aAk;H&u zKy7?}2lP8KD~a9R|SYylPt%6K!?3s@{kR+iGGookqDP(5BjROVnR z*%iZLt-V^Tb8fJ^n_#sY8??LCf}qzc^KbI|-{RUHpX>Mk9(N9Sau7r0<>fCdeGe>; zk}vsfxOm#z$;XsNcBTZcqZVDdzJ-4s0E~~1|C6_z4D)?$Z``{%K2!+2#C&;j_K3N! zW)XU3@^Uy`yG#8;#3xs48GA7WCX+<=#j1}mCWugsE}_jHXVr)E(2(^NITdS*wdWLm z%>PKYXng4)4v+ibd!&(V_F;+4Kjjq4XrH0I_OBz}@Wm5aRgJCITqZ}{?`U@5mBl3^vLmQ}yYkH(W?Y6x?Xy8?p2 zDQ#YTmnRy*)h*ExTH?i4`Ra8l|2Qe=fu>E*rr(f!p7fiRByf~Im=7TK;R=Bqc^no+ z7=pA<*o+74FYvEooFphHdgK8q_mxY~^M$nltVA3~P=v*6+Qm1n7E_srlgZ((R5>4d@$pA6$W>;|K_ zFRsvSkfH(yuPk7|_&2{#+m)>{nYFMUeTS_a6*g-1fch;7=PwM9Y8bA+Nqt$kh;dkf zt#P}-uOS0M)2$?`2vf8dpjS6CVj}PDk$tw!l)lLh-Y1KokHHcq6UMsnm}t zPIB|@dy+Y=98NzuI#yI@c@6xS^^A^nVy9ZM&eU}7M+SZ?<>C=YeItZw1lcn z=1Nv%eLDd1{Vmg>QVG~8E`5TWRB&gX5 zr5DEH5T|kJ-Dy*gvwBY6IO_veVv-VXq!9~{BHoAcpvzMupXa+O<0ns5s58e%ee6Xk^a9;wa zUKucIYYXOxw>Axk&o=>37=pt(zTh~9uKIeP%t+GDtD(BO>}I_C{Z5fq2>B_M+#9?RzkBX7$p5wi1As|8FX+D3odW zc7!{l*U6>u@hZW#+QNY7wjy*v8X?(4EHEWV6pI$52=7^l#Z9;+dk&DXB~=&lXPw>Q zkjwIe3L#h|Q9|I`ipL{H$h}Ce%!o*uY$`Eu`1JsGnZ~>@%o{M1f2cqY%o)v88Tg+N z^dc+4#na@9(-*O9B#KaL0TgT*Ae}_e8*g^mG@*kO9aXL|{l7E+G?zQIwKhpB$&(S0 zyH-*9L5Ir1e!Z;0Z8T{4*g|LZ`^%2I!++b+Yn_MDgOrK%zuP6r-!2)vcfyMwW@)!p zELrF*C;y9JW?`vRE6q_WRrYmaMTy+HWQH61)Jw=)yVW(gK#yA;*H^ze-{e@P-fjlnedhRTE^>bHtxHHd8R})<9 zg^`7O;~jw7>eqU~9tDdO4S`umhz=;k&k9cZaHT(}1kkgmnJgeEk?o~vOcv-u0ZqZ) zBNTu7GZ|5}?#pM{-`_xr2f=q*n;4G|xC;guw6(l`V(Icc#dKU3@SycZj|9*i%gpo* z{{-xfC4Tq`a z*g8(5d4Ect9JyhWrDF%!eGFkK%%?UyPL}^2##C#F*t;HB!{V#Z^E=rQ*JBZ}X9LgN zq_rju*IxfcpHCuCN(RwqJ?Eq7B|#b7EZORrDxJPH|Km_5)qC87PI#%KgoCj^q!%Q* z6(;4Hu<{xibgEJHxkexwl`*W-eYh;E?<$Ovaa4#vnFJu~MPB_KD97U;GARiKB@WEm zK_1>w6nOG0Zky+nI1}pss8dFPI=;YD?XVphOBqDttcZFXNnCPV-!K{s*R=M{_3}b| z%12rD%#1XuY8{GENlo@}UWZPwMun3;ODuiM1omf_ht-Ai_nT%^cb~rp2mMkC{f>mK z{d#ia=C3{r7FRUZQrOI>XjlRckLyTGxuN$hy>_V>#aO}wZ zOO>Oruw0keI>VG`Op?;1p8=B1dv=0u-;V#18#?*~VDU!bFfA~|LCPn(--?%N?cRLd z?>>sq;(26_2Vn=`dbmYm>5C_~lmG30fbQGRRp=uO>KXPlq z-$ncsq_r8{ox6Hs_gzl-ASClzWGQ8daavmcr+4ZI5JO#bJ{bkd?0t=Xc(A z3DH<~pnUH+T)hk|^SxT!{FLjvze?_Kal=ydH{Ep0R$)?U_+K_i2+8e<)8~vh`okc- zc{p>Or+lxKoO|c!?*jVfv(z2ua!0xAI3XCuW<;z35}G5ky7iayQ(4+iXQnb*Z+Au{ zUxl6*@2*?j*HWXy#|G6~$p}DX>SV_U^ax)owaC0rmS;yWxga8?fQqC5+f%tQNMk~J z2?aLJu3SKVuF=_jz2?P^WMS|=Bw+YNPVj9nQTE0AtOdcKCu?gM1L=@V^Ms5DpT`{$ zbpZbS4Y=Xo626<|4-PhB7iT4-iWwlR*A!Y&vBokAshF)=|1X8!tl^0!SU@i((nQA+ zh0u4Po|jH+UC7t_UfJ+vviZGjg-m~d358n?J#qNicHj(sDFzdf(gvGE7(hMi`zqr5 z>+v+T7N14GM+@cVpoOdf+1L!5kaI0VAeh~@mq{_YQLXZX@3fGW5c$0Rg2# zMF>=k&(Oi52&vSN{_mHhJ_mxOc(b}s2%QV6RQ1G>f)`56&=%6wo2}Nx>q?}h<7=o_ z^=9(TZHv#oR!$7F;bvq@OAGs^Vn`f1Tct2vRG`>v(>Y8J5Dqgu10IDJx2RP9`KEDd zb;|JR`*F1wl6mhZkC|@@HVwx>3w(cLeXIH_x5dgZ7;SHn^&xfUKRmyPo;PTP?-62t zC@NuyI!T)qng!y9Z_`L)*$NI%_5-}mVNz_&Npx(Dyvt!BKod&V8%B_#rn7zOmXd&U z*1Yo#R-jhh79YPw%nRT-8%8=&rBZ?;B*4~m`7ad+vw1-6;FBD5R;waU5_usDmlk?g zq_oU?IG1NM+8+q@Fu)ErA#})3%LK5Yz#Dg6Z$xJLJ~dyvzYT6|Oez9i;$2oUwKdm| zzrorrf37)&6#6Eq-X7}@U#bz}5u^`day~wgo;ud}v_AYX^ywyo2T$B0B-LX->Tiw4 zr4R-$aYL|19@aVU@`s!D&e@R!X&s5H}vlbu2lR%0lH_|WxtTPJI zk*3u;{h>-E1G&>ikMr;|Gn>RAJ=RmF;(a!I*Wl8e94LxW|ezm^WdK^CS zx<$#q6FOM`0;DcZX=UR9K?N#IgNzzRE4pKHa_8;XL1T-IsjY7}wucUHSDLnU<}c1R zb}vjo*4^&-wp`{{HB!*Wr`)%{wTe6hf<#$fM`d+1tUTTON5MfezkfIQg*#sb4?Gsq`QzH{Z3dd4PfVFB&d-36zJ^dPdSq6rxBotYn~2kg4<(DSG+Q3H;ae^Zzl8H+6N#$77*UFs9CDF#2&zOkE*imko z1A-{SD$Qq#WWVMT%FlTPOD{;w?5F*N-ROrmW~$FjCcb6Q;q3^3%=C-72eD$Ws)yh( z@z`qXSr_Oq7T0Lv$l*~c?X34_CRn?0{hg6J*a(RKA*SL{%n-3plxBVml|*SH7;(bc zd^jL>f7>d)Zhb%P@4w{cWTrfQ2U71ASkJMcPA=-t#WMvAQ1N#Ckr!{|K?1bQZm9&O zATv&I5lyHurlZ1_V49e{Fb${+jSdfX^K3FlszA%uUH#2+ZdB^*88x6(Wu6#{JdP<7}D0(T1`L_u*Tp^l+GpO>N^pcqZA#?7Y{0J0fP ztwhFglem2sgMp|jG!xPb~&HQcN^4Y_YkDxs%uK88GJ55 z@V5q<_Bcj112IIJiu1VOMgT2yE`<(B&7hBy`YCY;0SX==gd(_UH~~yu^6~&7 zn6UnKB~h?>Ifxl%o3Qyq`d_EQ+>r*)w)%=qV{8Pk?Vw&)-xB3nEQmmpZU&CaO2|>9 zWg7nlC-z2Vt`_n8+F$1*H3!zPF^c*q9fq9*-(eu88uqk3hO!tgKSABu35#m$L+Pu9 z$B72o6O>FeA0A43a_fK?OKh4qGi(xw)SBW2uGD}SRlU!G1|-?sz~|Gv42pkYQyJB*B$m8lA+ zeUC7yDXjydeVmp47<`lIfsXuiRfuYwI703D%+fD>r^{whZ$ z7^hGa%M;2dlV!oSnU^BAt&Y3&3i!MZY1R0?C0Fvi|0g&pB=Z~5G(>p9gIT9>Y4}Xm zr6)k0rqZQQ$ZfJue+G0#U7{9PQ#NhVKNqo$iicS_$@lPJG)h>l*YQO&LtlwxW6VEj!r0hWk`15(Zht{|6PE-?X3puh>j ziwpPO>uS`@_k)E>9s{E2f6hgjh!Vj%Zp?`z34Aq~47-tjAA3rKO>AKOVFj5`)XUnA z2z{cMv+^>kgqAhiDJ{CaY93^If*s&YF`xZP$*>FJiXE&6RjJeJbxP~0ZELJalZI~}g|6C|hspb|#6dF;HM{ZRr=KJiCf*RDvK75bN=Z)IjALn=PZg0cqwNWGO zk)F~Y6tf5=cScj+U^mStF=K2J9}^B_HutL$X+G!AUwBdgOcKh%T~*meMJuyF(9cm$ zJX+5{cSIO|Z-42PA&A5?uNkqBT$4UYvHJL;`EoFg7>SIZ`GocyDy2)S^*O#ZWrS(d z>euXqQ1Y>?2bCy%}kE2<6fumSIJp&@&&6 z<qxib0R-{1u<=01sNX<)8E1^2CsUhG0g84 zL$2I-O^3zmep1L8_(%&0s3^f;rLB${%_1cnC+VxP-dAjG{Zj}OGDj99jyJ@6bXV8C z)bD|F@LN6-n9=jG&-;3Ewd?e>t7pSZT{ah;zb0M?g&5!$pL)FqBxGA^ z=lS$^ORIS!vh&C9+diYBUAoIqpz z2Rra21prtI=68nuH}9%aYN=EEKhTf77253lfpC8IOo+w6f$$3}ol#n%F>TY`Oy}Eq z_~7_dmZ1K7bAf#|xM)%fQefoDq@h3mi>wF_j4vd3JyY7p7l;L${RUj~vPT=n6}9I6 zyil{!zdsT9ez&tiY}odn?RzI6Bqvm3q&zlq$YDNA>-c;u$F-t?&6!tg5L~d-+L|5f zgEF{pUY5xtrkoWl$aRX={6AE!)BYnvz(x*YchN!|pH$jF&MoijItl|5Jrx&D7EB-~qDlCR92{);_aL7ZH}@6KPY7}k+h6t0gF zFl6GN%kO4)J12v&AiU3)^64`UMDD+vaCDEFlwe}zf&P5~B*T|~?zOKYdIB4$$EE_O zryvK%!LNpfm?=RNK71BRxntD5D$%uH;Sy*lM`B3j0b9S*IR=h0nP3Nyj*4`ua%1{( zt#vFIpY>}<1qkjvg;>zAMPubK0d^zd>+SBWFRK=|9w}Jnsb8P1iqGl`ZP8^%`-5#e zeII;#FP}ubu9Arj&!Pi_0Gizfsj(^J+qfdVIZe8x<8GC5=Gl2`8>z~^J04xl8nd#t z#h3SQn|#h^v5u7-kvRiYuG&@P$Io_mv`o~ZqiUsn9bcUw`TzAA(`I9|rl#x!2EyUi zoGl0)e)4%MkA8QvZ|}HHZsh5Wi)fi;-(p@m9gB}uA9OwB-zIhLq9(g34gp)o&h z&YAz26yFLBL0)7EJcr?ztXr*F35Z_Mz=N45j+WkEW}ArQCwEIg?tC;yy zH@;*FZarHl2mU`-l4&v4(T|lh`*(CU7hB`AS%tceCPg$;03qSeuK8ywFw?Jyp(o^a zve9)IDsrb@CP3OiwTY_m|Dfmf8zKt7R={thNGTQVsv%wY=po&Y$N%r08+Q8+S0te3 UggUMB8Srt*NhwLzh#Lj`A5&z7*Z=?k literal 0 HcmV?d00001 diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md new file mode 100644 index 0000000..b6ff36a --- /dev/null +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md @@ -0,0 +1,148 @@ +--- +slug: code +lang: en +title: Code Changes +--- + +## Install the Node Template + +You should already have version `v2.0.0-alpha.6` of the [Substrate Node +Template](https://github.com/substrate-developer-hub/substrate-node-template) compiled and running on your +computer from when you completed the [Create Your First Substrate Chain +Tutorial](/tutorials/create-your-first-substrate-chain/v2.0.0-alpha.6). If you do not, please complete that +tutorial. + +> Experienced developers who truly prefer to skip that tutorial, you may install the node template according to the instructions in its readme. + +Further, you should have the chain running, as it was at the end of that tutorial. + +If you have completed that tutorial, but your chain is no longer currently running, `cd` into the directory you created in that tutorial, and run the command `./target/release/node-template --dev` to start your node again. + +## Make a Change to the Code + +Runtime upgrades are necessary when you want to change the code of a live chain. While it is generally advisale to complete the code as much as possible before launching the chain, changes after launch become necessary to do things like fix bugs or add features. + +### Primary Logic Change + +The Substrate Node Template contains a template pallet which accepts transactions to store a value and increment a value. In this tutorial we will add one extrinsic to clear the value, and leave `None` in its place. + +Open the `substrate-node-template` in your favorite code editor. Then open the file +`pallets/template/src/lib.rs` + +``` +substrate-node-template +| ++-- runtime +| ++-- pallets +| | +| +-- template +| | +| +-- Cargo.toml +| | +| +-- src +| | +| +-- lib.rs <-- Edit this file +| | +| +-- mock.rs +| | +| +-- tests.rs +| ++-- scripts +| ++-- node +| ++-- ... +``` + +In this file you will see this block of code where the two extrinsics to set the value and increment the value are written. + +```rust +decl_module! { + /// The module declaration. + pub struct Module for enum Call where origin: T::Origin { + // --snip-- + + #[weight = frame_support::weights::SimpleDispatchInfo::default()] + pub fn do_something(origin, something: u32) -> dispatch::DispatchResult { + // --snip-- + } + + #[weight = frame_support::weights::SimpleDispatchInfo::default()] + pub fn cause_error(origin) -> dispatch::DispatchResult { + // --snip-- + } + + // TODO Add your code here. + } +} +``` + +Add the following code at the bottom of the `decl_module!` block. This code adds a third extrinsic to clear the stored value. + +```rust +/// Clears the value stored, if any +#[weight = frame_support::weights::SimpleDispatchInfo::default()] +pub fn clear_value(origin) -> dispatch::DispatchResult { + // Check it was signed and get the signer. + let _who = ensure_signed(origin)?; + + // Clear the storage value + Something::kill(); + + Ok(()) +} +``` + +Confirm that your changes are correct so far by running `cargo check -p pallet-template`. If this command completes successfully, you're ready to move on. If not, stop and solve your errors or ask for help before continuing. + +### Bumping the Spec Version + +We've already made all of the logic changes we intend to make to our code, and our runtime is perfectly valid in its current state. However, because we will be upgrading a live chain, we need to indicate that this is a new version of the runtime. In particular, it is a new `spec_version`. + +> There are multiple ways in which a runtime is versioned. Read more about runtime versioning in the rustdocs about the [`RuntimeVersion` struct](https://substrate.dev/rustdocs/v2.0.0-alpha.6/sp_version/struct.RuntimeVersion.html). + +Open the file +`runtime/src/lib.rs` + +``` +substrate-node-template +| ++-- runtime +| | +| +-- Cargo.toml +| | +| +-- src +| | +| +-- lib.rs <-- Edit this file +| ++-- pallets +| ++-- scripts +| ++-- node +| ++-- ... +``` + +Look for this section of code, and change the spec version from 1 to 2. + +```rust +/// This runtime version. +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("node-template"), + impl_name: create_runtime_str!("node-template"), + authoring_version: 1, + spec_version: 1, //TODO Change this to 2 + impl_version: 1, + apis: RUNTIME_API_VERSIONS, +}; +``` + +## Recompile Your Runtime + +You're now ready to recompile your runtime. To build _just_ the runtime, and not the entire node, you may run the command. + +```bash +cargo build --release -p node-template-runtime +``` diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/index.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/index.md new file mode 100644 index 0000000..c02ff62 --- /dev/null +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/index.md @@ -0,0 +1,31 @@ +--- +slug: index +lang: en +title: Overview +--- + +In this tutorial, you will perform a runtime upgrade on a live blockchain. You will use Substrate's forkless upgrade mechanism to perform the upgrade without requiring a client upgrade, and without causing a fork in the network. + +This tutorial guides you step-by-step through reproducing the results demonstrated by Ricardo Rius in his [Sub0 talk, Runtime Upgrades](https://www.crowdcast.io/e/sub0-online/8). + +We only expect that: + +* You are generally familiar with software development, writing code, and running your code. +* You have completed the [Create Your First Substrate Chain Tutorial](/tutorials/create-your-first-substrate-chain/v2.0.0-aplha.6). +* You are open to learning about the bleeding edge of blockchain development. + +If you run into an issue on this tutorial, **we are here to help!** You can [create a new +issue](https://github.com/substrate-developer-hub/tutorials/issues/new) or +contact us on [Riot](https://riot.im/app/#/room/!HzySYSaIhtyWrwiwEV:matrix.org). + +## What you will be doing + +Before we even get started, let's lay out what we are going to do over the course of this tutorial. +We will: + +1. Launch a blockchain based on a template project. +2. Modify this template project with some custom logic, after the chain has already launched. +3. Upgrade the live chain using Substrate's forkless upgrade mechanism. +4. Discuss Chain state migrations. + +Sound reasonable? Good, then let's begin! diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md new file mode 100644 index 0000000..51133db --- /dev/null +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md @@ -0,0 +1,72 @@ +--- +slug: migrations +lang: en +title: Storage Migrations +--- + +The runtime upgrade we just performed completed successfully simply by adding our new feature and incrementing our `spec_version`. In may simple and moderately complex cases this is all that's necessary. In other cases, you may restructure the way data is stored in the blockchain as well as modifying the logic. In these cases, it is necessary to include a migration path for the existing data. In this section we'll explore data migrations. + +## Primary Code Change + +For this example we will rename our storage struct from `TemplateModule` to `UpgradedTemplateModule`. To begin we open the `pallets/template/src/lib.rs` file and modify the the following line +```rust +trait Store for Module as TemplateModule { +``` + +so that it says + +```rust +trait Store for Module as UpgradedTemplateModule { +``` + +## Bumping the Spec Version + +As before, we will open the `runtime/src/lib.rs` file and change our `spec_version`. This time we change it to 3. +```rust +/// This runtime version. +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("node-template"), + impl_name: create_runtime_str!("node-template"), + authoring_version: 1, + spec_version: 2, //TODO change this to 3 + impl_version: 1, + apis: RUNTIME_API_VERSIONS, +}; +``` + +## Writing the Migration + +Any time you change the storage struct, the name of a storage item, or the way a key is calculated in a storage map, you need to write a migration, or else the old data will not be accessible by the new code. + +As you can see from the `decl_storage!` block of our template pallet, we are only dealing with a single storage item that was, and still is called `Something`. + +The complete code for our migration looks like this, and can be inserted at the bottom of the `decl_module!` block, just like the dispatchable call we aded in the previous upgrade. + +```rust +fn on_runtime_upgrade() -> frame_support::weights::Weight { + use frame_support::storage::migration::{get_storage_value, put_storage_value}; + + let value_to_migrate: Option = get_storage_value(b"TempalteModule", b"Something", &[]); + put_storage_value(b"UpgradedTemplateModule", b"Something", &[], value_to_migrate); + + 1_000 // In reality the weight of migration should be determined by benchmarking + } +``` + +First, his code `use`s two helper functions from frame support that are designed specifically for storage migrations. You will always need to do this. + +Next, it grabs the value out of the old storage location. Notice that we need an explicit type annotation when grabbing the old data. This will always be necessary, and if you are unsure, just check the `decl_storage!` block to learn the type. As parameters, we have supplied the _old_ storage struct name, the storage item name, and an empty array. The third parameter will be necessary when working with storage maps, but we are using a plain storage value, so we leave it blank. + +Once the old value is retrieved, we put it into the new storage locations. This time we supply the _new_ storage struct name, the same storage value name, and, again, an empty array. The final parameter if the value to store that we grabbed out of the old storage location. + +TODO Do we need to kill the old storage here? Probably. + +Finally we return a weight to quantify the time it takes to execute this logic. In this tutorial I have included an arbitrary weight. But in a real network, it is important to benchmark the execution time of the function, and choose a weight appropriately. + +## Perform the Upgrade + +You're now ready to recompile your runtime, and perform the upgrade using the sudo pallet as we did with the previous upgrade. + +## That's it! + +In this tutorial, you performed two runtime upgrades on a live blockchain without causing any forks. Congratulations! You also learned how and when to write storage migrations. diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md new file mode 100644 index 0000000..551b1fa --- /dev/null +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md @@ -0,0 +1,35 @@ +--- +slug: transaction +lang: en +title: Upgrade Transaction +--- + +In this section we will perform the on-chain runtime upgrading by submitting the new runtime logic in an extrinsic. + +## Locating the Wasm Build Artifact + +At the end of the last section we compiled our runtime. Substrate Runtimes are always compiles to Web Assembly (or Wasm) as well as native code so that the Wasm can be stored on the blockchain and facilitate this forkless upgrade process. Our freshly compiled runtime is stored at `./target/release/wbuild/node-template-runtime/node-template-runtime.compact.wasm`. Ensure this file exists and that it was modified recently. + +## Starting the User Interface + +For this upgrade, we will use the Polkadot JS Apps user interface; the same UI we used in the [Create Your First Substrate Chain](/tutorials/create-your-first-substrate-chain/v2.0.0-alpha.6) Tutorial. + +In your web browser, navigate to [https://polkadot.js.org/apps](https://polkadot.js.org/apps/#/settings?rpc=ws://127.0.0.1:9944). + +On the `Settings` tab ensure that you are connected to a `Local Node` or `ws://127.0.0.1:9944`. + +> Some browsers, notably Firefox, will not connect to a local node from an https website. An easy work around is to try another browser, like Chromium. Another option is to [host this interface locally](https://github.com/polkadot-js/apps#development). + +## Submit the Transaction + +As you can imagine, in a real-world blockchain, we don't want just anyone to be able to change the runtime logic. There is a special transaction for performing these upgrades called, `system::set_code`. This special transaction cannot be called by an ordinary user, and must be called from within the blockchain itself. Substrate provides many useful pallets to provide limited access to this sensitive function as well as others like it. In a real-world blockchain you might use the Democracy or Collective pallets. Our blockchain has a very simple governance mechanism called sudo which allows a privileged user to call sensitive functions like `system::set_code`. In our case, the privileged user is the `Alice` account, so we will submit the upgrade transaction as her. + +Navigate to the Sudo tab in the interface, and select `system` and `set_code` from the dropdowns. Upload the `node-template-runtime.compact.wasm` file we saw previously, and submit the transaction. + +TODO screenshot + +## Try out the Results + +Once the upgrade transaction is included in a block, you should see a notification in the UI saying the a runtime upgrade has been performed, and the UI will need to be refreshed. Once you've refreshed, you can navigate to the "Extrinsics" tab, select "Template Module" from the dropdown, and see that our new extrinsic, `clear_value` is now available. + +Congratulations, you've upgraded your blockchain's runtime! Traditionally the process of upgrading a blockchain would have required a coordinated effort from all (or at least most) of the node operators in the network. But in this case, you have performed the upgrade in a single transaction without even causing a fork! From b3b38bae3830e5bb29921cdf2f44a0930069b28e Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 15 May 2020 08:43:47 +0200 Subject: [PATCH 2/3] Spelling, verbiage and other minor tweaks --- .../v2.0.0-alpha.6/code.md | 8 ++++---- .../v2.0.0-alpha.6/migrations.md | 18 ++++++++++-------- .../v2.0.0-alpha.6/transaction.md | 10 ++++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md index b6ff36a..a616110 100644 --- a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/code.md @@ -20,7 +20,7 @@ If you have completed that tutorial, but your chain is no longer currently runni ## Make a Change to the Code -Runtime upgrades are necessary when you want to change the code of a live chain. While it is generally advisale to complete the code as much as possible before launching the chain, changes after launch become necessary to do things like fix bugs or add features. +Runtime upgrades are necessary when you want to change the code of a live chain. While it is generally advisable to complete the code as much as possible before launching the chain, changes after launch become necessary to do things like fix bugs or add features. ### Primary Logic Change @@ -55,7 +55,7 @@ substrate-node-template +-- ... ``` -In this file you will see this block of code where the two extrinsics to set the value and increment the value are written. +In this file you will see this block of code containing two extrinsics used to set and increment the value. ```rust decl_module! { @@ -94,7 +94,7 @@ pub fn clear_value(origin) -> dispatch::DispatchResult { } ``` -Confirm that your changes are correct so far by running `cargo check -p pallet-template`. If this command completes successfully, you're ready to move on. If not, stop and solve your errors or ask for help before continuing. +Confirm that your changes are correct so far by running `cargo check -p pallet-template`. If this command completes successfully, you're ready to move on. If not, stop and fix your errors or ask for help before continuing. ### Bumping the Spec Version @@ -105,7 +105,7 @@ We've already made all of the logic changes we intend to make to our code, and o Open the file `runtime/src/lib.rs` -``` +```text substrate-node-template | +-- runtime diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md index 51133db..1896076 100644 --- a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/migrations.md @@ -4,11 +4,12 @@ lang: en title: Storage Migrations --- -The runtime upgrade we just performed completed successfully simply by adding our new feature and incrementing our `spec_version`. In may simple and moderately complex cases this is all that's necessary. In other cases, you may restructure the way data is stored in the blockchain as well as modifying the logic. In these cases, it is necessary to include a migration path for the existing data. In this section we'll explore data migrations. +The runtime upgrade we just performed completed successfully simply by adding our new feature and incrementing our `spec_version`. In many simple and moderately complex cases this is all that's necessary. In other cases, you may restructure the way data is stored in the blockchain as well as modifying the logic. In these cases, it is necessary to include a migration path for the existing data. In this section we'll explore data migrations. ## Primary Code Change For this example we will rename our storage struct from `TemplateModule` to `UpgradedTemplateModule`. To begin we open the `pallets/template/src/lib.rs` file and modify the the following line + ```rust trait Store for Module as TemplateModule { ``` @@ -22,6 +23,7 @@ trait Store for Module as UpgradedTemplateModule { ## Bumping the Spec Version As before, we will open the `runtime/src/lib.rs` file and change our `spec_version`. This time we change it to 3. + ```rust /// This runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { @@ -40,20 +42,20 @@ Any time you change the storage struct, the name of a storage item, or the way a As you can see from the `decl_storage!` block of our template pallet, we are only dealing with a single storage item that was, and still is called `Something`. -The complete code for our migration looks like this, and can be inserted at the bottom of the `decl_module!` block, just like the dispatchable call we aded in the previous upgrade. +The complete code for our migration looks like this, and can be inserted at the bottom of the `decl_module!` block, just like the dispatchable call we added in the previous upgrade. ```rust fn on_runtime_upgrade() -> frame_support::weights::Weight { - use frame_support::storage::migration::{get_storage_value, put_storage_value}; + use frame_support::storage::migration::{get_storage_value, put_storage_value}; - let value_to_migrate: Option = get_storage_value(b"TempalteModule", b"Something", &[]); - put_storage_value(b"UpgradedTemplateModule", b"Something", &[], value_to_migrate); + let value_to_migrate: Option = get_storage_value(b"TempalteModule", b"Something", &[]); + put_storage_value(b"UpgradedTemplateModule", b"Something", &[], value_to_migrate); - 1_000 // In reality the weight of migration should be determined by benchmarking - } + 1_000 // In reality the weight of a migration should be determined by benchmarking + } ``` -First, his code `use`s two helper functions from frame support that are designed specifically for storage migrations. You will always need to do this. +First, this code `use`s two helper functions from frame support that are designed specifically for storage migrations. You will always need to do this. Next, it grabs the value out of the old storage location. Notice that we need an explicit type annotation when grabbing the old data. This will always be necessary, and if you are unsure, just check the `decl_storage!` block to learn the type. As parameters, we have supplied the _old_ storage struct name, the storage item name, and an empty array. The third parameter will be necessary when working with storage maps, but we are using a plain storage value, so we leave it blank. diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md index 551b1fa..46534a6 100644 --- a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md @@ -8,7 +8,9 @@ In this section we will perform the on-chain runtime upgrading by submitting the ## Locating the Wasm Build Artifact -At the end of the last section we compiled our runtime. Substrate Runtimes are always compiles to Web Assembly (or Wasm) as well as native code so that the Wasm can be stored on the blockchain and facilitate this forkless upgrade process. Our freshly compiled runtime is stored at `./target/release/wbuild/node-template-runtime/node-template-runtime.compact.wasm`. Ensure this file exists and that it was modified recently. +At the end of the last section we compiled our runtime. Substrate Runtimes are always compiled to both Web Assembly (or Wasm) and native code so that the Wasm can be stored on the blockchain and facilitate this forkless upgrade process. Our freshly compiled runtime is stored at `./target/release/wbuild/node-template-runtime/node-template-runtime.compact.wasm`. Ensure this file exists and that it was modified recently. + +> Read more about forkless upgrades and Wasm vs native runtimes [here](https://substrate.dev/docs/en/conceptual/core/executor). ## Starting the User Interface @@ -20,9 +22,9 @@ On the `Settings` tab ensure that you are connected to a `Local Node` or `ws://1 > Some browsers, notably Firefox, will not connect to a local node from an https website. An easy work around is to try another browser, like Chromium. Another option is to [host this interface locally](https://github.com/polkadot-js/apps#development). -## Submit the Transaction +## Submit the Extrinsic -As you can imagine, in a real-world blockchain, we don't want just anyone to be able to change the runtime logic. There is a special transaction for performing these upgrades called, `system::set_code`. This special transaction cannot be called by an ordinary user, and must be called from within the blockchain itself. Substrate provides many useful pallets to provide limited access to this sensitive function as well as others like it. In a real-world blockchain you might use the Democracy or Collective pallets. Our blockchain has a very simple governance mechanism called sudo which allows a privileged user to call sensitive functions like `system::set_code`. In our case, the privileged user is the `Alice` account, so we will submit the upgrade transaction as her. +As you can imagine, in a real-world blockchain, we don't want just anyone to be able to change the runtime logic. There is a special extrinsic for performing these upgrades called, `system::set_code`. This special transaction cannot be called by an ordinary user, and must be called from within the blockchain itself. Substrate provides many useful pallets to provide limited access to this sensitive function as well as others like it. In a real-world blockchain you might use the Democracy or Collective pallets. Our blockchain has a very simple governance mechanism called "sudo" which allows a privileged user to call sensitive functions like `system::set_code`. In our case, the privileged user is the `Alice` account, so we will submit the upgrade transaction as her. Navigate to the Sudo tab in the interface, and select `system` and `set_code` from the dropdowns. Upload the `node-template-runtime.compact.wasm` file we saw previously, and submit the transaction. @@ -30,6 +32,6 @@ TODO screenshot ## Try out the Results -Once the upgrade transaction is included in a block, you should see a notification in the UI saying the a runtime upgrade has been performed, and the UI will need to be refreshed. Once you've refreshed, you can navigate to the "Extrinsics" tab, select "Template Module" from the dropdown, and see that our new extrinsic, `clear_value` is now available. +Once the upgrade transaction is included in a block, you should see a notification in the UI saying that a runtime upgrade has been performed, and the UI will need to be refreshed. Once you've refreshed you can navigate to the "Extrinsics" tab, select "Template Module" from the dropdown, and see that our new extrinsic, `clear_value` is now available. Congratulations, you've upgraded your blockchain's runtime! Traditionally the process of upgrading a blockchain would have required a coordinated effort from all (or at least most) of the node operators in the network. But in this case, you have performed the upgrade in a single transaction without even causing a fork! From 9cf80a3ff750e57bf7cea985829d4ca688357bb0 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Fri, 15 May 2020 10:22:05 -0400 Subject: [PATCH 3/3] Update tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md --- tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md index 46534a6..05ddb7b 100644 --- a/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md +++ b/tuts/perform-a-runtime-upgrade/v2.0.0-alpha.6/transaction.md @@ -10,7 +10,7 @@ In this section we will perform the on-chain runtime upgrading by submitting the At the end of the last section we compiled our runtime. Substrate Runtimes are always compiled to both Web Assembly (or Wasm) and native code so that the Wasm can be stored on the blockchain and facilitate this forkless upgrade process. Our freshly compiled runtime is stored at `./target/release/wbuild/node-template-runtime/node-template-runtime.compact.wasm`. Ensure this file exists and that it was modified recently. -> Read more about forkless upgrades and Wasm vs native runtimes [here](https://substrate.dev/docs/en/conceptual/core/executor). +> Read more about forkless upgrades and Wasm vs native runtimes in the [executor](/kb/advanced/executor) article. ## Starting the User Interface