Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n8evA-0004ai-UY for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Jan 2022 09:00:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n8ev9-0005tO-P8 for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Jan 2022 09:00:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n8ev9-0005tF-0l for pgsql-hackers@lists.postgresql.org; Sat, 15 Jan 2022 09:00:23 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n8ev2-0007jR-QD for pgsql-hackers@lists.postgresql.org; Sat, 15 Jan 2022 09:00:21 +0000 Received: from pseudo (168.204.122.78.rev.sfr.net [78.122.204.168]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id 88A78C001C; Sat, 15 Jan 2022 10:03:13 +0100 (CET) Date: Sat, 15 Jan 2022 10:00:11 +0100 (CET) From: Fabien COELHO X-X-Sender: fabien@pseudo To: Andres Freund cc: Peter Eisentraut , "pgsql-hackers@lists.postgresql.org" Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: <20220113054433.wdjhidtm7gvyhfts@alap3.anarazel.de> Message-ID: References: <18c78a01-4a34-9dd4-f78b-6860f1420c8e@enterprisedb.com> <6954328d-96f2-77f7-735f-7ce493a40949@enterprisedb.com> <2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com> <46259d13-5f90-1475-3c85-d7a597a2b862@enterprisedb.com> <20220113054433.wdjhidtm7gvyhfts@alap3.anarazel.de> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-978275340-1642237212=:3378943" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2056645051-978275340-1642237212=:3378943 Content-Type: text/plain; charset=US-ASCII; format=flowed Hello Andres, > The reason this test constantly fails on cfbot windows is a use-after-free > bug. Indeed! Thanks a lot for the catch and the debug! The ClearOrSaveResult function is quite annoying because it may or may not clear the result as a side effect. Attached v14 moves the status extraction before the possible clear. I've added a couple of results = NULL after such calls in the code. -- Fabien. --2056645051-978275340-1642237212=:3378943 Content-Type: text/x-diff; name=psql-show-all-results-14.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-14.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCBlMGFiZTM0YmI2Li44ZjdmOTMxNzJhIDEwMDY0NA0KLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0 ZW1lbnRzLm91dA0KKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dA0KQEAgLTUwLDggKzUw LDI4IEBAIEJFR0lOIFw7DQogU0VMRUNUIDIuMCBBUyAiZmxvYXQiIFw7DQog U0VMRUNUICd3b3JsZCcgQVMgInRleHQiIFw7DQogQ09NTUlUOw0KKyBmbG9h dCANCistLS0tLS0tDQorICAgMi4wDQorKDEgcm93KQ0KKw0KKyB0ZXh0ICAN CistLS0tLS0tDQorIHdvcmxkDQorKDEgcm93KQ0KKw0KIC0tIGNvbXBvdW5k IHdpdGggZW1wdHkgc3RhdGVtZW50cyBhbmQgc3B1cmlvdXMgbGVhZGluZyBz cGFjaW5nDQogXDtcOyAgIFNFTEVDVCAzICsgMyBcO1w7XDsgICBTRUxFQ1Qg JyAnIHx8ICcgIScgXDtcOyAgIFNFTEVDVCAxICsgNCBcOzsNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgNg0KKygxIHJvdykNCisNCisg P2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICENCisoMSByb3cpDQorDQog ID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDUNCkBAIC02MSw2 ICs4MSwxMSBAQCBDT01NSVQ7DQogU0VMRUNUIDEgKyAxICsgMSBBUyAiYWRk IiBcZ3NldA0KIFNFTEVDVCA6YWRkICsgMSArIDEgQVMgImFkZCIgXDsNCiBT RUxFQ1QgOmFkZCArIDEgKyAxIEFTICJhZGQiIFxnc2V0DQorIGFkZCANCist LS0tLQ0KKyAgIDUNCisoMSByb3cpDQorDQogLS0gc2V0IG9wZXJhdG9yDQog U0VMRUNUIDEgQVMgaSBVTklPTiBTRUxFQ1QgMiBPUkRFUiBCWSBpOw0KICBp IA0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggMWFi MjAwYTRhZC4uMGEyMjg1MDkxMiAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sDQpAQCAtMTI3LDE4ICsxMjcsMTEgQEAgZWNobyAnXHgg XFwgU0VMRUNUICogRlJPTSBmb287JyB8IHBzcWwNCiAgICAgICAgY29tbWFu ZHMgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyB0byBkaXZpZGUgaXQgaW50byBt dWx0aXBsZQ0KICAgICAgICB0cmFuc2FjdGlvbnMuICAoU2VlIDx4cmVmIGxp bmtlbmQ9InByb3RvY29sLWZsb3ctbXVsdGktc3RhdGVtZW50Ii8+DQogICAg ICAgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFu ZGxlcyBtdWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgQWxzbywgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiBvbmx5IHByaW50cyB0aGUN Ci0gICAgICAgcmVzdWx0IG9mIHRoZSBsYXN0IDxhY3JvbnltPlNRTDwvYWNy b255bT4gY29tbWFuZCBpbiB0aGUgc3RyaW5nLg0KLSAgICAgICBUaGlzIGlz IGRpZmZlcmVudCBmcm9tIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBzYW1lIHN0 cmluZyBpcyByZWFkIGZyb20NCi0gICAgICAgYSBmaWxlIG9yIGZlZCB0byA8 YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5w dXQsDQotICAgICAgIGJlY2F1c2UgdGhlbiA8YXBwbGljYXRpb24+cHNxbDwv YXBwbGljYXRpb24+IHNlbmRzDQotICAgICAgIGVhY2ggPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBjb21tYW5kIHNlcGFyYXRlbHkuDQogICAgICAgPC9wYXJh Pg0KICAgICAgIDxwYXJhPg0KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMgYmVo YXZpb3IsIHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBTUUwgY29tbWFuZCBpbiBh DQotICAgICAgIHNpbmdsZSA8b3B0aW9uPi1jPC9vcHRpb24+IHN0cmluZyBv ZnRlbiBoYXMgdW5leHBlY3RlZCByZXN1bHRzLg0KLSAgICAgICBJdCdzIGJl dHRlciB0byB1c2UgcmVwZWF0ZWQgPG9wdGlvbj4tYzwvb3B0aW9uPiBjb21t YW5kcyBvciBmZWVkDQotICAgICAgIG11bHRpcGxlIGNvbW1hbmRzIHRvIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1 dCwNCisgICAgICAgSWYgaGF2aW5nIHNldmVyYWwgY29tbWFuZHMgZXhlY3V0 ZWQgaW4gb25lIHRyYW5zYWN0aW9uIGlzIG5vdCBkZXNpcmVkLCANCisgICAg ICAgdXNlIHJlcGVhdGVkIDxvcHRpb24+LWM8L29wdGlvbj4gY29tbWFuZHMg b3IgZmVlZCBtdWx0aXBsZSBjb21tYW5kcyB0bw0KKyAgICAgICA8YXBwbGlj YXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5wdXQsDQog ICAgICAgIGVpdGhlciB1c2luZyA8YXBwbGljYXRpb24+ZWNobzwvYXBwbGlj YXRpb24+IGFzIGlsbHVzdHJhdGVkIGFib3ZlLCBvcg0KICAgICAgICB2aWEg YSBzaGVsbCBoZXJlLWRvY3VtZW50LCBmb3IgZXhhbXBsZToNCiA8cHJvZ3Jh bWxpc3Rpbmc+DQpAQCAtMzU3MCwxMCArMzU2Myw2IEBAIHNlbGVjdCAxXDsg c2VsZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1 ZGVkIGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUN CiAgICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0i cHJvdG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZv ciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBt dWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkg cmVzdWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0 OyBpbiB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhy ZWUgPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVj dXRlZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAg ICAgb25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KICAg ICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRlbT4NCiAgICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00MTYwLDYgKzQxNDksMTggQEAgYmFyDQog ICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICAgPHZhcmxpc3RlbnRy eT4NCisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8 L3Zhcm5hbWU+PC90ZXJtPg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICAgPHBhcmE+DQorICAgICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0 IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIG9ubHkgdGhlIGxhc3QNCisg ICAgICAgIHJlc3VsdCBvZiBhIGNvbWJpbmVkIHF1ZXJ5ICg8bGl0ZXJhbD5c OzwvbGl0ZXJhbD4pIGlzIHNob3duIGluc3RlYWQgb2YNCisgICAgICAgIGFs bCBvZiB0aGVtLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVy YWw+LiAgVGhlIG9mZiBiZWhhdmlvcg0KKyAgICAgICAgaXMgZm9yIGNvbXBh dGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBwc3FsLg0KKyAgICAg ICAgPC9wYXJhPg0KKyAgICAgICAgPC9saXN0aXRlbT4NCisgICAgICA8L3Zh cmxpc3RlbnRyeT4NCisNCisgICAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQ09OVEVYVDwvdmFybmFtZT48L3Rl cm0+DQogICAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgICA8cGFyYT4NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3Bz cWwvY29tbW9uLmMNCmluZGV4IDM1MDM2MDVhN2QuLjQ3ZWFiY2JiOGUgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTM0LDYgKzM0LDggQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCwgYm9vbCAqdHhfZW5kZWQpOw0K IA0KIA0KIC8qDQpAQCAtMzU0LDcgKzM1Niw3IEBAIENoZWNrQ29ubmVjdGlv bih2b2lkKQ0KICAqIFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBm YWxzZSBmb3IgZXJyb3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1B Y2NlcHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9y KQ0KIHsNCiAJYm9vbAkJT0s7DQogDQpAQCAtMzg1LDcgKzM4Nyw3IEBAIEFj Y2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KIAkJCQlicmVh azsNCiAJCX0NCiANCi0JaWYgKCFPSykNCisJaWYgKCFPSyAmJiBzaG93X2Vy cm9yKQ0KIAl7DQogCQljb25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpOw0KIA0KQEAgLTQ3Myw2ICs0NzUsMTggQEAgQ2xlYXJP clNhdmVSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCkNCiAJfQ0KIH0NCiANCisv Kg0KKyAqIENvbnN1bWUgYWxsIHJlc3VsdHMNCisgKi8NCitzdGF0aWMgdm9p ZA0KK0NsZWFyT3JTYXZlQWxsUmVzdWx0cygpDQorew0KKwlQR3Jlc3VsdAkq cmVzdWx0Ow0KKw0KKwl3aGlsZSAoKHJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpKSAhPSBOVUxMKQ0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsNCit9DQorDQogDQogLyoNCiAgKiBQcmludCBtaWNyb3RpbWluZyBvdXRw dXQuICBBbHdheXMgcHJpbnQgcmF3IG1pbGxpc2Vjb25kczsgaWYgdGhlIGlu dGVydmFsDQpAQCAtNTczLDcgKzU4Nyw3IEBAIFBTUUxleGVjKGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiANCi0JaWYg KCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1bHQocmVz LCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzKTsNCiAJ CXJlcyA9IE5VTEw7DQpAQCAtNTk2LDExICs2MTAsOCBAQCBpbnQNCiBQU1FM ZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmludFF1ZXJ5 T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJYm9vbAkJ dGltaW5nID0gcHNldC50aW1pbmc7DQotCVBHcmVzdWx0ICAgKnJlczsNCiAJ ZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KLQlpbnN0cl90aW1lCWJlZm9y ZTsNCi0JaW5zdHJfdGltZQlhZnRlcjsNCi0JRklMRQkgICAqZm91dDsNCisJ aW50CQkJcmVzOw0KIA0KIAlpZiAoIXBzZXQuZGIpDQogCXsNCkBAIC02MDks NzcgKzYyMCwxNCBAQCBQU1FMZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5 LCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlG b3V0KQ0KIAl9DQogDQogCVNldENhbmNlbENvbm4ocHNldC5kYik7DQotDQot CWlmICh0aW1pbmcpDQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9y ZSk7DQotDQotCXJlcyA9IFBRZXhlYyhwc2V0LmRiLCBxdWVyeSk7DQotDQor CXJlcyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKHF1ZXJ5LCAmZWxh cHNlZF9tc2VjLCB0cnVlLCBvcHQsIHByaW50UXVlcnlGb3V0LCBOVUxMKTsN CiAJUmVzZXRDYW5jZWxDb25uKCk7DQogDQotCWlmICghQWNjZXB0UmVzdWx0 KHJlcykpDQotCXsNCi0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlcyk7DQotCQly ZXR1cm4gMDsNCi0JfQ0KLQ0KLQlpZiAodGltaW5nKQ0KLQl7DQotCQlJTlNU Ul9USU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0JCUlOU1RSX1RJTUVfU1VC VFJBQ1QoYWZ0ZXIsIGJlZm9yZSk7DQotCQllbGFwc2VkX21zZWMgPSBJTlNU Ul9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQotCX0NCi0NCi0JLyoNCi0J ICogSWYgU0lHSU5UIGlzIHNlbnQgd2hpbGUgdGhlIHF1ZXJ5IGlzIHByb2Nl c3NpbmcsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZQ0KLQkgKiBjb25zdW1lZC4g IFRoZSB1c2VyJ3MgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRvIGNhbmNlbCB0 aGUgZW50aXJlIHdhdGNoDQotCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNl bnQgY2FuY2VsbGF0aW9uIHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNl Lg0KLQkgKi8NCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQ0KLQl7DQotCQlQUWNs ZWFyKHJlcyk7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlmb3V0ID0gcHJp bnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5Rm91dCA6IHBzZXQucXVlcnlGb3V0 Ow0KLQ0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykpDQotCXsNCi0J CWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLQkJCXByaW50UXVlcnkocmVzLCBv cHQsIGZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOw0KLQkJCWJyZWFrOw0K LQ0KLQkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCWZwcmludGYoZm91 dCwgIiVzXG4lc1xuXG4iLCBvcHQtPnRpdGxlLCBQUWNtZFN0YXR1cyhyZXMp KTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6 DQotCQkJcGdfbG9nX2Vycm9yKCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdp dGggYW4gZW1wdHkgcXVlcnkiKTsNCi0JCQlQUWNsZWFyKHJlcyk7DQotCQkJ cmV0dXJuIC0xOw0KLQ0KLQkJY2FzZSBQR1JFU19DT1BZX09VVDoNCi0JCWNh c2UgUEdSRVNfQ09QWV9JTjoNCi0JCWNhc2UgUEdSRVNfQ09QWV9CT1RIOg0K LQkJCXBnX2xvZ19lcnJvcigiXFx3YXRjaCBjYW5ub3QgYmUgdXNlZCB3aXRo IENPUFkiKTsNCi0JCQlQUWNsZWFyKHJlcyk7DQotCQkJcmV0dXJuIC0xOw0K LQ0KLQkJZGVmYXVsdDoNCi0JCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQg cmVzdWx0IHN0YXR1cyBmb3IgXFx3YXRjaCIpOw0KLQkJCVBRY2xlYXIocmVz KTsNCi0JCQlyZXR1cm4gLTE7DQotCX0NCi0NCi0JUFFjbGVhcihyZXMpOw0K LQ0KLQlmZmx1c2goZm91dCk7DQotDQogCS8qIFBvc3NpYmxlIG1pY3JvdGlt aW5nIG91dHB1dCAqLw0KIAlpZiAodGltaW5nKQ0KIAkJUHJpbnRUaW1pbmco ZWxhcHNlZF9tc2VjKTsNCiANCi0JcmV0dXJuIDE7DQorCXJldHVybiByZXM7 DQogfQ0KIA0KIA0KQEAgLTcxNCw3ICs2NjIsNyBAQCBQcmludE5vdGlmaWNh dGlvbnModm9pZCkNCiAgKiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwg ZmFsc2Ugb3RoZXJ3aXNlLg0KICAqLw0KIHN0YXRpYyBib29sDQotUHJpbnRR dWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cykNCitQcmludFF1 ZXJ5VHVwbGVzKGNvbnN0IFBHcmVzdWx0ICpyZXN1bHRzLCBjb25zdCBwcmlu dFF1ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJ Ym9vbAkJcmVzdWx0ID0gdHJ1ZTsNCiANCkBAIC03NDYsOCArNjk0LDkgQEAg UHJpbnRRdWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cykNCiAJ fQ0KIAllbHNlDQogCXsNCi0JCXByaW50UXVlcnkocmVzdWx0cywgJnBzZXQu cG9wdCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOw0K LQkJaWYgKGZlcnJvcihwc2V0LnF1ZXJ5Rm91dCkpDQorCQlGSUxFICpmb3V0 ID0gcHJpbnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5Rm91dCA6IHBzZXQucXVl cnlGb3V0Ow0KKwkJcHJpbnRRdWVyeShyZXN1bHRzLCBvcHQgPyBvcHQgOiAm cHNldC5wb3B0LCBmb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsNCisJCWlm IChmZXJyb3IoZm91dCkpDQogCQl7DQogCQkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3QgcHJpbnQgcmVzdWx0IHRhYmxlOiAlbSIpOw0KIAkJCXJlc3VsdCA9 IGZhbHNlOw0KQEAgLTg5MiwyMTMgKzg0MSwxMzEgQEAgbG9vcF9leGl0Og0K IA0KIA0KIC8qDQotICogUHJvY2Vzc1Jlc3VsdDogdXRpbGl0eSBmdW5jdGlv biBmb3IgdXNlIGJ5IFNlbmRRdWVyeSgpIG9ubHkNCi0gKg0KLSAqIFdoZW4g b3VyIGNvbW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBhIENPUFkgRlJPTSBTVERJ TiBvciBDT1BZIFRPIFNURE9VVCwNCi0gKiBQUWV4ZWMoKSBoYXMgc3RvcHBl ZCBhdCB0aGUgUEdyZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBz dWNoDQotICogY29tbWFuZC4gIEluIHRoYXQgZXZlbnQsIHdlJ2xsIG1hcnNo YWwgZGF0YSBmb3IgdGhlIENPUFkgYW5kIHRoZW4gY3ljbGUNCi0gKiB0aHJv dWdoIGFueSBzdWJzZXF1ZW50IFBHcmVzdWx0IG9iamVjdHMuDQotICoNCi0g KiBXaGVuIHRoZSBjb21tYW5kIHN0cmluZyBjb250YWluZWQgbm8gc3VjaCBD T1BZIGNvbW1hbmQsIHRoaXMgZnVuY3Rpb24NCi0gKiBkZWdlbmVyYXRlcyB0 byBhbiBBY2NlcHRSZXN1bHQoKSBjYWxsLg0KLSAqDQotICogQ2hhbmdlcyBp dHMgYXJndW1lbnQgdG8gcG9pbnQgdG8gdGhlIGxhc3QgUEdyZXN1bHQgb2Yg dGhlIGNvbW1hbmQgc3RyaW5nLA0KLSAqIG9yIE5VTEwgaWYgdGhhdCByZXN1 bHQgd2FzIGZvciBhIENPUFkgVE8gU1RET1VULiAgKFJldHVybmluZyBOVUxM IHByZXZlbnRzDQotICogdGhlIGNvbW1hbmQgc3RhdHVzIGZyb20gYmVpbmcg cHJpbnRlZCwgd2hpY2ggd2Ugd2FudCBpbiB0aGF0IGNhc2Ugc28gdGhhdA0K LSAqIHRoZSBzdGF0dXMgbGluZSBkb2Vzbid0IGdldCB0YWtlbiBhcyBwYXJ0 IG9mIHRoZSBDT1BZIGRhdGEuKQ0KLSAqDQotICogUmV0dXJucyB0cnVlIG9u IGNvbXBsZXRlIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4gIFBvc3NpYmxl IGZhaWx1cmUgbW9kZXMNCi0gKiBpbmNsdWRlIHB1cmVseSBjbGllbnQtc2lk ZSBwcm9ibGVtczsgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBmb3Ig dGhlDQotICogc2VydmVyLXNpZGUgb3Bpbmlvbi4NCisgKiBNYXJzaGFsIHRo ZSBDT1BZIGRhdGEuICBFaXRoZXIgc3Vicm91dGluZSB3aWxsIGdldCB0aGUN CisgKiBjb25uZWN0aW9uIG91dCBvZiBpdHMgQ09QWSBzdGF0ZSwgdGhlbiBj YWxsIFBRcmVzdWx0U3RhdHVzKCkNCisgKiBvbmNlIGFuZCByZXBvcnQgYW55 IGVycm9yLiBSZXR1cm4gd2hldGhlciBhbGwgd2FzIG9rLg0KKyAqDQorICog Rm9yIENPUFkgT1VULCBkaXJlY3QgdGhlIG91dHB1dCB0byBwc2V0LmNvcHlT dHJlYW0gaWYgaXQncyBzZXQsDQorICogb3RoZXJ3aXNlIHRvIHBzZXQuZ2Zu YW1lIGlmIGl0J3Mgc2V0LCBvdGhlcndpc2UgdG8gcXVlcnlGb3V0Lg0KKyAq IEZvciBDT1BZIElOLCB1c2UgcHNldC5jb3B5U3RyZWFtIGFzIGRhdGEgc291 cmNlIGlmIGl0J3Mgc2V0LA0KKyAqIG90aGVyd2lzZSBjdXJfY21kX3NvdXJj ZS4NCisgKg0KKyAqIFVwZGF0ZSByZXN1bHQgaWYgZnVydGhlciBwcm9jZXNz aW5nIGlzIG5lY2Vzc2FyeSwgb3IgTlVMTCBvdGhlcndpc2UuDQorICogUmV0 dXJuIGEgcmVzdWx0IHdoZW4gcXVlcnlGb3V0IGNhbiBzYWZlbHkgb3V0cHV0 IGEgcmVzdWx0IHN0YXR1czoNCisgKiBvbiBDT1BZIElOLCBvciBvbiBDT1BZ IE9VVCBpZiB3cml0dGVuIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHBzZXQu cXVlcnlGb3V0Lg0KKyAqIFJldHVybmluZyBOVUxMIHByZXZlbnRzIHRoZSBj b21tYW5kIHN0YXR1cyBmcm9tIGJlaW5nIHByaW50ZWQsIHdoaWNoDQorICog d2Ugd2FudCBpZiB0aGUgc3RhdHVzIGxpbmUgZG9lc24ndCBnZXQgdGFrZW4g YXMgcGFydCBvZiB0aGUgQ09QWSBkYXRhLg0KICAqLw0KIHN0YXRpYyBib29s DQotUHJvY2Vzc1Jlc3VsdChQR3Jlc3VsdCAqKnJlc3VsdHMpDQorSGFuZGxl Q29weVJlc3VsdChQR3Jlc3VsdCAqKnJlc3VsdCkNCiB7DQotCWJvb2wJCXN1 Y2Nlc3MgPSB0cnVlOw0KLQlib29sCQlmaXJzdF9jeWNsZSA9IHRydWU7DQor CWJvb2wJCXN1Y2Nlc3M7DQorCUZJTEUJICAgKmNvcHlzdHJlYW07DQorCVBH cmVzdWx0ICAgKmNvcHlfcmVzdWx0Ow0KKwlFeGVjU3RhdHVzVHlwZSByZXN1 bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0dXMoKnJlc3VsdCk7DQogDQotCWZv ciAoOzspDQorCUFzc2VydChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlf T1VUIHx8DQorCQkgICByZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfSU4p Ow0KKw0KKwlTZXRDYW5jZWxDb25uKHBzZXQuZGIpOw0KKw0KKwlpZiAocmVz dWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCkNCiAJew0KLQkJRXhlY1N0 YXR1c1R5cGUgcmVzdWx0X3N0YXR1czsNCi0JCWJvb2wJCWlzX2NvcHk7DQot CQlQR3Jlc3VsdCAgICpuZXh0X3Jlc3VsdDsNCisJCWJvb2wJCW5lZWRfY2xv c2UgPSBmYWxzZTsNCisJCWJvb2wJCWlzX3BpcGUgPSBmYWxzZTsNCiANCi0J CWlmICghQWNjZXB0UmVzdWx0KCpyZXN1bHRzKSkNCisJCWlmIChwc2V0LmNv cHlTdHJlYW0pDQogCQl7DQotCQkJLyoNCi0JCQkgKiBGYWlsdXJlIGF0IHRo aXMgcG9pbnQgaXMgYWx3YXlzIGEgc2VydmVyLXNpZGUgZmFpbHVyZSBvciBh DQotCQkJICogZmFpbHVyZSB0byBzdWJtaXQgdGhlIGNvbW1hbmQgc3RyaW5n LiAgRWl0aGVyIHdheSwgd2UncmUNCi0JCQkgKiBmaW5pc2hlZCB3aXRoIHRo aXMgY29tbWFuZCBzdHJpbmcuDQotCQkJICovDQotCQkJc3VjY2VzcyA9IGZh bHNlOw0KLQkJCWJyZWFrOw0KKwkJCS8qIGludm9rZWQgYnkgXGNvcHkgKi8N CisJCQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtOw0KIAkJfQ0KLQ0K LQkJcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0U3RhdHVzKCpyZXN1bHRzKTsN Ci0JCXN3aXRjaCAocmVzdWx0X3N0YXR1cykNCisJCWVsc2UgaWYgKHBzZXQu Z2ZuYW1lKQ0KIAkJew0KLQkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6DQot CQkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCWNhc2UgUEdSRVNfVFVQ TEVTX09LOg0KLQkJCQlpc19jb3B5ID0gZmFsc2U7DQotCQkJCWJyZWFrOw0K LQ0KLQkJCWNhc2UgUEdSRVNfQ09QWV9PVVQ6DQotCQkJY2FzZSBQR1JFU19D T1BZX0lOOg0KLQkJCQlpc19jb3B5ID0gdHJ1ZTsNCi0JCQkJYnJlYWs7DQot DQotCQkJZGVmYXVsdDoNCi0JCQkJLyogQWNjZXB0UmVzdWx0KCkgc2hvdWxk IGhhdmUgY2F1Z2h0IGFueXRoaW5nIGVsc2UuICovDQotCQkJCWlzX2NvcHkg PSBmYWxzZTsNCi0JCQkJcGdfbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIFBRcmVz dWx0U3RhdHVzOiAlZCIsIHJlc3VsdF9zdGF0dXMpOw0KLQkJCQlicmVhazsN Ci0JCX0NCi0NCi0JCWlmIChpc19jb3B5KQ0KLQkJew0KLQkJCS8qDQotCQkJ ICogTWFyc2hhbCB0aGUgQ09QWSBkYXRhLiAgRWl0aGVyIHN1YnJvdXRpbmUg d2lsbCBnZXQgdGhlDQotCQkJICogY29ubmVjdGlvbiBvdXQgb2YgaXRzIENP UFkgc3RhdGUsIHRoZW4gY2FsbCBQUXJlc3VsdFN0YXR1cygpDQotCQkJICog b25jZSBhbmQgcmVwb3J0IGFueSBlcnJvci4NCi0JCQkgKg0KLQkJCSAqIEZv ciBDT1BZIE9VVCwgZGlyZWN0IHRoZSBvdXRwdXQgdG8gcHNldC5jb3B5U3Ry ZWFtIGlmIGl0J3Mgc2V0LA0KLQkJCSAqIG90aGVyd2lzZSB0byBwc2V0Lmdm bmFtZSBpZiBpdCdzIHNldCwgb3RoZXJ3aXNlIHRvIHF1ZXJ5Rm91dC4NCi0J CQkgKiBGb3IgQ09QWSBJTiwgdXNlIHBzZXQuY29weVN0cmVhbSBhcyBkYXRh IHNvdXJjZSBpZiBpdCdzIHNldCwNCi0JCQkgKiBvdGhlcndpc2UgY3VyX2Nt ZF9zb3VyY2UuDQotCQkJICovDQotCQkJRklMRQkgICAqY29weXN0cmVhbTsN Ci0JCQlQR3Jlc3VsdCAgICpjb3B5X3Jlc3VsdDsNCi0NCi0JCQlTZXRDYW5j ZWxDb25uKHBzZXQuZGIpOw0KLQkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBH UkVTX0NPUFlfT1VUKQ0KKwkJCS8qIGludm9rZWQgYnkgXGcgKi8NCisJCQlp ZiAob3BlblF1ZXJ5T3V0cHV0RmlsZShwc2V0LmdmbmFtZSwNCisJCQkJCQkJ CQkmY29weXN0cmVhbSwgJmlzX3BpcGUpKQ0KIAkJCXsNCi0JCQkJYm9vbAkJ bmVlZF9jbG9zZSA9IGZhbHNlOw0KLQkJCQlib29sCQlpc19waXBlID0gZmFs c2U7DQotDQotCQkJCWlmIChwc2V0LmNvcHlTdHJlYW0pDQotCQkJCXsNCi0J CQkJCS8qIGludm9rZWQgYnkgXGNvcHkgKi8NCi0JCQkJCWNvcHlzdHJlYW0g PSBwc2V0LmNvcHlTdHJlYW07DQotCQkJCX0NCi0JCQkJZWxzZSBpZiAocHNl dC5nZm5hbWUpDQotCQkJCXsNCi0JCQkJCS8qIGludm9rZWQgYnkgXGcgKi8N Ci0JCQkJCWlmIChvcGVuUXVlcnlPdXRwdXRGaWxlKHBzZXQuZ2ZuYW1lLA0K LQkJCQkJCQkJCQkJJmNvcHlzdHJlYW0sICZpc19waXBlKSkNCi0JCQkJCXsN Ci0JCQkJCQluZWVkX2Nsb3NlID0gdHJ1ZTsNCi0JCQkJCQlpZiAoaXNfcGlw ZSkNCi0JCQkJCQkJZGlzYWJsZV9zaWdwaXBlX3RyYXAoKTsNCi0JCQkJCX0N Ci0JCQkJCWVsc2UNCi0JCQkJCQljb3B5c3RyZWFtID0gTlVMTDsJLyogZGlz Y2FyZCBDT1BZIGRhdGEgZW50aXJlbHkgKi8NCi0JCQkJfQ0KLQkJCQllbHNl DQotCQkJCXsNCi0JCQkJCS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBx dWVyeSBvdXRwdXQgc3RyZWFtICovDQotCQkJCQljb3B5c3RyZWFtID0gcHNl dC5xdWVyeUZvdXQ7DQotCQkJCX0NCi0NCi0JCQkJc3VjY2VzcyA9IGhhbmRs ZUNvcHlPdXQocHNldC5kYiwNCi0JCQkJCQkJCQkJY29weXN0cmVhbSwNCi0J CQkJCQkJCQkJJmNvcHlfcmVzdWx0KQ0KLQkJCQkJJiYgc3VjY2Vzcw0KLQkJ CQkJJiYgKGNvcHlzdHJlYW0gIT0gTlVMTCk7DQotDQotCQkJCS8qDQotCQkJ CSAqIFN1cHByZXNzIHN0YXR1cyBwcmludGluZyBpZiB0aGUgcmVwb3J0IHdv dWxkIGdvIHRvIHRoZSBzYW1lDQotCQkJCSAqIHBsYWNlIGFzIHRoZSBDT1BZ IGRhdGEganVzdCB3ZW50LiAgTm90ZSB0aGlzIGRvZXNuJ3QNCi0JCQkJICog cHJldmVudCBlcnJvciByZXBvcnRpbmcsIHNpbmNlIGhhbmRsZUNvcHlPdXQg ZGlkIHRoYXQuDQotCQkJCSAqLw0KLQkJCQlpZiAoY29weXN0cmVhbSA9PSBw c2V0LnF1ZXJ5Rm91dCkNCi0JCQkJew0KLQkJCQkJUFFjbGVhcihjb3B5X3Jl c3VsdCk7DQotCQkJCQljb3B5X3Jlc3VsdCA9IE5VTEw7DQotCQkJCX0NCi0N Ci0JCQkJaWYgKG5lZWRfY2xvc2UpDQotCQkJCXsNCi0JCQkJCS8qIGNsb3Nl IFxnIGFyZ3VtZW50IGZpbGUvcGlwZSAqLw0KLQkJCQkJaWYgKGlzX3BpcGUp DQotCQkJCQl7DQotCQkJCQkJcGNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJ CXJlc3RvcmVfc2lncGlwZV90cmFwKCk7DQotCQkJCQl9DQotCQkJCQllbHNl DQotCQkJCQl7DQotCQkJCQkJZmNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJ fQ0KLQkJCQl9DQorCQkJCW5lZWRfY2xvc2UgPSB0cnVlOw0KKwkJCQlpZiAo aXNfcGlwZSkNCisJCQkJCWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQogCQkJ fQ0KIAkJCWVsc2UNCi0JCQl7DQotCQkJCS8qIENPUFkgSU4gKi8NCi0JCQkJ Y29weXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbSA/IHBzZXQuY29weVN0cmVh bSA6IHBzZXQuY3VyX2NtZF9zb3VyY2U7DQotCQkJCXN1Y2Nlc3MgPSBoYW5k bGVDb3B5SW4ocHNldC5kYiwNCi0JCQkJCQkJCQkgICBjb3B5c3RyZWFtLA0K LQkJCQkJCQkJCSAgIFBRYmluYXJ5VHVwbGVzKCpyZXN1bHRzKSwNCi0JCQkJ CQkJCQkgICAmY29weV9yZXN1bHQpICYmIHN1Y2Nlc3M7DQotCQkJfQ0KLQkJ CVJlc2V0Q2FuY2VsQ29ubigpOw0KLQ0KLQkJCS8qDQotCQkJICogUmVwbGFj ZSB0aGUgUEdSRVNfQ09QWV9PVVQvSU4gcmVzdWx0IHdpdGggQ09QWSBjb21t YW5kJ3MgZXhpdA0KLQkJCSAqIHN0YXR1cywgb3Igd2l0aCBOVUxMIGlmIHdl IHdhbnQgdG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55dGhpbmcuDQotCQkJICov DQotCQkJUFFjbGVhcigqcmVzdWx0cyk7DQotCQkJKnJlc3VsdHMgPSBjb3B5 X3Jlc3VsdDsNCisJCQkJY29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2NhcmQg Q09QWSBkYXRhIGVudGlyZWx5ICovDQogCQl9DQotCQllbHNlIGlmIChmaXJz dF9jeWNsZSkNCisJCWVsc2UNCiAJCXsNCi0JCQkvKiBmYXN0IHBhdGg6IG5v IENPUFkgY29tbWFuZHM7IFBRZXhlYyB2aXNpdGVkIGFsbCByZXN1bHRzICov DQotCQkJYnJlYWs7DQorCQkJLyogZmFsbCBiYWNrIHRvIHRoZSBnZW5lcmlj IHF1ZXJ5IG91dHB1dCBzdHJlYW0gKi8NCisJCQljb3B5c3RyZWFtID0gcHNl dC5xdWVyeUZvdXQ7DQogCQl9DQogDQorCQlzdWNjZXNzID0gaGFuZGxlQ29w eU91dChwc2V0LmRiLA0KKwkJCQkJCQkJY29weXN0cmVhbSwNCisJCQkJCQkJ CSZjb3B5X3Jlc3VsdCkNCisJCQkmJiAoY29weXN0cmVhbSAhPSBOVUxMKTsN CisNCiAJCS8qDQotCQkgKiBDaGVjayBQUWdldFJlc3VsdCgpIGFnYWluLiAg SW4gdGhlIHR5cGljYWwgY2FzZSBvZiBhIHNpbmdsZS1jb21tYW5kDQotCQkg KiBzdHJpbmcsIGl0IHdpbGwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2UsIHdl J2xsIGhhdmUgb3RoZXIgcmVzdWx0cw0KLQkJICogdG8gcHJvY2VzcyB0aGF0 IG1heSBpbmNsdWRlIG90aGVyIENPUFlzLiAgV2Uga2VlcCB0aGUgbGFzdCBy ZXN1bHQuDQorCQkgKiBTdXBwcmVzcyBzdGF0dXMgcHJpbnRpbmcgaWYgdGhl IHJlcG9ydCB3b3VsZCBnbyB0byB0aGUgc2FtZQ0KKwkJICogcGxhY2UgYXMg dGhlIENPUFkgZGF0YSBqdXN0IHdlbnQuICBOb3RlIHRoaXMgZG9lc24ndA0K KwkJICogcHJldmVudCBlcnJvciByZXBvcnRpbmcsIHNpbmNlIGhhbmRsZUNv cHlPdXQgZGlkIHRoYXQuDQogCQkgKi8NCi0JCW5leHRfcmVzdWx0ID0gUFFn ZXRSZXN1bHQocHNldC5kYik7DQotCQlpZiAoIW5leHRfcmVzdWx0KQ0KLQkJ CWJyZWFrOw0KKwkJaWYgKGNvcHlzdHJlYW0gPT0gcHNldC5xdWVyeUZvdXQp DQorCQl7DQorCQkJUFFjbGVhcihjb3B5X3Jlc3VsdCk7DQorCQkJY29weV9y ZXN1bHQgPSBOVUxMOw0KKwkJfQ0KIA0KLQkJUFFjbGVhcigqcmVzdWx0cyk7 DQotCQkqcmVzdWx0cyA9IG5leHRfcmVzdWx0Ow0KLQkJZmlyc3RfY3ljbGUg PSBmYWxzZTsNCisJCWlmIChuZWVkX2Nsb3NlKQ0KKwkJew0KKwkJCS8qIGNs b3NlIFxnIGFyZ3VtZW50IGZpbGUvcGlwZSAqLw0KKwkJCWlmIChpc19waXBl KQ0KKwkJCXsNCisJCQkJcGNsb3NlKGNvcHlzdHJlYW0pOw0KKwkJCQlyZXN0 b3JlX3NpZ3BpcGVfdHJhcCgpOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0K KwkJCQlmY2xvc2UoY29weXN0cmVhbSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQor CWVsc2UNCisJew0KKwkJLyogQ09QWSBJTiAqLw0KKwkJY29weXN0cmVhbSA9 IHBzZXQuY29weVN0cmVhbSA/IHBzZXQuY29weVN0cmVhbSA6IHBzZXQuY3Vy X2NtZF9zb3VyY2U7DQorCQlzdWNjZXNzID0gaGFuZGxlQ29weUluKHBzZXQu ZGIsDQorCQkJCQkJCSAgIGNvcHlzdHJlYW0sDQorCQkJCQkJCSAgIFBRYmlu YXJ5VHVwbGVzKCpyZXN1bHQpLA0KKwkJCQkJCQkgICAmY29weV9yZXN1bHQp Ow0KIAl9DQogDQotCVNldFJlc3VsdFZhcmlhYmxlcygqcmVzdWx0cywgc3Vj Y2Vzcyk7DQotDQotCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9t IGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLw0KLQlpZiAoIWZpcnN0X2N5Y2xl ICYmICFDaGVja0Nvbm5lY3Rpb24oKSkNCi0JCXJldHVybiBmYWxzZTsNCisJ UmVzZXRDYW5jZWxDb25uKCk7DQorCVBRY2xlYXIoKnJlc3VsdCk7DQorCSpy ZXN1bHQgPSBjb3B5X3Jlc3VsdDsNCiANCiAJcmV0dXJuIHN1Y2Nlc3M7DQog fQ0KIA0KLQ0KIC8qDQogICogUHJpbnRRdWVyeVN0YXR1czogcmVwb3J0IGNv bW1hbmQgc3RhdHVzIGFzIHJlcXVpcmVkDQogICoNCi0gKiBOb3RlOiBVdGls aXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgUHJpbnRRdWVyeVJlc3VsdHMoKSBv bmx5Lg0KKyAqIE5vdGU6IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBI YW5kbGVRdWVyeVJlc3VsdCgpIG9ubHkuDQogICovDQogc3RhdGljIHZvaWQN Ci1QcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KK1ByaW50 UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3VsdHMsIEZJTEUgKnByaW50UXVl cnlGb3V0KQ0KIHsNCiAJY2hhcgkJYnVmWzE2XTsNCisJRklMRQkgICAqZm91 dCA9IHByaW50UXVlcnlGb3V0ID8gcHJpbnRRdWVyeUZvdXQgOiBwc2V0LnF1 ZXJ5Rm91dDsNCiANCiAJaWYgKCFwc2V0LnF1aWV0KQ0KIAl7DQogCQlpZiAo cHNldC5wb3B0LnRvcHQuZm9ybWF0ID09IFBSSU5UX0hUTUwpDQogCQl7DQot CQkJZnB1dHMoIjxwPiIsIHBzZXQucXVlcnlGb3V0KTsNCi0JCQlodG1sX2Vz Y2FwZWRfcHJpbnQoUFFjbWRTdGF0dXMocmVzdWx0cyksIHBzZXQucXVlcnlG b3V0KTsNCi0JCQlmcHV0cygiPC9wPlxuIiwgcHNldC5xdWVyeUZvdXQpOw0K KwkJCWZwdXRzKCI8cD4iLCBmb3V0KTsNCisJCQlodG1sX2VzY2FwZWRfcHJp bnQoUFFjbWRTdGF0dXMocmVzdWx0cyksIGZvdXQpOw0KKwkJCWZwdXRzKCI8 L3A+XG4iLCBmb3V0KTsNCiAJCX0NCiAJCWVsc2UNCi0JCQlmcHJpbnRmKHBz ZXQucXVlcnlGb3V0LCAiJXNcbiIsIFBRY21kU3RhdHVzKHJlc3VsdHMpKTsN CisJCQlmcHJpbnRmKGZvdXQsICIlc1xuIiwgUFFjbWRTdGF0dXMocmVzdWx0 cykpOw0KIAl9DQogDQogCWlmIChwc2V0LmxvZ2ZpbGUpDQpAQCAtMTExMCw0 MyArOTc3LDUwIEBAIFByaW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3Vs dHMpDQogDQogDQogLyoNCi0gKiBQcmludFF1ZXJ5UmVzdWx0czogcHJpbnQg b3V0IChvciBzdG9yZSBvciBleGVjdXRlKSBxdWVyeSByZXN1bHRzIGFzIHJl cXVpcmVkDQotICoNCi0gKiBOb3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1 c2UgYnkgU2VuZFF1ZXJ5KCkgb25seS4NCisgKiBIYW5kbGVRdWVyeVJlc3Vs dDogcHJpbnQgb3V0LCBzdG9yZSBvciBleGVjdXRlIG9uZSBxdWVyeSByZXN1 bHQNCisgKiBhcyByZXF1aXJlZC4NCiAgKg0KICAqIFJldHVybnMgdHJ1ZSBp ZiB0aGUgcXVlcnkgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhl cndpc2UuDQogICovDQogc3RhdGljIGJvb2wNCi1QcmludFF1ZXJ5UmVzdWx0 cyhQR3Jlc3VsdCAqcmVzdWx0cykNCitIYW5kbGVRdWVyeVJlc3VsdChQR3Jl c3VsdCAqcmVzdWx0LCBib29sIGxhc3QsIGJvb2wgaXNfd2F0Y2gsIGNvbnN0 IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVyeUZvdXQpDQog ew0KIAlib29sCQlzdWNjZXNzOw0KIAljb25zdCBjaGFyICpjbWRzdGF0dXM7 DQogDQotCWlmICghcmVzdWx0cykNCisJaWYgKHJlc3VsdCA9PSBOVUxMKQ0K IAkJcmV0dXJuIGZhbHNlOw0KIA0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVz KHJlc3VsdHMpKQ0KKwlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkp DQogCXsNCiAJCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KIAkJCS8qIHN0b3Jl IG9yIGV4ZWN1dGUgb3IgcHJpbnQgdGhlIGRhdGEgLi4uICovDQotCQkJaWYg KHBzZXQuZ3NldF9wcmVmaXgpDQotCQkJCXN1Y2Nlc3MgPSBTdG9yZVF1ZXJ5 VHVwbGUocmVzdWx0cyk7DQotCQkJZWxzZSBpZiAocHNldC5nZXhlY19mbGFn KQ0KLQkJCQlzdWNjZXNzID0gRXhlY1F1ZXJ5VHVwbGVzKHJlc3VsdHMpOw0K LQkJCWVsc2UgaWYgKHBzZXQuY3Jvc3N0YWJfZmxhZykNCi0JCQkJc3VjY2Vz cyA9IFByaW50UmVzdWx0c0luQ3Jvc3N0YWIocmVzdWx0cyk7DQorCQkJaWYg KGxhc3QgJiYgcHNldC5nc2V0X3ByZWZpeCkNCisJCQkJc3VjY2VzcyA9IFN0 b3JlUXVlcnlUdXBsZShyZXN1bHQpOw0KKwkJCWVsc2UgaWYgKGxhc3QgJiYg cHNldC5nZXhlY19mbGFnKQ0KKwkJCQlzdWNjZXNzID0gRXhlY1F1ZXJ5VHVw bGVzKHJlc3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCAmJiBwc2V0LmNyb3Nz dGFiX2ZsYWcpDQorCQkJCXN1Y2Nlc3MgPSBQcmludFJlc3VsdHNJbkNyb3Nz dGFiKHJlc3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCB8fCBwc2V0LnNob3df YWxsX3Jlc3VsdHMpDQorCQkJCXN1Y2Nlc3MgPSBQcmludFF1ZXJ5VHVwbGVz KHJlc3VsdCwgb3B0LCBwcmludFF1ZXJ5Rm91dCk7DQogCQkJZWxzZQ0KLQkJ CQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHRzKTsNCisJCQkJ c3VjY2VzcyA9IHRydWU7DQorDQogCQkJLyogaWYgaXQncyBJTlNFUlQvVVBE QVRFL0RFTEVURSBSRVRVUk5JTkcsIGFsc28gcHJpbnQgc3RhdHVzICovDQot CQkJY21kc3RhdHVzID0gUFFjbWRTdGF0dXMocmVzdWx0cyk7DQotCQkJaWYg KHN0cm5jbXAoY21kc3RhdHVzLCAiSU5TRVJUIiwgNikgPT0gMCB8fA0KLQkJ CQlzdHJuY21wKGNtZHN0YXR1cywgIlVQREFURSIsIDYpID09IDAgfHwNCi0J CQkJc3RybmNtcChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9PSAwKQ0KLQkJ CQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMpOw0KKwkJCWlmIChsYXN0IHx8 IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJCQl7DQorCQkJCWNtZHN0YXR1 cyA9IFBRY21kU3RhdHVzKHJlc3VsdCk7DQorCQkJCWlmIChzdHJuY21wKGNt ZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAgfHwNCisJCQkJCXN0cm5jbXAo Y21kc3RhdHVzLCAiVVBEQVRFIiwgNikgPT0gMCB8fA0KKwkJCQkJc3RybmNt cChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9PSAwKQ0KKwkJCQkJUHJpbnRR dWVyeVN0YXR1cyhyZXN1bHQsIHByaW50UXVlcnlGb3V0KTsNCisJCQl9DQor DQogCQkJYnJlYWs7DQogDQogCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQot CQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHRzKTsNCisJCQlpZiAobGFzdCB8 fCBwc2V0LnNob3dfYWxsX3Jlc3VsdHMpDQorCQkJCVByaW50UXVlcnlTdGF0 dXMocmVzdWx0LCBwcmludFF1ZXJ5Rm91dCk7DQogCQkJc3VjY2VzcyA9IHRy dWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTE1Niw3ICsxMDMwLDcgQEAgUHJp bnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogDQogCQljYXNl IFBHUkVTX0NPUFlfT1VUOg0KIAkJY2FzZSBQR1JFU19DT1BZX0lOOg0KLQkJ CS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJCS8qIG5vdGhpbmcgdG8g ZG8gaGVyZTogYWxyZWFkeSBwcm9jZXNzZWQgKi8NCiAJCQlzdWNjZXNzID0g dHJ1ZTsNCiAJCQlicmVhazsNCiANCkBAIC0xMTY5LDE1ICsxMDQzLDI2MyBA QCBQcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiAJCWRl ZmF1bHQ6DQogCQkJc3VjY2VzcyA9IGZhbHNlOw0KIAkJCXBnX2xvZ19lcnJv cigidW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1czogJWQiLA0KLQkJCQkJCSBQ UXJlc3VsdFN0YXR1cyhyZXN1bHRzKSk7DQorCQkJCQkJIFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCkpOw0KIAkJCWJyZWFrOw0KIAl9DQogDQotCWZmbHVzaChw c2V0LnF1ZXJ5Rm91dCk7DQorCWZmbHVzaChwcmludFF1ZXJ5Rm91dCA/IHBy aW50UXVlcnlGb3V0IDogcHNldC5xdWVyeUZvdXQpOw0KIA0KIAlyZXR1cm4g c3VjY2VzczsNCiB9DQogDQorLyoNCisgKiBEYXRhIHN0cnVjdHVyZSBhbmQg ZnVuY3Rpb25zIHRvIHJlY29yZCBub3RpY2VzIHdoaWxlIHRoZXkgYXJlDQor ICogZW1pdHRlZCwgc28gdGhhdCB0aGV5IGNhbiBiZSBzaG93biBsYXRlci4N CisgKg0KKyAqIFdlIG5lZWQgdG8ga25vdyB3aGljaCByZXN1bHQgaXMgbGFz dCwgd2hpY2ggcmVxdWlyZXMgdG8gZXh0cmFjdA0KKyAqIG9uZSByZXN1bHQg aW4gYWR2YW5jZSwgaGVuY2UgdHdvIGJ1ZmZlcnMgYXJlIG5lZWRlZC4NCisg Ki8NCit0eXBlZGVmIHN0cnVjdCB7DQorCVBRRXhwQnVmZmVyRGF0YQltZXNz YWdlc1syXTsNCisJaW50CQkJCWN1cnJlbnQ7DQorfSB0X25vdGljZV9tZXNz YWdlczsNCisNCisvKg0KKyAqIFN0b3JlIG5vdGljZXMgaW4gYXBwcm9wcmlh dGUgYnVmZmVyLCBmb3IgbGF0ZXIgZGlzcGxheS4NCisgKi8NCitzdGF0aWMg dm9pZA0KK0FwcGVuZE5vdGljZU1lc3NhZ2Uodm9pZCAqYXJnLCBjb25zdCBj aGFyICptc2cpDQorew0KKwl0X25vdGljZV9tZXNzYWdlcyAqbm90ZXMgPSAo dF9ub3RpY2VfbWVzc2FnZXMqKSBhcmc7DQorCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZub3Rlcy0+bWVzc2FnZXNbbm90ZXMtPmN1cnJlbnRdLCBtc2cpOw0K K30NCisNCisvKg0KKyAqIFNob3cgbm90aWNlcyBzdG9yZWQgaW4gYnVmZmVy LCB3aGljaCBpcyB0aGVuIHJlc2V0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkDQor U2hvd05vdGljZU1lc3NhZ2UodF9ub3RpY2VfbWVzc2FnZXMgKm5vdGVzKQ0K K3sNCisJUFFFeHBCdWZmZXJEYXRhCSpjdXJyZW50ID0gJm5vdGVzLT5tZXNz YWdlc1tub3Rlcy0+Y3VycmVudF07DQorCWlmICgqY3VycmVudC0+ZGF0YSAh PSAnXDAnKQ0KKwkJcGdfbG9nX2luZm8oIiVzIiwgY3VycmVudC0+ZGF0YSk7 DQorCXJlc2V0UFFFeHBCdWZmZXIoY3VycmVudCk7DQorfQ0KKw0KKy8qDQor ICogU2VuZFF1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHM6IHV0aWxpdHkgZnVuY3Rp b24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKQ0KKyAqIGFuZCBQU1FMZXhlY1dh dGNoKCkuDQorICoNCisgKiBTZW5kcyBxdWVyeSBhbmQgY3ljbGVzIHRocm91 Z2ggUEdyZXN1bHQgb2JqZWN0cy4NCisgKg0KKyAqIFdoZW4gbm90IHVuZGVy IFx3YXRjaCBhbmQgaWYgb3VyIGNvbW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBh IENPUFkgRlJPTSBTVERJTg0KKyAqIG9yIENPUFkgVE8gU1RET1VULCB0aGUg UEdyZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbW1hbmRzIG11c3Qg YmUNCisgKiBwcm9jZXNzZWQgYnkgcHJvdmlkaW5nIGFuIGlucHV0IG9yIG91 dHB1dCBzdHJlYW0uICBJbiB0aGF0IGV2ZW50LCB3ZSdsbA0KKyAqIG1hcnNo YWwgZGF0YSBmb3IgdGhlIENPUFkuDQorICoNCisgKiBGb3Igb3RoZXIgY29t bWFuZHMsIHRoZSByZXN1bHRzIGFyZSBwcm9jZXNzZWQgbm9ybWFsbHksIGRl cGVuZGluZyBvbiB0aGVpcg0KKyAqIHN0YXR1cy4NCisgKg0KKyAqIFJldHVy bnMgMSBvbiBjb21wbGV0ZSBzdWNjZXNzLCAwIG9uIGludGVycnVwdCBhbmQg LTEgb3IgZXJyb3JzLiAgUG9zc2libGUNCisgKiBmYWlsdXJlIG1vZGVzIGlu Y2x1ZGUgcHVyZWx5IGNsaWVudC1zaWRlIHByb2JsZW1zOyBjaGVjayB0aGUg dHJhbnNhY3Rpb24NCisgKiBzdGF0dXMgZm9yIHRoZSBzZXJ2ZXItc2lkZSBv cGluaW9uLg0KKyAqDQorICogTm90ZSB0aGF0IG9uIGEgY29tYmluZWQgcXVl cnksIGZhaWx1cmUgZG9lcyBub3QgbWVhbiB0aGF0IG5vdGhpbmcgd2FzDQor ICogY29tbWl0dGVkLg0KKyAqLw0KK3N0YXRpYyBpbnQNCitTZW5kUXVlcnlB bmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpw ZWxhcHNlZF9tc2VjLA0KKwlib29sIGlzX3dhdGNoLCBjb25zdCBwcmludFF1 ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0LCBib29sICp0eF9l bmRlZCkNCit7DQorCWJvb2wJCQkJdGltaW5nID0gcHNldC50aW1pbmc7DQor CWJvb2wJCQkJc3VjY2VzczsNCisJaW5zdHJfdGltZQkJCWJlZm9yZTsNCisJ UEdyZXN1bHQJCSAgICpyZXN1bHQ7DQorCXRfbm90aWNlX21lc3NhZ2VzCW5v dGVzOw0KKw0KKwlpZiAodGltaW5nKQ0KKwkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChiZWZvcmUpOw0KKw0KKwlzdWNjZXNzID0gUFFzZW5kUXVlcnkocHNl dC5kYiwgcXVlcnkpOw0KKw0KKwlpZiAoIXN1Y2Nlc3MpDQorCXsNCisJCWNv bnN0IGNoYXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2UocHNldC5kYik7DQor DQorCQlpZiAoc3RybGVuKGVycm9yKSkNCisJCQlwZ19sb2dfaW5mbygiJXMi LCBlcnJvcik7DQorDQorCQlDaGVja0Nvbm5lY3Rpb24oKTsNCisNCisJCXJl dHVybiAtMTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBJZiBTSUdJTlQgaXMgc2Vu dCB3aGlsZSB0aGUgcXVlcnkgaXMgcHJvY2Vzc2luZywgdGhlIGludGVycnVw dCB3aWxsIGJlDQorCSAqIGNvbnN1bWVkLiAgVGhlIHVzZXIncyBpbnRlbnRp b24sIHRob3VnaCwgaXMgdG8gY2FuY2VsIHRoZSBlbnRpcmUgd2F0Y2gNCisJ ICogcHJvY2Vzcywgc28gZGV0ZWN0IGEgc2VudCBjYW5jZWxsYXRpb24gcmVx dWVzdCBhbmQgZXhpdCBpbiB0aGlzIGNhc2UuDQorCSAqLw0KKwlpZiAoaXNf d2F0Y2ggJiYgY2FuY2VsX3ByZXNzZWQpDQorCXsNCisJCUNsZWFyT3JTYXZl QWxsUmVzdWx0cygpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJLyogaW50 ZXJjZXB0IG5vdGljZXMgKi8NCisJbm90ZXMuY3VycmVudCA9IDA7DQorCWlu aXRQUUV4cEJ1ZmZlcigmbm90ZXMubWVzc2FnZXNbMF0pOw0KKwlpbml0UFFF eHBCdWZmZXIoJm5vdGVzLm1lc3NhZ2VzWzFdKTsNCisJUFFzZXROb3RpY2VQ cm9jZXNzb3IocHNldC5kYiwgQXBwZW5kTm90aWNlTWVzc2FnZSwgJm5vdGVz KTsNCisNCisJLyogZmlyc3QgcmVzdWx0ICovDQorCXJlc3VsdCA9IFBRZ2V0 UmVzdWx0KHBzZXQuZGIpOw0KKw0KKwl3aGlsZSAocmVzdWx0ICE9IE5VTEwp DQorCXsNCisJCUV4ZWNTdGF0dXNUeXBlIHJlc3VsdF9zdGF0dXM7DQorCQlQ R3Jlc3VsdCAgICpuZXh0X3Jlc3VsdDsNCisJCWJvb2wJCWxhc3Q7DQorDQor CQlpZiAoIUFjY2VwdFJlc3VsdChyZXN1bHQsIGZhbHNlKSkNCisJCXsNCisJ CQkvKg0KKwkJCSAqIFNvbWUgZXJyb3Igb2NjdXJlZCwgZWl0aGVyIGEgc2Vy dmVyLXNpZGUgZmFpbHVyZSBvcg0KKwkJCSAqIGEgZmFpbHVyZSB0byBzdWJt aXQgdGhlIGNvbW1hbmQgc3RyaW5nLiAgUmVjb3JkIHRoYXQuDQorCQkJICov DQorCQkJY29uc3QgY2hhciAqZXJyb3IgPSBQUWVycm9yTWVzc2FnZShwc2V0 LmRiKTsNCisNCisJCQlTaG93Tm90aWNlTWVzc2FnZSgmbm90ZXMpOw0KKwkJ CWlmIChzdHJsZW4oZXJyb3IpKQ0KKwkJCXsNCisJCQkJcGdfbG9nX2luZm8o IiVzIiwgZXJyb3IpOw0KKw0KKwkJCQkvKg0KKwkJCQkgKiBPbiBjb25uZWN0 aW9uIGxvc3MgYW5vdGhlciByZXN1bHQgd2l0aCBhIG1lc3NhZ2Ugd2lsbCBi ZQ0KKwkJCQkgKiBnZW5lcmF0ZWQsIHdlIGRvIG5vdCB3YW50IHRvIHNlZSB0 aGlzIGVycm9yIGFnYWluLg0KKwkJCQkgKi8NCisJCQkJUFFjbGVhckVycm9y TWVzc2FnZShwc2V0LmRiKTsNCisJCQl9DQorCQkJQ2hlY2tDb25uZWN0aW9u KCk7DQorCQkJaWYgKCFpc193YXRjaCkNCisJCQkJU2V0UmVzdWx0VmFyaWFi bGVzKHJlc3VsdCwgZmFsc2UpOw0KKw0KKwkJCS8qIGtlZXAgdGhlIHJlc3Vs dCBzdGF0dXMgYmVmb3JlIGNsZWFyaW5nIGl0ICovDQorCQkJcmVzdWx0X3N0 YXR1cyA9IFBRcmVzdWx0U3RhdHVzKHJlc3VsdCk7DQorCQkJQ2xlYXJPclNh dmVSZXN1bHQocmVzdWx0KTsNCisJCQlyZXN1bHQgPSBOVUxMOw0KKwkJCXN1 Y2Nlc3MgPSBmYWxzZTsNCisNCisJCQkvKiBzd2l0Y2ggdG8gbmV4dCByZXN1 bHQgKi8NCisJCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX0JP VEggfHwNCisJCQkJcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCB8 fA0KKwkJCQlyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfSU4pDQorCQkJ CS8qDQorCQkJCSAqIEZvciBzb21lIG9ic2N1cmUgcmVhc29uIFBRZ2V0UmVz dWx0IGRvZXMgKm5vdCogcmV0dXJuIGEgTlVMTCBpbiBjb3B5DQorCQkJCSAq IGNhc2VzIGRlc3BpdGUgdGhlIHJlc3VsdCBoYXZpbmcgYmVlbiBjbGVhcmVk LCBidXQga2VlcHMgcmV0dXJuaW5nIGFuDQorCQkJCSAqICJlbXB0eSIgcmVz dWx0IHRoYXQgd2UgaGF2ZSB0byBpZ25vcmUgbWFudWFsbHkuDQorCQkJCSAq Lw0KKwkJCQk7DQorCQkJZWxzZQ0KKwkJCQlyZXN1bHQgPSBQUWdldFJlc3Vs dChwc2V0LmRiKTsNCisNCisJCQljb250aW51ZTsNCisJCX0NCisJCWVsc2Ug aWYgKHR4X2VuZGVkICE9IE5VTEwgJiYgISAqdHhfZW5kZWQpDQorCQl7DQor CQkJLyogb24gc3VjY2VzcywgdGVsbCB3aGV0aGVyIHRoZSAiY3VycmVudCIg dHJhbnNhY3Rpb24gc2VxdWVuY2UgZW5kZWQgKi8NCisJCQljb25zdCBjaGFy ICpjbWQgPSBQUWNtZFN0YXR1cyhyZXN1bHQpOw0KKwkJCSp0eF9lbmRlZCA9 IHN0cmNtcChjbWQsICJDT01NSVQiKSA9PSAwIHx8IHN0cmNtcChjbWQsICJS T0xMQkFDSyIpID09IDAgfHwNCisJCQkJc3RyY21wKGNtZCwgIlNBVkVQT0lO VCIpID09IDAgfHwgc3RyY21wKGNtZCwgIlJFTEVBU0UiKSA9PSAwOw0KKwkJ fQ0KKw0KKwkJcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0U3RhdHVzKHJlc3Vs dCk7DQorDQorCQkvKiBtdXN0IGhhbmRsZSBDT1BZIGJlZm9yZSBjaGFuZ2lu ZyB0aGUgY3VycmVudCByZXN1bHQgKi8NCisJCUFzc2VydChyZXN1bHRfc3Rh dHVzICE9IFBHUkVTX0NPUFlfQk9USCk7DQorCQlpZiAocmVzdWx0X3N0YXR1 cyA9PSBQR1JFU19DT1BZX0lOIHx8DQorCQkJcmVzdWx0X3N0YXR1cyA9PSBQ R1JFU19DT1BZX09VVCkNCisJCXsNCisJCQlTaG93Tm90aWNlTWVzc2FnZSgm bm90ZXMpOw0KKw0KKwkJCWlmIChpc193YXRjaCkNCisJCQl7DQorCQkJCUNs ZWFyT3JTYXZlQWxsUmVzdWx0cygpOw0KKwkJCQlwZ19sb2dfZXJyb3IoIlxc d2F0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIik7DQorCQkJCXJldHVy biAtMTsNCisJCQl9DQorDQorCQkJLyogdXNlIG5vcm1hbCBub3RpY2UgcHJv Y2Vzc29yIGR1cmluZyBDT1BZICovDQorCQkJUFFzZXROb3RpY2VQcm9jZXNz b3IocHNldC5kYiwgTm90aWNlUHJvY2Vzc29yLCBOVUxMKTsNCisNCisJCQlz dWNjZXNzICY9IEhhbmRsZUNvcHlSZXN1bHQoJnJlc3VsdCk7DQorDQorCQkJ UFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5kYiwgQXBwZW5kTm90aWNlTWVz c2FnZSwgJm5vdGVzKTsNCisJCX0NCisNCisJCS8qDQorCQkgKiBDaGVjayBQ UWdldFJlc3VsdCgpIGFnYWluLiAgSW4gdGhlIHR5cGljYWwgY2FzZSBvZiBh IHNpbmdsZS1jb21tYW5kDQorCQkgKiBzdHJpbmcsIGl0IHdpbGwgcmV0dXJu IE5VTEwuICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgb3RoZXIgcmVzdWx0cw0K KwkJICogdG8gcHJvY2Vzcy4gV2UgbmVlZCB0byBkbyB0aGF0IHRvIGNoZWNr IHdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdC4NCisJCSAqLw0KKwkJbm90ZXMu Y3VycmVudCBePSAxOw0KKwkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChw c2V0LmRiKTsNCisJCW5vdGVzLmN1cnJlbnQgXj0gMTsNCisJCWxhc3QgPSAo bmV4dF9yZXN1bHQgPT0gTlVMTCk7DQorDQorCQkvKg0KKwkJICogR2V0IHRp bWluZyBtZWFzdXJlIGJlZm9yZSBwcmludGluZyB0aGUgbGFzdCByZXN1bHQu DQorCQkgKg0KKwkJICogSXQgd2lsbCBpbmNsdWRlIHRoZSBkaXNwbGF5IG9m IHByZXZpb3VzIHJlc3VsdHMsIGlmIGFueS4NCisJCSAqIFRoaXMgY2Fubm90 IGJlIGhlbHBlZCBiZWNhdXNlIHRoZSBzZXJ2ZXIgZ29lcyBvbiBwcm9jZXNz aW5nDQorCQkgKiBmdXJ0aGVyIHF1ZXJpZXMgYW55d2F5IHdoaWxlIHRoZSBw cmV2aW91cyBvbmVzIGFyZSBiZWluZyBkaXNwbGF5ZWQuDQorCQkgKiBUaGUg cGFyYWxsZWwgZXhlY3V0aW9uIG9mIHRoZSBjbGllbnQgZGlzcGxheSBoaWRl cyB0aGUgc2VydmVyIHRpbWUNCisJCSAqIHdoZW4gaXQgaXMgc2hvcnRlci4N CisJCSAqDQorCQkgKiBXaXRoIGNvbWJpbmVkIHF1ZXJpZXMsIHRpbWluZyBt dXN0IGJlIHVuZGVyc3Rvb2QgYXMgYW4gdXBwZXIgYm91bmQNCisJCSAqIG9m IHRoZSB0aW1lIHNwZW50IHByb2Nlc3NpbmcgdGhlbS4NCisJCSAqLw0KKwkJ aWYgKGxhc3QgJiYgdGltaW5nKQ0KKwkJew0KKwkJCWluc3RyX3RpbWUJbm93 Ow0KKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCisJCQlJTlNU Ul9USU1FX1NVQlRSQUNUKG5vdywgYmVmb3JlKTsNCisJCQkqcGVsYXBzZWRf bXNlYyA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKG5vdyk7DQorCQl9DQor DQorCQkvKiBub3RpY2VzIGFscmVhZHkgc2hvd24gYWJvdmUgZm9yIGNvcHkg Ki8NCisJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rlcyk7DQorDQorCQkvKiB0 aGlzIG1heSBvciBtYXkgbm90IHByaW50IHNvbWV0aGluZyBkZXBlbmRpbmcg b24gc2V0dGluZ3MgKi8NCisJCWlmIChyZXN1bHQgIT0gTlVMTCkNCisJCQlz dWNjZXNzICY9IEhhbmRsZVF1ZXJ5UmVzdWx0KHJlc3VsdCwgbGFzdCwgZmFs c2UsIG9wdCwgcHJpbnRRdWVyeUZvdXQpOw0KKw0KKwkJLyogc2V0IHZhcmlh YmxlcyBvbiBsYXN0IHJlc3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQorCQlp ZiAoIWlzX3dhdGNoICYmIGxhc3QgJiYgc3VjY2VzcykNCisJCQlTZXRSZXN1 bHRWYXJpYWJsZXMocmVzdWx0LCB0cnVlKTsNCisNCisJCUNsZWFyT3JTYXZl UmVzdWx0KHJlc3VsdCk7DQorCQlub3Rlcy5jdXJyZW50IF49IDE7DQorCQly ZXN1bHQgPSBuZXh0X3Jlc3VsdDsNCisNCisJCWlmIChjYW5jZWxfcHJlc3Nl ZCkNCisJCXsNCisJCQlDbGVhck9yU2F2ZUFsbFJlc3VsdHMoKTsNCisJCQli cmVhazsNCisJCX0NCisJfQ0KKw0KKwkvKiByZXNldCBub3RpY2UgaG9vayAq Lw0KKwlQUXNldE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBOb3RpY2VQcm9j ZXNzb3IsIE5VTEwpOw0KKwl0ZXJtUFFFeHBCdWZmZXIoJm5vdGVzLm1lc3Nh Z2VzWzBdKTsNCisJdGVybVBRRXhwQnVmZmVyKCZub3Rlcy5tZXNzYWdlc1sx XSk7DQorDQorCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNv bm4gbG9zcyBkdXJpbmcgQ09QWSAqLw0KKwlpZiAoIUNoZWNrQ29ubmVjdGlv bigpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlyZXR1cm4gY2FuY2VsX3ByZXNz ZWQgPyAwIDogc3VjY2VzcyA/IDEgOiAtMTsNCit9DQorDQogDQogLyoNCiAg KiBTZW5kUXVlcnk6IHNlbmQgdGhlIHF1ZXJ5IHN0cmluZyB0byB0aGUgYmFj a2VuZA0KQEAgLTExOTUsMTIgKzEzMTcsMTQgQEAgYm9vbA0KIFNlbmRRdWVy eShjb25zdCBjaGFyICpxdWVyeSkNCiB7DQogCWJvb2wJCXRpbWluZyA9IHBz ZXQudGltaW5nOw0KLQlQR3Jlc3VsdCAgICpyZXN1bHRzOw0KKwlQR3Jlc3Vs dCAgICpyZXN1bHRzID0gTlVMTDsNCiAJUEdUcmFuc2FjdGlvblN0YXR1c1R5 cGUgdHJhbnNhY3Rpb25fc3RhdHVzOw0KIAlkb3VibGUJCWVsYXBzZWRfbXNl YyA9IDA7DQogCWJvb2wJCU9LID0gZmFsc2U7DQorCWJvb2wJCXJlc19lcnJv cjsNCiAJaW50CQkJaTsNCiAJYm9vbAkJb25fZXJyb3Jfcm9sbGJhY2tfc2F2 ZXBvaW50ID0gZmFsc2U7DQorCWJvb2wJCXR4X2VuZGVkID0gZmFsc2U7DQog DQogCWlmICghcHNldC5kYikNCiAJew0KQEAgLTEyMzksODIgKzEzNjMsNzEg QEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIAkJZmZsdXNoKHBz ZXQubG9nZmlsZSk7DQogCX0NCiANCisJLyogZ2xvYmFsIHF1ZXJ5IGNhbmNl bGxhdGlvbiBmb3IgdGhpcyBxdWVyeSAqLw0KIAlTZXRDYW5jZWxDb25uKHBz ZXQuZGIpOw0KIA0KIAl0cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0 aW9uU3RhdHVzKHBzZXQuZGIpOw0KIA0KKwkvKiBpc3N1ZSBhIEJFR0lOIGlm IG5lZWRlZCwgY29ycmVzcG9uZGluZyBDT01NSVQvUk9MTEJBQ0sgYnkgdXNl ciAqLw0KIAlpZiAodHJhbnNhY3Rpb25fc3RhdHVzID09IFBRVFJBTlNfSURM RSAmJg0KIAkJIXBzZXQuYXV0b2NvbW1pdCAmJg0KIAkJIWNvbW1hbmRfbm9f YmVnaW4ocXVlcnkpKQ0KIAl7DQotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQu ZGIsICJCRUdJTiIpOw0KLQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMp ICE9IFBHUkVTX0NPTU1BTkRfT0spDQorCQlQR3Jlc3VsdCAgICAqcmVzdWx0 Ow0KKwkJcmVzdWx0ID0gUFFleGVjKHBzZXQuZGIsICJCRUdJTiIpOw0KKwkJ cmVzX2Vycm9yID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JFU19D T01NQU5EX09LOw0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisJ CXJlc3VsdCA9IE5VTEw7DQorDQorCQlpZiAocmVzX2Vycm9yKQ0KIAkJew0K IAkJCXBnX2xvZ19pbmZvKCIlcyIsIFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIp KTsNCi0JCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCi0JCQlSZXNl dENhbmNlbENvbm4oKTsNCiAJCQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVwOw0K IAkJfQ0KLQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQorDQorCQkv KiBtdXN0IGJlIFBRVFJBTlNfSU5UUkFOUyBhZnRlciBhIEJFR0lOICovDQog CQl0cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0aW9uU3RhdHVzKHBz ZXQuZGIpOw0KIAl9DQogDQorCS8qIGNyZWF0ZSBhdXRvbWF0aWMgc2F2ZXBv aW50IGlmIG5lZWRlZCBhbmQgcG9zc2libGUgKi8NCiAJaWYgKHRyYW5zYWN0 aW9uX3N0YXR1cyA9PSBQUVRSQU5TX0lOVFJBTlMgJiYNCiAJCXBzZXQub25f ZXJyb3Jfcm9sbGJhY2sgIT0gUFNRTF9FUlJPUl9ST0xMQkFDS19PRkYgJiYN CiAJCShwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUgfHwNCiAJCSBwc2V0Lm9u X2Vycm9yX3JvbGxiYWNrID09IFBTUUxfRVJST1JfUk9MTEJBQ0tfT04pKQ0K IAl7DQotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJTQVZFUE9JTlQg cGdfcHNxbF90ZW1wb3Jhcnlfc2F2ZXBvaW50Iik7DQotCQlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzdWx0cykgIT0gUEdSRVNfQ09NTUFORF9PSykNCisJCVBH cmVzdWx0ICAgKnJlc3VsdDsNCisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRi LCAiU0FWRVBPSU5UIHBnX3BzcWxfdGVtcG9yYXJ5X3NhdmVwb2ludCIpOw0K KwkJcmVzX2Vycm9yID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JF U19DT01NQU5EX09LOw0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsN CisJCXJlc3VsdCA9IE5VTEw7DQorDQorCQlpZiAocmVzX2Vycm9yKQ0KIAkJ ew0KIAkJCXBnX2xvZ19pbmZvKCIlcyIsIFBRZXJyb3JNZXNzYWdlKHBzZXQu ZGIpKTsNCi0JCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCi0JCQlS ZXNldENhbmNlbENvbm4oKTsNCiAJCQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVw Ow0KIAkJfQ0KLQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQorDQog CQlvbl9lcnJvcl9yb2xsYmFja19zYXZlcG9pbnQgPSB0cnVlOw0KIAl9DQog DQorCS8qIHByb2Nlc3MgdGhlIHF1ZXJ5LCBvbmUgd2F5IG9yIHRoZSBvdGhl ciAqLw0KIAlpZiAocHNldC5nZGVzY19mbGFnKQ0KIAl7DQogCQkvKiBEZXNj cmliZSBxdWVyeSdzIHJlc3VsdCBjb2x1bW5zLCB3aXRob3V0IGV4ZWN1dGlu ZyBpdCAqLw0KIAkJT0sgPSBEZXNjcmliZVF1ZXJ5KHF1ZXJ5LCAmZWxhcHNl ZF9tc2VjKTsNCi0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0cyA9 IE5VTEw7CQkJLyogUFFjbGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8NCiAJ fQ0KIAllbHNlIGlmIChwc2V0LmZldGNoX2NvdW50IDw9IDAgfHwgcHNldC5n ZXhlY19mbGFnIHx8DQogCQkJIHBzZXQuY3Jvc3N0YWJfZmxhZyB8fCAhaXNf c2VsZWN0X2NvbW1hbmQocXVlcnkpKQ0KIAl7DQogCQkvKiBEZWZhdWx0IGZl dGNoLWl0LWFsbC1hbmQtcHJpbnQgbW9kZSAqLw0KLQkJaW5zdHJfdGltZQli ZWZvcmUsDQotCQkJCQlhZnRlcjsNCi0NCi0JCWlmICh0aW1pbmcpDQotCQkJ SU5TVFJfVElNRV9TRVRfQ1VSUkVOVChiZWZvcmUpOw0KLQ0KLQkJcmVzdWx0 cyA9IFBRZXhlYyhwc2V0LmRiLCBxdWVyeSk7DQotDQotCQkvKiB0aGVzZSBv cGVyYXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgdGltaW5nIHJlc3VsdDog Ki8NCi0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KLQkJT0sgPSBQcm9jZXNzUmVz dWx0KCZyZXN1bHRzKTsNCi0NCi0JCWlmICh0aW1pbmcpDQotCQl7DQotCQkJ SU5TVFJfVElNRV9TRVRfQ1VSUkVOVChhZnRlcik7DQotCQkJSU5TVFJfVElN RV9TVUJUUkFDVChhZnRlciwgYmVmb3JlKTsNCi0JCQllbGFwc2VkX21zZWMg PSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQotCQl9DQotDQot CQkvKiBidXQgcHJpbnRpbmcgcmVzdWx0cyBpc24ndDogKi8NCi0JCWlmIChP SyAmJiByZXN1bHRzKQ0KLQkJCU9LID0gUHJpbnRRdWVyeVJlc3VsdHMocmVz dWx0cyk7DQorCQlpbnQgcmVzID0gU2VuZFF1ZXJ5QW5kUHJvY2Vzc1Jlc3Vs dHMocXVlcnksICZlbGFwc2VkX21zZWMsIGZhbHNlLCBOVUxMLCBOVUxMLCAm dHhfZW5kZWQpOw0KKwkJT0sgPSAocmVzID49IDApOw0KIAl9DQogCWVsc2UN CiAJew0KIAkJLyogRmV0Y2gtaW4tc2VnbWVudHMgbW9kZSAqLw0KIAkJT0sg PSBFeGVjUXVlcnlVc2luZ0N1cnNvcihxdWVyeSwgJmVsYXBzZWRfbXNlYyk7 DQotCQlSZXNldENhbmNlbENvbm4oKTsNCiAJCXJlc3VsdHMgPSBOVUxMOwkJ CS8qIFBRY2xlYXIoTlVMTCkgZG9lcyBub3RoaW5nICovDQogCX0NCiANCkBA IC0xMzQ3LDExICsxNDYwLDcgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1 ZXJ5KQ0KIAkJCQkgKiBzYXZlcG9pbnQgaXMgZ29uZS4gSWYgdGhleSBpc3N1 ZWQgYSBTQVZFUE9JTlQsIHJlbGVhc2luZw0KIAkJCQkgKiBvdXJzIHdvdWxk IHJlbW92ZSB0aGVpcnMuDQogCQkJCSAqLw0KLQkJCQlpZiAocmVzdWx0cyAm Jg0KLQkJCQkJKHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIkNPTU1J VCIpID09IDAgfHwNCi0JCQkJCSBzdHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0 cyksICJTQVZFUE9JTlQiKSA9PSAwIHx8DQotCQkJCQkgc3RyY21wKFBRY21k U3RhdHVzKHJlc3VsdHMpLCAiUkVMRUFTRSIpID09IDAgfHwNCi0JCQkJCSBz dHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0cyksICJST0xMQkFDSyIpID09IDAp KQ0KKwkJCQlpZiAodHhfZW5kZWQpDQogCQkJCQlzdnB0Y21kID0gTlVMTDsN CiAJCQkJZWxzZQ0KIAkJCQkJc3ZwdGNtZCA9ICJSRUxFQVNFIHBnX3BzcWxf dGVtcG9yYXJ5X3NhdmVwb2ludCI7DQpAQCAtMTM3MywxNCArMTQ4MiwxNSBA QCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogCQkJUEdyZXN1bHQg ICAqc3ZwdHJlczsNCiANCiAJCQlzdnB0cmVzID0gUFFleGVjKHBzZXQuZGIs IHN2cHRjbWQpOw0KLQkJCWlmIChQUXJlc3VsdFN0YXR1cyhzdnB0cmVzKSAh PSBQR1JFU19DT01NQU5EX09LKQ0KKwkJCXJlc19lcnJvciA9IFBRcmVzdWx0 U3RhdHVzKHN2cHRyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0s7DQorDQorCQkJ aWYgKHJlc19lcnJvcikNCiAJCQl7DQogCQkJCXBnX2xvZ19pbmZvKCIlcyIs IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpKTsNCiAJCQkJQ2xlYXJPclNhdmVS ZXN1bHQoc3ZwdHJlcyk7DQogCQkJCU9LID0gZmFsc2U7DQogDQogCQkJCVBR Y2xlYXIocmVzdWx0cyk7DQotCQkJCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJ CQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVwOw0KIAkJCX0NCiAJCQlQUWNsZWFy KHN2cHRyZXMpOw0KQEAgLTE0MTEsNiArMTUyMSw5IEBAIFNlbmRRdWVyeShj b25zdCBjaGFyICpxdWVyeSkNCiANCiBzZW5kcXVlcnlfY2xlYW51cDoNCiAN CisJLyogZ2xvYmFsIGNhbmNlbGxhdGlvbiByZXNldCAqLw0KKwlSZXNldENh bmNlbENvbm4oKTsNCisNCiAJLyogcmVzZXQgXGcncyBvdXRwdXQtdG8tZmls ZW5hbWUgdHJpZ2dlciAqLw0KIAlpZiAocHNldC5nZm5hbWUpDQogCXsNCkBA IC0xNDkxLDcgKzE2MDQsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJUFFjbGVhcihyZXN1 bHRzKTsNCiANCiAJcmVzdWx0cyA9IFBRZGVzY3JpYmVQcmVwYXJlZChwc2V0 LmRiLCAiIik7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQor CU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkoUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQog CWlmIChPSyAmJiByZXN1bHRzKQ0KIAl7DQpAQCAtMTUzOSw3ICsxNjUyLDcg QEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpDQogCQkJUFFjbGVhcihyZXN1bHRzKTsNCiANCiAJCQly ZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0JCQlPSyA9 IEFjY2VwdFJlc3VsdChyZXN1bHRzKTsNCisJCQlPSyA9IEFjY2VwdFJlc3Vs dChyZXN1bHRzLCB0cnVlKTsNCiANCiAJCQlpZiAodGltaW5nKQ0KIAkJCXsN CkBAIC0xNTQ5LDcgKzE2NjIsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNo YXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQl9DQogDQog CQkJaWYgKE9LICYmIHJlc3VsdHMpDQotCQkJCU9LID0gUHJpbnRRdWVyeVJl c3VsdHMocmVzdWx0cyk7DQorCQkJCU9LID0gSGFuZGxlUXVlcnlSZXN1bHQo cmVzdWx0cywgdHJ1ZSwgZmFsc2UsIE5VTEwsIE5VTEwpOw0KIA0KIAkJCXRl cm1QUUV4cEJ1ZmZlcigmYnVmKTsNCiAJCX0NCkBAIC0xNjA5LDcgKzE3MjIs NyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwg ZG91YmxlICplbGFwc2VkX21zZWMpDQogCWlmIChQUXRyYW5zYWN0aW9uU3Rh dHVzKHBzZXQuZGIpID09IFBRVFJBTlNfSURMRSkNCiAJew0KIAkJcmVzdWx0 cyA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsNCi0JCU9LID0gQWNjZXB0 UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1 bHRzLCB0cnVlKSAmJg0KIAkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9 PSBQR1JFU19DT01NQU5EX09LKTsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdHMpOw0KIAkJaWYgKCFPSykNCkBAIC0xNjIzLDcgKzE3MzYsNyBAQCBF eGVjUXVlcnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91Ymxl ICplbGFwc2VkX21zZWMpDQogCQkJCQkgIHF1ZXJ5KTsNCiANCiAJcmVzdWx0 cyA9IFBRZXhlYyhwc2V0LmRiLCBidWYuZGF0YSk7DQotCU9LID0gQWNjZXB0 UmVzdWx0KHJlc3VsdHMpICYmDQorCU9LID0gQWNjZXB0UmVzdWx0KHJlc3Vs dHMsIHRydWUpICYmDQogCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0g UEdSRVNfQ09NTUFORF9PSyk7DQogCWlmICghT0spDQogCQlTZXRSZXN1bHRW YXJpYWJsZXMocmVzdWx0cywgT0spOw0KQEAgLTE2OTYsNyArMTgwOSw3IEBA IEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3Vi bGUgKmVsYXBzZWRfbXNlYykNCiAJCQkJaXNfcGFnZXIgPSBmYWxzZTsNCiAJ CQl9DQogDQotCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cyk7DQorCQkJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSk7DQogCQkJQXNzZXJ0 KCFPSyk7DQogCQkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdHMsIE9LKTsN CiAJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCkBAIC0xODA1LDcg KzE5MTgsNyBAQCBjbGVhbnVwOg0KIAlyZXN1bHRzID0gUFFleGVjKHBzZXQu ZGIsICJDTE9TRSBfcHNxbF9jdXJzb3IiKTsNCiAJaWYgKE9LKQ0KIAl7DQot CQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2Nl cHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0 dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJfQ0KQEAgLTE4MTUsNyArMTkyOCw3 IEBAIGNsZWFudXA6DQogCWlmIChzdGFydGVkX3R4bikNCiAJew0KIAkJcmVz dWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBPSyA/ICJDT01NSVQiIDogIlJPTExC QUNLIik7DQotCQlPSyAmPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJ CU9LICY9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQ UXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsN CiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAl9DQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wc3FsL2hlbHAuYyBiL3NyYy9iaW4vcHNxbC9oZWxw LmMNCmluZGV4IDkzN2Q2ZTlkNDkuLjgyNTA0MjU4ZDAgMTAwNjQ0DQotLS0g YS9zcmMvYmluL3BzcWwvaGVscC5jDQorKysgYi9zcmMvYmluL3BzcWwvaGVs cC5jDQpAQCAtNDEzLDYgKzQxMyw4IEBAIGhlbHBWYXJpYWJsZXModW5zaWdu ZWQgc2hvcnQgaW50IHBhZ2VyKQ0KIAlmcHJpbnRmKG91dHB1dCwgXygiICBT RVJWRVJfVkVSU0lPTl9OQU1FXG4iDQogCQkJCQkgICIgIFNFUlZFUl9WRVJT SU9OX05VTVxuIg0KIAkJCQkJICAiICAgIHNlcnZlcidzIHZlcnNpb24gKGlu IHNob3J0IHN0cmluZyBvciBudW1lcmljIGZvcm1hdClcbiIpKTsNCisJZnBy aW50ZihvdXRwdXQsIF8oIiAgU0hPV19BTExfUkVTVUxUU1xuIg0KKwkJCQkJ ICAiICAgIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBjb21iaW5lZCBxdWVyeSAo XFw7KSBpbnN0ZWFkIG9mIG9ubHkgdGhlIGxhc3RcbiIpKTsNCiAJZnByaW50 ZihvdXRwdXQsIF8oIiAgU0hPV19DT05URVhUXG4iDQogCQkJCQkgICIgICAg Y29udHJvbHMgZGlzcGxheSBvZiBtZXNzYWdlIGNvbnRleHQgZmllbGRzIFtu ZXZlciwgZXJyb3JzLCBhbHdheXNdXG4iKSk7DQogCWZwcmludGYob3V0cHV0 LCBfKCIgIFNJTkdMRUxJTkVcbiINCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvc2V0dGluZ3MuaCBiL3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oDQppbmRl eCBmNjE0YjI2ZTJjLi41N2JkZGVjNWE1IDEwMDY0NA0KLS0tIGEvc3JjL2Jp bi9wc3FsL3NldHRpbmdzLmgNCisrKyBiL3NyYy9iaW4vcHNxbC9zZXR0aW5n cy5oDQpAQCAtMTQ4LDYgKzE0OCw3IEBAIHR5cGVkZWYgc3RydWN0IF9wc3Fs U2V0dGluZ3MNCiAJY29uc3QgY2hhciAqcHJvbXB0MjsNCiAJY29uc3QgY2hh ciAqcHJvbXB0MzsNCiAJUEdWZXJib3NpdHkgdmVyYm9zaXR5OwkJLyogY3Vy cmVudCBlcnJvciB2ZXJib3NpdHkgbGV2ZWwgKi8NCisJYm9vbAkJc2hvd19h bGxfcmVzdWx0czsNCiAJUEdDb250ZXh0VmlzaWJpbGl0eSBzaG93X2NvbnRl eHQ7CS8qIGN1cnJlbnQgY29udGV4dCBkaXNwbGF5IGxldmVsICovDQogfSBQ c3FsU2V0dGluZ3M7DQogDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3N0 YXJ0dXAuYyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMNCmluZGV4IGJlOWRl Yzc0OWQuLmQwOGIxNTg4NmEgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BzcWwv c3RhcnR1cC5jDQorKysgYi9zcmMvYmluL3BzcWwvc3RhcnR1cC5jDQpAQCAt MjAzLDYgKzIwMyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkN CiAJU2V0VmFyaWFibGUocHNldC52YXJzLCAiUFJPTVBUMSIsIERFRkFVTFRf UFJPTVBUMSk7DQogCVNldFZhcmlhYmxlKHBzZXQudmFycywgIlBST01QVDIi LCBERUZBVUxUX1BST01QVDIpOw0KIAlTZXRWYXJpYWJsZShwc2V0LnZhcnMs ICJQUk9NUFQzIiwgREVGQVVMVF9QUk9NUFQzKTsNCisJU2V0VmFyaWFibGVC b29sKHBzZXQudmFycywgIlNIT1dfQUxMX1JFU1VMVFMiKTsNCiANCiAJcGFy c2VfcHNxbF9vcHRpb25zKGFyZ2MsIGFyZ3YsICZvcHRpb25zKTsNCiANCkBA IC0xMTUwLDYgKzExNTEsMTIgQEAgdmVyYm9zaXR5X2hvb2soY29uc3QgY2hh ciAqbmV3dmFsKQ0KIAlyZXR1cm4gdHJ1ZTsNCiB9DQogDQorc3RhdGljIGJv b2wNCitzaG93X2FsbF9yZXN1bHRzX2hvb2soY29uc3QgY2hhciAqbmV3dmFs KQ0KK3sNCisJcmV0dXJuIFBhcnNlVmFyaWFibGVCb29sKG5ld3ZhbCwgIlNI T1dfQUxMX1JFU1VMVFMiLCAmcHNldC5zaG93X2FsbF9yZXN1bHRzKTsNCit9 DQorDQogc3RhdGljIGNoYXIgKg0KIHNob3dfY29udGV4dF9zdWJzdGl0dXRl X2hvb2soY2hhciAqbmV3dmFsKQ0KIHsNCkBAIC0xMjUxLDYgKzEyNTgsOSBA QCBFc3RhYmxpc2hWYXJpYWJsZVNwYWNlKHZvaWQpDQogCVNldFZhcmlhYmxl SG9va3MocHNldC52YXJzLCAiVkVSQk9TSVRZIiwNCiAJCQkJCSB2ZXJib3Np dHlfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIHZlcmJvc2l0eV9ob29rKTsN CisJU2V0VmFyaWFibGVIb29rcyhwc2V0LnZhcnMsICJTSE9XX0FMTF9SRVNV TFRTIiwNCisJCQkJCSBib29sX3N1YnN0aXR1dGVfaG9vaywNCisJCQkJCSBz aG93X2FsbF9yZXN1bHRzX2hvb2spOw0KIAlTZXRWYXJpYWJsZUhvb2tzKHBz ZXQudmFycywgIlNIT1dfQ09OVEVYVCIsDQogCQkJCQkgc2hvd19jb250ZXh0 X3N1YnN0aXR1dGVfaG9vaywNCiAJCQkJCSBzaG93X2NvbnRleHRfaG9vayk7 DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3QvMDAxX2Jhc2ljLnBsIGIv c3JjL2Jpbi9wc3FsL3QvMDAxX2Jhc2ljLnBsDQppbmRleCA5ZTE0ZGM3MWZm Li43N2M2MGEwZTdiIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3QvMDAx X2Jhc2ljLnBsDQorKysgYi9zcmMvYmluL3BzcWwvdC8wMDFfYmFzaWMucGwN CkBAIC02LDcgKzYsOCBAQCB1c2Ugd2FybmluZ3M7DQogDQogdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7DQogdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOw0KLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI1Ow0KKw0KK3Vz ZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI5Ow0KIA0KIHByb2dyYW1faGVscF9v aygncHNxbCcpOw0KIHByb2dyYW1fdmVyc2lvbl9vaygncHNxbCcpOw0KQEAg LTgwLDMgKzgxLDE5IEBAIHBzcWxfbGlrZSgNCiAJJ2hhbmRsaW5nIG9mIHVu ZXhwZWN0ZWQgUFFyZXN1bHRTdGF0dXMnLA0KIAknU1RBUlRfUkVQTElDQVRJ T04gMC8wJywNCiAJdW5kZWYsIHFyL3VuZXhwZWN0ZWQgUFFyZXN1bHRTdGF0 dXM6IDgkLyk7DQorDQorIyBUZXN0IHZvbHVudGFyeSBjcmFzaA0KK215ICgk cmV0LCAkb3V0LCAkZXJyKSA9ICRub2RlLT5wc3FsKA0KKwkncG9zdGdyZXMn LA0KKwkiU0VMRUNUICdiZWZvcmUnIEFTIHJ1bm5pbmc7XG4iIC4NCisJIlNF TEVDVCBwZ190ZXJtaW5hdGVfYmFja2VuZChwZ19iYWNrZW5kX3BpZCgpKTtc biIgLg0KKwkiU0VMRUNUICdBRlRFUicgQVMgbm90X3J1bm5pbmc7XG4iKTsN CisNCitpcygkcmV0LCAyLCAic2VydmVyIHN0b3BwZWQiKTsNCitsaWtlKCRv dXQsIHFyL2JlZm9yZS8sICJvdXRwdXQgYmVmb3JlIGNyYXNoIik7DQorb2so JG91dCAhfiBxci9BRlRFUi8sICJubyBvdXRwdXQgYWZ0ZXIgY3Jhc2giKTsN CitpcygkZXJyLCAncHNxbDo8c3RkaW4+OjI6IEZBVEFMOiAgdGVybWluYXRp bmcgY29ubmVjdGlvbiBkdWUgdG8gYWRtaW5pc3RyYXRvciBjb21tYW5kDQor cHNxbDo8c3RkaW4+OjI6IHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24g dW5leHBlY3RlZGx5DQorCVRoaXMgcHJvYmFibHkgbWVhbnMgdGhlIHNlcnZl ciB0ZXJtaW5hdGVkIGFibm9ybWFsbHkNCisJYmVmb3JlIG9yIHdoaWxlIHBy b2Nlc3NpbmcgdGhlIHJlcXVlc3QuDQorcHNxbDo8c3RkaW4+OjI6IGZhdGFs OiBjb25uZWN0aW9uIHRvIHNlcnZlciB3YXMgbG9zdCcsICJleHBlY3RlZCBl cnJvciBtZXNzYWdlIik7DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3Rh Yi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQpp bmRleCA3MWYxYTVjMDBkLi45MjUyYmQ1N2EyIDEwMDY0NA0KLS0tIGEvc3Jj L2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQorKysgYi9zcmMvYmluL3BzcWwv dGFiLWNvbXBsZXRlLmMNCkBAIC00MzUxLDcgKzQzNTEsNyBAQCBwc3FsX2Nv bXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5k KQ0KIAkJbWF0Y2hlcyA9IGNvbXBsZXRlX2Zyb21fdmFyaWFibGVzKHRleHQs ICIiLCAiIiwgZmFsc2UpOw0KIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJc XHNldCIsIE1hdGNoQW55KSkNCiAJew0KLQkJaWYgKFRhaWxNYXRjaGVzQ1Mo IkFVVE9DT01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHwiDQorCQlpZiAoVGFp bE1hdGNoZXNDUygiQVVUT0NPTU1JVHxPTl9FUlJPUl9TVE9QfFFVSUVUfFNI T1dfQUxMX1JFU1VMVFN8Ig0KIAkJCQkJCSAgIlNJTkdMRUxJTkV8U0lOR0xF U1RFUCIpKQ0KIAkJCUNPTVBMRVRFX1dJVEhfQ1MoIm9uIiwgIm9mZiIpOw0K IAkJZWxzZSBpZiAoVGFpbE1hdGNoZXNDUygiQ09NUF9LRVlXT1JEX0NBU0Ui KSkNCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRz LnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0DQppbmRl eCBlOGJjYzg4MzcwLi4yYTNkMjlhZWU1IDEwMDY0NA0KLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQNCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2V4cG9ydHMudHh0DQpAQCAtMTg2LDMgKzE4Niw0IEBAIFBR cGlwZWxpbmVTdGF0dXMgICAgICAgICAgMTgzDQogUFFzZXRUcmFjZUZsYWdz ICAgICAgICAgICAxODQNCiBQUW1ibGVuQm91bmRlZCAgICAgICAgICAgIDE4 NQ0KIFBRc2VuZEZsdXNoUmVxdWVzdCAgICAgICAgMTg2DQorUFFjbGVhckVy cm9yTWVzc2FnZQkgICAgICAxODcNCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jb25uZWN0LmMNCmluZGV4IDVmYzE2YmU4NDkuLjViZjUxMTU0Y2Mg MTAwNjQ0DQotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0 LmMNCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYw0K QEAgLTY3NzEsNiArNjc3MSwxMiBAQCBQUWVycm9yTWVzc2FnZShjb25zdCBQ R2Nvbm4gKmNvbm4pDQogCXJldHVybiBjb25uLT5lcnJvck1lc3NhZ2UuZGF0 YTsNCiB9DQogDQordm9pZA0KK1BRY2xlYXJFcnJvck1lc3NhZ2UoUEdjb25u ICpjb25uKQ0KK3sNCisJcmVzZXRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JN ZXNzYWdlKTsNCit9DQorDQogLyoNCiAgKiBJbiBXaW5kb3dzLCBzb2NrZXQg dmFsdWVzIGFyZSB1bnNpZ25lZCwgYW5kIGFuIGludmFsaWQgc29ja2V0IHZh bHVlDQogICogKElOVkFMSURfU09DS0VUKSBpcyB+MCwgd2hpY2ggZXF1YWxz IC0xIGluIGNvbXBhcmlzb25zICh3aXRoIG5vIGNvbXBpbGVyDQpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgNCmluZGV4IDIwZWI4NTVhYmMu LmI3M2I0NGU4MTcgMTAwNjQ0DQotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9saWJwcS1mZS5oDQorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1mZS5oDQpAQCAtMzQ3LDYgKzM0Nyw3IEBAIGV4dGVybiBjb25zdCBjaGFy ICpQUXBhcmFtZXRlclN0YXR1cyhjb25zdCBQR2Nvbm4gKmNvbm4sDQogZXh0 ZXJuIGludAlQUXByb3RvY29sVmVyc2lvbihjb25zdCBQR2Nvbm4gKmNvbm4p Ow0KIGV4dGVybiBpbnQJUFFzZXJ2ZXJWZXJzaW9uKGNvbnN0IFBHY29ubiAq Y29ubik7DQogZXh0ZXJuIGNoYXIgKlBRZXJyb3JNZXNzYWdlKGNvbnN0IFBH Y29ubiAqY29ubik7DQorZXh0ZXJuIHZvaWQJUFFjbGVhckVycm9yTWVzc2Fn ZShQR2Nvbm4gKmNvbm4pOw0KIGV4dGVybiBpbnQJUFFzb2NrZXQoY29uc3Qg UEdjb25uICpjb25uKTsNCiBleHRlcm4gaW50CVBRYmFja2VuZFBJRChjb25z dCBQR2Nvbm4gKmNvbm4pOw0KIGV4dGVybiBQR3BpcGVsaW5lU3RhdHVzIFBR cGlwZWxpbmVTdGF0dXMoY29uc3QgUEdjb25uICpjb25uKTsNCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91dA0K aW5kZXggNzI4NjVmZTFlYi4uYmI5ZTAyNmY5MSAxMDA2NDQNCi0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQNCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQNCkBA IC0xMjYsNyArMTI2LDcgQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7 IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0KIEVSUk9SOiAgZGl2 aXNpb24gYnkgemVybw0KIHNlbGVjdCAxLzBcOyBjb3B5IChzZWxlY3QgMSkg dG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQogRVJST1I6ICBkaXZpc2lvbiBi eSB6ZXJvDQotY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNl bGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLSAx IDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxl Y3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsgLS0gMSAy IDMgNA0KIDENCiAyDQogID9jb2x1bW4/IA0KQEAgLTEzNCw4ICsxMzQsMTgg QEAgY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAy KSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLQ0KICAgICAg ICAgMw0KICgxIHJvdykNCiANCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0K KyAgICAgICAgNA0KKygxIHJvdykNCisNCiBjcmVhdGUgdGFibGUgdGVzdDMg KGMgaW50KTsNCi1zZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7 IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAxDQorc2Vs ZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBjb3B5IHRlc3QzIGZy b20gc3RkaW5cOyBzZWxlY3QgMTsgLS0gMCAxDQorID9jb2x1bW4/IA0KKy0t LS0tLS0tLS0NCisgICAgICAgIDANCisoMSByb3cpDQorDQogID9jb2x1bW4/ IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDENCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wc3FsLm91dA0KaW5kZXggNjQyOGViYzUwNy4uNDI4 ZWU5NDFiOSAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQNCkBAIC01MjkwLDMgKzUyOTAsMTI5IEBAIEVSUk9SOiAgcmVs YXRpb24gIm5vdGV4aXN0cyIgZG9lcyBub3QgZXhpc3QNCiBMSU5FIDE6IFNF TEVDVCAqIEZST00gbm90ZXhpc3RzOw0KICAgICAgICAgICAgICAgICAgICAg ICBeDQogU1RBVEVNRU5UOiAgU0VMRUNUICogRlJPTSBub3RleGlzdHM7DQor IG9uZSANCistLS0tLQ0KKyAgIDENCisoMSByb3cpDQorDQorTk9USUNFOiAg d2FybiAxLjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0 ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisgd2FybiANCistLS0tLS0NCisgdA0K KygxIHJvdykNCisNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJvdykN CisNCisgdGhyZWUgDQorLS0tLS0tLQ0KKyAgICAgMw0KKygxIHJvdykNCisN CitOT1RJQ0U6ICB3YXJuIDMuNQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5j dGlvbiB3YXJuKHRleHQpIGxpbmUgMiBhdCBSQUlTRQ0KKyB3YXJuIA0KKy0t LS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KKzp0aHJlZSA0DQorRVJST1I6ICBz eW50YXggZXJyb3IgYXQgb3IgbmVhciAiOyINCitMSU5FIDE6IFNFTEVDVCA1 IDsgU0VMRUNUIDYgKyA7IFNFTEVDVCB3YXJuKCc2LjUnKSA7IFNFTEVDVCA3 IDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQorIGVpZ2h0 IA0KKy0tLS0tLS0NCisgICAgIDgNCisoMSByb3cpDQorDQorRVJST1I6ICBk aXZpc2lvbiBieSB6ZXJvDQorIGJlZ2luIA0KKy0tLS0tLS0NCisgb2sNCiso MSByb3cpDQorDQorQ2FsdmluDQorU3VzaWUNCitIb2JiZXMNCisgZG9uZSAN CistLS0tLS0NCisgb2sNCisoMSByb3cpDQorDQorTk9USUNFOiAgd2FybiAx LjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBs aW5lIDIgYXQgUkFJU0UNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJv dykNCisNCisjIGluaXRpYWwgQVVUT0NPTU1JVDogb24NCisjIEFVVE9DT01N SVQ6IG9mZg0KKyAgIHMgICANCistLS0tLS0tDQorIGhlbGxvDQorIHdvcmxk DQorKDIgcm93cykNCisNCisjIEFVVE9DT01NSVQ6IG9uDQorICAgcyAgIA0K Ky0tLS0tLS0NCisgaGVsbG8NCisgd29ybGQNCisoMiByb3dzKQ0KKw0KKyMg ZmluYWwgQVVUT0NPTU1JVDogb24NCisjIGluaXRpYWwgT05fRVJST1JfUk9M TEJBQ0s6IG9mZg0KKyMgT05fRVJST1JfUk9MTEJBQ0s6IG9uDQorIyBBVVRP Q09NTUlUOiBvbg0KK0VSUk9SOiAgdHlwZSAibm9fc3VjaF90eXBlIiBkb2Vz IG5vdCBleGlzdA0KK0xJTkUgMTogQ1JFQVRFIFRBQkxFIGJsYShzIE5PX1NV Q0hfVFlQRSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KK0VS Uk9SOiAgZXJyb3Igb29wcyENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rp b24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCisgICBzICAg IA0KKy0tLS0tLS0tDQorIENhbHZpbg0KKyBIb2JiZXMNCisoMiByb3dzKQ0K Kw0KKyAgICAgc2hvdyAgICAgDQorLS0tLS0tLS0tLS0tLS0NCisgYmVmb3Jl IGVycm9yDQorKDEgcm93KQ0KKw0KK0VSUk9SOiAgZXJyb3IgYm91bSENCitD T05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBs aW5lIDMgYXQgUkFJU0UNCitFUlJPUjogIGVycm9yIGJhbSENCitDT05URVhU OiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMg YXQgUkFJU0UNCisgICAgICAgcyAgICAgICANCistLS0tLS0tLS0tLS0tLS0N CisgQ2FsdmluDQorIEhvYmJlcw0KKyBNaXNzIFdvcm13b29kDQorIFN1c2ll DQorKDQgcm93cykNCisNCisjIEFVVE9DT01NSVQ6IG9mZg0KK0VSUk9SOiAg ZXJyb3IgYmFkIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBwc3Fs X2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0KKyAjbXVtIA0KKy0tLS0t LQ0KKyAgICAxDQorKDEgcm93KQ0KKw0KK0VSUk9SOiAgZXJyb3IgYmFkIQ0K K0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQp IGxpbmUgMyBhdCBSQUlTRQ0KKyAgICAgICBzICAgICAgIA0KKy0tLS0tLS0t LS0tLS0tLQ0KKyBDYWx2aW4NCisgRGFkDQorIEhvYmJlcw0KKyBNaXNzIFdv cm13b29kDQorIFN1c2llDQorKDUgcm93cykNCisNCisjIGZpbmFsIE9OX0VS Uk9SX1JPTExCQUNLOiBvZmYNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQNCmluZGV4IDYxODYyZDU5 NWQuLmJlMWRiMGQ1YzAgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQNCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25zLm91dA0KQEAgLTkwMCw4ICs5 MDAsMTggQEAgRFJPUCBUQUJMRSBhYmM7DQogLS0gdGVzdHMgcmVseSBvbiB0 aGUgZmFjdCB0aGF0IHBzcWwgd2lsbCBub3QgYnJlYWsgU1FMIGNvbW1hbmRz IGFwYXJ0IGF0IGENCiAtLSBiYWNrc2xhc2gtcXVvdGVkIHNlbWljb2xvbiwg YnV0IHdpbGwgc2VuZCB0aGVtIGFzIG9uZSBRdWVyeS4NCiBjcmVhdGUgdGVt cCB0YWJsZSBpX3RhYmxlIChmMSBpbnQpOw0KLS0tIHBzcWwgd2lsbCBzaG93 IG9ubHkgdGhlIGxhc3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1 ZXJ5DQorLS0gcHNxbCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0 aS1zdGF0ZW1lbnQgUXVlcnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsgU0VM RUNUIDM7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDEN CisoMSByb3cpDQorDQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAg ICAgIDINCisoMSByb3cpDQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0N CiAgICAgICAgIDMNCkBAIC05MTYsNiArOTI2LDEyIEBAIGluc2VydCBpbnRv IGlfdGFibGUgdmFsdWVzKDEpXDsgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0K IA0KIC0tIDEvMCBlcnJvciB3aWxsIGNhdXNlIHJvbGxpbmcgYmFjayB0aGUg d2hvbGUgaW1wbGljaXQgdHJhbnNhY3Rpb24NCiBpbnNlcnQgaW50byBpX3Rh YmxlIHZhbHVlcygyKVw7IHNlbGVjdCAqIGZyb20gaV90YWJsZVw7IHNlbGVj dCAxLzA7DQorIGYxIA0KKy0tLS0NCisgIDENCisgIDINCisoMiByb3dzKQ0K Kw0KIEVSUk9SOiAgZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAqIGZyb20g aV90YWJsZTsNCiAgZjEgDQpAQCAtOTM1LDggKzk1MSwxOCBAQCBXQVJOSU5H OiAgdGhlcmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBi ZWdpbiBjb252ZXJ0cyBpbXBsaWNpdCB0cmFuc2FjdGlvbiBpbnRvIGEgcmVn dWxhciBvbmUgdGhhdA0KIC0tIGNhbiBleHRlbmQgcGFzdCB0aGUgZW5kIG9m IHRoZSBRdWVyeQ0KIHNlbGVjdCAxXDsgYmVnaW5cOyBpbnNlcnQgaW50byBp X3RhYmxlIHZhbHVlcyg1KTsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0K KyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBjb21taXQ7DQogc2VsZWN0IDFc OyBiZWdpblw7IGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDYpOw0KKyA/ Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0K Kw0KIHJvbGxiYWNrOw0KIC0tIGNvbW1pdCBpbiBpbXBsaWNpdC10cmFuc2Fj dGlvbiBzdGF0ZSBjb21taXRzIGJ1dCBpc3N1ZXMgYSB3YXJuaW5nLg0KIGlu c2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDcpXDsgY29tbWl0XDsgaW5zZXJ0 IGludG8gaV90YWJsZSB2YWx1ZXMoOClcOyBzZWxlY3QgMS8wOw0KQEAgLTk2 MywyMiArOTg5LDUyIEBAIHJvbGxiYWNrOyAgLS0gd2UgYXJlIG5vdCBpbiBh IHRyYW5zYWN0aW9uIGF0IHRoaXMgcG9pbnQNCiBXQVJOSU5HOiAgdGhlcmUg aXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBpbXBsaWNpdCB0 cmFuc2FjdGlvbiBibG9jayBpcyBzdGlsbCBhIHRyYW5zYWN0aW9uIGJsb2Nr LCBmb3IgZS5nLiBWQUNVVU0NCiBTRUxFQ1QgMVw7IFZBQ1VVTTsNCisgP2Nv bHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisN CiBFUlJPUjogIFZBQ1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0 aW9uIGJsb2NrDQogU0VMRUNUIDFcOyBDT01NSVRcOyBWQUNVVU07DQogV0FS TklORzogIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQor ID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cp DQorDQogRVJST1I6ICBWQUNVVU0gY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFu c2FjdGlvbiBibG9jaw0KIC0tIHdlIGRpc2FsbG93IHNhdmVwb2ludC1yZWxh dGVkIGNvbW1hbmRzIGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlDQog U0VMRUNUIDFcOyBTQVZFUE9JTlQgc3A7DQorID9jb2x1bW4/IA0KKy0tLS0t LS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZF UE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MN CiBTRUxFQ1QgMVw7IENPTU1JVFw7IFNBVkVQT0lOVCBzcDsNCiBXQVJOSU5H OiAgdGhlcmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCisgP2Nv bHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisN CiBFUlJPUjogIFNBVkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5z YWN0aW9uIGJsb2Nrcw0KIFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcFw7IFNF TEVDVCAyOw0KIEVSUk9SOiAgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIGNhbiBv bmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VMRUNUIDJc OyBSRUxFQVNFIFNBVkVQT0lOVCBzcFw7IFNFTEVDVCAzOw0KKyA/Y29sdW1u PyANCistLS0tLS0tLS0tDQorICAgICAgICAyDQorKDEgcm93KQ0KKw0KIEVS Uk9SOiAgUkVMRUFTRSBTQVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0 cmFuc2FjdGlvbiBibG9ja3MNCiAtLSBidXQgdGhpcyBpcyBPSywgYmVjYXVz ZSB0aGUgQkVHSU4gY29udmVydHMgaXQgdG8gYSByZWd1bGFyIHhhY3QNCiBT RUxFQ1QgMVw7IEJFR0lOXDsgU0FWRVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8g U0FWRVBPSU5UIHNwXDsgQ09NTUlUOw0KKyA/Y29sdW1uPyANCistLS0tLS0t LS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIC0tIFRlc3RzIGZvciBB TkQgQ0hBSU4gaW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VU IFRSQU5TQUNUSU9OIFJFQUQgT05MWVw7IENPTU1JVCBBTkQgQ0hBSU47ICAt LSBlcnJvcg0KIEVSUk9SOiAgQ09NTUlUIEFORCBDSEFJTiBjYW4gb25seSBi ZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlzZWxlY3Quc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weXNlbGVjdC5zcWwNCmluZGV4IDFkOThkYWQzYzgu LmUzMmE0ZjhlMzggMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jb3B5c2VsZWN0LnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weXNlbGVjdC5zcWwNCkBAIC04NCwxMCArODQsMTAgQEAgZHJvcCB0YWJs ZSB0ZXN0MTsNCiAtLSBwc3FsIGhhbmRsaW5nIG9mIENPUFkgaW4gbXVsdGkt Y29tbWFuZCBzdHJpbmdzDQogY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7 IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0KIHNlbGVjdCAxLzBc OyBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQot Y29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0 byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLSAxIDIgMw0KK2Nv cHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8g c3Rkb3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsgLS0gMSAyIDMgNA0KIA0K IGNyZWF0ZSB0YWJsZSB0ZXN0MyAoYyBpbnQpOw0KLXNlbGVjdCAwXDsgY29w eSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsg c2VsZWN0IDE7IC0tIDENCitzZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBz dGRpblw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAw IDENCiAxDQogXC4NCiAyDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHNxbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNx bA0KaW5kZXggZDRlNGZkYmJiNy4uNjk1MjFkYzkxNSAxMDA2NDQNCi0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KQEAgLTEzMTYsMyArMTMxNiwxMjMg QEAgRFJPUCBUQUJMRSBvZXJfdGVzdDsNCiBcc2V0IEVDSE8gZXJyb3JzDQog U0VMRUNUICogRlJPTSBub3RleGlzdHM7DQogXHNldCBFQ0hPIG5vbmUNCisN CistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCistLQ0KK0NSRUFURSBGVU5D VElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gTEFOR1VBR0Ug cGxwZ3NxbA0KK0FTICQkDQorICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4g JScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQ7DQorLS0gc2hvdyBi b3RoDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVDVCB3YXJuKCcxLjUnKSBc OyBTRUxFQ1QgMiBBUyB0d28gOw0KKy0tIFxnc2V0IGFwcGxpZXMgdG8gbGFz dCBxdWVyeSBvbmx5DQorU0VMRUNUIDMgQVMgdGhyZWUgXDsgU0VMRUNUIHdh cm4oJzMuNScpIFw7IFNFTEVDVCA0IEFTIGZvdXIgXGdzZXQNCitcZWNobyA6 dGhyZWUgOmZvdXINCistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxsIHByb2Nl c3NpbmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVDVCB3YXJu KCc2LjUnKSBcOyBTRUxFQ1QgNyA7DQorLS0gd2l0aCBhYm9ydGVkIHRyYW5z YWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVycm9yDQorQkVHSU4gXDsgU0VMRUNU IDggQVMgZWlnaHQgXDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7IFJPTExCQUNL IFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0KKy0tIGNsb3NlIHByZXZpb3VzbHkg YWJvcnRlZCB0cmFuc2FjdGlvbg0KK1JPTExCQUNLOw0KKy0tIG1pc2MgU1FM IGNvbW1hbmRzDQorLS0gKG5vbiBTRUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8g c3RkZXJyLCB0aHVzIGlzIG5vdCBzaG93biBpbiBleHBlY3RlZCByZXN1bHRz KQ0KK1NFTEVDVCAnb2snIEFTICJiZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUg cHNxbF9jb21pY3MocyBURVhUKSBcOw0KK0lOU0VSVCBJTlRPIHBzcWxfY29t aWNzIFZBTFVFUyAoJ0NhbHZpbicpLCAoJ2hvYmJlcycpIFw7DQorQ09QWSBw c3FsX2NvbWljcyBGUk9NIFNURElOIFw7DQorVVBEQVRFIHBzcWxfY29taWNz IFNFVCBzID0gJ0hvYmJlcycgV0hFUkUgcyA9ICdob2JiZXMnIFw7DQorREVM RVRFIEZST00gcHNxbF9jb21pY3MgV0hFUkUgcyA9ICdNb2UnIFw7DQorQ09Q WSBwc3FsX2NvbWljcyBUTyBTVERPVVQgXDsNCitUUlVOQ0FURSBwc3FsX2Nv bWljcyBcOw0KK0RST1AgVEFCTEUgcHNxbF9jb21pY3MgXDsNCitTRUxFQ1Qg J29rJyBBUyAiZG9uZSIgOw0KK01vZQ0KK1N1c2llDQorXC4NCitcc2V0IFNI T1dfQUxMX1JFU1VMVFMgb2ZmDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVD VCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KK1xzZXQgU0hP V19BTExfUkVTVUxUUyBvbg0KK0RST1AgRlVOQ1RJT04gd2FybihURVhUKTsN CisNCistLQ0KKy0tIGF1dG9jb21taXQNCistLQ0KK1xlY2hvICcjIGluaXRp YWwgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorXHNldCBBVVRPQ09NTUlU IG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKy0t IGltcGxpY2l0IEJFR0lODQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQpOw0K K1JPTExCQUNLOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNF UlQgSU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0K K0NPTU1JVDsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCitTRUxF Q1QgKiBGUk9NIGZvbyBPUkRFUiBCWSAxOw0KK0RST1AgVEFCTEUgZm9vOw0K K0NPTU1JVDsNCitcc2V0IEFVVE9DT01NSVQgb24NCitcZWNobyAnIyBBVVRP Q09NTUlUOicgOkFVVE9DT01NSVQNCistLSBleHBsaWNpdCBCRUdJTg0KK0JF R0lOOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNFUlQgSU5U TyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0KK0NPTU1J VDsNCitCRUdJTjsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCist LSBpbXBsaWNpdCB0cmFuc2FjdGlvbnMNCitTRUxFQ1QgKiBGUk9NIGZvbyBP UkRFUiBCWSAxOw0KK0RST1AgVEFCTEUgZm9vOw0KK1xlY2hvICcjIGZpbmFs IEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKw0KKy0tDQorLS0gdGVzdCBP Tl9FUlJPUl9ST0xMQkFDSw0KKy0tDQorQ1JFQVRFIEZVTkNUSU9OIHBzcWxf ZXJyb3IobXNnIFRFWFQpIFJFVFVSTlMgQk9PTEVBTiBBUyAkJA0KKyAgQkVH SU4NCisgICAgUkFJU0UgRVhDRVBUSU9OICdlcnJvciAlJywgbXNnOw0KKyAg RU5EOw0KKyQkIExBTkdVQUdFIHBscGdzcWw7DQorXGVjaG8gJyMgaW5pdGlh bCBPTl9FUlJPUl9ST0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK1xz ZXQgT05fRVJST1JfUk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9FUlJPUl9S T0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK1xlY2hvICcjIEFVVE9D T01NSVQ6JyA6QVVUT0NPTU1JVA0KK0JFR0lOOw0KK0NSRUFURSBUQUJMRSBi bGEocyBOT19TVUNIX1RZUEUpOyAgICAgICAgIC0tIGZhaWxzDQorQ1JFQVRF IFRBQkxFIGJsYShzIFRFWFQpOyAgICAgICAgICAgICAgICAgLS0gc3VjY2Vl ZHMNCitTRUxFQ1QgcHNxbF9lcnJvcignb29wcyEnKTsgICAgICAgICAgICAg ICAtLSBmYWlscw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdDYWx2aW4n KSwgKCdIb2JiZXMnKTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEg T1JERVIgQlkgMTsNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVT ICgnU3VzaWUnKTsgICAgICAgICAtLSBzdWNjZWVkcw0KKy0tIGNvbWJpbmVk IHF1ZXJpZXMNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9zYWx5bicp IFw7ICAgICAtLSB3aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZvcmUgZXJy b3InIEFTIHNob3cgXDsgICAgICAgICAgLS0gd2lsbCBzaG93IQ0KKyAgU0VM RUNUIHBzcWxfZXJyb3IoJ2JvdW0hJykgXDsgICAgICAgICAgIC0tIGZhaWx1 cmUNCisgIFNFTEVDVCAnYWZ0ZXIgZXJyb3InIEFTIG5vc2hvdzsgICAgICAg ICAtLSBoaWRkZW4gYnkgcHJlY2VlZGluZyBlcnJvcg0KK0lOU0VSVCBJTlRP IGJsYShzKSBWQUxVRVMgKCdNb2UnKSBcOyAgICAgIC0tIHdpbGwgcm9sbGJh Y2sNCisgIFNFTEVDVCBwc3FsX2Vycm9yKCdiYW0hJyk7DQorSU5TRVJUIElO VE8gYmxhIFZBTFVFUyAoJ01pc3MgV29ybXdvb2QnKTsgLS0gc3VjY2VlZHMN CitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsNCist LSBzb21lIHdpdGggYXV0b2NvbW1pdCBvZmYNCitcc2V0IEFVVE9DT01NSVQg b2ZmDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorLS0g aW1wbGljaXQgQkVHSU4NCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnRGFk Jyk7ICAgICAgICAgICAtLSBzdWNjZWVkcw0KK1NFTEVDVCBwc3FsX2Vycm9y KCdiYWQhJyk7ICAgICAgICAgICAgICAgIC0tIGltcGxpY2l0IHBhcnRpYWwg cm9sbGJhY2sNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnTXVtJykgXDsg ICAgICAgICAtLSB3aWxsIHJvbGxiYWNrDQorU0VMRUNUIENPVU5UKCopIEFT ICIjbXVtIg0KK0ZST00gYmxhIFdIRVJFIHMgPSAnTXVtJyBcOyAgICAgICAg ICAgICAgIC0tIGJ1dCBiZSBjb3VudGVkIGhlcmUNCitTRUxFQ1QgcHNxbF9l cnJvcignYmFkIScpOyAgICAgICAgICAgICAgICAtLSBpbXBsaWNpdCBwYXJ0 aWFsIHJvbGxiYWNrDQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9S REVSIEJZIDE7DQorLS0gcmVzZXQNCitcc2V0IEFVVE9DT01NSVQgb24NCitc c2V0IE9OX0VSUk9SX1JPTExCQUNLIG9mZg0KK1xlY2hvICcjIGZpbmFsIE9O X0VSUk9SX1JPTExCQUNLOicgOk9OX0VSUk9SX1JPTExCQUNLDQorRFJPUCBU QUJMRSBibGE7DQorRFJPUCBGVU5DVElPTiBwc3FsX2Vycm9yOw0KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMuc3FsDQppbmRl eCA4ODg2MjgwYzBhLi43ZmM5ZjA5NDY4IDEwMDY0NA0KLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KQEAgLTUwNCw3ICs1 MDQsNyBAQCBEUk9QIFRBQkxFIGFiYzsNCiANCiBjcmVhdGUgdGVtcCB0YWJs ZSBpX3RhYmxlIChmMSBpbnQpOw0KIA0KLS0tIHBzcWwgd2lsbCBzaG93IG9u bHkgdGhlIGxhc3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5 DQorLS0gcHNxbCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0aS1z dGF0ZW1lbnQgUXVlcnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsgU0VMRUNU IDM7DQogDQogLS0gdGhpcyBpbXBsaWNpdGx5IGNvbW1pdHM6DQo= --2056645051-978275340-1642237212=:3378943--