Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hrqqJ-00031o-PV for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Jul 2019 21:36:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hrqqG-0006UZ-NG for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Jul 2019 21:36:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hrqqG-0006US-2b for pgsql-hackers@lists.postgresql.org; Sun, 28 Jul 2019 21:36:32 +0000 Received: from courriel.mines-paristech.fr ([77.158.173.149] helo=antispam-1.ensmp.fr) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1hrqqB-0002T3-GH for pgsql-hackers@lists.postgresql.org; Sun, 28 Jul 2019 21:36:30 +0000 Received: from smtp-5.mines-paristech.fr (smtp.mines-paristech.fr [77.158.173.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by antispam-1.ensmp.fr (antispam.mines-paristech.fr) with ESMTPS id 2A1E155E26; Sun, 28 Jul 2019 23:36:24 +0200 (CEST) Received: from lancre (251.237.219.88.rev.sfr.net [88.219.237.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-5.mines-paristech.fr (Postfix) with ESMTPSA id 28388201E8; Sun, 28 Jul 2019 23:36:23 +0200 (CEST) Date: Sun, 28 Jul 2019 23:36:22 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@lancre Reply-To: Fabien COELHO To: Kyotaro Horiguchi cc: daniel@manitou-mail.org, peter.eisentraut@2ndquadrant.com, iwata.aya@jp.fujitsu.com, PostgreSQL Developers Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: Message-ID: References: <522881f5-a081-4229-a51b-b230e1321236@manitou-mail.org> <20190726.131704.86173346.horikyota.ntt@gmail.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-611115096-1564349783=:25871" X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: 0 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduvddrkeelgdduieeiucetufdoteggodetrfcurfhrohhfihhlvgemucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddtnecunecujfgurhepfffhrhfvufgjkfhffgggtgesmhdtreertdervdenucfhrhhomhephfgrsghivghnucevqffgnffjqfcuoegtohgvlhhhohestghrihdrvghnshhmphdrfhhrqeenucfkphepkeekrddvudelrddvfeejrddvhedunecurfgrrhgrmhepmhhouggvpehsmhhtphhouhht X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-611115096-1564349783=:25871 Content-Type: text/plain; charset=US-ASCII; format=flowed > Thanks for the feedback. Attached v3 with further documentation updates. Attached v4 also fixes pg_stat_statements non regression tests, per pg patch tester travis run. -- Fabien. --8323329-611115096-1564349783=:25871 Content-Type: text/x-diff; name=psql-always-show-results-4.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-always-show-results-4.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCA2Nzg3ZWMxZWZkLi5kZTU5YTVjZjY1IDEwMDY0NA0KLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0 ZW1lbnRzLm91dA0KKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dA0KQEAgLTQ5LDE3ICs0 OSw0MiBAQCBCRUdJTiBcOw0KIFNFTEVDVCAyLjAgQVMgImZsb2F0IiBcOw0K IFNFTEVDVCAnd29ybGQnIEFTICJ0ZXh0IiBcOw0KIENPTU1JVDsNCisgZmxv YXQgDQorLS0tLS0tLQ0KKyAgIDIuMA0KKygxIHJvdykNCisNCisgdGV4dCAg DQorLS0tLS0tLQ0KKyB3b3JsZA0KKygxIHJvdykNCisNCiAtLSBjb21wb3Vu ZCB3aXRoIGVtcHR5IHN0YXRlbWVudHMgYW5kIHNwdXJpb3VzIGxlYWRpbmcg c3BhY2luZw0KLVw7XDsgICBTRUxFQ1QgMyArIDMgXDtcO1w7ICAgU0VMRUNU ICcgJyB8fCAnICEnIFw7XDsgICBTRUxFQ1QgMSArIDQgXDs7DQotID9jb2x1 bW4/IA0KLS0tLS0tLS0tLS0NCi0gICAgICAgIDUNCitcO1w7ICAgU0VMRUNU IDMgKyAzIEFTICIrIiBcO1w7XDsgICBTRUxFQ1QgJyAnIHx8ICcgIScgQVMg Inx8IiBcO1w7ICAgU0VMRUNUIDEgKyA0IEFTICIrIiBcOzsNCisgKyANCist LS0NCisgNg0KKygxIHJvdykNCisNCisgfHwgIA0KKy0tLS0tDQorICAgIQ0K KygxIHJvdykNCisNCisgKyANCistLS0NCisgNQ0KICgxIHJvdykNCiANCiAt LSBub24gOy10ZXJtaW5hdGVkIHN0YXRlbWVudHMNCiBTRUxFQ1QgMSArIDEg KyAxIEFTICJhZGQiIFxnc2V0DQogU0VMRUNUIDphZGQgKyAxICsgMSBBUyAi YWRkIiBcOw0KIFNFTEVDVCA6YWRkICsgMSArIDEgQVMgImFkZCIgXGdzZXQN CisgYWRkIA0KKy0tLS0tDQorICAgNQ0KKygxIHJvdykNCisNCiAtLSBzZXQg b3BlcmF0b3INCiBTRUxFQ1QgMSBBUyBpIFVOSU9OIFNFTEVDVCAyIE9SREVS IEJZIGk7DQogIGkgDQpAQCAtMTAyLDEyICsxMjcsMTIgQEAgU0VMRUNUIHF1 ZXJ5LCBjYWxscywgcm93cyBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRF UiBCWSBxdWVyeSBDT0xMQVRFICJDIjsNCiAgU0VMRUNUICQxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICA0IHwgICAg NA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgK3wgICAgICAgfCANCiAgICBBUyAidGV4dCIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgDQotIFNF TEVDVCAkMSArICQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgMiB8ICAgIDINCiAgU0VMRUNUICQxICsgJDIgKyAkMyBBUyAi YWRkIiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAzIHwgICAgMw0KKyBT RUxFQ1QgJDEgKyAkMiBBUyAiKyIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgIDIgfCAgICAyDQogIFNFTEVDVCAkMSBBUyAiZmxvYXQiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMSB8ICAgIDENCiAg U0VMRUNUICQxIEFTICJpbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAyIHwgICAgMg0KICBTRUxFQ1QgJDEgQVMgaSBVTklPTiBT RUxFQ1QgJDIgT1JERVIgQlkgaSAgICAgICAgIHwgICAgIDEgfCAgICAyDQot IFNFTEVDVCAkMSB8fCAkMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgMSB8ICAgIDENCisgU0VMRUNUICQxIHx8ICQyIEFTICJ8 fCIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAxIHwgICAgMQ0K ICBTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgICAgICAgICAg ICAgICAgIHwgICAgIDEgfCAgICAxDQogIFdJVEggdChmKSBBUyAoICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAgICAgMSB8ICAgIDIN CiAgICBWQUxVRVMgKCQxKSwgKCQyKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICt8ICAgICAgIHwgDQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvc3FsL3BnX3N0YXRfc3RhdGVtZW50cy5zcWwgYi9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvcGdfc3RhdF9zdGF0ZW1l bnRzLnNxbA0KaW5kZXggOGI1MjcwNzBkNC4uZWEzYTMxMTc2ZSAxMDA2NDQN Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wZ19zdGF0 X3N0YXRlbWVudHMuc3FsDQorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9zcWwvcGdfc3RhdF9zdGF0ZW1lbnRzLnNxbA0KQEAgLTI3LDcgKzI3 LDcgQEAgU0VMRUNUICd3b3JsZCcgQVMgInRleHQiIFw7DQogQ09NTUlUOw0K IA0KIC0tIGNvbXBvdW5kIHdpdGggZW1wdHkgc3RhdGVtZW50cyBhbmQgc3B1 cmlvdXMgbGVhZGluZyBzcGFjaW5nDQotXDtcOyAgIFNFTEVDVCAzICsgMyBc O1w7XDsgICBTRUxFQ1QgJyAnIHx8ICcgIScgXDtcOyAgIFNFTEVDVCAxICsg NCBcOzsNCitcO1w7ICAgU0VMRUNUIDMgKyAzIEFTICIrIiBcO1w7XDsgICBT RUxFQ1QgJyAnIHx8ICcgIScgQVMgInx8IiBcO1w7ICAgU0VMRUNUIDEgKyA0 IEFTICIrIiBcOzsNCiANCiAtLSBub24gOy10ZXJtaW5hdGVkIHN0YXRlbWVu dHMNCiBTRUxFQ1QgMSArIDEgKyAxIEFTICJhZGQiIFxnc2V0DQpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sDQppbmRleCA3Nzg5ZmM2MTc3Li40 ZTZhYjVhMGE1IDEwMDY0NA0KLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sDQorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNn bWwNCkBAIC0xMjcsMTggKzEyNywxMSBAQCBlY2hvICdceCBcXCBTRUxFQ1Qg KiBGUk9NIGZvbzsnIHwgcHNxbA0KICAgICAgICBjb21tYW5kcyBpbmNsdWRl ZCBpbiB0aGUgc3RyaW5nIHRvIGRpdmlkZSBpdCBpbnRvIG11bHRpcGxlDQog ICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0icHJv dG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgZm9yIG1v cmUgZGV0YWlscyBhYm91dCBob3cgdGhlIHNlcnZlciBoYW5kbGVzIG11bHRp LXF1ZXJ5IHN0cmluZ3MuKQ0KLSAgICAgICBBbHNvLCA8YXBwbGljYXRpb24+ cHNxbDwvYXBwbGljYXRpb24+IG9ubHkgcHJpbnRzIHRoZQ0KLSAgICAgICBy ZXN1bHQgb2YgdGhlIGxhc3QgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBjb21t YW5kIGluIHRoZSBzdHJpbmcuDQotICAgICAgIFRoaXMgaXMgZGlmZmVyZW50 IGZyb20gdGhlIGJlaGF2aW9yIHdoZW4gdGhlIHNhbWUgc3RyaW5nIGlzIHJl YWQgZnJvbQ0KLSAgICAgICBhIGZpbGUgb3IgZmVkIHRvIDxhcHBsaWNhdGlv bj5wc3FsPC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1dCwNCi0gICAg ICAgYmVjYXVzZSB0aGVuIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlv bj4gc2VuZHMNCi0gICAgICAgZWFjaCA8YWNyb255bT5TUUw8L2Fjcm9ueW0+ IGNvbW1hbmQgc2VwYXJhdGVseS4NCiAgICAgICA8L3BhcmE+DQogICAgICAg PHBhcmE+DQotICAgICAgIEJlY2F1c2Ugb2YgdGhpcyBiZWhhdmlvciwgcHV0 dGluZyBtb3JlIHRoYW4gb25lIFNRTCBjb21tYW5kIGluIGENCi0gICAgICAg c2luZ2xlIDxvcHRpb24+LWM8L29wdGlvbj4gc3RyaW5nIG9mdGVuIGhhcyB1 bmV4cGVjdGVkIHJlc3VsdHMuDQotICAgICAgIEl0J3MgYmV0dGVyIHRvIHVz ZSByZXBlYXRlZCA8b3B0aW9uPi1jPC9vcHRpb24+IGNvbW1hbmRzIG9yIGZl ZWQNCi0gICAgICAgbXVsdGlwbGUgY29tbWFuZHMgdG8gPGFwcGxpY2F0aW9u PnBzcWw8L2FwcGxpY2F0aW9uPidzIHN0YW5kYXJkIGlucHV0LA0KKyAgICAg ICBJZiBoYXZpbmcgc2V2ZXJhbCBjb21tYW5kcyBleGVjdXRlZCBpbiBvbmUg dHJhbnNhY3Rpb24gaXMgbm90IGRlc2lyZWQsIA0KKyAgICAgICB1c2UgcmVw ZWF0ZWQgPG9wdGlvbj4tYzwvb3B0aW9uPiBjb21tYW5kcyBvciBmZWVkIG11 bHRpcGxlIGNvbW1hbmRzIHRvDQorICAgICAgIDxhcHBsaWNhdGlvbj5wc3Fs PC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1dCwNCiAgICAgICAgZWl0 aGVyIHVzaW5nIDxhcHBsaWNhdGlvbj5lY2hvPC9hcHBsaWNhdGlvbj4gYXMg aWxsdXN0cmF0ZWQgYWJvdmUsIG9yDQogICAgICAgIHZpYSBhIHNoZWxsIGhl cmUtZG9jdW1lbnQsIGZvciBleGFtcGxlOg0KIDxwcm9ncmFtbGlzdGluZz4N CkBAIC0zMzU1LDEwICszMzQ4LDggQEAgc2VsZWN0IDFcOyBzZWxlY3QgMlw7 IHNlbGVjdCAzOw0KICAgICAgICAgY29tbWFuZHMgaW5jbHVkZWQgaW4gdGhl IHN0cmluZyB0byBkaXZpZGUgaXQgaW50byBtdWx0aXBsZQ0KICAgICAgICAg dHJhbnNhY3Rpb25zLiAgKFNlZSA8eHJlZiBsaW5rZW5kPSJwcm90b2NvbC1m bG93LW11bHRpLXN0YXRlbWVudCIvPg0KICAgICAgICAgZm9yIG1vcmUgZGV0 YWlscyBhYm91dCBob3cgdGhlIHNlcnZlciBoYW5kbGVzIG11bHRpLXF1ZXJ5 IHN0cmluZ3MuKQ0KLSAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxp Y2F0aW9uPiBwcmludHMgb25seSB0aGUgbGFzdCBxdWVyeSByZXN1bHQNCi0g ICAgICAgIGl0IHJlY2VpdmVzIGZvciBlYWNoIHJlcXVlc3Q7IGluIHRoaXMg ZXhhbXBsZSwgYWx0aG91Z2ggYWxsDQotICAgICAgICB0aHJlZSA8Y29tbWFu ZD5TRUxFQ1Q8L2NvbW1hbmQ+cyBhcmUgaW5kZWVkIGV4ZWN1dGVkLCA8YXBw bGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+DQotICAgICAgICBvbmx5IHBy aW50cyB0aGUgPGxpdGVyYWw+MzwvbGl0ZXJhbD4uDQorICAgICAgICA8YXBw bGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+IHByaW50cyBhbGwgcmVzdWx0 cyBpdCByZWNlaXZlcywgb25lDQorICAgICAgICBhZnRlciB0aGUgb3RoZXIu DQogICAgICAgICA8L3BhcmE+DQogICAgICAgICA8L2xpc3RpdGVtPg0KICAg ICAgIDwvdmFybGlzdGVudHJ5Pg0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNx bC9jb21tb24uYyBiL3NyYy9iaW4vcHNxbC9jb21tb24uYw0KaW5kZXggNDRh NzgyNDc4ZC4uNDUzNGM0NTg1NCAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNx bC9jb21tb24uYw0KKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jDQpAQCAt NDcyLDYgKzQ3MiwxNiBAQCBSZXNldENhbmNlbENvbm4odm9pZCkNCiAjZW5k aWYNCiB9DQogDQorc3RhdGljIHZvaWQNCitTaG93RXJyb3JNZXNzYWdlKGNv bnN0IFBHcmVzdWx0ICpyZXN1bHQpDQorew0KKwljb25zdCBjaGFyICplcnJv ciA9IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpOw0KKw0KKwlpZiAoc3RybGVu KGVycm9yKSkNCisJCXBnX2xvZ19pbmZvKCIlcyIsIGVycm9yKTsNCisNCisJ Q2hlY2tDb25uZWN0aW9uKCk7DQorfQ0KIA0KIC8qDQogICogQWNjZXB0UmVz dWx0DQpAQCAtNDgyLDcgKzQ5Miw3IEBAIFJlc2V0Q2FuY2VsQ29ubih2b2lk KQ0KICAqIFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBmYWxzZSBm b3IgZXJyb3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1BY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRSZXN1bHQo Y29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9yKQ0KIHsN CiAJYm9vbAkJT0s7DQogDQpAQCAtNTEzLDE1ICs1MjMsOCBAQCBBY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCiAJCQkJYnJlYWs7DQog CQl9DQogDQotCWlmICghT0spDQotCXsNCi0JCWNvbnN0IGNoYXIgKmVycm9y ID0gUFFlcnJvck1lc3NhZ2UocHNldC5kYik7DQotDQotCQlpZiAoc3RybGVu KGVycm9yKSkNCi0JCQlwZ19sb2dfaW5mbygiJXMiLCBlcnJvcik7DQotDQot CQlDaGVja0Nvbm5lY3Rpb24oKTsNCi0JfQ0KKwlpZiAoIU9LICYmIHNob3df ZXJyb3IpDQorCQlTaG93RXJyb3JNZXNzYWdlKHJlc3VsdCk7DQogDQogCXJl dHVybiBPSzsNCiB9DQpAQCAtNzAxLDcgKzcwNCw3IEBAIFBTUUxleGVjKGNv bnN0IGNoYXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiAN Ci0JaWYgKCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1 bHQocmVzLCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVz KTsNCiAJCXJlcyA9IE5VTEw7DQpAQCAtNzQzLDcgKzc0Niw3IEBAIFBTUUxl eGVjV2F0Y2goY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IHByaW50UXVlcnlP cHQgKm9wdCkNCiANCiAJUmVzZXRDYW5jZWxDb25uKCk7DQogDQotCWlmICgh QWNjZXB0UmVzdWx0KHJlcykpDQorCWlmICghQWNjZXB0UmVzdWx0KHJlcywg dHJ1ZSkpDQogCXsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlcyk7DQogCQly ZXR1cm4gMDsNCkBAIC05OTksMTk5ICsxMDAyLDExMyBAQCBsb29wX2V4aXQ6 DQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCi0NCiAvKg0KLSAqIFByb2Nl c3NSZXN1bHQ6IHV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVl cnkoKSBvbmx5DQotICoNCi0gKiBXaGVuIG91ciBjb21tYW5kIHN0cmluZyBj b250YWluZWQgYSBDT1BZIEZST00gU1RESU4gb3IgQ09QWSBUTyBTVERPVVQs DQotICogUFFleGVjKCkgaGFzIHN0b3BwZWQgYXQgdGhlIFBHcmVzdWx0IGFz c29jaWF0ZWQgd2l0aCB0aGUgZmlyc3Qgc3VjaA0KLSAqIGNvbW1hbmQuICBJ biB0aGF0IGV2ZW50LCB3ZSdsbCBtYXJzaGFsIGRhdGEgZm9yIHRoZSBDT1BZ IGFuZCB0aGVuIGN5Y2xlDQotICogdGhyb3VnaCBhbnkgc3Vic2VxdWVudCBQ R3Jlc3VsdCBvYmplY3RzLg0KLSAqDQotICogV2hlbiB0aGUgY29tbWFuZCBz dHJpbmcgY29udGFpbmVkIG5vIHN1Y2ggQ09QWSBjb21tYW5kLCB0aGlzIGZ1 bmN0aW9uDQotICogZGVnZW5lcmF0ZXMgdG8gYW4gQWNjZXB0UmVzdWx0KCkg Y2FsbC4NCi0gKg0KLSAqIENoYW5nZXMgaXRzIGFyZ3VtZW50IHRvIHBvaW50 IHRvIHRoZSBsYXN0IFBHcmVzdWx0IG9mIHRoZSBjb21tYW5kIHN0cmluZywN Ci0gKiBvciBOVUxMIGlmIHRoYXQgcmVzdWx0IHdhcyBmb3IgYSBDT1BZIFRP IFNURE9VVC4gIChSZXR1cm5pbmcgTlVMTCBwcmV2ZW50cw0KLSAqIHRoZSBj b21tYW5kIHN0YXR1cyBmcm9tIGJlaW5nIHByaW50ZWQsIHdoaWNoIHdlIHdh bnQgaW4gdGhhdCBjYXNlIHNvIHRoYXQNCi0gKiB0aGUgc3RhdHVzIGxpbmUg ZG9lc24ndCBnZXQgdGFrZW4gYXMgcGFydCBvZiB0aGUgQ09QWSBkYXRhLikN Ci0gKg0KLSAqIFJldHVybnMgdHJ1ZSBvbiBjb21wbGV0ZSBzdWNjZXNzLCBm YWxzZSBvdGhlcndpc2UuICBQb3NzaWJsZSBmYWlsdXJlIG1vZGVzDQotICog aW5jbHVkZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxlbXM7IGNoZWNrIHRo ZSB0cmFuc2FjdGlvbiBzdGF0dXMgZm9yIHRoZQ0KLSAqIHNlcnZlci1zaWRl IG9waW5pb24uDQorICogTWFyc2hhbCB0aGUgQ09QWSBkYXRhLiAgRWl0aGVy IHN1YnJvdXRpbmUgd2lsbCBnZXQgdGhlDQorICogY29ubmVjdGlvbiBvdXQg b2YgaXRzIENPUFkgc3RhdGUsIHRoZW4gY2FsbCBQUXJlc3VsdFN0YXR1cygp DQorICogb25jZSBhbmQgcmVwb3J0IGFueSBlcnJvci4NCisgKg0KKyAqIEZv ciBDT1BZIE9VVCwgZGlyZWN0IHRoZSBvdXRwdXQgdG8gcHNldC5jb3B5U3Ry ZWFtIGlmIGl0J3Mgc2V0LA0KKyAqIG90aGVyd2lzZSB0byBwc2V0LmdmbmFt ZSBpZiBpdCdzIHNldCwgb3RoZXJ3aXNlIHRvIHF1ZXJ5Rm91dC4NCisgKiBG b3IgQ09QWSBJTiwgdXNlIHBzZXQuY29weVN0cmVhbSBhcyBkYXRhIHNvdXJj ZSBpZiBpdCdzIHNldCwNCisgKiBvdGhlcndpc2UgY3VyX2NtZF9zb3VyY2Uu DQorICoNCisgKiBVcGRhdGUgcmVzdWx0IGlmIGZ1cnRoZXIgcHJvY2Vzc2lu ZyBpcyBuZWNlc3NhcnkuICAoUmV0dXJuaW5nIE5VTEwNCisgKiBwcmV2ZW50 cyB0aGUgY29tbWFuZCBzdGF0dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGlj aCB3ZSB3YW50IGluIHRoYXQNCisgKiBjYXNlIHNvIHRoYXQgdGhlIHN0YXR1 cyBsaW5lIGRvZXNuJ3QgZ2V0IHRha2VuIGFzIHBhcnQgb2YgdGhlIENPUFkg ZGF0YS4pDQogICovDQogc3RhdGljIGJvb2wNCi1Qcm9jZXNzUmVzdWx0KFBH cmVzdWx0ICoqcmVzdWx0cykNCitIYW5kbGVDb3B5UmVzdWx0KFBHcmVzdWx0 ICoqcmVzdWx0KQ0KIHsNCiAJYm9vbAkJc3VjY2VzcyA9IHRydWU7DQotCWJv b2wJCWZpcnN0X2N5Y2xlID0gdHJ1ZTsNCisJRklMRQkgICAqY29weXN0cmVh bTsNCisJUEdyZXN1bHQgICAqY29weV9yZXN1bHQ7DQorCUV4ZWNTdGF0dXNU eXBlIHJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0KTsN CiANCi0JZm9yICg7OykNCisJQXNzZXJ0KHJlc3VsdF9zdGF0dXMgPT0gUEdS RVNfQ09QWV9PVVQgfHwNCisJCSAgIHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNf Q09QWV9JTik7DQorDQorCVNldENhbmNlbENvbm4oKTsNCisJaWYgKHJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQogCXsNCi0JCUV4ZWNTdGF0 dXNUeXBlIHJlc3VsdF9zdGF0dXM7DQotCQlib29sCQlpc19jb3B5Ow0KLQkJ UEdyZXN1bHQgICAqbmV4dF9yZXN1bHQ7DQorCQlib29sCQluZWVkX2Nsb3Nl ID0gZmFsc2U7DQorCQlib29sCQlpc19waXBlID0gZmFsc2U7DQogDQotCQlp ZiAoIUFjY2VwdFJlc3VsdCgqcmVzdWx0cykpDQorCQlpZiAocHNldC5jb3B5 U3RyZWFtKQ0KIAkJew0KLQkJCS8qDQotCQkJICogRmFpbHVyZSBhdCB0aGlz IHBvaW50IGlzIGFsd2F5cyBhIHNlcnZlci1zaWRlIGZhaWx1cmUgb3IgYQ0K LQkJCSAqIGZhaWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5kIHN0cmluZy4g IEVpdGhlciB3YXksIHdlJ3JlDQotCQkJICogZmluaXNoZWQgd2l0aCB0aGlz IGNvbW1hbmQgc3RyaW5nLg0KLQkJCSAqLw0KLQkJCXN1Y2Nlc3MgPSBmYWxz ZTsNCi0JCQlicmVhazsNCisJCQkvKiBpbnZva2VkIGJ5IFxjb3B5ICovDQor CQkJY29weXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCiAJCX0NCi0NCi0J CXJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0cyk7DQot CQlzd2l0Y2ggKHJlc3VsdF9zdGF0dXMpDQorCQllbHNlIGlmIChwc2V0Lmdm bmFtZSkNCiAJCXsNCi0JCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOg0KLQkJ CWNhc2UgUEdSRVNfQ09NTUFORF9PSzoNCi0JCQljYXNlIFBHUkVTX1RVUExF U19PSzoNCi0JCQkJaXNfY29weSA9IGZhbHNlOw0KLQkJCQlicmVhazsNCi0N Ci0JCQljYXNlIFBHUkVTX0NPUFlfT1VUOg0KLQkJCWNhc2UgUEdSRVNfQ09Q WV9JTjoNCi0JCQkJaXNfY29weSA9IHRydWU7DQotCQkJCWJyZWFrOw0KLQ0K LQkJCWRlZmF1bHQ6DQotCQkJCS8qIEFjY2VwdFJlc3VsdCgpIHNob3VsZCBo YXZlIGNhdWdodCBhbnl0aGluZyBlbHNlLiAqLw0KLQkJCQlpc19jb3B5ID0g ZmFsc2U7DQotCQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCBQUXJlc3Vs dFN0YXR1czogJWQiLCByZXN1bHRfc3RhdHVzKTsNCi0JCQkJYnJlYWs7DQot CQl9DQotDQotCQlpZiAoaXNfY29weSkNCi0JCXsNCi0JCQkvKg0KLQkJCSAq IE1hcnNoYWwgdGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5lIHdp bGwgZ2V0IHRoZQ0KLQkJCSAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZ IHN0YXRlLCB0aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KLQkJCSAqIG9u Y2UgYW5kIHJlcG9ydCBhbnkgZXJyb3IuDQotCQkJICoNCi0JCQkgKiBGb3Ig Q09QWSBPVVQsIGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQuY29weVN0cmVh bSBpZiBpdCdzIHNldCwNCi0JCQkgKiBvdGhlcndpc2UgdG8gcHNldC5nZm5h bWUgaWYgaXQncyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQuDQotCQkJ ICogRm9yIENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0YSBz b3VyY2UgaWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIGN1cl9jbWRf c291cmNlLg0KLQkJCSAqLw0KLQkJCUZJTEUJICAgKmNvcHlzdHJlYW07DQot CQkJUEdyZXN1bHQgICAqY29weV9yZXN1bHQ7DQotDQotCQkJU2V0Q2FuY2Vs Q29ubigpOw0KLQkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlf T1VUKQ0KKwkJCS8qIGludm9rZWQgYnkgXGcgKi8NCisJCQlpZiAob3BlblF1 ZXJ5T3V0cHV0RmlsZShwc2V0LmdmbmFtZSwNCisJCQkJCQkJCQkmY29weXN0 cmVhbSwgJmlzX3BpcGUpKQ0KIAkJCXsNCi0JCQkJYm9vbAkJbmVlZF9jbG9z ZSA9IGZhbHNlOw0KLQkJCQlib29sCQlpc19waXBlID0gZmFsc2U7DQotDQot CQkJCWlmIChwc2V0LmNvcHlTdHJlYW0pDQotCQkJCXsNCi0JCQkJCS8qIGlu dm9rZWQgYnkgXGNvcHkgKi8NCi0JCQkJCWNvcHlzdHJlYW0gPSBwc2V0LmNv cHlTdHJlYW07DQotCQkJCX0NCi0JCQkJZWxzZSBpZiAocHNldC5nZm5hbWUp DQotCQkJCXsNCi0JCQkJCS8qIGludm9rZWQgYnkgXGcgKi8NCi0JCQkJCWlm IChvcGVuUXVlcnlPdXRwdXRGaWxlKHBzZXQuZ2ZuYW1lLA0KLQkJCQkJCQkJ CQkJJmNvcHlzdHJlYW0sICZpc19waXBlKSkNCi0JCQkJCXsNCi0JCQkJCQlu ZWVkX2Nsb3NlID0gdHJ1ZTsNCi0JCQkJCQlpZiAoaXNfcGlwZSkNCi0JCQkJ CQkJZGlzYWJsZV9zaWdwaXBlX3RyYXAoKTsNCi0JCQkJCX0NCi0JCQkJCWVs c2UNCi0JCQkJCQljb3B5c3RyZWFtID0gTlVMTDsJLyogZGlzY2FyZCBDT1BZ IGRhdGEgZW50aXJlbHkgKi8NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsN Ci0JCQkJCS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBxdWVyeSBvdXRw dXQgc3RyZWFtICovDQotCQkJCQljb3B5c3RyZWFtID0gcHNldC5xdWVyeUZv dXQ7DQotCQkJCX0NCi0NCi0JCQkJc3VjY2VzcyA9IGhhbmRsZUNvcHlPdXQo cHNldC5kYiwNCi0JCQkJCQkJCQkJY29weXN0cmVhbSwNCi0JCQkJCQkJCQkJ JmNvcHlfcmVzdWx0KQ0KLQkJCQkJJiYgc3VjY2Vzcw0KLQkJCQkJJiYgKGNv cHlzdHJlYW0gIT0gTlVMTCk7DQotDQotCQkJCS8qDQotCQkJCSAqIFN1cHBy ZXNzIHN0YXR1cyBwcmludGluZyBpZiB0aGUgcmVwb3J0IHdvdWxkIGdvIHRv IHRoZSBzYW1lDQotCQkJCSAqIHBsYWNlIGFzIHRoZSBDT1BZIGRhdGEganVz dCB3ZW50LiAgTm90ZSB0aGlzIGRvZXNuJ3QNCi0JCQkJICogcHJldmVudCBl cnJvciByZXBvcnRpbmcsIHNpbmNlIGhhbmRsZUNvcHlPdXQgZGlkIHRoYXQu DQotCQkJCSAqLw0KLQkJCQlpZiAoY29weXN0cmVhbSA9PSBwc2V0LnF1ZXJ5 Rm91dCkNCi0JCQkJew0KLQkJCQkJUFFjbGVhcihjb3B5X3Jlc3VsdCk7DQot CQkJCQljb3B5X3Jlc3VsdCA9IE5VTEw7DQotCQkJCX0NCi0NCi0JCQkJaWYg KG5lZWRfY2xvc2UpDQotCQkJCXsNCi0JCQkJCS8qIGNsb3NlIFxnIGFyZ3Vt ZW50IGZpbGUvcGlwZSAqLw0KLQkJCQkJaWYgKGlzX3BpcGUpDQotCQkJCQl7 DQotCQkJCQkJcGNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJCXJlc3RvcmVf c2lncGlwZV90cmFwKCk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7 DQotCQkJCQkJZmNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJfQ0KLQkJCQl9 DQorCQkJCW5lZWRfY2xvc2UgPSB0cnVlOw0KKwkJCQlpZiAoaXNfcGlwZSkN CisJCQkJCWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQogCQkJfQ0KIAkJCWVs c2UNCi0JCQl7DQotCQkJCS8qIENPUFkgSU4gKi8NCi0JCQkJY29weXN0cmVh bSA9IHBzZXQuY29weVN0cmVhbSA/IHBzZXQuY29weVN0cmVhbSA6IHBzZXQu Y3VyX2NtZF9zb3VyY2U7DQotCQkJCXN1Y2Nlc3MgPSBoYW5kbGVDb3B5SW4o cHNldC5kYiwNCi0JCQkJCQkJCQkgICBjb3B5c3RyZWFtLA0KLQkJCQkJCQkJ CSAgIFBRYmluYXJ5VHVwbGVzKCpyZXN1bHRzKSwNCi0JCQkJCQkJCQkgICAm Y29weV9yZXN1bHQpICYmIHN1Y2Nlc3M7DQotCQkJfQ0KLQkJCVJlc2V0Q2Fu Y2VsQ29ubigpOw0KLQ0KLQkJCS8qDQotCQkJICogUmVwbGFjZSB0aGUgUEdS RVNfQ09QWV9PVVQvSU4gcmVzdWx0IHdpdGggQ09QWSBjb21tYW5kJ3MgZXhp dA0KLQkJCSAqIHN0YXR1cywgb3Igd2l0aCBOVUxMIGlmIHdlIHdhbnQgdG8g c3VwcHJlc3MgcHJpbnRpbmcgYW55dGhpbmcuDQotCQkJICovDQotCQkJUFFj bGVhcigqcmVzdWx0cyk7DQotCQkJKnJlc3VsdHMgPSBjb3B5X3Jlc3VsdDsN CisJCQkJY29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2NhcmQgQ09QWSBkYXRh IGVudGlyZWx5ICovDQogCQl9DQotCQllbHNlIGlmIChmaXJzdF9jeWNsZSkN CisJCWVsc2UNCiAJCXsNCi0JCQkvKiBmYXN0IHBhdGg6IG5vIENPUFkgY29t bWFuZHM7IFBRZXhlYyB2aXNpdGVkIGFsbCByZXN1bHRzICovDQotCQkJYnJl YWs7DQorCQkJLyogZmFsbCBiYWNrIHRvIHRoZSBnZW5lcmljIHF1ZXJ5IG91 dHB1dCBzdHJlYW0gKi8NCisJCQljb3B5c3RyZWFtID0gcHNldC5xdWVyeUZv dXQ7DQogCQl9DQogDQorCQlzdWNjZXNzID0gaGFuZGxlQ29weU91dChwc2V0 LmRiLA0KKwkJCQkJCQkJY29weXN0cmVhbSwNCisJCQkJCQkJCSZjb3B5X3Jl c3VsdCkNCisJCQkmJiBzdWNjZXNzDQorCQkJJiYgKGNvcHlzdHJlYW0gIT0g TlVMTCk7DQorDQogCQkvKg0KLQkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBh Z2Fpbi4gIEluIHRoZSB0eXBpY2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFu ZA0KLQkJICogc3RyaW5nLCBpdCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3 aXNlLCB3ZSdsbCBoYXZlIG90aGVyIHJlc3VsdHMNCi0JCSAqIHRvIHByb2Nl c3MgdGhhdCBtYXkgaW5jbHVkZSBvdGhlciBDT1BZcy4gIFdlIGtlZXAgdGhl IGxhc3QgcmVzdWx0Lg0KKwkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5n IGlmIHRoZSByZXBvcnQgd291bGQgZ28gdG8gdGhlIHNhbWUNCisJCSAqIHBs YWNlIGFzIHRoZSBDT1BZIGRhdGEganVzdCB3ZW50LiAgTm90ZSB0aGlzIGRv ZXNuJ3QNCisJCSAqIHByZXZlbnQgZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBo YW5kbGVDb3B5T3V0IGRpZCB0aGF0Lg0KIAkJICovDQotCQluZXh0X3Jlc3Vs dCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOw0KLQkJaWYgKCFuZXh0X3Jlc3Vs dCkNCi0JCQlicmVhazsNCisJCWlmIChjb3B5c3RyZWFtID09IHBzZXQucXVl cnlGb3V0KQ0KKwkJew0KKwkJCVBRY2xlYXIoY29weV9yZXN1bHQpOw0KKwkJ CWNvcHlfcmVzdWx0ID0gTlVMTDsNCisJCX0NCiANCi0JCVBRY2xlYXIoKnJl c3VsdHMpOw0KLQkJKnJlc3VsdHMgPSBuZXh0X3Jlc3VsdDsNCi0JCWZpcnN0 X2N5Y2xlID0gZmFsc2U7DQorCQlpZiAobmVlZF9jbG9zZSkNCisJCXsNCisJ CQkvKiBjbG9zZSBcZyBhcmd1bWVudCBmaWxlL3BpcGUgKi8NCisJCQlpZiAo aXNfcGlwZSkNCisJCQl7DQorCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCisJ CQkJcmVzdG9yZV9zaWdwaXBlX3RyYXAoKTsNCisJCQl9DQorCQkJZWxzZQ0K KwkJCXsNCisJCQkJZmNsb3NlKGNvcHlzdHJlYW0pOw0KKwkJCX0NCisJCX0N CiAJfQ0KKwllbHNlDQorCXsNCisJCS8qIENPUFkgSU4gKi8NCisJCWNvcHlz dHJlYW0gPSBwc2V0LmNvcHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBw c2V0LmN1cl9jbWRfc291cmNlOw0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlJ bihwc2V0LmRiLA0KKwkJCQkJCQkgICBjb3B5c3RyZWFtLA0KKwkJCQkJCQkg ICBQUWJpbmFyeVR1cGxlcygqcmVzdWx0KSwNCisJCQkJCQkJICAgJmNvcHlf cmVzdWx0KSAmJiBzdWNjZXNzOw0KKwl9DQorCVJlc2V0Q2FuY2VsQ29ubigp Ow0KIA0KLQlTZXRSZXN1bHRWYXJpYWJsZXMoKnJlc3VsdHMsIHN1Y2Nlc3Mp Ow0KLQ0KLQkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJvbSBjb25u IGxvc3MgZHVyaW5nIENPUFkgKi8NCi0JaWYgKCFmaXJzdF9jeWNsZSAmJiAh Q2hlY2tDb25uZWN0aW9uKCkpDQotCQlyZXR1cm4gZmFsc2U7DQorCVBRY2xl YXIoKnJlc3VsdCk7DQorCSpyZXN1bHQgPSBjb3B5X3Jlc3VsdDsNCiANCiAJ cmV0dXJuIHN1Y2Nlc3M7DQogfQ0KIA0KLQ0KIC8qDQogICogUHJpbnRRdWVy eVN0YXR1czogcmVwb3J0IGNvbW1hbmQgc3RhdHVzIGFzIHJlcXVpcmVkDQog ICoNCi0gKiBOb3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgUHJp bnRRdWVyeVJlc3VsdHMoKSBvbmx5Lg0KKyAqIE5vdGU6IFV0aWxpdHkgZnVu Y3Rpb24gZm9yIHVzZSBieSBIYW5kbGVRdWVyeVJlc3VsdCgpIG9ubHkuDQog ICovDQogc3RhdGljIHZvaWQNCiBQcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0 ICpyZXN1bHRzKQ0KQEAgLTEyMTksNDMgKzExMzYsNDQgQEAgUHJpbnRRdWVy eVN0YXR1cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiANCiANCiAvKg0KLSAqIFBy aW50UXVlcnlSZXN1bHRzOiBwcmludCBvdXQgKG9yIHN0b3JlIG9yIGV4ZWN1 dGUpIHF1ZXJ5IHJlc3VsdHMgYXMgcmVxdWlyZWQNCi0gKg0KLSAqIE5vdGU6 IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKSBvbmx5 Lg0KKyAqIEhhbmRsZVF1ZXJ5UmVzdWx0OiBwcmludCBvdXQsIHN0b3JlIG9y IGV4ZWN1dGUgb25lIHF1ZXJ5IHJlc3VsdA0KKyAqIGFzIHJlcXVpcmVkLg0K ICAqDQogICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBleGVjdXRlZCBz dWNjZXNzZnVsbHksIGZhbHNlIG90aGVyd2lzZS4NCiAgKi8NCiBzdGF0aWMg Ym9vbA0KLVByaW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0K K0hhbmRsZVF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgbGFz dCkNCiB7DQogCWJvb2wJCXN1Y2Nlc3M7DQogCWNvbnN0IGNoYXIgKmNtZHN0 YXR1czsNCiANCi0JaWYgKCFyZXN1bHRzKQ0KKwlpZiAocmVzdWx0ID09IE5V TEwpDQogCQlyZXR1cm4gZmFsc2U7DQogDQotCXN3aXRjaCAoUFFyZXN1bHRT dGF0dXMocmVzdWx0cykpDQorCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVz dWx0KSkNCiAJew0KIAkJY2FzZSBQR1JFU19UVVBMRVNfT0s6DQogCQkJLyog c3RvcmUgb3IgZXhlY3V0ZSBvciBwcmludCB0aGUgZGF0YSAuLi4gKi8NCi0J CQlpZiAocHNldC5nc2V0X3ByZWZpeCkNCi0JCQkJc3VjY2VzcyA9IFN0b3Jl UXVlcnlUdXBsZShyZXN1bHRzKTsNCi0JCQllbHNlIGlmIChwc2V0LmdleGVj X2ZsYWcpDQotCQkJCXN1Y2Nlc3MgPSBFeGVjUXVlcnlUdXBsZXMocmVzdWx0 cyk7DQotCQkJZWxzZSBpZiAocHNldC5jcm9zc3RhYl9mbGFnKQ0KLQkJCQlz dWNjZXNzID0gUHJpbnRSZXN1bHRzSW5Dcm9zc3RhYihyZXN1bHRzKTsNCisJ CQlpZiAobGFzdCAmJiBwc2V0LmdzZXRfcHJlZml4KQ0KKwkJCQlzdWNjZXNz ID0gU3RvcmVRdWVyeVR1cGxlKHJlc3VsdCk7DQorCQkJZWxzZSBpZiAobGFz dCAmJiBwc2V0LmdleGVjX2ZsYWcpDQorCQkJCXN1Y2Nlc3MgPSBFeGVjUXVl cnlUdXBsZXMocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0ICYmIHBzZXQu Y3Jvc3N0YWJfZmxhZykNCisJCQkJc3VjY2VzcyA9IFByaW50UmVzdWx0c0lu Q3Jvc3N0YWIocmVzdWx0KTsNCiAJCQllbHNlDQotCQkJCXN1Y2Nlc3MgPSBQ cmludFF1ZXJ5VHVwbGVzKHJlc3VsdHMpOw0KKwkJCQlzdWNjZXNzID0gUHJp bnRRdWVyeVR1cGxlcyhyZXN1bHQpOw0KKw0KIAkJCS8qIGlmIGl0J3MgSU5T RVJUL1VQREFURS9ERUxFVEUgUkVUVVJOSU5HLCBhbHNvIHByaW50IHN0YXR1 cyAqLw0KLQkJCWNtZHN0YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdHMpOw0K KwkJCWNtZHN0YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdCk7DQogCQkJaWYg KHN0cm5jbXAoY21kc3RhdHVzLCAiSU5TRVJUIiwgNikgPT0gMCB8fA0KIAkJ CQlzdHJuY21wKGNtZHN0YXR1cywgIlVQREFURSIsIDYpID09IDAgfHwNCiAJ CQkJc3RybmNtcChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9PSAwKQ0KLQkJ CQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMpOw0KKwkJCQlQcmludFF1ZXJ5 U3RhdHVzKHJlc3VsdCk7DQorDQogCQkJYnJlYWs7DQogDQogCQljYXNlIFBH UkVTX0NPTU1BTkRfT0s6DQotCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHRz KTsNCisJCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdCk7DQogCQkJc3VjY2Vz cyA9IHRydWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTI2NSw3ICsxMTgzLDcg QEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogDQog CQljYXNlIFBHUkVTX0NPUFlfT1VUOg0KIAkJY2FzZSBQR1JFU19DT1BZX0lO Og0KLQkJCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJCS8qIG5vdGhp bmcgdG8gZG8gaGVyZTogYWxyZWFkeSBwcm9jZXNzZWQgKi8NCiAJCQlzdWNj ZXNzID0gdHJ1ZTsNCiAJCQlicmVhazsNCiANCkBAIC0xMjc4LDcgKzExOTYs NyBAQCBQcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiAJ CWRlZmF1bHQ6DQogCQkJc3VjY2VzcyA9IGZhbHNlOw0KIAkJCXBnX2xvZ19l cnJvcigidW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1czogJWQiLA0KLQkJCQkJ CSBQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSk7DQorCQkJCQkJIFBRcmVzdWx0 U3RhdHVzKHJlc3VsdCkpOw0KIAkJCWJyZWFrOw0KIAl9DQogDQpAQCAtMTI4 Nyw2ICsxMjA1LDE1MyBAQCBQcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAq cmVzdWx0cykNCiAJcmV0dXJuIHN1Y2Nlc3M7DQogfQ0KIA0KKy8qDQorICog RGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyB0byByZWNvcmQgbm90aWNl cyB3aGlsZSB0aGV5IGFyZQ0KKyAqIGVtaXR0ZWQsIHNvIHRoYXQgdGhleSBj YW4gYmUgc2hvd24gbGF0ZXIuDQorICoNCisgKiBXZSBuZWVkIHRvIGtub3cg d2hpY2ggcmVzdWx0IGlzIGxhc3QsIHdoaWNoIHJlcXVpcmVzIHRvIGV4dHJh Y3QNCisgKiBvbmUgcmVzdWx0IGluIGFkdmFuY2UsIGhlbmNlIHR3byBidWZm ZXJzIGFyZSBuZWVkZWQuDQorICovDQordHlwZWRlZiBzdHJ1Y3Qgew0KKwli b29sCQkJaW5fZmxpcDsNCisJUFFFeHBCdWZmZXJEYXRhCWZsaXA7DQorCVBR RXhwQnVmZmVyRGF0YQlmbG9wOw0KK30gdF9ub3RpY2VfbWVzc2FnZXM7DQor DQorc3RhdGljIHZvaWQNCitBcHBlbmROb3RpY2VNZXNzYWdlKHZvaWQgKmFy ZywgY29uc3QgY2hhciAqbXNnKQ0KK3sNCisJdF9ub3RpY2VfbWVzc2FnZXMg Km5vdGVzID0gKHRfbm90aWNlX21lc3NhZ2VzKikgYXJnOw0KKwlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihub3Rlcy0+aW5fZmxpcCA/ICZub3Rlcy0+ZmxpcCA6 ICZub3Rlcy0+ZmxvcCwgbXNnKTsNCit9DQorDQorc3RhdGljIHZvaWQNCitT aG93Tm90aWNlTWVzc2FnZSh0X25vdGljZV9tZXNzYWdlcyAqbm90ZXMpDQor ew0KKwlQUUV4cEJ1ZmZlckRhdGEJKmN1cnJlbnQgPSBub3Rlcy0+aW5fZmxp cCA/ICZub3Rlcy0+ZmxpcCA6ICZub3Rlcy0+ZmxvcDsNCisJaWYgKGN1cnJl bnQtPmRhdGEgIT0gTlVMTCAmJiAqY3VycmVudC0+ZGF0YSAhPSAnXDAnKQ0K KwkJcGdfbG9nX2luZm8oIiVzIiwgY3VycmVudC0+ZGF0YSk7DQorCXJlc2V0 UFFFeHBCdWZmZXIoY3VycmVudCk7DQorfQ0KKw0KKy8qDQorICogU2VuZFF1 ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHM6IHV0aWxpdHkgZnVuY3Rpb24gZm9yIHVz ZSBieSBTZW5kUXVlcnkoKSBvbmx5DQorICoNCisgKiBTZW5kcyBxdWVyeSBh bmQgY3ljbGVzIHRocm91Z2ggUEdyZXN1bHQgb2JqZWN0cy4NCisgKg0KKyAq IFdoZW4gb3VyIGNvbW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBhIENPUFkgRlJP TSBTVERJTiBvciBDT1BZIFRPIFNURE9VVCwNCisgKiB0aGUgUEdyZXN1bHQg YXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbW1hbmRzIG11c3QgYmUgcHJvY2Vz c2VkLiAgSW4gdGhhdA0KKyAqIGV2ZW50LCB3ZSdsbCBtYXJzaGFsIGRhdGEg Zm9yIHRoZSBDT1BZLg0KKyAqDQorICogUmV0dXJucyB0cnVlIG9uIGNvbXBs ZXRlIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4gIFBvc3NpYmxlIGZhaWx1 cmUgbW9kZXMNCisgKiBpbmNsdWRlIHB1cmVseSBjbGllbnQtc2lkZSBwcm9i bGVtczsgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBmb3IgdGhlDQor ICogc2VydmVyLXNpZGUgb3Bpbmlvbi4NCisgKg0KKyAqIE5vdGUgdGhhdCBv biBhIGNvbWJpbmVkIHF1ZXJ5LCBmYWlsdXJlIGRvZXMgbm90IG1lYW4gdGhh dCBub3RoaW5nIHdhcw0KKyAqIGNvbW1pdHRlZC4NCisgKi8NCitzdGF0aWMg Ym9vbA0KK1NlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKnBlbGFwc2VkX21zZWMpDQorew0KKwlib29sCQkJ CXN1Y2Nlc3M7DQorCWluc3RyX3RpbWUJCQliZWZvcmU7DQorCVBHcmVzdWx0 CQkgICAqcmVzdWx0Ow0KKwl0X25vdGljZV9tZXNzYWdlcwlub3RlczsNCisN CisJaWYgKHBzZXQudGltaW5nKQ0KKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VChiZWZvcmUpOw0KKw0KKwlzdWNjZXNzID0gUFFzZW5kUXVlcnkocHNldC5k YiwgcXVlcnkpOw0KKwlSZXNldENhbmNlbENvbm4oKTsNCisNCisJaWYgKCFz dWNjZXNzKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwkvKiBpbnRlcmNlcHQg bm90aWNlcyAqLw0KKwlub3Rlcy5pbl9mbGlwID0gdHJ1ZTsNCisJaW5pdFBR RXhwQnVmZmVyKCZub3Rlcy5mbGlwKTsNCisJaW5pdFBRRXhwQnVmZmVyKCZu b3Rlcy5mbG9wKTsNCisJUFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5kYiwg QXBwZW5kTm90aWNlTWVzc2FnZSwgJm5vdGVzKTsNCisNCisJLyogZmlyc3Qg cmVzdWx0ICovDQorCXJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOw0K Kw0KKwl3aGlsZSAocmVzdWx0ICE9IE5VTEwpDQorCXsNCisJCUV4ZWNTdGF0 dXNUeXBlIHJlc3VsdF9zdGF0dXM7DQorCQlQR3Jlc3VsdCAgICpuZXh0X3Jl c3VsdDsNCisJCWJvb2wJCWxhc3Q7DQorDQorCQlpZiAoIUFjY2VwdFJlc3Vs dChyZXN1bHQsIGZhbHNlKSkNCisJCXsNCisJCQkvKiBzb21lIGVycm9yIG9j Y3VyZWQsIHJlY29yZCB0aGF0ICovDQorCQkJU2hvd05vdGljZU1lc3NhZ2Uo Jm5vdGVzKTsNCisJCQlTaG93RXJyb3JNZXNzYWdlKHJlc3VsdCk7DQorCQkJ U2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgZmFsc2UpOw0KKwkJCUNsZWFy T3JTYXZlUmVzdWx0KHJlc3VsdCk7DQorCQkJc3VjY2VzcyA9IGZhbHNlOw0K Kw0KKwkJCS8qIGFuZCBzd2l0Y2ggdG8gbmV4dCByZXN1bHQgKi8NCisJCQly ZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCisJCQljb250aW51ZTsN CisJCX0NCisNCisJCS8qIG11c3QgaGFuZGxlIENPUFkgYmVmb3JlIGNoYW5n aW5nIHRoZSBjdXJyZW50IHJlc3VsdCAqLw0KKwkJcmVzdWx0X3N0YXR1cyA9 IFBRcmVzdWx0U3RhdHVzKHJlc3VsdCk7DQorCQlpZiAocmVzdWx0X3N0YXR1 cyA9PSBQR1JFU19DT1BZX0lOIHx8DQorCQkJcmVzdWx0X3N0YXR1cyA9PSBQ R1JFU19DT1BZX09VVCkNCisJCXsNCisJCQlTaG93Tm90aWNlTWVzc2FnZSgm bm90ZXMpOw0KKwkJCUhhbmRsZUNvcHlSZXN1bHQoJnJlc3VsdCk7DQorCQl9 DQorDQorCQkvKg0KKwkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4g IEluIHRoZSB0eXBpY2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KKwkJ ICogc3RyaW5nLCBpdCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3 ZSdsbCBoYXZlIG90aGVyIHJlc3VsdHMNCisJCSAqIHRvIHByb2Nlc3MgdGhh dCBtYXkgaW5jbHVkZSBvdGhlciBDT1BZcy4NCisJCSAqLw0KKwkJbm90ZXMu aW5fZmxpcCA9ICFub3Rlcy5pbl9mbGlwOw0KKwkJbmV4dF9yZXN1bHQgPSBQ UWdldFJlc3VsdChwc2V0LmRiKTsNCisJCW5vdGVzLmluX2ZsaXAgPSAhbm90 ZXMuaW5fZmxpcDsNCisJCWxhc3QgPSAobmV4dF9yZXN1bHQgPT0gTlVMTCk7 DQorDQorCQkvKiB0aW1pbmcgbWVhc3VyZSBiZWZvcmUgcHJpbnRpbmcgdGhl IGxhc3QgcmVzdWx0ICovDQorCQlpZiAobGFzdCAmJiBwc2V0LnRpbWluZykN CisJCXsNCisJCQlpbnN0cl90aW1lCW5vdzsNCisJCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKG5vdyk7DQorCQkJSU5TVFJfVElNRV9TVUJUUkFDVChub3cs IGJlZm9yZSk7DQorCQkJKnBlbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dF VF9NSUxMSVNFQyhub3cpOw0KKwkJfQ0KKw0KKwkJLyogbm90aWNlcyBhbHJl YWR5IHNob3cgYWJvdmUgZm9yIGNvcHkgKi8NCisJCVNob3dOb3RpY2VNZXNz YWdlKCZub3Rlcyk7DQorDQorCQkvKiB0aGlzIG1heSBvciBtYXkgbm90IHBy aW50IHNvbWV0aGluZyBkZXBlbmRpbmcgb24gc2V0dGluZ3MgKi8NCisJCWlm IChyZXN1bHQgIT0gTlVMTCkNCisJCQlzdWNjZXNzICY9IEhhbmRsZVF1ZXJ5 UmVzdWx0KHJlc3VsdCwgbGFzdCk7DQorDQorCQkvKiBzZXQgdmFyaWFibGVz IG9uIGxhc3QgcmVzdWx0IGlmIGFsbCB3ZW50IHdlbGwgKi8NCisJCWlmIChs YXN0ICYmIHN1Y2Nlc3MpDQorCQkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3Vs dCwgdHJ1ZSk7DQorDQorCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0K KwkJbm90ZXMuaW5fZmxpcCA9ICFub3Rlcy5pbl9mbGlwOw0KKwkJcmVzdWx0 ID0gbmV4dF9yZXN1bHQ7DQorCX0NCisNCisJLyogcmVzZXQgbm90aWNlIGhv b2sgKi8NCisJUFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5kYiwgTm90aWNl UHJvY2Vzc29yLCBOVUxMKTsNCisJdGVybVBRRXhwQnVmZmVyKCZub3Rlcy5m bGlwKTsNCisJdGVybVBRRXhwQnVmZmVyKCZub3Rlcy5mbG9wKTsNCisNCisJ LyogbWF5IG5lZWQgdGhpcyB0byByZWNvdmVyIGZyb20gY29ubiBsb3NzIGR1 cmluZyBDT1BZICovDQorCWlmICghQ2hlY2tDb25uZWN0aW9uKCkpDQorCQly ZXR1cm4gZmFsc2U7DQorDQorCXJldHVybiBzdWNjZXNzOw0KK30NCisNCiAN CiAvKg0KICAqIFNlbmRRdWVyeTogc2VuZCB0aGUgcXVlcnkgc3RyaW5nIHRv IHRoZSBiYWNrZW5kDQpAQCAtMTMwMyw3ICsxMzY4LDcgQEAgUHJpbnRRdWVy eVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogYm9vbA0KIFNlbmRRdWVy eShjb25zdCBjaGFyICpxdWVyeSkNCiB7DQotCVBHcmVzdWx0ICAgKnJlc3Vs dHM7DQorCVBHcmVzdWx0ICAgKnJlc3VsdHMgPSBOVUxMOw0KIAlQR1RyYW5z YWN0aW9uU3RhdHVzVHlwZSB0cmFuc2FjdGlvbl9zdGF0dXM7DQogCWRvdWJs ZQkJZWxhcHNlZF9tc2VjID0gMDsNCiAJYm9vbAkJT0sgPSBmYWxzZTsNCkBA IC0xNDA4LDI4ICsxNDczLDcgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1 ZXJ5KQ0KIAkJCSBwc2V0LmNyb3NzdGFiX2ZsYWcgfHwgIWlzX3NlbGVjdF9j b21tYW5kKHF1ZXJ5KSkNCiAJew0KIAkJLyogRGVmYXVsdCBmZXRjaC1pdC1h bGwtYW5kLXByaW50IG1vZGUgKi8NCi0JCWluc3RyX3RpbWUJYmVmb3JlLA0K LQkJCQkJYWZ0ZXI7DQotDQotCQlpZiAocHNldC50aW1pbmcpDQotCQkJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVChiZWZvcmUpOw0KLQ0KLQkJcmVzdWx0cyA9 IFBRZXhlYyhwc2V0LmRiLCBxdWVyeSk7DQotDQotCQkvKiB0aGVzZSBvcGVy YXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgdGltaW5nIHJlc3VsdDogKi8N Ci0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KLQkJT0sgPSBQcm9jZXNzUmVzdWx0 KCZyZXN1bHRzKTsNCi0NCi0JCWlmIChwc2V0LnRpbWluZykNCi0JCXsNCi0J CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0JCQlJTlNUUl9U SU1FX1NVQlRSQUNUKGFmdGVyLCBiZWZvcmUpOw0KLQkJCWVsYXBzZWRfbXNl YyA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGFmdGVyKTsNCi0JCX0NCi0N Ci0JCS8qIGJ1dCBwcmludGluZyByZXN1bHRzIGlzbid0OiAqLw0KLQkJaWYg KE9LICYmIHJlc3VsdHMpDQotCQkJT0sgPSBQcmludFF1ZXJ5UmVzdWx0cyhy ZXN1bHRzKTsNCisJCU9LID0gU2VuZFF1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMo cXVlcnksICZlbGFwc2VkX21zZWMpOw0KIAl9DQogCWVsc2UNCiAJew0KQEAg LTE2MDYsNyArMTY1MCw3IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hhciAq cXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAlQUWNsZWFyKHJlc3Vs dHMpOw0KIA0KIAlyZXN1bHRzID0gUFFkZXNjcmliZVByZXBhcmVkKHBzZXQu ZGIsICIiKTsNCi0JT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCShQUXJl c3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJ aWYgKE9LICYmIHJlc3VsdHMpDQogCXsNCkBAIC0xNjU0LDcgKzE2OTgsNyBA QCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVs YXBzZWRfbXNlYykNCiAJCQlQUWNsZWFyKHJlc3VsdHMpOw0KIA0KIAkJCXJl c3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQkJCU9LID0g QWNjZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0gQWNjZXB0UmVzdWx0 KHJlc3VsdHMsIHRydWUpOw0KIA0KIAkJCWlmIChwc2V0LnRpbWluZykNCiAJ CQl7DQpAQCAtMTY2NCw3ICsxNzA4LDcgQEAgRGVzY3JpYmVRdWVyeShjb25z dCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJfQ0K IA0KIAkJCWlmIChPSyAmJiByZXN1bHRzKQ0KLQkJCQlPSyA9IFByaW50UXVl cnlSZXN1bHRzKHJlc3VsdHMpOw0KKwkJCQlPSyA9IEhhbmRsZVF1ZXJ5UmVz dWx0KHJlc3VsdHMsIHRydWUpOw0KIA0KIAkJCXRlcm1QUUV4cEJ1ZmZlcigm YnVmKTsNCiAJCX0NCkBAIC0xNzIzLDcgKzE3NjcsNyBAQCBFeGVjUXVlcnlV c2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2Vk X21zZWMpDQogCWlmIChQUXRyYW5zYWN0aW9uU3RhdHVzKHBzZXQuZGIpID09 IFBRVFJBTlNfSURMRSkNCiAJew0KIAkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0 LmRiLCAiQkVHSU4iKTsNCi0JCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMp ICYmDQorCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0K IAkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5E X09LKTsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAkJaWYg KCFPSykNCkBAIC0xNzM3LDcgKzE3ODEsNyBAQCBFeGVjUXVlcnlVc2luZ0N1 cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMp DQogCQkJCQkgIHF1ZXJ5KTsNCiANCiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0 LmRiLCBidWYuZGF0YSk7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMp ICYmDQorCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQog CQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9P Syk7DQogCWlmICghT0spDQogCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0 cywgT0spOw0KQEAgLTE4MTQsNyArMTg1OCw3IEBAIEV4ZWNRdWVyeVVzaW5n Q3Vyc29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNl YykNCiAJCQkJaXNfcGFnZXIgPSBmYWxzZTsNCiAJCQl9DQogDQotCQkJT0sg PSBBY2NlcHRSZXN1bHQocmVzdWx0cyk7DQorCQkJT0sgPSBBY2NlcHRSZXN1 bHQocmVzdWx0cywgdHJ1ZSk7DQogCQkJQXNzZXJ0KCFPSyk7DQogCQkJU2V0 UmVzdWx0VmFyaWFibGVzKHJlc3VsdHMsIE9LKTsNCiAJCQlDbGVhck9yU2F2 ZVJlc3VsdChyZXN1bHRzKTsNCkBAIC0xOTIzLDcgKzE5NjcsNyBAQCBjbGVh bnVwOg0KIAlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJDTE9TRSBfcHNx bF9jdXJzb3IiKTsNCiAJaWYgKE9LKQ0KIAl7DQotCQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0 cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0g UEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1 bHRzKTsNCiAJfQ0KQEAgLTE5MzMsNyArMTk3Nyw3IEBAIGNsZWFudXA6DQog CWlmIChzdGFydGVkX3R4bikNCiAJew0KIAkJcmVzdWx0cyA9IFBRZXhlYyhw c2V0LmRiLCBPSyA/ICJDT01NSVQiIDogIlJPTExCQUNLIik7DQotCQlPSyAm PSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LICY9IEFjY2VwdFJl c3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQUXJlc3VsdFN0YXR1cyhy ZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJCUNsZWFyT3JTYXZl UmVzdWx0KHJlc3VsdHMpOw0KIAl9DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NvcHkyLm91dA0KaW5kZXggYzUzZWQzZWJmNS4uOWM4Yzgz NjFmOCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y29weTIub3V0DQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv cHkyLm91dA0KQEAgLTQ3NSwxMCArNDc1LDEwIEBAIGNvcHkgY2hlY2tfY29u X3RibCBmcm9tIHN0ZGluOw0KIE5PVElDRTogIGlucHV0ID0geyJmMSI6MX0N CiBOT1RJQ0U6ICBpbnB1dCA9IHsiZjEiOm51bGx9DQogY29weSBjaGVja19j b25fdGJsIGZyb20gc3RkaW47DQotTk9USUNFOiAgaW5wdXQgPSB7ImYxIjow fQ0KIEVSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gImNoZWNrX2Nvbl90 YmwiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImNoZWNrX2Nvbl90Ymxf Y2hlY2siDQogREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDApLg0K IENPTlRFWFQ6ICBDT1BZIGNoZWNrX2Nvbl90YmwsIGxpbmUgMTogIjAiDQor Tk9USUNFOiAgaW5wdXQgPSB7ImYxIjowfQ0KIHNlbGVjdCAqIGZyb20gY2hl Y2tfY29uX3RibDsNCiAgZjEgDQogLS0tLQ0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weWRtbC5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0DQppbmRleCAxYjUzMzk2MmM2 Li5iNWEyMjU2MjhmIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5ZG1sLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5ZG1sLm91dA0KQEAgLTg0LDEwICs4NCwxMCBAQCBkcm9w IHJ1bGUgcXFxIG9uIGNvcHlkbWxfdGVzdDsNCiBjcmVhdGUgZnVuY3Rpb24g cXFxX3RyaWcoKSByZXR1cm5zIHRyaWdnZXIgYXMgJCQNCiBiZWdpbg0KIGlm IHRnX29wIGluICgnSU5TRVJUJywgJ1VQREFURScpIHRoZW4NCi0gICAgcmFp c2Ugbm90aWNlICclICUnLCB0Z19vcCwgbmV3LmlkOw0KKyAgICByYWlzZSBu b3RpY2UgJyUgJSAlJywgdGdfd2hlbiwgdGdfb3AsIG5ldy5pZDsNCiAgICAg cmV0dXJuIG5ldzsNCiBlbHNlDQotICAgIHJhaXNlIG5vdGljZSAnJSAlJywg dGdfb3AsIG9sZC5pZDsNCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHRn X3doZW4sIHRnX29wLCBvbGQuaWQ7DQogICAgIHJldHVybiBvbGQ7DQogZW5k IGlmOw0KIGVuZA0KQEAgLTk3LDE2ICs5NywxNiBAQCBjcmVhdGUgdHJpZ2dl ciBxcXFiZWYgYmVmb3JlIGluc2VydCBvciB1cGRhdGUgb3IgZGVsZXRlIG9u IGNvcHlkbWxfdGVzdA0KIGNyZWF0ZSB0cmlnZ2VyIHFxcWFmIGFmdGVyIGlu c2VydCBvciB1cGRhdGUgb3IgZGVsZXRlIG9uIGNvcHlkbWxfdGVzdA0KICAg ICBmb3IgZWFjaCByb3cgZXhlY3V0ZSBwcm9jZWR1cmUgcXFxX3RyaWcoKTsN CiBjb3B5IChpbnNlcnQgaW50byBjb3B5ZG1sX3Rlc3QgKHQpIHZhbHVlcyAo J2YnKSByZXR1cm5pbmcgaWQpIHRvIHN0ZG91dDsNCi1OT1RJQ0U6ICBJTlNF UlQgOA0KK05PVElDRTogIEJFRk9SRSBJTlNFUlQgOA0KIDgNCi1OT1RJQ0U6 ICBJTlNFUlQgOA0KK05PVElDRTogIEFGVEVSIElOU0VSVCA4DQogY29weSAo dXBkYXRlIGNvcHlkbWxfdGVzdCBzZXQgdCA9ICdnJyB3aGVyZSB0ID0gJ2Yn IHJldHVybmluZyBpZCkgdG8gc3Rkb3V0Ow0KLU5PVElDRTogIFVQREFURSA4 DQorTk9USUNFOiAgQkVGT1JFIFVQREFURSA4DQogOA0KLU5PVElDRTogIFVQ REFURSA4DQorTk9USUNFOiAgQUZURVIgVVBEQVRFIDgNCiBjb3B5IChkZWxl dGUgZnJvbSBjb3B5ZG1sX3Rlc3Qgd2hlcmUgdCA9ICdnJyByZXR1cm5pbmcg aWQpIHRvIHN0ZG91dDsNCi1OT1RJQ0U6ICBERUxFVEUgOA0KK05PVElDRTog IEJFRk9SRSBERUxFVEUgOA0KIDgNCi1OT1RJQ0U6ICBERUxFVEUgOA0KK05P VElDRTogIEFGVEVSIERFTEVURSA4DQogZHJvcCB0YWJsZSBjb3B5ZG1sX3Rl c3Q7DQogZHJvcCBmdW5jdGlvbiBxcXFfdHJpZygpOw0KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQppbmRl eCA3Mjg2NWZlMWViLi4zOWFiOGZjODdhIDEwMDY0NA0KLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91dA0KKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91dA0KQEAgLTEy Niw3ICsxMjYsNyBAQCBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgc2Vs ZWN0IDEvMDsJLS0gcm93LCB0aGVuIGVycm9yDQogRVJST1I6ICBkaXZpc2lv biBieSB6ZXJvDQogc2VsZWN0IDEvMFw7IGNvcHkgKHNlbGVjdCAxKSB0byBz dGRvdXQ7IC0tIGVycm9yIG9ubHkNCiBFUlJPUjogIGRpdmlzaW9uIGJ5IHpl cm8NCi1jb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0 IDIpIHRvIHN0ZG91dFw7IHNlbGVjdCAwXDsgc2VsZWN0IDM7IC0tIDEgMiAz DQorY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAy KSB0byBzdGRvdXRcOyBzZWxlY3QgM1w7IHNlbGVjdCA0OyAtLSAxIDIgMyA0 DQogMQ0KIDINCiAgP2NvbHVtbj8gDQpAQCAtMTM0LDggKzEzNCwxOCBAQCBj b3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIpIHRv IHN0ZG91dFw7IHNlbGVjdCAwXDsgc2VsZWN0IDM7IC0tDQogICAgICAgICAz DQogKDEgcm93KQ0KIA0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAg ICAgICA0DQorKDEgcm93KQ0KKw0KIGNyZWF0ZSB0YWJsZSB0ZXN0MyAoYyBp bnQpOw0KIHNlbGVjdCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29w eSB0ZXN0MyBmcm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0tIDENCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMA0KKygxIHJvdykNCisNCiAg P2NvbHVtbj8gDQogLS0tLS0tLS0tLQ0KICAgICAgICAgMQ0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0DQppbmRleCBlZjUzNGEz NmEwLi5hOTM3MzYxODdhIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dA0KQEAgLTQ3NjAsMyArNDc2MCw4NyBAQCBPd25p bmcgdGFibGU6ICJwZ19jYXRhbG9nLnBnX3N0YXRpc3RpYyINCiBJbmRleGVz Og0KICAgICAicGdfdG9hc3RfMjYxOV9pbmRleCIgUFJJTUFSWSBLRVksIGJ0 cmVlIChjaHVua19pZCwgY2h1bmtfc2VxKQ0KIA0KKy0tDQorLS0gY29tYmlu ZWQgcXVlcmllcw0KKy0tDQorXGVjaG8gJyMgY29tYmluZWQgcXVlcmllcyB0 ZXN0cycNCisjIGNvbWJpbmVkIHF1ZXJpZXMgdGVzdHMNCitDUkVBVEUgRlVO Q1RJT04gd2Fybihtc2cgVEVYVCkgUkVUVVJOUyBCT09MRUFOIEFTICQkDQor ICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBU UlVFIDsgRU5EDQorJCQgTEFOR1VBR0UgcGxwZ3NxbDsNCistLSBzaG93IGJv dGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7 IFNFTEVDVCAyIEFTIHR3byA7DQorIG9uZSANCistLS0tLQ0KKyAgIDENCiso MSByb3cpDQorDQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisg d2FybiANCistLS0tLS0NCisgdA0KKygxIHJvdykNCisNCisgdHdvIA0KKy0t LS0tDQorICAgMg0KKygxIHJvdykNCisNCistLSBcZ3NldCBhcHBsaWVzIHRv IGxhc3QgcXVlcnkgb25seQ0KK1NFTEVDVCAzIEFTIHRocmVlIFw7IFNFTEVD VCB3YXJuKCczLjUnKSBcOyBTRUxFQ1QgNCBBUyBmb3VyIFxnc2V0DQorIHRo cmVlIA0KKy0tLS0tLS0NCisgICAgIDMNCisoMSByb3cpDQorDQorTk9USUNF OiAgd2FybiAzLjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fy bih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisgd2FybiANCistLS0tLS0NCisg dA0KKygxIHJvdykNCisNCitcZWNobyA6dGhyZWUgOmZvdXINCis6dGhyZWUg NA0KKy0tIHN5bnRheCBlcnJvciBzdG9wcyBhbGwgcHJvY2Vzc2luZw0KK1NF TEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsgU0VMRUNUIHdhcm4oJzYuNScpIFw7 IFNFTEVDVCA3IDsNCitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICI7Ig0KK0xJTkUgMTogU0VMRUNUIDUgOyBTRUxFQ1QgNiArIDsgU0VMRUNU IHdhcm4oJzYuNScpIDsgU0VMRUNUIDcgOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4NCistLSB3aXRoIGFib3J0ZWQgdHJhbnNhY3Rpb24s IHN0b3Agb24gZmlyc3QgZXJyb3INCitCRUdJTiBcOyBTRUxFQ1QgOCBBUyBl aWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5pbmUgXDsgUk9MTEJBQ0sgXDsgU0VM RUNUIDEwIEFTIHRlbiA7DQorIGVpZ2h0IA0KKy0tLS0tLS0NCisgICAgIDgN CisoMSByb3cpDQorDQorRVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvDQorLS0g Y2xvc2UgcHJldmlvdXNseSBhYm9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJB Q0s7DQorLS0gbWlzYyBTUUwgY29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBv dXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIHRodXMgaXMgbm90IHNob3duIGlu IGV4cGVjdGVkIHJlc3VsdHMpDQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBc Ow0KK0NSRUFURSBUQUJMRSBwc3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5T RVJUIElOVE8gcHNxbF9jb21pY3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9i YmVzJykgXDsNCitDT1BZIHBzcWxfY29taWNzIEZST00gU1RESU4gXDsNCitV UERBVEUgcHNxbF9jb21pY3MgU0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0g J2hvYmJlcycgXDsNCitERUxFVEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBz ID0gJ01vZScgXDsNCitDT1BZIHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0K K1RSVU5DQVRFIHBzcWxfY29taWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2Nv bWljcyBcOw0KK1NFTEVDVCAnb2snIEFTICJkb25lIiA7DQorIGJlZ2luIA0K Ky0tLS0tLS0NCisgb2sNCisoMSByb3cpDQorDQorQ2FsdmluDQorU3VzaWUN CitIb2JiZXMNCisgZG9uZSANCistLS0tLS0NCisgb2sNCisoMSByb3cpDQor DQorRFJPUCBGVU5DVElPTiB3YXJuKFRFWFQpOw0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25zLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25zLm91dA0KaW5k ZXggMWIzMTZjYzliOC4uM2U2MmY4MzkxOCAxMDA2NDQNCi0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25zLm91dA0KKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90cmFuc2FjdGlvbnMub3V0DQpA QCAtODU1LDExICs4NTUsMjEgQEAgRFJPUCBUQUJMRSBhYmM7DQogLS0gdGVz dHMgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHBzcWwgd2lsbCBub3QgYnJlYWsg U1FMIGNvbW1hbmRzIGFwYXJ0IGF0IGENCiAtLSBiYWNrc2xhc2gtcXVvdGVk IHNlbWljb2xvbiwgYnV0IHdpbGwgc2VuZCB0aGVtIGFzIG9uZSBRdWVyeS4N CiBjcmVhdGUgdGVtcCB0YWJsZSBpX3RhYmxlIChmMSBpbnQpOw0KLS0tIHBz cWwgd2lsbCBzaG93IG9ubHkgdGhlIGxhc3QgcmVzdWx0IGluIGEgbXVsdGkt c3RhdGVtZW50IFF1ZXJ5DQotU0VMRUNUIDFcOyBTRUxFQ1QgMlw7IFNFTEVD VCAzOw0KLSA/Y29sdW1uPyANCi0tLS0tLS0tLS0tDQotICAgICAgICAzDQor LS0gcHNxbCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0aS1zdGF0 ZW1lbnQgUXVlcnkNCitTRUxFQ1QgMSBBUyBvbmVcOyBTRUxFQ1QgMiBBUyB0 d29cOyBTRUxFQ1QgMyBBUyB0aHJlZTsNCisgb25lIA0KKy0tLS0tDQorICAg MQ0KKygxIHJvdykNCisNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJv dykNCisNCisgdGhyZWUgDQorLS0tLS0tLQ0KKyAgICAgMw0KICgxIHJvdykN CiANCiAtLSB0aGlzIGltcGxpY2l0bHkgY29tbWl0czoNCkBAIC04NzEsNiAr ODgxLDEyIEBAIGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDEpXDsgc2Vs ZWN0ICogZnJvbSBpX3RhYmxlOw0KIA0KIC0tIDEvMCBlcnJvciB3aWxsIGNh dXNlIHJvbGxpbmcgYmFjayB0aGUgd2hvbGUgaW1wbGljaXQgdHJhbnNhY3Rp b24NCiBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcygyKVw7IHNlbGVjdCAq IGZyb20gaV90YWJsZVw7IHNlbGVjdCAxLzA7DQorIGYxIA0KKy0tLS0NCisg IDENCisgIDINCisoMiByb3dzKQ0KKw0KIEVSUk9SOiAgZGl2aXNpb24gYnkg emVybw0KIHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiAgZjEgDQpAQCAtODg5 LDkgKzkwNSwxOSBAQCByb2xsYmFjazsgIC0tIHdlIGFyZSBub3QgaW4gYSB0 cmFuc2FjdGlvbiBhdCB0aGlzIHBvaW50DQogV0FSTklORzogIHRoZXJlIGlz IG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQogLS0gYmVnaW4gY29udmVy dHMgaW1wbGljaXQgdHJhbnNhY3Rpb24gaW50byBhIHJlZ3VsYXIgb25lIHRo YXQNCiAtLSBjYW4gZXh0ZW5kIHBhc3QgdGhlIGVuZCBvZiB0aGUgUXVlcnkN Ci1zZWxlY3QgMVw7IGJlZ2luXDsgaW5zZXJ0IGludG8gaV90YWJsZSB2YWx1 ZXMoNSk7DQorc2VsZWN0IDEgQVMgb25lXDsgYmVnaW5cOyBpbnNlcnQgaW50 byBpX3RhYmxlIHZhbHVlcyg1KTsNCisgb25lIA0KKy0tLS0tDQorICAgMQ0K KygxIHJvdykNCisNCiBjb21taXQ7DQotc2VsZWN0IDFcOyBiZWdpblw7IGlu c2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDYpOw0KK3NlbGVjdCAxIEFTIG9u ZVw7IGJlZ2luXDsgaW5zZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoNik7DQor IG9uZSANCistLS0tLQ0KKyAgIDENCisoMSByb3cpDQorDQogcm9sbGJhY2s7 DQogLS0gY29tbWl0IGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlIGNv bW1pdHMgYnV0IGlzc3VlcyBhIHdhcm5pbmcuDQogaW5zZXJ0IGludG8gaV90 YWJsZSB2YWx1ZXMoNylcOyBjb21taXRcOyBpbnNlcnQgaW50byBpX3RhYmxl IHZhbHVlcyg4KVw7IHNlbGVjdCAxLzA7DQpAQCAtOTE3LDIzICs5NDMsNTMg QEAgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0KIHJvbGxiYWNrOyAgLS0gd2Ug YXJlIG5vdCBpbiBhIHRyYW5zYWN0aW9uIGF0IHRoaXMgcG9pbnQNCiBXQVJO SU5HOiAgdGhlcmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAt LSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jayBpcyBzdGlsbCBhIHRyYW5z YWN0aW9uIGJsb2NrLCBmb3IgZS5nLiBWQUNVVU0NCi1TRUxFQ1QgMVw7IFZB Q1VVTTsNCitTRUxFQ1QgMSBBUyBvbmVcOyBWQUNVVU07DQorIG9uZSANCist LS0tLQ0KKyAgIDENCisoMSByb3cpDQorDQogRVJST1I6ICBWQUNVVU0gY2Fu bm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jaw0KLVNFTEVDVCAx XDsgQ09NTUlUXDsgVkFDVVVNOw0KK1NFTEVDVCAyIEFTIHR3b1w7IENPTU1J VFw7IFZBQ1VVTTsNCiBXQVJOSU5HOiAgdGhlcmUgaXMgbm8gdHJhbnNhY3Rp b24gaW4gcHJvZ3Jlc3MNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJv dykNCisNCiBFUlJPUjogIFZBQ1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRy YW5zYWN0aW9uIGJsb2NrDQogLS0gd2UgZGlzYWxsb3cgc2F2ZXBvaW50LXJl bGF0ZWQgY29tbWFuZHMgaW4gaW1wbGljaXQtdHJhbnNhY3Rpb24gc3RhdGUN Ci1TRUxFQ1QgMVw7IFNBVkVQT0lOVCBzcDsNCitTRUxFQ1QgMyBBUyB0aHJl ZVw7IFNBVkVQT0lOVCBzcDsNCisgdGhyZWUgDQorLS0tLS0tLQ0KKyAgICAg Mw0KKygxIHJvdykNCisNCiBFUlJPUjogIFNBVkVQT0lOVCBjYW4gb25seSBi ZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KLVNFTEVDVCAxXDsgQ09N TUlUXDsgU0FWRVBPSU5UIHNwOw0KK1NFTEVDVCA0IEFTIGZvdXJcOyBDT01N SVRcOyBTQVZFUE9JTlQgc3A7DQogV0FSTklORzogIHRoZXJlIGlzIG5vIHRy YW5zYWN0aW9uIGluIHByb2dyZXNzDQorIGZvdXIgDQorLS0tLS0tDQorICAg IDQNCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZFUE9JTlQgY2FuIG9ubHkg YmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCi1ST0xMQkFDSyBUTyBT QVZFUE9JTlQgc3BcOyBTRUxFQ1QgMjsNCitST0xMQkFDSyBUTyBTQVZFUE9J TlQgc3BcOyBTRUxFQ1QgNSBBUyBmaXZlOw0KIEVSUk9SOiAgUk9MTEJBQ0sg VE8gU0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24g YmxvY2tzDQotU0VMRUNUIDJcOyBSRUxFQVNFIFNBVkVQT0lOVCBzcFw7IFNF TEVDVCAzOw0KK1NFTEVDVCA2IEFTIHNpeFw7IFJFTEVBU0UgU0FWRVBPSU5U IHNwXDsgU0VMRUNUIDcgQVMgc2V2ZW47DQorIHNpeCANCistLS0tLQ0KKyAg IDYNCisoMSByb3cpDQorDQogRVJST1I6ICBSRUxFQVNFIFNBVkVQT0lOVCBj YW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KIC0tIGJ1 dCB0aGlzIGlzIE9LLCBiZWNhdXNlIHRoZSBCRUdJTiBjb252ZXJ0cyBpdCB0 byBhIHJlZ3VsYXIgeGFjdA0KLVNFTEVDVCAxXDsgQkVHSU5cOyBTQVZFUE9J TlQgc3BcOyBST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BcOyBDT01NSVQ7DQor U0VMRUNUIDhcOyBCRUdJTlw7IFNBVkVQT0lOVCBzcFw7IFJPTExCQUNLIFRP IFNBVkVQT0lOVCBzcFw7IENPTU1JVDsNCisgP2NvbHVtbj8gDQorLS0tLS0t LS0tLQ0KKyAgICAgICAgOA0KKygxIHJvdykNCisNCiAtLSBUZXN0IGZvciBz dWNjZXNzZnVsIGNsZWFudXAgb2YgYW4gYWJvcnRlZCB0cmFuc2FjdGlvbiBh dCBzZXNzaW9uIGV4aXQuDQogLS0gVEhJUyBNVVNUIEJFIFRIRSBMQVNUIFRF U1QgSU4gVEhJUyBGSUxFLg0KIGJlZ2luOw0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlkbWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvY29weWRtbC5zcWwNCmluZGV4IDlhMjlmOWM5YWMuLjQ1NzgzNDIy NTMgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5ZG1s LnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weWRtbC5zcWwN CkBAIC03MCwxMCArNzAsMTAgQEAgZHJvcCBydWxlIHFxcSBvbiBjb3B5ZG1s X3Rlc3Q7DQogY3JlYXRlIGZ1bmN0aW9uIHFxcV90cmlnKCkgcmV0dXJucyB0 cmlnZ2VyIGFzICQkDQogYmVnaW4NCiBpZiB0Z19vcCBpbiAoJ0lOU0VSVCcs ICdVUERBVEUnKSB0aGVuDQotICAgIHJhaXNlIG5vdGljZSAnJSAlJywgdGdf b3AsIG5ldy5pZDsNCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHRnX3do ZW4sIHRnX29wLCBuZXcuaWQ7DQogICAgIHJldHVybiBuZXc7DQogZWxzZQ0K LSAgICByYWlzZSBub3RpY2UgJyUgJScsIHRnX29wLCBvbGQuaWQ7DQorICAg IHJhaXNlIG5vdGljZSAnJSAlICUnLCB0Z193aGVuLCB0Z19vcCwgb2xkLmlk Ow0KICAgICByZXR1cm4gb2xkOw0KIGVuZCBpZjsNCiBlbmQNCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlzZWxlY3Quc3FsDQppbmRleCAxZDk4 ZGFkM2M4Li5hYmMzMzkwNGMwIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29weXNlbGVjdC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvcHlzZWxlY3Quc3FsDQpAQCAtODQsNyArODQsNyBAQCBkcm9w IHRhYmxlIHRlc3QxOw0KIC0tIHBzcWwgaGFuZGxpbmcgb2YgQ09QWSBpbiBt dWx0aS1jb21tYW5kIHN0cmluZ3MNCiBjb3B5IChzZWxlY3QgMSkgdG8gc3Rk b3V0XDsgc2VsZWN0IDEvMDsJLS0gcm93LCB0aGVuIGVycm9yDQogc2VsZWN0 IDEvMFw7IGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXQ7IC0tIGVycm9yIG9u bHkNCi1jb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0 IDIpIHRvIHN0ZG91dFw7IHNlbGVjdCAwXDsgc2VsZWN0IDM7IC0tIDEgMiAz DQorY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAy KSB0byBzdGRvdXRcOyBzZWxlY3QgM1w7IHNlbGVjdCA0OyAtLSAxIDIgMyA0 DQogDQogY3JlYXRlIHRhYmxlIHRlc3QzIChjIGludCk7DQogc2VsZWN0IDBc OyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBjb3B5IHRlc3QzIGZyb20gc3Rk aW5cOyBzZWxlY3QgMTsgLS0gMQ0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3BzcWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNx bC5zcWwNCmluZGV4IDJlMzc5ODQ5NjIuLjRjZjNkNmViOWQgMTAwNjQ0DQot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwNCkBAIC0xMTM0LDMgKzExMzQs MzggQEAgZHJvcCByb2xlIHJlZ3Jlc3NfcGFydGl0aW9uaW5nX3JvbGU7DQog DQogLS0gXGQgb24gdG9hc3QgdGFibGUgKHVzZSBwZ19zdGF0aXN0aWMncyB0 b2FzdCB0YWJsZSwgd2hpY2ggaGFzIGEga25vd24gbmFtZSkNCiBcZCBwZ190 b2FzdC5wZ190b2FzdF8yNjE5DQorDQorLS0NCistLSBjb21iaW5lZCBxdWVy aWVzDQorLS0NCitcZWNobyAnIyBjb21iaW5lZCBxdWVyaWVzIHRlc3RzJw0K K0NSRUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xF QU4gQVMgJCQNCisgIEJFR0lOIFJBSVNFIE5PVElDRSAnd2FybiAlJywgbXNn IDsgUkVUVVJOIFRSVUUgOyBFTkQNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0K Ky0tIHNob3cgYm90aA0KK1NFTEVDVCAxIEFTIG9uZSBcOyBTRUxFQ1Qgd2Fy bignMS41JykgXDsgU0VMRUNUIDIgQVMgdHdvIDsNCistLSBcZ3NldCBhcHBs aWVzIHRvIGxhc3QgcXVlcnkgb25seQ0KK1NFTEVDVCAzIEFTIHRocmVlIFw7 IFNFTEVDVCB3YXJuKCczLjUnKSBcOyBTRUxFQ1QgNCBBUyBmb3VyIFxnc2V0 DQorXGVjaG8gOnRocmVlIDpmb3VyDQorLS0gc3ludGF4IGVycm9yIHN0b3Bz IGFsbCBwcm9jZXNzaW5nDQorU0VMRUNUIDUgXDsgU0VMRUNUIDYgKyBcOyBT RUxFQ1Qgd2FybignNi41JykgXDsgU0VMRUNUIDcgOw0KKy0tIHdpdGggYWJv cnRlZCB0cmFuc2FjdGlvbiwgc3RvcCBvbiBmaXJzdCBlcnJvcg0KK0JFR0lO IFw7IFNFTEVDVCA4IEFTIGVpZ2h0IFw7IFNFTEVDVCA5LzAgQVMgbmluZSBc OyBST0xMQkFDSyBcOyBTRUxFQ1QgMTAgQVMgdGVuIDsNCistLSBjbG9zZSBw cmV2aW91c2x5IGFib3J0ZWQgdHJhbnNhY3Rpb24NCitST0xMQkFDSzsNCist LSBtaXNjIFNRTCBjb21tYW5kcw0KKy0tIChub24gU0VMRUNUIG91dHB1dCBp cyBzZW50IHRvIHN0ZGVyciwgdGh1cyBpcyBub3Qgc2hvd24gaW4gZXhwZWN0 ZWQgcmVzdWx0cykNCitTRUxFQ1QgJ29rJyBBUyAiYmVnaW4iIFw7DQorQ1JF QVRFIFRBQkxFIHBzcWxfY29taWNzKHMgVEVYVCkgXDsNCitJTlNFUlQgSU5U TyBwc3FsX2NvbWljcyBWQUxVRVMgKCdDYWx2aW4nKSwgKCdob2JiZXMnKSBc Ow0KK0NPUFkgcHNxbF9jb21pY3MgRlJPTSBTVERJTiBcOw0KK1VQREFURSBw c3FsX2NvbWljcyBTRVQgcyA9ICdIb2JiZXMnIFdIRVJFIHMgPSAnaG9iYmVz JyBcOw0KK0RFTEVURSBGUk9NIHBzcWxfY29taWNzIFdIRVJFIHMgPSAnTW9l JyBcOw0KK0NPUFkgcHNxbF9jb21pY3MgVE8gU1RET1VUIFw7DQorVFJVTkNB VEUgcHNxbF9jb21pY3MgXDsNCitEUk9QIFRBQkxFIHBzcWxfY29taWNzIFw7 DQorU0VMRUNUICdvaycgQVMgImRvbmUiIDsNCitNb2UNCitTdXNpZQ0KK1wu DQorRFJPUCBGVU5DVElPTiB3YXJuKFRFWFQpOw0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMuc3FsDQppbmRleCA4MTJlNDBh MWEzLi41ZDEyZmE4ZTg2IDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KQEAgLTQ4OSw4ICs0ODksOCBAQCBE Uk9QIFRBQkxFIGFiYzsNCiANCiBjcmVhdGUgdGVtcCB0YWJsZSBpX3RhYmxl IChmMSBpbnQpOw0KIA0KLS0tIHBzcWwgd2lsbCBzaG93IG9ubHkgdGhlIGxh c3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5DQotU0VMRUNU IDFcOyBTRUxFQ1QgMlw7IFNFTEVDVCAzOw0KKy0tIHBzcWwgd2lsbCBzaG93 IGFsbCByZXN1bHRzIG9mIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5DQorU0VM RUNUIDEgQVMgb25lXDsgU0VMRUNUIDIgQVMgdHdvXDsgU0VMRUNUIDMgQVMg dGhyZWU7DQogDQogLS0gdGhpcyBpbXBsaWNpdGx5IGNvbW1pdHM6DQogaW5z ZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoMSlcOyBzZWxlY3QgKiBmcm9tIGlf dGFibGU7DQpAQCAtNTA4LDkgKzUwOCw5IEBAIHJvbGxiYWNrOyAgLS0gd2Ug YXJlIG5vdCBpbiBhIHRyYW5zYWN0aW9uIGF0IHRoaXMgcG9pbnQNCiANCiAt LSBiZWdpbiBjb252ZXJ0cyBpbXBsaWNpdCB0cmFuc2FjdGlvbiBpbnRvIGEg cmVndWxhciBvbmUgdGhhdA0KIC0tIGNhbiBleHRlbmQgcGFzdCB0aGUgZW5k IG9mIHRoZSBRdWVyeQ0KLXNlbGVjdCAxXDsgYmVnaW5cOyBpbnNlcnQgaW50 byBpX3RhYmxlIHZhbHVlcyg1KTsNCitzZWxlY3QgMSBBUyBvbmVcOyBiZWdp blw7IGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDUpOw0KIGNvbW1pdDsN Ci1zZWxlY3QgMVw7IGJlZ2luXDsgaW5zZXJ0IGludG8gaV90YWJsZSB2YWx1 ZXMoNik7DQorc2VsZWN0IDEgQVMgb25lXDsgYmVnaW5cOyBpbnNlcnQgaW50 byBpX3RhYmxlIHZhbHVlcyg2KTsNCiByb2xsYmFjazsNCiANCiAtLSBjb21t aXQgaW4gaW1wbGljaXQtdHJhbnNhY3Rpb24gc3RhdGUgY29tbWl0cyBidXQg aXNzdWVzIGEgd2FybmluZy4NCkBAIC01MjMsMTcgKzUyMywxNyBAQCBzZWxl Y3QgKiBmcm9tIGlfdGFibGU7DQogcm9sbGJhY2s7ICAtLSB3ZSBhcmUgbm90 IGluIGEgdHJhbnNhY3Rpb24gYXQgdGhpcyBwb2ludA0KIA0KIC0tIGltcGxp Y2l0IHRyYW5zYWN0aW9uIGJsb2NrIGlzIHN0aWxsIGEgdHJhbnNhY3Rpb24g YmxvY2ssIGZvciBlLmcuIFZBQ1VVTQ0KLVNFTEVDVCAxXDsgVkFDVVVNOw0K LVNFTEVDVCAxXDsgQ09NTUlUXDsgVkFDVVVNOw0KK1NFTEVDVCAxIEFTIG9u ZVw7IFZBQ1VVTTsNCitTRUxFQ1QgMiBBUyB0d29cOyBDT01NSVRcOyBWQUNV VU07DQogDQogLS0gd2UgZGlzYWxsb3cgc2F2ZXBvaW50LXJlbGF0ZWQgY29t bWFuZHMgaW4gaW1wbGljaXQtdHJhbnNhY3Rpb24gc3RhdGUNCi1TRUxFQ1Qg MVw7IFNBVkVQT0lOVCBzcDsNCi1TRUxFQ1QgMVw7IENPTU1JVFw7IFNBVkVQ T0lOVCBzcDsNCi1ST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BcOyBTRUxFQ1Qg MjsNCi1TRUxFQ1QgMlw7IFJFTEVBU0UgU0FWRVBPSU5UIHNwXDsgU0VMRUNU IDM7DQorU0VMRUNUIDMgQVMgdGhyZWVcOyBTQVZFUE9JTlQgc3A7DQorU0VM RUNUIDQgQVMgZm91clw7IENPTU1JVFw7IFNBVkVQT0lOVCBzcDsNCitST0xM QkFDSyBUTyBTQVZFUE9JTlQgc3BcOyBTRUxFQ1QgNSBBUyBmaXZlOw0KK1NF TEVDVCA2IEFTIHNpeFw7IFJFTEVBU0UgU0FWRVBPSU5UIHNwXDsgU0VMRUNU IDcgQVMgc2V2ZW47DQogDQogLS0gYnV0IHRoaXMgaXMgT0ssIGJlY2F1c2Ug dGhlIEJFR0lOIGNvbnZlcnRzIGl0IHRvIGEgcmVndWxhciB4YWN0DQotU0VM RUNUIDFcOyBCRUdJTlw7IFNBVkVQT0lOVCBzcFw7IFJPTExCQUNLIFRPIFNB VkVQT0lOVCBzcFw7IENPTU1JVDsNCitTRUxFQ1QgOFw7IEJFR0lOXDsgU0FW RVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsgQ09NTUlU Ow0KIA0KIA0KIC0tIFRlc3QgZm9yIHN1Y2Nlc3NmdWwgY2xlYW51cCBvZiBh biBhYm9ydGVkIHRyYW5zYWN0aW9uIGF0IHNlc3Npb24gZXhpdC4NCg== --8323329-611115096-1564349783=:25871--