From bb4e72c95285cafe463ddbbbd99831722fd983b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Wed, 20 Nov 2019 01:24:17 +1100 Subject: [PATCH 1/7] Many important changes related to web and TLS * upgraded libmicrohttpd to version 0.9.68 * enabled SSL in curl * enabled SSL in libmicrohttpd compiling against GnuTLS * SSL is now enabled in Web UI * version checker in Web UI: - is now able to check latest version using HTTPS - uses the correct agent version --- deps/Makefile | 13 +++---- deps/libmicrohttpd/libmicrohttpd | 2 +- lib/ProxySQL_Admin.cpp | 60 ++++++++++++++++++++++++++++++-- lib/ProxySQL_HTTP_Server.cpp | 7 ++-- src/Makefile | 4 +-- src/main.cpp | 7 +++- 6 files changed, 79 insertions(+), 14 deletions(-) diff --git a/deps/Makefile b/deps/Makefile index 2c6ab8907..90f7c526c 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -24,6 +24,7 @@ libssl/openssl/libssl.a: cd libssl && tar -zxf openssl-1.1.0h.tar.gz cd libssl/openssl && ./config no-ssl3 cd libssl/openssl && CC=${CC} CXX=${CXX} ${MAKE} + cd libssl/openssl && ln -s . lib # curl wants this path libssl: libssl/openssl/libssl.a libev/libev/.libs/libev.a: @@ -33,17 +34,17 @@ libev/libev/.libs/libev.a: cd libev/libev && CC=${CC} CXX=${CXX} ${MAKE} ev: libev/libev/.libs/libev.a -curl/curl/lib/.libs/libcurl.a: #libssl/openssl/libssl.a +curl/curl/lib/.libs/libcurl.a: libssl/openssl/libssl.a cd curl && rm -rf curl-7.57.0 || true cd curl && tar -zxf curl-7.57.0.tar.gz #cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --with-ssl=$(shell pwd)/../../libssl/openssl/ && CC=${CC} CXX=${CXX} ${MAKE} - cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --without-librtmp --without-libpsl --without-ssl && CC=${CC} CXX=${CXX} ${MAKE} + cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --without-librtmp --without-libpsl --with-ssl=$(shell pwd)/libssl/openssl/ && CC=${CC} CXX=${CXX} ${MAKE} curl: curl/curl/lib/.libs/libcurl.a libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a: - cd libmicrohttpd && rm -rf libmicrohttpd-0.9.55 || true - cd libmicrohttpd && tar -zxf libmicrohttpd-0.9.55.tar.gz - cd libmicrohttpd/libmicrohttpd && ./configure --disable-https && CC=${CC} CXX=${CXX} ${MAKE} + cd libmicrohttpd && rm -rf libmicrohttpd-0.9.68 || true + cd libmicrohttpd && tar -zxf libmicrohttpd-0.9.68.tar.gz + cd libmicrohttpd/libmicrohttpd && ./configure --enable-https && CC=${CC} CXX=${CXX} ${MAKE} microhttpd: libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a cityhash/cityhash/src/.libs/libcityhash.a: @@ -168,7 +169,7 @@ cleanall: cd sqlite3/sqlite3 && rm -rf * || true cd clickhouse-cpp/clickhouse-cpp && rm -rf * || true cd lz4 && rm -rf lz4-1.7.5 || true - cd libmicrohttpd && rm -rf libmicrohttpd-0.9.55 || true + cd libmicrohttpd && rm -rf libmicrohttpd-0.9.68 || true cd curl && rm -rf curl-7.57.0 || true cd libev && rm -rf libev-4.24 || true cd libssl && rm -rf openssl-1.1.0h || true diff --git a/deps/libmicrohttpd/libmicrohttpd b/deps/libmicrohttpd/libmicrohttpd index 9c350c309..f4be94a80 120000 --- a/deps/libmicrohttpd/libmicrohttpd +++ b/deps/libmicrohttpd/libmicrohttpd @@ -1 +1 @@ -libmicrohttpd-0.9.55 \ No newline at end of file +libmicrohttpd-0.9.68 \ No newline at end of file diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 2b212df02..66415e02f 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -46,6 +46,50 @@ struct MHD_Daemon *Admin_HTTP_Server; extern ProxySQL_Statistics *GloProxyStats; +extern char *ssl_key_fp; +extern char *ssl_cert_fp; +extern char *ssl_ca_fp; + + +static long +get_file_size (const char *filename) { + FILE *fp; + fp = fopen (filename, "rb"); + if (fp) { + long size; + if ((0 != fseek (fp, 0, SEEK_END)) || (-1 == (size = ftell (fp)))) + size = 0; + fclose (fp); + return size; + } else + return 0; +} + +static char * load_file (const char *filename) { + FILE *fp; + char *buffer; + long size; + size = get_file_size (filename); + if (0 == size) + return NULL; + fp = fopen (filename, "rb"); + if (! fp) + return NULL; + buffer = (char *)malloc (size + 1); + if (! buffer) { + fclose (fp); + return NULL; + } + buffer[size] = '\0'; + if (size != (long)fread (buffer, 1, size, fp)) { + free (buffer); + buffer = NULL; + } + fclose (fp); + return buffer; +} + + /* int sqlite3_json_init( sqlite3 *db, @@ -4787,12 +4831,18 @@ void ProxySQL_Admin::flush_admin_variables___database_to_runtime(SQLite3DB *db, { if (variables.web_enabled != variables.web_enabled_old) { if (variables.web_enabled) { - Admin_HTTP_Server = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, + char *key_pem; + char *cert_pem; + key_pem = load_file(ssl_key_fp); + cert_pem = load_file(ssl_cert_fp); + Admin_HTTP_Server = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_SSL, variables.web_port, NULL, NULL, http_handler, NULL, MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 120, MHD_OPTION_STRICT_FOR_CLIENT, (int) 1, MHD_OPTION_THREAD_POOL_SIZE, (unsigned int) 4, MHD_OPTION_NONCE_NC_SIZE, (unsigned int) 300, + MHD_OPTION_HTTPS_MEM_KEY, key_pem, + MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); } else { MHD_stop_daemon(Admin_HTTP_Server); @@ -4804,12 +4854,18 @@ void ProxySQL_Admin::flush_admin_variables___database_to_runtime(SQLite3DB *db, if (variables.web_enabled) { MHD_stop_daemon(Admin_HTTP_Server); Admin_HTTP_Server = NULL; - Admin_HTTP_Server = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, + char *key_pem; + char *cert_pem; + key_pem = load_file(ssl_key_fp); + cert_pem = load_file(ssl_cert_fp); + Admin_HTTP_Server = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_SSL, variables.web_port, NULL, NULL, http_handler, NULL, MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 120, MHD_OPTION_STRICT_FOR_CLIENT, (int) 1, MHD_OPTION_THREAD_POOL_SIZE, (unsigned int) 4, MHD_OPTION_NONCE_NC_SIZE, (unsigned int) 300, + MHD_OPTION_HTTPS_MEM_KEY, key_pem, + MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); } variables.web_port_old = variables.web_port; diff --git a/lib/ProxySQL_HTTP_Server.cpp b/lib/ProxySQL_HTTP_Server.cpp index 5b05bf853..c67bebce2 100644 --- a/lib/ProxySQL_HTTP_Server.cpp +++ b/lib/ProxySQL_HTTP_Server.cpp @@ -79,11 +79,14 @@ static char * check_latest_version() { curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); - curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.proxysql.com/latest"); + curl_easy_setopt(curl_handle, CURLOPT_URL, "https://www.proxysql.com/latest"); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); - curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "proxysql-agent/1.4.4"); + string s = "proxysql-agent/"; + s += PROXYSQL_VERSION; + curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, s.c_str()); curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 5); curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 10); diff --git a/src/Makefile b/src/Makefile index 336aee714..2d8516d89 100644 --- a/src/Makefile +++ b/src/Makefile @@ -77,9 +77,9 @@ MYCXXFLAGS=-std=c++11 $(IDIRS) $(OPTZ) $(DEBUG) $(PSQLCH) -DGITVERSION=\"$(GIT_V LDFLAGS+= NOJEMALLOC := $(shell echo $(NOJEMALLOC)) ifeq ($(NOJEMALLOC),1) -MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lev -Wl,-Bdynamic -lpthread -lm -lz -lrt $(EXTRALINK) +MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) else -MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -ljemalloc -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lev -Wl,-Bdynamic -lpthread -lm -lz -lrt $(EXTRALINK) +MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -ljemalloc -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) endif ifeq ($(UNAME_S),Darwin) diff --git a/src/main.cpp b/src/main.cpp index 9784d441c..b6ea5ea0b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,10 @@ extern "C" MySQL_LDAP_Authentication * create_MySQL_LDAP_Authentication_func() { volatile create_MySQL_LDAP_Authentication_t * create_MySQL_LDAP_Authentication = NULL; void * __mysql_ldap_auth; +// absolute path of ssl files +char *ssl_key_fp = NULL; +char *ssl_cert_fp = NULL; +char *ssl_ca_fp = NULL; char *binary_sha1 = NULL; @@ -353,11 +357,12 @@ int ssl_mkit(X509 **x509p, EVP_PKEY **pkeyp, int bits, int serial, int days) { const char * ssl_cert_rp = (const char *)"proxysql-cert.pem"; const char * ssl_ca_rp = (const char *)"proxysql-ca.pem"; +/* // absolute path of ssl files char *ssl_key_fp = NULL; char *ssl_cert_fp = NULL; char *ssl_ca_fp = NULL; - +*/ // how many files exists ? int nfiles = 0; bool ssl_key_exists = true; From 6a6bfefd44ad514b0c9ec8704cf8e807fc114b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Wed, 20 Nov 2019 10:01:57 +1100 Subject: [PATCH 2/7] First draft of version check --- lib/ProxySQL_HTTP_Server.cpp | 2 +- src/main.cpp | 84 ++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/lib/ProxySQL_HTTP_Server.cpp b/lib/ProxySQL_HTTP_Server.cpp index c67bebce2..277e6eb17 100644 --- a/lib/ProxySQL_HTTP_Server.cpp +++ b/lib/ProxySQL_HTTP_Server.cpp @@ -87,7 +87,7 @@ static char * check_latest_version() { string s = "proxysql-agent/"; s += PROXYSQL_VERSION; curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, s.c_str()); - curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 5); + curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 10); curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 10); res = curl_easy_perform(curl_handle); diff --git a/src/main.cpp b/src/main.cpp index b6ea5ea0b..d8b399fc0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,6 +17,8 @@ #include #include "ev.h" +#include "curl/curl.h" + #include /* @@ -135,6 +137,77 @@ DH *get_dh2048() return(dh); } +struct MemoryStruct { + char *memory; + size_t size; +}; + + +static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { + size_t realsize = size * nmemb; + struct MemoryStruct *mem = (struct MemoryStruct *)userp; + mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); + assert(mem->memory); + memcpy(&(mem->memory[mem->size]), contents, realsize); + mem->size += realsize; + mem->memory[mem->size] = 0; + return realsize; +} + + +static char * main_check_latest_version() { + CURL *curl_handle; + CURLcode res; + struct MemoryStruct chunk; + chunk.memory = (char *)malloc(1); + chunk.size = 0; + curl_global_init(CURL_GLOBAL_ALL); + curl_handle = curl_easy_init(); + curl_easy_setopt(curl_handle, CURLOPT_URL, "https://www.proxysql.com/latest"); + curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); + + string s = "proxysql-agent/"; + s += PROXYSQL_VERSION; + if (binary_sha1) { + s += " (" ; + s+= binary_sha1; + s += ")" ; + } + curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, s.c_str()); + curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 10); + curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 10); + + res = curl_easy_perform(curl_handle); + + if (res != CURLE_OK) { + switch (res) { + case CURLE_COULDNT_RESOLVE_HOST: + case CURLE_COULDNT_CONNECT: + case CURLE_OPERATION_TIMEDOUT: + break; + default: + proxy_error("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + break; + } + free(chunk.memory); + chunk.memory = NULL; + } + curl_easy_cleanup(curl_handle); + curl_global_cleanup(); + return chunk.memory; +} + +void * main_check_latest_version_thread(void *arg) { + char * latest_version = main_check_latest_version(); + if (latest_version) { + proxy_info("Latest ProxySQL version available: %s\n", latest_version); + } + return NULL; +} + + @@ -1607,6 +1680,17 @@ __start_label: #endif } + //if (GloVars.check_for_new_version) { + if (0) { + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + pthread_t thr; + if (pthread_create(&thr, &attr, main_check_latest_version_thread, NULL) !=0 ) { + perror("Thread creation"); + exit(EXIT_FAILURE); + } + } { unsigned int missed_heartbeats = 0; unsigned long long previous_time = monotonic_time(); From cb393da4595969a33d997e60fd676559915fe5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Wed, 20 Nov 2019 17:58:06 +1100 Subject: [PATCH 3/7] Added version check --- include/proxysql_glovars.hpp | 1 + include/proxysql_structs.h | 1 + lib/ProxySQL_GloVars.cpp | 7 ++++++- src/main.cpp | 3 +-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/proxysql_glovars.hpp b/include/proxysql_glovars.hpp index a79760c3d..7dfa7301e 100644 --- a/include/proxysql_glovars.hpp +++ b/include/proxysql_glovars.hpp @@ -62,6 +62,7 @@ class ProxySQL_GlobalVariables { bool gdbg; bool nostart; bool monitor; + bool version_check; #ifdef SO_REUSEPORT bool reuseport; #endif /* SO_REUSEPORT */ diff --git a/include/proxysql_structs.h b/include/proxysql_structs.h index 78884e22c..9d1869439 100644 --- a/include/proxysql_structs.h +++ b/include/proxysql_structs.h @@ -506,6 +506,7 @@ struct _global_variables_t { bool has_debug; bool idle_threads; + bool version_check; volatile int shutdown; bool nostart; diff --git a/lib/ProxySQL_GloVars.cpp b/lib/ProxySQL_GloVars.cpp index db06f64fa..ea7a02948 100644 --- a/lib/ProxySQL_GloVars.cpp +++ b/lib/ProxySQL_GloVars.cpp @@ -60,7 +60,7 @@ ProxySQL_GlobalVariables::ProxySQL_GlobalVariables() { statuses.stack_memory_admin_threads = 0; statuses.stack_memory_cluster_threads = 0; - + global.version_check = true; global.gdbg=false; global.nostart=false; global.foreground=false; @@ -114,6 +114,7 @@ ProxySQL_GlobalVariables::ProxySQL_GlobalVariables() { #ifdef IDLE_THREADS opt->add((const char *)"",0,0,0,(const char *)"Create auxiliary threads to handle idle connections",(const char *)"--idle-threads"); #endif /* IDLE_THREADS */ + opt->add((const char *)"",0,0,0,(const char *)"Do not check for the latest version of ProxySQL",(const char *)"--no-version-check"); opt->add((const char *)"",0,1,0,(const char *)"Administration Unix Socket",(const char *)"-S",(const char *)"--admin-socket"); opt->add((const char *)"",0,0,0,(const char *)"Enable SQLite3 Server",(const char *)"--sqlite3-server"); @@ -188,6 +189,10 @@ void ProxySQL_GlobalVariables::process_opts_pre() { } #endif /* IDLE_THREADS */ + if (opt->isSet("--no-version-check")) { + global.version_check=false; + glovars.version_check=false; + } if (opt->isSet("--sqlite3-server")) { global.sqlite3_server=true; } diff --git a/src/main.cpp b/src/main.cpp index d8b399fc0..8756fa918 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1680,8 +1680,7 @@ __start_label: #endif } - //if (GloVars.check_for_new_version) { - if (0) { + if (GloVars.global.version_check) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); From 1673249da4d3564f154515824e9d09cd6019b82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 23 Nov 2019 00:12:16 +1100 Subject: [PATCH 4/7] Adding libhttpserver , and a simple "Hello World" libhttpserver will take care of REST API. The feature is currently disabled. --- .gitignore | 4 +- deps/Makefile | 13 +- deps/libhttpserver/COPYING.LESSER | 504 ++++++++++++++++++ deps/libhttpserver/libhttpserver | 1 + .../libhttpserver-master_20191121.tar.gz | Bin 0 -> 168450 bytes include/ProxySQL_RESTAPI_Server.hpp | 22 + include/proxysql_admin.h | 7 + lib/Makefile | 7 +- lib/ProxySQL_Admin.cpp | 63 +++ lib/ProxySQL_RESTAPI_Server.cpp | 67 +++ lib/configfile.cpp | 2 - src/Makefile | 14 +- src/proxysql.cfg | 1 - 13 files changed, 692 insertions(+), 13 deletions(-) create mode 100644 deps/libhttpserver/COPYING.LESSER create mode 120000 deps/libhttpserver/libhttpserver create mode 100644 deps/libhttpserver/libhttpserver-master_20191121.tar.gz create mode 100644 include/ProxySQL_RESTAPI_Server.hpp create mode 100644 lib/ProxySQL_RESTAPI_Server.cpp diff --git a/.gitignore b/.gitignore index 465fba0f6..9c9826840 100644 --- a/.gitignore +++ b/.gitignore @@ -106,7 +106,9 @@ deps/libconfig/libconfig-1.7.2/ #libmicrohttpd deps/libmicrohttpd/libmicrohttpd-0.9.55/ deps/libmicrohttpd/libmicrohttpd-0.9.68/ -https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.68.tar.gz + +#libhttpserver +deps/libhttpserver/libhttpserver-master_20191121/ #clickhouse deps/clickhouse-cpp/clickhouse-cpp/ diff --git a/deps/Makefile b/deps/Makefile index 90f7c526c..a9c9d5af8 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -11,9 +11,9 @@ endif PROXYSQLCLICKHOUSE := $(shell echo $(PROXYSQLCLICKHOUSE)) ifeq ($(PROXYSQLCLICKHOUSE),1) -default: libconfig libdaemon jemalloc mariadb_client re2 sqlite3 pcre clickhouse-cpp lz4 cityhash microhttpd curl ev libssl +default: libconfig libdaemon jemalloc mariadb_client re2 sqlite3 pcre clickhouse-cpp lz4 cityhash microhttpd curl ev libssl libhttpserver else -default: libconfig libdaemon jemalloc mariadb_client re2 sqlite3 pcre microhttpd curl ev libssl +default: libconfig libdaemon jemalloc mariadb_client re2 sqlite3 pcre microhttpd curl ev libssl libhttpserver endif .PHONY: default @@ -27,6 +27,14 @@ libssl/openssl/libssl.a: cd libssl/openssl && ln -s . lib # curl wants this path libssl: libssl/openssl/libssl.a +libhttpserver/libhttpserver/build/src/.libs/libhttpserver.a: libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a + cd libhttpserver && rm -rf libhttpserver-master_20191121 || true + cd libhttpserver && tar -zxf libhttpserver-master_20191121.tar.gz + cd libhttpserver/libhttpserver && ./bootstrap && mkdir build + cd libhttpserver/libhttpserver/build && LDFLAGS=-L=$(shell pwd)/libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/ CPPFLAGS=-I=$(shell pwd)/libmicrohttpd/libmicrohttpd/src/include ../configure --disable-doxygen-doc --disable-doxygen-dot --disable-doxygen-man --disable-doxygen-html + cd libhttpserver/libhttpserver/build && CC=${CC} CXX=${CXX} ${MAKE} +libhttpserver: libhttpserver/libhttpserver/build/src/.libs/libhttpserver.a + libev/libev/.libs/libev.a: cd libev && rm -rf libev-4.24 || true cd libev && tar -zxf libev-4.24.tar.gz @@ -157,6 +165,7 @@ cleanpart: .PHONY: cleanpart cleanall: + cd libhttpserver && rm -rf libhttpserver-master_20191121 || true cd libdaemon && rm -rf libdaemon-0.14 cd jemalloc && rm -rf jemalloc-4.3.1 || true cd jemalloc && rm -rf jemalloc-5.2.0 || true diff --git a/deps/libhttpserver/COPYING.LESSER b/deps/libhttpserver/COPYING.LESSER new file mode 100644 index 000000000..5ab7695ab --- /dev/null +++ b/deps/libhttpserver/COPYING.LESSER @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/deps/libhttpserver/libhttpserver b/deps/libhttpserver/libhttpserver new file mode 120000 index 000000000..11d279558 --- /dev/null +++ b/deps/libhttpserver/libhttpserver @@ -0,0 +1 @@ +libhttpserver-master_20191121 \ No newline at end of file diff --git a/deps/libhttpserver/libhttpserver-master_20191121.tar.gz b/deps/libhttpserver/libhttpserver-master_20191121.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..531ebe6ab26c52deb6ef7c2f3e3ee71fe6bd6c52 GIT binary patch literal 168450 zcma%C({d(^0;_G?wzjry+qP}nwz0L_t!>-3&F}n=a4wVUOfr*62xFjt<~3LKfIzSH zyj(W9yYKdX(X72IKsPi|gi~6w)&jMZnRr6CT_TvcB$SNv& z+Vi={B@_I;pKZO#VDY8!?J-l^{gK*7UxVSv=K8}y-o zLdDYufuHRw;K`OE=iyQyZ&Kg%_Z=|ji4uXFen1^lN{y7;dmgKTJ#^Ciqsyc$$cdF%^$#h^`tGF)IN zj4D-Rc3m{7h(ym-U`kkMaW)dG7}6N6uJt&GY7l=Ikk+~E(DeZ$c^hoCqR1<(v|>07 zWl(rf$LY+gT2e$41aJgISWGK5TEC@OHU=|~T@1dWsv=@81I^=~K$7ZqPC@&kBH=`S zxeY((_f##5f3hml#TiCj!&VJQ}+8u!unVdN?B!l85DqLCy#J6&> zI7^cmN~GKxRqEWJywS#GLo7G!RI56H5b#|qRma_GUEnx7>Lt78^1zEME#UT1?6Q~f z{bNvWJXT>Yd=-nH7~V)=1q30oFbhtPq)jICt4gq;%4lPi5yhocm(1hT+3^!L zY(P}XWyzFP&89Gc_BrL1LttX$D0$vR{@|yQfaqzdLs*<$IQZ}!!MI}nC==636DHBY zJJl?NrCYeExY5MVP-!u22wFwdtPD8d;QDpbO7+at5#Y!j8gfOD`!(*I!SJWCo>8FerfKVYxhhGH_;97 zBy$-I51EO{x;|aJtN|peeCk30;8l^uc0lfp6fFGK{n9=g=^LoDZ^odUxKJXjt7wvl z9Z&jGF)TZXKm5TaW^hFy+|q4Ee-k0J99Bc4{JOWUm+)$(b0kQj zJSXUn)wl?TMWzF^pCsY+4~8&~e&KlrA4xABRqvwBv(lwoQjz8**O$?d}&-ri?Gx zr$pj5#<6t!dTG{R(iMno)GIjROuD^Wsn+iO^JKdkzNf?QgJ~r3tEQ1jpfCC-Nr1yr zaYZ#NG>{y{j+akD7&8LeCVC%rcef541zvwUAWPW`vtHODsb zTvG@*C0D?aTk;b)dGr;deqQ9!`k1Ee4lhAM#4r*|V`fxdRy%Nn2}g}QaaM-0sl2n3 zh;;pG8HG+M8-hHLs#>aBVeV^x_UdYC{>E+p&WU@@^JKk>{mR$DAuB1|WU~SNa8j{k zI<2wU6q#&1msH5wELekDAh)&)I62`{GX~_EfX=>#Wf90eE8@hbk_blJXkDJoCbBVIgaMMVWwk2_3~p7-Xc$5N-nn(dFn!mABBI?JrV_E6pH@~cfA zvq8OjmU)N&XmKONnk*8D;nZt6Fh&4^6d^U?V_13DCD93GqvT9$p>q@{4m*h-yYqo1Ynn zX|SYyNNAJ=_#~l3uQTc}E|O{`n90$N8f}rSQFCbJdm1grdug6vcKE9Vn(WGs{kydd zM!T41-9GY-sF{G(E}$pR#fO2oBj-45SC`8rgcZ-F#G;B76QOX4+q^sXsy;8TtE1ya zZ0mB@&+b1hx)Zd`PqL>yj5Ful{;>Zi!3S-MzT`d|TCbmn@Pl{BK4K#^j}Ls!fM3WG zVou~A?EVg&k$2-b5YolzftQk`t(MP14~3TmKG={Dyn%qK!`oUX9E>{G{Oq z-wI`mt$6I)qaP;+F#l#;hqH7)O!p0s6OMavyR{BO`vJ)8J3{PYptl5grAQx%2+MxH zBN4RyU1Sm*$2lxy@D7L6$mK`eLs7KTdK_x^gSWM4bd0fla9XY2I~@AIYgR&mKSyG0 z$G^y=I4*aYjnK|>mB{d&9^30+ofgND;oBVUw)5|}#S(0n^*93VNAGLVMC^0+#~Uc@8j3ovAv?4kp6l@qF+~kMJi^UJZ%!GcAdrxr2?$Sx zGh75+l~n;Msc!w_ea!#(^~@ek`&LBc9Q%Tr5hP)=Z+E=_wgoV823#@HHDu;%nvl)o z*2&*r1wi)Oc*e2+4*n!;Fo>#ga6)J5J*vp_fvvt)XqmP;79EXo16#fLO(ISNMcMeo zpao2;ISpJm&NSHYx)0gF5F$30Vj#U@G=ir+$veY>_<+B~Ow6@MQ+V#kSOu=@ zshRO-Pv6J+-mUX7SQVTOp6)nOYlczMs7L?MaRFJd4~(J5b&mYaFiHVtQ+W`{UwW>; z;zw|p4sk!VlGy&@w&^`g(}KRVrQVQouV5ek`UB${)A&o!I@G~ zOpGMj=ZfNJ(2WQ-nq6S_)x;}HiZBEli-t)EQt6L#s~n|A-lD8BDMf4S?oUDD1gkP- zfsPNX+3rV&R(8scEzugJkI3ARg9@w}j0gk^1~aPO;qsQ-w)W%QawEfipHtBH!O4jr zB&8d3vBuW*Vv8i&mN1xrRpFh%b0{5TR5YQaCPcr0lM?b`OzHKu;g6-r zq>5%5_Qt!6o|R&z6EgsGY&#<`LrS`CQVy zaSz`J?*LkZUGM>Jk^&M_bC-lMU(Eyrfx96g@HnncNCQC7?f*h=7GCF}{xT_m@AVH1 zyoj@0S4Uoxx#3rFsNU4PaM6-TdP9Hj;*{QZ(o%5B**|EcoO4g3@*#8wF_f;7+kKNF zX25v3{2LPa;=p>x^dp&MDZFQXw~4U~&6HTDBr;&~4|@6?~WQ57WX& zVx4z~;OFdQUSsutL1n5zx(&iK%mmsj>ppUeBqtUie(G#}cc#wopKS?QJ4h`R>X6g}aV;4GCgdE+Taig>RhE7l!eY=C_f$g6~SuC1MdOb(|LXs9! zv?M*t>B)Xc_CC@+KQ<&0ix8hv<{H%dk?lAuV&XmfCzJZ+GZTQCdlw;cy8<3RHzumh z3D(C_eUy-Q$o;#{t34KJqTY+grSmcKbB?=SjO|g^3eRVGzxCkfwP~;SF6$eizdErS z&u2T_N{RLNOA@zvT3|E4w|Nz8Q(%JGyaZk=_(q+femC+$^u;cczhWKAI^j}J+@We1 z8E9b%!?1wdVMGtNpS_bi_25ctZBbylxt^~W#^vHFQVtx&O(ZSah9oV7wxrB9hDchw zjpLnq5gv&! zs_W7B%{iR#SQ$$K8+M!KbtBxkd!?EYvOmEGcA~XZ+d%O04KbL6++(F?u@#Lt?x@?qy>ohVOUuL9&NG~J^N$<-n;Po z0cX|4BKi@*Z}j-?3`Q@R(q`*x5GB&I$A*%xFu!!>;EAx zVvOWCgg#%q!D|R-OWyfWnzjmJ!dPa1F|tw4M39Q4f(fY}LCc+>5+L%VaYom{KgEeR zN@r}o-#CxhhDzR07@0-=5f83r#_!U*YkPzf@8?ieI!zi7uhF+&_@f)Gi+%yoj)TL! z2*F8_VfcSvzma3@T$6DN-5#t9I(C;t-u| zmBdkD4;)_@) zFb8b*gj3i^%Y@x}$^L}P8oJ9fEC}lG$I3{CSkOiTsk)V0*EO8(5?TYk zGaOsx3;oyuwbDb|n+P!5s&^J6yv(;p;(TrSg^ZI+2*bEHhL0;L4OMBhW)bLC zeA1dYS#c2JyofRjS1c)pKMK-^k6K;{aJjIeTobIx9>B49NwW2ed6L@J9VZSuqU;Q} z&F)*jW&@E7@3LmKFeF^I16>d3J_Y360$yF7Ci&ZT00q)!ejf&(hrB#QNg%fNvPuY=JqOeEjb{-DR3+{^QOi zF5e###~46GvlZY6aPhoR004|Bc*)<3)CqxmL7aSyNax=&m8Mp!(a4r1&MnC}2{Y1i zc`I8r$+oTOpnGe*`}$-lEN{rj;k#L~b9nh?^GBCWnXyQ4bc=N*&M7J2mur_0%D7ff z9hbNI)@%4MxSz}05579LEK;ZHOzz7|?zU&7xC=Zf`WdEb`wN~w&9ySG$iAryOJzIx zxkvM3k}|J#_I1mZ+@bVMGH>tv?ckMpvn{ADAnR`SN!m*=|%WbG3?{Oqe^t)b7_+=IUCdo@CGIq##*^ z^k~nLesE{zwvo@4GS|v~q`N%tTs4}t2KSBvTpcxK3?v&HWV+rIrB{1&W&MiqziDSF z`WO9Er${xRs!xMH!JK4Z$&$rt6sMH=cvXqA))2P{qX>ZyDW9Y5984Ys+p_}4R%5NF zjuUoQPVIJv=kGOLT>90!NjK_h75>`T#}SLWq^ywce)CK(Y|TIk@L~ULvQ@w9o^bXn zb-*@0q1O)n0k8 zz}3zODd0P-ujYQvSH9P?O26*b!7Iv-hQT3D^o_3SbnGVEcP_T<`Cm^LZ(rGZ#i~}9 zZECk{#ad?GTxVmtRXZfp+>2Fa=}SyW6z|DN$pEKYYLbSBSrOxWigtXt4B|`#p4`eg z<9Z~R`NT2GlzF3gi8R^7psC_{YchP7mOPOg+BvjJ^+|GQ8$s@B?`98Ae zmUV-4pCjuJqkQ#D%vv1+>bDbVyI(zjcA6M}>7dvL<+N-l$&TC}#gHx5R#&ez9KN

