From fe360406226407cf7e96927754ae9c9e143a55e1 Mon Sep 17 00:00:00 2001 From: Dongyang Li Date: Wed, 9 Apr 2025 22:38:36 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"[enhancement](hive)Initial=20support?= =?UTF-8?q?=20for=20Hive=20org.openx.data.jsonserde.=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 30d14b66231df36ee19e9d28713f88721235d8a9. --- .../vec/exec/format/json/new_json_reader.cpp | 33 +------ be/src/vec/exec/format/json/new_json_reader.h | 8 +- .../scripts/auxlib/json-serde-1.3.9.tar.gz | Bin 78992 -> 0 bytes .../create_preinstalled_scripts/run76.hql | 56 ------------ .../hive/scripts/hive-metastore.sh | 11 --- .../json/openx_json/json_data_arrays_tb/1 | 2 - .../json/openx_json/json_one_column_table/1 | 5 -- .../json/openx_json/json_table/1 | 2 - .../json/openx_json/json_table/2 | 11 --- .../json/openx_json/scalar_to_array_tb/1 | 1 - .../datasource/hive/HMSExternalTable.java | 8 -- .../hive/HiveMetaStoreClientHelper.java | 1 - .../doris/datasource/hive/HiveProperties.java | 12 --- .../datasource/hive/source/HiveScanNode.java | 48 +--------- .../org/apache/doris/qe/SessionVariable.java | 21 ----- gensrc/thrift/PlanNodes.thrift | 3 - .../hive/test_hive_openx_json.out | 25 ------ .../hive/test_hive_openx_json.groovy | 84 ------------------ 18 files changed, 9 insertions(+), 322 deletions(-) delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/auxlib/json-serde-1.3.9.tar.gz delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/create_preinstalled_scripts/run76.hql delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_data_arrays_tb/1 delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_one_column_table/1 delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/1 delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/2 delete mode 100644 docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/scalar_to_array_tb/1 delete mode 100644 regression-test/data/external_table_p0/hive/test_hive_openx_json.out delete mode 100644 regression-test/suites/external_table_p0/hive/test_hive_openx_json.groovy diff --git a/be/src/vec/exec/format/json/new_json_reader.cpp b/be/src/vec/exec/format/json/new_json_reader.cpp index a125654eadaecd..5820174e7fa061 100644 --- a/be/src/vec/exec/format/json/new_json_reader.cpp +++ b/be/src/vec/exec/format/json/new_json_reader.cpp @@ -399,20 +399,6 @@ Status NewJsonReader::_get_range_params() { if (_range.table_format_params.table_format_type == "hive") { _is_hive_table = true; } - if (_params.file_attributes.__isset.openx_json_ignore_malformed) { - _openx_json_ignore_malformed = _params.file_attributes.openx_json_ignore_malformed; - } - return Status::OK(); -} - -static Status ignore_malformed_json_append_null(Block& block) { - for (auto& column : block.get_columns()) { - if (!column->is_nullable()) [[unlikely]] { - return Status::DataQualityError("malformed json, but the column `{}` is not nullable.", - column->get_name()); - } - static_cast(column->assume_mutable().get())->insert_default(); - } return Status::OK(); } @@ -500,13 +486,8 @@ Status NewJsonReader::_vhandle_simple_json(RuntimeState* /*state*/, Block& block bool valid = false; if (_next_row >= _total_rows) { // parse json and generic document Status st = _parse_json(is_empty_row, eof); - if (st.is()) { - if (_is_load) { - continue; // continue to read next (for load, after this , already append error to file.) - } else if (_openx_json_ignore_malformed) { - RETURN_IF_ERROR(ignore_malformed_json_append_null(block)); - continue; - } + if (_is_load && st.is()) { + continue; // continue to read next (for load, after this , already append error to file.) } RETURN_IF_ERROR(st); if (*is_empty_row) { @@ -1315,15 +1296,9 @@ Status NewJsonReader::_simdjson_handle_simple_json(RuntimeState* /*state*/, Bloc // step2: get json value by json doc Status st = _get_json_value(&size, eof, &error, is_empty_row); - if (st.is()) { - if (_is_load) { - return Status::OK(); - } else if (_openx_json_ignore_malformed) { - RETURN_IF_ERROR(ignore_malformed_json_append_null(block)); - return Status::OK(); - } + if (_is_load && st.is()) { + return Status::OK(); } - RETURN_IF_ERROR(st); if (*is_empty_row || *eof) { return Status::OK(); diff --git a/be/src/vec/exec/format/json/new_json_reader.h b/be/src/vec/exec/format/json/new_json_reader.h index 6b42ca23b4f640..430f8c7af18713 100644 --- a/be/src/vec/exec/format/json/new_json_reader.h +++ b/be/src/vec/exec/format/json/new_json_reader.h @@ -293,22 +293,18 @@ class NewJsonReader : public GenericReader { int32_t skip_bitmap_col_idx {-1}; + bool _is_load = true; //Used to indicate whether it is a stream load. When loading, only data will be inserted into columnString. //If an illegal value is encountered during the load process, `_append_error_msg` should be called //instead of directly returning `Status::DataQualityError` - bool _is_load = true; + bool _is_hive_table = false; // In hive : create table xxx ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'; // Hive will not allow you to create columns with the same name but different case, including field names inside // structs, and will automatically convert uppercase names in create sql to lowercase.However, when Hive loads data // to table, the column names in the data may be uppercase,and there may be multiple columns with // the same name but different capitalization.We refer to the behavior of hive, convert all column names // in the data to lowercase,and use the last one as the insertion value - bool _is_hive_table = false; - - // hive : org.openx.data.jsonserde.JsonSerDe, `ignore.malformed.json` prop. - // If the variable is true, `null` will be inserted for llegal json format instead of return error. - bool _openx_json_ignore_malformed = false; DataTypeSerDeSPtrs _serdes; vectorized::DataTypeSerDe::FormatOptions _serde_options; diff --git a/docker/thirdparties/docker-compose/hive/scripts/auxlib/json-serde-1.3.9.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/auxlib/json-serde-1.3.9.tar.gz deleted file mode 100644 index 1eb63aa772769c838b5d5906cc9d6be0afd8e219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78992 zcmV(vKu&V>@FTBV!vwb7M!^KX-xtyM>;fo|T!I;4eKJE6ZPddd9z9{~53_u+p;; zFfg;RvNAHzvof#|&@(bJ(K7-O(Eqnz>E9^Mj!u83L{D#|Z~mwL=eR#G6O(_U=dY8Y zC-`6e|0m_A6fg+XUq>f?_8Ncx1oBUl5m6GLk&qRo`=2lfpyNNV^ovJQi$7O>e;Uf) z!(;?xB}7FOm1t!|f6GixNK4Vs&cRC2P)<+IG$_z7GVLBYP)kmaQcKYYLVzC@swARO z^%A?aWkx6h4;6NiKFe#vVAx|j${_{kV$x*U*e+)Cs{Vb{Is4NX(4n?~r z(JB}9*aOT1z;Ef+_IFd5`#+`t@~7E4n9}{{2&n%+*#24KZvO-a{|`7LeJA~Y0>=Em z!4`ka?5|e#PsAwxnV7ACg|VTNxs9XUpU&3dpQvH_@2IhJFt;{$GIuflJBI(Fu;41D zv=SHy$mh>05dHTQD!JPki`Y0hxGS2OThkg^={q`Zsc1TG2%~(m$`-7yFbk8F zd7ot3&RDCy9vsp2d~5X=g(4Eiz(`^bVDLBeJWpf9JzAcOy31CE1Q|}YT7gRjMLL^w zK{^n}5|@zXhpKe*nYvF;ek)K{_Gf(3$lj=bFE{pB-*C~CLCUse_3qFIe`K22JZG-* zwApo)bnf^;FB^?!_`M}ux+J|^p=GkY+(T!fvLT|l(+14QxT7PxZH>gR=lhQ~lxTzT zUWTxPR5Ud&Z9@OGbkzG@?je=m@6o*rPRDfl*wd|I^}3^istmrNJf?aodcRpLUi{jX zp}aP#wn(b;q7+gE48Gg$75Xb8mDr2wDLl2{u12?2r!Ov;WN37z(!xFQxMGaq0OHw0 zeuL49YaQCFJ!csIQt_0r&s5S@zXs{TyNT3JcFVvV>44fk!wqxAeTN7Udb2VI@XGKVD(lvNN6~JyQ$H0 zOB0qE-BqD?v4J$f8LzVS8@yGOSjCx`2X^CxSvTm&rJHD_Y`ZcaZkV? zuy#Q*UW89c{$P9coPRhED={l(Hl=5_Aw|p1kyKcGwOCHHH=cym#b!r{>(^!EaTjIQ zL0SHl2K+`;{gExjIiS~Ru7ccD^M$o%WY_Fxi{^LN@UKUtG04eM3um+UFb~e`i|fu4 z#to;T2Q^kGcRXb{w^`}kLA~BaO`Q8*fyGj`*9y-eli*G2G>U;|Mi1mK$r$T&Ez%OC zQZ7@<0vjcrpVD8pNC%`bbjq2}4M~*l);$JQYaR&TU?-F%(u!Jk+7mNeljaJL6YS?h?ejU};%*ooQkUQ8C|!*?dsj&)j5M;~g{BlRc~kTl2$ z?=k!rh8|23Q1N2*bOhN80}w7|xC^`H+<2C#1ov6P|CUM5e)@2ej7igMO#q} zc>9wO)*$eMTG94ILxUl5g4Duq%tN^luY;ed`%ix0i9Qn!s(=IvA#oN`gMw!Mcx`BW z;gCMymfineh0Y*1G_%iGEx(6;Y7LSMXNJy_70Hk5X{RFF_5C0HK_)een$#b6+VJO= z%D?9iB=ueN6`dT+ZA^vros8xFij(-CxWD;_Div!*WK|R&+E^>3WDMZEWWr~_RD^vM zS~&=+aP6#coE~+R_Zl&kdb-iV)KI_Nt*$T^Fcaf~IiK?|{?YyBmW*^i0Ihh^=vPyWXUg*3z>af zC92LoF?%-m_diA)zJb__3W^V_2Vnx5!=%c-G*s~7i3?%a>NgiFG+~J5)Ye}$R4O#X zKaw5r1cdubBjxO(f4F-Qx9j)uvN=~DPk`+76xjnBWDZH``l9!kAP*R)4FmMAP)N}7 z*94#j3+_;*r^as_8Y4P*q&8?s_Pz_1a=9ZOl3=FT2lpu|PI+K!bcl*2VD~A{5$7-k z#nhg>gJ35hiUr)4q3be6Zm?=?97(FwERLtsYqL&gMO5H8;*3FN0(@54)Vn42kIPnyM#;Rg7fSdtTB4cMO;!dZSy&f5r7 z*l(3WO;rXcKah*j>beV#3#obF=`nWK=*lpF+9h^UA!`4kD};^cayQ zP@@GO#|Y2sG6`=olc1_#)|c>ntH){y)#gf3nu%ME5RH?xBdtEtO}^7Ybt*|buYiGJ&P#|~G){S@l>bQ%6A7MF>D<}&D2 zk)frNHo+dDH3mM0$|*WR3AA?cw{-Y@Y>#4d7NIA~f;n_wXcwR}*r~VJy35y74wx|6 z>JjDyYcB3StSA_{x@$e^`Bk}slXYGI77b9%5xohAZY?a1DZ_-p!0UA%(_tk+_I?}i zv$)nH^XownduNPXhXC0I{|C)aU+Bdc+d6aqdF6e-?L2v-Ly1;l4&!gp>tNRM;j5+n z`=j=H=NPq>24OvW`cZ?rsa{cgLXlR($i4;+_~`KTO9+-4U_+UaZ#3ofZ2{%GLo6_J z<_>t0*w&RI*p7G4(Z|BaxJ4Ye*|I<+^=OaCtWBGRsCgi|17v2{l^M?I=j?$9HikG2 z)|JRK%VDz1vjjY6>5gi!8jwvyArLm*B8kF<>t6PLHCUL0$XN4VNFde;U^EAB_a@mI zW_ilh`h*{NbkyhK5uAdHeC&%#G0u<;d7zRnVj=HvUC8rLq7cxX1CX74%QKTqZUSHfzo?_zB8Pm(FT z{~P?r_0j&-_0j%|G?3|E%3A#I&6lB(84Hc$pG@iR60u7UdyR{|m-O>*KtP&cKtP=T zo)xr#+Z&)ousi;wn-22d7_QQ3f7zUAGLrpP zSD@uAfjj^3k$YT`e=_0i$=|WHRl!)j5i~z(L-UiDrO|TQ#^~!}d_|4X&Qx%cB{fBK z2Dwt_$dXMxqA}BzB|~nunOgQqCOHqQ%jF_$JBft*%-yR}K#o zhuufB0NLq_e=8>r(pW&S0xMV(`FWk|tfucSQa$!&@NjhC@NjlbRS<|TaOR)LA}aV% z)f4_epZ+4KPp9gbkMX0zHMm0QcO{-xQtOFj(aI5^#ov^Ez%iXIwmx#dfNAq{wVd-| za9K0bevcdDHWTTt#de}E?()50 z+;cywYzuLwbTN*6M<~4nZ|xes3n$Hf#twS{D{*1xA450V;;M%i(BC#|0{{LBvUB)@ za&R&?c7z?PgX*V80Gj2|wV&n4GdCL&1h@YgQXc!sZ#B&tkm3*~^0jRPuVXJL=z__^ z?K9hfDuLo%7zN`2-flio%mNne;#Xd2!C?PRjlLt2t)vy(J>GE{bbym>Gr7^JK%5rK zGd?%dB<<)Hfyxmqo~0ssRn&!d{pf`~i2uK>ZTA0RssCwK@|V%y8P;E9zwni}YW^4& z>YrT>!@rc3RFsnyaWgcwb27KJ`CGD*6h9%`{}Tc56*y}^Bf{Ug|f8ji{A&W=+q=wz6XotgIjd+L3m+qbj(+v-3w0E1L%(3v=w z{;>LmhK*~pY3jg7aWg3TgpnLP`XVR<<|W{Ps5H3yVEt{V9Y9Q~Y{prf8^b`m(d{~d zjoX*IM#zmU&}$840yVUgD}fj=Ep64aTtv_AAQ z8X89W3siVo)7NRoG__bE#Pz%%UfkE&W3aazrVL6z=o;X>eHI3iAM!)zRwGDCGn#7J za|>`o7s6Ygyh02|hBYM5h}WFur$6#KGRd5{{-GiM_{52E4DFjvv5XntI5j?dySYj$ z#$(A+bHX+hMs$K_+09kj3uetN>SCxS498@|MOUEiafUtX9pG?pILje7_u~lMqe#i; zn`i7gC?`wWR4k(u@u-J_KIDW$7L-b@WaKwX8UtmbWO+(HArh^!_n<}ih1~62_jq9` zeVZUlFGpC8Bfkz=9e|eNFn|7i=;8;PY}^=0*jz{e#6T^DvS!XdvR~N)3=;H*{m$<| zKy?2l_T~Ocz2kpyFE1rEz>n~`Tr7iCQ1$S^8H$db$Ki&E!UGYYa4CRzX`MjpEG11G zHiUm9AdiUh{_T_8-UYU5F#?Z~i|YlCsR2Ky<`+(Q+g(UiNR{a!(!Rda1PYzV#q+k;jU@VbPAy8ZgSf(x4{npck;Kg=bR8 z!91noCHz5v2G_C~tl>TNdBKAMbw$>!xnJ2+o?5{M>ko{q=C|+1STpqa%$6EU%pJlo z$V`bGJK~cTxT5WjZQ)`iuc}TtdfTudk{tTtv~Z)p)keqOf>cC{JER}4KSIBV<0v%@ zuCbG)O0DE4G}N#r8>$(Ye`8lhpi6Tb+zGtFzLm*qEt68|{v)Bu?u$U=;D3mO1p=b{ zmxK!0+FF_$|BcHml@CYkB~%_c9d~2nK-3{d7gY3bkafH`Ngy!7&3!6J^rNhU!_}}L zHAhWN(VZ3I6-pEme#}2L$P@1ai_OQtLFGz%oYpZ(7A6yS-te6PeLS{J&4we^f;`(> zEl=C7J6$K)o~mE3kN968b`Vqo&$ESsbGu><{ALn-RV5MaO{sVpnv8eR{Ej*1Y14lE zimqM?BK&$YfVo;_d#4Eo=aI&$f}?tEI0Euo*L*z{gO_}rvccpER5Ft_S*z*Lw2R~6 zcYgvUv%Af#?{U|gfCc*!D~*V>XCs6vh_cn9ACX%b0hXx{P`iO+(NK; zlo_f0{yukoxi!KzJqA*T{-(rTtk2gD>SCK}e5N|XC8|zPtCtd!8bK;|>k98VLd;BT zy!>s%#!YFCXx2IfeSvkRs_4X7OpZ?3s=^@g1lBdl$KK1TQNEQxp}v+6A#}%cBFKBb zmYCAq>>G|jeR8+e=n5Ij{XPY$B_@k$e{#|~=~^WB6((#*+>d}FN@REUjPT>;dMf0Z zEn8kpOqm|QH*Tr{L*{zoH8)m2fqoYaI+ZQIhWW!#&5=qkzT!RiPW}z!4y)GvG$0+6 zn}-fON5&pR|B+^*T^IN0J!8}wGj>|ntB;*IQ|q_FF(F{(iPFP|c*I_iyh@B0i?vwd zj79ojdm!uA<6i7W4 z0#*YR%1MIe9$&r<`eaw3h@{az<3M6=g1*#+Sa8U$0*7IT`}B>O?|~bFj=$P*tB#`L zGofj@(3q(uM>Wu3OZJ2f%q`U7=a0d7py_E+o8-T=R=J0zdzAcp|P1eiD zm8dYYm)2i`dQ-Jq(n^HjGgL;lMDR}2XS;iPbnd;r+XY7F5F)x^Xh3-!wh?99!U*=#_ycM^wx z^cSG1ciLWTCI@FuN=G=|(3ZKpxA#i|Bj#5IuqOIzvfBQjt38p$_p!ItT^YV>h-$~? z{C!SWU-0A(_Z?TKjY%}H$!+98CUzUu3HO6kioUHm^22ZDF(YeCyrX=4Iqyb7yQW?j zLddGUz+o8(EqSsbnl=U_D~ZoHj@yCP)na)!j`u%QH3qQo_t3qXM@g;RkY*MXnT$`6 zoVn>8u&o!^=6KV~5BhY9%2x1i#S*dEMlY>g~lpEg@xX#^I5RYd%}~= z$Q@yMc=EiRxtW)cm1h7NGrCa0HhXgby@d-X4Uc>W`#Cxlm71qT#4jpfGY4S4(VzZg zX%=)Y`xKYM3-7di1I%!S5STDb5197_p{DZ1)uLt6c776S)9_!o zF0`dR1I8XHx!DC`?vEoaafI36p_U%$MIP_9@lg1eN`fEG-0~v}ic!WpN|f(7DQV8; zxI)(-r^cO&WkDeqZf9tsj@5#Mcrt*I3%3Wx0N;W8Q>e$;(<#pT8Xh`kJZm=z63@bk zq@|t`)}MHSp-&Vb^iw$+Ord)$P6y5gpJ4Lr{zPsGgBe9CWbuyl3^9tCC#LedyPAYi z;TNTJvnK>TGjA9d4xtdx>%rWZ3^zCMyWU!T_@O^jU-|YO;U83q&%G_pirtDxPAOFP zKRp?plXTdED7~`HCz7XH$EEZ!R!SxJ0jh~`0HTh4rkKMvBSNoQxC1mO=gdq=0L@bz z1YgS!=^!cRL^`5)n4HH(6bxA9DP?Ek0lr72CN8#Y?S<^8M$=!5^&Y=!J;rY2w62Qr z%#==O2wkF`xaB^3rkJ<;klj*n?Y@oJ#i{j#NDy+yz}HUR<6L+4wtJ0&^$g<0E}7dF zUgXo>ehnIT*~#yGJHo~xa_(r?VB2%{@@6c=jFz0jlm&planFjTgSF?g#mYI^UcQQhbw1Ly)w`siSQ6x^#R47;U$3ZgmAb3tymIMBej${+Q?X zEK_Y;J(LnbaiwIo|MNMl2aN(vKp*d!l5&k@vDTA~*W&As+H0L;w)#_d6HxjRn)VP= z>c&<10z@>yeeLJm{Kt$qh`Q}g`Y|}o-Y8zMhg!K;Gs&62ToW#H&@oDT#0=3Iz&UGqP zRa;m}!b*hUnqHukRo|h=mo)ITwXZBHsxCIFHJj9oAAPUc+yxL^j@VwNyH2(pXE>fR zzc^Ne#IoIxdfCfv`#@VjW1>(Bp%_&_S3n}L1NKmd9Fwb{mWDygiXQe}-O_rq_$=~3 zYY0jl=O*o_@nA+S0&ic%TM4nEgu8AaWh>Ox@h7URA%+dwqNeKHY}k=zw9&?^eyQP= zV_yY=YR+7djE>h_qG;g8EQhEjo|=1ue8iYYo9lFQqderXZSp?Hndjw1QQ!Y6?rKO} zXAA15+NX+oWO9Dt$6jL(j$BXbGvm1WeK>=|vJ`FE{b^rL+hk)g3fL3qQ8sWE#xOfai#+9S2;yzG=Q}N?(l$bzGB6W!RVUmREVZ3 zw#%W00(G>8jY`X7hREsJYN+YhS~FL&GE_O4Z5xMYk63+jza5rW&g~_!Rx=J@nz%(p zSvsdO+6ss`N1^i(pJXx~y+=gB0u;5?b-b(5`SwZfQit_AT}WW7twRR|+irKmwPb?u zEt9w0l#-pPmIs4H!Tl%yP}+s zJ7jx3<|J>S`$hNK3q#6lr-p&uVwYJ!3mEX!a(n|iet|^9C&Y|rJ36!A)!*7$G;__P ztZ+6>Mueob-IjU`#fVvR7rW=|6<$oD?uj!qvtU3M<-u~%T-M)Gare3XLg6DpGKT<# z)X7eNfu?j*P8zv6ta1_?kLZFDo`QunSGqCBp3&nYGodRb zj(_oV_z*C7#ekl1UN9uh>K4@hQh!&O`1mb5rCn-@D*{C7Q=PPFm92wNsOZ6+>tcn!3NtE{SMf8_W|<7gLv&H5ejOCrc} z*NSl);*W_xHAnH8JMLA%kHAj!b8T7Zi@jQQuDzbrux=0d&LxZL#K$!bM!=tDC`2{H zG)DSTvsZ*jbEiS6;ni_AM(=L*bn&u`TwsTrBIyL&iZ>GD<{bD^zi$nr zm&bgqlH4DT>shfT2(9=OEuC=Fz>A=Dqa9|kS56en?Q-J7S+?U2x3ESN2qdTmNgJoH z2?6H837cC7tCq-Aq$1gGXa|)iZn(JKNNFwTJK4KKb(9gsD)Au23YTu+G z&sl3~FB0{2F#F+AGYHx!jY=0pXoz*j?KEW-JDpNgrie~7ng=?!=bi`LH3-pa$viXl+*${%!XdL8f^k|r** z66bh#pNl&-vNCt+*p5l*#w_DvND({U!lnVNqJAo@VWqt;xvY9=#_v?b@8A>ntdOpN z#~;8RXNbCc1ql}V6)3d!2}W=GXT@&SqP;D+5Pnchw-zF3>^7&oF+ zPzR%n#VcX7^;UJvdEUzEWO*v&!g^0QfZ6t;`e(Ajr0$O0aYKC24dzti4(FURE9j2B zAKkVrnt@91*F^SUf_@5EV|13HmY_d}a4Pxu`?dP-a3Hw=)9|uj;7r& zsUOqMN9V?f@Qt&jQk%c-tcdeS`mq8iYHPNL1$V}en2{GqP_RCQ^>}J z8M(8w06z6MPB4<^2iuqdt2B%Dufn#?Pl!r3LsvLcbl92ljhGygl=|TB&>ME2gikKh zTC?F4flSFZqULYBUn15J&3ZxV-HU7J>8a^ik|EXs+Pk`Chm>2_wiZJ76f+?3DV1|w z;Cs-|D`$n-UmsQCn!n;y?w99KHRIa16Grbg)7*x-v`wqG%iAkmo#w(Wn)9dS3vLKz zte@T=oZOmQVA*CbqAvx@TjMC3Yg)sopdM^|92OOlh6{cvcKKK&9tn6d=+GJ>4&@ zvgkSrDj9dQl{@F7F6(g&3+q~=@Q9Fr)kKEpYDro}%gtV<-Q0;^HF8=rbCRHpW-ys< zz!Y-w#cswY5G*Y>nJud+=ok*EE9c=d;^+ekT2|T&+xDU~-lr|TGBKIj!U(1z@9kpG zipg%MO`=~4ceLlzH^$aK{MJ7ls1_Dd3&mvziKlPF1DLpB7bt{X(I>O%r`;S68N_u9 zQ1F$J=*deYTWh{NC@*Q-$K*xG9`fNH@eR3w%N`MP6Y$s*!R+PrfzV0T>ZE*m2G)Ou zP4i<5!}3j}aFa6GwJz(|HTw2RiN4FDKAdcUx}8GmGHiL9r!|)C2Fx3W{oI9_Gd{Dn zZPSN-2h^Q7a)WBwtM8sJa~AO|sxyM<9*FQ2?RMxb5hu3_??anRr9H3JHFz=}@1z>N zTD?%1LPgM}E%F|nBCT3>?>H4py@GT0OM?O(vL z+t2(X%V&ZaB0*B_Ym&b_!-s22FDfKi+O@SB2S&P@$V)uTtn8;ne4@EIp)*_?Z5pAY z5#xyhM2A#SrX!l`4nO`?$O^%-7)JUoOR;*YzJ8Nna(I2?ZV{=Ss4LhPC-qRvft9_p zu{c+OEuC(_x=a0R9T^eAXzVtmtn<-b#Yh_JCg-DB@gB!zB?$E0?IYaeeRvWbkr>>Q zBsz}lf~#-6NzXV3JV(g)bk-g#0ZBcv-kt*3n8scYkQm3>4(}UmxW`8LM|->8%Uaii zwV~@Q_C}&z6ADUaIjq9gEWDf3(SfP#H87XC zJPT^GaQibbIoMNAq-Y8s*M=5nD-^!+hqJ&3>UJ~yoK%i{U_<<`=B0^xLDKsNC6Rk< zm?R3(<_@$bW724S>Zx=mdtPOONNG`}lLA`Ddz5K07e!cX60odH56xqOjbntD2}5q8 z-6P;{!EP$FjD2{yfDQUknonlHGqn~eDvXN&$?~{Uam}MY)8y(VA&Vm0O%v@9v@EVO;m?7X86a&>x2S3`iu-42b$OP=ghb*8km=MX-W=&sAYE{SZRL<7iap6QdW{>J9BoK)2Gk0b3$NDg7pxo zMdI|-37O_>d9O~TO`KWZHyH9s@}=zBT7J*L{zyh#kVichDsrk`GUO_&3)N>^fr!YT z=TbjZz5+$aMJ8q+!@8|@1ZrDj#h0M^M{A}ZuZH%}5{=#-cW;E{SPkEDkUOvI`_#8- z!o?f?ksRI%R?P4It0pf zLqt&8q_|B86{&w;4cm&~)6QAE>WAPx8ND&Tt%)AtkT5CEM_Pz&U$mD!j9NOK_C^D@ zdo=#cxZ=+!Y>~hZgbl&8n*Y`5H`m5&SE-L-(n$miwK`%X$=cAGTj65MK?vV}u`{sD zyX$6UfRzF-(~OkHDDDY)&bjtuO}^2kdep_JEg={8aMl6-<54me&mCcab{%JqhBkDH%rTVDcTOit4U4ypE z-GV)R<_V(9TKpl8_ee85#HntwGFnh5{DcwQuwi*L!h3ShUFe&-;;4VEsDD$%S5ju4PxC? ztIcWZp6@TkoE3l*W5;i|dd{qq`!f1h2ZTjFWZx~Jf&SV=14 z#9P{pvyC1kNJ$m1FwTz2dyc(pQF-FccQC=caI8~(&C+_+*|i!56JNLo_`PToz7o^# zf-ruDmEVJS-)I{ENZ2;?|YrOw5Hd^ z@DHJSBbY?56BY53^a0aM_Ygwx z%2-K&Y@<_MjP}V{RgCt<*&Vif4nX(%>_B9umk@f!%f&q=HEELAxm2R6Et3;?K17Lp z7XwC!g0!BZFRO*PcBEsgM>mD^(iikU9<`vBDs{df0|Cj<0|C+em%ghKaB$Ff|J#8} zkp{Gz(ovev7Y9??*d$~dxDZmRos>9fE(AmnK}&8QP_k!$7QhGsxnDXpjepjI0`$B~ z#}!>z{(`ouKOhA_UQNE$RK2xT-L$ptvSID2s%_b{wX9NP_WJq7;mF98CZ5kLm+AO9 z@#Ou>^((sj^~{kDs8wn63ILmq?1Bqt1aa8-=K50N^ekkpm~3kf-#7@ucnl)cx2pB6 z%3&UhOzZp0`A=2qRR&`p;{BZkjL6|lJHd${@OET%PEi8QTtXc445VwAp!Sl+SHn+= zt2sMztk6cV#f3x?suViKCs1y#N3}!{DC`CLQs;!$V^O@jEb>|TP(ptR^y6B}P96j( zVGu?k|LfKMXg|KfTxzF1LjT*}UC9{R81QbcP9lceW|R0~?ylg58=a^ZRKyGNoRU8! zB?>$R8GK#6iIGUBUXr3dpfoWfK!mKD60qo~mAqZ0a+%OzLM%wG<~WDNk2YGKHJeTI zaSXFCN({M4A(V7d)i!@V8dqRrgWh2&TB}h-DdrU*B|vQLtV^P*!f~^dsY5AN4TNAR zYFobJYJc+&7?%K!>7WmGI`80mK{9)I?LzH_vSr_|TFpgq3A-;XqsZK+)F6uDkjYM^ zrEhb9z+##jt-#X)q{&XsGhjC*R_&;w0k}BHVU{R&p@zRB`buM!k<)f@F6vdUc>D}$ zlhvv=#5-2B29AMXZ+R)0CONAH`T7k5Yx^?u41lW#1G{C&AI6_()+yU;e%lm85nwXn|{4tDj5i84=S7fit_KFoo9p=M%P1RYSLa5L7Ld~#`J>2rV@>LjI9nfg z+j{H_`!L}KWijkh3Ytv{M@3`KMcGC&ip`tfpxS-W%lv~;1kC6z5Un(I%M(Mj(Xy9D zfCpD3?1FkyYfj7{t14o|Bw}(E^Ln*0aP3u+T-zH!Kf|wOJJnL>`p)$#L-^{Vx1s*w z+eLOZ&{)pr`ukw(wAOEIoc0OPHF`DtHeYj~d$n z-?=*8aplRnla(A{l4&;uB{kdd?GAu!7VNpMcR3DZg*3@=AgS-gfCGtBOejuPoHt2= z8*4P`+P8x}pHU*5K($(9`mJxk3M8?8exV7qj>*0&#}iMqyI92)ci{UL91y@U{B8ks zG&_MzCXRa5jz$f*&4z_I;q(niw4j$2bS|952m{}?G|tmH?9aJLC}Trrzhf*Y1XTVY zSumnl+&NW%^2!Sjn!m+qOw+zGXa$62NampP2{hjEwjTKO|V@#PAdD19I zW4{Ml+zm^rN#sB#HRB~eBBg+ciA$Nsaf>U-PLI%RlQhgtg&o@9rVcjc3hE^U!{)BO zG)p%T^i>}HYfl%XUP)Bl7<49>u?JPwbdDy>TX&>KYV2xmx9JJa2uZT7_|Y6=e0!bTR>r)^ zr>F1b8|;yCM`gSeeS~d4X@h931Pu)$LGu{_0abmg*#c06blkK!g#?T+Fj}Xmv~95z z=*bwwJPrb;v!s&si#z7b+y)>Q`FgtCY><1kQiNGzhv$THhfMAHqV}><^xF93P|oti z6Y8SGwM3m%1UwoE{iqiPiR292L^k35PRd0pgft01MWMB_NP~FsS)~SZZy0$++Ndp{ z`3g$I?7#PuiR9!)gyjdgn8AY!QTRWre;yzvr~!*4Ss`N2|8R!P@w5H_OG%a1xiCJ} zA)ISy`N-C@)l93VkgTb1Fi003a%myvp-eK;+Gk|EZ`(3RPQ5~DYELENnHEp&yGd+9 zTw7)wbeRCB7}s(?bnve$CST5DKl}uRbgM4x^mCaa;qAOtIzXy@cSg`ES6Xk}nAuN-nZI7NG%(aVk>vYN3I*DH?3KN(dgKETny_$Z>DY~ZY zlnfIxefdqq7$c=Y@tRT!UMdiJpXE5Bv|5yvaDa=C+O;~aYJ`4zh14IbTH!&BeU3&I z{)h`;@2bXd4DsR$k{W7t6&YN#Hv-sc($KASx59b0_C1=9U20Q%b$67@gt}; z-j;RFuT0C4AdpI`wH^p-$3L@N5ka|R&x$j6(stmZkkcFWizk50Po~x}UXkl)QIADopM32{sSa6c6!a`}Cxp%rt%{#`ew>;1`R za}d*m?z;C|Q5Yd`RT<<NIa?(j(~v|@iLEYYJ^OtizJEH?empgGdRs%1}?Zcd^~>M5`TF&go7Id z+5sX-Ryy}6!8A3RWpWBr4TWhG%OOrhzTn!2+tlKF$24T;UXDb`x?q#@Lm0@lqBI#- zi_^aOz|@~x5vb1VoAvWz@=D6u%Ms3!^Onok3xjjrt}%oc%&crj)*QjhARBVR#q&W~ zh93~z0%I|8ANEQ&EnsAJ46+8S*(wm_ZsiE*VWe}?h3UJ7=Cs;Jdl`3oWeNE2Qr=ZZVAm+(e?zlV<_C)b3Lm_yV z$@E@iG&t^(By{wEnOQ2G!b($`s)S;a962qav@~0Kd8^z)R+2L4eeUwY*sywgG*;uc zZVJtc#H;qA?h-q1_-+pfk?s_`T>=Mhx_$obDW28`0-SXQn;j0jHygtZA8ML%&o_DX z)L{i$yMUQq%gB+HGa0_ZK|TZO&s2_cSn7T`Wcp?e3{9FyY-D;5J-!%wBtvrteme~| zeclH_w|DF-)Mrxd?DsYANVFY)Ay+-*Xs&V)5S(t*g5SP<~q$ z`@6P1!pXe@_Ipg*QqXnk7_(6Q*@w2-Wu$@$6gAt+t6xj_Ep6p6w_pFU$aXnY@(raMb_3H<&iW?(8^fWuVb zi`P8(VkliaB>FHE^#o|xKKJ{~jT;#!Zn_r|LIb9UMUUK%#|%|CW@2ejq+EO{R%m?M z$K*!g86cBp`*t{8giX(752*J(4j8QgU9;1a?0K`F2#l6$KfcVZqbhfTAMrZpBYcyg z-!7@c`6|x(dLCC0l5B@ek~R49T5>}JQbK{oMX>jpYh}Tc%oawO!IR42B+<(of+`O% zx+EVkn1)o8u^a5_%#b%m`sA=7SvXRO%#CB1{_TuhK?^R!aREVl<@?UL__WKA097oXn90DB6 zyjirnfL=)fYBW`GoK z-Y@n(#)3nmi+CT#` z=$qmFZb>J!IThdK$|-cZ{3x~uHP57PA5ByDVGW)kCElIXip^w)2skmE!7f~0_#(v_ zreuF6v8BcGi0Pw$Ojoq~-lDzqWX0x(Q%8%agpVU~RiYFPxZr^%#)T~kMgI_e)bpBv z?LInt_TlgLeb4loXnVtxlHW9WY@K5Cyt%$L%2=~PuU+$WFv?y^3VGm$;s%yuDFu|F-@3_R=_BhhS?xScDi@My8!u7qS=Cf^f`WZfE} zs2MgNS_b|ub;ptvj<_|aUG`mVzYfAM`_klm`px}3%ggB*-8j*2%a7%RK7is{#Wu8DK zRtXF0j$rC1hQ$;dUVAa@zr$ zjj!1U;Dpcj5lZ3{=AB9gM~l|AUW!sBJ4RKtmx*Z0DH9SB$ysV}G63Jl) zf3HF*(!eCOC}7CyX-Z$A%qoyK@mZF_Gwtpt^H+%G_Z(8KQeVs_;}sy?z_5oalJKbo zUrApNPyOgsTX^KS@ElAn_hM)ki!8ZyWW7nkv#XDbO8OZeEpaX1ScXxc4OPQBHJ+f; zAQpErf~7G07AGUhS3i;-oPeb-pEe(D_7KRd{I*!S01tWBvz@VXo1mz_9bZBdYU@7EDpbuz zp!JuHvL=1LC!2+J`9( zo0jHXE3@q$uj%ROxNaI#Gg#sF!c#MF#;0qe+%v4#$iuv*r@Tf3W#frIiC8?lelss| zphP-6{lLc@&gPc9AOU;8v2Qb9P(F<7%d(O27EaZq`EWAX?OFh#k> zg$N4{`(hF8KxDllWpC|>e`Ap3>eXw-Tw14TRq8_1t5mg3kJT zQ{@WJ$?S=+a4V$N#Oa$Vk}pefL`ItBp=$(7F{srkLdz(v-{Ay2FylRswdI z7ZigP{VWE1>+F19-2?QGXNU-shn{;dKtOxw|JC2SE7@8a+Zg}HA2X9w-JO({Fu%4Y zrMHdlNMVrq36L@C;*CZTgoR1`;vuk%6KbI}bQojk<0m5<_-8eqx-?QOplSUywekgn z2g5y^BBU%et*e$bt~fp_HqJOcN<U$3bNohHqh(SrOs84N~=LJD(jMQOEdWqK9lNa#l(=~6uCK@C3B_SYpwiVg^MIV z(L_5?~-lS5s9AAxeTA8UfmCRt#e2ptoS4u7wnp6tisrk&s>QgRb7j$S*7>Y-h}r1!jk1?N`R)D zQU$g*%_c8!=Ubl%QpQEBJ4Eh>EK+8bj`L zxLT6j?X!U1ZY2{@w&HGqxumwjq)C$dqXcUq-0{k%~a zMT>hyLv9JLNeQcAb6r=FENw|^#oZ|~g>;^^JBT@ii2}Peip1T(lXZdHh1;Y_^^wyT zz53D@W#c;6YgNrVUL`{_X;_X1y6)TZxm2RRIMHzu85l0ZrnSxV&G)m<346N*8W`wq z)N?)-CBYV(9BzmHSe;tYH)l*iwp}xEMzccnsR;|Yp;yHjsFAFRLk%_`31vvBIT`o& z|2BpilXlv7z#P=c7tM38`A`^ELR|LzKPWk;=uEz?-FMQlZR-u**tTukw$-tdj&0jc zI<{@wcG5Zj@9gi4GroOu_8FtSUQ)@mAZqw6Iv_Srxz0k7cI4O~<#Mw>y zd`~cTT$rhoGEWy_#(eQF4vFN#gbB`@(r*Tj?x`~{Q^LmJMbnTPHttR-rZ^!F$&Rga z9b?nP`zw_0H(JSl)-P*~7>?%Sbo^8;>{Lllr&C#?M{yr&7cu8T^_-e4s7G{{vqos| zs4ZG9m|s(_w3{?`JIT}cB~0GGN5Z{Bl^hD4E7D8bh5$Yu%3}~HJn1gez1&55S`sH? zRb(r}FE?c#s9F(8s+P1W<_$FIso{Jn%4n?6XoyFf3NBk#CJipx;jKrTX}~F4S+m1+ z0Xlor2ioaIy?p)*$Qb#Q3?j3Xlgdn@yF>Ht(brzv3x^{EaKM2 zj53ooaI8yBY6mrvrEmgyr=E+g_~bAG&F|AYk8XN6a#7TeleZ_7u8f^c4Sp3HFT&_- zhLV@OPo%($(ih`N!C>Q@pfpNdkq)Z)Y^(5vGqZ8k*3 z$xbo0gY z#JGy4@s&~xZcvW#-T8!#&(>3-9l!K=auaB=-Ms5OypiY+(3yOao#{swSRWR2vO<~p zMbmPX`&e5MrBdO}ymq$KnA$GvF{51hjnj3ANLLVkpy5(?ZR$>|g3Y{Yri4lXC| z%R;SZEse?u*Gw@uLcJV7!_`5f*D)YpHF*W{8K9<3r3E3-{yx(=f_Y3>t}iOENoz5E zW!!dX?hYjx|EmlLGrJZYI-JEu9GLMeaCfrErvNSoF9aJ{_M6FSWS-KV;ghcxckxJv zO%&pQ!?fZv&rYE{G#CbEN3u6JMjG&W42KGlv0sSBmx>BQMw5!6x)<~dPToHEUSN0B zsNB3gGqfCpo?Qq_z5)#&Q0cfZG_*}N!rrXcXg8sAOH&gYyM=84x0DXdAKFCrF5q^? zNLzkM))otq$b5sK%k6TylcI>~*GPBnB!|I^ATsGI!vDO1HpCML935&pg`K$KS`}V_ z*1REr*D>dG-C5o?Cpp^YfB+d4MUh4oHQMUW0bw38I&X&rifF=?fxSs)!QadTLqMM4aKFI2FS6-9 zXHO8XGkLye8ke=hP=<{lI|Q9@JUDW@GCXrx<>DzUwqUvZLWtc zsrqUVZjVZeP+&UGhspX%bfI871u(n?e)_^4{P^ifL5}KMfN)}zHZyMr^dyaK<)E2s zSfEEVF2Nz!?@PY<;R*G^soJT4v)xd8F1n*M6L?+`=HTPoJleJHI4J=1i3oSi7Jq{K zd_&?I5>@&TGu_$wz4Fntaq~+5AzYFjNBJ?57R;}(EUyqGPqk*Q^_=Ext@zBDq%li3 z;?fo4PO1Bw%_Eg1Zn-~r+C?fyHpdrtH4y{dPGBo!Xxr)g_k$P zUq+az9+cu9L%6?kaj)i#mhT>ML3^WhFt?Y6DrMi%`rMZd_2``>rKzPpDkjYt?@-%*ym$cGw)B#L1EMB%PbGd-O1w-;Sy$Uasn8x#tx6kQ(-zZ zFM^G0CkfR3J^MN5mEnP%lzj7E%(&BJdc=`_bxZr2^`HJ(HQn|OM-K&pN=jIie{U2C zz>+abQR|phf0$P~T`CJ=l%snHhTLZ0M6s)oZ>t@gf}`FBa3K&@NWQAb4xdm5`j=aM zYRmQ+x(42tl~<@NQ7SK0FjALLlwns$v6hu_d5(UmY~_78K1QOh!5$%H!Tk(&lO4M&_n$+iFg8lTG2{UnkzieJ2CPw;L zzmi#XrdL1Iu&If!s~EA`MKSBhcU_Jz^;K(^g}C(c27hdzM%BK!fV zMA>kZd7pWT9tv0=4aZ>TN`|Bpa|LDM&;JTmQGBQ{p1h=FL}#GRJTk$@HUdx;e~stk zIXCInEpt2n4KP|#vW#9){p&#p8!kc5JlZ<~BukfKT;6B`4{aJI;k}fIv*dw10HNMhnuM`@zr%Et@csXP*I#Jqv$$u{10-~=m2ul`bc zH+rRI2D0>eDoiR>6@LxCF)E@8)E?5^{?azpXF09vU#1*3LRzPme&BgO@2%Y;W_!j= zB62*WO@3rWiSN9>*R8v@cvtr4KGw|qh5VniWX12GP6YbnhdJ2)!%pk}P6z*QI~y`N zR~wuECMIQB`vn0c-;20G4oOrYDnjsaaS(u|BQjtSida>M8s?0c64EZyB$)%Nb5$;x z8S@qX^GDm^4*(g0gbv4TAyVTrwMc&0;=Grc`AN4Yv)=dLhcC!q;$>^Ic_)Twh9o0( zxMITWJQ#h8__x8G2OMxl$nYZP?K9lsSB2XekBL{$gD==lvh=qJ0Jsk2i}gCP70%G{ zv|NXklfK!h`3Fh{j>-gWN=7U}tv(JY$iV!~d(gR@uCs_!@|!ob@|J$SmrkDhLp|^q zlfxl6y9*iLOXf6Rez77M-n)_J9RAHfzM?EP50I6D%Yb(8ZLQ-j$T?!Erl zoPu1UNnIFBca$dRbfJ_RKBk4~E4gG`5 zXKe|c^n!tB$x!4{tAg3QrQQgwQRYlVcgTsgVNw%u?y8@Z=7}3bKm=?@NP{9gnQG`Up7BKeXry<3(%;&A* zEx6Z(YT172i{1y)pWuD2#3T)gkjYd|^XJRP7cJ`>=i@kkzc=_^TMj`NqCBCw*$5iY zeBCc^Ue&qkt3@lv6-rM~_4yK0FK5sI3maY0)ZUnsg@z-qj-&Jr^Y!I|gH<`qKv3g1 z{Dqh#>W&MsXX_fwdK-Er7Lw!gPQ@HJp%99PXBeF*Gc7^q9Am8wW+v?(fkn3#Ww)g| z1SQk01?A2f+xAdpwolD-MLX7wUpOMUMNC9UogR|g+sweA$AQ_ytBlYK4`qS1R{VjJ z4yq|(ob7%F(YolL^!Czuu=NiLK_0mOV1T+X*iHQ3?-TvHE8axO4y%;Clt=2)gR9rp z3Dn`TP{vI%CFqEsAhZ(aH`d`KVy8f66LcJTnex4XZm2r1u zk{h0J(;7}f>BJ0AD<{D7RvID@DjUq$k#S#mQ=1bKSf!1C(%5vYX%*jRsBI<*V6p=D zlsnE{j65jr^p6)*fUZds2myOk!fg8pslQ6}wX!x*F(6jVRZ~@cN^_w>Cmo zZsQfrRee17|3A8!Y5vWYOR6j&ot(L zC$>-~*H}wUfawVa{*^U}^T}T+ClrZ2Kg9jmiRz|HS#rTg{=6a&GA_mhT$4V2%1J}Q zbU}Wp8Y?)U>N}ROcGU;S#%{gh$e$9Een}CA9DFjqv&ABf3mK7MXIQ44W6{sj>UsFxo9_b%izoS};d;?J98$&Cc;WW>#28|*%wCg* zfwho4>|_lbjd2E8JG996<9 zAcWX-ADpl9zYs@kC+w5zGCE~BOXpW-nmmv?Udas6-G4w@DfM(ID%^*=Ym|4*G`{O^rN zR`9=^V6vK)7O7VO9=AjUaQmntf`ZWQw7_r;bt$J0yB{>SI)C(+D^?DKacwqM+eFjpA%oS`_ zoNZnEJ-oZlT&{e@<$}N&>xlkbo4uj1IM;Nek5Vi6H}(rBXEl&30~8S3W3(DYf6t$Tz(?}bvEe!X9D z2HiRt71#o3EH^jIGPLluK{i-uY6D1Z)zrF4z$~!3?BNL)evIFHm<~JI?6-flmN*0A z>`Ro;OlO*^qw)H|;kQl=p}e0#AkQR9Vwt5cMd4FtrJYYqD-?`oB|jKX`+hMmYA(|$ z2FY?Rpgd@2O7~OU7Q;slI=jW&106<^{CKe*)nro*cY_gPqjRK!H#?4B9f#nMJ(>8@ z0=n~(i&aga+N9yKzcC1=yt~@`a#Jtn7YE|oVZzlBoJ+k?@h6(>432n`u_ELv5v@_;t>>1aIqt(mCG|a*s&udJHlPb@gaJ%F6dDg z`EUdAM2!;F*=+yLrqb^H(Hh+2+WMRg!}_XJIxF(b)sK}=AwCz$*kN-ZK_vVJjlvla*1tuS@Rzhr(id8wp7PKo2|3{IoX@Ia*;^DYJ$9*I3% z5M`#{mDPfU4gJMIZOd|QAtce;XizL8hhPb1KdQq?ZCRiyj=OHzrofW$0D5N}5kqj3 zdcy76MW_u`X>o+rC&<~VIwISao`!iv7 zNMp(rpOrj4FZN^O7G&(D8q{`f5a$4O$cM|j!hc2O2RHIkowPWdW5Dn^7L;a)_;Uf| zM5g;hcB|DXs)gp3kHcn!pjVf!SC?>J4%mQu94e7{8QT7)X!mp!6gF_ECat4LCAb6}+ z=KX=Nv{KRv{Wo{C?d4?4Aki2KCwVXiU;N_n2}AHFHcj4{A3IRZbA z;61={^%LZ5G!?%1ts)4mI&~~FFDT-2K7%675q!LreX?EbIY;P0RSPq@wAw~&ho=_% z(ZGmCgEg4+Bwv=v`;2s@9btk%r~Ae$5wjLQbxy~a#dpBNdX*S;>>SycnJkMtvI}=s)TtOVMn4J zO;Nr_quSgc)neZ)txzkcpLed=54YIh4}+0mJ-v>F=r(TB!_(1DX?~c#HHBK=D)DsuGfyaQ4YYQsRGfy1>*;mzfXmgzZ;+d9U*ut zQFr#ytpwaKT^w}2u$>jz=L7S|GE!8ZSenp&A9IpH$8 zvp)5b#r{C+u@4=-No29?jl<@WDL|#-Vwj83^vS5aGHrZ?%Yj%t#m+ININAu`nSb-& z4Na0}`^y$+Z?xg!@d0D^=6LA}CcJEVYGnXC06}Pqve5pb#q1E`U8xsF*k74*2JaJ| z7np&uYn-7UAcUQgrX+|suW0BIUpGfXhBLzIex$p*B&AA#L3F}9YS$XHrQ9O`I_;2d zwg)4-Win=+WbP_v^&W_Pfg$r3*NIt}2g~?iaWc8ZSs&kV zac@PFQTj3idsA;sGvfi4lDD3%{lEX%7}t;$@=~Zdm;-%gVBX`BnAL{eYWpE@7cf$w zPK%?KNt=35XYwI2!{0p78}*)z#owzUhnLW6!Y9ag`rLH<53|B%K(IwuOkJenbeZt< zJ#JyT_K1_)YS5!clWa__(h?Zkty`reIU$=irZN}o!rrhzKmSY?=!rq4bUU&9u&%V?V?x-t{V2RdFHC1JSgq?w?J`2U<9E=t-JoR}8g?b)5Loeqb^8MY~ zW%C}^&6#uPS)}?qwk_I({B&cfzbI za;d2)m*V6wyeR!C?x|V6Ji`rl2f+JEs^m8=@r&KKgRS{WSbs%tez4Z-^$W86Oab_Z z9lY{(4iVyg;nmK@9hodu%*GMs48M-KYI@D(KZ9qk?=^U+{8XT{B5z{F_}iv5lWCEo z7eM@^LR^$iP3+pp5x_t9m8)swZwmPrx8Ri<^$l_SBp2+pHZmGs9cmobUD??@xxizs zIp_=a#N^)0G?Z@bO?vH3TXtjPHUw^*hQ;52MpeDtQtRq>x8}8P1g^6BtmX@l%3~^^ zF-YK-`&yrUUOLPwmCh-$-6nZg*DCuhQ_Y>(sq=k5RJP3|wdoz)_0S4ljH|FU0%GKM zfuxM0YFIOMNc&-7%!xM%#L+m508u_>hvSJZ(p!$Mog{R+uk2oH<&pg^NC3B-A z_{=rE=z@q`dyC`J1#u_Kwx%UA(X#i`jqq-yr8^)2zIgsL8(r)xR+0bXsdX8fmP>4c z<<0n#{^SA+|C3)#|Bxnc{nUMNO#RV8LMrhWh42##~cesw#DsEJ>;y_&acQNF#Sc0pjxay^Ys1MUDhG|Y4;JK2Ktr>A-!5qaPFeJZdl~7=~51!)| zS>r_~!NFP}Il%>P1kuh)_vm}A^pc>bxFXUJ{?C;y2n2%*hyU?I756_e1^lm-{XafM z)#|W5%17wmxf^8clJr`jLuR``I9o}r^TGD&kPanS6=^{&O8PCkg;@wGr9@odf~}qL z!`HC5BS}Hi{y$tQR1b4*c40i-?PII_;&4;y%^kMJ`LbP*U>J+ki#S z*yIjS&{$^xHjRag7hI_}s(Cmv!KlbA?hcR%Spv89kS}1wJ89Nkgljc&!$nc|JhWGJ zRI7A0XYn?WVnYvtKP}oe%3?%g9Fk(2OD@m08gGlk4}zn~DimIdyGNi!=(Nl2qqDDfPkO0qA5eAkBzxFW*)D9UU^l^U~& zza@r0*&P6DMQ&t^fh(^L!(`5nu%=;EiLg!%nX;QaKmx{+q2POAZqO`;M!|RMlDO4` z#^r}Dkk@lsoo<G5zlJUxLEOj{Y(T`75 zhV0}SGUBX_4~9ytDDfKN{lus=eNckOgfYOc_Ob}VmCX`sK3QT}fyzm>)(F6e)qG7T z+D^wJra16ao}`Aa9BMQhUk6>@Cqc)we&yg3q{QC2%<$0JnKW}D*F5kvhIr!$ahTPH zMr~}@G_q zNmpyV&vSa{!_m4PLuuIWz~?~GHaArC*6}t+NlA%J@1Q9Yt?eS>J|RQD4_YG&wuC{N zWOqmEZGMIo&%-FcroGh`J%Dj;(8Myl-f!m7?OaSn5}cL z)t2(ZP_K3mVsn&g4Li047vJo8#oLkDPSLS4w7M<+AQS&=KYG4w-l z>HJ{2moX+Y;K*)Ma(2}o*OhdUxczLH4T05Mck%NTC1A3teLKc`6?ScujLe(0-nBIJ z!+~ENmoz0P^XR58_CP#gbEPsL5wUK4**87(&;GYh{uKo}B1%a#-O0tWd(|$`>j0_b$u$r(j1#{mT=Xu;EPs~_W*K2fg@eAiqY!X_lNH_?OU!>X5l~|8U zK~QjcakDWi!QA2|JJAOLc@n;PZ6jjM&_Bp@$6@YXHGyTSfuNSNcnj~7SosoqYgWUk z%rphG6yc&dZ;w0^1L`Hm3Br|oXbmuXr0n8$hv+Wk18|tXOq#P^Q<~Bx=OOvX)VuTc zxcBK1D^1R5BK_nCUSvf%5fZ5BrNVq86nORQ4#9k606Wp@B8!z~01o8Yqu`0fozI7i z(3Lv~b0*yQpV^*()v{{swXf!A`TjBZc#Ag1_Ig%4`(}>S5UO?in3Yvcnl5xQSRAhC2q=s7I-2yb@E$m_BKHo=rOjFlqEi9Q zZ$kF(lTuVD{=M4v(F1e`rQIJEKhCLhPk!7ZGK==f6L%}fCHDp>eMYNiG~@D*WKyK! z65kj|(m~#gofzALDRGp~AG}-+9qO49`ghC!$>}ZU16#bTx9BINbPtj`+(8~E$OEB z<4_o*tClYWR_oPUQokdr-P+AS?pST70WHIuVQOTcW7N27N1R`*=R?X2A0Cu9vX(rHyDaHQ#Zlo+iw!P8*ZG|QaRf(bFW3; z6p0ULb6G{(CuEVoUVUKH$FqIUF49gr#rQtv)$8UHMRG4%NOP0fSsN1##OzdLhsHx= zd4?c${9NO9Y#}(pu+z@fKO7S|M$X(32-+uZ&@%0JLJgMl-NS{`u^yjB$EhkiLv<(I zFd`SOw_~9%8?PG7a^dkcnS89*cH=Xc7RCu8YD~2WvrqtT&++M5&z_+0S~K*>1|Y(g z#6OLYDGGCP7fv1$Ymh;JeVQ7P6f6fMKyh5H+1TW8M;d9SBPX57hl>$Me3#8gH5*|l zZjTi{KW4mMF1r?Fo+vqNp8cHE@Vo3N}Ys=rv_N;3S#jPqoc}d$OL7{8|tp z<;PvYd|YZ0NLK+~Kkj(qYs5XCUqx5{k*JhBW@;)~%@F;qG#%@VF@pEO%4gAL6zeOz zUldPD7evoNa$<@CT#vbYc~ipjUfe6{X49{Z`iOQtDy3KE?F6gQ%AVa?rA3b?cE0@H z;;!+(UywYn0P*&$+y_fwkowSAk<;rWq3XC%K*F(sId+n18?}z*-`oM>OlHSG_Nhw7 zU|E;!oa3ainY~+nbjRZgo>}9D{i&0IkTqHg*FlPv=rK#Th5BL{>U(NHF(bcu)NI_g z$|8T4G6cgLF?n>fex zuAY-eOn7_eJO-ilua>4pTg&ZVL6ebnZoxpOqtW~I{ORPO+Gxdwd!XiBd_&}L^3#p6 zcDr>^Q!j_wJ(-oH@^%W+ZG`F1)v2MYiDWAx`j9Z{EkAeu=h0l>E;ZOTLIR6=sS8qC z5OJ6|)sD{^0Md=%BInADQ6ffa@vTVlzzs)uDHN{;Rpkj370-^wbpQCc@@vcDbKm0y zuzodRG|QJHk?H{`)d%-MH^VSN_EhYR@7$iX;~VR2mH(h8V<;BlTe80StCDG=cMJ0d+B8+kP`W>j~ z>s~{SJ|6BZm+O9N6Y_Tvv3elEq_4r zf;g=h2lsbyhGl_JiEc{?q8=oN1@@U?68qKh7_lFS**O&%f2_4Th8A3SYLbmD>hGT- z$LZ2sRCfD_{L5nuRAgHR7iq#)fCbD)a!eay5b2)t!*6h`5rBy=NP`{7#s&t)!?j9u z`a2mMG$3@e!&m$Lq-))-M(>GRL#g*>)X139LXeaak6AVdgDDULCQwrcjJa+V2g#D( z4oKL4n3tT;2S-xVtbP=TtG?Z38B&w2q01+`oBzHf2)wVPV50yhw++j8ESWvP;Kjri z6*4zLOM8T4XrUauoowr0?z<1K7PzI9;Tau(_26(=sLuMSjg8v6r_%A0`BZMQfFNru zs6Wh-+jySmK<8!*;0+HuwO$>WdjD}X zK)fDTN;Rax@e8y4`i~go9R+XT&MoR8tyfYw0VyIr2|s?x*(1kPiQjNPdwFC|!5hmc zCzpt{Cj&B1)j^R(KQ;3UJ`aZP;PflI=VwBe+8q;HCU)(vsE(Ogm-PJTAbd}lMSc3+ z;J}I;DygT9c68|VSL!o|y-n3tP#D|g!mLe!5lHtGPP(r)Fz`N7i(`C{o;h5QBR;ekq zDp%FCZ3JoNw2YEl7_AiU6hG>oG_6y=mYO@Xtku=kQ!6X|wa~NtPNuV=i51s1FE$_6 zPqMmuzOsFvyYALt>3_DN^-Ki)lmn-OxAOp_-XC+YBPfo)pAkXEC}kTJzUa4|e&3Pk!r)@h#vexfc5wGV`MO+;At zD6^;-hMGmCK&m&BNv5Y;O73}d3*7{#8q} zlxMr=3qjlubqKOB8LUkb%rG-*Sw>Z1haGD0>PA5VIb=fClhJA3WTd6LTXXCdV6w1h zvh%F!&?>3&x!<6ex^O+AY!QlrWJl~WR$K8pgwWzLoGbZ;%%Fz}*e@gYObN7J;}8|1 zf~CEmXCGn(#GddiMDn6>0+!lj$@?N}_wPrh@fz63G|WKbs6VN;iT+%nw^*W#uH)L>fb2J}3hqynWhyCTU*jmp}oKA(InZSVMUzgW&b?R=qQ?ggMhrOw+K0{i_r*>DDN{%#) zr?K%M!trT#_f1K~378*_nSmRuc)j?VaKPlugS)bPWnuM|lnlgk;heMiV{FsudKEk1^)aWnB ze!i5%F>fiM_R_{#vbLGUqd#%}1l=^`VwHHS&FtoUj~PIby>K>KbJ$7E5n6DVML=|LV-a>`$1@1x%iaHFkpXB8xZKZRDc~H% z(%vDtQ{9RiiGAEEG^q``a{mWxK!834&$NG^; zs%ALRW@4MJs zmXaL45`E{2p+BV~g&(ljrIMtL99Bj); zcS@Z@vMi)L-IJS~JCjS*#jDv1an|f__^__;i34(L0JNUc^x7YqS-vm_i`{rMcPu&i zf2j!@%o+Q>umbImy;Fl`t34}}01*0hPzIRoRQ zXa1>p0ou{YXl&5}*y3Ah@Y1;Au|j(`AjP;9mTO=&d7BN$Xlm*xc~7XTtK2a5&EP4` zM;7nZSx?psnLD_rxcE5lX83#3LaQmmOnQsXX-{;$ofwMjtTPg;BI52OI}A6MzH2PE9)k8qG|_-SDomR*A8M z`S?figH`sFh08jVyFZN5oz>>27wgezyu-^JMrD zos8h8&D;zeE-5`P?J`CicM&tL#EvEnwg}p53<`)jL#B zinq{_O_e*?pD5Y)%9J`x@5Ni&-5#V{_`H_H~!iSAD-8 z=WwSOk%Jyq#)n&isZ1YLX2$lM@0kfcn|s_?TVhSjryKzHE;n721-`Y&`nJd#Zj=Pu zD)+Zg*=!`$*}`nFh1h2Ht67XMZkXC;lTsyEzFtoUhwE}yZ1zt;ex|Fu{Ze^@Ex%W< z`HTB=XUCKOZvgHcGW|V2)eAjD$TtI#&*a26m8BC*m;(+XF)cF-Ug1U@EFcHdj_(0y z8>#WGhO+mg0LdT8`4+&aUWF+-X^IifR#<;Asnq55oh3Z|W!W?EzZ=m)PDdAWwK_M*5 zHKzg^uSz*G33JO@#XP%mRJDjF5|(K%EiV4Sqh9M!Yu2}yTx@|5!}ENzrkS%IXS!Wo z6}_Fp;YP7+x*4t&aZ@M>FJnb9wwl3UT0yi_cXXvGpmO1hIG_Zh~6n1Y4Fr z>p>|&9(B;vA##c3&Iv8tl@dc%gEFIDqsgG$LX><&EwZv+>QxcIW}FR`r)$$^HaF&< zxb@ky8gw=3?;xpOM_oYDB zM%Z6ljaGuNa^UJU)aR{kHu3iAGCJ5RI&qk=qEN-`=PrlB0FY>zzwKjwVBSCA=18{_E&rmxNHXn12JQN#D z>}V-8m|77E+R{Mm>F+{`f;D8^7i0P6VV2fbCb%Th@Y#PSN(ghgC22J`4 z_WvwpTV26wfm;=;RsG`n1rw-t=W2abpr+lab)jZ$T@9Od<2l{!%#2C_x-&5|$?Lpq zzB7%l|9Kqo^M_nK|ASz^u~1{)0Me)yz8)&U8kU_Nr<2^&xrD7uZ`$naCQ>HZE)_w2 zZ?HO%wyaegD@!a7&1Q?0TiXyMY7X41Vftv(>`z|s$iiwGaWQR@sSB~?5aYf0%8i04 z+xX><{@#<53j$2bWpp2hs6Bgf7D<-!@|-&3j2dJ7W1-|wx>*U z0H*ehS7OV!6hT$eC{dsY{NJNpo8wb7gqzmF1hH(4!b9@0C>Zu%rB6iZqglkYz?m{g zFN_v&NcYT!<}CHlVBxZr7NO-7qs`D*n_Gt>tw?BaGoqH+2G!8vdrUZTwTy_vkrcaa zeVu__c4F4nNo?5(DOrF3g%C_r(4bBb(s`YeAN7JDjN|jAlVox>W75Ua*AcmjrN zKIY}-S;zQ}0*ATV`#sUUca5Utbxg5kZ$?=ndQTpfF3R=svNy(`%(7XQdq5Q!lajKZ zeYlpf%{95W#CKD2yCq`fmHlyzil#;_Ay$);nw1zHxKO_wqCJyy8(QYiO5vx6JSmQ~ z(!$i_$<#i#0ujv>A~qfh-2BlCIKC#odf} zQIvrv#X+VZQ3{126f7GYves~|&B*Um`z2hK7Z^Gw1xrG>P=h(T!>txFj*Ipv5Ec zt;-U=q#z7RvZdK82GtR+7|YCeFdgaQgZZdf1JXd9akWVUnq?GbN6kQEE7eHT_Q34E zWZhf&UroQ&?+r_cvWrvD=$sS7WOM?32)~8TO*e8{$WE6M zu&1tMs{(BRU#robvYWu-En;RYVj1CCwq2Keu-Y2PUp6IKAoMNJ zqs69|W;d<3q&!4tU~kY*7$2-(nH)6Z3P3OLE3@IGY+bQEZ<2A?84-JRidFxy6NauZown z<;Rf5No8zoE+biM2=|jR7|^TL{m0gaIo?gCWS6XoasLpGE9h*g8=Sre>dNf=#eZS+vN+( z^{NzKO6Po`CoGtX!rO{Y&0%r!VCFGxf2j~c?7|T04baPej`!EzWui?m@UH6(z?@oJ zRNB;>C?x%{7+Meq9<$nOcqC$;!rLzGSg2DvUipG*z0Zx!3cKLM@D(xe_-(ShKZC7OFT&B zNa-~sK=QTRBKimgZY=9990ymw4J9XA_TKL+b9GKe`7bb=GGUZ{YrJL^>-UuL z;zW7eflDqkiO#=MuA#7=&^$x>GC6>W%la7S2R%FWySk1pS}ewXKBg;I98VKrD!5J( zjYtS-^^>v)kvl1Rx7AnU>bI@ZP{J%+Sc(PTqUlMSFf=z@swUH9j)B#?A&K&L9%+}#zIkVkn2lP zH$?5F!9)n3kM@>ZB!qnCooqX(V89_r8!JQt8GmbD z+gh{);pSoiL(`1P$U`IcsG4fY0L=-yiRvI?`ket4^E6^e$JvlrddOtuX9ePH z05r3`Aj-(ZC2#-+#IYk7s4R>`vQbKP3KH7?-3=3(Ah7q;+(Ir^rfGip2 z!dMKgvs_biNpwFS;{u9#gT=e`*i{&A#>S{A6IQYb=@2l0d45;HlZh{kLt{{c=18~F zbA|KFJ=;|&=aO|Uik&BpJuB01;0%z+9Qj6td^9<1!EucGFeoIQMNdiavg9mZN;LTx zNj|vuHf5+3UZ9Z_T+yNm4k9YuWrQ69GBHjWf{CeN6at0HU3sFe8oyf#|3|c%{G3CQ zG5jpa&_TVMT&;o5!WJG=eAT-92L1AH61sIn0-U%Or=9+UiA94*V>n6@8bg~J6+gTz zMx*UhR1|P-ykuyEF`aj(?Gv`lpXbjoiuDjz0_Qq?{=->I=CoKpJzdKnxeb|y$ko|q zXCF#x!~`_ey2zP%2R`*$$;VJ~N?Rmr7OGgrgzk#QzLq0?1OsjB6V=wcW>Esm8-%n^ z*i-ybHo$vGwqNWBLwb|iu2E4EjZ^O9IbopnsFc>Iko?a?y;Gb>i&0oHk4q`}AHa3P z7#BB+HoB?qRjQu)m1Fb4w}ufa{e(2*Wi_~!bVxNn!a z&=vj(K3+|$Mbw6Mh)w!aVN)L3CBt-Dg{{T*1Ze`t%GSR-EiP++$jeQTzhy8;N^ad~ zZ#m6rO^@X+{4p|YjHnX{)fJ7=;}Y3v)(EiC)5NEFNpWSNz)aXUct9d&Q>%+^myOa$ zoOX=rJ;bNXV;BJ#Ql^SnV#&ZLk;(0SW^bA*g&L<)u^d{k8Aa6Cw*X8)v%hql4ZXz6 z*hI@;dsuE2Syy>)EV7mp%#e>axK1#BN^t*3C(l8hLG^*3vZlO2;oyxqkZWYKHR{su z5{Sro)t8eO&S^`jLJdRG`BxR|2~emvH|%XP*`CQ{W}qG>0{?RhJ5Z*`7O)0s>yQX>y+t1qr$-MB}Sk54(bDGO5S z`5Jqb!u(1pa_yq^yH{f#O)W1KtC}m+OjmW9|6^`2S*q+%ci54TNjIOEBF{aVtg1b4 zKY>$BirL0NrCVNq3^AXrpz1`<c5n+o?h{Di!; zv-EkCgp4TH_w8h}IXf(BmQ!0NaLU!FxG-^*cm>cpw0H|>mzVbwsME2;XIG`iVa znfN7%-{j%~UgM~_ftENmca=xWFFce$PoCEGDu|{Za!LY37&!sw9-5_8XDsDKp+L0N z$yK!M^Vy@A&8`j{OO}n?PG%I;;$Ok*sj}9`U8uArWH7-k!FnB;5)jWK44tO{-tp6> zJRxMdiAuNz*jYAZ!^4%YW%c&AI-#)4^BQf=kp-+k1c*Exjc4ZkOo(d}gLjjS#wX#O zHM^Laqlz4*Ly_$sr%Rc-1zUP!25hSqX2Y)0Tn9&ZaoAN3qBtAW424PDWve*V%ByAn zM&-i7oTg%GPO{`{fIakxlfAuf3Qbf>`qrCAIXoKLsB^XjSu_r4LSvM^%Q+11m8-0f zzKjl~GI5Knj^20-Kn?F9xlLAJ?eZwip5}?iSX^53_G;+bF|X3lO7lI=hZ6bkvOkX9 zl&%!IMwqomcuuY})$cKi*c#!@oE$cc$ZPqASF;K#P1P|^7Ff6~!ZMoLLx@SPf|Wmn zlVbV+f$g2l2@U%4=&MMm)2Q4HRi<@`l#0b80Fr;#KNN*!OK)r405fZAPPly*qM17B z=b2ZfZnv|t3pg7xdeRkOrs>*If{eIvr7n(xJuD|pd&adS1ArB#ZdQv5XYLN~IDsQy zVee*8eLJg8;bQ^1wUsX|&Tk;brOv_0dobN5tNAy+nso$ARX|o_eQ$Y%{EF;MvJb*!_W%9MTm9(^ykPWyJ39<=ng$-8mu#%0tMv2W>cXA`~y44 z2oJQGp%bysXzrFvf^T-05<_5Q98N{7?dPeeAO4Y(DN}W7*<-OMiTqLcEPgj+x%%2& z8?~J%BOA4u;!gxfelxyynD(*F&ty*nV8vj?lek{#G`3Vwg6Sw%d!O&EM-|Nvw@pZu z(&46J1AQiI3ipmgeEOKm$PB7fbYg_{EbJ6%;GyLjwq-RY^H&Blc6}jC|48RQEJ;P9 z8>D|wrYDGE%GT5iHe(-uJ3$cn=_j_}png5h^Nwpr6z`_Hr;t?-;VJ`j0$pqc=x>Ix zwy0Uvka&~E8nWC>49P1G6jG&^a0ebS2iBvu3CTE4ma&k8Rk{Q(oY7k3E?3hNHFB`I ztu&@Kyg-8XpnoBgIpIXq48rv=H%JasJPuks{>a;E=|_WBp&qQ&e2L?v>86MfW#bQ{%N=;o19|iv`q-XrD(Zmc9u;y;NE=2p zk|}f#GZxL|u?$En-q#V03U}O^dSW35mACdmvUOBRpNDrEK&dRC}x-uX+SbCm>KD0xI!0!%KOZcTNmu}d6RU|EPd&G z%MVp@wS{E%ShI!dLAeyAbhCWR!W9Awri2WkH0GJTiFvXbyp9;4 z*AKDo0>IFZ1mX-q$IKnol*JI4#UcY0sn(cAA20qE`c8+lQDud<8Do3cVa@mtvDUrg z$C&hAA35-0Z~se9y$bqHd}JrWR!AtOFt^4PpydD-3##+Ss~NC;iCvJCk!0yGYz<7x zXe!sqxCj4wux{`d@fDHumh2ONsr@MLZVCD6%-6!S$M|B9B8z57LCZEmA%D7bdFkoMdB95 zq<{ko`aO!3jD^)M!bOug#dvB)cE_I)i}Y;Oy~`zAStRNBf;NHZMLvih%n7OfFgX;^ z$@*OGDvkmlExRTU(^Jz($KZ?=YF|sIa#?rXC|xOA1`))?bTS)lhIs9%_)UorK2Jm& z0||ts^cFat^fXIs=nd4XK$t37L{qBvCeet7K-8v!k$~j*a#3fzZ3KD%S3;8t`+D;u z(ene8`;&T1?gm)}WM_e8hTD*?NKZ&d7T^fub)**T!TyZYf%3c~j?JG`0eyFr&6zSi zvOD>6gatFhoP(iiG+bpVz%{LHD_b9-H{`1JBry{|+^t7K0dkqkeBdyE)dfaH?QRq- z=(bC=FdGfzNqUSu=+r~5sZym-0u|600U;O#9FsrN+_Kl1dwS>Vyr@GuHf+XlHw?oFZ6M@wTnw2ySMjnSZPjBJ#hZ$TS+s@E7{2pX5#>9BgPU5 zZ9cj76?OY$G-} zvH6v&h*^wl7y;%9#aTXn(Vw9V3%+H7-yUuurgdiqUmD5%*UUZZCcUM`YbbWerH{-EX@_k>{MDd)Dv0p>w`?yH(3FmM63kP$kn*K+Ho2 zq>d&QrCr$Pz}<6UFDA&8dXXekffa%8c|J#g?=>JN?idmSaHRr0g-)WA9g6ru3UlR@ z6o{$H$%VOh!d!Y_k1Gy^Cpo_;iAabw#U%K*dn027HN>{hHZhW1p`Sa!KKM|Q-pEK? zrNuB3Bk8V4NPZUpBCS%W1r+WmI45qnc8;_uKX43DFw5o7y0cK4^H%u$J$An)_FIUP zJdQI?tfOXVE$d`ZcWAES6l32OIe210hkVAF)DdYZ5q`(MKYn_U<`f z?GqK4$j24Si8>JVFp%~zNY?cPces(8b8Dhz)D=~{=nP%sq)uP{!Lvd#o^!gK>Se3s zi6b;Ul21KmDl5IW@P;+cmRA>Da{BS3`IOY2l+)7b5}tDW&Mk}h7nPOFgD5Ey8xL{P zUb-=4mw)aCkMigmI))fx2?oL@1{c>X9jvv3E5@WlSBe$VQN%zx(aqIKFSoX~0n&tx ziHDhqhoQ=Ezavu~R5sGAo*UGQo?-4>8yE9*X+TYfIRVVDHWL#QwkBKmD(Qf1>Lhw} z5}=>Wp@WwoH{?W#?1@Q!)x9Vy5Z!mrocwEC+U6jW`o*YiI|lYhU}c)J!9XC)_c(|Q z!p@nxY1Dkcf;U(VZX(nftTz(4*Y^bhPI`YxA_F$XnwFxzRhLe)r9=rpi)$cf5^_vn zL%u#x566@2*;T~@#Gh6E(J@v7!_M1n_j(D~G*R>wE%$lTzxV(mg?mc?qgDzxuYqgc5^-UwCCF;;o4BPX|gtEsv7 z_d13IfD@7!28dC-5K6~lUE|4}SM{VkiXojxD4}fbF_GYIDw}1mE3Q%RN~U`XW|a%O zG>Eno@UlnYuqg6t#kz=xpkOHIA7B}x%Z=O&ihUCNNAU=T>gj|2fvm|=f$i&W_%iEH$55G*0QnIGarxv6#NP!{DEj(5hV0KYFUbB~l*G=IYF z%{o=6qVyyPn)_Bw=INO)1Nej7p`7FmW9nI`tn=zJ?Rk%$=AKImi%GJLBROS=2wQiP z-u^_BHp=6OxGARg9h}_es+%XfKC=UcvSkTH_HaIb2%AXDRRzO#5m;=@IcTz~*E|(g z{vs2-f5shz6}6sZNbgDNZY;)O~J5gLyqn`1+9W@RcDG5cq;^vU)y< zxM?ash4ENi-t$b} zyXK)D>^{XB>|UkslXnA4I3m~F#=_+EyyMR=Pbd*=kKW3yUE?XnY`By>B9fitb_kXp z?A4YD@1&(Qps+KLrnv*#z6NFZ1P<(9ctY{IT62ws#bmvz*qJq7(!GKcIIyDbI3QbhY@mm7 zn;b9LrFpe4!$H3uXvBK4TG$4jwLNh{F9F$;&F{z>&QpX!zdFIb2nUnA@~U`k73IMh zd{D@RhB=>Z3C5By$@q*3>_}AdfFt=w!O8FM=~fg=67Bt;&vO^D>^ZO4G<{>+N zKM)f<`i17@Cp6AKAo5+lfeF5Rq6R+rMJw_b>{px$iued%cIMZM_np!%Zat)*-Edcp z6y|Grras<6j-0{eMrEviMMTlyX@KmHa`lkjq`f3@!3|?Z%?QCsK_RqWRpaSDDsu;m z#ZRQ_PK0?eVM!iobk0t~jRoO3VUR=t9JoKy)(PBomCc5cV87%-|%=$)yAAW7V7T zi?^(%PN(_^v~mObCwG{CQi-QV!N*?tj^NH@GbMaUdRSo(K%2mAt$~v}vL_zqJ3?!% z$P=c3;|oGb&vOFcwst}(!9>4C?w9giLgTT%fX;PO{GD?2?B;jRS`d)-4B&QK;vN@- z=I_ow!gzOdH)~^S6~pr(c&mDxXSSd+W>7=A^J${1rip0-$;O~ivPmjgB{qyPs%S$I zt|f+UQNjFITmsm|ApK3MFE`T`^nlet9;Ze3pf+Q58wzKDrb_d)Wd^Cr`=t{ju-Qdc zu6_ohvVI&*b$)C2O{mWmvAdrNN)tSP$VM`wbv&PMiJP0+^u5-(J%R2>d0aiHgn6vF zk?4Wnv-vc!ABEsxr~{I})i(uU&I9pZQGq8@YK67)XtaOOt>+36nid6YQEkXF`LLLcN%J$H+>#^^ zyPh@e-pzHC;11HGN;~A>AOUt2+$X<4yZ#$nqQV~ zh5pXMDH?$f=z~9j<{cM0AStAt{+u_jIdvWyE9`SU9@M{?!jAZ5tMw=7R}$^Fh+fIF zg+sq>yW{b*ug3?CL%(DDZ>JB@?%pn@YAad@G>gON+S^6bX$><>3ru6$Ihq-QNc+r# z=!x+bfK&bJNP5D>ul@MXm@XM=viEN7Qy(YazyeTmP00Q?^3dsk3v2vU=>h@j}^_}r&Fv{xEUwYv@Uw?SXAU(cFd`e zV2?znLJ*PDTq69i!jrqRCZ4M^1mvDfKt?ku@{e)PN~sR+ZfGZW1hY^h>^XKlz#HDs zO}^QiSiQ}W{ZVrawJI1a|AI_^Hf#bICf>bAzrM0Zx0Ybl`iD4oNmXs++AJ?apR&`k zE*JCXAK*y^J&T^!wz^6)pQct+Z5N`br+oOavRtoW<}j@>rwz zyQvm;6kE9WffUuvxCyfT2{xP`0qTX6d9;gNb7c~pALaJBA^SD2PMr&T3uH)W7(E*( z_Sa1)aG{d`OR{aoG9%rsak)}-w(K_VqpgTY4dn_GbGPE<7=b~peySJq;-Kh}7;IC? z>|!{n91}H?R7qxD^|3I=0WFbNs)sbg@25!&9dNG%kWr2D1)61yCkbIugaJ{li+=qn zH;oB9JMJOUoM&&QS$oop;#ZkN;5lxlF6wx+dQrtlMmMQNs4~%Uk8~yNe(hvRRi7gz z{*b4ud%8-?Zi2&C3~S=3VCDc$K8EZNfbW?N8$7kJ9uw33aB*q*M@X;?E;- z!Kzd=Kce;}H?urHB+`pA{iI#7IxmrDaJ)kqJEAno)VHWrC*z`LUQpelT0AGs@pj}> zjxhOnJ`CPX*C#vB3~r8}OPTW=QJg5%(9t}#_!~82hXJR8@rJ^5XY@CYv>4=%!}Lxv ziN1WVM%riw9=Wp*T=kJ8P#g+q&J5wY!nUh?B^dKd$a|P?Og&xSb`Gm-@o=+rKFNRY8WJ&61n7M2p}bV~oyf0ciGTmF+1iHNu4c_~GZ5$V-eA zq^{6q=NZK^yT2j>z>DA0w8{;`XrHQ`V*=>=$_*0;&p7uaAN{2Ikv|@DZes&j1Il;9 zJ)gGj8vBq7&UZ(V{Yw(x^@qy0I0@;=zz=hE5m0x>;UtgOxPPBe+%a<&g%8D9RF-2!08L=gL31WS^xe(FG%DVV%;`lY^eVSfrmRcJ;XN|@mtV?yyV6}Yd>6NH4S4&0Fr ztNN_!vaC3IG-PRll9&^Q+2~RROgng@1Gf*U9K^y&x zn*^zj2YZUJ;5b+M`31!)@jm(M<*fAh_?Vn|bh`h=EpzE4^KM)<6U8Y@Mc?M3DD|xY zU&kHChf;aHU;0fya95c4Gs=YZ7q@6lYOnc>$#Nk5{d3{1qk(GR&{1Qxku0SL9IykZplJBO{Ck3g)y1f znN4lOPcGpoN$rE*i8X%2>cs}Nvp<^^PN+qz-;hZ%g>;U-;7_U8k#?dLc8aj%Pw_gL z!BI6IXK?xSP?~Z&yi%&;<7a4l=$7eh5@}^wRdfC@mK0lI@I4YcUV4i&MGZ8M8j*R@ z3yWEOK#Asg^QLX9IMwJW&38OxyvTa=sS^IXeg<2=i0B{tUBMY{l*WvwT!NK>Mc%On zb)Zp_nyD3DJ4VH46-yxzKWK1>#%CTo`Y^`TV-h=lIcDv(MKx|12h(FK=Y;)5WL};y zIUc3$i=6DNp68!|)jbXkx6@pIj$RV8{}K>qPC`i;anp8OIpSvXRIXSX;@GpAmg=9x zq@I7CEuP@>V?a`1Rzv_|gCUAf}i8>eRrs{&TqwGL@J`0M0Vm787)IW-r+S6Rka z`L)JWX^hdodP(_rMr)!}N58W8Vp}oKZ_pkblxJMmC7Z+9cYKWKO_iIvqj?#O7OZ~w zsflG{4!fB+&L(pV&kX03WS1)eN)S_g%nuD0mT65Z(&f-E*P3n!&y+bGM^?#_Zd82C zMbEBgpi}}Y1DAayQ%BEnWgmhxd7>)v*Tc$356&E5-7U?hS@S@rGvhLpEg;M#j9^y0Me7H^=bN-nYAHyQ?y5q>1IlF*pZcM$l z|5Ek$g=lxzW}ShC!Mj>*Xu!veaYt1{cHIz<>+{Cx?$7Z@|IhBn=S9fn4bUr9z|p_C z>!3S$fqi~$TGv_#$v&^*UHtv+D+fFuFUDfL2FpcT&4ca*9(@{`onoyjn+-iHhc($- znVNJzMA^`J=tYA67kgpp{C2Xa1zQ2fqC*#vvgyFbu@w$mL+BC3Xf#&>?v@%VFULKw4GTrijn7%~W-QZeFOgU~ZmTavsJ*fDd!(`_a3@X9dy zy?<16f)Q!a62!TFy^vq0Q@Y#+#swf+rLs77U4vssdm&~PBtF`vvrtbQoCdt7ED0Hf zszR@;MZpA18ChJ8i1SNqX(hat51Nhc@~D@2hj+UKamw$v^kY@&Av;LXF@6S-uFLV# zKlallp3T+WmY=f6OA5&4-IPWk-hM=pqINjZO-n*MFPJAN+Lw1dQN~*FwEwV7-pdXyIs!b5&$bt^K3#Wio1~Ff8rdIG%J87 zloEUb{*9JZaM$gqQ3g`(~_1fu+7m2jo37y5u!OZ#H{*|7c-q(E3&-&nj37XmOI)El18gfwWnZ1`P3rR;^N*Q zP=D}%Wqd)eW$F7mx60&`6|b7WI1#s>JJ5*8&h5$k#%7Re=PzA&I7~ktOD0>kcxKK! z=O|6~)K--8$EQm4l3-7+aP({uf~QqYL|`k0A;l6gNdARsz(R5L0Igo4t&Ppre>m@% zaSD!guzHV4^D!~`n&PEX!+ybIHscS^G7N*#Aq|Hv%C(z?E)1PK2Ic)`>}zVR$S3a0)Io1 zvIW^4HCf18Alq5sw~T3C#d)Mxk^+x`N#q6!7xV*&)RLgw>Iwf0Rs=uj`vFqTKZuy@ zJu^w!Nn;sz(NF1==rT$v>x%LWbNcaeCbRL0f_yv=^@)O(ZYKprv`c?sd-Ntg#l6z* zqVK92Zti^~`sutL5DBGr0fMR@mc2XmZpg`VC~nc9z6=f3gq+|l!e-`x7$HKC`(ToUYe*CQc! zepkQZTq7Y*1%!BV8jN$kX*l6~rQhvy%txBwaEk~BWgA}gLT5nkw*5l!g6F!s$NSfJm+MB?uO0T`kY9F_pGY76YT?9G{%aDxbd%T-I z6UQrz}0`q!~&TSVk`pra8Hhe_cm{$?6TQh~9bhu@e*Na?~tQ zig&DCGDMQGj8oGHG5%$4Y8C%J4G@tPuHDkUg!T#kJ6%EL0?waWsU93H_zAIgufZYn zAuJx9;5G6(<9OYAn45kX(=CCQ>yRKbz0crcH;reKz`968VNgaZ#J0xzjiNU|LD3Xk z8H-vjL9!a9TxJw2<`p8{DJRw+^YBWb*()72?dJn4ID&X<`rS9Xarp`z5MQ99%_Vnz zirfNKl*podL6TN^N*quT%Z%%sTe1@~;*V+$;GlHn7XC8TkSPC$r@-_M`}i%FEnpnU z4VM=xft4-R3OLO=sN9+%*lIk8R5YD?OG_;{-IjMoe-R|;C6ziq-?TZGVSda zs28tF*VPh&F>T9!(?4$jxM+>)_dsA)zmM{%b9-RZsj)j$+wA4WvN4kI$LQqKE5G2% z{&|lzN?-9#PcTV3NUeS4-!UJrjFTJ0YWv2+G{7#QDY+WRH z=~}BFDV#b-I|Ab6GHOpnH@c;y9oxS5#1L5>44xHriEfk1V@pz##Y(?Ootm?n-)l~oYSUW6LEnHd`<$J%ek2++^ zm>17RaCKb;T%@-N^njx%pkNbxj%bk77@}em{Py;`c)t$U<30-78a0h2y~tp5hEDHe!T)}4vJ!!y8UhCbI{2rH>VG9u z{2yM<>bkC|=2!uJ6!uFE^!8j(BIGSl_6TCB(QR6xXn@T0d|6tMEwe3vyyx`aG7R*D zND?ohmBuH&3#a2)Oa-1zWriN3vAZ=`OFYNk2gE(40>_j#Q)(5)rjNfLy{D(%{hxjh zAB4bszhni_29JYug_&i*Xe3sk*|U|O_Rkgvk?DNTn(_k7{jJgi@@F}2e3Gggb(}jft$JS7W$PCeG%3? zO4hSE-=Qq9T}@2A+pjnSFztYh+D&a*6xL)qK{})3%s2wPqm88l1ha^6vd>wk zNu>z%7AZ45>eb}k1lq`wG&iiZD{sAaM#vQxea^#*U=Ozj*)*|*6p(%Nx04tb61PdH zKOi~jId+3{AqGJUd5ip9Sqo#w!9LD%Mv}Om%FA(APBcto;%v({6ijBB!0L!nec&qD z*(-8&mWXJG`A8Lg4?Ny?03qcpM|6dQRLH7e;i$qN4L&fwTxZ-3BKs5+Rr~WQ^fRiP zGGlP+PD_KWi5G?!E3rW;7Cc7p5{nvgUbguUU}!+yK;l3;ptjA9;&9Y@Z38KhlmhTq z%kmRxx(6L^NxJ-L^ro-WWxw;Q z2kNH5&&6Y=bbagq2ZoJ)Ivu^fahtdpP*E-F|VI} z+AEMuLU;9Uh|CZ6u{n26LvMtoTfCUA{lIPk2W{P{Tih5~Ut&$pDq^XrSVj9)!8%4C zi)a!^SVOzvZSKArYJC47B`|75PN_L#H~8j$4{n5x@9TRByQb@8U0}3)KB@`SVZ|gl zIk|ldn{U>WI)AXa#fYpifn#(>$-Wqq%H%6J+rm^ct# z@a7u!?ea+504_|Qo6F|H<4J#XEwR7PsLgV*#=_v}W1rd%QIl<2YwY75td)|xN);;{0$p>cA`J9iPEo1I-0yUq8#wvt*rOPr&#PRH*w;?UZh5RIOeWnOW?q!R)XC>VQ!;E25RV$cx(Rd|7 z=yzKeu4GYNLjXylsHNcuvraKII-905%UQjr-l6ahfn=mO-fBM|O%-gsF9yPWc331k zEb_F);_}T+j_^-w7^AU810Qc%pDm2 zfdz(tg9V2FgayX`2P9WM&N@3nZS&H=KtPWm|1N^~zZk&D(VoG}-Y!l>SYen6iSJNT zt#@338j}V!3RjB0RxPxHAxc^wWvl5A#k^%>UKM;55#_ws8gDc1P~57o^1Jjd#}vPu z=S~i|DLr0Tu~FeRbd~)q$0d4q3HNNda_3ndUuAb)$sfKmhX=p09nEQajJ8DSW4;O% zqqG!Q%!yKlLD|~xMLQSy#crBp?FHqL<={lKNqF{w<9o`EN9D_=k}ew`I*eK}#J_IPjH4~}A<_7p(`Qfs zhlcT%B7OhmM&w^RDml@j?)Xp3>7T^>zuyoimw$R)+^o%ARXr4EW$9(;q~(>Rs?=`f z>11aQRi0<(L0MwZ;AYX`W^3SPYGUKiazjMXV&P)tI+tSZWnuYL?H*#5p6+2)9%vp_ zP-Ia$QDS6RmQhk6YKpKwbbK(X1_}| z;@=Gl1Y`;IKWJ*o{8LjkcM&uHzrRJarfoTHso{ zV`iT;`N&_+j!I*^X)AuIO-Fb^ zdGl{qiCbR7F`jDhvHJMm&VY7Nl+b8`#;!@1#S3m);a3DvpFj6&xeUYGuOlW;gJS$i z;t<-<-0{Lr5Za;eJn=tmOHDrMO`GtaQ~;OsZ)^oEm!lH6Q?tY9t>!KEYSR3~kEn?+ zF|(w|ZAGy@N@VYkeR#Sm?d;A!c)p326Kl9O^6aY?S;o)8aT;{9NaLdG<3!-b(@*pX z#LNOkGG3v^ZmT-&X!G})X!J~LS01D8JsR9_AxZ#_8D5-0`Q*p%&eh)#TwZKf7lmH1JUj2`+f3`ZBCt2K1P0 z`@Iv+d@`md!P*#OvUrTJr20#zmQ_hlG~>|5r8MfjMlh#nZKv-JH*RWo@)tc=EqLMl>c2f(TBoNKtaPRcxJ6e7+Iq^+yMk{ryJPds4U5(L zhPg?#VC~BfVAlO#o}9$ohvjwy4Vh%(I0;+@S6CNS>U)Z<6~WUhaU;BVM5hQw&BaJ0#wz9riHJ zA^L`X19ta#{S@Cp14a}9f`^!&GVi#uEKzL2i@Pd0KK~Zaz9@cJhfnPWbw8O0fx|nfXn2ssK7#kBDNwT%LGGGa+V^P z95ADplY{EG`EaNPuhmuGw4qg(j?{YTQrF$u+_bT^)$O*b^=M9`@%wSzrOT2giCRc7 zv^eQ?z2Sekn)Xk~c;R~nL&mRla7!ts3&Eo>Pf4ld!n3A-@qEqMs=4O~l;zr1-oaS6 zN|UUWig8!-KHjvVJ8+C=*GU4$NOAQbLW`U=o}!`B%NJ#sVxF*9VaSqG1yk)9hOwt{ zyc_>KzAV{K98>9o(sTwh1+6V|8qqmGtb>)@ti`}KIZzL_1xS~GC0W~FKtW`KHg?S! zDM5^79u+mNx3qnWQ5f12Cg%)aU$2+(VL8~thw4n*4%as8rH&s}0v7=XGC5%k2=w|g z#Faxsc*|!?rDP&}`LW4u(64POe4e1M)V(-9WA$=s7G9e4Wz$ z2U20UFB;29xN@y;5JY!bv&b`_Ii=iN(<}@7gv@CXY4x#zU`v<)(@v#s*^C~%`Dv7UND1k-Db$b+XI7o$*U`Xwm}nNy@K zyH#xO0_U|cr6E{cBGowC$@rxuMFzUs6XCcnL#L9jsah}jRRuHI|GoIUCfQtUtz>7x z2h$uzk~RB4mFJ1FF#=LvH;z4z4B|56M>>zGTq`7}SXK59eneAOMz&DnFwNF!@Bu2B z0!U8?ZUDjsjyR)){;Y^i!|6CI!SIAxkDY!roDm`EU@~O1vUg~O!wb!bX=#F>>0?2+ zPs@u;goW7h>d$3Qs8iHp{Kn6@Nst)zF@A&vQU2L1TuqiOUp$AXWj=>fKAUhO$iiD3 z&`uY&&7uH!)W{W9#)}OxDff@ijU)umTdIF}o6Zo1MC#Z*wP&FfJ{8LWv!bsepo2eR z13W@RD8ed3&ex5jy@?MjxIo77L4`#_^Jb-;S=lknXm}s`oCrgow;a=jk;_cOJ81HV zlGJ7Z3Y$=}F`?Zmp#+?2EKA5k1ssFm*V<~k2E!&91)XwrG z;|i9|CZAYzRIT%6ha0uBVCWPEKSj5z1k;Di^`cJ4eqJTZG+t1 z2E4~hBQBFl4c89d>I60j6xALW?>R3cTyRv31M*g;)!6Cyx3EhofMvsrshMVj#ts*E zJ>IUthY|QcEWvV)^;7Z-DfbbeLa>MBR)+y@1Num~ z1>x1}rB2$u#TX2zMV)8bnexRT46sFD9B00AJKrA=M1i)bFnOnE;3)=x3?)6`-UrTc zz<@IvT3tTlr{69>^Gsb$mtJEiq&6K~NrjX_>7EV+jCF+9ko8$^tw|H?e zEbq9S1M$US5FYp)eIY-a-o}CXm2d4M+A)n8`7W}bIe)VSmDTcUmOfwhTk}FzS2YOc z8UH;*IuPxygStH_!J?Sbtwx~DdSzgQsa*$u^4$oHh%P(Wv7UTW1RbG7<- zkU03qx$7IWUZf}CazFfgf^@-xLs=Lk1ig!xsp@c36-8MJ0$M4A|CAa_=sjbl7w2_R zFGMmbYjumo$j-=fM-@?(0b0NHbu7f3OLK??RxbR*1eOc)ZTegG7qKB1+V+*~dl_Su zY4{(WwAVF{F+ctEdUm|(+d(p}akF+UV}~A}47RhfpQW4zaRTFeDT1)svj>U;v;_7yqA1n;Z)KW{@jI^&%FHYDwS*rMH%2%uVYfz# zkupYc2P=86D@H0cI6tgt-sd6{s)?E{7jGCs2dBPCRd1YN&&>*l zZ4qX{3E^3m3F9FeVP&FFG>ewE^E_i7c}FSg2ds=ty(#knI0%}ML4j=!t;=E+ndeJd z^9{F@1hdDpd^6YL-;onppO8~JY;!@Ao_BC53C3rxxrvEtJ}SI&mXEf{HV8=QcO#_X z?8`@oox#?ALoDxMb5mdN>DgNw6a@pW3qX|Dybj50->|%{{Xy4Zr&)TF55|}Hc@0mc z1-tI#@{U~JGq7@XCt+tw4Pm*vMWWcZWX2Ox`hF-PwC`oD!qxoPHC^$>&F(V|79`o$!mo8b@0;bM33SjQ^Gw6rFqyrj+XFAC@I}mrhn6 zC5{T2VnDrxKosy?#rB|$7W@rmu{CA#?V7X=T|Qx)88TW|1%)ni@n-*!H<-2}L|lR_ z!bZ(hz;81}@b?8c#AxF5#Gj}BtP()9Gq1uU`bvUGA4HOxX6QK_KPAhQ9WT7$v32I{ zVAr`|ihj-{RYQ5h%Hl%E2HqTYMv%s} zDGFv!$q=CJS%MHC;&6JGs|+dC*FO6e<-;wp{Rozm8D(yRohY|E2`5kQ!A0)FLK1rh zW-%YgAq;8A4AV7mH=)e`1or_pjgWl7mzicc#IOEYO@VgE@%^!1+Jes$Q453HL#toj z;BVMkPQYq0P66I1a3}(3Qhcc3-J*u zu^{|`4%QwjtXrh-h@-;#Og^N*G@Fxeka*S-N(N^0R6ZccP)s%rp!&j#c@@aL71+P8 z77NiIo9*w#E91%x6jPu1N%I55ub(Xbk+llE=llylVgw-Y4w6vMJWIF}KP?gz0NFou zlpy~N-M{mD=TWZg>0|y_$QNNduSZ_H^An}t_IxvX|w)Y|`;-w&H64ZI#zbP2u{I9gS8Z0S}z`rXi%_IbTJm$}Q%JYFCD-oAXg=k2sr{ z6<(>w;#$n_+F6IceA<^pqi`=-I_pvm?Xu09CFrs&=N?&!pdP_|EXI2bj{h|xaCk=Z#1ocnS4I6k z!Guu<@2QRKeE@E%^v2}O&VG1j`_uO3I#;+}6wjm{RN<``gAOlNlYW%q>m9y>?Osiy zZdZY#nntt!x-uVlPVts21E<>`>gr~=dBwUq(M!hd`xg z1z%;mmCArJHeziN+W+C~9fN#(x-8+k#alLhW!tuGyXscmvTfV8ZQHhO+qUQbPItc% zPfy20Jo6v-d4d=oH~ygMDN`Q#mJ*iCS!*yo@FTX@nf9Jp^sf-JDr4akO)6% z_eU+e3tvl8NeyH-VOUFQurk~L&|mvQtYB#s6u4$SvNwJ-q#UUT0^4F&>@XwTRd@_b z_*(*A%X$&MrqS?VM9EAbdte zCl}7yA2Lw#7NDB{JPkGOwe;)M%Xb}q0N34Us&SW}nW**@cDF$1HMQr*i*i*R4}98r ztn2Klllpzo09u$1WmhqmAg!sM(*G|A6#-eiGxCO=jg`jvarT= z)@jhd@DQIQLgKc@WcFaz-r@~2 zI4Axp6GbACGniEcEGz%7Y>|@%4oCPbv7LPAvJ6^(nmqBHswC{Dt$x{6O!Bg(ob1N>sQK=@(0{(yo<79`QH{>xp|EiDv zjZ^t{vx_x^hHPY}(kBW}OJQkYMz+uXJkBHI%HBQ1*5d$F$jaWE9a~qo$mMrblCBv1 zSH3k?6vS%^Cih?TuByJCU$3c9Vha5{-smskE>nv^S>=tOLElSc&WKAp>h@NA9AwUg`etVm#Fp;IXd(+tqVTBk{yZbItLEL zVi916VgqEw>ODh#Rs;{2|6cJ@ZjSiwV60xqw|=k8Xvm$dyBu_ppzBDr{Cc*%P7oO) zv9$~%;jvu4%0E#}c78a;#RX|VP(nEP8?#c!bGD{Lyg7d(u+gCm^ury!EhO!OXZ{7G z`%I7}if6WNvg$~ZgjiX#Ty9KWl1^HNX4IF9Wm>2S5ya7$ULP8BLBv2pH#fNE z1wH|KwYiTzN_}<2y;#ni|GKN2O`c{!TAKVi6ylE4#jQa=aQyTOJMYA@rOnRNntMI) zJM8t50d=m&jMZyCB?C%4G1ttz3!`*Bb`fw)WYBPI0%{ah z>euBZ`Su!J!SK6V^uDxJ?WW(^y4U7p|AQi~L^oyS^ynbhHhXExLCungZjj+G zwA=gS`7tF7wsu^AFh{c70c%Jb*Kw5@8v zP}2O;ji&p0`B3eGetLF@sDcS)2)#8;qXVRd+8vmYg>6H|NFL_lTs9caD82$@ zSlkedII_3{ zoT3O{X^4G0FPz!?%lo=;p(cmilUU7h5BhKhr!0VQJ@R5xGM8WXf&9~8hn{}gprZl6 zZP>9?VD_;1T444>_-xRJX#CX(qgKA2D)=tH>J{)`e$~t1?|>GH;KTpA#}R4OA#LHZ z-5^571u2w_w4vr(8kpe@gCSuE&$-&W(J$rS>0BJx8JQyHa<2=d4gAIPIDq@Dpkqd< zy(OqbP<3{ASRfCK9fjfnGbO;?=5I2u;>j%;u0f7vys+g7yan;(g<~WFuLf*^+BFD$ zimEGaa~Jl=x-tvV8Opn_xjrGKZpRa|SLBJnRvUx$W~)0ac4t3WuH=eavroy3)3B@; zjOSwU#%#UE+B_T4WKU)z4xYx5S(Q&osvp`BFCwAVA8xl)7Ely1P`f2enjz{oEk}}c z^_F-Jt9unI?d-jb@nv&}@nWr5%s~jjaIEs}XBE#4+W|oGwn|7O%nk9;R0AISk&Y`k zQWwiUU@fPlm<|~FB8;G{mwJc=t&d~$MvcMmne*!}0~xyMoL0`YJ?GzB?XbE*EQ6$KTd9`JjI)W~Zrz_;_4wda&JtH4LO6y^~{*m3K zQp4)=V(skK^yo5}J)AFM70@Lr6R=V>89GuCUYnj7HQvw(Dn$lbRrP`@5w|iCO4{`aA6y)Z^@<# z1H>T}(K#KjTV%OZW?ASkhhdMOJIza>?-)b?rNYrgsW#W#wWS%rWClyw5C|S4f<&|p zTx=ZxZc}pS3Bi3v%jtJhOyUV&HT;Cx9kYDDQW|tqM86}4=;|q$K$BR(680%JQs#gU z6t-ShDF0U?Z*Z~goV%*W>D*HXJF;Y95$wF*)eb1f?mAD11or_Yz~v^W2mtBCn*mzl zXnws6d*bn^+8OLCbLz^6Q#QLQsHFI{r_KVLq+r)cvpA2h6khh1B1v&7iWc+r*I_4w z8KzIhxLe2Z;xy4hg0_qr`dM(R=nA8GI#m^1r@9VO3*(-mYmVk)DP|KG&2hmg0-ljv z%e`em+%ryBBv;#Jwg7nQE>7YI&*8x~ugbxq>k`Hex7_7DR6C=tt+qdn1N}UQYLw6) zE|Zk>+IlgWN?R0{3W+q)CT25b-IE1o2P%%1E3cJ{ME8kXOiYmVaH2vu0gH40JV1zJ zMF9M^V4JR5%e_^BWle<|PPPbD^OaYv&6^6b3cL?IHFwPUo(SbZ%Bib&+VLG#W9pwG zQQ;c;9&oL9h5RU?57*ju6nm#RZsDK_TO<5_Fg7V3}%} z#V;wHyedkC#Q+mrWZiDX&!#2vm6@F z*q>h^_4>(o<9n3$Wfci0L=Vh;!n*LnY*rSXRz88M?%G@`dqm8fPKxr!Hm(BmKwQOeXVEfNxWBDxD(A6X9HC*LzXFWZlGba33i^}w@? z1%Y9ZA{mk5gfW`8>*n;I*gG#Ooh+6+(oqE!>ozV_C4UEBW{N_N1=ht0u-fq3xuUiR z*?n{-dH2lZz##X{&+fw+vUp(o@vB;R@Q>ZUCswjlQ@gmfPH+r?Le|%ErN$=fAS-Cr zyl!nfiEu;((4!0x7mi~@BL>>%_+%}u9N$|vbK-;#wDayhfNOh~Oq?ru8C_X@PMoyR z9^+2=XvI{H6Yz5VJ~kF}h?oEv{MHXV7U|f3RrYe&RR zbE1V?EHs5lKhMYR67R?8_xv?9N6KB-%$~{nC!=YoYtBezPkLqV?4T6#fL>RyIFdS3 zu-3bcv8Z6`=(+ky1FKd40GuEQhxSB5y+qW|&RJGQ`&-@J5f!#ySe-bN(g2ARxjZ^X zlT_bpp#JCxHt_u5#0<`!{s4ByX^#HRPCZ-&sY^Rw63~(k;ubhzMDB>wkES2 zjn|`QG%W8POh(v&c@hJvrQrQrmUYcQfpMYCKK1aXH=|zI&epkVYe@(csq_dnpn)NT zK3)P57oo1(y!Y}q)fu!zNmhad`SBRJFd_ld`uAVie-sDqD6d^M42q#v47kNvy6?UT zxM$i;=FsR@%e603THask*gAxwK*#9V(~8GdO&wj5_!*{d`)J1qU(9!V0BR|* zwBAsi>(xt>XyoNr`RRq#A`E$j>z0j;>ba$pRem}sI5&xx0WAV;yaFs10a2iQpxj7B z1jKkncd|V=ICC(vbnL?Kg%5z9t`6a+dZZ@6xi3Z;d`zdLjWgdPWmKKgUCgvA3Qo>L z`5RuOD-xXgq#pwcF=kHWbkCK@(H^8Sr1wroAa!Zx)m%CfvYuAU)fo9@i=es#>Fwzj24M5hvIdX&>&s-=E^OD)*~SBtLII!go(Dy>MXP>eas0qAMVfPu5i28fHb zo=OxL4zXaoNIT0=f;{0Xsd$|=maZS029chw_^t4X8+nlQZHq!0 z;*&Wo+qyt0L+$XJTHY^&ZQ@3DVCNNMkuBm%6dO;u;TJo=!$3v2nDGdHQ0gU>q2*9g zAVc0*G%zB|%F5}?GfL9Mjl|o;?^JpWG=QWN0#Q{!rvjcMJtHW@U zW)ly~?$4iP;!PoS1QRP}eY$JZ=^e4w(+t{2%4aXe_SzhJ>duMkh9u~uz&r(I#E}OS zY<~HE5JqnT$+cbGF3)+ZXE#)cjRToDNO=A1z<@y1KQ1*sl^`OgpyZirq`dPapW!jG zWcT6(s$8^cAs#vs%I+IlfR;cp$da7WhIq)3+t%F)P;KP7$tbf*+ByQZ&i`#peP0!N+-%XyDr zM*R`#RXY=|BCC>>HPu?n_9P=0_sewmzEbXf$go9Yn|>= zHfG7&$#>{1!7NVCB1qd&Y{4wNH=J2jF3egtW3L^U1Lf)Mio;I=oeY)tuh{N}Hx|p^ z6bFAO=cvw;Q`w(b$0njh|O0N+$$V89f6kgiba_ zqxO;H$w=YA*M18DcU|}Vc6hhwco_m@uvJC16JagCq>dCXKevMu6_x>iDQ4jto3Hz> z=w=(_=ttdc=k}uUMr-6b&ZWT3kEhl`eApG2X>#JXvkM%vC8KP zPR#!@Ka)EGXxFf(v;CHZmHq2PLxUWzH z_fHz*;UrP;1Ah$x8CjpJooVNRE!HPT0wN~R_|$<6mHtfRr}*@=T5On{VH4qjKR($~ zm=St?yDmM+!=SOQ>Yo{C`6snbA~ZvY0_qSHWvFKUW--t)MvDfM8aEt4X zF*8<&9pWCRVfeC(geiqIH9eWA@)hs9`7b`5X-T9qRZwalylTz3o)kN*rPe<&5}#%w zP{jk00PG}<(jn|s2J{IA_>zaoDnZEUVNdot1nWfmMM_(^nGv_r{v!3js#<+4^V+PP zPQRT_fYW3WNh^fZT8R;RpgZ?e&!7F174?e^bw8InB)okX$q~x*P$n~^>3q*hQmS+_ z%w%ZbtNwbA}6;b&Xitnn)1X9Ief{4weega?WYBk(?kaecs|D(w+N zh@vUxQ9~3crJfzF#loX3jnZ)vYMxDR+kU?hc*m^62In0PY1Z2lQ_ z+$_0%)N@YRJEVQ|eIZ8wSMQ0qQb&uYzY^abKe2=6KMZvlE?!Hv_KWBzn@W8p$in=A z1H!wNkWbFj`L9QJIwjX7SV$c1V07_jC#|*(Iu4jW5*VVS^xrPuoCIoL0(p9*tISQT zxGZ&}U%OzkX14_vP4l*u+ixYftnt-%~UIze1Y4RQ~Hwp69D zT7}J^x1h_4mB4Jb9|r(eL@mVL2GE>Ewvxb|%yRH@byzx)b9zR1OZjSFEx&3weq!KZ9#UX7l%7vdvmWwg}|!kJ$))x-p2g? zfi3?zqm0ru(XzouwWaV)mTaMaWw%S|H62Lac^e%*s*^2n!8u}p%a83U3Ms{vNo`JX{jL?ln`l1b0(|B}G zJdMKN{yUeGFYE)ikAwEbBKg>Yzil$dmoJP5euo(GjZE@xgOF2y`anL1E|6bL%NQu~ zG3FYh9=ZgiN}ys?8fGykZrSIm8`QwTQOq2Sa%po??R^@idY==-Ui_w+y@mu+|VZ(L;eNQr7H7?K~ z{YXBrdrmrU9_(~KUif^z!FoSj<%PjDkb{G;?}3v*-lREs&Rnvlwm@2tp${{%Z-!|6 zESs8nf`NynQD`CukW9h#S0LZ3e}Wpw49>8H{qWlMvM)e6Hy#RjL+~B5ZH=hlAhKK? ztQzn3)7q_Qi8 z&Tq{?)Q@bgnR8i57c>{tr_gBk8v$QUnEJ4+IyA{y02^rOuB6=I8y-$;1WzdqokFTG zPm5{7`jweWYFcUaV&o@oWZziBz`1PQDz$AG7?$HW8roV!i+0{9@K=2K$c8I3 zhCCWvQ};i7Qzd#V{S?ZN0Zt&RVy5lymk6SWp*LklzMFhd>D(QQ10MG-5lHP19>W#3 z6g-Pt8{MmExF+xNAMW_qysKFnui|&62UV%La^mdwm3SQs1Y)55aTGV9!1YJGF3XbM zpe=ifpbi*2cn4xwCNiqv{irgHY?I`?1Lf5;V!*18ZsAs{@2-3c#xv@C0&Am?Q=Okd zk)6LllMHljICC5(fjV}28HZQLNvM$wAlV+%r^QfNq8LH64pul?*x`uO#3EJMJHoUe zy9d~s$V_}<#$DV4fG00@QDNz+Y&TBl6fM+X(kN1vd>e|L`Ttkbt8vB$Qc zlYhD<>MSZ`a6Bn-J`iQOU6lZT>nUFxEHq6Xpd=*ulsb@=J?sVfPd4UephNA~P)P8q z@>xV>(!$1x?XzO^i0MXb{va9vGz&53n5FjNrPIkLQSm6N zK6ywVd!)H5VI`8RWK1Ra>r7RX(VtPDYLGPLGN5bHl9=DUChz5KcKawgEFcRsSPejA z1SxQ(=!@~fdq&BGNDKQo;@w2aHD8)us(OC?E2g(D@}UO7fPg&VfPlpQT}-Q3oBbch zJO2UfDzz;oWHpqZEzc_?)xO+Uf%RgRrNG}8Voj2uA}FxK_~7#9Ryy${)WKVh4GOh? z%&ojGq(6=={$!rr%4dZaO*cN5F?|Vr5@DA-Z*B$hhc4*KRMhR1F#q{yhfY18$U6$63yL_hMFSnrp&^G z~Drs$6gEix5b1Yh@(QsRJGn2OkEHu9uU z)6kJM<)fZtvr3u@PzC6rP%{?kdyP4{NoyHX7{HPR<9xU>0h=P%YV@NuGFfV0CG;sR zT9-ddBYU2*LT=OrbURQwS%(qlkFCEBf`J0uIjD+q4U1LWG{-PS1+tf`E9$2#e=yBi z7)<*&T*dgs`#W4?^mF%egI^dT0~gqsshGTEDFPwsFKeN>F8eceR`t=V1z=bFVab!z znI_%9SB#*fAo`KEM`(kMp`@A|$dP1NQG$)c?Dz;np-vMK4knmijrH7c(==q%?t$Ae zoO@U&wc|tP2g+9{dp+ldK$siNhmm_Dky4sBW@y`6niM(0O1K+P5`Uea{8c1 zrv56TBtW%Poe~9RL9ro^Vt+4iwb)@kW`KR-LM#4ek5hSAq!8mUQ2;-^NcwnbHa$!R zK;nh!C_d;0?lYPSWppoDhq2#DCoXP~==zY=*M#z*(rHB^V~33nrX5e;XR@ZaAh$HT ztIwLDTuje%BxKBJN~l!Fh+_a(PFH>zf505V*)$cbsE4;w-+Fw&3q}L(Q^739>;_1(usif(wda@<4xoa7C35yyV(y&3q4v-{fLtybl5m=- zAO^LZk9<)iO!9 znv;_La+D|nqXH9g1*vGZ>uiU;{2qsG+; z%{!T6$hF4H=sQ8wpMFHHaW6x!l-ueBayp)>)B)}xC$jDl8BbXr!l)nMKkIEzo^E?N z2UMOik=AjY@KfC>dY2^AP^SnYab1MiH9!i!5pj~aTDV>CUA`w^`E>ZPdsf(v$#K6K zur^UEWCD3J{&p;MT&}A)Pnik^7)6@%eg(&v>w}*kA|Jeb)Z4kNtv>u#v#>&@vg9$+ zLhr8I=y+Y;rlfs$5b9Bl+u!lKiMIKH|5u{8&)tNR1qK321^s`p0RAVU_^(TGRS7yu z3;Za-J62K)%lN1Y-NN!jjot{qo`z%M%8Vi#!6YKkwXG7eSTP#1h(*3cbSs#m57<9} zd=d}VP>Pwz)ndo4*G^>YpSO52c6_{Xfz<~FfEC3pMo%#WlJ$jxaS~oy7f_8;IuxHL zt6lIX#RIF=S&TgXu-Bmr^FT2&w;(k~ua(}aI~u-*5qR`|b%$cGN*#5rzZrVPi@~|U zg5jX&GAS!-t|9k{EgUhhy$}J2DSpOY)3Y0a<-p05YUn!|F5z`A9WOdfHc%t_1@2kG(iPfu1uD^8PCxMnPs zRl$nZr>$j)pU=@ME$PeFDgk}+*s?6P6R{rWue!TKGst2cjql-(U<2w?(82{j-8B8A zHXntND}@7JI=JrPF@p+R$J1Pt!-(jXYw$RAdlac$Rk0J}5K{`U*ndQIXUig5sdQjT z2j0_SAOozy{C-pM#t{9rV6U*6>(d`QPKw(lZ{{Gcu zH?OGPw;o}pNvAWk`R89Z?U=`opXon}1^YJ;kjTHgX=U_n|Hs^>NJYm1Ndkoj7Fi4d zNhXqb_=(6Gi5E$%!8=$St!KOy18-LOZPgDgI2K^esBX9O$;A7H@Y2`RIDS7>{ssSy z;_~uHUr$RwlFTo&bLR1p>G8g8{r&!NQtBQ>%EQ0|Fv*+8Zvr?f^PeSEnv}Cm8 zq@}v$U0!K*q_UKMWX-HR)RJ|D2C>pG-tAaEU$LE11>tA$6d|?STYt6cEwJm>{^(W8 zBmah{ovjgbfd7|t9}-(oFt_w>Guhs`viz}VY1KIk$O3+m$K8Dw_s!WsYZoD*%+lEt zxZzAuh&M@9iL)t|FK3O*=&w3{7hOklrNE=k2@Y!JkQaNx~83yU9~eHF;KH%S+M`j0*GXz zqwgls>M1kvK+=5cb0CT(yl=N`UfLd*YG(lWHGH^uXOIp3Meu{EiV_My1YYaIQotYM zDz2AEwLSQ2)Nw4{b2XR!!TM&;s)aAvnP9W_oi#E1L8E1q$0^{qzai69g#CQH#M=jg z(3AWEQVf4~t8&TEKg`3U#I9{$N5n)<+f z^err!AUf^GOjis4Y|tW8oAJB%vG7iii!^GBMCj7KkDiJtKtuXME5d-RLE{)?oPmNo z7`VWD2sC{15}e3};U4bTmTk1T7fI%JpUQT5*AkQ}a(SFl2P{qAuQ|Mt`9?XH1k*H4 zl=&HeOd3y0`jfXoA6E?cj7K14LONW=@_P7hP$oNvl?eWadki3ffJFaYC`+3;IR4LA zR@ITi5<}rJsOi!}6Z)MR&v^&}+>CBAA!ZuzCaEZXg}JZ@D*0YCq?=YWUENVhMEF$a zOrs)wB; zioh=)T!7K5ti`E1Jy+Fm z8FzEo&_T0UL$`q0Gh1NX(g@xN`}Cpms8l9xTMtKT91kTo4d{>EeY#B7zcMx2T577Y z+CXX=6rVs%f!2iuFSF&#F*zN#Ig4?uD%V2o@g(&p=QMPrWDlVYo<4va?0xO5R%-#c zBayX`;R(-1;Q|=Ix?H35zm?@j-i}O*$_yokY&l-Fq6_$pQ_Y+$zn3;80K~^2hQNfLS=F! z1NhU@C7QFO=oE{U)bJo89*WLLBjqMp0@U`P77R`G6&Ro$nGWwvgo!5gFMpu5Dufuv zz*8Ekd)570r@z)FWuIo2)Vk7$Mw2CXu@heLm$!_PxAiUSoYn_NH~-M9O_?XIYb(D*1XDr=YDYrXfT2j#2?ori@5^aC9xhjB=U zIi;95GC=VJbg6|2W(%>o!o4n+mU7D)^;Z`St(Lqz&<_1Z9`+qaAbQ!gijN@doa0HY z(Fa0fOYDPI&@yI)w}<&YF~&!D=Y5n{m#;TT&{pw0?)8xBu~^AGrZJ}PChoW1l~kD5 z!)MGRu1W%EHbLY33((e#fa5%MuztIt1aWLXs4^#?i0eG?1!$hU9pVk4TnD5ah!dQY z{BMUydnk3%O-St_kJb?U?GmT%W07zajXZHSL4{`+E5>~vB1)pM?|g?F=qy!=3|+tO z_#UOe2DvghtW0P#2HBC9xa@fGc-}J$+|z{TV&Y~ouJ+SLf=HwWi+uo!rBWduz3AzP z#2HqgMLeU;yoGBxXIkDRU_6_s^1=U(+UO|{$0CtJf!Pb9Mp7~ zPWd(!jvvZHI44g@^pV3zoUz?(l>GNQX3-ViK2c8X#7|DH2^|@>tNrR>FY@*RS>s_{ z7^Dsw|(_ob50I;fIV)gVVAl5??`qIx^8b@Gs)Bq3%v^@$}OU&@Ia%W_S)z89Wks{Q7>(( z{bx`Q4J;X6G}hO{{}$;;-*?R4!GM4W;DCUH{;f#&|2I4TCv_1p)VFms`p+;IrK+Wd ztcLO(3?#Jg8_wU=JlBkYM6X(zkDur+BG@Thr%8v?p9%xV#E>RGyWLn-)r9^r3*qBO z=QUdmRpC_CY*W3|@||9NWWVHX!Z>J{O6@i}mge>RJ-xlN{gL_b;?wil^pHUD>l|Qa_X53_7RhG%* zAfdc!xCAO$WA;8lbJM=ksUh|tCn*L`21hCxVPtXhwlKY+sWUK^UVW21y)=x}7!~1* zpnWc1ugI2zcymETsHZrn7PE?RncP&UBXHFI4x=zH4Zw8)%0cMwDblA|nJ^oxx}YJ` zpB^|MJ+~b7ir5rug!1?ogmrwia95?1RR0MH7P4NKojt4J1bf$^A0Iz+Gk@2qlOXRq zoK-D$7V)gy7mt92lH=l!pR8pPqQWf6tyW68Z9t`_xOqeKY!t<*D7=CU6mcU>zG`8^ zAJItN+{S%6iN5? zRUCqc+dABIaZ_fMR&k^^GhyDZ7p-g3F;;(?A#E#*ZOhTKku3|1bX%e$j@2Pu|j91h|B!!!u!jjeDX} zI3lR%zllM`IyB{?eGPqtM6yAV6yi`zsAdz5D$TQ{tYn8HsF?`&$0Bd7<|r(6@kq2; z_r#T~6a6`MU?#WOfutLhA}3YoY{tKQWcxmVyBTU^w3w!&(NVMqNy1Za^au1-$lwrC-}1jCmQF_3S)(M{;Gz!KCIxk`=?P=_^AmRFy3aoCi4NT_g6>s_lSWTnW82)ojPD zL%X%@g-&@Z-9Nh=RC%%)B=8eJlrDsI#1-v4+VO3<4ey__{J2p|C{sshX5p`=ABOUW z6&ywtXHMU{Vf zt8nIrnlC=@8)Z`UnPzr4#pyW&wYf7-*eeE9qC3qws`Dy;xkZC{leCdKYUM-6=GTeE z7Ce}GpRTTAYbngsMHrw649-qgxMsIL|HL!L#W3jq z1WI^B!kVBXcn3zui)A3!?c5dzdYm2;Q|{4OIwW=!Y(cN`#$=gX7m&PRc+51zQS05# ze9Zi~iQnQr8pIkda!otNqwM}p@JYOhP^gZ!`vPT&hq+@HwMBv~#5O5t1Q2TA9U#ZA z2SmN1*z!90UobLK_1<#}F%t7(4tH_%b6`3EnX#2PvBo>+Sdv)WNM@Dl^P|On&bq(dT zk$9iqKG`7g7S* zYSO}?pp#vo_bsjoDEEbBN)2?$3&0nx(8JMPVM`OX;o9GkYF?2X@-vPnc=EK$58#$QY$Kn5Yn>azw%XW^_+^l{ ztXH3_e)UE;Lo-(N)oi^{-`Tu0vbAz`KYP}^ZkTjFyLerdSX}uGS^Ol_e6_qzUp0a!dwbO1Qz zIog|9oBR*|cK+vyPSTFtf;`GdPfLIk7FLe{M!qi;RtAa!VjAY}IZ(zp_SE#(d8?Hw z_Vpqv&~L&&a}W~DcT0nOxG06Gee zM5DFFsYXMkc3AE#>4AMo$<`C&cICe%ag~K`L$!_r# zrVuc3?MCMA8kdZf#$fVQWkXPEl;&gf=8_`pYqKOngh|CcOo>_GvaeS2vZVe9{fvYP zkND%a&z|xpkIT@Bv6_wPh|P;cPeC+0mZJdw7-pS@Y4aTkUNK4ai?O|NtW@q*%9L5jd?V8Xo2`|wdfT*k)pWcIi^H1y)rqd&>RHdT$!plZu zGC@$YVY_B(tHLJ2hGCG@BrE~6CznTM5ROH?fz>4}0Q#{#lqM}Da{WYDIDoMRv3c^7xzT%KD_XgoU~s?tiMYD_o=m{|R4eY8 zP35J%UNxxJRVebqZal*u0R}W_CPoU%K8aSlh1I+akOto;cKLoit}OMyAx3NY+Q2@| z{5x+s=3)_1Zh|Fco{uQg!P$L+DP&a8*f9pod^b$p$6Uq!8;puT4AS!@}iU?dC433P+& zlIq$Z0%~WEJ=%ywJ`|OaGF7RcSbyi_X_{saTFNeh`>7o(ixrIG$nU3yQi8B0b)o}f zu$o~_NCzfi@O(Q#XDE_oA!inEa5KHYVU5MuLHA9{16DAsT02amZF1zSLTZkg>cT7n z*1PYi26D5R5^OVtTg=AzwGEJr=O#z%2P+tazl!UNqS7?dUHdPXjQEj`gJdH*3;9$)O}xYgPIz>Y}z`D)tDf8sz#v!=ERq_33_d`Cc)$ zqg?jNLJqCLchPxNq7_& z$I?%*rxbof-*bXeew36aocpaXA20JKyw@^qI~w6b>RWBH+X&O7u?!D{(Gl#!PET{o zCK~Q37_yvSnCmH#B{k!LHFF*4yAD>tnw`P9qN_fFCz^`B7c{s@oX-V59PW)Pa%BQT zKLB2aDy`U*xv~s#x++_mt?Eg1+fBGn0h_4UJt0B|Tld%IfPRlq9~QgR{Q!#Y9j#g_ z#76`ib_)Jet&R(oEAk6j2pVKq_b`WBj6d4}F$u;=Va?Qq)x*t3I|G90wy0}F{4tCI z*Zp8wwOFZKS}~eQ!FG7d7<26*jCbusEF!;J@jw~9Q?_=L0$>9*<#Nr7l z$G79ST(pCMsjv`+;$0$7$?2j3{J-xqEUx$nY5|xA-pYLiks7OWYjt#6jH}-c+U%vFb~j6~7rJ3B);B?g+Zk*L?qz+al!~ zR8U)@voO(C8TBr4^ZtldH;P-_hu7fK=h`{a}5nG|o?{x=5@(h`d7Wu5F9>`jd_a|m5o z7fVE%BeQxnXz-=^H0_;pxtQ0A2b_Fb5gepCbHt7AKYTBE^K^j9b4uf~N#UZ`#nhtq z*jp!-O1x!OOq5LCGi_UW*F%l$yAccJ0946e+}&LCs+Df1x_CU}i}8Mb2Q zW)aUqBk$yA**G?3+RQ6NFT>zY;ogX@h9~&-bh1lmnKHSTUjQEo9iw8jvZos8;Hr)m zn#GZByyQ0i%{g#{K#+WeB~G;qFyxMZd>s+(Td013p|bN)vAhi>KuAUfD6&h^;uD8s z?vOD7uQO20AKuoj2%KVxd#Ic`ppePi;lnqYVo3{P9fo5K_$ET~dnb|YSpcp@uN2;* z2hjUfTShzlWR!mbXfCbLoWnejiV6%Zt%0Q?!b$B8G&CvXgwW@IFD{IXQnuET3W-Pr zL)ov1ygL4L;dW=-S(xmzA$Sw*)%39P>Uh?K^n~Bpq=oGWzh?aId0T&VJn6#yZg*&$ zceDog=GwC%@Z4#-^NIeW{%WD5!RTk~0&JCVD&5P+n?y1e`d(r*N_R&UN6-_TEF70E z5p5$TroE->q96p^A)8Q^u*w#eYXg(sQ5w8_EjA|7=(6DchoK)rR);@Ox49m#usL86 z&(Ucihe=ge=5Hy1iGnO}h}hnK))M4q_9ipmlX@hVlddKQ?~pJL0E%<`>NIbS_TGnW zyf!7?8qcfwQBfZ>Y#E_zDR*J%2|-6I2VI%#bYLlZC)R_Na$>R4#=JTDeqZD>IlCnf zyJz60%yrZ(;t!YTEkwFRplO3M{R!%5MI~#{~v;Z1v9Z3{=)6JhN`u zVe7!a_EnYicCXw-p59Na9EqLl8kfw9)tpW1bUo3q#t#^#9cN=S1NgoWCBzO{C(*)| zi{uN(v@dHh@VXdhWN%1kH5}RTb6W^I2ZcHrF*?Q74ble%*0^RUI*M3#I7b}Mf$@K} z_ts%mZQJ`eAk9WPHr?H+q;z+u(jg6!f}*hLmhOg4cZzg(cY~xzC?Uvqdv18-p77pt ze$Vfp&+_46FCXSR#vXINbIdWMf%-{m9WD&vE5OsX6}sMt9u`!EBDC_)+MINkVt_nV?Tfi(*2ef2T;O{x#uoyqN01 zN4K%s$LO}>uKt+JQr%S?U&&Qc4KhCu2qWEMAKdKUNop*5vzj9Z3k9`^0tKb_S3@Fo zD_b*X7bDx>esEY5XRk)6f!&>+9LeNMEh29v0nWA7!92j#9TP3QwxVwv%|cR^eP)h@ zt1VyYcwQU4(rNG8@=`I?@hq0phpxx@$S%%SUzaA_-s$K=+NsyD_wd`M%l)JHchL1g z_Nsy8r5SP(FfyQr3v&~Pd2<&cE9~`|r1h>H+^NKBb&Lq+v3jU=GOrJJ6nemVi=K9S zTOD~G@7hv3##=Njb~ZGZTpCpDgAo7|5^Y>blFwEq&%=lp?DoD;C^^wSQ&iD3nVFu^ z6_3)&;O7+Fk(3pQ2sSJLC_P5wYihp?9w5%{zvqv$(Qqsc!qZ&?^zmzUth)itYlh`W z7Is7kfN(bq%k5Ado(SQ=C$ftb1YTQl@wcV5dkOHgFIcS?Q2Z;_p|^Ipvn%qwGEEI} z@vs5l`an6rJ&x9!(mVutke!_uA3%qB@Z$$e6T~A1d`(B-5xacLGVXwonLQsaF9SDN zX^GQA+NnJERF>mCT3)nk3Y ze$QqS)0`qqhLYCw`pF;P@LeAosqM^RfXe zD?@_mj=dJ%dY$_7SM;)$$npjBCDeXJg4qgU7xE8$^lX}YpAFy+7SzAi+2i3BUZ1R? zzd96fHhErZeE$?6W~5sr$h_`ERq@)DQQOpgaknYY)G6rUm(A{)3RF<3gjax~RGuaG zV8F;8&IG;Jd$SBnt+08J2r~};kvZNO<6WreQ4&*)wqWC|z6|+sYrUc*b@cE@rQM zap9Io_m(tq`+!%DMJGHV0HVG+%*4P4iI!a>_>goN0pSRMnjif~-2EOjTBQ0~1n8*5qCxU1$kCkLrF97IbXVycA9nyTfSs=%pg; z4y-KQ08Z(XB?KY#7cQ3aTY(qD?9286;Q<+iP)W!c^fph_M0cA$h=ov5uTL~QX0MJV z6>6KpdOoR`h8Q&g{g8QPWK+I)g)-t|)2b17nacSRE3^hHpUQDG1Tj#i!DilJy=l|g zZs2Jp)h*1%VZtst&B4Y7RQ6?p&bt(K7Nrjo>Rg1P{!0rKBRd~M&g&wadJ!;kw{FE> z5pUhLb}HdVe!U3~!mIaqr4(^JP@JG}*bRQ0wTUK$^&)&bG-;)+N`a;B13N(N)$H#w!s_g=_0| zQZs?NL-QqMisKH~$5$yU-k!s|H@|G_plCl0@Ov3rOZN(qy_nEkh8?UgtP%{)WkBE- zD|4*s#i4xBiV~MM1LnfdQ{}D^8yXL9sC3iaQhGKZFceoK29h4);C@Tx3e@C;DbSn} zO=L8yvBcNNWqM_^(`+0iJFx=nw|#8jGDI}EFK z%H-R&4tM}4`ZTFjM+u*#r_BCgRLoc(+a&TRz$_wN8^a}AO41&iceH2J`;q3GU~oKk z54zYaN2Tjm{Hyh#L3`gSIh`P*M>(4`VlSFMc~H<|3t|9F#JfxA>`dMmofDWX(S+Um zq%iv^=u7S!qw)RzIr%Rwy=>iC_&u;4`1cMaN&KM^KHZo)RU(eU-<$OslVU;-pCNe39_s0jS9Zr*5L` z-nkXGOcixwEHG?sSLw<7Na1n)cI+D|OIYto4oQrBoyjqBUn_#di!}XiA(+})*2{03 zI>X;Kb$lde9$t-D3O_j&b-nf*B5*ikksFMb9y>+giYNE4GyBJ;4yC3gHo1te;8S;( z1T_-#@-{%DJP1g~V&2o$sh`iW2A|BFCs40_53hr1TL72WY;eK}1I^&`Q-XV<2~KnL zq@PoUNSyshYE5cL1Pm^$Oe3DoAo>r$*z@}q=ky8`!1)##@NrM(V3 zfX}?{E9@<2j2G8e>&)X=fb!@Q#fCaXl#cv}C?q1jNUb!8at&$OYFy#{NWUZH1r8_( z{np^2ptSz#5<=3(-srb;6-qSpl(0nb1;tq92I7q2z^ia{@o@}AbcS>ppjlWo2{l!d z_JL}H`L4>QIlG{1>|0n7(wCOTXMLTdX4mF!O%Dc2Q;ceyF9tR&XHm^55U-B)hSp%$5E6g0=fVR%Im@Q;6uYmBi zG9p$EZ}YHiu^Ne5Q%S-C4koVPi3Yp$ECe&w69z z7k#+ki?PYbOXJx$CaOY`?@QeTRvqljfaQFqVoWL6k_+m&H3lLY8$e-Xjd!zP+|*;C}rr;p#^ zQb#w!!pGqZTMY*w%KVbgQ8q(GaYPNTy6vJ^AZ;GC&KAa@pjpo6Vjcy=<=xn>{)J6$glULmOe<97F!cu66?PXT%*!Dl zO$FRaN7V@JW<}NXU{EBp-vRAhFdP@=K2P#Z7&?FNSJ4Ab%oU8=$eW;9_EI8pk5vV% z0DKI!R|rIju&>UDDD|)c$t8@{!WYZscKd?H1iYUCNyZ-prhP;Y+uifPUS>K<^8xc9ZVKuiA#HeRhYvXdk~5IvdgM|_1yu7FPs2JvS4S4i9E?gkbkNlF5d%6 zA&brp(>E6;5qpIed~fzdt7b*8POL=T*Q>`!VVy{Z7&MMmGy7P$Mu?Kw@kT{98m+K` zImk%Bwb4x5Z3}~J4Z{70F)10@L z`6nK~d-wd_M?^+wmo~~a!dGZMAe<$-0Z)Z7pK zZFNpj)1G2_0nrsEq$vBrkxM%*w4}=f;Y+5@$awk zNFu6MKNu-O-K(G_hw5fyF{1F}uOBFX2Dh8VTuUb6nkkZ2X`B{g-=lr9k$_C@OZ9pZ z8_eSdyxJw3dlwNI7irvU@a&CKuoXABs#TmrX-aQGPCZ6ibLx#&*v%_rn-BoVQj_(> zI*kyl&7W*om8JUH(BjtZ?Kr@ZA%P#M1f!}0pN4E@^8cnDiTX#o`Oj?`AI@5u^M<&aJz#X_7ABxui( z;I$Ovb7}Vqr4@f5B{X)4(3`LKUV1ju5`(m=&x>eXEZ}%Fcb^(XHp&u*{39ngK@R6> z_Q^|$-c&cVrUN#(JhdKt!LH3HJ@$7RnU_3+FGGM1Y``?*HeX%zTM<)lO5!JR^G}|$ zgrbE=>#@n@bb@rU@m0hg({dLz|th-gA8x4_)Rpx%aHuL~~Dy2yA*07l9SuFy7VkGE>74l%2nvm?Bu z|B5{N3lG2fzUHbX0|spQz{j7L6Vo2PA5Q!y4;>KX$WvY`y?QJOB?9UJ>8OM@f?p{2 zFRu5ScZ?E(bu@9Z>kH$U6znJIAcJcx^~$fuc;ec8C@yQ68ta!Yo^UxYH@Aw8h2_N5eU6!Mw*= zGH3>Qak6tZ^-NErq^&&e%WbI{K71cf+19+mdMiFnQ-jCzU|(R?1&grwDK6{V7j63= z%;EXA?w0|U-b5EV$qBkLkf>#BonZ|`hoL%7s~LdzTX<4 zY|!wd&obcXCD{~KxWYb+Ep*d;mVW`i5O5ZB;#@DX!Y1(q5p(Hv@|(W<_c@j6I2PM& z8}plEfS5JtZVywK`g&V5Je`SSFO^g(0C1qpmthrf=l)l#YFYTJ?VLAce=OgA)9h6(X}N`3Y zS?g)6*&t3Bu3*AZmstCU9wy*O*~wA6`8QN*VT>?u9c;-tCAUS!jY|PIABJ@^HY;PA z2iecMb}{WD;yI41Z&H^iEa(fhjXUb_^>vPgCiuF;FiW!)8vxGiZAYey`q$ua*qT?H zp7%W)Nvr1+x5%ZQ!U8p@Z$$TKqE@q4+he@e+14BzWR%jCxOWJ6{oW|o)|~m%a8z(v zyaZ8dz3HkGjKPk%woL}wz+z$WqZvKw0S(Z0un;u`s8sz!aqXZsPdHWS4##6N#QaLW z5Ft>wno=;1#9HTAh%apE8lSIfh?a*(fG3fxRUr8y8(T`N!lJRZ^`j=c5Za)f;ZL;c z*cP9>gi5~}hSEf~KgwaP6!lRy{;gn}Y7YoZ`XZy?z z0s2Xbe!KkQm7p=%nF3Nu7K1v3-HF|)djeGL^tu6K*oRr%27Hg(33LuuHlpe-I=={Q z_&l1C#C`Kt#7KsMFLw{Az|*=w^ofkF5OQ=XrNto$p%SU_M|?^Ik*+K||2%6p6KM0n z9#i*FD^lxuJmTG=dohK+L9lEXgQKLVoN}@P32>Esh0-sG6Fl(DN1Y3Nk0(>0_JHo| zl0r8qKax;v_dpyLLc&iFzo+w8NhoS>Z)0Zk+sQOFzmEDuag9j zFwk@n5E|y0W&GRmA&`tBkR{=Ja~w+n-$7QOsMre9&*$vTKMy{%7#=+MdUdl!__9em zIO85PoCprNA23egsUBxh`$dMWQ}R=O?ui1Vr)rkwj#6)ImI^cq6XG;$&J32O2}Si* zih?abwuf8&S1e*$V_b}{2%Qqv95p#k7+7QdHMf)Vbf)^9;yU>9=lsUQnANj($@6NwC3SIjr^XWEQLWT)@fv5D>6zz#efKyDH0-AQ zRu1LNl?KdI{pr^0DPo%X(dBVfJ!AxOjPWTuS8Y|&wDzi{d~-S<_Y}Nh$Khogj%;du z7+KMHl~%_IM5y)m?k^8<1kkb-8Y52tWW@;d7L0dj_vbi)rr0_7CwPMB4~_VB(w}lB z_N!SlZqxW5p1uiGPJx_5yN=+1g@$LrdBfcDl3mF+X9i<;zN3<0VPE{5#{S8bV#Lsbu zfz5Hax)$dqPHOGc8BOKo3bn6V?Dn52%n1}&vZ5~VDa&06iRI{WFzeZH48DgYDf{?b zMoqT)NfJ&jl@rmRRaYL}(kypu7<^K%UUsStc50w>VE@jm!E$fz(XG8WH*js&Y3<0z z;F-%ttd?m+3q;l(ke#rFwtO9{hq0U}uh<9)JDr&wHqKP7OEz6*fYF|{_L92#Slu~< zcBz%P60D_iJ27Js(4Z-v?aH2Bsl8fA-3y=MLFM1*k|V^}w;(Ej=mFM$1mGHdsytkVvQJd^U| zu-0n#0~{)L7RoRr_(B%bk|T~Y73KzK4O41Ue4YhCeXu$IM5DN|r*VjGy)kY9^Kpuu zrM>kR{-hduReVop^R)Q7`rMG3I$*UNUzp6$&3T*|FnW^n_7Rt25@9#nG&mNo4noB0 zx(f_7+qBz@B&}v$_#{Z^N4!+qoa?BEwV|e`>bLhn$C%++1p~a`vZ%rSVuAH^adRyg z1u0wW+*EdRLWelB2V@kT*2y- zDerx><3J`zoLI^ti3&~26LT4c&fkA6dcf)Vj`Az{DOQD=KEKF%uO3ZA6s8<9+5@h) zh~sX4rePG4@$~-e0d}qaXFGo9uu4G=pldR|_M6R#sZ%PO7@T9I_~rphp)-6m??$`I z4D29HM;PI3*$ed`8ZeZ0%A(G@SqWs^wWz*9c90Ug>!usifs17=66d;!q<}ogBH=V+ zTVO1+4VMi?fsLG$#?Ql)H~~&|y}dXRN5Wr~`AHmcf)Q^9Qn$tg6t=}`L(Jv+ouZ&r z)(j6Y|E?VvQ4g2j3H*LVLw^cHOX%DTdUTU{|{!=@WeG zi*N=VNF$jpf34EZ-!!0Vw3T^mb~JeK_I=71_S60IczY<4C+r|xKPo>nadb0nu43XY zHjSItm0h-_2b!pF!Mb{2V{Esn=#pKHm{247yxc>pT1~CkPu^^X2a*y=`Snw=+Ds0Qubq4I3CMGw83VAlK&Z@?-J= zRq>3t#rjkVmvxhdLU6dlAr7OSAsgW>U_imeI80At3h#6GG=l~xfnE^~OH7IHg`t6~ z0G<@gjCf`lr{BcGC@EpFp2U2_aLOQ&Z@Zvm5+S_qxss8Y)lkw#+UqEd2H@!S$B`@TUL%I;Xul$ZcTyA@<1ig}pHy~L-~PNTE7@;Idn7Y3LqFHxi5$~eC?Bi(_f1ZG7z8mo}k&>Ea5K|{g-INTJ%$)Jlx>+ ze&%T8F|oyM9w?nB>Cpgkxa~nk73yy-b=7=7 z>fsFWypS2Eda_E;Q3=q!f8<-wbbK! zoE{2D!NX3p`M3)3DiPfepfHL!Ano<>lcC}51bqf=dP{v)Gj%daa&!*OWseJx zE{_t-n%C}Z5Z!xZBeUMC_JUACpv_xA;^BC?xBw45J!amNO}01&dfq3R=)}Pm-(t;1 z;L!2voeB}#1>uefNKjDZxKL2i|6_Tu-}C_59{TDtIA1@obr6DRDN4n;#BKb5F1j1I zWa5i^bfT2jlSz9f+t6q|z~`KZvw1;5OE&Yf)p-&zG+`w@!ep1nCk z8c3FRoVnp=T2>FN7#(uluut4ibiNszR^-I5qo`o<$*O%vZ6_`YBDM}%SZZ^xNXMIhqBOP5A5@1DYR!%j1E0fq z$7U}GNIBVVOr5ZJpY&R5AYz*>=)Zaq60XNCx0)B#Hed#$7vTH}{&f*%!l&&x73|Xt zOd;Z_1O-0-A!)B>v12AO+H1b$;5rpG@C3S?n(7lLGmQ;I{jIS&q|hNUUAqMpy^iM} zdI6X%I989xZT-da4%-BXU>CeZp@hGaVvC9Di+{L5EuEm3@ zoHd2oA9yLo0&%$76}s=MJrUh)+?@q>0>*qh{pW}FZ`8EO99-# zVxBKlPfajK-tsMne31@1G$+-P??=9Pv{;QQTg2Q+B9O5rLhN-c38;RS04_%c=d9XjkuT>gZlnaS_n%hAyGXCorm^?cBY&v#??umP7N0i}LqS{XT>^btyW`eD&e^|yG`h658g0`<((Poyx zV(#)C8+<~{*%zOmnyW^~f$86pM+p^faJmPtDR_rEutb1F6Ax~SUmgu%-JUFG6zV^I zBt<&L{xW|zH1AVbn9G_&8;R2)3SUbgYXu@%HTU4V$pp4;vx-+6)$N=Y!JuruaG6$< zN^>*RC@0)Pns^~b9bpaglo&qD%1%ePjy$6QGH=BmvNYPPHMhc-?608h4wxB4yfu1e zatJ&m>8Pr1fy5TnBeed531-QeE}lk)A#M|7aLk%sehSHjFU*ITAM;*^Ud@NnWNVeq zXlZNOX4uC|iiva8js+(uEb;3qc%{lGjxVSfY7hbzqHiWMIG2r7;>~7U>|AB@eYz?_ zQ#D+TQVe82CqFzaXiBR3)Q4nSodS%L0|G>m@h=(P$b$5u zPd9zb-Niy(&Jo?qny>ST_R7D4pVhx|@~^C^H4SQq9gXW#3Fle%$(@^Hq{$~R?ql%W z-mx!`Kf`*+h+{$f-q|i+#WghAV)0pHxio6n8 zePFY$tnFeu(cvngaK!Cp2I#s+iyqd{bilU^PbsR4V1b}V{{p^exS}qdKjk{k!+R>9 zta+V^>&Pl}&IQ>-DXWt|`Nl-{1Mek&5Wg?O=7xFN3EdYV`7P%y>Tu5(CkK)h)%^H1 zvu7w1>^!H=AH;Qj@eV(3Un>*$2&&9IBUy1ya3NuFoII!K zzhdv+=MSmegUuW81s3`Oi4y1$7{0K_-t_0qA-SXV+Zxtx7wk?XH0^S2tBk-=qhQr9 z#kUe8F_{%nMIMxH)B5JASqjDQwCbD9`*W>RV1I;G59MpwJ<7N|%Av<~Zt<-enA7#u z&<;|B9q-l&JidVTDbSyc;ZZ~L@ym~e_WWpa?FW9>?~0)h*VTo`E+V!CmqxWI$72@y zR-ZCVWlhkxX6m)}(W9GcF?`M;-av&{H9=e>)gm^ItCj@rLGzX2hI$dIHW@QKhTAp4 zTq(%yGM*(AaQWzJAJwiyoeVV&9QDNupAhv51E?^9;ved?_BmUftEYGISbds?8{S|; zGrkgkPac}Q^CnV_4n?UW>r-7i1~*H3ybu!Y=v0KG*r9vaQ>c=~jMPU;!aU=YM}>W? zL!_NIFgM!tdPjIn(4VI)bLTxa(ViFCfnmaZ&=6=v@Y$gC0L6i6%t70|KGwbhd+f7vedrk9 zt{<$>E#`KPu8`Td$n!Z7r8nCE5;y65A_Z4Y0F!Fxi-bfIVTJQRRl&r2d*l66YiQ~+ zbfX^Vr*qeoU*E`T+-CAb7gxw*KKWR-woCo`L7QH&k8YBolF_pot5eD#IdD8gE)G-#nD}!2GFb?1-dt>6FkkJH-;rj! zGDvnlC!C&|S*_|I4|#B>J`ZO1>MCxXkk1^);&9uwCcouG#!|574s;9n)ed`eZvHB+&x9!Oby z;aQT=Oi|C*`$Xr2aJq>X7#^8N@~uSJ*)Ju+K81fP5w>k%%7d9gMg&~tGID)6gH!`O zjIoV*Em|iW;V8d~Oe51Ra0yqu&VEU&-NSf-W79^H-c8ZhOJh7;F3uxy$WjBuUbf=O z`bsMHZb=Tb+;i^)$Q0u(T_RqAty%urDR^2=iTxZ;Sq>To``)*a3kCHaGIF7Qbs_!x z6FStP$hY4L66zw%GK!L{-(}eY>a+qqxI*<%q;S+#<#7JtC`&& z_6o@ljp0!KqcPA6USpIbU{n*1Ie~R_ZHq5^mhuOr`lAGBXV)7q)_`uUqcYp0N zX%8}3^dPq7`@!1L|C;~@ds`NFTbsMRiaR;$`5fvWGls|yawbv#XE_c|kiT+ru`>Ii z14sX`56bTU!65qf=?4>i!@4EaSSo{<2nRw0_8(N=|5L1QWr-x*P0W5N{QjTg{TqDo zyL+&H5cp;Yqga1{-$nl!_#cYO-vy8Jn1rH3fWSbE%s z*!;Etjz!N&MhJKbA`}$M4+7kkey$h46#@KhY;0Y6+)Gw0lmnN8|-$a7$p^HOsu# DWaaXE*n}9mu_2JV z3aGo-Bu{<@`yUSHx3LfX-Z6$k7@rJt*W{o63+&(1JnI!KAP_=#4Z^#WA2I$J^xtEr z4y#jx89e#rHf83Lk@665Vpr8UY?qX+p{rn*OZEQpMdEHY8ai+2EPE~3- ze@Y(l-!X=zC_G&|92C?#aEtWhulFr{*FsDtNCf%-}2u7h^JSmI=!19-qr%~N42YcDQo}0 zy1zV2F>?|(`>omN8}2e{NirDXpSVSS?6qoNn#P~O{cY5{F9`jPiaYf;zAp5x*t>6} z`7V}d+S%X54j=tZm9+1Q zyj$bb?y?IyQ-5PA)1ulR6|EeO}T^;Tgr24Ld1`PDy zTAu2zhK3=itcK0_h7|$EwV}eq87h*%;K&J zchkzht3XHb7ghM9B=i56qwb{G{>l>6e^HI!Pq@9S#NGVD?@BPz|5aQ3Ubf*~9qwjV zeb=Fa>A%q7k8`c=3cZ_1^Ia%E>whWq57KJxO1=94=eyL05C7U%z4JInSq={V8?XT6 i-%C6wsAGO;sQ, - scores MAP, - details STRUCT -) -ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' -LOCATION '/user/doris/preinstalled_data/json/openx_json/json_table'; - - -CREATE TABLE IF NOT EXISTS json_table_ignore_malformed ( - id INT, - name STRING, - numbers ARRAY, - scores MAP, - details STRUCT -) -ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' -WITH SERDEPROPERTIES ("ignore.malformed.json" = "true" ) -LOCATION '/user/doris/preinstalled_data/json/openx_json/json_table'; - - -CREATE TABLE json_data_arrays_tb ( - name string, age int) -ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' -LOCATION '/user/doris/preinstalled_data/json/openx_json/json_data_arrays_tb'; - - -CREATE TABLE IF NOT EXISTS scalar_to_array_tb( - id INT, - name STRING, - tags ARRAY -)ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' -LOCATION '/user/doris/preinstalled_data/json/openx_json/scalar_to_array_tb'; - - -CREATE TABLE IF NOT EXISTS json_one_column_table ( - name STRING, - id INT, - numbers ARRAY, - scores MAP, - details STRUCT -) -ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' -LOCATION '/user/doris/preinstalled_data/json/openx_json/json_one_column_table'; - -msck repair table json_table; -msck repair table json_table_ignore_malformed; -msck repair table json_data_arrays_tb; -msck repair table scalar_to_array_tb; -msck repair table json_one_column_table; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh b/docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh index 04ddf42c70c5b4..ac4c9ae448014f 100755 --- a/docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh +++ b/docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh @@ -20,17 +20,6 @@ set -e -x parallel=$(getconf _NPROCESSORS_ONLN) - - -AUX_LIB="/mnt/scripts/auxlib" -for file in "${AUX_LIB}"/*.tar.gz; do - [ -e "$file" ] || continue - tar -xzvf "$file" -C "$AUX_LIB" - echo "file = ${file}" -done -ls "${AUX_LIB}/" -mv "${AUX_LIB}"/ /opt/hive - nohup /opt/hive/bin/hive --service metastore & # wait lockfile diff --git a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_data_arrays_tb/1 b/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_data_arrays_tb/1 deleted file mode 100644 index 098bb346b503a5..00000000000000 --- a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_data_arrays_tb/1 +++ /dev/null @@ -1,2 +0,0 @@ -["John", 26 ] -["Mary", 23 ] \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_one_column_table/1 b/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_one_column_table/1 deleted file mode 100644 index d396f66a079168..00000000000000 --- a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_one_column_table/1 +++ /dev/null @@ -1,5 +0,0 @@ - -{"name":"bad1","id":5,"numbers":[1,2,3] -[1,2,3] -"just a string" -{"name":"bad2","id":6,"numbers":"not an array","scores":{"key4":40},"details":{"a":4,"b":"text","c":4000000}} diff --git a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/1 b/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/1 deleted file mode 100644 index 11a3edf6e8030d..00000000000000 --- a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/1 +++ /dev/null @@ -1,2 +0,0 @@ -{"id": 1, "name": "Alice", "numbers": [1, 2, 3], "scores": {"math": 90, "english": 85}, "details": {"a": 100, "b": "test1", "c": 1234567890}} -{"id": 2, "name": "Bob", "numbers": [4, 5], "scores": {"math": 80, "science": 95}, "details": {"a": 200, "b": "test2", "c": 9876543210}} \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/2 b/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/2 deleted file mode 100644 index e77c1f49d858eb..00000000000000 --- a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/json_table/2 +++ /dev/null @@ -1,11 +0,0 @@ -{"id" 3 "name" "Bob", -"numbers": [ - 4 5 -], -"scores": { -"math": 80 -}, -"details" -: { -"a": 200 , "b" } "test2", "c": 9876543210 -}} \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/scalar_to_array_tb/1 b/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/scalar_to_array_tb/1 deleted file mode 100644 index 24a9acc63a36a6..00000000000000 --- a/docker/thirdparties/docker-compose/hive/scripts/preinstalled_data/json/openx_json/scalar_to_array_tb/1 +++ /dev/null @@ -1 +0,0 @@ -{"name":"Charlie","id":4,"tags":"flink"} \ No newline at end of file diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java index 33c945272e7143..dfd7d6fe4b8c0b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java @@ -1084,14 +1084,6 @@ public boolean isPartitionedTable() { public void beforeMTMVRefresh(MTMV mtmv) throws DdlException { } - public boolean firstColumnIsString() { - List columns = getColumns(); - if (columns == null || columns.isEmpty()) { - return false; - } - return columns.get(0).getType().isScalarType(PrimitiveType.STRING); - } - public HoodieTableMetaClient getHudiClient() { return Env.getCurrentEnv() .getExtMetaCacheMgr() diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreClientHelper.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreClientHelper.java index d98bf8227e1e2f..9bb09225607674 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreClientHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreClientHelper.java @@ -95,7 +95,6 @@ public class HiveMetaStoreClientHelper { public static final String HIVE_JSON_SERDE = "org.apache.hive.hcatalog.data.JsonSerDe"; public static final String LEGACY_HIVE_JSON_SERDE = "org.apache.hadoop.hive.serde2.JsonSerDe"; - public static final String OPENX_JSON_SERDE = "org.openx.data.jsonserde.JsonSerDe"; public enum HiveFileFormat { TEXT_FILE(0, "text"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveProperties.java index b06ea772fab3fe..74f3dcc1a9d0e2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveProperties.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveProperties.java @@ -55,11 +55,6 @@ public class HiveProperties { public static final String PROP_ESCAPE_CHAR = OpenCSVSerde.ESCAPECHAR; public static final String DEFAULT_ESCAPE_CHAR = "\\"; - // org.openx.data.jsonserde.JsonSerDe - public static final String PROP_OPENX_IGNORE_MALFORMED_JSON = "ignore.malformed.json"; - public static final String DEFAULT_OPENX_IGNORE_MALFORMED_JSON = "false"; - - public static final Set HIVE_SERDE_PROPERTIES = ImmutableSet.of( PROP_FIELD_DELIMITER, PROP_COLLECTION_DELIMITER_HIVE2, @@ -136,13 +131,6 @@ public static String getEscapeChar(Table table) { return HiveMetaStoreClientHelper.firstPresentOrDefault(DEFAULT_ESCAPE_CHAR, escapeChar); } - public static String getOpenxJsonIgnoreMalformed(Table table) { - Optional escapeChar = HiveMetaStoreClientHelper.getSerdeProperty(table, - PROP_OPENX_IGNORE_MALFORMED_JSON); - return HiveMetaStoreClientHelper.firstPresentOrDefault(DEFAULT_OPENX_IGNORE_MALFORMED_JSON, escapeChar); - } - - // Set properties to table public static void setTableProperties(Table table, Map properties) { HashMap serdeProps = new HashMap<>(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java index c25037895803d5..890f6147f333a5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java @@ -125,7 +125,7 @@ protected void doInitialize() throws UserException { this.hiveTransaction = new HiveTransaction(DebugUtil.printId(ConnectContext.get().queryId()), ConnectContext.get().getQualifiedUser(), hmsTable, hmsTable.isFullAcidTable()); Env.getCurrentHiveTransactionMgr().register(hiveTransaction); - skipCheckingAcidVersionFile = sessionVariable.skipCheckingAcidVersionFile; + skipCheckingAcidVersionFile = ConnectContext.get().getSessionVariable().skipCheckingAcidVersionFile; } } @@ -413,17 +413,6 @@ public TFileFormatType getFileFormatType() throws UserException { if (serDeLib.equals(HiveMetaStoreClientHelper.HIVE_JSON_SERDE) || serDeLib.equals(HiveMetaStoreClientHelper.LEGACY_HIVE_JSON_SERDE)) { type = TFileFormatType.FORMAT_JSON; - } else if (serDeLib.equals(HiveMetaStoreClientHelper.OPENX_JSON_SERDE)) { - if (!sessionVariable.isReadHiveJsonInOneColumn()) { - type = TFileFormatType.FORMAT_JSON; - } else if (sessionVariable.isReadHiveJsonInOneColumn() - && hmsTable.firstColumnIsString()) { - type = TFileFormatType.FORMAT_CSV_PLAIN; - } else { - throw new UserException("You set read_hive_json_in_one_column = true, but the first column of " - + "table " + hmsTable.getName() - + " is not a string column."); - } } else { type = TFileFormatType.FORMAT_CSV_PLAIN; } @@ -460,7 +449,7 @@ protected TFileAttributes getFileAttributes() throws UserException { fileAttributes.setTextParams(textParams); fileAttributes.setHeaderType(""); fileAttributes.setEnableTextValidateUtf8( - sessionVariable.enableTextValidateUtf8); + ConnectContext.get().getSessionVariable().enableTextValidateUtf8); } else if (serDeLib.equals("org.apache.hadoop.hive.serde2.OpenCSVSerde")) { TFileTextScanRangeParams textParams = new TFileTextScanRangeParams(); // set set properties of OpenCSVSerde @@ -478,7 +467,7 @@ protected TFileAttributes getFileAttributes() throws UserException { fileAttributes.setTrimDoubleQuotes(true); } fileAttributes.setEnableTextValidateUtf8( - sessionVariable.enableTextValidateUtf8); + ConnectContext.get().getSessionVariable().enableTextValidateUtf8); } else if (serDeLib.equals("org.apache.hive.hcatalog.data.JsonSerDe")) { TFileTextScanRangeParams textParams = new TFileTextScanRangeParams(); textParams.setColumnSeparator("\t"); @@ -492,37 +481,6 @@ protected TFileAttributes getFileAttributes() throws UserException { fileAttributes.setReadJsonByLine(true); fileAttributes.setStripOuterArray(false); fileAttributes.setHeaderType(""); - } else if (serDeLib.equals("org.openx.data.jsonserde.JsonSerDe")) { - if (!sessionVariable.isReadHiveJsonInOneColumn()) { - TFileTextScanRangeParams textParams = new TFileTextScanRangeParams(); - textParams.setColumnSeparator("\t"); - textParams.setLineDelimiter("\n"); - fileAttributes.setTextParams(textParams); - - fileAttributes.setJsonpaths(""); - fileAttributes.setJsonRoot(""); - fileAttributes.setNumAsString(true); - fileAttributes.setFuzzyParse(false); - fileAttributes.setReadJsonByLine(true); - fileAttributes.setStripOuterArray(false); - fileAttributes.setHeaderType(""); - - fileAttributes.setOpenxJsonIgnoreMalformed( - Boolean.parseBoolean(HiveProperties.getOpenxJsonIgnoreMalformed(table))); - } else if (sessionVariable.isReadHiveJsonInOneColumn() - && hmsTable.firstColumnIsString()) { - TFileTextScanRangeParams textParams = new TFileTextScanRangeParams(); - textParams.setLineDelimiter("\n"); - textParams.setColumnSeparator("\n"); - //First, perform row splitting according to `\n`. When performing column splitting, - // since there is no `\n`, only one column of data will be generated. - fileAttributes.setTextParams(textParams); - fileAttributes.setHeaderType(""); - } else { - throw new UserException("You set read_hive_json_in_one_column = true, but the first column of table " - + hmsTable.getName() - + " is not a string column."); - } } else { throw new UserException( "unsupported hive table serde: " + serDeLib); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 48ac010e83001d..86c47de612fe63 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -708,8 +708,6 @@ public class SessionVariable implements Serializable, Writable { "enable_cooldown_replica_affinity"; public static final String SKIP_CHECKING_ACID_VERSION_FILE = "skip_checking_acid_version_file"; - public static final String READ_HIVE_JSON_IN_ONE_COLUMN = "read_hive_json_in_one_column"; - /** * Inserting overwrite for auto partition table allows creating partition for * datas which cannot find partition to overwrite. @@ -1222,17 +1220,6 @@ public enum IgnoreSplitType { @VariableMgr.VarAttr(name = PARALLEL_PREPARE_THRESHOLD, fuzzy = true) public int parallelPrepareThreshold = 32; - @VariableMgr.VarAttr(name = READ_HIVE_JSON_IN_ONE_COLUMN, - description = {"在读取hive json的时候,由于存在一些不支持的json格式,我们默认会报错。为了让用户使用体验更好," - + "当该变量为true的时候,将一整行json读取到第一列中,用户可以自行选择对一整行json进行处理,例如JSON_PARSE。" - + "需要表的第一列的数据类型为string.", - "When reading hive json, we will report an error by default because there are some unsupported " - + "json formats. In order to provide users with a better experience, when this variable is true," - + "a whole line of json is read into the first column. Users can choose to process a whole line" - + "of json, such as JSON_PARSE. The data type of the first column of the table needs to" - + "be string."}) - private boolean readHiveJsonInOneColumn = false; - @VariableMgr.VarAttr(name = ENABLE_COST_BASED_JOIN_REORDER) private boolean enableJoinReorderBasedCost = false; @@ -3784,14 +3771,6 @@ public void setKeepCarriageReturn(boolean keepCarriageReturn) { this.keepCarriageReturn = keepCarriageReturn; } - public boolean isReadHiveJsonInOneColumn() { - return readHiveJsonInOneColumn; - } - - public void setReadHiveJsonInOneColumn(boolean readHiveJsonInOneColumn) { - this.readHiveJsonInOneColumn = readHiveJsonInOneColumn; - } - public boolean isDropTableIfCtasFailed() { return dropTableIfCtasFailed; } diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift index 3165a6ac764db4..407c77fc340404 100644 --- a/gensrc/thrift/PlanNodes.thrift +++ b/gensrc/thrift/PlanNodes.thrift @@ -271,9 +271,6 @@ struct TFileAttributes { 11: optional i32 skip_lines; //For text type file reading, whether to enable utf8 encoding check.(Catalog && TVF) 12: optional bool enable_text_validate_utf8 = true; - // org.openx.data.jsonserde.JsonSerDe - 13: optional bool openx_json_ignore_malformed = false; - // for cloud copy into 1001: optional bool ignore_csv_redundant_col; } diff --git a/regression-test/data/external_table_p0/hive/test_hive_openx_json.out b/regression-test/data/external_table_p0/hive/test_hive_openx_json.out deleted file mode 100644 index 6eadea56694c85..00000000000000 --- a/regression-test/data/external_table_p0/hive/test_hive_openx_json.out +++ /dev/null @@ -1,25 +0,0 @@ --- This file is automatically generated. You should know what you did if you want to edit this --- !q1 -- -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -\N \N \N \N \N -1 Alice [1, 2, 3] {"math":90, "english":85} {"a":100, "b":"test1", "c":1234567890} -2 Bob [4, 5] {"math":80, "science":95} {"a":200, "b":"test2", "c":9876543210} - --- !2 -- -["John", 26 ] \N -["Mary", 23 ] \N - --- !3 -- -"just a string" \N \N \N \N -[1,2,3] \N \N \N \N -{"name":"bad1","id":5,"numbers":[1,2,3] \N \N \N \N -{"name":"bad2","id":6,"numbers":"not an array","scores":{"key4":40},"details":{"a":4,"b":"text","c":4000000}} \N \N \N \N - diff --git a/regression-test/suites/external_table_p0/hive/test_hive_openx_json.groovy b/regression-test/suites/external_table_p0/hive/test_hive_openx_json.groovy deleted file mode 100644 index b9698809c4d6dc..00000000000000 --- a/regression-test/suites/external_table_p0/hive/test_hive_openx_json.groovy +++ /dev/null @@ -1,84 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -suite("test_hive_openx_json", "p0,external,hive,external_docker,external_docker_hive") { - - - String enabled = context.config.otherConfigs.get("enableHiveTest") - if (enabled == null || !enabled.equalsIgnoreCase("true")) { - logger.info("diable Hive test.") - return; - } - - for (String hivePrefix : ["hive3"]) { - try { - sql """set enable_fallback_to_original_planner=false""" - String externalEnvIp = context.config.otherConfigs.get("externalEnvIp") - String hms_port = context.config.otherConfigs.get(hivePrefix + "HmsPort") - String catalog_name = "${hivePrefix}_test_hive_openx_json" - String broker_name = "hdfs" - - sql """drop catalog if exists ${catalog_name}""" - sql """create catalog if not exists ${catalog_name} properties ( - 'type'='hms', - 'hive.metastore.uris'='thrift://${externalEnvIp}:${hms_port}' - );""" - sql """use `${catalog_name}`.`openx_json`""" - - try { - sql """ select * from json_table """; - } catch (Exception e) { - log.info(e.getMessage()) - assertTrue(e.getMessage().contains("DATA_QUALITY_ERROR")) - } - - order_qt_q1 """ select * from json_table_ignore_malformed """ - - - try{ - sql """ select * from json_data_arrays_tb """; - } catch (Exception e) { - log.info(e.getMessage()) - assertTrue(e.getMessage().contains("DATA_QUALITY_ERROR")) - } - - - try{ - sql """ select * from scalar_to_array_tb """; - } catch (Exception e) { - log.info(e.getMessage()) - assertTrue(e.getMessage().contains("DATA_QUALITY_ERROR")) - } - - sql """ set read_hive_json_in_one_column = true; """ - - order_qt_2 """ select * from json_data_arrays_tb """ - order_qt_3 """ select * from json_one_column_table """ - - try{ - sql """ select * from scalar_to_array_tb """; - } catch (Exception e) { - log.info(e.getMessage()) - assertTrue(e.getMessage().contains("is not a string column.")) - } - - - sql """drop catalog if exists ${catalog_name}""" - } finally { - } - } -}