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 1n0MSq-00049A-7I for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Dec 2021 11:40:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n0MSp-00054r-2r for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Dec 2021 11:40:51 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n0MSo-00054i-M8 for pgsql-hackers@lists.postgresql.org; Thu, 23 Dec 2021 11:40:50 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n0MSl-0003M0-9V for pgsql-hackers@lists.postgresql.org; Thu, 23 Dec 2021 11:40:50 +0000 Received: from pc-131.home (lfbn-pap-1-67-104.w90-15.abo.wanadoo.fr [90.15.158.104]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id 37D47C0289; Thu, 23 Dec 2021 12:43:38 +0100 (CET) Date: Thu, 23 Dec 2021 07:40:37 -0400 (AST) From: Fabien COELHO X-X-Sender: fabien@pseudo To: Peter Eisentraut cc: "pgsql-hackers@lists.postgresql.org" Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: <2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com> Message-ID: References: <69C0B369-570C-4524-8EE4-BCCACECB6BEE@amazon.com> <20210412193301.GA11204@alvherre.pgsql> <3738387.1618451507@sss.pgh.pa.us> <451a2111-3757-c511-9413-8f8af531a167@enterprisedb.com> <18c78a01-4a34-9dd4-f78b-6860f1420c8e@enterprisedb.com> <6954328d-96f2-77f7-735f-7ce493a40949@enterprisedb.com> <2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="2056645051-1851495516-1640258767=:2668598" Content-ID: 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-1851495516-1640258767=:2668598 Content-Type: text/plain; CHARSET=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT Content-ID: Hello Peter, I finally took some time to look at this. >> Attached v11 is a rebase. > > This patch still has a few of the problems reported earlier this year. > > In [0], it was reported that certain replication commands result in infinite > loops because of faulty error handling. This still happens. I wrote a test > for it, attached here. (I threw in a few more basic tests, just to have some > more coverage that was lacking, and to have a file to put the new test in.) Hmmm… For some unclear reason on errors on a PGRES_COPY_* state PQgetResult keeps on returning an empty result. PQexec manually ignores it, so I did the same with a comment, but for me the real bug is somehow in PQgetResult behavior… > In [1], it was reported that server crashes produce duplicate error messages. > This also still happens. I didn't write a test for it, maybe you have an > idea. (Obviously, we could check whether the error message is literally > there twice in the output, but that doesn't seem very general.) But it's > easy to test manually: just have psql connect, shut down the server, then run > a query. This is also a feature/bug of libpq which happens to be hidden by PQexec: when one command crashes PQgetResult actually returns *2* results. First one with the FATAL message, second one when libpq figures out that the connection was lost with the second message appended to the first. PQexec just happen to silently ignore the first result. I added a manual reset of the error message when first shown so that it is not shown twice. It is unclear to me whether the reset should be somewhere in libpq instead. I added a voluntary crash at the end of the psql test. Attached v12 somehow fixes these issues in "psql" code rather than in libpq. -- Fabien. --2056645051-1851495516-1640258767=:2668598 Content-Type: text/x-diff; name=psql-show-all-results-12.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-12.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 bCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggYWUz OGQzZGNjMy4uMWQ0MTFhZTEyNCAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dt 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+DQpAQCAtMzU2NCwxMCArMzU1Nyw2IEBAIHNlbGVjdCAxXDsg c2VsZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1 ZGVkIGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUN CiAgICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0i cHJvdG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZv ciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBt dWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkg cmVzdWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0 OyBpbiB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhy ZWUgPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVj dXRlZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAg ICAgb25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KICAg ICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRlbT4NCiAgICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00MTU0LDYgKzQxNDMsMTggQEAgYmFyDQog ICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICAgPHZhcmxpc3RlbnRy eT4NCisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8 L3Zhcm5hbWU+PC90ZXJtPg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICAgPHBhcmE+DQorICAgICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0 IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIG9ubHkgdGhlIGxhc3QNCisg ICAgICAgIHJlc3VsdCBvZiBhIGNvbWJpbmVkIHF1ZXJ5ICg8bGl0ZXJhbD5c OzwvbGl0ZXJhbD4pIGlzIHNob3duIGluc3RlYWQgb2YNCisgICAgICAgIGFs bCBvZiB0aGVtLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVy YWw+LiAgVGhlIG9mZiBiZWhhdmlvcg0KKyAgICAgICAgaXMgZm9yIGNvbXBh dGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBwc3FsLg0KKyAgICAg ICAgPC9wYXJhPg0KKyAgICAgICAgPC9saXN0aXRlbT4NCisgICAgICA8L3Zh cmxpc3RlbnRyeT4NCisNCisgICAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQ09OVEVYVDwvdmFybmFtZT48L3Rl cm0+DQogICAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgICA8cGFyYT4NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3Bz cWwvY29tbW9uLmMNCmluZGV4IGVjOTc1YzNlMmEuLmUwNjY5OTg3OGIgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTMzLDYgKzMzLDggQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCwgYm9vbCAqdHhfZW5kZWQpOw0K IA0KIA0KIC8qDQpAQCAtMzUzLDcgKzM1NSw3IEBAIENoZWNrQ29ubmVjdGlv bih2b2lkKQ0KICAqIFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBm YWxzZSBmb3IgZXJyb3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1B Y2NlcHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9y KQ0KIHsNCiAJYm9vbAkJT0s7DQogDQpAQCAtMzg0LDcgKzM4Niw3IEBAIEFj Y2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KIAkJCQlicmVh azsNCiAJCX0NCiANCi0JaWYgKCFPSykNCisJaWYgKCFPSyAmJiBzaG93X2Vy cm9yKQ0KIAl7DQogCQljb25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpOw0KIA0KQEAgLTQ3Miw2ICs0NzQsMTggQEAgQ2xlYXJP clNhdmVSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCkNCiAJfQ0KIH0NCiANCisv Kg0KKyAqIENvbnN1bWUgYWxsIHJlc3VsdHMNCisgKi8NCitzdGF0aWMgdm9p ZA0KK0NsZWFyT3JTYXZlQWxsUmVzdWx0cygpDQorew0KKwlQR3Jlc3VsdAkq cmVzdWx0Ow0KKw0KKwl3aGlsZSAoKHJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpKSAhPSBOVUxMKQ0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsNCit9DQorDQogDQogLyoNCiAgKiBQcmludCBtaWNyb3RpbWluZyBvdXRw dXQuICBBbHdheXMgcHJpbnQgcmF3IG1pbGxpc2Vjb25kczsgaWYgdGhlIGlu dGVydmFsDQpAQCAtNTcyLDcgKzU4Niw3IEBAIFBTUUxleGVjKGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiANCi0JaWYg KCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1bHQocmVz LCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzKTsNCiAJ CXJlcyA9IE5VTEw7DQpAQCAtNTk1LDExICs2MDksOCBAQCBpbnQNCiBQU1FM ZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmludFF1ZXJ5 T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJYm9vbAkJ dGltaW5nID0gcHNldC50aW1pbmc7DQotCVBHcmVzdWx0ICAgKnJlczsNCiAJ ZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KLQlpbnN0cl90aW1lCWJlZm9y ZTsNCi0JaW5zdHJfdGltZQlhZnRlcjsNCi0JRklMRQkgICAqZm91dDsNCisJ aW50CQkJcmVzOw0KIA0KIAlpZiAoIXBzZXQuZGIpDQogCXsNCkBAIC02MDgs NzcgKzYxOSwxNCBAQCBQU1FMZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5 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 DQogfQ0KIA0KIA0KQEAgLTcxMyw3ICs2NjEsNyBAQCBQcmludE5vdGlmaWNh dGlvbnModm9pZCkNCiAgKiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwg ZmFsc2Ugb3RoZXJ3aXNlLg0KICAqLw0KIHN0YXRpYyBib29sDQotUHJpbnRR dWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cykNCitQcmludFF1 ZXJ5VHVwbGVzKGNvbnN0IFBHcmVzdWx0ICpyZXN1bHRzLCBjb25zdCBwcmlu dFF1ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJ Ym9vbAkJcmVzdWx0ID0gdHJ1ZTsNCiANCkBAIC03NDUsOCArNjkzLDkgQEAg UHJpbnRRdWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cykNCiAJ fQ0KIAllbHNlDQogCXsNCi0JCXByaW50UXVlcnkocmVzdWx0cywgJnBzZXQu cG9wdCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOw0K LQkJaWYgKGZlcnJvcihwc2V0LnF1ZXJ5Rm91dCkpDQorCQlGSUxFICpmb3V0 ID0gcHJpbnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5Rm91dCA6IHBzZXQucXVl cnlGb3V0Ow0KKwkJcHJpbnRRdWVyeShyZXN1bHRzLCBvcHQgPyBvcHQgOiAm cHNldC5wb3B0LCBmb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsNCisJCWlm IChmZXJyb3IoZm91dCkpDQogCQl7DQogCQkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3QgcHJpbnQgcmVzdWx0IHRhYmxlOiAlbSIpOw0KIAkJCXJlc3VsdCA9 IGZhbHNlOw0KQEAgLTg5MSwyMTMgKzg0MCwxMzEgQEAgbG9vcF9leGl0Og0K 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 cykpOw0KIAl9DQogDQogCWlmIChwc2V0LmxvZ2ZpbGUpDQpAQCAtMTEwOSw0 MyArOTc2LDUwIEBAIFByaW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3Vs 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 dWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTE1NSw3ICsxMDI5LDcgQEAgUHJp bnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogDQogCQljYXNl IFBHUkVTX0NPUFlfT1VUOg0KIAkJY2FzZSBQR1JFU19DT1BZX0lOOg0KLQkJ CS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJCS8qIG5vdGhpbmcgdG8g ZG8gaGVyZTogYWxyZWFkeSBwcm9jZXNzZWQgKi8NCiAJCQlzdWNjZXNzID0g dHJ1ZTsNCiAJCQlicmVhazsNCiANCkBAIC0xMTY4LDE1ICsxMDQyLDI2MSBA 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 bGVzKHJlc3VsdCwgZmFsc2UpOw0KKwkJCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdCk7DQorCQkJc3VjY2VzcyA9IGZhbHNlOw0KKw0KKwkJCS8qIGFuZCBz d2l0Y2ggdG8gbmV4dCByZXN1bHQgKi8NCisJCQlyZXN1bHRfc3RhdHVzID0g UFFyZXN1bHRTdGF0dXMocmVzdWx0KTsNCisJCQlpZiAocmVzdWx0X3N0YXR1 cyA9PSBQR1JFU19DT1BZX0JPVEggfHwNCisJCQkJcmVzdWx0X3N0YXR1cyA9 PSBQR1JFU19DT1BZX09VVCB8fA0KKwkJCQlyZXN1bHRfc3RhdHVzID09IFBH UkVTX0NPUFlfSU4pDQorCQkJCS8qDQorCQkJCSAqIEhtbW0uLi4gZm9yIHNv bWUgb2JzY3VyZSByZWFzb24gUFFnZXRSZXN1bHQgZG9lcyAqbm90Kg0KKwkJ CQkgKiByZXR1cm4gYSBOVUxMIGluIHRoZXNlIGNhc2VzIGRlc3BpdGUgdGhl IHJlc3VsdCBoYXZpbmcNCisJCQkJICogYmVlbiBjbGVhcmVkLCBidXQga2Vl cHMgcmV0dXJuaW5nIGFuICJlbXB0eSIgcmVzdWx0IHRoYXQNCisJCQkJICog d2UgaGF2ZSB0byBpZ25vcmUgbWFudWFsbHkuDQorCQkJCSAqLw0KKwkJCQly ZXN1bHQgPSBOVUxMOw0KKwkJCWVsc2UNCisJCQkJcmVzdWx0ID0gUFFnZXRS ZXN1bHQocHNldC5kYik7DQorDQorCQkJY29udGludWU7DQorCQl9DQorCQll bHNlIGlmICh0eF9lbmRlZCAhPSBOVUxMICYmICEgKnR4X2VuZGVkKQ0KKwkJ ew0KKwkJCS8qIG9uIHN1Y2Nlc3MsIHRlbGwgd2hldGhlciB0aGUgImN1cnJl bnQiIHRyYW5zYWN0aW9uIHNlcXVlbmNlIGVuZGVkICovDQorCQkJY29uc3Qg Y2hhciAqY21kID0gUFFjbWRTdGF0dXMocmVzdWx0KTsNCisJCQkqdHhfZW5k ZWQgPSBzdHJjbXAoY21kLCAiQ09NTUlUIikgPT0gMCB8fCBzdHJjbXAoY21k LCAiUk9MTEJBQ0siKSA9PSAwIHx8DQorCQkJCXN0cmNtcChjbWQsICJTQVZF UE9JTlQiKSA9PSAwIHx8IHN0cmNtcChjbWQsICJSRUxFQVNFIikgPT0gMDsN CisJCX0NCisNCisJCXJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cyhy ZXN1bHQpOw0KKw0KKwkJLyogbXVzdCBoYW5kbGUgQ09QWSBiZWZvcmUgY2hh bmdpbmcgdGhlIGN1cnJlbnQgcmVzdWx0ICovDQorCQlBc3NlcnQocmVzdWx0 X3N0YXR1cyAhPSBQR1JFU19DT1BZX0JPVEgpOw0KKwkJaWYgKHJlc3VsdF9z dGF0dXMgPT0gUEdSRVNfQ09QWV9JTiB8fA0KKwkJCXJlc3VsdF9zdGF0dXMg PT0gUEdSRVNfQ09QWV9PVVQpDQorCQl7DQorCQkJU2hvd05vdGljZU1lc3Nh Z2UoJm5vdGVzKTsNCisNCisJCQlpZiAoaXNfd2F0Y2gpDQorCQkJew0KKwkJ CQlDbGVhck9yU2F2ZUFsbFJlc3VsdHMoKTsNCisJCQkJcGdfbG9nX2Vycm9y KCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSIpOw0KKwkJCQly ZXR1cm4gLTE7DQorCQkJfQ0KKw0KKwkJCS8qIHVzZSBub3JtYWwgbm90aWNl IHByb2Nlc3NvciBkdXJpbmcgQ09QWSAqLw0KKwkJCVBRc2V0Tm90aWNlUHJv Y2Vzc29yKHBzZXQuZGIsIE5vdGljZVByb2Nlc3NvciwgTlVMTCk7DQorDQor CQkJc3VjY2VzcyAmPSBIYW5kbGVDb3B5UmVzdWx0KCZyZXN1bHQpOw0KKw0K KwkJCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIEFwcGVuZE5vdGlj ZU1lc3NhZ2UsICZub3Rlcyk7DQorCQl9DQorDQorCQkvKg0KKwkJICogQ2hl Y2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4gIEluIHRoZSB0eXBpY2FsIGNhc2Ug b2YgYSBzaW5nbGUtY29tbWFuZA0KKwkJICogc3RyaW5nLCBpdCB3aWxsIHJl dHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG90aGVyIHJlc3Vs dHMNCisJCSAqIHRvIHByb2Nlc3MuIFdlIG5lZWQgdG8gZG8gdGhhdCB0byBj aGVjayB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QuDQorCQkgKi8NCisJCW5v dGVzLmN1cnJlbnQgXj0gMTsNCisJCW5leHRfcmVzdWx0ID0gUFFnZXRSZXN1 bHQocHNldC5kYik7DQorCQlub3Rlcy5jdXJyZW50IF49IDE7DQorCQlsYXN0 ID0gKG5leHRfcmVzdWx0ID09IE5VTEwpOw0KKw0KKwkJLyoNCisJCSAqIEdl dCB0aW1pbmcgbWVhc3VyZSBiZWZvcmUgcHJpbnRpbmcgdGhlIGxhc3QgcmVz dWx0Lg0KKwkJICoNCisJCSAqIEl0IHdpbGwgaW5jbHVkZSB0aGUgZGlzcGxh eSBvZiBwcmV2aW91cyByZXN1bHRzLCBpZiBhbnkuDQorCQkgKiBUaGlzIGNh bm5vdCBiZSBoZWxwZWQgYmVjYXVzZSB0aGUgc2VydmVyIGdvZXMgb24gcHJv Y2Vzc2luZw0KKwkJICogZnVydGhlciBxdWVyaWVzIGFueXdheSB3aGlsZSB0 aGUgcHJldmlvdXMgb25lcyBhcmUgYmVpbmcgZGlzcGxheWVkLg0KKwkJICog VGhlIHBhcmFsbGVsIGV4ZWN1dGlvbiBvZiB0aGUgY2xpZW50IGRpc3BsYXkg aGlkZXMgdGhlIHNlcnZlciB0aW1lDQorCQkgKiB3aGVuIGl0IGlzIHNob3J0 ZXIuDQorCQkgKg0KKwkJICogV2l0aCBjb21iaW5lZCBxdWVyaWVzLCB0aW1p bmcgbXVzdCBiZSB1bmRlcnN0b29kIGFzIGFuIHVwcGVyIGJvdW5kDQorCQkg KiBvZiB0aGUgdGltZSBzcGVudCBwcm9jZXNzaW5nIHRoZW0uDQorCQkgKi8N CisJCWlmIChsYXN0ICYmIHRpbWluZykNCisJCXsNCisJCQlpbnN0cl90aW1l CW5vdzsNCisJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQorCQkJ SU5TVFJfVElNRV9TVUJUUkFDVChub3csIGJlZm9yZSk7DQorCQkJKnBlbGFw c2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhub3cpOw0KKwkJ fQ0KKw0KKwkJLyogbm90aWNlcyBhbHJlYWR5IHNob3duIGFib3ZlIGZvciBj b3B5ICovDQorCQlTaG93Tm90aWNlTWVzc2FnZSgmbm90ZXMpOw0KKw0KKwkJ LyogdGhpcyBtYXkgb3IgbWF5IG5vdCBwcmludCBzb21ldGhpbmcgZGVwZW5k aW5nIG9uIHNldHRpbmdzICovDQorCQlpZiAocmVzdWx0ICE9IE5VTEwpDQor CQkJc3VjY2VzcyAmPSBIYW5kbGVRdWVyeVJlc3VsdChyZXN1bHQsIGxhc3Qs IGZhbHNlLCBvcHQsIHByaW50UXVlcnlGb3V0KTsNCisNCisJCS8qIHNldCB2 YXJpYWJsZXMgb24gbGFzdCByZXN1bHQgaWYgYWxsIHdlbnQgd2VsbCAqLw0K KwkJaWYgKCFpc193YXRjaCAmJiBsYXN0ICYmIHN1Y2Nlc3MpDQorCQkJU2V0 UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgdHJ1ZSk7DQorDQorCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHQpOw0KKwkJbm90ZXMuY3VycmVudCBePSAxOw0K KwkJcmVzdWx0ID0gbmV4dF9yZXN1bHQ7DQorDQorCQlpZiAoY2FuY2VsX3By ZXNzZWQpDQorCQl7DQorCQkJQ2xlYXJPclNhdmVBbGxSZXN1bHRzKCk7DQor CQkJYnJlYWs7DQorCQl9DQorCX0NCisNCisJLyogcmVzZXQgbm90aWNlIGhv b2sgKi8NCisJUFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5kYiwgTm90aWNl UHJvY2Vzc29yLCBOVUxMKTsNCisJdGVybVBRRXhwQnVmZmVyKCZub3Rlcy5t ZXNzYWdlc1swXSk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMubWVzc2Fn ZXNbMV0pOw0KKw0KKwkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJv bSBjb25uIGxvc3MgZHVyaW5nIENPUFkgKi8NCisJaWYgKCFDaGVja0Nvbm5l Y3Rpb24oKSkNCisJCXJldHVybiAtMTsNCisNCisJcmV0dXJuIGNhbmNlbF9w cmVzc2VkID8gMCA6IHN1Y2Nlc3MgPyAxIDogLTE7DQorfQ0KKw0KIA0KIC8q DQogICogU2VuZFF1ZXJ5OiBzZW5kIHRoZSBxdWVyeSBzdHJpbmcgdG8gdGhl IGJhY2tlbmQNCkBAIC0xMTk0LDEyICsxMzE0LDE0IEBAIGJvb2wNCiBTZW5k UXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogew0KIAlib29sCQl0aW1pbmcg PSBwc2V0LnRpbWluZzsNCi0JUEdyZXN1bHQgICAqcmVzdWx0czsNCisJUEdy ZXN1bHQgICAqcmVzdWx0cyA9IE5VTEw7DQogCVBHVHJhbnNhY3Rpb25TdGF0 dXNUeXBlIHRyYW5zYWN0aW9uX3N0YXR1czsNCiAJZG91YmxlCQllbGFwc2Vk X21zZWMgPSAwOw0KIAlib29sCQlPSyA9IGZhbHNlOw0KKwlib29sCQlyZXNf ZXJyb3I7DQogCWludAkJCWk7DQogCWJvb2wJCW9uX2Vycm9yX3JvbGxiYWNr X3NhdmVwb2ludCA9IGZhbHNlOw0KKwlib29sCQl0eF9lbmRlZCA9IGZhbHNl Ow0KIA0KIAlpZiAoIXBzZXQuZGIpDQogCXsNCkBAIC0xMjM4LDgyICsxMzYw LDY5IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiAJCWZmbHVz aChwc2V0LmxvZ2ZpbGUpOw0KIAl9DQogDQorCS8qIGdsb2JhbCBxdWVyeSBj YW5jZWxsYXRpb24gZm9yIHRoaXMgcXVlcnkgKi8NCiAJU2V0Q2FuY2VsQ29u bihwc2V0LmRiKTsNCiANCiAJdHJhbnNhY3Rpb25fc3RhdHVzID0gUFF0cmFu c2FjdGlvblN0YXR1cyhwc2V0LmRiKTsNCiANCisJLyogaXNzdWUgYSBCRUdJ TiBpZiBuZWVkZWQsIGNvcnJlc3BvbmRpbmcgQ09NTUlUL1JPTExCQUNLIGJ5 IHVzZXIgKi8NCiAJaWYgKHRyYW5zYWN0aW9uX3N0YXR1cyA9PSBQUVRSQU5T X0lETEUgJiYNCiAJCSFwc2V0LmF1dG9jb21taXQgJiYNCiAJCSFjb21tYW5k X25vX2JlZ2luKHF1ZXJ5KSkNCiAJew0KLQkJcmVzdWx0cyA9IFBRZXhlYyhw c2V0LmRiLCAiQkVHSU4iKTsNCi0JCWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1 bHRzKSAhPSBQR1JFU19DT01NQU5EX09LKQ0KKwkJUEdyZXN1bHQgICAgKnJl c3VsdDsNCisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsN CisJCXJlc19lcnJvciA9IFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdS RVNfQ09NTUFORF9PSzsNCisJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7 DQorDQorCQlpZiAocmVzX2Vycm9yKQ0KIAkJew0KIAkJCXBnX2xvZ19pbmZv KCIlcyIsIFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpKTsNCi0JCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHRzKTsNCi0JCQlSZXNldENhbmNlbENvbm4oKTsN CiAJCQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVwOw0KIAkJfQ0KLQkJQ2xlYXJP clNhdmVSZXN1bHQocmVzdWx0cyk7DQorDQorCQkvKiBtdXN0IGJlIFBRVFJB TlNfSU5UUkFOUyBhZnRlciBhIEJFR0lOICovDQogCQl0cmFuc2FjdGlvbl9z dGF0dXMgPSBQUXRyYW5zYWN0aW9uU3RhdHVzKHBzZXQuZGIpOw0KIAl9DQog DQorCS8qIGNyZWF0ZSBhdXRvbWF0aWMgc2F2ZXBvaW50IGlmIG5lZWRlZCBh bmQgcG9zc2libGUgKi8NCiAJaWYgKHRyYW5zYWN0aW9uX3N0YXR1cyA9PSBQ UVRSQU5TX0lOVFJBTlMgJiYNCiAJCXBzZXQub25fZXJyb3Jfcm9sbGJhY2sg IT0gUFNRTF9FUlJPUl9ST0xMQkFDS19PRkYgJiYNCiAJCShwc2V0LmN1cl9j bWRfaW50ZXJhY3RpdmUgfHwNCiAJCSBwc2V0Lm9uX2Vycm9yX3JvbGxiYWNr ID09IFBTUUxfRVJST1JfUk9MTEJBQ0tfT04pKQ0KIAl7DQotCQlyZXN1bHRz ID0gUFFleGVjKHBzZXQuZGIsICJTQVZFUE9JTlQgcGdfcHNxbF90ZW1wb3Jh cnlfc2F2ZXBvaW50Iik7DQotCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzdWx0 cykgIT0gUEdSRVNfQ09NTUFORF9PSykNCisJCVBHcmVzdWx0ICAgKnJlc3Vs dDsNCisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiU0FWRVBPSU5UIHBn X3BzcWxfdGVtcG9yYXJ5X3NhdmVwb2ludCIpOw0KKwkJcmVzX2Vycm9yID0g UFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JFU19DT01NQU5EX09LOw0K KwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisNCisJCWlmIChyZXNf ZXJyb3IpDQogCQl7DQogCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJvck1l c3NhZ2UocHNldC5kYikpOw0KLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3Vs dHMpOw0KLQkJCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJCWdvdG8gc2VuZHF1 ZXJ5X2NsZWFudXA7DQogCQl9DQotCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1 bHRzKTsNCisNCiAJCW9uX2Vycm9yX3JvbGxiYWNrX3NhdmVwb2ludCA9IHRy dWU7DQogCX0NCiANCisJLyogcHJvY2VzcyB0aGUgcXVlcnksIG9uZSB3YXkg b3IgdGhlIG90aGVyICovDQogCWlmIChwc2V0LmdkZXNjX2ZsYWcpDQogCXsN CiAJCS8qIERlc2NyaWJlIHF1ZXJ5J3MgcmVzdWx0IGNvbHVtbnMsIHdpdGhv dXQgZXhlY3V0aW5nIGl0ICovDQogCQlPSyA9IERlc2NyaWJlUXVlcnkocXVl cnksICZlbGFwc2VkX21zZWMpOw0KLQkJUmVzZXRDYW5jZWxDb25uKCk7DQog CQlyZXN1bHRzID0gTlVMTDsJCQkvKiBQUWNsZWFyKE5VTEwpIGRvZXMgbm90 aGluZyAqLw0KIAl9DQogCWVsc2UgaWYgKHBzZXQuZmV0Y2hfY291bnQgPD0g MCB8fCBwc2V0LmdleGVjX2ZsYWcgfHwNCiAJCQkgcHNldC5jcm9zc3RhYl9m bGFnIHx8ICFpc19zZWxlY3RfY29tbWFuZChxdWVyeSkpDQogCXsNCiAJCS8q IERlZmF1bHQgZmV0Y2gtaXQtYWxsLWFuZC1wcmludCBtb2RlICovDQotCQlp bnN0cl90aW1lCWJlZm9yZSwNCi0JCQkJCWFmdGVyOw0KLQ0KLQkJaWYgKHRp bWluZykNCi0JCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9yZSk7DQot DQotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIHF1ZXJ5KTsNCi0NCi0J CS8qIHRoZXNlIG9wZXJhdGlvbnMgYXJlIGluY2x1ZGVkIGluIHRoZSB0aW1p bmcgcmVzdWx0OiAqLw0KLQkJUmVzZXRDYW5jZWxDb25uKCk7DQotCQlPSyA9 IFByb2Nlc3NSZXN1bHQoJnJlc3VsdHMpOw0KLQ0KLQkJaWYgKHRpbWluZykN Ci0JCXsNCi0JCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0J CQlJTlNUUl9USU1FX1NVQlRSQUNUKGFmdGVyLCBiZWZvcmUpOw0KLQkJCWVs YXBzZWRfbXNlYyA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGFmdGVyKTsN Ci0JCX0NCi0NCi0JCS8qIGJ1dCBwcmludGluZyByZXN1bHRzIGlzbid0OiAq Lw0KLQkJaWYgKE9LICYmIHJlc3VsdHMpDQotCQkJT0sgPSBQcmludFF1ZXJ5 UmVzdWx0cyhyZXN1bHRzKTsNCisJCWludCByZXMgPSBTZW5kUXVlcnlBbmRQ cm9jZXNzUmVzdWx0cyhxdWVyeSwgJmVsYXBzZWRfbXNlYywgZmFsc2UsIE5V TEwsIE5VTEwsICZ0eF9lbmRlZCk7DQorCQlPSyA9IChyZXMgPj0gMCk7DQog CX0NCiAJZWxzZQ0KIAl7DQogCQkvKiBGZXRjaC1pbi1zZWdtZW50cyBtb2Rl ICovDQogCQlPSyA9IEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKHF1ZXJ5LCAmZWxh cHNlZF9tc2VjKTsNCi0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0 cyA9IE5VTEw7CQkJLyogUFFjbGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8N CiAJfQ0KIA0KQEAgLTEzNDYsMTEgKzE0NTUsNyBAQCBTZW5kUXVlcnkoY29u c3QgY2hhciAqcXVlcnkpDQogCQkJCSAqIHNhdmVwb2ludCBpcyBnb25lLiBJ ZiB0aGV5IGlzc3VlZCBhIFNBVkVQT0lOVCwgcmVsZWFzaW5nDQogCQkJCSAq IG91cnMgd291bGQgcmVtb3ZlIHRoZWlycy4NCiAJCQkJICovDQotCQkJCWlm IChyZXN1bHRzICYmDQotCQkJCQkoc3RyY21wKFBRY21kU3RhdHVzKHJlc3Vs dHMpLCAiQ09NTUlUIikgPT0gMCB8fA0KLQkJCQkJIHN0cmNtcChQUWNtZFN0 YXR1cyhyZXN1bHRzKSwgIlNBVkVQT0lOVCIpID09IDAgfHwNCi0JCQkJCSBz dHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0cyksICJSRUxFQVNFIikgPT0gMCB8 fA0KLQkJCQkJIHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIlJPTExC QUNLIikgPT0gMCkpDQorCQkJCWlmICh0eF9lbmRlZCkNCiAJCQkJCXN2cHRj bWQgPSBOVUxMOw0KIAkJCQllbHNlDQogCQkJCQlzdnB0Y21kID0gIlJFTEVB U0UgcGdfcHNxbF90ZW1wb3Jhcnlfc2F2ZXBvaW50IjsNCkBAIC0xMzcyLDE0 ICsxNDc3LDE1IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiAJ CQlQR3Jlc3VsdCAgICpzdnB0cmVzOw0KIA0KIAkJCXN2cHRyZXMgPSBQUWV4 ZWMocHNldC5kYiwgc3ZwdGNtZCk7DQotCQkJaWYgKFBRcmVzdWx0U3RhdHVz KHN2cHRyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spDQorCQkJcmVzX2Vycm9y ID0gUFFyZXN1bHRTdGF0dXMoc3ZwdHJlcykgIT0gUEdSRVNfQ09NTUFORF9P SzsNCisNCisJCQlpZiAocmVzX2Vycm9yKQ0KIAkJCXsNCiAJCQkJcGdfbG9n X2luZm8oIiVzIiwgUFFlcnJvck1lc3NhZ2UocHNldC5kYikpOw0KIAkJCQlD bGVhck9yU2F2ZVJlc3VsdChzdnB0cmVzKTsNCiAJCQkJT0sgPSBmYWxzZTsN CiANCiAJCQkJUFFjbGVhcihyZXN1bHRzKTsNCi0JCQkJUmVzZXRDYW5jZWxD b25uKCk7DQogCQkJCWdvdG8gc2VuZHF1ZXJ5X2NsZWFudXA7DQogCQkJfQ0K IAkJCVBRY2xlYXIoc3ZwdHJlcyk7DQpAQCAtMTQxMCw2ICsxNTE2LDkgQEAg U2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIA0KIHNlbmRxdWVyeV9j bGVhbnVwOg0KIA0KKwkvKiBnbG9iYWwgY2FuY2VsbGF0aW9uIHJlc2V0ICov DQorCVJlc2V0Q2FuY2VsQ29ubigpOw0KKw0KIAkvKiByZXNldCBcZydzIG91 dHB1dC10by1maWxlbmFtZSB0cmlnZ2VyICovDQogCWlmIChwc2V0LmdmbmFt ZSkNCiAJew0KQEAgLTE0OTAsNyArMTU5OSw3IEBAIERlc2NyaWJlUXVlcnko Y29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAlQ UWNsZWFyKHJlc3VsdHMpOw0KIA0KIAlyZXN1bHRzID0gUFFkZXNjcmliZVBy ZXBhcmVkKHBzZXQuZGIsICIiKTsNCi0JT0sgPSBBY2NlcHRSZXN1bHQocmVz dWx0cykgJiYNCisJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkg JiYNCiAJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01N QU5EX09LKTsNCiAJaWYgKE9LICYmIHJlc3VsdHMpDQogCXsNCkBAIC0xNTM4 LDcgKzE2NDcsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5 LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQlQUWNsZWFyKHJlc3VsdHMp Ow0KIA0KIAkJCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEp Ow0KLQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0g QWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0KIA0KIAkJCWlmICh0aW1p bmcpDQogCQkJew0KQEAgLTE1NDgsNyArMTY1Nyw3IEBAIERlc2NyaWJlUXVl cnkoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0K IAkJCX0NCiANCiAJCQlpZiAoT0sgJiYgcmVzdWx0cykNCi0JCQkJT0sgPSBQ cmludFF1ZXJ5UmVzdWx0cyhyZXN1bHRzKTsNCisJCQkJT0sgPSBIYW5kbGVR dWVyeVJlc3VsdChyZXN1bHRzLCB0cnVlLCBmYWxzZSwgTlVMTCwgTlVMTCk7 DQogDQogCQkJdGVybVBRRXhwQnVmZmVyKCZidWYpOw0KIAkJfQ0KQEAgLTE2 MDgsNyArMTcxNyw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNo YXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJaWYgKFBRdHJh bnNhY3Rpb25TdGF0dXMocHNldC5kYikgPT0gUFFUUkFOU19JRExFKQ0KIAl7 DQogCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJCRUdJTiIpOw0KLQkJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0 UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVz KHJlc3VsdHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNh dmVSZXN1bHQocmVzdWx0cyk7DQogCQlpZiAoIU9LKQ0KQEAgLTE2MjIsNyAr MTczMSw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQkJCSAgcXVlcnkpOw0K IA0KIAlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0J T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJT0sgPSBBY2NlcHRS ZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCShQUXJlc3VsdFN0YXR1cyhy ZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYgKCFPSykNCiAJ CVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQpAQCAtMTY5NSw3 ICsxODA0LDcgQEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAq cXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJCQlpc19wYWdlciA9 IGZhbHNlOw0KIAkJCX0NCiANCi0JCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1 bHRzKTsNCisJCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKTsN CiAJCQlBc3NlcnQoIU9LKTsNCiAJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVz dWx0cywgT0spOw0KIAkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0K QEAgLTE4MDQsNyArMTkxMyw3IEBAIGNsZWFudXA6DQogCXJlc3VsdHMgPSBQ UWV4ZWMocHNldC5kYiwgIkNMT1NFIF9wc3FsX2N1cnNvciIpOw0KIAlpZiAo T0spDQogCXsNCi0JCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQor CQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQ UXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsN CiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAl9DQpAQCAtMTgx NCw3ICsxOTIzLDcgQEAgY2xlYW51cDoNCiAJaWYgKHN0YXJ0ZWRfdHhuKQ0K IAl7DQogCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIE9LID8gIkNPTU1J VCIgOiAiUk9MTEJBQ0siKTsNCi0JCU9LICY9IEFjY2VwdFJlc3VsdChyZXN1 bHRzKSAmJg0KKwkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUp ICYmDQogCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVTX0NP TU1BTkRfT0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQog CX0NCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jp bi9wc3FsL2hlbHAuYw0KaW5kZXggZGIxMmE4YjJmMy4uZDFhNjM4YjhmMiAx MDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9oZWxwLmMNCkBAIC00MTIsNiArNDEyLDggQEAgaGVscFZhcmlh Ymxlcyh1bnNpZ25lZCBzaG9ydCBpbnQgcGFnZXIpDQogCWZwcmludGYob3V0 cHV0LCBfKCIgIFNFUlZFUl9WRVJTSU9OX05BTUVcbiINCiAJCQkJCSAgIiAg U0VSVkVSX1ZFUlNJT05fTlVNXG4iDQogCQkJCQkgICIgICAgc2VydmVyJ3Mg dmVyc2lvbiAoaW4gc2hvcnQgc3RyaW5nIG9yIG51bWVyaWMgZm9ybWF0KVxu IikpOw0KKwlmcHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0FMTF9SRVNVTFRT XG4iDQorCQkJCQkgICIgICAgc2hvdyBhbGwgcmVzdWx0cyBvZiBhIGNvbWJp bmVkIHF1ZXJ5IChcXDspIGluc3RlYWQgb2Ygb25seSB0aGUgbGFzdFxuIikp Ow0KIAlmcHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0NPTlRFWFRcbiINCiAJ CQkJCSAgIiAgICBjb250cm9scyBkaXNwbGF5IG9mIG1lc3NhZ2UgY29udGV4 dCBmaWVsZHMgW25ldmVyLCBlcnJvcnMsIGFsd2F5c11cbiIpKTsNCiAJZnBy aW50ZihvdXRwdXQsIF8oIiAgU0lOR0xFTElORVxuIg0KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oIGIvc3JjL2Jpbi9wc3FsL3NldHRp bmdzLmgNCmluZGV4IDgzZjJlNmYyNTQuLjYyNTgzYWQ2Y2EgMTAwNjQ0DQot LS0gYS9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KKysrIGIvc3JjL2Jpbi9w c3FsL3NldHRpbmdzLmgNCkBAIC0xNDgsNiArMTQ4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgX3BzcWxTZXR0aW5ncw0KIAljb25zdCBjaGFyICpwcm9tcHQyOw0K IAljb25zdCBjaGFyICpwcm9tcHQzOw0KIAlQR1ZlcmJvc2l0eSB2ZXJib3Np dHk7CQkvKiBjdXJyZW50IGVycm9yIHZlcmJvc2l0eSBsZXZlbCAqLw0KKwli b29sCQlzaG93X2FsbF9yZXN1bHRzOw0KIAlQR0NvbnRleHRWaXNpYmlsaXR5 IHNob3dfY29udGV4dDsJLyogY3VycmVudCBjb250ZXh0IGRpc3BsYXkgbGV2 ZWwgKi8NCiB9IFBzcWxTZXR0aW5nczsNCiANCmRpZmYgLS1naXQgYS9zcmMv YmluL3BzcWwvc3RhcnR1cC5jIGIvc3JjL2Jpbi9wc3FsL3N0YXJ0dXAuYw0K aW5kZXggZjdlYTRjZTNkNC4uNjk0MGZlMjk5OSAxMDA2NDQNCi0tLSBhL3Ny Yy9iaW4vcHNxbC9zdGFydHVwLmMNCisrKyBiL3NyYy9iaW4vcHNxbC9zdGFy dHVwLmMNCkBAIC0yMDMsNiArMjAzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQ0KIAlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQUk9NUFQx IiwgREVGQVVMVF9QUk9NUFQxKTsNCiAJU2V0VmFyaWFibGUocHNldC52YXJz LCAiUFJPTVBUMiIsIERFRkFVTFRfUFJPTVBUMik7DQogCVNldFZhcmlhYmxl KHBzZXQudmFycywgIlBST01QVDMiLCBERUZBVUxUX1BST01QVDMpOw0KKwlT ZXRWYXJpYWJsZUJvb2wocHNldC52YXJzLCAiU0hPV19BTExfUkVTVUxUUyIp Ow0KIA0KIAlwYXJzZV9wc3FsX29wdGlvbnMoYXJnYywgYXJndiwgJm9wdGlv bnMpOw0KIA0KQEAgLTExNTAsNiArMTE1MSwxMiBAQCB2ZXJib3NpdHlfaG9v ayhjb25zdCBjaGFyICpuZXd2YWwpDQogCXJldHVybiB0cnVlOw0KIH0NCiAN CitzdGF0aWMgYm9vbA0KK3Nob3dfYWxsX3Jlc3VsdHNfaG9vayhjb25zdCBj aGFyICpuZXd2YWwpDQorew0KKwlyZXR1cm4gUGFyc2VWYXJpYWJsZUJvb2wo bmV3dmFsLCAiU0hPV19BTExfUkVTVUxUUyIsICZwc2V0LnNob3dfYWxsX3Jl c3VsdHMpOw0KK30NCisNCiBzdGF0aWMgY2hhciAqDQogc2hvd19jb250ZXh0 X3N1YnN0aXR1dGVfaG9vayhjaGFyICpuZXd2YWwpDQogew0KQEAgLTEyNTEs NiArMTI1OCw5IEBAIEVzdGFibGlzaFZhcmlhYmxlU3BhY2Uodm9pZCkNCiAJ U2V0VmFyaWFibGVIb29rcyhwc2V0LnZhcnMsICJWRVJCT1NJVFkiLA0KIAkJ CQkJIHZlcmJvc2l0eV9zdWJzdGl0dXRlX2hvb2ssDQogCQkJCQkgdmVyYm9z aXR5X2hvb2spOw0KKwlTZXRWYXJpYWJsZUhvb2tzKHBzZXQudmFycywgIlNI T1dfQUxMX1JFU1VMVFMiLA0KKwkJCQkJIGJvb2xfc3Vic3RpdHV0ZV9ob29r LA0KKwkJCQkJIHNob3dfYWxsX3Jlc3VsdHNfaG9vayk7DQogCVNldFZhcmlh YmxlSG9va3MocHNldC52YXJzLCAiU0hPV19DT05URVhUIiwNCiAJCQkJCSBz aG93X2NvbnRleHRfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIHNob3dfY29u dGV4dF9ob29rKTsNCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdC8wMDFf YmFzaWMucGwgYi9zcmMvYmluL3BzcWwvdC8wMDFfYmFzaWMucGwNCmluZGV4 IDZjYTBiYzc1ZDAuLjc2MGRjNWVhMjEgMTAwNjQ0DQotLS0gYS9zcmMvYmlu L3BzcWwvdC8wMDFfYmFzaWMucGwNCisrKyBiL3NyYy9iaW4vcHNxbC90LzAw MV9iYXNpYy5wbA0KQEAgLTYsNiArNiw3IEBAIHVzZSB3YXJuaW5nczsNCiAN CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsNCiB1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7DQorDQogdXNlIFRlc3Q6Ok1vcmUgdGVzdHMg PT4gMjU7DQogDQogcHJvZ3JhbV9oZWxwX29rKCdwc3FsJyk7DQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5jDQppbmRleCBiNTI0ZGM4N2ZjLi40MzJlOWY2 NjM1IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5j DQorKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMNCkBAIC00MzM2 LDcgKzQzMzYsNyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4 dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQ0KIAkJbWF0Y2hlcyA9IGNvbXBsZXRl X2Zyb21fdmFyaWFibGVzKHRleHQsICIiLCAiIiwgZmFsc2UpOw0KIAllbHNl IGlmIChUYWlsTWF0Y2hlc0NTKCJcXHNldCIsIE1hdGNoQW55KSkNCiAJew0K LQkJaWYgKFRhaWxNYXRjaGVzQ1MoIkFVVE9DT01NSVR8T05fRVJST1JfU1RP UHxRVUlFVHwiDQorCQlpZiAoVGFpbE1hdGNoZXNDUygiQVVUT0NPTU1JVHxP Tl9FUlJPUl9TVE9QfFFVSUVUfFNIT1dfQUxMX1JFU1VMVFN8Ig0KIAkJCQkJ CSAgIlNJTkdMRUxJTkV8U0lOR0xFU1RFUCIpKQ0KIAkJCUNPTVBMRVRFX1dJ VEhfQ1MoIm9uIiwgIm9mZiIpOw0KIAkJZWxzZSBpZiAoVGFpbE1hdGNoZXND UygiQ09NUF9LRVlXT1JEX0NBU0UiKSkNCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2V4cG9ydHMudHh0DQppbmRleCBlOGJjYzg4MzcwLi4yYTNkMjlhZWU1 IDEwMDY0NA0KLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50 eHQNCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0DQpA QCAtMTg2LDMgKzE4Niw0IEBAIFBRcGlwZWxpbmVTdGF0dXMgICAgICAgICAg MTgzDQogUFFzZXRUcmFjZUZsYWdzICAgICAgICAgICAxODQNCiBQUW1ibGVu Qm91bmRlZCAgICAgICAgICAgIDE4NQ0KIFBRc2VuZEZsdXNoUmVxdWVzdCAg ICAgICAgMTg2DQorUFFjbGVhckVycm9yTWVzc2FnZQkgICAgICAxODcNCmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMNCmluZGV4IDli NmE2OTM5ZjAuLjdjYTIwNDgxNDQgMTAwNjQ0DQotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1jb25uZWN0LmMNCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLWNvbm5lY3QuYw0KQEAgLTY3ODMsNiArNjc4MywxMiBAQCBQ UWVycm9yTWVzc2FnZShjb25zdCBQR2Nvbm4gKmNvbm4pDQogCXJldHVybiBj b25uLT5lcnJvck1lc3NhZ2UuZGF0YTsNCiB9DQogDQordm9pZA0KK1BRY2xl YXJFcnJvck1lc3NhZ2UoUEdjb25uICpjb25uKQ0KK3sNCisJcmVzZXRQUUV4 cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlKTsNCit9DQorDQogLyoNCiAg KiBJbiBXaW5kb3dzLCBzb2NrZXQgdmFsdWVzIGFyZSB1bnNpZ25lZCwgYW5k IGFuIGludmFsaWQgc29ja2V0IHZhbHVlDQogICogKElOVkFMSURfU09DS0VU KSBpcyB+MCwgd2hpY2ggZXF1YWxzIC0xIGluIGNvbXBhcmlzb25zICh3aXRo IG5vIGNvbXBpbGVyDQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZl LmgNCmluZGV4IGE2ZmQ2OWFjZWIuLmI3MzZlY2UzODYgMTAwNjQ0DQotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oDQorKysgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oDQpAQCAtMzQ3LDYgKzM0Nyw3 IEBAIGV4dGVybiBjb25zdCBjaGFyICpQUXBhcmFtZXRlclN0YXR1cyhjb25z dCBQR2Nvbm4gKmNvbm4sDQogZXh0ZXJuIGludAlQUXByb3RvY29sVmVyc2lv bihjb25zdCBQR2Nvbm4gKmNvbm4pOw0KIGV4dGVybiBpbnQJUFFzZXJ2ZXJW ZXJzaW9uKGNvbnN0IFBHY29ubiAqY29ubik7DQogZXh0ZXJuIGNoYXIgKlBR ZXJyb3JNZXNzYWdlKGNvbnN0IFBHY29ubiAqY29ubik7DQorZXh0ZXJuIHZv aWQJUFFjbGVhckVycm9yTWVzc2FnZShQR2Nvbm4gKmNvbm4pOw0KIGV4dGVy biBpbnQJUFFzb2NrZXQoY29uc3QgUEdjb25uICpjb25uKTsNCiBleHRlcm4g aW50CVBRYmFja2VuZFBJRChjb25zdCBQR2Nvbm4gKmNvbm4pOw0KIGV4dGVy biBQR3BpcGVsaW5lU3RhdHVzIFBRcGlwZWxpbmVTdGF0dXMoY29uc3QgUEdj b25uICpjb25uKTsNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvcHlzZWxlY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jb3B5c2VsZWN0Lm91dA0KaW5kZXggNzI4NjVmZTFlYi4uYmI5ZTAy NmY5MSAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y29weXNlbGVjdC5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weXNlbGVjdC5vdXQNCkBAIC0xMjYsNyArMTI2LDcgQEAgY29weSAo c2VsZWN0IDEpIHRvIHN0ZG91dFw7IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhl biBlcnJvcg0KIEVSUk9SOiAgZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAx LzBcOyBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5 DQogRVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvDQotY29weSAoc2VsZWN0IDEp IHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxl Y3QgMFw7IHNlbGVjdCAzOyAtLSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0 byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0 IDNcOyBzZWxlY3QgNDsgLS0gMSAyIDMgNA0KIDENCiAyDQogID9jb2x1bW4/ IA0KQEAgLTEzNCw4ICsxMzQsMTggQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0 ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7 IHNlbGVjdCAzOyAtLQ0KICAgICAgICAgMw0KICgxIHJvdykNCiANCisgP2Nv bHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgNA0KKygxIHJvdykNCisN CiBjcmVhdGUgdGFibGUgdGVzdDMgKGMgaW50KTsNCi1zZWxlY3QgMFw7IGNv cHkgdGVzdDMgZnJvbSBzdGRpblw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7 IHNlbGVjdCAxOyAtLSAxDQorc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20g c3RkaW5cOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsgLS0g MCAxDQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDANCiso MSByb3cpDQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAg IDENCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0K aW5kZXggNjQyOGViYzUwNy4uMzhjYWJmMWExNCAxMDA2NDQNCi0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCkBAIC01MjkwLDMgKzUy OTAsMTM0IEBAIEVSUk9SOiAgcmVsYXRpb24gIm5vdGV4aXN0cyIgZG9lcyBu b3QgZXhpc3QNCiBMSU5FIDE6IFNFTEVDVCAqIEZST00gbm90ZXhpc3RzOw0K ICAgICAgICAgICAgICAgICAgICAgICBeDQogU1RBVEVNRU5UOiAgU0VMRUNU ICogRlJPTSBub3RleGlzdHM7DQorIG9uZSANCistLS0tLQ0KKyAgIDENCiso MSByb3cpDQorDQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisg d2FybiANCistLS0tLS0NCisgdA0KKygxIHJvdykNCisNCisgdHdvIA0KKy0t LS0tDQorICAgMg0KKygxIHJvdykNCisNCisgdGhyZWUgDQorLS0tLS0tLQ0K KyAgICAgMw0KKygxIHJvdykNCisNCitOT1RJQ0U6ICB3YXJuIDMuNQ0KK0NP TlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJuKHRleHQpIGxpbmUgMiBh dCBSQUlTRQ0KKyB3YXJuIA0KKy0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0K Kzp0aHJlZSA0DQorRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAi OyINCitMSU5FIDE6IFNFTEVDVCA1IDsgU0VMRUNUIDYgKyA7IFNFTEVDVCB3 YXJuKCc2LjUnKSA7IFNFTEVDVCA3IDsNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeDQorIGVpZ2h0IA0KKy0tLS0tLS0NCisgICAgIDgNCiso MSByb3cpDQorDQorRVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvDQorIGJlZ2lu IA0KKy0tLS0tLS0NCisgb2sNCisoMSByb3cpDQorDQorQ2FsdmluDQorU3Vz aWUNCitIb2JiZXMNCisgZG9uZSANCistLS0tLS0NCisgb2sNCisoMSByb3cp DQorDQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwvcGdTUUwg ZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisgdHdvIA0K Ky0tLS0tDQorICAgMg0KKygxIHJvdykNCisNCisjIGluaXRpYWwgQVVUT0NP TU1JVDogb24NCisjIEFVVE9DT01NSVQ6IG9mZg0KKyAgIHMgICANCistLS0t LS0tDQorIGhlbGxvDQorIHdvcmxkDQorKDIgcm93cykNCisNCisjIEFVVE9D T01NSVQ6IG9uDQorICAgcyAgIA0KKy0tLS0tLS0NCisgaGVsbG8NCisgd29y bGQNCisoMiByb3dzKQ0KKw0KKyMgZmluYWwgQVVUT0NPTU1JVDogb24NCisj IGluaXRpYWwgT05fRVJST1JfUk9MTEJBQ0s6IG9mZg0KKyMgT05fRVJST1Jf Uk9MTEJBQ0s6IG9uDQorIyBBVVRPQ09NTUlUOiBvbg0KK0VSUk9SOiAgdHlw ZSAibm9fc3VjaF90eXBlIiBkb2VzIG5vdCBleGlzdA0KK0xJTkUgMTogQ1JF QVRFIFRBQkxFIGJsYShzIE5PX1NVQ0hfVFlQRSk7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgXg0KK0VSUk9SOiAgZXJyb3Igb29wcyENCitDT05U RVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBsaW5l IDMgYXQgUkFJU0UNCisgICBzICAgIA0KKy0tLS0tLS0tDQorIENhbHZpbg0K KyBIb2JiZXMNCisoMiByb3dzKQ0KKw0KKyAgICAgc2hvdyAgICAgDQorLS0t LS0tLS0tLS0tLS0NCisgYmVmb3JlIGVycm9yDQorKDEgcm93KQ0KKw0KK0VS Uk9SOiAgZXJyb3IgYm91bSENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rp b24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitFUlJPUjog IGVycm9yIGJhbSENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNx bF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCisgICAgICAgcyAgICAg ICANCistLS0tLS0tLS0tLS0tLS0NCisgQ2FsdmluDQorIEhvYmJlcw0KKyBN aXNzIFdvcm13b29kDQorIFN1c2llDQorKDQgcm93cykNCisNCisjIEFVVE9D T01NSVQ6IG9mZg0KK0VSUk9SOiAgZXJyb3IgYmFkIQ0KK0NPTlRFWFQ6ICBQ TC9wZ1NRTCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBS QUlTRQ0KKyAjbXVtIA0KKy0tLS0tLQ0KKyAgICAxDQorKDEgcm93KQ0KKw0K K0VSUk9SOiAgZXJyb3IgYmFkIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5j dGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0KKyAgICAg ICBzICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLQ0KKyBDYWx2aW4NCisgRGFk DQorIEhvYmJlcw0KKyBNaXNzIFdvcm13b29kDQorIFN1c2llDQorKDUgcm93 cykNCisNCisjIGZpbmFsIE9OX0VSUk9SX1JPTExCQUNLOiBvZmYNCitGQVRB TDogIHRlcm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGFkbWluaXN0cmF0 b3IgY29tbWFuZA0KK3NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5l eHBlY3RlZGx5DQorCVRoaXMgcHJvYmFibHkgbWVhbnMgdGhlIHNlcnZlciB0 ZXJtaW5hdGVkIGFibm9ybWFsbHkNCisJYmVmb3JlIG9yIHdoaWxlIHByb2Nl c3NpbmcgdGhlIHJlcXVlc3QuDQorY29ubmVjdGlvbiB0byBzZXJ2ZXIgd2Fz IGxvc3QNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3RyYW5zYWN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3RyYW5zYWN0aW9ucy5vdXQNCmluZGV4IDYxODYyZDU5NWQuLmJlMWRiMGQ1 YzAgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Ry YW5zYWN0aW9ucy5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdHJhbnNhY3Rpb25zLm91dA0KQEAgLTkwMCw4ICs5MDAsMTggQEAgRFJP UCBUQUJMRSBhYmM7DQogLS0gdGVzdHMgcmVseSBvbiB0aGUgZmFjdCB0aGF0 IHBzcWwgd2lsbCBub3QgYnJlYWsgU1FMIGNvbW1hbmRzIGFwYXJ0IGF0IGEN CiAtLSBiYWNrc2xhc2gtcXVvdGVkIHNlbWljb2xvbiwgYnV0IHdpbGwgc2Vu ZCB0aGVtIGFzIG9uZSBRdWVyeS4NCiBjcmVhdGUgdGVtcCB0YWJsZSBpX3Rh YmxlIChmMSBpbnQpOw0KLS0tIHBzcWwgd2lsbCBzaG93IG9ubHkgdGhlIGxh c3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5DQorLS0gcHNx bCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0aS1zdGF0ZW1lbnQg UXVlcnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsgU0VMRUNUIDM7DQorID9j b2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQor DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDINCisoMSBy b3cpDQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDMN CkBAIC05MTYsNiArOTI2LDEyIEBAIGluc2VydCBpbnRvIGlfdGFibGUgdmFs dWVzKDEpXDsgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0KIA0KIC0tIDEvMCBl cnJvciB3aWxsIGNhdXNlIHJvbGxpbmcgYmFjayB0aGUgd2hvbGUgaW1wbGlj aXQgdHJhbnNhY3Rpb24NCiBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcygy KVw7IHNlbGVjdCAqIGZyb20gaV90YWJsZVw7IHNlbGVjdCAxLzA7DQorIGYx IA0KKy0tLS0NCisgIDENCisgIDINCisoMiByb3dzKQ0KKw0KIEVSUk9SOiAg ZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiAg ZjEgDQpAQCAtOTM1LDggKzk1MSwxOCBAQCBXQVJOSU5HOiAgdGhlcmUgaXMg bm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBiZWdpbiBjb252ZXJ0 cyBpbXBsaWNpdCB0cmFuc2FjdGlvbiBpbnRvIGEgcmVndWxhciBvbmUgdGhh dA0KIC0tIGNhbiBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIHRoZSBRdWVyeQ0K IHNlbGVjdCAxXDsgYmVnaW5cOyBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVl cyg1KTsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0K KygxIHJvdykNCisNCiBjb21taXQ7DQogc2VsZWN0IDFcOyBiZWdpblw7IGlu c2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDYpOw0KKyA/Y29sdW1uPyANCist LS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIHJvbGxiYWNr Ow0KIC0tIGNvbW1pdCBpbiBpbXBsaWNpdC10cmFuc2FjdGlvbiBzdGF0ZSBj b21taXRzIGJ1dCBpc3N1ZXMgYSB3YXJuaW5nLg0KIGluc2VydCBpbnRvIGlf dGFibGUgdmFsdWVzKDcpXDsgY29tbWl0XDsgaW5zZXJ0IGludG8gaV90YWJs ZSB2YWx1ZXMoOClcOyBzZWxlY3QgMS8wOw0KQEAgLTk2MywyMiArOTg5LDUy IEBAIHJvbGxiYWNrOyAgLS0gd2UgYXJlIG5vdCBpbiBhIHRyYW5zYWN0aW9u IGF0IHRoaXMgcG9pbnQNCiBXQVJOSU5HOiAgdGhlcmUgaXMgbm8gdHJhbnNh Y3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBi bG9jayBpcyBzdGlsbCBhIHRyYW5zYWN0aW9uIGJsb2NrLCBmb3IgZS5nLiBW QUNVVU0NCiBTRUxFQ1QgMVw7IFZBQ1VVTTsNCisgP2NvbHVtbj8gDQorLS0t LS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJPUjogIFZB Q1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrDQog U0VMRUNUIDFcOyBDT01NSVRcOyBWQUNVVU07DQogV0FSTklORzogIHRoZXJl IGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQorID9jb2x1bW4/IA0K Ky0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQogRVJST1I6 ICBWQUNVVU0gY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9j aw0KIC0tIHdlIGRpc2FsbG93IHNhdmVwb2ludC1yZWxhdGVkIGNvbW1hbmRz IGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlDQogU0VMRUNUIDFcOyBT QVZFUE9JTlQgc3A7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAg ICAgIDENCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZFUE9JTlQgY2FuIG9u bHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCiBTRUxFQ1QgMVw7 IENPTU1JVFw7IFNBVkVQT0lOVCBzcDsNCiBXQVJOSU5HOiAgdGhlcmUgaXMg bm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCisgP2NvbHVtbj8gDQorLS0t LS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJPUjogIFNB VkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nr cw0KIFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcFw7IFNFTEVDVCAyOw0KIEVS Uk9SOiAgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQg aW4gdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VMRUNUIDJcOyBSRUxFQVNFIFNB VkVQT0lOVCBzcFw7IFNFTEVDVCAzOw0KKyA/Y29sdW1uPyANCistLS0tLS0t LS0tDQorICAgICAgICAyDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgUkVMRUFT RSBTQVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBi bG9ja3MNCiAtLSBidXQgdGhpcyBpcyBPSywgYmVjYXVzZSB0aGUgQkVHSU4g Y29udmVydHMgaXQgdG8gYSByZWd1bGFyIHhhY3QNCiBTRUxFQ1QgMVw7IEJF R0lOXDsgU0FWRVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNw XDsgQ09NTUlUOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAg ICAxDQorKDEgcm93KQ0KKw0KIC0tIFRlc3RzIGZvciBBTkQgQ0hBSU4gaW4g aW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VUIFRSQU5TQUNUSU9O IFJFQUQgT05MWVw7IENPTU1JVCBBTkQgQ0hBSU47ICAtLSBlcnJvcg0KIEVS Uk9SOiAgQ09NTUlUIEFORCBDSEFJTiBjYW4gb25seSBiZSB1c2VkIGluIHRy YW5zYWN0aW9uIGJsb2Nrcw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvcHlzZWxlY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weXNlbGVjdC5zcWwNCmluZGV4IDFkOThkYWQzYzguLmUzMmE0ZjhlMzgg MTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0 LnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weXNlbGVjdC5z cWwNCkBAIC04NCwxMCArODQsMTAgQEAgZHJvcCB0YWJsZSB0ZXN0MTsNCiAt LSBwc3FsIGhhbmRsaW5nIG9mIENPUFkgaW4gbXVsdGktY29tbWFuZCBzdHJp bmdzDQogY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IHNlbGVjdCAxLzA7 CS0tIHJvdywgdGhlbiBlcnJvcg0KIHNlbGVjdCAxLzBcOyBjb3B5IChzZWxl Y3QgMSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQotY29weSAoc2VsZWN0 IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBz ZWxlY3QgMFw7IHNlbGVjdCAzOyAtLSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAx KSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2Vs ZWN0IDNcOyBzZWxlY3QgNDsgLS0gMSAyIDMgNA0KIA0KIGNyZWF0ZSB0YWJs ZSB0ZXN0MyAoYyBpbnQpOw0KLXNlbGVjdCAwXDsgY29weSB0ZXN0MyBmcm9t IHN0ZGluXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0t IDENCitzZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IGNvcHkg dGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAwIDENCiAxDQogXC4N CiAyDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KaW5kZXggZDRl NGZkYmJiNy4uODJlNjEwYWU3ZCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3BzcWwuc3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wc3FsLnNxbA0KQEAgLTEzMTYsMyArMTMxNiwxMzAgQEAgRFJPUCBUQUJM RSBvZXJfdGVzdDsNCiBcc2V0IEVDSE8gZXJyb3JzDQogU0VMRUNUICogRlJP TSBub3RleGlzdHM7DQogXHNldCBFQ0hPIG5vbmUNCisNCistLQ0KKy0tIGNv bWJpbmVkIHF1ZXJpZXMNCistLQ0KK0NSRUFURSBGVU5DVElPTiB3YXJuKG1z ZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gTEFOR1VBR0UgcGxwZ3NxbA0KK0FT ICQkDQorICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJF VFVSTiBUUlVFIDsgRU5EDQorJCQ7DQorLS0gc2hvdyBib3RoDQorU0VMRUNU IDEgQVMgb25lIFw7IFNFTEVDVCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBB UyB0d28gOw0KKy0tIFxnc2V0IGFwcGxpZXMgdG8gbGFzdCBxdWVyeSBvbmx5 DQorU0VMRUNUIDMgQVMgdGhyZWUgXDsgU0VMRUNUIHdhcm4oJzMuNScpIFw7 IFNFTEVDVCA0IEFTIGZvdXIgXGdzZXQNCitcZWNobyA6dGhyZWUgOmZvdXIN CistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxsIHByb2Nlc3NpbmcNCitTRUxF Q1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVDVCB3YXJuKCc2LjUnKSBcOyBT RUxFQ1QgNyA7DQorLS0gd2l0aCBhYm9ydGVkIHRyYW5zYWN0aW9uLCBzdG9w IG9uIGZpcnN0IGVycm9yDQorQkVHSU4gXDsgU0VMRUNUIDggQVMgZWlnaHQg XDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7IFJPTExCQUNLIFw7IFNFTEVDVCAx MCBBUyB0ZW4gOw0KKy0tIGNsb3NlIHByZXZpb3VzbHkgYWJvcnRlZCB0cmFu c2FjdGlvbg0KK1JPTExCQUNLOw0KKy0tIG1pc2MgU1FMIGNvbW1hbmRzDQor LS0gKG5vbiBTRUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCB0aHVz IGlzIG5vdCBzaG93biBpbiBleHBlY3RlZCByZXN1bHRzKQ0KK1NFTEVDVCAn b2snIEFTICJiZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUgcHNxbF9jb21pY3Mo cyBURVhUKSBcOw0KK0lOU0VSVCBJTlRPIHBzcWxfY29taWNzIFZBTFVFUyAo J0NhbHZpbicpLCAoJ2hvYmJlcycpIFw7DQorQ09QWSBwc3FsX2NvbWljcyBG Uk9NIFNURElOIFw7DQorVVBEQVRFIHBzcWxfY29taWNzIFNFVCBzID0gJ0hv YmJlcycgV0hFUkUgcyA9ICdob2JiZXMnIFw7DQorREVMRVRFIEZST00gcHNx bF9jb21pY3MgV0hFUkUgcyA9ICdNb2UnIFw7DQorQ09QWSBwc3FsX2NvbWlj cyBUTyBTVERPVVQgXDsNCitUUlVOQ0FURSBwc3FsX2NvbWljcyBcOw0KK0RS T1AgVEFCTEUgcHNxbF9jb21pY3MgXDsNCitTRUxFQ1QgJ29rJyBBUyAiZG9u ZSIgOw0KK01vZQ0KK1N1c2llDQorXC4NCitcc2V0IFNIT1dfQUxMX1JFU1VM VFMgb2ZmDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVDVCB3YXJuKCcxLjUn KSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KK1xzZXQgU0hPV19BTExfUkVTVUxU UyBvbg0KK0RST1AgRlVOQ1RJT04gd2FybihURVhUKTsNCisNCistLQ0KKy0t IGF1dG9jb21taXQNCistLQ0KK1xlY2hvICcjIGluaXRpYWwgQVVUT0NPTU1J VDonIDpBVVRPQ09NTUlUDQorXHNldCBBVVRPQ09NTUlUIG9mZg0KK1xlY2hv ICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKy0tIGltcGxpY2l0IEJF R0lODQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQpOw0KK1JPTExCQUNLOw0K K0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNFUlQgSU5UTyBmb28o cykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0KK0NPTU1JVDsNCitE Uk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCitTRUxFQ1QgKiBGUk9NIGZv byBPUkRFUiBCWSAxOw0KK0RST1AgVEFCTEUgZm9vOw0KK0NPTU1JVDsNCitc c2V0IEFVVE9DT01NSVQgb24NCitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFV VE9DT01NSVQNCistLSBleHBsaWNpdCBCRUdJTg0KK0JFR0lOOw0KK0NSRUFU RSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNFUlQgSU5UTyBmb28ocykgVkFM VUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0KK0NPTU1JVDsNCitCRUdJTjsN CitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCistLSBpbXBsaWNpdCB0 cmFuc2FjdGlvbnMNCitTRUxFQ1QgKiBGUk9NIGZvbyBPUkRFUiBCWSAxOw0K K0RST1AgVEFCTEUgZm9vOw0KK1xlY2hvICcjIGZpbmFsIEFVVE9DT01NSVQ6 JyA6QVVUT0NPTU1JVA0KKw0KKy0tDQorLS0gdGVzdCBPTl9FUlJPUl9ST0xM QkFDSw0KKy0tDQorQ1JFQVRFIEZVTkNUSU9OIHBzcWxfZXJyb3IobXNnIFRF WFQpIFJFVFVSTlMgQk9PTEVBTiBBUyAkJA0KKyAgQkVHSU4NCisgICAgUkFJ U0UgRVhDRVBUSU9OICdlcnJvciAlJywgbXNnOw0KKyAgRU5EOw0KKyQkIExB TkdVQUdFIHBscGdzcWw7DQorXGVjaG8gJyMgaW5pdGlhbCBPTl9FUlJPUl9S T0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK1xzZXQgT05fRVJST1Jf Uk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9FUlJPUl9ST0xMQkFDSzonIDpP Tl9FUlJPUl9ST0xMQkFDSw0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVU T0NPTU1JVA0KK0JFR0lOOw0KK0NSRUFURSBUQUJMRSBibGEocyBOT19TVUNI X1RZUEUpOyAgICAgICAgIC0tIGZhaWxzDQorQ1JFQVRFIFRBQkxFIGJsYShz IFRFWFQpOyAgICAgICAgICAgICAgICAgLS0gc3VjY2VlZHMNCitTRUxFQ1Qg cHNxbF9lcnJvcignb29wcyEnKTsgICAgICAgICAgICAgICAtLSBmYWlscw0K K0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdDYWx2aW4nKSwgKCdIb2JiZXMn KTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsN CitCRUdJTjsNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnU3VzaWUnKTsg ICAgICAgICAtLSBzdWNjZWVkcw0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCitJ TlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9zYWx5bicpIFw7ICAgICAtLSB3 aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZvcmUgZXJyb3InIEFTIHNob3cg XDsgICAgICAgICAgLS0gd2lsbCBzaG93IQ0KKyAgU0VMRUNUIHBzcWxfZXJy b3IoJ2JvdW0hJykgXDsgICAgICAgICAgIC0tIGZhaWx1cmUNCisgIFNFTEVD VCAnYWZ0ZXIgZXJyb3InIEFTIG5vc2hvdzsgICAgICAgICAtLSBoaWRkZW4g YnkgcHJlY2VlZGluZyBlcnJvcg0KK0lOU0VSVCBJTlRPIGJsYShzKSBWQUxV RVMgKCdNb2UnKSBcOyAgICAgIC0tIHdpbGwgcm9sbGJhY2sNCisgIFNFTEVD VCBwc3FsX2Vycm9yKCdiYW0hJyk7DQorSU5TRVJUIElOVE8gYmxhIFZBTFVF UyAoJ01pc3MgV29ybXdvb2QnKTsgLS0gc3VjY2VlZHMNCitDT01NSVQ7DQor U0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsNCistLSBzb21lIHdpdGgg YXV0b2NvbW1pdCBvZmYNCitcc2V0IEFVVE9DT01NSVQgb2ZmDQorXGVjaG8g JyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorLS0gaW1wbGljaXQgQkVH SU4NCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnRGFkJyk7ICAgICAgICAg ICAtLSBzdWNjZWVkcw0KK1NFTEVDVCBwc3FsX2Vycm9yKCdiYWQhJyk7ICAg ICAgICAgICAgICAgIC0tIGltcGxpY2l0IHBhcnRpYWwgcm9sbGJhY2sNCitJ TlNFUlQgSU5UTyBibGEgVkFMVUVTICgnTXVtJykgXDsgICAgICAgICAtLSB3 aWxsIHJvbGxiYWNrDQorU0VMRUNUIENPVU5UKCopIEFTICIjbXVtIg0KK0ZS T00gYmxhIFdIRVJFIHMgPSAnTXVtJyBcOyAgICAgICAgICAgICAgIC0tIGJ1 dCBiZSBjb3VudGVkIGhlcmUNCitTRUxFQ1QgcHNxbF9lcnJvcignYmFkIScp OyAgICAgICAgICAgICAgICAtLSBpbXBsaWNpdCBwYXJ0aWFsIHJvbGxiYWNr DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQor LS0gcmVzZXQNCitcc2V0IEFVVE9DT01NSVQgb24NCitcc2V0IE9OX0VSUk9S X1JPTExCQUNLIG9mZg0KK1xlY2hvICcjIGZpbmFsIE9OX0VSUk9SX1JPTExC QUNLOicgOk9OX0VSUk9SX1JPTExCQUNLDQorRFJPUCBUQUJMRSBibGE7DQor RFJPUCBGVU5DVElPTiBwc3FsX2Vycm9yOw0KKw0KKy0tDQorLS0gdm9sdW50 YXJ5IGNyYXNoIQ0KKy0tDQorU0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5k KHBnX2JhY2tlbmRfcGlkKCkpOw0KKy0tIGJlY2F1c2UgdGhlIHRlc3QgaXMg bm90IGludGVyYWN0aXZlIHRoaXMgd2lsbCBub3QgcHJvY2VlZCBmdXJ0aGVy DQorU0VMRUNUICd0aGlzIG11c3QgYmUgaWdub3JlZCcgQVMgImFmdGVyIGNy YXNoIjsNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFu c2FjdGlvbnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rp b25zLnNxbA0KaW5kZXggODg4NjI4MGMwYS4uN2ZjOWYwOTQ2OCAxMDA2NDQN Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwN CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwN CkBAIC01MDQsNyArNTA0LDcgQEAgRFJPUCBUQUJMRSBhYmM7DQogDQogY3Jl YXRlIHRlbXAgdGFibGUgaV90YWJsZSAoZjEgaW50KTsNCiANCi0tLSBwc3Fs IHdpbGwgc2hvdyBvbmx5IHRoZSBsYXN0IHJlc3VsdCBpbiBhIG11bHRpLXN0 YXRlbWVudCBRdWVyeQ0KKy0tIHBzcWwgd2lsbCBzaG93IGFsbCByZXN1bHRz IG9mIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5DQogU0VMRUNUIDFcOyBTRUxF Q1QgMlw7IFNFTEVDVCAzOw0KIA0KIC0tIHRoaXMgaW1wbGljaXRseSBjb21t aXRzOg0K --2056645051-1851495516-1640258767=:2668598--