From 0e5ce8029da34055c0ce32c9ad2b0262e21f1e29 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 20 Dec 2019 12:33:17 +0000 Subject: [PATCH] Fix an assert() in btree.c that can fail if an INSERT is attempted on a corrupted database while in PRAGMA writable_schema=ON. FossilOrigin-Name: 07beb3629e648e7feae4e786191514339ac1d8f6ba5bb6e7cc8a04bc1f1cd6ab --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 4 +++- test/fuzzdata8.db | Bin 1501184 -> 1503232 bytes 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 1b00d4ecdb..348e689bf5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Continuation\sof\s[e2bddcd4c55ba3cb]:\sAdd\sanother\sspot\swhere\sit\sis\snecessary\nto\sabort\searly\sdue\sto\sprior\serrors\sin\ssqlite3WindowRewrite(). -D 2019-12-19T22:08:19.301 +C Fix\san\sassert()\sin\sbtree.c\sthat\scan\sfail\sif\san\sINSERT\sis\sattempted\son\na\scorrupted\sdatabase\swhile\sin\sPRAGMA\swritable_schema=ON. +D 2019-12-20T12:33:17.322 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -468,7 +468,7 @@ F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06 F src/backup.c f70077d40c08b7787bfe934e4d1da8030cb0cc57d46b345fba2294b7d1be23ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c d22498af716953400e314d2d98d1dac3ea5c3b01e0fd243ef9e9b132c74114ec +F src/btree.c 716fc9bd12eb7d35e3d66c5c2c81c37df3fdae49cd25bceaff4e7d702d513d80 F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484 F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437 F src/build.c 358e894867394839679982d2fe320fb44fd17c94a87feb898aa066c15a8066ea @@ -1017,7 +1017,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db e7a86fd83dda151d160445d542e32e5c6019c541b3a74c2a525b6ac640639711 -F test/fuzzdata8.db b45368bbe9f86d40d30603e8f780ac29807cbcc951a18d7a7fd9d0c0e904706e +F test/fuzzdata8.db d89020bec89dfe98562b15629be034015d12d5d4fc238384be25f2235bf5c985 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1852,7 +1852,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 3d4c0bf8904135fa68c75801bfa738715cacc3b19dc8ad6ef550b11798d4b121 -R 5ae11b0f596e58f50666a1f36d76218a +P cba2a2a44cdf138a629109bb0ad088ed4ef67fc66bed3e0373554681a39615d2 +R e3918c2a6ba03e1f611ead25e050c496 U drh -Z a0201de5777363689738ee935bfc3b28 +Z c83ab72a8d54d736b94a005afabccf03 diff --git a/manifest.uuid b/manifest.uuid index 3d142a4fef..61cfc90be4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cba2a2a44cdf138a629109bb0ad088ed4ef67fc66bed3e0373554681a39615d2 \ No newline at end of file +07beb3629e648e7feae4e786191514339ac1d8f6ba5bb6e7cc8a04bc1f1cd6ab \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index d0eed5dd43..98f9ec2d62 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8706,7 +8706,9 @@ int sqlite3BtreeInsert( } } - assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) ); + assert( pCur->eState==CURSOR_VALID + || (pCur->eState==CURSOR_INVALID && loc) + || CORRUPT_DB ); pPage = pCur->pPage; assert( pPage->intKey || pX->nKey>=0 ); diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 820ff08a281ea2c7f939c2debbcb520094c14c65..94e0e0bde209eec696534cbe8c0a79bbdb1e9bbc 100644 GIT binary patch delta 17527 zc-qB#30zdw`#0wf~cvvfZI>Yg{xLprXb4G zra_wf0%<B{Fd~V*Yq0%OL-MMrsK#zjT) zPimeQt3P1=qZvZu^cD*uJ>$kidpw?T3>{YTx^`LKZbfDV>9FEnxher_|>4~So zF*Nv36nBRHRdAicnREn^#?jO;(i2Bx>DoF?p)5N<=e8N=sh8pj93De-Byl3Ukd(Wu zahIgXzexJa@YuVD-)+FVhDQaqYZut7|G?w{gW&itf%aCh;c?;d;R)ehPp3{^PgsY* z)B#C7`X#x?WX#AIoiTmvs7Vv1&w$(Q{g*-WIRC~_6YIaBAx|LpfRrKbr2gIA52p0( zn=+(V{~lq1up=y>5v=>t-UNydnZw((o!udDU~=E&ZiC#j!{>w(&#`UXv)vC4Na^RE z5$PV%GkHKVozI5S&1#eMdfES(Hi3js8arxw=J>IbGdiX8?-1B+KyuQcWcQ$?u6>hf zY?};sx1Pz}`n2)7yODg})wNguqyfX+U6Th5NlxzX_WHni!$_q8$-Vk_PaX=JUbKhF ztx3y3$l4&e+}^k-_n@A1ZJZ~;o!oa|vO6j+J|QL{E`7+d=Log$E`Na%Xgk4tJ046!nMp8J)cKHk#pWKRTS0Yd_}? z6M4h$n2DNayLHOCr=Wy!@K}?#SqbKlO>OYl({U)U`y%4*lbz zSZ{P)Q$p+?7kQ)N>ss6iao##RL`QlfJqbjjxE^~35Ijh*dvr}U>QsXH_555tY_6zxtK;Lhw6 z1KJjUw>ny-=oS37__1&Ow&Z6gziNIX#Ly(aOW@t+pO{}WE)td>F!|@>x%**K1519u zp_L}XF8OWL@=L}IgE$}=uwtY=(wyl0#@llKG;Co&Q| zeS~HK-qePhnN*s z_=^qU!xzm>1HC>5G0{A2%A$lYNX!o?g$vUxGcbc$UK7~6keF+E0<&gWx-&dF z(z1f(FTcD+qR~h5OEz}IM1RX6ksZUt7cBGG&fK!s8Md}r&Pp;}aoh{a)_|>8($F$M zWbfyDlhUE$AZrL0W6c>*VHE-)^{A;BQX`pE@D#IPae{e0gW~U4Dx`zn1gegj-1WUc zy^Xox6HwaBG61)AG!GQ1W(0(S?E#?$TxnqmVjtk}L~{+pA6i*#0y_x@Szr!sOR#*( zF#UeZTE@zuXrp5&jtIAG5LpGJ9dtCo5Rc`O$SP5aw%iukDU{;*=Z6s9+Z>9mI$AD> z>@<{K78*c1e{*m6{WD_x+a=TekbaH%L;6i22 zh=B4DtN?awbaX~@vgJ2{odM4RJsvyuw0!Gta>#zhx1A`a49GdiOmKP<>kQw<=o+L9 zu=v9$yHmlS0hVu={2r$Ho z8p}^<)s!2%8f=1P+RpQ>S_t`5r`&>XE?6e=_Rqj(vefLX*=uL{r5g`H${A+aSvsvf zmuwbx=UCp7WT)i!X(rZc%pyS6r*?m= zc*+vNQ$WJ2w4fo>dr#_~D?&k42qK@FYR9pMAm?@UVcd1ha?4+CB>7c80Y<#CoV)V(;wDBz=y%F8G2o{++87PU z&x5(#KyvCjz178LzNo*p`l_EsbqOwO1S`~$!sia zcL|-q-9+gH*BUA^)YLEsJn_7_Egz-i=PmEPyS*@)L1};>VR5h$#PD!)#cehqt4 zyRJdrR&_YAUdn?3!3U=q%_P6u6L@rGD#SVHl^BDH!dp{0)=mO%qP>RLpuD{NBvh}X zT3z*_rKvC0SGaz|ed)?MUJk^DSo@PjXK;L|(iv|5VA-;JfFcU45vKK3c8ESDp-K}H z__d8OEme^i`VUin6-ck@UdmdA&yFXw5HU(QO}Q94Sh*o2 zCv-omd@ivN$Y`n#z=tL&+eGGu47b`7=7-95xNuAv3t3+&3HVEv5+JfrFit4nLu!ho zq5n)SwK*6SN=s}rTRA7P7MQ+TEhKrnm5Z=wfs(^oqUS9onqj=5yl-Nyp}MKM7?&(j zo)Fo6P&8ESfqj-LZ;2E$l_}N;DEvw9xZbQX$a&0cf?`=Jfx;ivrr33bQpQ*qgoeql zL$1XX099vI#0jgEmjre{N-rpj0!*P48#x2HSNMWOj4tyUZfaUMmNz{Pg}>_ou;4YN zuN?k{(+I(e*A%LueDl~2)0(Pjo=n)k7;g|8+*FakDo_iT1(Z$;P+4TNGLy} zp2eJ#q#NW0sJy<59!zVa?h)|78_I)>d7<)MJsWa{SleRZE+tcBk(lUFOGU`quD6Hu zPZcX46b030X9$dnR-G8PUpZlBF;IEj*{~jGFPw5%StYVq$lfHq1Gi_X^I&y>n1G`~ z)x`p55r^Jym8^SkEn+MlyjPVXNbRoLp|so<3hC!baBiS_5jwvr_Q28-<%}=b5TlTW zs`4dciJ%R(ML<=uItPEBqX+_zqX9mMNtid(n#RBuq1J-OBX{JsjAi)Nk4k%!++6be zY5{ledPvN)?uVT1Vk9iMt>no3u0wa!#+t_oJc@^4nV@#1-941dR>|u9tT~u?T5T#o z`gckpPl+K=Rp4v{#aEQc;C@Z-1X=sU#h99|9`d2< zfh9SrzX%~?)gSnIPb^uiwqh{xkQxZqvtj@&k5IGgaev0}eO=9$SSuLSP@Ni(_SS<& zOUbX+S4wBLIp^)DsJ#xQfBgE*Nu)oP$cRNp<=okj=zsK3k)mX zk-`~z#+sk?LF$X4$CQgARP~dZ@$-HddO{h~9LuNJrGGfh*uvoDcG9P#(@GX3CH4w^%s9j*q zEcHTt92W^Z$z(UFbH{`97D8#9EbiXZ@tKfh@Ze1yyI1-0&aaq9byv4$7Z7US> zWW+lvE#qhM0BG>$HY;u9rW{pQv00F@Q4GTLFKEWay~ovFGMf#Fd-Q#f)j`dzFUhHp zm?cv*J{3Tlt{bL?SXHUE5ZD|@Di<4Jj-+-GIMxk}Jq{V?^yV<-M-u$Mv-oqqbbbQ1 zzpM^`s@b&gq#RqykPtT&*jy+n6TL9+wz>$W98yjAc9ohevUyN)M6AGypJ`UX5nrkc zO*C&`ysWxK`9H)h2lJj)I{2bw&R@;D*=KnJLbuSGqEM6qu<#=_U8uM0PPP!rOj0m5 z|4FSD*&;}K$l3`K-_@`COo(K{&VqR{zv1ceaxh&*iqBn~>64K3h;Xk# zAk~ikvbDKcrj_XLQ+Zj=%C8ycUmpuVvG5vCtp#)}fg-1AFNDmLhQq6QstZC+S})^{ zAQR13=@r&hT*fo2@=T?W^_VRe++F1tAWN{%#qmMbml=B&@+4Dd+RD025V6@Fh`&#v zeK@4IwvWK#M%IA>dk#xhIcechkw)fsPcomzDeavrXseKCUCfy;g^Wyj2o85!%gu7Q zrAjswblB7K(1_x!-cU{gRvEml%!JHer(;sAmjzL0Tkxj(jX^6is!hV@UhH? zqCvLn98#dTJJEVXk}1M3C)MLR>sz)jqoV+fq2}he;~l9Vt-Z&ZTjPtptP{xqP*kgu zJNsJ6oiBj5g4VggsaD!fy$H3N<%ZaFko7B(y#!ars2+?SYJJdO_DFtTj)bBz)&s8Q z*jnLt>DD1EU@guh{rs*?%`X|(4VI0zwg`CTjrK-++UaF*Ks`aowBC|e5t!9=)2cnm zra(xN6arbvRyRI6#`=oL)_}L2_4WpFf>osbs@H3!-Si|Y?WPOC8)K#AY?hUlvqj)d zu=c@}8P;7QdkwsutdHaT+14k`Y#nGj0`JRD?fW36e`BTPan4#>4s?0PHkBLfbugAm zjiLCYb@-jo8H&xHvQ{&;9*h;zPgu3o_A5iTY!C3+cmt%nY>(m8rPh@q+X#7Qtu#sH zT4|EnjNUJ;?^A*5CbhzAfi{g5{A_6kp0&0LxVT#OEj+hCepWA4) z_{)*B6zk)20g?+=vi#ycO)bQz_>JBMtth?#@6Up_;7yYas>*1KN!Ppw+jm;ioPotT)>N@zmK4u%zJVFdov%^}?IF2%h@PO;s8^cHyLLi`U{A$C`>i`fwhJ@v z=hqcWn_ILME6SDlMF8g*du9`G}xBRb|15fv|sv1^N>F-!N?`H7SO)j z`Vo5z4^FTp3BII7O4=4a%kP1rC`rex>sH#O=WHQ2+WSfV7;(l*6?!jJkCP5ymdExu zgVo>Iy5Qqyti?HgZwFP7EKw5%zWj(H^C`d-jxp?IlYY=0HFuN%i-9rh2)N1RH zUADJOa*X6xqtz!>Q@%VsvM1i4DgXM+`sQbNIv=3pU0((vWzc0>R9o#oaeEzw%4V)R z27VvTFOxiw+g>^aeGblZ+MW{GaWv9w3j{3PEGJSRdz_s(llRdWOs%kE6KjQ@7i~k?Znuq` z{sELl()Kmyzd?bRzEq+GiTfSfw;Yd-M_b!EGIkOwZ__5k7j9KOZEg|lPe_l${Jyqe z&bS=X$n}u8Qu+)MN62j<=TUQOC~RnL4uq#OZf<8ACa?-9dqnPm5#i1Q3=0R?(kW;+ z%P(*Sl~6XCC)+F=Z5`9w+gri*6muX3ceXBNup`bkh@FDU{Q=KGRh4xXtR7~23ZF}` z$z~Rdd5N|uqI`mwe3T#ha%@4c%L(b-Bo#g#D7&E|o92$-rPBF3I{9qunHDO}K8D%{m9|q9nvW|cxHi?S0fBy) zbNlR$H-NnHFz$_=wdfHMC7nuL0y$=~wnQlPQ^8tyzD#knR^R2W$rQ-`IdQDo3 z8y4F}i0n%!)2zdgvUa`5zJfBBbpyC}I2B0Em%?~KZy~a;(O74_$*@bfld`w-H?}hz z&NrAn!xk*Uww<EmU^0uJH*M!2SSjs&>C@>kaAGZOtHerAgZTmTiMcen9g3VP?I(0(@rq zj*cH7eYn)=ujMukOUno=y8$^pD9`28 zhUB&*0=tcA(Y8od@3b{|-&NZ=M&3cKz^XHBP-|;sW*yP{lkKD^|KjH-iI{!D`Vv*D zAk!*{x^1gq5@c6cSG-wZpDZ#NvQJw-ziS~zE5eQVsmXpHVDaJ zq$UD*=GrZgGhAx+S5x!wk^CVeOKy!+9$sKvR#Uv7*(dnRR5EYI)YtNDw2`qNlm!}K zfzYR^j`eA3e@kQv7!6Ddkk%#h_>Q0Ij?u)_9ecL4?-Q97%I3(?;NC#VAJj16)hCZ$+e$m=<000%9s;tZ`f@D-m0=I3`4rvFG(y2=RIRz za4(b2oJj*T=JBq=r{o6U{@zpt?yIH%NGuMV$GaQWaRcJ!!EOWWZj+oO`MuwP7LHvw z@JtRbncu~g8W*{YL{ci^&%V(V=#q<$CRlORM2Vbb*c+kyP5Vxsn^IG(xXxR-Jhbnz zAM&*}gNmD`Uf|wu55rkw?9ZE72;RP8VnY4s&vz`lC-V*7YW?k@S2CjZH zrv#7^d?zop0q;?JIR@`0osi^F}a=guPq@@*dx#OOfDBx4Xe~+@6k$-?A?dSrlYc z+c)91{q~3W&0FiU_IL64VS5639INC+sea=w+`IVCqqO z9*}*X(Ny~=yj{zq>CZsP_eE1jD4Nc@ZkQS~9(&J&d!W4v=9k+Sg6(blN`6fz zEd1Ftipu{B_W3aHSCfKQzOV-gtTU8s^!LK3H8v|`9a7BL`)m6iGfTv@W%eDuM5~4` z3hf5$m}*Z0lHMP7eQ!@;Ntm|6E;9_cVgE&7T_J6~eKyYh$xbD-8{}2mYrrjP{`lK( z_NUCI-m>4)Py3O^o#9vJ!3lLZzC<)O* zF!82V${?{^n+v5OT2u4{Yrf@~)EBc4Yr6z|tGU*Pv3`))P#b~iEw!~G>knxSwf2zO zQ0s(K+i0}QPeJbz2UVkpV69z2ye6aU(S8?M8k98F9)+4nZ5WqoqE$cxl1VZe_+$*= z7-;u=Myp_$o2oVNO+Ev8YZSk#598u{(z+!`vvYZUfe@VK7Y%}<5G?{ejntagb&zTe z@med&K0Mx4OJHm;gf`GxayGPqNsregyn4UpU`QBaebOJo$~Iaf0jdhMxA3FhT6@NZ z)B#Ej*E$HWHB+M{O0f0-|E6(9-F@SR*5PxHcf99YZwy0ksz%C_{Y?D&`*`ESKI#0l z2zuu_TGm;Y82=~~j3JhEs_@?T&^A*0L0}`$Sm;>5c)Oj8Dr2j5IJR<5BRQv7F792Q zxJS@ChKnOp25=57dE+RK={`Pi4MX=+S{18@lg9hgv9eH81hh}nzGp0hvuwya+mdq} zftWkfkwvSIO05tw{-eFdMx!*F2TvxX_1D~-RdWttuMfbOIwR3}l}~9iZyZ}^6jJaT zAArvp8^`UE>67`Q&v1`I^-S`JeWs(vC+ut9I3D_zXhU&CuC_sB6R>)&BgCg$BM$Fy zL7^79fxeJB>5ep<_M(<2u*X3AO*_U#w|#SmBftl05|{7gpx*bLPsX%C+87ZC3g6yJ zQ@F~_IlgCT=RB>>DpMhJIK^kkb6PbNb7)!Hw0wbOLDKWuSZKCf`y2@z3M?B#gS9w@ z6h=pcf>IJ>FX9$Ee@;_z`(AA@W79c+7F>WL5ULM+8qdJc_q2nd>DPR1LjG%I6s>Jpv+4idN`&-mCr&eMGPAHmCQ4Bwv98nGuZakf?}Lf_R|M}FDd ze~R&Wbs0u_eC)INe4bEM_r@Q83??n8Pb`NoAU^U5&%wl{J}D)2QVd9RIlLJ2gLYD6 z3o)su4P3L}`@X%yA1tZ)u+iY%v!fgo#f&N(JzMZt^wiX}e7+!X~Bpdb4x(KDb`Pz~ULP-n?(mt%zhqT8W! zMCZ8~Rk5I@Bbu|U_62EADDL72z;VHj)r>6#twu|O)Gk^wy1&-OGhRw!_}J$BTNrn* z?;)G?JchP&P^9p1;H@rS>oN|l!JSCqk0Pbzpna`PuF6CNxq-fC@%Y*IDYptO)+Od->Tmat9*%W% z;WyMtcmmffz!xxkeUS1odx?V*>rYh&N-Gn*k(f7EOA+tUj(@wKk6Fbzg>p5{`M?%n zEwhBJN-KCDhpJA>5e zG;2^E1pR}mQH;G*r)<-qj;}=a@;zbm3Ks3rREAoH4 z7y=bzg#a8=;doVKdm!f(1OC0@i-)TowAnS+ME>JwlZxZ|ckg?Cv0CG3e zmMM2An~6uO934e=VAW*(GyL+BqnXIwh8mCChA?l-rmvxn@D;S2E~1KuTKvkJqFcV zXc0P_=w_3gD*3(NiX;A%KR=U>((wV5m|PEF=a%{rk(~r4xI7r$MlTmxIb^?Yc4EVD z{X3CW3W#IJXrGE5y!cXfN#g^f&QOw$TkM?EGUZi?*fHg z^;Z0j$A#A=W1!@BT&LSla&r7} z{O#VPZOSKLJ*Qv40}}}5MaVd$zs7Dr(HoKuSJ&zeiYTQc$D1ue)^5o+Bi@9P@0GTY z{+T`)7a!9Xi0nsXf;E7FeW9|1)}eYfLsPkaOJYB--=I)=cupD0UwU*w;yyhW3cpe$ z*zz)sCZld*>=(#hrnn(@D{YK&wkSEiR}rB2adibea!`Mbo4XZMe4y;&h;Oi8|7zN` ztRCY;UxNIGIkieYgH9Xt865LqB&2H@yM^WN>0Yw!2C*roeW}NqWBD zIQr9G+MbkjEV?J<5*OFul={(t(+pih3&i79bmfq{ayy z@pP6m!pxdO;S%vXyf)j}B0wG^`Mo}Y7`DU?3!Q^mK+EN`jZE^-Ox^|u7CF1hp@g;- zG(93U$JUFT=gs`>-Y(AJIBKbL9e=wwRJRVr^sUY{3<{aaj@IqY>kQJPB#9d^42)TF zIC@q(KNQ*hSl!+pLV4O*dK;@>bT$`QTgV9nb2O7%lZ^IImThl!dw>F^p^!S$P+BN>Z;qT99+ z9NStELXX*=!)3+JnIiK-m-fzxx;LLH(xghXzv*0RW{<+^{p6^qZ6l0vs2p&9FUakP zdo-|S<}fG?a!tp=QfH>f-{yVV90AMcGMduN<`5im*tu1tWtm~W^EAIT zT=^Bj@EoCOG*>kb#$_j*GtDdk-hY+FV8UtVagjX$Sx>VDpt#I)DVog}aONk@WdiE} zdGoBag!t6?wJ3CS=l2M1hmlpzO3~6OE;=DPIwsTO^+4XXp!;D{F?*~a*zyW?`NDZv zV4YF=+BrGEG+y%iIU@$NFM_&4>NnW}GFs6ca(1RIq(#M)mabjC+i$_D8&Yk`Iy~0Kwb-9c z#C~4a8-n~GaZ1ZKoR8q>XjhTQ27obC=>_gt&gLA}N|6o3vYQs#$RxU4zKx7LC_kx1 z>v}x9MK%~}uUMXd8r9VkUa1Ir5!0Kw)(Y&QyD<&<8>XRmV@h>h_cuKz`x!5E!ZO3v zK?vZtbyMjW4kgcup1X{Pg|V(o#zy=N=tv--pWyj1uGS)ZwAAT3HKYWZi4(UVH>;Ca4x>%(+r8A-sqam0;im4W=y`syz_G;{$8J)1!c`#8zHsI6au-yuJ`IR0McL`@6Lv@@yBq0Z(@qK;d4?Sp4yTOA*)%(Bi0& z{P`2WmO$!#0L5ciB&L^ft!F~s6*hzG_%Op$M_gWk&4RSn$}A{s=b8i*!GmDAt~fC< zjAD5A3706b+5ZwJbN&`5kKY^6Pu%N_x&Q2pd3QTwe!VmNvG>=mJtA9hw=#rlF)#QRT<|wsFWigk#d~qR^v}3nz8lvof6M&U zf6M%7e`NkD5>oiDCB5kHCH=L(mGrg$T+-LwUD98_8{hiB*=@t!_?8CM_?xElbWf^F zcgvW#Xkz#(9huz`I~a#7v`p{r z8iWfr2GLG@2c(s{&f~e$K_UFcl3a{whh38yKK4n_a-X+K>eaXp`|Jwp8bEo!>_AYq zz~7>jcjbFsr|S*8iTNDQe=+$WANwYReq?q2QE97=1ho*@ZY*)ScKcBG5*R||QKi{E zNcqDL`7J0?T{D0{9>AE&ppydIgYDg}QzExB-)_l!vHc9!7KS@M2^u7@eV~msH?D_y ifT3_9NHUvdlFeUk1!VKp=y^Nn1cL?Rolo=eJO3Blj_;`F&bkhG8%0M z8P)C1j5_U(VPWDey91*?+wB=Gx7#sVX18VZ3p;_)61z2{AK0xJecNuq=oUM`=qq+S zql@jPjJ{+yVRWv252G{f#*9w18!ZEX7(wd~rAy6hT^Dt7g- zFySY=8l&IYUPiyNEk;k){PSCL(_KFaR`97F#LR$J2SErng^ zw7p=gAHo^a<7}MW9voi?cvMjW6kMWQhwQ!$YH?$qLzk{RzWq#tdP4S;$v5%4Z|I0;iGP9mZ=;U;p^>*7e_$0 zfA$fI&ryy6e3R{KNc7G!rMn2(CL&zS_QjXt(W{Chd)x5OXiuI(4%sV( zeK8u7Pbnkmt zRL40-pcb{uR}PAftB)iE{G;*dZsDy%+U z@!_D$%FFb`ZY9$J;G5 zno%439EMGFxKwE)!Y|o*{n}863(7|#{F+^qR)gwXRK6DBH(In?Nf&6^HD#d;H>pe$ zY6_J0kU9o%?$63>LHGkl2H+>IEi!G#Q`*C7CSY-E2WL7BvGZN6 zceYaxiU5?j#2W*c+0lE6G>3Xa29dIUiku)|(k#yiEX#pX)D8Rx9L8AOP zH413oJ*v;?sLm! zfr;wl^kjFnNw`#73i}=_WTiW<9K})=lGO(yYQ6us&8ony$9RB^=G;BYTiZ3Iu(zgg zyq!XL4K}>gr-ix=u)J2}KrFr*S)1M&r+&$6ff%*3LbU)7rl_6q*6+%uT|-q-fM`k{ zpl%aG8e*v_wBxr{qvXM=1QedC{w6?mDoa*Z1I<`Q)U0Zzu9iQO`?I8&m6R{pg{o>K2iOeQG1EJI;=k4Ln<{j={9+YCHP%DK$cb z7_^V6KVVW{$)xaET&fT4lWKixl%akpLM)}cq2)4p@2ThT*%#Cds7wArwG~j?7u7=! zsE=j!wYfAeQ=K6~1I$a&x>2ts>RTejVaXsperc|!<64&nm@&cWzsfL-R#!I`{oRa<8Zh`i^tv&z{k0nQ}bj%p3H=*2j)zKoA zgzN1DGUlth08=igI)5gBWiC$)j_jy;sLek0uoKHNofa0>H5^q)d(h;=>QWKYHb{H% z)@*GSuE-JF(a6TyT!HgwO@Z&#w7YOU3y^?;8)_aV_0|k5JmHGPl&`JknCaHeVdqt1 zH!9q%9uI|D8#J$qQ!#hGmP=dTRWF9PwnejoMV9{$9z}(Q)QQdojkkO zLt|zisAo{{v{p;NlpoYw%#3lFnC8;5;eHGb(R0!Ds@f8RpNcV9y3$h}^M6t&p>Lzr z3De#Y=Tg!*ZEpx&S1OpNg^L(7N&At1et-%VXbk|zAJQUGKP5)sqBdH374ENq4%O7M zC6)&xecF`pzHdEX*OS63D$7WnSS==^`_8&{T`BBR4`N!y3K)!1edxcUPUDq>HRNIs z%u}ptSUf{(N`H)U3P8mlNKJwKW1RCtn0iudv3gEq*5oBBOzcIm$JG9CJFSde>QKxb zq6hy;%K(3@H^rV*9U`86idFdcJlb_W*$30MT3f1OyS~ULAFR@Euah;RsR_>Nl<(1V zAq1Wn_HjOx1pZuqv{#5JXnbwW zz8&MpV*F+m_KZY(Zm#P^06TDt~f z(G;x<-8VohbiyDk+9J-RjN#g|A`Hfg2(1_w<%l{jkCQ1WRogDW5US8Lmrzx{o}@)% zwW$C@S>G0#pW>{a* zfjFEhs%xiMf_v3LbDNB&S<#SBv$O!51)>wxanS_M2td7oH$P#K%WZ)hzA7>{`+7Tc|?*Vt}l z0?QNC4-_nBg^4jh83A*WYePFYnME7v(Wb^khu+F!v1miG}ClzHV-( zRv|x4;i**@LLO%;km#q3RP7>*^O{m*&Ka#IzbB2SoBM9P^8ZPPX8f6SOpcM7aBYr> z@Ho%075MGf+G5-<>%UX{L5+3rPw)VUrY+$*+r&*isx5`7n7Uq!qLiy_#ih4D)q2SA zBnFGDcQEZfEwid7Ct)y6X3_Y31lw@^6D1B>&$`{!%ENr{mVuT0bm(3S?qAwg8Aht|h?JSWv{4w^>g8S)6=GbI^MiwXPz} zz=Hi^F%^S0j~VBh_KX7>)43ltpD0gb+-6hOVzomkOs4W7{V|2FENR*0W5cUr0a+}(&Qog^8_#2&$MH7C zOp}J;s#i2G#vIqL(6%TCTdz`1>Pxwd7nWu@3Nh^oS0?)Im6u^!q%o7m)zM!An1@-C zqcdh4@H#O5O(T;2c#>_wF{QaNobqG!{sO#61uHzP@hBd`tnZuXJVuifJd4>b;T3%@ zXFeZON6Uj~SR?(YQ*I)KUHcbDJeZWOo(chDF358^)aTfEnNrtyK4#hRqkfSi>=iQV zLbT(hrsQv{e^h{^n2FS$39vVyAQhgI(Os*D< zxv#mBF{7Q-mgAZcVwr_`!(HEVNRi^M?)rX7ZYqUcNvy(kD%1imU}Fi|gPnD0+Xqq~ z)_0F_#?dRu`gj4BV%{%W9jZHkyE6v^#Uk5D4c6IC3bA6NT#afC*S{5E8D5>J`KeWk z{y@0QD#kY>Fs}%@;k9|L26TCxJ_sW6Xqw$z3cEffyI|~nxNy8)FXGiVo7*hqE~Iim z-BFmJ-;}c%nAa*-RilSX#h64X2GjcJK6-SbzFdUm7-+5ES|_IKBCNnbJDqK$r|N7Y zy%GbRbk@y2rL%5!6$TRZUetG{zC(mu40P3>rr8<#b53|2&25nlvy*y1Kq(bE>y9%v zxiYZJLDv*+u+?ZUlxkr9aedhB&>2j17wTmIYtUXS{hLacxPAljX+}iI#&2LsZPx^v zvP54Z!dlGwN@r`-GM%ka>nU(eKg0^ueNqFu?sl1w18QybZ*mpmxfOD#^W1Y{;8@4jDNwL{h-}b@>-A0|Y(n!XnK@@O zcg|+4Sm}9zUdq>%aG5m?-}VZ*fS3!GKz4qwS_)&d_068PUkdvg1HTA?oShCAmKH%c zchkqX^&LG~UdL|Qh9$Kkr&9hrJxR=YQfkX_=2PlDo>i=bc9Xn3L=UrWG$767mkKa7 z(nz8K`}A!hyh*7o_KY<@!j9Cp$B>8?Z}l(fW>wqD5cgn2C`i_(78*#S2%qXaMcj# z`Uc$(xaBwfA$T8?JL&T{q!PgE4#%@p`iEW*pb(Q2^(9rfo@YTaO3tLKf-4H3h|=qG z(S6k@O!`hAv@6{8mV+wgWvoi!cI>eO8dl>$r7cP zBLf#THJ-qOOQgY0zu(X9IDnt1#&nuh%k{hnACW!8HAkSrjdGAhb6Za*&g5gVN3dDk zwgDQDKhHH7b~SP_&mY2~77&XW=b|DhWr4)H65m1BC633U1I=9>0S;q{(}=H(xzZ$; zPefye^fb;M;HtwJe}c)({}@~%eTBi{audvW)ES4lKD{n7Je_G{Yu69~j$qNlayN=^ z<=F$2JJglJB6p*_j59cjMWcAe&33WBg7WyijjkQ3+iV9I@xhNt_>J}jQj7LYm%q%*g5 z3fVZcP8`FmMN$Kt676Vw+vLPdz7~i@(YvA8{v5Nir71XPhNKYF_c;-cW5ok}e_|MiJG$^`o6=|A%D`IL<>De;wB-Ras?msfr)n* z&!`T(KE-Jw13i>;E4}RvWZpPQitR$D%qr2(N)=p$@UPx}$ZjKr{e*chM^xqoztAw$ zZl7Y~Jm$SFt)_JgT*F1UfJN2yA;eO5tq5OZQEh!4`pBbVQnu8XSM_=#d_(qT{RU8% zRvwnZohw|&Ih=1PeWt69h+E!q^~Wx!Trcs-i&)fHwx&3dS8m9~Ksn#JCJFEx#*(K22LGk^rZg5`QKq- z5>Wav{Z&?|q8v-HrPC+|0n<8JJccXVT{EnH8hb)zAGM5)Qr9H3`S zBST;59KjlLforRclnh`?ZeR>VO->1Lg(Jj@%*xHd^Oqpt!Sp2A3 zgSve0D7ww;d)PJ8D3j$xDeSG-KY^Xf^G~Y9Ml2QO7+rvvDGHc|-#b*!xGojF%4V^+ zQ{+$dTLWhk!1^nV6}uJ~<0Sb$DXg&Tf7#XNTGwA$&AwL(d$;wUgxG@YV;39z=e^WL zP$}(-BU211!8TV0-_A>M7&vMir8@61oruX7q00Cn2RFpPXU0*?9~>E1iG&!Eb22pk zGuyTTrK~kp1Kh*;u?~B^!4|3}{NeZLgUv>w2u(3?!f1re8#`xU%w%IA{hn_;<&?Wh zVTZkc0zL$2>f1&wh-kh(-o9T7D;`~?EjL>uHsUGph;dXz=DlVj`;2g2jz!0(MheX> zH0Fp9z|`-I4YXyS@sJZ*qQ2PpkPaR;+KJE#Q#UBp=xVI99nioMW2*qIG4*9B3JdE* z8eGSbKreo7On1uN*zToQ6*Oef7GsCA#`6(vUXQaMkizyQ|LI~TN7sUlwrDOp_H*wlVy|C`X@S zhSTqo`MlH7Lk?STx(`#hGk&O=vm&}~@!8#_uv1-c`|g@%ngVp%Wted==l|=01v{?$ z|LTDS%55MM6(-@s+PhoVnJ(WMq};KjMlJI8MW+@j2iZEMkRX~v)J$UU`DUm zgBbm0jy;h5`qCc2=y5xl(Goj}(U0xEjPA1^Wb}Qz52J6{y%~Me?#1XfyCG`PIp$Pk?3H}%83hGsmT zZg1ADyueheM%SCM?4yG{&2|9&F*e4m&)Kl;OG?m`=voWY4a6`egftvLC4RHIfTior zx9IbJW^;gnT(p;xTA3XL+&sZ#4N9EZp8sWXM)!xFd#DnhFU|dNsM{Dsfx#wIp4rdA z?{CN_2ZyBdk9pX0nY(_abs6KILpl!OvK1iL81qK~hLSzsJqP$b2A9JY&~4%F%{h;l z?YWo_Lt=(gU?La8EEvK0*5{KWIF^R|nUz4kg=Q&K!AR!UAEuJ^rYex}wD|+TNDitR zzu1KN#2rbQv)pN{=lH_R#nd_G>yScH2KQSkCO>5QIIFrGz}q1JqbiNVK9`1+b@Iv4 zmBwI-eHQ|79^esfkI^BSuY?RX2FqqKPZ+b@e`!_VGK$QSvf(ZKlvTcQQSmXJ!fT7@Cs%BQCrNF$+bAIk{#m|LEbc4uxP&pyc7^ zBO)>|d|N9`xfl0HfQpz0)iO)mAXH#%VNXqU?DRVGb+Z~|R zzne!y$e_d|_xmA{?vSqh4x5YgVM+t{O^TJ>UkUIGpNXR2%kDyf`~kM$=17%^7P9b1 zA!KtYInAuaqQP>Xhvzt!1{_Q0P$;~@?|43BojXE-#p%hAt6xC#Br5?t8Y<11UfaD` zfO+UYVJ`SjxeS#qe`9lQNUaw+BtI8W7K+>MnBUDEL1W|GD*#2G+p0vzuAc;6Ra$fP z>hixDbAQi~g}qpIF>j0E=+zQZo(_eWW4UKM*BLu zyYTnwOn5sEI3g4}Z->;(qV!BROR@iI*k4-QF3^G!OU=IGU25^a?%~g5b55~bjW0uB zmr%(HGd{E+)TX36^%F9Hia!0dqQxQ^V@6j z+t2ft@9aZ+j_shpVe_|((n?BPZuSa=S^@vOii)0QEbdBTUWK0!AQy{fvpO6+W$vUQ zwtJ%hc~~;SJju--`Z8O3otv=w?da-9N%NWAP@L;FE0+ykc$$R3t>Ji@b8tsO&%SZj z3ca>6>N7q!8&R)iEYx5f#sE%Zo?nmo9o>7m88a&L;!1{lGA(=EJpo_? zrJgodu_E5s9KrA1$VD{aaJ5jV+)o*s+|Np|83VnoX&65O5@=h#dw>XAD3E0FR~b9q zlLXj`Mg1%<>fd>s@6t<}YmU*nc zH1QL6wjk%Ti#tdvcC&SCCuMx+J_~s6Wh(|#`dWQ3W4k+mz8O}4@{haw1MI?#tL{Nq zJVuD1M^3s|i9nc9;ckIx4sRP=wcGt5y>r^#G7@^z^>0`}$=ezGw=s3EI~p@LLL1B+ z4AbbqMR!LL-oZ)X)>rh+6?bhB-o~DH-#RqaK9nI9xS-!?z^;x zqEX6^Zq`w~hlQo#ape2M&B|xm&+duzpoHVAOX{lyQ6UHWp|${Em@nfCc+xY&ju$y<7C0ET7}{8Af548 zbw#<5G5ipdQmlAtS zRGH~n^3=1O4!N%scBlbIe42lmChceA5Ekg(_SCtlwO@q82$5btwenj>Mfe2M4>>(l zt(A3Igd^E`Q5HqFwXTS86z7CnQFybpH4y#r5eCiaXw4O&7|UlmdQhLBWkf;}J>1jE z1LYtS@fo*A>o%B|V%5X^6iY*9kBLO7mc(|74y!3vn{GXcrA~0*luPb==)LJyWyL;5 zdB@#sJ6Zavr#WuD>TX;a3ct;?4gwZ`;g*q^t1Z4WE_9$n`kX4pSxM|lAE%7xG;0TG z4_Q4NGHWW1#PcYeM~$aivjt3RX4OQ0OC=slEw6;zMp{Yor;Nc#Opmr+qD3jzR1vHT!-VOG%GT^Y+btDpXWke+wd-! z+tX^mUwxc@L$doxVF$G;`QahkpJ3w*mZgAqX}M+a`BVHAbjc}?kLo{VofF|4X4Ph9 zN}FkAi%^PLu`KP5JZ7cS{0wWl6TadPGxyA6?uj_>_a}tDr^c-6R*-rxu*eBtWAaLe z7dxjrrqkjjR&<0kPzu}d->=g&y1c^j2=WC6*LH1w>s8tCwTtCfIX zuCp4!B}@+f{6ACkg;c7^5!yk~6!`CA6J90LVnBFB3QDCPs}0zd`jZIoD~1O;gz4%sYuIQ};L zlyBlr^$XO`Ti@S?i45jBOg&`14nJVto05gsHd$^KP-;hxH(kWET~cUW{1FR&Q=4GQ zC2JtfEw<)}@Do9#9sy{~SLd<5)Jg|(oUm?6@blVjDk~4!>R^5V(u={pRwm|NS0&uE znmx^ox&h$dn4Y8hFmtmsfE7D6BXleQ^PkZc(F4F=&)%!x#d9hbX`<00nq+4kJ;9=sNzG*1%HNr zm%;gW)-qtlK`RYAZnE}Osj`4CiL!tdN33Li2*>wlb#iYY{rtIQf@5uRp<5^yAIfyB+qB|D3)};D(qe-((ye zY*+5N<%Do7>*Qrs&gZ$}gh&c3mpjAXAJQm}mrRaD;V<2P-_^_`@>kiRckVHp^bS-v z;3*S8qx4e!;NKm2SPFvPiefvu7K+&SRe2KU<-+uf`bU`3MXG^E_e8{y+{v@S3BzgI z{hlOIjbOL9+a$CMv}oHFgYO9q$lu*_D;!3WKiR_)qx$-K_QP1(&of^3WHqoyVBh|p ze8pr>c>@7|p!HZhTf@_eIuG!$LLWuaU=Le@qe&Xhe^(DW`A zcqjNUcb<5eu4j1aMaZM2us0rK-0D+@`JRCgQFqZ(_9*6@X?za%yyUr8j$u&iVXggA zU5Z=aIpgHVe7kvu(a0s9HT;-wY)ySIrR?ym1k448LHaJw_kbxaC5cZs4T&VVM*FqdXLKTJaq+VjOoLqmoWDuR~wwOTrR)EuUd}hMcTI3GuRRSh!l3Y zQ|omCCQjD|@lz*kbGc%xXB5cwnT)1bG~I|M{~8bfig=~0(%LsYBLJFVp3@l4v9WHU zIi}5!=F`HrJkvyo$1Vw;_{u|2#mQ0$8GAenoG=zw>|=fkY#DBkA$7m!2SIMa__si) z?QD#Nb-Yhd?nj={A{M{k^y8wLz?L(oGlm8o_G}iR71=LZ^?|QqPKqz_9OEyDOTJ~o z{QKDwnyEPl(!yh&X-?Jv9a;sgsoiPMK@r+w+6xeks@FLaV~#k_(zG(qLIK)g)^j@R zA1-(fQ}@U zdnQFV9+kp=No|eh)u?+h={sivW<*4Iaoc|9?>WDDZpjHuvo4q@S@Bgp*=CBm>AA{Z z=$3Y{e7v1FwDY>x!{6#AI=$~>MzS&%(;~cWDOL8qF2KE*w0Zjb^#?h3Z zH%oMmN@&NXx?$>ph}xL)fp;4f*YdU$p?h{o-+I{mh*FRGboXu-oe3?t7Cq23ghyyx zeeY``^u)5Z&Q{d6k@t`Yz0h~a(;1Vxv8J(aQ}2$@Yq&Vghe^@u8v4lZof{61QJ;3+ zHwF2A#;I?%?Rl6+b@b+mkc4)M+5>&FJ#{&(B_bqK(H{!i%mizDLz@}7Uv^@>xGFrm zMCgwdKPfY?-0SU*%TGqVLMaWrs|6TvC#Hda!Sv9bm@PMPeQ?Mw_(+e~1^JZZ11Mg8D zoTEbVkcP&lsB&y}M5)h}2_3(e(=oQ5Hx}y}gLJA1Gt!=lxz)fXC5n@-f%?3Cy|*Q@M^qfj<4j8xUYBCO21~#N5{2iO3>&04}PjdMFrR zF}&-TSCrt%e~6QR{UuJGx;vn!-|dX2|K1rh?sUe?DrbaK&vNf>5oX=#j30TdO#V-- zOk+Ya{sEu;7ktm$jqlmJ@y-2ve9zs9@Ad_eC0ou^i_W?>A8O?>3M%&(qF%`q_4gc*P6dr?TtHeEr}`*cRbG1J+U&~ zl}FmNVhmTXv7QQkjNA{z^fm-cN&x;^R^EUx+mpy)))nZ{wNc9fHe%TUB_=0MeGt!m z9@UORMWDA!q5^E&SwrZI`J1Bpi<<(CF*%yGMIqo=JVFh}U?-LTkA}P%?L!J{(tCRc z(471zwhiBc$sc*o(3hv9V)(lyc`GF!_D%wtP!_c)