Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZiG51-0001KO-TP for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Oct 2015 06:14:00 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZiG51-0001aE-4l for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Oct 2015 06:13:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZiG3P-0008SI-OF for pgsql-hackers@postgresql.org; Sat, 03 Oct 2015 06:12:19 +0000 Received: from boipeva.ensmp.fr ([194.214.158.136]) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZiG3F-0002G9-N0 for pgsql-hackers@postgresql.org; Sat, 03 Oct 2015 06:12:18 +0000 Received: from cri.ensmp.fr (223.200.219.88.rev.sfr.net [88.219.200.223]) (authenticated bits=0) by boipeva.ensmp.fr (8.15.2/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t936BoFc003433 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 3 Oct 2015 08:12:03 +0200 Date: Sat, 3 Oct 2015 08:11:48 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto Reply-To: Fabien COELHO To: "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: <55AFD8C6.8010507@agliodbs.com> <20150902172617.GJ5286@alap3.anarazel.de> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-2060600727-1443852725=:24488" X-Miltered: at boipeva.ensmp.fr with ID 560F71A6.000 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Auth: USER-ID fabien.coelho X-j-chkmail-Enveloppe: 560F71A6.000 from 223.200.219.88.rev.sfr.net/223.200.219.88.rev.sfr.net/88.219.200.223/cri.ensmp.fr/ X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-2060600727-1443852725=:24488 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > Here is a v10, which is a rebase because of the "--progress-timestamp" option > addition. Here is a v11, which is a rebase after some recent changes committed to pgbench. -- Fabien. --8323329-2060600727-1443852725=:24488 Content-Type: TEXT/x-diff; name=pgbench-script-stats-11.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-11.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDBhYzQwZjEu LmUzYTkwZTUgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDI1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRlcm0+PG9wdGlvbj4t LWJ1aWx0aW48Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5hbWVbQHdlaWdodF08 Lz48L3Rlcm0+DQorICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4N CisgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0aW4gc2NyaXB0IHRv IHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBv cHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFs bG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBk cmF3aW5nIHRoZSB0ZXN0Lg0KKyAgICAgICAgQXZhaWxhYmxlIGJ1aWx0aW4g c2NyaXB0cyBhcmU6IDxsaXRlcmFsPnRwY2ItbGlrZTwvPiwNCisgICAgICAg IDxsaXRlcmFsPnNpbXBsZS11cGRhdGU8Lz4gYW5kIDxsaXRlcmFsPnNlbGVj dC1vbmx5PC8+Lg0KKyAgICAgICAgVGhlIHByb3ZpZGVkIDxyZXBsZWFjYWJs ZT5zY3JpcHRuYW1lPC8+IG5lZWRzIG9ubHkgdG8gYmUgYSBwcmVmaXgNCisg ICAgICAgIG9mIHRoZSBidWlsdGluIG5hbWUsIGhlbmNlIDxsaXRlcmFsPnNp bXA8Lz4gd291bGQgYmUgZW5vdWdoIHRvIHNlbGVjdA0KKyAgICAgICAgPGxp dGVyYWw+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgIFdpdGggc3BlY2lh bCBuYW1lIDxsaXRlcmFsPmxpc3Q8Lz4sIHNob3cgdGhlIGxpc3Qgb2YgYnVp bHRpbiBzY3JpcHRzDQorICAgICAgICBhbmQgZXhpdCBpbW1lZGlhdGVseS4N CisgICAgICAgPC9wYXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8 L3Zhcmxpc3RlbnRyeT4NCisNCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+DQog ICAgICAgPHRlcm0+PG9wdGlvbj4tYzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+ Y2xpZW50czwvPjwvdGVybT4NCkBAIC0zMDcsMTQgKzMyNiwxNSBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0 ZW50cnk+DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJt PjxvcHRpb24+LWY8L29wdGlvbj4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+ PC90ZXJtPg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwvb3B0aW9u PjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvPjwvdGVybT4NCisgICAgICA8dGVy bT48b3B0aW9uPi1mPC8+IDxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0 XTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi0tZmlsZT08Lz48 cmVwbGFjZWFibGU+ZmlsZW5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFJlYWQg dHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gPHJlcGxhY2VhYmxlPmZpbGVuYW1l PC8+Lg0KKyAgICAgICAgQWRkIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQg ZnJvbSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8Lz4gdG8NCisgICAgICAgIHRo ZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRp b25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93 cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3 aW5nIHRoZSB0ZXN0Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxz Lg0KLSAgICAgICAgPG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwv b3B0aW9uPiwgYW5kIDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAgICAgIGFy ZSBtdXR1YWxseSBleGNsdXNpdmUuDQogICAgICAgIDwvcGFyYT4NCiAgICAg ICA8L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0 LDEwICs0MjQsNyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxl Pm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwv Pg0KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1za2lwLXNvbWUtdXBkYXRlczwv b3B0aW9uPjwvdGVybT4NCiAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxw YXJhPg0KLSAgICAgICAgRG8gbm90IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2Jl bmNoX3RlbGxlcnM8Lz4gYW5kDQotICAgICAgICA8c3RydWN0bmFtZT5wZ2Jl bmNoX2JyYW5jaGVzPC8+Lg0KLSAgICAgICAgVGhpcyB3aWxsIGF2b2lkIHVw ZGF0ZSBjb250ZW50aW9uIG9uIHRoZXNlIHRhYmxlcywgYnV0DQotICAgICAg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNpbXBsZS11 cGRhdGVAMTwvPi4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0 ZW0+DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC01MTIsOSArNTI5LDkg QEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+ IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICAg IFJlcG9ydCB0aGUgc3BlY2lmaWVkIHNjYWxlIGZhY3RvciBpbiA8YXBwbGlj YXRpb24+cGdiZW5jaDwvPidzDQogICAgICAgICBvdXRwdXQuICBXaXRoIHRo ZSBidWlsdC1pbiB0ZXN0cywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUN CiAgICAgICAgIGNvcnJlY3Qgc2NhbGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0 ZWQgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZg0KLSAgICAgICAgcm93cyBp biB0aGUgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4g IEhvd2V2ZXIsIHdoZW4gdGVzdGluZw0KLSAgICAgICAgY3VzdG9tIGJlbmNo bWFya3MgKDxvcHRpb24+LWY8Lz4gb3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rv cg0KLSAgICAgICAgd2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlz IG9wdGlvbiBpcyB1c2VkLg0KKyAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVj dG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4NCisgICAgICAgIEhv d2V2ZXIsIHdoZW4gdGVzdGluZyBvbmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8 b3B0aW9uPi1mPC8+IG9wdGlvbiksDQorICAgICAgICB0aGUgc2NhbGUgZmFj dG9yIHdpbGwgYmUgcmVwb3J0ZWQgYXMgMSB1bmxlc3MgdGhpcyBvcHRpb24g aXMgdXNlZC4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+ DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC01MjQsNyArNTQxLDcgQEAg cGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVy bT48b3B0aW9uPi0tc2VsZWN0LW9ubHk8L29wdGlvbj48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFBlcmZv cm0gc2VsZWN0LW9ubHkgdHJhbnNhY3Rpb25zIGluc3RlYWQgb2YgVFBDLUIt bGlrZSB0ZXN0Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1i IHNlbGVjdC1vbmx5QDE8Lz4uDQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8 L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNjc0LDcg KzY5MSwyMCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9w dGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0K ICAgPHRpdGxlPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBB Y3R1YWxseSBQZXJmb3JtZWQgaW4gPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2Fw cGxpY2F0aW9uPj88L3RpdGxlPg0KIA0KICAgPHBhcmE+DQotICAgVGhlIGRl ZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlzc3VlcyBzZXZlbiBjb21tYW5k cyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdiZW5jaCBleGVjdXRlcyB0ZXN0 IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZyb20gYSBzcGVjaWZpZWQgbGlz dC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQtaW4gc2NyaXB0cyB3aXRoIDxv cHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1wcm92aWRlZCBjdXN0b20gc2Ny aXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCBzY3JpcHQgbWF5 IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0IHNwZWNpZmllZCBhZnRlciBh DQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0byBjaGFuZ2UgaXRzIGRyYXdp bmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRlZmF1bHQgd2VpZ2h0IGlzIDxs aXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRo ZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rpb24gc2NyaXB0IChhbHNvIGlu dm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2ItbGlrZTwvPikNCisgICBpc3N1 ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5zYWN0aW9uIG92ZXIgcmFuZG9t bHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwNCisgICA8bGl0ZXJhbD50aWQ8 Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxpdGVyYWw+YmFsYW5jZTwvPi4N CisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGlyZWQgYnkgdGhlIFRQQy1CIGJl bmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxseSBUUEMtQiwNCisgICBoZW5j ZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxvcmRlcmVkbGlzdD4N CkBAIC02ODgsOSArNzE4LDE1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0Pg0KIA0KICAgPHBhcmE+DQot ICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4tTjwvPiwgc3RlcHMgNCBhbmQg NSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQotICAgdHJhbnNhY3Rpb24uICBJ ZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+LCBvbmx5IHRoZSA8Y29tbWFu ZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQuDQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPiBidWlsdGluIChhbHNv IDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBzIDQgYW5kIDUgYXJlbid0IGlu Y2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4NCisgICBUaGlzIHdpbGwgYXZv aWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhlc2UgdGFibGVzLCBidXQNCisg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+DQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8Lz4gYnVpbHRpbiAoYWxzbyA8 b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRoZSA8Y29tbWFuZD5TRUxFQ1Q8 Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0KICA8L3JlZnNlY3QyPg0KIA0K QEAgLTcwMiwxMCArNzM4LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5k Ym5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxhY2lu ZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVzY3Jp YmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJv bSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24pLiAg SW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAgY291 bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlvdSBj YW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVsdGlw bGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gNCi0g ICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9zZW4g ZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBuZXcg dHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2Yg YSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCBmMmQ0MzViLi4wZTU2ZWQ3IDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysrIGIv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2NCwxMiArMTY0LDEx IEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyogcXVp ZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRlcnZh bDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVhbA0K IAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAgcGVy X3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxlY3Qg c3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJCS8q IHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRzICov DQogYm9vbAkJcHJvZ3Jlc3NfdGltZXN0YW1wID0gZmFsc2U7IC8qIHByb2dy ZXNzIHJlcG9ydCB3aXRoIFVuaXggdGltZSAqLw0KLWludAkJCXByb2dyZXNz X25jbGllbnRzID0gMDsJCS8qIG51bWJlciBvZiBjbGllbnRzIGZvciBwcm9n cmVzcw0KLQkJCQkJCQkJCQkgKiByZXBvcnQgKi8NCi1pbnQJCQlwcm9ncmVz c19udGhyZWFkcyA9IDA7CQkvKiBudW1iZXIgb2YgdGhyZWFkcyBmb3IgcHJv Z3Jlc3MNCi0JCQkJCQkJCQkJICogcmVwb3J0ICovDQoraW50CQkJbmNsaWVu dHMgPSAxOwkJLyogbnVtYmVyIG9mIGNsaWVudHMgKi8NCitpbnQJCQludGhy ZWFkcyA9IDE7CSAgICAvKiBudW1iZXIgb2YgdGhyZWFkcyAqLw0KIGJvb2wJ CWlzX2Nvbm5lY3Q7CQkJLyogZXN0YWJsaXNoIGNvbm5lY3Rpb24gZm9yIGVh Y2ggdHJhbnNhY3Rpb24gKi8NCiBib29sCQlpc19sYXRlbmNpZXM7CQkvKiBy ZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQogaW50CQkJbWFpbl9w aWQ7CQkJLyogbWFpbiBwcm9jZXNzIGlkIHVzZWQgaW4gbG9nIGZpbGVuYW1l ICovDQpAQCAtMTgwLDYgKzE3OSw4IEBAIGNoYXIJICAgKmxvZ2luID0gTlVM TDsNCiBjaGFyCSAgICpkYk5hbWU7DQogY29uc3QgY2hhciAqcHJvZ25hbWU7 DQogDQorI2RlZmluZSBXU0VQICdAJyAvKiB3ZWlnaHQgc2VwYXJhdG9yICov DQorDQogdm9sYXRpbGUgYm9vbCB0aW1lcl9leGNlZWRlZCA9IGZhbHNlOwkv KiBmbGFnIGZyb20gc2lnbmFsIGhhbmRsZXIgKi8NCiANCiAvKiB2YXJpYWJs ZSBkZWZpbml0aW9ucyAqLw0KQEAgLTE4OSwxMyArMTkwLDM5IEBAIHR5cGVk ZWYgc3RydWN0DQogCWNoYXIJICAgKnZhbHVlOwkJCS8qIGl0cyB2YWx1ZSAq Lw0KIH0gVmFyaWFibGU7DQogDQotI2RlZmluZSBNQVhfRklMRVMJCTEyOAkJ LyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0IGZpbGVzIGFsbG93ZWQgKi8N CisjZGVmaW5lIE1BWF9TQ1JJUFRTCQkxMjgJCS8qIG1heCBudW1iZXIgb2Yg U1FMIHNjcmlwdHMgYWxsb3dlZCAqLw0KICNkZWZpbmUgU0hFTExfQ09NTUFO RF9TSVpFCTI1NiAvKiBtYXhpbXVtIHNpemUgYWxsb3dlZCBmb3Igc2hlbGwg Y29tbWFuZCAqLw0KIA0KIC8qDQorICogc2ltcGxlIGRhdGEgc3RydWN0dXJl IHRvIGtlZXAgc3RhdHMgYWJvdXQgc29tZXRoaW5nLg0KKyAqIHByb2JhYmx5 IHRoZSBmaXJzdCB2YWx1ZSBzaG91bGQgYmUga2VwdCBhbmQgdXNlZCBhcyBh biBvZmZzZXQgZm9yDQorICogYmV0dGVyIG51bWVyaWNhbCBzdGFiaWxpdHku Li4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJaW50NjRfdCBjb3Vu dDsgICAgLyogaG93IG1hbnkgdmFsdWVzIHdoZXJlIGVuY291bnRlcmVkICov DQorCWRvdWJsZSBtaW47ICAgLyogdGhlIG1pbmltdW0gc2VlbiAqLw0KKwlk b3VibGUgbWF4OyAgIC8qIHRoZSBtYXhpbXVtIHNlZW4gKi8NCisJZG91Ymxl IHN1bTsgICAvKiBzdW0gb2YgdmFsdWVzICovDQorCWRvdWJsZSBzdW0yOyAg Lyogc3VtIG9mIHNxdWFyZWQgdmFsdWVzICovDQorfSBTaW1wbGVTdGF0czsN CisNCisvKiBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHZhcmlvdXMgc3RhdGlz dGljcy4NCisgKiBpdCBpcyB1c2VkIGZvciBpbnRlcnZhbCBzdGF0aXN0aWNz IGFzIHdlbGwgYXMgZmlsZSBzdGF0aXN0aWNzLg0KKyAqLw0KK3R5cGVkZWYg c3RydWN0DQorew0KKwlsb25nCQlzdGFydF90aW1lOwkJLyogd2hlbiB0aGUg aW50ZXJ2YWwgc3RhcnRzLCBmb3IgYWdncmVnYXRlcyAqLw0KKwlpbnQ2NAkJ Y250OwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKi8NCisJaW50NjQJ CXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQg dW5kZXIgLS1yYXRlDQorCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5LWxpbWl0 ICovDQorCVNpbXBsZVN0YXRzCWxhdGVuY3k7DQorCVNpbXBsZVN0YXRzCWxh ZzsNCit9IFN0YXRzRGF0YTsNCisNCisvKg0KICAqIHN0cnVjdHVyZXMgdXNl ZCBpbiBjdXN0b20gcXVlcnkgbW9kZQ0KICAqLw0KLQ0KIHR5cGVkZWYgc3Ry dWN0DQogew0KIAlQR2Nvbm4JICAgKmNvbjsJCQkvKiBjb25uZWN0aW9uIGhh bmRsZSB0byBEQiAqLw0KQEAgLTIwMywyMiArMjMwLDIwIEBAIHR5cGVkZWYg c3RydWN0DQogCWludAkJCXN0YXRlOwkJCS8qIHN0YXRlIE5vLiAqLw0KIAlp bnQJCQlsaXN0ZW47CQkJLyogMCBpbmRpY2F0ZXMgdGhhdCBhbiBhc3luYyBx dWVyeSBoYXMgYmVlbg0KIAkJCQkJCQkJICogc2VudCAqLw0KLQlpbnQJCQlz bGVlcGluZzsJCS8qIDEgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBu YXBwaW5nICovDQorCWJvb2wJCWlzX3Rocm90dGxlZDsJLyogd2hldGhlciB0 cmFuc2FjdGlvbiB0aHJvdHRsaW5nIGlzIGRvbmUgKi8NCisJYm9vbAkJc2xl ZXBpbmc7CQkvKiB3aGV0aGVyIHRoZSBjbGllbnQgaXMgbmFwcGluZyAqLw0K IAlib29sCQl0aHJvdHRsaW5nOwkJLyogd2hldGhlciBuYXAgaXMgZm9yIHRo cm90dGxpbmcgKi8NCiAJVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJy YXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCiAJaW50CQkJbnZhcmlh YmxlczsNCiAJaW50NjQJCXR4bl9zY2hlZHVsZWQ7CS8qIHNjaGVkdWxlZCBz dGFydCB0aW1lIG9mIHRyYW5zYWN0aW9uICh1c2VjKSAqLw0KIAlpbnN0cl90 aW1lCXR4bl9iZWdpbjsJCS8qIHVzZWQgZm9yIG1lYXN1cmluZyBzY2hlZHVs ZSBsYWcgdGltZXMgKi8NCiAJaW5zdHJfdGltZQlzdG10X2JlZ2luOwkJLyog dXNlZCBmb3IgbWVhc3VyaW5nIHN0YXRlbWVudCBsYXRlbmNpZXMgKi8NCi0J Ym9vbAkJaXNfdGhyb3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0aW9uIHRo cm90dGxpbmcgaXMgZG9uZSAqLw0KLQlpbnQJCQl1c2VfZmlsZTsJCS8qIGlu ZGV4IGluIHNxbF9maWxlcyBmb3IgdGhpcyBjbGllbnQgKi8NCi0JYm9vbAkJ cHJlcGFyZWRbTUFYX0ZJTEVTXTsNCisJaW50CQkJdXNlX2ZpbGU7CQkvKiBp bmRleCBpbiBzcWxfc2NyaXB0cyBmb3IgdGhpcyBjbGllbnQgKi8NCisJYm9v bAkJcHJlcGFyZWRbTUFYX1NDUklQVFNdOyAvKiB3aGV0aGVyIGNsaWVudCBw cmVwYXJlZCB0aGUgc2NyaXB0ICovDQogDQogCS8qIHBlciBjbGllbnQgY29s bGVjdGVkIHN0YXRzICovDQotCWludAkJCWNudDsJCQkvKiB4YWN0cyBjb3Vu dCAqLw0KKwlpbnQ2NAkJY250OwkJCS8qIHRyYW5zYWN0aW9uIGNvdW50ICov DQogCWludAkJCWVjbnQ7CQkJLyogZXJyb3IgY291bnQgKi8NCi0JaW50NjQJ CXR4bl9sYXRlbmNpZXM7CS8qIGN1bXVsYXRlZCBsYXRlbmNpZXMgKi8NCi0J aW50NjQJCXR4bl9zcWxhdHM7CQkvKiBjdW11bGF0ZWQgc3F1YXJlIGxhdGVu Y2llcyAqLw0KIH0gQ1N0YXRlOw0KIA0KIC8qDQpAQCAtMjMwLDE5ICsyNTUs MTQgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJcHRocmVhZF90CXRocmVhZDsJCQkv KiB0aHJlYWQgaGFuZGxlICovDQogCUNTdGF0ZQkgICAqc3RhdGU7CQkJLyog YXJyYXkgb2YgQ1N0YXRlICovDQogCWludAkJCW5zdGF0ZTsJCQkvKiBsZW5n dGggb2Ygc3RhdGVbXSAqLw0KLQlpbnN0cl90aW1lCXN0YXJ0X3RpbWU7CQkv KiB0aHJlYWQgc3RhcnQgdGltZSAqLw0KLQlpbnN0cl90aW1lICpleGVjX2Vs YXBzZWQ7CS8qIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGNtZHMgKHBlciBDb21t YW5kKSAqLw0KLQlpbnQJCSAgICpleGVjX2NvdW50OwkJLyogbnVtYmVyIG9m IGNtZCBleGVjdXRpb25zIChwZXIgQ29tbWFuZCkgKi8NCi0JdW5zaWduZWQg c2hvcnQgcmFuZG9tX3N0YXRlWzNdOwkJLyogc2VwYXJhdGUgcmFuZG9tbmVz cyBmb3IgZWFjaCB0aHJlYWQgKi8NCi0JaW50NjQJCXRocm90dGxlX3RyaWdn ZXI7CQkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVzKSAqLw0KKwl1 bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CSAvKiBzZXBhcmF0ZSBy YW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KKwlpbnQ2NAkJdGhyb3R0 bGVfdHJpZ2dlcjsJIC8qIHByZXZpb3VzL25leHQgdGhyb3R0bGluZyAodXMp ICovDQogDQogCS8qIHBlciB0aHJlYWQgY29sbGVjdGVkIHN0YXRzICovDQor CWluc3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1l ICovDQogCWluc3RyX3RpbWUJY29ubl90aW1lOw0KLQlpbnQ2NAkJdGhyb3R0 bGVfbGFnOwkvKiB0b3RhbCB0cmFuc2FjdGlvbiBsYWcgYmVoaW5kIHRocm90 dGxpbmcgKi8NCi0JaW50NjQJCXRocm90dGxlX2xhZ19tYXg7CQkvKiBtYXgg dHJhbnNhY3Rpb24gbGFnICovDQotCWludDY0CQl0aHJvdHRsZV9sYXRlbmN5 X3NraXBwZWQ7CQkvKiBsYWdnaW5nIHRyYW5zYWN0aW9ucw0KLQkJCQkJCQkJ CQkJCSAqIHNraXBwZWQgKi8NCi0JaW50NjQJCWxhdGVuY3lfbGF0ZTsJLyog bGF0ZSB0cmFuc2FjdGlvbnMgKi8NCisJU3RhdHNEYXRhICAgc3RhdHM7DQor CWludDY0CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1dCBsYXRlIHRy YW5zYWN0aW9ucyAqLw0KIH0gVFN0YXRlOw0KIA0KICNkZWZpbmUgSU5WQUxJ RF9USFJFQUQJCSgocHRocmVhZF90KSAwKQ0KQEAgLTI3NCw4MCArMjk0LDk3 IEBAIHR5cGVkZWYgc3RydWN0DQogCWNoYXIJICAgKmFyZ3ZbTUFYX0FSR1Nd OyAvKiBjb21tYW5kIHdvcmQgbGlzdCAqLw0KIAlpbnQJCQljb2xzW01BWF9B UkdTXTsgLyogY29ycmVzcG9uZGluZyBjb2x1bW4gc3RhcnRpbmcgZnJvbSAx ICovDQogCVBnQmVuY2hFeHByICpleHByOwkJCS8qIHBhcnNlZCBleHByZXNz aW9uICovDQorCVNpbXBsZVN0YXRzCXN0YXRzOyAgICAgICAgICAvKiB0aW1l IHNwZW50IGluIHRoaXMgY29tbWFuZCAqLw0KIH0gQ29tbWFuZDsNCiANCisv KiBTUUwgc2NyaXB0IHRvIGJlIGV4ZWN1dGVkLCBlaXRoZXIgYSBmaWxlIG9y IGFuIGludGVybmFsIHNjcmlwdA0KKyAqLw0KIHR5cGVkZWYgc3RydWN0DQog ew0KLQ0KLQlsb25nCQlzdGFydF90aW1lOwkJLyogd2hlbiBkb2VzIHRoZSBp bnRlcnZhbCBzdGFydCAqLw0KLQlpbnQJCQljbnQ7CQkJLyogbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyAqLw0KLQlpbnQJCQlza2lwcGVkOwkJLyogbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0ZQ0KLQkJCQkJ CQkJICogYW5kIC0tbGF0ZW5jeS1saW1pdCAqLw0KLQ0KLQlkb3VibGUJCW1p bl9sYXRlbmN5OwkvKiBtaW4vbWF4IGxhdGVuY2llcyAqLw0KLQlkb3VibGUJ CW1heF9sYXRlbmN5Ow0KLQlkb3VibGUJCXN1bV9sYXRlbmN5OwkvKiBzdW0o bGF0ZW5jeSksIHN1bShsYXRlbmN5XjIpIC0gZm9yDQotCQkJCQkJCQkgKiBl c3RpbWF0ZXMgKi8NCi0JZG91YmxlCQlzdW0yX2xhdGVuY3k7DQotDQotCWRv dWJsZQkJbWluX2xhZzsNCi0JZG91YmxlCQltYXhfbGFnOw0KLQlkb3VibGUJ CXN1bV9sYWc7CQkvKiBzdW0obGFnKSAqLw0KLQlkb3VibGUJCXN1bTJfbGFn OwkJLyogc3VtKGxhZypsYWcpICovDQotfSBBZ2dWYWxzOw0KLQ0KLXN0YXRp YyBDb21tYW5kICoqc3FsX2ZpbGVzW01BWF9GSUxFU107CS8qIFNRTCBzY3Jp cHQgZmlsZXMgKi8NCi1zdGF0aWMgaW50CW51bV9maWxlczsJCQkvKiBudW1i ZXIgb2Ygc2NyaXB0IGZpbGVzICovDQorCWNvbnN0IGNoYXIgKm5hbWU7DQor CWludCB3ZWlnaHQ7DQorCUNvbW1hbmQgKipjb21tYW5kczsNCisJU3RhdHNE YXRhIHN0YXRzOw0KK30gU1FMU2NyaXB0Ow0KKw0KK3N0YXRpYyBTUUxTY3Jp cHQgc3FsX3NjcmlwdFtNQVhfU0NSSVBUU107DQorc3RhdGljIGludAludW1f c2NyaXB0czsJCS8qIG51bWJlciBvZiBzY3JpcHQgaW4gc3FsX3NjcmlwdFtd ICovDQogc3RhdGljIGludAludW1fY29tbWFuZHMgPSAwOwkvKiB0b3RhbCBu dW1iZXIgb2YgQ29tbWFuZCBzdHJ1Y3RzICovDQorc3RhdGljIGludCAgdG90 YWxfd2VpZ2h0ID0gMDsNCisNCiBzdGF0aWMgaW50CWRlYnVnID0gMDsJCQkv KiBkZWJ1ZyBmbGFnICovDQogDQotLyogZGVmYXVsdCBzY2VuYXJpbyAqLw0K LXN0YXRpYyBjaGFyICp0cGNfYiA9IHsNCi0JIlxcc2V0IG5icmFuY2hlcyAi IENwcEFzU3RyaW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCi0JIlxc c2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNj YWxlXG4iDQotCSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFj Y291bnRzKSAiICogOnNjYWxlXG4iDQotCSJcXHNldHJhbmRvbSBhaWQgMSA6 bmFjY291bnRzXG4iDQotCSJcXHNldHJhbmRvbSBiaWQgMSA6bmJyYW5jaGVz XG4iDQotCSJcXHNldHJhbmRvbSB0aWQgMSA6bnRlbGxlcnNcbiINCi0JIlxc c2V0cmFuZG9tIGRlbHRhIC01MDAwIDUwMDBcbiINCi0JIkJFR0lOO1xuIg0K LQkiVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMgU0VUIGFiYWxhbmNlID0gYWJh bGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlkID0gOmFpZDtcbiINCi0JIlNFTEVD VCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0g OmFpZDtcbiINCi0JIlVQREFURSBwZ2JlbmNoX3RlbGxlcnMgU0VUIHRiYWxh bmNlID0gdGJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgdGlkID0gOnRpZDtcbiIN Ci0JIlVQREFURSBwZ2JlbmNoX2JyYW5jaGVzIFNFVCBiYmFsYW5jZSA9IGJi YWxhbmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7XG4iDQotCSJJTlNF UlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRlbHRh LCBtdGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENV UlJFTlRfVElNRVNUQU1QKTtcbiINCi0JIkVORDtcbiINCi19Ow0KLQ0KLS8q IC1OIGNhc2UgKi8NCi1zdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsN Ci0JIlxcc2V0IG5icmFuY2hlcyAiIENwcEFzU3RyaW5nMihuYnJhbmNoZXMp ICIgKiA6c2NhbGVcbiINCi0JIlxcc2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJp bmcyKG50ZWxsZXJzKSAiICogOnNjYWxlXG4iDQotCSJcXHNldCBuYWNjb3Vu dHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAiICogOnNjYWxlXG4iDQot CSJcXHNldHJhbmRvbSBhaWQgMSA6bmFjY291bnRzXG4iDQotCSJcXHNldHJh bmRvbSBiaWQgMSA6bmJyYW5jaGVzXG4iDQotCSJcXHNldHJhbmRvbSB0aWQg MSA6bnRlbGxlcnNcbiINCi0JIlxcc2V0cmFuZG9tIGRlbHRhIC01MDAwIDUw MDBcbiINCi0JIkJFR0lOO1xuIg0KLQkiVVBEQVRFIHBnYmVuY2hfYWNjb3Vu dHMgU0VUIGFiYWxhbmNlID0gYWJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlk ID0gOmFpZDtcbiINCi0JIlNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hf YWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCi0JIklOU0VSVCBJTlRP IHBnYmVuY2hfaGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1l KSBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9U SU1FU1RBTVApO1xuIg0KLQkiRU5EO1xuIg0KLX07DQotDQotLyogLVMgY2Fz ZSAqLw0KLXN0YXRpYyBjaGFyICpzZWxlY3Rfb25seSA9IHsNCi0JIlxcc2V0 IG5hY2NvdW50cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2Nh bGVcbiINCi0JIlxcc2V0cmFuZG9tIGFpZCAxIDpuYWNjb3VudHNcbiINCi0J IlNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUg YWlkID0gOmFpZDtcbiINCi19Ow0KLQ0KIC8qIEZ1bmN0aW9uIHByb3RvdHlw ZXMgKi8NCiBzdGF0aWMgdm9pZCBzZXRhbGFybShpbnQgc2Vjb25kcyk7DQog c3RhdGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcpOw0KK3N0YXRpYyB2 b2lkIGRvVHhTdGF0cyhUU3RhdGUqLCBDU3RhdGUqLCBpbnN0cl90aW1lKiwg Ym9vbCwgRklMRSosIFN0YXRzRGF0YSopOw0KIA0KLXN0YXRpYyB2b2lkIGRv TG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxl LCBpbnN0cl90aW1lICpub3csDQotCSAgQWdnVmFscyAqYWdnLCBib29sIHNr aXBwZWQpOw0KKy8qIERlZmluZSBidWlsdGluIHRlc3Qgc2NyaXB0cyAqLw0K KyNkZWZpbmUgTl9CVUlMVElOIDMNCitzdGF0aWMgc3RydWN0IHsNCisJY2hh ciAqbmFtZTsgICAvKiB2ZXJ5IHNob3J0IG5hbWUgZm9yIC1iIC4uLiovDQor CWNoYXIgKmRlc2M7ICAgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8NCisJY2hh ciAqc2NyaXB0OyAvKiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9IGJ1 aWx0aW5fc2NyaXB0W10gPSB7DQorew0KKwkidHBjYi1saWtlIiwNCisJIjxi dWlsdGluOiBUUEMtQiAoc29ydCBvZik+IiwNCisJIlxcc2V0IG5icmFuY2hl cyAiIENwcEFzU3RyaW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCisJ Ilxcc2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICog OnNjYWxlXG4iDQorCSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIo bmFjY291bnRzKSAiICogOnNjYWxlXG4iDQorCSJcXHNldHJhbmRvbSBhaWQg MSA6bmFjY291bnRzXG4iDQorCSJcXHNldHJhbmRvbSBiaWQgMSA6bmJyYW5j aGVzXG4iDQorCSJcXHNldHJhbmRvbSB0aWQgMSA6bnRlbGxlcnNcbiINCisJ Ilxcc2V0cmFuZG9tIGRlbHRhIC01MDAwIDUwMDBcbiINCisJIkJFR0lOO1xu Ig0KKwkiVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMgU0VUIGFiYWxhbmNlID0g YWJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlkID0gOmFpZDtcbiINCisJIlNF TEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlk ID0gOmFpZDtcbiINCisJIlVQREFURSBwZ2JlbmNoX3RlbGxlcnMgU0VUIHRi YWxhbmNlID0gdGJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgdGlkID0gOnRpZDtc biINCisJIlVQREFURSBwZ2JlbmNoX2JyYW5jaGVzIFNFVCBiYmFsYW5jZSA9 IGJiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7XG4iDQorCSJJ TlNFUlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRl bHRhLCBtdGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEs IENVUlJFTlRfVElNRVNUQU1QKTtcbiINCisJIkVORDtcbiINCit9LA0KK3sN CisJInNpbXBsZS11cGRhdGUiLA0KKwkiPGJ1aWx0aW46IHNpbXBsZSB1cGRh dGU+IiwNCisJIlxcc2V0IG5icmFuY2hlcyAiIENwcEFzU3RyaW5nMihuYnJh bmNoZXMpICIgKiA6c2NhbGVcbiINCisJIlxcc2V0IG50ZWxsZXJzICIgQ3Bw QXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNjYWxlXG4iDQorCSJcXHNldCBu YWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAiICogOnNjYWxl XG4iDQorCSJcXHNldHJhbmRvbSBhaWQgMSA6bmFjY291bnRzXG4iDQorCSJc XHNldHJhbmRvbSBiaWQgMSA6bmJyYW5jaGVzXG4iDQorCSJcXHNldHJhbmRv bSB0aWQgMSA6bnRlbGxlcnNcbiINCisJIlxcc2V0cmFuZG9tIGRlbHRhIC01 MDAwIDUwMDBcbiINCisJIkJFR0lOO1xuIg0KKwkiVVBEQVRFIHBnYmVuY2hf YWNjb3VudHMgU0VUIGFiYWxhbmNlID0gYWJhbGFuY2UgKyA6ZGVsdGEgV0hF UkUgYWlkID0gOmFpZDtcbiINCisJIlNFTEVDVCBhYmFsYW5jZSBGUk9NIHBn YmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCisJIklOU0VS VCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEs IG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VS UkVOVF9USU1FU1RBTVApO1xuIg0KKwkiRU5EO1xuIg0KK30sDQorew0KKwki c2VsZWN0LW9ubHkiLA0KKwkiPGJ1aWx0aW46IHNlbGVjdCBvbmx5PiIsDQor CSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAi ICogOnNjYWxlXG4iDQorCSJcXHNldHJhbmRvbSBhaWQgMSA6bmFjY291bnRz XG4iDQorCSJTRUxFQ1QgYWJhbGFuY2UgRlJPTSBwZ2JlbmNoX2FjY291bnRz IFdIRVJFIGFpZCA9IDphaWQ7XG4iDQorfSB9Ow0KKw0KK3N0YXRpYyBjaGFy ICoNCitmaW5kX2J1aWx0aW4oY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKmRl c2MpDQorew0KKwlpbnQJCWxlbiA9IHN0cmxlbihuYW1lKSwgaTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IE5fQlVJTFRJTjsgaSsrKQ0KKwl7DQorCQlpZiAo c3RybmNtcChidWlsdGluX3NjcmlwdFtpXS5uYW1lLCBuYW1lLCBsZW4pID09 IDApDQorCQl7DQorCQkJKmRlc2MgPSBidWlsdGluX3NjcmlwdFtpXS5kZXNj Ow0KKwkJCXJldHVybiBidWlsdGluX3NjcmlwdFtpXS5zY3JpcHQ7DQorCQl9 DQorCX0NCisNCisJZnByaW50ZihzdGRlcnIsICJubyBidWlsdGluIGZvdW5k IGZvciBcIiVzXCJcbiIsIG5hbWUpOw0KKwlleGl0KDEpOw0KK30NCiANCiBz dGF0aWMgdm9pZA0KIHVzYWdlKHZvaWQpDQpAQCAtMzY3LDIzICs0MDQsMjUg QEAgdXNhZ2Uodm9pZCkNCiAJICIgIC0tdGFibGVzcGFjZT1UQUJMRVNQQUNF ICBjcmVhdGUgdGFibGVzIGluIHRoZSBzcGVjaWZpZWQgdGFibGVzcGFjZVxu Ig0KIAkJICAgIiAgLS11bmxvZ2dlZC10YWJsZXMgICAgICAgIGNyZWF0ZSB0 YWJsZXMgYXMgdW5sb2dnZWQgdGFibGVzXG4iDQogCQkgICAiXG5CZW5jaG1h cmtpbmcgb3B0aW9uczpcbiINCisJCSAgICIgIC1iLCAtLWJ1aWx0aW49TkFN RUBXICAgICBhZGQgd2VpZ2h0ZWQgYnVpdGluIHNjcmlwdCBhbW9uZyBcInRw Y2ItbGlrZVwiXG4iDQorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgXCJzaW1wbGUtdXBkYXRlXCIgYW5kIFwic2VsZWN0LW9ubHlcIi5cbiIN CiAJCSAgICIgIC1jLCAtLWNsaWVudD1OVU0gICAgICAgICBudW1iZXIgb2Yg Y29uY3VycmVudCBkYXRhYmFzZSBjbGllbnRzIChkZWZhdWx0OiAxKVxuIg0K IAkJICAgIiAgLUMsIC0tY29ubmVjdCAgICAgICAgICAgIGVzdGFibGlzaCBu ZXcgY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvblxuIg0KIAkJICAg IiAgLUQsIC0tZGVmaW5lPVZBUk5BTUU9VkFMVUVcbiINCiAJICAiICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIHZhcmlhYmxlIGZvciB1c2Ug YnkgY3VzdG9tIHNjcmlwdFxuIg0KLQkJICIgIC1mLCAtLWZpbGU9RklMRU5B TUUgICAgICByZWFkIHRyYW5zYWN0aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1F XG4iDQorCQkgIiAgLWYsIC0tZmlsZT1GSUxFTkFNRUBXICAgIGFkZCB3ZWln aHRlZCB0cmFuc2FjdGlvbiBzY3JpcHQgZnJvbSBGSUxFTkFNRVxuIg0KIAkJ ICAgIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgIG51bWJlciBvZiB0aHJl YWRzIChkZWZhdWx0OiAxKVxuIg0KIAkJICAgIiAgLWwsIC0tbG9nICAgICAg ICAgICAgICAgIHdyaXRlIHRyYW5zYWN0aW9uIHRpbWVzIHRvIGxvZyBmaWxl XG4iDQogCSIgIC1MLCAtLWxhdGVuY3ktbGltaXQ9TlVNICBjb3VudCB0cmFu c2FjdGlvbnMgbGFzdGluZyBtb3JlIHRoYW4gTlVNIG1zIGFzIGxhdGVcbiIN CiAJCSAgICIgIC1NLCAtLXByb3RvY29sPXNpbXBsZXxleHRlbmRlZHxwcmVw YXJlZFxuIg0KIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy b3RvY29sIGZvciBzdWJtaXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6IHNpbXBs ZSlcbiINCiAJCSAgICIgIC1uLCAtLW5vLXZhY3V1bSAgICAgICAgICBkbyBu b3QgcnVuIFZBQ1VVTSBiZWZvcmUgdGVzdHNcbiINCi0JCSAgICIgIC1OLCAt LXNraXAtc29tZS11cGRhdGVzICBza2lwIHVwZGF0ZXMgb2YgcGdiZW5jaF90 ZWxsZXJzIGFuZCBwZ2JlbmNoX2JyYW5jaGVzXG4iDQorCQkgICAiICAtTiwg LS1za2lwLXNvbWUtdXBkYXRlcyAgc2FtZSBhcyBcIi1iIHNpbXBsZS11cGRh dGVAMVwiXG4iDQogCQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0gICAgICAg c2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IE5VTSBzZWNvbmRz XG4iDQogCQkgICAiICAtciwgLS1yZXBvcnQtbGF0ZW5jaWVzICAgcmVwb3J0 IGF2ZXJhZ2UgbGF0ZW5jeSBwZXIgY29tbWFuZFxuIg0KIAkJIiAgLVIsIC0t cmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRlIGluIHRyYW5zYWN0aW9u cyBwZXIgc2Vjb25kXG4iDQogCQkgICAiICAtcywgLS1zY2FsZT1OVU0gICAg ICAgICAgcmVwb3J0IHRoaXMgc2NhbGUgZmFjdG9yIGluIG91dHB1dFxuIg0K LQkJICAgIiAgLVMsIC0tc2VsZWN0LW9ubHkgICAgICAgIHBlcmZvcm0gU0VM RUNULW9ubHkgdHJhbnNhY3Rpb25zXG4iDQorCQkgICAiICAtUywgLS1zZWxl Y3Qtb25seSAgICAgICAgc2FtZSBhcyBcIi1iIHNlbGVjdC1vbmx5QDFcIlxu Ig0KIAkJICAgIiAgLXQsIC0tdHJhbnNhY3Rpb25zPU5VTSAgIG51bWJlciBv ZiB0cmFuc2FjdGlvbnMgZWFjaCBjbGllbnQgcnVucyAoZGVmYXVsdDogMTAp XG4iDQogCQkgIiAgLVQsIC0tdGltZT1OVU0gICAgICAgICAgIGR1cmF0aW9u IG9mIGJlbmNobWFyayB0ZXN0IGluIHNlY29uZHNcbiINCiAJCSAgICIgIC12 LCAtLXZhY3V1bS1hbGwgICAgICAgICB2YWN1dW0gYWxsIGZvdXIgc3RhbmRh cmQgdGFibGVzIGJlZm9yZSB0ZXN0c1xuIg0KQEAgLTU4MSw2ICs2MjAsNDkg QEAgZ2V0UG9pc3NvblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IGNlbnRl cikNCiAJcmV0dXJuIChpbnQ2NCkgKC1sb2codW5pZm9ybSkgKiAoKGRvdWJs ZSkgY2VudGVyKSArIDAuNSk7DQogfQ0KIA0KK3N0YXRpYyB2b2lkDQoraW5p dFNpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICogc3MpDQorew0KKwltZW1zZXQo c3MsIDAsIHNpemVvZihTaW1wbGVTdGF0cykpOw0KK30NCisNCitzdGF0aWMg dm9pZA0KK2RvU2ltcGxlU3RhdHMoU2ltcGxlU3RhdHMgKnNzLCBkb3VibGUg dmFsKQ0KK3sNCisJaWYgKHNzLT5jb3VudCA9PSAwIHx8IHZhbCA8IHNzLT5t aW4pDQorCQlzcy0+bWluID0gdmFsOw0KKwlpZiAoc3MtPmNvdW50ID09IDAg fHwgdmFsID4gc3MtPm1heCkNCisJCXNzLT5tYXggPSB2YWw7DQorCXNzLT5j b3VudCArKzsNCisJc3MtPnN1bSArPSB2YWw7DQorCXNzLT5zdW0yICs9IHZh bCAqIHZhbDsNCit9DQorDQorc3RhdGljIHZvaWQNCithcHBlbmRTaW1wbGVT dGF0cyhTaW1wbGVTdGF0cyAqYWNjLCBTaW1wbGVTdGF0cyAqc3MpDQorew0K KwlpZiAoYWNjLT5jb3VudCA9PSAwIHx8IHNzLT5taW4gPCBhY2MtPm1pbikN CisJCWFjYy0+bWluID0gc3MtPm1pbjsNCisJaWYgKGFjYy0+Y291bnQgPT0g MCB8fCBzcy0+bWF4ID4gYWNjLT5tYXgpDQorCQlhY2MtPm1heCA9IHNzLT5t YXg7DQorCWFjYy0+Y291bnQgKz0gc3MtPmNvdW50Ow0KKwlhY2MtPnN1bSAr PSBzcy0+c3VtOw0KKwlhY2MtPnN1bTIgKz0gc3MtPnN1bTI7DQorfQ0KKw0K K3N0YXRpYyB2b2lkDQoraW5pdFN0YXRzKFN0YXRzRGF0YSAqc2QsIGRvdWJs ZSBzdGFydF90aW1lKQ0KK3sNCisJc2QtPmNudCA9IDA7DQorCXNkLT5za2lw cGVkID0gMDsNCisJaW5pdFNpbXBsZVN0YXRzKCYgc2QtPmxhdGVuY3kpOw0K Kwlpbml0U2ltcGxlU3RhdHMoJiBzZC0+bGFnKTsNCisNCisJLyogbm90IG5l Y2Vzc2FyaWx5IG92ZXJyaWRlbj8gKi8NCisJaWYgKHN0YXJ0X3RpbWUpDQor CQlzZC0+c3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7DQorfQ0KKw0KIC8qIGNh bGwgUFFleGVjKCkgYW5kIGV4aXQoKSBvbiBmYWlsdXJlICovDQogc3RhdGlj IHZvaWQNCiBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBj aGFyICpzcWwpDQpAQCAtMTEwMCwzMyArMTE4MiwyMSBAQCBjbGllbnREb25l KENTdGF0ZSAqc3QsIGJvb2wgb2spDQogCXJldHVybiBmYWxzZTsJCQkJLyog YWx3YXlzIGZhbHNlICovDQogfQ0KIA0KLXN0YXRpYyB2b2lkDQotYWdnX3Zh bHNfaW5pdChBZ2dWYWxzICphZ2dzLCBpbnN0cl90aW1lIHN0YXJ0KQ0KK3N0 YXRpYyBpbnQNCitjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpDQogew0K LQkvKiBiYXNpYyBjb3VudGVycyAqLw0KLQlhZ2dzLT5jbnQgPSAwOwkJCQkv KiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIChpbmNsdWRlcyBza2lwcGVkKSAq Lw0KLQlhZ2dzLT5za2lwcGVkID0gMDsJCQkvKiB4YWN0cyBza2lwcGVkIHVu ZGVyIC0tcmF0ZSAtLWxhdGVuY3ktbGltaXQgKi8NCisJaW50IGkgPSAwLCB3 ID0gMCwgd2MgPSAoaW50KSBnZXRyYW5kKHRocmVhZCwgMCwgdG90YWxfd2Vp Z2h0IC0gMSk7DQogDQotCWFnZ3MtPnN1bV9sYXRlbmN5ID0gMDsJCS8qIFNV TShsYXRlbmN5KSAqLw0KLQlhZ2dzLT5zdW0yX2xhdGVuY3kgPSAwOwkJLyog U1VNKGxhdGVuY3kqbGF0ZW5jeSkgKi8NCisJZG8gew0KKwkJdyArPSBzcWxf c2NyaXB0W2krK10ud2VpZ2h0Ow0KKwl9IHdoaWxlICh3IDw9IHdjKTsNCiAN Ci0JLyogbWluIGFuZCBtYXggdHJhbnNhY3Rpb24gZHVyYXRpb24gKi8NCi0J YWdncy0+bWluX2xhdGVuY3kgPSAwOw0KLQlhZ2dzLT5tYXhfbGF0ZW5jeSA9 IDA7DQotDQotCS8qIHNjaGVkdWxlIGxhZyBjb3VudGVycyAqLw0KLQlhZ2dz LT5zdW1fbGFnID0gMDsNCi0JYWdncy0+c3VtMl9sYWcgPSAwOw0KLQlhZ2dz LT5taW5fbGFnID0gMDsNCi0JYWdncy0+bWF4X2xhZyA9IDA7DQotDQotCS8q IHN0YXJ0IG9mIHRoZSBjdXJyZW50IGludGVydmFsICovDQotCWFnZ3MtPnN0 YXJ0X3RpbWUgPSBJTlNUUl9USU1FX0dFVF9ET1VCTEUoc3RhcnQpOw0KKwly ZXR1cm4gaSAtIDE7DQogfQ0KIA0KIC8qIHJldHVybiBmYWxzZSBpZmYgY2xp ZW50IHNob3VsZCBiZSBkaXNjb25uZWN0ZWQgKi8NCiBzdGF0aWMgYm9vbA0K LWRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90 aW1lICpjb25uX3RpbWUsIEZJTEUgKmxvZ2ZpbGUsIEFnZ1ZhbHMgKmFnZykN Citkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAq bG9nZmlsZSwgU3RhdHNEYXRhICphZ2cpDQogew0KIAlQR3Jlc3VsdCAgICpy ZXM7DQogCUNvbW1hbmQgICAqKmNvbW1hbmRzOw0KQEAgLTExNDQsNyArMTIx NCw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBp bnN0cl90aW1lICpjb25uX3RpbWUsIEZJTEUgKmxvZ2ZpbGUsIEFnZ1ZhDQog dG9wOg0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKG5vdyk7DQogDQotCWNvbW1h bmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmlsZV07DQorCWNvbW1hbmRzID0g c3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIA0KIAkvKg0K IAkgKiBIYW5kbGUgdGhyb3R0bGluZyBvbmNlIHBlciB0cmFuc2FjdGlvbiBi eSBzbGVlcGluZy4gIEl0IGlzIHNpbXBsZXIgdG8NCkBAIC0xMTgwLDE4ICsx MjUwLDE1IEBAIHRvcDoNCiAJCQlub3dfdXMgPSBJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhub3cpOw0KIAkJCXdoaWxlICh0aHJlYWQtPnRocm90dGxlX3Ry aWdnZXIgPCBub3dfdXMgLSBsYXRlbmN5X2xpbWl0KQ0KIAkJCXsNCi0JCQkJ dGhyZWFkLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQrKzsNCi0NCi0JCQkJ aWYgKGxvZ2ZpbGUpDQotCQkJCQlkb0xvZyh0aHJlYWQsIHN0LCBsb2dmaWxl LCAmbm93LCBhZ2csIHRydWUpOw0KLQ0KKwkJCQlkb1R4U3RhdHModGhyZWFk LCBzdCwgICZub3csIHRydWUsIGxvZ2ZpbGUsIGFnZyk7DQorCQkJCS8qIG5l eHQgcmVuZGV6LXZvdXMgKi8NCiAJCQkJd2FpdCA9IGdldFBvaXNzb25SYW5k KHRocmVhZCwgdGhyb3R0bGVfZGVsYXkpOw0KIAkJCQl0aHJlYWQtPnRocm90 dGxlX3RyaWdnZXIgKz0gd2FpdDsNCiAJCQkJc3QtPnR4bl9zY2hlZHVsZWQg PSB0aHJlYWQtPnRocm90dGxlX3RyaWdnZXI7DQogCQkJfQ0KIAkJfQ0KIA0K LQkJc3QtPnNsZWVwaW5nID0gMTsNCisJCXN0LT5zbGVlcGluZyA9IHRydWU7 DQogCQlzdC0+dGhyb3R0bGluZyA9IHRydWU7DQogCQlzdC0+aXNfdGhyb3R0 bGVkID0gdHJ1ZTsNCiAJCWlmIChkZWJ1ZykNCkBAIC0xMjAxLDI3ICsxMjY4 LDEzIEBAIHRvcDoNCiANCiAJaWYgKHN0LT5zbGVlcGluZykNCiAJewkJCQkJ CQkvKiBhcmUgd2Ugc2xlZXBpbmc/ICovDQotCQlpbnQ2NAkJbm93X3VzOw0K LQ0KIAkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQ0KIAkJCUlOU1RS X1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCi0JCW5vd191cyA9IElOU1RSX1RJ TUVfR0VUX01JQ1JPU0VDKG5vdyk7DQotCQlpZiAoc3QtPnR4bl9zY2hlZHVs ZWQgPD0gbm93X3VzKQ0KLQkJew0KLQkJCXN0LT5zbGVlcGluZyA9IDA7CS8q IERvbmUgc2xlZXBpbmcsIGdvIGFoZWFkIHdpdGggbmV4dCBjb21tYW5kICov DQotCQkJaWYgKHN0LT50aHJvdHRsaW5nKQ0KLQkJCXsNCi0JCQkJLyogTWVh c3VyZSBsYWcgb2YgdGhyb3R0bGVkIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHRv IHRhcmdldCAqLw0KLQkJCQlpbnQ2NAkJbGFnID0gbm93X3VzIC0gc3QtPnR4 bl9zY2hlZHVsZWQ7DQotDQotCQkJCXRocmVhZC0+dGhyb3R0bGVfbGFnICs9 IGxhZzsNCi0JCQkJaWYgKGxhZyA+IHRocmVhZC0+dGhyb3R0bGVfbGFnX21h eCkNCi0JCQkJCXRocmVhZC0+dGhyb3R0bGVfbGFnX21heCA9IGxhZzsNCi0J CQkJc3QtPnRocm90dGxpbmcgPSBmYWxzZTsNCi0JCQl9DQotCQl9DQotCQll bHNlDQorCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KSA8IHN0 LT50eG5fc2NoZWR1bGVkKQ0KIAkJCXJldHVybiB0cnVlOwkJLyogU3RpbGwg c2xlZXBpbmcsIG5vdGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJLyogRWxzZSBk b25lIHNsZWVwaW5nLCBnbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZCAqLw0K KwkJc3QtPnNsZWVwaW5nID0gZmFsc2U7DQorCQlzdC0+dGhyb3R0bGluZyA9 IGZhbHNlOw0KIAl9DQogDQogCWlmIChzdC0+bGlzdGVuKQ0KQEAgLTEyNDUs NDcgKzEyOTgsMjQgQEAgdG9wOg0KIAkJICovDQogCQlpZiAoaXNfbGF0ZW5j aWVzKQ0KIAkJew0KLQkJCWludAkJCWNudW0gPSBjb21tYW5kc1tzdC0+c3Rh dGVdLT5jb21tYW5kX251bTsNCi0NCiAJCQlpZiAoSU5TVFJfVElNRV9JU19a RVJPKG5vdykpDQogCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsN Ci0JCQlJTlNUUl9USU1FX0FDQ1VNX0RJRkYodGhyZWFkLT5leGVjX2VsYXBz ZWRbY251bV0sDQotCQkJCQkJCQkgIG5vdywgc3QtPnN0bXRfYmVnaW4pOw0K LQkJCXRocmVhZC0+ZXhlY19jb3VudFtjbnVtXSsrOw0KKw0KKwkJCS8qIGFs dGhvdWdoIGEgbXV0ZXggd291bGQgbWFrZSBzZW5zZSwgdGhlIGxpa2VseWhv b2Qgb2YgYW4gaXNzdWUNCisJCQkgKiBpcyBzbWFsbCBhbmQgdGhlc2UgYXJl IG9ubHkgc3RhdHMgd2hpY2ggbWF5IGJlIHNsaWdodGx5IGZhbHNlDQorCQkJ ICovDQorCQkJZG9TaW1wbGVTdGF0cygmIGNvbW1hbmRzW3N0LT5zdGF0ZV0t PnN0YXRzLA0KKwkJCQkJCSAgSU5TVFJfVElNRV9HRVRfRE9VQkxFKG5vdykg LQ0KKwkJCQkJCSAgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0LT5zdG10X2Jl Z2luKSk7DQogCQl9DQogDQogCQkvKiB0cmFuc2FjdGlvbiBmaW5pc2hlZDog Y2FsY3VsYXRlIGxhdGVuY3kgYW5kIGxvZyB0aGUgdHJhbnNhY3Rpb24gKi8N CiAJCWlmIChjb21tYW5kc1tzdC0+c3RhdGUgKyAxXSA9PSBOVUxMKQ0KIAkJ ew0KLQkJCS8qIG9ubHkgY2FsY3VsYXRlIGxhdGVuY3kgaWYgYW4gb3B0aW9u IGlzIHVzZWQgdGhhdCBuZWVkcyBpdCAqLw0KLQkJCWlmIChwcm9ncmVzcyB8 fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0KQ0KLQkJCXsNCi0J CQkJaW50NjQJCWxhdGVuY3k7DQotDQotCQkJCWlmIChJTlNUUl9USU1FX0lT X1pFUk8obm93KSkNCi0JCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93 KTsNCi0NCi0JCQkJbGF0ZW5jeSA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VD KG5vdykgLSBzdC0+dHhuX3NjaGVkdWxlZDsNCi0NCi0JCQkJc3QtPnR4bl9s YXRlbmNpZXMgKz0gbGF0ZW5jeTsNCi0NCi0JCQkJLyoNCi0JCQkJICogWFhY IEluIGEgbG9uZyBiZW5jaG1hcmsgcnVuIG9mIGhpZ2gtbGF0ZW5jeSB0cmFu c2FjdGlvbnMsDQotCQkJCSAqIHRoaXMgaW50NjQgYWRkaXRpb24gZXZlbnR1 YWxseSBvdmVyZmxvd3MuICBGb3IgZXhhbXBsZSwgMTAwDQotCQkJCSAqIHRo cmVhZHMgcnVubmluZyAxMHMgdHJhbnNhY3Rpb25zIHdpbGwgb3ZlcmZsb3cg aXQgaW4gMi41Ng0KLQkJCQkgKiBob3Vycy4gIFdpdGggYSBtb3JlLXR5cGlj YWwgT0xUUCB3b3JrbG9hZCBvZiAuMXMNCi0JCQkJICogdHJhbnNhY3Rpb25z LCBvdmVyZmxvdyB3b3VsZCB0YWtlIDI1NiBob3Vycy4NCi0JCQkJICovDQot CQkJCXN0LT50eG5fc3FsYXRzICs9IGxhdGVuY3kgKiBsYXRlbmN5Ow0KLQ0K LQkJCQkvKiByZWNvcmQgb3ZlciB0aGUgbGltaXQgdHJhbnNhY3Rpb25zIGlm IG5lZWRlZC4gKi8NCi0JCQkJaWYgKGxhdGVuY3lfbGltaXQgJiYgbGF0ZW5j eSA+IGxhdGVuY3lfbGltaXQpDQotCQkJCQl0aHJlYWQtPmxhdGVuY3lfbGF0 ZSsrOw0KLQkJCX0NCi0NCi0JCQkvKiByZWNvcmQgdGhlIHRpbWUgaXQgdG9v ayBpbiB0aGUgbG9nICovDQotCQkJaWYgKGxvZ2ZpbGUpDQotCQkJCWRvTG9n KHRocmVhZCwgc3QsIGxvZ2ZpbGUsICZub3csIGFnZywgZmFsc2UpOw0KKwkJ CWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xp bWl0IHx8IHBlcl9zY3JpcHRfc3RhdHMgfHwgbG9nZmlsZSkNCisJCQkJZG9U eFN0YXRzKHRocmVhZCwgc3QsICZub3csIGZhbHNlLCBsb2dmaWxlLCBhZ2cp Ow0KKwkJCWVsc2UNCisJCQkJdGhyZWFkLT5zdGF0cy5jbnQgKys7DQogCQl9 DQogDQogCQlpZiAoY29tbWFuZHNbc3QtPnN0YXRlXS0+dHlwZSA9PSBTUUxf Q09NTUFORCkNCkBAIC0xMzI4LDggKzEzNTgsOSBAQCB0b3A6DQogCQlpZiAo Y29tbWFuZHNbc3QtPnN0YXRlXSA9PSBOVUxMKQ0KIAkJew0KIAkJCXN0LT5z dGF0ZSA9IDA7DQotCQkJc3QtPnVzZV9maWxlID0gKGludCkgZ2V0cmFuZCh0 aHJlYWQsIDAsIG51bV9maWxlcyAtIDEpOw0KLQkJCWNvbW1hbmRzID0gc3Fs X2ZpbGVzW3N0LT51c2VfZmlsZV07DQorCQkJc3QtPnVzZV9maWxlID0gbnVt X3NjcmlwdHM9PTE/IDA6IGNob29zZVNjcmlwdCh0aHJlYWQpOw0KKw0KKwkJ CWNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRz Ow0KIAkJCXN0LT5pc190aHJvdHRsZWQgPSBmYWxzZTsNCiANCiAJCQkvKg0K QEAgLTEzNTcsNyArMTM4OCw3IEBAIHRvcDoNCiAJCQlyZXR1cm4gY2xpZW50 RG9uZShzdCwgZmFsc2UpOw0KIAkJfQ0KIAkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChlbmQpOw0KLQkJSU5TVFJfVElNRV9BQ0NVTV9ESUZGKCpjb25uX3Rp bWUsIGVuZCwgc3RhcnQpOw0KKwkJSU5TVFJfVElNRV9BQ0NVTV9ESUZGKHRo cmVhZC0+Y29ubl90aW1lLCBlbmQsIHN0YXJ0KTsNCiAJfQ0KIA0KIAkvKg0K QEAgLTEzNzIsNyArMTQwMyw3IEBAIHRvcDoNCiAJfQ0KIA0KIAkvKiBSZWNv cmQgdHJhbnNhY3Rpb24gc3RhcnQgdGltZSB1bmRlciBsb2dnaW5nLCBwcm9n cmVzcyBvciB0aHJvdHRsaW5nICovDQotCWlmICgobG9nZmlsZSB8fCBwcm9n cmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0KSAmJiBz dC0+c3RhdGUgPT0gMCkNCisJaWYgKChsb2dmaWxlIHx8IHByb2dyZXNzIHx8 IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lfbGltaXQgfHwgcGVyX3Njcmlw dF9zdGF0cykgJiYgc3QtPnN0YXRlID09IDApDQogCXsNCiAJCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQoc3QtPnR4bl9iZWdpbik7DQogDQpAQCAtMTY2MCw3 ICsxNjkxLDcgQEAgdG9wOg0KIA0KIAkJCUlOU1RSX1RJTUVfU0VUX0NVUlJF TlQobm93KTsNCiAJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IElOU1RSX1RJTUVf R0VUX01JQ1JPU0VDKG5vdykgKyB1c2VjOw0KLQkJCXN0LT5zbGVlcGluZyA9 IDE7DQorCQkJc3QtPnNsZWVwaW5nID0gdHJ1ZTsNCiANCiAJCQlzdC0+bGlz dGVuID0gMTsNCiAJCX0NCkBAIC0xNjkyLDIyICsxNzIzLDM5IEBAIHRvcDoN CiAJCQllbHNlCS8qIHN1Y2NlZWRlZCAqLw0KIAkJCQlzdC0+bGlzdGVuID0g MTsNCiAJCX0NCisNCisJCS8qIGFmdGVyIGEgbWV0YSBjb21tYW5kLCBpbW1l ZGlhdGVseSBwcm9jZWVkIHdpdGggbmV4dCBjb21tYW5kICovDQogCQlnb3Rv IHRvcDsNCiAJfQ0KIA0KIAlyZXR1cm4gdHJ1ZTsNCiB9DQogDQorc3RhdGlj IHZvaWQNCitkb1N0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBl ZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykNCit7DQorCXN0YXRzLT5jbnQg Kys7DQorDQorCWlmIChza2lwcGVkKQ0KKwkJLyogbm8gbGF0ZW5jeSB0byBy ZWNvcmQgb24gc2tpcHBlZCB0cmFuc2FjdGlvbnMgKi8NCisJCXN0YXRzLT5z a2lwcGVkICsrOw0KKwllbHNlDQorCXsNCisJCWRvU2ltcGxlU3RhdHMoJiBz dGF0cy0+bGF0ZW5jeSwgbGF0KTsNCisNCisJCS8qIGFuZCBwb3NzaWJseSB0 aGUgc2FtZSBmb3Igc2NoZWR1bGUgbGFnICovDQorCQlpZiAodGhyb3R0bGVf ZGVsYXkpDQorCQkJZG9TaW1wbGVTdGF0cygmIHN0YXRzLT5sYWcsIGxhZyk7 DQorCX0NCit9DQorDQogLyoNCiAgKiBwcmludCBsb2cgZW50cnkgYWZ0ZXIg Y29tcGxldGluZyBvbmUgdHJhbnNhY3Rpb24uDQogICovDQogc3RhdGljIHZv aWQNCi1kb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAq bG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQotCSAg Ym9vbCBza2lwcGVkKQ0KK2RvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUg KnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csDQorCSAgU3Rh dHNEYXRhICphZ2csIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdGVuY3ksIGRv dWJsZSBsYWcpDQogew0KLQlkb3VibGUJCWxhZzsNCi0JZG91YmxlCQlsYXRl bmN5Ow0KLQ0KIAkvKg0KIAkgKiBTa2lwIHRoZSBsb2cgZW50cnkgaWYgc2Ft cGxpbmcgaXMgZW5hYmxlZCBhbmQgdGhpcyByb3cgZG9lc24ndCBiZWxvbmcN CiAJICogdG8gdGhlIHJhbmRvbSBzYW1wbGUuDQpAQCAtMTcxNiwxNSArMTc2 NCw2IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxF ICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJ CXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpID4gc2FtcGxlX3Jh dGUpDQogCQlyZXR1cm47DQogDQotCWlmIChJTlNUUl9USU1FX0lTX1pFUk8o Km5vdykpDQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKCpub3cpOw0KLQ0K LQlsYXRlbmN5ID0gKGRvdWJsZSkgKElOU1RSX1RJTUVfR0VUX01JQ1JPU0VD KCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQpOw0KLQlpZiAoc2tpcHBlZCkN Ci0JCWxhZyA9IGxhdGVuY3k7DQotCWVsc2UNCi0JCWxhZyA9IChkb3VibGUp IChJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdC0+dHhuX2JlZ2luKSAtIHN0 LT50eG5fc2NoZWR1bGVkKTsNCi0NCiAJLyogc2hvdWxkIHdlIGFnZ3JlZ2F0 ZSB0aGUgcmVzdWx0cyBvciBub3Q/ICovDQogCWlmIChhZ2dfaW50ZXJ2YWwg PiAwKQ0KIAl7DQpAQCAtMTczNCwzOSArMTc3Myw3IEBAIGRvTG9nKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90 aW1lICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJCSAqLw0KIAkJaWYgKGFnZy0+ c3RhcnRfdGltZSArIGFnZ19pbnRlcnZhbCA+PSBJTlNUUl9USU1FX0dFVF9E T1VCTEUoKm5vdykpDQogCQl7DQotCQkJYWdnLT5jbnQgKz0gMTsNCi0JCQlp ZiAoc2tpcHBlZCkNCi0JCQl7DQotCQkJCS8qDQotCQkJCSAqIHRoZXJlIGlz IG5vIGxhdGVuY3kgdG8gcmVjb3JkIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMN Ci0JCQkJICogc2tpcHBlZA0KLQkJCQkgKi8NCi0JCQkJYWdnLT5za2lwcGVk ICs9IDE7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWFnZy0+c3Vt X2xhdGVuY3kgKz0gbGF0ZW5jeTsNCi0JCQkJYWdnLT5zdW0yX2xhdGVuY3kg Kz0gbGF0ZW5jeSAqIGxhdGVuY3k7DQotDQotCQkJCS8qIGZpcnN0IGluIHRo aXMgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi8NCi0JCQkJaWYgKChhZ2ctPmNu dCA9PSAxKSB8fCAobGF0ZW5jeSA8IGFnZy0+bWluX2xhdGVuY3kpKQ0KLQkJ CQkJYWdnLT5taW5fbGF0ZW5jeSA9IGxhdGVuY3k7DQotDQotCQkJCWlmICgo YWdnLT5jbnQgPT0gMSkgfHwgKGxhdGVuY3kgPiBhZ2ctPm1heF9sYXRlbmN5 KSkNCi0JCQkJCWFnZy0+bWF4X2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQ0KLQkJ CQkvKiBhbmQgdGhlIHNhbWUgZm9yIHNjaGVkdWxlIGxhZyAqLw0KLQkJCQlp ZiAodGhyb3R0bGVfZGVsYXkpDQotCQkJCXsNCi0JCQkJCWFnZy0+c3VtX2xh ZyArPSBsYWc7DQotCQkJCQlhZ2ctPnN1bTJfbGFnICs9IGxhZyAqIGxhZzsN Ci0NCi0JCQkJCWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhZyA8IGFnZy0+ bWluX2xhZykpDQotCQkJCQkJYWdnLT5taW5fbGFnID0gbGFnOw0KLQkJCQkJ aWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGFnID4gYWdnLT5tYXhfbGFnKSkN Ci0JCQkJCQlhZ2ctPm1heF9sYWcgPSBsYWc7DQotCQkJCX0NCi0JCQl9DQor CQkJZG9TdGF0cyhhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQogCQl9 DQogCQllbHNlDQogCQl7DQpAQCAtMTc4MSw1MiArMTc4OCwzNCBAQCBkb0xv ZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwg aW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCQkJCSAqIHVzYWdl KSwgc28gd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdGhpcyBpbiBhIHNwZWNp YWwgd2F5DQogCQkJCSAqIChzZWUgYmVsb3cpLg0KIAkJCQkgKi8NCi0JCQkJ ZnByaW50Zihsb2dmaWxlLCAiJWxkICVkICUuMGYgJS4wZiAlLjBmICUuMGYi LA0KKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9GT1JNQVQg IiAlLjBmICUuMGYgJS4wZiAlLjBmIiwNCiAJCQkJCQlhZ2ctPnN0YXJ0X3Rp bWUsDQogCQkJCQkJYWdnLT5jbnQsDQotCQkJCQkJYWdnLT5zdW1fbGF0ZW5j eSwNCi0JCQkJCQlhZ2ctPnN1bTJfbGF0ZW5jeSwNCi0JCQkJCQlhZ2ctPm1p bl9sYXRlbmN5LA0KLQkJCQkJCWFnZy0+bWF4X2xhdGVuY3kpOw0KKwkJCQkJ CWFnZy0+bGF0ZW5jeS5zdW0sDQorCQkJCQkJYWdnLT5sYXRlbmN5LnN1bTIs DQorCQkJCQkJYWdnLT5sYXRlbmN5Lm1pbiwNCisJCQkJCQlhZ2ctPmxhdGVu Y3kubWF4KTsNCiAJCQkJaWYgKHRocm90dGxlX2RlbGF5KQ0KIAkJCQl7DQog CQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJS4wZiAlLjBmICUuMGYgJS4wZiIs DQotCQkJCQkJCWFnZy0+c3VtX2xhZywNCi0JCQkJCQkJYWdnLT5zdW0yX2xh ZywNCi0JCQkJCQkJYWdnLT5taW5fbGFnLA0KLQkJCQkJCQlhZ2ctPm1heF9s YWcpOw0KKwkJCQkJCQlhZ2ctPmxhZy5zdW0sDQorCQkJCQkJCWFnZy0+bGFn LnN1bTIsDQorCQkJCQkJCWFnZy0+bGFnLm1pbiwNCisJCQkJCQkJYWdnLT5s YWcubWF4KTsNCiAJCQkJCWlmIChsYXRlbmN5X2xpbWl0KQ0KLQkJCQkJCWZw cmludGYobG9nZmlsZSwgIiAlZCIsIGFnZy0+c2tpcHBlZCk7DQorCQkJCQkJ ZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFULCBhZ2ctPnNraXBw ZWQpOw0KIAkJCQl9DQogCQkJCWZwdXRjKCdcbicsIGxvZ2ZpbGUpOw0KIA0K LQkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGludGV2YWwgKi8NCi0JCQkJYWdn LT5zdGFydF90aW1lID0gYWdnLT5zdGFydF90aW1lICsgYWdnX2ludGVydmFs Ow0KKwkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGludGVydmFsICovDQorCQkJ CWFnZy0+c3RhcnRfdGltZSArPSBhZ2dfaW50ZXJ2YWw7DQogDQogCQkJCS8q IHJlc2V0IGZvciAibm8gdHJhbnNhY3Rpb24iIGludGVydmFscyAqLw0KLQkJ CQlhZ2ctPmNudCA9IDA7DQotCQkJCWFnZy0+c2tpcHBlZCA9IDA7DQotCQkJ CWFnZy0+bWluX2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ctPm1heF9sYXRlbmN5 ID0gMDsNCi0JCQkJYWdnLT5zdW1fbGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+ c3VtMl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5taW5fbGFnID0gMDsNCi0J CQkJYWdnLT5tYXhfbGFnID0gMDsNCi0JCQkJYWdnLT5zdW1fbGFnID0gMDsN Ci0JCQkJYWdnLT5zdW0yX2xhZyA9IDA7DQorCQkJCWluaXRTdGF0cyhhZ2cs IDAuMCk7DQogCQkJfQ0KIA0KIAkJCS8qIHJlc2V0IHRoZSB2YWx1ZXMgdG8g aW5jbHVkZSBvbmx5IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAqLw0KLQkJ CWFnZy0+Y250ID0gMTsNCi0JCQlhZ2ctPnNraXBwZWQgPSBza2lwcGVkID8g MSA6IDA7DQotCQkJYWdnLT5taW5fbGF0ZW5jeSA9IGxhdGVuY3k7DQotCQkJ YWdnLT5tYXhfbGF0ZW5jeSA9IGxhdGVuY3k7DQotCQkJYWdnLT5zdW1fbGF0 ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRlbmN5Ow0KLQkJCWFnZy0+c3Vt Ml9sYXRlbmN5ID0gc2tpcHBlZCA/IDAuMCA6IGxhdGVuY3kgKiBsYXRlbmN5 Ow0KLQkJCWFnZy0+bWluX2xhZyA9IGxhZzsNCi0JCQlhZ2ctPm1heF9sYWcg PSBsYWc7DQotCQkJYWdnLT5zdW1fbGFnID0gbGFnOw0KLQkJCWFnZy0+c3Vt Ml9sYWcgPSBsYWcgKiBsYWc7DQorCQkJZG9TdGF0cyhhZ2csIHNraXBwZWQs IGxhdGVuY3ksIGxhZyk7DQogCQl9DQogCX0NCiAJZWxzZQ0KQEAgLTE4MzYs MjEgKzE4MjUsMjEgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAq YWdnLA0KIA0KIAkJLyogVGhpcyBpcyBtb3JlIHRoYW4gd2UgcmVhbGx5IG91 Z2h0IHRvIGtub3cgYWJvdXQgaW5zdHJfdGltZSAqLw0KIAkJaWYgKHNraXBw ZWQpDQotCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgc2tpcHBlZCAlZCAl bGQgJWxkIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZP Uk1BVCAiIHNraXBwZWQgJWQgJWxkICVsZCIsDQogCQkJCQlzdC0+aWQsIHN0 LT5jbnQsIHN0LT51c2VfZmlsZSwNCiAJCQkJCShsb25nKSBub3ctPnR2X3Nl YywgKGxvbmcpIG5vdy0+dHZfdXNlYyk7DQogCQllbHNlDQotCQkJZnByaW50 Zihsb2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAlbGQgJWxkIiwNCisJCQlmcHJp bnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJWQgJWxk ICVsZCIsDQogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIGxhdGVuY3ksIHN0LT51 c2VfZmlsZSwNCiAJCQkJCShsb25nKSBub3ctPnR2X3NlYywgKGxvbmcpIG5v dy0+dHZfdXNlYyk7DQogI2Vsc2UNCiANCiAJCS8qIE9uIFdpbmRvd3MsIGlu c3RyX3RpbWUgZG9lc24ndCBwcm92aWRlIGEgdGltZXN0YW1wIGFueXdheSAq Lw0KIAkJaWYgKHNraXBwZWQpDQotCQkJZnByaW50Zihsb2dmaWxlLCAiJWQg JWQgc2tpcHBlZCAlZCAwIDAiLA0KKwkJCWZwcmludGYobG9nZmlsZSwgIiVk ICJJTlQ2NF9GT1JNQVQiIHNraXBwZWQgJWQgMCAwIiwNCiAJCQkJCXN0LT5p ZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlKTsNCiAJCWVsc2UNCi0JCQlmcHJp bnRmKGxvZ2ZpbGUsICIlZCAlZCAlLjBmICVkIDAgMCIsDQorCQkJZnByaW50 Zihsb2dmaWxlLCAiJWQgIklOVDY0X0ZPUk1BVCIgJS4wZiAlZCAwIDAiLA0K IAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNlX2ZpbGUp Ow0KICNlbmRpZg0KIAkJaWYgKHRocm90dGxlX2RlbGF5KQ0KQEAgLTE4NTks NiArMTg0OCw0NCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICph Z2csDQogCX0NCiB9DQogDQorLyoNCisgKiBlbmQgb2YgdHJhbnNhY3Rpb24g c3RhdGlzdGljcw0KKyAqLw0KK3N0YXRpYyB2b2lkDQorZG9UeFN0YXRzKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csDQor CQkgIGJvb2wgc2tpcHBlZCwgRklMRSAqbG9nZmlsZSwgU3RhdHNEYXRhICph Z2cpDQorew0KKwlkb3VibGUgbGF0ZW5jeSA9IDAuMCwgbGFnID0gMC4wOw0K Kw0KKwlpZiAoKCFza2lwcGVkIHx8IGFnZ19pbnRlcnZhbCkgJiYgSU5TVFJf VElNRV9JU19aRVJPKCpub3cpKQ0KKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VCgqbm93KTsNCisNCisJaWYgKCFza2lwcGVkKQ0KKwl7DQorCQkvKiBjb21w dXRlIGxhdGVuY3kgJiBsYWcgaWYgbmVlZGVkICovDQorCQlsYXRlbmN5ID0g SU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+dHhuX3NjaGVk dWxlZDsNCisJCWxhZyA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0LT50 eG5fYmVnaW4pIC0gc3QtPnR4bl9zY2hlZHVsZWQ7DQorCX0NCisNCisJaWYg KHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lfbGltaXQp DQorCXsNCisJCWRvU3RhdHMoJiB0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBs YXRlbmN5LCBsYWcpOw0KKw0KKwkJLyogcmVjb3JkIG92ZXIgdGhlIGxpbWl0 IHRyYW5zYWN0aW9ucyBpZiBuZWVkZWQuICovDQorCQlpZiAobGF0ZW5jeV9s aW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkNCisJCQl0aHJlYWQt PmxhdGVuY3lfbGF0ZSsrOw0KKwl9DQorCWVsc2UNCisJCXRocmVhZC0+c3Rh dHMuY250ICsrOw0KKw0KKwlpZiAodXNlX2xvZykNCisJCWRvTG9nKHRocmVh ZCwgc3QsIGxvZ2ZpbGUsIG5vdywgYWdnLCBza2lwcGVkLCBsYXRlbmN5LCBs YWcpOw0KKw0KKwlpZiAocGVyX3NjcmlwdF9zdGF0cykgLyogbXV0ZXg/IGht bW0uLi4gdGhlc2UgYXJlIG9ubHkgc3RhdGlzdGljcyAqLw0KKwkJZG9TdGF0 cygmIHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5zdGF0cywgc2tpcHBlZCwg bGF0ZW5jeSwgbGFnKTsNCit9DQorDQorDQogLyogZGlzY2FyZCBjb25uZWN0 aW9ucyAqLw0KIHN0YXRpYyB2b2lkDQogZGlzY29ubmVjdF9hbGwoQ1N0YXRl ICpzdGF0ZSwgaW50IGxlbmd0aCkNCkBAIC0yMjU1LDYgKzIyODIsNyBAQCBw cm9jZXNzX2NvbW1hbmRzKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqc291cmNl LCBjb25zdCBpbnQgbGluZW5vKQ0KIAlteV9jb21tYW5kcy0+Y29tbWFuZF9u dW0gPSBudW1fY29tbWFuZHMrKzsNCiAJbXlfY29tbWFuZHMtPnR5cGUgPSAw OwkJLyogdW50aWwgc2V0ICovDQogCW15X2NvbW1hbmRzLT5hcmdjID0gMDsN CisJaW5pdFNpbXBsZVN0YXRzKCYgbXlfY29tbWFuZHMtPnN0YXRzKTsNCiAN CiAJaWYgKCpwID09ICdcXCcpDQogCXsNCkBAIC0yNDc5LDcgKzI1MDcsNyBA QCByZWFkX2xpbmVfZnJvbV9maWxlKEZJTEUgKmZkKQ0KIAlyZXR1cm4gTlVM TDsNCiB9DQogDQotc3RhdGljIGludA0KK3N0YXRpYyBDb21tYW5kICoqDQog cHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIHsNCiAjZGVmaW5lIENP TU1BTkRTX0FMTE9DX05VTSAxMjgNCkBAIC0yNDg3LDE1ICsyNTE1LDkgQEAg cHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIAlDb21tYW5kICAgKipt eV9jb21tYW5kczsNCiAJRklMRQkgICAqZmQ7DQogCWludAkJCWxpbmVubywN Ci0JCQkJaW5kZXg7DQorCQkJCWluZGV4LA0KKwkJCQlhbGxvY19udW07DQog CWNoYXIJICAgKmJ1ZjsNCi0JaW50CQkJYWxsb2NfbnVtOw0KLQ0KLQlpZiAo bnVtX2ZpbGVzID49IE1BWF9GSUxFUykNCi0Jew0KLQkJZnByaW50ZihzdGRl cnIsICJhdCBtb3N0ICVkIFNRTCBmaWxlcyBhcmUgYWxsb3dlZFxuIiwgTUFY X0ZJTEVTKTsNCi0JCWV4aXQoMSk7DQotCX0NCiANCiAJYWxsb2NfbnVtID0g Q09NTUFORFNfQUxMT0NfTlVNOw0KIAlteV9jb21tYW5kcyA9IChDb21tYW5k ICoqKSBwZ19tYWxsb2Moc2l6ZW9mKENvbW1hbmQgKikgKiBhbGxvY19udW0p Ow0KQEAgLTI1MDcsNyArMjUyOSw3IEBAIHByb2Nlc3NfZmlsZShjaGFyICpm aWxlbmFtZSkNCiAJCWZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IG9wZW4g ZmlsZSBcIiVzXCI6ICVzXG4iLA0KIAkJCQlmaWxlbmFtZSwgc3RyZXJyb3Io ZXJybm8pKTsNCiAJCXBnX2ZyZWUobXlfY29tbWFuZHMpOw0KLQkJcmV0dXJu IGZhbHNlOw0KKwkJcmV0dXJuIE5VTEw7DQogCX0NCiANCiAJbGluZW5vID0g MDsNCkBAIC0yNTM5LDEzICsyNTYxLDExIEBAIHByb2Nlc3NfZmlsZShjaGFy ICpmaWxlbmFtZSkNCiANCiAJbXlfY29tbWFuZHNbaW5kZXhdID0gTlVMTDsN CiANCi0Jc3FsX2ZpbGVzW251bV9maWxlcysrXSA9IG15X2NvbW1hbmRzOw0K LQ0KLQlyZXR1cm4gdHJ1ZTsNCisJcmV0dXJuIG15X2NvbW1hbmRzOw0KIH0N CiANCiBzdGF0aWMgQ29tbWFuZCAqKg0KLXByb2Nlc3NfYnVpbHRpbihjaGFy ICp0YiwgY29uc3QgY2hhciAqc291cmNlKQ0KK3Byb2Nlc3NfYnVpbHRpbihj b25zdCBjaGFyICp0YiwgY29uc3QgY2hhciAqc291cmNlKQ0KIHsNCiAjZGVm aW5lIENPTU1BTkRTX0FMTE9DX05VTSAxMjgNCiANCkBAIC0yNTk5LDM1ICsy NjE5LDc3IEBAIHByb2Nlc3NfYnVpbHRpbihjaGFyICp0YiwgY29uc3QgY2hh ciAqc291cmNlKQ0KIAlyZXR1cm4gbXlfY29tbWFuZHM7DQogfQ0KIA0KKy8q IFBvc3NpYnkgdHJ1bmNhdGUgb3B0aW9uIGFuZCByZXR1cm4gd2VpZ2h0ICov DQorc3RhdGljIGludA0KK2dldFdlaWdodChjaGFyICpvcHRpb24pDQorew0K KwljaGFyICAgKnNlcDsNCisJaW50CQl3ZWlnaHQ7DQorDQorCWlmICgoc2Vw ID0gc3RycmNocihvcHRpb24sIFdTRVApKSkNCisJew0KKwkJKnNlcCsrID0g J1wwJzsNCisJCXdlaWdodCA9IGF0b2koc2VwKTsNCisJCWlmICh3ZWlnaHQg PD0gMCkNCisJCXsNCisJCQlmcHJpbnRmKHN0ZGVyciwNCisJCQkJCSJ3ZWln aHQgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZSwgZ290IFwiJXNcIlxuIiwg c2VwKTsNCisJCQlleGl0KDEpOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJCXdl aWdodCA9IDE7DQorCXJldHVybiB3ZWlnaHQ7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorYWRkU2NyaXB0KGNvbnN0IGNoYXIgKm5hbWUsIENvbW1hbmQgKiog Y29tbWFuZHMsIGludCB3ZWlnaHQpDQorew0KKwlpZiAoY29tbWFuZHMgPT0g TlVMTCkNCisJew0KKwkJZnByaW50ZihzdGRlcnIsICJlbXB0eSBjb21tYW5k cyBmb3IgJXNcbiIsIG5hbWUpOw0KKwkJZXhpdCgxKTsNCisJfQ0KKw0KKwlp ZiAobnVtX3NjcmlwdHMgPj0gTUFYX1NDUklQVFMpDQorCXsNCisJCWZwcmlu dGYoc3RkZXJyLCAiYXQgbW9zdCAlZCBTUUwgc2NyaXB0cyBhcmUgYWxsb3dl ZFxuIiwgTUFYX1NDUklQVFMpOw0KKwkJZXhpdCgxKTsNCisJfQ0KKw0KKwlz cWxfc2NyaXB0W251bV9zY3JpcHRzXS5uYW1lID0gbmFtZTsNCisJc3FsX3Nj cmlwdFtudW1fc2NyaXB0c10ud2VpZ2h0ID0gd2VpZ2h0Ow0KKwlzcWxfc2Ny aXB0W251bV9zY3JpcHRzXS5jb21tYW5kcyA9IGNvbW1hbmRzOw0KKwlpbml0 U3RhdHMoJiBzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5zdGF0cywgMC4wKTsN CisJbnVtX3NjcmlwdHMrKzsNCit9DQorDQorc3RhdGljIHZvaWQNCitwcmlu dFNpbXBsZVN0YXRzKGNoYXIgKnByZWZpeCwgU2ltcGxlU3RhdHMgKnNzKQ0K K3sNCisJLyogcHJpbnQgTmFOIGlmIG5vIHRyYW5zYWN0aW9ucyB3aGVyZSBl eGVjdXRlZCAqLw0KKwlkb3VibGUgbGF0ZW5jeSA9IHNzLT5zdW0gLyBzcy0+ Y291bnQ7DQorCWRvdWJsZSBzdGRkZXYgPSBzcXJ0KHNzLT5zdW0yIC8gc3Mt PmNvdW50IC0gbGF0ZW5jeSpsYXRlbmN5KTsNCisJcHJpbnRmKCIlcyBhdmVy YWdlID0gJS4zZiBtc1xuIiwgcHJlZml4LCAwLjAwMSAqIGxhdGVuY3kpOw0K KwlwcmludGYoIiVzIHN0ZGRldiA9ICUuM2YgbXNcbiIsIHByZWZpeCwgMC4w MDEgKiBzdGRkZXYpOw0KK30NCisNCiAvKiBwcmludCBvdXQgcmVzdWx0cyAq Lw0KIHN0YXRpYyB2b2lkDQotcHJpbnRSZXN1bHRzKGludCB0dHlwZSwgaW50 NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQotCQkJIFRTdGF0ZSAq dGhyZWFkcywgaW50IG50aHJlYWRzLA0KLQkJCSBpbnN0cl90aW1lIHRvdGFs X3RpbWUsIGluc3RyX3RpbWUgY29ubl90b3RhbF90aW1lLA0KLQkJCSBpbnQ2 NCB0b3RhbF9sYXRlbmNpZXMsIGludDY0IHRvdGFsX3NxbGF0cywNCi0JCQkg aW50NjQgdGhyb3R0bGVfbGFnLCBpbnQ2NCB0aHJvdHRsZV9sYWdfbWF4LA0K LQkJCSBpbnQ2NCB0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQsIGludDY0IGxh dGVuY3lfbGF0ZSkNCitwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBT dGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsDQorCQkJ IGluc3RyX3RpbWUgY29ubl90b3RhbF90aW1lLCBpbnQgbGF0ZW5jeV9sYXRl KQ0KIHsNCiAJZG91YmxlCQl0aW1lX2luY2x1ZGUsDQogCQkJCXRwc19pbmNs dWRlLA0KIAkJCQl0cHNfZXhjbHVkZTsNCi0JY2hhcgkgICAqczsNCiANCiAJ dGltZV9pbmNsdWRlID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHRvdGFsX3Rp bWUpOw0KLQl0cHNfaW5jbHVkZSA9IG5vcm1hbF94YWN0cyAvIHRpbWVfaW5j bHVkZTsNCi0JdHBzX2V4Y2x1ZGUgPSBub3JtYWxfeGFjdHMgLyAodGltZV9p bmNsdWRlIC0NCisJdHBzX2luY2x1ZGUgPSB0b3RhbC0+Y250IC8gdGltZV9p bmNsdWRlOw0KKwl0cHNfZXhjbHVkZSA9IHRvdGFsLT5jbnQgLyAodGltZV9p bmNsdWRlIC0NCiAJCQkJCQkoSU5TVFJfVElNRV9HRVRfRE9VQkxFKGNvbm5f dG90YWxfdGltZSkgLyBuY2xpZW50cykpOw0KIA0KLQlpZiAodHR5cGUgPT0g MCkNCi0JCXMgPSAiVFBDLUIgKHNvcnQgb2YpIjsNCi0JZWxzZSBpZiAodHR5 cGUgPT0gMikNCi0JCXMgPSAiVXBkYXRlIG9ubHkgcGdiZW5jaF9hY2NvdW50 cyI7DQotCWVsc2UgaWYgKHR0eXBlID09IDEpDQotCQlzID0gIlNFTEVDVCBv bmx5IjsNCi0JZWxzZQ0KLQkJcyA9ICJDdXN0b20gcXVlcnkiOw0KLQ0KLQlw cmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVzXG4iLCBzKTsNCisJcHJpbnRm KCJ0cmFuc2FjdGlvbiB0eXBlOiAlc1xuIiwNCisJCSAgIG51bV9zY3JpcHRz ID09IDE/IHNxbF9zY3JpcHRbMF0ubmFtZTogIm11bHRpcGxlIHNjcmlwdHMi KTsNCiAJcHJpbnRmKCJzY2FsaW5nIGZhY3RvcjogJWRcbiIsIHNjYWxlKTsN CiAJcHJpbnRmKCJxdWVyeSBtb2RlOiAlc1xuIiwgUVVFUllNT0RFW3F1ZXJ5 bW9kZV0pOw0KIAlwcmludGYoIm51bWJlciBvZiBjbGllbnRzOiAlZFxuIiwg bmNsaWVudHMpOw0KQEAgLTI2MzUsNDkgKzI2OTcsMzggQEAgcHJpbnRSZXN1 bHRzKGludCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVu dHMsDQogCWlmIChkdXJhdGlvbiA8PSAwKQ0KIAl7DQogCQlwcmludGYoIm51 bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogJWRcbiIsIG54YWN0 cyk7DQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFs bHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1BVCAiLyIgSU5UNjRfRk9STUFU ICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3RzLCAoaW50NjQpIG54YWN0cyAq IG5jbGllbnRzKTsNCisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9u cyBhY3R1YWxseSBwcm9jZXNzZWQ6ICJJTlQ2NF9GT1JNQVQiLyVkXG4iLA0K KwkJCSAgIHRvdGFsLT5jbnQsIG54YWN0cyAqIG5jbGllbnRzKTsNCiAJfQ0K IAllbHNlDQogCXsNCiAJCXByaW50ZigiZHVyYXRpb246ICVkIHNcbiIsIGR1 cmF0aW9uKTsNCi0JCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBh Y3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFUICJcbiIsDQotCQkJ ICAgbm9ybWFsX3hhY3RzKTsNCisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5z YWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICJJTlQ2NF9GT1JNQVQiXG4i LA0KKwkJCSAgIHRvdGFsLT5jbnQpOw0KIAl9DQogDQogCS8qIFJlbWFpbmlu ZyBzdGF0cyBhcmUgbm9uc2Vuc2ljYWwgaWYgd2UgZmFpbGVkIHRvIGV4ZWN1 dGUgYW55IHhhY3RzICovDQotCWlmIChub3JtYWxfeGFjdHMgPD0gMCkNCisJ aWYgKHRvdGFsLT5jbnQgPD0gMCkNCiAJCXJldHVybjsNCiANCiAJaWYgKHRo cm90dGxlX2RlbGF5ICYmIGxhdGVuY3lfbGltaXQpDQotCQlwcmludGYoIm51 bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZDogIiBJTlQ2NF9GT1JNQVQg IiAoJS4zZiAlJSlcbiIsDQotCQkJICAgdGhyb3R0bGVfbGF0ZW5jeV9za2lw cGVkLA0KLQkJCSAgIDEwMC4wICogdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVk IC8gKHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCArIG5vcm1hbF94YWN0cykp Ow0KKwkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6 ICJJTlQ2NF9GT1JNQVQiICglLjNmICUlKVxuIiwNCisJCQkgICB0b3RhbC0+ c2tpcHBlZCwNCisJCQkgICAxMDAuMCAqIHRvdGFsLT5za2lwcGVkIC8gKHRv dGFsLT5za2lwcGVkICsgdG90YWwtPmNudCkpOw0KIA0KIAlpZiAobGF0ZW5j eV9saW1pdCkNCi0JCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBh Ym92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5IGxpbWl0OiAiIElOVDY0X0ZPUk1B VCAiICglLjNmICUlKVxuIiwNCisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5z YWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5IGxpbWl0OiAlZCAo JS4zZiAlJSlcbiIsDQogCQkJICAgbGF0ZW5jeV9saW1pdCAvIDEwMDAuMCwg bGF0ZW5jeV9sYXRlLA0KLQkJICAgMTAwLjAgKiBsYXRlbmN5X2xhdGUgLyAo dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkICsgbm9ybWFsX3hhY3RzKSk7DQor CQkgICAxMDAuMCAqIGxhdGVuY3lfbGF0ZSAvICh0b3RhbC0+c2tpcHBlZCAr IHRvdGFsLT5jbnQpKTsNCiANCiAJaWYgKHRocm90dGxlX2RlbGF5IHx8IHBy b2dyZXNzIHx8IGxhdGVuY3lfbGltaXQpDQotCXsNCi0JCS8qIGNvbXB1dGUg YW5kIHNob3cgbGF0ZW5jeSBhdmVyYWdlIGFuZCBzdGFuZGFyZCBkZXZpYXRp b24gKi8NCi0JCWRvdWJsZQkJbGF0ZW5jeSA9IDAuMDAxICogdG90YWxfbGF0 ZW5jaWVzIC8gbm9ybWFsX3hhY3RzOw0KLQkJZG91YmxlCQlzcWxhdCA9IChk b3VibGUpIHRvdGFsX3NxbGF0cyAvIG5vcm1hbF94YWN0czsNCi0NCi0JCXBy aW50ZigibGF0ZW5jeSBhdmVyYWdlOiAlLjNmIG1zXG4iDQotCQkJICAgImxh dGVuY3kgc3RkZGV2OiAlLjNmIG1zXG4iLA0KLQkJCSAgIGxhdGVuY3ksIDAu MDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRl bmN5KSk7DQotCX0NCisJCXByaW50U2ltcGxlU3RhdHMoImxhdGVuY3kiLCAm IHRvdGFsLT5sYXRlbmN5KTsNCiAJZWxzZQ0KLQl7DQogCQkvKiBvbmx5IGFu IGF2ZXJhZ2UgbGF0ZW5jeSBjb21wdXRlZCBmcm9tIHRoZSBkdXJhdGlvbiBp cyBhdmFpbGFibGUgKi8NCiAJCXByaW50ZigibGF0ZW5jeSBhdmVyYWdlOiAl LjNmIG1zXG4iLA0KLQkJCSAgIDEwMDAuMCAqIGR1cmF0aW9uICogbmNsaWVu dHMgLyBub3JtYWxfeGFjdHMpOw0KLQl9DQorCQkJICAgMTAwMC4wICogZHVy YXRpb24gKiBuY2xpZW50cyAvIHRvdGFsLT5jbnQpOw0KIA0KIAlpZiAodGhy b3R0bGVfZGVsYXkpDQotCXsNCiAJCS8qDQogCQkgKiBSZXBvcnQgYXZlcmFn ZSB0cmFuc2FjdGlvbiBsYWcgdW5kZXIgcmF0ZSBsaW1pdCB0aHJvdHRsaW5n LiAgVGhpcw0KIAkJICogaXMgdGhlIGRlbGF5IGJldHdlZW4gc2NoZWR1bGVk IGFuZCBhY3R1YWwgc3RhcnQgdGltZXMgZm9yIHRoZQ0KQEAgLTI2ODUsNTMg KzI3MzYsNDQgQEAgcHJpbnRSZXN1bHRzKGludCB0dHlwZSwgaW50NjQgbm9y bWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQogCQkgKiB0aGUgZGF0YWJhc2Ug bG9hZCwgb3IgdGhlIFBvaXNzb24gdGhyb3R0bGluZyBwcm9jZXNzLg0KIAkJ ICovDQogCQlwcmludGYoInJhdGUgbGltaXQgc2NoZWR1bGUgbGFnOiBhdmcg JS4zZiAobWF4ICUuM2YpIG1zXG4iLA0KLQkJCSAgIDAuMDAxICogdGhyb3R0 bGVfbGFnIC8gbm9ybWFsX3hhY3RzLCAwLjAwMSAqIHRocm90dGxlX2xhZ19t YXgpOw0KLQl9DQorCQkJICAgMC4wMDEgKiB0b3RhbC0+bGFnLnN1bSAvIHRv dGFsLT5jbnQsIDAuMDAxICogdG90YWwtPmxhZy5tYXgpOw0KIA0KIAlwcmlu dGYoInRwcyA9ICVmIChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNo aW5nKVxuIiwgdHBzX2luY2x1ZGUpOw0KIAlwcmludGYoInRwcyA9ICVmIChl eGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4 Y2x1ZGUpOw0KIA0KLQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVz ICovDQotCWlmIChpc19sYXRlbmNpZXMpDQorCS8qIFJlcG9ydCBwZXItZmls ZSBkYXRhICovDQorCWlmIChwZXJfc2NyaXB0X3N0YXRzKQ0KIAl7DQotCQlp bnQJCQlpOw0KKwkJaW50IGk7DQogDQotCQlmb3IgKGkgPSAwOyBpIDwgbnVt X2ZpbGVzOyBpKyspDQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3NjcmlwdHM7 IGkrKykNCiAJCXsNCi0JCQlDb21tYW5kICAgKipjb21tYW5kczsNCisJCQlw cmludGYoIlNRTCBzY3JpcHQgJWQsIHdlaWdodCAlZDogJXNcbiINCisJCQkJ ICAgIiAtICJJTlQ2NF9GT1JNQVQiIHRyYW5zYWN0aW9ucyAoJS4xZiUlIG9m IHRvdGFsLCB0cHMgPSAlZilcbiIsDQorCQkJCSAgIGkrMSwgc3FsX3Njcmlw dFtpXS53ZWlnaHQsIHNxbF9zY3JpcHRbaV0ubmFtZSwNCisJCQkJICAgc3Fs X3NjcmlwdFtpXS5zdGF0cy5jbnQsDQorCQkJCSAgIDEwMC4wICogc3FsX3Nj cmlwdFtpXS5zdGF0cy5jbnQgLyB0b3RhbC0+Y250LA0KKwkJCQkgICBzcWxf c2NyaXB0W2ldLnN0YXRzLmNudCAvIHRpbWVfaW5jbHVkZSk7DQogDQotCQkJ aWYgKG51bV9maWxlcyA+IDEpDQotCQkJCXByaW50Zigic3RhdGVtZW50IGxh dGVuY2llcyBpbiBtaWxsaXNlY29uZHMsIGZpbGUgJWQ6XG4iLCBpICsgMSk7 DQotCQkJZWxzZQ0KLQkJCQlwcmludGYoInN0YXRlbWVudCBsYXRlbmNpZXMg aW4gbWlsbGlzZWNvbmRzOlxuIik7DQorCQkJaWYgKGxhdGVuY3lfbGltaXQp DQorCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lw cGVkOiAiSU5UNjRfRk9STUFUIiAoJS4zZiUlKVxuIiwNCisJCQkJCSAgIHNx bF9zY3JpcHRbaV0uc3RhdHMuc2tpcHBlZCwNCisJCQkJCSAgIDEwMC4wICog c3FsX3NjcmlwdFtpXS5zdGF0cy5za2lwcGVkIC8NCisJCQkJCSAgIChzcWxf c2NyaXB0W2ldLnN0YXRzLnNraXBwZWQgKyBzcWxfc2NyaXB0W2ldLnN0YXRz LmNudCkpOw0KIA0KLQkJCWZvciAoY29tbWFuZHMgPSBzcWxfZmlsZXNbaV07 ICpjb21tYW5kcyAhPSBOVUxMOyBjb21tYW5kcysrKQ0KKwkJCXByaW50U2lt cGxlU3RhdHMoIiAtIGxhdGVuY3kiLCAmIHNxbF9zY3JpcHRbaV0uc3RhdHMu bGF0ZW5jeSk7DQorDQorCQkJLyogUmVwb3J0IHBlci1jb21tYW5kIGxhdGVu Y2llcyAqLw0KKwkJCWlmIChpc19sYXRlbmNpZXMpDQogCQkJew0KLQkJCQlD b21tYW5kICAgICpjb21tYW5kID0gKmNvbW1hbmRzOw0KLQkJCQlpbnQJCQlj bnVtID0gY29tbWFuZC0+Y29tbWFuZF9udW07DQotCQkJCWRvdWJsZQkJdG90 YWxfdGltZTsNCi0JCQkJaW5zdHJfdGltZQl0b3RhbF9leGVjX2VsYXBzZWQ7 DQotCQkJCWludAkJCXRvdGFsX2V4ZWNfY291bnQ7DQotCQkJCWludAkJCXQ7 DQorCQkJCUNvbW1hbmQgKiogY29tOw0KIA0KLQkJCQkvKiBBY2N1bXVsYXRl IHBlci10aHJlYWQgZGF0YSBmb3IgY29tbWFuZCAqLw0KLQkJCQlJTlNUUl9U SU1FX1NFVF9aRVJPKHRvdGFsX2V4ZWNfZWxhcHNlZCk7DQotCQkJCXRvdGFs X2V4ZWNfY291bnQgPSAwOw0KLQkJCQlmb3IgKHQgPSAwOyB0IDwgbnRocmVh ZHM7IHQrKykNCi0JCQkJew0KLQkJCQkJVFN0YXRlCSAgICp0aHJlYWQgPSAm dGhyZWFkc1t0XTsNCisJCQkJcHJpbnRmKCIgLSBwZXIgY29tbWFuZCBsYXRl bmNpZXMgaW4gbXM6XG4iKTsNCiANCi0JCQkJCUlOU1RSX1RJTUVfQUREKHRv dGFsX2V4ZWNfZWxhcHNlZCwNCi0JCQkJCQkJCSAgIHRocmVhZC0+ZXhlY19l bGFwc2VkW2NudW1dKTsNCi0JCQkJCXRvdGFsX2V4ZWNfY291bnQgKz0gdGhy ZWFkLT5leGVjX2NvdW50W2NudW1dOw0KLQkJCQl9DQotDQotCQkJCWlmICh0 b3RhbF9leGVjX2NvdW50ID4gMCkNCi0JCQkJCXRvdGFsX3RpbWUgPSBJTlNU Ul9USU1FX0dFVF9NSUxMSVNFQyh0b3RhbF9leGVjX2VsYXBzZWQpIC8gKGRv dWJsZSkgdG90YWxfZXhlY19jb3VudDsNCi0JCQkJZWxzZQ0KLQkJCQkJdG90 YWxfdGltZSA9IDAuMDsNCi0NCi0JCQkJcHJpbnRmKCJcdCVmXHQlc1xuIiwg dG90YWxfdGltZSwgY29tbWFuZC0+bGluZSk7DQorCQkJCWZvciAoY29tID0g c3FsX3NjcmlwdFtpXS5jb21tYW5kczsgKmNvbSAhPSBOVUxMOyBjb20rKykN CisJCQkJCXByaW50ZigiICAgJTExLjNmICAlc1xuIiwNCisJCQkJCQkgICAx MDAwLjAgKiAoKmNvbSktPnN0YXRzLnN1bSAvICgqY29tKS0+c3RhdHMuY291 bnQsDQorCQkJCQkJICAgKCpjb20pLT5saW5lKTsNCiAJCQl9DQogCQl9DQog CX0NCkBAIC0yNzQzLDYgKzI3ODUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikNCiB7DQogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0 aW9uc1tdID0gew0KIAkJLyogc3lzdGVtYXRpYyBsb25nL3Nob3J0IG5hbWVk IG9wdGlvbnMgKi8NCisJCXsidHBjLWIiLCBub19hcmd1bWVudCwgTlVMTCwg J0InfSwNCiAJCXsiY2xpZW50IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdjJ30sDQogCQl7ImNvbm5lY3QiLCBub19hcmd1bWVudCwgTlVMTCwgJ0Mn fSwNCiAJCXsiZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgJ2QnfSwNCkBA IC0yNzUzLDEyICsyNzk2LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkJeyJpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdp J30sDQogCQl7ImpvYnMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2on fSwNCiAJCXsibG9nIiwgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sDQorCQl7 ImxhdGVuY3ktbGltaXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0wn fSwNCiAJCXsibm8tdmFjdXVtIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30s DQogCQl7InBvcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwN CiAJCXsicHJvZ3Jlc3MiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1An fSwNCiAJCXsicHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg J00nfSwNCiAJCXsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3EnfSwN CiAJCXsicmVwb3J0LWxhdGVuY2llcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn cid9LA0KKwkJeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdS J30sDQogCQl7InNjYWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdz J30sDQogCQl7InNlbGVjdC1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdT J30sDQogCQl7InNraXAtc29tZS11cGRhdGVzIiwgbm9fYXJndW1lbnQsIE5V TEwsICdOJ30sDQpAQCAtMjc3MywyNiArMjgxOCwyMCBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikNCiAJCXsidW5sb2dnZWQtdGFibGVzIiwgbm9f YXJndW1lbnQsICZ1bmxvZ2dlZF90YWJsZXMsIDF9LA0KIAkJeyJzYW1wbGlu Zy1yYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LA0KIAkJeyJh Z2dyZWdhdGUtaW50ZXJ2YWwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg NX0sDQotCQl7InJhdGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1In fSwNCi0JCXsibGF0ZW5jeS1saW1pdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnTCd9LA0KIAkJeyJwcm9ncmVzcy10aW1lc3RhbXAiLCBub19hcmd1 bWVudCwgTlVMTCwgNn0sDQogCQl7TlVMTCwgMCwgTlVMTCwgMH0NCiAJfTsN CiANCiAJaW50CQkJYzsNCi0JaW50CQkJbmNsaWVudHMgPSAxOwkvKiBkZWZh dWx0IG51bWJlciBvZiBzaW11bGF0ZWQgY2xpZW50cyAqLw0KLQlpbnQJCQlu dGhyZWFkcyA9IDE7CS8qIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMgKi8N CiAJaW50CQkJaXNfaW5pdF9tb2RlID0gMDsJCS8qIGluaXRpYWxpemUgbW9k ZT8gKi8NCiAJaW50CQkJaXNfbm9fdmFjdXVtID0gMDsJCS8qIG5vIHZhY3V1 bSBhdCBhbGwgYmVmb3JlIHRlc3Rpbmc/ICovDQogCWludAkJCWRvX3ZhY3V1 bV9hY2NvdW50cyA9IDA7IC8qIGRvIHZhY3V1bSBhY2NvdW50cyBiZWZvcmUg dGVzdGluZz8gKi8NCi0JaW50CQkJdHR5cGUgPSAwOwkJLyogdHJhbnNhY3Rp b24gdHlwZS4gMDogVFBDLUIsIDE6IFNFTEVDVCBvbmx5LA0KLQkJCQkJCQkJ ICogMjogc2tpcCB1cGRhdGUgb2YgYnJhbmNoZXMgYW5kIHRlbGxlcnMgKi8N CiAJaW50CQkJb3B0aW5kZXg7DQotCWNoYXIJICAgKmZpbGVuYW1lID0gTlVM TDsNCiAJYm9vbAkJc2NhbGVfZ2l2ZW4gPSBmYWxzZTsNCiANCiAJYm9vbAkJ YmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSBmYWxzZTsNCiAJYm9vbAkJaW5p dGlhbGl6YXRpb25fb3B0aW9uX3NldCA9IGZhbHNlOw0KKwlib29sCQlpbnRl cm5hbF9zY3JpcHRfdXNlZCA9IGZhbHNlOw0KIA0KIAlDU3RhdGUJICAgKnN0 YXRlOwkJCS8qIHN0YXR1cyBvZiBjbGllbnRzICovDQogCVRTdGF0ZQkgICAq dGhyZWFkczsJCS8qIGFycmF5IG9mIHRocmVhZCAqLw0KQEAgLTI4MDAsMTMg KzI4MzksMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCWlu c3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHN0YXJ0IHVwIHRpbWUgKi8NCiAJ aW5zdHJfdGltZQl0b3RhbF90aW1lOw0KIAlpbnN0cl90aW1lCWNvbm5fdG90 YWxfdGltZTsNCi0JaW50NjQJCXRvdGFsX3hhY3RzID0gMDsNCi0JaW50NjQJ CXRvdGFsX2xhdGVuY2llcyA9IDA7DQotCWludDY0CQl0b3RhbF9zcWxhdHMg PSAwOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFnID0gMDsNCi0JaW50NjQJCXRo cm90dGxlX2xhZ19tYXggPSAwOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGF0ZW5j eV9za2lwcGVkID0gMDsNCiAJaW50NjQJCWxhdGVuY3lfbGF0ZSA9IDA7DQor CVN0YXRzRGF0YQlzdGF0czsNCisJaW50CQkJd2VpZ2h0Ow0KKwljaGFyCSAg ICpkZXNjOw0KIA0KIAlpbnQJCQlpOw0KIAlpbnQJCQluY2xpZW50c19kZWFs dDsNCkBAIC0yODUyLDcgKzI4ODgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikNCiAJc3RhdGUgPSAoQ1N0YXRlICopIHBnX21hbGxvYyhzaXpl b2YoQ1N0YXRlKSk7DQogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKENTdGF0 ZSkpOw0KIA0KLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiaWg6bnZwOmRxU05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIs IGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpDQorCXdoaWxlICgo YyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpaDpudnA6ZHFiOlNOYzpq OkNyczp0OlQ6VTpsZjpEOkY6TTpQOlI6TDoiLCBsb25nX29wdGlvbnMsICZv cHRpbmRleCkpICE9IC0xKQ0KIAl7DQogCQlzd2l0Y2ggKGMpDQogCQl7DQpA QCAtMjg3NCwxNCArMjkxMCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkJCWNhc2UgJ2QnOg0KIAkJCQlkZWJ1ZysrOw0KIAkJCQlicmVh azsNCi0JCQljYXNlICdTJzoNCi0JCQkJdHR5cGUgPSAxOw0KLQkJCQliZW5j aG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQotCQkJCWJyZWFrOw0KLQkJ CWNhc2UgJ04nOg0KLQkJCQl0dHlwZSA9IDI7DQotCQkJCWJlbmNobWFya2lu Z19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJYnJlYWs7DQogCQkJY2FzZSAn Yyc6DQogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCiAJ CQkJbmNsaWVudHMgPSBhdG9pKG9wdGFyZyk7DQpAQCAtMjkzMyw2ICsyOTYx LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJCWJyZWFr Ow0KIAkJCWNhc2UgJ3InOg0KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3Nl dCA9IHRydWU7DQorCQkJCXBlcl9zY3JpcHRfc3RhdHMgPSB0cnVlOw0KIAkJ CQlpc19sYXRlbmNpZXMgPSB0cnVlOw0KIAkJCQlicmVhazsNCiAJCQljYXNl ICdzJzoNCkBAIC0yOTg0LDEyICszMDEzLDQxIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQ0KIAkJCQlpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0 ID0gdHJ1ZTsNCiAJCQkJdXNlX3F1aWV0ID0gdHJ1ZTsNCiAJCQkJYnJlYWs7 DQorCQkJCS8qIHdoYXQgdG8gcnVuICovDQorCQkJY2FzZSAnYic6DQorDQor CQkJCWlmIChzdHJjbXAob3B0YXJnLCAibGlzdCIpID09IDApDQorCQkJCXsN CisJCQkJCWludCBpOw0KKwkJCQkJZnByaW50ZihzdGRvdXQsICIlZCBidWls dGluIHNjcmlwdHM6ICIsIE5fQlVJTFRJTik7DQorCQkJCQlmb3IgKGkgPSAw OyBpIDwgTl9CVUlMVElOOyBpKyspDQorCQkJCQkJZnByaW50ZihzdGRvdXQs ICIlcyAiLCBidWlsdGluX3NjcmlwdFtpXS5uYW1lKTsNCisJCQkJCWZwcmlu dGYoc3Rkb3V0LCAiXG4iKTsNCisJCQkJCWV4aXQoMCk7DQorCQkJCX0NCisN CisJCQkJd2VpZ2h0ID0gZ2V0V2VpZ2h0KG9wdGFyZyk7DQorCQkJCWFkZFNj cmlwdChkZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJCQkJCSAgZmluZF9i dWlsdGluKG9wdGFyZywgJmRlc2MpLCBkZXNjKSwgd2VpZ2h0KTsNCisJCQkJ YmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJCQlpbnRlcm5h bF9zY3JpcHRfdXNlZCA9IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2Ug J1MnOg0KKwkJCQlhZGRTY3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGluKA0K KwkJCQkJCQkgIGZpbmRfYnVpbHRpbigic2VsZWN0LW9ubHkiLCAmZGVzYyks IGRlc2MpLCAxKTsNCisJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0 cnVlOw0KKwkJCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9IHRydWU7DQorCQkJ CWJyZWFrOw0KKwkJCWNhc2UgJ04nOg0KKwkJCQlhZGRTY3JpcHQoZGVzYywg cHJvY2Vzc19idWlsdGluKA0KKwkJCQkJCQkgIGZpbmRfYnVpbHRpbigic2lt cGxlLXVwZGF0ZSIsICZkZXNjKSwgZGVzYyksIDEpOw0KKwkJCQliZW5jaG1h cmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJCWludGVybmFsX3Njcmlw dF91c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQogCQkJY2FzZSAnZic6DQor CQkJCXdlaWdodCA9IGdldFdlaWdodChvcHRhcmcpOw0KKwkJCQlhZGRTY3Jp cHQob3B0YXJnLCBwcm9jZXNzX2ZpbGUob3B0YXJnKSwgd2VpZ2h0KTsNCiAJ CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KLQkJCQl0dHlw ZSA9IDM7DQotCQkJCWZpbGVuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7DQot CQkJCWlmIChwcm9jZXNzX2ZpbGUoZmlsZW5hbWUpID09IGZhbHNlIHx8ICpz cWxfZmlsZXNbbnVtX2ZpbGVzIC0gMV0gPT0gTlVMTCkNCi0JCQkJCWV4aXQo MSk7DQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ0QnOg0KIAkJCQl7DQpAQCAt MzAyMCw5ICszMDc4LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp DQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ00nOg0KIAkJCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7DQotCQkJCWlmIChudW1fZmlsZXMgPiAw KQ0KKwkJCQlpZiAobnVtX3NjcmlwdHMgPiAwKQ0KIAkJCQl7DQotCQkJCQlm cHJpbnRmKHN0ZGVyciwgInF1ZXJ5IG1vZGUgKC1NKSBzaG91bGQgYmUgc3Bl Y2lmaWVkIGJlZm9yZSBhbnkgdHJhbnNhY3Rpb24gc2NyaXB0cyAoLWYpXG4i KTsNCisJCQkJCWZwcmludGYoc3RkZXJyLCAicXVlcnkgbW9kZSAoLU0pIHNo b3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIGFueSB0cmFuc2FjdGlvbiBzY3Jp cHRzICgtZiBvciAtYilcbiIpOw0KIAkJCQkJZXhpdCgxKTsNCiAJCQkJfQ0K IAkJCQlmb3IgKHF1ZXJ5bW9kZSA9IDA7IHF1ZXJ5bW9kZSA8IE5VTV9RVUVS WU1PREU7IHF1ZXJ5bW9kZSsrKQ0KQEAgLTMxMjMsNiArMzE4MSwyMyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCX0NCiAJfQ0KIA0KKwkv KiBzZXQgZGVmYXVsdCBzY3JpcHQgaWYgbm9uZSAqLw0KKwlpZiAobnVtX3Nj cmlwdHMgPT0gMCAmJiAhaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCkNCisJ ew0KKwkJYWRkU2NyaXB0KGRlc2MsIHByb2Nlc3NfYnVpbHRpbigNCisJCQkJ CSAgZmluZF9idWlsdGluKCJ0cGNiLWxpa2UiLCAmZGVzYyksIGRlc2MpLCAx KTsNCisJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCWlu dGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCisJfQ0KKw0KKwkvKiBjb21w dXRlIHRvdGFsX3dlaWdodCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Nj cmlwdHM7IGkrKykNCisJCXRvdGFsX3dlaWdodCArPSBzcWxfc2NyaXB0W2ld LndlaWdodDsNCisNCisJLyogc2hvdyBwZXIgc2NyaXB0IHN0YXRzIGlmIHNl dmVyYWwgc2NyaXB0cyBhcmUgdXNlZCAqLw0KKwlpZiAoIWluaXRpYWxpemF0 aW9uX29wdGlvbl9zZXQgJiYgbnVtX3NjcmlwdHMgPiAxKQ0KKwkJcGVyX3Nj cmlwdF9zdGF0cyA9IHRydWU7DQorDQogCS8qDQogCSAqIERvbid0IG5lZWQg bW9yZSB0aHJlYWRzIHRoYW4gdGhlcmUgYXJlIGNsaWVudHMuICAoVGhpcyBp cyBub3QgbWVyZWx5IGFuDQogCSAqIG9wdGltaXphdGlvbjsgdGhyb3R0bGVf ZGVsYXkgaXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBiZWxvdyBpZiBzb21l DQpAQCAtMzIwNyw4ICszMjgyLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCSAqIGNoYW5nZWQgYWZ0ZXIgZm9yay4NCiAJICovDQogCW1h aW5fcGlkID0gKGludCkgZ2V0cGlkKCk7DQotCXByb2dyZXNzX25jbGllbnRz ID0gbmNsaWVudHM7DQotCXByb2dyZXNzX250aHJlYWRzID0gbnRocmVhZHM7 DQogDQogCWlmIChuY2xpZW50cyA+IDEpDQogCXsNCkBAIC0zMjUxLDcgKzMz MjQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCWV4aXQo MSk7DQogCX0NCiANCi0JaWYgKHR0eXBlICE9IDMpDQorCWlmIChpbnRlcm5h bF9zY3JpcHRfdXNlZCkNCiAJew0KIAkJLyoNCiAJCSAqIGdldCB0aGUgc2Nh bGluZyBmYWN0b3IgdGhhdCBzaG91bGQgYmUgc2FtZSBhcyBjb3VudCgqKSBm cm9tDQpAQCAtMzMzNSwzMSArMzQwOCw2IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQ0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0X3Rp bWUpOw0KIAlzcmFuZG9tKCh1bnNpZ25lZCBpbnQpIElOU1RSX1RJTUVfR0VU X01JQ1JPU0VDKHN0YXJ0X3RpbWUpKTsNCiANCi0JLyogcHJvY2VzcyBidWls dGluIFNRTCBzY3JpcHRzICovDQotCXN3aXRjaCAodHR5cGUpDQotCXsNCi0J CWNhc2UgMDoNCi0JCQlzcWxfZmlsZXNbMF0gPSBwcm9jZXNzX2J1aWx0aW4o dHBjX2IsDQotCQkJCQkJCQkJCSAgICI8YnVpbHRpbjogVFBDLUIgKHNvcnQg b2YpPiIpOw0KLQkJCW51bV9maWxlcyA9IDE7DQotCQkJYnJlYWs7DQotDQot CQljYXNlIDE6DQotCQkJc3FsX2ZpbGVzWzBdID0gcHJvY2Vzc19idWlsdGlu KHNlbGVjdF9vbmx5LA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IHNlbGVj dCBvbmx5PiIpOw0KLQkJCW51bV9maWxlcyA9IDE7DQotCQkJYnJlYWs7DQot DQotCQljYXNlIDI6DQotCQkJc3FsX2ZpbGVzWzBdID0gcHJvY2Vzc19idWls dGluKHNpbXBsZV91cGRhdGUsDQotCQkJCQkJCQkJCSAgICI8YnVpbHRpbjog c2ltcGxlIHVwZGF0ZT4iKTsNCi0JCQludW1fZmlsZXMgPSAxOw0KLQkJCWJy ZWFrOw0KLQ0KLQkJZGVmYXVsdDoNCi0JCQlicmVhazsNCi0JfQ0KLQ0KIAkv KiBzZXQgdXAgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyAqLw0KIAl0aHJlYWRz ID0gKFRTdGF0ZSAqKSBwZ19tYWxsb2Moc2l6ZW9mKFRTdGF0ZSkgKiBudGhy ZWFkcyk7DQogCW5jbGllbnRzX2RlYWx0ID0gMDsNCkBAIC0zMzc1LDMyICsz NDIzLDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJdGhy ZWFkLT5yYW5kb21fc3RhdGVbMF0gPSByYW5kb20oKTsNCiAJCXRocmVhZC0+ cmFuZG9tX3N0YXRlWzFdID0gcmFuZG9tKCk7DQogCQl0aHJlYWQtPnJhbmRv bV9zdGF0ZVsyXSA9IHJhbmRvbSgpOw0KLQkJdGhyZWFkLT50aHJvdHRsZV9s YXRlbmN5X3NraXBwZWQgPSAwOw0KIAkJdGhyZWFkLT5sYXRlbmN5X2xhdGUg PSAwOw0KKwkJaW5pdFN0YXRzKCYgdGhyZWFkLT5zdGF0cywgMC4wKTsNCiAN CiAJCW5jbGllbnRzX2RlYWx0ICs9IHRocmVhZC0+bnN0YXRlOw0KLQ0KLQkJ aWYgKGlzX2xhdGVuY2llcykNCi0JCXsNCi0JCQkvKiBSZXNlcnZlIG1lbW9y eSBmb3IgdGhlIHRocmVhZCB0byBzdG9yZSBwZXItY29tbWFuZCBsYXRlbmNp ZXMgKi8NCi0JCQlpbnQJCQl0Ow0KLQ0KLQkJCXRocmVhZC0+ZXhlY19lbGFw c2VkID0gKGluc3RyX3RpbWUgKikNCi0JCQkJcGdfbWFsbG9jKHNpemVvZihp bnN0cl90aW1lKSAqIG51bV9jb21tYW5kcyk7DQotCQkJdGhyZWFkLT5leGVj X2NvdW50ID0gKGludCAqKQ0KLQkJCQlwZ19tYWxsb2Moc2l6ZW9mKGludCkg KiBudW1fY29tbWFuZHMpOw0KLQ0KLQkJCWZvciAodCA9IDA7IHQgPCBudW1f Y29tbWFuZHM7IHQrKykNCi0JCQl7DQotCQkJCUlOU1RSX1RJTUVfU0VUX1pF Uk8odGhyZWFkLT5leGVjX2VsYXBzZWRbdF0pOw0KLQkJCQl0aHJlYWQtPmV4 ZWNfY291bnRbdF0gPSAwOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsN Ci0JCQl0aHJlYWQtPmV4ZWNfZWxhcHNlZCA9IE5VTEw7DQotCQkJdGhyZWFk LT5leGVjX2NvdW50ID0gTlVMTDsNCi0JCX0NCiAJfQ0KIA0KIAkvKiBhbGwg Y2xpZW50cyBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgdGhyZWFkICovDQpAQCAt MzQ0MywxMSArMzQ2OSwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikNCiAjZW5kaWYgICAvKiBFTkFCTEVfVEhSRUFEX1NBRkVUWSAqLw0KIA0K IAkvKiB3YWl0IGZvciB0aHJlYWRzIGFuZCBhY2N1bXVsYXRlIHJlc3VsdHMg Ki8NCisJaW5pdFN0YXRzKCYgc3RhdHMsIDAuMCk7DQogCUlOU1RSX1RJTUVf U0VUX1pFUk8oY29ubl90b3RhbF90aW1lKTsNCiAJZm9yIChpID0gMDsgaSA8 IG50aHJlYWRzOyBpKyspDQogCXsNCiAJCVRTdGF0ZQkgICAqdGhyZWFkID0g JnRocmVhZHNbaV07DQotCQlpbnQJCQlqOw0KIA0KICNpZmRlZiBFTkFCTEVf VEhSRUFEX1NBRkVUWQ0KIAkJaWYgKHRocmVhZHNbaV0udGhyZWFkID09IElO VkFMSURfVEhSRUFEKQ0KQEAgLTM0NjAsMjEgKzM0ODYsMTMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkodm9pZCkgdGhyZWFkUnVuKHRo cmVhZCk7DQogI2VuZGlmICAgLyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8N CiANCi0JCS8qIHRocmVhZCBsZXZlbCBzdGF0cyAqLw0KLQkJdGhyb3R0bGVf bGFnICs9IHRocmVhZC0+dGhyb3R0bGVfbGFnOw0KLQkJdGhyb3R0bGVfbGF0 ZW5jeV9za2lwcGVkICs9IHRocmVhZHMtPnRocm90dGxlX2xhdGVuY3lfc2tp cHBlZDsNCisJCS8qIGFnZ3JlZ2F0ZSB0aHJlYWQgbGV2ZWwgc3RhdHMgKi8N CisJCWFwcGVuZFNpbXBsZVN0YXRzKCYgc3RhdHMubGF0ZW5jeSwgJiB0aHJl YWQtPnN0YXRzLmxhdGVuY3kpOw0KKwkJYXBwZW5kU2ltcGxlU3RhdHMoJiBz dGF0cy5sYWcsICYgdGhyZWFkLT5zdGF0cy5sYWcpOw0KKwkJc3RhdHMuY250 ICs9IHRocmVhZC0+c3RhdHMuY250Ow0KKwkJc3RhdHMuc2tpcHBlZCArPSB0 aHJlYWQtPnN0YXRzLnNraXBwZWQ7DQogCQlsYXRlbmN5X2xhdGUgKz0gdGhy ZWFkLT5sYXRlbmN5X2xhdGU7DQotCQlpZiAodGhyb3R0bGVfbGFnX21heCA+ IHRocmVhZC0+dGhyb3R0bGVfbGFnX21heCkNCi0JCQl0aHJvdHRsZV9sYWdf bWF4ID0gdGhyZWFkLT50aHJvdHRsZV9sYWdfbWF4Ow0KIAkJSU5TVFJfVElN RV9BREQoY29ubl90b3RhbF90aW1lLCB0aHJlYWQtPmNvbm5fdGltZSk7DQot DQotCQkvKiBjbGllbnQtbGV2ZWwgc3RhdHMgKi8NCi0JCWZvciAoaiA9IDA7 IGogPCB0aHJlYWQtPm5zdGF0ZTsgaisrKQ0KLQkJew0KLQkJCXRvdGFsX3hh Y3RzICs9IHRocmVhZC0+c3RhdGVbal0uY250Ow0KLQkJCXRvdGFsX2xhdGVu Y2llcyArPSB0aHJlYWQtPnN0YXRlW2pdLnR4bl9sYXRlbmNpZXM7DQotCQkJ dG90YWxfc3FsYXRzICs9IHRocmVhZC0+c3RhdGVbal0udHhuX3NxbGF0czsN Ci0JCX0NCiAJfQ0KIAlkaXNjb25uZWN0X2FsbChzdGF0ZSwgbmNsaWVudHMp Ow0KIA0KQEAgLTM0OTAsMTAgKzM1MDgsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJICovDQogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQo dG90YWxfdGltZSk7DQogCUlOU1RSX1RJTUVfU1VCVFJBQ1QodG90YWxfdGlt ZSwgc3RhcnRfdGltZSk7DQotCXByaW50UmVzdWx0cyh0dHlwZSwgdG90YWxf eGFjdHMsIG5jbGllbnRzLCB0aHJlYWRzLCBudGhyZWFkcywNCi0JCQkJIHRv dGFsX3RpbWUsIGNvbm5fdG90YWxfdGltZSwgdG90YWxfbGF0ZW5jaWVzLCB0 b3RhbF9zcWxhdHMsDQotCQkJCSB0aHJvdHRsZV9sYWcsIHRocm90dGxlX2xh Z19tYXgsIHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCwNCi0JCQkJIGxhdGVu Y3lfbGF0ZSk7DQorCXByaW50UmVzdWx0cyh0aHJlYWRzLCAmc3RhdHMsIHRv dGFsX3RpbWUsIGNvbm5fdG90YWxfdGltZSwgbGF0ZW5jeV9sYXRlKTsNCiAN CiAJcmV0dXJuIDA7DQogfQ0KQEAgLTM1MTQsMTMgKzM1MjksNyBAQCB0aHJl YWRSdW4odm9pZCAqYXJnKQ0KIAlpbnQ2NAkJdGhyZWFkX3N0YXJ0ID0gSU5T VFJfVElNRV9HRVRfTUlDUk9TRUModGhyZWFkLT5zdGFydF90aW1lKTsNCiAJ aW50NjQJCWxhc3RfcmVwb3J0ID0gdGhyZWFkX3N0YXJ0Ow0KIAlpbnQ2NAkJ bmV4dF9yZXBvcnQgPSBsYXN0X3JlcG9ydCArIChpbnQ2NCkgcHJvZ3Jlc3Mg KiAxMDAwMDAwOw0KLQlpbnQ2NAkJbGFzdF9jb3VudCA9IDAsDQotCQkJCWxh c3RfbGF0cyA9IDAsDQotCQkJCWxhc3Rfc3FsYXRzID0gMCwNCi0JCQkJbGFz dF9sYWdzID0gMCwNCi0JCQkJbGFzdF9za2lwcGVkID0gMDsNCi0NCi0JQWdn VmFscwkJYWdnczsNCisJU3RhdHNEYXRhCWxhc3QsIGFnZ3M7DQogDQogCS8q DQogCSAqIEluaXRpYWxpemUgdGhyb3R0bGluZyByYXRlIHRhcmdldCBmb3Ig YWxsIG9mIHRoZSB0aHJlYWQncyBjbGllbnRzLiAgSXQNCkBAIC0zNTMwLDgg KzM1MzksNiBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkgKi8NCiAJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydCk7DQogCXRocmVhZC0+dGhyb3R0 bGVfdHJpZ2dlciA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0YXJ0KTsN Ci0JdGhyZWFkLT50aHJvdHRsZV9sYWcgPSAwOw0KLQl0aHJlYWQtPnRocm90 dGxlX2xhZ19tYXggPSAwOw0KIA0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKHRo cmVhZC0+Y29ubl90aW1lKTsNCiANCkBAIC0zNTY4LDE3ICszNTc1LDE4IEBA IHRocmVhZFJ1bih2b2lkICphcmcpDQogCUlOU1RSX1RJTUVfU0VUX0NVUlJF TlQodGhyZWFkLT5jb25uX3RpbWUpOw0KIAlJTlNUUl9USU1FX1NVQlRSQUNU KHRocmVhZC0+Y29ubl90aW1lLCB0aHJlYWQtPnN0YXJ0X3RpbWUpOw0KIA0K LQlhZ2dfdmFsc19pbml0KCZhZ2dzLCB0aHJlYWQtPnN0YXJ0X3RpbWUpOw0K Kwlpbml0U3RhdHMoJmFnZ3MsIElOU1RSX1RJTUVfR0VUX0RPVUJMRSh0aHJl YWQtPnN0YXJ0X3RpbWUpKTsNCisJbGFzdCA9IGFnZ3M7DQogDQogCS8qIHNl bmQgc3RhcnQgdXAgcXVlcmllcyBpbiBhc3luYyBtYW5uZXIgKi8NCiAJZm9y IChpID0gMDsgaSA8IG5zdGF0ZTsgaSsrKQ0KIAl7DQogCQlDU3RhdGUJICAg KnN0ID0gJnN0YXRlW2ldOw0KLQkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBz cWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJCUNvbW1hbmQgICAqKmNvbW1h bmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJ aW50CQkJcHJldl9lY250ID0gc3QtPmVjbnQ7DQogDQotCQlzdC0+dXNlX2Zp bGUgPSBnZXRyYW5kKHRocmVhZCwgMCwgbnVtX2ZpbGVzIC0gMSk7DQotCQlp ZiAoIWRvQ3VzdG9tKHRocmVhZCwgc3QsICZ0aHJlYWQtPmNvbm5fdGltZSwg bG9nZmlsZSwgJmFnZ3MpKQ0KKwkJc3QtPnVzZV9maWxlID0gbnVtX3Njcmlw dHM9PTE/IDA6IGNob29zZVNjcmlwdCh0aHJlYWQpOw0KKwkJaWYgKCFkb0N1 c3RvbSh0aHJlYWQsIHN0LCBsb2dmaWxlLCAmYWdncykpDQogCQkJcmVtYWlu cy0tOwkJCS8qIEkndmUgYWJvcnRlZCAqLw0KIA0KIAkJaWYgKHN0LT5lY250 ID4gcHJldl9lY250ICYmIGNvbW1hbmRzW3N0LT5zdGF0ZV0tPnR5cGUgPT0g TUVUQV9DT01NQU5EKQ0KQEAgLTM2MDUsNyArMzYxMyw3IEBAIHRocmVhZFJ1 bih2b2lkICphcmcpDQogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBpKysp DQogCQl7DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsNCi0JCQlD b21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVd Ow0KKwkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+ dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCWludAkJCXNvY2s7DQogDQogCQkJ aWYgKHN0LT5jb24gPT0gTlVMTCkNCkBAIC0zNjE4LDcgKzM2MjYsNyBAQCB0 aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCQl7DQogCQkJCQkvKiBpbnRlcnJ1 cHQgY2xpZW50IHdoaWNoIGhhcyBub3Qgc3RhcnRlZCBhIHRyYW5zYWN0aW9u ICovDQogCQkJCQlyZW1haW5zLS07DQotCQkJCQlzdC0+c2xlZXBpbmcgPSAw Ow0KKwkJCQkJc3QtPnNsZWVwaW5nID0gZmFsc2U7DQogCQkJCQlzdC0+dGhy b3R0bGluZyA9IGZhbHNlOw0KIAkJCQkJUFFmaW5pc2goc3QtPmNvbik7DQog CQkJCQlzdC0+Y29uID0gTlVMTDsNCkBAIC0zNzExLDEzICszNzE5LDEzIEBA IHRocmVhZFJ1bih2b2lkICphcmcpDQogCQlmb3IgKGkgPSAwOyBpIDwgbnN0 YXRlOyBpKyspDQogCQl7DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtp XTsNCi0JCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+ dXNlX2ZpbGVdOw0KKwkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX3Nj cmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCWludAkJCXByZXZf ZWNudCA9IHN0LT5lY250Ow0KIA0KIAkJCWlmIChzdC0+Y29uICYmIChGRF9J U1NFVChQUXNvY2tldChzdC0+Y29uKSwgJmlucHV0X21hc2spDQogCQkJCQkJ CXx8IGNvbW1hbmRzW3N0LT5zdGF0ZV0tPnR5cGUgPT0gTUVUQV9DT01NQU5E KSkNCiAJCQl7DQotCQkJCWlmICghZG9DdXN0b20odGhyZWFkLCBzdCwgJnRo cmVhZC0+Y29ubl90aW1lLCBsb2dmaWxlLCAmYWdncykpDQorCQkJCWlmICgh ZG9DdXN0b20odGhyZWFkLCBzdCwgbG9nZmlsZSwgJmFnZ3MpKQ0KIAkJCQkJ cmVtYWlucy0tOwkvKiBJJ3ZlIGFib3J0ZWQgKi8NCiAJCQl9DQogDQpAQCAt Mzc0MiwxMSArMzc1MCw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJ aWYgKG5vdyA+PSBuZXh0X3JlcG9ydCkNCiAJCQl7DQogCQkJCS8qIGdlbmVy YXRlIGFuZCBzaG93IHJlcG9ydCAqLw0KLQkJCQlpbnQ2NAkJY291bnQgPSAw LA0KLQkJCQkJCQlsYXRzID0gMCwNCi0JCQkJCQkJc3FsYXRzID0gMCwNCi0J CQkJCQkJbGFncyA9IDAsDQotCQkJCQkJCXNraXBwZWQgPSAwOw0KKwkJCQlT dGF0c0RhdGEgICBjdXI7DQogCQkJCWludDY0CQlydW4gPSBub3cgLSBsYXN0 X3JlcG9ydDsNCiAJCQkJZG91YmxlCQl0cHMsDQogCQkJCQkJCXRvdGFsX3J1 biwNCkBAIC0zNzY3LDI1ICszNzcxLDI0IEBAIHRocmVhZFJ1bih2b2lkICph cmcpDQogCQkJCSAqIChJZiBhIHJlYWQgZnJvbSBhIDY0LWJpdCBpbnRlZ2Vy IGlzIG5vdCBhdG9taWMsIHlvdSBtaWdodA0KIAkJCQkgKiBnZXQgYSAidG9y biIgcmVhZCBhbmQgY29tcGxldGVseSBib2d1cyBsYXRlbmNpZXMgdGhvdWdo ISkNCiAJCQkJICovDQotCQkJCWZvciAoaSA9IDA7IGkgPCBwcm9ncmVzc19u Y2xpZW50czsgaSsrKQ0KKwkJCQlpbml0U3RhdHMoJiBjdXIsIDAuMCk7DQor CQkJCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0KIAkJCQl7DQot CQkJCQljb3VudCArPSBzdGF0ZVtpXS5jbnQ7DQotCQkJCQlsYXRzICs9IHN0 YXRlW2ldLnR4bl9sYXRlbmNpZXM7DQotCQkJCQlzcWxhdHMgKz0gc3RhdGVb aV0udHhuX3NxbGF0czsNCi0JCQkJfQ0KLQ0KLQkJCQlmb3IgKGkgPSAwOyBp IDwgcHJvZ3Jlc3NfbnRocmVhZHM7IGkrKykNCi0JCQkJew0KLQkJCQkJc2tp cHBlZCArPSB0aHJlYWRbaV0udGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkOw0K LQkJCQkJbGFncyArPSB0aHJlYWRbaV0udGhyb3R0bGVfbGFnOw0KKwkJCQkJ YXBwZW5kU2ltcGxlU3RhdHMoJiBjdXIubGF0ZW5jeSwgJiB0aHJlYWRbaV0u c3RhdHMubGF0ZW5jeSk7DQorCQkJCQlhcHBlbmRTaW1wbGVTdGF0cygmIGN1 ci5sYWcsICYgdGhyZWFkW2ldLnN0YXRzLmxhZyk7DQorCQkJCQljdXIuY250 ICs9IHRocmVhZFtpXS5zdGF0cy5jbnQ7DQorCQkJCQljdXIuc2tpcHBlZCAr PSB0aHJlYWRbaV0uc3RhdHMuc2tpcHBlZDsNCiAJCQkJfQ0KIA0KIAkJCQl0 b3RhbF9ydW4gPSAobm93IC0gdGhyZWFkX3N0YXJ0KSAvIDEwMDAwMDAuMDsN Ci0JCQkJdHBzID0gMTAwMDAwMC4wICogKGNvdW50IC0gbGFzdF9jb3VudCkg LyBydW47DQotCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChsYXRzIC0gbGFzdF9s YXRzKSAvIChjb3VudCAtIGxhc3RfY291bnQpOw0KLQkJCQlzcWxhdCA9IDEu MCAqIChzcWxhdHMgLSBsYXN0X3NxbGF0cykgLyAoY291bnQgLSBsYXN0X2Nv dW50KTsNCisJCQkJdHBzID0gMTAwMDAwMC4wICogKGN1ci5jbnQgLSBsYXN0 LmNudCkgLyBydW47DQorCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChjdXIubGF0 ZW5jeS5zdW0gLSBsYXN0LmxhdGVuY3kuc3VtKSAvDQorCQkJCQkoY3VyLmNu dCAtIGxhc3QuY250KTsNCisJCQkJc3FsYXQgPSAxLjAgKiAoY3VyLmxhdGVu Y3kuc3VtMiAtIGxhc3QubGF0ZW5jeS5zdW0yKQ0KKwkJCQkJLyAoY3VyLmNu dCAtIGxhc3QuY250KTsNCiAJCQkJc3RkZXYgPSAwLjAwMSAqIHNxcnQoc3Fs YXQgLSAxMDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSk7DQotCQkJCWxh ZyA9IDAuMDAxICogKGxhZ3MgLSBsYXN0X2xhZ3MpIC8gKGNvdW50IC0gbGFz dF9jb3VudCk7DQorCQkJCWxhZyA9IDAuMDAxICogKGN1ci5sYWcuc3VtIC0g bGFzdC5sYWcuc3VtKSAvDQorCQkJCQkoY3VyLmNudCAtIGxhc3QuY250KTsN CiANCiAJCQkJaWYgKHByb2dyZXNzX3RpbWVzdGFtcCkNCiAJCQkJCXNwcmlu dGYodGJ1ZiwgIiUuMDNmIHMiLA0KQEAgLTM4MDEsMTcgKzM4MDQsMTMgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJCQkJew0KIAkJCQkJZnByaW50Zihz dGRlcnIsICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsNCiAJCQkJCWlmIChsYXRl bmN5X2xpbWl0KQ0KLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0 X0ZPUk1BVCAiIHNraXBwZWQiLA0KLQkJCQkJCQkJc2tpcHBlZCAtIGxhc3Rf c2tpcHBlZCk7DQorCQkJCQkJZnByaW50ZihzdGRlcnIsICIsICJJTlQ2NF9G T1JNQVQiIHNraXBwZWQiLA0KKwkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0 LnNraXBwZWQpOw0KIAkJCQl9DQogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4i KTsNCiANCi0JCQkJbGFzdF9jb3VudCA9IGNvdW50Ow0KLQkJCQlsYXN0X2xh dHMgPSBsYXRzOw0KLQkJCQlsYXN0X3NxbGF0cyA9IHNxbGF0czsNCi0JCQkJ bGFzdF9sYWdzID0gbGFnczsNCisJCQkJbGFzdCA9IGN1cjsNCiAJCQkJbGFz dF9yZXBvcnQgPSBub3c7DQotCQkJCWxhc3Rfc2tpcHBlZCA9IHNraXBwZWQ7 DQogDQogCQkJCS8qDQogCQkJCSAqIEVuc3VyZSB0aGF0IHRoZSBuZXh0IHJl cG9ydCBpcyBpbiB0aGUgZnV0dXJlLCBpbiBjYXNlDQo= --8323329-2060600727-1443852725=:24488 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --8323329-2060600727-1443852725=:24488--