From: Date: August 21 2003 7:45am Subject: new mysqldump features (patch) List-Archive: http://lists.mysql.com/internals/9678 Message-Id: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="168303424-1843280920-1061444716=:3528" --168303424-1843280920-1061444716=:3528 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi, In the attached patch I have implemented two new options in mysqldump. The -R (--rename-tables) option loads all tables using temporary names and then renames them while holding a lock. This can be useful when it is necessary to minimize lock time. The output looks like this: sh% mysqldump --rename-tables mydb zip city CREATE TABLE _new_zip ... CREATE TABLE _new_city ... INSERT ... LOCK TABLES zip city WRITE; DROP TABLE zip; ALTER TABLE _new_zip RENAME zip; DROP TABLE city; ALTER TABLE _new_city RENAME city; UNLOCK TABLES; The -U (--with-use-db) option assures that "USE db_name;" is always in the output; this is otherwise not true unless --databases or --all-databases is used. - JD --168303424-1843280920-1061444716=:3528 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mysqldump.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="mysqldump.patch" KioqIG15c3FsZHVtcC5jCUZyaSBKdWwgMTggMDc6NTc6NDYgMjAwMw0KLS0t IG5ldy1teXNxbGR1bXAuYwlXZWQgQXVnIDIwIDIyOjAwOjE1IDIwMDMNCioq KioqKioqKioqKioqKg0KKioqIDc3LDg0ICoqKioNCiAgICAgICAgICAgICAg ICAgIG9wdF9kZWxheWVkPTAsY3JlYXRlX29wdGlvbnM9MCxvcHRfcXVvdGVk PTAsb3B0X2RhdGFiYXNlcz0wLA0KICAJICAgICAgICBvcHRfYWxsZGJzPTAs b3B0X2NyZWF0ZV9kYj0wLG9wdF9maXJzdF9zbGF2ZT0wLA0KICAgICAgICAg ICAgICAgICAgb3B0X2F1dG9jb21taXQ9MCxvcHRfbWFzdGVyX2RhdGEsb3B0 X2Rpc2FibGVfa2V5cz0wLG9wdF94bWw9MCwNCiEgCSAgICAgICAgb3B0X2Rl bGV0ZV9tYXN0ZXJfbG9ncz0wLCB0dHlfcGFzc3dvcmQ9MCwNCiEgCQlvcHRf c2luZ2xlX3RyYW5zYWN0aW9uPTA7DQogIHN0YXRpYyBNWVNRTCAgbXlzcWxf Y29ubmVjdGlvbiwqc29jaz0wOw0KICBzdGF0aWMgY2hhciAgaW5zZXJ0X3Bh dFsxMiAqIDEwMjRdLCpvcHRfcGFzc3dvcmQ9MCwqY3VycmVudF91c2VyPTAs DQogICAgICAgICAgICAgICAqY3VycmVudF9ob3N0PTAsKnBhdGg9MCwqZmll bGRzX3Rlcm1pbmF0ZWQ9MCwNCi0tLSA3Nyw4NCAtLS0tDQogICAgICAgICAg ICAgICAgICBvcHRfZGVsYXllZD0wLGNyZWF0ZV9vcHRpb25zPTAsb3B0X3F1 b3RlZD0wLG9wdF9kYXRhYmFzZXM9MCwNCiAgCSAgICAgICAgb3B0X2FsbGRi cz0wLG9wdF9jcmVhdGVfZGI9MCxvcHRfZmlyc3Rfc2xhdmU9MCwNCiAgICAg ICAgICAgICAgICAgIG9wdF9hdXRvY29tbWl0PTAsb3B0X21hc3Rlcl9kYXRh LG9wdF9kaXNhYmxlX2tleXM9MCxvcHRfeG1sPTAsDQohIAkgICAgICAgIG9w dF9kZWxldGVfbWFzdGVyX2xvZ3M9MCwgdHR5X3Bhc3N3b3JkPTAsb3B0X3Jl bmFtZV90YWJsZXM9MCwNCiEgCQlvcHRfc2luZ2xlX3RyYW5zYWN0aW9uPTAs b3B0X3dpdGhfdXNlX2RiPTA7DQogIHN0YXRpYyBNWVNRTCAgbXlzcWxfY29u bmVjdGlvbiwqc29jaz0wOw0KICBzdGF0aWMgY2hhciAgaW5zZXJ0X3BhdFsx MiAqIDEwMjRdLCpvcHRfcGFzc3dvcmQ9MCwqY3VycmVudF91c2VyPTAsDQog ICAgICAgICAgICAgICAqY3VycmVudF9ob3N0PTAsKnBhdGg9MCwqZmllbGRz X3Rlcm1pbmF0ZWQ9MCwNCioqKioqKioqKioqKioqKg0KKioqIDIxMiwyMTcg KioqKg0KLS0tIDIxMiwyMTkgLS0tLQ0KICAgIHsicmVzdWx0LWZpbGUiLCAn cicsDQogICAgICJEaXJlY3Qgb3V0cHV0IHRvIGEgZ2l2ZW4gZmlsZS4gVGhp cyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gTVNET1MsIGJlY2F1c2UgaXQg cHJldmVudHMgbmV3IGxpbmUgJ1xcbicgZnJvbSBiZWluZyBjb252ZXJ0ZWQg dG8gJ1xcclxcbicgKGNhcnJpYWdlIHJldHVybiArIGxpbmUgZmVlZCkuIiwN CiAgICAgMCwgMCwgMCwgR0VUX1NUUiwgUkVRVUlSRURfQVJHLCAwLCAwLCAw LCAwLCAwLCAwfSwNCisgICB7InJlbmFtZS10YWJsZXMiLCAnUicsIkNyZWF0 ZSB0YWJsZXMgdXNpbmcgdGVtcG9yYXJ5IG5hbWVzIGFuZCB0aGVuIHJlbmFt ZSB0aGVtIHdoaWxlIGhvbGRpbmcgYSBsb2NrIiwNCisgICAgKGdwdHIqKSAm b3B0X3JlbmFtZV90YWJsZXMsIChncHRyKikgJm9wdF9yZW5hbWVfdGFibGVz LCAwLCBHRVRfQk9PTCwgTk9fQVJHLCAwLCAwLCAwLCAwLCAwLCAwfSwNCiAg ICB7InNvY2tldCIsICdTJywgIlNvY2tldCBmaWxlIHRvIHVzZSBmb3IgY29u bmVjdGlvbi4iLA0KICAgICAoZ3B0ciopICZvcHRfbXlzcWxfdW5peF9wb3J0 LCAoZ3B0ciopICZvcHRfbXlzcWxfdW5peF9wb3J0LCAwLCBHRVRfU1RSLA0K ICAgICBSRVFVSVJFRF9BUkcsIDAsIDAsIDAsIDAsIDAsIDB9LA0KKioqKioq KioqKioqKioqDQoqKiogMjI2LDIzMSAqKioqDQotLS0gMjI4LDIzNSAtLS0t DQogICAgIChncHRyKikgJmN1cnJlbnRfdXNlciwgKGdwdHIqKSAmY3VycmVu dF91c2VyLCAwLCBHRVRfU1RSLCBSRVFVSVJFRF9BUkcsDQogICAgIDAsIDAs IDAsIDAsIDAsIDB9LA0KICAjZW5kaWYNCisgICB7IndpdGgtdXNlLWRiIiwg J1UnLCJBbHdheXMgaW5jbHVkZSAnVVNFIGRiX25hbWU7JyBpbiB0aGUgb3V0 cHV0IiwNCisgICAgKGdwdHIqKSAmb3B0X3dpdGhfdXNlX2RiLCAoZ3B0ciop ICZvcHRfd2l0aF91c2VfZGIsIDAsIEdFVF9CT09MLCBOT19BUkcsIDAsIDAs IDAsIDAsIDAsIDB9LA0KICAgIHsidmVyYm9zZSIsICd2JywgIlByaW50IGlu Zm8gYWJvdXQgdGhlIHZhcmlvdXMgc3RhZ2VzLiIsDQogICAgIChncHRyKikg JnZlcmJvc2UsIChncHRyKikgJnZlcmJvc2UsIDAsIEdFVF9CT09MLCBOT19B UkcsIDAsIDAsIDAsIDAsIDAsIDB9LA0KICAgIHsidmVyc2lvbiIsJ1YnLCAi T3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuIiwgMCwgMCwg MCwNCioqKioqKioqKioqKioqKg0KKioqIDI1NCwyNjUgKioqKg0KLS0tIDI1 OCwyNzYgLS0tLQ0KICAJCQlpbnQgc3RyaW5nX3ZhbHVlKTsNCiAgc3RhdGlj IGludCBkdW1wX3NlbGVjdGVkX3RhYmxlcyhjaGFyICpkYiwgY2hhciAqKnRh YmxlX25hbWVzLCBpbnQgdGFibGVzKTsNCiAgc3RhdGljIGludCBkdW1wX2Fs bF90YWJsZXNfaW5fZGIoY2hhciAqZGIpOw0KKyANCiAgc3RhdGljIGludCBp bml0X2R1bXBpbmcoY2hhciAqKTsNCiAgc3RhdGljIGludCBkdW1wX2RhdGFi YXNlcyhjaGFyICoqKTsNCiAgc3RhdGljIGludCBkdW1wX2FsbF9kYXRhYmFz ZXMoKTsNCiAgc3RhdGljIGNoYXIgKnF1b3RlX25hbWUoY2hhciAqbmFtZSwg Y2hhciAqYnVmZik7DQogIHN0YXRpYyB2b2lkIHByaW50X3F1b3RlZF94bWwo RklMRSAqb3V0cHV0LCBjaGFyICpmbmFtZSwgY2hhciAqc3RyLCB1aW50IGxl bik7DQogIA0KKyBzdGF0aWMgY2hhciAqcmVuYW1lX2FuZF9xdW90ZShjaGFy ICpuYW1lLCBjaGFyICpidWZmKTsNCisgc3RhdGljIGludCBkcm9wX2FuZF9y ZW5hbWUoY2hhciAqdGFibGUpOw0KKyBzdGF0aWMgaW50IHJlbmFtZV90YWJs ZXMoY2hhciAqZGIsIGNoYXIgKip0YWJsZV9uYW1lcywgaW50IHRhYmxlcyk7 DQorIHN0YXRpYyBpbnQgcmVuYW1lX2FsbF9pbl9kYihjaGFyICpkYXRhYmFz ZSk7DQorIA0KKyANCiAgc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lk KQ0KICB7DQogICAgcHJpbnRmKCIlcyAgVmVyICVzIERpc3RyaWIgJXMsIGZv ciAlcyAoJXMpXG4iLG15X3Byb2duYW1lLERVTVBfVkVSU0lPTiwNCioqKioq KioqKioqKioqKg0KKioqIDU1NSw1NjAgKioqKg0KLS0tIDU2Niw1ODcgLS0t LQ0KICB9IC8qIHF1b3RlX25hbWUgKi8NCiAgDQogIA0KKyBzdGF0aWMgY2hh ciAqcmVuYW1lX2FuZF9xdW90ZShjaGFyICpuYW1lLCBjaGFyICpidWZmKQ0K KyB7DQorICAgY2hhciAqZW5kOw0KKyAgIGludCB5Ow0KKyANCisgICBlbmQg PSBidWZmOw0KKyAgIHkgPSAob3B0X3F1b3RlZCB8fCB0ZXN0X2lmX3NwZWNp YWxfY2hhcnMobmFtZSkpOw0KKyAgIGlmKHkpICplbmQrKyA9IFFVT1RFX0NI QVI7DQorICAgZW5kPXN0cm1vdihlbmQsIl9uZXdfIik7DQorICAgZW5kPXN0 cm5tb3YoZW5kLG5hbWUsTkFNRV9MRU4tNCk7DQorICAgaWYoeSkgKmVuZCsr ID0gUVVPVEVfQ0hBUjsNCisgICAqZW5kID0gIDA7DQorICAgcmV0dXJuIGJ1 ZmY7DQorIH0gLyogcmVuYW1lX2FuZF9xdW90ZSAqLw0KKyANCisgDQogIC8q DQogICoqIGdldFN0cnVjdHVyZSAtLSByZXRyaWV2cyBkYXRhYmFzZSBzdHJ1 Y3R1cmUsIHByaW50cyBvdXQgY29ycmVzcG9uZGluZw0KICAqKiAgICAgICBD UkVBVEUgc3RhdGVtZW50IGFuZCBmaWxscyBvdXQgaW5zZXJ0X3BhdC4NCioq KioqKioqKioqKioqKg0KKioqIDU2Niw1NzQgKioqKg0KICAgIE1ZU1FMX1JP VyAgcm93Ow0KICAgIG15X2Jvb2wgICAgaW5pdD0wOw0KICAgIHVpbnQgICAg ICAgbnVtRmllbGRzOw0KISAgIGNoYXIJICAgICAqc3RycG9zLCAqdGFibGVf bmFtZTsNCiAgICBjb25zdCBjaGFyICpkZWxheWVkOw0KISAgIGNoYXIJICAg ICBuYW1lX2J1ZmZbTkFNRV9MRU4rM10sdGFibGVfYnVmZltOQU1FX0xFTisz XTsNCiAgICBGSUxFICAgICAgICpzcWxfZmlsZSA9IG1kX3Jlc3VsdF9maWxl Ow0KICAgIERCVUdfRU5URVIoImdldFRhYmxlU3RydWN0dXJlIik7DQogIA0K LS0tIDU5Myw2MDEgLS0tLQ0KICAgIE1ZU1FMX1JPVyAgcm93Ow0KICAgIG15 X2Jvb2wgICAgaW5pdD0wOw0KICAgIHVpbnQgICAgICAgbnVtRmllbGRzOw0K ISAgIGNoYXIJICAgICAqc3RycG9zLCAqdGFibGVfbmFtZSwgKnRhcmdldF90 YWJsZTsNCiAgICBjb25zdCBjaGFyICpkZWxheWVkOw0KISAgIGNoYXIJICAg ICBuYW1lX2J1ZmZbTkFNRV9MRU4rM10sdGFibGVfYnVmZltOQU1FX0xFTisz XSx0YXJnZXRfYnVmZltOQU1FX0xFTiszXTsNCiAgICBGSUxFICAgICAgICpz cWxfZmlsZSA9IG1kX3Jlc3VsdF9maWxlOw0KICAgIERCVUdfRU5URVIoImdl dFRhYmxlU3RydWN0dXJlIik7DQogIA0KKioqKioqKioqKioqKioqDQoqKiog NTc5LDU4NCAqKioqDQotLS0gNjA2LDYxNCAtLS0tDQogIA0KICAgIHNwcmlu dGYoaW5zZXJ0X3BhdCwiU0VUIE9QVElPTiBTUUxfUVVPVEVfU0hPV19DUkVB VEU9JWQiLCAob3B0X3F1b3RlZCB8fCBvcHRfa2V5d29yZHMpKTsNCiAgICB0 YWJsZV9uYW1lPXF1b3RlX25hbWUodGFibGUsdGFibGVfYnVmZik7DQorICAg aWYob3B0X3JlbmFtZV90YWJsZXMpIA0KKyAgICAgdGFyZ2V0X3RhYmxlPXJl bmFtZV9hbmRfcXVvdGUodGFibGUsdGFyZ2V0X2J1ZmYpOw0KKyAgIGVsc2Ug dGFyZ2V0X3RhYmxlPXRhYmxlX25hbWU7DQogICAgaWYgKCFteXNxbF9xdWVy eShzb2NrLGluc2VydF9wYXQpKQ0KICAgIHsNCiAgICAgIC8qIHVzaW5nIFNI T1cgQ1JFQVRFIHN0YXRlbWVudCAqLw0KKioqKioqKioqKioqKioqDQoqKiog NjEwLDYyNCAqKioqDQogICAgICAgICAgd3JpdGVfaGVhZGVyKHNxbF9maWxl LCBkYik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFvcHRfeG1sKQ0KISAJ ZnByaW50ZihzcWxfZmlsZSwgIlxuLS1cbi0tIFRhYmxlIHN0cnVjdHVyZSBm b3IgdGFibGUgJyVzJ1xuLS1cblxuIiwNCiEgCQl0YWJsZSk7DQogICAgICAg IGlmIChvcHRfZHJvcCkNCiEgICAgICAgICBmcHJpbnRmKHNxbF9maWxlLCAi RFJPUCBUQUJMRSBJRiBFWElTVFMgJXM7XG4iLHRhYmxlX25hbWUpOw0KICAN CiAgICAgICAgdGFibGVSZXM9bXlzcWxfc3RvcmVfcmVzdWx0KHNvY2spOw0K ICAgICAgICByb3c9bXlzcWxfZmV0Y2hfcm93KHRhYmxlUmVzKTsNCiEgICAg ICAgaWYgKCFvcHRfeG1sKQ0KISAJZnByaW50ZihzcWxfZmlsZSwgIiVzO1xu Iiwgcm93WzFdKTsNCiAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQodGFibGVS ZXMpOw0KICAgICAgfQ0KICAgICAgc3ByaW50ZihpbnNlcnRfcGF0LCJzaG93 IGZpZWxkcyBmcm9tICVzIix0YWJsZV9uYW1lKTsNCi0tLSA2NDAsNjY2IC0t LS0NCiAgICAgICAgICB3cml0ZV9oZWFkZXIoc3FsX2ZpbGUsIGRiKTsNCiAg ICAgICAgfQ0KICAgICAgICBpZiAoIW9wdF94bWwpDQohIAkgICAgZnByaW50 ZihzcWxfZmlsZSwgIlxuLS1cbi0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdGFi bGUgJyVzJ1xuLS1cblxuIix0YWJsZSk7DQogICAgICAgIGlmIChvcHRfZHJv cCkNCiEgICAgICAgICBmcHJpbnRmKHNxbF9maWxlLCAiRFJPUCBUQUJMRSBJ RiBFWElTVFMgJXM7XG4iLHRhcmdldF90YWJsZSk7DQogIA0KICAgICAgICB0 YWJsZVJlcz1teXNxbF9zdG9yZV9yZXN1bHQoc29jayk7DQogICAgICAgIHJv dz1teXNxbF9mZXRjaF9yb3codGFibGVSZXMpOw0KISAgICAgICBpZihvcHRf cmVuYW1lX3RhYmxlcykgew0KISAgICAgICAgIGNoYXIgKnMgPSByb3dbMV07 DQohICAgICAgICAgaWYoIShiY21wKHJvd1sxXSwiQ1JFQVRFIFRBQkxFICIs MTMpKSkgew0KISAgICAgICAgICAgZnByaW50ZihzcWxfZmlsZSwiQ1JFQVRF IFRBQkxFICVzICIsdGFyZ2V0X3RhYmxlKTsNCiEgICAgICAgICAgIGZvcihz Kz0xMyA7ICpzKysgIT0gJyAnIDsgKTsNCiEgICAgICAgICAgIGZwcmludGYo c3FsX2ZpbGUsICIlcztcbiIsIHMpOw0KISAgICAgICAgIH0NCiEgICAgICAg ICBlbHNlIHsgDQohICAgICAgICAgICBmcHJpbnRmKHNxbF9maWxlLCItLSBG YWlsZWQgdG8gdXNlIHJlbmFtZWQgdGFibGVcblxuIik7DQohICAgICAgICAg ICB0YXJnZXRfdGFibGU9dGFibGVfbmFtZTsNCiEgICAgICAgICAgIG9wdF9y ZW5hbWVfdGFibGVzPTA7DQohICAgICAgICAgfQ0KISAgICAgICB9ICANCiEg ICAgICAgZWxzZSBpZiAoIW9wdF94bWwpDQohIAkgICAgZnByaW50ZihzcWxf ZmlsZSwgIiVzO1xuIiwgcm93WzFdKTsNCiAgICAgICAgbXlzcWxfZnJlZV9y ZXN1bHQodGFibGVSZXMpOw0KICAgICAgfQ0KICAgICAgc3ByaW50ZihpbnNl cnRfcGF0LCJzaG93IGZpZWxkcyBmcm9tICVzIix0YWJsZV9uYW1lKTsNCioq KioqKioqKioqKioqKg0KKioqIDYzMyw2NDIgKioqKg0KICAgICAgfQ0KICAN CiAgICAgIGlmIChjRmxhZykNCiEgICAgICAgc3ByaW50ZihpbnNlcnRfcGF0 LCAiSU5TRVJUICVzSU5UTyAlcyAoIiwgZGVsYXllZCwgdGFibGVfbmFtZSk7 DQogICAgICBlbHNlDQogICAgICB7DQohICAgICAgIHNwcmludGYoaW5zZXJ0 X3BhdCwgIklOU0VSVCAlc0lOVE8gJXMgVkFMVUVTICIsIGRlbGF5ZWQsIHRh YmxlX25hbWUpOw0KICAgICAgICBpZiAoIWV4dGVuZGVkX2luc2VydCkNCiAg ICAgICAgICBzdHJjYXQoaW5zZXJ0X3BhdCwiKCIpOw0KICAgICAgfQ0KLS0t IDY3NSw2ODQgLS0tLQ0KICAgICAgfQ0KICANCiAgICAgIGlmIChjRmxhZykN CiEgICAgICAgc3ByaW50ZihpbnNlcnRfcGF0LCAiSU5TRVJUICVzSU5UTyAl cyAoIiwgZGVsYXllZCwgdGFyZ2V0X3RhYmxlKTsNCiAgICAgIGVsc2UNCiAg ICAgIHsNCiEgICAgICAgc3ByaW50ZihpbnNlcnRfcGF0LCAiSU5TRVJUICVz SU5UTyAlcyBWQUxVRVMgIiwgZGVsYXllZCwgdGFyZ2V0X3RhYmxlKTsNCiAg ICAgICAgaWYgKCFleHRlbmRlZF9pbnNlcnQpDQogICAgICAgICAgc3RyY2F0 KGluc2VydF9wYXQsIigiKTsNCiAgICAgIH0NCioqKioqKioqKioqKioqKg0K KioqIDY5MCw3MDMgKioqKg0KICAJZnByaW50ZihzcWxfZmlsZSwgIlxuLS1c bi0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdGFibGUgJyVzJ1xuLS1cblxuIiwN CiAgCQl0YWJsZSk7DQogICAgICAgIGlmIChvcHRfZHJvcCkNCiEgICAgICAg ICBmcHJpbnRmKHNxbF9maWxlLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMgJXM7 XG4iLHRhYmxlX25hbWUpOw0KISAgICAgICBmcHJpbnRmKHNxbF9maWxlLCAi Q1JFQVRFIFRBQkxFICVzIChcbiIsIHRhYmxlX25hbWUpOw0KICAgICAgfQ0K ICAgICAgaWYgKGNGbGFnKQ0KISAgICAgICBzcHJpbnRmKGluc2VydF9wYXQs ICJJTlNFUlQgJXNJTlRPICVzICgiLCBkZWxheWVkLCB0YWJsZV9uYW1lKTsN CiAgICAgIGVsc2UNCiAgICAgIHsNCiEgICAgICAgc3ByaW50ZihpbnNlcnRf cGF0LCAiSU5TRVJUICVzSU5UTyAlcyBWQUxVRVMgIiwgZGVsYXllZCwgdGFi bGVfbmFtZSk7DQogICAgICAgIGlmICghZXh0ZW5kZWRfaW5zZXJ0KQ0KICAg ICAgICAgIHN0cmNhdChpbnNlcnRfcGF0LCIoIik7DQogICAgICB9DQotLS0g NzMyLDc0NSAtLS0tDQogIAlmcHJpbnRmKHNxbF9maWxlLCAiXG4tLVxuLS0g VGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSAnJXMnXG4tLVxuXG4iLA0KICAJ CXRhYmxlKTsNCiAgICAgICAgaWYgKG9wdF9kcm9wKQ0KISAgICAgICAgIGZw cmludGYoc3FsX2ZpbGUsICJEUk9QIFRBQkxFIElGIEVYSVNUUyAlcztcbiIs dGFyZ2V0X3RhYmxlKTsNCiEgICAgICAgZnByaW50ZihzcWxfZmlsZSwgIkNS RUFURSBUQUJMRSAlcyAoXG4iLCB0YXJnZXRfdGFibGUpOw0KICAgICAgfQ0K ICAgICAgaWYgKGNGbGFnKQ0KISAgICAgICBzcHJpbnRmKGluc2VydF9wYXQs ICJJTlNFUlQgJXNJTlRPICVzICgiLCBkZWxheWVkLCB0YXJnZXRfdGFibGUp Ow0KICAgICAgZWxzZQ0KICAgICAgew0KISAgICAgICBzcHJpbnRmKGluc2Vy dF9wYXQsICJJTlNFUlQgJXNJTlRPICVzIFZBTFVFUyAiLCBkZWxheWVkLCB0 YXJnZXRfdGFibGUpOw0KICAgICAgICBpZiAoIWV4dGVuZGVkX2luc2VydCkN CiAgICAgICAgICBzdHJjYXQoaW5zZXJ0X3BhdCwiKCIpOw0KICAgICAgfQ0K KioqKioqKioqKioqKioqDQoqKiogNzE5LDcyNSAqKioqDQogICAgICAgIGlm ICghdEZsYWcpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAob3B0X2tleXdv cmRzKQ0KISAJICBmcHJpbnRmKHNxbF9maWxlLCAiICAlcy4lcyAlcyIsIHRh YmxlX25hbWUsDQogIAkgIHF1b3RlX25hbWUocm93W1NIT1dfRklFTEROQU1F XSxuYW1lX2J1ZmYpLCByb3dbU0hPV19UWVBFXSk7DQogICAgICAgICAgZWxz ZQ0KICAJICBmcHJpbnRmKHNxbF9maWxlLCAiICAlcyAlcyIsIHF1b3RlX25h bWUocm93W1NIT1dfRklFTEROQU1FXSwNCi0tLSA3NjEsNzY3IC0tLS0NCiAg ICAgICAgaWYgKCF0RmxhZykNCiAgICAgICAgew0KICAgICAgICAgIGlmIChv cHRfa2V5d29yZHMpDQohIAkgIGZwcmludGYoc3FsX2ZpbGUsICIgICVzLiVz ICVzIiwgdGFyZ2V0X3RhYmxlLA0KICAJICBxdW90ZV9uYW1lKHJvd1tTSE9X X0ZJRUxETkFNRV0sbmFtZV9idWZmKSwgcm93W1NIT1dfVFlQRV0pOw0KICAg ICAgICAgIGVsc2UNCiAgCSAgZnByaW50ZihzcWxfZmlsZSwgIiAgJXMgJXMi LCBxdW90ZV9uYW1lKHJvd1tTSE9XX0ZJRUxETkFNRV0sDQoqKioqKioqKioq KioqKioNCioqKiA5MDEsOTA3ICoqKioNCiAgKi8NCiAgc3RhdGljIHZvaWQg ZHVtcFRhYmxlKHVpbnQgbnVtRmllbGRzLCBjaGFyICp0YWJsZSkNCiAgew0K ISAgIGNoYXIgcXVlcnlbUVVFUllfTEVOR1RIXSwgKmVuZCwgYnVmZlsyNTZd LHRhYmxlX2J1ZmZbTkFNRV9MRU4rM107DQogICAgTVlTUUxfUkVTCSpyZXM7 DQogICAgTVlTUUxfRklFTEQJKmZpZWxkOw0KICAgIE1ZU1FMX1JPVwlyb3c7 DQotLS0gOTQzLDk1MCAtLS0tDQogICovDQogIHN0YXRpYyB2b2lkIGR1bXBU YWJsZSh1aW50IG51bUZpZWxkcywgY2hhciAqdGFibGUpDQogIHsNCiEgICBj aGFyIHF1ZXJ5W1FVRVJZX0xFTkdUSF0sICplbmQsICp0YXJnZXRfdGFibGU7 DQohICAgY2hhciBidWZmWzI1Nl0sdGFibGVfYnVmZltOQU1FX0xFTiszXSx0 YXJnZXRfYnVmZltOQU1FX0xFTiszXTsgIA0KICAgIE1ZU1FMX1JFUwkqcmVz Ow0KICAgIE1ZU1FMX0ZJRUxECSpmaWVsZDsNCiAgICBNWVNRTF9ST1cJcm93 Ow0KKioqKioqKioqKioqKioqDQoqKiogOTA5LDkxNCAqKioqDQotLS0gOTUy LDk2MCAtLS0tDQogIA0KICAgIGlmICh2ZXJib3NlKQ0KICAgICAgZnByaW50 ZihzdGRlcnIsICItLSBTZW5kaW5nIFNFTEVDVCBxdWVyeS4uLlxuIik7DQor ICAgaWYob3B0X3JlbmFtZV90YWJsZXMpIA0KKyAgICAgdGFyZ2V0X3RhYmxl PXJlbmFtZV9hbmRfcXVvdGUodGFibGUsdGFyZ2V0X2J1ZmYpOw0KKyAgIGVs c2UgdGFyZ2V0X3RhYmxlPXF1b3RlX25hbWUodGFibGUsdGFibGVfYnVmZik7 DQogICAgaWYgKHBhdGgpDQogICAgew0KICAgICAgY2hhciBmaWxlbmFtZVtG Tl9SRUZMRU5dLCB0bXBfcGF0aFtGTl9SRUZMRU5dOw0KKioqKioqKioqKioq KioqDQoqKiogOTg1LDk5NSAqKioqDQogICAgICB9DQogIA0KICAgICAgaWYg KG9wdF9kaXNhYmxlX2tleXMpDQohICAgICAgIGZwcmludGYobWRfcmVzdWx0 X2ZpbGUsIi8qITQwMDAwIEFMVEVSIFRBQkxFICVzIERJU0FCTEUgS0VZUyAq LztcbiIsDQohIAkgICAgICBxdW90ZV9uYW1lKHRhYmxlLCB0YWJsZV9idWZm KSk7DQogICAgICBpZiAob3B0X2xvY2spDQohICAgICAgIGZwcmludGYobWRf cmVzdWx0X2ZpbGUsIkxPQ0sgVEFCTEVTICVzIFdSSVRFO1xuIiwNCiEgCSAg ICAgIHF1b3RlX25hbWUodGFibGUsdGFibGVfYnVmZikpOw0KICANCiAgICAg IHRvdGFsX2xlbmd0aD1uZXRfYnVmZmVyX2xlbmd0aDsJCS8qIEZvcmNlIHJv dyBicmVhayAqLw0KICAgICAgcm93X2JyZWFrPTA7DQotLS0gMTAzMSwxMDM5 IC0tLS0NCiAgICAgIH0NCiAgDQogICAgICBpZiAob3B0X2Rpc2FibGVfa2V5 cykNCiEgICAgICAgZnByaW50ZihtZF9yZXN1bHRfZmlsZSwiLyohNDAwMDAg QUxURVIgVEFCTEUgJXMgRElTQUJMRSBLRVlTICovO1xuIix0YXJnZXRfdGFi bGUpOw0KICAgICAgaWYgKG9wdF9sb2NrKQ0KISAgICAgICBmcHJpbnRmKG1k X3Jlc3VsdF9maWxlLCJMT0NLIFRBQkxFUyAlcyBXUklURTtcbiIsdGFyZ2V0 X3RhYmxlKTsNCiAgDQogICAgICB0b3RhbF9sZW5ndGg9bmV0X2J1ZmZlcl9s ZW5ndGg7CQkvKiBGb3JjZSByb3cgYnJlYWsgKi8NCiAgICAgIHJvd19icmVh az0wOw0KKioqKioqKioqKioqKioqDQoqKiogMTE1MiwxMTYyICoqKioNCiAg ICAgICAgc2FmZV9leGl0KEVYX0NPTlNDSEVDSyk7DQogICAgICAgIHJldHVy bjsNCiAgICAgIH0NCiAgICAgIGlmIChvcHRfbG9jaykNCiAgICAgICAgZnB1 dHMoIlVOTE9DSyBUQUJMRVM7XG4iLCBtZF9yZXN1bHRfZmlsZSk7DQogICAg ICBpZiAob3B0X2Rpc2FibGVfa2V5cykNCiAgICAgICAgZnByaW50ZihtZF9y ZXN1bHRfZmlsZSwiLyohNDAwMDAgQUxURVIgVEFCTEUgJXMgRU5BQkxFIEtF WVMgKi87XG4iLA0KISAJICAgICAgcXVvdGVfbmFtZSh0YWJsZSx0YWJsZV9i dWZmKSk7DQogICAgICBpZiAob3B0X2F1dG9jb21taXQpDQogICAgICAgIGZw cmludGYobWRfcmVzdWx0X2ZpbGUsICJjb21taXQ7XG4iKTsNCiAgICAgIG15 c3FsX2ZyZWVfcmVzdWx0KHJlcyk7DQotLS0gMTE5NiwxMjA4IC0tLS0NCiAg ICAgICAgc2FmZV9leGl0KEVYX0NPTlNDSEVDSyk7DQogICAgICAgIHJldHVy bjsNCiAgICAgIH0NCisgDQorIA0KICAgICAgaWYgKG9wdF9sb2NrKQ0KICAg ICAgICBmcHV0cygiVU5MT0NLIFRBQkxFUztcbiIsIG1kX3Jlc3VsdF9maWxl KTsNCiAgICAgIGlmIChvcHRfZGlzYWJsZV9rZXlzKQ0KICAgICAgICBmcHJp bnRmKG1kX3Jlc3VsdF9maWxlLCIvKiE0MDAwMCBBTFRFUiBUQUJMRSAlcyBF TkFCTEUgS0VZUyAqLztcbiIsDQohIAkgICAgICB0YXJnZXRfdGFibGUpOw0K ICAgICAgaWYgKG9wdF9hdXRvY29tbWl0KQ0KICAgICAgICBmcHJpbnRmKG1k X3Jlc3VsdF9maWxlLCAiY29tbWl0O1xuIik7DQogICAgICBteXNxbF9mcmVl X3Jlc3VsdChyZXMpOw0KKioqKioqKioqKioqKioqDQoqKiogMTI1MywxMjYy ICoqKioNCiAgICB9DQogICAgaWYgKCFwYXRoICYmICFvcHRfeG1sKQ0KICAg IHsNCiEgICAgIGlmIChvcHRfZGF0YWJhc2VzIHx8IG9wdF9hbGxkYnMpDQog ICAgICB7DQogICAgICAgIGZwcmludGYobWRfcmVzdWx0X2ZpbGUsIlxuLS1c bi0tIEN1cnJlbnQgRGF0YWJhc2U6ICVzXG4tLVxuIiwgZGF0YWJhc2UpOw0K ISAgICAgICBpZiAoIW9wdF9jcmVhdGVfZGIpDQogIAlmcHJpbnRmKG1kX3Jl c3VsdF9maWxlLCJcbkNSRUFURSBEQVRBQkFTRSAvKiEzMjMxMiBJRiBOT1Qg RVhJU1RTKi8gJXM7XG4iLA0KICAJCWRhdGFiYXNlKTsNCiAgICAgICAgZnBy aW50ZihtZF9yZXN1bHRfZmlsZSwiXG5VU0UgJXM7XG4iLCBkYXRhYmFzZSk7 DQotLS0gMTI5OSwxMzA4IC0tLS0NCiAgICB9DQogICAgaWYgKCFwYXRoICYm ICFvcHRfeG1sKQ0KICAgIHsNCiEgICAgIGlmIChvcHRfZGF0YWJhc2VzIHx8 IG9wdF9hbGxkYnMgfHwgb3B0X3dpdGhfdXNlX2RiKQ0KICAgICAgew0KICAg ICAgICBmcHJpbnRmKG1kX3Jlc3VsdF9maWxlLCJcbi0tXG4tLSBDdXJyZW50 IERhdGFiYXNlOiAlc1xuLS1cbiIsIGRhdGFiYXNlKTsNCiEgICAgICAgaWYg KChvcHRfZGF0YWJhc2VzIHx8IG9wdF9hbGxkYnMpICYmICFvcHRfY3JlYXRl X2RiKQ0KICAJZnByaW50ZihtZF9yZXN1bHRfZmlsZSwiXG5DUkVBVEUgREFU QUJBU0UgLyohMzIzMTIgSUYgTk9UIEVYSVNUUyovICVzO1xuIiwNCiAgCQlk YXRhYmFzZSk7DQogICAgICAgIGZwcmludGYobWRfcmVzdWx0X2ZpbGUsIlxu VVNFICVzO1xuIiwgZGF0YWJhc2UpOw0KKioqKioqKioqKioqKioqDQoqKiog MTI5OSwxMzA1ICoqKioNCiAgICAgICAgREJlcnJvcihzb2NrLCAid2hlbiBk b2luZyByZWZyZXNoIik7DQogICAgICAgICAgICAgLyogV2Ugc2hhbGwgY29u dGludWUgaGVyZSwgaWYgLS1mb3JjZSB3YXMgZ2l2ZW4gKi8NCiAgICB9DQoh ICAgd2hpbGUgKCh0YWJsZSA9IGdldFRhYmxlTmFtZSgwKSkpDQogICAgew0K ICAgICAgbnVtcm93cyA9IGdldFRhYmxlU3RydWN0dXJlKHRhYmxlLCBkYXRh YmFzZSk7DQogICAgICBpZiAoIWRGbGFnICYmIG51bXJvd3MgPiAwKQ0KLS0t IDEzNDUsMTM1MSAtLS0tDQogICAgICAgIERCZXJyb3Ioc29jaywgIndoZW4g ZG9pbmcgcmVmcmVzaCIpOw0KICAgICAgICAgICAgIC8qIFdlIHNoYWxsIGNv bnRpbnVlIGhlcmUsIGlmIC0tZm9yY2Ugd2FzIGdpdmVuICovDQogICAgfQ0K ISAgIHdoaWxlICgodGFibGUgPSBnZXRUYWJsZU5hbWUoMSkpKQ0KICAgIHsN CiAgICAgIG51bXJvd3MgPSBnZXRUYWJsZVN0cnVjdHVyZSh0YWJsZSwgZGF0 YWJhc2UpOw0KICAgICAgaWYgKCFkRmxhZyAmJiBudW1yb3dzID4gMCkNCioq KioqKioqKioqKioqKg0KKioqIDEzMDksMTMxNCAqKioqDQotLS0gMTM1NSwx MzYyIC0tLS0NCiAgICAgIGZwcmludGYobWRfcmVzdWx0X2ZpbGUsICI8L2Rh dGFiYXNlPlxuIik7DQogICAgaWYgKGxvY2tfdGFibGVzKQ0KICAgICAgbXlz cWxfcXVlcnkoc29jaywiVU5MT0NLX1RBQkxFUyIpOw0KKyAgIGlmIChvcHRf cmVuYW1lX3RhYmxlcykgDQorICAgICByZW5hbWVfYWxsX2luX2RiKGRhdGFi YXNlKTsNCiAgICByZXR1cm4gMDsNCiAgfSAvKiBkdW1wX2FsbF90YWJsZXNf aW5fZGIgKi8NCiAgDQoqKioqKioqKioqKioqKioNCioqKiAxMzE3LDEzMzAg KioqKg0KICBzdGF0aWMgaW50IGR1bXBfc2VsZWN0ZWRfdGFibGVzKGNoYXIg KmRiLCBjaGFyICoqdGFibGVfbmFtZXMsIGludCB0YWJsZXMpDQogIHsNCiAg ICB1aW50IG51bXJvd3M7DQohICAgY2hhciB0YWJsZV9idWZmW05BTUVfTEVO KzNdOw0KICANCiAgICBpZiAoaW5pdF9kdW1waW5nKGRiKSkNCiAgICAgIHJl dHVybiAxOw0KICAgIGlmIChsb2NrX3RhYmxlcykNCiAgICB7DQogICAgICBE WU5BTUlDX1NUUklORyBxdWVyeTsNCi0gICAgIGludCBpOw0KICANCiAgICAg IGluaXRfZHluYW1pY19zdHJpbmcoJnF1ZXJ5LCAiTE9DSyBUQUJMRVMgIiwg MjU2LCAxMDI0KTsNCiAgICAgIGZvciAoaT0wIDsgaSA8IHRhYmxlcyA7IGkr KykNCi0tLSAxMzY1LDEzNzkgLS0tLQ0KICBzdGF0aWMgaW50IGR1bXBfc2Vs ZWN0ZWRfdGFibGVzKGNoYXIgKmRiLCBjaGFyICoqdGFibGVfbmFtZXMsIGlu dCB0YWJsZXMpDQogIHsNCiAgICB1aW50IG51bXJvd3M7DQohICAgY2hhciAq dGFyZ2V0X3RhYmxlOw0KISAgIGNoYXIgdGFibGVfYnVmZltOQU1FX0xFTisz XSwgdGFyZ2V0X2J1ZmZbTkFNRV9MRU4rM107DQohICAgaW50IGk7DQogIA0K ICAgIGlmIChpbml0X2R1bXBpbmcoZGIpKQ0KICAgICAgcmV0dXJuIDE7DQog ICAgaWYgKGxvY2tfdGFibGVzKQ0KICAgIHsNCiAgICAgIERZTkFNSUNfU1RS SU5HIHF1ZXJ5Ow0KICANCiAgICAgIGluaXRfZHluYW1pY19zdHJpbmcoJnF1 ZXJ5LCAiTE9DSyBUQUJMRVMgIiwgMjU2LCAxMDI0KTsNCiAgICAgIGZvciAo aT0wIDsgaSA8IHRhYmxlcyA7IGkrKykNCioqKioqKioqKioqKioqKg0KKioq IDEzNDUsMTM2MiAqKioqDQogICAgfQ0KICAgIGlmIChvcHRfeG1sKQ0KICAg ICAgZnByaW50ZihtZF9yZXN1bHRfZmlsZSwgIjxkYXRhYmFzZSBuYW1lPVwi JXNcIj5cbiIsIGRiKTsNCiEgICBmb3IgKDsgdGFibGVzID4gMCA7IHRhYmxl cy0tICwgdGFibGVfbmFtZXMrKykNCiAgICB7DQohICAgICBudW1yb3dzID0g Z2V0VGFibGVTdHJ1Y3R1cmUoKnRhYmxlX25hbWVzLCBkYik7DQogICAgICBp ZiAoIWRGbGFnICYmIG51bXJvd3MgPiAwKQ0KISAgICAgICBkdW1wVGFibGUo bnVtcm93cywgKnRhYmxlX25hbWVzKTsNCiAgICB9DQogICAgaWYgKG9wdF94 bWwpDQogICAgICBmcHJpbnRmKG1kX3Jlc3VsdF9maWxlLCAiPC9kYXRhYmFz ZT5cbiIpOw0KICAgIGlmIChsb2NrX3RhYmxlcykNCiAgICAgIG15c3FsX3F1 ZXJ5KHNvY2ssIlVOTE9DS19UQUJMRVMiKTsNCiAgICByZXR1cm4gMDsNCiAg fSAvKiBkdW1wX3NlbGVjdGVkX3RhYmxlcyAqLw0KICANCiAgDQogIC8qIFBy aW50IGEgdmFsdWUgd2l0aCBhIHByZWZpeCBvbiBmaWxlICovDQotLS0gMTM5 NCwxNDYyIC0tLS0NCiAgICB9DQogICAgaWYgKG9wdF94bWwpDQogICAgICBm cHJpbnRmKG1kX3Jlc3VsdF9maWxlLCAiPGRhdGFiYXNlIG5hbWU9XCIlc1wi PlxuIiwgZGIpOw0KISAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZXMgOyBpKysp DQogICAgew0KISAgICAgbnVtcm93cyA9IGdldFRhYmxlU3RydWN0dXJlKHRh YmxlX25hbWVzW2ldLCBkYik7DQogICAgICBpZiAoIWRGbGFnICYmIG51bXJv d3MgPiAwKQ0KISAgICAgICBkdW1wVGFibGUobnVtcm93cywgdGFibGVfbmFt ZXNbaV0pOw0KICAgIH0NCiAgICBpZiAob3B0X3htbCkNCiAgICAgIGZwcmlu dGYobWRfcmVzdWx0X2ZpbGUsICI8L2RhdGFiYXNlPlxuIik7DQogICAgaWYg KGxvY2tfdGFibGVzKQ0KICAgICAgbXlzcWxfcXVlcnkoc29jaywiVU5MT0NL X1RBQkxFUyIpOw0KKyAgIGlmIChvcHRfcmVuYW1lX3RhYmxlcykgDQorICAg ICByZW5hbWVfdGFibGVzKGRiLHRhYmxlX25hbWVzLHRhYmxlcyk7DQogICAg cmV0dXJuIDA7DQogIH0gLyogZHVtcF9zZWxlY3RlZF90YWJsZXMgKi8NCisg DQorIA0KKyBzdGF0aWMgaW50IGRyb3BfYW5kX3JlbmFtZShjaGFyICp0YWJs ZSkgDQorIHsNCisgICBjaGFyICpyZW5hbWVkX3RhYmxlLCAqcmVhbF90YWJs ZTsNCisgICBjaGFyIHRhYmxlX2J1ZmZbTkFNRV9MRU4rM10sdGFyZ2V0X2J1 ZmZbTkFNRV9MRU4rM107DQorIA0KKyAgIHJlYWxfdGFibGU9cXVvdGVfbmFt ZSh0YWJsZSx0YWJsZV9idWZmKTsNCisgICByZW5hbWVkX3RhYmxlPXJlbmFt ZV9hbmRfcXVvdGUodGFibGUsdGFyZ2V0X2J1ZmYpOw0KKyAgIGZwcmludGYo bWRfcmVzdWx0X2ZpbGUsIkRST1AgVEFCTEUgJXM7XG4iLHJlYWxfdGFibGUp Ow0KKyAgIGZwcmludGYobWRfcmVzdWx0X2ZpbGUsIkFMVEVSIFRBQkxFICVz IFJFTkFNRSAlcztcbiIsDQorICAgICByZW5hbWVkX3RhYmxlLHJlYWxfdGFi bGUpOw0KKyB9IC8qIGRyb3BfYW5kX3JlbmFtZSAqLw0KKyANCisgDQorIHN0 YXRpYyBpbnQgcmVuYW1lX2FsbF9pbl9kYihjaGFyICpkYXRhYmFzZSkgDQor IHsNCisgICBpbnQgaTsNCisgICBjaGFyICp0YWJsZTsNCisgICBjaGFyIGJ1 ZmZbTkFNRV9MRU4rM107DQorICAgDQorICAgZnByaW50ZihtZF9yZXN1bHRf ZmlsZSwiXG5MT0NLIFRBQkxFUyAiKTsNCisgICB3aGlsZSAoKHRhYmxlID0g Z2V0VGFibGVOYW1lKDEpKSkNCisgICAgIGZwcmludGYobWRfcmVzdWx0X2Zp bGUsIiVzICIscXVvdGVfbmFtZSh0YWJsZSxidWZmKSk7DQorICAgZnByaW50 ZihtZF9yZXN1bHRfZmlsZSwiV1JJVEU7XG4iKTsNCisgICANCisgICB3aGls ZSAoKHRhYmxlID0gZ2V0VGFibGVOYW1lKDEpKSkgew0KKyAgICAgZHJvcF9h bmRfcmVuYW1lKHRhYmxlKTsNCisgICB9DQorICAgZnByaW50ZihtZF9yZXN1 bHRfZmlsZSwiVU5MT0NLIFRBQkxFUztcbiIpOyANCisgfSAvKiByZW5hbWVf YWxsX2luX2RiICovDQorIA0KKyANCisgc3RhdGljIGludCByZW5hbWVfdGFi bGVzKGNoYXIgKmRiLCBjaGFyICoqdGFibGVfbmFtZXMsIGludCB0YWJsZXMp IA0KKyB7DQorICAgaW50IGk7DQorICAgY2hhciAqdGFibGU7DQorICAgY2hh ciBidWZmW05BTUVfTEVOKzNdOw0KKyANCisgICBmcHJpbnRmKG1kX3Jlc3Vs dF9maWxlLCJcbkxPQ0sgVEFCTEVTICIpOw0KKyAgIGZvciAoaT0wIDsgaSA8 IHRhYmxlcyA7IGkrKykgDQorICAgICBmcHJpbnRmKG1kX3Jlc3VsdF9maWxl LCIlcyAiLA0KKyAgICAgICAgICAgICBxdW90ZV9uYW1lKHRhYmxlX25hbWVz W2ldLGJ1ZmYpKTsNCisgICBmcHJpbnRmKG1kX3Jlc3VsdF9maWxlLCJXUklU RTtcbiIpOw0KKyANCisgICBmb3IgKGk9MCA7IGkgPCB0YWJsZXMgOyBpKysp IA0KKyAgICAgZHJvcF9hbmRfcmVuYW1lKHRhYmxlX25hbWVzW2ldKTsNCisg ICBmcHJpbnRmKG1kX3Jlc3VsdF9maWxlLCJVTkxPQ0sgVEFCTEVTO1xuIik7 IA0KKyB9IC8qIHJlbmFtZV90YWJsZXMgKi8NCiAgDQogIA0KICAvKiBQcmlu dCBhIHZhbHVlIHdpdGggYSBwcmVmaXggb24gZmlsZSAqLw0K --168303424-1843280920-1061444716=:3528--