From 2e85275a6306e75ed739992b601a53c0c937b23b Mon Sep 17 00:00:00 2001 From: Maple Ong Date: Wed, 3 Apr 2024 16:04:42 -0400 Subject: [PATCH 1/7] Support cleartext password auth plugin In the auth switch, the server can request the client to send the password in cleartext. The client will only send the password in cleartext if `enable_cleartext_plugin` flag is true. Otherwise, raise `Trilogy::AuthPluginError`. --- contrib/ruby/ext/trilogy-ruby/cext.c | 16 ++++++++++++++-- contrib/ruby/lib/trilogy/error.rb | 5 +++++ inc/trilogy/error.h | 3 ++- inc/trilogy/protocol.h | 4 +++- inc/trilogy/socket.h | 2 ++ src/client.c | 7 ++++--- src/protocol.c | 21 ++++++++++++++++----- 7 files changed, 46 insertions(+), 12 deletions(-) diff --git a/contrib/ruby/ext/trilogy-ruby/cext.c b/contrib/ruby/ext/trilogy-ruby/cext.c index 296730de..0b733ec8 100644 --- a/contrib/ruby/ext/trilogy-ruby/cext.c +++ b/contrib/ruby/ext/trilogy-ruby/cext.c @@ -18,12 +18,12 @@ VALUE Trilogy_CastError; static VALUE Trilogy_BaseConnectionError, Trilogy_ProtocolError, Trilogy_SSLError, Trilogy_QueryError, Trilogy_ConnectionClosedError, - Trilogy_TimeoutError, Trilogy_SyscallError, Trilogy_Result, Trilogy_EOFError; + Trilogy_TimeoutError, Trilogy_SyscallError, Trilogy_Result, Trilogy_EOFError, Trilogy_AuthPluginError; static ID id_socket, id_host, id_port, id_username, id_password, id_found_rows, id_connect_timeout, id_read_timeout, id_write_timeout, id_keepalive_enabled, id_keepalive_idle, id_keepalive_interval, id_keepalive_count, id_ivar_affected_rows, id_ivar_fields, id_ivar_last_insert_id, id_ivar_rows, id_ivar_query_time, id_password, - id_database, id_ssl_ca, id_ssl_capath, id_ssl_cert, id_ssl_cipher, id_ssl_crl, id_ssl_crlpath, id_ssl_key, + id_database, id_enable_cleartext_plugin, id_ssl_ca, id_ssl_capath, id_ssl_cert, id_ssl_cipher, id_ssl_crl, id_ssl_crlpath, id_ssl_key, id_ssl_mode, id_tls_ciphersuites, id_tls_min_version, id_tls_max_version, id_multi_statement, id_multi_result, id_from_code, id_from_errno, id_connection_options, id_max_allowed_packet; @@ -156,6 +156,10 @@ static void handle_trilogy_error(struct trilogy_ctx *ctx, int rc, const char *ms rb_raise(Trilogy_EOFError, "%" PRIsVALUE ": TRILOGY_CLOSED_CONNECTION", rbmsg); } + case TRILOGY_AUTH_PLUGIN_ERROR: { + rb_raise(Trilogy_AuthPluginError, "%" PRIsVALUE ": TRILOGY_AUTH_PLUGIN_ERROR", rbmsg); + } + default: rb_raise(Trilogy_QueryError, "%" PRIsVALUE ": %s", rbmsg, trilogy_error(rc)); } @@ -522,6 +526,10 @@ static VALUE rb_trilogy_connect(VALUE self, VALUE encoding, VALUE charset, VALUE connopt.flags |= TRILOGY_CAPABILITIES_CONNECT_WITH_DB; } + if (RTEST(rb_hash_aref(opts, ID2SYM(id_enable_cleartext_plugin)))) { + connopt.enable_cleartext_plugin = true; + } + if (RTEST(rb_hash_aref(opts, ID2SYM(id_found_rows)))) { connopt.flags |= TRILOGY_CAPABILITIES_FOUND_ROWS; } @@ -1193,6 +1201,9 @@ RUBY_FUNC_EXPORTED void Init_cext(void) Trilogy_EOFError = rb_const_get(Trilogy, rb_intern("EOFError")); rb_global_variable(&Trilogy_EOFError); + Trilogy_AuthPluginError = rb_const_get(Trilogy, rb_intern("AuthPluginError")); + rb_global_variable(&Trilogy_AuthPluginError); + id_socket = rb_intern("socket"); id_host = rb_intern("host"); id_port = rb_intern("port"); @@ -1208,6 +1219,7 @@ RUBY_FUNC_EXPORTED void Init_cext(void) id_keepalive_count = rb_intern("keepalive_count"); id_keepalive_interval = rb_intern("keepalive_interval"); id_database = rb_intern("database"); + id_enable_cleartext_plugin = rb_intern("enable_cleartext_plugin"); id_ssl_ca = rb_intern("ssl_ca"); id_ssl_capath = rb_intern("ssl_capath"); id_ssl_cert = rb_intern("ssl_cert"); diff --git a/contrib/ruby/lib/trilogy/error.rb b/contrib/ruby/lib/trilogy/error.rb index 614d2d40..880c3a97 100644 --- a/contrib/ruby/lib/trilogy/error.rb +++ b/contrib/ruby/lib/trilogy/error.rb @@ -115,4 +115,9 @@ class ConnectionClosed < IOError # attempted on a socket which previously encountered an error. class EOFError < BaseConnectionError end + + # Occurs when the server request an auth switch to an incompatible + # authentication plugin + class AuthPluginError < Trilogy::BaseConnectionError + end end diff --git a/inc/trilogy/error.h b/inc/trilogy/error.h index 225c9b39..dd0be72e 100644 --- a/inc/trilogy/error.h +++ b/inc/trilogy/error.h @@ -24,7 +24,8 @@ XX(TRILOGY_AUTH_SWITCH, -19) \ XX(TRILOGY_MAX_PACKET_EXCEEDED, -20) \ XX(TRILOGY_UNKNOWN_TYPE, -21) \ - XX(TRILOGY_TIMEOUT, -22) + XX(TRILOGY_TIMEOUT, -22) \ + XX(TRILOGY_AUTH_PLUGIN_ERROR, -23) enum { #define XX(name, code) name = code, diff --git a/inc/trilogy/protocol.h b/inc/trilogy/protocol.h index 57a38a03..004966b1 100644 --- a/inc/trilogy/protocol.h +++ b/inc/trilogy/protocol.h @@ -442,14 +442,16 @@ int trilogy_build_auth_packet(trilogy_builder_t *builder, const char *user, cons * pass_len - The length of password in bytes. * auth_plugin - Plugin authentication mechanism that the server requested. * scramble - The scramble value received from the server. + * enable_cleartext_plugin - Send cleartext password if requested by server. * * Return values: * TRILOGY_OK - The packet was successfully built and written to the * builder's internal buffer. * TRILOGY_SYSERR - A system error occurred, check errno. + * TRILOGY_AUTH_PLUGIN_ERROR - The server requested auth plugin is not supported. */ int trilogy_build_auth_switch_response_packet(trilogy_builder_t *builder, const char *pass, size_t pass_len, - const char *auth_plugin, const char *scramble); + const char *auth_plugin, const char *scramble, const bool enable_cleartext_plugin); /* trilogy_build_change_db_packet - Build a change database command packet. This * command will change the default database for the connection. diff --git a/inc/trilogy/socket.h b/inc/trilogy/socket.h index 010deb1f..6de19476 100644 --- a/inc/trilogy/socket.h +++ b/inc/trilogy/socket.h @@ -67,6 +67,8 @@ typedef struct { uint16_t keepalive_count; uint16_t keepalive_interval; + bool enable_cleartext_plugin; + TRILOGY_CAPABILITIES_t flags; size_t max_allowed_packet; diff --git a/src/client.c b/src/client.c index be467d5d..e503d839 100644 --- a/src/client.c +++ b/src/client.c @@ -248,8 +248,9 @@ static int read_auth_switch_packet(trilogy_conn_t *conn, trilogy_handshake_t *ha } if (strcmp("mysql_native_password", auth_switch_packet.auth_plugin) && - strcmp("caching_sha2_password", auth_switch_packet.auth_plugin)) { - // Only support native password & caching sha2 password here. + strcmp("caching_sha2_password", auth_switch_packet.auth_plugin) && + strcmp("mysql_clear_password", auth_switch_packet.auth_plugin)) { + // Only support native password, caching sha2 and cleartext password here. return TRILOGY_PROTOCOL_VIOLATION; } @@ -387,7 +388,7 @@ int trilogy_auth_switch_send(trilogy_conn_t *conn, const trilogy_handshake_t *ha rc = trilogy_build_auth_switch_response_packet(&builder, conn->socket->opts.password, conn->socket->opts.password_len, handshake->auth_plugin, - handshake->scramble); + handshake->scramble, conn->socket->opts.enable_cleartext_plugin); if (rc < 0) { return rc; diff --git a/src/protocol.c b/src/protocol.c index 232bb97f..8226a4fa 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -600,21 +600,32 @@ int trilogy_build_auth_packet(trilogy_builder_t *builder, const char *user, cons } int trilogy_build_auth_switch_response_packet(trilogy_builder_t *builder, const char *pass, size_t pass_len, - const char *auth_plugin, const char *scramble) + const char *auth_plugin, const char *scramble, const bool enable_cleartext_plugin) { int rc = TRILOGY_OK; unsigned int auth_response_len = 0; uint8_t auth_response[EVP_MAX_MD_SIZE]; if (pass_len > 0) { - if (!strcmp("caching_sha2_password", auth_plugin)) { - trilogy_pack_scramble_sha2_hash(scramble, pass, pass_len, auth_response, &auth_response_len); + if (!strcmp("mysql_clear_password", auth_plugin)) { + if (enable_cleartext_plugin) { + CHECKED(trilogy_builder_write_buffer(builder, pass, pass_len)); + } else { + return TRILOGY_AUTH_PLUGIN_ERROR; + } } else { - trilogy_pack_scramble_native_hash(scramble, pass, pass_len, auth_response, &auth_response_len); + if (!strcmp("caching_sha2_password", auth_plugin)) { + trilogy_pack_scramble_sha2_hash(scramble, pass, pass_len, auth_response, &auth_response_len); + } else if (!strcmp("caching_sha2_password", auth_plugin)) { + trilogy_pack_scramble_native_hash(scramble, pass, pass_len, auth_response, &auth_response_len); + } else { + return TRILOGY_AUTH_PLUGIN_ERROR; + } + + CHECKED(trilogy_builder_write_buffer(builder, auth_response, auth_response_len)); } } - CHECKED(trilogy_builder_write_buffer(builder, auth_response, auth_response_len)); trilogy_builder_finalize(builder); return TRILOGY_OK; From 8d2a0dcb67db1d29f34006a1835d236be42ba043 Mon Sep 17 00:00:00 2001 From: Maple Ong Date: Wed, 3 Apr 2024 16:16:19 -0400 Subject: [PATCH 2/7] Add tests and sql file for cleartext auth plugin These tests rely on a mysql test server plugin (https://github.com/mysql/mysql-server/blob/824e2b4064053f7daf17d7f3f84b7a3ed92e5fb4/plugin/auth/test_plugin.cc#L176-L217) It is unclear if this test plugin will continue to exist in the future, but it will do for now. --- .github/workflows/macos.yml | 3 ++- contrib/ruby/test/auth_test.rb | 16 ++++++++++++++++ docker-entrypoint-initdb.d/cleartext_user.sql | 4 ++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 contrib/ruby/test/auth_test.rb create mode 100644 docker-entrypoint-initdb.d/cleartext_user.sql diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index c56e5a62..4bf63925 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -6,7 +6,7 @@ on: tags: - v* pull_request: - + jobs: test: name: Test @@ -44,6 +44,7 @@ jobs: $(brew --prefix mysql@${{ matrix.mysql }})/bin/mysql -uroot -e 'CREATE DATABASE test' $(brew --prefix mysql@${{ matrix.mysql }})/bin/mysql -uroot < docker-entrypoint-initdb.d/native_password_user.sql $(brew --prefix mysql@${{ matrix.mysql }})/bin/mysql -uroot < docker-entrypoint-initdb.d/x509_user.sql + $(brew --prefix mysql@${{ matrix.mysql }})/bin/mysql -uroot < docker-entrypoint-initdb.d/cleartext_user.sql - name: Install dependencies run: | cd contrib/ruby diff --git a/contrib/ruby/test/auth_test.rb b/contrib/ruby/test/auth_test.rb new file mode 100644 index 00000000..24f677e1 --- /dev/null +++ b/contrib/ruby/test/auth_test.rb @@ -0,0 +1,16 @@ +require "test_helper" + +class AuthTest < TrilogyTest + def test_cleartext_auth_plugin + client = new_tcp_client username: "cleartext_user", password: "password", enable_cleartext_plugin: true + refute_nil client + ensure + ensure_closed client + end + + def test_cleartext_auth_plugin_disabled + assert_raises Trilogy::AuthPluginError do + new_tcp_client username: "cleartext_user", password: "password" + end + end +end diff --git a/docker-entrypoint-initdb.d/cleartext_user.sql b/docker-entrypoint-initdb.d/cleartext_user.sql new file mode 100644 index 00000000..797e0ed2 --- /dev/null +++ b/docker-entrypoint-initdb.d/cleartext_user.sql @@ -0,0 +1,4 @@ +INSTALL PLUGIN cleartext_plugin_server SONAME 'auth_test_plugin.so'; +CREATE USER 'cleartext_user'@'%'; +GRANT ALL PRIVILEGES ON test.* TO 'cleartext_user'@'%'; +ALTER USER 'cleartext_user'@'%' IDENTIFIED WITH cleartext_plugin_server BY 'password'; From 57f9c107bac40d40156298484b41cb860cdd9b3b Mon Sep 17 00:00:00 2001 From: Maple Ong Date: Wed, 3 Apr 2024 17:09:30 -0400 Subject: [PATCH 3/7] Fix wrong plugin type oops Co-authored-by: Daniel Colson --- src/protocol.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol.c b/src/protocol.c index 6456d428..69900798 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -625,7 +625,7 @@ int trilogy_build_auth_switch_response_packet(trilogy_builder_t *builder, const } else { if (!strcmp("caching_sha2_password", auth_plugin)) { trilogy_pack_scramble_sha2_hash(scramble, pass, pass_len, auth_response, &auth_response_len); - } else if (!strcmp("caching_sha2_password", auth_plugin)) { + } else if (!strcmp("mysql_native_password", auth_plugin)) { trilogy_pack_scramble_native_hash(scramble, pass, pass_len, auth_response, &auth_response_len); } else { return TRILOGY_AUTH_PLUGIN_ERROR; From 6dde8d973e91fe06d8ea0eae686b814e05ff5000 Mon Sep 17 00:00:00 2001 From: Ngan Pham Date: Wed, 3 Apr 2024 23:19:12 -0700 Subject: [PATCH 4/7] Package and mount the auth_test_plugin ourselves --- docker-compose.yml | 3 ++- test/auth_plugins/auth_test_plugin.so | Bin 0 -> 15072 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 test/auth_plugins/auth_test_plugin.so diff --git a/docker-compose.yml b/docker-compose.yml index 96dd91a3..595b4646 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: volumes: - "db-data:/var/lib/mysql" - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + - ./test/auth_plugins/auth_test_plugin.so:/usr/lib/mysql/plugin/auth_test_plugin.so app: image: ghcr.io/trilogy-libraries/trilogy/ci-app:distro-${DISTRIBUTION_SLUG}-ruby-${RUBY_VERSION}-mysql-${MYSQL_VERSION} privileged: true @@ -24,7 +25,7 @@ services: args: - DISTRIBUTION=${DISTRIBUTION} - RUBY_VERSION=${RUBY_VERSION} - cache_from: + cache_from: - ghcr.io/trilogy-libraries/trilogy/ci-app:distro-${DISTRIBUTION_SLUG}-ruby-${RUBY_VERSION}-mysql-${MYSQL_VERSION} environment: MYSQL_HOST: db.local diff --git a/test/auth_plugins/auth_test_plugin.so b/test/auth_plugins/auth_test_plugin.so new file mode 100644 index 0000000000000000000000000000000000000000..5b990734645242727f3a69b40d0386112af3e83c GIT binary patch literal 15072 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 literal 0 HcmV?d00001 From 03e9c4f096f2fad69555fdf9dbf1cbc266593f87 Mon Sep 17 00:00:00 2001 From: Ngan Pham Date: Thu, 4 Apr 2024 08:56:46 -0700 Subject: [PATCH 5/7] Add mysql 5.7 auth test plugin --- docker-compose.yml | 2 +- test/auth_plugins/5.7/auth_test_plugin.so | Bin 0 -> 69009 bytes test/auth_plugins/{ => 8}/auth_test_plugin.so | Bin 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100755 test/auth_plugins/5.7/auth_test_plugin.so rename test/auth_plugins/{ => 8}/auth_test_plugin.so (100%) diff --git a/docker-compose.yml b/docker-compose.yml index 595b4646..48502c34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,7 @@ services: volumes: - "db-data:/var/lib/mysql" - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - - ./test/auth_plugins/auth_test_plugin.so:/usr/lib/mysql/plugin/auth_test_plugin.so + - ./test/auth_plugins/${MYSQL_VERSION}/auth_test_plugin.so:/usr/lib/mysql/plugin/auth_test_plugin.so app: image: ghcr.io/trilogy-libraries/trilogy/ci-app:distro-${DISTRIBUTION_SLUG}-ruby-${RUBY_VERSION}-mysql-${MYSQL_VERSION} privileged: true diff --git a/test/auth_plugins/5.7/auth_test_plugin.so b/test/auth_plugins/5.7/auth_test_plugin.so new file mode 100755 index 0000000000000000000000000000000000000000..fc4fc1f1fba1e6dee80773dfba607b3fe931ae15 GIT binary patch literal 69009 zcmce<34B$>6+eFGZJBoo5bk?fAR+-lQ3S#wf~XLZK%yZa3GVh0k{5_(GcRFLTTxs< zMX7adwMDDet*u(C)RnrTb)jxW>q1?zQl*PZ)yn_-J#+7SH;-WZ`Tc+Ye<1Vb%$zwh zbLN~gXU^Q0dv;~b?0{01_Y<^^v_Tn1FVsP8_rbik;~09 zMc$`nl}G{mh~PKRt3vZ8y_x=Y4K)r{aBTL&hQ*{;qfH zvp+|=c-|**`7{56?k46t2MD;wXN@Vgyic#)F=)s6{jWd%amLXoh~GK23$4q}fAjWh zKWcpSj(={x=;ZdT6W{;O3s;jS>$ybaM-F~hooB7d3x%dtg##B}i$Sn%Abtno_l?n8 zzge`PHt@iEm!D;?{M)6oDqr1^c>JfIZ9VsP5WLt=%HVq zaK{}V9qP^&jr;fsg8FDzKD=tOwZsE_pJVn?egVoIAD)-p2bmEb;QL&Rd|&uy@1^_~ zdnsQh<^8NJxyayWrlgj&1)qbgLaV|lkrHnmPr}6VtiSKp`KDYdk>sMB_#0xTe34sG z<>K#*n{v0<+KCMD7rFGO0*^oQ_JU9GcKYD+3@Pttt+(0QvOKvdK;E%(t*ZV~oK8-V z@_yC^7r&od^J{!^JTtTA+v1k5aL4b_w-SjZZ5{22RChyHcOqdWTH0H>twb|EP}R7i zf!T)EmNSx8;;3bb1<55XsqSP~d22%|l}uU7P}S7XolG?JbT0*wu9o&CiKPvxrB*80 zok%sbc3UWHZ0oezRwg=IdzQ4cCt5p}BvQ$)Wi5?Ksq9?IkJeV9jlv>&`l;(!UWMWyeE7gK&cnB#BxTBc^>S@F{y1f=&y*reqWMgXsdPLJy zx@}`?OR_!P!iSQuT3Z%(b}#KpHZ+Y(b&M+|+{oM%E0F{n8o;u}sgz+RirSkj;Y)Wi zJpy1`b84z*l_w^Sn>g+ech#ux-alpS?H`d@ccjRcY1%WS1sWT$x?Q=O>e@|jeLZ-o zD-T||<;p>4R{4ppoUOmaOubZogZz%75h2*_KuA^}9W* zyu`I+x4L@j&Fc=A&RtpM9-WO@^m+}%{ zIrkp#XVG5DNBhcS9x^_c?xnoQU0?2bo{eU+5?{H0UZZ{G{{6VrS58{q&s1NzCo8P0 zTD?PW??7g|4OVP_6+Eq4{e*se_aTqz5^MLUCy)*tHWN9*OWEY(ZM*R^>H)%J-^W`7 zzK1ZE>f=oU-%glI^zmH+-$l?UUe)iv4py!H zL{&}OnkpGMtb&u;q^j12-$H%a?)VcxeF<6AcYW|w_z`5)No6NL^LX>XVdr6p#6Mzt z82v580J?_&{YN=K$4CdD{})m7%FtZx~f;-`*aJRs+3vjTF6ORl9a#brHETcHzU4o=cUNEBJue8bNV%8n~LwtDRsWeaQ8 zwQVk|ubl8c*!wkETeJ34cX9*QoJ*<~S8m4Q_EgWk_>oQMX72gByW48k?%p28Kx)>0 zyKX*&=N;iz&%&}*-vqlONW(q%OaH?DvXjeBDf?bog4~0=RSdkZ1SsEjA6j|d``r_f z4Y_UdtAyIZ&8t=@tNYS{!&YGcRJx)Gn;?T8m5pHS?oV#=rnPWmW<9Zx$z7O6-n0P_ zm+G~zbQP?9wr1^z+pqqHqy1?6JbbPVlI8o1thu;pq<-dc%4i+hQ0aCCuvDve?d~27 z{do@n*L(FR8aj9})MnT2p1)HWMWWbbdk5&TA=2w>xxx~O$V`~yVR&qt!wV)G(*4ZwCHD`Ve+$H)s(j?IdUu$_sR}=Yk zTvtc?k`k|^B-PW|33sKbq`9N3WK_zsQaz20$yBPjr?quu2`R&sX=#K{)l|}h{sf0~ z(t~kFx5sFSgrAC*2KZ|w<>C{Slw}CQWh$934xQks;^1_im1tYP`Fi(mTFN}IZ4Ew4 z@OdjfOYylGpEL2f9iQv*sj;l1%dMZkuo5-b%*0~73z6TvZTJISN+K-?nFKDO?_pr`m<2H2=)Ea^;Ny< zuS5BK)I-eO_Ots(Dpm(qUF|G%f}(SFYA@X_mnmxLN@U{&-BB=}j@Z!&Op z;CH^u8#5lvXU?Ue%Yw7lg)1)s>72kKqR;LZm}#2fgl<_Q!H?}|Hxqf&4*eW+NpN*2 z31k*#erPQDGPxO-lWehpMSfXyR0Q@ zj8AVbA01+;i5c*-h(-=St{Y^na_P%jpu9+G%{f`J?!N9evsSqEp8VvvaH0Eom&+Hg ze3v^Ak6jyGLQxmr>kpzS|1jYn<0XPW7RUzQ6KL6FP?sIJ+2GRi44211*)&Ml zt&mNEu)A=Zna59dAj_0y(iIqn89&D~0|yP)W$0*cPc|~5kuY%xI4Nxnol85qlGegL zv6?#ClRl)=d`N9=4ed>P(m7{Olq@1wr!h|NNp`K=lf*Bx5wZw8o?YMB(3MK=N$2&w z;AN5fEE}z{p>Zk5Ep0(`D9xWRHY3ADchoLcTML6aX|&>OwB(9pgklQT;Igj_KlWB>}P4LretdpF}}Wu{kCtkEMk91 zV=;QR7gB%e3n`1xmuZ}q_NL?tP})1a{@9GodhUsvMRvb5>Qab&YqAT3n_4>>Pup`T zrtOKkysK~2d3&PvwD*mg+!NIsK-N&t+!NF5KMV7Rdt!RsXJOK9F`Q~{X-%d&D2FB_ zoDus+`@qQ}^I94u1(8AIbq^wc+XEwuLDw`1C&kals>VtNOh-?PD`$IExIup z+2k(XE9PQR+KevTxL3^HJIe3&ikG#gY}qSf)@(lN1930h`F8K9+4ISV4`J3f!y}h! zR{!)sKE!XpqTliCF_tyC*7}Znpf1#=?}Cn=Z+*ul&ms`}uNOSaGDv&9LMppXT^IZ%+vR~vmQtZW&QtL4f{ze;uqg|kLSTdoY#=bk1ujJ2YO)LLN8kt- zco|!!n(YD{qMGLd9jrOt1%3u`Q4KD@c#JyL1@0zV$^||mfwNp-ACBOB7udOs$P9Me4L zPWCX%gVqr9Xb-xSb@d+f6`@l+=p3@6*@MpHpgTP10AjB2psB1o$Aj`Xhl@PuEROR> z9>lYOy3T`s$Qj-2L64EjuRQ2Qj`MyGx{2*Jc@Qtm)iWM+2>W}LGeHEM@KUeTr##W%dau-{MbY5pUa3!=qQNV?QlDN$gI9T_ zJ_U;guklKKnidWI*ems^Tr_x{SL)NfXz-_AsZR-`!3|!iPaC7b8@*DWT1JC6d8I!6 zj0SJ2z#m<4c_UM`gAxN{FPVgQ|4&!F0a(5)zRQRUa3#L zqrrRK(j32@M}zly#eRj41~+=ee$9^tAMlF(CLkJo$Sd~Sf@ts&uh?%CqQOmGvEMpG zgO7Q|elrmbKH(Mn?L{>BlvnIG9MRxruh?%vqQPgqV!tVg2A}ha{Wc{Ue8DUB8<%Ks zi&yNoGST2mUa{ZYM1!w*#eTaJ4Zh|T`wdVuxYaB6TcT+24X@a5lA^&ky<)#@iU!~I ziv30^8rjHdc}T277cFqiv1QX8vLtQ>^E)E;0~|Y zZ{woDPu*hcDYzg(s~hUzIt#;(w5$t{pnmlJSp@Jj{01%?hUDeLkqzpc!+;r7`acM3 z2VFNIlruvLBfF(A{PAquq=&+IMg|SSb+gd=Ohn~_>)J@|;W5ZwD%r0`BYP#YVI9%e zvjY{0An+Y%9EtoUjMU00J;buMh6bvmVZikXcq%EBr1XihQYc^X={2pN!F@)k zK!7|w{a^rv0ufeySJ_2mAbaXhN zeFfTV>5JLzFoCvMdI{zbDiLU_rLQ>@&Hdh`g(j-!Ky$UyKZj`z zO;K+GTBCFesmxGk19QF7WgJVDx)RVeO8<*w z0@`gP zME@F4E@g(3?@#GuDTgAZ|L{sZ6OQh86DR~`U}5c{T=VFakiNX=ub)N(`=~q=+{LJ- zWzPXCqj$47V0!!$veILJD>`>9q$T=LGz7$JvDndvO`|&wLjDmJ2kblyKKdxmh0S94&WL&o}TA>RVESnqzXNcQ3qWdBT_IyW%;H&xF3^AMYU ze;3hp)2@ok6L}S8oERfLRQF3-W;)XlVZhV?aOf`9x&vxH1v_ zE$RwI$_KzrH7%km_s2r@Kj{FJ*bjo&{ZD=uXlQvBD*7)XW<=BW6s<>XXuw1}g0WmR z3Mg@nL8$nXkfK0*5X3kbw;?d0_!YAu=J9&qN8%^p9xf+-8-}6d-@T3+7hkFPpaGWkwTiF8;J#7uL$NIXQSl!@=Dt<&{^)79 zvIZa9(qZMzQw5mOkZ&M9+tt8awJ`@n-GMz}V1M-$J}iA5#BSgK#fO0N^uhZ97^ob0{zs+`W)rPv81Nx*& zK*lC-4(L~)>jRBZ-V)HygEa$JC$(=p+JL&X?v3+SI>8Uyzg=>35H1sQjsS__)n z1G*S99e9xX8K9j3{SRpSz%lAkK)V9Eu@un3>K#CtqJN~BLIz4LuSH+ z2KCrMfW`}zYl8YjEc(DwH3M}Ug8C6snV?PvbZbygCp1xY0lF)w+ra#RlLXor)Q@xS z(}c>Vp#B+zVBld=w>hX+!y*oxF3^^sjtv8JxVjuvwg&ZEC4i1l_XFA%w1%7l`M))g zcY?YE>s`EzYj>jLAz6@zypt3KLF-0z=K^`U|CBUPB&>C7N{XACth|%ebS&y;U1*1;KZCrw5H`sh@&Gk^n`8szFmH*v2E?#QJ`En{EfuSSP4ZAM zC$B}(cATShbupk*McS}s-lzecCJ?sFd!eX#tpc5=^fAP26X<-UPv!i2gpb%xM{|D5 zWSrPeuOlayOMh1=eFEF9kakxp-9TuiKvyXpVGn1jpJJR>E8R04(D&7^35E3&M*zCO zY{Ow#7Fv^tF2}GVnub#LF5>RP#ekAZ!J{Y;D;>55*H+eBc^8VB2Cj!`7<2^NMgI)p zEE+U72RdPIh1w39$E;=ljwr`)H`Mm=5WPXiHlvu^=pR5dZ~`P}(4r!sM)bZ&^VMXe z1;j6q9I;XN8j+tL4&+lS1^H;Cg^DziY`{zbjEq%45DiWftkaPWy&tQn0)^n;pq_K3 zcnwn1_!r3e8fPd39zPKHXS1`w!?2!%);ugtA4i(6UhmzEomqhdWXC!5edLESs{$#I za1P@P0<&RNoFgQgk0o$sO7?r$ah!5yqi=&}A?FwxSi5*OiWjihvi7a7s<52;0+bJ( zNUB5s1aqZ^9xFYZjY&CY9LGv#Rp4ZpN9UZSEMQgzIC*D{@Zr&Y*|3S*Sm10Jc<1`{ z(hylS^bLr!3fz#7;yZr9VrJFQGAx-Ix(W9!2)Jg^bp8bp7UlQ^vAxKjCiXDYH!(tAY;zk%xfz^Bxl<{(5lE9OkTWC zcO(7+xMjuf9s)Y?pF+h0@eyc+FKmRsq?yh)n@N;{<$PNb1gbs*8;N775hxGo;rjy! zC?aY7bIjifsTTm`>9^Q-L~-Sc^hj81M=Oq`L>EGt99z8sw9)!WaLdUReJRziae*Dh ze(-%EO)f_?nLkXLM)WIaGqi@B9J&&QOAQ@_{?*X4p^#u7OuHJIWE!ghLqpDKfqh|q z<4+Ib6f3YTD=U@{kq9|w1eUVqJq*Q)-y+-mz(P*`S}-CQKcoUk@kL-$IKCF$MdCY< z&xzjvfz$DK#z3B|*uAI-IadYFC8dur5G&rnwYOrg3x78RzF^Jya2c%lQ>Cbh->!wh zzzW9qmp*o5=;8PUL)l08AoekECi{3~BwdLnD7_t@0CN4}Z|z4{;v$Gd|M>gh=YaV6 z)3ATU=RySXtk_`4VaRzQkcUyl7h%1u_$Oo$X3UP9t$~ABb1p|1UkY9XtXLZ+5^~-R zT+W*Nu@hVIYh|3P!1F-7KPU&|hl5Heek!Cj93KL@k@(rdi%-x<$0O)A8t=iDWXGR_ zCF~c!67$WCH)FK@<6$shfaOe^f_04sX~&#vLE0H)@=s7k2AljsipX%2zk+&wpviB; z_Tfx4`2sM-nP&1gP*!G2KIcTtu*jJoJOEv58b_yI@|LD`bdC>-dDJ4srv#fZ4BAJ| zIwyo#7dcCUi_=X{lf2us!{4+!-SnqyT7eN4IX?(qpKf}t9vw~n_lm4dSkljeQf$K>GjTF42(B(y-V_L(|i3*f0u6h7@N+6_7pjf2W!(! zpA5c$3b*Og{-)2kO>@*fZ1i$)b-K~3LE196(VzT{UiTW!kFwEw!HwxgA4%SA^ohUG z&h#KZ2A8eyCeMF&G2_umhNsQyL$(` znCi?6HDF&b%sR&3U0sM)E~H%Wp!_tK?Va}5- zgGOK{ah?`ns$R!VpAldaoNX+a^M_D=(6Zp%zmKUn&kF?S{(eF)3Iyl=y|IA)D9|=b zFQl-(ED+rJDV*Y~0>ObFGz-w51cJ-{1E{_8x&jP{O4$cJhmOyZ}|47UK zjzBnA9zdVvFQNY6=LV(krW^5Is0a{ZS09uB`apPvW8X{IK%I{S+7ZxyhIw(eheiVv zhrk1&>dwcZaexpH8hQhFx`>Ve9Ke+lN1LePXg>;hc@&e5=<|{0oDbPJ-q{uU3+m1C zeC0}wNa;8J<@wgXJXV+{$h8cCFilX2ehUtT6AE7mkr=K2#z98H6p&JVJzP9T3ot>S z4?%M5Fc)O1z7fXH$rS)=^%*%iKp?Eu>EuD4KwB`_Lr^*285T}qH#UPE9yTWO6Dr$& zrozb5s4(qio>8d-!c-|&(GQf7yNW(WMm}1LQ5+klt5B*NVZ@yAVQTACy#q6ICWMD@KmGo|+;{g098V^)}p zRAM<>vGX{!;a5N{qTfK8uXZ9eXBWwFFsS`j9GS{hq&F7}&(K{wBt$mG26r&97SX=B4pGUJh)+lD*6 zGl_g$7v2XL5j_HFzM7iGmYj>tE#CQpgSskwlwi+CTBx{pCfR}>Q^9hGEA~pj&h_Eb z1#LOfe6^Y=#I>CJ;9oj7hcA=bE0Go|?ufS&gT9kT1Pkrl8NN@@9zvS0HWP)omU98M z=-%)vQu_wdLdAXVGh)z-a*14u`8yAWzZNtF*EC=CM_NE!oZaRic``g0B@sOgX`!Op z97zoN8wHXZ2IVZcgcFPC3RDeX*u>dMgYtZMp|m{-X}(&*b|hdqPn95fHJp;#l}HQa z1jkm>jrMX<&p0T%4$Km%tNu9Ur?)RB0rJZ8;}l@Q8^FLpw>lx zBjvwCny;Qk>R;dcxj~#9c}-B>6qGM}q4<%nqHr|{J*Sk4b!ucFG(V#Ak>;!6NDGYE zT*Q^@jEt39T8Df!gSGuIUrgjMB+Da5OYJdIdkSl9s)s}C=X^iXBDEb-dnRispO$kj zvd(#t3#E3Q)c(|~Es!nB`6nHe%Y<1@BN=yfO8YYCZz_+akNAK8zj;)qzO)TQHu9NE{tf!!fa8*f_8R5xs=$Xr77W zw~;a+NAw(|hC)M{0^QsKQa~(*oZb{^6Wml9cU>BnQtjgIo(|m25!y-TON!Eq5t=*a zMNo2Hi_mI08_3hQOn%xp+8-n3Z^36w#1IH8BlP3H>@P{Wc=Ph74;hYA1 zfMZDW)e1Hg5=N|kcO+2y=bR@f7a=WFze392f_s_JtQYVA)T@&ZrIWMRNi{8CQO;99 zj_Bu*<}3DFAS6sD_lyNfiFD#zf;wl6pgX_BJe^573jP)5kF-#gBIR$v6eipb%rto> z>NNtoHWB>^M{pTOFe9f5Eh4%WX}(IZwa_smc#T3^m2;Y)oQ||m{TL~K3pOyJ?JHn- zOeDTnPglu;G4AG+k3v$Pa}QcX^hTul>KV2cI>xS4aZcaMc~wyUjMVfLDgj!iCkB}c z=tKH?a&DtswdCXhHKGfU=Bp8GM(S|m*!O8U+z_01rXlIhIZQBT3g)rIJg~R0IS z_^l+C?R zWFnSx*J$8foAZj`y&-s?r|~9Oy(jz}r*T`38qR)mkmjo*q^4gYBjC&F{zhi%H1gc? zP)@0!PZ9JvX>_yBO;dsLR8F0soFFLOX%x}I^qvgHkl%mIStZC9AT3lIkn*>HAr`YX zLO7xsr*+1TK=Mk?JE|0##2&Z%OuE$21Cc@t@&`Wh*J3l!QHFc4$* zXZp;TIU~yvy$EMtXUHK)KFNszFQNw{HI2uyoluY{j`IRG6z9vF!vt+6(tNcjjgmGt ze%X3{7Fq;!tF-8n7HjrwVL6p_z53}Z1n(Dnfwm& z_#~4rDnq`}0wI}RPRm((IPiX@CkWo5f;TsfC%qaiIE5p;U!Nd& z3Bl`3;~A8bxW)ZmpCu^g3d%KU6d@(stuu!wooDq;f_J;%J($Mh9I-`l!Cux+3(E6? z@^%``OgLP{trFRP{*t zTfnaLg%1BK$!qXWYky27SY#1a2)>0EN4=50$N4%p-A&pIVq470!Unk!=%=En~E?i zdXiu^2xb>Cr3Zt49p`d%^ap}+o}m1gD6I8cj$&hrk%Mtw$Qk;L;LdNd=25ak_8GS`+-#}W3D{Dl2@M{)&0CRukf#q{1 z{NAT;OpsQYdmLB;c%SOzmLoYYItm35Jq9VJP7*>z zwpscmdLoZT8OcCI^`Dr4^ZO`+7Ko^BfW31bk5&UhMD>RyfS!sn?66Ad&uIHLM}G_m z5!ItPmS>}kARwZ;nS1_oQAP|9QJp~>^+J@9fDL$fg6p;=%0oXQs&fwl^ip&Qpu3bF zk3l%EM0s?_(}06n_ga*v^i4{CISbI%=)VDNMm(F$dm~y4hhdA-w^C8wjPh{3Rq4Nx z|8GZmGTx^2`%ysKqC5m|SGt&demD9HKsyl?rf$C<@pJmb&uO01Hz+7L)k-t{W%~!iWG!hbc*c5;q>ECr0-LDhS)sM;8CO~KAe5* zTkwHLk+yPG_O*Ee*%s95U_d2y2*kDrbq6s=*y8~0#6wHm+D6*P0@@YS!?1A90rvL+ ztqSRFYAJS{Me&g)V0bLW)mD2&0+H}!3gmf{_78C7}fNl-x zT^!3~oBsG+AzjZoOtI;DZwzTg$(m~40%%i6KQ;-_VfG_{Hiz`TrvWI99u*BEz0Lio6hgHkiLPv&$8*~ZV%}{P{Au~`mj4g`aZ7vY@43yu8=N-XgF2& z{eV`5^_QH{QTF42)`a!NT$LJ|j_LZazM7n*ftdQ z*04TgHlTXD0MK1weJ4kDtUUtIMo^*EINlxyXj51(;@nTP4+FG0tlK!hlkM4nwuE&d z_3wN30zg~C`sbLmv&jA)plxA2WhS7-HvQ7=VZ9$rg41NL0kku$+aVfGvrSKQS6Kgt z8nD!6^k7v)x02?mHXX(_5q;2MfLd+3h3g~wtXY8CZ90F~Ag08X?zHLWZHVZ{*HJ4s)E{HXXOSBD#umUuORm(8h?~a5$h9_7{LQMRc$N&>1%Uw9OIy#W+A`*^2;e ziRcGO2Om2T_ZtN00(%r#w+p?O z16pI#wON&;U#6~HWX}V%CPxP;XP4M?X4dEE<7WW6)TZBZO^%*~0XpmL#{g{rCP#L; z&F$*e9DO?1{R*2N$zAxC z{L1FuzCr6vn2Pgj`)WY9YQ2M_zT3VXqL066GkAVoHH4xcH{s~dA4 zXJB<=%T7bS2-J8fUz@IV@tOuLC<4nF>BfX#@ffu zW-q1oWax2h74uW=r{P7#&S8F&W$%~+;9LTmExVnwSxsPzWmjQqik(Mbt7X3dCdAGs zu+6gPVwGbT5ZG?n=X04aB(T%6Z-r#V))3fb*&STOwFFivdnMakL|_e`X?zmn{t*T# zoX2d6_CxI@TR5AAm_c6b1IAG8MzZfi&es~=-C@N(lBo~xZdh!^wiAOA@d`c%kUs(Z zZ51o_@lOGd$c^n71i2Z$IJv}%{Y}E5!}&*1W1lh~vY#6X)X$iQ5I)Fh?|dKaqNjsr zcf~$mjkY!)_>6tQtYsfmj{KKDM;>!|EDyjg0&A4L3yK!|_agw-E1Rc-*jIcW{TgLI zLe_r$8frEu`*beMH}`>Ax4O@C{s7CO7Tr5CH&xV@E zE)hWMBgm9>0_5rxw!qk>iavIprkfGFOn@Ri6J|KJUVsu!H!b!<0Y>X-obly~%T%gc zF@o5S1emHr?&1$1Z7Z9uR`6`su~cSh`M`7ac`2~>J&jb?=^gV+BZ4l@ZrN5;@-XIX%>E|f}H!2D=-03gb`_Bb}JN+;%&P_rS z?(`4H;+y5!;M?HP!brt#k-FRQg&ivYF9fRcrQ)glhaJ+LUa<{8<0BuxQ$v3f* zfqzoO|FaJlby67~Nr;8i5{Rk(a45>d>RjY49bn5G^$;sGZx&)v0q`_9$C;~kqNYf{ zi@hi|Q1v^M=bLU6#q!h%07mO`$c6%SIe=0X-QS!Buq;hPt%eLU65%`5N#eyx8Yn(8&W{k7gEJ;>e5x2sK{)T7i1E)DY!bF zNDC&Q!>WiL1i(y-tTP=6wXB3nY65o5pDJPRbjbw4wF)$ts4kQS>(UMGOgG>_3S>Q*;DJwC*U4(5G++>=P`+OBZo0wM zz%px}&fyus64;B_VQMjKm{E=Cu4-)KHgtqKixv7SD!>eNHGn+biV4MLs`~-p0hs*& z%u;UxDA8NkrUEzMRE>7-yK~h307^9<1c_Bko2mL=WX4=|6ov-X$RX`oMOHvH#1w@@_$f>j&GZQ@vgwpn`UOhCsgas*cG_jCwO5C~T7RUB?&C#y@)4pwa~ z7!*sW`vAeJolmGiZ36_$#rS=!N%5;0uvHh4>q}KBAlNECa~?ZYB>=%zm2x>-)un)7 ztB#BTYF7^ff(1I4?K;&*fHoqWK)czca$%1)A%MUhx&?Ey(nCmPg_?l6Ey|Tt@_0{4 z=8_bOB$Mr?-WAw$rHaeWMcA|H_33)9OIE$NaXy?z;(GOkRPdhwx`^m^)0kXLA0|hD z`dpM6dFHa2dNwuoMdUf64;Cc0;A$Eq3L@Gcldj@|WvYy{QfIkqx2CbUkl9#bDB29Y z%hQ-#K@fPWdHzk5f57DwNHQLi1nIrwBU7 zLaF+%=t)86@yuHGOe{{k^cZBdJsqxAd;;^iXv{BZ2R@yNqKV8#$3r8J zk56gAo@~DZt&ShctYtT#GCq}gZGQ^07N5p^p8azN`RSZ%kv$2T9zUG<68qo+g7pDEASA` z@C7Ha_o5%dVuc1yszpis4h-IkSHmw>@$X@Zf%p|zxL|zjFyO?y;jx9|pTOIS#0R51 zCw_DVF&{#Cj#X3!28RZ=@T-jRiC9-FJ^((NitjfWgv>*w-$$Kz`a_|X{C;8qzrhFo zu)>%aeoxUWy-Z5UYJOi)O3jwYBDA_WUC(bYn)>v%j`}C1o}$a|G@5#Gj9hQ(gLM6n znO?nH6-I$^+-9V!M7enK^h|6Cs`AybX$0ob?Vq5M5nTzuQ0VdyP`X%3Ii$tq{S*44KWE7?*9>r!XQa6 zqPHR)`XR+K=WWnln){aeF$7$`gPZ%dJS=DF%~-?ScjTz4aZhyX zVZ?IZbx(9j2z>5)LSVFbQn~M|+d;Whe_Dx}4+NO1_ZDR)*vYxDJ>XClS#vfzZfMQO{d|;-40w zCjKs%fbXMW#)0^Dj6N9u67vpO(fh!8UDO?bgxC+4fV0c)Ln{PrAR0x>DS<#@kgKTZ zoJmAFkL+?p_o&O=raHWj)nyH}yvPng0teTzX^DLsR$}l;{37Z(%08YINsi~d zussEwAAA~HuL;|C&H>O#vg^afWR;@1n5;!s;C0Br;I11nuxR6O*#E&RuH(4kVAkN3 zGCg}B;sb+!Kx*24n#9h37$|x6B;s84F7ie8BAki`-x$D%FfNY$?gNk?ZGVq#?;DGJ zsmsB;fnOlW{m6koSEFxS#sa|YG*ZK8k~POMek0gi0CEmMdOVHvA0kO2RRhS!h~A#A z=NK|g3%Hn)07;{20C}3rrn3MEM*?p54Qxqr#-Sr43MPh;Ml^AUiPGSxi@X`{8a5!0 z%wx9*Ors!r%WTV9G-TO$e2AJ45g|3~9kQG~hr}!lS#H=%T{ZbUn_r_h`68PtIAr-m zkSwvOwWhq(z5ok7WI1iwRGU$PA_zDbQMjT;bmD2~e? zNx_xI{xHxkge#3dLzP`3)Q1@acm0fXJ82~)w&So8qs4(a)?0N z5H=uGED&xH9*5``?<1xPw+Q!gdP4=mEy6e8eeu3x{#NDaUvaX-qz<M4T&jZsem^H)*%l6>*OQulaN zz9e5fRt)pzsC+Hng|;~ia(s79^h-x_gixTL5d?5(r z#GgA9+>4iE#?kow(0M!l02tpd{vOJ6<5xnD`^T>X%>nTTv40PYw}3%;@wwxL>>;twzRw3`rOjzX7%T$ImFX ztOMeO=zVnjIL!CJcop&o#qYE&Ym7Be7r#Qy%KI7a3$|G%F8xpttg)o+Ex5$ z6~x%CI|SwOXR0ilf5*b)LpJ|1iOFkQjKlA_EV<&56iYtO7Ble}1*XUr`}jENm)K$* zB|q9;Poa{0sV$aK@>4}NB@0=5ybw4~a5#{)yC(s7l7t{$Ptq(20Eyz`%LafD@!2W^ zKyC_Y*`8t>h{_D2Jxu^NIL|`>iZ>I$tw%Mv{|o`#dMu*ldX@lgJ$?@lulNrHaO-ga zJAIDR!mY=hShwQm>DS+?Z2sYm;ui?qhC39Bz5us_G!~@zMb_M*Z2q;5;w=R3RQ55f z`6Gc}Dw}_EqxdBPzfyM7fdF3acN8O4!y8+y;=fReH!8bRld?OgNADB(y|Q1Y z8h^BuoKp4&wBXy<0NA4JpKyIY=Dp2UWnV^%_E*+yQ+8_wfKRA8+m+Fy9ao@cCnNG_ zz|@+poiqy$fS8;8o#?2qMX9^>v!12KVW2Rez8$4QJ0W_A5nPIV(f;6FsCXxLs`!Yp zz={7ILX8s*L@N*vLSutyMr)RPJ!)xl#U+WObQ@}imX`>zk5Dn-&qyMgQ^$ihn8aa< zdp4rHDBr&yD5@jGMe$xIa2aHlKk7RES=|G=M-zj7xLRn9R`0>pz@GqZ27>p#foswY z_?LDMcnYjmE9h#eg$L|69Um(>PgRfB^!L;cq_y{Uf;-Z!pJi)Gx)Ki(tzU<-sLZ5C5x^j zP;s@xbPY4dANe*FKGk*nGskAqJEUt+J7`HB8+?mp-wM!l{VBVi901tZ)?}$qq3G5* z0L@4~<4D3m)OO)bn@YgZ01rM77GCY7rXLLu3)>IMs!o-`c(0Af>yH}zsO#>)U=BJN zdZtcglhtT)kO;=9bl7hpC_*F0kT(eqr`X8u=!DRsv<-6|dNcn9oKmH4Ln4RXVt@&c zfvodrzn9U4g8J|wzfzv~3lI6wE&6DtWlgL@kvfc091U9eC7_AI;V?w%!s%EG6vo}c zugXw(n<<>>7XGjO_v(4l3`*s_WTA=%XF7)dq<>M*y;AR;u(@xeSN_dt_hd2Y!V$!} z1SM#@$Zb3MS5&^y>QcDpDBch=BrQw;1|bHX!(hV-pzd!dU?@`|htYIxKi1lAEn2b`PL`P_?5R@KF{1PzZdJ$l#l8XiBLlys zPziNu51yI^tQoXFrs23G&>wu6P_MDz!P?+}eb7&SzB(Y6#0$bgvyiaqt|;9^Iv5Oc z_(KuXh1?JseAt^>F*;n!3GcYr5Yj^4+V!mnZ zhs^*17GKGzbk{Ph{l{TqMjonTMj|*Je819T2iJ7;I5i`;FT4YR$C0D&0Ho_6Uo(JX zARAsSs2rS;9U_nI2ibr%%#^|^`C6c^G*f3pbAnrtmdA-13=VWs2Aq-0g30~{y~Q)F z64`Bno&<)BL|RM0#DE3U4}n$FG<=B{604*sf&L(uVG_ ztu5_6E5^%Pj>fmNH@5aPB@Ma@j9=W+o$6K63mBhTiQ4~_7rh3U?(P3g>+wSJ|8N9Y zzQrwggUXWRGQ8L@H9onb6YnbdKP2YyO9nK)Gu47s_r0lE);-nTgtO+jrC4dJdu3-b zg)CMa<7nwX79w!?;+~e)?y)WH@I!&q(v~#k9yW}F`_5>u1npCJvrMwv&|d;t_;&!W|nB|Xmg3B zS`ux^wvMiqfU)^w$|lp6Xe0@*QKF$0@4HAt5Ew7dmr|z34hncf3*Y07w>Efh*v4>x zjM2JpUXZt2Vgz`}_#Wk^pw}xHOp%NmSug;UTk*+8FbHS4PK?x-IeoN&%QyA4CFwmLCSM0gHKy(RGq#s zIOMhQ!4~bju%QYHNLlmqUg6a@N8LX9uFMvszOg**=yRN2<#%YPPvrMPB3rNe zMEh>#bm!UU+xZN`d>rkQzDvO<-gjZ_<%NRT(qX2Z^|mI1)Qf3-c9oIKKC8Jc_W6QE zLqAK`zMI5eYBMi`>=VITjjYN${liC447nL1&hgYhxtEIEMqbsp&0_pd(a zer0X;koYP?ShW-yz{^b~+I!j-dpa>-<+Ph>Z#y^H%4i~@6a0i6_RW0q!9W0uA zLftVn7+wKZlO0n^$Y48WPP7Z7r=UA$VqT^J^B)sjf{x9W1h{sXZYY z-r2fRrV4}Go@!{6H}|e+X%cyCT>~6q&XB&j6W}(0bmKgCDE%KzlE7{%C)h-Is zld_syx-d>`H!U26JBU40qoT5=5~6|0H?%J8NI|C?R!|5n_Ym3K+OWjW5f}(pU^F8*J3eZ2I#X|gHOv!qv&QUHn)kL` zSP$2H(UhjwL5!#@5gp)$RwMGg*NkiFvjn}yd9`yAvuftel98l)6Pe`9 zv7XQ^x)4U-$VMYGhM?7+T%K^1T4*oFOg&}hYaPLW1ndNN6_K0;$JIa;5|zi7*DS27 zKDLq&S1rp-rIi{x2sSJTJC>%QiQ5%+4cZK3g`mi~tNT)rUgg?~xpi}_w#5(xSa=$F z-^6Fv%qy#x-AXJ;V`~R28JR3fM$6IB(QSEVQ3M1+3gzgAah*`=l7jV?y^o(_mSJZg zny@o83_YD0!@vp2)>gitk~YyVkM$Ud8QSdX%9;vD4R#{LW0Lq*B!wVrD-}MwktoPk z5065oIkk*iNcn;qm^bXYW~rosufqkE<;RjWEXuHtn{}Giu9eLQztBjVLO&;K7uM7W z(^ev;L|yD_rU$~$$QMM3wDoO0zm{YP9`oln+)!f+L-Rc+I^nkrB4eQZn40#(i zAlXnwtJ|=nnr+?PgCI&`Ks(xDjEyBS$HATy_I=AUZ@pB`@;O6Rb3>{-#jiHPMQLcG z0ZXNzY~Xc`F08LSK4ElbWrDS>h@ZBmaXfi#YU#3EAJE-kgry0XWeLJz*_Zek zE)v$>(3bQRsTFKUwByzDFg6`sV#vD?Z|sIyUFq)SP{_6htOovbJ5BG*vKLEtMyZU1 z8Tr8kQSH6fo~v(W&Q*06*xliJ#S;B*eN6}>;B&YJh|c79ytUTIqt8Oa6)+l_Q5n1f zBr$8@?AdTNYAS2zKt$aT0_+!6UUuu&EFGIWufp@uj8BZ+wXVKw?)oZ4%Uj8fkSl-cfnsmt*(Kq>cx)7f20(iOgI87KInscrxtE;D@CFc&S zu4>+Kkp9{^vKb^gJ5qhvM{#E}dlnSWJ;HfM0RML783ezU`1WY;TrbkgBa%;$U}#+b z*W0`NMx8b`BMD;7yUeLe_I-12uuI+9_QmI;@1f9C4fmYo z5^aP7$7=>xN_=}lU1e=W{XAFjVW2HKW!!69I%RzRiMzyL#Nni+q`JOr7LILVm~al` zQBAzZ?yjD8^hwb-Gj8Z?$yf^6ovfCWXA>X~dp(AthE~RSxjygT=(otJ_!z#$>qsTw zeH$4S6|JtV$JHe#?Rp_N{9re(kYW28!uvKdkC#oiz%0?NGy-CQGmXhsDe)hVj2mdI zxld|7_$;2pWz6K_u8xK#_zPki-L1e}?xc?|vYETWn6f(H_!?tv zl-*br(dCBDhQ^lel`uJt$z&54nhu!Ce(AdvgWZO++$?tX*k z5%M4xtksol+2YxNok|$?2MB0bcke7W2%_<(G+hzM*T8dkeQ2j)-^0RLdE3k7>C2 zNhZMO?-eKF-er^+>&S?ayKvHV#&I^w%UFvS5U`9@kWt8Sj4s@A9Gf7dxHQeu#N!rJ z*PG)2Ct;dOSz^Jw>C@uQBuZ$scMB&4rR z&M62W?df6n9jt;b@z6KH{hZ`}PIf;J0b3GHE3q;yjW|AbHF&Z}uY7LV@rkmUnt8_| zmNUPMv4Fl!o$stqM#|-~=O#+fB%@Gns7{p1x9n+y*4@z3+9Auu+O%{VUlB2@J~o)- z3Je~%D;X2*jzBu$(z<(RhML(6%-Z{$ijJ-(9D>X?lk!_f@n(e_&*zP?kkzGT7_ZkmPI$g1&(W3yoy63NHzb~0h8sL- zBRp9>`vfmgSzfsS9FZ0D?6L`egRzVb)>PM_o>7r**#bJcFjt&DJGiw==z)tbO=WnQ zz9=*a&$;fQE7Y81u)8_g-MG|*Q++!hqVttm_Qf9_Y-&ki`z6Dnn!V*sc$C?ZmoG&x ziN(Nj4-|+HE$wK6LzD>_dzTJ4IT!;;b;@>)A<>LJcZwGxhQzntJyPnfnlGZllQkms zWRDvj$TTu5-9>MN$I0F@6ClA5S9f4Xy$BmLN45;8Zf657R4~-m^lsTJ=waH*&R{kf zS3&oFS7KU-69^ZmyQQ}eNJ_oJhcy56Y14sVmqV@}1=qT@!8k3c1Ox{j2HYCi9ViXL zREEIJy$f6tSti~yS!$HMY5 zu_+Sh<8e|~CzUY>OzjZ_AgkFtO6v2z$sii^o7{xZA!Y=pI|ykqK~)6TZ-GR=z0^6I%|HAci| zBi`e+?DILfu44t}BD!i0+qmjNa2`Q6;dt7okX8b@I`8hj?gnCpDbxJ_IdVUoyr+uO&7n51uqA!*LIqpiD`)ckv zLfiyj5i>CHg3gBJ5O;It7a`$PJPUw>Bck1K?vAZ=dDUwMW-Ucih|r&SlML>=*jX%SsB04N#C-h3`w!6b>+BiPt3s`5JWJMVw6P| zMQ)Q|{9J?0um1S1p3*{O&8?^r^Fe=Ic2`=B^l2G)Tt2SLO%vA>kpaZ+@f0f;T}+YL zg$NqiN^6Q4s*eap4L6Hd(YS{Lb`vj-n>%^c2GPN~b>oz5{EdVtG!}D7x>_Ow^Ad0# zYwHtozRY;NMwKvNKG=|`t~fqRw)f&hfj(B3ei3inv01=Mr-P-Ue`!b3+j}@=nV~oT zOhl@$7=o+g(8LzR2l&i{VNx$w+K3Dln={~6$!jUxb5%g}*`b(GGi5rER>~*BSu^e1 z&ZA#nOh21%W?=4_uhYNmd=S93ajt^n2@7%=+wXCe)pM#aO!4NikKhRmSX2{bkh=<( zQ2K7GYm@Ba?F8Z}bhQUX8xY?(7P7~}|IG;vYqCM;v zBATEn5o7Q3hcg@#%U))t_dh>!
    @mwrZe+@*96j67=N zy%=PTbbJvq6B2Jsxf@uoh+}5t2n3otjtqUjaP* zt%t%553&c>^s=Q2=iO6ImTLvOyDPI<)3RT|T`Z;8G8p9!V%RNkIjO?Idf782tyaa5ewy3B(B^0dcH-a&{R)VTm~l<}I8L<6|acHV5BBeCFv4<3l0Z1ncWN<(hC? z#%{<15-ptw6=f@(k#1_e7!g+i!1zX-ATlNid#d;}S$ZkD>3TkV$ju;SALxXdd6?AD zH)wDST#L$$9!&6^4{@Stfu3fT&fT`sPm}aMx3%JFFEP3d+8|2oF;ol)L_>lStxz9` z4wfIji%7O%lRGBU9${cUt%JW)lMXZTsi6vq*TGI3KS6?Pxa*+Nfc`@b#g_5FEFmmz zjKU(E^U)d;%kTu-mBIAc#5G;sLD3w7&55^{Q|##?Pe=aKL*I{;8gDeSnCWX5 zvkqntF#_gAU483(0z3!5D9D|yX-Tp1tOH~h&rGGg5%9y+vtEQvyFP?kdg!&Nct#m9 zkgjAit~-1?s!WF6(9+;Z5%bKb9I3H9yg!t$EAp8**+jjoQM%LOtnhxAM_9jYtE;R$ z+A~$&=?)vVw~hOPEiTJ4%xq{hI*86wOM7tAS&nd5J0HeFNXyS!ikWfjFirEVKam>Q zc<_W2AMKHC(7i1~sLRzXSY`>>$kgRPNWBx?;|drlmSY)*mF+Q_5yM53umB(STf7pQ zhObqgmP{BAmQ;KO#)Q}y>Eo@1TwQ0JAWX@N3iUd9N?;H?dn*WjfO!WmJMy~W)kr>O7@2M)>dFq_%n-MedsNR7kiUWQUC@uXWXbHIH=<|j^z zXFX(9P4I)lK?{{FYlgQzWp}qwbG(-C4e&n4Eak#lY)zh_^IvV!-h0tJS3l&+qL(8k zt8Y7lMHlpYH;YlSyt{+#csJ~T!?1)oN+&8$;@Qs39(F#Z>#)&D!Ue7 zt*Yz1FIN&nG+yw9t!1u6DNW-qB|@A|qj$J~f?U80S~bR>$3?*K(tAOS)-Y;PV@-Xu zQ&XE!MiXi=V-u&7&@?JBnj%wETU$qy)+l4Ju}xK4tm!n;?^}d=oSD-WTBBpbr*FfiI@mml0;)P$lbZ+~%-~@U z%P?ARzE#!E`Gx{br^#1L6_@V*=*8DBr-h4cwV6>&!i#Bl%3^pa}<*T z7iA1%AhM7y#k;0up&ExR}NzbIUCR5p@qVu&`r-)&bj)2_9Npy<-#hCrjDFU0S zwb^WK$R)q#g$G|hFwzT;q3Rf1tB;JqMd>h;aco}}4=!4|sDIG{@3r)EkYGilO9}%M z3i?*AS-WnCR)uSpU%de%B8*vR3xty^HUN-Phjtm|>@yJ8>IL&SONX^aOrf+tY;0_T zL{@8{;gVL!dc#VYm(~*VK+vC%#dMSotHE;kP{kQK7JX`9YA;?oh$^^Yb+7!ZJgDer z&2>ab$hytzH^kv525m#B-CMpA>2gzz^srapnF5pTA^~j$>LvZ?;=7tVXKDX=@~Y6i zVj0NB^)yMk^}?!2qwk{?mOBI-cFM%8(6GtH8HsX@Mdzq?Hq8e+%W^n^pm_|U!DFgI zYQF0}oX3w-JE-NU>BUl+HT3#HVUUIa)Owjbwin42GjZ^!jkGpJxfgTQQN^~h+1p2B zO6nUuB$+iER$wYn+-0rHq*88!V|UM!S7oWUR+p+J8v(2g5Dgx1^x&XYoAj3K!@Vx( z(6Z8hIpmf>89NLvW3%E;J`T*r%^6$>4MB_*KBbuTM534K+$YLC4)QeTwf9u4eL>RN za|Q<&(Px^D7)fU%-+yLk(;$7#f{n-$>x1_Gd6bn)4nB*r_pbCeIxu90<$&%~mdjbu zu~F2;b9vb=yri+KmbGqZn`l5V1HQX!^CM2@;VnEHJGM7MH8l%F_7WFj)gIT^$drUM zVbWM;JOgud?W0ZOiVjzJ?NLjZGcaq;?AgekjnFvXjP@^SI;9KX3Qf@t)i4^}41IR1 znk|$T6fcSk!l3D|8(AxB*u>!hjstkZXz3TIyN%Ayr41w7LzrIhozC*EN?MV@-+q&7$^P_9PNMR-!pv|)+CV}L_tb=X@{>GrK9HHAyMM#-NlV5+AO z5Cv7|2l<#ewaWK6ci!NV#2=qbs#mz0oxKKHy=2KC%YS4e$LzeW^J*k37quer!&SXT z+AwQlJyg*wbg*Gg(6ym^YzN>)OQ(~x7eck$0(&T|q7u5#D#%2r_Wtg4+pq{4)eB=% zS^tWbs4Au&bg0X$pW zn48qsU5moi>8vu@$6cA~1{a8}j%%94m?ACytVPfsljhG{u&Z`FU-`pnE$Dz)W-e=B zYK3MFLQ=J4X>Tu^C7CHew+O413@=b|w}kc% z9eW$GJXnZsTBb&k=_p>?Hffu0wN6^8yj0U#FG(9tR$X}8r^_jjg2d3YO1}^-M4!@? zwRK|U@Bu*Sp>GB*nSvOgVx9O#CNG4F2Y3b+PY+ZqY0`#Tnb|N8e>;gxWlXj#!scPA z<(8iyW>BF#`X)|K+8%9P;X-c5mHwRN@rq@s-yW!-C8-4OpEA;qE0)D2i*FJ&)%P9^ z7y2#tFyyZ*Ect}p4n|06$$ukFsaTf!?Z+$VG7spU2yM69YWLG{SrV$;dP-b+Ot|wr zPl}5XE9K@{&}*yM>iM@VuO`_QW$(9FRnU^_?Dks``mWtpJEw+P@#DxH`FVg{VX5C< zQw4Onhy7@T>S14AX3Yb-&!oD;ox48!fIYZ;SGd4$J(oQO2 z%@Ok3zc7f~efj-gN47E*UG;Z7#ki+eQnh#WyGB~qndNLFaZ`8xy2A~-$NEE*Yb!PW z_dU$sse-OmL1%fRVp;09AHZ&!{Gq1kP5kdtZ&gwk_$_vLlwU((xKvEeU<^|47GbC7 zG2wLVnzt8wy>gRZ^RgbntuMm=tlx_}#jWxr^H?L{EAqgW8l5G2`SYO)Ov&ARN_L>Q z->6~}aFEe&(7vSvUa2SW31}}og!!B%Gh>$op&l5DT#5eF9E!7_?cf;p% z$n{O05?xIt+L%xJZyp$J&xzH92S+zqQ+R}QI$~7)jYmlv8m*cy0(3{Z*KwarPsyz6 z!5phr;IhX`cvYE|Eqx8GhFK>>PR^CE7vXgQu2DJE^%tK?v9Q6Pbe`>V_L$A1hA$hM zt4PpV9(RJfj653wRYk)qhUBW`0q4sHVJD*LV0sY|wDM|fHrZg+@Guu0C$-PbNSXS3 z1R5RrB4ihoC^E@#Q|lsOjS*xVAK@DfmJwNm-!@niB`rrJ_F$)H$w)c~`$!H(?z@Z- z&2je{Vrk^O=uU&GiPCQxVD*MPPZ%UgCGZ0Sv_OgcFd}A%A-dmDO)sGX2IWJ*(~r@N zS;D+dtua^<=imbd7UR8_43h z-LE&Q<*X$0NC>`B$ze%cjXlRnlq{9Rca50UfOKTD?AR*rmdi4TGmlq}bh4%7dBu3N zM=&3F9py25*W$zh`67L9g-F^1Qfv^Vwn%&Uc8XiE2;tNd69Fj@fd^CAUb+yrr35J> zfges`{XzxbSKwACLhHfy+f`aEt3o&%1et}??^Uo>z}#OVfp2owG*3Gd-W2C?62(EuNb%LcWlptR^K=gg4L%Oqx$I(STRPO&Z%fh_U43aa)n2(Cn<8zr0$b5*e0PgxKoUV_e`G< z_rz1;Ik_M{VOwOPlVvDjc8i)z6v;5lc14(17N-qOz}s_ zEahK#v>pV3lQ;!@EY6Bier*_{UHw8(C{W^CD+xLtqavT9RBnzDZ_<#aa~CH^#* zOGyVSIcZ~J0)GeRiZHGMZUeS2P}%^fNl|8p$y6FtBt2cov0q6fkLcCd5;Z5vP6jbG z>S?B0Ks6=uT}itXWiGM+n`pn+OdHLHx7|e0N&HgVQtrtU8Pj(#O+$nyo|0v%G=-cB zGGB`1swAG95)*$dEv}I&WE7e^NbLZ~y64;4D9JTq6@1KsO~m$^nALSqa*aY7l=n|& z7trJ!*8&AHXvLzWh%6(4UL93{(KvHUjV7Ov4U!+KQB%|3x0yz&Keb;5xfTk2nLOF`Zpl}XJ8#yal9WfHR)^^tJG=nQUsnB0ktmOP}pRi~GJ z#o+qwW-d)JOa~pv+#+El3^r3O0hfcCe+8w5|N175!nTZPZUGx>OZ=SVD|-lV(&02{ zyTbMhMxuRfw2o?(IPFwTVJcdAsthy{vmG5bHE=|)pD#5~Wo3=V{WlKsq-oBjv`#wBOUo3{*rqK5NnV2vq9WlY%0wqFc}<#u9XTaxF3;rz zYk-oiV1En-(ZP-1GKJoa_K%a;x zi%E*}Ck#oONOPZ>^y^lN_B;#EX2w&I5di$Gb4SOWKwZ<%DSJS%lFG)68rn%yH7hxZ zugDGEJh9ma9XXfe;8F%4IjD&7&EE|o^V&fAwnc2O)->XDsoj2XaEyuJ=AvnG8$O9^ zws?omEU5S4HV_hD(YVL--K7MWpUIiUvGfICm^DN)@X4EI9)1I}!{XRb?YIc4HQ~a!@itg zZYX@kAOA#_Vt1c7fE;?%(td#T_rZz@UHaPL(_0@N!*k{9^RyCy>%Of#j<{Nk#&abh znQzVXyn?n+URt;Czm(E773y#`_8fldSWjQgqApC4YB|6O?~@q7754O12j;|$L|y}k z(o9yWn!Pjd4EoaRR3?0RAbm+tcT^rxFLUH_gb$ba)7yb3-&LqBYvgI@z${wkfrS~y z^cQg8f#B(6y=-lLzp_~gsf&QDl#@VsdbpL9ZqgmspYYJXDk+o*JZY~&Mz!zrm|<|T z`UM`rDLdxyY~4y+Ci_E}@6qd)xjeX3Q)+uEo^yU8&TA*^+S&QU{5!C z`-z-xt9FyGn=Re8=~gp8xG=_Scdg-T*F)hAEezQ8y2kG|V58U8>J6J)JP~W?bhvEE zlN=P#LOp_HkSm-dgyQQ7(uX!^=)IPc(e5^3Z`+o*r?kY&xrGtNTF^F%mr!ff8hEjC zrOF!Ys8KzI)=F5mh7qA&uEgT876lkOWF;lsbPY+tmd*Uvl87`=42V|1F4S59H_4W} z^0$Uot=P=n!|B_@pyhGX<`tabsGj9Rch(gv=tE*pvcb6B(^JG@>@;t;2ulr8_G~fL z-oh^pV1kN=a`6~5`Q6c#U!mk>zaz3I9Q}vqw+|iK=<>Tv-mlAyzuT@y+SM;;%jMH^ z`H6Pp*B*Ojyu5Y!i55T~t_<7dr&@XweKePqmP?G)!$12^gA2oJQzsKX( z3qgN3k$=JD{n~5tOcvwz^cx(8aN~I+_KwN>b(clt@w>d|e?uYvbz|`BRtAb6<=NDf z@}x6e=yK#Y6(&sn{Oa*2s%iCmUWf6Q%J-SPUzd?7`Pu8idGPwX0hd&MyUF|YLC?7H zyPQ3Sn+y5#U?k(uudpd)KabzRTXDnqp(4reVw3mlL=uyqm!HFTfyR6P9yVEoeqE5r z^0thBJFrxKx5@i;fk#AP{5*br3SlR1$l}G+)6*-Y9xJG_yh{0R6!N_$-+P$yy9)Vf zCO^&O%lOLYM+^D0O#ZCHl-~<^e!HIkK9lb=`R!JIUhW>hk;8LE{4bC11%kuH$IB)3 z>ZSVc@_u~*l(hWA1e2JcB7J(P{=1xCUjZeR_Y;ZxT;4w{3!%3PNpD`mC6(WHoN{bC zPU)NUQvEN23vYnJw0QZwY4UHHd|CfJ-5%h7_P${gu2YcaR^(BsG8MT&h?9U&>GIApgjGZ~Z~1_-C1XS^l$bREdYrb4k5={C*wi5dWL3SoqEGildLUvc9;3{Aqu$ z0!v`0OMf1(V{1CdZ~duqyzGp2E#+BFiy{`zi(glPErmewDETSt1SRh{sPa6_nZGIc z<16*=-|GcGucr9-jM11}?+2Uw%J>~`x^^RVu8*bkZuB;;U*&jraJ?zVj|i?0<@ng( zdQOhNFS!1a)XxW19&AE@+*93K~4KgjV92JiQC{HUrw&+(&!_tQE4q2T>* zjvo`eU(NBJ;QeNfj}P7-=Jrg4coOXr!_wW(H>)*p!g4e%?Ilvk3?xO$s zr0~c0;_bnehQDL|ueUQ>Eu6k_xJiDU(tk5}nEr`9y$N>+cM5(?II<^$!+nC+)Bg}~ zroSBTe;0UDxjke2eipiqC!X)X|Elr(yaimeWE5Nzr_+EMTau|z(VtRbuVzy92 z_*KI}lHXf~f7Eff>+!coFX0^EU8qOF%9-zvzY7fSD{%HtP5Ip>{1d}Iy)Ti{f70+f3Vgre|5D&bLcd}9 z_Z0XP!(T4&1%`jEz=sY0c7fkz_+J(HF2lcE;6F0_g#!OS!=Ehh$BerxZ(Q?{8htmDex{dq)g{O7WgE?|D?eC4F7(CuQL3b1^x$y-&Nob8~$*C z|Fhxu7Wn@N{??(IzJz|1>Hki_KgsaFEAW2cz0$Jh{{}nYR{)=YPQ>TUkqr556TGf} ze%|AG815VHKmh_ z87=9z&6IP-1g(@g9;L5qSebhUV} zk%L4tcMv=A;JjUZVl;jqV-eef#F8G0T^*~PZ+wwF!PJITxaB^HVn2%u^36^sXd>IR zS6$@sRs2O*4ma8vWm68?3*okJN3zS(<+dGkhr>2D;aptqm_sh5!3zud+{g{m3VIAh zw-eJhT4QrJ+2%lW-;eid(qsv+z&_h=&_eXKSJ3fvO~b;^4o!G{%6fe_aZ2hqhCjURQVcggIazc z?|o9apU&PKL;Sw)Tw{a+c=QWDzy9Bu#cR zgSCC5mRkCeH0HQ0mi23~Uwc{mEl17C@T@cjZ<6%V>rh($&5YW7RaM$s-q9kn?yxZ@ zRY2Z0H0R07wCOu&&%Olv{mtulzmrkxe({dV*xHHuL*eNcLx>2JM&P~_moU#Qgg4nRK eM$ts(zDLO!L@3Qw;xCeICY7E$j8lqKr~7}l_UQNk literal 0 HcmV?d00001 diff --git a/test/auth_plugins/auth_test_plugin.so b/test/auth_plugins/8/auth_test_plugin.so similarity index 100% rename from test/auth_plugins/auth_test_plugin.so rename to test/auth_plugins/8/auth_test_plugin.so From 9d6b1cfc813ee872c9459884324244d4cc78c2f7 Mon Sep 17 00:00:00 2001 From: Ngan Pham Date: Thu, 4 Apr 2024 08:57:35 -0700 Subject: [PATCH 6/7] Remove curlies --- script/cibuild | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/cibuild b/script/cibuild index cebe327f..b56598c6 100755 --- a/script/cibuild +++ b/script/cibuild @@ -15,7 +15,7 @@ output_fold() { # Only echo the tags when in CI_MODE if [ "$CI_MODE" ]; then - echo "::group::{$label}" + echo "::group::${label}" fi # run the remaining arguments. If the command exits non-0, the `||` will @@ -34,7 +34,7 @@ output_fold() { function cleanup() { echo - echo "::group::{Shutting down services...}" + echo "::group::Shutting down services..." docker compose down -v echo "::endgroup::" } From e9a4c65df8980abadd61e11bf2332b32b261ac40 Mon Sep 17 00:00:00 2001 From: Daniel Colson Date: Fri, 5 Apr 2024 07:33:14 -0400 Subject: [PATCH 7/7] Register global before assigning Co-authored-by: Jean byroot Boussier --- contrib/ruby/ext/trilogy-ruby/cext.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ruby/ext/trilogy-ruby/cext.c b/contrib/ruby/ext/trilogy-ruby/cext.c index 6efc78e4..69f84511 100644 --- a/contrib/ruby/ext/trilogy-ruby/cext.c +++ b/contrib/ruby/ext/trilogy-ruby/cext.c @@ -1210,8 +1210,8 @@ RUBY_FUNC_EXPORTED void Init_cext(void) Trilogy_EOFError = rb_const_get(Trilogy, rb_intern("EOFError")); rb_global_variable(&Trilogy_EOFError); - Trilogy_AuthPluginError = rb_const_get(Trilogy, rb_intern("AuthPluginError")); rb_global_variable(&Trilogy_AuthPluginError); + Trilogy_AuthPluginError = rb_const_get(Trilogy, rb_intern("AuthPluginError")); id_socket = rb_intern("socket"); id_host = rb_intern("host");