Ux2B9-s3n+XE)#z23ZkjqB?XWtGwweaJF=Z1jIq`Dgiu~2|TN@M!!@Y@Est}aE6b1kA$SSS9 zma$Fq@8%#Rnx9TbNaL|Kf(O7v?T+a=z~E?zU6pHcq>Nn`1fk?z;EZ+T9ka@42K}wO0Qw=oneA7>mU8d| zP~%H646ypaI0WRh-~ucrvs|uT+0$?zKX#Ulq6yqkcMgrLNdq$d#`n}wX+Or=`We(A zFkvG&g!xAf`^@>xnt+^;2#xm}(t^Vg7cng^(4i1ebJFx%UE2JLRaKIe7EyV+(-UXV z+AjmQ?Oya#YP4I6MqFAL&KMciZq-Uq8PSPE{nmT6tuUN9bhaM4z5V;d5?*iXQSqPt zc`R`4b+x9AHH+4HdfQoaPev)Kz4E-!zGxS3`+P{e6!{z9>27YS^vyDF4dH*qTh7Vpb-r?r$5@1MmNT^RhU{837=qdMKkT>|#GB~*_wz3`T zu%`>N)w7lJ4SwSU%#_g;CrVJv&N-Dqkika zaY!5WcsgQt>biHiJt1xL_Ds_lki4th#wfiua|iiM;*r_%W^b=D;mrEsXf2uT?7BgF z(uA9FHWKF@RF_L|THm{MX5-`W@oZ1KR8?KkUG)=p6_>xz#=+Q>^Ro5S&DZ_6K#{mJ zpt0L#!@0@Z%du-m+hEp*D<7|`)Zb&7M^mK|kdUgqScdy|(7^ZAC- zqdJ>5gX>n|7C>K<5b^buU=wk+q5kSzw%mK6%X@8)&anI_e}#S|(7OnL!)1N?D46HZ z2jJubJ{}9IUhe!l*iCRzzX9qjom~HZ+glq^KLKm+vfO~BW`N1+4Iyn15B{Kt;E;&m z-W73SE}s2ozl-1(rM39?+yH5QGy4OyCm!H|aDdBux`O09zW{j-R7>1xgxv}9j3{KK zus4%B`}*@MMJbaQQXj+#*2A`{LaPCC*o2}h?)B2I$g*KpWHCuwcE(hiCC zW`dAcy1pkr$Sz**9O-VACv!)7kv;2w^BXhqgC+#p+fDHyomk^PQVC^BuZ^p_E^|$; zzV=~`5;iDkC#pnIAb{BB;rp9Qugb#YGqEy>Jx$QwRR@LmXSNu7=heO3#{Y9PQf$LW z^Y>UPcI|*y1OT_P;>+m&he|lrEd%v2515OjEKud`+swFQYJ9`vMl9r#^;zXCRnR>u110 z$%e@t@26>p%D@X(mC5HHxWm*n4H3|^FB;=8R@R|c8AJe(dlLnWGp_8A#j;zjn{n4C zW!fYcTpE^Cmmg5C@AUaHkV|!gw>+}Jp*$5KX;jiGlUg85pj&lZuFkj{TA|$8yKX7F z>+TH{a>cn$1j~U%{M_^!vW+ z8w#25vVagmX9_BQmbAgZG+$C5p^9M^5cVY?o#p#p0u<4xR*m^Ku1hS`2-Pkl88^z)iME*nyv5|R_5y&z^pBMS{< z!rH)ZqS;OhBY}+*|cU_C|K9j6+<#y56a-&4L`qi2rh93KL zeTuW9#3T5K%koG}P>`qpR!QQ>vX!m8?*Vh&3^N|2PD9P4wscmkWR$yynuaY#CB}zB9zUL4Gk`<3==7BTzVRX6&ird``l#e zOxg&3D9?{y_M@iza%&jQ>(C%TK{fq#v*9+^`_P*$OywGJYZ`HZm|}*~Ux;)(i4Zrn zijy=*VY2a)&YCLf%#ira6@Qb;`RLZLuFwZO{k!10!dWUk14PZl9h?D}vJln)`bVgB zfUv88gU`LidO+A5AmiktkNon_Scdq}*vG-q_q~(KyvH8^_0as0;;MWUPvxm-PmPZoX0%MbI6UM0fDeZc+!0O%K0`6D4>PByGm#c$8g2{4Hu!@j77V_^ zjq}RB3ZnDu^DZsHUtb5*=Y>tBSG>OW{rp0Rf&l6yG#N2bD=3 z<7c%=|IZGjSc^UvXkZvpJ0v-JUYWdNufNKiWihm(wM?JO2p`%Uy_||!TrHOuSr0VJ z7#+0>%9)v7zCVe~h{kE%Yz0m`x<}m-`at^YmhkyGmPkTsVXZDUFs$KABXz0Ynw+8E8tR+cFCa1KqNXeu9WB zs~E9#H{3Xun`lKz+CX8Q2t>><&JxtJYF+7h0L9{Y?DUi|xd~|(=Mda%CL+>FvkDX^H>&G@0u89E|IgVhmTPO=3CJPT-gs&z2LzNB;LB5P+CW3TA zyV=CxsNQO>f`a_7zbvS|h@Q;~q(iL|leAJ}X@O^OIEWylqCuVoqXYdr3aQXie4S4y zlwD38y}G}$VjRz9AkY#BJ2qgRyaN%94U&gSGqj5$a$?X($pd;^88!vfIbjaQ$bl1~ z|ANG-P92ETQp&o)AkgCgn05AwMN@5=*HH`}Z@H396@#P5j|qw**4$ERA2e_8WC$lv z+H78Hhh=Y1K1l>;J4_nV^zWe-vLGqgk?T=rjrIVX)rh=2S)ltPwpB?82zLv3sx8%t6j_pl zgJ}dL)%Vh0_p(U3#MusS*Yr!cruiD@`jY6Vn07Ha;bQ)juwTxN|9CZiYhQzoxbZ&7 zGHEYBeW%3!t%En%iu^18LIa|~sLHe#;~YVbtOb58pupSFGshQj+!Hy`>|+lh<#-fT zkGK3@WD83XOIa$oDek9l6G&M3dx3lV@Yji0l++^2rV^`D_M|#%T+vE`R*_mWvABFk z>KPG}3{#jb`L1k(Bb5T+PCd?^r&9htn>e&49QB;_I*pEDAC))Z&1LeM7d?U>`>_lC z#hzlB&4m58N9D{yTw@J<$|;C-9L$r|8?@_AiYC8K%mO)zA+Ryn3T^rbL!K-@3uUhm zQ3bVcW7vbJxXoIcKCS1-2pRg6FpBa1OyH+~d`YYyzJORTswzq_NE*d51lORprL^iEL#$F?( zYc1@#c;YwT1r1qqo|xGPGsIa)vVsjLWr^2cUlt7uxNq*;!YS^WF zN$X1p(u(~8cicj1(q*+>!M5E+t6uLgJ(OF~T5f{NfjBXHOv+lXTv@SZ`gMhu4dTjn zmg)9k*}%Y+B5dK2AnAQq%TvsNj3iW5&q2=>kXRFxQXva*YpF)n9QF_}H8%j76Yb+O~$_v&W@|KyZy_)lSy@43N4j@Rxv?Lx-=^5ehP45C&< z(v(h_QuyZ5AsCQ3Di)T>r~~2#>%X73nF8w&l?FpRh343_CWQiDg$GM|{FbBkwJ+iwNjN+A(D0^S=qoC1DJ5+@0rTHV49>Bw62~J0E0syxNB?S#93u;@9|DjB#7sotw~eF@-y0J7}P+IaETu* zh8f<#`m81yz#-SIlwhjmr5n>UIsnbi#Xap0h3Yd~a5K4B(c8a%&_4p8V1XMMa>iW(Xe)@~B7T zK+{t7LyMlDsj=-$rv8Uoc3icxisSib-7mR;YZ3JB!V>_wRU@+PDh^UyxHCc+C|5yes#YxjPy2IL4iQs2M& zG`z4pog%||x^gQ4@-vP&K|uD>ed5e6+YPk6s=%$?n@D}0LKg=AL5o~-`hbkzmj^1B z`|8uB{#RK&Ao*TJ@Fx|re{qAGlN$LBaM1 zFizfFT;72_3cx~Gv=2>~LRmtbn+h&-Ul5-kR;BcbX%TDKm@z7@bXIr!z`BapOzEM>3c|xynT3@ z8y|ZgD@gLHdQQ4ul5=7fsFg_s@346cA(B6wcp>|E0jtHPH*V0%p-4h6@SHJ07@OG; z_QBd5dNW6qLD-x~;J-zdDd0efst|v0g3-w{`--S)ny7vgHuVDg-^9*M=o_Q|&hEC;ue7c0?X~@n7z*S1 z-S60F3MJIX6cV@^dQ0O8#g4&Z!c#GKRSUU45=PSfuv$p1+*kj=RN0>%3(49xvEmCg z5J4$_;g&=e@BkyJ;OZpaKc-SE>b#*riNsiZrE$RU%&p}s=y0E5&ulq?rUUwHWOy5H zTOb&8Af#+{Ty`|tBG#|>G`K@xfs#Pw(NVmI2}i?Gn8c)cAzmClPqQ8wo+*F@*;TJ9=(8n={}u+c@pGMNPowJkaT`BZb)7 zC^})b-y-RN66|MQm>02JapuC!LbtLJc0ixP@o%M@WG_?KDb`K6Mxz9s9{F^*sMTr7 z)H*2kRLYdA6+3^0=b@|}Gu){t!+D6w3gLTL!B#GT-*UzIRiq09%a(=MGir5B7~`AL zgv)g)Bt}rAlActnlI1j9s!+J<(`RE&rn!OXRW$bFEkjCoF*)=7Y61ty;jN*QZM&2^ zAj)$3E4PX4ibCWyOO+wl(ITPVv(;*CHxRmKXZf5*zQQEsd;!}|7Q>6;=(Eu9Ed-=m zYPtzYH)N@(%RK$e)I-k+AZesk(DZmgTTI5sK*m6H`3lI%>yi|x1<5&4WRx286`F%V zfUs9wv_byO$W`kP+k^M7Q$X`u=}r~NR`1*|Oo7LaJ*o>yWUsa-sS~m)s8^-S$;nvUgxx1phC8983(IJA` zk#Y~uRTvQb->}dh6zaZj!3`*jV`v;So~Tef30ZZ%=EGzvrfGN@HKSSJ#^WS(knW?* zJpbl90dM_Yxn^Z+&~g^IE%(JS=@XU8%ue; zW4c+&z8yLP3Cz&nu*YPG9_4wte_S1%^{B2CMw4FB8*hHan-d~uGT;qco)7|m2@ivH zVj1y%=3Mq);>Lg51>%%UQ?nMXo|+rfW;j_0ws52rsz5zbqF|OX7 zc;_|mJX)AuSuK6=(9_|pqe#^(Q6@u)M-Uow^JiinS+M*S#mdPJI zryo9dF$!^4(QoA!MZ^n3W0vP>XHuxNKkK6*RcJZSeS&6eq!{NjkQX!V@DK(;m;W@~ z*f77`aZI540$Llr0I05`&J7u_yP#Oi&5I;3rcwa&t33nj9#CmhsvA>A+rI0Oo%WT0 zuLVy0N7yRdRK5O$WPeEilE)LBe%yj;P_XJh<2sYxKQ$kJE%Yzaufog`jWdOP3ICR! z4EPS@B;u*|3A(q8S{a-5i4~z;))$I5tMu9-1#+GHtYbEpd|RU)F`+RwF{YlguLHX!~kyh6vYb3{??%R(=2Mo8SpH^<|1M-1FuB*2&;9_O6|F!v8XfH zSnLj%n8j@p6{g!CiO1NELxkgCo!h{gWM@gZiM|n|um2MmiY1!3%wCf2hO+4Zkzr}n z?kpsnW*;!j51S1bg!U;NT1|I2k3;?r1l0C#5FoIjJ`0y<(~pO#5Am~uYD0xbe~Qo# zqBZidStpFxZ>Mc`0PXRy#z%87fB1(|eIkc8+&~^TT7Gw0l}f-F;c3|fk|;r-UrPpj zsied=H_L=CVz}r0*u_;w1PX4lNb!u*p4$&s$N3*7S-vF1DEfej+f`bRTxA=FiuDkR z<14!%W2gzuqwx=3_j6L(@;APw;~`#lL$_is%n3J9vW0QDD=KeBZ6_M8ifBNs19xI} zn;xE;zFuDmjF#|;K1Y5Ua3XU@In@a^srAr@+Ro_bg%IDy(c51mtFP`Koa45c3EZ6U zA)1Ro)Kz)R3SLm%(mo+5Z=r49v&^Er9CUakoD}x0X%}JMMLKqG-Tomx5AEbM&4}MF z8i8`x4=9gn;7|xK@_7BlT=$WjiwU)NfQgSRm_dLHepi7tW&s9RBs&nrx>tQlKc)7b z0oqu~KJZ{Zqn0Ru3-SRnB%UxHcL2#Um4WX)3EhEj1113GGywc5puqFjp=!E6GVzw1u}YVm;t3 zf~A(w_7hkV_s_%J4oAWMLc3vu=*&RFODR3)9Z6LH?6Rk!`61kf^bojgyq@(a*-PZ3!I2ny?tv zo8bh%e8XC~h3gK=n|{#UGS#l{d|0#cD7f>_bwxE{_@ebJ^CM8k<&vlxe>4 z2Puu|`*_;!dNe^M3$qHkXFm*|YLn^-3B{_V98kJrpBF0jWk zVp+k=tovJ*YKpr$z4XGaGNvv_d?dFhx(5e|UL5!ZzB|4uYq69sCtx6i#3>HdR}0Qm z985orKC@*p}8Jl-axzNuj@YpcmIfkpamyByj$H=KD}i>n4;EN^c@6m$`@?VJ*8#Abmjg zl6U%>5&1UN+fD5op*&IVuUt4j;V{cByZbEDBeY$47%sRoCf7eS1ia^wy^~JeX%l^W z>EN6ZUeOM_Q*AUZx6o>Kd>BkNu-3CT#mM)Fm8qm=Qv|^Wfu-X60r;mcFc0Y54SDkL zr;k*a615<_j1Z^bz$VK~we-Wls;87Z@ZegUwH?aMOMY%nUC!3LUGZa}Q19FY^0K~qyi)UNe0^TzOgubj&5FuZPbmG6E{m)%u7n z2O6{-zxdj&Y9$-E=@w!nntwEqoPvLW6T-;Dohk_uP5|y~bu9M}kgA_iJBj}}EmT_g ziDQL&TSmK2>DIE#Ho0YQC*-pDYc4^6bk_A`ahj+D6@V&Q<-{`^+l z7X*oE^m9K73Zfqx_e1!fGTXjPNWkND#24nQ(1VK}YF^|bR+~FH%}(_XN2t)S^qLDb zGkrYw#YfK9Wpofj-U3D%rZu~+cEyh}_kvxbQ~lPWkN%vgr+YlL2S9$l zu%2W3zW>BHp-FdAci?@+JiZ!&=2m5HVrbK^7Ak2^AsmT%!o0c2mo~tkIG3!Kjtf_; z*t)`~)@3mQ{i_xJm)J~TjeCdpyPA(uK?l^rqr{r(3^dw>lx* ztr6(wSvw#QN7dE#=U385HjgA$!R;iW^IahuZCK(L(L@vQ$elk62r`65b2$M3y)6p; zCM0z94#=cTF>MeJ(l>2Wc7-{%GA-tZUYZ4Oo3h()!eQ9_9FWuQjA@@mS}jG^=P*cyecHS!+U z(5cqle1`Qb(4U9nTQAGFvG)p&w>ej%?lbu^)fq|Bv=nX^zcCKO8D!A}p88;Gql*#s$wWy>`nSP7B0T%X-$*S zJc7?n=vebiVNmH9g2FHhhIYaFksR2@SweBzmR zNPQJ+24i^jMnrN1 zhQ3v1)EZuws$4mQZVl&58g7a9W%F6FjKi|L=oEM{2G4+Ub)`n$4KIiIxH^5T%$tkA zxW-F&n#n_?E_E96Mx!;0fz^x#j6TWge=PS#ddrr5A9h6c`t zt_+M3wAaoyhVznAkSEqO6aSVROo$ph;od^duVyYiJB)x-beWv6)UbsdS3apacCWZC zvX!IHSg3K@pk8}My+d?qA&iYFLa4pmSaJ%)s;=s=k32oXoqAO$QNJk5QCIOq*<4LK+z_jvPHQLOx{QwX{2m z%V-jJZaxYp$~cjs4NLvWg9P{%hQCauL5`ZZ5)vyln<9BPMYvju5r}bW#(Y)9_~xof>eVIIbuV%BHcK&7f~Z%=V1Sxxni zvoLrlny$Gy(8K+*VcmwM&U*XsXTC1!bGnWafs^*O6OMmCCnjE6IP}$6{V0NBMMN3hVlo`X#_hC^Z$LVIG#$D_e5vybFXF=lhp(L$aYO2uH zl-gaL-`3;TB2q4{ol;7_x|x-Sg>Ue9$egH^2;`)`^{*YbUi8$6>dsfIHMJaM;88Mg zMTD;DQdN_(h9`trd$ZLy+go=bVrm^kE;_ZZ*dNJ~iwSw?0>(;dvud0Pre?<)$H0i> z;Od{>S84S37cw*FFv5@CNiY~|BefYBZf`~CZMly(SFYJ=CXe8_%uQAzATd>VzNKq9@ZHy4sa%W)`g(-c+`7Igz3+ z>lQ1anv=6{q-)$gwDEUq;=~H@-8k_?%(59PbjtJ?hLg~F0rNGj1d-SBRevS8oOd+o z!+ooBjx3Qp?^?BzPYjyx{!8 z-#kI4r24F@-szk^daEAzIJY<_1nGDs{krRg%60;${xU&9UdwvPth(0ej_c{iOLoi# z+Z^P%trVWE=}hyAKMxX|kBI+B?yrPurpHEA?lF*L4^A79U==9052l-I!eL9~VfRAt z1^3Azu^9(5H{j@nZ7FlzmS|>7f;|~oD<(4aCw!o_uPM=*6(&7Hl72htC0*o0v!slW z2KN(2ah~wt?OJv5xcTkcNw>%GIvYW?IW3=DZc0R5dzi> z_5$0Bq;9LD%+b;?be&7@0-IDwtCjXi zzJ0#mK*P_nTeExls!h(0PBL>I`;o5~dP6&P2ON6jpE}R%VIWE6EeKi_!NUw-@X9*5 zKA_Dnx0lzk@1IEDy~cAe?=wQEA;7frKh%~y``6x1YvL$>IcaDO_oeE!7-MScVdvX^ z>bU;9)uN+A?(t3R)6ic=rs(L4Gwy?=+oFvBjV56Iy4=qj&sl@6zOQ~ATgEY{TP2(~ z)SPL&3^2SQ)alU}l&HA=Qo;6@y0BQ#nmm*j7-CGhuURlYT0{M?xJHVXWzl?`)Ri}m zc*rOjt(#8goJcTd3^_leaI2XERhZUs~y~JE>DV=2qgb&(0nxQMiEC* z&-@9~*(;9f=w!95^gjSXK)t`HM#~rTHLP<4e;dZ)&ocH%t6t4z{A4x*h60bwvj*p0 zqqV8jyDO|KSHVg8`Xu2F$Z#qd;mMC@FU1jgc!sY=@&1r9rSm6Y?Xwoti*iS4a3TqP zu=N;z$C&CW+qa;txh1e4oTzAX)5*P$)loTs(2wBcmw?z;iAxmET&6Blp0gna;3X)+ z2vA&jbS}!RzO_adPUT18WDl>c#{?gLgwX`}jK$7ur-^t~vgA21ruvKj?|w1p_v0uT z&}agHgJyUbNH-(~A@Ph4$RvO~NH*gEmongv0xoEI4qEe21lJKY_GI2`SWm%9Pvrmk z<$1t=C;z?HBYW{5@xy=YB>o#5e3cLw*6j%kb?~CY96*C`0>)N#uR?mv?Ie*+q*5;$@A-1`ocgZ1C{)tD(S0BQbbPC$k%mA^ddxn0mu4O%tu zDgDscADB-G@F@U3`JeI!hWi6c`vZFiRfJtKf6C|&^0ZNcUxoBjp5`MH@8BdYeR>0> zq*(Zfp)LKi&@{6{9_@TzJ9X5ch!6b^RQuOd?YH)_Kc`wdH1bs%&M!B~Q@X?s&-?0$ zp+GsmlyZIzzx!k6<_^^9Rcgrys-9wmTJS6@aHkGfftDi3buw|C!4g-&fHlz54;rlE zxKAZTF&}cEsc91Rqo*gj(L?=umAVR&v>elne<$h@zYP55PpgkV%hb_(XyRUVUZ{c8 zmV-M9&khiKYET+EyZnFlp1v<_q}#tAK1DYA+l5v@P}{q@_O}$Gau>l1*t(bcWJ8F` zQ%JZ3YTey__j}GvUM9)p71V7D-Bp>FGv|HIoS95$H#`nn;W@3?{UmY-VPz;Jgl3`e zX0r%N{Ly%3P+_@l79ekiPXmzr<&P{=ix^1?7=e84g@DODdWsVMQ|unwWPr~R#1!puNhc9J5nSPOMF zv*e+6W6U*AdVU2>tn4AN_|umbOiOnderqA#O0r};aNymXICzzr#vmH&qz)gcmKS%5 zF7M0usD4WQ^-y_$G_Fb~2cdP+OD?Eg;KLlNi<1DiXI?O?TYI7qU zt-FU{qCv^7LMaEMM^Xyp(?Cvx(K$-^5yuRkG~n9iyjT!4o7Y)i?BskMAx!yE#tuwdRD@zRQ`?kxUF_ zB;%b^VHqH&f%Q%x)zB9(oLJbQk46ht0bUq{%|7Vd2OF7jQX-aM9Up?D-IE_pa0bYl zLz`%(Nn-C5X*6c?hN&{PSrr-1yb?U&82^=e4ErAU)Pz)%4N_TYkc5;x{U8}KZ@yi| zs3F7pWFV3UYH#;hhtEPiqMY6!08({*qo?_^fgu)d}lSj|F+p>e%~rJ(F*Mv55| z_lZUfw$DVP4@@jqA7|LK)IJrHpPtYs)!GQICfL$oVuY2$4Es&*=0|_pF@Aa@`&|E! zIh5eC!XSw#S#6LP|DcfL#R`K|o??)M?5f!8N*~W+=Y%485<*^h2w5cziqYkNTnOed zsxS;WLm)9%1P0OpPDii zOp`tJ@8d+?#Ootzid)=ahU4gii7!l=<0ia_RkV{ZaLGOV;L`d*6kOVz3iz9;K)l^5 z{05cRA?yEu2s24u)(y`l#YP8g9Y`tt=aM@sz!Vyw%x^OoKK5cIZb6~UvAzt%TK6A|Klk>oA-Zg-v6EIu8yS%NJ>%U~)A<}m@e2jTGH^#@bv+j}i(ZO6O|1}v`*bYzv+gO90;Yn!1H{E%& z3iJMhNW|E4vG~l{FY5zN~Fk3rrKtY)o)tf?uBra;#(xw#VMIo-)=9-@4tH z-Nx)5(dlfNm`B>$AMaPo(e-CZqL1Z_H1V z)aYtfx0&fS_V#tzTe7LnYaweeGy6&6%rjjX1KjdpxA^n*ODw<97V6#O7$SeD^;stu z{_~hD{Ef)qZ;FrGhElz;>2K1eedf3h16Ss^+3or-=>6qM%-T27x~)1t`1gko|5O#t*YF<&7_6 z`RRG1z0Y+q%-#2K3A()r?U#=NxDz=XhnJjIJl^tf&%*1V`;K6Eu(6-(z81-+l4qU? zh~Hk*1R$$Ra{&vr6{9?~-oNuSASpcEw7?s3{qqAIVlzEF_w?XOdoxdL=84Tbkzk(i zx%YKU8umqF&g#J-#J!9p!GsYyNu(swgHA^J@TezVmqM?LGUmK_P+4v6^XzqaArJEk zPn8tzY&hhUauiAlndOGu@)!eCLg$1)jb%E+kRHhg3V2FRU2rg8uSCN|IE%0bo`FOA zbHx&H2}6HTSht`{81jnwsx(zVBNLitWtR!2!Z+!L>i`;K=|RKHXyJ-!j&Jp;rgINt zKBjGp_jk%d`=rgwV;wX^nUuj_Ejin3?X)&;1y!TNLlsZj|MH6<(u-^bN-cyyB9@XS zfYF2^ID}w8IpTCyZtyXI(7qc7wQ*1z2bB-^D;ZrAL2`xlcZ4qr4>6N*CW^aR;FZ?| zuJ~8nHIzl2v84 zSkATVN*2goZPe@=Q8QOJ)~9Zdwj;RFv#(drR>`dJ)RtzXR#vri%d(BmeN{TgD#;pD zZ{@S`-$8J_X8ay2_J2J7-58UJaj%Wa!-uk>KP>Jr3BnAr0vA?Zu&jD|odq=-o62yK zZRO(ku-pv|x(|?1rs>$?(vp}l?xjimTSHm=l=9HI5zt$%#@yT(Xw8K(jJ-fP88*X| z_zaU_6c7Zqt4?s5M@UH8af>K+*UARCf3GD!%)F4k`z)H~0TM#b z&*uK0&HX>mcK?sxty)+AI1PSL&BbVJyvcAIkpI%3fCqn!dw;?P;l&C3wlJR>fX0m6 zm^yn1MhpIKhlidH^ffF3u)KZUI%e4EPl@a`_M zQ(|o!)1jGN;($oKa>*)D_r=3xvM?hgOhxR-IHizTLHmTg5qN5W2gSB71pp5*nJ5rU zJenqaQ|8XiOFgmh8Ifhy0zia9OXK2&?^Ni|WAcoM(ukQR>E_yO;z&0-0P%F7Ax61e zW(1f2@S$8F&%BnMmoGZ?iDDei5JIK8w=b}xkgX*;&d?aTuX%(o0yA2GX+DBCSBEG6 zMCbp`m5&-Gg-XhFg)yS@f4h5o2YbH!-)^PyYLowaiqBSVD{203DHl%rUtjxksI7vQ*v-CQ+Cj1#mf0XpL|zH z5N@qELrAlO02RgsYLEh$-#@~{Rw7hWrJov~G#gbNU&n`nA)HV^=DMbhfEQ@2<_=W{ z4to^Ce-eVqyjnSfjNFX^h^t;yIJaPxSx z(o8LZ=(h8XD?qS)(maK@;k?u9w|=j;q#6{!(9nrCa7qfoi_)z+QphjxYxv9fM9}ec zBlvZtcg-HKHkX@ygl789_;xg&6QF<#{8=bF6>bx`QR~+@=;m_j6sBYFddrDs!vUpK z2q02dJ|~qX+tLQd6qQfL`lvM?o&oqC1y5>$`BvI_JHIeyG6<8vR;E@tgaN3#mopev zLj)IwG1(zzM0B#0v&s$u0;_I?+`qQ-y)&uRDhQ=ArLzPR?_y~R#UhyZou+=w<j3NE+|9SO#6aPQSXGxeop4G{YOS6{ik}b<2_$&GLDEVTB@8w*;{*Vv z%KW3On6fhZ1hI`aih>mmXEijQ+YxO(&+>_$|A&ULz&jrjzUVLH6BGYcs|T6e;{1g z%>PgD+06NyIe#YX!>FM_BF%QQ z?;H4fM+oJ?jxf+BnhI`0UEGgx>V}o`?yt8~FsG7gOs@;M+BpF#+q=E_fw{!3$D%R( z5A-y#N!{83mCvMF10d%I)(+jBr}n&7?{+Yglpjp@t(sc9({AE6@fk#^pj21#yISkC z+iW-F#!0L1DIllAa=A_m{=B*(yUNGg_Fs4m3lXJy**TT#b@$J!t9-%v)@sYWoC|;j zhizK5_Gx}lfBBMP*!#T)Mcq>gcV=@r9gO&sX6LLLal!?f1p&OK7?du9v2AY6yImjTZgNI&!TRK%(B34EB>L5 z1WPIAh@=b-SHzUc@M33h^D|{(w)4U~1%XT6-nqB4qC^ z;8G(uHf309jf{Kq_(3y|a&4*qzSI2;bEdsxQOv1|i3^rH@be@5=y_le^GES zvU^d}Iu-$>X{aBor907S)0Ix8D+_LMLJl(u#mQ`OH;09wP}Geg1~}-HMq&W4-R<72 z%6nC}-lyq#mY={oq4?fK^61FIUVXR)1fK$Zd&uyil=)04L#IX9SZ*mJDu^+eAv9A_ zakj1F0@5TA2VGp#(=#PhUOFBaVS{)adWMx2g842+_#FKmxP17}t6p}UyB#1FEVt-^ z0gV<9Gkms>2gR+8gQLyoy1@rxRmDMA>UbD}55lgCgP|g}d=M(BivvIugb%=~ii2Q2 zm}NXX5+W9-HVK>v$uQM%khZ)Js{`p0nt%Z-5XBM}h|?xN}6sV{#C`Ovmcnz#wMCP6yO? z;w-RDb41Kc5Fo|{ft0W=pSA<1z&3)oX>fklknt|gn~|w4s!S(3{rV^U0ItHDV_~=S zbLpUZUGVg^2c{?6Ph)P6MGnpN#tJVvRj9UfZGZ`?nA#Usc$0M-w1gm(TWCz zUxeMy5dZyrP}!{p@pZa^vj9TLAwdC_k`oOU>CQryk{i*P9IOkg#>-3~_|%1bLHG-n zZHwg`KpqKSxILV}gZ&J6WnTUF$_T=ng<%K=%;ZHt08AfLG(?PGCjsDIPK7859eLmz z+O@xH25^Ci)O_7p!E$;R=<_8`a4QzUB_FFVUsftYvBB)yQpKy`xlO2m*h^~nahWe{ zgB6@NAx_7}5E#?5n@*HXr%YJNQ1HIiIIRlXY+xa5yAv+JZdgDF6bPzDGLU1M_BFG_ z`rWMa<6H38F03%ItRez*>Lh-Jl^-6$ZQ{7K7A%PZCvw5}+nzWGiTY(SMbL%R<=b9A z9|Tf}SUtf4g@)K9HPNqM$S1X4zjGnA1#>x@8S_PO!E^)O$e3w*>>|n6kTkXyMoWmy zjT`TPWVHk2Fv}eq0(Yh3R6-xlD#sbUKvoL&SJ|RV8$l#`#Ljhg3zx5)We>D-V_Dw% zh;97G5^sDEigV#_b-56VFhv({Dt`#YTTR&W^@;6QrTt!W`uViHaoLkxwz@ie6zIg~ z3t3FD%|Kawe_AUrpJohZ#$<9$eS1qv7;28Q{U!w!DGy+R)ofGm8cyL}fc1X6Y zAPn%=wW}AjkBohexBqff;|s6;C+zzZdIV;rYwHtfA__miqLme++srU!V3M^|yNBf) zY3oxCpC9ez2_qO6ItaSblgoD9YKUAQAsWROfdAwx(t!Yb7Q`z2pCqHm*`c1?kWOl# z_1E_CD;uj|^z^=0y8w{+f&~v_pJw|vJ3z7#wL>Dz=X7i5AU@{C6L*Q}gg!))gB(Kd zv|1+(;bx=^s@F$3dp!8QBUH)zB(FVD1siSon84HkK0sr$4H%x)-bpf!f|*Mu>I-F= z-!V9iNIg;L5Vf!*E&TYSUG4M@(*tID8uTn}M!pmEzE@0q;B+!p$BW4WL|^~6B-c8U zJptUkf+-9_cZ$PEFm#$bo=ubmz?hbAPSBL+8MH*MLF4-dEsJx|;=F^Fz&&Vu|4_S?@dH`AtKN}<;gA;TGfABbA>9?00%Wxbo5JplEsYw0R)~LYF zEaJr+EH>xPEWX$X!%Uau#M@A^J_qRfjPU@Q*5tGiKYNHLiE?n1)LBwbN!mihr6~)o z0{#+)oZgMR!nLchGP66yEQUrW40kDMIaFM(-HeWMHzPpWixJhEdaEN{Np-JR4M&v3 zN(q`_-k8V=Y_)lkcX%Dz!(}SyZa~Lf$w6o;)%sF}(no(;st)49d@$Kh^uQKwmb!{t zdnJMt-@|FExHu_=kCQx3E;Ov3jP;KKX1T^H9?jwGJCM5god&iU=NGOvf1ueUL|O>S5469)jnzDO@Uz^5!h#vdz_Xk-XITuEBeUZ!I=x{oibNc zfI2pTK$@FoD9HJ-&G|9Q`LW35T4#M+IN~FCn45Q3v|{2_+ejNOZ-udr9+vEY2X&1! ziB&bW6{~4<0DO>9xFx&zI0$ERinJRqxXNbNaW|x_N|GTxmt9Soz!L>qt;T#) zcYRJndV6_FbF&SC|G6>J?1(VJBanWu(h`dAF-=u`Pj*MFcU0k9mxN+xH_lZg1j2^u zHr{Op@wP!_k`VXKUJPE?0Bwa6-)xJXwrtC=cFvYh zLgiMCPa5uqM(elTDptjP4OuOBMv7N-(lkWT?K-ZaTa`YyYL#*|nky>4xJX2$-Wh^e zw@JZx%vslCIM(T1iJlH5t%OfV)6^hab>t=iUU)}w7O@!5Ypg#*?1CYcQ zX9S`U+(m=+%y{^^!P@00GA+T^7=&=^6s-Q>JbR836nu*StIC=N{qdqzOQRcLkns24 z0;gvnT=hO6k4QyAwvu@Kj3DyYp9n;TM&$pni$}+p9iY@P5((Z;+n4=TFV63InxaG- zuu$rsx8xHD`YyXtzSAyXS^ezXEjl@|%9??)^IF^Awc9@lG`nI)u*xnP!FCtDKoL25 z)976Nek!%WKrd?b-)g6lj1T((&qv1R2kWHGm?RRJ#C*dd+S->X>dWa+n+u_5lIVm^ zg~ZJIjOZ9%`bs%v*7&UCFE0E=n386{2Kq=>1Q8jZVhk4dtSw7=x(F9GJ-QSi*N)>0 zC>NT(I1H3{4kfYORBgT}&9v#E=UZs=kJ^LV+WHdOm>@7W48THhd-+R4yL&HlK&N>a zQqBWmo3l${pd_-JO{u>ivXe&$+)``LxpUdSxa`}zpMh&DXt8~hl=XFFsAXS~IS&*O z7Wv8?Oq_Ce2cq5SH*t%#Zk_j`Gi+};{eSkZ{ke_fNdK(;E9U4p5)~4{i=+g{RzV~v zAxDu20a|g{F4Y1%05)3eBKr`9OWpnL*I)O{K0s2WB%3bBKqayS?9Q{N`|IZ{+<4Vd zh!Z+nvfw3kX1GdHS`(%I^lu{o;iVk8@l2;hOc4LRjH#y&_}PY(+7JDF@^WxO!Y^3S z&x{2hsPfN$`nQ3U-1^B-^^Ex<|GmUL`I)lU!aj4YDIHH&Y*+T_viUBI@R(kEuKbuT zJvS8XsyYEtx$yG~7J7CI)|xTj{;%`%CY$tk^Z9uGM~&!qo{hht_6I(nT>qnS&_?~Y zP5qBw|8uwfA6%TAke>1P3)Dv(^$2!$N4+~!#i!SQY3?8FZT9~@K3}r`B*ZgZ!pmZ| zw(xH1`U))=Z8x&=LJy84Cx41FFGp zVAIMfRIDDcb4H-d4j1OYl@}5&j6A6BppQ3_?V1`z@ttvL=h`bbOq z4<>4Is1A9+j`P?5+TC@WH(CZwt86n2IJb_@Na*qN%Pd|-5?;fJZ8BjsjiZHlK!wT^0s~wT{yeD-^p^E zYs5ZkbsEv4+a(ytchc=xm&TNs>;XCyf#%ALLfmj!Qb#5g%U>+x=sh1M7}O*o(G+RS zkgA3)FBY|C68}>Dp_067jj?+Oj3XYhZAR+x|8 zOFw;;jf<+3(WPQ{Ny3MN#^HK!e;^@!9>s}CXIT&})EpG0`hd+0X;w+5)g@OSw`I`P zB#RTg4bKddd2kdB%8gcGLbM7!|>mk+X6Mruj(zc?z6 z8oQiF2qcOlcSK#Bvx3`C%HYc2pAC{k?R9cSQH}WGp~~ z-=Nd9@Md9vUz$Dg(!e#4o;=dm^LMKCny@>Ws7A}>@IwR z=`QUCJxzFo7d?uC$}$XWPVrIfUXBSPnR%->j1^;ZQteX-k=L$fPQ`jisAsZ*G$eOY zg3s6^ndNhpclN!G{V4%ArZ-bLAU_@GZ)vIt08e4n!6gZEktAeD=*_gYQiKkL! zKzyOGp2gG-b(1_VO}3lkM%4$Lvvci*;7)kaU4KFdZG+V}Sbc-lf5p$2;QuKB3SzBq z4O6|*0C*ez-)rn$vH$J2H~9ZPKG)*^t_MlDBQT2pMqi%eS_)AJj%DNj0~CM~ly@y_ z=0QTfjkOL@+?SYFQ5dQOsZ#AOYFzfnU|m~=V{IL7>^+l<6y%iz!BnOWk^Z3LiEp^N zJmsw^B7Y2Q&scz|@A#0=La`OEi=DP;fFvv-i5-cJHpQGoAeBKqNl@0d(x_7cC>tH( zccnvg14LhgkV4;D{ur*7pSOPOPV0HD1UbQWi-{FWwU1m2f4^Qrnr zMT2y?R{^vJPvXX!jXPkYV*G(sj4#3e<81bJ>VNo%=U+az;s1k!_4^;&`vqg*W$_@WdMl}Lo_OB$dOkVC@zN3jRmoFEi3m%|3#$C` zZ*&^Cf$}!g9H5jA$uL6C3(bilA8eR|-x`Fwi(cVi#%znl2)U;p!2`)?gT z7L44Y0N$eiHQM#|+Wzmgnj8J^UOu}dHc$?(W1Tt{o;dE9^t_H5X0sX43YZxH5LdI{ zvOB^|oYYSPdi~);hf!eCQHDHr^Oh3808QLg5qt;pAyM`Cao;Ee(`v`YLhmt?MK8p# z7tht2XsbPb>~sk`5#uvuG(vWmcvY;JV>QzbG2|Kn5yE&67sSvn-4((%GEt2HI0%CO zSgX~3#sG8kp~WF~qzDlY=U~1pDIpPnE(E493`9UP-Y{29+%#I2zM)%2wqWw~FF%z= z2n7 zT2d3~|68BI-}3WW{2zut0vSXaE&RXLYOKrucJrXV;s5vXDfmCEe6p#Q^&g4} z$TeRxW6;48I-pS$Ec4&`5mjZ>2>;s3^re^v{-TM*S1^(AL&RzDcIR$Z zrg0FB3oFx6@9o(!7t^>n9MKtYoTI41K;7gWts65LVp-2sHhAVp0!_H%Vc zLeN||tj3WWOHFIejUgTdEH7rHnNE2g=Ecg$XK#Am(n zvHDT{tOgki_7_RJLy^3hywlKwO`*MDy^b2&|Fl|C1* zksPN{Q$HU2q{Q;CKRZqO_fVtuiTR>MUqFr}5zXG>fu1EdYpv=$rsaEMg{M$sAwKz? z?j+6J;F>pF{(&e~9!~h_e259huSU~Uhs7(T^ua0vGBNXnjaO`%!Bwf zdb4L*DV5>=yjEZ>$jQ!NIZ~jrSPb}n;B}~{Lt9JDbV6UD{wBxX=HH2pssI!H!Vlp% zaACN`ZzUhaPJWAwNfc!E;qw+sEuiY})4-i2_O#@aDv+G7lWokA>p}4WTJWuUgtS5p z!x655BU;LLwIJ-;9hM_EHA{?gZhA+tnIM{3gR`2#BAHBZv79xI%KZRr$;9oOH}%HG zBR$DvailkFg6UAqFSLOKttV{6=3-OS$s~4@xq5_K$q3tJi>12ctKLxB6L-@Q4+xk58}vu)p7IZR|hy@wt8fs|9^p zpV7x{{{Los-Tu?qZ*1`Yy?kmvZI!Qdoot&6T(7yi6_4^CUw{4eN&m2SI_$k2j=JZg zN8k6(Uvx+P*W3K_K*z>J0USHS-J$}~`7UP&p31*S2@e^)n;fBCY zMhJMu8Dqy9MyWrso>SPPif-*svF3J`1ob&R2(X7k(YUV~e*E}|`L@xu5%aaPe&LM5 zn7I`mg&A{kBP~FsFE$Qf`0{*L99mtPo|~G6;P6O&HdG|=8jw_{_V@}^aTZjshrN3L zEw|%dvnD=!zj5C<+m(EvdtI!=&<_pLH~~CV?{pmMfR`YLEv$OMIFq_?5sCwcr*dWI z09B2flNyd<6x9OgA;7sCO?N#GonU{9_)#7aCL)b7TgZ@T(5$Ax5H$8VUXaT(K;*N@ zC^EB4I6{5OaBAVg+m$bzG?e>g&D9``rAh%PupGgS>aj`453h`hW?_ev8oxGCbLrN_ zfUrxz@Wzev`xphO6q<=IL}%7#hd{4SP>EG5t}EurMaXDnjzVNRO5!zF1{|_|5)_b6 z3>jwP9Rw0BHu9LKmKq!_uE;9Qmg#i|K$W2X1VGgdeU7otX)z&GI6*ZG_}B^2h0!Hp z*_mEDkRTH44ztZ;thIHf(K|hIoZ9G>I_bYC?#WSGtu3`xZ>rbCk8zi@+Ny{in%D4^ z+CuHbEvKrP{IshM|MHjo@?_A##47!WU095@hZA-VeHuL~^Wr0n8Q~|}N?ITOaC$Zv z_W6RHpQbO0GU_D}IA1PFm*&Thdc(u>{$Ruf7;A&IVR7h%a+f}>vR8_k@VR;(n+dE- zn835oCGWX_uMBj|-o8sMxs5SMXW)$HMYe&VW0WLuZJFwd!nR7-}(mnxqGKsIqdia@IFv6$XcQ|c&Sx|qHY;)DFBELg z|6ot0(0t8|3m3!Ee%D3=r@G1OV>G0|H3#wZTJ6SY?Ri6urkC>`E@0@NzEm$RaDUUe znAFA@DT!k^tU2|RO(VvLlCt?FHl%l(eTv^nzO$3+UW{Iyol`%!Bm2r)OEioLvM@Bq zSru2MzWVD&Zx}8*{Jz^iG53XUIW`(D8mF#VbPk3q?wMnTe3zN2jc)gAes0JAw$5hF zU3_LAxA}kf*Xw^Y>-+ny4gSB6&sXLy`cZz3JfO52vo)|n9Ol82vT(@CLSqMiHu=xi zj!_@z&%Nt(h)Q=>UZZEgo+O&4mn6x)5u2Hd=$;br_8DS4iR?%ih_CSVRs75U0Pi~i z?upe)7IT3bWMh&NrU6^bl`z&4-zW1T&F>fk8kzx-u%Rwketx604?Cr4;(b{mOd6bkEh`;(Ty6?2$x9BBWV%yTI2ie!lF}wb0*UDIh+QIU5BTY9ktvl^<6$ zvQORLAR^&v;8(H8-vIOyoF^C_n>gt!J8xPl_J0R~ShXFs*PsX8@EuXL8X^RlnmP8T z)WvZSMe&Y$5hW=ef8AB8-fT4LyNy=8q145&>o|l!PAZf zq#YOl9EbksI1k)O5Wz0D+gFP={WD9WIccy&Y7c0@@L|F-u#1S}2$ocNgl($yrRVLk zEi9bL_i*(&caRw$=l_ysaT3kGh{t@K|2LZlt>$|D?|l*p8~%R}pCK`mZZ=bmx@tV_ zwA!8e0hsqQwOfB$uR9OAY&c6wcQuX<2fL?dN4=Bo56*)_lSr266nCP{VTu7gz0Feq zBRRr>`#-BZ3c_(lndWZm`>NUO(El3kTe=-b-U@<=4JCBwXaK!YPZh~s*Ss_6jt*a` zg(k-5IS!`!HxepMnqi}}_pH-sRQjx%9T4$vOg_jpNu?&Bx%l9klsa}$Pu!);hU(mv zkq2%%54MV1c_35Jfrtf;Aux9hc`}hiy?29Ij9j0EUT~a^ zQ993PF}LrKGUANjOClPG{;3L~MmLM>Kygy8C!m;aG)Ph7JX&)5J;f1O5A z%HK^8h=r6nola`C+BRW`0NFaF`$yg6U4aKCBr3y{jij}Llp0M{uXpwuoqD}ON?a?) ztZSJdVfmejx%Keub#J7CXy#99H@`4(C9T6gCp6B@$S&84Gic78SnK(jc#6;qWWyoQ zW=>S+yY=R z(=KIYLW!O+v=CR3aWY=JsYUZd#f=tm;7+|!Y5u|#9^(5(%Q0N_+OyhTQyTbN7SP)S zaXQVG;i&u6K;z2z5*c6szZPxbDu`S!vCj~bi|Bj@+T~2BDv2#qBQcn)ocJ)PRkdI+e`^D0ZAkdqGz*%^~}gjmX83f8k}{@C|J>+FX;p{cYQ6y}S@28a)kn4+%NWHeSA)?aHbMy>^!|ja=0mop#;O zYu=8%l3LoKmtVV+v*aHoc3Gyb!+u%(8t#H5ar%}i?`=+bv7WK>gyDJhNlv76V~@c7 z+bm|cJTnA($JATH{bF`u)nqjZ^jlo|iv(934aBIjPB_j`mVouZs z$WqtDHfl?80t;fj1E@#zu= zVwdKcWPs2!@wlWL`>6`G_7anJ>k;ouB{JZ_o1xmh&c0I_LK`As@1QaS%O6UI6c=nj z7#N^_r-n&hwVz!xw^Fl!%L0k-(qR3-;FK#PHH`>QU>)a9?KNrruNk0e4IIft_eM9g z2Z6`!)j@j@&^L@vN>j`r*v8a^NvKAU?_Ctu?X6Ax zpCmkab9j8Rl5qw_>h>0C9h;qc`?e8cfGxYovzP>)p(ZGxWrg(PJ%aTxFKj=xJvOiF zk=@tmvtc`L-nHfW!L=B~la-{|LCh~(Y zN1voE5tC{(I?ZaIGQpfBl@&z>kmD6;+#jC~NpxzLh+Du(-n7LDStv%+GP~d%B@UZq z{!J_>A9)jm-fpgs+z58Js1(C-KLqP+$q6hFDKA`vB9+kpk24dPWoVH|+1Oj#m@5Jc zw0Nh+$_Ku*;&eRXl@v@6&Lro>O^p@$ro(DiWe>O<>R$Ea&~r1+B?>2V^-v6q4?&c7 z3I1T2KP8O*|LpzgdK*`EH;(3O*Hu)r6A7R}aL{0zvXnq1Br#2q3<=upxcvtUK#{Bn zKp`kV6uaAb-i!EuInQ&>&AnH0*0iUpT?K#|+)k58TV&O)J@2*G_*=7VH~1Z92z9U7 zg*}2>5Le1G+>QP2X}f*YLG3u-s21l;`U`fE$rDvArZOAvXnaINqoliXf^Y_`2&^dT z4z?_ES=>dmqk~O=Yb30ohh&+$K-rafZ*-}7& zuTq#FWO?y{#z(k@txC4FrD_L8^O2|arkU`Hx{zbVx{w4uA}(adLpWR&1!*(clMbW5 zvI(k#7FG{+gGl;VZnKT8ugz(9V2=Lq=m`^7Jl%Z?i|WEmb+en~s+)|vlRkOW{SE0_ajdy*5o^jM)r8Fm@6>W}irYT4>h;Yfb5?_ife7kRS9O%k^Y zx@y7)y|^EtOluriC6TrWV8QP=hw$)LBjWg~Yf5_rO2>(4I6)oh8wGra)OR-`e!=!l zrmTpBso0OE3Cu$Dm%l`O9B2-n(s6(}cwEKBSX543BjoF@F2#gVgC>1>OoWg!;Thdf zfjm~6RMoX_kSK3G@pmoJuHJG-n0?9|U1mgNn2M1ICrGVO*zMh-%!L30Lk0Ll&i742 z43vu3Pz0a=+M%6>tQ6N;JGz9L)gh$RJ=DH!*!+u-RC2*(je@PDw{^MEIJ=3b-C5eT zl-t7578^3iLTD%;Hc=PPBtpUjZRgu$@)CtNkpvvFu0r7A#5t6M0@0yAD_dgHuD}w1 zgV!z`z(?PDnJ@7(p2RZ>iy$Esx;WHuGK=LvX=Mi`^2a_(tZ!vUSfM{)k&uR4`AXaJTX_2Xu+u32L ziC_G0+LkBBXPwQH^A5xPRd7Gp2;3pC22aJZ=3a?x*~%m?f%Y&S7_pdCTvK#}k#Bj7 zmy7oV+nv8mIB>+$3Td5DMJuG0dP-vSH~NNg*&{+dv@KjD3C(VY5+hqB^;7k<2EfBV zUXookZ0c^&M|r8Xw)0n#7%U0DFdsuEX?{a`#;Mu4^2f;mIu$K!<;^Uk;CVip&J zu3Q9N7W9JOv1WGkn3)7*&){nOuXNfNL9m#N!9;9nnqyKuh~Co6l?v3kHYsj=j!>ywfGyPTh) z<{u+J0~h9#?ZpfFjag7=aq{j8jq?5LE?nsuu|SUckN6VkwQ!Yk@6)v}q2yeN1k=C- zF5Y|FXbsKroS&lIvZX;%w38>KTH_>ZA;>NSbVB{8nr}TL<+7@nA6T1`lX|oqOqMpdotOo&bk@v)P1E@- zc8Dp9$s{#b369h_U1mFvEe&Jo;YJBUIc(4`qvS72tf1>mEFO$oY~ zO*S%1XwXVBLq+V@i#x&>c#c7foKr*8bb%&0S0h|-i-)GdsN_H@BB+nL#0gi3xXK#1 zL)zi(ZLPSkqKr>n%E+w-zY`EU=?!tZ3me_pCeiBAXX6_RZS7QwaV51Z=l@mh|A*G& zx9z1szAAny{r?_4+4}m)*LnXx`0L*P?@Rn36xT-JI(3s*_Xhbhd3IJaK#$nUkokrk zFV8;P%3GV!w#E8NHB~rolPm7N6TYgwt5sa+cJmQclTM4y)hoDlQys*r!AK9r?}6Pw zD6caXy|V^Bel<;5lkJ-pVRE6=9Yw0Ap4dvw)AG z`7^ZiuAvV#IUbkJz*Ao%I`KfNUG;Ea&_f37L*JKG~S`bjgL zUKJJa&B^%cUzw^sXW~#_`rA6Tiqbwv+~y;B&`i?Jt7{+78a1Y%)+ib4W-l6C#m(&f zRekAtsPVmY5cO|ib>MUJWi&~E9OD}@I>;5kjcmT2f(X3%3w&m}N+Zmg1})CJ+}79@;>y)&XT3`| zE)#b~=n+jwGP>Fvr07J|%|^NUO{rJgub#a5@tc=*gy#x7!)Jr3Cz!qv<*(gRFf80r z2b{LgI%wg$0S-#X&lhT>M7`mB0>>)+$zjah;arX9w8vG1%BE9xv(A=Jg;hm9VH}sw ztoM81p~#AX^pQaoH3~t}XDurXjbKg%hBw5U0riL^_Qz)dy znxf<2%y#NTDDq+afj(m;+Z4M6kM|H5d;?RI;FMX_Bh!8_Y`=-}l2)7+yoj8Eyq5zjqO5agU%9xBiZ(t2N#>WdAgHN}J1b05P+ zm58c3VaVb+rqq}zkp9vSJBMdsO++<{4uR#KVJZ^y0qsii3uSCdJeL`QCmsk`KNkGC z_J_p!6S41pvUBUe`>FLOy?-e?7~ZMPOwV5n*5etv^~JCq{~+j(8yP>LQfH)DCeU0m z$&1<=0TWqil1RTYU2p>mZb-omEVy9`Qk@F*b1Yah0!ObchEN;tVX6s>Y+#X%XhRpF zdO8GVEJ7N)oWiHDA{*-I20xW~(jId9E1od@Tz|(icOqWEDgposi(|0P_~Oj4b}7g# z^LA#<`-U#CF-zS#4oAlD#DXv6`^`s&W?ny+$~CF z=&YU3k|FjD>B|QCICDRa2_jJ?D}eWed%U3n3uvFhPTkYEpSYebqADB%N(6y!8o17= z(sxPzT|rQJ_t>eUK3`LzjI_nj9nQpVQ(lmjq_!(Q%LM=x>me5N3r1Cl65PYF`tj7(Oae6pDBHmg|{QhP`t0g z%P6}h8)WfPCKwp#*+<>TFysb7pp(eaKxal`AqEi!?r1KehOw>&uPBF=gL!-4ZicIL z)&O35#=#h~>(rn~v4?_o&a5{HqDRR_s$MIu(+X_BJ)wPrXr43%x;7pY9ab4Zh_A?E zU~y)6)ggM2WTzS{bSu$Cju9!AP92$(F)Ry*Z!DrBx=?%rHLWqxl?_XWWd?Q#4%9;3 z7acBL5zx>$L$@!&1LF(grX-2hfVslUuDi-+PO$(Tr( zfWVkzC2tiC_=e54vqBOmNi9RT&nCr`8<(Y9va%ZSr8Cv%L%CbyTok!dX$-{?OcWGP z3G;^H)fiw5mQJv-QiL1plhcd5A`>?1$LK0FESx$X93q0-W-7_V$WP0}G*Q*~d>vV& zb^3GtO!=4Ly0rl|KWxB3+Q5En%%?*T7oq!ubrhu6*`N$3W0PJZ-?c8* zLC$o5>;uB`W0aRlBFDgRSM!LJ0lYnWF|&;EEGBp>+LU6|VzzN3i!S4^CgE2)wH~?! zktcEjtWGm9c)ggDN;yYR!aea<)~p7`Y|Jz!lnTla(+@7DHmIXi?|V$4Y;fh9^k+Ii zg-jO{PBoy+@|G4{x)6W3j^-J=cLYD7asUf;j`xrO!u^8acOu>KrS0Tk%(*>pS5!i- z4XxwI)i1ziPVMrnIUZu|xy^*#rjQ2G;wR&QO7cVj_E_mIPXfG~@SY88uhd5yH%}io z6wEWHouU#X2_bP$J}`OK0LpkD2rM>?dP<=+JLtU`1h3{(`uZE{vN%9J5WBuzxxC0k3Tp6 z+}za0UM`OwTlyD_A;NS22P5_kZ`uC9FN8jDZ|h6W!XHAlFO4}fv%N>-kg@178H&)o z5Cs6FFxD4xq!}KKOlvd?;X_l;#s=nEc-Rcy;5;H_#d=~5A#SaK5X!#Ds}!e8`3uuA z8O}_lssQt)ndU@@#=@TL{(0li8!?5OY#^%ThBhK@Fvxm08I+~j#i<`Lt!nHobSK5T zaW!Pkt>^j|nXN5;^$W0KDd%M-P|_Z{V#>yANS25>1x7K6;e4TtZ!j7WmyZ_gh|FY| zPnTDjw+lv&Zv5$WyAy7_4~07*I2jOCXS+BPJc>X=a}xO%UVxWEx(JP(wBm8z-Q7D-|3cBehZl0%nAacZ~{7!^wo`yRfNhH z(5{rur>{(4utXJJOM}!w<~)i5Sz#1P)v)wIS){HHTA9`bVor69gsu)e5u%2D?^%SEASD!M z?}7^e&G>K1FVD+pQKMxEGhV_M`L`Ex&JxDWpp%B(Qa~eJbq*s2De57U00onB6NbV>4_w zubRady!sbJc$%Z=gB9SA>F%oM8TR>Y^nsKYj;=-}jdWg=$CXp zli%Rrn}r;bdsY$G_dgN&tptHV(yKq-h#C>r7><@y%Z)kNI8AIHZ3QU7}#CPGJvWM&88%mI+K*s9QOJD z{-6Kv_W%7q|Gx$XNN}~3`vJurN^Onl)^cjIK3zjpBYd3z8~UMnJsS<78d{4+_>R)v z&$t#;Y%pjF<0<5-1Ac3o#K2YUot<%<5_Fi;L8xUwg8)swsPt1vXILt-4H0xS{T0nc-Pe`U84&z~AAFA}->cFdP=aTKM;i#bL;7#MpIYTfILZifDihEFQ zuyeR;hRh}Arxj1_khJsv_y7FAa>gk`94D^8*45|9D2Ck%LTpB24JORseyQc7e&KD$ zv#TAoCd!Q+E|d{NyunThB~6&*!L#Tc7GXfIm^)`t5znp_=tn&?$^t7g6YX}akvoqt zY4cdndw@>KS)n9uP!=}To^E27+s3^ms_a?Hy|nQ!U~%SCIc3G;V5O-as6@AV-6<~$ z&wVmNrye55VRSi@c{3)KOsj_mObO*u?`DVtLvsPdkp4h=Xr3ZLJd1@hQv?iOE1_HQ z6EuKGY**%AQ*8MgySE>+go4M8 zhK}aQ5$a!fBWE0Q1P3sAj}cmty$xjTdz{;F5R$UnR>#DrpyuO{N*{SymCoop{gsIV#5AMWigEEidMGlDuUtt)_)On`UNH ziRXvo8j%kvL)F5m5(S_#PL)}fW|*}{EtE|TrtyDK7SZCF+qzI0fzZB=ghnpc!W7!G zRyswrZarAzE^{4vt@zLG<$xCn`8_2RbL?X?JV6#a5@yhrm@Tnd;v{RlPX-$leOEVE zorKpXWV{$O>`&RWlFGGC=DM4)+gdG?-iwA zI%;4@4w3HmFuiRL9e*XkJaNP00cT+nMS}o}uR-DjN`vSSyUfn&GP& zIZFoZ3yeasupi$)u4~pp8GC7-G*3sc$=a1sGdrpZq@$#$!wEyqEhq7yh3=?vIa$A)=FGvHWzs^M4N?$o^jJ05IYco z6V<3R*7bE*7&v?){}8_(^Fdcm0nt^2Ha>eQ_)3It$N1^kO3PNZ(qwtEmRbI`)>yDu zIBmB@h4s<)S3HfcVvubmPTy)F|H9r*1iCUd4oHM;DM~@OyH45Q40G`l8eL1hCb3Ur z&#s2m?}|#$-r3G$)1A$IKH-JU=Gx9UZk?nF^n|g{Wev1YX1TE--rU#$Az}|1-|z~4 zo+TqwD!5v`OT+5&QmTh#V~VU?gBGzM&I!ShRo*PjQ|NLLX9*>tpUh|Ea28AL17GcO zeO?swgcrUcFK|*VnE>YTjV;5hZtjheD)7>Q%0<2~5J4g=Xf5xE;72570r}e?gQfSR zxc*4iO;K&;>fqa*8DAuOi73&?sm{_s4z(+|BSRT)JZ2bmz`YqTMMy0 z&BNNo+UA-PD|D?i1ti_F|45+`pgz$kLD7i(QfS}U$t}~dsmyk5YlPD!DM#H$&PavY z(Z2t0+4rBe9p1KG#>4=A$ru)Qcgfa34$Zr}cCl{f0rOP)2_Da)Ba~7jFnaS%YCOgY zVFMZG1?5fGq|?7Bjv-%eH&ohV>_ncwp*xx!GWBr~ ze<4<)42H35t(s|l?Rb!jh|tLQd<+Q{40E>-7fdV|kko7v-He%ul!oZ;zy$4=X z_krf)J`!ojPL*kSI>OfPze6%7iRq1Fz2YfIh{c06XCDg;n1)KOOFGanGp5!n3a^l5 z1`aAs`i|<;!!ZH_K>tMqfF^e4;=Tuq~qI7~q*Xtn6Wz8y=z zxt1#xi$*J!;iTtF5+=qVmgpqq!651`CcYGYL~0;HSVux`cifr*oj%#-B6;SA!`wcM zK-w6{^5J~wM#-HAgK1NAfWAS0^jNa4Zp(FNBjzJO7Pjv-PVn%9sv#a@EY z3`@wZznN;HOOsD|t}S9Kx(1uXVn48lj!Kth%rSR1bH`w4cA@*uQD92up$XTd-kT1{ z&Hq-20NZymMHzbW>?USYqV82~oE8r{p&tF7H!<2>)RvN{NPWWX16?DU5oLs#HqH>i z(78LL8UDb=+3VV@rEmD&nE=Sz=;Iu_gAH>J6>*Qc2L&GOGUXvP|I0|H~rpX{SKyLh@*h5K{)-f7Zq_TJ$XdQ-Z z3ZhV~O`$tj+>dFk9|`mvsc=ZmXh-)*PK+oA(NkB~J!-<)rFJ*0ZP$^Srbu_^V-q~l zusp}Dn4@BL77_rd80Lf#ZaB^->>+LNt=mo4agrl%o`tm?)gfgdV8*V&t{l0UQ3^6q zK1B)v(8?c#DVA6~vn#D>@l4BHDvpa{Mp0Lw{uTtsjdZ*bX=$upS3`8^AB^Bp-BDx8 zgpqy|$nybnZ}24$2(^$oW`%epE0SHg{z!zFF_T(TtjS?Nouc=*>^{6Vp3ygWp5K!t zG`x7c_4uN}zdT`48h(GWwRO={I2N?xvbm81S21mhi^==Q2zMtOG2?&=wEi#>?=(g1 zm4`ClRj@2w+I&VqqJ-73+`IJw(9dUV49C}XuixzYy57)au@!3(UM=b<+E=R9YS302 zr$)PB$@yAMK(-C7ovPUV$_h#XHjY*{;or}A6|)m%@04OwA0_|!NtKKw6XYCb9544Q{|#2R*k+W#$ObVz?QX37sXx>IOu1Mybx8-OiZ)T z7^jlf!rDz*Y&z57t*D}5-%FRsu7?-PbOP8;l;|&ZmA4_ykX_-0X2vhL@}^Zc;qO$B za8cE=&2;5oC=`Xez`THpL9wJQkXf#1z7;=7ECf95vUe(Q4H(?boPl|4a|cXTh;R^d zKukb7E#(cA&k_P_a&4HdRNL}$X+(5?Xat4sFpu+zdLwwbmU7j27a4F6@138Y#|2?< z?%M=*5|F>qvf*(Iug?oB>jCY1CLn~}Yg1i%*GCh@ci)9;t-ZbW+1bI->)mh-AK+Gp zf2a`LE<+u-MJN3}B=6IN59Pg-F?zhv~@-J|wC|IP8E034(yVOOt4`@HU<99G-0wqJ(xr%d(;E$$)>k zZpR=+)5R*+Y{CdPXB({Aqg21fr7RX5aK!d4PFP?|LgK8Q3@!YPv$I1Jlv8l!FM5=r z0{iI-3xk1={TR#?w<88)5kKWQ%5%@UuX&MO*nicNCAh@8VlMmG=FB_aiJU zUNv+6fk`S12S{-C8OO8NT46}y$)>_N+0H>7G_XUa zvW(T1+?~GmDpE!OWtVYXmyl_4`(vr>#Of^?BS+CnX{ksjrXWq&u`vbW*V#Bwx ztKHxaaZYrcw&T(oGrLNjNWxw*R92~REq@Q*1JV#06WQ?{PLxXdnuZLR)YXH-fOwzl z{a8DgC+LHJv37KP`nGkrcA@<86-WP;Blh*p&OA6@yw$AyJ)*_0$UbX+$bIbId~5KZ z<|H1im6oClWexw!<^FLP?~QliL&drJxbKHw95MsT*$i+Fe0I|Yp3T{Wg(c1Kn_eEU z)<&Zx-|Mk47z^&C+~*pP{sXCdHNY2z$*W*>%K4(aA#&|)+HEz%vzX0rKWSVGX<-@M zT)}`8KUEV-F-s>1+Cf21(YVVoE0$bf9s9#)v3&x9RKJ}QlLk- z6^uC-V6NQ#$koA641^W$=&@6>J&@%w2Ysj+o+u9!!=?jwy|>ps>9Ae(;8hRLPvb!zES&uOmhRRVaZtMBz8fLNPgR82nFQ$~A(>7i;?AgqAhF_a{dA5e60VDh z>rFCsAz3KCtY#c&;-Nr_GyDa7&cB%Y<@XI~VF^|t(z{WIpFP%QL7H5NG#gRk5Zu9O z8fGK(F+iq9LH=s!ED8ZO5er0CW%~o!?aznGfl0S_wAUrb1|7Fn9tAm}T|{y6;!c$? z$3_|v4oN4J494XhC=`>)a8BCLNFiAWfgxQydFX*)K^q6Sx*?^T1J=-kiJ-#Xx3{)r zQ*GE{#GtIVDvB*apwcS?;S1#UR)^|kh_izIc|zC|vzX%+7*$fj{K((WiWTI6JjEP4 z&G6Xk)v9h$V$-Gn^!xToV`xb1+AKB#f`Ye!sfCSuEjzKGYQoV=!;uR^jJpBzvcpJr zo@|99HR8eupI9^$(*za>MRy9Vq@yzVKu#&l9%)V(&?iS2sm%ZVKmQ-R8c{5IMf)2V z31GdM8NrMOhx?Z63=f-|meCV2hmAIukZqhFe|vPN=8%S+ur(&%3J9JK!?j4fjBsP6 zny|rumdED_en%{#Qm~mnIp$MyZB}%g^UMTBI*;u;#jV4p?9LlXN1l6@kCw}|Vb}q; zPfkeNGnm5_=A(k;Ud(P+v)X?kz%z+Z8%t<2@4E z*w%(qR{4R2u3qFJn9#J?Wpfi86N8AxaXWCFdTBa@H_EY?e0#N1qK?L}0Z^b7Rr-SC zR*iTI9O(s$1Q+B(%NGqf>r-@>9*fdfh`*>feKMj6!)I~p=|p37VqCnLH9^`=GUXYK z2fBQy>7Ah! z;ljRQG&JF$Dp+n}`&EY#T!MWhu?j0I<~$(h%-)# zPPY|1##7|5(Y3LQDyhU$jfezfUv46}0f@v8llQSWkGoNgqydXF%Qs9%3Yt(o49eII zfAWUzl}GAHWD~p4kw+%#D+b~VOH9C6M;fWtYak3aD94UKjMbfx5b-oKlV|+xg4fCW zn1e64W&f&*MmEclAemicuhe?hSjy(+E+lDDc7bM!3xOb#q8D|cP|K)qnSAu1l%i_+Juu85ON5+_fwEX--_9! zdyw$8G*ERty?1ohaioZj9%5mpS`?R{(^xxk+Q26Jucw`=v$CAFG zKKIRw;ueB48h(sN=!I{EFPfpUub^kF6;s8^D#aJ}V#;uHfz4hZF@u%Ea3BO1)Z|P; z*{tXVZ1@X$GAVx5w%@eWLUC$J9o}UN;D+rFURvl_NYGWO$Sx%rJjgEHAVe^>L`O4y z%ju9J4$q1dP=NuZ<4Z|lF4-Zg=w@IV&T{^{PJczd(NQ~gtd5D1lMC32^0Uny7ex>C z3+p0OX*f2Vk5mp734R=N7&95H@_ChiS`bE)j69>1s!3 zGPtH3*|hJPBUsY5w}KF_3hnzc|5VSV#kcP1!(VYLd zFga@kkK5yaqxPGumn}+yWS}9ds|RMq4iK2$^j&6vD6EYrW2vspjYX)e&)TgX21FO+ z5}T^xc*<`n;#;y{NB~mGIK=9XusdvevFoVJi-)M>zEeHK8_%JW z6e45A>RMMKj^iQDIr!}@C+z>q1us1bv-eq7o&DeRaRUxXLJ%- ziL8Zpcjb!!dbODHDXeW`otv|CQkZN8+SQbhv z?D$#Cto_`SF2FXK52L9Cio0@K3Y|b&$O$B5(1<^%T(X5tgU<>6MMfTFn**4)Q8e8A zX=~%#pTD|jn1zNT1}!nA2bpG8TJRnX8g`NR#ao501{_tTYwk zo;4krRHCM$hEOSO*3|%R=2YTElPPo}XYrTWYJcM+By;t*pQ4Sw;9qLW?zHPN|F+{> zB#UNAMsAP#*PDwX3d={%$B)P`!g<2T^slh?CQ>QfWVQNovjc}3sap2GXi{3Iug}~G zfdSUmkhZSX;VGv9@x9+!TR3aKz6NSJ)sbCk`2n~dEmO5fd|3Bry1X(AZx3<7 z?8;5)tq3d{?zfjOeeE%AYqf}kK@r`IHji@jCzNc7K!T-mEH{C&G8NL6Q515JU7BgW zO>);65ry;>1a-Uepz`MnI7%F3t5rV8?Ja5^$5A>+oM;*(mdXv%i65qQkqnO?H}YUF z9b?1_fq3iC2)D{C7MW4V0*Bxrb0iFs4c~-V^-q~VX?*1J4pL;$5ZGhhsVK+uVd{dyTLx-^#-%`MK@GT z9mgoQ$#}v!l5EcALY&B1?P{sQ=_^klK8B%vm=Wqf^%jH6v^45i>s63bJfm#RWGBXi zR?4;OI*#6>WAP=cm{U%CEM8xT@Fki2!O|tI zweouK_~U9dyY{*C&^IJ77jmG$rl1yWQ$cNOgPz5Mx(bXa?Y-o9DWBN91EH^%C2dF(93om~ z{dpJPmNzcZrF4CuR2@PuB8m^WKo}Cz+z5O{GA^9Orml<3KjgZ|4PWH2D9StEPt$iv zsp+b+^Ze)h5|5wWO3@c>-qQ{p&<8Dga^T#S06t_ln?JR zK3CIzm*r_`1*JF$At1V){><Zp~x2(uG0(!aUfEn_Hxfm>`2rDMwzR5jg{ zp-mi-`FFbeE-Xxv%?}$lH#Zv?FSP+zIjsWuf?+BVl0HE`+N9TbyIn~3Hj||hWA7yN zE+uawj>{gX*)g|hO}#Nu*7f2tj-rW8@Ef7?heYMm`R@`6KX4uC^o2uH$}R*BpteAS ztjl*mlUcE_pSGh+1Xk{-eD(!9$_IYsj>>1BfEe6qIB=XiV?hqNY#`EaV_vvF{!-G9(Fez8)(ot-~gBC$acvFyPC4UPC zdVI)Z*;_!b>exhafR(7Wu5b8-9A_uOagq%#{XgF$wC2!UGVF4R1 zXO@iObUstgdR);kjnH>=jJbsD2{w`M2HEg^G)x8-`eAP5v-BONa}(@<^7)3#S2mi; zOejE0a+Uq?!w(xR8z)kh0riR01qO1U+z?T}4YJ2no6b_KO+Rg}opb7|{p| z71RA@#p0t%Np3^q_Nm)Y*hHM7h$~d#g}Jyv_ZBX0Wa?N$xpLZ~U%{bY6jh;06l>Tx zF}ny||E)$AE^CGTSVO(X2#XWp8d>kd^*)I={#u2p?_Y7&pZ|M$JziryzF1rczgvzT zN5oyox?x#Lpoi(PZkwTkZ;;%o#N#3tZzmfzmxUP@84GZ5Vuu)nYo;&IdB!HFvQkp! zx*iII#w%`032DDvv>xvqw5-TJUd<};Qj)Ukh-PuH{xUWSMIQ~4yD?KpCiy$qDf(mt zn>l`RZf(2=7+Z=wz^#nJuK9xP4&n~|gdoT>4&zpdx`g8LJiOT1+PWxZU9|WJ(cD%Q)+ptAFSGVqvpIIh{WziGWP zb>U@P*U0;b{7sxH{<3fjC{*#!wg=Aj`l_ZbDpr>CIn1sJhB<;1CfPe)+0un~xGm;L zW<@c9rsjT&m@Q&Z=(?9tGF*jVl#4pF4c0C`+m33P>7)Cb-709qz!>JRc9J^KFGC;r zJ<1E@C*nXYW*e|5aF&Ew;sdHz@`|w@Dnw7#^{S{QoE~&}FN#>v__lt(H?6&CBUgTw z&FL+aP9or1tWr7*&xm>^Uhdc5<0U$hzxz#o!4rKEIyiUi*F@Y9Frpd~(M|tguu}Pz ziG?7^J}3A`*+!BHh%i?#CWr_)sSlBaFrjK6Q4O9xmYLBbwk3Qs@ELH-Sx&#eWi4ev z?baas&NCa+SK)Ce#lS^DnWTd-6e^|b$Z}68EJ6`q#?vV$b5sN(LuBagjMKyQZ~MRr zsf28tBhEG&Z6iR7M$V6AiG zGIl8QT?A@Pvxd=_L@$PM^j=ssrRyJu6VdgmE$jSIELAKp;Iu=dp(bQ(h_uj1J;dz( z@W4EzM3*iKC+LEffsnK*fwL%4bioTJu}|!Y?Dp%=f49zLwRj>g$N`UZ8*nrym}={H zU44!V#}JQr@dPVK)-GCQt>X-z_vV*)=yY|X=mR6tccE9m!{x&zr@Rqz<7oFjJ4s|R zw))5}w6aeVjVo$T=Op9lv_WNZky-XeM@8U;sz)`dfQfQC3MJE6nYQuD?+b7Nsn)Q5 zjM0+a>Zp}*6xML3oS>dZpk~KDazaVEAta@W;J| zU5({z!CJAebCUw`xQ0Q3;0cMNW9l6rb(>PhE?+MET+y;h^>rQVN=*&372LM%OEFIJ0xs8!G4l1+Qp%+Lohl%d{O@p!@d;9o>932Xr)LWt9arpG!Ta&fJzMBMx?;}?PNhrrY*~Ly zcK|2>%=TJm9gV@|>`LD67rGSU%EfMC14mb!$(9!C@U-RttB{!-9J$nUrw^ z$%K?8g8_#NLCdw2kiICY60XyOldP@;E!y@vIoo(l6GofA5dEe+N*U4APUav@6dHgE zwV-{YGGG+;larFp9wx&ueujY>-`h_$QmU~TE;m?}l+PLLe7wx6o`PtAnyQNNYR~V_ zy0la3h}+mljbFoVey%C_^o#yU=0K(Ql(g2b$eW%>B|H>M1-sa@FOgCvcqnHR&jMdw zTIOYVDH3@_-|nC`qPWOD9Ok0Qq6tDei~1oMa3e4QM4eG7i`om_5s~hJ>SxV>wKXib zTQ{S+u4oD~nL{EC19%CHXgW%mb4vR&5L7)|=~Cz*>Ktbi*geEv?x- z3n!=-&u-BD=R(!B)l@<4>dDTNC-^@)4i{@XTU*<^gWfm0-+aCOc=u8C?bhz@_D;Tk zPvIJakw`Wp$*90{i>kcKIpPh<9m`0`-kR5U3j=#<4U9h9-MxgLUF_{v6MDS!4SqsX zfHP{NK++zRkCrXZnkUTRckvJ#f`w$DsCuz=dmS>p5dK~i+&bY7xtGH5>!h0D=dB!!q$3a@pTnI&LfXDCH$B=2xDj zH+Y|s;3PT7b0rjHwHB~kaa?T!oEq;MJ0J(f;melF%`+{7T~Wg;N+x;h;S=icB#|n;+UI>_Ogv(7SE^N2j29PlHvyeqr5+wx#sbyhNS@O=ZxeZto ziqQiu33@o2!AVs5dt(}lCTK^P5)3#_?NvMmE^&yJ19L-s7Xcd6rlZZGQdOCJ+x_Y7 zWM=Qkr54dYvCb+wej;iaJ7)e8tjR;gSnJE=UrWQ}7wmfTwi#um$6#+5^w`4Sq(|LwVgD0MkgqhY{f?@O- zpAJ|KFosz43K+sR8D<41CV~kpg=M+Ld{IEjC3?1S439)F{{DHm zHoC<>*22I2&BC3e&`y4ff2f*pp|2{arAzpCssMV;=H0+~xhYvgw0; zIn}M`@M+k~qEiP0*Hc@hDM2cZi!fjee|9L1S;;THs9(%@V$O)g+FBXL&dXEDFGJD( zK>k{B`1Z%{@k#4H&fDSI_V(A09`#_KfBp40{rJ(Nt*2X;kGA{YMwef2Mc;hA)r-D; zIv5NdudPHA<*NQo5X5|3_j90qt5CgCH*Tgp;ig`&x2?e{nz#gK1b=hW5E2p=JRbfUI>6Zb1lp4+$Lz<>En_siPZ`QBdp>}>7t z{4Qz=71Z%(QI>Ws9>`L_mxFi) z+mx;$u|S%;WRAXy82lCWg^- z@(QR2PLG*xyCI}>nJDzBzZcS7GSB~eD0n%I{&LD|XObWV#RrrNBu_$c1=Lal_Bm>Tm&eLJxW0syLWhe&eI{{e>rXK%xeul2P=*-lxbT z>sFtKJ0*u~V>^E&@W;cFj^Yte@EWxU#|m3>`7z+3;OgK4YrOCBo`=$(ufFm+BwC&X zSWCT$1FIE}thEtYTCt)-mP(-EOQG@Eh*@EP7WbSFYmt=}=Gp(Y=4_TmI0n81DuX$v z2ow`er9LZB!~A0H!%t5Abj|ovT%S)!{G68laS5QBy}^QQi7WL z>EsqR$h6r5Ix|MaF#Z9Q9Dl`|CPzkOtQ5GVz$B>;Zq-A0U)%P5EE8Ijy;_HU{V%x1 zRy<;&SaHkLGz;KU=PZ3sdYUe~G>b*^H>gV&?yu2*z-v^`EydDA{r-G3A0pKBYHE-@ zAT;Qz#BF z!V{cQ?MiY*(T@Yh2AkYA&|4SiXAko#Vh$N-Wt0xk8ocfTXSNq1ijQ> z-je^=G*W1=I0$zu1&6A6tN``X;{i8j;-N{YTG1GFME81QgA#+k!#Na`2|XYrW?1%; z!)C~t8};=WMGl#DZ#c{3-TRG@0PPuyF-u2rV4RkC&LZ4*x@iy^-eI^AbnkYO^r;+E z&;%dyDhFi;gVT)J+3Q!WCcL>K=}X$RfOd z(x(K|ocCFKtg(;#WEhPj77BVX2E7CUxfJ3UCUNu*&xEt)4SdBJ*6<<}-$1oxpftLb z1$bU3(*y$#!sB__!e)hSZ*Qh(7U1-0$PQ~;T4aT(Nuis30U}R@o0evjg4(C=5lA4p zlzdp(b^TeWAuE-UNSG!H=EoZs*7z!(1xSi6O)Nt)vp%&F-8siVJg7Kh6Lyno0aAe~ zY3%T1n!BOs=QS=W{7QmIv-#}P%T(1+M-iE$SpwJ7lu1{3 z84K@9KD<|nwh{J|Ny1=Xl0ih~i6OJ&@Cr6Aj)o}(f9~#Y{0dqo!lCw_*>AFua4QD5 z74ZV&!3>d?zKW{jF7>_CEP)4jHNC#I%OVNe_l0ksM?50hWaYop=#2G=^DPG^V8kva*i)stz zdWaU!#63E&#i?TnbKH2XA}2?>9OYX@7eyn#-30~?mnGo6uJ;SkYGK#-3QMj~l2aU# zv%U1&fbZFdhzq1ZQJj375v)pIGR?uP0Y5d8V>Y7I?8O1FGt+c1?{gtK8@NwiC4$9e zF$XhF@`F${kpZ~E*n>y|AH^R~Jm$=c0p6oFt%fQ6A*Rctcx6$QqX~WjhX?u}#MF5X zT2~}dyRl`gakXow{`YiNr9hL>_eM4mL7B%AUZ=wW+P{(R!mXUjC7l3eCB_4`3$p@L zT5}oHhD0JndA?a~6FQ$gq#smUtn#C2KL_{bmoUCW$xP-9!D75cju-h-!%MJ)MOr@C zfQCzJ;4bQ;oTdfB!0g|~VOZoXjcgSx!C$Jo$zm+6Uct!-p#J}!C$j>M(-J%z z?;MyXm*FF^UfR`-xenbVT@m5u*Z|nQfn5~JU^I!tQYc<7(p!t#B#alKl!e=m4Uxn$ zL#Id+A4Dt$3{2@6!$I|uu>*{R&gR$z5=V?!Lbg39RzFHYn^`B{^#+9UhU(a*JmUQZ;NHC454mdJps!y{JeZgVZr5 z{Z(qIK}Zy1)={}+QWcv9NX}gLtJzp?8Q0YOCw-eRWmst9?UrO zoZ#(xD9^*O)4&@RzoVqlKyOPV0W?|G&Z*Qlz=}dY4`7}V4O}2+6>TRlvfotysK=1*>Uz+u}kW*+tb=B*t5l@R{g<~ z!3*m4f;J)W6jWKjkOFi=3sMfQV+`afV#+BRSbf)S9wy`YhfseP@OLn&tsy!zO4v{3 z3gDU(0aNjC`kDxcYkH_?7~%HNR)f!Mv5JEP=-jBwkIxFa9hw`EdLol`E&4!39#u%^ z4emlL&ADKw^D(o%s$Mo%N18 zgo>>vuqjTWTLE5-X2_q(hQO8;gF;D}IAk>nz|Vo9jTT&JVHsQzAq`Pu25-`zepT0c{TSxnd zce#JiIXFH#3tt_d!k;HU9vr=Hg!>0)ozsJt=lF^WzCGSQcy+MX!UsXHzP{C5UuXVN zZNnCvSOHEo93mbYO_uYK6M@OG07XE$zhrK3G#TBBK3pymBWVsib{Xa{t4~>twc!!rmC8!btntg*)|){)BA$w#(&<#N5(6Xy z@+k<$YB#`PS5I@>Y7|E_9evopVorf`qUTegux3hnMpG+HDn=%fju+cwL?}vYGfoIb z%4KU!`cqByf*LOf$tWml(BZ^WqGr|ZmDX=cKP8?o!5nuT$J6Q1h;PYp#74~LF0 zXyls~Uf`_Y6{vC)JWB65XMRW#j%pM~8DL1%GgdqipEsXn3||d0Ak-d<02dLEZ~#|@ zxXZg2x4n-=b){4;m>rF*L7a;V@2`LkwIflho+(k&LaEMJzm&{K9T=LU8_1oj8m=X9 z2ob~C%>E2{7Rt zCQmGjK|6pa;#Gj-CpD||Hn1@f4CRw6T1L|!M#+eoNTp$Y#-3hqc3@NKbI6~G7(^6+ z88C~HAYPK0vZ$AdViCs{n5uJ=7+GEkc1@JVQ!zz>VJ`K8kj;w?7g{4cxxUR%ts{ql ziKVjNaZ8OLQaX78lVHWVfa9}XTq~LtTh6ppA*3)73ZPxuCOh^v5hXa|a?`k`{@tN& zDY;DoxlLx*b7GH2+~FekdT49&)us%r`J{vEl3uxreO@i%PZDkiuyAXJe{SqRs%%18+rrI(JGVc;_76x?9`!kAfZXAF0@U`gSTFM`}7^&D>Hn1>(~XO z@G4CQ7}N)cJHEUmNTk%3Y#V_Ln}J_)JtjFA?=Kpa@SoNk@C-DZK80{Q;qGPNKyj3U zKk%q!bTh;hoCmAL#%qwt=TkDCOyd!WHprB~{<@qG;T8&Nj*`O7Hxb!N8b-i}CHU_- zxf7%*)D7%#5a|}wRmO^2#6gLN!wn8?N2VixWd_!4xaN?vc~3cS?F?*~7F1jT6}CRy z(0jt(KD>E|4^kY6lQ05BR+W8aS0^^ESe!&OCOrHAho4J9!7JmNCge;zVq@2sxdilM z62!Q~hQJo-w2~D$P$|k8v_-jv(=4Jvk3M0>t0=uIN=x^Jc#^YjHbTfKvJ?%7BeGYB zFdh}Y48cpHb_$KYKmp&!nVbmw?DJ;CEk~rGf#{Ot2xi8KW)R)|8+D{Cs!vvBO3ZFI zjSf@neM27v?gxUKsj9_Xj=cTV9ExzCWK}#}LsT#pbE^m?)gc;Jb${jLc4K%>m6d^X zeXJuAQAp(Rj5En94nx^FsF{Y)_BoM6;(;jX7}=9)Skw3l#jKbUXP~Ro4c_hnxl(lC z!-nO9hdoWKM3m%Hqm#A}$7H#S5Eq;gr>0HxP>iMwnOCUCob4WQ2hT!SrE8_0m!?P# z4L}&5vg%CvTG%3qZ?bJ86H2(Oad@xxpO1fF-LHyjX#jDfH0xJ5OR8EWiqbg9MD3|4 zDCie!N&>E6U+VaG6uwV~^AX#gfefT%8(?&AGd^aD4PEI?l{91Zj%9lm<4augj+lEZ+Xk0X??RFV<7iM|TqTJNByRDk{kl|wkHc;q`F&d&$aCuG} z75#y6V6na;dxN1 za@94qn4UvN0~Ytf=CUQvsjc^Bp^}9RZ~gF9j!foo#js#$MB$vMUsGu{VN#vx2ayMd2u;4b}iXSk$U}Sc2j0)6U zR;`jQ>mZW6K*$;Aw1}pOG85u;XPk;rX{7{{08U_@;@gv^_A>g@p!iCXqlUf2RSU$A z#`5(b^}L)w{S`7<@1r5HF-`?^z8y831`0tIf+~YwXGwOM==AI+%K= zZ8EckCZiM^O=8YAW;&!QaWw_@)X*M&f_u2-Zgy?17^gW84ND|fbWQU)1b&z~e!P6e z=WoCs+AUP}tAw&SOdWF^>3lL}k*KmhxjJv4$7iIM3)sH|LBO(fD1i?82IaRk-7DR+8ZRVVMrW?*!-63>D zQdx~>N~~l{3<+NL=|LlhGYs~Q)?XxJil+cIPLiB}_-P&K(Y@!^l63ZRLMnHsaM{ zUPyVl*(Z|74>E^svwK~enaMOr8-Xk>xg)9wE4#q57655cj!SroS^z=`0v;!BCuS z={6Ip*^ei-8-!*%M3t*`+#Cx=eg^6$`WVtJ?sn*fEH{xo6(xkYQDhxu$`p&IX57kY znO8@fm0^EG*Ht8EhGb@s_$+bdmhx9*25sXrn)m?Y0h~-s^E97180D&vK1pg4&%U}0r zkRo(>pv@8-Eo7S{T1pBqtFb^92&!a(!XS-rw^AbqDnjH2wJK_vb?f4yQ7TLXe)*wJ zrn4deboeKxB?YBS!!zW6mNpF)=LUzVw*nx@myIrRD@4TJ9H#4=rRhK`N_c;v?oY??T z40Ov_fj19Dld_U#XV`3W9%$zN|xVB2K=3i*j zo%IrIhp*H}@OZ2d>sjz=C%Dfs_W64#MMTJ^38a{mEiRrJ1LqpWz)#acIyG7*&NCw4 z(%GOHWAtvNz9X-vv9r%DEs5(#RW73DJ>cvMnOxoonhHa4XKeM<&d}(C&&>pw0u2eQ zqM)|M4JVGgw6v&C*R}HG*DPlvaQ2;uQT9znPX9+CX^R?{Vtx4ouyoHLXZ8M={1w1_O}7l&>*^U^pSgsP3Z) zVOO4bhI3(JqNrxE7^*1^B8TYY$E?*zRtMPBf)0M7kVm~6-dB{cZ${=t@t!bZz?BG! zW1kksH8_&=^0lo`X04&V6xdL&M?^v8MFWz)hf!Iz(YxJXSGX~yL>gZW?f3}k9c>t8 zNo3uV)fi4&i87}kvSez~*k#*9))u7{ZHFx-k7`toW}dw8WTVhbQy0zA_Mzf01qN%zs4Rl6;P0Zom6U-1S$VpD^_|U@wFcrE zD0~RI)$lA7>on}Vg5OBAzX8y6)ib(86w^plKy`qfgOC7GlrRZb3C7FOqJFCuRXLgH z`yLH&eOjTMRX0IXrDiLT2#dABy_V55PtrTau@lY}6K*$JO60BbwL#VCEGyU`b%bK1 z4%?Ihy{?m9GSeDSjX5FiD#h`*&Plyn*4NOXaP;9h_vD)RMwU|lIx7I+v~k)cQWWl#pb_ZogIL(*=WOmQfH2 za>qzcKt@_`D|~)NrgB#+}@9cMFEyNhVRCZT_(?-b7rDs_~Qv1G&u1c)s# zpCVbwaW`XkRN2E&JHQB`6pEnG+^#7aq8Yg7N)T4qY#hc2DbrUbI6jeby<6r*iBZn^ ziENYK_ray`zUb#gR{Oq+Ple4k3;%0AxEe_sLp0+Vw;9GC02%TUMV?p{x|H?hyHJ9B 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 Ne*t31i4g$M3; + +#include "httpserver.hpp" + +class ProxySQL_RESTAPI_Server { + private: + //httpserver::webserver *ws; + httpserver::webserver * ws; + int port; + pthread_t thread_id; + httpserver::http_resource *hr; + public: + ProxySQL_RESTAPI_Server(int p); + ~ProxySQL_RESTAPI_Server(); + void init(); + void print_version(); +}; +#endif /* CLASS_PROXYSQL_RESTAPI_SERVER */ diff --git a/include/proxysql_admin.h b/include/proxysql_admin.h index cd3d05678..97291a530 100644 --- a/include/proxysql_admin.h +++ b/include/proxysql_admin.h @@ -6,6 +6,8 @@ #include "cpp.h" #include +#include "ProxySQL_RESTAPI_Server.hpp" + typedef struct { uint32_t hash; uint32_t key; } t_symstruct; @@ -104,6 +106,10 @@ class ProxySQL_Admin { int stats_system_cpu; int stats_system_memory; int mysql_show_processlist_extended; + bool restapi_enabled; + bool restapi_enabled_old; + int restapi_port; + int restapi_port_old; bool web_enabled; bool web_enabled_old; int web_port; @@ -297,6 +303,7 @@ class ProxySQL_Admin { void save_sqliteserver_variables_from_runtime() { flush_sqliteserver_variables___runtime_to_database(admindb, true, true, false); } ProxySQL_HTTP_Server *AdminHTTPServer; + ProxySQL_RESTAPI_Server *AdminRestApiServer; #ifdef PROXYSQLCLICKHOUSE // ClickHouse diff --git a/lib/Makefile b/lib/Makefile index 5f958fd4a..3a5cb7157 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -26,6 +26,9 @@ SQLITE3_DIR=$(DEPS_PATH)/sqlite3/sqlite3 CLICKHOUSE_CPP_DIR=$(DEPS_PATH)/clickhouse-cpp/clickhouse-cpp +LIBHTTPSERVER_DIR=$(DEPS_PATH)/libhttpserver/libhttpserver +LIBHTTPSERVER_IDIR=-I$(LIBHTTPSERVER_DIR)/src + MICROHTTPD_DIR=$(DEPS_PATH)/libmicrohttpd/libmicrohttpd MICROHTTPD_IDIR=-I$(MICROHTTPD_DIR) -I$(MICROHTTPD_DIR)/src/include @@ -42,7 +45,7 @@ EV_IDIR=$(EV_DIR) IDIR=../include -IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(RE2_IDIR) -I$(SQLITE3_DIR) -I$(PCRE_PATH) -I/usr/local/include -I$(CLICKHOUSE_CPP_DIR) $(MICROHTTPD_IDIR) $(CURL_IDIR) -I$(EV_DIR) -I$(SSL_IDIR) +IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(RE2_IDIR) -I$(SQLITE3_DIR) -I$(PCRE_PATH) -I/usr/local/include -I$(CLICKHOUSE_CPP_DIR) $(MICROHTTPD_IDIR) $(LIBHTTPSERVER_IDIR) $(CURL_IDIR) -I$(EV_DIR) -I$(SSL_IDIR) LDIRS=-L$(JEMALLOC_PATH)/lib -L$(RE2_PATH)/obj -L$(INJECTION_PATH) @@ -89,7 +92,7 @@ default: libproxysql.a _OBJ = c_tokenizer.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) -_OBJ_CXX = ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo SpookyV2.oo MySQL_Authentication.oo gen_utils.oo sqlite3db.oo mysql_connection.oo MySQL_HostGroups_Manager.oo mysql_data_stream.oo MySQL_Thread.oo MySQL_Session.oo MySQL_Protocol.oo mysql_backend.oo Query_Processor.oo ProxySQL_Admin.oo MySQL_Monitor.oo MySQL_Logger.oo thread.oo MySQL_PreparedStatement.oo ProxySQL_Cluster.oo SQLite3_Server.oo ClickHouse_Authentication.oo ClickHouse_Server.oo ProxySQL_Statistics.oo Chart_bundle_js.oo ProxySQL_HTTP_Server.oo font-awesome.min.css.oo main-bundle.min.css.oo set_parser.oo +_OBJ_CXX = ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo SpookyV2.oo MySQL_Authentication.oo gen_utils.oo sqlite3db.oo mysql_connection.oo MySQL_HostGroups_Manager.oo mysql_data_stream.oo MySQL_Thread.oo MySQL_Session.oo MySQL_Protocol.oo mysql_backend.oo Query_Processor.oo ProxySQL_Admin.oo MySQL_Monitor.oo MySQL_Logger.oo thread.oo MySQL_PreparedStatement.oo ProxySQL_Cluster.oo SQLite3_Server.oo ClickHouse_Authentication.oo ClickHouse_Server.oo ProxySQL_Statistics.oo Chart_bundle_js.oo ProxySQL_HTTP_Server.oo ProxySQL_RESTAPI_Server.oo font-awesome.min.css.oo main-bundle.min.css.oo set_parser.oo OBJ_CXX = $(patsubst %,$(ODIR)/%,$(_OBJ_CXX)) HEADERS = ../include/*.h ../include/*.hpp diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 66415e02f..561711f46 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -471,6 +471,8 @@ static char * admin_variables_names[]= { (char *)"checksum_mysql_query_rules", (char *)"checksum_mysql_servers", (char *)"checksum_mysql_users", + (char *)"restapi_enabled", + (char *)"restapi_port", (char *)"web_enabled", (char *)"web_port", #ifdef DEBUG @@ -4313,6 +4315,10 @@ ProxySQL_Admin::ProxySQL_Admin() { GloProxyStats->variables.stats_system_memory = 60; #endif + variables.restapi_enabled = false; + variables.restapi_enabled_old = false; + variables.restapi_port = 6090; + variables.restapi_port_old = variables.restapi_port; variables.web_enabled = false; variables.web_enabled_old = false; variables.web_port = 6080; @@ -4390,6 +4396,12 @@ bool ProxySQL_Admin::init() { AdminHTTPServer->init(); AdminHTTPServer->print_version(); + AdminRestApiServer = NULL; +/* + AdminRestApiServer = new ProxySQL_RESTAPI_Server(); + AdminRestApiServer->print_version(); +*/ + child_func[0]=child_mysql; child_func[1]=child_telnet; child_func[2]=child_telnet_also; @@ -4667,6 +4679,10 @@ void ProxySQL_Admin::admin_shutdown() { } } delete AdminHTTPServer; + if (AdminRestApiServer) { + delete AdminRestApiServer; + AdminRestApiServer = NULL; + } AdminHTTPServer = NULL; pthread_join(admin_thr, NULL); delete admindb; @@ -4829,6 +4845,26 @@ void ProxySQL_Admin::flush_admin_variables___database_to_runtime(SQLite3DB *db, //commit(); NOT IMPLEMENTED wrunlock(); { + if (variables.restapi_enabled != variables.restapi_enabled_old) { + if (variables.restapi_enabled) { + AdminRestApiServer = new ProxySQL_RESTAPI_Server(variables.restapi_port); + } else { + delete AdminRestApiServer; + AdminRestApiServer = NULL; + } + variables.restapi_enabled_old = variables.restapi_enabled; + } else { + if (variables.restapi_port != variables.restapi_port_old) { + if (AdminRestApiServer) { + delete AdminRestApiServer; + AdminRestApiServer = NULL; + } + if (variables.restapi_enabled) { + AdminRestApiServer = new ProxySQL_RESTAPI_Server(variables.restapi_port); + } + variables.restapi_port_old = variables.restapi_port; + } + } if (variables.web_enabled != variables.web_enabled_old) { if (variables.web_enabled) { char *key_pem; @@ -5587,6 +5623,13 @@ char * ProxySQL_Admin::get_variable(char *name) { if (!strcasecmp(name,"checksum_mysql_users")) { return strdup((checksum_variables.checksum_mysql_users ? "true" : "false")); } + if (!strcasecmp(name,"restapi_enabled")) { + return strdup((variables.restapi_enabled ? "true" : "false")); + } + if (!strcasecmp(name,"restapi_port")) { + sprintf(intbuf,"%d",variables.restapi_port); + return strdup(intbuf); + } if (!strcasecmp(name,"web_enabled")) { return strdup((variables.web_enabled ? "true" : "false")); } @@ -6049,6 +6092,26 @@ bool ProxySQL_Admin::set_variable(char *name, char *value) { // this is the pub } return false; } + if (!strcasecmp(name,"restapi_enabled")) { + if (strcasecmp(value,"true")==0 || strcasecmp(value,"1")==0) { + variables.restapi_enabled=true; + return true; + } + if (strcasecmp(value,"false")==0 || strcasecmp(value,"0")==0) { + variables.restapi_enabled=false; + return true; + } + return false; + } + if (!strcasecmp(name,"restapi_port")) { + int intv=atoi(value); + if (intv > 0 && intv < 65535) { + variables.restapi_port=intv; + return true; + } else { + return false; + } + } if (!strcasecmp(name,"web_enabled")) { if (strcasecmp(value,"true")==0 || strcasecmp(value,"1")==0) { variables.web_enabled=true; diff --git a/lib/ProxySQL_RESTAPI_Server.cpp b/lib/ProxySQL_RESTAPI_Server.cpp new file mode 100644 index 000000000..30b278074 --- /dev/null +++ b/lib/ProxySQL_RESTAPI_Server.cpp @@ -0,0 +1,67 @@ +#include "proxysql.h" +#include "cpp.h" +#include "httpserver.hpp" + +#include "ProxySQL_RESTAPI_Server.hpp" +using namespace httpserver; + + +#ifdef DEBUG +#define DEB "_DEBUG" +#else +#define DEB "" +#endif /* DEBUG */ +#define PROXYSQL_RESTAPI_SERVER_VERSION "2.0.1121" DEB + +class hello_world_resource : public http_resource { +public: + const std::shared_ptr render_GET(const http_request&) { + return std::shared_ptr(new string_response("GET: Hello, World!")); + } + + const std::shared_ptr render(const http_request&) { + return std::shared_ptr(new string_response("OTHER: Hello, World!")); + } +}; + +void * restapi_server_thread(void *arg) { + httpserver::webserver * ws = (httpserver::webserver *)arg; + ws->start(true); + return NULL; +} + +ProxySQL_RESTAPI_Server::ProxySQL_RESTAPI_Server(int p) { + + // for now, this is COMPLETELY DISABLED + // just adding a POC + return; + + //ws = NULL; + port = p; + ws = new webserver(create_webserver(p)); + //hello_world_resource hwr; + hr = new hello_world_resource(); + //ws->register_resource("/hello", &hwr); + ws->register_resource("/hello", hr); + if (pthread_create(&thread_id, NULL, restapi_server_thread, ws) !=0 ) { + perror("Thread creation"); + exit(EXIT_FAILURE); + } + //webserver ws2 = create_webserver(8080); + //webserws = create_webserver(8080); +} + +ProxySQL_RESTAPI_Server::~ProxySQL_RESTAPI_Server() { + if (ws) { + ws->stop(); + pthread_join(thread_id, NULL); + } +} + +void ProxySQL_RESTAPI_Server::init() { +} + +void ProxySQL_RESTAPI_Server::print_version() { + fprintf(stderr,"Standard ProxySQL REST API Server Handler rev. %s -- %s -- %s\n", PROXYSQL_RESTAPI_SERVER_VERSION, __FILE__, __TIMESTAMP__); +} + diff --git a/lib/configfile.cpp b/lib/configfile.cpp index 9931e7af4..eb570b6a0 100644 --- a/lib/configfile.cpp +++ b/lib/configfile.cpp @@ -200,5 +200,3 @@ bool ProxySQL_ConfigFile::configVariable(const char *group, const char *key, cha } return true; } - - diff --git a/src/Makefile b/src/Makefile index 2d8516d89..5b7d17a11 100644 --- a/src/Makefile +++ b/src/Makefile @@ -36,6 +36,10 @@ LZ4_DIR=$(DEPS_PATH)/lz4/lz4 CLICKHOUSE_CPP_DIR=$(DEPS_PATH)/clickhouse-cpp/clickhouse-cpp +LIBHTTPSERVER_DIR=$(DEPS_PATH)/libhttpserver/libhttpserver +LIBHTTPSERVER_IDIR=$(LIBHTTPSERVER_DIR)/src +LIBHTTPSERVER_LDIR=$(LIBHTTPSERVER_DIR)/build/src/.libs/ + MICROHTTPD_DIR=$(DEPS_PATH)/libmicrohttpd/libmicrohttpd/src MICROHTTPD_IDIR=$(MICROHTTPD_DIR)/include MICROHTTPD_LDIR=$(MICROHTTPD_DIR)/microhttpd/.libs @@ -55,8 +59,8 @@ EV_LDIR=$(EV_DIR)/.libs IDIR=../include LDIR=../lib -IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(DAEMONPATH_IDIR) -I$(SQLITE3_DIR) -I$(CLICKHOUSE_CPP_DIR) -I$(MICROHTTPD_IDIR) -I$(CURL_IDIR) -I$(EV_IDIR) -I$(SSL_IDIR) -LDIRS=-L$(LDIR) -L$(JEMALLOC_LDIR) $(LIBCONFIG_LDIR) -L$(RE2_PATH)/obj -L$(MARIADB_LDIR) -L$(DAEMONPATH_LDIR) -L$(PCRE_LDIR) -L$(MICROHTTPD_LDIR) -L$(CURL_LDIR) -L$(EV_LDIR) -L$(SSL_LDIR) +IDIRS=-I$(IDIR) -I$(JEMALLOC_IDIR) -I$(MARIADB_IDIR) $(LIBCONFIG_IDIR) -I$(DAEMONPATH_IDIR) -I$(SQLITE3_DIR) -I$(CLICKHOUSE_CPP_DIR) -I$(MICROHTTPD_IDIR) -I$(LIBHTTPSERVER_IDIR) -I$(CURL_IDIR) -I$(EV_IDIR) -I$(SSL_IDIR) +LDIRS=-L$(LDIR) -L$(JEMALLOC_LDIR) $(LIBCONFIG_LDIR) -L$(RE2_PATH)/obj -L$(MARIADB_LDIR) -L$(DAEMONPATH_LDIR) -L$(PCRE_LDIR) -L$(MICROHTTPD_LDIR) -L$(LIBHTTPSERVER_LDIR) -L$(CURL_LDIR) -L$(EV_LDIR) -L$(SSL_LDIR) UNAME_S := $(shell uname -s) @@ -77,9 +81,9 @@ MYCXXFLAGS=-std=c++11 $(IDIRS) $(OPTZ) $(DEBUG) $(PSQLCH) -DGITVERSION=\"$(GIT_V LDFLAGS+= NOJEMALLOC := $(shell echo $(NOJEMALLOC)) ifeq ($(NOJEMALLOC),1) -MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) +MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lhttpserver -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) else -MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -ljemalloc -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lmicrohttpd -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) +MYLIBS=-Wl,--export-dynamic -Wl,-Bstatic -lconfig -lproxysql -ldaemon -ljemalloc -lconfig++ -lre2 -lpcrecpp -lpcre -lmariadbclient -lhttpserver -lmicrohttpd -lcurl -lssl -lcrypto -lev -Wl,-Bdynamic -lgnutls -lpthread -lm -lz -lrt $(EXTRALINK) endif ifeq ($(UNAME_S),Darwin) @@ -98,7 +102,7 @@ endif LIBPROXYSQLAR=$(LDIR)/libproxysql.a ifeq ($(UNAME_S),Darwin) - LIBPROXYSQLAR=$(LDIR)/libproxysql.a ../deps/libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a ../deps/pcre/pcre/.libs/libpcre.a ../deps/pcre/pcre/.libs/libpcrecpp.a ../deps/libdaemon/libdaemon/libdaemon/.libs/libdaemon.a ../deps/libconfig/libconfig/lib/.libs/libconfig++.a ../deps/libconfig/libconfig/lib/.libs/libconfig.a ../deps/curl/curl/lib/.libs/libcurl.a ../deps/sqlite3/sqlite3/sqlite3.o + LIBPROXYSQLAR=$(LDIR)/libproxysql.a ../deps/libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a ../deps/libhttpserver/libhttpserver/build/src/.libs/libhttpserver.a ../deps/pcre/pcre/.libs/libpcre.a ../deps/pcre/pcre/.libs/libpcrecpp.a ../deps/libdaemon/libdaemon/libdaemon/.libs/libdaemon.a ../deps/libconfig/libconfig/lib/.libs/libconfig++.a ../deps/libconfig/libconfig/lib/.libs/libconfig.a ../deps/curl/curl/lib/.libs/libcurl.a ../deps/sqlite3/sqlite3/sqlite3.o endif LIBPROXYSQLAR+= $(SSL_LDIR)/libssl.a $(SSL_LDIR)/libcrypto.a diff --git a/src/proxysql.cfg b/src/proxysql.cfg index 31a93535c..e3fe5cd4d 100644 --- a/src/proxysql.cfg +++ b/src/proxysql.cfg @@ -4,7 +4,6 @@ # http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-File-Grammar # Grammar is also copied at the end of this file - restart_on_missing_heartbeats=10 datadir="/var/lib/proxysql" //execute_on_exit_failure="/path/to/script" From c967bc179b9889e992f525ff884ee01106442218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 25 Nov 2019 00:47:32 +1100 Subject: [PATCH 5/7] Several improvements to SQLite3 Server module: - ability to handle transactions - in OK packets and resultsets, SERVER_STATUS_IN_TRANS flag is set if a transaction is running - a persistent database file in datadir is used instead of in-memory database - database file uses WAL (Write-Ahead Logging) - WAL journal size is set to 64MB - monitor user can always login to SQLite3 Server - in case of database lock within a transaction, an error is immediately returned to client --- include/MySQL_Session.h | 2 +- include/SQLite3_Server.h | 2 +- include/proxysql_glovars.hpp | 1 + lib/MySQL_Protocol.cpp | 4 +-- lib/MySQL_Session.cpp | 41 ++++++++++++++++------- lib/SQLite3_Server.cpp | 63 +++++++++++++++++++++++++++++++----- lib/sqlite3db.cpp | 9 ++++++ src/main.cpp | 3 ++ 8 files changed, 102 insertions(+), 23 deletions(-) diff --git a/include/MySQL_Session.h b/include/MySQL_Session.h index 4075c2f95..773830f51 100644 --- a/include/MySQL_Session.h +++ b/include/MySQL_Session.h @@ -253,7 +253,7 @@ class MySQL_Session MySQL_Backend * create_backend(int, MySQL_Data_Stream *_myds=NULL); MySQL_Backend * find_or_create_backend(int, MySQL_Data_Stream *_myds=NULL); - void SQLite3_to_MySQL(SQLite3_result *, char *, int , MySQL_Protocol *); + void SQLite3_to_MySQL(SQLite3_result *, char *, int , MySQL_Protocol *, bool in_transaction=false); void MySQL_Result_to_MySQL_wire(MYSQL *mysql, MySQL_ResultSet *MyRS, MySQL_Data_Stream *_myds=NULL); void MySQL_Stmt_Result_to_MySQL_wire(MYSQL_STMT *stmt, MySQL_Connection *myconn); unsigned int NumActiveTransactions(); diff --git a/include/SQLite3_Server.h b/include/SQLite3_Server.h index 8742c244b..c4edb6062 100644 --- a/include/SQLite3_Server.h +++ b/include/SQLite3_Server.h @@ -83,7 +83,7 @@ class SQLite3_Server { bool init(); void wrlock(); void wrunlock(); - void send_MySQL_OK(MySQL_Protocol *myprot, char *msg, int rows=0); + void send_MySQL_OK(MySQL_Protocol *myprot, char *msg, int rows=0, uint16_t status=2); void send_MySQL_ERR(MySQL_Protocol *myprot, char *msg); }; #endif // CLASS_PROXYSQL_SQLITE3_SERVER_H diff --git a/include/proxysql_glovars.hpp b/include/proxysql_glovars.hpp index 7dfa7301e..b2ec57e35 100644 --- a/include/proxysql_glovars.hpp +++ b/include/proxysql_glovars.hpp @@ -52,6 +52,7 @@ class ProxySQL_GlobalVariables { char *datadir; char *admindb; char *statsdb_disk; + char *sqlite3serverdb; char *errorlog; char *pid; int restart_on_missing_heartbeats; diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index 3c787b470..3e681d2d1 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -1747,10 +1747,10 @@ __do_auth: ((*myds)->sess->session_type == PROXYSQL_SESSION_ADMIN) || ((*myds)->sess->session_type == PROXYSQL_SESSION_STATS) -#if defined(TEST_AURORA) || defined(TEST_GALERA) || defined(TEST_GROUPREP) +//#if defined(TEST_AURORA) || defined(TEST_GALERA) || defined(TEST_GROUPREP) || ((*myds)->sess->session_type == PROXYSQL_SESSION_SQLITE) -#endif // TEST_AURORA || TEST_GALERA +//#endif // TEST_AURORA || TEST_GALERA ) { if (strcmp((const char *)user,mysql_thread___monitor_username)==0) { proxy_scramble(reply, (*myds)->myconn->scramble_buff, mysql_thread___monitor_password); diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index a299fddbc..2fcc94a49 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -4883,10 +4883,10 @@ void MySQL_Session::handler___status_CONNECTING_CLIENT___STATE_SERVER_HANDSHAKE( client_authenticated=true; switch (session_type) { case PROXYSQL_SESSION_SQLITE: -#if defined(TEST_AURORA) || defined(TEST_GALERA) || defined(TEST_GROUPREP) +//#if defined(TEST_AURORA) || defined(TEST_GALERA) || defined(TEST_GROUPREP) free_users=1; break; -#endif // TEST_AURORA || TEST_GALERA || TEST_GROUPREP +//#endif // TEST_AURORA || TEST_GALERA || TEST_GROUPREP case PROXYSQL_SESSION_MYSQL: proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION,8,"Session=%p , DS=%p , session_type=PROXYSQL_SESSION_MYSQL\n", this, client_myds); if (ldap_ctx==NULL) { @@ -6553,7 +6553,7 @@ void MySQL_Session::MySQL_Result_to_MySQL_wire(MYSQL *mysql, MySQL_ResultSet *My } } -void MySQL_Session::SQLite3_to_MySQL(SQLite3_result *result, char *error, int affected_rows, MySQL_Protocol *myprot) { +void MySQL_Session::SQLite3_to_MySQL(SQLite3_result *result, char *error, int affected_rows, MySQL_Protocol *myprot, bool in_transaction) { assert(myprot); MySQL_Data_Stream *myds=myprot->get_myds(); myds->DSS=STATE_QUERY_SENT_DS; @@ -6565,10 +6565,17 @@ void MySQL_Session::SQLite3_to_MySQL(SQLite3_result *result, char *error, int af sid++; } myds->DSS=STATE_COLUMN_DEFINITION; - - unsigned int nTrx=NumActiveTransactions(); - uint16_t setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); - if (autocommit) setStatus |= SERVER_STATUS_AUTOCOMMIT; + unsigned int nTrx = 0; + uint16_t setStatus = 0; + if (in_transaction == false) { + nTrx=NumActiveTransactions(); + setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); + if (autocommit) setStatus |= SERVER_STATUS_AUTOCOMMIT; + } else { + // this is for SQLite3 Server + setStatus = SERVER_STATUS_AUTOCOMMIT; + setStatus |= SERVER_STATUS_IN_TRANS; + } myprot->generate_pkt_EOF(true,NULL,NULL,sid,0, setStatus ); sid++; char **p=(char **)malloc(sizeof(char*)*result->columns); unsigned long *l=(unsigned long *)malloc(sizeof(unsigned long *)*result->columns); @@ -6588,12 +6595,24 @@ void MySQL_Session::SQLite3_to_MySQL(SQLite3_result *result, char *error, int af } else { // no result set if (error) { // there was an error - myprot->generate_pkt_ERR(true,NULL,NULL,sid,1045,(char *)"28000",error); + if (strcmp(error,(char *)"database is locked")==0) { + myprot->generate_pkt_ERR(true,NULL,NULL,sid,1205,(char *)"HY000",error); + } else { + myprot->generate_pkt_ERR(true,NULL,NULL,sid,1045,(char *)"28000",error); + } } else { // no error, DML succeeded - unsigned int nTrx=NumActiveTransactions(); - uint16_t setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); - if (autocommit) setStatus |= SERVER_STATUS_AUTOCOMMIT; + unsigned int nTrx = 0; + uint16_t setStatus = 0; + if (in_transaction == false) { + nTrx=NumActiveTransactions(); + setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); + if (autocommit) setStatus |= SERVER_STATUS_AUTOCOMMIT; + } else { + // this is for SQLite3 Server + setStatus = SERVER_STATUS_AUTOCOMMIT; + setStatus |= SERVER_STATUS_IN_TRANS; + } myprot->generate_pkt_OK(true,NULL,NULL,sid,affected_rows,0,setStatus,0,NULL); } myds->DSS=STATE_SLEEP; diff --git a/lib/SQLite3_Server.cpp b/lib/SQLite3_Server.cpp index ea2eb536d..69a686c2c 100644 --- a/lib/SQLite3_Server.cpp +++ b/lib/SQLite3_Server.cpp @@ -294,6 +294,7 @@ void SQLite3_Server_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *p // fix bug #1047 if ( +/* (!strncasecmp("BEGIN", query_no_space, strlen("BEGIN"))) || (!strncasecmp("START TRANSACTION", query_no_space, strlen("START TRANSACTION"))) @@ -302,6 +303,7 @@ void SQLite3_Server_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *p || (!strncasecmp("ROLLBACK", query_no_space, strlen("ROLLBACK"))) || +*/ (!strncasecmp("SET character_set_results", query_no_space, strlen("SET character_set_results"))) || (!strncasecmp("SET SQL_AUTO_IS_NULL", query_no_space, strlen("SET SQL_AUTO_IS_NULL"))) @@ -309,12 +311,46 @@ void SQLite3_Server_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *p (!strncasecmp("SET NAMES", query_no_space, strlen("SET NAMES"))) || (!strncasecmp("SET AUTOCOMMIT", query_no_space, strlen("SET AUTOCOMMIT"))) + || + (!strncasecmp("/*!40100 SET @@SQL_MODE='' */", query_no_space, strlen("/*!40100 SET @@SQL_MODE='' */"))) + || + (!strncasecmp("/*!40103 SET TIME_ZONE=", query_no_space, strlen("/*!40103 SET TIME_ZONE="))) + || + (!strncasecmp("/*!80000 SET SESSION", query_no_space, strlen("/*!80000 SET SESSION"))) + || + (!strncasecmp("SET SESSION", query_no_space, strlen("SET SESSION"))) + || + (!strncasecmp("SET wait_timeout", query_no_space, strlen("SET wait_timeout"))) ) { - GloSQLite3Server->send_MySQL_OK(&sess->client_myds->myprot, NULL); + SQLite3_Session *sqlite_sess = (SQLite3_Session *)sess->thread->gen_args; + sqlite3 *db = sqlite_sess->sessdb->get_db(); + uint16_t status=2; // autocommit + if (sqlite3_get_autocommit(db)==0) { + status = 3; // autocommit + transaction + } + GloSQLite3Server->send_MySQL_OK(&sess->client_myds->myprot, NULL, 0, status); run_query=false; goto __run_query; } + if (query_no_space_length==17) { + if (!strncasecmp((char *)"START TRANSACTION", query_no_space, query_no_space_length)) { + l_free(query_length,query); + query = l_strdup((char *)"BEGIN IMMEDIATE"); + query_length=strlen(query)+1; + goto __run_query; + } + } + + if (query_no_space_length==5) { + if (!strncasecmp((char *)"BEGIN", query_no_space, query_no_space_length)) { + l_free(query_length,query); + query = l_strdup((char *)"BEGIN IMMEDIATE"); + query_length=strlen(query)+1; + goto __run_query; + } + } + if (query_no_space_length==SELECT_VERSION_COMMENT_LEN) { if (!strncasecmp(SELECT_VERSION_COMMENT, query_no_space, query_no_space_length)) { l_free(query_length,query); @@ -581,7 +617,12 @@ __run_query: } } #endif // TEST_AURORA || TEST_GALERA || TEST_GROUPREP - sess->SQLite3_to_MySQL(resultset, error, affected_rows, &sess->client_myds->myprot); + sqlite3 *db = sqlite_sess->sessdb->get_db(); + bool in_trans = false; + if (sqlite3_get_autocommit(db)==0) { + in_trans = true; + } + sess->SQLite3_to_MySQL(resultset, error, affected_rows, &sess->client_myds->myprot, in_trans); delete resultset; } l_free(pkt->size-sizeof(mysql_hdr),query_no_space); // it is always freed here @@ -590,8 +631,11 @@ __run_query: SQLite3_Session::SQLite3_Session() { - sessdb = new SQLite3DB(); - sessdb->open((char *)"file:mem_sqlitedb?mode=memory&cache=shared", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX); + sessdb=new SQLite3DB(); + sessdb->open(GloVars.sqlite3serverdb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX); + sessdb->execute((char *)"PRAGMA journal_mode=WAL"); + sessdb->execute((char *)"PRAGMA journal_size_limit=67108864"); + sessdb->execute((char *)"PRAGMA synchronous=0"); } SQLite3_Session::~SQLite3_Session() { @@ -872,8 +916,11 @@ SQLite3_Server::SQLite3_Server() { //Initialize locker pthread_rwlock_init(&rwlock,NULL); - sessdb = new SQLite3DB(); - sessdb->open((char *)"file:mem_sqlitedb?mode=memory&cache=shared", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX); + sessdb=new SQLite3DB(); + sessdb->open(GloVars.sqlite3serverdb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX); + sessdb->execute((char *)"PRAGMA journal_mode=WAL"); + sessdb->execute((char *)"PRAGMA journal_size_limit=67108864"); + sessdb->execute((char *)"PRAGMA synchronous=0"); variables.read_only=false; @@ -1210,11 +1257,11 @@ bool SQLite3_Server::set_variable(char *name, char *value) { // this is the pub return false; } -void SQLite3_Server::send_MySQL_OK(MySQL_Protocol *myprot, char *msg, int rows) { +void SQLite3_Server::send_MySQL_OK(MySQL_Protocol *myprot, char *msg, int rows, uint16_t status) { assert(myprot); MySQL_Data_Stream *myds=myprot->get_myds(); myds->DSS=STATE_QUERY_SENT_DS; - myprot->generate_pkt_OK(true,NULL,NULL,1,rows,0,2,0,msg); + myprot->generate_pkt_OK(true,NULL,NULL,1,rows,0,status,0,msg); myds->DSS=STATE_SLEEP; } diff --git a/lib/sqlite3db.cpp b/lib/sqlite3db.cpp index 546c58a1a..07fee06b9 100644 --- a/lib/sqlite3db.cpp +++ b/lib/sqlite3db.cpp @@ -96,6 +96,10 @@ bool SQLite3DB::execute_statement(const char *str, char **error, int *cols, int do { rc = sqlite3_prepare_v2(db, str, -1, &statement, 0); if (rc==SQLITE_LOCKED || rc==SQLITE_BUSY) { // the execution of the prepared statement failed because locked + if (sqlite3_get_autocommit(db)==0) { + *error=strdup(sqlite3_errmsg(db)); + goto __exit_execute_statement; + } usleep(USLEEP_SQLITE_LOCKED); } } while (rc==SQLITE_LOCKED || rc==SQLITE_BUSY); @@ -111,6 +115,10 @@ bool SQLite3DB::execute_statement(const char *str, char **error, int *cols, int do { rc=sqlite3_step(statement); if (rc==SQLITE_LOCKED || rc==SQLITE_BUSY) { // the execution of the prepared statement failed because locked + if (sqlite3_get_autocommit(db)==0) { + *error=strdup(sqlite3_errmsg(db)); + goto __exit_execute_statement; + } usleep(USLEEP_SQLITE_LOCKED); } } while (rc==SQLITE_LOCKED || rc==SQLITE_BUSY); @@ -127,6 +135,7 @@ bool SQLite3DB::execute_statement(const char *str, char **error, int *cols, int ret=true; } __exit_execute_statement: + sqlite3_reset(statement); sqlite3_finalize(statement); return ret; } diff --git a/src/main.cpp b/src/main.cpp index 8756fa918..ac40ef59b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -869,6 +869,9 @@ void ProxySQL_Main_process_global_variables(int argc, const char **argv) { GloVars.admindb=(char *)malloc(strlen(GloVars.datadir)+strlen((char *)"proxysql.db")+2); sprintf(GloVars.admindb,"%s/%s",GloVars.datadir, (char *)"proxysql.db"); + GloVars.sqlite3serverdb=(char *)malloc(strlen(GloVars.datadir)+strlen((char *)"sqlite3server.db")+2); + sprintf(GloVars.sqlite3serverdb,"%s/%s",GloVars.datadir, (char *)"sqlite3server.db"); + GloVars.statsdb_disk=(char *)malloc(strlen(GloVars.datadir)+strlen((char *)"proxysql_stats.db")+2); sprintf(GloVars.statsdb_disk,"%s/%s",GloVars.datadir, (char *)"proxysql_stats.db"); From 9022e8a01b5bdb32a5909c5c6973a27bc332e7ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 25 Nov 2019 00:50:29 +1100 Subject: [PATCH 6/7] Notes on how to run sysbench on SQLite3 Server --- notes/run_sysbench_on_sqlite3.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 notes/run_sysbench_on_sqlite3.md diff --git a/notes/run_sysbench_on_sqlite3.md b/notes/run_sysbench_on_sqlite3.md new file mode 100644 index 000000000..eae80ddaf --- /dev/null +++ b/notes/run_sysbench_on_sqlite3.md @@ -0,0 +1,32 @@ + + +On Admin: + +```sql +insert into mysql_servers (hostgroup_id, hostname, port) values (100,'127.0.0.1',6030); +insert into mysql_users (username,password,default_hostgroup) values ('sqlite','sqlite',100); + +save mysql users to disk; +load mysql users to runtime; +save mysql servers to disk; +load mysql servers to runtime; + + + +INSERT INTO mysql_query_rules (active,username,match_digest,match_pattern,replace_pattern,apply) values (1,'sqlite','^CREATE TABLE sbtest','id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT','id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT',0); +INSERT INTO mysql_query_rules (active,username,match_digest,match_pattern,replace_pattern,apply) values (1,'sqlite','^CREATE TABLE sbtest',"pad CHAR\(60\) DEFAULT '' NOT NULL,","pad CHAR(60) DEFAULT '' NOT NULL",0); +INSERT INTO mysql_query_rules (active,username,match_digest,match_pattern,replace_pattern,apply) values (1,'sqlite','^CREATE TABLE sbtest','PRIMARY KEY \(id\)','',0); + +save mysql query rules to disk; +load mysql query rules to runtime; +``` + +Sysbbench: + +```shell +sysbench --db-driver=mysql --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-tables-count=10 --oltp-table-size=10000 --mysql-host=127.0.0.1 --mysql-db=test --mysql-engine-trx=yes --mysql-port=6033 --mysql-user=sqlite --mysql-password=sqlite --num-threads=10 prepare +``` + +```shell +sysbench --report-interval=3 --db-driver=mysql /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --time=15 --oltp-tables-count=10 --oltp-table-size=10000 --mysql-host=127.0.0.1 --mysql-db=test --mysql-engine-trx=yes --oltp-skip-trx=off --mysql-port=6033 --mysql-user=sqlite --mysql-password=sqlite --threads=10 run +``` From 79ea1268026bfa071a65130e5c516daf746d321f Mon Sep 17 00:00:00 2001 From: Valentin Rakush Date: Tue, 26 Nov 2019 14:41:05 +0000 Subject: [PATCH 7/7] Fix curl configure params --- deps/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/Makefile b/deps/Makefile index a9c9d5af8..173b47fc7 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -46,7 +46,7 @@ curl/curl/lib/.libs/libcurl.a: libssl/openssl/libssl.a cd curl && rm -rf curl-7.57.0 || true cd curl && tar -zxf curl-7.57.0.tar.gz #cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --with-ssl=$(shell pwd)/../../libssl/openssl/ && CC=${CC} CXX=${CXX} ${MAKE} - cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --without-librtmp --without-libpsl --with-ssl=$(shell pwd)/libssl/openssl/ && CC=${CC} CXX=${CXX} ${MAKE} + cd curl/curl && ./configure --disable-debug --disable-ftp --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual --disable-ipv6 --disable-sspi --disable-crypto-auth --disable-ntlm-wb --disable-tls-srp --without-nghttp2 --without-libidn2 --without-libssh2 --without-brotli --without-librtmp --without-libpsl --with-ssl=$(shell pwd)/libssl/openssl/ --enable-shared=no && CC=${CC} CXX=${CXX} ${MAKE} curl: curl/curl/lib/.libs/libcurl.a libmicrohttpd/libmicrohttpd/src/microhttpd/.libs/libmicrohttpd.a: