From 8e34e4061b534130bc7495c102120371c8738d95 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 11 Jun 2019 10:43:56 +0000 Subject: [PATCH] Add the new sqlite3ExprUnmapAndDelete() function and use it in place of separate calls to sqlite3RenameExprUnmap() and sqlite3ExprDelete(). FossilOrigin-Name: 36ea13e0a851a749c9ef292377ecd82dbd4797d38df907b362487fa234c98ca5 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/expr.c | 25 +++++++++++++++---------- src/parse.y | 2 +- src/sqliteInt.h | 1 + test/fuzzdata8.db | Bin 1230848 -> 1232896 bytes 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 776eebe5bd..0ab2546e0e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\sALTER\sTABLE\scommand\sshould\snot\sattempt\sto\srename\sobjects\sthat\sare\s\ncontained\swithin\san\sexpression\stree\sthat\shas\sbeen\soptimized\sout\sbecause\nit\sis\sthe\sother\sbranch\sof\san\s"AND\sfalse"\sexpression.\nTicket\s[533010b8cacebe82] -D 2019-06-11T02:43:22.189 +C Add\sthe\snew\ssqlite3ExprUnmapAndDelete()\sfunction\sand\suse\sit\sin\splace\sof\nseparate\scalls\sto\ssqlite3RenameExprUnmap()\sand\ssqlite3ExprDelete(). +D 2019-06-11T10:43:56.870 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -474,7 +474,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319 F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf -F src/expr.c 19100ef384cbe1f985b2bf692bfe5100127365d81becb61122bed48667e0ad0d +F src/expr.c f6b10414b5bd88f2966a407caee09a8f1703f3c80e1a67a5b0945e9dea3ef409 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 0e14d4bef8eac2d87bbd517e492d9084c65008d117823f8922c5e7b2b599bd33 F src/func.c 905c0424900979fade3731b4a271592059425c988cb7d5b245032253712dd7c8 @@ -511,7 +511,7 @@ F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 422fd8cfa59fb9173eff36a95878904a0eeb0dcc62ba49350acc8b1e51c4dc7b F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 -F src/parse.y 9e13554d106885123293b0f9dc8b3fb7d4a36f109ba24bc5984bbc6405b1c665 +F src/parse.y 026e3e6fff32432166a4eae0bdb78ad09a53c84eb49acb44dc32e49b4c0b8a48 F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c be64b2f3908a7f97c56c963676eb12f0d6254c95b28cdc1d73a186eff213219d @@ -527,7 +527,7 @@ F src/shell.c.in 9648bc2035a4dc2a380c863535893dc1d9f8a62bab57b6f2943e530aa62d04a F src/sqlite.h.in e80973893802ec7980a602a449c93527f9265f1295ad156c83cbb48f9b58ce4e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 9ecc93b8493bd20c0c07d52e2ac0ed8bab9b549c7f7955b59869597b650dd8b5 -F src/sqliteInt.h 73d93952552a7a5fdb29ae19ef9919041364070615ba04c2d673126185f523bf +F src/sqliteInt.h 3f4d665dff31c852e9b724b0ec27f84af0d8c500eb0391d713faccdd86a3d379 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -1006,7 +1006,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db babb1c560fef766171972c119c1bc3b7be20b134e2f46ae0c52390cd3059b6f4 -F test/fuzzdata8.db 2f2ebc7632affed8f0bb6c52447db5a73eb37f41afa4d745f7ac9013722feead +F test/fuzzdata8.db b305f58033b043856d7d58c43bc0e8eb8fc2c102071a77d6b4c7f4efa667702d F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1830,7 +1830,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e82f235e7201a420149847cda630ac6f2fce5e3a4577b0ea4793f430d3dc1611 -R 68739974257ae8553d5364ff46bec812 +P 04bd5cb73287f926f1ecf578998fa6ce1379474e86918c692eae5778d0817cef +R 6b6d800c72acd17bee33792b16c98170 U drh -Z d223dd9a1c633bbd46be540c239afe43 +Z 2841a4dab216457624e44ac4f8437ccd diff --git a/manifest.uuid b/manifest.uuid index 6b6897bdd9..e7d33d1bfe 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -04bd5cb73287f926f1ecf578998fa6ce1379474e86918c692eae5778d0817cef \ No newline at end of file +36ea13e0a851a749c9ef292377ecd82dbd4797d38df907b362487fa234c98ca5 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 057cbd6b7b..4e8251bd89 100644 --- a/src/expr.c +++ b/src/expr.c @@ -895,12 +895,8 @@ Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){ }else if( pRight==0 ){ return pLeft; }else if( ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight) ){ - if( IN_RENAME_OBJECT ){ - sqlite3RenameExprUnmap(pParse, pLeft); - sqlite3RenameExprUnmap(pParse, pRight); - } - sqlite3ExprDelete(db, pLeft); - sqlite3ExprDelete(db, pRight); + sqlite3ExprUnmapAndDelete(pParse, pLeft); + sqlite3ExprUnmapAndDelete(pParse, pRight); return sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0); }else{ return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); @@ -1060,6 +1056,18 @@ void sqlite3ExprDelete(sqlite3 *db, Expr *p){ if( p ) sqlite3ExprDeleteNN(db, p); } +/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the +** expression. +*/ +void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){ + if( p ){ + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprUnmap(pParse, p); + } + sqlite3ExprDeleteNN(pParse->db, p); + } +} + /* ** Return the number of bytes allocated for the expression structure ** passed as the first argument. This is always one of EXPR_FULLSIZE, @@ -1642,10 +1650,7 @@ ExprList *sqlite3ExprListAppendVector( } vector_append_error: - if( IN_RENAME_OBJECT ){ - sqlite3RenameExprUnmap(pParse, pExpr); - } - sqlite3ExprDelete(db, pExpr); + sqlite3ExprUnmapAndDelete(pParse, pExpr); sqlite3IdListDelete(db, pColumns); return pList; } diff --git a/src/parse.y b/src/parse.y index f02f2074c7..fc5bff16dc 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1173,7 +1173,7 @@ expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] { ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ - sqlite3ExprDelete(pParse->db, A); + sqlite3ExprUnmapAndDelete(pParse, A); A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1); }else if( Y->nExpr==1 ){ /* Expressions of the form: diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 5422007958..5c711f952a 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3871,6 +3871,7 @@ Expr *sqlite3ExprSimplifiedAndOr(Expr*); Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); void sqlite3ExprDelete(sqlite3*, Expr*); +void sqlite3ExprUnmapAndDelete(Parse*, Expr*); ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); void sqlite3ExprListSetSortOrder(ExprList*,int); diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 3d23ff335473cfefc161c3b63692dd1344f07e5d..8da49a1df72f6f313190d9f7b2e365df851f393b 100644 GIT binary patch delta 21079 zcma)k2Y6If^Y@;6Zri(e_udVJ4%t9Lk&<0V11Sk2y(Dx&AfbuWL_kqmmL^I|2rz(@ z1dt*n2_-`jNCaLG5E4a2r6hI{gdnJ|B7AcfL0-iF^Tp>5=9Y8j%*>fH=Qnebmfk5X zt5bSa_b8i9+->{&Cp@D;6E-R@X@jD^!D`cearZ7=HQDsQFMqu!zTA{&1U(|LhMVI{im~P5P(AA4>EKe+{Ca_^T5=(R9C?=zPCHbe7*mbh2M3I>E0I9qqRh9qLz!4)7~P zyH5AZ^iNyANVKJ&6OHf-MC6e=QZ|Xm53dmU>}4V+ClJ~F z5|QoWh%6gRB#opmOc_CB(hEce4=2)l2$62dL^>o9X+4NYlYzGBHlgMK`roSki0IGR zZ0v3yBER$^a;+zkZ+j5=v^$ZriA0Vk5P7c~k$1Zg+0%*0jt)fLX-8yJTOzBTC9?b( zA{niT%!?y3w-u3DEs0ERL1Y3cn5B?r+4L7lv#cknlyxMHvX-P!)|~XoVo9AWnzYHh zjfgZLEwWnmiFinpETj&R%4A5a94V7INtaBiMTC($ZGVt9ZMQu{u7nWziWF+QNcyyW zLh7`gC2iW?CuQ1>R3c^C4w5cyJ4uzct>uZlO^URwo0;QyJ;%W?$078bz-*8=TMlJI zAaRZo2}OP6IxGs}?ebK4urDeywkdeFNl(?%`um2(3?9%p+MDc)^!mKMrcJ!D-ba3# zMnmdFsiGbg>Gd}C4I3OA1&jO3fO0W2n<8tx4nP$cNoT-tQ}V zXmZo&Ceck|qGG&_qr6dGNUSS|)r!^Vi^#^YQQjuQhyTUbUmwIqCtDxHLg+!MlCMeB z{Z5JAAC=~f(fT(Yo}4_u>eCvs&+GLK8Ag03YyG2qkWyc+Kw>MrESG~Bx1?&&EiK3% z;~CX7>pb_R%o0IrK{y8%m)d3BrlA+Dotihpm2@cQ%v>_kA%Dp ztSWriTi#6b(Uwiu2FUXog?KDYXk(YkiMCD8QH!y#FiViZkc-nfQ9TFom-%aJ{@b38yR(Ugzu`C~mA)hQl7E9dxU#HpGnO zLV+Tc7j2h(RtHEOq;hE^HM<=WPiUXv#SKDj&UQfJX{{d)+$_A!Sq`K=tu;XJHsK@A zav|e)p)$lx(G(2J6)tm@2dtxmdfzR4r?3h*?p>iKS9j&c1dFzk@qtmi(Nzlv?`^wm zjdmMdyTNyxMPP);Kj7qkYT`xr z{I%n4-2R);gF{lTA?6neTx9!zmD5vjbb&BG(A<8^JMF9!Xzt@ca|a+a*ZKCt<~(@e zmQXG5>bp>SL=S;(qol=Fvz>VU*TUDLR8h2DaO^4N<+#Q2Ub+rH#&W^qEEoPS%Yi=X zaP}UgwsdZ>+Ky0JrTfy64pD>0AbF5k-;%*O&i;eudEo|)>A0X<<3A4W<3c%z%XQBA zU#`PAq{ML1dgsJHgi)TK7p2O?dM#qTDu;yKT(tN@$o%X>?%N zr5Dc^*yj*`#@K{g`|`e=eF6S`+D^=Wo_FEw0{9PVBcQ}EJrLJUI}Ev>8eMTkGOwmc z)kNFXO;4~j<&F99G}2SAoaXZ9)9=mB%GAO z=W$jFg@^T4aOb>U7e`It%Q^cJ+#bCtwwT1PDN=QsUDK^@fVxrf#WcQ*OP8pxZ@{0S zzk-uz@wuFR3+!W|DrCK?kFb<77=M_{t8n%m_T2Ow>>0d*%U53PI_9lVefqJiJ*}&Iy zU4{5+yf%6oh@S+E{~CsN)CV!3Y1baow>vLmT4V8LW*OH{5Ff^)!5b;=$6K4Z!P#{v zKB7lhGbIlS{&ZB!-_E(h${-no>OoR9u2}7!4zzm{636kDd%WVIz^^|;;&Gt@h+_&*gQ(R;xW@z@An3XI^tP@3Zmfsm{GGpj>|v)>`HrSmfw*VO#Y>a4zy ze}UJKSSW^+@)AM%g?jn(F$vxMcM07KNC;^_|FK3%>-6KT-{MsyR`b4Qq&xHqhvGTB zh9##VSIOIm&ZCwV~~`l2cA1DmlJ07Si~XgTO)8&hvJFmw@~z_ zL*GdHh8tfAT7HZjk+tL*?!GA=k{Ulw@ zWXx@`K+8*{NXttQBCl#b5d#rSN4dZ6yCG2IiXMC@UWwBKU+-LNT*mb_RM`87#)d8^(PQ6a+h4GF^ zPICH2aSr4j5*JzTKJ|DbMhjyfPFo?)7Fd0VPj#Ncv#Z3Jiqt@~or!tKEE2Op0_40U z)`0f=#a}H0s!LZRaF5bzAl=%_9`;EKRsx;L4H0RGJ(v(V7!n7`9noAt z7J{vgi1Y1|SF|k&4K!(dAbzOE%r6%q+Lk|5MQ1FUD?ZC$-&wIOi^?w&D@&43w9QL= z@JV%i?PKu`fi(m7d9ed{&Wld$cV67W+0!Uq5YO19#-eR+s|T-F2J;z;nFf91E1<`R%bZqCozjj)`lkzay~FygQp6shu%>j0_Mg-Tehyi~z1M@lyT{uU1gG!{3um3lKs-{`IYRXoyG%Ra2# zTxWoB>$HM}BtxK!J^nTYWXTs3Ll&v%`K8!=Kj zwR=-v6m5;7!Ed@MU}&uLC1*V#Z?o$e@Qib5kh0#X!0NW99jgEA{0iUHrFVt=IBB*d zMN>>{#X7BM*Jg&%_MG)PH8hGw4V@m`4UGCZCRy9t-jF)mtO044#MSw;rCXT* z?@rQo)(6~0jN;19Qg6=sLTDf9G9If}MBn7q>sa^;<$0BicqBLA!&p~Rw zI0DjEFbBTUQ<~3NKbT*nb_=`%^p1uZeWjNa_B(b2=AhtuZG7t;iahic{Fu-DNA za+)}5keM45;nj(f11`+g?6`k|)Pb|XP_|F(0|`q+84|9jA(%Evn#tJ^c<~+98~aU> zXi^M?HC_2H%L;=M!MoWVjwyaAQ((hrJEHoa##NStOJ_-AIU5cGKP18R|3G~M8dZ_z zFS{+)hNO>}3Tw`&BVpWfCZYbO^eba8Kw&d?RV0CZ&DjVz|Gq>KT)On9BF2igBbL{V zgM=TX%8*`Nss{zjr6Kl_x2wmHwyv}Q_YYEEi2G2jhuc?3-36&XscY1(;9DnGfEyR2{?PP*M7X`Kb1(YVUNSoX^9+!=a^K=)QKxbH4|;S`di$Lg52HG zTx*J?()BV_`^b#OW+$ZgIeP_4_nNQcywlPo&L+X7V`f`y^|4eaK<*iH)UwK?jD*jn zr(o+xQeXBe=A4!qGRWO;x~#X3%4{g+ha+HRG*;1~6Gyqygr(oz!X)uEYxe~2f zhb0-`DV1K8r4}T;dKOC)A?2b=hOA?f0XLe-p|JM{sfo2XO-INl_Ow~tmxS4mUL8MGa>PU z6b@&@ibdLL0MiV5nSW zq*j!xV`!L6eq$lz5u}1<75NQ@>G5(+@^?Q=HNkvM{sYtqIS^_r0(U=G9cU3DA6a(K zH3^3|lvfKZ9auPd{XsEuU!3Tb>#F3z*Tl*NOkKQHju&m8xF2H#NeKp%<`WN@aAS|u zY1vvi2$P%3>o{A2XK%?n1l-wLPL$X(%>6))CswA)g(!EF|6~jxBS-RKRA)I!m7Wo8 z2b(^jb)Eb~Z}}{fmQo)p;nI&%4Hyvqi0#aQL5JjF@Y!{#4tT)jhRX+}P;A~$KF-)% zPzYl%v;MIuw#6FB2D-Lj_Gj{Q3`-`;T)-rdL6X{uwyjhDKg2QE zYGgBA+u-aTiJW|v{1s>0(LYU|PLah5S9<~C_R3NDo8^WQ>wt~6%Z-?r^Oo5jlXl2! znY5L@&BelAvYQ2Dj3i@;0^VKnOhSuN&&rD+{RX*|8E-aiS#|x0M zjTW-$%UoluZ-zqE!}9lRH~9O>mB73#ZNjuS?9m^P=WlE&LjzQ9N zna~AMS?ClKD1Zg?2dOiL1u0)J=|A+%`%oB6@JGT;{4DmPED>R+3F@{|&*HQ7lrD;tDBAuEvDlBpPrXWAE}bA=iqW@S`JLh2C`A$o zamvY4Xd4u(5XkfqN|ngFYih{-H+kGG0NKlD?u?u zp-7?>&Ng#Us60XW&O)3Le`gi3>LlfR&c1@Y=}I@49Q@^o4{GEDSdjG6oMXQ`#_g z1rB$!Uae}qnn|c;Qh8OxkQK_;0{amT_n>D5ps46gQ7XKhoab9Mv8TuVe{(5smeg0*%lC7j)aUM-cM z@z=eI&e_ip(^?6`y6-AqaCU21TZNXg0_6;6x0iKPI$)Qh%2ieFMIv~!on;l{A zVZjGVD?$2+y88{Xrm0&or%36^*?+Ncu|jK|`LQ)0euu(k%CB(aH;PJ>&y+g?`vVJC zDuja2Oo+ije=5rYD8(I001$BBs;07nASY}1e?s9pr6N|Zq52udO;R@y{Z1Jmvp%@y zni9#>d;7KCqU~1YzgdE`^-P8uK5A&|PfBIWas5j9GaDL3N*RZ=j;e!fimcK&r@ToK z&O#v`&)&9Xx&ZDVl^~Gc6pGzA8W#fZ_rCwW2<|Fs=RFDPE>7{WyN0^pFNS~^Du9UZ z6-U0R($b_rSzT8xOn*vEVbC>Lc>_Hz^(#hB@9+|(0)vQjp)Z&t)p_`*Ta^XEq7E-t zVzD{-2TmB&;Z+I&j+2%X#xtd|`ntdza5zi(2;!br3!rPb(j1Fc2_qOZl1S-mLeyy@ zZCk2`sRvYNzS@`Y+u$dNA{~DXS5?}O(!gElo2J%d*sz}ZiNFk6s?~eAb%9WW!KjML zQp|6pc3}iaWqhj8%H~yRWuq{uyZSap+)=y?>aS8vBt3C;)bd_@l1O)iWBVgV1_KjUR~53 z0%1=NCj!z$*v){PW?jthZn0GvT7+1$TjXhMJsBrbX~0!u@)lvMV&z96o-ng^}cD;x2|E9%E0 z8vtvjs3X<-ho665wB2iAaW#Y%VWHOUk^Kqjf9?rv{%S?k0wqa>u)j9EWaAe9Q39GZ zT#XqJ)2WtOheK|CHNmpGN0s`}1CfE)gxV1QsWKW<=Bk;TP^`j4_4cE>ZMslB$yi;; zjj~dvTdl5qnR%O=W87}_2;UW7c36P3nf7wDA|zt%1L_(@94OkpwjkHI%o~(j zAed0i#4nzL(MQxwnV>9za-MpMvJLZ&s@*w@&h*76LD71$xXW#&WGK4HG)TBC=0ZXR zCN3LEAV6*hX(PFavn&CU)*Dr!Uu`tR`zaJUwr<&x`}WtNId1D4fh3= zHr&loEK$j2w?Of0>))2ppq~_q;oqy5IBNwhK2SIPbN@aVk6%-p3j}JV`h^HM8^@MG z&TdyrRLWHHyYb+iXOOeGrCw3xL4oy*U={y;pLs5U`nVErxS`u!RfR#-OdTuSRexYo zB#pAoF5d{+#XZgJ6wf@1W!3G+7``vrn^}lfS*ZO;Kv~pvJ17gM@Qu`@VOQP0hZCMv zR?mK9({adjlr@3^m+oSKP<~n&n$nAI8Pnud~c<;gpE737x^%p}w^1 zVt6efbKKZJ;fFWvBdz;gz}TtY*mYySNzudRBhYO>bL=X3i9&38*cE(>?6otWK9mQ8 zHb~_m_XQ>4LHO{Fkl(<*SCo<|12_cB+{{6d^jw#UMUCwdOzKFVCqi)-d-cp4lXPqt zY5#b_ zlgzvZHQ~m7+J#ki**(x_k$nMJ z-d(c?)_Ku>K_I{?yBZnj^fC62F=&jvOkhdiA8sdDJjG71cruiAB-AJ^(a{fgPq5!p zrQxEjbh0(JMTA%gFXmPq23@DwN2)`1)*VVp?iCm|giN=WNYB#?Lm_d7M8Rm9or2L} znT3<9Lzi5(6;IEy#}Fu$ncbbhg}HVD)LzIeOsRr3=G(s^)Cm_2u%`+*aj|`GIi z8LKK_%J24J3}(G$pUy_XpkQ{}8X(XBM`DVgrIS0X%&hc`Fd9OCVHdC@%U+9sCfb8K zDV@841j@!@{AhOwZQ#qhub}fC`!5npfz;Q77Qu}H=I3x@rF{vcykJj<$&#zW{SEeaB5O1YT{2`YgW z1cm){%&sw5b1_5wf@AzpMp#j@vuH^`mwPZk(ePdGZ1);b9YA$;?>PCO=3R zOzGNdOvK!i_6iJ-p0Rrr`30Kz@FJ4xf~>rhU==652JwH`4@1@lp*+Uzw6~^>={?hj z9Y444V}x&&hPsD9`g*&H<1W~pD(PkF*Y+7)dX+w%1{q9ihjFF$PGrR|kXikY%u--& zL*jGtkM_9)Wcf_(C4Bj+y`d_NB6PwH@zovuf#0^b72i1g(n#oXn@q^RD(Xc-n8sNw zwh#yf7N*iQ|5oM8dd|PiWn-cO`8*XY(NWwALP`C2|ukP0)rx zN~YEnf3K$5IhzmuN!rh}!U%3uL#fp$t{swE8VP<_TjS-?T zREuO7+fX|tvkWLbq0Pd%k=kU=7DKk^XosC*HOhZyLh&Dt2*?u6<{NjBd8Lh#WJr0M z%MhYDQsBmGS|4oPQX>>*34}h!--h&Bq8&=+I1pcq*H#K_DT-~h*>-s>*+p6pOCy6V znXfJMjiEa;hFN!BgDj2k`n0ZEXAyRmA5EaQMm{s0-dm1T7?Z_edK9OK#wM&ls*SPa z9iq_=-zKcY#3D^*aQ7RdG3~w_pJUo2lr|^rs8KkwS(49Ls*BtWg5lj|HBfcTGxYbrIrl|H#8FpCObnR=?CgF zJ)cxE=891duYasnWk8I6X0@^bSUit{d+i;UaYvH&eW2;Lar!~6vw#V6v|Sc7#X9ik zk+@#3u+5nFjn<7)D!;4t%&gHOCN0(|1lWRkKWHk0gtd-bIK0Jhz?yJ}0-g}91U;&w zd%(8efxK(l_WK%5+pXQf>MONx8QThO=8S-nGVN8o8?FfiWp()Li*1-8>WK`DFSIi7 zCUJ_KE@;sV_pa9($nUc7v>;&|JRX*acPcf0wjT!1?fk0H>B*+G6}be`_qvHMoX;;q>R(cQ)K0EK*`Gl zz~-*d#(-ys(E?I(gjtxNJB|d#v=j3hI8+WHZpST4p1Uy5>j-Bsa-2hhL-QSWSoDRK z`jGc88J;?OEGU*z=Z@N=skOCrcj{YfwDA?P=et0(^}|F*Ctv% zZU&p+ z&k<7o(kAS~&?%bC;nMT889cOCyKddw4=Fp1?GMd5j9WJkJRI8*g&lKCxTBDP z-a7<^+|dfw)O1|3Z1{5E=3yvQ=w`|*P8Ac1v|L&?mT<{>y#RcZomG%Z(7q!b{>4Q= z!i7+1SPeCDtOK&x?&xVlHUmXl9n~RD*263k1czs8@jzBg*;AYF9u$^yw8Ce8(+U*v z=+NXyEbc<3Ay&HUOhAjrplrKV1Y>JC7UPX+4wJ!-R*vqF@{Z6S5`K3)3nLWATU5YR zmZuqnaXxTPNY3eN#*Smzp1}QaQrI%hjE3|+dN6t#Is#=L!U-(fXFX2Ypw)$xUo;=& zey*KHZaI4;36cfr`ea@PoosN zO`saF{|b$*8RmteR!%CCYEFKrpf9IB?mBcx+oScxh!KwK41(G@$_UfTE;h1hWw4xT zQ3pp8fqe?u9~-pQ=zIrjt&yRe{shQg6F=|(jPis$co~bczvp)yg=w*Xir`l({i;| zf+h4#j4;6D?~Ix-c0G0Xe~EZrV07QYj&@}8CC?K!L^FOqL*lcVK*ef#djua$-RhVL zW5+pUB(Fx9_U|EYpHPHFZ&S2^&o6e&kl8DEdAWl!>R-~hf5ePv?dgD7y!r%zP6-J7 zDy6h(SsFV@JNB5J>|)m-v_I8{)ZE}G<%}xT1ib~NVvU;t=^;t4rJ!8*c^gwbu*Fep zPFA_wlK2gX*Yug->A+i9D{Ukg?`bBgd5)TjG>HJ=an_2FLfdQgp$Sl-i?Gh}uvh5% z8L}IQ`yoW){b6kjM=*rEreDRJMk1|4NmKNtRv)(@qmozvDHWaR;H}APLP{#Xi6h=4 zC&6w*Mm4b|q^)(!5YgME;oT}ufj<4v`8?(xbMz3{FPJycq+r6TxB|+qpTn`u%*7P^ zx6o%G637GQ+3-C_*R_|oBLgipp_(`dHN(zjCK zSQ|%0$ZF+GgtQNYSc|X8fhO-R&34|jIMR6jRmU+=dW~SZ_=jwL9*DvJOQ#7KBsL*% zJf|zCGBon9wQF} zVCt(lfs($@9QQWyU;>6U@Li-(@jxY=cDxSol{zR2t)^2Hs)O$vM!h&5MzOKK2Co9Suj&2&wvE16v$0-k zRlE6X^53u|)=70Wo;;`Bk|7U*q(XfZj*HbP`CSe&=IFE}HP@*&AQ*j%^;6_{I1k6` z`MR4ed)r?jN7MAqp-80n1X33&i9xRLsjvO>AxmkI^@7B zLUCnr6HwOJ0XI^)iT~-Wx3G%g-07U8pP-ZUD?{1KR;55sU00>)6hn0azpjtYEGZWZ zx#t`*j7#ISFsqab2?^8VRd;rrCfdHK{DhZ)UK$QN2I+|s71Z%+P+X);z}yCU0$(Qc zSc~oInB2%*OAElKLa=3#r)e*DOdx&QcnwJ2;iPQN2t9{Wacgq4^`7T~UIns7N{g}E zSbaBR9`wXHXEVIK$Jv;0P3C--vj&RWoDvi>ovg@=Qk@j_sZ zBF)h{w4{Ejzhw0u2H8}7jVWt%+H0rvA=R1}1r;M^=;V>Zq4XEwAf{ZIjmI@7Heiuu8Q8=g(qyB5;#Gir#K z28)WExic<^pIUEyTb$S?P-PMyA7QDyf$n=|=RC{8h_`=Ve z)2Xm<0hNt~vP;X9kbx^#O_8S3< zEV-q7IG7Ip8ch35x9Y=qGpmxB%JRebmk>9B*N3zhq}q^m)KL?Nr3dYQn-GI zuf=8;^hQ=N&)Y!pWM>4%Ej1~zoIH;CNrika#2>e8c&SfH$JZZCZDq!?Jhv-NO9{Af%h#6t1T`S6WZ{L2;>r zko3MzO561Ze<|T+W5$VN){Xr-Ye3|9GKGX~F1cD}=gAR8;SW!Q15 zbCn{|PV2|%Ptc}iwQCqOdEI$h8c013#~VJUNyfB}WI5(d=Q64)w8XoZ;j#tJF#?qp zhAuM0A+D<41E-`rU+3&aOuV2sV@S$8CJ^MCSfW#c>wzlQV4aoD3yh6IcWb>I!-}h& zl@(@3-v;LyE)AnD$71RveI+@!M&eRvvej8cRfVZj^u@Srn{y1eP~J5Ct4G2)iYqtc zg`IRBilt(5sX%25Gxs>t1ojdZ`*>Aa0PDIOkoF@b2>&O%2pH9PNS{xP8i= zk$wlM=sAmp1ngSs%oC)E)Zx@es(O*CdOZxfCA+Ac&&H<#3vu}t*U~Yqx$7Lm;499b z7@Lk|*)D_1ndiGGpC5AF`8A!<#i>y)T0X4O;J+K8x|no>Ms>f;l%5T?CO{fpbFk>H zNV7eq;r(LkU4aSwIu;2M-L?8dbC~N$;O<-~k|nAgAK|KpFPp9f3VYKk)~1m9!Pj2~ ztbQJZ7AwJ!REa9?iX2p_OH~bpe>ZlM<$GMEl4KAneZQpr0kadVJQk;_MZORVo4H!i zp^Ic!9*t12bYkO+u&^cFg`zU$HvSPM)n^da+O<00>lz_SZqZio>;tV?)y_O)O(nl6 z+TM+Na5qqf?H8m4^lwMQw!TY zyN%8aUh_#!39y;yqVj=tkX)VO{elmvN`b^Zh~XQrx?WYJVA1yN{StDEH=x?~#qjhD z*BtwXb+!HFMcdK)#||DmOt;uuOV``ru0uyjB5pg21sFHpl>sE**%qT4A-k$;5Z+@F zS*nt~mdxb`WOC`)YS$_dQYQuwB`%MUqKU5P-wcZJ<+UESC= zOl;|*G@m`&MI~KyShYLV!A{xWB9FQQGN!t2fG3Aiop(07I;m0x(f0X6!=vJ%JeOOL z-XX5?z?Wc5got<+jg&X0Ql6dY>uFf-dY_Bj^{&j&8s))RXsYOW*JW2lItY4}4t5&t zapFB?gx> zj1WlbVRWI;)8zxtbi;?apSyZ6svJx!bM=9=7J?mzUU04D>|IE^?P?4um&_Pgd(hPt z50to?Xsj|`zv42PL`PBiVMspistD-|Sqz1|Y$6`N>T1qe0gTa&FY((OuIii>LQa7> z9B2?!Z`IfE!=kUuBpi6#MfGIwK^`}{VUOQjxttw=f)c7f_6P<=SSf$FM&rwOU4N2h zMccJuSX#+&2sl$VrZ6WRTIK(_fA+euj{;%WR*3t=Wyb>5c!mqd>3sR;t_rZ@x~t2> z5jq%da2kUIcEZYzQkjft6sW8!UaVx)vZR-aEs#$7UIC^lqxTRyl>5B z*wSkp;RKS$XvATLNXD-j z4WQCg<7FsOsA_B6Pp+r%&{ShqU>1Fb*`K>;hGdRdRSgRVi!o zqbWkp5F^1l=*llbYE@$%E*fe~;Or7rNg1>_k`?yFDK8pSh;1ohNgbIDb-JhGS6BlbHLogEpJ}>w&)KLZ6}@9n{%!H)qvWYd~=rZszR8e{~{e;tTdlA zWB=akjSk>=kWt-;!_MgjDpXLIm@fuH%QwVVaq)7aqFt&f+O||C*V_Vr%r?pk(htPI zwM_R&vbYTfVMjk;|NMPvJGC$ub$Ht=7gfsJ_eimX%?@pXfQHWot6#?lB0%yNLzK zJdWarid0OnX20>SB!yADWSwh@!X*X93}(M|;8}ky+E*BXdp+MXwle7|F?}0+Zwv7j z*Pl}~@*jgT2)|%O;~`MlYOo&Y*SZcVs&pcB*h~q|L>Y zeMTxn`3r-Bi8~v6P}(&mM(b;3euF8zGe}aInh0Ar(bpu}Ef!Rm+D!96dMxirkcpOt zYu+&ilgYlS?Y4Nl&F=oqr6tn!^z1LLMh2$CJxi*Y3|j0mCRkkdLgH;5qc8{0er)(C z-!*}1(GzbP(Xtdy&M6>H$gFBo0{S;Y;?f^Bo5+#vb9B3({Q}Bu)=$W(`_YvFsD8v%uKsXp~7?y&&^zMWVvsb>qo6ywJCbxlq*? zrTXiLwzby$YYd*MW|UpqC;RDq+D*4*LY5pxOLX>Ebf8$xq*64RlfiCsYGEdA2MzS? z<}C@reG+g@yD19PY@%sxBktt;Om3A#26hp&C43rdMw#@N0D>@emQLR3pD6HBCX|cB z&=P$ihi*Ih7^|)FkUC#KLC3CyDsa|M6}eKpxrL6AVorNAf$MaLSF9Kl-Ne^8HWoa4 z=#WU(ck=UAN&QZY>0+)A929+T0FA6RNWILZQk8jO{`$DKmr3)aaz?oSDd^V6%w-kw z`F3T6nkpX(hp_Zjv!=jmLF$jfJjfdDjDhL9`He?p?Hp^qfjQI6zOr=;^~V-bn*=DF zW^W7EZ`s`za!++!Q)5M?LNS_4&G`z|AFf_yj+E+ef8O5+_0{Ijf<%9>Mr;7A zp+v{oelf>mR+c%06HZwCx)cG6k_cnJTu}bQ%!vy9m6KC58C4$bHmUNcF{F&5x>r41ngStbq)Rw)pSjRFS({N$ zr#bv0!3=# z33H5Hrt`M{O^yQhv7px0vAp|-Cy)-8IoPs~%zF|6gkn>OSB;2=q0u(1@UeN#I$~SW z%J5h#`zgGB-YjpGBF0}f4^ynA4u_OdGZvFCnpB+G9I~HLt3XMqtFv``03I(fw<{Xu zy)TZ6x<@~d+J*Zt=Xagh8a)e()WsJKN_P$x-7;yD+d8wj8{yF}*=u1Jk9!waq8k%bFFphATWlzfxMRM> zSsN&AFGcQ&b)VvN-qy3;YzYZJs!r@Cx+zR*3yCMm?3QYRbTrbe!+P_)q_79d49%aevzNyMhsLp123oJ}_KP}jY5?}4< z>OrB4?tMgbm{q|>4Cg;FF-Ob$0sGG;Q4Ur)hdW&SRf{@YuyoJobHr$LAj9v8N@r zevk6l*Zs3fr)1wvc0VIX-HEjUyZq&6{jJdCfIYG7FaqX0#6LeB7jVgyL)e!WI>bJ~qduJkHkC$Jv_pWVWV1!dBWtwjNA-|D$Z3Ci}$$ z;X!Q#t6))_^)JlL{s(h&9%t_L$C;b^Wai#@gt<5W!Q8w@nQIe7GMh* z^vBuCc$}@pPi8Cg5w?~*%2r^`FMX7)z?^UP*PJKxNnHM~o_xhWJ^9Lic=ETN?8#R> z>d99>!rq!k*$YhiwU4qlI_QQfKW$C)`1@|tF*JtC)J33c9hUuKr>%ARD)$SF)|)p2 z?rA-+k!HN**=q{;!nB}OjBS9@QTC8!C+%I~^7f#n*3<@u`?m!7Xy4Z{?P=uxkXypFwmITXY}C`emHw9AzM!52?*JA4Rk0S!0GE`W6AlH5irj(({Z=^8 V`m`FoYl0{dJ^gv}b?f`B{|{>->a73( delta 20620 zcma)k2Y6LQ^Y`7er{8n$IX8q}lF)l{=`E1ZI|*GtNI;NIf;6S&(nLT=2r#IW1gX*z z0vS4qfFLc2qAwyPASxh8f?YwrITt}h{68Phb0*}J-PxJh+1cOBCLyI$LSm=H(w^ZC zhq%k}_rHosHS4nB=`rgSbv~;}_r+ZqhH9~yf4}nNf8u6eQ+mF}*M#UYUt^*Re2s`E z_!<(O?Sw0uh*L_Z+<9!;@kv^5^V4p&?|4g4uKRWv) zqOE#={cB4mlz`L1`&xE=$Ppcyf4##g9i{P`4SPmufxF}^d|CS zPa@y-AabKSkZ&cHX|~g^vhRRNmomJR)s6ehVh@LlBXh<%nD(eLB7*bvn+IHXUb4 znT``BN)XK^T{;esDjjL0NynBVMBbmh)A{C3C&Qgiq2~m)4$>Q$*?4@u&{~rMM8~F= z;F`)C!Q#z=45rHr!cj|wWlTz?Pd7l`MP(LPWtEXwuuLez*+#fmLY<9ot`w$mwh8W) zQK#UvRl=K`ZHBxiYDqX!RcQy^LeyHAlpx_L^em1%ZnUft5DmaP&!G zk-xRQn10?>#oyXz{?_(E$X?fmr>zC!r3XS8|Ev4q+G!&Qy1gbXrB*xf%savjQ7R@n zE;*4@P=wnYXVP`(IgSrM&+(Cea_sM;3TIgm-`2H-+74A&@yEiE4pMtZA@)_PhAn~f zoE<|eUnrm<Ue~;TGF_2FTnjGR?|k&UD9Z2)qEv!7uV8atnnTn< zF52vWNY}^cNicq4aCi$3M6)vgk+D;d9wgSs##Q+#&Q3$Qsr)*uZ6-Ea@wz5r`C9y% zz|KHYKVvnfhVd~fD~V=fULZ&(skt18|6XqjG2AMSy_@mvoaI9FE}<8`6v02>EDxeH zg`!xpHNVZ-C(wMKSploG=a)G96xgeLB3!*}s_5&?Z>v%%(Q#{Ha{913xULs}S&+_A z^PfZdS#vBz-88%4k-oe&XaB>~O+Nx@SIw^Y&In#ckxGk>JF)(r?!=L1rO&9R%NW_jRrGJU6f(#< zE!2Q+C!B3z$z(o(U4i&~ArOAA%42ZK6uywNtB`%dXaNuMjjA|m8ehp-K6t7cjWIld z-&LeCG`nWn-2io?;)wZt1(z;SUtfXm9b+<1UBu^eb_3XDp){oUjN!IY2IH+nUW&7? z!P{7@3Mtii5O!L|_j2|Pc)k`|V%wGc5O;oCuYR4ddJXE;uh#$)+PR8jrB(b*m6gNo z>-h~qxwW%@SvY|Q$cnr&2GWcjd6VP|w)#o|xXV}~`4!#Sn+IH*b z{I817i{B##sA74N6Qus6)W`7G#dKR%w5&Ur0_-OiX!n!PA@{VP+AXRW+0WJGxy}+8 z#LPGR&o$fURJ41{<&g5d>A$H%-gN65$dwFZBPkpTz7zD!nxZO+73{9Pdt`st2mD=A zsKH#ASIQuT8RgruuB@Bg-i1SW^sD}7P0e&lzspr=R+X0hjm z`I6{XStT@MMe=VHVv(=2>WSo#NqDwHW~Cs0GHH%XnuL@4mEg8-mIjt11OqYtq1~`W z;`vt4?I&ekB(@2nC`pw`Y@KY&zAQk(2!j?H2P?5+ns{BRDmvCrCb!WXmRuIyP?CjXismR6?mtMkQ*oK=ADcZvOR&?0d?XBELy&TIjR$IS*fZnc;sK-9ZpYx-6+V95zF9zu_a z^=-B)f#-9hBX(UT?on73XmM1`hSN)E#V~h?mp$#1 zmaJM3y+UjQVQaH`PVR!hS`G&bp}K9t8z!QQprrP#c6SoCWVTQWg-4%&CkS7 z)cT8x)D|5ppQ@uX<|c}580`C>*p}7Jydaj8q%hI3F#5?SW$}&6;#&f11fG1c0|e)b zF6@^tZsDvkiZ{e_n&cH7ds{qty(CzzC~g|~y_m{a!^{Hlb5W`zI##vwzYx6JDhbsR zOcSdQw8}CZ^s|`4B--t;=CJcKt0e@NV%0FLnlx3w+rNt?8Eb)uYf3FS44=Rz!NEsj zI~IW<6WLV(R@aq=KwB;yVv)#dyZ>PLNRmW>wFGZ_cS#H$;m#NEp)SdcwSuHjbri-` zb|=zXF8i(4csRmtH|uxTe%n6U;NjNx?~mF_Ti{-CDUh{=wMC`sSi6Mu8E5SvzN}CJ z%aoCdX>wi3;oBenWI$taV^^s+gTx)4Vo<88wAHo|JIL<{k-4lG(yd#Zbpr1nVtZKp zhd3S*S27dN)|47>*7@nch@mj44QE~KG3`&z+EEdf+;k1W8R7030wj*47%;!3yPVBy zSBwmEA0Z#Okr#(xr#)pItQ$twbC;*Nzs!9K3R*}-)TqYZ`VGB}8-TBbyBLN4;ra>}1WE^m%=Xe;Nut@6Z$~^WfD~5Ic4$3LzfzAz z4V|9c^^f``CUu~PJt6*Ws~jYJBd*STTPiBRsZZ2d(7T7Uo%I4wF580JdrG}I>kT1; zq^l6KRFWWQnbZ-Q-;@;CdO;0?p!2LAu6{`xCa^vbe^?w23GXl`P97jF;;b($x}bLR zzXSA+j!7}nc!l+Y#cj=o*mSsblC%Dp+nd*97&b=wRA2*8jFTR5_A+?A6q*N5kiO!4 z;7}cW>-AC?JcWLB4GL?}U}%G34eB=VHmnPIqxC>I(#Y8bb~bgEBQrOP!|T%}CtP}4 z*Kq$dsRL&*P?##Zl&~45gUpWq?6~3fT%*LBqUanszFwYG(;Qz zQ`rWjt=r+?DU|v`#6`6lZcmlE3leQ`*@%qT5wirGw^5qT*hmyN+mafUoHw>4mfa?O zqp&gH{Xi}T1vjMr(DvDqH!m;f#6 z$R7Cqrt}8(I3b;pSQ89BD_vviYwwI|EIKm!+uV$Tw1d)ody0&sYXX${(rSQBa;1+s zn+VsktT%Dtd1(r#$$sUm)fQV^ma+v%``j9}B7~F?bzQ0sTfdb0vdOsfyi|)p+J~0g ze(RXbUI*_)c|5EX{(1cMOUG8Uy!EIuhStRQmzKg4@oU?+>g>S&St>5 zqf#B9(f5SJ!SYfp^PBXoz-B_;BRLcXxfKIjJdlnl%m>joq)L!eOD>AdMR~d^g^P}D z6JOB#5ZvyPNl^*Z;T(*wE-$1pu9DxussZwsjLn6RwKCa!p!}XDH7Cd0@C9wm!GYD} zBFq-@Y`W${_6;c%udb3CG8`EqUz4R4qGJb5&3}#E|7EHmy-A-fg!mx2EQZvS$!{!z z^ia7nTIJ=p7$$a*%agzRLn;r}Ecp*m8_NE0<8AN^c2|M$hVs!Bia7;`)t6TbY%#D} ztx` zEybJ%@(uxab(EtewhYrglOu_jxpFqj-Q|ajEr%qOyjZ`d9HUAtMaQAWFKFH%M=?;& zVNx=6vJ$TRAeDocYdvE;^I*_N@=*BV7pV#auXTIi>QN~Kn+=vvF!m1QttIt_qLla4 z8$o=u?G&zE^6v!(tpL|BSNXq?z zu~gVIO|FCytK?t~ONPjGR(R#Pne%0WHQq;Sul%Qg!V+3!*?I~=#8|nH0at=x4 zQnTBN$$3lNbd*UwCoYe}p<*4`u6X5#kutaccaDX(SH7W#GvX1^?Z zm|w<7GL|UnJs{5}%qaeU@)Ah=mHdU@>Vd3290whi*GnuNvlq#c0>tg6m2Bo3_Za(| zSD^F>`6k;1zQJ+{u)dWxVM3C8km1Zz@(D@mC^|A@|8rEqwkhm>Z+HjMfzMCOzfGZ^ zJ>oRF_8^Ow$C1|C$dzfRAIY!!_hgxH^;anzau3RDG5>;GL1B9dqLJUlHTm*T&h|m- zWO)#fg6hNQm9*bVxgi%SQfGqm#@L+o#M^h|O-woPZvRfAV~@Q__b)9C{^=kG!K{1o zbP0)%gFx0d3+ENc(-n3YWA2iKZG)UGz@9&7J{-aL8S)Z_N2ZWSVQd}w_HJdZNC8ZW zs0u+oD|r{*rkkmf|^{X zgfQ6IUu_4s!qpPcsfx0fz@~v~g_V%9K^X~qTd3`^Yc*w$K(JGnifS-ctf>%?cm}#u zRmVfsc4`i`@hV*uDN1xa46@me!2dN;s&eTg;w1;Ydz9Z9{u!=F0^v?O_bId$ickn@ z%7dMUlql@kTG>gs6Yk7bB!*fC<#&OAr?bbE7<{F(vX-;+C`Kt^suV3c{_GE_=}I&% z=&MZRHu%K;2ZgHEF(c+u3Qta0PiU-z@TNjTyO5DPBaCI7%M=+{LzExb7w8+P&|J7u zSrZt}9j44+HvTkNSpts+YURTtsTI#ioFB)NS3mH-emNulOh1MLCn_5Rb_K;L3WX9^A*ZF2V&!Sd zw>Iz;{X4;mr4y8!oLz(THmFVSr1&D zt_&8WuZgF-aIT+{fOB>$GdcSn#l5zO?m@4XN)T2!sN{220KM8OKj1G}iosbSH0-EU z#Hz=XFFCuvqN_qn*-7ObXFsgyu5`dIXOugt+>=DGpq*_NuR&s%AVJ)47J%>dRqFa- zjyu%t&yX@t-HJOeC_Op*1+(8(Xw9=O+Y{qg$X=uTvb;bwP`Rc&5ZG^+y-p!Wgl0rT z93-hL{E)@(kiAiv1ud#8?-2fEOW_a5{y-^?Wh<*bh7k$sdZPD~mt_im*Zic^W9q~G zdN0xOW65VY3u{I2Nx8<<(AJ-olD7Z)iLO7^e z$Rq0&f*+@(5a2T{M150W8XVcIdxJPAYP(4HYpSR-MB1#Bt*IVR zotbJMLUW70Kop7iOD$CuBpSG2pm&~HjbSaX`nkYdv|_7|aO-lR9D`9o%5uzXpmt$| zP9d&a*0J_Osb44&hbo$?})qTnK{{H5GQgp+@7Sfoc`TO8h-DfM!NLycVNQP^Fhd z$L)~k1cPKF1T;1prJj%||0I+~R@5EGF!!QD!z4RNgnHxD999NHRw;Q5KZ{pu3#=@J zq$r=@=M&UgoG|8)^@=X|xj^EgCu2bvvRR2|f9ne(TC3^MVym(dPtH_76WIV*Ge;e% zRy#7Fzvy@rZgVw+)?y)K_sD*P`@i%8Hh-}rYk_iTLixWozVDMg5&!iCv?{ynFd(Mm zZS7Wow7P1PZFkQq^{FH3Yrj(wBCjf=F)mR}=7eZvzoh>3tZo~xP){*d8PZzV4OLUh z!pAAX5Ik2+sUyI^_XQ22ZY$Lxp`v=iZmkMt$ExA%8O5t>)IS)(Uy=803rbPHQdo7` z^Qn&%0)vi)331DT8uTo{(Yqa zhChCxngVMGM-Gu=-hNlT#4zTH`aUC!EA^neFAm68HxaxA(Vx0$-+e=+eRmTSZ>r?D zo1%Ef{@Dy_4wgc&Qh|Dfvv3IiOx^VFZTw(7@srw2AZ#oCEg=+gBG?MpdC=V)mETly zyDcCr*(6`{K)tQX1O2NSp({Q}AajEAQS{mE4yFgX$(jm-Dq02>leJq+qTI01GQ&HZ zHgioijl!B%SXfCr&hTTG*2D(33ae>H{ko#A+dyG03gSphI(7}z_Hcr=3ccFVO(#ld zx-^J%6rPbjEX;4wk<@U9jEIq0G|4kmFGfUY_gHebN|Y{g2pz%9RL5sru2ext9yj(O z+*+!QwC{HUbH7@UQLx{l7-I8L=(e9ZGqT20piK`ugBP^Q$xRQZ!=Pqtw54{QvFPOBDu@SKYwbDfo*Z1`JYHz8Q5LpGa&TxqW1wrhU{z~kMKH4LhGWkO9AyAk`kzW4=+6LNprLhAzx1UA_*$%%C_9t!r;UaMp= zEg1TM_BOsYR7;due;8MkeZ8wFg?#zzJ;m9IV)`GpmpLy3W%^svz$xtm`z=`i_izPN3uNAV=0>%mYPzH0}*JiR2 zFsLZ|$sQlj_(o!!t|yW+EXnLljW7~IerA_2f3sGB;3nFLx+t}~jpWHjW8?%+5bfg2 zcy6O>m-e&7#zOp(fF)2c)Vc@->$GJMH%?20s7$Q~q-~OlLgF>;Etqvc^RaOdpQ+V( zdUq@Sd{A?70;qfy1d6b-G>Wj|A>>oNK13~)(vqX1RDv!D5c~eDrZZS`JfH<^NhgqN z>_^&i#>PYHRIL(ZnL@;#u7Zm)CY8x~M*PXhdK|)QkoTEZfIptmDB(B(y&r2i0%TPq zjBdwovVS>6)*c%1a3R!fy= zF5mY+WF=>R;19L7;+sdtkAN-@$%1CCsz01?rg1il;R0d7!c@8va&mIc!L?)Lg7e?h z%J>a?Y0(FGAW;9(KlOcBxJ@g<;FO^^hew;Wt(mgU1vYC>w7!#&YZ@Bl|HKFubO^IC zTGT~`s!RVvAkgdDL+yQr3(Dy8DLyNrpJ#J1MAHfJCrkRsZjb^ihcFLAT=vZ|iJou_ zF0Fqh63`W!t9QrV!TNU2-h$ZkdV84h61U*WG<_(y$`l*s}mBl6hdP8 z21u+SYLLI!i8!Kz{;t51QS7YG)#Nc`770CUg$%YuzB=1Gn(oXRYTtPSQUVCHPw1_8 z7MJe|97V{tP9AeHy|)6XL?(s9%y2%y77`#;$=LF)qSHp(A*{sc3%bnU&%0(F+JQMQ zV!|vM9wZ*p{oec?jJ~Ar6Y$V5y)9$!QX!8S4+&1A2Br+xhj8{DM%>V|sKnz#vo^#e z>Ne~r5E@n53W7m5^+0SGr=L*>c}h*8$npuB9dPUveK{wO7$43*gh$n#)A5S|`XPIp zA*7&pjZVS&KUkuqYbtox>8TL)t8PKoY*z@x6jGmwhe;)4?wi%{-etWs17h?GyOnjo zI`I1ND9U*icMR8W`kQ_qXCBu(3mCOn&#>Vs7R?7Bas9r+He&i+y&L6K1Wij$87*SW zyE+8`n=rjlR~bZYa;CwNbkhlIYB?1MuA=8-u;uLTH|@=k{*%7_u|^XP>JPB&I{h2Q zwtz=-g+l&s`s?^-EnOfuEBdc5KENcyh-P4Zr58fja86;<4ZQ)wy<7F#vNTq7d^^)t z>_&(vZX8U`3N8=hGW0}g0}X6Ddd5&z#5UnRn4PJ&WK`gkUeihPW<~-=%y*U%AZD$e z0*R*$55yhNlL@C+v;^8Zn6;wxm%r1$e%$dY+9;527)uqaEL=;4n_q!kNU@y zhUxX3Du09CTqMsLdqy9p?%&%s zPIMIdJ%~Si&e&6a97XvZC{^POAsFsMS_#8e>Jx1jw~emd{>T~AvYaUtozqjKr{(-w z+k+v~^s5~5zZR%e#35v2NP^yj{XL(o!FoSPk&KA{bA*(YbO?wcb99-*l>xM~JDjE8 zvv2N&xc%n#r)FJ|+c)<;9otcb9e~)bQpxAIqkw_lI|$iMXA4+U-Fd~f;j8|ehalUe zn{hK;Dn?z<(`eOL#r^xc!{D9mDuq;x_ATk~FE0ENK0@)f-B1JPIv|Vfj=`PDW*|4i zSr#JPMn#(hz>$S|B#;%?wfoM3?9$E_ds;cO6!F7XV(VdEFRBr-Q(ou%N<0dMd-Plw zTf?~&3+6d320Pk0yF=VAp+7_kMjIGzI^UyGuEKq~NigRV--P6wZZLKn3lI74PnIgK z2(TJJ;vl0a2G@7`>pg^zurS+x9Jfuc3UPnxUP!yHpLvmiKyWwRzv7?3!sGfynoW!K z-dL}kQ&q&*M8_|X8X-quLM7)}CVsrn91qb|oI9j!8sMqqYa@z7oM06|;!%n_X6_I| z8TP79#Ww`R(U8tyZcS%h8;Fbkp3?V+!kle6I}6eGP1@VkbJFhk9EI>g3`T9%hm+fT zT`CSinNGhQ; zWW#`jLwa8fjdR{(5YWw8NVs0=7iKCg47N|rjds=**k_P>*`$3&Pbcj&KF8d#dKiHj z)0`^9X8oMkB{mU)Vw@wz3x|75z_(+ZEkEbSIx%c`E=3NG67 zhw?MD-i?L0wZw5+1XW5#tkT_nWBt;ePXW&lDeb@5r&@30|0<;hYU)Cp%>%r$*WKZy-He$i>|46l~ytcb&6j zHVLn$ID@&APvgFYNzL`9ezSP}1p=Ms7x-;TYtyPUHbFoBoSkH_?;vCd)rpkf=Dfxk z)vW18IHhCF`+n&mNw2w}-1Ual2@CVu9JSMd%=jKy|wz(1gPLeSZ6!fn{*XIYCUm31i5&BSlh-~6oO_McW`F|k(QyD zImU9kkNc1mEM`GmkSh_ws`K&?_d36i!%vZuU_U@oMX@;~Z1TtuI?%1-pXFTweR|O~ z0MpJodkE}DOrLI1EMb>k0cF_F1$u`S< z(HU(O3J@fUb8KD<==#;Jmim|`MT&9LX0elBtiRbMSyXj(!}%#^zeDf|V=i2sZ%hQU zf~(Na2xYv*hB)iC)5i##jQmNb*}BNsN)=?Coy8%gohup=J`)<*d`@DwLxO*IJg=5V)!GYsn)MthY_!|8#>2}Wq^#Hpg=-ZtM(hTIg7RXZx2Foy*LiRS4$YHIIUaWYtBcTcv%96Rq%dIq2hsH zgZ8@`cyBo=3aw~R6sm*wuCo(%t7`1#%n9B?=NmYqrZHEsF~w18mE@?-Z82uGK~Zf& zA6EjjnB=1M*}s`FnlKf*=DHNpE_nk_^Mr(-@g zM&Y;!gEHVANLp;Pz*emdDiA1w-gk}Dt-T1R6`h>)gVRdK%$&S)6Aj z6}gq~Ym2`)6wa{A1qK*~D$Sr6suTDEjnT>ZMT$b&C8rGI=JN`ea*Ij|3DDyucXgaD zI=(LXf|r0^8U{OFHKOg(Iub|T1!V%J)ia{_3O8?Lvt1fv8(3>;1-L2{wN3I2ZRO4i z)9goOAU4xQDV;cDCue0bwz>UY@C~CBq>PuAVz)`gZbsN-aC_HWhF1@{>JX@@x!SPI zX$Aq*!7r2+spkf~+{{%0YR@)4V3{DU0*ShGy|Zyt~6F##l{^&$YY$Ln{VR%Z)ynyA48f$QBDcwlas%28q|+ z*U0CfJ?zB)P;X`OHJl3fc&I(MDn7Lhs@}_;?l#aoZ2ZVr801NwzYLaCa2hUG=3$U{ zO85k>R^cI!3$M-Y#?Q9oy}*`R%B*VPSM`gW`g-dtI;N z^pnOs&g!C1a?KPl>lBY5%WrLk+l|yipGJ3K=i5}>8P>(smt~%}&7uKh7h@ria3nxS zs$HhYBzThRw#`owJaN%zMzwX2mqFVNzd`0dFoHQ)Mfe-bXSmAQhiGX2P~0C;lPcyT zrtun(FixrrDQBGJfw*aoA6zqD5(r?*p26E;XoPi$VT$aEA)`LUSK53vf$UkF=4N$Q z0y+Kbu1YjLBpu7$cP^ql(RW5q))eyQD+?iinK21gyIk{d;ax*gn1D$?8e_RcXIXgj zdta<$Uq8Rf~pn$J!CD$Q=3J2LtYad3ncYQ*8yV|-8_a;jopm9)2!ofTJ ztq>rETtH_n7bsNw==jC?A0zNGdy;h7-`htgGk)^E;4Rw+93>7V}&S?VCLy`!gq{sXDvvD6AJ29yF+AfO3^)=f0 zha7`!y!41BB%Nfi>ld3acxkrl0~U*HlGK)A$GNUmilm5+?`FP0o3_=iVNiF8>x?vj zdVB>78oMkqrVsc_IA*D91(g-r;$6yc#d6mef$9oFz^Vih6^tG@ZKdl?PN-t^4WkJ| zQs!}i(B9~q24%LMsB#TfS?9XM*a-A=G>R}RzQI*ep@gY-o9i5xhESKIF+Ra~mpoeo zaXHk@aOJWw5I@IQiYs=z#&8?poo{^gOe{x1Ukg03n;m5q8RT5r#*aZz#@03X-S$9m*u|H5FT9`wOlEoK1%8cX&MtM)^w2z2u^; z=oCl_bk;&|zN?ffIjPd!>o1X|+TCH=8+%6jbW#x+W}p#;U2nP41?e^FaOyKF`n>j|Cl$i^5G+fYo$93+$iWGmwOa#fEeu=9?qFGTiH_5c3x1wd z9k&teuxWN`Q6C*J`0#O^DLor(PXPNw<{ZqGC7SJV^&eMTXZR=ZT+G$&yLNwQjd36K z-<=1!Zi$M=BxtA7hZzEFxnOfXg4v!K}Rn}xYKEbx?~@Z;BRAgTe=ImzbQZA zAK_9B1{FKHS7$bI4;Lj%bY!)8qBXnRnJ-yW!e@$(gY}=>_19th1Zg2XOnfHm8z)MM z1c#CcfC|oSNPs7Scd9!F%Z+psN=E(j$NbyE_bYfQcxSqEAT3a>{FoCYPOefd<3F2i zMEGHMH(`>??e-{|@9Cx`Z-xEwVf?VKJCfQZaLHX2YDY>_A*htQ7d{x^o}$>tGtU(L z2jf&=H({8&4Ab7(9P0Ckj@%(n9#^!*Mn#bPUG!S+94a5z?b8Vk{vLP(-N7KwaL3@B z(Qc|;Sp~7n-BijQ=k9GIyzb`ikMPtKcVipZ&Dq9E;N8YjV?t}DyQyv<1!61lVvu!_ z$`eT3gBZT$bHA=gbma1z$2H`(=75UZmqOD8?s?j}b(MW|>hsv+a|cfzCfe++rt5w1 zgwlDE(1)%(0me;rCjrTKuFdFrNUh)=gpV}anx0r)vfr9EKx!5HkxME?I*4<>O?eb| zKFpZyo(1N3_cHtQjhNyg_8_dYdj?D|A{lu19d|K-ZK6VX*$acZyWE7K(oxcmtK9n( zDrJvu>E7v|t=Hh|o^BuPtl*9Y>b)!M-sJAaKEUX!yINzMmp?oO&yRCHW?YIsyUw9oAkq|L<*X@VOeH*N=pA6% z?mF8|?m9g=q+B4lKDJa0KIYa`v6$${q2rxqdz^U2y?{$QsFB?$=DGtlu{hOJ+Ecp) zr1UmDIQk2BvLI#93y9(+Hzl+8V!}`ED-5o_V+KJ?f3pk4oo+8x-I`uZyYBA6sB$pj zH+LUM2p2Sb<%WALXZs=Hp}P*mePcC*wa49E@xV=YU7f7p-hH>lBs!4F4?%2>yEr5+ zrdTzx8JmbFesnkE>@bW8G_T_~zq-qEb_8~ww1xobu{`B0KdijKQO@mjFy6mYiNoW@*qbd?{Y_?!OK z@zS|I_g09w;?^+BGFx%scms&P?k)y9esOnsIzT7G^+nA=0%e!%v?zoPGDR#?!pu@x zDZCtPmgmw@YV~7?8f}JR-HK)|r*grNPu=#0+oTQmX~J^p#FBMgrAoIFCgmm4Voa}p zEI?!F`BY4^F)-9rWc#4!=}I=+mu$p=pQP&?q zur~pY&a>3T=eAJlH-yyDCRL`4HeEnM8I3r`6lnqkm^GoqTyqlSD^!0l?q_#(JUrK& zPB5d$(GI23*sCSY z-RK%@c92DaU>OoA*=Jt)mk?jUT!>3X zn-e&tjJ@+rS|G_1`{J~Cld7;TL+~GNO65#2tEp13=-Am1NR|WO_B2yhZ)}S91=-Vq zU}k@Bm28iGb%W@m!!xH`_M7wV{#C!|FVeGo@Li_brvk&Y><1U^LdCrO7FB)DF|TsM zB$KL6?X^L4~lR`wtmXhRy!|}T={V_(l(O-q&wK}wn<6Q zGkIn`0lv&It5O|d{2gbYo#07)3f(6{%3!@HY`JIlfw`AfcXu(hy8x0=a8^Pmoe>-Nl0D+W{uzx6i5V7J;9m}&4ZFufdVJ{ zgj0Q7cG8^1wEG9z_{!4;!}QBE$XNXgaNi^J^C`1H%wC1q|C#HkVllNXF9P4A834I+b;^ooO8*f1?g90nNE#LT^s20F)rJTXDEMVJ`~yS8~ao4HLiu; z*G~Tyr8v(dNxi3wuyrSWO`_dm1BUS}^b2AQ_p?U1-NEX@AnMg&F7fr%Soks9KN0aimnUt}| zEXr7T#qP{MG&&{yA z;mb6#${@XLEtg6xtmvzbYhSi#niNl}-UH2J!}nBqwtBHOm`P=* zql%DS$z2@7=2$k2b(kBtajEq(qf*Ay49XP{gYR>yUyLil7vSQR)N(osR2;i+5WS6}oeJ zHlyOBgBBGZg+bgX!jg?z(liMAT)Ki2v#rJU5!)oML96*O>n0cK1ShvER}1T$wDP#K zZo_(w>(#42gaB(uS{_gxwk%_#R(zta!WL((V*;IH6mzXHnoOI4-(u^7=WIYr`+VNx zLlj7-%$#h+m)0YxHVv*JL|SI((-3JJ7Q1ZSwa?n-w=;w7)%`Ty%eMmUV#LUAts@k3 zsly=dmemMjzqY74vk9bjQcFSpEq7=8_RDzUrnOzs=>YHLQS~3uKZx(ey|}Z0tXLvo zT?~iVk!r1sv_LwX?yo`1ET#|fPwnOqd!4rVUZVw07!5VOv+6LTL} zwAqbF&g({)^cz|Q>{8W}!IcJe>{cVe^CNo&hl`%~IBN;lqNIA*NcEiNjE0FLo*E*(FHLsHJwvzQBPvxQr*2v-aRKblNnI zx60dWEhE4Tvp>*iZx`{<@)wVY9g`y~RDQ}&rhUw|Fjboh1wUEsVb$J%cQ8isyf4r( z+h=&9!0$Ppx<1QOBhP(Ru0z!}E5k8+gr}*Xy+Vw&r7M~O7$fW%;bBTS&k)AC|BF!q zxjxY7Pt|nxROYPb^Gx>o7n8kgCVM~2WS?i59AFEs@3TzCcz#d`Qa(7s(@Kz{h`0V3 zzQ8$u>onG{(*Y2_G~gJnofB}9PVJ5NyvC@qFmj#e9FRH}W6VUm+kwxsNAT2(WEk@- zd$G^5=hrJ8J^x#;^F1`p>SOan&lIM=a;B`$K0N#nc~TXkI2632Jf|}f0x2=_q#)8x zOp3!GTk>qC+8=UbiL&S8$0Gn5!Fv1gtC0PQ)d>cMv;s^-go)D;x0iQ!yO%FiISZyf&vcY2rY$SNPkuP~tZd?(_Y|lbkdsYWy zw%F1c1xa~qf^EBW&gGNs9L7=5Bc}8|6wQN z{$(d|&l`07^U4_iVr9^uE&6+sO?avd6+7m7_SqQLGs-w`+e(AKY=!Cz#VP;6-|PS4 z?~UjAoBBL|(_YNq^k?~-@sz(OPGIIg`D^I3ix>KV3Tf+oiAkmrH-=#V-BbXI=Vx&+@hES-$*JfAzC`O$aDZkM{F*qD+LSx)M&SzxZd+Bqm^fY-%F(e8*fG0F21~gug(it#n?Ky_L>&7;uEba zT-_7U*q-3PaDRG$m-c~wQe}MF!hjz9eQ!0mwvql0QMug#U)or$xE_3yHHw>SdV1o_ z!~oh1Z-D5{p3C^P(fgHpy7d)>F2eBz_vr)RK4uu zwGwhQT?MMlrOkjt+(Fi4O#ou@5Z2!pa86)5v9{{@gxk`!H#}k*)*j&5N`HVYJD?{a uK0tMVrR-(X&n6}8gpUG5MQ%otevgigjPR_+u#Ewfm!A2G^``y(mj4HlJ7ALl