From: Christopher Powers Date: November 30 2010 1:11am Subject: bzr commit into mysql-5.1-bugteam branch (chris.powers:3516) Bug#35333 List-Archive: http://lists.mysql.com/commits/125430 X-Bug: 35333 Message-Id: <20101130011113.07E991DB031E@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1879167236829737807==" --===============1879167236829737807== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/cpowers/work/dev/mysql-5.1-bugteam/ based on revid:alexander.nozdrin@stripped 3516 Christopher Powers 2010-11-29 Bug#35333, "If Federated table can't connect to remote host, can't retrieve metadata" Improved error handling such that queries against Information_Schema.Tables won't fail if a Federated table is unable to connect to remote host. @ sql/sql_show.cc If Handler::Info() fails, save error text in TABLE COMMENTS column, clear error. added: mysql-test/suite/federated/federated_bug_35333.result mysql-test/suite/federated/federated_bug_35333.test modified: mysql-test/r/merge.result mysql-test/r/show_check.result mysql-test/r/view.result sql/sql_show.cc === modified file 'mysql-test/r/merge.result' --- a/mysql-test/r/merge.result 2010-04-26 13:44:10 +0000 +++ b/mysql-test/r/merge.result 2010-11-30 01:11:05 +0000 @@ -2024,6 +2024,8 @@ SELECT * FROM INFORMATION_SCHEMA.TABLES TABLE_SCHEMA = 'test' and TABLE_NAME='tm1'; TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT NULL test tm1 BASE TABLE NULL NULL NULL # # # # # # # # # # NULL # # Unable to open underlying table which is differently defined or of non-MyISAM ty +Warnings: +Warning 1168 Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE tm1; CREATE TABLE t1(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM; CREATE TABLE t2(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM; === modified file 'mysql-test/r/show_check.result' --- a/mysql-test/r/show_check.result 2010-02-09 10:30:50 +0000 +++ b/mysql-test/r/show_check.result 2010-11-30 01:11:05 +0000 @@ -660,6 +660,8 @@ flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' +Warnings: +Warning 1033 Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table if exists t1; === modified file 'mysql-test/r/view.result' --- a/mysql-test/r/view.result 2010-04-06 07:26:59 +0000 +++ b/mysql-test/r/view.result 2010-11-30 01:11:05 +0000 @@ -840,6 +840,8 @@ show table status; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 10 Fixed 0 0 0 # 1024 0 NULL # # NULL latin1_swedish_ci NULL v1 NULL NULL NULL NULL NULL NULL # NULL NULL NULL # # NULL NULL NULL NULL View 'test.v1' references invalid table(s) or column(s) or function(s) or define +Warnings: +Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them drop view v1; drop table t1; create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1; === added file 'mysql-test/suite/federated/federated_bug_35333.result' --- a/mysql-test/suite/federated/federated_bug_35333.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/federated/federated_bug_35333.result 2010-11-30 01:11:05 +0000 @@ -0,0 +1,67 @@ +# +# Bug 35333 "If a Federated table can't connect to the remote hose, can't retrieve metadata" +# +# Queries such as SHOW TABLE STATUS and SELECT * FROM INFORMATION_SCHEMA.TABLES fail +# when encountering a federated table that cannot connect to its remote table. +# +# The fix is to store the error text in the TABLE COMMENTS column of I_S.TABLES, clear +# the remote connection error and push a warning instead. This allows the SELECT operation +# to complete while still indicating a problem. This fix applies to any non-fatal system +# error that occurs during a query against I_S.TABLES.de +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE IF NOT EXISTS realdb; +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +# +# Create the base table to be referenced +# +CREATE TABLE realdb.t0 (a text, b text) ENGINE=MYISAM; +# +# Create a federated table with a bogus port number +# +CREATE TABLE federated.t0 (a text, b text) ENGINE=FEDERATED +CONNECTION='mysql://root@stripped:63333/realdb/t0'; +# +# Trigger a federated system error during a INFORMATION_SCHEMA.TABLES query +# +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'realdb' or TABLE_SCHEMA = 'federated'; +TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_ROWS DATA_LENGTH TABLE_COMMENT +federated t0 BASE TABLE FEDERATED NULL 0 Unable to connect to foreign data source: Can't connect to MySQL server on '127. +realdb t0 BASE TABLE MyISAM Dynamic 0 0 +Warnings: +Warning 1429 Unable to connect to foreign data source: Can't connect to MySQL server on '127.0.0.1' (socket errno) +SHOW WARNINGS; +Level Code Message +Warning 1429 Unable to connect to foreign data source: Can't connect to MySQL server on '127.0.0.1' (socket errno) +# +# Create a MyISAM table then corrupt the file +# +USE realdb; +CREATE TABLE t1 (c1 int) ENGINE=MYISAM; +# +# Corrupt the MyISAM table by deleting the base file +# +# +# Trigger a MyISAM system error during an INFORMATION_SCHEMA.TABLES query +# +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_ROWS DATA_LENGTH TABLE_COMMENT +realdb t1 BASE TABLE NULL NULL NULL NULL Can't find file: 't1' (errno: 2) +Warnings: +Warning 1017 Can't find file: 't1' (errno: 2) +SHOW WARNINGS; +Level Code Message +Warning 1017 Can't find file: 't1' (errno: 2) +# +# Cleanup +# +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +DROP DATABASE realdb; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; === added file 'mysql-test/suite/federated/federated_bug_35333.test' --- a/mysql-test/suite/federated/federated_bug_35333.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/federated/federated_bug_35333.test 2010-11-30 01:11:05 +0000 @@ -0,0 +1,74 @@ +--echo # +--echo # Bug 35333 "If a Federated table can't connect to the remote hose, can't retrieve metadata" +--echo # +--echo # Queries such as SHOW TABLE STATUS and SELECT * FROM INFORMATION_SCHEMA.TABLES fail +--echo # when encountering a federated table that cannot connect to its remote table. +--echo # +--echo # The fix is to store the error text in the TABLE COMMENTS column of I_S.TABLES, clear +--echo # the remote connection error and push a warning instead. This allows the SELECT operation +--echo # to complete while still indicating a problem. This fix applies to any non-fatal system +--echo # error that occurs during a query against I_S.TABLES.de + +--source federated.inc + +--disable_warnings +CREATE DATABASE IF NOT EXISTS realdb; +# Federated database exists +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +--enable_warnings + +--echo # +--echo # Create the base table to be referenced +--echo # +CREATE TABLE realdb.t0 (a text, b text) ENGINE=MYISAM; + +--echo # +--echo # Create a federated table with a bogus port number +--echo # +CREATE TABLE federated.t0 (a text, b text) ENGINE=FEDERATED + CONNECTION='mysql://root@stripped:63333/realdb/t0'; + +#--warning ER_CONNECT_TO_FOREIGN_DATA_SOURCE + +--echo # +--echo # Trigger a federated system error during a INFORMATION_SCHEMA.TABLES query +--echo # +# Remove O/S-specific socket error +--replace_regex /\(.*\)/(socket errno)/ +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT + FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'realdb' or TABLE_SCHEMA = 'federated'; + +# Remove O/S-specific socket error +--replace_regex /\(.*\)/(socket errno)/ +SHOW WARNINGS; + +--echo # +--echo # Create a MyISAM table then corrupt the file +--echo # +USE realdb; +CREATE TABLE t1 (c1 int) ENGINE=MYISAM; +--echo # +--echo # Corrupt the MyISAM table by deleting the base file +--echo # +let $MYSQLD_DATADIR= `SELECT @@datadir`; +--remove_file $MYSQLD_DATADIR/realdb/t1.MYD +--remove_file $MYSQLD_DATADIR/realdb/t1.MYI + +--echo # +--echo # Trigger a MyISAM system error during an INFORMATION_SCHEMA.TABLES query +--echo # +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT + FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; + +SHOW WARNINGS; +--echo # +--echo # Cleanup +--echo # +--disable_warnings +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +DROP DATABASE realdb; +--enable_warnings + +--source federated_cleanup.inc === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2010-11-02 13:20:02 +0000 +++ b/sql/sql_show.cc 2010-11-30 01:11:05 +0000 @@ -3636,28 +3636,28 @@ static int get_schema_tables_record(THD { const char *tmp_buff; MYSQL_TIME time; + int info_error= 0; CHARSET_INFO *cs= system_charset_info; DBUG_ENTER("get_schema_tables_record"); restore_record(table, s->default_values); table->field[1]->store(db_name->str, db_name->length, cs); table->field[2]->store(table_name->str, table_name->length, cs); + if (res) { - /* - there was errors during opening tables - */ - const char *error= thd->is_error() ? thd->main_da.message() : ""; + /* There was a table open error, so set the table type and return */ if (tables->view) table->field[3]->store(STRING_WITH_LEN("VIEW"), cs); else if (tables->schema_table) table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs); else table->field[3]->store(STRING_WITH_LEN("BASE TABLE"), cs); - table->field[20]->store(error, strlen(error), cs); - thd->clear_error(); + + goto err; } - else if (tables->view) + + if (tables->view) { table->field[3]->store(STRING_WITH_LEN("VIEW"), cs); table->field[20]->store(STRING_WITH_LEN("VIEW"), cs); @@ -3746,9 +3746,14 @@ static int get_schema_tables_record(THD if (share->comment.str) table->field[20]->store(share->comment.str, share->comment.length, cs); - if(file) + if (file) { - file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO); + /* If info() fails, then there's nothing else to do */ + if ((info_error= file->info(HA_STATUS_VARIABLE | + HA_STATUS_TIME | + HA_STATUS_AUTO)) != 0) + goto err; + enum row_type row_type = file->get_row_type(); switch (row_type) { case ROW_TYPE_NOT_USED: @@ -3826,6 +3831,26 @@ static int get_schema_tables_record(THD } } } + +err: + if (res || info_error) + { + /* + If an error was encountered, push a warning, set the TABLE COMMENT + column with the error text, and clear the error so that the operation + can continue. + */ + const char *error= thd->is_error() ? thd->main_da.message() : ""; + table->field[20]->store(error, strlen(error), cs); + + if (thd->is_error()) + { + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + thd->main_da.sql_errno(), thd->main_da.message()); + thd->clear_error(); + } + } + DBUG_RETURN(schema_table_store_record(thd, table)); } --===============1879167236829737807== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/mysql-5.1-bugteam/ # testament_sha1: 8800fcb8b8eddeff74303be7d81307d552bc39bf # timestamp: 2010-11-29 19:11:12 -0600 # base_revision_id: alexander.nozdrin@stripped\ # rksgxm2ol291wxfu # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWXbpi70ACI5/gFwwgAF89/// /+f/7v////5gEiL71EUVdDFSAKAAQEJUlIBSIKFUooSqiiVUCmGiKeiT9U9CNtU00PU8kaA/UmJ+ lMQaaAD1AAaNA0Ikh6T01H6oAAAAAAGQAAAAAAOBoNMhpo0MIGQ0MEaGmTRoBkGIAA0EiImggmpg GiekGmpp6J6aNKflTTNNMU8p6m1B6gAeUOBoNMhpo0MIGQ0MEaGmTRoBkGIAA0EkgjTQCNGmkxDR GmJpNTyYJT1NlPSaDyn6hkgxqb1J5VQZDqMgTaqz6XTESRFpCd4DgF1xUaIRC+SCuDbF8JFBoa2a YWobCDMVDHvvwU0qVXOhAxG4BhNUVtFgVg17z9fJfz6KGaNCleNGO9/PNhYk2MOpdw1563kh/dxi /kwKpVrSVmYkaJq/Mrx9A6IERQAUCPTN6hQKZK8kBSCKoDiYQOBAEoiuW+BM7PHJHCHk92UOqrwr MMAchPHcCqA/kwz5kCBbWDdNC6rJJc2Ocr4IjS9RDdLRq8F0vu0qUtpnTrzU94gV9DkhMhLDHn4H eklWZR4L7wcmP//6bQvPJTDgZqL8tnhF9DpDEGDY2A2N5rPpQa+TVbTRxrcji4XHtqKEjr9l292l SXRkNZMxczgyTZMXRjElHjxeDrDzk8HfJDUoEQfJjWwC4Xc+IiR7CXL+qaYL7BdEBoG8payJ2DHW rB512FAMesgZFyHK3UI/QgKQMMBUOMQeEy/vBwUh9oc9a2FZcf2HDx4wYQXtHJ5RItkSyPOTIhAK G8QiVvprewMHYqmmmy43lZq2i9mi+VAy51BAqE49oSmjUQKqIWG8uE/MgJgcjXKaeKStHFq/XC0g HkfXVVNh5t+DzIp7y7PcWYHqceQrMSVgXmKKam5HqNB7ZUWCmaEDhZvCBvHIYGmZMM5gWWGKXDl6 k7PP0mhZFSuRw6zMeE1DIDBjipUPTitf5g1AXgoDzfby/G/WYDbi4mTYnFdRkRRYXysChcNEobJG ONqK216VdlgQi62zbEID5SbVyW25Qy3cOBJCOcbDM5Wgo5V5iUU4wCkfSSQQXpAhpgm2Npjbbbbb bG022xjbbeyFS5FhyHeylxEl4zHiEoSjj0jiI/0RRBWsfFkSQfePQ/LXo0ZdmXbEOuY4BM7yfzd7 sbRWbadAx+1+kfz7/UHOHCw9wfgHWEhti3yxxacNXFulJ6UCPHp4DditF1pbQYA7f2bRvEq6schk f1wy83zSAceQA2EvqKkez1ekuvKwgvhIecSp68ChPHkeKsVcTM7jMPhELxaxlVkdgjAPZ5IzV6EQ M6dmPt5LYmZcSAzU7dtkEl33YnfGDBltH4LxB5fg/WdIvYMZ7MBcjKR/2ewgHfqDDw/AcN49ffAM BA9l8mAfLQn6k1wFRl4cy4gRzBNhj7uXRNFVMBMIBgDSQwaOigQSVipQcI0D2GcvLwn8eL6QCFpM dMK7Bw1ECMWcrShKFCdQr8QJG9ROy/AsG+hqMLPXEst8hgKGGeOUIlFA2qhbD7HDmW3CtfzZCWbG hOGqChAAf0GPhnslSAMAOqcsIOBDTtqn42UKkNnqX8x5g0bOk4P4DAipaqRlHC8x1cgHEBpDZ6td BXWXjgkpey6zKT3FJwKeWl/m85V6elRLYTbkahXhkLqH9HTBBpLfsWYtYz3MzltbEMGQk5cDOP6z cYopmEFrJjg4wID6DqJ0K44FSrL3D3lSJShfHsoKwgbZkOS4OQZFxkYmJ+1aH0sIr3HoXpyeZrYx Ra5BeCNcXJluMiMdlD0XDG1AxXMhMvQVKCwNRfaTdPOUOz6CuzGoqNrGZJIxOjqqNZ0FAaahxaZF ko7YkchlUZRNhYUeY5ayhVnAdSM+3QJq7B44gA4pZxcQcbSRgRdRxrlL7FmUs8vLnve24kUUVlY6 i613a7alJxcaygih8l03VgxisTzgFxeNXMAsuiz2LDP95qkaMbzyLFXigqMoxKyo2lfB1T2LAvGL 9JPfA0Hvmnq2Q0XETFXkykjqIrUVVb7nOtsda7F1FNMRuNhVgoy4uLCgqMCrWPCCoThy13OmMN0F vZA2ai4bJq5s1RSasCgww1YbGQd5uKjbKUzIyNVwwx2HH1G6wazY5VNKJNGKgRIsUjWeFMTWstUI LY1UIRrHbTbiQMMI30Qt50QAyqNRcaDVsOOBjxeSN6YzAKrMpYWYmuEHUMZMGAxsooIEVM4KPnHk J5V7arbZlpA2Dxo0jD7jmAcqh9OOlLSLnuahKdZdRPbXiPXLlxLVaU2wJpxaFA8bLLY1xPceqIB2 dyJaB1JlMs12uVwyq9b4Q1jA/HcZbdHOkNQ8ck7MCkUiGBbJBa95dfmOz2cc5Xcdi4pXkvpSfrgQ aSgpkuLG/+KTF/fPvMx9HCEMYfaLMpBiGew9YtvtF4u80GjIfb4My8CAzT1cII/NAHzaELgBagP/ foL7kiwv5CDdEcKkRgjtaXvXJtDbTQ0/cfkmIEYbx5MtQInITXrxliLAqLBXwQMCT6uALlQgIlYq wl8ld/EhbpqP+MkO4DEaRjUC2gkkGMGUdgsEgxVEaqoHqlfyUZIM8gRYYiKhViNiiGqMUkwJgQbg VPzIpXCP/NbNJJ4KlhGAv6Hz2AjgGoUtMnAtKv1BPEVg8Fkv3gSD6AqA7+THzfrzi/cj+4uYhYIN BOEmYEH0RCFRz/iJkh4I2AEBrYbBFRH6GwPotOpMXlaxsbQGQLiTEZwTBiqFVcSIvRrrURruJF3R F40xEJLtQEzl2CgClUJcRToSYqINas2CwRDYwAxZxbBLNqFqMgwGcpAZGlQMTBikIPqKQcawvBPB FoiQ1R8N4OBgjzWQQHqQKSdI2pZLIYTwVKBbxJg1AwmGCwYCBhRbyGCNIsbyRGU5K4FREirjekXI y2zMNX5gw1RcKbw2MJBXgrgXGLATDq3T5nb5C1SFv6Fq7LuAshQpEtAYQ4Q8PXPGInVYC/RO5ezz nZ7V1Iqz9QmhNMr++RWQwIoFtYkUT8wNQu3Jer3GAHvGLH3n9GVPaYmz9plynqPiUPgflISzQwDG ZxfuP0bRCNZ+MU5s6z8jeqxSQbyCGWpSKgR6Vr0mQxSoeZN605MmX/RbAX8F8uVBNRDYOINyYzSX el2IGRSOPyRskJuQGZUK8EE42j045LT7qi0OMnnMYQ5/zIHPImUdUDtwMSBQSqPw6rRbrwz6TdeT CJM2ESMhJdww3UuwkSOV0SZ7hftzJF9B70IcQ4Jlf4H4mpjQ3ozIDDt5mMfuvAtIHpcfYHUNvN5i cywZcDafwi5xNnOt0XrqSS+R1pMLl9IFgyqvE9CKph/ZjYxqAWMAHyeljTySUajqJUpjTGmIzs6G xcgnFwyDpPMc+fSUdRI7hxWWATK++sCEIBFCi5LauvUrE3zoBHgGRvNxzHlIXKqwEDvzuHHkldjb xnArip6VcXuRY8C2ges65OMgaOsNMBREkUa5O4OB1FBUIqObtZASXEXEjOcpIDZDkZfOA5KjXO0k aqqBdHIX3V8a3TUdBJE1jVwb9HrIgHY+RQFa0F6hasChka3MZkkqkFQ4KImyQIdABwtpyLbh2RwS S0JqW4SrtGvc94KDJEmSLv92GBgSxVmhf1Q5lkdGsWmhMenDH+xg5YmlmpuvwdM51nXnmLgOtA+8 YcG9mh0EFSmAwTAcmORJ4bIqxZN03WPBBaqiHENq0XMaoW59RzsOpNAQEQ3B+fWIM+KxFwcrDa33 H2fgYhiA1AijMUzQioBEKl9o5A4Vm8itRWgT+SqpR95eMOYcdyDUdh7ztHFTLuKGORyKKD0/VidL HaeRQeFSVVNIvzOY5C93vZk6pS+0zA2bnHlSEz4C9D/feJwOZBYMHksz5G5e71OcvqApRU484B6L 1StQOcYgbOdeEiReI5F5Bh409EKBE4hqId5oFgz9+HYAQU+V/9/j7cCCDVrPh61iMvYEN7h41NEl wRUSX5DFwSobOsfirHkNoqpoFySUg4TA3nNZ0ID7sORQa+1IGthFxvovOTzE+J5qN/X1egSrHVUK JBy/lkj7evQZrgNpSjWu43K0FiMEZyRmCLKVzFVrQVIOGOjbg+17wGIZDCx5s74jzfzcgyxU0V0u 8ab/VFLrAZu0AneVMMsEBqIHQg8YN6DUvEkc9wWizceSzHV4RTjce0AidKMGqPb57e6IqjV50Hgu dyvXabE46y9QCxek7N9K2tXLnvA4Di4Cp33nBGgWZDExjAG2MbEIcK0ZIeHiQE4xucdlpMmnK4c4 odgtysJOUDOkoONJOIiaI79qNau59JjO0YTJOpSQ8eLqRfMAjHbv61UjAsKhV/s7iRUa9vQO1lWb slasWRx1Aqa0omPv9hvj7TUikVN9QzTM0xEe6D8CCSJoLYxUmgw0p9NSBWTafwVXY3Bc3GvOXlVh uQsJVE00DUQQaNsSnMyzSeeBINWpCNh3/CQlWRAxVY1XQp71c4piqmRglgnuB7APAyUIqcRJ0rLy JJc3eAWtja3Sp3Gw1RrlOWJqwKhdxb7yi2gOBiec8uK7wAzVKZehsUwjtqAZlch7zIGNMG20g/FC JBbi1tF22M9Cit4MWHE0Ac7eUrREKaAtcB+c0BsKFyTUySWPcwmQPS0IFwuJ4u5gFewkWo4G0AtH 80BeuZjzKsiRrfFVMDQX17umvkAfAtLFAzSPSNGXCtvOluYN744gYNBDUBEJNgdScpaLg5h6je4S UopINaHjhr/I8iwXtBhcxWS3qCvJpwHSRV6TMA493EREONzkqUpVnyH1su1fEKfBZERgyEGehiqq OdyONWSEYAdMyrcYvqCTyWPKQCCAeI0BA3fcEoJW0eMsrndmVuRSTBPHiWJLxlSXBxLn5iaIDzGZ GZAPJMcxaYqV6Lq8TiUo8lEHrRg2JHseWoHiuFvMz4m4DLDV4t9tt4xFF4aM71KKtEXizawdgMA4 gKZGaBx7Wrg5XkhHpVMzzlAs8+Mt0ExyrDVBMNa2uPWXqqwLMmKgp1rF4LBtol4nuX/BqDYMA64s RBQLLiQpKYJiArRqhB7mNIKCiwSAYeU7CJyiCBwuitWXXYIuATdxWpwFf4ucx9GBLH0UOpM8DQiZ GLluGZncSsSmMhSQoKsknvYrO6yAD40nScDnPnWqvOvrXo/iMK79yrSkb5OEVFqgh6ui2pRKFHJT CKLhctp0k+wHes+RzvmYl+55e4cmHq9eC+tXeHjsJIL6thKyQ01W86GwZ99BBCLF0L0DvKlyqcoW OJTW4in8z1J5ouwuXWQQLaKW4dYNBl7QD7kig8ABnlR+NB1kluA2i+Jee07yYB1b1ol27CzJROMf hhH+LuSKcKEg7dMXeg== --===============1879167236829737807==--