Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZIu7D-0007fF-6J for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jul 2015 07:43:27 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZIu7C-0002OM-OS for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jul 2015 07:43:26 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZIu78-0002LF-LK for pgsql-hackers@postgresql.org; Sat, 25 Jul 2015 07:43:23 +0000 Received: from jiboia.ensmp.fr ([194.214.158.137]) by makus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZIu73-0002mZ-VX for pgsql-hackers@postgresql.org; Sat, 25 Jul 2015 07:43:21 +0000 Received: from cri.ensmp.fr (233.170.68.86.rev.sfr.net [86.68.170.233]) (authenticated bits=0) by jiboia.ensmp.fr (8.15.1/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t6P7h05q023711 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 25 Jul 2015 09:43:01 +0200 Date: Sat, 25 Jul 2015 09:42:59 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto To: Robert Haas cc: Josh Berkus , "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: <55AEDDA4.8020009@agliodbs.com> <55AFD8C6.8010507@agliodbs.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-468143564-1437810181=:20046" X-Miltered: at jiboia.ensmp.fr with ID 55B33E04.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: 55B33E04.000 from 233.170.68.86.rev.sfr.net/233.170.68.86.rev.sfr.net/86.68.170.233/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-468143564-1437810181=:20046 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > I liked @ because it makes sense to read it as the word "at". Yep, why not. >> Prepending classic to the names does not look necessary. I would >> suggest "tpcb-like", "simple-update" & "select-only", or even maybe any >> prefix. If the bench scripts could be read from some pg directory >> instead of being actually inlined, even more code could be dropped from >> pgbench. > > I think including classic would be a very good idea. Hmm. This is the command line, you have to type them! With a prefix-based approach this suggests that the builtin names must start differently so as to be easily selected. > We might want to add a TPC-C like workload in the future, or any number > of other things. Naming things in a good way from the outset can only > make that easier. Here is a v4 which: - removes -w stuff - enhance -f with @weight - adds -b/--builtin name@weight, based on prefix builtin names are: tpcb-like, simple-update & select-only, which matches their more or less historical names (although I wasn't sure of "tpcb-sort-of", so I put "tpcb-like") - removes -B (now can be accessed with -b tpcb-like) Pgbench builtin scripts are still inlined in the code, not in a separate directory, which might be an option to simplify the code and allow easy extensions. I still think that the "--per-script-stats" option is useless and per script stats should always be on as soon as several scripts are running. Even more, I think that stats (maybe no per-command stat though) should always be collected. The point of pgbench is to collect data, and the basic end-of-run tps summary is very terse and does not reflect much of what happened during the run. Also, maybe per-command detailed stats should use the same common struct to hold data as all other stats. I did not change it because it is maintained in a different part of the code. -- Fabien. --8323329-468143564-1437810181=:20046 Content-Type: TEXT/x-diff; name=pgbench-script-stats-4.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-4.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu LmRjMzZmNWQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjAsNyArMjYwLDIyIEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNh dGlvbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNvbW1hbmQtbGluZQ0KICAg ICBiZW5jaG1hcmtpbmcgYXJndW1lbnRzOg0KIA0KLSAgICA8dmFyaWFibGVs aXN0Pg0KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2VhYmxl PnNjcmlwdG5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRlcm0+ PG9wdGlvbj4tLWJ1aWx0aW48Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5hbWVb QHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICA8cGFyYT4NCisgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0aW4g c2NyaXB0IHRvIHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAg ICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJh bD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJp bGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0Lg0KKyAgICAgICAgQXZhaWxhYmxl IGJ1aWx0aW4gc2NyaXB0cyBhcmU6IDxsaXRlcmFsPnRwY2ItbGlrZTwvPiwN CisgICAgICAgIDxsaXRlcmFsPnNpbXBsZS11cGRhdGU8Lz4gYW5kIDxsaXRl cmFsPnNlbGVjdC1vbmx5PC8+Lg0KKyAgICAgICAgVGhlIHByb3ZpZGVkIDxy ZXBsZWFjYWJsZT5zY3JpcHRuYW1lPC8+IG5lZWRzIG9ubHkgdG8gYmUgYSBw cmVmaXgNCisgICAgICAgIG9mIHRoZSBidWlsdGluIG5hbWUsIGhlbmNlIDxs aXRlcmFsPnNpbXA8Lz4gd291bGQgYmUgZW5vdWdoIHRvIHNlbGVjdA0KKyAg ICAgICAgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgPC9w YXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8L3Zhcmxpc3RlbnRy eT4NCisNCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+DQogICAgICAgPHRlcm0+ PG9wdGlvbj4tYzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+Y2xpZW50czwvPjwv dGVybT4NCkBAIC0zMDcsMTQgKzMyMiwxNSBAQCBwZ2JlbmNoIDxvcHRpb25h bD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxh Y2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQog ICAgICA8dmFybGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LWY8 L29wdGlvbj4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+PC90ZXJtPg0KLSAg ICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwvb3B0aW9uPjxyZXBsYWNlYWJs ZT5maWxlbmFtZTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi1m PC8+IDxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0XTwvPjwvdGVybT4N CisgICAgICA8dGVybT48b3B0aW9uPi0tZmlsZT08Lz48cmVwbGFjZWFibGU+ ZmlsZW5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVt Pg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFJlYWQgdHJhbnNhY3Rpb24g c2NyaXB0IGZyb20gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+Lg0KKyAgICAg ICAgQWRkIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJvbSA8cmVwbGFj ZWFibGU+ZmlsZW5hbWU8Lz4gdG8NCisgICAgICAgIHRoZSBsaXN0IG9mIGV4 ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2Vy IHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3Qg dGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0 Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxzLg0KLSAgICAgICAg PG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwvb3B0aW9uPiwgYW5k IDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAgICAgIGFyZSBtdXR1YWxseSBl eGNsdXNpdmUuDQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVt Pg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0LDEwICs0MjAsNyBA QCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4g PC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgIDx0 ZXJtPjxvcHRpb24+LS1za2lwLXNvbWUtdXBkYXRlczwvb3B0aW9uPjwvdGVy bT4NCiAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KLSAgICAg ICAgRG8gbm90IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2JlbmNoX3RlbGxlcnM8 Lz4gYW5kDQotICAgICAgICA8c3RydWN0bmFtZT5wZ2JlbmNoX2JyYW5jaGVz PC8+Lg0KLSAgICAgICAgVGhpcyB3aWxsIGF2b2lkIHVwZGF0ZSBjb250ZW50 aW9uIG9uIHRoZXNlIHRhYmxlcywgYnV0DQotICAgICAgICBpdCBtYWtlcyB0 aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1CLg0KKyAgICAgICAg U2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNpbXBsZS11cGRhdGVAMTwvPi4N CiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00OTksOSArNTEyLDkgQEAgcGdiZW5jaCA8 b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICAgIFJlcG9ydCB0aGUg c3BlY2lmaWVkIHNjYWxlIGZhY3RvciBpbiA8YXBwbGljYXRpb24+cGdiZW5j aDwvPidzDQogICAgICAgICBvdXRwdXQuICBXaXRoIHRoZSBidWlsdC1pbiB0 ZXN0cywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUNCiAgICAgICAgIGNv cnJlY3Qgc2NhbGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgY291bnRp bmcgdGhlIG51bWJlciBvZg0KLSAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVj dG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4gIEhvd2V2ZXIsIHdo ZW4gdGVzdGluZw0KLSAgICAgICAgY3VzdG9tIGJlbmNobWFya3MgKDxvcHRp b24+LWY8Lz4gb3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rvcg0KLSAgICAgICAg d2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlzIG9wdGlvbiBpcyB1 c2VkLg0KKyAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVjdG5hbWU+cGdiZW5j aF9icmFuY2hlczwvPiB0YWJsZS4NCisgICAgICAgIEhvd2V2ZXIsIHdoZW4g dGVzdGluZyBvbmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8b3B0aW9uPi1mPC8+ IG9wdGlvbiksDQorICAgICAgICB0aGUgc2NhbGUgZmFjdG9yIHdpbGwgYmUg cmVwb3J0ZWQgYXMgMSB1bmxlc3MgdGhpcyBvcHRpb24gaXMgdXNlZC4NCiAg ICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8L3Zh cmxpc3RlbnRyeT4NCkBAIC01MTEsNyArNTI0LDcgQEAgcGdiZW5jaCA8b3B0 aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVybT48b3B0aW9uPi0t c2VsZWN0LW9ubHk8L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVt Pg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFBlcmZvcm0gc2VsZWN0LW9u bHkgdHJhbnNhY3Rpb25zIGluc3RlYWQgb2YgVFBDLUItbGlrZSB0ZXN0Lg0K KyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNlbGVjdC1vbmx5 QDE8Lz4uDQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0K ICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNTY3LDYgKzU4MCwxNiBAQCBw Z2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9v cHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJs aXN0ZW50cnk+DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LS1wZXItc2NyaXB0LXN0YXRzPC9vcHRpb24+PC90ZXJt Pg0KKyAgICAgIDxsaXN0aXRlbT4NCisgICAgICAgPHBhcmE+DQorICAgICAg ICBSZXBvcnQgc29tZSBzdGF0aXN0aWNzIHBlciBzY3JpcHQgcnVuIGJ5IHBn YmVuY2guDQorICAgICAgIDwvcGFyYT4NCisgICAgICA8L2xpc3RpdGVtPg0K KyAgICAgPC92YXJsaXN0ZW50cnk+DQorDQorDQorICAgICA8dmFybGlzdGVu dHJ5Pg0KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1zYW1wbGluZy1yYXRlPTxy ZXBsYWNlYWJsZT5yYXRlPC8+PC9vcHRpb24+PC90ZXJtPg0KICAgICAgIDxs aXN0aXRlbT4NCiAgICAgICAgPHBhcmE+DQpAQCAtNjYxLDcgKzY4NCwyMCBA QCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4g PC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgPHRpdGxl PldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBBY3R1YWxseSBQ ZXJmb3JtZWQgaW4gcGdiZW5jaD88L3RpdGxlPg0KIA0KICAgPHBhcmE+DQot ICAgVGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlzc3VlcyBzZXZl biBjb21tYW5kcyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdiZW5jaCBleGVj dXRlcyB0ZXN0IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZyb20gYSBzcGVj aWZpZWQgbGlzdC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQtaW4gc2NyaXB0 cyB3aXRoIDxvcHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1wcm92aWRlZCBj dXN0b20gc2NyaXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCBz Y3JpcHQgbWF5IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0IHNwZWNpZmll ZCBhZnRlciBhDQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0byBjaGFuZ2Ug aXRzIGRyYXdpbmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRlZmF1bHQgd2Vp Z2h0IGlzIDxsaXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisNCisgIDxwYXJh Pg0KKyAgIFRoZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rpb24gc2NyaXB0 IChhbHNvIGludm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2ItbGlrZTwvPikN CisgICBpc3N1ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5zYWN0aW9uIG92 ZXIgcmFuZG9tbHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwNCisgICA8bGl0 ZXJhbD50aWQ8Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxpdGVyYWw+YmFs YW5jZTwvPi4NCisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGlyZWQgYnkgdGhl IFRQQy1CIGJlbmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxseSBUUEMtQiwN CisgICBoZW5jZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxvcmRl cmVkbGlzdD4NCkBAIC02NzUsOSArNzExLDE1IEBAIHBnYmVuY2ggPG9wdGlv bmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVw bGFjZWFibGU+ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0Pg0KIA0KICAg PHBhcmE+DQotICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4tTjwvPiwgc3Rl cHMgNCBhbmQgNSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQotICAgdHJhbnNh Y3Rpb24uICBJZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+LCBvbmx5IHRo ZSA8Y29tbWFuZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQuDQorICAgSWYg eW91IHNlbGVjdCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPiBidWls dGluIChhbHNvIDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBzIDQgYW5kIDUg YXJlbid0IGluY2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4NCisgICBUaGlz IHdpbGwgYXZvaWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhlc2UgdGFibGVz LCBidXQNCisgICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBs aWtlIFRQQy1CLg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+DQorICAgSWYg eW91IHNlbGVjdCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8Lz4gYnVpbHRp biAoYWxzbyA8b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRoZSA8Y29tbWFu ZD5TRUxFQ1Q8Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0KICA8L3JlZnNl Y3QyPg0KIA0KQEAgLTY4OSwxMCArNzMxLDcgQEAgcGdiZW5jaCA8b3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5kYm5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5 IHJlcGxhY2luZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAg ICAoZGVzY3JpYmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0 IHJlYWQgZnJvbSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBv cHRpb24pLiAgSW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+ DQotICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmls ZS4gIFlvdSBjYW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0 cyAobXVsdGlwbGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4g d2hpY2gNCi0gICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBp cyBjaG9zZW4gZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFy dHMgYSBuZXcgdHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVj dXRpb24gb2YgYSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxw YXJhPg0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMg Yi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCBlODM5ZmEzLi5l OGJkOTM1IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu Yw0KKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2Miwx MSArMTYyLDEwIEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0 aW9uIGxhdGVuY2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7 CQkJLyogcXVpZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFn Z19pbnRlcnZhbDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5k aXZpZHVhbA0KIAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAg ICAgICAgcGVyX3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRv IGNvbGxlY3Qgc3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNz ID0gMDsJCS8qIHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBz ZWNvbmRzICovDQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMgPSAwOwkJLyog bnVtYmVyIG9mIGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJCQkJCQkJCSAq IHJlcG9ydCAqLw0KLWludAkJCXByb2dyZXNzX250aHJlYWRzID0gMDsJCS8q IG51bWJlciBvZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJCQkJCQkJCQkg KiByZXBvcnQgKi8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIg b2YgY2xpZW50cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJICAgIC8qIG51 bWJlciBvZiB0aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVjdDsJCQkvKiBl c3RhYmxpc2ggY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLw0K IGJvb2wJCWlzX2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBs YXRlbmNpZXMgKi8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nl c3MgaWQgdXNlZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0xNzcsNiArMTc2 LDggQEAgY2hhcgkgICAqbG9naW4gPSBOVUxMOw0KIGNoYXIJICAgKmRiTmFt ZTsNCiBjb25zdCBjaGFyICpwcm9nbmFtZTsNCiANCisjZGVmaW5lIFdTRVAg J0AnIC8qIHdlaWdodCBzZXBhcmF0b3IgKi8NCisNCiB2b2xhdGlsZSBib29s IHRpbWVyX2V4Y2VlZGVkID0gZmFsc2U7CS8qIGZsYWcgZnJvbSBzaWduYWwg aGFuZGxlciAqLw0KIA0KIC8qIHZhcmlhYmxlIGRlZmluaXRpb25zICovDQpA QCAtMTg2LDEzICsxODcsMzkgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJY2hhcgkg ICAqdmFsdWU7CQkJLyogaXRzIHZhbHVlICovDQogfSBWYXJpYWJsZTsNCiAN Ci0jZGVmaW5lIE1BWF9GSUxFUwkJMTI4CQkvKiBtYXggbnVtYmVyIG9mIFNR TCBzY3JpcHQgZmlsZXMgYWxsb3dlZCAqLw0KKyNkZWZpbmUgTUFYX1NDUklQ VFMJCTEyOAkJLyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0cyBhbGxvd2Vk ICovDQogI2RlZmluZSBTSEVMTF9DT01NQU5EX1NJWkUJMjU2IC8qIG1heGlt dW0gc2l6ZSBhbGxvd2VkIGZvciBzaGVsbCBjb21tYW5kICovDQogDQogLyoN Ci0gKiBzdHJ1Y3R1cmVzIHVzZWQgaW4gY3VzdG9tIHF1ZXJ5IG1vZGUNCisg KiBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCBzdGF0cyBhYm91dCBz b21ldGhpbmcuDQorICogcHJvYmFibHkgdGhlIGZpcnN0IHZhbHVlIHNob3Vs ZCBiZSBrZXB0IGFuZCB1c2VkIGFzIGFuIG9mZnNldCBmb3INCisgKiBiZXR0 ZXIgbnVtZXJpY2FsIHN0YWJpbGl0eS4uLg0KKyAqLw0KK3R5cGVkZWYgc3Ry dWN0DQorew0KKwlpbnQ2NF90IGNvdW50OyAgICAvKiBob3cgbWFueSB2YWx1 ZXMgd2hlcmUgZW5jb3VudGVyZWQgKi8NCisJZG91YmxlIG1pbjsgICAvKiB0 aGUgbWluaW11bSBzZWVuICovDQorCWRvdWJsZSBtYXg7ICAgLyogdGhlIG1h eGltdW0gc2VlbiAqLw0KKwlkb3VibGUgc3VtOyAgIC8qIHN1bSBvZiB2YWx1 ZXMgKi8NCisJZG91YmxlIHN1bTI7ICAvKiBzdW0gb2Ygc3F1YXJlZCB2YWx1 ZXMgKi8NCit9IFNpbXBsZVN0YXRzOw0KKw0KKy8qIGRhdGEgc3RydWN0dXJl IHRvIGhvbGQgdmFyaW91cyBzdGF0aXN0aWNzLg0KKyAqIGl0IGlzIHVzZWQg Zm9yIGludGVydmFsIHN0YXRpc3RpY3MgYXMgd2VsbCBhcyBmaWxlIHN0YXRp c3RpY3MuDQogICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCWxvbmcJCXN0 YXJ0X3RpbWU7CQkvKiB3aGVuIHRoZSBpbnRlcnZhbCBzdGFydHMsIGZvciBh Z2dyZWdhdGVzICovDQorCWludDY0CQljbnQ7CQkJLyogbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyAqLw0KKwlpbnQ2NAkJc2tpcHBlZDsJCS8qIG51bWJlciBv ZiB0cmFuc2FjdGlvbnMgc2tpcHBlZCB1bmRlciAtLXJhdGUNCisJCQkJCQkJ CSAqIGFuZCAtLWxhdGVuY3ktbGltaXQgKi8NCisJU2ltcGxlU3RhdHMJbGF0 ZW5jeTsNCisJU2ltcGxlU3RhdHMJbGFnOw0KK30gU3RhdHNEYXRhOw0KIA0K Ky8qDQorICogc3RydWN0dXJlcyB1c2VkIGluIGN1c3RvbSBxdWVyeSBtb2Rl DQorICovDQogdHlwZWRlZiBzdHJ1Y3QNCiB7DQogCVBHY29ubgkgICAqY29u OwkJCS8qIGNvbm5lY3Rpb24gaGFuZGxlIHRvIERCICovDQpAQCAtMjAwLDIy ICsyMjcsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJaW50CQkJc3RhdGU7CQkJ Lyogc3RhdGUgTm8uICovDQogCWludAkJCWxpc3RlbjsJCQkvKiAwIGluZGlj YXRlcyB0aGF0IGFuIGFzeW5jIHF1ZXJ5IGhhcyBiZWVuDQogCQkJCQkJCQkg KiBzZW50ICovDQotCWludAkJCXNsZWVwaW5nOwkJLyogMSBpbmRpY2F0ZXMg dGhhdCB0aGUgY2xpZW50IGlzIG5hcHBpbmcgKi8NCisJYm9vbAkJaXNfdGhy b3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0aW9uIHRocm90dGxpbmcgaXMg ZG9uZSAqLw0KKwlib29sCQlzbGVlcGluZzsJCS8qIHdoZXRoZXIgdGhlIGNs aWVudCBpcyBuYXBwaW5nICovDQogCWJvb2wJCXRocm90dGxpbmc7CQkvKiB3 aGV0aGVyIG5hcCBpcyBmb3IgdGhyb3R0bGluZyAqLw0KIAlWYXJpYWJsZSAg ICp2YXJpYWJsZXM7CQkvKiBhcnJheSBvZiB2YXJpYWJsZSBkZWZpbml0aW9u cyAqLw0KIAlpbnQJCQludmFyaWFibGVzOw0KIAlpbnQ2NAkJdHhuX3NjaGVk dWxlZDsJLyogc2NoZWR1bGVkIHN0YXJ0IHRpbWUgb2YgdHJhbnNhY3Rpb24g KHVzZWMpICovDQogCWluc3RyX3RpbWUJdHhuX2JlZ2luOwkJLyogdXNlZCBm b3IgbWVhc3VyaW5nIHNjaGVkdWxlIGxhZyB0aW1lcyAqLw0KIAlpbnN0cl90 aW1lCXN0bXRfYmVnaW47CQkvKiB1c2VkIGZvciBtZWFzdXJpbmcgc3RhdGVt ZW50IGxhdGVuY2llcyAqLw0KLQlib29sCQlpc190aHJvdHRsZWQ7CS8qIHdo ZXRoZXIgdHJhbnNhY3Rpb24gdGhyb3R0bGluZyBpcyBkb25lICovDQotCWlu dAkJCXVzZV9maWxlOwkJLyogaW5kZXggaW4gc3FsX2ZpbGVzIGZvciB0aGlz IGNsaWVudCAqLw0KLQlib29sCQlwcmVwYXJlZFtNQVhfRklMRVNdOw0KKwlp bnQJCQl1c2VfZmlsZTsJCS8qIGluZGV4IGluIHNxbF9zY3JpcHRzIGZvciB0 aGlzIGNsaWVudCAqLw0KKwlib29sCQlwcmVwYXJlZFtNQVhfU0NSSVBUU107 IC8qIHdoZXRoZXIgY2xpZW50IHByZXBhcmVkIHRoZSBzY3JpcHQgKi8NCiAN CiAJLyogcGVyIGNsaWVudCBjb2xsZWN0ZWQgc3RhdHMgKi8NCi0JaW50CQkJ Y250OwkJCS8qIHhhY3RzIGNvdW50ICovDQorCWludDY0CQljbnQ7CQkJLyog dHJhbnNhY3Rpb24gY291bnQgKi8NCiAJaW50CQkJZWNudDsJCQkvKiBlcnJv ciBjb3VudCAqLw0KLQlpbnQ2NAkJdHhuX2xhdGVuY2llczsJLyogY3VtdWxh dGVkIGxhdGVuY2llcyAqLw0KLQlpbnQ2NAkJdHhuX3NxbGF0czsJCS8qIGN1 bXVsYXRlZCBzcXVhcmUgbGF0ZW5jaWVzICovDQogfSBDU3RhdGU7DQogDQog LyoNCkBAIC0yMjcsMTkgKzI1MiwxNiBAQCB0eXBlZGVmIHN0cnVjdA0KIAlw dGhyZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8NCiAJQ1N0 YXRlCSAgICpzdGF0ZTsJCQkvKiBhcnJheSBvZiBDU3RhdGUgKi8NCiAJaW50 CQkJbnN0YXRlOwkJCS8qIGxlbmd0aCBvZiBzdGF0ZVtdICovDQotCWluc3Ry X3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovDQot CWluc3RyX3RpbWUgKmV4ZWNfZWxhcHNlZDsJLyogdGltZSBzcGVudCBleGVj dXRpbmcgY21kcyAocGVyIENvbW1hbmQpICovDQotCWludAkJICAgKmV4ZWNf Y291bnQ7CQkvKiBudW1iZXIgb2YgY21kIGV4ZWN1dGlvbnMgKHBlciBDb21t YW5kKSAqLw0KLQl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CQkv KiBzZXBhcmF0ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KLQlp bnQ2NAkJdGhyb3R0bGVfdHJpZ2dlcjsJCS8qIHByZXZpb3VzL25leHQgdGhy b3R0bGluZyAodXMpICovDQorCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0 ZVszXTsJIC8qIHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2ggdGhyZWFk ICovDQorCWludDY0CQl0aHJvdHRsZV90cmlnZ2VyOwkgLyogcHJldmlvdXMv bmV4dCB0aHJvdHRsaW5nICh1cykgKi8NCiANCiAJLyogcGVyIHRocmVhZCBj b2xsZWN0ZWQgc3RhdHMgKi8NCisJaW5zdHJfdGltZQlzdGFydF90aW1lOwkJ LyogdGhyZWFkIHN0YXJ0IHRpbWUgKi8NCiAJaW5zdHJfdGltZQljb25uX3Rp bWU7DQotCWludDY0CQl0aHJvdHRsZV9sYWc7CS8qIHRvdGFsIHRyYW5zYWN0 aW9uIGxhZyBiZWhpbmQgdGhyb3R0bGluZyAqLw0KLQlpbnQ2NAkJdGhyb3R0 bGVfbGFnX21heDsJCS8qIG1heCB0cmFuc2FjdGlvbiBsYWcgKi8NCi0JaW50 NjQJCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZDsJCS8qIGxhZ2dpbmcgdHJh bnNhY3Rpb25zDQotCQkJCQkJCQkJCQkJICogc2tpcHBlZCAqLw0KLQlpbnQ2 NAkJbGF0ZW5jeV9sYXRlOwkvKiBsYXRlIHRyYW5zYWN0aW9ucyAqLw0KKwlp bnN0cl90aW1lICpleGVjX2VsYXBzZWQ7CS8qIHRpbWUgc3BlbnQgZXhlY3V0 aW5nIGNtZHMgKHBlciBDb21tYW5kKSAqLw0KKwlpbnQJCSAgICpleGVjX2Nv dW50OwkJLyogbnVtYmVyIG9mIGNtZCBleGVjdXRpb25zIChwZXIgQ29tbWFu ZCkgKi8NCisJU3RhdHNEYXRhICAgc3RhdHM7DQorCWludDY0CQlsYXRlbmN5 X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1dCBsYXRlIHRyYW5zYWN0aW9ucyAqLw0K IH0gVFN0YXRlOw0KIA0KICNkZWZpbmUgSU5WQUxJRF9USFJFQUQJCSgocHRo cmVhZF90KSAwKQ0KQEAgLTI3MywzMyArMjk1LDM4IEBAIHR5cGVkZWYgc3Ry dWN0DQogCVBnQmVuY2hFeHByICpleHByOwkJCS8qIHBhcnNlZCBleHByZXNz aW9uICovDQogfSBDb21tYW5kOw0KIA0KKy8qIFNRTCBzY3JpcHQgdG8gYmUg ZXhlY3V0ZWQsIGVpdGhlciBhIGZpbGUgb3IgYW4gaW50ZXJuYWwgc2NyaXB0 DQorICovDQogdHlwZWRlZiBzdHJ1Y3QNCiB7DQotDQotCWxvbmcJCXN0YXJ0 X3RpbWU7CQkvKiB3aGVuIGRvZXMgdGhlIGludGVydmFsIHN0YXJ0ICovDQot CWludAkJCWNudDsJCQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zICovDQot CWludAkJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNr aXBwZWQgdW5kZXIgLS1yYXRlDQotCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5 LWxpbWl0ICovDQotDQotCWRvdWJsZQkJbWluX2xhdGVuY3k7CS8qIG1pbi9t YXggbGF0ZW5jaWVzICovDQotCWRvdWJsZQkJbWF4X2xhdGVuY3k7DQotCWRv dWJsZQkJc3VtX2xhdGVuY3k7CS8qIHN1bShsYXRlbmN5KSwgc3VtKGxhdGVu Y3leMikgLSBmb3INCi0JCQkJCQkJCSAqIGVzdGltYXRlcyAqLw0KLQlkb3Vi bGUJCXN1bTJfbGF0ZW5jeTsNCi0NCi0JZG91YmxlCQltaW5fbGFnOw0KLQlk b3VibGUJCW1heF9sYWc7DQotCWRvdWJsZQkJc3VtX2xhZzsJCS8qIHN1bShs YWcpICovDQotCWRvdWJsZQkJc3VtMl9sYWc7CQkvKiBzdW0obGFnKmxhZykg Ki8NCi19IEFnZ1ZhbHM7DQotDQotc3RhdGljIENvbW1hbmQgKipzcWxfZmls ZXNbTUFYX0ZJTEVTXTsJLyogU1FMIHNjcmlwdCBmaWxlcyAqLw0KLXN0YXRp YyBpbnQJbnVtX2ZpbGVzOwkJCS8qIG51bWJlciBvZiBzY3JpcHQgZmlsZXMg Ki8NCisJY29uc3QgY2hhciAqbmFtZTsNCisJaW50IHdlaWdodDsNCisJQ29t bWFuZCAqKmNvbW1hbmRzOw0KKwlTdGF0c0RhdGEgc3RhdHM7DQorfSBTUUxT Y3JpcHQ7DQorDQorc3RhdGljIFNRTFNjcmlwdCBzcWxfc2NyaXB0W01BWF9T Q1JJUFRTXTsNCitzdGF0aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVtYmVy IG9mIHNjcmlwdCBpbiBzcWxfc2NyaXB0W10gKi8NCiBzdGF0aWMgaW50CW51 bV9jb21tYW5kcyA9IDA7CS8qIHRvdGFsIG51bWJlciBvZiBDb21tYW5kIHN0 cnVjdHMgKi8NCitzdGF0aWMgaW50ICB0b3RhbF93ZWlnaHQgPSAwOw0KKw0K IHN0YXRpYyBpbnQJZGVidWcgPSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8NCiAN Ci0vKiBkZWZhdWx0IHNjZW5hcmlvICovDQotc3RhdGljIGNoYXIgKnRwY19i ID0gew0KKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8NCitzdGF0aWMgdm9p ZCBzZXRhbGFybShpbnQgc2Vjb25kcyk7DQorc3RhdGljIHZvaWQgKnRocmVh ZFJ1bih2b2lkICphcmcpOw0KK3N0YXRpYyB2b2lkIGRvVHhTdGF0cyhUU3Rh dGUqLCBDU3RhdGUqLCBpbnN0cl90aW1lKiwgYm9vbCwgRklMRSosIFN0YXRz RGF0YSopOw0KKw0KKy8qIERlZmluZSBidWlsdGluIHRlc3Qgc2NyaXB0cyAq Lw0KKyNkZWZpbmUgTl9CVUlMVElOIDMNCitzdGF0aWMgc3RydWN0IHsNCisJ Y2hhciAqbmFtZTsgICAvKiB2ZXJ5IHNob3J0IG5hbWUgZm9yIC1iIC4uLiov DQorCWNoYXIgKmRlc2M7ICAgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8NCisJ Y2hhciAqc2NyaXB0OyAvKiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9 IGJ1aWx0aW5fc2NyaXB0W10gPSB7DQorew0KKwkidHBjYi1saWtlIiwNCisJ IjxidWlsdGluOiBUUEMtQiAoc29ydCBvZik+IiwNCiAJIlxcc2V0IG5icmFu Y2hlcyAiIENwcEFzU3RyaW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiIN CiAJIlxcc2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAi ICogOnNjYWxlXG4iDQogCSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmlu ZzIobmFjY291bnRzKSAiICogOnNjYWxlXG4iDQpAQCAtMzE0LDEwICszNDEs MTAgQEAgc3RhdGljIGNoYXIgKnRwY19iID0gew0KIAkiVVBEQVRFIHBnYmVu Y2hfYnJhbmNoZXMgU0VUIGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6ZGVsdGEg V0hFUkUgYmlkID0gOmJpZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVuY2hf aGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMg KDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVAp O1xuIg0KIAkiRU5EO1xuIg0KLX07DQotDQotLyogLU4gY2FzZSAqLw0KLXN0 YXRpYyBjaGFyICpzaW1wbGVfdXBkYXRlID0gew0KK30sDQorew0KKwkic2lt cGxlLXVwZGF0ZSIsDQorCSI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4iLA0K IAkiXFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykg IiAqIDpzY2FsZVxuIg0KIAkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmlu ZzIobnRlbGxlcnMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG5hY2NvdW50 cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCkBA IC0zMzAsMjEgKzM1NywzMiBAQCBzdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0 ZSA9IHsNCiAJIlNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3Vu dHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVu Y2hfaGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxV RVMgKDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RB TVApO1xuIg0KIAkiRU5EO1xuIg0KLX07DQotDQotLyogLVMgY2FzZSAqLw0K LXN0YXRpYyBjaGFyICpzZWxlY3Rfb25seSA9IHsNCit9LA0KK3sNCisJInNl bGVjdC1vbmx5IiwNCisJIjxidWlsdGluOiBzZWxlY3Qgb25seT4iLA0KIAki XFxzZXQgbmFjY291bnRzICIgQ3BwQXNTdHJpbmcyKG5hY2NvdW50cykgIiAq IDpzY2FsZVxuIg0KIAkiXFxzZXRyYW5kb20gYWlkIDEgOm5hY2NvdW50c1xu Ig0KIAkiU0VMRUNUIGFiYWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBX SEVSRSBhaWQgPSA6YWlkO1xuIg0KLX07DQorfSB9Ow0KIA0KLS8qIEZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8NCi1zdGF0aWMgdm9pZCBzZXRhbGFybShpbnQg c2Vjb25kcyk7DQotc3RhdGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcp Ow0KK3N0YXRpYyBjaGFyICoNCitmaW5kX2J1aWx0aW4oY29uc3QgY2hhciAq bmFtZSwgY2hhciAqKmRlc2MpDQorew0KKwlpbnQJCWxlbiA9IHN0cmxlbihu YW1lKSwgaTsNCiANCi1zdGF0aWMgdm9pZCBkb0xvZyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93 LA0KLQkgIEFnZ1ZhbHMgKmFnZywgYm9vbCBza2lwcGVkKTsNCisJZm9yIChp ID0gMDsgaSA8IE5fQlVJTFRJTjsgaSsrKQ0KKwl7DQorCQlpZiAoc3RybmNt cChidWlsdGluX3NjcmlwdFtpXS5uYW1lLCBuYW1lLCBsZW4pID09IDApDQor CQl7DQorCQkJKmRlc2MgPSBidWlsdGluX3NjcmlwdFtpXS5kZXNjOw0KKwkJ CXJldHVybiBidWlsdGluX3NjcmlwdFtpXS5zY3JpcHQ7DQorCQl9DQorCX0N CisNCisJZnByaW50ZihzdGRlcnIsICJubyBidWlsdGluIGZvdW5kIGZvciBc IiVzXCJcbiIsIG5hbWUpOw0KKwlleGl0KDEpOw0KK30NCiANCiBzdGF0aWMg dm9pZA0KIHVzYWdlKHZvaWQpDQpAQCAtMzY0LDExICs0MDIsMTMgQEAgdXNh Z2Uodm9pZCkNCiAJICIgIC0tdGFibGVzcGFjZT1UQUJMRVNQQUNFICBjcmVh dGUgdGFibGVzIGluIHRoZSBzcGVjaWZpZWQgdGFibGVzcGFjZVxuIg0KIAkJ ICAgIiAgLS11bmxvZ2dlZC10YWJsZXMgICAgICAgIGNyZWF0ZSB0YWJsZXMg YXMgdW5sb2dnZWQgdGFibGVzXG4iDQogCQkgICAiXG5CZW5jaG1hcmtpbmcg b3B0aW9uczpcbiINCisJCSAgICIgIC1iLCAtLWJ1aWx0aW49TkFNRUBXICAg ICBhZGQgd2VpZ2h0ZWQgYnVpdGluIHNjcmlwdCBhbW9uZyBcInRwY2ItbGlr ZVwiXG4iDQorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJz aW1wbGUtdXBkYXRlXCIgYW5kIFwic2VsZWN0LW9ubHlcIi5cbiINCiAJCSAg ICIgIC1jLCAtLWNsaWVudD1OVU0gICAgICAgICBudW1iZXIgb2YgY29uY3Vy cmVudCBkYXRhYmFzZSBjbGllbnRzIChkZWZhdWx0OiAxKVxuIg0KIAkJICAg IiAgLUMsIC0tY29ubmVjdCAgICAgICAgICAgIGVzdGFibGlzaCBuZXcgY29u bmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvblxuIg0KIAkJICAgIiAgLUQs IC0tZGVmaW5lPVZBUk5BTUU9VkFMVUVcbiINCiAJICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVmaW5lIHZhcmlhYmxlIGZvciB1c2UgYnkgY3Vz dG9tIHNjcmlwdFxuIg0KLQkJICIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAg ICByZWFkIHRyYW5zYWN0aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQor CQkgIiAgLWYsIC0tZmlsZT1GSUxFTkFNRUBXICAgIGFkZCB3ZWlnaHRlZCB0 cmFuc2FjdGlvbiBzY3JpcHQgZnJvbSBGSUxFTkFNRVxuIg0KIAkJICAgIiAg LWosIC0tam9icz1OVU0gICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzIChk ZWZhdWx0OiAxKVxuIg0KIAkJICAgIiAgLWwsIC0tbG9nICAgICAgICAgICAg ICAgIHdyaXRlIHRyYW5zYWN0aW9uIHRpbWVzIHRvIGxvZyBmaWxlXG4iDQog CSIgIC1MLCAtLWxhdGVuY3ktbGltaXQ9TlVNICBjb3VudCB0cmFuc2FjdGlv bnMgbGFzdGluZyBtb3JlIHRoYW4gTlVNIG1zXG4iDQpAQCAtMzc2LDE3ICs0 MTYsMTggQEAgdXNhZ2Uodm9pZCkNCiAJCSAgICIgIC1NLCAtLXByb3RvY29s PXNpbXBsZXxleHRlbmRlZHxwcmVwYXJlZFxuIg0KIAkJICAgIiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGZvciBzdWJtaXR0aW5nIHF1 ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiINCiAJCSAgICIgIC1uLCAtLW5v LXZhY3V1bSAgICAgICAgICBkbyBub3QgcnVuIFZBQ1VVTSBiZWZvcmUgdGVz dHNcbiINCi0JCSAgICIgIC1OLCAtLXNraXAtc29tZS11cGRhdGVzICBza2lw IHVwZGF0ZXMgb2YgcGdiZW5jaF90ZWxsZXJzIGFuZCBwZ2JlbmNoX2JyYW5j aGVzXG4iDQorCQkgICAiICAtTiwgLS1za2lwLXNvbWUtdXBkYXRlcyAgc2Ft ZSBhcyBcIi1iIHNpbXBsZS11cGRhdGVAMVwiXG4iDQogCQkgICAiICAtUCwg LS1wcm9ncmVzcz1OVU0gICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVw b3J0IGV2ZXJ5IE5VTSBzZWNvbmRzXG4iDQogCQkgICAiICAtciwgLS1yZXBv cnQtbGF0ZW5jaWVzICAgcmVwb3J0IGF2ZXJhZ2UgbGF0ZW5jeSBwZXIgY29t bWFuZFxuIg0KIAkJIiAgLVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdl dCByYXRlIGluIHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kXG4iDQogCQkgICAi ICAtcywgLS1zY2FsZT1OVU0gICAgICAgICAgcmVwb3J0IHRoaXMgc2NhbGUg ZmFjdG9yIGluIG91dHB1dFxuIg0KLQkJICAgIiAgLVMsIC0tc2VsZWN0LW9u bHkgICAgICAgIHBlcmZvcm0gU0VMRUNULW9ubHkgdHJhbnNhY3Rpb25zXG4i DQorCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAgICAgICAgc2FtZSBhcyBc Ii1iIHNlbGVjdC1vbmx5QDFcIlxuIg0KIAkJICAgIiAgLXQsIC0tdHJhbnNh Y3Rpb25zPU5VTSAgIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgZWFjaCBjbGll bnQgcnVucyAoZGVmYXVsdDogMTApXG4iDQogCQkgIiAgLVQsIC0tdGltZT1O VU0gICAgICAgICAgIGR1cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0IGluIHNl Y29uZHNcbiINCiAJCSAgICIgIC12LCAtLXZhY3V1bS1hbGwgICAgICAgICB2 YWN1dW0gYWxsIGZvdXIgc3RhbmRhcmQgdGFibGVzIGJlZm9yZSB0ZXN0c1xu Ig0KIAkJICAgIiAgLS1hZ2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0 ZSBkYXRhIG92ZXIgTlVNIHNlY29uZHNcbiINCiAJCSAgICIgIC0tc2FtcGxp bmctcmF0ZT1OVU0gICAgICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8g bG9nIChlLmcuIDAuMDEgZm9yIDElJSlcbiINCisJCSAgICIgIC0tcGVyLXNj cmlwdC1zdGF0cyAgICAgICByZXBvcnQgcGVyLXNjcmlwdCBzdGF0aXN0aWNz XG4iDQogCQkgICAiXG5Db21tb24gb3B0aW9uczpcbiINCiAJCSAgICIgIC1k LCAtLWRlYnVnICAgICAgICAgICAgICBwcmludCBkZWJ1Z2dpbmcgb3V0cHV0 XG4iDQogCSAgIiAgLWgsIC0taG9zdD1IT1NUTkFNRSAgICAgIGRhdGFiYXNl IHNlcnZlciBob3N0IG9yIHNvY2tldCBkaXJlY3RvcnlcbiINCkBAIC01Nzgs NiArNjE5LDQ5IEBAIGdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBp bnQ2NCBjZW50ZXIpDQogCXJldHVybiAoaW50NjQpICgtbG9nKHVuaWZvcm0p ICogKChkb3VibGUpIGNlbnRlcikgKyAwLjUpOw0KIH0NCiANCitzdGF0aWMg dm9pZA0KK2luaXRTaW1wbGVTdGF0cyhTaW1wbGVTdGF0cyAqIHNzKQ0KK3sN CisJbWVtc2V0KHNzLCAwLCBzaXplb2YoU2ltcGxlU3RhdHMpKTsNCit9DQor DQorc3RhdGljIHZvaWQNCitkb1NpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICpz cywgZG91YmxlIHZhbCkNCit7DQorCWlmIChzcy0+Y291bnQgPT0gMCB8fCB2 YWwgPCBzcy0+bWluKQ0KKwkJc3MtPm1pbiA9IHZhbDsNCisJaWYgKHNzLT5j b3VudCA9PSAwIHx8IHZhbCA+IHNzLT5tYXgpDQorCQlzcy0+bWF4ID0gdmFs Ow0KKwlzcy0+Y291bnQgKys7DQorCXNzLT5zdW0gKz0gdmFsOw0KKwlzcy0+ c3VtMiArPSB2YWwgKiB2YWw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorYXBw ZW5kU2ltcGxlU3RhdHMoU2ltcGxlU3RhdHMgKmFjYywgU2ltcGxlU3RhdHMg KnNzKQ0KK3sNCisJaWYgKGFjYy0+Y291bnQgPT0gMCB8fCBzcy0+bWluIDwg YWNjLT5taW4pDQorCQlhY2MtPm1pbiA9IHNzLT5taW47DQorCWlmIChhY2Mt PmNvdW50ID09IDAgfHwgc3MtPm1heCA+IGFjYy0+bWF4KQ0KKwkJYWNjLT5t YXggPSBzcy0+bWF4Ow0KKwlhY2MtPmNvdW50ICs9IHNzLT5jb3VudDsNCisJ YWNjLT5zdW0gKz0gc3MtPnN1bTsNCisJYWNjLT5zdW0yICs9IHNzLT5zdW0y Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK2luaXRTdGF0cyhTdGF0c0RhdGEg KnNkLCBkb3VibGUgc3RhcnRfdGltZSkNCit7DQorCXNkLT5jbnQgPSAwOw0K KwlzZC0+c2tpcHBlZCA9IDA7DQorCWluaXRTaW1wbGVTdGF0cygmIHNkLT5s YXRlbmN5KTsNCisJaW5pdFNpbXBsZVN0YXRzKCYgc2QtPmxhZyk7DQorDQor CS8qIG5vdCBuZWNlc3NhcmlseSBvdmVycmlkZW4/ICovDQorCWlmIChzdGFy dF90aW1lKQ0KKwkJc2QtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOw0KK30N CisNCiAvKiBjYWxsIFBRZXhlYygpIGFuZCBleGl0KCkgb24gZmFpbHVyZSAq Lw0KIHN0YXRpYyB2b2lkDQogZXhlY3V0ZVN0YXRlbWVudChQR2Nvbm4gKmNv biwgY29uc3QgY2hhciAqc3FsKQ0KQEAgLTEwOTcsMzMgKzExODEsMjEgQEAg Y2xpZW50RG9uZShDU3RhdGUgKnN0LCBib29sIG9rKQ0KIAlyZXR1cm4gZmFs c2U7CQkJCS8qIGFsd2F5cyBmYWxzZSAqLw0KIH0NCiANCi1zdGF0aWMgdm9p ZA0KLWFnZ192YWxzX2luaXQoQWdnVmFscyAqYWdncywgaW5zdHJfdGltZSBz dGFydCkNCitzdGF0aWMgaW50DQorY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhy ZWFkKQ0KIHsNCi0JLyogYmFzaWMgY291bnRlcnMgKi8NCi0JYWdncy0+Y250 ID0gMDsJCQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAoaW5jbHVkZXMg c2tpcHBlZCkgKi8NCi0JYWdncy0+c2tpcHBlZCA9IDA7CQkJLyogeGFjdHMg c2tpcHBlZCB1bmRlciAtLXJhdGUgLS1sYXRlbmN5LWxpbWl0ICovDQotDQot CWFnZ3MtPnN1bV9sYXRlbmN5ID0gMDsJCS8qIFNVTShsYXRlbmN5KSAqLw0K LQlhZ2dzLT5zdW0yX2xhdGVuY3kgPSAwOwkJLyogU1VNKGxhdGVuY3kqbGF0 ZW5jeSkgKi8NCisJaW50IGkgPSAwLCB3ID0gMCwgd2MgPSAoaW50KSBnZXRy YW5kKHRocmVhZCwgMCwgdG90YWxfd2VpZ2h0IC0gMSk7DQogDQotCS8qIG1p biBhbmQgbWF4IHRyYW5zYWN0aW9uIGR1cmF0aW9uICovDQotCWFnZ3MtPm1p bl9sYXRlbmN5ID0gMDsNCi0JYWdncy0+bWF4X2xhdGVuY3kgPSAwOw0KKwlk byB7DQorCQl3ICs9IHNxbF9zY3JpcHRbaSsrXS53ZWlnaHQ7DQorCX0gd2hp bGUgKHcgPD0gd2MpOw0KIA0KLQkvKiBzY2hlZHVsZSBsYWcgY291bnRlcnMg Ki8NCi0JYWdncy0+c3VtX2xhZyA9IDA7DQotCWFnZ3MtPnN1bTJfbGFnID0g MDsNCi0JYWdncy0+bWluX2xhZyA9IDA7DQotCWFnZ3MtPm1heF9sYWcgPSAw Ow0KLQ0KLQkvKiBzdGFydCBvZiB0aGUgY3VycmVudCBpbnRlcnZhbCAqLw0K LQlhZ2dzLT5zdGFydF90aW1lID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0 YXJ0KTsNCisJcmV0dXJuIGkgLSAxOw0KIH0NCiANCiAvKiByZXR1cm4gZmFs c2UgaWZmIGNsaWVudCBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovDQogc3Rh dGljIGJvb2wNCi1kb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgaW5zdHJfdGltZSAqY29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBBZ2dW YWxzICphZ2cpDQorZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIGluc3RyX3RpbWUgKmNvbm5fdGltZSwgRklMRSAqbG9nZmlsZSwgU3Rh dHNEYXRhICphZ2cpDQogew0KIAlQR3Jlc3VsdCAgICpyZXM7DQogCUNvbW1h bmQgICAqKmNvbW1hbmRzOw0KQEAgLTExNDAsNyArMTIxMiw3IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpj b25uX3RpbWUsIEZJTEUgKmxvZ2ZpbGUsIEFnZ1ZhDQogCUlOU1RSX1RJTUVf U0VUX1pFUk8obm93KTsNCiANCiB0b3A6DQotCWNvbW1hbmRzID0gc3FsX2Zp bGVzW3N0LT51c2VfZmlsZV07DQorCWNvbW1hbmRzID0gc3FsX3NjcmlwdFtz dC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIA0KIAkvKg0KIAkgKiBIYW5kbGUg dGhyb3R0bGluZyBvbmNlIHBlciB0cmFuc2FjdGlvbiBieSBzbGVlcGluZy4g IEl0IGlzIHNpbXBsZXIgdG8NCkBAIC0xMTc2LDE4ICsxMjQ4LDE1IEBAIHRv cDoNCiAJCQlub3dfdXMgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cp Ow0KIAkJCXdoaWxlICh0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgPCBub3df dXMgLSBsYXRlbmN5X2xpbWl0KQ0KIAkJCXsNCi0JCQkJdGhyZWFkLT50aHJv dHRsZV9sYXRlbmN5X3NraXBwZWQrKzsNCi0NCi0JCQkJaWYgKGxvZ2ZpbGUp DQotCQkJCQlkb0xvZyh0aHJlYWQsIHN0LCBsb2dmaWxlLCAmbm93LCBhZ2cs IHRydWUpOw0KLQ0KKwkJCQlkb1R4U3RhdHModGhyZWFkLCBzdCwgICZub3cs IHRydWUsIGxvZ2ZpbGUsIGFnZyk7DQorCQkJCS8qIG5leHQgcmVuZGV6LXZv dXMgKi8NCiAJCQkJd2FpdCA9IGdldFBvaXNzb25SYW5kKHRocmVhZCwgdGhy b3R0bGVfZGVsYXkpOw0KIAkJCQl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIg Kz0gd2FpdDsNCiAJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRo cm90dGxlX3RyaWdnZXI7DQogCQkJfQ0KIAkJfQ0KIA0KLQkJc3QtPnNsZWVw aW5nID0gMTsNCisJCXN0LT5zbGVlcGluZyA9IHRydWU7DQogCQlzdC0+dGhy b3R0bGluZyA9IHRydWU7DQogCQlzdC0+aXNfdGhyb3R0bGVkID0gdHJ1ZTsN CiAJCWlmIChkZWJ1ZykNCkBAIC0xMTk3LDI3ICsxMjY2LDEzIEBAIHRvcDoN CiANCiAJaWYgKHN0LT5zbGVlcGluZykNCiAJewkJCQkJCQkvKiBhcmUgd2Ug c2xlZXBpbmc/ICovDQotCQlpbnQ2NAkJbm93X3VzOw0KLQ0KIAkJaWYgKElO U1RSX1RJTUVfSVNfWkVSTyhub3cpKQ0KIAkJCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQobm93KTsNCi0JCW5vd191cyA9IElOU1RSX1RJTUVfR0VUX01JQ1JP U0VDKG5vdyk7DQotCQlpZiAoc3QtPnR4bl9zY2hlZHVsZWQgPD0gbm93X3Vz KQ0KLQkJew0KLQkJCXN0LT5zbGVlcGluZyA9IDA7CS8qIERvbmUgc2xlZXBp bmcsIGdvIGFoZWFkIHdpdGggbmV4dCBjb21tYW5kICovDQotCQkJaWYgKHN0 LT50aHJvdHRsaW5nKQ0KLQkJCXsNCi0JCQkJLyogTWVhc3VyZSBsYWcgb2Yg dGhyb3R0bGVkIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHRvIHRhcmdldCAqLw0K LQkJCQlpbnQ2NAkJbGFnID0gbm93X3VzIC0gc3QtPnR4bl9zY2hlZHVsZWQ7 DQotDQotCQkJCXRocmVhZC0+dGhyb3R0bGVfbGFnICs9IGxhZzsNCi0JCQkJ aWYgKGxhZyA+IHRocmVhZC0+dGhyb3R0bGVfbGFnX21heCkNCi0JCQkJCXRo cmVhZC0+dGhyb3R0bGVfbGFnX21heCA9IGxhZzsNCi0JCQkJc3QtPnRocm90 dGxpbmcgPSBmYWxzZTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQorCQlpZiAo SU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KSA8IHN0LT50eG5fc2NoZWR1 bGVkKQ0KIAkJCXJldHVybiB0cnVlOwkJLyogU3RpbGwgc2xlZXBpbmcsIG5v dGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJLyogRWxzZSBkb25lIHNsZWVwaW5n LCBnbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZCAqLw0KKwkJc3QtPnNsZWVw aW5nID0gZmFsc2U7DQorCQlzdC0+dGhyb3R0bGluZyA9IGZhbHNlOw0KIAl9 DQogDQogCWlmIChzdC0+bGlzdGVuKQ0KQEAgLTEyNTMsMzUgKzEzMDgsMTAg QEAgdG9wOg0KIAkJLyogdHJhbnNhY3Rpb24gZmluaXNoZWQ6IGNhbGN1bGF0 ZSBsYXRlbmN5IGFuZCBsb2cgdGhlIHRyYW5zYWN0aW9uICovDQogCQlpZiAo Y29tbWFuZHNbc3QtPnN0YXRlICsgMV0gPT0gTlVMTCkNCiAJCXsNCi0JCQkv KiBvbmx5IGNhbGN1bGF0ZSBsYXRlbmN5IGlmIGFuIG9wdGlvbiBpcyB1c2Vk IHRoYXQgbmVlZHMgaXQgKi8NCi0JCQlpZiAocHJvZ3Jlc3MgfHwgdGhyb3R0 bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkNCi0JCQl7DQotCQkJCWludDY0 CQlsYXRlbmN5Ow0KLQ0KLQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5v dykpDQotCQkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQotDQot CQkJCWxhdGVuY3kgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cpIC0g c3QtPnR4bl9zY2hlZHVsZWQ7DQotDQotCQkJCXN0LT50eG5fbGF0ZW5jaWVz ICs9IGxhdGVuY3k7DQotDQotCQkJCS8qDQotCQkJCSAqIFhYWCBJbiBhIGxv bmcgYmVuY2htYXJrIHJ1biBvZiBoaWdoLWxhdGVuY3kgdHJhbnNhY3Rpb25z LA0KLQkJCQkgKiB0aGlzIGludDY0IGFkZGl0aW9uIGV2ZW50dWFsbHkgb3Zl cmZsb3dzLiAgRm9yIGV4YW1wbGUsIDEwMA0KLQkJCQkgKiB0aHJlYWRzIHJ1 bm5pbmcgMTBzIHRyYW5zYWN0aW9ucyB3aWxsIG92ZXJmbG93IGl0IGluIDIu NTYNCi0JCQkJICogaG91cnMuICBXaXRoIGEgbW9yZS10eXBpY2FsIE9MVFAg d29ya2xvYWQgb2YgLjFzDQotCQkJCSAqIHRyYW5zYWN0aW9ucywgb3ZlcmZs b3cgd291bGQgdGFrZSAyNTYgaG91cnMuDQotCQkJCSAqLw0KLQkJCQlzdC0+ dHhuX3NxbGF0cyArPSBsYXRlbmN5ICogbGF0ZW5jeTsNCi0NCi0JCQkJLyog cmVjb3JkIG92ZXIgdGhlIGxpbWl0IHRyYW5zYWN0aW9ucyBpZiBuZWVkZWQu ICovDQotCQkJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRl bmN5X2xpbWl0KQ0KLQkJCQkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsNCi0J CQl9DQotDQotCQkJLyogcmVjb3JkIHRoZSB0aW1lIGl0IHRvb2sgaW4gdGhl IGxvZyAqLw0KLQkJCWlmIChsb2dmaWxlKQ0KLQkJCQlkb0xvZyh0aHJlYWQs IHN0LCBsb2dmaWxlLCAmbm93LCBhZ2csIGZhbHNlKTsNCisJCQlpZiAocHJv Z3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCB8fCBw ZXJfc2NyaXB0X3N0YXRzIHx8IGxvZ2ZpbGUpDQorCQkJCWRvVHhTdGF0cyh0 aHJlYWQsIHN0LCAmbm93LCBmYWxzZSwgbG9nZmlsZSwgYWdnKTsNCisJCQll bHNlDQorCQkJCXRocmVhZC0+c3RhdHMuY250ICsrOw0KIAkJfQ0KIA0KIAkJ aWYgKGNvbW1hbmRzW3N0LT5zdGF0ZV0tPnR5cGUgPT0gU1FMX0NPTU1BTkQp DQpAQCAtMTMyNCw4ICsxMzU0LDkgQEAgdG9wOg0KIAkJaWYgKGNvbW1hbmRz W3N0LT5zdGF0ZV0gPT0gTlVMTCkNCiAJCXsNCiAJCQlzdC0+c3RhdGUgPSAw Ow0KLQkJCXN0LT51c2VfZmlsZSA9IChpbnQpIGdldHJhbmQodGhyZWFkLCAw LCBudW1fZmlsZXMgLSAxKTsNCi0JCQljb21tYW5kcyA9IHNxbF9maWxlc1tz dC0+dXNlX2ZpbGVdOw0KKwkJCXN0LT51c2VfZmlsZSA9IG51bV9zY3JpcHRz PT0xPyAwOiBjaG9vc2VTY3JpcHQodGhyZWFkKTsNCisNCisJCQljb21tYW5k cyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJCQlz dC0+aXNfdGhyb3R0bGVkID0gZmFsc2U7DQogDQogCQkJLyoNCkBAIC0xMzY4 LDcgKzEzOTksNyBAQCB0b3A6DQogCX0NCiANCiAJLyogUmVjb3JkIHRyYW5z YWN0aW9uIHN0YXJ0IHRpbWUgdW5kZXIgbG9nZ2luZywgcHJvZ3Jlc3Mgb3Ig dGhyb3R0bGluZyAqLw0KLQlpZiAoKGxvZ2ZpbGUgfHwgcHJvZ3Jlc3MgfHwg dGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkgJiYgc3QtPnN0YXRl ID09IDApDQorCWlmICgobG9nZmlsZSB8fCBwcm9ncmVzcyB8fCB0aHJvdHRs ZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0IHx8IHBlcl9zY3JpcHRfc3RhdHMp ICYmIHN0LT5zdGF0ZSA9PSAwKQ0KIAl7DQogCQlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKHN0LT50eG5fYmVnaW4pOw0KIA0KQEAgLTE2NTYsNyArMTY4Nyw3 IEBAIHRvcDoNCiANCiAJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7 DQogCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSBJTlNUUl9USU1FX0dFVF9NSUNS T1NFQyhub3cpICsgdXNlYzsNCi0JCQlzdC0+c2xlZXBpbmcgPSAxOw0KKwkJ CXN0LT5zbGVlcGluZyA9IHRydWU7DQogDQogCQkJc3QtPmxpc3RlbiA9IDE7 DQogCQl9DQpAQCAtMTY5NCwxNiArMTcyNSwzMSBAQCB0b3A6DQogCXJldHVy biB0cnVlOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK2RvU3RhdHMoU3RhdHNE YXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUg bGFnKQ0KK3sNCisJc3RhdHMtPmNudCArKzsNCisNCisJaWYgKHNraXBwZWQp DQorCQkvKiBubyBsYXRlbmN5IHRvIHJlY29yZCBvbiBza2lwcGVkIHRyYW5z YWN0aW9ucyAqLw0KKwkJc3RhdHMtPnNraXBwZWQgKys7DQorCWVsc2UNCisJ ew0KKwkJZG9TaW1wbGVTdGF0cygmIHN0YXRzLT5sYXRlbmN5LCBsYXQpOw0K Kw0KKwkJLyogYW5kIHBvc3NpYmx5IHRoZSBzYW1lIGZvciBzY2hlZHVsZSBs YWcgKi8NCisJCWlmICh0aHJvdHRsZV9kZWxheSkNCisJCQlkb1NpbXBsZVN0 YXRzKCYgc3RhdHMtPmxhZywgbGFnKTsNCisJfQ0KK30NCisNCiAvKg0KICAq IHByaW50IGxvZyBlbnRyeSBhZnRlciBjb21wbGV0aW5nIG9uZSB0cmFuc2Fj dGlvbi4NCiAgKi8NCiBzdGF0aWMgdm9pZA0KLWRvTG9nKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpu b3csIEFnZ1ZhbHMgKmFnZywNCi0JICBib29sIHNraXBwZWQpDQorZG9Mb2co VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGlu c3RyX3RpbWUgKm5vdywNCisJICBTdGF0c0RhdGEgKmFnZywgYm9vbCBza2lw cGVkLCBkb3VibGUgbGF0ZW5jeSwgZG91YmxlIGxhZykNCiB7DQotCWRvdWJs ZQkJbGFnOw0KLQlkb3VibGUJCWxhdGVuY3k7DQotDQogCS8qDQogCSAqIFNr aXAgdGhlIGxvZyBlbnRyeSBpZiBzYW1wbGluZyBpcyBlbmFibGVkIGFuZCB0 aGlzIHJvdyBkb2Vzbid0IGJlbG9uZw0KIAkgKiB0byB0aGUgcmFuZG9tIHNh bXBsZS4NCkBAIC0xNzEyLDE1ICsxNzU4LDYgQEAgZG9Mb2coVFN0YXRlICp0 aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUg Km5vdywgQWdnVmFscyAqYWdnLA0KIAkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJh bmRvbV9zdGF0ZSkgPiBzYW1wbGVfcmF0ZSkNCiAJCXJldHVybjsNCiANCi0J aWYgKElOU1RSX1RJTUVfSVNfWkVSTygqbm93KSkNCi0JCUlOU1RSX1RJTUVf U0VUX0NVUlJFTlQoKm5vdyk7DQotDQotCWxhdGVuY3kgPSAoZG91YmxlKSAo SU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+dHhuX3NjaGVk dWxlZCk7DQotCWlmIChza2lwcGVkKQ0KLQkJbGFnID0gbGF0ZW5jeTsNCi0J ZWxzZQ0KLQkJbGFnID0gKGRvdWJsZSkgKElOU1RSX1RJTUVfR0VUX01JQ1JP U0VDKHN0LT50eG5fYmVnaW4pIC0gc3QtPnR4bl9zY2hlZHVsZWQpOw0KLQ0K IAkvKiBzaG91bGQgd2UgYWdncmVnYXRlIHRoZSByZXN1bHRzIG9yIG5vdD8g Ki8NCiAJaWYgKGFnZ19pbnRlcnZhbCA+IDApDQogCXsNCkBAIC0xNzMwLDM5 ICsxNzY3LDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs IEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdn LA0KIAkJICovDQogCQlpZiAoYWdnLT5zdGFydF90aW1lICsgYWdnX2ludGVy dmFsID49IElOU1RSX1RJTUVfR0VUX0RPVUJMRSgqbm93KSkNCiAJCXsNCi0J CQlhZ2ctPmNudCArPSAxOw0KLQkJCWlmIChza2lwcGVkKQ0KLQkJCXsNCi0J CQkJLyoNCi0JCQkJICogdGhlcmUgaXMgbm8gbGF0ZW5jeSB0byByZWNvcmQg aWYgdGhlIHRyYW5zYWN0aW9uIHdhcw0KLQkJCQkgKiBza2lwcGVkDQotCQkJ CSAqLw0KLQkJCQlhZ2ctPnNraXBwZWQgKz0gMTsNCi0JCQl9DQotCQkJZWxz ZQ0KLQkJCXsNCi0JCQkJYWdnLT5zdW1fbGF0ZW5jeSArPSBsYXRlbmN5Ow0K LQkJCQlhZ2ctPnN1bTJfbGF0ZW5jeSArPSBsYXRlbmN5ICogbGF0ZW5jeTsN Ci0NCi0JCQkJLyogZmlyc3QgaW4gdGhpcyBhZ2dyZWdhdGlvbiBpbnRlcnZh bCAqLw0KLQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYXRlbmN5IDwg YWdnLT5taW5fbGF0ZW5jeSkpDQotCQkJCQlhZ2ctPm1pbl9sYXRlbmN5ID0g bGF0ZW5jeTsNCi0NCi0JCQkJaWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGF0 ZW5jeSA+IGFnZy0+bWF4X2xhdGVuY3kpKQ0KLQkJCQkJYWdnLT5tYXhfbGF0 ZW5jeSA9IGxhdGVuY3k7DQotDQotCQkJCS8qIGFuZCB0aGUgc2FtZSBmb3Ig c2NoZWR1bGUgbGFnICovDQotCQkJCWlmICh0aHJvdHRsZV9kZWxheSkNCi0J CQkJew0KLQkJCQkJYWdnLT5zdW1fbGFnICs9IGxhZzsNCi0JCQkJCWFnZy0+ c3VtMl9sYWcgKz0gbGFnICogbGFnOw0KLQ0KLQkJCQkJaWYgKChhZ2ctPmNu dCA9PSAxKSB8fCAobGFnIDwgYWdnLT5taW5fbGFnKSkNCi0JCQkJCQlhZ2ct Pm1pbl9sYWcgPSBsYWc7DQotCQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8 IChsYWcgPiBhZ2ctPm1heF9sYWcpKQ0KLQkJCQkJCWFnZy0+bWF4X2xhZyA9 IGxhZzsNCi0JCQkJfQ0KLQkJCX0NCisJCQlkb1N0YXRzKGFnZywgc2tpcHBl ZCwgbGF0ZW5jeSwgbGFnKTsNCiAJCX0NCiAJCWVsc2UNCiAJCXsNCkBAIC0x Nzc3LDUyICsxNzgyLDM0IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3Rh dGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1Zh bHMgKmFnZywNCiAJCQkJICogdXNhZ2UpLCBzbyB3ZSBkb24ndCBuZWVkIHRv IGhhbmRsZSB0aGlzIGluIGEgc3BlY2lhbCB3YXkNCiAJCQkJICogKHNlZSBi ZWxvdykuDQogCQkJCSAqLw0KLQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQg JWQgJS4wZiAlLjBmICUuMGYgJS4wZiIsDQorCQkJCWZwcmludGYobG9nZmls ZSwgIiVsZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBmICUuMGYi LA0KIAkJCQkJCWFnZy0+c3RhcnRfdGltZSwNCiAJCQkJCQlhZ2ctPmNudCwN Ci0JCQkJCQlhZ2ctPnN1bV9sYXRlbmN5LA0KLQkJCQkJCWFnZy0+c3VtMl9s YXRlbmN5LA0KLQkJCQkJCWFnZy0+bWluX2xhdGVuY3ksDQotCQkJCQkJYWdn LT5tYXhfbGF0ZW5jeSk7DQorCQkJCQkJYWdnLT5sYXRlbmN5LnN1bSwNCisJ CQkJCQlhZ2ctPmxhdGVuY3kuc3VtMiwNCisJCQkJCQlhZ2ctPmxhdGVuY3ku bWluLA0KKwkJCQkJCWFnZy0+bGF0ZW5jeS5tYXgpOw0KIAkJCQlpZiAodGhy b3R0bGVfZGVsYXkpDQogCQkJCXsNCiAJCQkJCWZwcmludGYobG9nZmlsZSwg IiAlLjBmICUuMGYgJS4wZiAlLjBmIiwNCi0JCQkJCQkJYWdnLT5zdW1fbGFn LA0KLQkJCQkJCQlhZ2ctPnN1bTJfbGFnLA0KLQkJCQkJCQlhZ2ctPm1pbl9s YWcsDQotCQkJCQkJCWFnZy0+bWF4X2xhZyk7DQorCQkJCQkJCWFnZy0+bGFn LnN1bSwNCisJCQkJCQkJYWdnLT5sYWcuc3VtMiwNCisJCQkJCQkJYWdnLT5s YWcubWluLA0KKwkJCQkJCQlhZ2ctPmxhZy5tYXgpOw0KIAkJCQkJaWYgKGxh dGVuY3lfbGltaXQpDQotCQkJCQkJZnByaW50Zihsb2dmaWxlLCAiICVkIiwg YWdnLT5za2lwcGVkKTsNCisJCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJ TlQ2NF9GT1JNQVQsIGFnZy0+c2tpcHBlZCk7DQogCQkJCX0NCiAJCQkJZnB1 dGMoJ1xuJywgbG9nZmlsZSk7DQogDQotCQkJCS8qIG1vdmUgdG8gdGhlIG5l eHQgaW50ZXZhbCAqLw0KLQkJCQlhZ2ctPnN0YXJ0X3RpbWUgPSBhZ2ctPnN0 YXJ0X3RpbWUgKyBhZ2dfaW50ZXJ2YWw7DQorCQkJCS8qIG1vdmUgdG8gdGhl IG5leHQgaW50ZXJ2YWwgKi8NCisJCQkJYWdnLT5zdGFydF90aW1lICs9IGFn Z19pbnRlcnZhbDsNCiANCiAJCQkJLyogcmVzZXQgZm9yICJubyB0cmFuc2Fj dGlvbiIgaW50ZXJ2YWxzICovDQotCQkJCWFnZy0+Y250ID0gMDsNCi0JCQkJ YWdnLT5za2lwcGVkID0gMDsNCi0JCQkJYWdnLT5taW5fbGF0ZW5jeSA9IDA7 DQotCQkJCWFnZy0+bWF4X2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ctPnN1bV9s YXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5zdW0yX2xhdGVuY3kgPSAwOw0KLQkJ CQlhZ2ctPm1pbl9sYWcgPSAwOw0KLQkJCQlhZ2ctPm1heF9sYWcgPSAwOw0K LQkJCQlhZ2ctPnN1bV9sYWcgPSAwOw0KLQkJCQlhZ2ctPnN1bTJfbGFnID0g MDsNCisJCQkJaW5pdFN0YXRzKGFnZywgMC4wKTsNCiAJCQl9DQogDQogCQkJ LyogcmVzZXQgdGhlIHZhbHVlcyB0byBpbmNsdWRlIG9ubHkgdGhlIGN1cnJl bnQgdHJhbnNhY3Rpb24uICovDQotCQkJYWdnLT5jbnQgPSAxOw0KLQkJCWFn Zy0+c2tpcHBlZCA9IHNraXBwZWQgPyAxIDogMDsNCi0JCQlhZ2ctPm1pbl9s YXRlbmN5ID0gbGF0ZW5jeTsNCi0JCQlhZ2ctPm1heF9sYXRlbmN5ID0gbGF0 ZW5jeTsNCi0JCQlhZ2ctPnN1bV9sYXRlbmN5ID0gc2tpcHBlZCA/IDAuMCA6 IGxhdGVuY3k7DQotCQkJYWdnLT5zdW0yX2xhdGVuY3kgPSBza2lwcGVkID8g MC4wIDogbGF0ZW5jeSAqIGxhdGVuY3k7DQotCQkJYWdnLT5taW5fbGFnID0g bGFnOw0KLQkJCWFnZy0+bWF4X2xhZyA9IGxhZzsNCi0JCQlhZ2ctPnN1bV9s YWcgPSBsYWc7DQotCQkJYWdnLT5zdW0yX2xhZyA9IGxhZyAqIGxhZzsNCisJ CQlkb1N0YXRzKGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsNCiAJCX0N CiAJfQ0KIAllbHNlDQpAQCAtMTgzMiwyMSArMTgxOSwyMSBAQCBkb0xvZyhU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5z dHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogDQogCQkvKiBUaGlzIGlz IG1vcmUgdGhhbiB3ZSByZWFsbHkgb3VnaHQgdG8ga25vdyBhYm91dCBpbnN0 cl90aW1lICovDQogCQlpZiAoc2tpcHBlZCkNCi0JCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAlZCBza2lwcGVkICVkICVsZCAlbGQiLA0KKwkJCWZwcmludGYo bG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCAlZCAlbGQg JWxkIiwNCiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLA0K IAkJCQkJKGxvbmcpIG5vdy0+dHZfc2VjLCAobG9uZykgbm93LT50dl91c2Vj KTsNCiAJCWVsc2UNCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAlZCAlLjBm ICVkICVsZCAlbGQiLA0KKwkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5U NjRfRk9STUFUICIgJS4wZiAlZCAlbGQgJWxkIiwNCiAJCQkJCXN0LT5pZCwg c3QtPmNudCwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlLA0KIAkJCQkJKGxvbmcp IG5vdy0+dHZfc2VjLCAobG9uZykgbm93LT50dl91c2VjKTsNCiAjZWxzZQ0K IA0KIAkJLyogT24gV2luZG93cywgaW5zdHJfdGltZSBkb2Vzbid0IHByb3Zp ZGUgYSB0aW1lc3RhbXAgYW55d2F5ICovDQogCQlpZiAoc2tpcHBlZCkNCi0J CQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAlZCBza2lwcGVkICVkIDAgMCIsDQor CQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIklOVDY0X0ZPUk1BVCIgc2tpcHBl ZCAlZCAwIDAiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2Zp bGUpOw0KIAkJZWxzZQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkICUu MGYgJWQgMCAwIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiSU5UNjRf Rk9STUFUIiAlLjBmICVkIDAgMCIsDQogCQkJCQlzdC0+aWQsIHN0LT5jbnQs IGxhdGVuY3ksIHN0LT51c2VfZmlsZSk7DQogI2VuZGlmDQogCQlpZiAodGhy b3R0bGVfZGVsYXkpDQpAQCAtMTg1NSw2ICsxODQyLDQ0IEBAIGRvTG9nKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0 cl90aW1lICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJfQ0KIH0NCiANCisvKg0K KyAqIGVuZCBvZiB0cmFuc2FjdGlvbiBzdGF0aXN0aWNzDQorICovDQorc3Rh dGljIHZvaWQNCitkb1R4U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIGluc3RyX3RpbWUgKm5vdywNCisJCSAgYm9vbCBza2lwcGVkLCBGSUxF ICpsb2dmaWxlLCBTdGF0c0RhdGEgKmFnZykNCit7DQorCWRvdWJsZSBsYXRl bmN5ID0gMC4wLCBsYWcgPSAwLjA7DQorDQorCWlmICgoIXNraXBwZWQgfHwg YWdnX2ludGVydmFsKSAmJiBJTlNUUl9USU1FX0lTX1pFUk8oKm5vdykpDQor CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKCpub3cpOw0KKw0KKwlpZiAoIXNr aXBwZWQpDQorCXsNCisJCS8qIGNvbXB1dGUgbGF0ZW5jeSAmIGxhZyBpZiBu ZWVkZWQgKi8NCisJCWxhdGVuY3kgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NF Qygqbm93KSAtIHN0LT50eG5fc2NoZWR1bGVkOw0KKwkJbGFnID0gSU5TVFJf VElNRV9HRVRfTUlDUk9TRUMoc3QtPnR4bl9iZWdpbikgLSBzdC0+dHhuX3Nj aGVkdWxlZDsNCisJfQ0KKw0KKwlpZiAocHJvZ3Jlc3MgfHwgdGhyb3R0bGVf ZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkNCisJew0KKwkJZG9TdGF0cygmIHRo cmVhZC0+c3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorDQorCQkv KiByZWNvcmQgb3ZlciB0aGUgbGltaXQgdHJhbnNhY3Rpb25zIGlmIG5lZWRl ZC4gKi8NCisJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRl bmN5X2xpbWl0KQ0KKwkJCXRocmVhZC0+bGF0ZW5jeV9sYXRlKys7DQorCX0N CisJZWxzZQ0KKwkJdGhyZWFkLT5zdGF0cy5jbnQgKys7DQorDQorCWlmICh1 c2VfbG9nKQ0KKwkJZG9Mb2codGhyZWFkLCBzdCwgbG9nZmlsZSwgbm93LCBh Z2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorDQorCWlmIChwZXJfc2Ny aXB0X3N0YXRzKSAvKiBtdXRleD8gaG1tbS4uLiB0aGVzZSBhcmUgb25seSBz dGF0aXN0aWNzICovDQorCQlkb1N0YXRzKCYgc3FsX3NjcmlwdFtzdC0+dXNl X2ZpbGVdLnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KK30NCisN CisNCiAvKiBkaXNjYXJkIGNvbm5lY3Rpb25zICovDQogc3RhdGljIHZvaWQN CiBkaXNjb25uZWN0X2FsbChDU3RhdGUgKnN0YXRlLCBpbnQgbGVuZ3RoKQ0K QEAgLTI0NzUsNyArMjUwMCw3IEBAIHJlYWRfbGluZV9mcm9tX2ZpbGUoRklM RSAqZmQpDQogCXJldHVybiBOVUxMOw0KIH0NCiANCi1zdGF0aWMgaW50DQor c3RhdGljIENvbW1hbmQgKioNCiBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5h bWUpDQogew0KICNkZWZpbmUgQ09NTUFORFNfQUxMT0NfTlVNIDEyOA0KQEAg LTI0ODMsMTUgKzI1MDgsOSBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5h bWUpDQogCUNvbW1hbmQgICAqKm15X2NvbW1hbmRzOw0KIAlGSUxFCSAgICpm ZDsNCiAJaW50CQkJbGluZW5vLA0KLQkJCQlpbmRleDsNCisJCQkJaW5kZXgs DQorCQkJCWFsbG9jX251bTsNCiAJY2hhcgkgICAqYnVmOw0KLQlpbnQJCQlh bGxvY19udW07DQotDQotCWlmIChudW1fZmlsZXMgPj0gTUFYX0ZJTEVTKQ0K LQl7DQotCQlmcHJpbnRmKHN0ZGVyciwgImF0IG1vc3QgJWQgU1FMIGZpbGVz IGFyZSBhbGxvd2VkXG4iLCBNQVhfRklMRVMpOw0KLQkJZXhpdCgxKTsNCi0J fQ0KIA0KIAlhbGxvY19udW0gPSBDT01NQU5EU19BTExPQ19OVU07DQogCW15 X2NvbW1hbmRzID0gKENvbW1hbmQgKiopIHBnX21hbGxvYyhzaXplb2YoQ29t bWFuZCAqKSAqIGFsbG9jX251bSk7DQpAQCAtMjUwMyw3ICsyNTIyLDcgQEAg cHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIAkJZnByaW50ZihzdGRl cnIsICJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJXNcbiIsDQogCQkJ CWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOw0KIAkJcGdfZnJlZShteV9j b21tYW5kcyk7DQotCQlyZXR1cm4gZmFsc2U7DQorCQlyZXR1cm4gTlVMTDsN CiAJfQ0KIA0KIAlsaW5lbm8gPSAwOw0KQEAgLTI1MzUsMTMgKzI1NTQsMTEg QEAgcHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIA0KIAlteV9jb21t YW5kc1tpbmRleF0gPSBOVUxMOw0KIA0KLQlzcWxfZmlsZXNbbnVtX2ZpbGVz KytdID0gbXlfY29tbWFuZHM7DQotDQotCXJldHVybiB0cnVlOw0KKwlyZXR1 cm4gbXlfY29tbWFuZHM7DQogfQ0KIA0KIHN0YXRpYyBDb21tYW5kICoqDQot cHJvY2Vzc19idWlsdGluKGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2Up DQorcHJvY2Vzc19idWlsdGluKGNvbnN0IGNoYXIgKnRiLCBjb25zdCBjaGFy ICpzb3VyY2UpDQogew0KICNkZWZpbmUgQ09NTUFORFNfQUxMT0NfTlVNIDEy OA0KIA0KQEAgLTI1OTUsMzUgKzI2MTIsNzcgQEAgcHJvY2Vzc19idWlsdGlu KGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQogCXJldHVybiBteV9j b21tYW5kczsNCiB9DQogDQorLyogUG9zc2lieSB0cnVuY2F0ZSBvcHRpb24g YW5kIHJldHVybiB3ZWlnaHQgKi8NCitzdGF0aWMgaW50DQorZ2V0V2VpZ2h0 KGNoYXIgKm9wdGlvbikNCit7DQorCWNoYXIgICAqc2VwOw0KKwlpbnQJCXdl aWdodDsNCisNCisJaWYgKChzZXAgPSBzdHJyY2hyKG9wdGlvbiwgV1NFUCkp KQ0KKwl7DQorCQkqc2VwKysgPSAnXDAnOw0KKwkJd2VpZ2h0ID0gYXRvaShz ZXApOw0KKwkJaWYgKHdlaWdodCA8PSAwKQ0KKwkJew0KKwkJCWZwcmludGYo c3RkZXJyLA0KKwkJCQkJIndlaWdodCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0 aXZlLCBnb3QgXCIlc1wiXG4iLCBzZXApOw0KKwkJCWV4aXQoMSk7DQorCQl9 DQorCX0NCisJZWxzZQ0KKwkJd2VpZ2h0ID0gMTsNCisJcmV0dXJuIHdlaWdo dDsNCit9DQorDQorc3RhdGljIHZvaWQNCithZGRTY3JpcHQoY29uc3QgY2hh ciAqbmFtZSwgQ29tbWFuZCAqKiBjb21tYW5kcywgaW50IHdlaWdodCkNCit7 DQorCWlmIChjb21tYW5kcyA9PSBOVUxMKQ0KKwl7DQorCQlmcHJpbnRmKHN0 ZGVyciwgImVtcHR5IGNvbW1hbmRzIGZvciAlc1xuIiwgbmFtZSk7DQorCQll eGl0KDEpOw0KKwl9DQorDQorCWlmIChudW1fc2NyaXB0cyA+PSBNQVhfU0NS SVBUUykNCisJew0KKwkJZnByaW50ZihzdGRlcnIsICJhdCBtb3N0ICVkIFNR TCBzY3JpcHRzIGFyZSBhbGxvd2VkXG4iLCBNQVhfU0NSSVBUUyk7DQorCQll eGl0KDEpOw0KKwl9DQorDQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLm5h bWUgPSBuYW1lOw0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS53ZWlnaHQg PSB3ZWlnaHQ7DQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLmNvbW1hbmRz ID0gY29tbWFuZHM7DQorCWluaXRTdGF0cygmIHNxbF9zY3JpcHRbbnVtX3Nj cmlwdHNdLnN0YXRzLCAwLjApOw0KKwludW1fc2NyaXB0cysrOw0KK30NCisN CitzdGF0aWMgdm9pZA0KK3ByaW50U2ltcGxlU3RhdHMoY2hhciAqcHJlZml4 LCBTaW1wbGVTdGF0cyAqc3MpDQorew0KKwkvKiBwcmludCBOYU4gaWYgbm8g dHJhbnNhY3Rpb25zIHdoZXJlIGV4ZWN1dGVkICovDQorCWRvdWJsZSBsYXRl bmN5ID0gc3MtPnN1bSAvIHNzLT5jb3VudDsNCisJZG91YmxlIHN0ZGRldiA9 IHNxcnQoc3MtPnN1bTIgLyBzcy0+Y291bnQgLSBsYXRlbmN5KmxhdGVuY3kp Ow0KKwlwcmludGYoIiVzIGF2ZXJhZ2UgPSAlLjNmIG1zXG4iLCBwcmVmaXgs IDAuMDAxICogbGF0ZW5jeSk7DQorCXByaW50ZigiJXMgc3RkZGV2ID0gJS4z ZiBtc1xuIiwgcHJlZml4LCAwLjAwMSAqIHN0ZGRldik7DQorfQ0KKw0KIC8q IHByaW50IG91dCByZXN1bHRzICovDQogc3RhdGljIHZvaWQNCi1wcmludFJl c3VsdHMoaW50IHR0eXBlLCBpbnQ2NCBub3JtYWxfeGFjdHMsIGludCBuY2xp ZW50cywNCi0JCQkgVFN0YXRlICp0aHJlYWRzLCBpbnQgbnRocmVhZHMsDQot CQkJIGluc3RyX3RpbWUgdG90YWxfdGltZSwgaW5zdHJfdGltZSBjb25uX3Rv dGFsX3RpbWUsDQotCQkJIGludDY0IHRvdGFsX2xhdGVuY2llcywgaW50NjQg dG90YWxfc3FsYXRzLA0KLQkJCSBpbnQ2NCB0aHJvdHRsZV9sYWcsIGludDY0 IHRocm90dGxlX2xhZ19tYXgsDQotCQkJIGludDY0IHRocm90dGxlX2xhdGVu Y3lfc2tpcHBlZCwgaW50NjQgbGF0ZW5jeV9sYXRlKQ0KK3ByaW50UmVzdWx0 cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3Rp bWUgdG90YWxfdGltZSwNCisJCQkgaW5zdHJfdGltZSBjb25uX3RvdGFsX3Rp bWUsIGludCBsYXRlbmN5X2xhdGUpDQogew0KIAlkb3VibGUJCXRpbWVfaW5j bHVkZSwNCiAJCQkJdHBzX2luY2x1ZGUsDQogCQkJCXRwc19leGNsdWRlOw0K LQljaGFyCSAgICpzOw0KIA0KIAl0aW1lX2luY2x1ZGUgPSBJTlNUUl9USU1F X0dFVF9ET1VCTEUodG90YWxfdGltZSk7DQotCXRwc19pbmNsdWRlID0gbm9y bWFsX3hhY3RzIC8gdGltZV9pbmNsdWRlOw0KLQl0cHNfZXhjbHVkZSA9IG5v cm1hbF94YWN0cyAvICh0aW1lX2luY2x1ZGUgLQ0KKwl0cHNfaW5jbHVkZSA9 IHRvdGFsLT5jbnQgLyB0aW1lX2luY2x1ZGU7DQorCXRwc19leGNsdWRlID0g dG90YWwtPmNudCAvICh0aW1lX2luY2x1ZGUgLQ0KIAkJCQkJCShJTlNUUl9U SU1FX0dFVF9ET1VCTEUoY29ubl90b3RhbF90aW1lKSAvIG50aHJlYWRzKSk7 DQogDQotCWlmICh0dHlwZSA9PSAwKQ0KLQkJcyA9ICJUUEMtQiAoc29ydCBv ZikiOw0KLQllbHNlIGlmICh0dHlwZSA9PSAyKQ0KLQkJcyA9ICJVcGRhdGUg b25seSBwZ2JlbmNoX2FjY291bnRzIjsNCi0JZWxzZSBpZiAodHR5cGUgPT0g MSkNCi0JCXMgPSAiU0VMRUNUIG9ubHkiOw0KLQllbHNlDQotCQlzID0gIkN1 c3RvbSBxdWVyeSI7DQotDQotCXByaW50ZigidHJhbnNhY3Rpb24gdHlwZTog JXNcbiIsIHMpOw0KKwlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVzXG4i LA0KKwkJICAgbnVtX3NjcmlwdHMgPT0gMT8gc3FsX3NjcmlwdFswXS5uYW1l OiAibXVsdGlwbGUgc2NyaXB0cyIpOw0KIAlwcmludGYoInNjYWxpbmcgZmFj dG9yOiAlZFxuIiwgc2NhbGUpOw0KIAlwcmludGYoInF1ZXJ5IG1vZGU6ICVz XG4iLCBRVUVSWU1PREVbcXVlcnltb2RlXSk7DQogCXByaW50ZigibnVtYmVy IG9mIGNsaWVudHM6ICVkXG4iLCBuY2xpZW50cyk7DQpAQCAtMjYzMSw0OSAr MjY5MCwzOCBAQCBwcmludFJlc3VsdHMoaW50IHR0eXBlLCBpbnQ2NCBub3Jt YWxfeGFjdHMsIGludCBuY2xpZW50cywNCiAJaWYgKGR1cmF0aW9uIDw9IDAp DQogCXsNCiAJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIg Y2xpZW50OiAlZFxuIiwgbnhhY3RzKTsNCi0JCXByaW50ZigibnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9S TUFUICIvIiBJTlQ2NF9GT1JNQVQgIlxuIiwNCi0JCQkgICBub3JtYWxfeGFj dHMsIChpbnQ2NCkgbnhhY3RzICogbmNsaWVudHMpOw0KKwkJcHJpbnRmKCJu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIklO VDY0X0ZPUk1BVCIvJWRcbiIsDQorCQkJICAgdG90YWwtPmNudCwgbnhhY3Rz ICogbmNsaWVudHMpOw0KIAl9DQogCWVsc2UNCiAJew0KIAkJcHJpbnRmKCJk dXJhdGlvbjogJWQgc1xuIiwgZHVyYXRpb24pOw0KLQkJcHJpbnRmKCJudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIiBJTlQ2 NF9GT1JNQVQgIlxuIiwNCi0JCQkgICBub3JtYWxfeGFjdHMpOw0KKwkJcHJp bnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3Nl ZDogIklOVDY0X0ZPUk1BVCJcbiIsDQorCQkJICAgdG90YWwtPmNudCk7DQog CX0NCiANCiAJLyogUmVtYWluaW5nIHN0YXRzIGFyZSBub25zZW5zaWNhbCBp ZiB3ZSBmYWlsZWQgdG8gZXhlY3V0ZSBhbnkgeGFjdHMgKi8NCi0JaWYgKG5v cm1hbF94YWN0cyA8PSAwKQ0KKwlpZiAodG90YWwtPmNudCA8PSAwKQ0KIAkJ cmV0dXJuOw0KIA0KIAlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0ZW5jeV9s aW1pdCkNCi0JCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lw cGVkOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwNCi0JCQkgICB0 aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQsDQotCQkJICAgMTAwLjAgKiB0aHJv dHRsZV9sYXRlbmN5X3NraXBwZWQgLyAodGhyb3R0bGVfbGF0ZW5jeV9za2lw cGVkICsgbm9ybWFsX3hhY3RzKSk7DQorCQlwcmludGYoIm51bWJlciBvZiB0 cmFuc2FjdGlvbnMgc2tpcHBlZDogIklOVDY0X0ZPUk1BVCIgKCUuM2YgJSUp XG4iLA0KKwkJCSAgIHRvdGFsLT5za2lwcGVkLA0KKwkJCSAgIDEwMC4wICog dG90YWwtPnNraXBwZWQgLyAodG90YWwtPnNraXBwZWQgKyB0b3RhbC0+Y250 KSk7DQogDQogCWlmIChsYXRlbmN5X2xpbWl0KQ0KLQkJcHJpbnRmKCJudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAlLjFmIG1zIGxhdGVuY3kg bGltaXQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLA0KKwkJcHJp bnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAlLjFmIG1z IGxhdGVuY3kgbGltaXQ6ICVkICglLjNmICUlKVxuIiwNCiAJCQkgICBsYXRl bmN5X2xpbWl0IC8gMTAwMC4wLCBsYXRlbmN5X2xhdGUsDQotCQkgICAxMDAu MCAqIGxhdGVuY3lfbGF0ZSAvICh0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQg KyBub3JtYWxfeGFjdHMpKTsNCisJCSAgIDEwMC4wICogbGF0ZW5jeV9sYXRl IC8gKHRvdGFsLT5za2lwcGVkICsgdG90YWwtPmNudCkpOw0KIA0KIAlpZiAo dGhyb3R0bGVfZGVsYXkgfHwgcHJvZ3Jlc3MgfHwgbGF0ZW5jeV9saW1pdCkN Ci0Jew0KLQkJLyogY29tcHV0ZSBhbmQgc2hvdyBsYXRlbmN5IGF2ZXJhZ2Ug YW5kIHN0YW5kYXJkIGRldmlhdGlvbiAqLw0KLQkJZG91YmxlCQlsYXRlbmN5 ID0gMC4wMDEgKiB0b3RhbF9sYXRlbmNpZXMgLyBub3JtYWxfeGFjdHM7DQot CQlkb3VibGUJCXNxbGF0ID0gKGRvdWJsZSkgdG90YWxfc3FsYXRzIC8gbm9y bWFsX3hhY3RzOw0KLQ0KLQkJcHJpbnRmKCJsYXRlbmN5IGF2ZXJhZ2U6ICUu M2YgbXNcbiINCi0JCQkgICAibGF0ZW5jeSBzdGRkZXY6ICUuM2YgbXNcbiIs DQotCQkJICAgbGF0ZW5jeSwgMC4wMDEgKiBzcXJ0KHNxbGF0IC0gMTAwMDAw MC4wICogbGF0ZW5jeSAqIGxhdGVuY3kpKTsNCi0JfQ0KKwkJcHJpbnRTaW1w bGVTdGF0cygibGF0ZW5jeSIsICYgdG90YWwtPmxhdGVuY3kpOw0KIAllbHNl DQotCXsNCiAJCS8qIG9ubHkgYW4gYXZlcmFnZSBsYXRlbmN5IGNvbXB1dGVk IGZyb20gdGhlIGR1cmF0aW9uIGlzIGF2YWlsYWJsZSAqLw0KIAkJcHJpbnRm KCJsYXRlbmN5IGF2ZXJhZ2U6ICUuM2YgbXNcbiIsDQotCQkJICAgMTAwMC4w ICogZHVyYXRpb24gKiBuY2xpZW50cyAvIG5vcm1hbF94YWN0cyk7DQotCX0N CisJCQkgICAxMDAwLjAgKiBkdXJhdGlvbiAqIG5jbGllbnRzIC8gdG90YWwt PmNudCk7DQogDQogCWlmICh0aHJvdHRsZV9kZWxheSkNCi0Jew0KIAkJLyoN CiAJCSAqIFJlcG9ydCBhdmVyYWdlIHRyYW5zYWN0aW9uIGxhZyB1bmRlciBy YXRlIGxpbWl0IHRocm90dGxpbmcuICBUaGlzDQogCQkgKiBpcyB0aGUgZGVs YXkgYmV0d2VlbiBzY2hlZHVsZWQgYW5kIGFjdHVhbCBzdGFydCB0aW1lcyBm b3IgdGhlDQpAQCAtMjY4MSwyNyArMjcyOSw1MCBAQCBwcmludFJlc3VsdHMo aW50IHR0eXBlLCBpbnQ2NCBub3JtYWxfeGFjdHMsIGludCBuY2xpZW50cywN CiAJCSAqIHRoZSBkYXRhYmFzZSBsb2FkLCBvciB0aGUgUG9pc3NvbiB0aHJv dHRsaW5nIHByb2Nlc3MuDQogCQkgKi8NCiAJCXByaW50ZigicmF0ZSBsaW1p dCBzY2hlZHVsZSBsYWc6IGF2ZyAlLjNmIChtYXggJS4zZikgbXNcbiIsDQot CQkJICAgMC4wMDEgKiB0aHJvdHRsZV9sYWcgLyBub3JtYWxfeGFjdHMsIDAu MDAxICogdGhyb3R0bGVfbGFnX21heCk7DQotCX0NCisJCQkgICAwLjAwMSAq IHRvdGFsLT5sYWcuc3VtIC8gdG90YWwtPmNudCwgMC4wMDEgKiB0b3RhbC0+ bGFnLm1heCk7DQogDQogCXByaW50ZigidHBzID0gJWYgKGluY2x1ZGluZyBj b25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpXG4iLCB0cHNfaW5jbHVkZSk7DQog CXByaW50ZigidHBzID0gJWYgKGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3Rh Ymxpc2hpbmcpXG4iLCB0cHNfZXhjbHVkZSk7DQogDQorCS8qIFJlcG9ydCBw ZXItZmlsZSBkYXRhICovDQorCWlmIChwZXJfc2NyaXB0X3N0YXRzKQ0KKwl7 DQorCQlpbnQgaTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBudW1fc2NyaXB0 czsgaSsrKQ0KKwkJew0KKwkJCXByaW50ZigiU1FMIHNjcmlwdCAlZCwgd2Vp Z2h0ICVkOiAlc1xuIg0KKwkJCQkgICAiIC0gIklOVDY0X0ZPUk1BVCIgdHJh bnNhY3Rpb25zICglLjFmJSUgb2YgdG90YWwsIHRwcyA9ICVmKVxuIiwNCisJ CQkJICAgaSwgc3FsX3NjcmlwdFtpXS53ZWlnaHQsIHNxbF9zY3JpcHRbaV0u bmFtZSwNCisJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQsDQorCQkJ CSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0b3RhbC0+ Y250LA0KKwkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCAvIHRpbWVf aW5jbHVkZSk7DQorDQorCQkJaWYgKGxhdGVuY3lfbGltaXQpDQorCQkJCXBy aW50ZigiIC0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAiSU5U NjRfRk9STUFUIiAoJS4zZiUlKVxuIiwNCisJCQkJCSAgIHNxbF9zY3JpcHRb aV0uc3RhdHMuc2tpcHBlZCwNCisJCQkJCSAgIDEwMC4wICogc3FsX3Njcmlw dFtpXS5zdGF0cy5za2lwcGVkIC8NCisJCQkJCSAgIChzcWxfc2NyaXB0W2ld LnN0YXRzLnNraXBwZWQgKyBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCkpOw0K Kw0KKwkJCXByaW50U2ltcGxlU3RhdHMoIiAtIGxhdGVuY3kiLCAmIHNxbF9z Y3JpcHRbaV0uc3RhdHMubGF0ZW5jeSk7DQorCQl9DQorCX0NCisNCiAJLyog UmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2llcyAqLw0KIAlpZiAoaXNfbGF0 ZW5jaWVzKQ0KIAl7DQogCQlpbnQJCQlpOw0KIA0KLQkJZm9yIChpID0gMDsg aSA8IG51bV9maWxlczsgaSsrKQ0KKwkJZm9yIChpID0gMDsgaSA8IG51bV9z Y3JpcHRzOyBpKyspDQogCQl7DQogCQkJQ29tbWFuZCAgICoqY29tbWFuZHM7 DQogDQotCQkJaWYgKG51bV9maWxlcyA+IDEpDQorCQkJaWYgKG51bV9zY3Jp cHRzID4gMSkNCiAJCQkJcHJpbnRmKCJzdGF0ZW1lbnQgbGF0ZW5jaWVzIGlu IG1pbGxpc2Vjb25kcywgZmlsZSAlZDpcbiIsIGkgKyAxKTsNCiAJCQllbHNl DQogCQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNl Y29uZHM6XG4iKTsNCiANCi0JCQlmb3IgKGNvbW1hbmRzID0gc3FsX2ZpbGVz W2ldOyAqY29tbWFuZHMgIT0gTlVMTDsgY29tbWFuZHMrKykNCisJCQlmb3Ig KGNvbW1hbmRzID0gc3FsX3NjcmlwdFtpXS5jb21tYW5kczsgKmNvbW1hbmRz ICE9IE5VTEw7IGNvbW1hbmRzKyspDQogCQkJew0KIAkJCQlDb21tYW5kICAg ICpjb21tYW5kID0gKmNvbW1hbmRzOw0KIAkJCQlpbnQJCQljbnVtID0gY29t bWFuZC0+Y29tbWFuZF9udW07DQpAQCAtMjczOSw2ICsyODEwLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogew0KIAlzdGF0aWMgc3RydWN0 IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCiAJCS8qIHN5c3RlbWF0aWMg bG9uZy9zaG9ydCBuYW1lZCBvcHRpb25zICovDQorCQl7InRwYy1iIiwgbm9f YXJndW1lbnQsIE5VTEwsICdCJ30sDQogCQl7ImNsaWVudCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnYyd9LA0KIAkJeyJjb25uZWN0Iiwgbm9fYXJn dW1lbnQsIE5VTEwsICdDJ30sDQogCQl7ImRlYnVnIiwgbm9fYXJndW1lbnQs IE5VTEwsICdkJ30sDQpAQCAtMjc0OSwxMiArMjgyMSwxNCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsiaW5pdGlhbGl6ZSIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnaSd9LA0KIAkJeyJqb2JzIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdqJ30sDQogCQl7ImxvZyIsIG5vX2FyZ3VtZW50LCBO VUxMLCAnbCd9LA0KKwkJeyJsYXRlbmN5LWxpbWl0IiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdMJ30sDQogCQl7Im5vLXZhY3V1bSIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAnbid9LA0KIAkJeyJwb3J0IiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICdwJ30sDQogCQl7InByb2dyZXNzIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdQJ30sDQogCQl7InByb3RvY29sIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdNJ30sDQogCQl7InF1aWV0Iiwgbm9fYXJndW1l bnQsIE5VTEwsICdxJ30sDQogCQl7InJlcG9ydC1sYXRlbmNpZXMiLCBub19h cmd1bWVudCwgTlVMTCwgJ3InfSwNCisJCXsicmF0ZSIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAnUid9LA0KIAkJeyJzY2FsZSIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAncyd9LA0KIAkJeyJzZWxlY3Qtb25seSIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnUyd9LA0KIAkJeyJza2lwLXNvbWUtdXBkYXRlcyIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LA0KQEAgLTI3NjksMjUgKzI4NDMs MjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl7InVubG9n Z2VkLXRhYmxlcyIsIG5vX2FyZ3VtZW50LCAmdW5sb2dnZWRfdGFibGVzLCAx fSwNCiAJCXsic2FtcGxpbmctcmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA0fSwNCiAJCXsiYWdncmVnYXRlLWludGVydmFsIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDV9LA0KLQkJeyJyYXRlIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdSJ30sDQotCQl7ImxhdGVuY3ktbGltaXQiLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0wnfSwNCisJCXsicGVyLXNjcmlwdC1z dGF0cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA2fSwNCiAJCXtOVUxMLCAwLCBO VUxMLCAwfQ0KIAl9Ow0KIA0KIAlpbnQJCQljOw0KLQlpbnQJCQluY2xpZW50 cyA9IDE7CS8qIGRlZmF1bHQgbnVtYmVyIG9mIHNpbXVsYXRlZCBjbGllbnRz ICovDQotCWludAkJCW50aHJlYWRzID0gMTsJLyogZGVmYXVsdCBudW1iZXIg b2YgdGhyZWFkcyAqLw0KIAlpbnQJCQlpc19pbml0X21vZGUgPSAwOwkJLyog aW5pdGlhbGl6ZSBtb2RlPyAqLw0KIAlpbnQJCQlpc19ub192YWN1dW0gPSAw OwkJLyogbm8gdmFjdXVtIGF0IGFsbCBiZWZvcmUgdGVzdGluZz8gKi8NCiAJ aW50CQkJZG9fdmFjdXVtX2FjY291bnRzID0gMDsgLyogZG8gdmFjdXVtIGFj Y291bnRzIGJlZm9yZSB0ZXN0aW5nPyAqLw0KLQlpbnQJCQl0dHlwZSA9IDA7 CQkvKiB0cmFuc2FjdGlvbiB0eXBlLiAwOiBUUEMtQiwgMTogU0VMRUNUIG9u bHksDQotCQkJCQkJCQkgKiAyOiBza2lwIHVwZGF0ZSBvZiBicmFuY2hlcyBh bmQgdGVsbGVycyAqLw0KIAlpbnQJCQlvcHRpbmRleDsNCi0JY2hhcgkgICAq ZmlsZW5hbWUgPSBOVUxMOw0KIAlib29sCQlzY2FsZV9naXZlbiA9IGZhbHNl Ow0KIA0KIAlib29sCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IGZhbHNl Ow0KIAlib29sCQlpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0ID0gZmFsc2U7 DQorCWJvb2wJCWludGVybmFsX3NjcmlwdF91c2VkID0gZmFsc2U7DQogDQog CUNTdGF0ZQkgICAqc3RhdGU7CQkJLyogc3RhdHVzIG9mIGNsaWVudHMgKi8N CiAJVFN0YXRlCSAgICp0aHJlYWRzOwkJLyogYXJyYXkgb2YgdGhyZWFkICov DQpAQCAtMjc5NSwxMyArMjg2NCwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikNCiAJaW5zdHJfdGltZQlzdGFydF90aW1lOwkJLyogc3RhcnQg dXAgdGltZSAqLw0KIAlpbnN0cl90aW1lCXRvdGFsX3RpbWU7DQogCWluc3Ry X3RpbWUJY29ubl90b3RhbF90aW1lOw0KLQlpbnQ2NAkJdG90YWxfeGFjdHMg PSAwOw0KLQlpbnQ2NAkJdG90YWxfbGF0ZW5jaWVzID0gMDsNCi0JaW50NjQJ CXRvdGFsX3NxbGF0cyA9IDA7DQotCWludDY0CQl0aHJvdHRsZV9sYWcgPSAw Ow0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFnX21heCA9IDA7DQotCWludDY0CQl0 aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgPSAwOw0KIAlpbnQ2NAkJbGF0ZW5j eV9sYXRlID0gMDsNCisJU3RhdHNEYXRhCXN0YXRzOw0KKwlpbnQJCQl3ZWln aHQ7DQorCWNoYXIJICAgKmRlc2M7DQogDQogCWludAkJCWk7DQogCWludAkJ CW5jbGllbnRzX2RlYWx0Ow0KQEAgLTI4NDcsNyArMjkxMyw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlzdGF0ZSA9IChDU3RhdGUgKikg cGdfbWFsbG9jKHNpemVvZihDU3RhdGUpKTsNCiAJbWVtc2V0KHN0YXRlLCAw LCBzaXplb2YoQ1N0YXRlKSk7DQogDQotCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJpaDpudnA6ZHFTTmM6ajpDcnM6dDpUOlU6bGY6 RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAt MSkNCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImlo Om52cDpkcWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxv bmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpDQogCXsNCiAJCXN3aXRj aCAoYykNCiAJCXsNCkBAIC0yODY5LDE0ICsyOTM1LDYgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCQkJY2FzZSAnZCc6DQogCQkJCWRlYnVn Kys7DQogCQkJCWJyZWFrOw0KLQkJCWNhc2UgJ1MnOg0KLQkJCQl0dHlwZSA9 IDE7DQotCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0J CQkJYnJlYWs7DQotCQkJY2FzZSAnTic6DQotCQkJCXR0eXBlID0gMjsNCi0J CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KLQkJCQlicmVh azsNCiAJCQljYXNlICdjJzoNCiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOw0KIAkJCQluY2xpZW50cyA9IGF0b2kob3B0YXJnKTsNCkBA IC0yOTc5LDEyICszMDM3LDMwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkJCQlpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0ID0gdHJ1ZTsN CiAJCQkJdXNlX3F1aWV0ID0gdHJ1ZTsNCiAJCQkJYnJlYWs7DQorCQkJCS8q IHdoYXQgdG8gcnVuKi8NCisJCQljYXNlICdiJzoNCisJCQkJd2VpZ2h0ID0g Z2V0V2VpZ2h0KG9wdGFyZyk7DQorCQkJCWFkZFNjcmlwdChkZXNjLCBwcm9j ZXNzX2J1aWx0aW4oDQorCQkJCQkJCSAgZmluZF9idWlsdGluKG9wdGFyZywg JmRlc2MpLCBkZXNjKSwgd2VpZ2h0KTsNCisJCQkJYmVuY2htYXJraW5nX29w dGlvbl9zZXQgPSB0cnVlOw0KKwkJCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9 IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgJ1MnOg0KKwkJCQlhZGRT Y3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGluKA0KKwkJCQkJCQkgIGZpbmRf YnVpbHRpbigic2VsZWN0LW9ubHkiLCAmZGVzYyksIGRlc2MpLCAxKTsNCisJ CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJCQlpbnRl cm5hbF9zY3JpcHRfdXNlZCA9IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCWNh c2UgJ04nOg0KKwkJCQlhZGRTY3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGlu KA0KKwkJCQkJCQkgIGZpbmRfYnVpbHRpbigic2ltcGxlLXVwZGF0ZSIsICZk ZXNjKSwgZGVzYyksIDEpOw0KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3Nl dCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsN CisJCQkJYnJlYWs7DQogCQkJY2FzZSAnZic6DQorCQkJCXdlaWdodCA9IGdl dFdlaWdodChvcHRhcmcpOw0KKwkJCQlhZGRTY3JpcHQob3B0YXJnLCBwcm9j ZXNzX2ZpbGUob3B0YXJnKSwgd2VpZ2h0KTsNCiAJCQkJYmVuY2htYXJraW5n X29wdGlvbl9zZXQgPSB0cnVlOw0KLQkJCQl0dHlwZSA9IDM7DQotCQkJCWZp bGVuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7DQotCQkJCWlmIChwcm9jZXNz X2ZpbGUoZmlsZW5hbWUpID09IGZhbHNlIHx8ICpzcWxfZmlsZXNbbnVtX2Zp bGVzIC0gMV0gPT0gTlVMTCkNCi0JCQkJCWV4aXQoMSk7DQogCQkJCWJyZWFr Ow0KIAkJCWNhc2UgJ0QnOg0KIAkJCQl7DQpAQCAtMzAxNSw5ICszMDkxLDkg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJCWJyZWFrOw0K IAkJCWNhc2UgJ00nOg0KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9 IHRydWU7DQotCQkJCWlmIChudW1fZmlsZXMgPiAwKQ0KKwkJCQlpZiAobnVt X3NjcmlwdHMgPiAwKQ0KIAkJCQl7DQotCQkJCQlmcHJpbnRmKHN0ZGVyciwg InF1ZXJ5IG1vZGUgKC1NKSBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSBh bnkgdHJhbnNhY3Rpb24gc2NyaXB0cyAoLWYpXG4iKTsNCisJCQkJCWZwcmlu dGYoc3RkZXJyLCAicXVlcnkgbW9kZSAoLU0pIHNob3VsZCBiZSBzcGVjaWZp ZWQgYmVmb3JlIGFueSB0cmFuc2FjdGlvbiBzY3JpcHRzICgtZiBvciAtYilc biIpOw0KIAkJCQkJZXhpdCgxKTsNCiAJCQkJfQ0KIAkJCQlmb3IgKHF1ZXJ5 bW9kZSA9IDA7IHF1ZXJ5bW9kZSA8IE5VTV9RVUVSWU1PREU7IHF1ZXJ5bW9k ZSsrKQ0KQEAgLTMxMDcsNiArMzE4Myw5IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQ0KIAkJCQl9DQogI2VuZGlmDQogCQkJCWJyZWFrOw0KKwkJ CWNhc2UgNjoNCisJCQkJcGVyX3NjcmlwdF9zdGF0cyA9IHRydWU7DQorCQkJ CWJyZWFrOw0KIAkJCWRlZmF1bHQ6DQogCQkJCWZwcmludGYoc3RkZXJyLCBf KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIp LCBwcm9nbmFtZSk7DQogCQkJCWV4aXQoMSk7DQpAQCAtMzExNCw2ICszMTkz LDE5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJfQ0KIAl9 DQogDQorCS8qIHNldCBkZWZhdWx0IHNjcmlwdCBpZiBub25lICovDQorCWlm IChudW1fc2NyaXB0cyA9PSAwICYmICFpbml0aWFsaXphdGlvbl9vcHRpb25f c2V0KQ0KKwl7DQorCQlhZGRTY3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGlu KA0KKwkJCQkJICBmaW5kX2J1aWx0aW4oInRwY2ItbGlrZSIsICZkZXNjKSwg ZGVzYyksIDEpOw0KKwkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVl Ow0KKwkJaW50ZXJuYWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KKwl9DQorDQor CS8qIGNvbXB1dGUgdG90YWxfd2VpZ2h0ICovDQorCWZvciAoaSA9IDA7IGkg PCBudW1fc2NyaXB0czsgaSsrKQ0KKwkJdG90YWxfd2VpZ2h0ICs9IHNxbF9z Y3JpcHRbaV0ud2VpZ2h0Ow0KKw0KIAkvKg0KIAkgKiBEb24ndCBuZWVkIG1v cmUgdGhyZWFkcyB0aGFuIHRoZXJlIGFyZSBjbGllbnRzLiAgKFRoaXMgaXMg bm90IG1lcmVseSBhbg0KIAkgKiBvcHRpbWl6YXRpb247IHRocm90dGxlX2Rl bGF5IGlzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgYmVsb3cgaWYgc29tZQ0K QEAgLTMxOTgsOCArMzI5MCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkgKiBjaGFuZ2VkIGFmdGVyIGZvcmsuDQogCSAqLw0KIAltYWlu X3BpZCA9IChpbnQpIGdldHBpZCgpOw0KLQlwcm9ncmVzc19uY2xpZW50cyA9 IG5jbGllbnRzOw0KLQlwcm9ncmVzc19udGhyZWFkcyA9IG50aHJlYWRzOw0K IA0KIAlpZiAobmNsaWVudHMgPiAxKQ0KIAl7DQpAQCAtMzI0Miw3ICszMzMy LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQlleGl0KDEp Ow0KIAl9DQogDQotCWlmICh0dHlwZSAhPSAzKQ0KKwlpZiAoaW50ZXJuYWxf c2NyaXB0X3VzZWQpDQogCXsNCiAJCS8qDQogCQkgKiBnZXQgdGhlIHNjYWxp bmcgZmFjdG9yIHRoYXQgc2hvdWxkIGJlIHNhbWUgYXMgY291bnQoKikgZnJv bQ0KQEAgLTMzMTksMzEgKzM0MDksNiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikNCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1l KTsNCiAJc3JhbmRvbSgodW5zaWduZWQgaW50KSBJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhzdGFydF90aW1lKSk7DQogDQotCS8qIHByb2Nlc3MgYnVpbHRp biBTUUwgc2NyaXB0cyAqLw0KLQlzd2l0Y2ggKHR0eXBlKQ0KLQl7DQotCQlj YXNlIDA6DQotCQkJc3FsX2ZpbGVzWzBdID0gcHJvY2Vzc19idWlsdGluKHRw Y19iLA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IFRQQy1CIChzb3J0IG9m KT4iKTsNCi0JCQludW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJ Y2FzZSAxOg0KLQkJCXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbihz ZWxlY3Rfb25seSwNCi0JCQkJCQkJCQkJICAgIjxidWlsdGluOiBzZWxlY3Qg b25seT4iKTsNCi0JCQludW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0K LQkJY2FzZSAyOg0KLQkJCXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRp bihzaW1wbGVfdXBkYXRlLA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IHNp bXBsZSB1cGRhdGU+Iik7DQotCQkJbnVtX2ZpbGVzID0gMTsNCi0JCQlicmVh azsNCi0NCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCX0NCi0NCiAJLyog c2V0IHVwIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgKi8NCiAJdGhyZWFkcyA9 IChUU3RhdGUgKikgcGdfbWFsbG9jKHNpemVvZihUU3RhdGUpICogbnRocmVh ZHMpOw0KIAluY2xpZW50c19kZWFsdCA9IDA7DQpAQCAtMzM1OSw4ICszNDI0 LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl0aHJlYWQt PnJhbmRvbV9zdGF0ZVswXSA9IHJhbmRvbSgpOw0KIAkJdGhyZWFkLT5yYW5k b21fc3RhdGVbMV0gPSByYW5kb20oKTsNCiAJCXRocmVhZC0+cmFuZG9tX3N0 YXRlWzJdID0gcmFuZG9tKCk7DQotCQl0aHJlYWQtPnRocm90dGxlX2xhdGVu Y3lfc2tpcHBlZCA9IDA7DQogCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSA9IDA7 DQorCQlpbml0U3RhdHMoJiB0aHJlYWQtPnN0YXRzLCAwLjApOw0KIA0KIAkJ bmNsaWVudHNfZGVhbHQgKz0gdGhyZWFkLT5uc3RhdGU7DQogDQpAQCAtMzQy NywxMSArMzQ5MiwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikN CiAjZW5kaWYgICAvKiBFTkFCTEVfVEhSRUFEX1NBRkVUWSAqLw0KIA0KIAkv KiB3YWl0IGZvciB0aHJlYWRzIGFuZCBhY2N1bXVsYXRlIHJlc3VsdHMgKi8N CisJaW5pdFN0YXRzKCYgc3RhdHMsIDAuMCk7DQogCUlOU1RSX1RJTUVfU0VU X1pFUk8oY29ubl90b3RhbF90aW1lKTsNCiAJZm9yIChpID0gMDsgaSA8IG50 aHJlYWRzOyBpKyspDQogCXsNCiAJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRo cmVhZHNbaV07DQotCQlpbnQJCQlqOw0KIA0KICNpZmRlZiBFTkFCTEVfVEhS RUFEX1NBRkVUWQ0KIAkJaWYgKHRocmVhZHNbaV0udGhyZWFkID09IElOVkFM SURfVEhSRUFEKQ0KQEAgLTM0NDQsMjEgKzM1MDksMTMgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCQkodm9pZCkgdGhyZWFkUnVuKHRocmVh ZCk7DQogI2VuZGlmICAgLyogRU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8NCiAN Ci0JCS8qIHRocmVhZCBsZXZlbCBzdGF0cyAqLw0KLQkJdGhyb3R0bGVfbGFn ICs9IHRocmVhZC0+dGhyb3R0bGVfbGFnOw0KLQkJdGhyb3R0bGVfbGF0ZW5j eV9za2lwcGVkID0gdGhyZWFkcy0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVk Ow0KLQkJbGF0ZW5jeV9sYXRlID0gdGhyZWFkLT5sYXRlbmN5X2xhdGU7DQot CQlpZiAodGhyb3R0bGVfbGFnX21heCA+IHRocmVhZC0+dGhyb3R0bGVfbGFn X21heCkNCi0JCQl0aHJvdHRsZV9sYWdfbWF4ID0gdGhyZWFkLT50aHJvdHRs ZV9sYWdfbWF4Ow0KKwkJLyogYWdncmVnYXRlIHRocmVhZCBsZXZlbCBzdGF0 cyAqLw0KKwkJYXBwZW5kU2ltcGxlU3RhdHMoJiBzdGF0cy5sYXRlbmN5LCAm IHRocmVhZC0+c3RhdHMubGF0ZW5jeSk7DQorCQlhcHBlbmRTaW1wbGVTdGF0 cygmIHN0YXRzLmxhZywgJiB0aHJlYWQtPnN0YXRzLmxhZyk7DQorCQlzdGF0 cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7DQorCQlzdGF0cy5za2lwcGVk ICs9IHRocmVhZC0+c3RhdHMuc2tpcHBlZDsNCisJCWxhdGVuY3lfbGF0ZSAr PSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsNCiAJCUlOU1RSX1RJTUVfQUREKGNv bm5fdG90YWxfdGltZSwgdGhyZWFkLT5jb25uX3RpbWUpOw0KLQ0KLQkJLyog Y2xpZW50LWxldmVsIHN0YXRzICovDQotCQlmb3IgKGogPSAwOyBqIDwgdGhy ZWFkLT5uc3RhdGU7IGorKykNCi0JCXsNCi0JCQl0b3RhbF94YWN0cyArPSB0 aHJlYWQtPnN0YXRlW2pdLmNudDsNCi0JCQl0b3RhbF9sYXRlbmNpZXMgKz0g dGhyZWFkLT5zdGF0ZVtpXS50eG5fbGF0ZW5jaWVzOw0KLQkJCXRvdGFsX3Nx bGF0cyArPSB0aHJlYWQtPnN0YXRlW2ldLnR4bl9zcWxhdHM7DQotCQl9DQog CX0NCiAJZGlzY29ubmVjdF9hbGwoc3RhdGUsIG5jbGllbnRzKTsNCiANCkBA IC0zNDc0LDEwICszNTMxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogCSAqLw0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRvdGFsX3Rp bWUpOw0KIAlJTlNUUl9USU1FX1NVQlRSQUNUKHRvdGFsX3RpbWUsIHN0YXJ0 X3RpbWUpOw0KLQlwcmludFJlc3VsdHModHR5cGUsIHRvdGFsX3hhY3RzLCBu Y2xpZW50cywgdGhyZWFkcywgbnRocmVhZHMsDQotCQkJCSB0b3RhbF90aW1l LCBjb25uX3RvdGFsX3RpbWUsIHRvdGFsX2xhdGVuY2llcywgdG90YWxfc3Fs YXRzLA0KLQkJCQkgdGhyb3R0bGVfbGFnLCB0aHJvdHRsZV9sYWdfbWF4LCB0 aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQsDQotCQkJCSBsYXRlbmN5X2xhdGUp Ow0KKwlwcmludFJlc3VsdHModGhyZWFkcywgJnN0YXRzLCB0b3RhbF90aW1l LCBjb25uX3RvdGFsX3RpbWUsIGxhdGVuY3lfbGF0ZSk7DQogDQogCXJldHVy biAwOw0KIH0NCkBAIC0zNDk4LDEzICszNTUyLDcgQEAgdGhyZWFkUnVuKHZv aWQgKmFyZykNCiAJaW50NjQJCXRocmVhZF9zdGFydCA9IElOU1RSX1RJTUVf R0VUX01JQ1JPU0VDKHRocmVhZC0+c3RhcnRfdGltZSk7DQogCWludDY0CQls YXN0X3JlcG9ydCA9IHRocmVhZF9zdGFydDsNCiAJaW50NjQJCW5leHRfcmVw b3J0ID0gbGFzdF9yZXBvcnQgKyAoaW50NjQpIHByb2dyZXNzICogMTAwMDAw MDsNCi0JaW50NjQJCWxhc3RfY291bnQgPSAwLA0KLQkJCQlsYXN0X2xhdHMg PSAwLA0KLQkJCQlsYXN0X3NxbGF0cyA9IDAsDQotCQkJCWxhc3RfbGFncyA9 IDAsDQotCQkJCWxhc3Rfc2tpcHBlZCA9IDA7DQotDQotCUFnZ1ZhbHMJCWFn Z3M7DQorCVN0YXRzRGF0YQlsYXN0LCBhZ2dzOw0KIA0KIAkvKg0KIAkgKiBJ bml0aWFsaXplIHRocm90dGxpbmcgcmF0ZSB0YXJnZXQgZm9yIGFsbCBvZiB0 aGUgdGhyZWFkJ3MgY2xpZW50cy4gIEl0DQpAQCAtMzUxNCw4ICszNTYyLDYg QEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJICovDQogCUlOU1RSX1RJTUVf U0VUX0NVUlJFTlQoc3RhcnQpOw0KIAl0aHJlYWQtPnRocm90dGxlX3RyaWdn ZXIgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydCk7DQotCXRocmVh ZC0+dGhyb3R0bGVfbGFnID0gMDsNCi0JdGhyZWFkLT50aHJvdHRsZV9sYWdf bWF4ID0gMDsNCiANCiAJSU5TVFJfVElNRV9TRVRfWkVSTyh0aHJlYWQtPmNv bm5fdGltZSk7DQogDQpAQCAtMzU1MiwxNiArMzU5OCwxNyBAQCB0aHJlYWRS dW4odm9pZCAqYXJnKQ0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRocmVh ZC0+Y29ubl90aW1lKTsNCiAJSU5TVFJfVElNRV9TVUJUUkFDVCh0aHJlYWQt PmNvbm5fdGltZSwgdGhyZWFkLT5zdGFydF90aW1lKTsNCiANCi0JYWdnX3Zh bHNfaW5pdCgmYWdncywgdGhyZWFkLT5zdGFydF90aW1lKTsNCisJaW5pdFN0 YXRzKCZhZ2dzLCBJTlNUUl9USU1FX0dFVF9ET1VCTEUodGhyZWFkLT5zdGFy dF90aW1lKSk7DQorCWxhc3QgPSBhZ2dzOw0KIA0KIAkvKiBzZW5kIHN0YXJ0 IHVwIHF1ZXJpZXMgaW4gYXN5bmMgbWFubmVyICovDQogCWZvciAoaSA9IDA7 IGkgPCBuc3RhdGU7IGkrKykNCiAJew0KIAkJQ1N0YXRlCSAgICpzdCA9ICZz dGF0ZVtpXTsNCi0JCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX2ZpbGVz W3N0LT51c2VfZmlsZV07DQorCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNx bF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJCWludAkJCXBy ZXZfZWNudCA9IHN0LT5lY250Ow0KIA0KLQkJc3QtPnVzZV9maWxlID0gZ2V0 cmFuZCh0aHJlYWQsIDAsIG51bV9maWxlcyAtIDEpOw0KKwkJc3QtPnVzZV9m aWxlID0gbnVtX3NjcmlwdHM9PTE/IDA6IGNob29zZVNjcmlwdCh0aHJlYWQp Ow0KIAkJaWYgKCFkb0N1c3RvbSh0aHJlYWQsIHN0LCAmdGhyZWFkLT5jb25u X3RpbWUsIGxvZ2ZpbGUsICZhZ2dzKSkNCiAJCQlyZW1haW5zLS07CQkJLyog SSd2ZSBhYm9ydGVkICovDQogDQpAQCAtMzU4OSw3ICszNjM2LDcgQEAgdGhy ZWFkUnVuKHZvaWQgKmFyZykNCiAJCWZvciAoaSA9IDA7IGkgPCBuc3RhdGU7 IGkrKykNCiAJCXsNCiAJCQlDU3RhdGUJICAgKnN0ID0gJnN0YXRlW2ldOw0K LQkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2Vf ZmlsZV07DQorCQkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBzcWxfc2NyaXB0 W3N0LT51c2VfZmlsZV0uY29tbWFuZHM7DQogCQkJaW50CQkJc29jazsNCiAN CiAJCQlpZiAoc3QtPmNvbiA9PSBOVUxMKQ0KQEAgLTM2MDIsNyArMzY0OSw3 IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJCXsNCiAJCQkJCS8qIGlu dGVycnVwdCBjbGllbnQgd2hpY2ggaGFzIG5vdCBzdGFydGVkIGEgdHJhbnNh Y3Rpb24gKi8NCiAJCQkJCXJlbWFpbnMtLTsNCi0JCQkJCXN0LT5zbGVlcGlu ZyA9IDA7DQorCQkJCQlzdC0+c2xlZXBpbmcgPSBmYWxzZTsNCiAJCQkJCXN0 LT50aHJvdHRsaW5nID0gZmFsc2U7DQogCQkJCQlQUWZpbmlzaChzdC0+Y29u KTsNCiAJCQkJCXN0LT5jb24gPSBOVUxMOw0KQEAgLTM2OTUsNyArMzc0Miw3 IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQlmb3IgKGkgPSAwOyBpIDwg bnN0YXRlOyBpKyspDQogCQl7DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0 ZVtpXTsNCi0JCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tz dC0+dXNlX2ZpbGVdOw0KKwkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3Fs X3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCWludAkJCXBy ZXZfZWNudCA9IHN0LT5lY250Ow0KIA0KIAkJCWlmIChzdC0+Y29uICYmIChG RF9JU1NFVChQUXNvY2tldChzdC0+Y29uKSwgJmlucHV0X21hc2spDQpAQCAt MzcyNiwxMSArMzc3Myw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJ aWYgKG5vdyA+PSBuZXh0X3JlcG9ydCkNCiAJCQl7DQogCQkJCS8qIGdlbmVy YXRlIGFuZCBzaG93IHJlcG9ydCAqLw0KLQkJCQlpbnQ2NAkJY291bnQgPSAw LA0KLQkJCQkJCQlsYXRzID0gMCwNCi0JCQkJCQkJc3FsYXRzID0gMCwNCi0J CQkJCQkJbGFncyA9IDAsDQotCQkJCQkJCXNraXBwZWQgPSAwOw0KKwkJCQlT dGF0c0RhdGEgICBjdXI7DQogCQkJCWludDY0CQlydW4gPSBub3cgLSBsYXN0 X3JlcG9ydDsNCiAJCQkJZG91YmxlCQl0cHMsDQogCQkJCQkJCXRvdGFsX3J1 biwNCkBAIC0zNzUwLDIzICszNzkzLDI0IEBAIHRocmVhZFJ1bih2b2lkICph cmcpDQogCQkJCSAqIChJZiBhIHJlYWQgZnJvbSBhIDY0LWJpdCBpbnRlZ2Vy IGlzIG5vdCBhdG9taWMsIHlvdSBtaWdodA0KIAkJCQkgKiBnZXQgYSAidG9y biIgcmVhZCBhbmQgY29tcGxldGVseSBib2d1cyBsYXRlbmNpZXMgdGhvdWdo ISkNCiAJCQkJICovDQotCQkJCWZvciAoaSA9IDA7IGkgPCBwcm9ncmVzc19u Y2xpZW50czsgaSsrKQ0KKwkJCQlpbml0U3RhdHMoJiBjdXIsIDAuMCk7DQor CQkJCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0KIAkJCQl7DQot CQkJCQljb3VudCArPSBzdGF0ZVtpXS5jbnQ7DQotCQkJCQlsYXRzICs9IHN0 YXRlW2ldLnR4bl9sYXRlbmNpZXM7DQotCQkJCQlzcWxhdHMgKz0gc3RhdGVb aV0udHhuX3NxbGF0czsNCisJCQkJCWFwcGVuZFNpbXBsZVN0YXRzKCYgY3Vy LmxhdGVuY3ksICYgdGhyZWFkW2ldLnN0YXRzLmxhdGVuY3kpOw0KKwkJCQkJ YXBwZW5kU2ltcGxlU3RhdHMoJiBjdXIubGFnLCAmIHRocmVhZFtpXS5zdGF0 cy5sYWcpOw0KKwkJCQkJY3VyLmNudCArPSB0aHJlYWRbaV0uc3RhdHMuY250 Ow0KKwkJCQkJY3VyLnNraXBwZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnNraXBw ZWQ7DQogCQkJCX0NCiANCi0JCQkJZm9yIChpID0gMDsgaSA8IHByb2dyZXNz X250aHJlYWRzOyBpKyspDQotCQkJCQlsYWdzICs9IHRocmVhZFtpXS50aHJv dHRsZV9sYWc7DQotDQogCQkJCXRvdGFsX3J1biA9IChub3cgLSB0aHJlYWRf c3RhcnQpIC8gMTAwMDAwMC4wOw0KLQkJCQl0cHMgPSAxMDAwMDAwLjAgKiAo Y291bnQgLSBsYXN0X2NvdW50KSAvIHJ1bjsNCi0JCQkJbGF0ZW5jeSA9IDAu MDAxICogKGxhdHMgLSBsYXN0X2xhdHMpIC8gKGNvdW50IC0gbGFzdF9jb3Vu dCk7DQotCQkJCXNxbGF0ID0gMS4wICogKHNxbGF0cyAtIGxhc3Rfc3FsYXRz KSAvIChjb3VudCAtIGxhc3RfY291bnQpOw0KKwkJCQl0cHMgPSAxMDAwMDAw LjAgKiAoY3VyLmNudCAtIGxhc3QuY250KSAvIHJ1bjsNCisJCQkJbGF0ZW5j eSA9IDAuMDAxICogKGN1ci5sYXRlbmN5LnN1bSAtIGxhc3QubGF0ZW5jeS5z dW0pIC8NCisJCQkJCShjdXIuY250IC0gbGFzdC5jbnQpOw0KKwkJCQlzcWxh dCA9IDEuMCAqIChjdXIubGF0ZW5jeS5zdW0yIC0gbGFzdC5sYXRlbmN5LnN1 bTIpDQorCQkJCQkvIChjdXIuY250IC0gbGFzdC5jbnQpOw0KIAkJCQlzdGRl diA9IDAuMDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVuY3kg KiBsYXRlbmN5KTsNCi0JCQkJbGFnID0gMC4wMDEgKiAobGFncyAtIGxhc3Rf bGFncykgLyAoY291bnQgLSBsYXN0X2NvdW50KTsNCi0JCQkJc2tpcHBlZCA9 IHRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkIC0gbGFzdF9za2lw cGVkOw0KKwkJCQlsYWcgPSAwLjAwMSAqIChjdXIubGFnLnN1bSAtIGxhc3Qu bGFnLnN1bSkgLw0KKwkJCQkJKGN1ci5jbnQgLSBsYXN0LmNudCk7DQogDQog CQkJCWZwcmludGYoc3RkZXJyLA0KIAkJCQkJCSJwcm9ncmVzczogJS4xZiBz LCAlLjFmIHRwcywgIg0KQEAgLTM3NzYsMTYgKzM4MjAsMTMgQEAgdGhyZWFk UnVuKHZvaWQgKmFyZykNCiAJCQkJew0KIAkJCQkJZnByaW50ZihzdGRlcnIs ICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsNCiAJCQkJCWlmIChsYXRlbmN5X2xp bWl0KQ0KLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZPUk1B VCAiIHNraXBwZWQiLCBza2lwcGVkKTsNCisJCQkJCQlmcHJpbnRmKHN0ZGVy ciwgIiwgIklOVDY0X0ZPUk1BVCIgc2tpcHBlZCIsDQorCQkJCQkJCQljdXIu c2tpcHBlZCAtIGxhc3Quc2tpcHBlZCk7DQogCQkJCX0NCiAJCQkJZnByaW50 ZihzdGRlcnIsICJcbiIpOw0KIA0KLQkJCQlsYXN0X2NvdW50ID0gY291bnQ7 DQotCQkJCWxhc3RfbGF0cyA9IGxhdHM7DQotCQkJCWxhc3Rfc3FsYXRzID0g c3FsYXRzOw0KLQkJCQlsYXN0X2xhZ3MgPSBsYWdzOw0KKwkJCQlsYXN0ID0g Y3VyOw0KIAkJCQlsYXN0X3JlcG9ydCA9IG5vdzsNCi0JCQkJbGFzdF9za2lw cGVkID0gdGhyZWFkLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQ7DQogDQog CQkJCS8qDQogCQkJCSAqIEVuc3VyZSB0aGF0IHRoZSBuZXh0IHJlcG9ydCBp cyBpbiB0aGUgZnV0dXJlLCBpbiBjYXNlDQo= --8323329-468143564-1437810181=:20046 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-468143564-1437810181=:20046--