Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZHcVm-0005nl-IV for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jul 2015 18:43:30 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZHcVm-0003A2-4Q for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jul 2015 18:43:30 +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 1ZHcUD-0001Zk-C7 for pgsql-hackers@postgresql.org; Tue, 21 Jul 2015 18:41:53 +0000 Received: from boipeva.ensmp.fr ([194.214.158.136]) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZHcU5-0000VU-Im for pgsql-hackers@postgresql.org; Tue, 21 Jul 2015 18:41:51 +0000 Received: from cri.ensmp.fr (93-35-198-203.ip56.fastwebnet.it [93.35.198.203]) (authenticated bits=0) by boipeva.ensmp.fr (8.15.1/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t6LIfbQU005413 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 Jul 2015 20:41:40 +0200 Date: Tue, 21 Jul 2015 20:41:35 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto Reply-To: Fabien COELHO To: Robert Haas cc: PostgreSQL Developers Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1680500561-1437504100=:30948" X-Miltered: at boipeva.ensmp.fr with ID 55AE9261.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: 55AE9261.000 from 93-35-198-203.ip56.fastwebnet.it/93-35-198-203.ip56.fastwebnet.it/93.35.198.203/cri.ensmp.fr/ X-Pg-Spam-Score: -3.1 (---) 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-1680500561-1437504100=:30948 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed >> [...] and that a subsequent -w modifies the meaning of the >> script-specifiying argument already read. That strikes me as a very >> unintuitive interface. > > Ok, I understand this "afterward modification" objection. > > What if the -w would be required *before*, and supply a weight for (the > first/maybe all) script(s) specified *afterwards*, so it does not modify > something already provided? I think it would be more intuitive, or at least > less surprising. Here is a v3 which does that. If there is a better idea, do not hesitate! sh> ./pgbench -w 9 -f one.sql -f now.sql -T 2 -P 1 --per-script-stats starting vacuum...end. progress: 1.0 s, 24536.0 tps, lat 0.039 ms stddev 0.024 progress: 2.0 s, 25963.8 tps, lat 0.038 ms stddev 0.015 transaction type: multiple scripts scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 duration: 2 s number of transactions actually processed: 50501 latency average = 0.039 ms latency stddev = 0.020 ms tps = 25249.464772 (including connections establishing) tps = 25339.454154 (excluding connections establishing) SQL script 0, weight 9: one.sql - 45366 transactions (89.8% of total, tps = 22682.070035) - latency average = 0.038 ms - latency stddev = 0.016 ms SQL script 1, weight 1: now.sql - 5135 transactions (10.2% of total, tps = 2567.394737) - latency average = 0.044 ms - latency stddev = 0.041 ms -- Fabien. --8323329-1680500561-1437504100=:30948 Content-Type: TEXT/x-diff; name=pgbench-script-stats-3.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-3.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu LjZiYWM1MTEgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDE4IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LUI8L29wdGlvbj48L3Rlcm0+DQorICAgICAg PHRlcm0+PG9wdGlvbj4tLXRwYy1iPC9vcHRpb24+PC90ZXJtPg0KKyAgICAg IDxsaXN0aXRlbT4NCisgICAgICAgPHBhcmE+DQorICAgICAgICBCdWlsdC1p biBUUEMtQiBsaWtlIHRlc3Qgd2hpY2ggdXBkYXRlcyB0aHJlZSB0YWJsZXMg YW5kIHBlcmZvcm1zDQorICAgICAgICBhbiBpbnNlcnQgb24gYSBmb3VydGgu IFNlZSBiZWxvdyBmb3IgZGV0YWlscy4NCisgICAgICAgIFRoaXMgaXMgdGhl IGRlZmF1bHQgaWYgbm8gYmVuY2ggaXMgZXhwbGljaXRlbHkgc3BlY2lmaWVk Lg0KKyAgICAgICA8L3BhcmE+DQorICAgICAgPC9saXN0aXRlbT4NCisgICAg IDwvdmFybGlzdGVudHJ5Pg0KKw0KIA0KICAgICAgPHZhcmxpc3RlbnRyeT4N CiAgICAgICA8dGVybT48b3B0aW9uPi1jPC9vcHRpb24+IDxyZXBsYWNlYWJs ZT5jbGllbnRzPC8+PC90ZXJtPg0KQEAgLTMxMyw4ICszMjUsNyBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgICA8cGFyYT4N CiAgICAgICAgIFJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gPHJlcGxh Y2VhYmxlPmZpbGVuYW1lPC8+Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBk ZXRhaWxzLg0KLSAgICAgICAgPG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlv bj4tUzwvb3B0aW9uPiwgYW5kIDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAg ICAgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuDQorICAgICAgICBNdWx0aXBs ZSA8b3B0aW9uPi1mPC8+IG9wdGlvbnMgYXJlIGFsbG93ZWQuDQogICAgICAg IDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0 ZW50cnk+DQpAQCAtNDA0LDEwICs0MTUsMTAgQEAgcGdiZW5jaCA8b3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVybT48b3B0aW9uPi0tc2tp cC1zb21lLXVwZGF0ZXM8L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3Rp dGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIERvIG5vdCB1cGRhdGUg PHN0cnVjdG5hbWU+cGdiZW5jaF90ZWxsZXJzPC8+IGFuZA0KLSAgICAgICAg PHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPi4NCi0gICAgICAgIFRo aXMgd2lsbCBhdm9pZCB1cGRhdGUgY29udGVudGlvbiBvbiB0aGVzZSB0YWJs ZXMsIGJ1dA0KLSAgICAgICAgaXQgbWFrZXMgdGhlIHRlc3QgY2FzZSBldmVu IGxlc3MgbGlrZSBUUEMtQi4NCisgICAgICAgIEJ1aWx0LWluIHRlc3Qgd2hp Y2ggdXBkYXRlcyBvbmx5IG9uZSB0YWJsZSBjb21wYXJlZCB0byA8b3B0aW9u Pi1CPC8+Lg0KKyAgICAgICAgVGhpcyBhdm9pZHMgdXBkYXRlIGNvbnRlbnRp b24gb24gPHN0cnVjdG5hbWU+cGdiZW5jaF90ZWxsZXJzPC8+DQorICAgICAg ICBhbmQgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiwgYnV0IGl0 IG1ha2VzIHRoZSB0ZXN0IGNhc2UNCisgICAgICAgIGV2ZW4gbGVzcyBsaWtl IFRQQy1CLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9saXN0aXRlbT4N CiAgICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTQ5OSw5ICs1MTAsOSBAQCBw Z2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9v cHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgICAgUmVw b3J0IHRoZSBzcGVjaWZpZWQgc2NhbGUgZmFjdG9yIGluIDxhcHBsaWNhdGlv bj5wZ2JlbmNoPC8+J3MNCiAgICAgICAgIG91dHB1dC4gIFdpdGggdGhlIGJ1 aWx0LWluIHRlc3RzLCB0aGlzIGlzIG5vdCBuZWNlc3Nhcnk7IHRoZQ0KICAg ICAgICAgY29ycmVjdCBzY2FsZSBmYWN0b3Igd2lsbCBiZSBkZXRlY3RlZCBi eSBjb3VudGluZyB0aGUgbnVtYmVyIG9mDQotICAgICAgICByb3dzIGluIHRo ZSA8c3RydWN0bmFtZT5wZ2JlbmNoX2JyYW5jaGVzPC8+IHRhYmxlLiAgSG93 ZXZlciwgd2hlbiB0ZXN0aW5nDQotICAgICAgICBjdXN0b20gYmVuY2htYXJr cyAoPG9wdGlvbj4tZjwvPiBvcHRpb24pLCB0aGUgc2NhbGUgZmFjdG9yDQot ICAgICAgICB3aWxsIGJlIHJlcG9ydGVkIGFzIDEgdW5sZXNzIHRoaXMgb3B0 aW9uIGlzIHVzZWQuDQorICAgICAgICByb3dzIGluIHRoZSA8c3RydWN0bmFt ZT5wZ2JlbmNoX2JyYW5jaGVzPC8+IHRhYmxlLg0KKyAgICAgICAgSG93ZXZl ciwgd2hlbiB0ZXN0aW5nIG9ubHkgY3VzdG9tIGJlbmNobWFya3MgKDxvcHRp b24+LWY8Lz4gb3B0aW9uKSwNCisgICAgICAgIHRoZSBzY2FsZSBmYWN0b3Ig d2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlzIG9wdGlvbiBpcyB1 c2VkLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9saXN0aXRlbT4NCiAg ICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTUxMSw3ICs1MjIsNyBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1zZWxlY3Qtb25seTwvb3B0aW9uPjwvdGVybT4NCiAgICAgICA8 bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KLSAgICAgICAgUGVyZm9ybSBz ZWxlY3Qtb25seSB0cmFuc2FjdGlvbnMgaW5zdGVhZCBvZiBUUEMtQi1saWtl IHRlc3QuDQorICAgICAgICBCdWlsdC1pbiB0ZXN0IHdpdGggc2VsZWN0LW9u bHkgdHJhbnNhY3Rpb25zLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9s aXN0aXRlbT4NCiAgICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTU1Miw2ICs1 NjMsMjAgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRp b25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAg ICAgIDwvdmFybGlzdGVudHJ5Pg0KIA0KICAgICAgPHZhcmxpc3RlbnRyeT4N CisgICAgICA8dGVybT48b3B0aW9uPi13PC9vcHRpb24+PC90ZXJtPg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS13ZWlnaHQ8L29wdGlvbj48L3Rlcm0+DQor ICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4NCisgICAgICAgIFNl dCB0aGUgaW50ZWdlciB3ZWlnaHQgZm9yIHRoZSBuZXh0IHRlc3Qgc2NyaXB0 DQorICAgICAgICAoPG9wdGlvbj4tQjwvPiwgPG9wdGlvbj4tTjwvPiwgPG9w dGlvbj4tUzwvPiBvciA8b3B0aW9uPi1mPC8+KS4NCisgICAgICAgIFdoZW4g c2V2ZXJhbCB0ZXN0IHNjcmlwdHMgYXJlIHVzZWQsIHRoZSByZWxhdGl2ZSBw cm9iYWJpbGl0eSBvZg0KKyAgICAgICAgZHJhd2luZyBlYWNoIHRlc3QgaXMg cHJvcG9ydGlvbmFsIHRvIHRoZXNlIHdlaWdodHMuDQorICAgICAgICBUaGUg ZGVmYXVsdCB3ZWlnaHQgaXMgPGxpdGVyYWw+MTwvPi4NCisgICAgICAgPC9w YXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8L3Zhcmxpc3RlbnRy eT4NCisNCisgICAgIDx2YXJsaXN0ZW50cnk+DQogICAgICAgPHRlcm0+PG9w dGlvbj4tLWFnZ3JlZ2F0ZS1pbnRlcnZhbD08cmVwbGFjZWFibGU+c2Vjb25k czwvPjwvb3B0aW9uPjwvdGVybT4NCiAgICAgICA8bGlzdGl0ZW0+DQogICAg ICAgIDxwYXJhPg0KQEAgLTU2Nyw2ICs1OTIsMTYgQEAgcGdiZW5jaCA8b3B0 aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgIDwvdmFybGlzdGVudHJ5Pg0K IA0KICAgICAgPHZhcmxpc3RlbnRyeT4NCisgICAgICA8dGVybT48b3B0aW9u Pi0tcGVyLXNjcmlwdC1zdGF0czwvb3B0aW9uPjwvdGVybT4NCisgICAgICA8 bGlzdGl0ZW0+DQorICAgICAgIDxwYXJhPg0KKyAgICAgICAgUmVwb3J0IHNv bWUgc3RhdGlzdGljcyBwZXIgc2NyaXB0IHJ1biBieSBwZ2JlbmNoLg0KKyAg ICAgICA8L3BhcmE+DQorICAgICAgPC9saXN0aXRlbT4NCisgICAgIDwvdmFy bGlzdGVudHJ5Pg0KKw0KKw0KKyAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICA8dGVybT48b3B0aW9uPi0tc2FtcGxpbmctcmF0ZT08cmVwbGFjZWFibGU+ cmF0ZTwvPjwvb3B0aW9uPjwvdGVybT4NCiAgICAgICA8bGlzdGl0ZW0+DQog ICAgICAgIDxwYXJhPg0KQEAgLTY2MSw3ICs2OTYsMTcgQEAgcGdiZW5jaCA8 b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgIDx0aXRsZT5XaGF0IGlzIHRo ZSA8cXVvdGU+VHJhbnNhY3Rpb248Lz4gQWN0dWFsbHkgUGVyZm9ybWVkIGlu IHBnYmVuY2g/PC90aXRsZT4NCiANCiAgIDxwYXJhPg0KLSAgIFRoZSBkZWZh dWx0IHRyYW5zYWN0aW9uIHNjcmlwdCBpc3N1ZXMgc2V2ZW4gY29tbWFuZHMg cGVyIHRyYW5zYWN0aW9uOg0KKyAgIFBnYmVuY2ggZXhlY3V0ZXMgdGVzdCBz Y3JpcHRzIGNob3NlbiByYW5kb21seSBmcm9tIGEgc3BlY2lmaWVkIGxpc3Qu DQorICAgVGhleSBpbmNsdWRlIGJ1aWx0LWluIHNjcmlwdHMgKDxvcHRpb24+ LUI8Lz4sIDxvcHRpb24+LU48Lz4gYW5kDQorICAgPG9wdGlvbj4tUzwvPikg YW5kIGN1c3RvbSBzY3JpcHRzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHdpdGgg PG9wdGlvbj4tZjwvPi4NCisgICBFYWNoIHRlc3QgbWF5IGJlIGdpdmVuIGEg cmVsYXRpdmUgd2VpZ2h0ICg8b3B0aW9uPi13PC8+KQ0KKyAgIHNwZWNpZmll ZCA8ZW1waGFzaXM+YmVmb3JlPC8+IHRoZSB0ZXN0IGFib3V0IHdoaWNoIGl0 IGFwcGxpZXMgc28gYXMNCisgICB0byBjaGFuZ2UgaXRzIGRyYXcgcHJvYmFi aWxpdHkuDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRoZSBkZWZh dWx0IHRyYW5zYWN0aW9uIHNjcmlwdCAoYWxzbyBpbnZva2VkIHdpdGggPG9w dGlvbj4tQjwvPikNCisgICBpc3N1ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRy YW5zYWN0aW9uOg0KICAgPC9wYXJhPg0KIA0KICAgPG9yZGVyZWRsaXN0Pg0K QEAgLTY4OSwxMCArNzM0LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5k Ym5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxhY2lu ZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVzY3Jp YmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJv bSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24pLiAg SW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAgY291 bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlvdSBj YW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVsdGlw bGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gNCi0g ICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9zZW4g ZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBuZXcg dHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2Yg YSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCBlODM5ZmEzLi5mOWQzMGYyIDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysrIGIv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2MiwxMSArMTYyLDEw IEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyogcXVp ZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRlcnZh bDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVhbA0K IAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAgcGVy X3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxlY3Qg c3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJCS8q IHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRzICov DQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMgPSAwOwkJLyogbnVtYmVyIG9m IGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJCQkJCQkJCSAqIHJlcG9ydCAq Lw0KLWludAkJCXByb2dyZXNzX250aHJlYWRzID0gMDsJCS8qIG51bWJlciBv ZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJCQkJCQkJCQkgKiByZXBvcnQg Ki8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50 cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJICAgIC8qIG51bWJlciBvZiB0 aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVjdDsJCQkvKiBlc3RhYmxpc2gg Y29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLw0KIGJvb2wJCWlz X2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMg Ki8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nlc3MgaWQgdXNl ZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0xODYsMTMgKzE4NSwzOSBAQCB0 eXBlZGVmIHN0cnVjdA0KIAljaGFyCSAgICp2YWx1ZTsJCQkvKiBpdHMgdmFs dWUgKi8NCiB9IFZhcmlhYmxlOw0KIA0KLSNkZWZpbmUgTUFYX0ZJTEVTCQkx MjgJCS8qIG1heCBudW1iZXIgb2YgU1FMIHNjcmlwdCBmaWxlcyBhbGxvd2Vk ICovDQorI2RlZmluZSBNQVhfU0NSSVBUUwkJMTI4CQkvKiBtYXggbnVtYmVy IG9mIFNRTCBzY3JpcHQgZmlsZXMgYWxsb3dlZCAqLw0KICNkZWZpbmUgU0hF TExfQ09NTUFORF9TSVpFCTI1NiAvKiBtYXhpbXVtIHNpemUgYWxsb3dlZCBm b3Igc2hlbGwgY29tbWFuZCAqLw0KIA0KIC8qDQotICogc3RydWN0dXJlcyB1 c2VkIGluIGN1c3RvbSBxdWVyeSBtb2RlDQorICogc2ltcGxlIGRhdGEgc3Ry dWN0dXJlIHRvIGtlZXAgc3RhdHMgYWJvdXQgc29tZXRoaW5nLg0KKyAqIHBy b2JhYmx5IHRoZSBmaXJzdCB2YWx1ZSBzaG91bGQgYmUga2VwdCBhbmQgdXNl ZCBhcyBhbiBvZmZzZXQgZm9yDQorICogYmV0dGVyIG51bWVyaWNhbCBzdGFi aWxpdHkuLi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJaW50NjRf dCBjb3VudDsgICAgLyogaG93IG1hbnkgdmFsdWVzIHdoZXJlIGVuY291bnRl cmVkICovDQorCWRvdWJsZSBtaW47ICAgLyogdGhlIG1pbmltdW0gc2VlbiAq Lw0KKwlkb3VibGUgbWF4OyAgIC8qIHRoZSBtYXhpbXVtIHNlZW4gKi8NCisJ ZG91YmxlIHN1bTsgICAvKiBzdW0gb2YgdmFsdWVzICovDQorCWRvdWJsZSBz dW0yOyAgLyogc3VtIG9mIHNxdWFyZWQgdmFsdWVzICovDQorfSBTaW1wbGVT dGF0czsNCisNCisvKiBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHZhcmlvdXMg c3RhdGlzdGljcy4NCisgKiBpdCBpcyB1c2VkIGZvciBpbnRlcnZhbCBzdGF0 aXN0aWNzIGFzIHdlbGwgYXMgZmlsZSBzdGF0aXN0aWNzLg0KICAqLw0KK3R5 cGVkZWYgc3RydWN0DQorew0KKwlsb25nCQlzdGFydF90aW1lOwkJLyogd2hl biB0aGUgaW50ZXJ2YWwgc3RhcnRzLCBmb3IgYWdncmVnYXRlcyAqLw0KKwlp bnQ2NAkJY250OwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKi8NCisJ aW50NjQJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNr aXBwZWQgdW5kZXIgLS1yYXRlDQorCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5 LWxpbWl0ICovDQorCVNpbXBsZVN0YXRzCWxhdGVuY3k7DQorCVNpbXBsZVN0 YXRzCWxhZzsNCit9IFN0YXRzRGF0YTsNCiANCisvKg0KKyAqIHN0cnVjdHVy ZXMgdXNlZCBpbiBjdXN0b20gcXVlcnkgbW9kZQ0KKyAqLw0KIHR5cGVkZWYg c3RydWN0DQogew0KIAlQR2Nvbm4JICAgKmNvbjsJCQkvKiBjb25uZWN0aW9u IGhhbmRsZSB0byBEQiAqLw0KQEAgLTIwMCwyMiArMjI1LDIwIEBAIHR5cGVk ZWYgc3RydWN0DQogCWludAkJCXN0YXRlOwkJCS8qIHN0YXRlIE5vLiAqLw0K IAlpbnQJCQlsaXN0ZW47CQkJLyogMCBpbmRpY2F0ZXMgdGhhdCBhbiBhc3lu YyBxdWVyeSBoYXMgYmVlbg0KIAkJCQkJCQkJICogc2VudCAqLw0KLQlpbnQJ CQlzbGVlcGluZzsJCS8qIDEgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBp cyBuYXBwaW5nICovDQorCWJvb2wJCWlzX3Rocm90dGxlZDsJLyogd2hldGhl ciB0cmFuc2FjdGlvbiB0aHJvdHRsaW5nIGlzIGRvbmUgKi8NCisJYm9vbAkJ c2xlZXBpbmc7CQkvKiB3aGV0aGVyIHRoZSBjbGllbnQgaXMgbmFwcGluZyAq Lw0KIAlib29sCQl0aHJvdHRsaW5nOwkJLyogd2hldGhlciBuYXAgaXMgZm9y IHRocm90dGxpbmcgKi8NCiAJVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyog YXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCiAJaW50CQkJbnZh cmlhYmxlczsNCiAJaW50NjQJCXR4bl9zY2hlZHVsZWQ7CS8qIHNjaGVkdWxl ZCBzdGFydCB0aW1lIG9mIHRyYW5zYWN0aW9uICh1c2VjKSAqLw0KIAlpbnN0 cl90aW1lCXR4bl9iZWdpbjsJCS8qIHVzZWQgZm9yIG1lYXN1cmluZyBzY2hl ZHVsZSBsYWcgdGltZXMgKi8NCiAJaW5zdHJfdGltZQlzdG10X2JlZ2luOwkJ LyogdXNlZCBmb3IgbWVhc3VyaW5nIHN0YXRlbWVudCBsYXRlbmNpZXMgKi8N Ci0JYm9vbAkJaXNfdGhyb3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0aW9u IHRocm90dGxpbmcgaXMgZG9uZSAqLw0KLQlpbnQJCQl1c2VfZmlsZTsJCS8q IGluZGV4IGluIHNxbF9maWxlcyBmb3IgdGhpcyBjbGllbnQgKi8NCi0JYm9v bAkJcHJlcGFyZWRbTUFYX0ZJTEVTXTsNCisJaW50CQkJdXNlX2ZpbGU7CQkv KiBpbmRleCBpbiBzcWxfc2NyaXB0cyBmb3IgdGhpcyBjbGllbnQgKi8NCisJ Ym9vbAkJcHJlcGFyZWRbTUFYX1NDUklQVFNdOyAvKiB3aGV0aGVyIGNsaWVu dCBwcmVwYXJlZCB0aGUgc2NyaXB0ICovDQogDQogCS8qIHBlciBjbGllbnQg Y29sbGVjdGVkIHN0YXRzICovDQotCWludAkJCWNudDsJCQkvKiB4YWN0cyBj b3VudCAqLw0KKwlpbnQ2NAkJY250OwkJCS8qIHRyYW5zYWN0aW9uIGNvdW50 ICovDQogCWludAkJCWVjbnQ7CQkJLyogZXJyb3IgY291bnQgKi8NCi0JaW50 NjQJCXR4bl9sYXRlbmNpZXM7CS8qIGN1bXVsYXRlZCBsYXRlbmNpZXMgKi8N Ci0JaW50NjQJCXR4bl9zcWxhdHM7CQkvKiBjdW11bGF0ZWQgc3F1YXJlIGxh dGVuY2llcyAqLw0KIH0gQ1N0YXRlOw0KIA0KIC8qDQpAQCAtMjI3LDE5ICsy NTAsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJcHRocmVhZF90CXRocmVhZDsJ CQkvKiB0aHJlYWQgaGFuZGxlICovDQogCUNTdGF0ZQkgICAqc3RhdGU7CQkJ LyogYXJyYXkgb2YgQ1N0YXRlICovDQogCWludAkJCW5zdGF0ZTsJCQkvKiBs ZW5ndGggb2Ygc3RhdGVbXSAqLw0KLQlpbnN0cl90aW1lCXN0YXJ0X3RpbWU7 CQkvKiB0aHJlYWQgc3RhcnQgdGltZSAqLw0KLQlpbnN0cl90aW1lICpleGVj X2VsYXBzZWQ7CS8qIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGNtZHMgKHBlciBD b21tYW5kKSAqLw0KLQlpbnQJCSAgICpleGVjX2NvdW50OwkJLyogbnVtYmVy IG9mIGNtZCBleGVjdXRpb25zIChwZXIgQ29tbWFuZCkgKi8NCi0JdW5zaWdu ZWQgc2hvcnQgcmFuZG9tX3N0YXRlWzNdOwkJLyogc2VwYXJhdGUgcmFuZG9t bmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8NCi0JaW50NjQJCXRocm90dGxlX3Ry aWdnZXI7CQkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVzKSAqLw0K Kwl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CSAvKiBzZXBhcmF0 ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KKwlpbnQ2NAkJdGhy b3R0bGVfdHJpZ2dlcjsJIC8qIHByZXZpb3VzL25leHQgdGhyb3R0bGluZyAo dXMpICovDQogDQogCS8qIHBlciB0aHJlYWQgY29sbGVjdGVkIHN0YXRzICov DQorCWluc3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0 aW1lICovDQogCWluc3RyX3RpbWUJY29ubl90aW1lOw0KLQlpbnQ2NAkJdGhy b3R0bGVfbGFnOwkvKiB0b3RhbCB0cmFuc2FjdGlvbiBsYWcgYmVoaW5kIHRo cm90dGxpbmcgKi8NCi0JaW50NjQJCXRocm90dGxlX2xhZ19tYXg7CQkvKiBt YXggdHJhbnNhY3Rpb24gbGFnICovDQotCWludDY0CQl0aHJvdHRsZV9sYXRl bmN5X3NraXBwZWQ7CQkvKiBsYWdnaW5nIHRyYW5zYWN0aW9ucw0KLQkJCQkJ CQkJCQkJCSAqIHNraXBwZWQgKi8NCi0JaW50NjQJCWxhdGVuY3lfbGF0ZTsJ LyogbGF0ZSB0cmFuc2FjdGlvbnMgKi8NCisJaW5zdHJfdGltZSAqZXhlY19l bGFwc2VkOwkvKiB0aW1lIHNwZW50IGV4ZWN1dGluZyBjbWRzIChwZXIgQ29t bWFuZCkgKi8NCisJaW50CQkgICAqZXhlY19jb3VudDsJCS8qIG51bWJlciBv ZiBjbWQgZXhlY3V0aW9ucyAocGVyIENvbW1hbmQpICovDQorCVN0YXRzRGF0 YSAgIHN0YXRzOw0KKwlpbnQ2NAkJbGF0ZW5jeV9sYXRlOwkvKiBleGVjdXRl ZCBidXQgbGF0ZSB0cmFuc2FjdGlvbnMgKi8NCiB9IFRTdGF0ZTsNCiANCiAj ZGVmaW5lIElOVkFMSURfVEhSRUFECQkoKHB0aHJlYWRfdCkgMCkNCkBAIC0y NzMsMzMgKzI5MywyNiBAQCB0eXBlZGVmIHN0cnVjdA0KIAlQZ0JlbmNoRXhw ciAqZXhwcjsJCQkvKiBwYXJzZWQgZXhwcmVzc2lvbiAqLw0KIH0gQ29tbWFu ZDsNCiANCisvKiBTUUwgc2NyaXB0IHRvIGJlIGV4ZWN1dGVkLCBlaXRoZXIg YSBmaWxlIG9yIGFuIGludGVybmFsIHNjcmlwdA0KKyAqLw0KIHR5cGVkZWYg c3RydWN0DQogew0KLQ0KLQlsb25nCQlzdGFydF90aW1lOwkJLyogd2hlbiBk b2VzIHRoZSBpbnRlcnZhbCBzdGFydCAqLw0KLQlpbnQJCQljbnQ7CQkJLyog bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAqLw0KLQlpbnQJCQlza2lwcGVkOwkJ LyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0 ZQ0KLQkJCQkJCQkJICogYW5kIC0tbGF0ZW5jeS1saW1pdCAqLw0KLQ0KLQlk b3VibGUJCW1pbl9sYXRlbmN5OwkvKiBtaW4vbWF4IGxhdGVuY2llcyAqLw0K LQlkb3VibGUJCW1heF9sYXRlbmN5Ow0KLQlkb3VibGUJCXN1bV9sYXRlbmN5 OwkvKiBzdW0obGF0ZW5jeSksIHN1bShsYXRlbmN5XjIpIC0gZm9yDQotCQkJ CQkJCQkgKiBlc3RpbWF0ZXMgKi8NCi0JZG91YmxlCQlzdW0yX2xhdGVuY3k7 DQotDQotCWRvdWJsZQkJbWluX2xhZzsNCi0JZG91YmxlCQltYXhfbGFnOw0K LQlkb3VibGUJCXN1bV9sYWc7CQkvKiBzdW0obGFnKSAqLw0KLQlkb3VibGUJ CXN1bTJfbGFnOwkJLyogc3VtKGxhZypsYWcpICovDQotfSBBZ2dWYWxzOw0K LQ0KLXN0YXRpYyBDb21tYW5kICoqc3FsX2ZpbGVzW01BWF9GSUxFU107CS8q IFNRTCBzY3JpcHQgZmlsZXMgKi8NCi1zdGF0aWMgaW50CW51bV9maWxlczsJ CQkvKiBudW1iZXIgb2Ygc2NyaXB0IGZpbGVzICovDQorCWNvbnN0IGNoYXIg Km5hbWU7DQorCWludCB3ZWlnaHQ7DQorCUNvbW1hbmQgKipjb21tYW5kczsN CisJU3RhdHNEYXRhIHN0YXRzOw0KK30gU1FMU2NyaXB0Ow0KKw0KK3N0YXRp YyBTUUxTY3JpcHQgc3FsX3NjcmlwdFtNQVhfU0NSSVBUU107DQorc3RhdGlj IGludAludW1fc2NyaXB0czsJCS8qIG51bWJlciBvZiBzY3JpcHQgaW4gc3Fs X3NjcmlwdFtdICovDQogc3RhdGljIGludAludW1fY29tbWFuZHMgPSAwOwkv KiB0b3RhbCBudW1iZXIgb2YgQ29tbWFuZCBzdHJ1Y3RzICovDQorc3RhdGlj IGludCAgdG90YWxfd2VpZ2h0ID0gMDsNCisNCiBzdGF0aWMgaW50CWRlYnVn ID0gMDsJCQkvKiBkZWJ1ZyBmbGFnICovDQogDQotLyogZGVmYXVsdCBzY2Vu YXJpbyAqLw0KLXN0YXRpYyBjaGFyICp0cGNfYiA9IHsNCisvKiAtQiBjYXNl LCBkZWZhdWx0IHNjZW5hcmlvICovDQorc3RhdGljIGNvbnN0IGNoYXIgKmJf YmVuY2ggPSAiPGJ1aWx0aW46IFRQQy1CIChzb3J0IG9mKT4iOw0KK3N0YXRp YyBjb25zdCBjaGFyICp0cGNfYiA9IHsNCiAJIlxcc2V0IG5icmFuY2hlcyAi IENwcEFzU3RyaW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCiAJIlxc c2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNj YWxlXG4iDQogCSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFj Y291bnRzKSAiICogOnNjYWxlXG4iDQpAQCAtMzE3LDcgKzMzMCw4IEBAIHN0 YXRpYyBjaGFyICp0cGNfYiA9IHsNCiB9Ow0KIA0KIC8qIC1OIGNhc2UgKi8N Ci1zdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsNCitzdGF0aWMgY29u c3QgY2hhciAqbl9iZW5jaCA9ICI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4i Ow0KK3N0YXRpYyBjb25zdCBjaGFyICpzaW1wbGVfdXBkYXRlID0gew0KIAki XFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykgIiAq IDpzY2FsZVxuIg0KIAkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmluZzIo bnRlbGxlcnMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG5hY2NvdW50cyAi IENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCkBAIC0z MzMsNyArMzQ3LDggQEAgc3RhdGljIGNoYXIgKnNpbXBsZV91cGRhdGUgPSB7 DQogfTsNCiANCiAvKiAtUyBjYXNlICovDQotc3RhdGljIGNoYXIgKnNlbGVj dF9vbmx5ID0gew0KK3N0YXRpYyBjb25zdCBjaGFyICpzX2JlbmNoID0gIjxi dWlsdGluOiBzZWxlY3Qgb25seT4iOw0KK3N0YXRpYyBjb25zdCBjaGFyICpz ZWxlY3Rfb25seSA9IHsNCiAJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3Ry aW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0cmFuZG9t IGFpZCAxIDpuYWNjb3VudHNcbiINCiAJIlNFTEVDVCBhYmFsYW5jZSBGUk9N IHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCkBAIC0z NDMsOCArMzU4LDcgQEAgc3RhdGljIGNoYXIgKnNlbGVjdF9vbmx5ID0gew0K IHN0YXRpYyB2b2lkIHNldGFsYXJtKGludCBzZWNvbmRzKTsNCiBzdGF0aWMg dm9pZCAqdGhyZWFkUnVuKHZvaWQgKmFyZyk7DQogDQotc3RhdGljIHZvaWQg ZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2Zp bGUsIGluc3RyX3RpbWUgKm5vdywNCi0JICBBZ2dWYWxzICphZ2csIGJvb2wg c2tpcHBlZCk7DQorc3RhdGljIHZvaWQgZG9UeFN0YXRzKFRTdGF0ZSosIENT dGF0ZSosIGluc3RyX3RpbWUqLCBib29sLCBGSUxFKiwgU3RhdHNEYXRhKik7 DQogDQogc3RhdGljIHZvaWQNCiB1c2FnZSh2b2lkKQ0KQEAgLTM2NCwxMSAr Mzc4LDEyIEBAIHVzYWdlKHZvaWQpDQogCSAiICAtLXRhYmxlc3BhY2U9VEFC TEVTUEFDRSAgY3JlYXRlIHRhYmxlcyBpbiB0aGUgc3BlY2lmaWVkIHRhYmxl c3BhY2VcbiINCiAJCSAgICIgIC0tdW5sb2dnZWQtdGFibGVzICAgICAgICBj cmVhdGUgdGFibGVzIGFzIHVubG9nZ2VkIHRhYmxlc1xuIg0KIAkJICAgIlxu QmVuY2htYXJraW5nIG9wdGlvbnM6XG4iDQorCQkgICAiICAtQiwgLS10cGMt YiAgICAgICAgICAgICAgYWRkIFRQQy1CIChzb3J0LW9mKSBpbnRlcm5hbCBi ZW5jaFxuIg0KIAkJICAgIiAgLWMsIC0tY2xpZW50PU5VTSAgICAgICAgIG51 bWJlciBvZiBjb25jdXJyZW50IGRhdGFiYXNlIGNsaWVudHMgKGRlZmF1bHQ6 IDEpXG4iDQogCQkgICAiICAtQywgLS1jb25uZWN0ICAgICAgICAgICAgZXN0 YWJsaXNoIG5ldyBjb25uZWN0aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9uXG4i DQogCQkgICAiICAtRCwgLS1kZWZpbmU9VkFSTkFNRT1WQUxVRVxuIg0KIAkg ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgdmFyaWFibGUg Zm9yIHVzZSBieSBjdXN0b20gc2NyaXB0XG4iDQotCQkgIiAgLWYsIC0tZmls ZT1GSUxFTkFNRSAgICAgIHJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZyb20g RklMRU5BTUVcbiINCisJCSAiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAg YWRkIHRyYW5zYWN0aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQogCQkg ICAiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgbnVtYmVyIG9mIHRocmVh ZHMgKGRlZmF1bHQ6IDEpXG4iDQogCQkgICAiICAtbCwgLS1sb2cgICAgICAg ICAgICAgICAgd3JpdGUgdHJhbnNhY3Rpb24gdGltZXMgdG8gbG9nIGZpbGVc biINCiAJIiAgLUwsIC0tbGF0ZW5jeS1saW1pdD1OVU0gIGNvdW50IHRyYW5z YWN0aW9ucyBsYXN0aW5nIG1vcmUgdGhhbiBOVU0gbXNcbiINCkBAIC0zNzYs MTcgKzM5MSwxOSBAQCB1c2FnZSh2b2lkKQ0KIAkJICAgIiAgLU0sIC0tcHJv dG9jb2w9c2ltcGxlfGV4dGVuZGVkfHByZXBhcmVkXG4iDQogCQkgICAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgZm9yIHN1Ym1pdHRp bmcgcXVlcmllcyAoZGVmYXVsdDogc2ltcGxlKVxuIg0KIAkJICAgIiAgLW4s IC0tbm8tdmFjdXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9y ZSB0ZXN0c1xuIg0KLQkJICAgIiAgLU4sIC0tc2tpcC1zb21lLXVwZGF0ZXMg IHNraXAgdXBkYXRlcyBvZiBwZ2JlbmNoX3RlbGxlcnMgYW5kIHBnYmVuY2hf YnJhbmNoZXNcbiINCisJCSAgICIgIC1OLCAtLXNraXAtc29tZS11cGRhdGVz ICBhZGQgc2ltcGxlIHVwZGF0ZXMgaW50ZXJuYWwgYmVuY2hcbiINCiAJCSAg ICIgIC1QLCAtLXByb2dyZXNzPU5VTSAgICAgICBzaG93IHRocmVhZCBwcm9n cmVzcyByZXBvcnQgZXZlcnkgTlVNIHNlY29uZHNcbiINCiAJCSAgICIgIC1y LCAtLXJlcG9ydC1sYXRlbmNpZXMgICByZXBvcnQgYXZlcmFnZSBsYXRlbmN5 IHBlciBjb21tYW5kXG4iDQogCQkiICAtUiwgLS1yYXRlPU5VTSAgICAgICAg ICAgdGFyZ2V0IHJhdGUgaW4gdHJhbnNhY3Rpb25zIHBlciBzZWNvbmRcbiIN CiAJCSAgICIgIC1zLCAtLXNjYWxlPU5VTSAgICAgICAgICByZXBvcnQgdGhp cyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iDQotCQkgICAiICAtUywgLS1z ZWxlY3Qtb25seSAgICAgICAgcGVyZm9ybSBTRUxFQ1Qtb25seSB0cmFuc2Fj dGlvbnNcbiINCisJCSAgICIgIC1TLCAtLXNlbGVjdC1vbmx5ICAgICAgICBh ZGQgU0VMRUNULW9ubHkgaW50ZXJuYWwgYmVuY2hcbiINCiAJCSAgICIgIC10 LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNhY3Rpb25z IGVhY2ggY2xpZW50IHJ1bnMgKGRlZmF1bHQ6IDEwKVxuIg0KIAkJICIgIC1U LCAtLXRpbWU9TlVNICAgICAgICAgICBkdXJhdGlvbiBvZiBiZW5jaG1hcmsg dGVzdCBpbiBzZWNvbmRzXG4iDQogCQkgICAiICAtdiwgLS12YWN1dW0tYWxs ICAgICAgICAgdmFjdXVtIGFsbCBmb3VyIHN0YW5kYXJkIHRhYmxlcyBiZWZv cmUgdGVzdHNcbiINCisJCSAgICIgIC13LCAtLXdlaWdodD1OVU0gICAgICAg ICBzZXQgd2VpZ2h0IGZvciBuZXh0IHNjcmlwdFxuIg0KIAkJICAgIiAgLS1h Z2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBkYXRhIG92ZXIgTlVN IHNlY29uZHNcbiINCiAJCSAgICIgIC0tc2FtcGxpbmctcmF0ZT1OVU0gICAg ICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8gbG9nIChlLmcuIDAuMDEg Zm9yIDElJSlcbiINCisJCSAgICIgIC0tcGVyLWZpbGUtc3RhdHMgICAgICAg ICByZXBvcnQgcGVyLWZpbGUgc3RhdGlzdGljc1xuIg0KIAkJICAgIlxuQ29t bW9uIG9wdGlvbnM6XG4iDQogCQkgICAiICAtZCwgLS1kZWJ1ZyAgICAgICAg ICAgICAgcHJpbnQgZGVidWdnaW5nIG91dHB1dFxuIg0KIAkgICIgIC1oLCAt LWhvc3Q9SE9TVE5BTUUgICAgICBkYXRhYmFzZSBzZXJ2ZXIgaG9zdCBvciBz b2NrZXQgZGlyZWN0b3J5XG4iDQpAQCAtNTc4LDYgKzU5NSw0OSBAQCBnZXRQ b2lzc29uUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgY2VudGVyKQ0KIAly ZXR1cm4gKGludDY0KSAoLWxvZyh1bmlmb3JtKSAqICgoZG91YmxlKSBjZW50 ZXIpICsgMC41KTsNCiB9DQogDQorc3RhdGljIHZvaWQNCitpbml0U2ltcGxl U3RhdHMoU2ltcGxlU3RhdHMgKiBzcykNCit7DQorCW1lbXNldChzcywgMCwg c2l6ZW9mKFNpbXBsZVN0YXRzKSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQor ZG9TaW1wbGVTdGF0cyhTaW1wbGVTdGF0cyAqc3MsIGRvdWJsZSB2YWwpDQor ew0KKwlpZiAoc3MtPmNvdW50ID09IDAgfHwgdmFsIDwgc3MtPm1pbikNCisJ CXNzLT5taW4gPSB2YWw7DQorCWlmIChzcy0+Y291bnQgPT0gMCB8fCB2YWwg PiBzcy0+bWF4KQ0KKwkJc3MtPm1heCA9IHZhbDsNCisJc3MtPmNvdW50ICsr Ow0KKwlzcy0+c3VtICs9IHZhbDsNCisJc3MtPnN1bTIgKz0gdmFsICogdmFs Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK2FwcGVuZFNpbXBsZVN0YXRzKFNp bXBsZVN0YXRzICphY2MsIFNpbXBsZVN0YXRzICpzcykNCit7DQorCWlmIChh Y2MtPmNvdW50ID09IDAgfHwgc3MtPm1pbiA8IGFjYy0+bWluKQ0KKwkJYWNj LT5taW4gPSBzcy0+bWluOw0KKwlpZiAoYWNjLT5jb3VudCA9PSAwIHx8IHNz LT5tYXggPiBhY2MtPm1heCkNCisJCWFjYy0+bWF4ID0gc3MtPm1heDsNCisJ YWNjLT5jb3VudCArPSBzcy0+Y291bnQ7DQorCWFjYy0+c3VtICs9IHNzLT5z dW07DQorCWFjYy0+c3VtMiArPSBzcy0+c3VtMjsNCit9DQorDQorc3RhdGlj IHZvaWQNCitpbml0U3RhdHMoU3RhdHNEYXRhICpzZCwgZG91YmxlIHN0YXJ0 X3RpbWUpDQorew0KKwlzZC0+Y250ID0gMDsNCisJc2QtPnNraXBwZWQgPSAw Ow0KKwlpbml0U2ltcGxlU3RhdHMoJiBzZC0+bGF0ZW5jeSk7DQorCWluaXRT aW1wbGVTdGF0cygmIHNkLT5sYWcpOw0KKw0KKwkvKiBub3QgbmVjZXNzYXJp bHkgb3ZlcnJpZGVuPyAqLw0KKwlpZiAoc3RhcnRfdGltZSkNCisJCXNkLT5z dGFydF90aW1lID0gc3RhcnRfdGltZTsNCit9DQorDQogLyogY2FsbCBQUWV4 ZWMoKSBhbmQgZXhpdCgpIG9uIGZhaWx1cmUgKi8NCiBzdGF0aWMgdm9pZA0K IGV4ZWN1dGVTdGF0ZW1lbnQoUEdjb25uICpjb24sIGNvbnN0IGNoYXIgKnNx bCkNCkBAIC0xMDk3LDMzICsxMTU3LDIxIEBAIGNsaWVudERvbmUoQ1N0YXRl ICpzdCwgYm9vbCBvaykNCiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBhbHdheXMg ZmFsc2UgKi8NCiB9DQogDQotc3RhdGljIHZvaWQNCi1hZ2dfdmFsc19pbml0 KEFnZ1ZhbHMgKmFnZ3MsIGluc3RyX3RpbWUgc3RhcnQpDQorc3RhdGljIGlu dA0KK2Nob29zZVNjcmlwdChUU3RhdGUgKnRocmVhZCkNCiB7DQotCS8qIGJh c2ljIGNvdW50ZXJzICovDQotCWFnZ3MtPmNudCA9IDA7CQkJCS8qIG51bWJl ciBvZiB0cmFuc2FjdGlvbnMgKGluY2x1ZGVzIHNraXBwZWQpICovDQotCWFn Z3MtPnNraXBwZWQgPSAwOwkJCS8qIHhhY3RzIHNraXBwZWQgdW5kZXIgLS1y YXRlIC0tbGF0ZW5jeS1saW1pdCAqLw0KLQ0KLQlhZ2dzLT5zdW1fbGF0ZW5j eSA9IDA7CQkvKiBTVU0obGF0ZW5jeSkgKi8NCi0JYWdncy0+c3VtMl9sYXRl bmN5ID0gMDsJCS8qIFNVTShsYXRlbmN5KmxhdGVuY3kpICovDQorCWludCBp ID0gMCwgdyA9IDAsIHdjID0gKGludCkgZ2V0cmFuZCh0aHJlYWQsIDAsIHRv dGFsX3dlaWdodCAtIDEpOw0KIA0KLQkvKiBtaW4gYW5kIG1heCB0cmFuc2Fj dGlvbiBkdXJhdGlvbiAqLw0KLQlhZ2dzLT5taW5fbGF0ZW5jeSA9IDA7DQot CWFnZ3MtPm1heF9sYXRlbmN5ID0gMDsNCisJZG8gew0KKwkJdyArPSBzcWxf c2NyaXB0W2krK10ud2VpZ2h0Ow0KKwl9IHdoaWxlICh3IDw9IHdjKTsNCiAN Ci0JLyogc2NoZWR1bGUgbGFnIGNvdW50ZXJzICovDQotCWFnZ3MtPnN1bV9s YWcgPSAwOw0KLQlhZ2dzLT5zdW0yX2xhZyA9IDA7DQotCWFnZ3MtPm1pbl9s YWcgPSAwOw0KLQlhZ2dzLT5tYXhfbGFnID0gMDsNCi0NCi0JLyogc3RhcnQg b2YgdGhlIGN1cnJlbnQgaW50ZXJ2YWwgKi8NCi0JYWdncy0+c3RhcnRfdGlt ZSA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRShzdGFydCk7DQorCXJldHVybiBp IC0gMTsNCiB9DQogDQogLyogcmV0dXJuIGZhbHNlIGlmZiBjbGllbnQgc2hv dWxkIGJlIGRpc2Nvbm5lY3RlZCAqLw0KIHN0YXRpYyBib29sDQotZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKmNv bm5fdGltZSwgRklMRSAqbG9nZmlsZSwgQWdnVmFscyAqYWdnKQ0KK2RvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpj b25uX3RpbWUsIEZJTEUgKmxvZ2ZpbGUsIFN0YXRzRGF0YSAqYWdnKQ0KIHsN CiAJUEdyZXN1bHQgICAqcmVzOw0KIAlDb21tYW5kICAgKipjb21tYW5kczsN CkBAIC0xMTQwLDcgKzExODgsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAqY29ubl90aW1lLCBGSUxFICps b2dmaWxlLCBBZ2dWYQ0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKG5vdyk7DQog DQogdG9wOg0KLQljb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVd Ow0KKwljb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21t YW5kczsNCiANCiAJLyoNCiAJICogSGFuZGxlIHRocm90dGxpbmcgb25jZSBw ZXIgdHJhbnNhY3Rpb24gYnkgc2xlZXBpbmcuICBJdCBpcyBzaW1wbGVyIHRv DQpAQCAtMTE3NiwxOCArMTIyNCwxNSBAQCB0b3A6DQogCQkJbm93X3VzID0g SU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KTsNCiAJCQl3aGlsZSAodGhy ZWFkLT50aHJvdHRsZV90cmlnZ2VyIDwgbm93X3VzIC0gbGF0ZW5jeV9saW1p dCkNCiAJCQl7DQotCQkJCXRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lw cGVkKys7DQotDQotCQkJCWlmIChsb2dmaWxlKQ0KLQkJCQkJZG9Mb2codGhy ZWFkLCBzdCwgbG9nZmlsZSwgJm5vdywgYWdnLCB0cnVlKTsNCi0NCisJCQkJ ZG9UeFN0YXRzKHRocmVhZCwgc3QsICAmbm93LCB0cnVlLCBsb2dmaWxlLCBh Z2cpOw0KKwkJCQkvKiBuZXh0IHJlbmRlei12b3VzICovDQogCQkJCXdhaXQg PSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsNCiAJ CQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9IHdhaXQ7DQogCQkJCXN0 LT50eG5fc2NoZWR1bGVkID0gdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyOw0K IAkJCX0NCiAJCX0NCiANCi0JCXN0LT5zbGVlcGluZyA9IDE7DQorCQlzdC0+ c2xlZXBpbmcgPSB0cnVlOw0KIAkJc3QtPnRocm90dGxpbmcgPSB0cnVlOw0K IAkJc3QtPmlzX3Rocm90dGxlZCA9IHRydWU7DQogCQlpZiAoZGVidWcpDQpA QCAtMTE5NywyNyArMTI0MiwxMyBAQCB0b3A6DQogDQogCWlmIChzdC0+c2xl ZXBpbmcpDQogCXsJCQkJCQkJLyogYXJlIHdlIHNsZWVwaW5nPyAqLw0KLQkJ aW50NjQJCW5vd191czsNCi0NCiAJCWlmIChJTlNUUl9USU1FX0lTX1pFUk8o bm93KSkNCiAJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQotCQlu b3dfdXMgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cpOw0KLQkJaWYg KHN0LT50eG5fc2NoZWR1bGVkIDw9IG5vd191cykNCi0JCXsNCi0JCQlzdC0+ c2xlZXBpbmcgPSAwOwkvKiBEb25lIHNsZWVwaW5nLCBnbyBhaGVhZCB3aXRo IG5leHQgY29tbWFuZCAqLw0KLQkJCWlmIChzdC0+dGhyb3R0bGluZykNCi0J CQl7DQotCQkJCS8qIE1lYXN1cmUgbGFnIG9mIHRocm90dGxlZCB0cmFuc2Fj dGlvbiByZWxhdGl2ZSB0byB0YXJnZXQgKi8NCi0JCQkJaW50NjQJCWxhZyA9 IG5vd191cyAtIHN0LT50eG5fc2NoZWR1bGVkOw0KLQ0KLQkJCQl0aHJlYWQt PnRocm90dGxlX2xhZyArPSBsYWc7DQotCQkJCWlmIChsYWcgPiB0aHJlYWQt PnRocm90dGxlX2xhZ19tYXgpDQotCQkJCQl0aHJlYWQtPnRocm90dGxlX2xh Z19tYXggPSBsYWc7DQotCQkJCXN0LT50aHJvdHRsaW5nID0gZmFsc2U7DQot CQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KKwkJaWYgKElOU1RSX1RJTUVfR0VUX01J Q1JPU0VDKG5vdykgPCBzdC0+dHhuX3NjaGVkdWxlZCkNCiAJCQlyZXR1cm4g dHJ1ZTsJCS8qIFN0aWxsIHNsZWVwaW5nLCBub3RoaW5nIHRvIGRvIGhlcmUg Ki8NCisJCS8qIEVsc2UgZG9uZSBzbGVlcGluZywgZ28gYWhlYWQgd2l0aCBu ZXh0IGNvbW1hbmQgKi8NCisJCXN0LT5zbGVlcGluZyA9IGZhbHNlOw0KKwkJ c3QtPnRocm90dGxpbmcgPSBmYWxzZTsNCiAJfQ0KIA0KIAlpZiAoc3QtPmxp c3RlbikNCkBAIC0xMjUzLDM1ICsxMjg0LDEwIEBAIHRvcDoNCiAJCS8qIHRy YW5zYWN0aW9uIGZpbmlzaGVkOiBjYWxjdWxhdGUgbGF0ZW5jeSBhbmQgbG9n IHRoZSB0cmFuc2FjdGlvbiAqLw0KIAkJaWYgKGNvbW1hbmRzW3N0LT5zdGF0 ZSArIDFdID09IE5VTEwpDQogCQl7DQotCQkJLyogb25seSBjYWxjdWxhdGUg bGF0ZW5jeSBpZiBhbiBvcHRpb24gaXMgdXNlZCB0aGF0IG5lZWRzIGl0ICov DQotCQkJaWYgKHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVu Y3lfbGltaXQpDQotCQkJew0KLQkJCQlpbnQ2NAkJbGF0ZW5jeTsNCi0NCi0J CQkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQ0KLQkJCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChub3cpOw0KLQ0KLQkJCQlsYXRlbmN5ID0gSU5T VFJfVElNRV9HRVRfTUlDUk9TRUMobm93KSAtIHN0LT50eG5fc2NoZWR1bGVk Ow0KLQ0KLQkJCQlzdC0+dHhuX2xhdGVuY2llcyArPSBsYXRlbmN5Ow0KLQ0K LQkJCQkvKg0KLQkJCQkgKiBYWFggSW4gYSBsb25nIGJlbmNobWFyayBydW4g b2YgaGlnaC1sYXRlbmN5IHRyYW5zYWN0aW9ucywNCi0JCQkJICogdGhpcyBp bnQ2NCBhZGRpdGlvbiBldmVudHVhbGx5IG92ZXJmbG93cy4gIEZvciBleGFt cGxlLCAxMDANCi0JCQkJICogdGhyZWFkcyBydW5uaW5nIDEwcyB0cmFuc2Fj dGlvbnMgd2lsbCBvdmVyZmxvdyBpdCBpbiAyLjU2DQotCQkJCSAqIGhvdXJz LiAgV2l0aCBhIG1vcmUtdHlwaWNhbCBPTFRQIHdvcmtsb2FkIG9mIC4xcw0K LQkJCQkgKiB0cmFuc2FjdGlvbnMsIG92ZXJmbG93IHdvdWxkIHRha2UgMjU2 IGhvdXJzLg0KLQkJCQkgKi8NCi0JCQkJc3QtPnR4bl9zcWxhdHMgKz0gbGF0 ZW5jeSAqIGxhdGVuY3k7DQotDQotCQkJCS8qIHJlY29yZCBvdmVyIHRoZSBs aW1pdCB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkLiAqLw0KLQkJCQlpZiAobGF0 ZW5jeV9saW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkNCi0JCQkJ CXRocmVhZC0+bGF0ZW5jeV9sYXRlKys7DQotCQkJfQ0KLQ0KLQkJCS8qIHJl Y29yZCB0aGUgdGltZSBpdCB0b29rIGluIHRoZSBsb2cgKi8NCi0JCQlpZiAo bG9nZmlsZSkNCi0JCQkJZG9Mb2codGhyZWFkLCBzdCwgbG9nZmlsZSwgJm5v dywgYWdnLCBmYWxzZSk7DQorCQkJaWYgKHByb2dyZXNzIHx8IHRocm90dGxl X2RlbGF5IHx8IGxhdGVuY3lfbGltaXQgfHwgcGVyX3NjcmlwdF9zdGF0cyB8 fCBsb2dmaWxlKQ0KKwkJCQlkb1R4U3RhdHModGhyZWFkLCBzdCwgJm5vdywg ZmFsc2UsIGxvZ2ZpbGUsIGFnZyk7DQorCQkJZWxzZQ0KKwkJCQl0aHJlYWQt PnN0YXRzLmNudCArKzsNCiAJCX0NCiANCiAJCWlmIChjb21tYW5kc1tzdC0+ c3RhdGVdLT50eXBlID09IFNRTF9DT01NQU5EKQ0KQEAgLTEzMjQsOCArMTMz MCw5IEBAIHRvcDoNCiAJCWlmIChjb21tYW5kc1tzdC0+c3RhdGVdID09IE5V TEwpDQogCQl7DQogCQkJc3QtPnN0YXRlID0gMDsNCi0JCQlzdC0+dXNlX2Zp bGUgPSAoaW50KSBnZXRyYW5kKHRocmVhZCwgMCwgbnVtX2ZpbGVzIC0gMSk7 DQotCQkJY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJ CQlzdC0+dXNlX2ZpbGUgPSBudW1fc2NyaXB0cz09MT8gMDogY2hvb3NlU2Ny aXB0KHRocmVhZCk7DQorDQorCQkJY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0 LT51c2VfZmlsZV0uY29tbWFuZHM7DQogCQkJc3QtPmlzX3Rocm90dGxlZCA9 IGZhbHNlOw0KIA0KIAkJCS8qDQpAQCAtMTM2OCw3ICsxMzc1LDcgQEAgdG9w Og0KIAl9DQogDQogCS8qIFJlY29yZCB0cmFuc2FjdGlvbiBzdGFydCB0aW1l IHVuZGVyIGxvZ2dpbmcsIHByb2dyZXNzIG9yIHRocm90dGxpbmcgKi8NCi0J aWYgKChsb2dmaWxlIHx8IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8 IGxhdGVuY3lfbGltaXQpICYmIHN0LT5zdGF0ZSA9PSAwKQ0KKwlpZiAoKGxv Z2ZpbGUgfHwgcHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5j eV9saW1pdCB8fCBwZXJfc2NyaXB0X3N0YXRzKSAmJiBzdC0+c3RhdGUgPT0g MCkNCiAJew0KIAkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdC0+dHhuX2Jl Z2luKTsNCiANCkBAIC0xNjU2LDcgKzE2NjMsNyBAQCB0b3A6DQogDQogCQkJ SU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOw0KIAkJCXN0LT50eG5fc2No ZWR1bGVkID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KSArIHVzZWM7 DQotCQkJc3QtPnNsZWVwaW5nID0gMTsNCisJCQlzdC0+c2xlZXBpbmcgPSB0 cnVlOw0KIA0KIAkJCXN0LT5saXN0ZW4gPSAxOw0KIAkJfQ0KQEAgLTE2OTQs MTYgKzE3MDEsMzEgQEAgdG9wOg0KIAlyZXR1cm4gdHJ1ZTsNCiB9DQogDQor c3RhdGljIHZvaWQNCitkb1N0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wg c2tpcHBlZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykNCit7DQorCXN0YXRz LT5jbnQgKys7DQorDQorCWlmIChza2lwcGVkKQ0KKwkJLyogbm8gbGF0ZW5j eSB0byByZWNvcmQgb24gc2tpcHBlZCB0cmFuc2FjdGlvbnMgKi8NCisJCXN0 YXRzLT5za2lwcGVkICsrOw0KKwllbHNlDQorCXsNCisJCWRvU2ltcGxlU3Rh dHMoJiBzdGF0cy0+bGF0ZW5jeSwgbGF0KTsNCisNCisJCS8qIGFuZCBwb3Nz aWJseSB0aGUgc2FtZSBmb3Igc2NoZWR1bGUgbGFnICovDQorCQlpZiAodGhy b3R0bGVfZGVsYXkpDQorCQkJZG9TaW1wbGVTdGF0cygmIHN0YXRzLT5sYWcs IGxhZyk7DQorCX0NCit9DQorDQogLyoNCiAgKiBwcmludCBsb2cgZW50cnkg YWZ0ZXIgY29tcGxldGluZyBvbmUgdHJhbnNhY3Rpb24uDQogICovDQogc3Rh dGljIHZvaWQNCi1kb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg RklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2cs DQotCSAgYm9vbCBza2lwcGVkKQ0KK2RvTG9nKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csDQor CSAgU3RhdHNEYXRhICphZ2csIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdGVu Y3ksIGRvdWJsZSBsYWcpDQogew0KLQlkb3VibGUJCWxhZzsNCi0JZG91Ymxl CQlsYXRlbmN5Ow0KLQ0KIAkvKg0KIAkgKiBTa2lwIHRoZSBsb2cgZW50cnkg aWYgc2FtcGxpbmcgaXMgZW5hYmxlZCBhbmQgdGhpcyByb3cgZG9lc24ndCBi ZWxvbmcNCiAJICogdG8gdGhlIHJhbmRvbSBzYW1wbGUuDQpAQCAtMTcxMiwx NSArMTczNCw2IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFn ZywNCiAJCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpID4gc2Ft cGxlX3JhdGUpDQogCQlyZXR1cm47DQogDQotCWlmIChJTlNUUl9USU1FX0lT X1pFUk8oKm5vdykpDQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKCpub3cp Ow0KLQ0KLQlsYXRlbmN5ID0gKGRvdWJsZSkgKElOU1RSX1RJTUVfR0VUX01J Q1JPU0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQpOw0KLQlpZiAoc2tp cHBlZCkNCi0JCWxhZyA9IGxhdGVuY3k7DQotCWVsc2UNCi0JCWxhZyA9IChk b3VibGUpIChJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdC0+dHhuX2JlZ2lu KSAtIHN0LT50eG5fc2NoZWR1bGVkKTsNCi0NCiAJLyogc2hvdWxkIHdlIGFn Z3JlZ2F0ZSB0aGUgcmVzdWx0cyBvciBub3Q/ICovDQogCWlmIChhZ2dfaW50 ZXJ2YWwgPiAwKQ0KIAl7DQpAQCAtMTczMCwzOSArMTc0Myw3IEBAIGRvTG9n KFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBp bnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJCSAqLw0KIAkJaWYg KGFnZy0+c3RhcnRfdGltZSArIGFnZ19pbnRlcnZhbCA+PSBJTlNUUl9USU1F X0dFVF9ET1VCTEUoKm5vdykpDQogCQl7DQotCQkJYWdnLT5jbnQgKz0gMTsN Ci0JCQlpZiAoc2tpcHBlZCkNCi0JCQl7DQotCQkJCS8qDQotCQkJCSAqIHRo ZXJlIGlzIG5vIGxhdGVuY3kgdG8gcmVjb3JkIGlmIHRoZSB0cmFuc2FjdGlv biB3YXMNCi0JCQkJICogc2tpcHBlZA0KLQkJCQkgKi8NCi0JCQkJYWdnLT5z a2lwcGVkICs9IDE7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWFn Zy0+c3VtX2xhdGVuY3kgKz0gbGF0ZW5jeTsNCi0JCQkJYWdnLT5zdW0yX2xh dGVuY3kgKz0gbGF0ZW5jeSAqIGxhdGVuY3k7DQotDQotCQkJCS8qIGZpcnN0 IGluIHRoaXMgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi8NCi0JCQkJaWYgKChh Z2ctPmNudCA9PSAxKSB8fCAobGF0ZW5jeSA8IGFnZy0+bWluX2xhdGVuY3kp KQ0KLQkJCQkJYWdnLT5taW5fbGF0ZW5jeSA9IGxhdGVuY3k7DQotDQotCQkJ CWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhdGVuY3kgPiBhZ2ctPm1heF9s YXRlbmN5KSkNCi0JCQkJCWFnZy0+bWF4X2xhdGVuY3kgPSBsYXRlbmN5Ow0K LQ0KLQkJCQkvKiBhbmQgdGhlIHNhbWUgZm9yIHNjaGVkdWxlIGxhZyAqLw0K LQkJCQlpZiAodGhyb3R0bGVfZGVsYXkpDQotCQkJCXsNCi0JCQkJCWFnZy0+ c3VtX2xhZyArPSBsYWc7DQotCQkJCQlhZ2ctPnN1bTJfbGFnICs9IGxhZyAq IGxhZzsNCi0NCi0JCQkJCWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhZyA8 IGFnZy0+bWluX2xhZykpDQotCQkJCQkJYWdnLT5taW5fbGFnID0gbGFnOw0K LQkJCQkJaWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGFnID4gYWdnLT5tYXhf bGFnKSkNCi0JCQkJCQlhZ2ctPm1heF9sYWcgPSBsYWc7DQotCQkJCX0NCi0J CQl9DQorCQkJZG9TdGF0cyhhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7 DQogCQl9DQogCQllbHNlDQogCQl7DQpAQCAtMTc3Nyw1MiArMTc1OCwzNCBA QCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9n ZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCQkJCSAq IHVzYWdlKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdGhpcyBpbiBh IHNwZWNpYWwgd2F5DQogCQkJCSAqIChzZWUgYmVsb3cpLg0KIAkJCQkgKi8N Ci0JCQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICVkICUuMGYgJS4wZiAlLjBm ICUuMGYiLA0KKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9G T1JNQVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmIiwNCiAJCQkJCQlhZ2ctPnN0 YXJ0X3RpbWUsDQogCQkJCQkJYWdnLT5jbnQsDQotCQkJCQkJYWdnLT5zdW1f bGF0ZW5jeSwNCi0JCQkJCQlhZ2ctPnN1bTJfbGF0ZW5jeSwNCi0JCQkJCQlh Z2ctPm1pbl9sYXRlbmN5LA0KLQkJCQkJCWFnZy0+bWF4X2xhdGVuY3kpOw0K KwkJCQkJCWFnZy0+bGF0ZW5jeS5zdW0sDQorCQkJCQkJYWdnLT5sYXRlbmN5 LnN1bTIsDQorCQkJCQkJYWdnLT5sYXRlbmN5Lm1pbiwNCisJCQkJCQlhZ2ct PmxhdGVuY3kubWF4KTsNCiAJCQkJaWYgKHRocm90dGxlX2RlbGF5KQ0KIAkJ CQl7DQogCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJS4wZiAlLjBmICUuMGYg JS4wZiIsDQotCQkJCQkJCWFnZy0+c3VtX2xhZywNCi0JCQkJCQkJYWdnLT5z dW0yX2xhZywNCi0JCQkJCQkJYWdnLT5taW5fbGFnLA0KLQkJCQkJCQlhZ2ct Pm1heF9sYWcpOw0KKwkJCQkJCQlhZ2ctPmxhZy5zdW0sDQorCQkJCQkJCWFn Zy0+bGFnLnN1bTIsDQorCQkJCQkJCWFnZy0+bGFnLm1pbiwNCisJCQkJCQkJ YWdnLT5sYWcubWF4KTsNCiAJCQkJCWlmIChsYXRlbmN5X2xpbWl0KQ0KLQkJ CQkJCWZwcmludGYobG9nZmlsZSwgIiAlZCIsIGFnZy0+c2tpcHBlZCk7DQor CQkJCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFULCBhZ2ct PnNraXBwZWQpOw0KIAkJCQl9DQogCQkJCWZwdXRjKCdcbicsIGxvZ2ZpbGUp Ow0KIA0KLQkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGludGV2YWwgKi8NCi0J CQkJYWdnLT5zdGFydF90aW1lID0gYWdnLT5zdGFydF90aW1lICsgYWdnX2lu dGVydmFsOw0KKwkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGludGVydmFsICov DQorCQkJCWFnZy0+c3RhcnRfdGltZSArPSBhZ2dfaW50ZXJ2YWw7DQogDQog CQkJCS8qIHJlc2V0IGZvciAibm8gdHJhbnNhY3Rpb24iIGludGVydmFscyAq Lw0KLQkJCQlhZ2ctPmNudCA9IDA7DQotCQkJCWFnZy0+c2tpcHBlZCA9IDA7 DQotCQkJCWFnZy0+bWluX2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ctPm1heF9s YXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5zdW1fbGF0ZW5jeSA9IDA7DQotCQkJ CWFnZy0+c3VtMl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5taW5fbGFnID0g MDsNCi0JCQkJYWdnLT5tYXhfbGFnID0gMDsNCi0JCQkJYWdnLT5zdW1fbGFn ID0gMDsNCi0JCQkJYWdnLT5zdW0yX2xhZyA9IDA7DQorCQkJCWluaXRTdGF0 cyhhZ2csIDAuMCk7DQogCQkJfQ0KIA0KIAkJCS8qIHJlc2V0IHRoZSB2YWx1 ZXMgdG8gaW5jbHVkZSBvbmx5IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAq Lw0KLQkJCWFnZy0+Y250ID0gMTsNCi0JCQlhZ2ctPnNraXBwZWQgPSBza2lw cGVkID8gMSA6IDA7DQotCQkJYWdnLT5taW5fbGF0ZW5jeSA9IGxhdGVuY3k7 DQotCQkJYWdnLT5tYXhfbGF0ZW5jeSA9IGxhdGVuY3k7DQotCQkJYWdnLT5z dW1fbGF0ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRlbmN5Ow0KLQkJCWFn Zy0+c3VtMl9sYXRlbmN5ID0gc2tpcHBlZCA/IDAuMCA6IGxhdGVuY3kgKiBs YXRlbmN5Ow0KLQkJCWFnZy0+bWluX2xhZyA9IGxhZzsNCi0JCQlhZ2ctPm1h eF9sYWcgPSBsYWc7DQotCQkJYWdnLT5zdW1fbGFnID0gbGFnOw0KLQkJCWFn Zy0+c3VtMl9sYWcgPSBsYWcgKiBsYWc7DQorCQkJZG9TdGF0cyhhZ2csIHNr aXBwZWQsIGxhdGVuY3ksIGxhZyk7DQogCQl9DQogCX0NCiAJZWxzZQ0KQEAg LTE4MzIsMjEgKzE3OTUsMjEgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdn VmFscyAqYWdnLA0KIA0KIAkJLyogVGhpcyBpcyBtb3JlIHRoYW4gd2UgcmVh bGx5IG91Z2h0IHRvIGtub3cgYWJvdXQgaW5zdHJfdGltZSAqLw0KIAkJaWYg KHNraXBwZWQpDQotCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgc2tpcHBl ZCAlZCAlbGQgJWxkIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElO VDY0X0ZPUk1BVCAiIHNraXBwZWQgJWQgJWxkICVsZCIsDQogCQkJCQlzdC0+ aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwNCiAJCQkJCShsb25nKSBub3ct PnR2X3NlYywgKGxvbmcpIG5vdy0+dHZfdXNlYyk7DQogCQllbHNlDQotCQkJ ZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAlbGQgJWxkIiwNCisJ CQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYg JWQgJWxkICVsZCIsDQogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIGxhdGVuY3ks IHN0LT51c2VfZmlsZSwNCiAJCQkJCShsb25nKSBub3ctPnR2X3NlYywgKGxv bmcpIG5vdy0+dHZfdXNlYyk7DQogI2Vsc2UNCiANCiAJCS8qIE9uIFdpbmRv d3MsIGluc3RyX3RpbWUgZG9lc24ndCBwcm92aWRlIGEgdGltZXN0YW1wIGFu eXdheSAqLw0KIAkJaWYgKHNraXBwZWQpDQotCQkJZnByaW50Zihsb2dmaWxl LCAiJWQgJWQgc2tpcHBlZCAlZCAwIDAiLA0KKwkJCWZwcmludGYobG9nZmls ZSwgIiVkICJJTlQ2NF9GT1JNQVQiIHNraXBwZWQgJWQgMCAwIiwNCiAJCQkJ CXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlKTsNCiAJCWVsc2UNCi0J CQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAlZCAlLjBmICVkIDAgMCIsDQorCQkJ ZnByaW50Zihsb2dmaWxlLCAiJWQgIklOVDY0X0ZPUk1BVCIgJS4wZiAlZCAw IDAiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNl X2ZpbGUpOw0KICNlbmRpZg0KIAkJaWYgKHRocm90dGxlX2RlbGF5KQ0KQEAg LTE4NTUsNiArMTgxOCw0NCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dW YWxzICphZ2csDQogCX0NCiB9DQogDQorLyoNCisgKiBlbmQgb2YgdHJhbnNh Y3Rpb24gc3RhdGlzdGljcw0KKyAqLw0KK3N0YXRpYyB2b2lkDQorZG9UeFN0 YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpu b3csDQorCQkgIGJvb2wgc2tpcHBlZCwgRklMRSAqbG9nZmlsZSwgU3RhdHNE YXRhICphZ2cpDQorew0KKwlkb3VibGUgbGF0ZW5jeSA9IDAuMCwgbGFnID0g MC4wOw0KKw0KKwlpZiAoKCFza2lwcGVkIHx8IGFnZ19pbnRlcnZhbCkgJiYg SU5TVFJfVElNRV9JU19aRVJPKCpub3cpKQ0KKwkJSU5TVFJfVElNRV9TRVRf Q1VSUkVOVCgqbm93KTsNCisNCisJaWYgKCFza2lwcGVkKQ0KKwl7DQorCQkv KiBjb21wdXRlIGxhdGVuY3kgJiBsYWcgaWYgbmVlZGVkICovDQorCQlsYXRl bmN5ID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+dHhu X3NjaGVkdWxlZDsNCisJCWxhZyA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VD KHN0LT50eG5fYmVnaW4pIC0gc3QtPnR4bl9zY2hlZHVsZWQ7DQorCX0NCisN CisJaWYgKHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lf bGltaXQpDQorCXsNCisJCWRvU3RhdHMoJiB0aHJlYWQtPnN0YXRzLCBza2lw cGVkLCBsYXRlbmN5LCBsYWcpOw0KKw0KKwkJLyogcmVjb3JkIG92ZXIgdGhl IGxpbWl0IHRyYW5zYWN0aW9ucyBpZiBuZWVkZWQuICovDQorCQlpZiAobGF0 ZW5jeV9saW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkNCisJCQl0 aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOw0KKwl9DQorCWVsc2UNCisJCXRocmVh ZC0+c3RhdHMuY250ICsrOw0KKw0KKwlpZiAodXNlX2xvZykNCisJCWRvTG9n KHRocmVhZCwgc3QsIGxvZ2ZpbGUsIG5vdywgYWdnLCBza2lwcGVkLCBsYXRl bmN5LCBsYWcpOw0KKw0KKwlpZiAocGVyX3NjcmlwdF9zdGF0cykgLyogbXV0 ZXg/IGhtbW0uLi4gdGhlc2UgYXJlIG9ubHkgc3RhdGlzdGljcyAqLw0KKwkJ ZG9TdGF0cygmIHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5zdGF0cywgc2tp cHBlZCwgbGF0ZW5jeSwgbGFnKTsNCit9DQorDQorDQogLyogZGlzY2FyZCBj b25uZWN0aW9ucyAqLw0KIHN0YXRpYyB2b2lkDQogZGlzY29ubmVjdF9hbGwo Q1N0YXRlICpzdGF0ZSwgaW50IGxlbmd0aCkNCkBAIC0yNDc1LDcgKzI0NzYs NyBAQCByZWFkX2xpbmVfZnJvbV9maWxlKEZJTEUgKmZkKQ0KIAlyZXR1cm4g TlVMTDsNCiB9DQogDQotc3RhdGljIGludA0KK3N0YXRpYyBDb21tYW5kICoq DQogcHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIHsNCiAjZGVmaW5l IENPTU1BTkRTX0FMTE9DX05VTSAxMjgNCkBAIC0yNDg3LDEyICsyNDg4LDYg QEAgcHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIAljaGFyCSAgICpi dWY7DQogCWludAkJCWFsbG9jX251bTsNCiANCi0JaWYgKG51bV9maWxlcyA+ PSBNQVhfRklMRVMpDQotCXsNCi0JCWZwcmludGYoc3RkZXJyLCAiYXQgbW9z dCAlZCBTUUwgZmlsZXMgYXJlIGFsbG93ZWRcbiIsIE1BWF9GSUxFUyk7DQot CQlleGl0KDEpOw0KLQl9DQotDQogCWFsbG9jX251bSA9IENPTU1BTkRTX0FM TE9DX05VTTsNCiAJbXlfY29tbWFuZHMgPSAoQ29tbWFuZCAqKikgcGdfbWFs bG9jKHNpemVvZihDb21tYW5kICopICogYWxsb2NfbnVtKTsNCiANCkBAIC0y NTAzLDcgKzI0OTgsNyBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5hbWUp DQogCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIl c1wiOiAlc1xuIiwNCiAJCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7 DQogCQlwZ19mcmVlKG15X2NvbW1hbmRzKTsNCi0JCXJldHVybiBmYWxzZTsN CisJCXJldHVybiBOVUxMOw0KIAl9DQogDQogCWxpbmVubyA9IDA7DQpAQCAt MjUzNSwxMyArMjUzMCwxMSBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5h bWUpDQogDQogCW15X2NvbW1hbmRzW2luZGV4XSA9IE5VTEw7DQogDQotCXNx bF9maWxlc1tudW1fZmlsZXMrK10gPSBteV9jb21tYW5kczsNCi0NCi0JcmV0 dXJuIHRydWU7DQorCXJldHVybiBteV9jb21tYW5kczsNCiB9DQogDQogc3Rh dGljIENvbW1hbmQgKioNCi1wcm9jZXNzX2J1aWx0aW4oY2hhciAqdGIsIGNv bnN0IGNoYXIgKnNvdXJjZSkNCitwcm9jZXNzX2J1aWx0aW4oY29uc3QgY2hh ciAqdGIsIGNvbnN0IGNoYXIgKnNvdXJjZSkNCiB7DQogI2RlZmluZSBDT01N QU5EU19BTExPQ19OVU0gMTI4DQogDQpAQCAtMjU5NSwzNSArMjU4OCw1NCBA QCBwcm9jZXNzX2J1aWx0aW4oY2hhciAqdGIsIGNvbnN0IGNoYXIgKnNvdXJj ZSkNCiAJcmV0dXJuIG15X2NvbW1hbmRzOw0KIH0NCiANCitzdGF0aWMgdm9p ZA0KK2FkZFNjcmlwdChjb25zdCBjaGFyICpuYW1lLCBDb21tYW5kICoqIGNv bW1hbmRzLCBpbnQgd2VpZ2h0KQ0KK3sNCisJaWYgKGNvbW1hbmRzID09IE5V TEwpDQorCXsNCisJCWZwcmludGYoc3RkZXJyLCAiZW1wdHkgY29tbWFuZHMg Zm9yICVzIiwgbmFtZSk7DQorCQlleGl0KDEpOw0KKwl9DQorDQorCWlmIChu dW1fc2NyaXB0cyA+PSBNQVhfU0NSSVBUUykNCisJew0KKwkJZnByaW50Zihz dGRlcnIsICJhdCBtb3N0ICVkIFNRTCBzY3JpcHRzIGFyZSBhbGxvd2VkXG4i LCBNQVhfU0NSSVBUUyk7DQorCQlleGl0KDEpOw0KKwl9DQorDQorCXNxbF9z Y3JpcHRbbnVtX3NjcmlwdHNdLm5hbWUgPSBuYW1lOw0KKwlzcWxfc2NyaXB0 W251bV9zY3JpcHRzXS53ZWlnaHQgPSB3ZWlnaHQgPT0gMD8gMTogd2VpZ2h0 Ow0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5jb21tYW5kcyA9IGNvbW1h bmRzOw0KKwlpbml0U3RhdHMoJiBzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5z dGF0cywgMC4wKTsNCisJbnVtX3NjcmlwdHMrKzsNCit9DQorDQorc3RhdGlj IHZvaWQNCitwcmludFNpbXBsZVN0YXRzKGNoYXIgKnByZWZpeCwgU2ltcGxl U3RhdHMgKnNzKQ0KK3sNCisJLyogcHJpbnQgTmFOIGlmIG5vIHRyYW5zYWN0 aW9ucyB3aGVyZSBleGVjdXRlZCAqLw0KKwlkb3VibGUgbGF0ZW5jeSA9IHNz LT5zdW0gLyBzcy0+Y291bnQ7DQorCWRvdWJsZSBzdGRkZXYgPSBzcXJ0KHNz LT5zdW0yIC8gc3MtPmNvdW50IC0gbGF0ZW5jeSpsYXRlbmN5KTsNCisJcHJp bnRmKCIlcyBhdmVyYWdlID0gJS4zZiBtc1xuIiwgcHJlZml4LCAwLjAwMSAq IGxhdGVuY3kpOw0KKwlwcmludGYoIiVzIHN0ZGRldiA9ICUuM2YgbXNcbiIs IHByZWZpeCwgMC4wMDEgKiBzdGRkZXYpOw0KK30NCisNCiAvKiBwcmludCBv dXQgcmVzdWx0cyAqLw0KIHN0YXRpYyB2b2lkDQotcHJpbnRSZXN1bHRzKGlu dCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQot CQkJIFRTdGF0ZSAqdGhyZWFkcywgaW50IG50aHJlYWRzLA0KLQkJCSBpbnN0 cl90aW1lIHRvdGFsX3RpbWUsIGluc3RyX3RpbWUgY29ubl90b3RhbF90aW1l LA0KLQkJCSBpbnQ2NCB0b3RhbF9sYXRlbmNpZXMsIGludDY0IHRvdGFsX3Nx bGF0cywNCi0JCQkgaW50NjQgdGhyb3R0bGVfbGFnLCBpbnQ2NCB0aHJvdHRs ZV9sYWdfbWF4LA0KLQkJCSBpbnQ2NCB0aHJvdHRsZV9sYXRlbmN5X3NraXBw ZWQsIGludDY0IGxhdGVuY3lfbGF0ZSkNCitwcmludFJlc3VsdHMoVFN0YXRl ICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFs X3RpbWUsDQorCQkJIGluc3RyX3RpbWUgY29ubl90b3RhbF90aW1lLCBpbnQg bGF0ZW5jeV9sYXRlKQ0KIHsNCiAJZG91YmxlCQl0aW1lX2luY2x1ZGUsDQog CQkJCXRwc19pbmNsdWRlLA0KIAkJCQl0cHNfZXhjbHVkZTsNCi0JY2hhcgkg ICAqczsNCiANCiAJdGltZV9pbmNsdWRlID0gSU5TVFJfVElNRV9HRVRfRE9V QkxFKHRvdGFsX3RpbWUpOw0KLQl0cHNfaW5jbHVkZSA9IG5vcm1hbF94YWN0 cyAvIHRpbWVfaW5jbHVkZTsNCi0JdHBzX2V4Y2x1ZGUgPSBub3JtYWxfeGFj dHMgLyAodGltZV9pbmNsdWRlIC0NCisJdHBzX2luY2x1ZGUgPSB0b3RhbC0+ Y250IC8gdGltZV9pbmNsdWRlOw0KKwl0cHNfZXhjbHVkZSA9IHRvdGFsLT5j bnQgLyAodGltZV9pbmNsdWRlIC0NCiAJCQkJCQkoSU5TVFJfVElNRV9HRVRf RE9VQkxFKGNvbm5fdG90YWxfdGltZSkgLyBudGhyZWFkcykpOw0KIA0KLQlp ZiAodHR5cGUgPT0gMCkNCi0JCXMgPSAiVFBDLUIgKHNvcnQgb2YpIjsNCi0J ZWxzZSBpZiAodHR5cGUgPT0gMikNCi0JCXMgPSAiVXBkYXRlIG9ubHkgcGdi ZW5jaF9hY2NvdW50cyI7DQotCWVsc2UgaWYgKHR0eXBlID09IDEpDQotCQlz ID0gIlNFTEVDVCBvbmx5IjsNCi0JZWxzZQ0KLQkJcyA9ICJDdXN0b20gcXVl cnkiOw0KLQ0KLQlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVzXG4iLCBz KTsNCisJcHJpbnRmKCJ0cmFuc2FjdGlvbiB0eXBlOiAlc1xuIiwNCisJCSAg IG51bV9zY3JpcHRzID09IDE/IHNxbF9zY3JpcHRbMF0ubmFtZTogIm11bHRp cGxlIHNjcmlwdHMiKTsNCiAJcHJpbnRmKCJzY2FsaW5nIGZhY3RvcjogJWRc biIsIHNjYWxlKTsNCiAJcHJpbnRmKCJxdWVyeSBtb2RlOiAlc1xuIiwgUVVF UllNT0RFW3F1ZXJ5bW9kZV0pOw0KIAlwcmludGYoIm51bWJlciBvZiBjbGll bnRzOiAlZFxuIiwgbmNsaWVudHMpOw0KQEAgLTI2MzEsNDkgKzI2NDMsMzgg QEAgcHJpbnRSZXN1bHRzKGludCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3Rz LCBpbnQgbmNsaWVudHMsDQogCWlmIChkdXJhdGlvbiA8PSAwKQ0KIAl7DQog CQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDog JWRcbiIsIG54YWN0cyk7DQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2Fj dGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1BVCAiLyIg SU5UNjRfRk9STUFUICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3RzLCAoaW50 NjQpIG54YWN0cyAqIG5jbGllbnRzKTsNCisJCXByaW50ZigibnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICJJTlQ2NF9GT1JN QVQiLyVkXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQsIG54YWN0cyAqIG5jbGll bnRzKTsNCiAJfQ0KIAllbHNlDQogCXsNCiAJCXByaW50ZigiZHVyYXRpb246 ICVkIHNcbiIsIGR1cmF0aW9uKTsNCi0JCXByaW50ZigibnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFU ICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3RzKTsNCisJCXByaW50ZigibnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICJJTlQ2 NF9GT1JNQVQiXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQpOw0KIAl9DQogDQog CS8qIFJlbWFpbmluZyBzdGF0cyBhcmUgbm9uc2Vuc2ljYWwgaWYgd2UgZmFp bGVkIHRvIGV4ZWN1dGUgYW55IHhhY3RzICovDQotCWlmIChub3JtYWxfeGFj dHMgPD0gMCkNCisJaWYgKHRvdGFsLT5jbnQgPD0gMCkNCiAJCXJldHVybjsN CiANCiAJaWYgKHRocm90dGxlX2RlbGF5ICYmIGxhdGVuY3lfbGltaXQpDQot CQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZDogIiBJ TlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsDQotCQkJICAgdGhyb3R0bGVf bGF0ZW5jeV9za2lwcGVkLA0KLQkJCSAgIDEwMC4wICogdGhyb3R0bGVfbGF0 ZW5jeV9za2lwcGVkIC8gKHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCArIG5v cm1hbF94YWN0cykpOw0KKwkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHNraXBwZWQ6ICJJTlQ2NF9GT1JNQVQiICglLjNmICUlKVxuIiwNCisJ CQkgICB0b3RhbC0+c2tpcHBlZCwNCisJCQkgICAxMDAuMCAqIHRvdGFsLT5z a2lwcGVkIC8gKHRvdGFsLT5za2lwcGVkICsgdG90YWwtPmNudCkpOw0KIA0K IAlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCXByaW50ZigibnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5IGxpbWl0OiAi IElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwNCisJCXByaW50ZigibnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5 IGxpbWl0OiAlZCAoJS4zZiAlJSlcbiIsDQogCQkJICAgbGF0ZW5jeV9saW1p dCAvIDEwMDAuMCwgbGF0ZW5jeV9sYXRlLA0KLQkJICAgMTAwLjAgKiBsYXRl bmN5X2xhdGUgLyAodGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkICsgbm9ybWFs X3hhY3RzKSk7DQorCQkgICAxMDAuMCAqIGxhdGVuY3lfbGF0ZSAvICh0b3Rh bC0+c2tpcHBlZCArIHRvdGFsLT5jbnQpKTsNCiANCiAJaWYgKHRocm90dGxl X2RlbGF5IHx8IHByb2dyZXNzIHx8IGxhdGVuY3lfbGltaXQpDQotCXsNCi0J CS8qIGNvbXB1dGUgYW5kIHNob3cgbGF0ZW5jeSBhdmVyYWdlIGFuZCBzdGFu ZGFyZCBkZXZpYXRpb24gKi8NCi0JCWRvdWJsZQkJbGF0ZW5jeSA9IDAuMDAx ICogdG90YWxfbGF0ZW5jaWVzIC8gbm9ybWFsX3hhY3RzOw0KLQkJZG91Ymxl CQlzcWxhdCA9IChkb3VibGUpIHRvdGFsX3NxbGF0cyAvIG5vcm1hbF94YWN0 czsNCi0NCi0JCXByaW50ZigibGF0ZW5jeSBhdmVyYWdlOiAlLjNmIG1zXG4i DQotCQkJICAgImxhdGVuY3kgc3RkZGV2OiAlLjNmIG1zXG4iLA0KLQkJCSAg IGxhdGVuY3ksIDAuMDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxh dGVuY3kgKiBsYXRlbmN5KSk7DQotCX0NCisJCXByaW50U2ltcGxlU3RhdHMo ImxhdGVuY3kiLCAmIHRvdGFsLT5sYXRlbmN5KTsNCiAJZWxzZQ0KLQl7DQog CQkvKiBvbmx5IGFuIGF2ZXJhZ2UgbGF0ZW5jeSBjb21wdXRlZCBmcm9tIHRo ZSBkdXJhdGlvbiBpcyBhdmFpbGFibGUgKi8NCiAJCXByaW50ZigibGF0ZW5j eSBhdmVyYWdlOiAlLjNmIG1zXG4iLA0KLQkJCSAgIDEwMDAuMCAqIGR1cmF0 aW9uICogbmNsaWVudHMgLyBub3JtYWxfeGFjdHMpOw0KLQl9DQorCQkJICAg MTAwMC4wICogZHVyYXRpb24gKiBuY2xpZW50cyAvIHRvdGFsLT5jbnQpOw0K IA0KIAlpZiAodGhyb3R0bGVfZGVsYXkpDQotCXsNCiAJCS8qDQogCQkgKiBS ZXBvcnQgYXZlcmFnZSB0cmFuc2FjdGlvbiBsYWcgdW5kZXIgcmF0ZSBsaW1p dCB0aHJvdHRsaW5nLiAgVGhpcw0KIAkJICogaXMgdGhlIGRlbGF5IGJldHdl ZW4gc2NoZWR1bGVkIGFuZCBhY3R1YWwgc3RhcnQgdGltZXMgZm9yIHRoZQ0K QEAgLTI2ODEsMjcgKzI2ODIsNTAgQEAgcHJpbnRSZXN1bHRzKGludCB0dHlw ZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQogCQkgKiB0 aGUgZGF0YWJhc2UgbG9hZCwgb3IgdGhlIFBvaXNzb24gdGhyb3R0bGluZyBw cm9jZXNzLg0KIAkJICovDQogCQlwcmludGYoInJhdGUgbGltaXQgc2NoZWR1 bGUgbGFnOiBhdmcgJS4zZiAobWF4ICUuM2YpIG1zXG4iLA0KLQkJCSAgIDAu MDAxICogdGhyb3R0bGVfbGFnIC8gbm9ybWFsX3hhY3RzLCAwLjAwMSAqIHRo cm90dGxlX2xhZ19tYXgpOw0KLQl9DQorCQkJICAgMC4wMDEgKiB0b3RhbC0+ bGFnLnN1bSAvIHRvdGFsLT5jbnQsIDAuMDAxICogdG90YWwtPmxhZy5tYXgp Ow0KIA0KIAlwcmludGYoInRwcyA9ICVmIChpbmNsdWRpbmcgY29ubmVjdGlv bnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2luY2x1ZGUpOw0KIAlwcmludGYo InRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5n KVxuIiwgdHBzX2V4Y2x1ZGUpOw0KIA0KKwkvKiBSZXBvcnQgcGVyLWZpbGUg ZGF0YSAqLw0KKwlpZiAocGVyX3NjcmlwdF9zdGF0cykNCisJew0KKwkJaW50 IGk7DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3NjcmlwdHM7IGkrKykN CisJCXsNCisJCQlwcmludGYoIlNRTCBzY3JpcHQgJWQsIHdlaWdodCAlZDog JXNcbiINCisJCQkJICAgIiAtICJJTlQ2NF9GT1JNQVQiIHRyYW5zYWN0aW9u cyAoJS4xZiUlIG9mIHRvdGFsLCB0cHMgPSAlZilcbiIsDQorCQkJCSAgIGks IHNxbF9zY3JpcHRbaV0ud2VpZ2h0LCBzcWxfc2NyaXB0W2ldLm5hbWUsDQor CQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250LA0KKwkJCQkgICAxMDAu MCAqIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250IC8gdG90YWwtPmNudCwNCisJ CQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0aW1lX2luY2x1ZGUp Ow0KKw0KKwkJCWlmIChsYXRlbmN5X2xpbWl0KQ0KKwkJCQlwcmludGYoIiAt IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZDogIklOVDY0X0ZPUk1B VCIgKCUuM2YlJSlcbiIsDQorCQkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRz LnNraXBwZWQsDQorCQkJCQkgICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3Rh dHMuc2tpcHBlZCAvDQorCQkJCQkgICAoc3FsX3NjcmlwdFtpXS5zdGF0cy5z a2lwcGVkICsgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQpKTsNCisNCisJCQlw cmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJiBzcWxfc2NyaXB0W2ld LnN0YXRzLmxhdGVuY3kpOw0KKwkJfQ0KKwl9DQorDQogCS8qIFJlcG9ydCBw ZXItY29tbWFuZCBsYXRlbmNpZXMgKi8NCiAJaWYgKGlzX2xhdGVuY2llcykN CiAJew0KIAkJaW50CQkJaTsNCiANCi0JCWZvciAoaSA9IDA7IGkgPCBudW1f ZmlsZXM7IGkrKykNCisJCWZvciAoaSA9IDA7IGkgPCBudW1fc2NyaXB0czsg aSsrKQ0KIAkJew0KIAkJCUNvbW1hbmQgICAqKmNvbW1hbmRzOw0KIA0KLQkJ CWlmIChudW1fZmlsZXMgPiAxKQ0KKwkJCWlmIChudW1fc2NyaXB0cyA+IDEp DQogCQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNl Y29uZHMsIGZpbGUgJWQ6XG4iLCBpICsgMSk7DQogCQkJZWxzZQ0KIAkJCQlw cmludGYoInN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOlxu Iik7DQogDQotCQkJZm9yIChjb21tYW5kcyA9IHNxbF9maWxlc1tpXTsgKmNv bW1hbmRzICE9IE5VTEw7IGNvbW1hbmRzKyspDQorCQkJZm9yIChjb21tYW5k cyA9IHNxbF9zY3JpcHRbaV0uY29tbWFuZHM7ICpjb21tYW5kcyAhPSBOVUxM OyBjb21tYW5kcysrKQ0KIAkJCXsNCiAJCQkJQ29tbWFuZCAgICAqY29tbWFu ZCA9ICpjb21tYW5kczsNCiAJCQkJaW50CQkJY251bSA9IGNvbW1hbmQtPmNv bW1hbmRfbnVtOw0KQEAgLTI3MzksNiArMjc2Myw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQ0KIHsNCiAJc3RhdGljIHN0cnVjdCBvcHRpb24g bG9uZ19vcHRpb25zW10gPSB7DQogCQkvKiBzeXN0ZW1hdGljIGxvbmcvc2hv cnQgbmFtZWQgb3B0aW9ucyAqLw0KKwkJeyJ0cGMtYiIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAnQid9LA0KIAkJeyJjbGllbnQiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgJ2MnfSwNCiAJCXsiY29ubmVjdCIsIG5vX2FyZ3VtZW50LCBO VUxMLCAnQyd9LA0KIAkJeyJkZWJ1ZyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn ZCd9LA0KQEAgLTI3NDksMTIgKzI3NzQsMTQgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogCQl7ImluaXRpYWxpemUiLCBub19hcmd1bWVudCwg TlVMTCwgJ2knfSwNCiAJCXsiam9icyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnaid9LA0KIAkJeyJsb2ciLCBub19hcmd1bWVudCwgTlVMTCwgJ2wn fSwNCisJCXsibGF0ZW5jeS1saW1pdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnTCd9LA0KIAkJeyJuby12YWN1dW0iLCBub19hcmd1bWVudCwgTlVM TCwgJ24nfSwNCiAJCXsicG9ydCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAncCd9LA0KIAkJeyJwcm9ncmVzcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnUCd9LA0KIAkJeyJwcm90b2NvbCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnTSd9LA0KIAkJeyJxdWlldCIsIG5vX2FyZ3VtZW50LCBOVUxM LCAncSd9LA0KIAkJeyJyZXBvcnQtbGF0ZW5jaWVzIiwgbm9fYXJndW1lbnQs IE5VTEwsICdyJ30sDQorCQl7InJhdGUiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ1InfSwNCiAJCXsic2NhbGUiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ3MnfSwNCiAJCXsic2VsZWN0LW9ubHkiLCBub19hcmd1bWVudCwg TlVMTCwgJ1MnfSwNCiAJCXsic2tpcC1zb21lLXVwZGF0ZXMiLCBub19hcmd1 bWVudCwgTlVMTCwgJ04nfSwNCkBAIC0yNzYyLDYgKzI3ODksNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsidHJhbnNhY3Rpb25zIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd0J30sDQogCQl7InVzZXJuYW1l IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdVJ30sDQogCQl7InZhY3V1 bS1hbGwiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwNCisJCXsid2VpZ2h0 IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd3J30sDQogCQkvKiBsb25n LW5hbWVkIG9ubHkgb3B0aW9ucyAqLw0KIAkJeyJmb3JlaWduLWtleXMiLCBu b19hcmd1bWVudCwgJmZvcmVpZ25fa2V5cywgMX0sDQogCQl7ImluZGV4LXRh Ymxlc3BhY2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgM30sDQpAQCAt Mjc2OSwyNSArMjc5NywyMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikNCiAJCXsidW5sb2dnZWQtdGFibGVzIiwgbm9fYXJndW1lbnQsICZ1bmxv Z2dlZF90YWJsZXMsIDF9LA0KIAkJeyJzYW1wbGluZy1yYXRlIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDR9LA0KIAkJeyJhZ2dyZWdhdGUtaW50ZXJ2 YWwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNX0sDQotCQl7InJhdGUi LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwNCi0JCXsibGF0ZW5j eS1saW1pdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnTCd9LA0KKwkJ eyJwZXItc2NyaXB0LXN0YXRzIiwgbm9fYXJndW1lbnQsIE5VTEwsIDZ9LA0K IAkJe05VTEwsIDAsIE5VTEwsIDB9DQogCX07DQogDQogCWludAkJCWM7DQot CWludAkJCW5jbGllbnRzID0gMTsJLyogZGVmYXVsdCBudW1iZXIgb2Ygc2lt dWxhdGVkIGNsaWVudHMgKi8NCi0JaW50CQkJbnRocmVhZHMgPSAxOwkvKiBk ZWZhdWx0IG51bWJlciBvZiB0aHJlYWRzICovDQogCWludAkJCWlzX2luaXRf bW9kZSA9IDA7CQkvKiBpbml0aWFsaXplIG1vZGU/ICovDQogCWludAkJCWlz X25vX3ZhY3V1bSA9IDA7CQkvKiBubyB2YWN1dW0gYXQgYWxsIGJlZm9yZSB0 ZXN0aW5nPyAqLw0KIAlpbnQJCQlkb192YWN1dW1fYWNjb3VudHMgPSAwOyAv KiBkbyB2YWN1dW0gYWNjb3VudHMgYmVmb3JlIHRlc3Rpbmc/ICovDQotCWlu dAkJCXR0eXBlID0gMDsJCS8qIHRyYW5zYWN0aW9uIHR5cGUuIDA6IFRQQy1C LCAxOiBTRUxFQ1Qgb25seSwNCi0JCQkJCQkJCSAqIDI6IHNraXAgdXBkYXRl IG9mIGJyYW5jaGVzIGFuZCB0ZWxsZXJzICovDQogCWludAkJCW9wdGluZGV4 Ow0KLQljaGFyCSAgICpmaWxlbmFtZSA9IE5VTEw7DQogCWJvb2wJCXNjYWxl X2dpdmVuID0gZmFsc2U7DQogDQogCWJvb2wJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gZmFsc2U7DQogCWJvb2wJCWluaXRpYWxpemF0aW9uX29wdGlv bl9zZXQgPSBmYWxzZTsNCisJYm9vbAkJaW50ZXJuYWxfc2NyaXB0X3VzZWQg PSBmYWxzZTsNCiANCiAJQ1N0YXRlCSAgICpzdGF0ZTsJCQkvKiBzdGF0dXMg b2YgY2xpZW50cyAqLw0KIAlUU3RhdGUJICAgKnRocmVhZHM7CQkvKiBhcnJh eSBvZiB0aHJlYWQgKi8NCkBAIC0yNzk1LDE0ICsyODE4LDEwIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlpbnN0cl90aW1lCXN0YXJ0X3Rp bWU7CQkvKiBzdGFydCB1cCB0aW1lICovDQogCWluc3RyX3RpbWUJdG90YWxf dGltZTsNCiAJaW5zdHJfdGltZQljb25uX3RvdGFsX3RpbWU7DQotCWludDY0 CQl0b3RhbF94YWN0cyA9IDA7DQotCWludDY0CQl0b3RhbF9sYXRlbmNpZXMg PSAwOw0KLQlpbnQ2NAkJdG90YWxfc3FsYXRzID0gMDsNCi0JaW50NjQJCXRo cm90dGxlX2xhZyA9IDA7DQotCWludDY0CQl0aHJvdHRsZV9sYWdfbWF4ID0g MDsNCi0JaW50NjQJCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCA9IDA7DQog CWludDY0CQlsYXRlbmN5X2xhdGUgPSAwOw0KKwlTdGF0c0RhdGEJc3RhdHM7 DQogDQorCWludAkJCXdlaWdodCA9IDA7ICAgICAvKiAwIG1lYW5zIHVuc2V0 LCB3aWxsIGRlZmF1bHQgdG8gMSAqLw0KIAlpbnQJCQlpOw0KIAlpbnQJCQlu Y2xpZW50c19kZWFsdDsNCiANCkBAIC0yODQ3LDcgKzI4NjYsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJc3RhdGUgPSAoQ1N0YXRlICop IHBnX21hbGxvYyhzaXplb2YoQ1N0YXRlKSk7DQogCW1lbXNldChzdGF0ZSwg MCwgc2l6ZW9mKENTdGF0ZSkpOw0KIA0KLQl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiaWg6bnZwOmRxU05jOmo6Q3JzOnQ6VDpVOmxm OkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0g LTEpDQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJp aDpudnA6ZHFCU053OmM6ajpDcnM6dDpUOlU6bGY6RDpGOk06UDpSOkw6Iiwg bG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkNCiAJew0KIAkJc3dp dGNoIChjKQ0KIAkJew0KQEAgLTI4NjksMTQgKzI4ODgsNiBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQljYXNlICdkJzoNCiAJCQkJZGVi dWcrKzsNCiAJCQkJYnJlYWs7DQotCQkJY2FzZSAnUyc6DQotCQkJCXR0eXBl ID0gMTsNCi0JCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0K LQkJCQlicmVhazsNCi0JCQljYXNlICdOJzoNCi0JCQkJdHR5cGUgPSAyOw0K LQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQotCQkJCWJy ZWFrOw0KIAkJCWNhc2UgJ2MnOg0KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9u X3NldCA9IHRydWU7DQogCQkJCW5jbGllbnRzID0gYXRvaShvcHRhcmcpOw0K QEAgLTI5NzksMTIgKzI5OTAsNDIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCQkJCWluaXRpYWxpemF0aW9uX29wdGlvbl9zZXQgPSB0cnVl Ow0KIAkJCQl1c2VfcXVpZXQgPSB0cnVlOw0KIAkJCQlicmVhazsNCisJCQkJ Lyogd2hhdCB0byBydW4qLw0KIAkJCWNhc2UgJ2YnOg0KKwkJCQlhZGRTY3Jp cHQob3B0YXJnLCBwcm9jZXNzX2ZpbGUob3B0YXJnKSwgd2VpZ2h0KTsNCisJ CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJCQl3ZWln aHQgPSAwOw0KKwkJCQlicmVhazsNCisJCQljYXNlICdCJzoNCisJCQkJYWRk U2NyaXB0KGJfYmVuY2gsIHByb2Nlc3NfYnVpbHRpbih0cGNfYiwgYl9iZW5j aCksIHdlaWdodCk7DQogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0g dHJ1ZTsNCi0JCQkJdHR5cGUgPSAzOw0KLQkJCQlmaWxlbmFtZSA9IHBnX3N0 cmR1cChvcHRhcmcpOw0KLQkJCQlpZiAocHJvY2Vzc19maWxlKGZpbGVuYW1l KSA9PSBmYWxzZSB8fCAqc3FsX2ZpbGVzW251bV9maWxlcyAtIDFdID09IE5V TEwpDQorCQkJCWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCisJCQkJ d2VpZ2h0ID0gMDsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAnUyc6DQorCQkJ CWFkZFNjcmlwdChzX2JlbmNoLCBwcm9jZXNzX2J1aWx0aW4oc2VsZWN0X29u bHksIHNfYmVuY2gpLCB3ZWlnaHQpOw0KKwkJCQliZW5jaG1hcmtpbmdfb3B0 aW9uX3NldCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91c2VkID0g dHJ1ZTsNCisJCQkJd2VpZ2h0ID0gMDsNCisJCQkJYnJlYWs7DQorCQkJY2Fz ZSAnTic6DQorCQkJCWFkZFNjcmlwdChuX2JlbmNoLCBwcm9jZXNzX2J1aWx0 aW4oc2ltcGxlX3VwZGF0ZSwgbl9iZW5jaCksIHdlaWdodCk7DQorCQkJCWJl bmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50ZXJuYWxf c2NyaXB0X3VzZWQgPSB0cnVlOw0KKwkJCQl3ZWlnaHQgPSAwOw0KKwkJCQli cmVhazsNCisJCQljYXNlICd3JzoNCisJCQkJaWYgKHdlaWdodCAhPSAwKQ0K KwkJCQl7DQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIndlaWdodCBzZXQgdG8g XCIlc1wiIGJ1dCB1bnVzZWQgcHJpb3Igc2V0IHZhbHVlICglZClcbiIsIG9w dGFyZywgd2VpZ2h0KTsNCisJCQkJCWV4aXQoMSk7DQorCQkJCX0NCisJCQkJ d2VpZ2h0ID0gYXRvaShvcHRhcmcpOw0KKwkJCQlpZiAod2VpZ2h0IDw9IDAp DQorCQkJCXsNCisJCQkJCWZwcmludGYoc3RkZXJyLAkiaW52YWxpZCB3ZWln aHQgdmFsdWU6IFwiJXNcIlxuIiwgb3B0YXJnKTsNCiAJCQkJCWV4aXQoMSk7 DQorCQkJCX0NCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAnRCc6DQogCQkJCXsN CkBAIC0zMDE1LDcgKzMwNTYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikNCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAnTSc6DQogCQkJCWJlbmNo bWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJaWYgKG51bV9maWxl cyA+IDApDQorCQkJCWlmIChudW1fc2NyaXB0cyA+IDApDQogCQkJCXsNCiAJ CQkJCWZwcmludGYoc3RkZXJyLCAicXVlcnkgbW9kZSAoLU0pIHNob3VsZCBi ZSBzcGVjaWZpZWQgYmVmb3JlIGFueSB0cmFuc2FjdGlvbiBzY3JpcHRzICgt ZilcbiIpOw0KIAkJCQkJZXhpdCgxKTsNCkBAIC0zMTA3LDYgKzMxNDgsOSBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQkJfQ0KICNlbmRp Zg0KIAkJCQlicmVhazsNCisJCQljYXNlIDY6DQorCQkJCXBlcl9zY3JpcHRf c3RhdHMgPSB0cnVlOw0KKwkJCQlicmVhazsNCiAJCQlkZWZhdWx0Og0KIAkJ CQlmcHJpbnRmKHN0ZGVyciwgXygiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1v cmUgaW5mb3JtYXRpb24uXG4iKSwgcHJvZ25hbWUpOw0KIAkJCQlleGl0KDEp Ow0KQEAgLTMxMTQsNiArMzE1OCwyNCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikNCiAJCX0NCiAJfQ0KIA0KKwlpZiAod2VpZ2h0ICE9IDApDQor CXsNCisJCWZwcmludGYoc3RkZXJyLCAidW51c2VkIHdlaWdodCBzZXQgdG8g JWRcbiIsIHdlaWdodCk7DQorCQlleGl0ICgxKTsNCisJfQ0KKw0KKwkvKiBz ZXQgZGVmYXVsdCBzY3JpcHQgaWYgbm9uZSAqLw0KKwlpZiAobnVtX3Njcmlw dHMgPT0gMCAmJiAhaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCkNCisJew0K KwkJYWRkU2NyaXB0KGJfYmVuY2gsIHByb2Nlc3NfYnVpbHRpbih0cGNfYiwg Yl9iZW5jaCksIDEpOw0KKwkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0 cnVlOw0KKwkJaW50ZXJuYWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KKwl9DQor DQorCS8qIGNvbXB1dGUgdG90YWxfd2VpZ2h0ICovDQorCWZvciAoaSA9IDA7 IGkgPCBudW1fc2NyaXB0czsgaSsrKQ0KKwkJdG90YWxfd2VpZ2h0ICs9IHNx bF9zY3JpcHRbaV0ud2VpZ2h0Ow0KKw0KIAkvKg0KIAkgKiBEb24ndCBuZWVk IG1vcmUgdGhyZWFkcyB0aGFuIHRoZXJlIGFyZSBjbGllbnRzLiAgKFRoaXMg aXMgbm90IG1lcmVseSBhbg0KIAkgKiBvcHRpbWl6YXRpb247IHRocm90dGxl X2RlbGF5IGlzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgYmVsb3cgaWYgc29t ZQ0KQEAgLTMxOTgsOCArMzI2MCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KIAkgKiBjaGFuZ2VkIGFmdGVyIGZvcmsuDQogCSAqLw0KIAlt YWluX3BpZCA9IChpbnQpIGdldHBpZCgpOw0KLQlwcm9ncmVzc19uY2xpZW50 cyA9IG5jbGllbnRzOw0KLQlwcm9ncmVzc19udGhyZWFkcyA9IG50aHJlYWRz Ow0KIA0KIAlpZiAobmNsaWVudHMgPiAxKQ0KIAl7DQpAQCAtMzI0Miw3ICsz MzAyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQlleGl0 KDEpOw0KIAl9DQogDQotCWlmICh0dHlwZSAhPSAzKQ0KKwlpZiAoaW50ZXJu YWxfc2NyaXB0X3VzZWQpDQogCXsNCiAJCS8qDQogCQkgKiBnZXQgdGhlIHNj YWxpbmcgZmFjdG9yIHRoYXQgc2hvdWxkIGJlIHNhbWUgYXMgY291bnQoKikg ZnJvbQ0KQEAgLTMzMTksMzEgKzMzNzksNiBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90 aW1lKTsNCiAJc3JhbmRvbSgodW5zaWduZWQgaW50KSBJTlNUUl9USU1FX0dF VF9NSUNST1NFQyhzdGFydF90aW1lKSk7DQogDQotCS8qIHByb2Nlc3MgYnVp bHRpbiBTUUwgc2NyaXB0cyAqLw0KLQlzd2l0Y2ggKHR0eXBlKQ0KLQl7DQot CQljYXNlIDA6DQotCQkJc3FsX2ZpbGVzWzBdID0gcHJvY2Vzc19idWlsdGlu KHRwY19iLA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IFRQQy1CIChzb3J0 IG9mKT4iKTsNCi0JCQludW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0K LQkJY2FzZSAxOg0KLQkJCXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRp bihzZWxlY3Rfb25seSwNCi0JCQkJCQkJCQkJICAgIjxidWlsdGluOiBzZWxl Y3Qgb25seT4iKTsNCi0JCQludW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0K LQ0KLQkJY2FzZSAyOg0KLQkJCXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVp bHRpbihzaW1wbGVfdXBkYXRlLA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46 IHNpbXBsZSB1cGRhdGU+Iik7DQotCQkJbnVtX2ZpbGVzID0gMTsNCi0JCQli cmVhazsNCi0NCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCX0NCi0NCiAJ Lyogc2V0IHVwIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgKi8NCiAJdGhyZWFk cyA9IChUU3RhdGUgKikgcGdfbWFsbG9jKHNpemVvZihUU3RhdGUpICogbnRo cmVhZHMpOw0KIAluY2xpZW50c19kZWFsdCA9IDA7DQpAQCAtMzM1OSw4ICsz Mzk0LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl0aHJl YWQtPnJhbmRvbV9zdGF0ZVswXSA9IHJhbmRvbSgpOw0KIAkJdGhyZWFkLT5y YW5kb21fc3RhdGVbMV0gPSByYW5kb20oKTsNCiAJCXRocmVhZC0+cmFuZG9t X3N0YXRlWzJdID0gcmFuZG9tKCk7DQotCQl0aHJlYWQtPnRocm90dGxlX2xh dGVuY3lfc2tpcHBlZCA9IDA7DQogCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSA9 IDA7DQorCQlpbml0U3RhdHMoJiB0aHJlYWQtPnN0YXRzLCAwLjApOw0KIA0K IAkJbmNsaWVudHNfZGVhbHQgKz0gdGhyZWFkLT5uc3RhdGU7DQogDQpAQCAt MzQyNywxMSArMzQ2MiwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikNCiAjZW5kaWYgICAvKiBFTkFCTEVfVEhSRUFEX1NBRkVUWSAqLw0KIA0K IAkvKiB3YWl0IGZvciB0aHJlYWRzIGFuZCBhY2N1bXVsYXRlIHJlc3VsdHMg Ki8NCisJaW5pdFN0YXRzKCYgc3RhdHMsIDAuMCk7DQogCUlOU1RSX1RJTUVf U0VUX1pFUk8oY29ubl90b3RhbF90aW1lKTsNCiAJZm9yIChpID0gMDsgaSA8 IG50aHJlYWRzOyBpKyspDQogCXsNCiAJCVRTdGF0ZQkgICAqdGhyZWFkID0g JnRocmVhZHNbaV07DQotCQlpbnQJCQlqOw0KIA0KICNpZmRlZiBFTkFCTEVf VEhSRUFEX1NBRkVUWQ0KIAkJaWYgKHRocmVhZHNbaV0udGhyZWFkID09IElO VkFMSURfVEhSRUFEKQ0KQEAgLTM0NDQsMjEgKzM0NzksMTMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkodm9pZCkgdGhyZWFkUnVuKHRo cmVhZCk7DQogI2VuZGlmICAgLyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8N CiANCi0JCS8qIHRocmVhZCBsZXZlbCBzdGF0cyAqLw0KLQkJdGhyb3R0bGVf bGFnICs9IHRocmVhZC0+dGhyb3R0bGVfbGFnOw0KLQkJdGhyb3R0bGVfbGF0 ZW5jeV9za2lwcGVkID0gdGhyZWFkcy0+dGhyb3R0bGVfbGF0ZW5jeV9za2lw cGVkOw0KLQkJbGF0ZW5jeV9sYXRlID0gdGhyZWFkLT5sYXRlbmN5X2xhdGU7 DQotCQlpZiAodGhyb3R0bGVfbGFnX21heCA+IHRocmVhZC0+dGhyb3R0bGVf bGFnX21heCkNCi0JCQl0aHJvdHRsZV9sYWdfbWF4ID0gdGhyZWFkLT50aHJv dHRsZV9sYWdfbWF4Ow0KKwkJLyogYWdncmVnYXRlIHRocmVhZCBsZXZlbCBz dGF0cyAqLw0KKwkJYXBwZW5kU2ltcGxlU3RhdHMoJiBzdGF0cy5sYXRlbmN5 LCAmIHRocmVhZC0+c3RhdHMubGF0ZW5jeSk7DQorCQlhcHBlbmRTaW1wbGVT dGF0cygmIHN0YXRzLmxhZywgJiB0aHJlYWQtPnN0YXRzLmxhZyk7DQorCQlz dGF0cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7DQorCQlzdGF0cy5za2lw cGVkICs9IHRocmVhZC0+c3RhdHMuc2tpcHBlZDsNCisJCWxhdGVuY3lfbGF0 ZSArPSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsNCiAJCUlOU1RSX1RJTUVfQURE KGNvbm5fdG90YWxfdGltZSwgdGhyZWFkLT5jb25uX3RpbWUpOw0KLQ0KLQkJ LyogY2xpZW50LWxldmVsIHN0YXRzICovDQotCQlmb3IgKGogPSAwOyBqIDwg dGhyZWFkLT5uc3RhdGU7IGorKykNCi0JCXsNCi0JCQl0b3RhbF94YWN0cyAr PSB0aHJlYWQtPnN0YXRlW2pdLmNudDsNCi0JCQl0b3RhbF9sYXRlbmNpZXMg Kz0gdGhyZWFkLT5zdGF0ZVtpXS50eG5fbGF0ZW5jaWVzOw0KLQkJCXRvdGFs X3NxbGF0cyArPSB0aHJlYWQtPnN0YXRlW2ldLnR4bl9zcWxhdHM7DQotCQl9 DQogCX0NCiAJZGlzY29ubmVjdF9hbGwoc3RhdGUsIG5jbGllbnRzKTsNCiAN CkBAIC0zNDc0LDEwICszNTAxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCSAqLw0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRvdGFs X3RpbWUpOw0KIAlJTlNUUl9USU1FX1NVQlRSQUNUKHRvdGFsX3RpbWUsIHN0 YXJ0X3RpbWUpOw0KLQlwcmludFJlc3VsdHModHR5cGUsIHRvdGFsX3hhY3Rz LCBuY2xpZW50cywgdGhyZWFkcywgbnRocmVhZHMsDQotCQkJCSB0b3RhbF90 aW1lLCBjb25uX3RvdGFsX3RpbWUsIHRvdGFsX2xhdGVuY2llcywgdG90YWxf c3FsYXRzLA0KLQkJCQkgdGhyb3R0bGVfbGFnLCB0aHJvdHRsZV9sYWdfbWF4 LCB0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQsDQotCQkJCSBsYXRlbmN5X2xh dGUpOw0KKwlwcmludFJlc3VsdHModGhyZWFkcywgJnN0YXRzLCB0b3RhbF90 aW1lLCBjb25uX3RvdGFsX3RpbWUsIGxhdGVuY3lfbGF0ZSk7DQogDQogCXJl dHVybiAwOw0KIH0NCkBAIC0zNDk4LDEzICszNTIyLDcgQEAgdGhyZWFkUnVu KHZvaWQgKmFyZykNCiAJaW50NjQJCXRocmVhZF9zdGFydCA9IElOU1RSX1RJ TUVfR0VUX01JQ1JPU0VDKHRocmVhZC0+c3RhcnRfdGltZSk7DQogCWludDY0 CQlsYXN0X3JlcG9ydCA9IHRocmVhZF9zdGFydDsNCiAJaW50NjQJCW5leHRf cmVwb3J0ID0gbGFzdF9yZXBvcnQgKyAoaW50NjQpIHByb2dyZXNzICogMTAw MDAwMDsNCi0JaW50NjQJCWxhc3RfY291bnQgPSAwLA0KLQkJCQlsYXN0X2xh dHMgPSAwLA0KLQkJCQlsYXN0X3NxbGF0cyA9IDAsDQotCQkJCWxhc3RfbGFn cyA9IDAsDQotCQkJCWxhc3Rfc2tpcHBlZCA9IDA7DQotDQotCUFnZ1ZhbHMJ CWFnZ3M7DQorCVN0YXRzRGF0YQlsYXN0LCBhZ2dzOw0KIA0KIAkvKg0KIAkg KiBJbml0aWFsaXplIHRocm90dGxpbmcgcmF0ZSB0YXJnZXQgZm9yIGFsbCBv ZiB0aGUgdGhyZWFkJ3MgY2xpZW50cy4gIEl0DQpAQCAtMzUxNCw4ICszNTMy LDYgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJICovDQogCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQoc3RhcnQpOw0KIAl0aHJlYWQtPnRocm90dGxlX3Ry aWdnZXIgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydCk7DQotCXRo cmVhZC0+dGhyb3R0bGVfbGFnID0gMDsNCi0JdGhyZWFkLT50aHJvdHRsZV9s YWdfbWF4ID0gMDsNCiANCiAJSU5TVFJfVElNRV9TRVRfWkVSTyh0aHJlYWQt PmNvbm5fdGltZSk7DQogDQpAQCAtMzU1MiwxNiArMzU2OCwxNyBAQCB0aHJl YWRSdW4odm9pZCAqYXJnKQ0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRo cmVhZC0+Y29ubl90aW1lKTsNCiAJSU5TVFJfVElNRV9TVUJUUkFDVCh0aHJl YWQtPmNvbm5fdGltZSwgdGhyZWFkLT5zdGFydF90aW1lKTsNCiANCi0JYWdn X3ZhbHNfaW5pdCgmYWdncywgdGhyZWFkLT5zdGFydF90aW1lKTsNCisJaW5p dFN0YXRzKCZhZ2dzLCBJTlNUUl9USU1FX0dFVF9ET1VCTEUodGhyZWFkLT5z dGFydF90aW1lKSk7DQorCWxhc3QgPSBhZ2dzOw0KIA0KIAkvKiBzZW5kIHN0 YXJ0IHVwIHF1ZXJpZXMgaW4gYXN5bmMgbWFubmVyICovDQogCWZvciAoaSA9 IDA7IGkgPCBuc3RhdGU7IGkrKykNCiAJew0KIAkJQ1N0YXRlCSAgICpzdCA9 ICZzdGF0ZVtpXTsNCi0JCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX2Zp bGVzW3N0LT51c2VfZmlsZV07DQorCQlDb21tYW5kICAgKipjb21tYW5kcyA9 IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJCWludAkJ CXByZXZfZWNudCA9IHN0LT5lY250Ow0KIA0KLQkJc3QtPnVzZV9maWxlID0g Z2V0cmFuZCh0aHJlYWQsIDAsIG51bV9maWxlcyAtIDEpOw0KKwkJc3QtPnVz ZV9maWxlID0gbnVtX3NjcmlwdHM9PTE/IDA6IGNob29zZVNjcmlwdCh0aHJl YWQpOw0KIAkJaWYgKCFkb0N1c3RvbSh0aHJlYWQsIHN0LCAmdGhyZWFkLT5j b25uX3RpbWUsIGxvZ2ZpbGUsICZhZ2dzKSkNCiAJCQlyZW1haW5zLS07CQkJ LyogSSd2ZSBhYm9ydGVkICovDQogDQpAQCAtMzU4OSw3ICszNjA2LDcgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJCWZvciAoaSA9IDA7IGkgPCBuc3Rh dGU7IGkrKykNCiAJCXsNCiAJCQlDU3RhdGUJICAgKnN0ID0gJnN0YXRlW2ld Ow0KLQkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51 c2VfZmlsZV07DQorCQkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBzcWxfc2Ny aXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHM7DQogCQkJaW50CQkJc29jazsN CiANCiAJCQlpZiAoc3QtPmNvbiA9PSBOVUxMKQ0KQEAgLTM2MDIsNyArMzYx OSw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJCXsNCiAJCQkJCS8q IGludGVycnVwdCBjbGllbnQgd2hpY2ggaGFzIG5vdCBzdGFydGVkIGEgdHJh bnNhY3Rpb24gKi8NCiAJCQkJCXJlbWFpbnMtLTsNCi0JCQkJCXN0LT5zbGVl cGluZyA9IDA7DQorCQkJCQlzdC0+c2xlZXBpbmcgPSBmYWxzZTsNCiAJCQkJ CXN0LT50aHJvdHRsaW5nID0gZmFsc2U7DQogCQkJCQlQUWZpbmlzaChzdC0+ Y29uKTsNCiAJCQkJCXN0LT5jb24gPSBOVUxMOw0KQEAgLTM2OTUsNyArMzcx Miw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQlmb3IgKGkgPSAwOyBp IDwgbnN0YXRlOyBpKyspDQogCQl7DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZz dGF0ZVtpXTsNCi0JCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxl c1tzdC0+dXNlX2ZpbGVdOw0KKwkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0g c3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCWludAkJ CXByZXZfZWNudCA9IHN0LT5lY250Ow0KIA0KIAkJCWlmIChzdC0+Y29uICYm IChGRF9JU1NFVChQUXNvY2tldChzdC0+Y29uKSwgJmlucHV0X21hc2spDQpA QCAtMzcyNiwxMSArMzc0Myw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQog CQkJaWYgKG5vdyA+PSBuZXh0X3JlcG9ydCkNCiAJCQl7DQogCQkJCS8qIGdl bmVyYXRlIGFuZCBzaG93IHJlcG9ydCAqLw0KLQkJCQlpbnQ2NAkJY291bnQg PSAwLA0KLQkJCQkJCQlsYXRzID0gMCwNCi0JCQkJCQkJc3FsYXRzID0gMCwN Ci0JCQkJCQkJbGFncyA9IDAsDQotCQkJCQkJCXNraXBwZWQgPSAwOw0KKwkJ CQlTdGF0c0RhdGEgICBjdXI7DQogCQkJCWludDY0CQlydW4gPSBub3cgLSBs YXN0X3JlcG9ydDsNCiAJCQkJZG91YmxlCQl0cHMsDQogCQkJCQkJCXRvdGFs X3J1biwNCkBAIC0zNzUwLDIzICszNzYzLDI0IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCQkJCSAqIChJZiBhIHJlYWQgZnJvbSBhIDY0LWJpdCBpbnRl Z2VyIGlzIG5vdCBhdG9taWMsIHlvdSBtaWdodA0KIAkJCQkgKiBnZXQgYSAi dG9ybiIgcmVhZCBhbmQgY29tcGxldGVseSBib2d1cyBsYXRlbmNpZXMgdGhv dWdoISkNCiAJCQkJICovDQotCQkJCWZvciAoaSA9IDA7IGkgPCBwcm9ncmVz c19uY2xpZW50czsgaSsrKQ0KKwkJCQlpbml0U3RhdHMoJiBjdXIsIDAuMCk7 DQorCQkJCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0KIAkJCQl7 DQotCQkJCQljb3VudCArPSBzdGF0ZVtpXS5jbnQ7DQotCQkJCQlsYXRzICs9 IHN0YXRlW2ldLnR4bl9sYXRlbmNpZXM7DQotCQkJCQlzcWxhdHMgKz0gc3Rh dGVbaV0udHhuX3NxbGF0czsNCisJCQkJCWFwcGVuZFNpbXBsZVN0YXRzKCYg Y3VyLmxhdGVuY3ksICYgdGhyZWFkW2ldLnN0YXRzLmxhdGVuY3kpOw0KKwkJ CQkJYXBwZW5kU2ltcGxlU3RhdHMoJiBjdXIubGFnLCAmIHRocmVhZFtpXS5z dGF0cy5sYWcpOw0KKwkJCQkJY3VyLmNudCArPSB0aHJlYWRbaV0uc3RhdHMu Y250Ow0KKwkJCQkJY3VyLnNraXBwZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnNr aXBwZWQ7DQogCQkJCX0NCiANCi0JCQkJZm9yIChpID0gMDsgaSA8IHByb2dy ZXNzX250aHJlYWRzOyBpKyspDQotCQkJCQlsYWdzICs9IHRocmVhZFtpXS50 aHJvdHRsZV9sYWc7DQotDQogCQkJCXRvdGFsX3J1biA9IChub3cgLSB0aHJl YWRfc3RhcnQpIC8gMTAwMDAwMC4wOw0KLQkJCQl0cHMgPSAxMDAwMDAwLjAg KiAoY291bnQgLSBsYXN0X2NvdW50KSAvIHJ1bjsNCi0JCQkJbGF0ZW5jeSA9 IDAuMDAxICogKGxhdHMgLSBsYXN0X2xhdHMpIC8gKGNvdW50IC0gbGFzdF9j b3VudCk7DQotCQkJCXNxbGF0ID0gMS4wICogKHNxbGF0cyAtIGxhc3Rfc3Fs YXRzKSAvIChjb3VudCAtIGxhc3RfY291bnQpOw0KKwkJCQl0cHMgPSAxMDAw MDAwLjAgKiAoY3VyLmNudCAtIGxhc3QuY250KSAvIHJ1bjsNCisJCQkJbGF0 ZW5jeSA9IDAuMDAxICogKGN1ci5sYXRlbmN5LnN1bSAtIGxhc3QubGF0ZW5j eS5zdW0pIC8NCisJCQkJCShjdXIuY250IC0gbGFzdC5jbnQpOw0KKwkJCQlz cWxhdCA9IDEuMCAqIChjdXIubGF0ZW5jeS5zdW0yIC0gbGFzdC5sYXRlbmN5 LnN1bTIpDQorCQkJCQkvIChjdXIuY250IC0gbGFzdC5jbnQpOw0KIAkJCQlz dGRldiA9IDAuMDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVu Y3kgKiBsYXRlbmN5KTsNCi0JCQkJbGFnID0gMC4wMDEgKiAobGFncyAtIGxh c3RfbGFncykgLyAoY291bnQgLSBsYXN0X2NvdW50KTsNCi0JCQkJc2tpcHBl ZCA9IHRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkIC0gbGFzdF9z a2lwcGVkOw0KKwkJCQlsYWcgPSAwLjAwMSAqIChjdXIubGFnLnN1bSAtIGxh c3QubGFnLnN1bSkgLw0KKwkJCQkJKGN1ci5jbnQgLSBsYXN0LmNudCk7DQog DQogCQkJCWZwcmludGYoc3RkZXJyLA0KIAkJCQkJCSJwcm9ncmVzczogJS4x ZiBzLCAlLjFmIHRwcywgIg0KQEAgLTM3NzYsMTYgKzM3OTAsMTMgQEAgdGhy ZWFkUnVuKHZvaWQgKmFyZykNCiAJCQkJew0KIAkJCQkJZnByaW50ZihzdGRl cnIsICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsNCiAJCQkJCWlmIChsYXRlbmN5 X2xpbWl0KQ0KLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZP Uk1BVCAiIHNraXBwZWQiLCBza2lwcGVkKTsNCisJCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiwgIklOVDY0X0ZPUk1BVCIgc2tpcHBlZCIsDQorCQkJCQkJCQlj dXIuc2tpcHBlZCAtIGxhc3Quc2tpcHBlZCk7DQogCQkJCX0NCiAJCQkJZnBy aW50ZihzdGRlcnIsICJcbiIpOw0KIA0KLQkJCQlsYXN0X2NvdW50ID0gY291 bnQ7DQotCQkJCWxhc3RfbGF0cyA9IGxhdHM7DQotCQkJCWxhc3Rfc3FsYXRz ID0gc3FsYXRzOw0KLQkJCQlsYXN0X2xhZ3MgPSBsYWdzOw0KKwkJCQlsYXN0 ID0gY3VyOw0KIAkJCQlsYXN0X3JlcG9ydCA9IG5vdzsNCi0JCQkJbGFzdF9z a2lwcGVkID0gdGhyZWFkLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQ7DQog DQogCQkJCS8qDQogCQkJCSAqIEVuc3VyZSB0aGF0IHRoZSBuZXh0IHJlcG9y dCBpcyBpbiB0aGUgZnV0dXJlLCBpbiBjYXNlDQo= --8323329-1680500561-1437504100=:30948 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-1680500561-1437504100=:30948--