From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 6C5491B025 for ; Mon, 8 Jan 2018 02:15:44 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Jan 2018 17:15:43 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,328,1511856000"; d="scan'208";a="19727809" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga001.fm.intel.com with ESMTP; 07 Jan 2018 17:15:43 -0800 Received: from fmsmsx157.amr.corp.intel.com (10.18.116.73) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 7 Jan 2018 17:15:43 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX157.amr.corp.intel.com (10.18.116.73) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 7 Jan 2018 17:15:42 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.189]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.93]) with mapi id 14.03.0319.002; Mon, 8 Jan 2018 09:15:40 +0800 From: "Yao, Lei A" To: "Hu, Jiayu" , "dev@dpdk.org" CC: "Richardson, Bruce" , "Chen, Junjie J" , "Tan, Jianfeng" , "stephen@networkplumber.org" , "Yigit, Ferruh" , "Ananyev, Konstantin" Thread-Topic: [PATCH v4 1/2] gro: code cleanup Thread-Index: AQHTheuudaONAt6Bf065XFPFgeKJpKNpLpFw Date: Mon, 8 Jan 2018 01:15:39 +0000 Message-ID: <2DBBFF226F7CF64BAFCA79B681719D953A3203FA@shsmsx102.ccr.corp.intel.com> References: <1513927544-97241-1-git-send-email-jiayu.hu@intel.com> <1515132769-52572-1-git-send-email-jiayu.hu@intel.com> <1515132769-52572-2-git-send-email-jiayu.hu@intel.com> In-Reply-To: <1515132769-52572-2-git-send-email-jiayu.hu@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjE1Yzc0ZjMtNWY5NS00NzNmLWJjYzUtNDljODM5Yzc2MjMwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6Im1HazU1ZnlUc1hUN1ozWGtcL1hqdUFPSVwvN1MwbEZWUFhlejBnMWVTMjBPST0ifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 1/2] gro: code cleanup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jan 2018 01:15:46 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSHUsIEppYXl1DQo+IFNl bnQ6IEZyaWRheSwgSmFudWFyeSA1LCAyMDE4IDI6MTMgUE0NCj4gVG86IGRldkBkcGRrLm9yZw0K PiBDYzogUmljaGFyZHNvbiwgQnJ1Y2UgPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgQ2hl biwgSnVuamllIEoNCj4gPGp1bmppZS5qLmNoZW5AaW50ZWwuY29tPjsgVGFuLCBKaWFuZmVuZyA8 amlhbmZlbmcudGFuQGludGVsLmNvbT47DQo+IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnOyBZ aWdpdCwgRmVycnVoIDxmZXJydWgueWlnaXRAaW50ZWwuY29tPjsNCj4gQW5hbnlldiwgS29uc3Rh bnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT47IFlhbywgTGVpIEENCj4gPGxlaS5h Lnlhb0BpbnRlbC5jb20+OyBIdSwgSmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT4NCj4gU3ViamVj dDogW1BBVENIIHY0IDEvMl0gZ3JvOiBjb2RlIGNsZWFudXANCj4gDQo+IC0gUmVtb3ZlIG5lZWRs ZXNzIGNoZWNrIGFuZCB2YXJpYW50cw0KPiAtIEZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZywgdXBk YXRlIHRoZSBwcm9ncmFtbWVyIGd1aWRlIGFuZCByZW5hbWUNCj4gICBpbnRlcm5hbCBmdW5jdGlv bnMgYW5kIHZhcmlhbnRzDQo+IC0gRm9yIHN1cHBvcnRpbmcgdHVubmVsZWQgZ3JvLCBtb3ZlIGNv bW1vbiBpbnRlcm5hbCBmdW5jdGlvbnMgZnJvbQ0KPiAgIGdyb190Y3A0LmMgdG8gZ3JvX3RjcDQu aA0KPiAtIENvbXBseSBSRkMgNjg2NCB0byBwcm9jZXNzIHRoZSBJUHY0IElEIGZpZWxkDQo+IA0K PiBTaWduZWQtb2ZmLWJ5OiBKaWF5dSBIdSA8amlheXUuaHVAaW50ZWwuY29tPg0KPiBSZXZpZXdl ZC1ieTogSnVuamllIENoZW4gPGp1bmppZS5qLmNoZW5AaW50ZWwuY29tPg0KVGVzdGVkLWJ5OiBM ZWkgWWFvPGxlaS5hLnlhb0BpbnRlbC5jb20+DQpJIGhhdmUgdGVzdGVkIHRoaXMgcGF0Y2ggd2l0 aCBmb2xsb3dpbmcgdHJhZmZpYyBmb2xsb3c6DQpOSUMxKEluIGtlcm5lbCktLT5OSUMyKHBtZCwg R1JPIG9uKS0tPnZob3N0LXVzZXItPnZpcnRpby1uZXQoaW4gVk0pDQpUaGUgSXBlcmYgdGVzdCB3 aXRoIDEgc3RyZWFtIHNob3cgdGhhdCBHUk8gVnhMQU4gY2FuIGltcHJvdmUgdGhlIA0KcGVyZm9y bWFuY2UgZnJvbSA2IEdicHMoR1JPIG9mZikgdG8gMTYgR2JwcyhHUk8gb24pLg0KDQo+IC0tLQ0K PiAgLi4uL3Byb2dfZ3VpZGUvZ2VuZXJpY19yZWNlaXZlX29mZmxvYWRfbGliLnJzdCAgICAgfCAy NDYgKysrKysrKystLS0tLS0tDQo+ICBkb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvaW1nL2dyby1rZXkt YWxnb3JpdGhtLnN2ZyAgICB8IDIyMw0KPiArKysrKysrKysrKysrKw0KPiAgbGliL2xpYnJ0ZV9n cm8vZ3JvX3RjcDQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzkgKysrKysrKy0tLS0t LS0tLS0tLS0tDQo+ICBsaWIvbGlicnRlX2dyby9ncm9fdGNwNC5oICAgICAgICAgICAgICAgICAg ICAgICAgICB8IDI1MyArKysrKysrKysrLS0tLS0NCj4gIGxpYi9saWJydGVfZ3JvL3J0ZV9ncm8u YyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAyICsrKy0tLS0NCj4gIGxpYi9saWJydGVf Z3JvL3J0ZV9ncm8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkyICsrKy0tLQ0KPiAg NiBmaWxlcyBjaGFuZ2VkLCA3NTAgaW5zZXJ0aW9ucygrKSwgNTA1IGRlbGV0aW9ucygtKQ0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9pbWcvZ3JvLWtleS1hbGdv cml0aG0uc3ZnDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2dlbmVy aWNfcmVjZWl2ZV9vZmZsb2FkX2xpYi5yc3QNCj4gYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvZ2Vu ZXJpY19yZWNlaXZlX29mZmxvYWRfbGliLnJzdA0KPiBpbmRleCAyMmU1MGVjLi5jMmQ3YTQxIDEw MDY0NA0KPiAtLS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvZ2VuZXJpY19yZWNlaXZlX29mZmxv YWRfbGliLnJzdA0KPiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvZ2VuZXJpY19yZWNlaXZl X29mZmxvYWRfbGliLnJzdA0KPiBAQCAtMzIsMTI4ICszMiwxNjIgQEAgR2VuZXJpYyBSZWNlaXZl IE9mZmxvYWQgTGlicmFyeQ0KPiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAN Cj4gIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGlzIGEgd2lkZWx5IHVzZWQgU1ctYmFz ZWQgb2ZmbG9hZGluZw0KPiAtdGVjaG5pcXVlIHRvIHJlZHVjZSBwZXItcGFja2V0IHByb2Nlc3Np bmcgb3ZlcmhlYWQuIEl0IGdhaW5zIHBlcmZvcm1hbmNlDQo+IC1ieSByZWFzc2VtYmxpbmcgc21h bGwgcGFja2V0cyBpbnRvIGxhcmdlIG9uZXMuIFRvIGVuYWJsZSBtb3JlIGZsZXhpYmlsaXR5DQo+ IC10byBhcHBsaWNhdGlvbnMsIERQREsgaW1wbGVtZW50cyBHUk8gYXMgYSBzdGFuZGFsb25lIGxp YnJhcnkuIEFwcGxpY2F0aW9ucw0KPiAtZXhwbGljaXRseSB1c2UgdGhlIEdSTyBsaWJyYXJ5IHRv IG1lcmdlIHNtYWxsIHBhY2tldHMgaW50byBsYXJnZSBvbmVzLg0KPiAtDQo+IC1UaGUgR1JPIGxp YnJhcnkgYXNzdW1lcyBhbGwgaW5wdXQgcGFja2V0cyBoYXZlIGNvcnJlY3QgY2hlY2tzdW1zLiBJ bg0KPiAtYWRkaXRpb24sIHRoZSBHUk8gbGlicmFyeSBkb2Vzbid0IHJlLWNhbGN1bGF0ZSBjaGVj a3N1bXMgZm9yIG1lcmdlZA0KPiAtcGFja2V0cy4gSWYgaW5wdXQgcGFja2V0cyBhcmUgSVAgZnJh Z21lbnRlZCwgdGhlIEdSTyBsaWJyYXJ5IGFzc3VtZXMNCj4gLXRoZXkgYXJlIGNvbXBsZXRlIHBh Y2tldHMgKGkuZS4gd2l0aCBMNCBoZWFkZXJzKS4NCj4gLQ0KPiAtQ3VycmVudGx5LCB0aGUgR1JP IGxpYnJhcnkgaW1wbGVtZW50cyBUQ1AvSVB2NCBwYWNrZXQgcmVhc3NlbWJseS4NCj4gLQ0KPiAt UmVhc3NlbWJseSBNb2Rlcw0KPiAtLS0tLS0tLS0tLS0tLS0tLQ0KPiAtDQo+IC1UaGUgR1JPIGxp YnJhcnkgcHJvdmlkZXMgdHdvIHJlYXNzZW1ibHkgbW9kZXM6IGxpZ2h0d2VpZ2h0IGFuZA0KPiAt aGVhdnl3ZWlnaHQgbW9kZS4gSWYgYXBwbGljYXRpb25zIHdhbnQgdG8gbWVyZ2UgcGFja2V0cyBp biBhIHNpbXBsZSB3YXksDQo+IC10aGV5IGNhbiB1c2UgdGhlIGxpZ2h0d2VpZ2h0IG1vZGUgQVBJ LiBJZiBhcHBsaWNhdGlvbnMgd2FudCBtb3JlDQo+IC1maW5lLWdyYWluZWQgY29udHJvbHMsIHRo ZXkgY2FuIGNob29zZSB0aGUgaGVhdnl3ZWlnaHQgbW9kZSBBUEkuDQo+IC0NCj4gLUxpZ2h0d2Vp Z2h0IE1vZGUNCj4gLX5+fn5+fn5+fn5+fn5+fn4NCj4gLQ0KPiAtVGhlIGBgcnRlX2dyb19yZWFz c2VtYmxlX2J1cnN0KClgYCBmdW5jdGlvbiBpcyB1c2VkIGZvciByZWFzc2VtYmx5IGluDQo+IC1s aWdodHdlaWdodCBtb2RlLiBJdCB0cmllcyB0byBtZXJnZSBOIGlucHV0IHBhY2tldHMgYXQgYSB0 aW1lLCB3aGVyZQ0KPiAtTiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgUlRFX0dS T19NQVhfQlVSU1RfSVRFTV9OVU1gYC4NCj4gLQ0KPiAtSW4gZWFjaCBpbnZvY2F0aW9uLCBgYHJ0 ZV9ncm9fcmVhc3NlbWJsZV9idXJzdCgpYGAgYWxsb2NhdGVzIHRlbXBvcmFyeQ0KPiAtcmVhc3Nl bWJseSB0YWJsZXMgZm9yIHRoZSBkZXNpcmVkIEdSTyB0eXBlcy4gTm90ZSB0aGF0IHRoZSByZWFz c2VtYmx5DQo+IC10YWJsZSBpcyBhIHRhYmxlIHN0cnVjdHVyZSB1c2VkIHRvIHJlYXNzZW1ibGUg cGFja2V0cyBhbmQgZGlmZmVyZW50IEdSTw0KPiAtdHlwZXMgKGUuZy4gVENQL0lQdjQgR1JPIGFu ZCBUQ1AvSVB2NiBHUk8pIGhhdmUgZGlmZmVyZW50IHJlYXNzZW1ibHkNCj4gdGFibGUNCj4gLXN0 cnVjdHVyZXMuIFRoZSBgYHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdCgpYGAgZnVuY3Rpb24gdXNl cyB0aGUNCj4gcmVhc3NlbWJseQ0KPiAtdGFibGVzIHRvIG1lcmdlIHRoZSBOIGlucHV0IHBhY2tl dHMuDQo+IC0NCj4gLUZvciBhcHBsaWNhdGlvbnMsIHBlcmZvcm1pbmcgR1JPIGluIGxpZ2h0d2Vp Z2h0IG1vZGUgaXMgc2ltcGxlLiBUaGV5DQo+IC1qdXN0IG5lZWQgdG8gaW52b2tlIGBgcnRlX2dy b19yZWFzc2VtYmxlX2J1cnN0KClgYC4gQXBwbGljYXRpb25zIGNhbiBnZXQNCj4gLUdST2VkIHBh Y2tldHMgYXMgc29vbiBhcyBgYHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdCgpYGAgcmV0dXJucy4N Cj4gLQ0KPiAtSGVhdnl3ZWlnaHQgTW9kZQ0KPiAtfn5+fn5+fn5+fn5+fn5+fg0KPiAtDQo+IC1U aGUgYGBydGVfZ3JvX3JlYXNzZW1ibGUoKWBgIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHJlYXNzZW1i bHkgaW4NCj4gaGVhdnl3ZWlnaHQNCj4gLW1vZGUuIENvbXBhcmVkIHdpdGggdGhlIGxpZ2h0d2Vp Z2h0IG1vZGUsIHBlcmZvcm1pbmcgR1JPIGluDQo+IGhlYXZ5d2VpZ2h0IG1vZGUNCj4gLWlzIHJl bGF0aXZlbHkgY29tcGxpY2F0ZWQuDQo+IC0NCj4gLUJlZm9yZSBwZXJmb3JtaW5nIEdSTywgYXBw bGljYXRpb25zIG5lZWQgdG8gY3JlYXRlIGEgR1JPIGNvbnRleHQgb2JqZWN0DQo+IC1ieSBjYWxs aW5nIGBgcnRlX2dyb19jdHhfY3JlYXRlKClgYC4gQSBHUk8gY29udGV4dCBvYmplY3QgaG9sZHMg dGhlDQo+IC1yZWFzc2VtYmx5IHRhYmxlcyBvZiBkZXNpcmVkIEdSTyB0eXBlcy4gTm90ZSB0aGF0 IGFsbCB1cGRhdGUvbG9va3VwDQo+IC1vcGVyYXRpb25zIG9uIHRoZSBjb250ZXh0IG9iamVjdCBh cmUgbm90IHRocmVhZCBzYWZlLiBTbyBpZiBkaWZmZXJlbnQNCj4gLXByb2Nlc3NlcyBvciB0aHJl YWRzIHdhbnQgdG8gYWNjZXNzIHRoZSBzYW1lIGNvbnRleHQgb2JqZWN0DQo+IHNpbXVsdGFuZW91 c2x5LA0KPiAtc29tZSBleHRlcm5hbCBzeW5jaW5nIG1lY2hhbmlzbXMgbXVzdCBiZSB1c2VkLg0K PiAtDQo+IC1PbmNlIHRoZSBHUk8gY29udGV4dCBpcyBjcmVhdGVkLCBhcHBsaWNhdGlvbnMgY2Fu IHRoZW4gdXNlIHRoZQ0KPiAtYGBydGVfZ3JvX3JlYXNzZW1ibGUoKWBgIGZ1bmN0aW9uIHRvIG1l cmdlIHBhY2tldHMuIEluIGVhY2ggaW52b2NhdGlvbiwNCj4gLWBgcnRlX2dyb19yZWFzc2VtYmxl KClgYCB0cmllcyB0byBtZXJnZSBpbnB1dCBwYWNrZXRzIHdpdGggdGhlIHBhY2tldHMNCj4gLWlu IHRoZSByZWFzc2VtYmx5IHRhYmxlcy4gSWYgYW4gaW5wdXQgcGFja2V0IGlzIGFuIHVuc3VwcG9y dGVkIEdSTyB0eXBlLA0KPiAtb3Igb3RoZXIgZXJyb3JzIGhhcHBlbiAoZS5nLiBTWU4gYml0IGlz IHNldCksIGBgcnRlX2dyb19yZWFzc2VtYmxlKClgYA0KPiAtcmV0dXJucyB0aGUgcGFja2V0IHRv IGFwcGxpY2F0aW9ucy4gT3RoZXJ3aXNlLCB0aGUgaW5wdXQgcGFja2V0IGlzIGVpdGhlcg0KPiAt bWVyZ2VkIG9yIGluc2VydGVkIGludG8gYSByZWFzc2VtYmx5IHRhYmxlLg0KPiAtDQo+IC1XaGVu IGFwcGxpY2F0aW9ucyB3YW50IHRvIGdldCBHUk8gcHJvY2Vzc2VkIHBhY2tldHMsIHRoZXkgbmVl ZCB0byB1c2UNCj4gLWBgcnRlX2dyb190aW1lb3V0X2ZsdXNoKClgYCB0byBmbHVzaCB0aGVtIGZy b20gdGhlIHRhYmxlcyBtYW51YWxseS4NCj4gK3RlY2huaXF1ZSB0byByZWR1Y2UgcGVyLXBhY2tl dCBwcm9jZXNzaW5nIG92ZXJoZWFkcy4gQnkgcmVhc3NlbWJsaW5nDQo+ICtzbWFsbCBwYWNrZXRz IGludG8gbGFyZ2VyIG9uZXMsIEdSTyBlbmFibGVzIGFwcGxpY2F0aW9ucyB0byBwcm9jZXNzDQo+ ICtmZXdlciBsYXJnZSBwYWNrZXRzIGRpcmVjdGx5LCB0aHVzIHJlZHVjaW5nIHRoZSBudW1iZXIg b2YgcGFja2V0cyB0bw0KPiArYmUgcHJvY2Vzc2VkLiBUbyBiZW5lZml0IERQREstYmFzZWQgYXBw bGljYXRpb25zLCBsaWtlIE9wZW4gdlN3aXRjaCwNCj4gK0RQREsgYWxzbyBwcm92aWRlcyBvd24g R1JPIGltcGxlbWVudGF0aW9uLiBJbiBEUERLLCBHUk8gaXMNCj4gaW1wbGVtZW50ZWQNCj4gK2Fz IGEgc3RhbmRhbG9uZSBsaWJyYXJ5LiBBcHBsaWNhdGlvbnMgZXhwbGljaXRseSB1c2UgdGhlIEdS TyBsaWJyYXJ5IHRvDQo+ICtyZWFzc2VtYmxlIHBhY2tldHMuDQo+ICsNCj4gK092ZXJ2aWV3DQo+ ICstLS0tLS0tLQ0KPiArDQo+ICtJbiB0aGUgR1JPIGxpYnJhcnksIHRoZXJlIGFyZSBtYW55IEdS TyB0eXBlcyB3aGljaCBhcmUgZGVmaW5lZCBieSBwYWNrZXQNCj4gK3R5cGVzLiBPbmUgR1JPIHR5 cGUgaXMgaW4gY2hhcmdlIG9mIHByb2Nlc3Mgb25lIGtpbmQgb2YgcGFja2V0cy4gRm9yDQo+ICtl eGFtcGxlLCBUQ1AvSVB2NCBHUk8gcHJvY2Vzc2VzIFRDUC9JUHY0IHBhY2tldHMuDQo+ICsNCj4g K0VhY2ggR1JPIHR5cGUgaGFzIGEgcmVhc3NlbWJseSBmdW5jdGlvbiwgd2hpY2ggZGVmaW5lcyBv d24gYWxnb3JpdGhtIGFuZA0KPiArdGFibGUgc3RydWN0dXJlIHRvIHJlYXNzZW1ibGUgcGFja2V0 cy4gV2UgYXNzaWduIGlucHV0IHBhY2tldHMgdG8gdGhlDQo+ICtjb3JyZXNwb25kaW5nIEdSTyBm dW5jdGlvbnMgYnkgTUJVRi0+cGFja2V0X3R5cGUuDQo+ICsNCj4gK1RoZSBHUk8gbGlicmFyeSBk b2Vzbid0IGNoZWNrIGlmIGlucHV0IHBhY2tldHMgaGF2ZSBjb3JyZWN0IGNoZWNrc3VtcyBhbmQN Cj4gK2RvZXNuJ3QgcmUtY2FsY3VsYXRlIGNoZWNrc3VtcyBmb3IgbWVyZ2VkIHBhY2tldHMuIFRo ZSBHUk8gbGlicmFyeQ0KPiArYXNzdW1lcyB0aGUgcGFja2V0cyBhcmUgY29tcGxldGUgKGkuZS4s IE1GPT0wICYmIGZyYWdfb2ZmPT0wKSwgd2hlbiBJUA0KPiArZnJhZ21lbnRhdGlvbiBpcyBwb3Nz aWJsZSAoaS5lLiwgREY9PTApLiBBZGRpdGlvbmFsbHksIGl0IGNvbXBsaWVzIFJGQw0KPiArNjg2 NCB0byBwcm9jZXNzIHRoZSBJUHY0IElEIGZpZWxkLg0KPiANCj4gLVRDUC9JUHY0IEdSTw0KPiAt LS0tLS0tLS0tLS0tDQo+ICtDdXJyZW50bHksIHRoZSBHUk8gbGlicmFyeSBwcm92aWRlcyBHUk8g c3VwcG9ydHMgZm9yIFRDUC9JUHY0IHBhY2tldHMuDQo+ICsNCj4gK1R3byBTZXRzIG9mIEFQSQ0K PiArLS0tLS0tLS0tLS0tLS0tDQo+ICsNCj4gK0ZvciBkaWZmZXJlbnQgdXNhZ2Ugc2NlbmFyaW9z LCB0aGUgR1JPIGxpYnJhcnkgcHJvdmlkZXMgdHdvIHNldHMgb2YgQVBJLg0KPiArVGhlIG9uZSBp cyBjYWxsZWQgdGhlIGxpZ2h0d2VpZ2h0IG1vZGUgQVBJLCB3aGljaCBlbmFibGVzIGFwcGxpY2F0 aW9ucyB0bw0KPiArbWVyZ2UgYSBzbWFsbCBudW1iZXIgb2YgcGFja2V0cyByYXBpZGx5OyB0aGUg b3RoZXIgaXMgY2FsbGVkIHRoZQ0KPiAraGVhdnl3ZWlnaHQgbW9kZSBBUEksIHdoaWNoIHByb3Zp ZGVzIGZpbmUtZ3JhaW5lZCBjb250cm9scyB0bw0KPiArYXBwbGljYXRpb25zIGFuZCBzdXBwb3J0 cyB0byBtZXJnZSBhIGxhcmdlIG51bWJlciBvZiBwYWNrZXRzLg0KPiArDQo+ICtMaWdodHdlaWdo dCBNb2RlIEFQSQ0KPiArfn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gKw0KPiArVGhlIGxpZ2h0d2Vp Z2h0IG1vZGUgb25seSBoYXMgb25lIGZ1bmN0aW9uIGBgcnRlX2dyb19yZWFzc2VtYmxlX2J1cnN0 KClgYCwNCj4gK3doaWNoIHByb2Nlc3MgTiBwYWNrZXRzIGF0IGEgdGltZS4gVXNpbmcgdGhlIGxp Z2h0d2VpZ2h0IG1vZGUgQVBJIHRvDQo+ICttZXJnZSBwYWNrZXRzIGlzIHZlcnkgc2ltcGxlLiBD YWxsaW5nIGBgcnRlX2dyb19yZWFzc2VtYmxlX2J1cnN0KClgYCBpcw0KPiArZW5vdWdoLiBUaGUg R1JPZWQgcGFja2V0cyBhcmUgcmV0dXJuZWQgdG8gYXBwbGljYXRpb25zIGFzIHNvb24gYXMgaXQN Cj4gK2ZpbmlzaGVzLg0KPiArDQo+ICtJbiBgYHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdCgpYGAs IHRhYmxlIHN0cnVjdHVyZXMgb2YgZGlmZmVyZW50IEdSTw0KPiArdHlwZXMgYXJlIGFsbG9jYXRl ZCBpbiB0aGUgc3RhY2suIFRoaXMgZGVzaWduIHNpbXBsaWZpZXMgYXBwbGljYXRpb25zJw0KPiAr b3BlcmF0aW9ucy4gSG93ZXZlciwgbGltaXRlZCBieSB0aGUgc3RhY2sgc2l6ZSwgdGhlIG1heGlt dW0gbnVtYmVyIG9mDQo+ICtwYWNrZXRzIHRoYXQgYGBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3Qo KWBgIGNhbiBwcm9jZXNzIGluIGFuIGludm9jYXRpb24NCj4gK3Nob3VsZCBiZSBsZXNzIHRoYW4g b3IgZXF1YWwgdG8gYGBSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTWBgLg0KPiArDQo+ICtIZWF2 eXdlaWdodCBNb2RlIEFQSQ0KPiArfn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gKw0KPiArQ29tcGFy ZWQgd2l0aCB0aGUgbGlnaHR3ZWlnaHQgbW9kZSwgdXNpbmcgdGhlIGhlYXZ5d2VpZ2h0IG1vZGUg QVBJIGlzDQo+ICtyZWxhdGl2ZWx5IGNvbXBsZXguIEZpcnN0bHksIGFwcGxpY2F0aW9ucyBuZWVk IHRvIGNyZWF0ZSBhIEdSTyBjb250ZXh0DQo+ICtieSBgYHJ0ZV9ncm9fY3R4X2NyZWF0ZSgpYGAu IGBgcnRlX2dyb19jdHhfY3JlYXRlKClgYCBhbGxvY2F0ZXMgdGFibGVzDQo+ICtzdHJ1Y3R1cmVz IGluIHRoZSBoZWFwIGFuZCBzdG9yZXMgdGhlaXIgcG9pbnRlcnMgaW4gdGhlIEdSTyBjb250ZXh0 Lg0KPiArU2Vjb25kbHksIGFwcGxpY2F0aW9ucyB1c2UgYGBydGVfZ3JvX3JlYXNzZW1ibGUoKWBg IHRvIG1lcmdlIHBhY2tldHMuDQo+ICtJZiBpbnB1dCBwYWNrZXRzIGhhdmUgaW52YWxpZCBwYXJh bWV0ZXJzLCBgYHJ0ZV9ncm9fcmVhc3NlbWJsZSgpYGANCj4gK3JldHVybnMgdGhlbSB0byBhcHBs aWNhdGlvbnMuIEZvciBleGFtcGxlLCBwYWNrZXRzIG9mIHVuc3VwcG9ydGVkIEdSTw0KPiArdHlw ZXMgb3IgVENQIFNZTiBwYWNrZXRzIGFyZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgaW5wdXQg cGFja2V0cyBhcmUNCj4gK2VpdGhlciBtZXJnZWQgd2l0aCB0aGUgZXhpc3RlZCBwYWNrZXRzIGlu IHRoZSB0YWJsZXMgb3IgaW5zZXJ0ZWQgaW50byB0aGUNCj4gK3RhYmxlcy4gRmluYWxseSwgYXBw bGljYXRpb25zIHVzZSBgYHJ0ZV9ncm9fdGltZW91dF9mbHVzaCgpYGAgdG8gZmx1c2gNCj4gK3Bh Y2tldHMgZnJvbSB0aGUgdGFibGVzLCB3aGVuIHRoZXkgd2FudCB0byBnZXQgdGhlIEdST2VkIHBh Y2tldHMuDQo+ICsNCj4gK05vdGUgdGhhdCBhbGwgdXBkYXRlL2xvb2t1cCBvcGVyYXRpb25zIG9u IHRoZSBHUk8gY29udGV4dCBhcmUgbm90IHRocmVhZA0KPiArc2FmZS4gU28gaWYgZGlmZmVyZW50 IHByb2Nlc3NlcyBvciB0aHJlYWRzIHdhbnQgdG8gYWNjZXNzIHRoZSBzYW1lDQo+ICtjb250ZXh0 IG9iamVjdCBzaW11bHRhbmVvdXNseSwgc29tZSBleHRlcm5hbCBzeW5jaW5nIG1lY2hhbmlzbXMg bXVzdCBiZQ0KPiArdXNlZC4NCj4gKw0KPiArUmVhc3NlbWJseSBBbGdvcml0aG0NCj4gKy0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ICsNCj4gK1RoZSByZWFzc2VtYmx5IGFsZ29yaXRobSBpcyB1c2Vk IGZvciByZWFzc2VtYmxpbmcgcGFja2V0cy4gSW4gdGhlIEdSTw0KPiArbGlicmFyeSwgZGlmZmVy ZW50IEdSTyB0eXBlcyBjYW4gdXNlIGRpZmZlcmVudCBhbGdvcml0aG1zLiBJbiB0aGlzDQo+ICtz ZWN0aW9uLCB3ZSB3aWxsIGludHJvZHVjZSBhbiBhbGdvcml0aG0sIHdoaWNoIGlzIHVzZWQgYnkg VENQL0lQdjQgR1JPLg0KPiANCj4gLVRDUC9JUHY0IEdSTyBzdXBwb3J0cyBtZXJnaW5nIHNtYWxs IFRDUC9JUHY0IHBhY2tldHMgaW50byBsYXJnZSBvbmVzLA0KPiAtdXNpbmcgYSB0YWJsZSBzdHJ1 Y3R1cmUgY2FsbGVkIHRoZSBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxlLg0KPiArQ2hhbGxlbmdl cw0KPiArfn5+fn5+fn5+fg0KPiANCj4gLVRDUC9JUHY0IFJlYXNzZW1ibHkgVGFibGUNCj4gLX5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gK1RoZSByZWFzc2VtYmx5IGFsZ29yaXRobSBkZXRl cm1pbmVzIHRoZSBlZmZpY2llbmN5IG9mIEdSTy4gVGhlcmUgYXJlIHR3bw0KPiArY2hhbGxlbmdl cyBpbiB0aGUgYWxnb3JpdGhtIGRlc2lnbjoNCj4gDQo+IC1BIFRDUC9JUHY0IHJlYXNzZW1ibHkg dGFibGUgaW5jbHVkZXMgYSAia2V5IiBhcnJheSBhbmQgYW4gIml0ZW0iIGFycmF5Lg0KPiAtVGhl IGtleSBhcnJheSBrZWVwcyB0aGUgY3JpdGVyaWEgdG8gbWVyZ2UgcGFja2V0cyBhbmQgdGhlIGl0 ZW0gYXJyYXkNCj4gLWtlZXBzIHRoZSBwYWNrZXQgaW5mb3JtYXRpb24uDQo+ICstIGEgaGlnaCBj b3N0IGFsZ29yaXRobS9pbXBsZW1lbnRhdGlvbiB3b3VsZCBjYXVzZSBwYWNrZXQgZHJvcHBpbmcg aW4gYQ0KPiArICBoaWdoIHNwZWVkIG5ldHdvcmsuDQo+IA0KPiAtRWFjaCBrZXkgaW4gdGhlIGtl eSBhcnJheSBwb2ludHMgdG8gYW4gaXRlbSBncm91cCwgd2hpY2ggY29uc2lzdHMgb2YNCj4gLXBh Y2tldHMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBjcml0ZXJpYSB2YWx1ZXMgYnV0IGNhbid0IGJlIG1l cmdlZC4gQSBrZXkNCj4gLWluIHRoZSBrZXkgYXJyYXkgaW5jbHVkZXMgdHdvIHBhcnRzOg0KPiAr LSBwYWNrZXQgcmVvcmRlcmluZyBtYWtlcyBpdCBoYXJkIHRvIG1lcmdlIHBhY2tldHMuIEZvciBl eGFtcGxlLCBMaW51eA0KPiArICBHUk8gZmFpbHMgdG8gbWVyZ2UgcGFja2V0cyB3aGVuIGVuY291 bnRlcnMgcGFja2V0IHJlb3JkZXJpbmcuDQo+IA0KPiAtKiBgYGNyaXRlcmlhYGA6IHRoZSBjcml0 ZXJpYSB0byBtZXJnZSBwYWNrZXRzLiBJZiB0d28gcGFja2V0cyBjYW4gYmUNCj4gLSAgbWVyZ2Vk LCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBjcml0ZXJpYSB2YWx1ZXMuDQo+ICtUaGUgYWJvdmUg dHdvIGNoYWxsZW5nZXMgcmVxdWlyZSBvdXIgYWxnb3JpdGhtIGlzOg0KPiANCj4gLSogYGBzdGFy dF9pbmRleGBgOiB0aGUgaXRlbSBhcnJheSBpbmRleCBvZiB0aGUgZmlyc3QgcGFja2V0IGluIHRo ZSBpdGVtDQo+IC0gIGdyb3VwLg0KPiArLSBsaWdodHdlaWdodCBlbm91Z2ggdG8gc2NhbGUgZmFz dCBuZXR3b3JraW5nIHNwZWVkDQo+IA0KPiAtRWFjaCBlbGVtZW50IGluIHRoZSBpdGVtIGFycmF5 IGtlZXBzIHRoZSBpbmZvcm1hdGlvbiBvZiBhIHBhY2tldC4gQW4gaXRlbQ0KPiAtaW4gdGhlIGl0 ZW0gYXJyYXkgbWFpbmx5IGluY2x1ZGVzIHRocmVlIHBhcnRzOg0KPiArLSBjYXBhYmxlIG9mIGhh bmRsaW5nIHBhY2tldCByZW9yZGVyaW5nDQo+IA0KPiAtKiBgYGZpcnN0c2VnYGA6IHRoZSBtYnVm IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHNlZ21lbnQgb2YgdGhlIHBhY2tldC4NCj4gK0luIERQREsg R1JPLCB3ZSB1c2UgYSBrZXktYmFzZWQgYWxnb3JpdGhtIHRvIGFkZHJlc3MgdGhlIHR3byBjaGFs bGVuZ2VzLg0KPiANCj4gLSogYGBsYXN0c2VnYGA6IHRoZSBtYnVmIGFkZHJlc3Mgb2YgdGhlIGxh c3Qgc2VnbWVudCBvZiB0aGUgcGFja2V0Lg0KPiArS2V5LWJhc2VkIFJlYXNzZW1ibHkgQWxnb3Jp dGhtDQo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gKw0KPiArOm51bXJlZjpg ZmlndXJlX2dyby1rZXktYWxnb3JpdGhtYCBpbGx1c3RyYXRlcyB0aGUgcHJvY2VkdXJlIG9mIHRo ZQ0KPiAra2V5LWJhc2VkIGFsZ29yaXRobS4gUGFja2V0cyBhcmUgY2xhc3NpZmllZCBpbnRvICJm bG93cyIgYnkgc29tZSBoZWFkZXINCj4gK2ZpZWxkcyAod2UgY2FsbCB0aGVtIGFzICJrZXkiKS4g VG8gcHJvY2VzcyBhbiBpbnB1dCBwYWNrZXQsIHRoZSBhbGdvcml0aG0NCj4gK3NlYXJjaGVzIGZv ciBhIG1hdGNoZWQgImZsb3ciIChpLmUuLCB0aGUgc2FtZSB2YWx1ZSBvZiBrZXkpIGZvciB0aGUN Cj4gK3BhY2tldCBmaXJzdCwgdGhlbiBjaGVja3MgYWxsIHBhY2tldHMgaW4gdGhlICJmbG93IiBh bmQgdHJpZXMgdG8gZmluZCBhDQo+ICsibmVpZ2hib3IiIGZvciBpdC4gSWYgZmluZCBhICJuZWln aGJvciIsIG1lcmdlIHRoZSB0d28gcGFja2V0cyB0b2dldGhlci4NCj4gK0lmIGNhbid0IGZpbmQg YSAibmVpZ2hib3IiLCBzdG9yZSB0aGUgcGFja2V0IGludG8gaXRzICJmbG93Ii4gSWYgY2FuJ3QN Cj4gK2ZpbmQgYSBtYXRjaGVkICJmbG93IiwgaW5zZXJ0IGEgbmV3ICJmbG93IiBhbmQgc3RvcmUg dGhlIHBhY2tldCBpbnRvIHRoZQ0KPiArImZsb3ciLg0KPiArDQo+ICsuLiBub3RlOjoNCj4gKyAg ICAgICAgUGFja2V0cyBpbiB0aGUgc2FtZSAiZmxvdyIgdGhhdCBjYW4ndCBtZXJnZSBhcmUgYWx3 YXlzIGNhdXNlZA0KPiArICAgICAgICBieSBwYWNrZXQgcmVvcmRlcmluZy4NCj4gKw0KPiArVGhl IGtleS1iYXNlZCBhbGdvcml0aG0gaGFzIHR3byBjaGFyYWN0ZXJzOg0KPiArDQo+ICstIGNsYXNz aWZ5aW5nIHBhY2tldHMgaW50byAiZmxvd3MiIHRvIGFjY2VsZXJhdGUgcGFja2V0IGFnZ3JlZ2F0 aW9uIGlzDQo+ICsgIHNpbXBsZSAoYWRkcmVzcyBjaGFsbGVuZ2UgMSkuDQo+ICsNCj4gKy0gc3Rv cmluZyBvdXQtb2Ytb3JkZXIgcGFja2V0cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBsYXRl ciAoYWRkcmVzcw0KPiArICBjaGFsbGVuZ2UgMikuDQo+ICsNCj4gKy4uIF9maWd1cmVfZ3JvLWtl eS1hbGdvcml0aG06DQo+ICsNCj4gKy4uIGZpZ3VyZTo6IGltZy9ncm8ta2V5LWFsZ29yaXRobS4q DQo+ICsgICA6YWxpZ246IGNlbnRlcg0KPiArDQo+ICsgICBLZXktYmFzZWQgUmVhc3NlbWJseSBB bGdvcml0aG0NCj4gKw0KPiArVENQL0lQdjQgR1JPDQo+ICstLS0tLS0tLS0tLS0NCj4gDQo+IC0q IGBgbmV4dF9wa3RfaW5kZXhgYDogdGhlIGl0ZW0gYXJyYXkgaW5kZXggb2YgdGhlIG5leHQgcGFj a2V0IGluIHRoZSBzYW1lDQo+IC0gIGl0ZW0gZ3JvdXAuIFRDUC9JUHY0IEdSTyB1c2VzIGBgbmV4 dF9wa3RfaW5kZXhgYCB0byBjaGFpbiB0aGUgcGFja2V0cw0KPiAtICB0aGF0IGhhdmUgdGhlIHNh bWUgY3JpdGVyaWEgdmFsdWUgYnV0IGNhbid0IGJlIG1lcmdlZCB0b2dldGhlci4NCj4gK1RoZSB0 YWJsZSBzdHJ1Y3R1cmUgdXNlZCBieSBUQ1AvSVB2NCBHUk8gY29udGFpbnMgdHdvIGFycmF5czog ZmxvdyBhcnJheQ0KPiArYW5kIGl0ZW0gYXJyYXkuIFRoZSBmbG93IGFycmF5IGtlZXBzIGZsb3cg aW5mb3JtYXRpb24sIGFuZCB0aGUgaXRlbSBhcnJheQ0KPiAra2VlcHMgcGFja2V0IGluZm9ybWF0 aW9uLg0KPiANCj4gLVByb2NlZHVyZSB0byBSZWFzc2VtYmxlIGEgUGFja2V0DQo+IC1+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiArSGVhZGVyIGZpZWxkcyB1c2VkIHRvIGRlZmlu ZSBhIFRDUC9JUHY0IGZsb3cgaW5jbHVkZToNCj4gDQo+IC1UbyByZWFzc2VtYmxlIGFuIGluY29t aW5nIHBhY2tldCBuZWVkcyB0aHJlZSBzdGVwczoNCj4gKy0gc291cmNlIGFuZCBkZXN0aW5hdGlv bjogRXRoZXJuZXQgYW5kIElQIGFkZHJlc3MsIFRDUCBwb3J0DQo+IA0KPiAtIy4gQ2hlY2sgaWYg dGhlIHBhY2tldCBzaG91bGQgYmUgcHJvY2Vzc2VkLiBQYWNrZXRzIHdpdGggb25lIG9mIHRoZQ0K PiAtICAgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlbid0IHByb2Nlc3NlZCBhbmQgYXJlIHJldHVy bmVkIGltbWVkaWF0ZWx5Og0KPiArLSBUQ1AgYWNrbm93bGVkZ2UgbnVtYmVyDQo+IA0KPiAtICAg KiBGSU4sIFNZTiwgUlNULCBVUkcsIFBTSCwgRUNFIG9yIENXUiBiaXQgaXMgc2V0Lg0KPiArVENQ L0lQdjQgcGFja2V0cyB3aG9zZSBGSU4sIFNZTiwgUlNULCBVUkcsIFBTSCwgRUNFIG9yIENXUiBi aXQgaXMgc2V0DQo+ICt3b24ndCBiZSBwcm9jZXNzZWQuDQo+IA0KPiAtICAgKiBMNCBwYXlsb2Fk IGxlbmd0aCBpcyAwLg0KPiArSGVhZGVyIGZpZWxkcyBkZWNpZGluZyBpZiB0d28gcGFja2V0cyBh cmUgbmVpZ2hib3JzIGluY2x1ZGU6DQo+IA0KPiAtIy4gIFRyYXZlcnNlIHRoZSBrZXkgYXJyYXkg dG8gZmluZCBhIGtleSB3aGljaCBoYXMgdGhlIHNhbWUgY3JpdGVyaWENCj4gLSAgICB2YWx1ZSB3 aXRoIHRoZSBpbmNvbWluZyBwYWNrZXQuIElmIGZvdW5kLCBnbyB0byB0aGUgbmV4dCBzdGVwLg0K PiAtICAgIE90aGVyd2lzZSwgaW5zZXJ0IGEgbmV3IGtleSBhbmQgYSBuZXcgaXRlbSBmb3IgdGhl IHBhY2tldC4NCj4gKy0gVENQIHNlcXVlbmNlIG51bWJlcg0KPiANCj4gLSMuIExvY2F0ZSB0aGUg Zmlyc3QgcGFja2V0IGluIHRoZSBpdGVtIGdyb3VwIHZpYSBgYHN0YXJ0X2luZGV4YGAuIFRoZW4N Cj4gLSAgIHRyYXZlcnNlIGFsbCBwYWNrZXRzIGluIHRoZSBpdGVtIGdyb3VwIHZpYSBgYG5leHRf cGt0X2luZGV4YGAuIElmIGENCj4gLSAgIHBhY2tldCBpcyBmb3VuZCB3aGljaCBjYW4gYmUgbWVy Z2VkIHdpdGggdGhlIGluY29taW5nIG9uZSwgbWVyZ2UgdGhlbQ0KPiAtICAgdG9nZXRoZXIuIElm IG9uZSBpc24ndCBmb3VuZCwgaW5zZXJ0IHRoZSBwYWNrZXQgaW50byB0aGlzIGl0ZW0gZ3JvdXAu DQo+IC0gICBOb3RlIHRoYXQgdG8gbWVyZ2UgdHdvIHBhY2tldHMgaXMgdG8gbGluayB0aGVtIHRv Z2V0aGVyIHZpYSBtYnVmJ3MNCj4gLSAgIGBgbmV4dGBgIGZpZWxkLg0KPiArLSBJUHY0IElELiBU aGUgSVB2NCBJRCBmaWVsZHMgb2YgdGhlIHBhY2tldHMsIHdob3NlIERGIGJpdCBpcyAwLCBzaG91 bGQNCj4gKyAgYmUgaW5jcmVhc2VkIGJ5IDEuDQo+IA0KPiAtV2hlbiBwYWNrZXRzIGFyZSBmbHVz aGVkIGZyb20gdGhlIHJlYXNzZW1ibHkgdGFibGUsIFRDUC9JUHY0IEdSTw0KPiB1cGRhdGVzDQo+ IC1wYWNrZXQgaGVhZGVyIGZpZWxkcyBmb3IgdGhlIG1lcmdlZCBwYWNrZXRzLiBOb3RlIHRoYXQg YmVmb3JlIHJlYXNzZW1ibGluZw0KPiAtdGhlIHBhY2tldCwgVENQL0lQdjQgR1JPIGRvZXNuJ3Qg Y2hlY2sgaWYgdGhlIGNoZWNrc3VtcyBvZiBwYWNrZXRzIGFyZQ0KPiAtY29ycmVjdC4gQWxzbywg VENQL0lQdjQgR1JPIGRvZXNuJ3QgcmUtY2FsY3VsYXRlIGNoZWNrc3VtcyBmb3IgbWVyZ2VkDQo+ IC1wYWNrZXRzLg0KPiArLi4gbm90ZTo6DQo+ICsgICAgICAgIFdlIGNvbXBseSBSRkMgNjg2NCB0 byBwcm9jZXNzIHRoZSBJUHY0IElEIGZpZWxkLiBTcGVjaWZpY2FsbHksDQo+ICsgICAgICAgIHdl IGNoZWNrIElQdjQgSUQgZmllbGRzIGZvciB0aGUgcGFja2V0cyB3aG9zZSBERiBiaXQgaXMgMCBh bmQNCj4gKyAgICAgICAgaWdub3JlIElQdjQgSUQgZmllbGRzIGZvciB0aGUgcGFja2V0cyB3aG9z ZSBERiBiaXQgaXMgMS4NCj4gKyAgICAgICAgQWRkaXRpb25hbGx5LCBwYWNrZXRzIHdoaWNoIGhh dmUgZGlmZmVyZW50IHZhbHVlIG9mIERGIGJpdCBjYW4ndA0KPiArICAgICAgICBiZSBtZXJnZWQu DQo+IGRpZmYgLS1naXQgYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvaW1nL2dyby1rZXktYWxnb3Jp dGhtLnN2Zw0KPiBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9pbWcvZ3JvLWtleS1hbGdvcml0aG0u c3ZnDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjk0ZTQyZjUNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvaW1nL2dyby1rZXkt YWxnb3JpdGhtLnN2Zw0KPiBAQCAtMCwwICsxLDIyMyBAQA0KPiArPD94bWwgdmVyc2lvbj0iMS4w IiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo+ICs8IURPQ1RZUEUgc3ZnIFBV QkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4iDQo+ICJodHRwOi8vd3d3LnczLm9yZy9UUi8y MDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+DQo+ICs8IS0tIEdlbmVyYXRlZCBi eSBNaWNyb3NvZnQgVmlzaW8gMTEuMCwgU1ZHIEV4cG9ydCwgdjEuMCBncm8ta2V5LQ0KPiBhbGdv cml0aG0uc3ZnIFBhZ2UtMSAtLT4NCj4gKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw MDAvc3ZnIg0KPiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayINCj4g eG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyINCj4gKw0KPiAJeG1s bnM6dj0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS92aXNpby8yMDAzL1NWR0V4dGVuc2lv bnMvDQo+ICIgd2lkdGg9IjYuMDYxNjNpbiIgaGVpZ2h0PSIyLjY2MzE5aW4iDQo+ICsJCXZpZXdC b3g9IjAgMCA0MzYuNDM4IDE5MS43NSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY29sb3ItDQo+IGlu dGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgY2xhc3M9InN0MTAiPg0KPiArCTx2OmRvY3VtZW50 UHJvcGVydGllcyB2OmxhbmdJRD0iMTAzMyIgdjp2aWV3TWFya3VwPSJmYWxzZSIvPg0KPiArDQo+ ICsJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCj4gKwk8IVtDREFUQVsNCj4gKwkJLnN0MSB7Zmls bDp1cmwoI2dyYWQzMC00KTtzdHJva2U6IzQwNDA0MDtzdHJva2UtDQo+IGxpbmVjYXA6cm91bmQ7 c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDowLjI1fQ0KPiArCQkuc3QyIHtmaWxs OiMwMDAwMDA7Zm9udC1mYW1pbHk6Q2FsaWJyaTtmb250LXNpemU6MS4wMDAwMWVtfQ0KPiArCQku c3QzIHtmb250LXNpemU6MWVtO2ZvbnQtd2VpZ2h0OmJvbGR9DQo+ICsJCS5zdDQge2ZpbGw6IzAw MDAwMDtmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZToxLjAwMDAxZW07Zm9udC0NCj4gd2Vp Z2h0OmJvbGR9DQo+ICsJCS5zdDUge2ZvbnQtc2l6ZToxZW07Zm9udC13ZWlnaHQ6bm9ybWFsfQ0K PiArCQkuc3Q2IHttYXJrZXItZW5kOnVybCgjbXJrcjUtMzgpO3N0cm9rZTojNDA0MDQwO3N0cm9r ZS0NCj4gbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjF9 DQo+ICsJCS5zdDcge2ZpbGw6IzQwNDA0MDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzQwNDA0MDtz dHJva2UtDQo+IG9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MC4yODQwOTA5MDkwOTA5MX0NCj4gKwkJ LnN0OCB7ZmlsbDpub25lO3N0cm9rZTpub25lO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS0N Cj4gbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjAuMjV9DQo+ICsJCS5zdDkge2ZpbGw6IzAw MDAwMDtmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZTowLjgzMzMzNmVtfQ0KPiArCQkuc3Qx MCB7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO2ZvbnQtDQo+IHNpemU6MTJweDtvdmVyZmxv dzp2aXNpYmxlO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbWl0ZXJsaW1pdDozfQ0KPiAr CV1dPg0KPiArCTwvc3R5bGU+DQo+ICsNCj4gKwk8ZGVmcyBpZD0iUGF0dGVybnNfQW5kX0dyYWRp ZW50cyI+DQo+ICsJCTxsaW5lYXJHcmFkaWVudCBpZD0iZ3JhZDMwLTQiIHY6ZmlsbFBhdHRlcm49 IjMwIg0KPiB2OmZvcmVncm91bmQ9IiNjNmQwOWYiIHY6YmFja2dyb3VuZD0iI2QxZGFiNCIgeDE9 IjAiIHkxPSIxIiB4Mj0iMCINCj4geTI9IjAiPg0KPiArCQkJPHN0b3Agb2Zmc2V0PSIwIiBzdHls ZT0ic3RvcC1jb2xvcjojYzZkMDlmO3N0b3AtDQo+IG9wYWNpdHk6MSIvPg0KPiArCQkJPHN0b3Ag b2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojZDFkYWI0O3N0b3AtDQo+IG9wYWNpdHk6MSIv Pg0KPiArCQk8L2xpbmVhckdyYWRpZW50Pg0KPiArCQk8bGluZWFyR3JhZGllbnQgaWQ9ImdyYWQz MC0zNSIgdjpmaWxsUGF0dGVybj0iMzAiDQo+IHY6Zm9yZWdyb3VuZD0iI2YwZjBmMCIgdjpiYWNr Z3JvdW5kPSIjZmZmZmZmIiB4MT0iMCIgeTE9IjEiIHgyPSIwIiB5Mj0iMCI+DQo+ICsJCQk8c3Rv cCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNmMGYwZjA7c3RvcC0NCj4gb3BhY2l0eTox Ii8+DQo+ICsJCQk8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3Rv cC0NCj4gb3BhY2l0eToxIi8+DQo+ICsJCTwvbGluZWFyR3JhZGllbnQ+DQo+ICsJPC9kZWZzPg0K PiArCTxkZWZzIGlkPSJNYXJrZXJzIj4NCj4gKwkJPGcgaWQ9ImxlbmQ1Ij4NCj4gKwkJCTxwYXRo IGQ9Ik0gMiAxIEwgMCAwIEwgMS45ODExNyAtMC45OTMzODcgQyAxLjY3MTczIC0NCj4gMC4zNjQ1 MTUgMS42NzMwMSAwLjM3MjY0MSAxLjk4NDY1IDEuMDAwNDMgIiBzdHlsZT0ic3Ryb2tlOm5vbmUi Lz4NCj4gKwkJPC9nPg0KPiArCQk8bWFya2VyIGlkPSJtcmtyNS0zOCIgY2xhc3M9InN0NyIgdjph cnJvd1R5cGU9IjUiDQo+IHY6YXJyb3dTaXplPSIyIiB2OnNldGJhY2s9IjYuMTYiIHJlZlg9Ii02 LjE2IiBvcmllbnQ9ImF1dG8iDQo+ICsJCQkJbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIg0KPiBv dmVyZmxvdz0idmlzaWJsZSI+DQo+ICsJCQk8dXNlIHhsaW5rOmhyZWY9IiNsZW5kNSIgdHJhbnNm b3JtPSJzY2FsZSgtMy41MiwtDQo+IDMuNTIpICIvPg0KPiArCQk8L21hcmtlcj4NCj4gKwk8L2Rl ZnM+DQo+ICsJPGcgdjptSUQ9IjAiIHY6aW5kZXg9IjEiIHY6Z3JvdXBDb250ZXh0PSJmb3JlZ3Jv dW5kUGFnZSI+DQo+ICsJCTx0aXRsZT5QYWdlLTE8L3RpdGxlPg0KPiArCQk8djpwYWdlUHJvcGVy dGllcyB2OmRyYXdpbmdTY2FsZT0iMSIgdjpwYWdlU2NhbGU9IjEiDQo+IHY6ZHJhd2luZ1VuaXRz PSIwIiB2OnNoYWRvd09mZnNldFg9IjkiIHY6c2hhZG93T2Zmc2V0WT0iLTkiLz4NCj4gKwkJPHY6 bGF5ZXIgdjpuYW1lPSJDb25uZWN0b3IiIHY6aW5kZXg9IjAiLz4NCj4gKwkJPGcgaWQ9InNoYXBl MS0xIiB2Om1JRD0iMSIgdjpncm91cENvbnRleHQ9InNoYXBlIg0KPiB0cmFuc2Zvcm09InRyYW5z bGF0ZSgwLjI1LC0xMTcuMjUpIj4NCj4gKwkJCTx0aXRsZT5Sb3VuZGVkIHJlY3RhbmdsZTwvdGl0 bGU+DQo+ICsJCQk8ZGVzYz5DYXRlZ29yaXplIGludG8gYW4gZXhpc3RlZCDigJxmbG934oCdPC9k ZXNjPg0KPiArCQkJPHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0idmlzVmVyc2lv biINCj4gdjp2YWw9IlZUMCgxNCk6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVt ZUNvbG9ycyINCj4gdjp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJt c3ZUaGVtZUVmZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJCQk8L3Y6dXNlckRl ZnM+DQo+ICsJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDQsNCw0LDQpIi8+DQo+ICsJ CQk8djp0ZXh0UmVjdCBjeD0iOTAiIGN5PSIxNzMuNzUiIHdpZHRoPSIxODAiDQo+IGhlaWdodD0i MzYiLz4NCj4gKwkJCTxwYXRoIGQ9Ik0xNzEgMTkxLjc1IEE5LjAwMDA3IDkuMDAwMDcgLTE4MCAw IDAgMTgwDQo+IDE4Mi43NSBMMTgwIDE2NC43NSBBOS4wMDAwNyA5LjAwMDA3IC0xODAgMCAwIDE3 MSAxNTUuNzUgTDkgMTU1Ljc1DQo+ICsJCQkJCQkgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAgMCAt MA0KPiAxNjQuNzUgTDAgMTgyLjc1IEE5LjAwMDA3IDkuMDAwMDcgLTE4MCAwIDAgOSAxOTEuNzUg TDE3MSAxOTEuNzUgWiINCj4gKwkJCQkJY2xhc3M9InN0MSIvPg0KPiArCQkJPHRleHQgeD0iOC45 MSIgeT0iMTc3LjM1IiBjbGFzcz0ic3QyIg0KPiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBo IHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkNhdGVnb3JpemUgaW50bw0KPiBhbiA8dHNw YW4NCj4gKw0KPiAJY2xhc3M9InN0MyI+ZXhpc3RlZDwvdHNwYW4+PHRzcGFuIGNsYXNzPSJzdDMi IHY6bGFuZ0lEPSIyMDUyIj4NCj4gPC90c3Bhbj7igJw8dHNwYW4gY2xhc3M9InN0MyI+Zmxvdzwv dHNwYW4+4oCdPC90ZXh0PgkJPC9nPg0KPiArCQk8ZyBpZD0ic2hhcGUyLTkiIHY6bUlEPSIyIiB2 Omdyb3VwQ29udGV4dD0ic2hhcGUiDQo+IHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMjUsLTU4Ljc1 KSI+DQo+ICsJCQk8dGl0bGU+Um91bmRlZCByZWN0YW5nbGUuMjwvdGl0bGU+DQo+ICsJCQk8ZGVz Yz5TZWFyY2ggZm9yIGEg4oCcbmVpZ2hib3LigJ08L2Rlc2M+DQo+ICsJCQk8djp1c2VyRGVmcz4N Cj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJ2aXNWZXJzaW9uIg0KPiB2OnZhbD0iVlQwKDE0KToyNiIv Pg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1lQ29sb3JzIg0KPiB2OnZhbD0iVlQwKDM2 KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1lRWZmZWN0cyINCj4gdjp2YWw9 IlZUMCgxNik6MjYiLz4NCj4gKwkJCTwvdjp1c2VyRGVmcz4NCj4gKwkJCTx2OnRleHRCbG9jayB2 Om1hcmdpbnM9InJlY3QoNCw0LDQsNCkiLz4NCj4gKwkJCTx2OnRleHRSZWN0IGN4PSI5MCIgY3k9 IjE3My43NSIgd2lkdGg9IjE4MCINCj4gaGVpZ2h0PSIzNiIvPg0KPiArCQkJPHBhdGggZD0iTTE3 MSAxOTEuNzUgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAgMCAxODANCj4gMTgyLjc1IEwxODAgMTY0 Ljc1IEE5LjAwMDA3IDkuMDAwMDcgLTE4MCAwIDAgMTcxIDE1NS43NSBMOSAxNTUuNzUNCj4gKwkJ CQkJCSBBOS4wMDAwNyA5LjAwMDA3IC0xODAgMCAwIC0wDQo+IDE2NC43NSBMMCAxODIuNzUgQTku MDAwMDcgOS4wMDAwNyAtMTgwIDAgMCA5IDE5MS43NSBMMTcxIDE5MS43NSBaIg0KPiArCQkJCQlj bGFzcz0ic3QxIi8+DQo+ICsJCQk8dGV4dCB4PSIzMi4xOSIgeT0iMTc3LjM1IiBjbGFzcz0ic3Qy Ig0KPiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRh Ykxpc3QvPlNlYXJjaCBmb3IgYQ0KPiDigJw8dHNwYW4NCj4gKw0KPiAJY2xhc3M9InN0MyI+bmVp Z2hib3I8L3RzcGFuPuKAnTwvdGV4dD4JCTwvZz4NCj4gKwkJPGcgaWQ9InNoYXBlMy0xNCIgdjpt SUQ9IjMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSINCj4gdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI1 LjgxMywtMTE3LjI1KSI+DQo+ICsJCQk8dGl0bGU+Um91bmRlZCByZWN0YW5nbGUuMzwvdGl0bGU+ DQo+ICsJCQk8ZGVzYz5JbnNlcnQgYSBuZXcg4oCcZmxvd+KAnSBhbmQgc3RvcmUgdGhlDQo+IHBh Y2tldDwvZGVzYz4NCj4gKwkJCTx2OnVzZXJEZWZzPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9InZp c1ZlcnNpb24iDQo+IHY6dmFsPSJWVDAoMTQpOjI2Ii8+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0i bXN2VGhlbWVDb2xvcnMiDQo+IHY6dmFsPSJWVDAoMzYpOjI2Ii8+DQo+ICsJCQkJPHY6dWQgdjpu YW1lVT0ibXN2VGhlbWVFZmZlY3RzIg0KPiB2OnZhbD0iVlQwKDE2KToyNiIvPg0KPiArCQkJPC92 OnVzZXJEZWZzPg0KPiArCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCg0LDQsNCw0KSIv Pg0KPiArCQkJPHY6dGV4dFJlY3QgY3g9IjEwNS4xODgiIGN5PSIxNzMuNzUiIHdpZHRoPSIyMTAu MzgiDQo+IGhlaWdodD0iMzYiLz4NCj4gKwkJCTxwYXRoIGQ9Ik0yMDEuMzcgMTkxLjc1IEE5LjAw MDA3IDkuMDAwMDcgLTE4MCAwIDANCj4gMjEwLjM3IDE4Mi43NSBMMjEwLjM3IDE2NC43NSBBOS4w MDAwNyA5LjAwMDA3IC0xODAgMCAwIDIwMS4zNyAxNTUuNzUNCj4gKwkJCQkJCSBMOSAxNTUuNzUg QTkuMDAwMDcgOS4wMDAwNyAtDQo+IDE4MCAwIDAgLTAgMTY0Ljc1IEwwIDE4Mi43NSBBOS4wMDAw NyA5LjAwMDA3IC0xODAgMCAwIDkgMTkxLjc1IEwyMDEuMzcgMTkxLjc1DQo+ICsJCQkJCQkgWiIg Y2xhc3M9InN0MSIvPg0KPiArCQkJPHRleHQgeD0iNS40NSIgeT0iMTc3LjM1IiBjbGFzcz0ic3Qy Ig0KPiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRh Ykxpc3QvPkluc2VydCBhIDx0c3Bhbg0KPiArCQkJCQkJY2xhc3M9InN0MyI+bmV3DQo+IDwvdHNw YW4+4oCcPHRzcGFuIGNsYXNzPSJzdDMiPmZsb3c8L3RzcGFuPuKAnSBhbmQgPHRzcGFuIGNsYXNz PSJzdDMiPnN0b3JlDQo+IDwvdHNwYW4+dGhlIHBhY2tldDwvdGV4dD4JCTwvZz4NCj4gKwkJPGcg aWQ9InNoYXBlNC0yMSIgdjptSUQ9IjQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSINCj4gdHJhbnNm b3JtPSJ0cmFuc2xhdGUoMjI1LjI1LC01OC43NSkiPg0KPiArCQkJPHRpdGxlPlJvdW5kZWQgcmVj dGFuZ2xlLjQ8L3RpdGxlPg0KPiArCQkJPGRlc2M+U3RvcmUgdGhlIHBhY2tldDwvZGVzYz4NCj4g KwkJCTx2OnVzZXJEZWZzPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9InZpc1ZlcnNpb24iDQo+IHY6 dmFsPSJWVDAoMTQpOjI2Ii8+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0ibXN2VGhlbWVDb2xvcnMi DQo+IHY6dmFsPSJWVDAoMzYpOjI2Ii8+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0ibXN2VGhlbWVF ZmZlY3RzIg0KPiB2OnZhbD0iVlQwKDE2KToyNiIvPg0KPiArCQkJPC92OnVzZXJEZWZzPg0KPiAr CQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCg0LDQsNCw0KSIvPg0KPiArCQkJPHY6dGV4 dFJlY3QgY3g9IjgzLjI1IiBjeT0iMTczLjc1IiB3aWR0aD0iMTY2LjUiDQo+IGhlaWdodD0iMzYi Lz4NCj4gKwkJCTxwYXRoIGQ9Ik0xNTcuNSAxOTEuNzUgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAg MA0KPiAxNjYuNSAxODIuNzUgTDE2Ni41IDE2NC43NSBBOS4wMDAwNyA5LjAwMDA3IC0xODAgMCAw IDE1Ny41IDE1NS43NSBMOQ0KPiArCQkJCQkJIDE1NS43NSBBOS4wMDAwNyA5LjAwMDA3IC0xODAN Cj4gMCAwIC0wIDE2NC43NSBMMCAxODIuNzUgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAgMCA5IDE5 MS43NSBMMTU3LjUgMTkxLjc1IFoiDQo+ICsJCQkJCWNsYXNzPSJzdDEiLz4NCj4gKwkJCTx0ZXh0 IHg9IjQyLjgxIiB5PSIxNzcuMzUiIGNsYXNzPSJzdDQiDQo+IHY6bGFuZ0lEPSIxMDMzIj48djpw YXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+U3RvcmUgPHRzcGFuDQo+ICsJ CQkJCQljbGFzcz0ic3Q1Ij50aGUNCj4gcGFja2V0PC90c3Bhbj48L3RleHQ+CQk8L2c+DQo+ICsJ CTxnIGlkPSJzaGFwZTUtMjYiIHY6bUlEPSI1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiDQo+IHRy YW5zZm9ybT0idHJhbnNsYXRlKDAuMjUsLTAuMjUpIj4NCj4gKwkJCTx0aXRsZT5Sb3VuZGVkIHJl Y3RhbmdsZS41PC90aXRsZT4NCj4gKwkJCTxkZXNjPk1lcmdlIHRoZSBwYWNrZXQ8L2Rlc2M+DQo+ ICsJCQk8djp1c2VyRGVmcz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJ2aXNWZXJzaW9uIg0KPiB2 OnZhbD0iVlQwKDE0KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1lQ29sb3Jz Ig0KPiB2OnZhbD0iVlQwKDM2KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1l RWZmZWN0cyINCj4gdjp2YWw9IlZUMCgxNik6MjYiLz4NCj4gKwkJCTwvdjp1c2VyRGVmcz4NCj4g KwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoNCw0LDQsNCkiLz4NCj4gKwkJCTx2OnRl eHRSZWN0IGN4PSI5MCIgY3k9IjE3My43NSIgd2lkdGg9IjE4MCINCj4gaGVpZ2h0PSIzNiIvPg0K PiArCQkJPHBhdGggZD0iTTE3MSAxOTEuNzUgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAgMCAxODAN Cj4gMTgyLjc1IEwxODAgMTY0Ljc1IEE5LjAwMDA3IDkuMDAwMDcgLTE4MCAwIDAgMTcxIDE1NS43 NSBMOSAxNTUuNzUNCj4gKwkJCQkJCSBBOS4wMDAwNyA5LjAwMDA3IC0xODAgMCAwIC0wDQo+IDE2 NC43NSBMMCAxODIuNzUgQTkuMDAwMDcgOS4wMDAwNyAtMTgwIDAgMCA5IDE5MS43NSBMMTcxIDE5 MS43NSBaIg0KPiArCQkJCQljbGFzcz0ic3QxIi8+DQo+ICsJCQk8dGV4dCB4PSI0Ni41OSIgeT0i MTc3LjM1IiBjbGFzcz0ic3Q0Ig0KPiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9y aXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPk1lcmdlIDx0c3Bhbg0KPiArCQkJCQkJY2xhc3M9InN0 NSI+dGhlDQo+IHBhY2tldDwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KPiArCQk8ZyBpZD0ic2hhcGU2 LTMxIiB2Om1JRD0iNiIgdjpncm91cENvbnRleHQ9InNoYXBlIg0KPiB2OmxheWVyTWVtYmVyPSIw IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MS4yNSwtMTc1Ljc1KSI+DQo+ICsJCQk8dGl0bGU+RHlu YW1pYyBjb25uZWN0b3I8L3RpdGxlPg0KPiArCQkJPHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQg djpuYW1lVT0idmlzVmVyc2lvbiINCj4gdjp2YWw9IlZUMCgxNCk6MjYiLz4NCj4gKwkJCQk8djp1 ZCB2Om5hbWVVPSJtc3ZUaGVtZUNvbG9ycyINCj4gdjp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJ CQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUVmZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+ DQo+ICsJCQk8L3Y6dXNlckRlZnM+DQo+ICsJCQk8cGF0aCBkPSJNOSAxOTEuNzUgTDkgMjA4LjA5 IiBjbGFzcz0ic3Q2Ii8+DQo+ICsJCTwvZz4NCj4gKwkJPGcgaWQ9InNoYXBlNy0zOSIgdjptSUQ9 IjciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSINCj4gdjpsYXllck1lbWJlcj0iMCIgdHJhbnNmb3Jt PSJ0cmFuc2xhdGUoODEuMjUsLTExNy4yNSkiPg0KPiArCQkJPHRpdGxlPkR5bmFtaWMgY29ubmVj dG9yLjc8L3RpdGxlPg0KPiArCQkJPHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0i dmlzVmVyc2lvbiINCj4gdjp2YWw9IlZUMCgxNCk6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVV PSJtc3ZUaGVtZUNvbG9ycyINCj4gdjp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJCQk8djp1ZCB2 Om5hbWVVPSJtc3ZUaGVtZUVmZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJCQk8 L3Y6dXNlckRlZnM+DQo+ICsJCQk8cGF0aCBkPSJNOSAxOTEuNzUgTDkgMjA4LjA5IiBjbGFzcz0i c3Q2Ii8+DQo+ICsJCTwvZz4NCj4gKwkJPGcgaWQ9InNoYXBlOC00NSIgdjptSUQ9IjgiIHY6Z3Jv dXBDb250ZXh0PSJzaGFwZSINCj4gdjpsYXllck1lbWJlcj0iMCIgdHJhbnNmb3JtPSJ0cmFuc2xh dGUoODEuMjUsLTU4Ljc1KSI+DQo+ICsJCQk8dGl0bGU+RHluYW1pYyBjb25uZWN0b3IuODwvdGl0 bGU+DQo+ICsJCQk8djp1c2VyRGVmcz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJ2aXNWZXJzaW9u Ig0KPiB2OnZhbD0iVlQwKDE0KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1l Q29sb3JzIg0KPiB2OnZhbD0iVlQwKDM2KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1z dlRoZW1lRWZmZWN0cyINCj4gdjp2YWw9IlZUMCgxNik6MjYiLz4NCj4gKwkJCTwvdjp1c2VyRGVm cz4NCj4gKwkJCTxwYXRoIGQ9Ik05IDE5MS43NSBMOSAyMDguMDkiIGNsYXNzPSJzdDYiLz4NCj4g KwkJPC9nPg0KPiArCQk8ZyBpZD0ic2hhcGU5LTUxIiB2Om1JRD0iOSIgdjpncm91cENvbnRleHQ9 InNoYXBlIg0KPiB2OmxheWVyTWVtYmVyPSIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAuMjUs LTEyNi4yNSkiPg0KPiArCQkJPHRpdGxlPkR5bmFtaWMgY29ubmVjdG9yLjk8L3RpdGxlPg0KPiAr CQkJPHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0idmlzVmVyc2lvbiINCj4gdjp2 YWw9IlZUMCgxNCk6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUNvbG9ycyIN Cj4gdjp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUVm ZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJCQk8L3Y6dXNlckRlZnM+DQo+ICsJ CQk8cGF0aCBkPSJNMCAxODIuNzUgTDM5LjQgMTgyLjc1IiBjbGFzcz0ic3Q2Ii8+DQo+ICsJCTwv Zz4NCj4gKwkJPGcgaWQ9InNoYXBlMTAtNTciIHY6bUlEPSIxMCIgdjpncm91cENvbnRleHQ9InNo YXBlIg0KPiB2OmxheWVyTWVtYmVyPSIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAuMjUsLTY3 Ljc1KSI+DQo+ICsJCQk8dGl0bGU+RHluYW1pYyBjb25uZWN0b3IuMTA8L3RpdGxlPg0KPiArCQkJ PHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQgdjpuYW1lVT0idmlzVmVyc2lvbiINCj4gdjp2YWw9 IlZUMCgxNCk6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUNvbG9ycyINCj4g djp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUVmZmVj dHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJCQk8L3Y6dXNlckRlZnM+DQo+ICsJCQk8 cGF0aCBkPSJNMCAxODIuNzUgTDM4Ljg0IDE4Mi43NSIgY2xhc3M9InN0NiIvPg0KPiArCQk8L2c+ DQo+ICsJCTxnIGlkPSJzaGFwZTExLTYzIiB2Om1JRD0iMTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFw ZSINCj4gdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjUuNSwtMTczLjUpIj4NCj4gKwkJCTx0aXRsZT5T aGVldC4xMTwvdGl0bGU+DQo+ICsJCQk8ZGVzYz5wYWNrZXQ8L2Rlc2M+DQo+ICsJCQk8djp1c2Vy RGVmcz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUNvbG9ycyINCj4gdjp2YWw9IlZU MCgzNik6MjYiLz4NCj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUVmZmVjdHMiDQo+IHY6 dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJCQk8L3Y6dXNlckRlZnM+DQo+ICsJCQk8djp0ZXh0Qmxv Y2sgdjptYXJnaW5zPSJyZWN0KDQsNCw0LDQpIi8+DQo+ICsJCQk8djp0ZXh0UmVjdCBjeD0iMjQu NzUiIGN5PSIxODIuNzUiIHdpZHRoPSI0OS41Ig0KPiBoZWlnaHQ9IjE4Ii8+DQo+ICsJCQk8cmVj dCB4PSIwIiB5PSIxNzMuNzUiIHdpZHRoPSI0OS41IiBoZWlnaHQ9IjE4Ig0KPiBjbGFzcz0ic3Q4 Ii8+DQo+ICsJCQk8dGV4dCB4PSI4LjQ2IiB5PSIxODYuMzUiIGNsYXNzPSJzdDIiDQo+IHY6bGFu Z0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+cGFj a2V0PC90ZXh0Pg0KPiAJCTwvZz4NCj4gKwkJPGcgaWQ9InNoYXBlMTQtNjYiIHY6bUlEPSIxNCIg djpncm91cENvbnRleHQ9InNoYXBlIg0KPiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5OC4xMjUsLTk4 LjEyNSkiPg0KPiArCQkJPHRpdGxlPlNoZWV0LjE0PC90aXRsZT4NCj4gKwkJCTxkZXNjPmZpbmQg YSDigJxmbG934oCdPC9kZXNjPg0KPiArCQkJPHY6dXNlckRlZnM+DQo+ICsJCQkJPHY6dWQgdjpu YW1lVT0ibXN2VGhlbWVDb2xvcnMiDQo+IHY6dmFsPSJWVDAoMzYpOjI2Ii8+DQo+ICsJCQkJPHY6 dWQgdjpuYW1lVT0ibXN2VGhlbWVFZmZlY3RzIg0KPiB2OnZhbD0iVlQwKDE2KToyNiIvPg0KPiAr CQkJPC92OnVzZXJEZWZzPg0KPiArCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCg0LDQs NCw0KSIvPg0KPiArCQkJPHY6dGV4dFJlY3QgY3g9IjMyLjA2MjUiIGN5PSIxODMuODc1IiB3aWR0 aD0iNjQuMTMiDQo+IGhlaWdodD0iMTUuNzUiLz4NCj4gKwkJCTxyZWN0IHg9IjAiIHk9IjE3NiIg d2lkdGg9IjY0LjEyNSIgaGVpZ2h0PSIxNS43NSINCj4gY2xhc3M9InN0OCIvPg0KPiArCQkJPHRl eHQgeD0iNi40MSIgeT0iMTg2Ljg4IiBjbGFzcz0ic3Q5Ig0KPiB2OmxhbmdJRD0iMTAzMyI+PHY6 cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPmZpbmQgYQ0KPiDigJxmbG93 4oCdPC90ZXh0PgkJPC9nPg0KPiArCQk8ZyBpZD0ic2hhcGUxNS02OSIgdjptSUQ9IjE1IiB2Omdy b3VwQ29udGV4dD0ic2hhcGUiDQo+IHRyYW5zZm9ybT0idHJhbnNsYXRlKDk5LjI1LC0zOS42MjUp Ij4NCj4gKwkJCTx0aXRsZT5TaGVldC4xNTwvdGl0bGU+DQo+ICsJCQk8ZGVzYz5maW5kIGEg4oCc bmVpZ2hib3LigJ08L2Rlc2M+DQo+ICsJCQk8djp1c2VyRGVmcz4NCj4gKwkJCQk8djp1ZCB2Om5h bWVVPSJtc3ZUaGVtZUNvbG9ycyINCj4gdjp2YWw9IlZUMCgzNik6MjYiLz4NCj4gKwkJCQk8djp1 ZCB2Om5hbWVVPSJtc3ZUaGVtZUVmZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYpOjI2Ii8+DQo+ICsJ CQk8L3Y6dXNlckRlZnM+DQo+ICsJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDQsNCw0 LDQpIi8+DQo+ICsJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNSIgY3k9IjE4My44NzUiIHdpZHRoPSI4 MSINCj4gaGVpZ2h0PSIxNS43NSIvPg0KPiArCQkJPHJlY3QgeD0iMCIgeT0iMTc2IiB3aWR0aD0i ODEiIGhlaWdodD0iMTUuNzUiDQo+IGNsYXNzPSJzdDgiLz4NCj4gKwkJCTx0ZXh0IHg9IjUuNDgi IHk9IjE4Ni44OCIgY2xhc3M9InN0OSINCj4gdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2 Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5maW5kIGENCj4g4oCcbmVpZ2hib3LigJ08L3Rl eHQ+CQk8L2c+DQo+ICsJCTxnIGlkPSJzaGFwZTEzLTcyIiB2Om1JRD0iMTMiIHY6Z3JvdXBDb250 ZXh0PSJzaGFwZSINCj4gdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTgxLjM3NSwtNzkpIj4NCj4gKwkJ CTx0aXRsZT5TaGVldC4xMzwvdGl0bGU+DQo+ICsJCQk8ZGVzYz5ub3QgZmluZDwvZGVzYz4NCj4g KwkJCTx2OnVzZXJEZWZzPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1lQ29sb3JzIg0K PiB2OnZhbD0iVlQwKDM2KToyNiIvPg0KPiArCQkJCTx2OnVkIHY6bmFtZVU9Im1zdlRoZW1lRWZm ZWN0cyINCj4gdjp2YWw9IlZUMCgxNik6MjYiLz4NCj4gKwkJCTwvdjp1c2VyRGVmcz4NCj4gKwkJ CTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoNCw0LDQsNCkiLz4NCj4gKwkJCTx2OnRleHRS ZWN0IGN4PSIyMS4zNzUiIGN5PSIxODMuODc1IiB3aWR0aD0iNDIuNzUiDQo+IGhlaWdodD0iMTUu NzUiLz4NCj4gKwkJCTxyZWN0IHg9IjAiIHk9IjE3NiIgd2lkdGg9IjQyLjc1IiBoZWlnaHQ9IjE1 Ljc1Ig0KPiBjbGFzcz0ic3Q4Ii8+DQo+ICsJCQk8dGV4dCB4PSI1LjM4IiB5PSIxODYuODgiIGNs YXNzPSJzdDkiDQo+IHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIx Ii8+PHY6dGFiTGlzdC8+bm90IGZpbmQ8L3RleHQ+DQo+IAkJPC9nPg0KPiArCQk8ZyBpZD0ic2hh cGUxMi03NSIgdjptSUQ9IjEyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiDQo+IHRyYW5zZm9ybT0i dHJhbnNsYXRlKDE4MS4zNzUsLTEzNy41KSI+DQo+ICsJCQk8dGl0bGU+U2hlZXQuMTI8L3RpdGxl Pg0KPiArCQkJPGRlc2M+bm90IGZpbmQ8L2Rlc2M+DQo+ICsJCQk8djp1c2VyRGVmcz4NCj4gKwkJ CQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUNvbG9ycyINCj4gdjp2YWw9IlZUMCgzNik6MjYiLz4N Cj4gKwkJCQk8djp1ZCB2Om5hbWVVPSJtc3ZUaGVtZUVmZmVjdHMiDQo+IHY6dmFsPSJWVDAoMTYp OjI2Ii8+DQo+ICsJCQk8L3Y6dXNlckRlZnM+DQo+ICsJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5z PSJyZWN0KDQsNCw0LDQpIi8+DQo+ICsJCQk8djp0ZXh0UmVjdCBjeD0iMjEuMzc1IiBjeT0iMTgz Ljg3NSIgd2lkdGg9IjQyLjc1Ig0KPiBoZWlnaHQ9IjE1Ljc1Ii8+DQo+ICsJCQk8cmVjdCB4PSIw IiB5PSIxNzYiIHdpZHRoPSI0Mi43NSIgaGVpZ2h0PSIxNS43NSINCj4gY2xhc3M9InN0OCIvPg0K PiArCQkJPHRleHQgeD0iNS4zOCIgeT0iMTg2Ljg4IiBjbGFzcz0ic3Q5Ig0KPiB2OmxhbmdJRD0i MTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPm5vdCBmaW5k PC90ZXh0Pg0KPiAJCTwvZz4NCj4gKwk8L2c+DQo+ICs8L3N2Zz4NCj4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfZ3JvL2dyb190Y3A0LmMgYi9saWIvbGlicnRlX2dyby9ncm9fdGNwNC5jDQo+IGlu ZGV4IDAzZTVjY2YuLjI3YWYyM2UgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfZ3JvL2dyb190 Y3A0LmMNCj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3RjcDQuYw0KPiBAQCAtNiw4ICs2LDYg QEANCj4gICNpbmNsdWRlIDxydGVfbWJ1Zi5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4N Cj4gICNpbmNsdWRlIDxydGVfZXRoZGV2Lmg+DQo+IC0jaW5jbHVkZSA8cnRlX2lwLmg+DQo+IC0j aW5jbHVkZSA8cnRlX3RjcC5oPg0KPiANCj4gICNpbmNsdWRlICJncm9fdGNwNC5oIg0KPiANCj4g QEAgLTQ0LDIwICs0MiwyMCBAQCBncm9fdGNwNF90YmxfY3JlYXRlKHVpbnQxNl90IHNvY2tldF9p ZCwNCj4gIAl9DQo+ICAJdGJsLT5tYXhfaXRlbV9udW0gPSBlbnRyaWVzX251bTsNCj4gDQo+IC0J c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ3JvX3RjcDRfa2V5KSAqIGVudHJpZXNfbnVtOw0KPiAtCXRi bC0+a2V5cyA9IHJ0ZV96bWFsbG9jX3NvY2tldChfX2Z1bmNfXywNCj4gKwlzaXplID0gc2l6ZW9m KHN0cnVjdCBncm9fdGNwNF9mbG93KSAqIGVudHJpZXNfbnVtOw0KPiArCXRibC0+Zmxvd3MgPSBy dGVfem1hbGxvY19zb2NrZXQoX19mdW5jX18sDQo+ICAJCQlzaXplLA0KPiAgCQkJUlRFX0NBQ0hF X0xJTkVfU0laRSwNCj4gIAkJCXNvY2tldF9pZCk7DQo+IC0JaWYgKHRibC0+a2V5cyA9PSBOVUxM KSB7DQo+ICsJaWYgKHRibC0+Zmxvd3MgPT0gTlVMTCkgew0KPiAgCQlydGVfZnJlZSh0YmwtPml0 ZW1zKTsNCj4gIAkJcnRlX2ZyZWUodGJsKTsNCj4gIAkJcmV0dXJuIE5VTEw7DQo+ICAJfQ0KPiAt CS8qIElOVkFMSURfQVJSQVlfSU5ERVggaW5kaWNhdGVzIGVtcHR5IGtleSAqLw0KPiArCS8qIElO VkFMSURfQVJSQVlfSU5ERVggaW5kaWNhdGVzIGFuIGVtcHR5IGZsb3cgKi8NCj4gIAlmb3IgKGkg PSAwOyBpIDwgZW50cmllc19udW07IGkrKykNCj4gLQkJdGJsLT5rZXlzW2ldLnN0YXJ0X2luZGV4 ID0gSU5WQUxJRF9BUlJBWV9JTkRFWDsNCj4gLQl0YmwtPm1heF9rZXlfbnVtID0gZW50cmllc19u dW07DQo+ICsJCXRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBJTlZBTElEX0FSUkFZX0lOREVY Ow0KPiArCXRibC0+bWF4X2Zsb3dfbnVtID0gZW50cmllc19udW07DQo+IA0KPiAgCXJldHVybiB0 Ymw7DQo+ICB9DQo+IEBAIC02OSwxMTYgKzY3LDE1IEBAIGdyb190Y3A0X3RibF9kZXN0cm95KHZv aWQgKnRibCkNCj4gDQo+ICAJaWYgKHRjcF90YmwpIHsNCj4gIAkJcnRlX2ZyZWUodGNwX3RibC0+ aXRlbXMpOw0KPiAtCQlydGVfZnJlZSh0Y3BfdGJsLT5rZXlzKTsNCj4gKwkJcnRlX2ZyZWUodGNw X3RibC0+Zmxvd3MpOw0KPiAgCX0NCj4gIAlydGVfZnJlZSh0Y3BfdGJsKTsNCj4gIH0NCj4gDQo+ IC0vKg0KPiAtICogbWVyZ2UgdHdvIFRDUC9JUHY0IHBhY2tldHMgd2l0aG91dCB1cGRhdGluZyBj aGVja3N1bXMuDQo+IC0gKiBJZiBjbXAgaXMgbGFyZ2VyIHRoYW4gMCwgYXBwZW5kIHRoZSBuZXcg cGFja2V0IHRvIHRoZQ0KPiAtICogb3JpZ2luYWwgcGFja2V0LiBPdGhlcndpc2UsIHByZS1wZW5k IHRoZSBuZXcgcGFja2V0IHRvDQo+IC0gKiB0aGUgb3JpZ2luYWwgcGFja2V0Lg0KPiAtICovDQo+ IC1zdGF0aWMgaW5saW5lIGludA0KPiAtbWVyZ2VfdHdvX3RjcDRfcGFja2V0cyhzdHJ1Y3QgZ3Jv X3RjcDRfaXRlbSAqaXRlbV9zcmMsDQo+IC0JCXN0cnVjdCBydGVfbWJ1ZiAqcGt0LA0KPiAtCQl1 aW50MTZfdCBpcF9pZCwNCj4gLQkJdWludDMyX3Qgc2VudF9zZXEsDQo+IC0JCWludCBjbXApDQo+ IC17DQo+IC0Jc3RydWN0IHJ0ZV9tYnVmICpwa3RfaGVhZCwgKnBrdF90YWlsLCAqbGFzdHNlZzsN Cj4gLQl1aW50MTZfdCB0Y3BfZGF0YWxlbjsNCj4gLQ0KPiAtCWlmIChjbXAgPiAwKSB7DQo+IC0J CXBrdF9oZWFkID0gaXRlbV9zcmMtPmZpcnN0c2VnOw0KPiAtCQlwa3RfdGFpbCA9IHBrdDsNCj4g LQl9IGVsc2Ugew0KPiAtCQlwa3RfaGVhZCA9IHBrdDsNCj4gLQkJcGt0X3RhaWwgPSBpdGVtX3Ny Yy0+Zmlyc3RzZWc7DQo+IC0JfQ0KPiAtDQo+IC0JLyogY2hlY2sgaWYgdGhlIHBhY2tldCBsZW5n dGggd2lsbCBiZSBiZXlvbmQgdGhlIG1heCB2YWx1ZSAqLw0KPiAtCXRjcF9kYXRhbGVuID0gcGt0 X3RhaWwtPnBrdF9sZW4gLSBwa3RfdGFpbC0+bDJfbGVuIC0NCj4gLQkJcGt0X3RhaWwtPmwzX2xl biAtIHBrdF90YWlsLT5sNF9sZW47DQo+IC0JaWYgKHBrdF9oZWFkLT5wa3RfbGVuIC0gcGt0X2hl YWQtPmwyX2xlbiArIHRjcF9kYXRhbGVuID4NCj4gLQkJCVRDUDRfTUFYX0wzX0xFTkdUSCkNCj4g LQkJcmV0dXJuIDA7DQo+IC0NCj4gLQkvKiByZW1vdmUgcGFja2V0IGhlYWRlciBmb3IgdGhlIHRh aWwgcGFja2V0ICovDQo+IC0JcnRlX3BrdG1idWZfYWRqKHBrdF90YWlsLA0KPiAtCQkJcGt0X3Rh aWwtPmwyX2xlbiArDQo+IC0JCQlwa3RfdGFpbC0+bDNfbGVuICsNCj4gLQkJCXBrdF90YWlsLT5s NF9sZW4pOw0KPiAtDQo+IC0JLyogY2hhaW4gdHdvIHBhY2tldHMgdG9nZXRoZXIgKi8NCj4gLQlp ZiAoY21wID4gMCkgew0KPiAtCQlpdGVtX3NyYy0+bGFzdHNlZy0+bmV4dCA9IHBrdDsNCj4gLQkJ aXRlbV9zcmMtPmxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBrdCk7DQo+IC0JCS8qIHVw ZGF0ZSBJUCBJRCB0byB0aGUgbGFyZ2VyIHZhbHVlICovDQo+IC0JCWl0ZW1fc3JjLT5pcF9pZCA9 IGlwX2lkOw0KPiAtCX0gZWxzZSB7DQo+IC0JCWxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2Vn KHBrdCk7DQo+IC0JCWxhc3RzZWctPm5leHQgPSBpdGVtX3NyYy0+Zmlyc3RzZWc7DQo+IC0JCWl0 ZW1fc3JjLT5maXJzdHNlZyA9IHBrdDsNCj4gLQkJLyogdXBkYXRlIHNlbnRfc2VxIHRvIHRoZSBz bWFsbGVyIHZhbHVlICovDQo+IC0JCWl0ZW1fc3JjLT5zZW50X3NlcSA9IHNlbnRfc2VxOw0KPiAt CX0NCj4gLQlpdGVtX3NyYy0+bmJfbWVyZ2VkKys7DQo+IC0NCj4gLQkvKiB1cGRhdGUgbWJ1ZiBt ZXRhZGF0YSBmb3IgdGhlIG1lcmdlZCBwYWNrZXQgKi8NCj4gLQlwa3RfaGVhZC0+bmJfc2VncyAr PSBwa3RfdGFpbC0+bmJfc2VnczsNCj4gLQlwa3RfaGVhZC0+cGt0X2xlbiArPSBwa3RfdGFpbC0+ cGt0X2xlbjsNCj4gLQ0KPiAtCXJldHVybiAxOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW5saW5l IGludA0KPiAtY2hlY2tfc2VxX29wdGlvbihzdHJ1Y3QgZ3JvX3RjcDRfaXRlbSAqaXRlbSwNCj4g LQkJc3RydWN0IHRjcF9oZHIgKnRjcF9oZHIsDQo+IC0JCXVpbnQxNl90IHRjcF9obCwNCj4gLQkJ dWludDE2X3QgdGNwX2RsLA0KPiAtCQl1aW50MTZfdCBpcF9pZCwNCj4gLQkJdWludDMyX3Qgc2Vu dF9zZXEpDQo+IC17DQo+IC0Jc3RydWN0IHJ0ZV9tYnVmICpwa3QwID0gaXRlbS0+Zmlyc3RzZWc7 DQo+IC0Jc3RydWN0IGlwdjRfaGRyICppcHY0X2hkcjA7DQo+IC0Jc3RydWN0IHRjcF9oZHIgKnRj cF9oZHIwOw0KPiAtCXVpbnQxNl90IHRjcF9obDAsIHRjcF9kbDA7DQo+IC0JdWludDE2X3QgbGVu Ow0KPiAtDQo+IC0JaXB2NF9oZHIwID0gKHN0cnVjdCBpcHY0X2hkciAqKShydGVfcGt0bWJ1Zl9t dG9kKHBrdDAsIGNoYXIgKikgKw0KPiAtCQkJcGt0MC0+bDJfbGVuKTsNCj4gLQl0Y3BfaGRyMCA9 IChzdHJ1Y3QgdGNwX2hkciAqKSgoY2hhciAqKWlwdjRfaGRyMCArIHBrdDAtPmwzX2xlbik7DQo+ IC0JdGNwX2hsMCA9IHBrdDAtPmw0X2xlbjsNCj4gLQ0KPiAtCS8qIGNoZWNrIGlmIFRDUCBvcHRp b24gZmllbGRzIGVxdWFsLiBJZiBub3QsIHJldHVybiAwLiAqLw0KPiAtCWxlbiA9IFJURV9NQVgo dGNwX2hsLCB0Y3BfaGwwKSAtIHNpemVvZihzdHJ1Y3QgdGNwX2hkcik7DQo+IC0JaWYgKCh0Y3Bf aGwgIT0gdGNwX2hsMCkgfHwNCj4gLQkJCSgobGVuID4gMCkgJiYgKG1lbWNtcCh0Y3BfaGRyICsg MSwNCj4gLQkJCQkJdGNwX2hkcjAgKyAxLA0KPiAtCQkJCQlsZW4pICE9IDApKSkNCj4gLQkJcmV0 dXJuIDA7DQo+IC0NCj4gLQkvKiBjaGVjayBpZiB0aGUgdHdvIHBhY2tldHMgYXJlIG5laWdoYm9y cyAqLw0KPiAtCXRjcF9kbDAgPSBwa3QwLT5wa3RfbGVuIC0gcGt0MC0+bDJfbGVuIC0gcGt0MC0+ bDNfbGVuIC0gdGNwX2hsMDsNCj4gLQlpZiAoKHNlbnRfc2VxID09IChpdGVtLT5zZW50X3NlcSAr IHRjcF9kbDApKSAmJg0KPiAtCQkJKGlwX2lkID09IChpdGVtLT5pcF9pZCArIDEpKSkNCj4gLQkJ LyogYXBwZW5kIHRoZSBuZXcgcGFja2V0ICovDQo+IC0JCXJldHVybiAxOw0KPiAtCWVsc2UgaWYg KCgoc2VudF9zZXEgKyB0Y3BfZGwpID09IGl0ZW0tPnNlbnRfc2VxKSAmJg0KPiAtCQkJKChpcF9p ZCArIGl0ZW0tPm5iX21lcmdlZCkgPT0gaXRlbS0+aXBfaWQpKQ0KPiAtCQkvKiBwcmUtcGVuZCB0 aGUgbmV3IHBhY2tldCAqLw0KPiAtCQlyZXR1cm4gLTE7DQo+IC0JZWxzZQ0KPiAtCQlyZXR1cm4g MDsNCj4gLX0NCj4gLQ0KPiAgc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiAgZmluZF9hbl9lbXB0 eV9pdGVtKHN0cnVjdCBncm9fdGNwNF90YmwgKnRibCkNCj4gIHsNCj4gLQl1aW50MzJfdCBpOw0K PiAtCXVpbnQzMl90IG1heF9pdGVtX251bSA9IHRibC0+bWF4X2l0ZW1fbnVtOw0KPiArCXVpbnQz Ml90IG1heF9pdGVtX251bSA9IHRibC0+bWF4X2l0ZW1fbnVtLCBpOw0KPiANCj4gIAlmb3IgKGkg PSAwOyBpIDwgbWF4X2l0ZW1fbnVtOyBpKyspDQo+ICAJCWlmICh0YmwtPml0ZW1zW2ldLmZpcnN0 c2VnID09IE5VTEwpDQo+IEBAIC0xODcsMTMgKzg0LDEyIEBAIGZpbmRfYW5fZW1wdHlfaXRlbShz dHJ1Y3QgZ3JvX3RjcDRfdGJsICp0YmwpDQo+ICB9DQo+IA0KPiAgc3RhdGljIGlubGluZSB1aW50 MzJfdA0KPiAtZmluZF9hbl9lbXB0eV9rZXkoc3RydWN0IGdyb190Y3A0X3RibCAqdGJsKQ0KPiAr ZmluZF9hbl9lbXB0eV9mbG93KHN0cnVjdCBncm9fdGNwNF90YmwgKnRibCkNCj4gIHsNCj4gLQl1 aW50MzJfdCBpOw0KPiAtCXVpbnQzMl90IG1heF9rZXlfbnVtID0gdGJsLT5tYXhfa2V5X251bTsN Cj4gKwl1aW50MzJfdCBtYXhfZmxvd19udW0gPSB0YmwtPm1heF9mbG93X251bSwgaTsNCj4gDQo+ IC0JZm9yIChpID0gMDsgaSA8IG1heF9rZXlfbnVtOyBpKyspDQo+IC0JCWlmICh0YmwtPmtleXNb aV0uc3RhcnRfaW5kZXggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkNCj4gKwlmb3IgKGkgPSAwOyBp IDwgbWF4X2Zsb3dfbnVtOyBpKyspDQo+ICsJCWlmICh0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4 ID09IElOVkFMSURfQVJSQVlfSU5ERVgpDQo+ICAJCQlyZXR1cm4gaTsNCj4gIAlyZXR1cm4gSU5W QUxJRF9BUlJBWV9JTkRFWDsNCj4gIH0NCj4gQEAgLTIwMSwxMCArOTcsMTEgQEAgZmluZF9hbl9l bXB0eV9rZXkoc3RydWN0IGdyb190Y3A0X3RibCAqdGJsKQ0KPiAgc3RhdGljIGlubGluZSB1aW50 MzJfdA0KPiAgaW5zZXJ0X25ld19pdGVtKHN0cnVjdCBncm9fdGNwNF90YmwgKnRibCwNCj4gIAkJ c3RydWN0IHJ0ZV9tYnVmICpwa3QsDQo+IC0JCXVpbnQxNl90IGlwX2lkLA0KPiAtCQl1aW50MzJf dCBzZW50X3NlcSwNCj4gKwkJdWludDY0X3Qgc3RhcnRfdGltZSwNCj4gIAkJdWludDMyX3QgcHJl dl9pZHgsDQo+IC0JCXVpbnQ2NF90IHN0YXJ0X3RpbWUpDQo+ICsJCXVpbnQzMl90IHNlbnRfc2Vx LA0KPiArCQl1aW50MTZfdCBpcF9pZCwNCj4gKwkJdWludDhfdCBpc19hdG9taWMpDQo+ICB7DQo+ ICAJdWludDMyX3QgaXRlbV9pZHg7DQo+IA0KPiBAQCAtMjE5LDkgKzExNiwxMCBAQCBpbnNlcnRf bmV3X2l0ZW0oc3RydWN0IGdyb190Y3A0X3RibCAqdGJsLA0KPiAgCXRibC0+aXRlbXNbaXRlbV9p ZHhdLnNlbnRfc2VxID0gc2VudF9zZXE7DQo+ICAJdGJsLT5pdGVtc1tpdGVtX2lkeF0uaXBfaWQg PSBpcF9pZDsNCj4gIAl0YmwtPml0ZW1zW2l0ZW1faWR4XS5uYl9tZXJnZWQgPSAxOw0KPiArCXRi bC0+aXRlbXNbaXRlbV9pZHhdLmlzX2F0b21pYyA9IGlzX2F0b21pYzsNCj4gIAl0YmwtPml0ZW1f bnVtKys7DQo+IA0KPiAtCS8qIGlmIHRoZSBwcmV2aW91cyBwYWNrZXQgZXhpc3RzLCBjaGFpbiB0 aGUgbmV3IG9uZSB3aXRoIGl0ICovDQo+ICsJLyogSWYgdGhlIHByZXZpb3VzIHBhY2tldCBleGlz dHMsIGNoYWluIHRoZW0gdG9nZXRoZXIuICovDQo+ICAJaWYgKHByZXZfaWR4ICE9IElOVkFMSURf QVJSQVlfSU5ERVgpIHsNCj4gIAkJdGJsLT5pdGVtc1tpdGVtX2lkeF0ubmV4dF9wa3RfaWR4ID0N Cj4gIAkJCXRibC0+aXRlbXNbcHJldl9pZHhdLm5leHRfcGt0X2lkeDsNCj4gQEAgLTIzMiwxMiAr MTMwLDEzIEBAIGluc2VydF9uZXdfaXRlbShzdHJ1Y3QgZ3JvX3RjcDRfdGJsICp0YmwsDQo+ICB9 DQo+IA0KPiAgc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiAtZGVsZXRlX2l0ZW0oc3RydWN0IGdy b190Y3A0X3RibCAqdGJsLCB1aW50MzJfdCBpdGVtX2lkeCwNCj4gK2RlbGV0ZV9pdGVtKHN0cnVj dCBncm9fdGNwNF90YmwgKnRibCwNCj4gKwkJdWludDMyX3QgaXRlbV9pZHgsDQo+ICAJCXVpbnQz Ml90IHByZXZfaXRlbV9pZHgpDQo+ICB7DQo+ICAJdWludDMyX3QgbmV4dF9pZHggPSB0YmwtPml0 ZW1zW2l0ZW1faWR4XS5uZXh0X3BrdF9pZHg7DQo+IA0KPiAtCS8qIHNldCBOVUxMIHRvIGZpcnN0 c2VnIHRvIGluZGljYXRlIGl0J3MgYW4gZW1wdHkgaXRlbSAqLw0KPiArCS8qIE5VTEwgaW5kaWNh dGVzIGFuIGVtcHR5IGl0ZW0uICovDQo+ICAJdGJsLT5pdGVtc1tpdGVtX2lkeF0uZmlyc3RzZWcg PSBOVUxMOw0KPiAgCXRibC0+aXRlbV9udW0tLTsNCj4gIAlpZiAocHJldl9pdGVtX2lkeCAhPSBJ TlZBTElEX0FSUkFZX0lOREVYKQ0KPiBAQCAtMjQ3LDUzICsxNDYsMzMgQEAgZGVsZXRlX2l0ZW0o c3RydWN0IGdyb190Y3A0X3RibCAqdGJsLCB1aW50MzJfdA0KPiBpdGVtX2lkeCwNCj4gIH0NCj4g DQo+ICBzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+IC1pbnNlcnRfbmV3X2tleShzdHJ1Y3QgZ3Jv X3RjcDRfdGJsICp0YmwsDQo+IC0JCXN0cnVjdCB0Y3A0X2tleSAqa2V5X3NyYywNCj4gK2luc2Vy dF9uZXdfZmxvdyhzdHJ1Y3QgZ3JvX3RjcDRfdGJsICp0YmwsDQo+ICsJCXN0cnVjdCB0Y3A0X2Zs b3dfa2V5ICpzcmMsDQo+ICAJCXVpbnQzMl90IGl0ZW1faWR4KQ0KPiAgew0KPiAtCXN0cnVjdCB0 Y3A0X2tleSAqa2V5X2RzdDsNCj4gLQl1aW50MzJfdCBrZXlfaWR4Ow0KPiArCXN0cnVjdCB0Y3A0 X2Zsb3dfa2V5ICpkc3Q7DQo+ICsJdWludDMyX3QgZmxvd19pZHg7DQo+IA0KPiAtCWtleV9pZHgg PSBmaW5kX2FuX2VtcHR5X2tleSh0YmwpOw0KPiAtCWlmIChrZXlfaWR4ID09IElOVkFMSURfQVJS QVlfSU5ERVgpDQo+ICsJZmxvd19pZHggPSBmaW5kX2FuX2VtcHR5X2Zsb3codGJsKTsNCj4gKwlp ZiAodW5saWtlbHkoZmxvd19pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkpDQo+ICAJCXJldHVy biBJTlZBTElEX0FSUkFZX0lOREVYOw0KPiANCj4gLQlrZXlfZHN0ID0gJih0YmwtPmtleXNba2V5 X2lkeF0ua2V5KTsNCj4gKwlkc3QgPSAmKHRibC0+Zmxvd3NbZmxvd19pZHhdLmtleSk7DQo+IA0K PiAtCWV0aGVyX2FkZHJfY29weSgmKGtleV9zcmMtPmV0aF9zYWRkciksICYoa2V5X2RzdC0+ZXRo X3NhZGRyKSk7DQo+IC0JZXRoZXJfYWRkcl9jb3B5KCYoa2V5X3NyYy0+ZXRoX2RhZGRyKSwgJihr ZXlfZHN0LT5ldGhfZGFkZHIpKTsNCj4gLQlrZXlfZHN0LT5pcF9zcmNfYWRkciA9IGtleV9zcmMt PmlwX3NyY19hZGRyOw0KPiAtCWtleV9kc3QtPmlwX2RzdF9hZGRyID0ga2V5X3NyYy0+aXBfZHN0 X2FkZHI7DQo+IC0Ja2V5X2RzdC0+cmVjdl9hY2sgPSBrZXlfc3JjLT5yZWN2X2FjazsNCj4gLQlr ZXlfZHN0LT5zcmNfcG9ydCA9IGtleV9zcmMtPnNyY19wb3J0Ow0KPiAtCWtleV9kc3QtPmRzdF9w b3J0ID0ga2V5X3NyYy0+ZHN0X3BvcnQ7DQo+ICsJZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5ldGhf c2FkZHIpLCAmKGRzdC0+ZXRoX3NhZGRyKSk7DQo+ICsJZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5l dGhfZGFkZHIpLCAmKGRzdC0+ZXRoX2RhZGRyKSk7DQo+ICsJZHN0LT5pcF9zcmNfYWRkciA9IHNy Yy0+aXBfc3JjX2FkZHI7DQo+ICsJZHN0LT5pcF9kc3RfYWRkciA9IHNyYy0+aXBfZHN0X2FkZHI7 DQo+ICsJZHN0LT5yZWN2X2FjayA9IHNyYy0+cmVjdl9hY2s7DQo+ICsJZHN0LT5zcmNfcG9ydCA9 IHNyYy0+c3JjX3BvcnQ7DQo+ICsJZHN0LT5kc3RfcG9ydCA9IHNyYy0+ZHN0X3BvcnQ7DQo+IA0K PiAtCS8qIG5vbi1JTlZBTElEX0FSUkFZX0lOREVYIHZhbHVlIGluZGljYXRlcyB0aGlzIGtleSBp cyB2YWxpZCAqLw0KPiAtCXRibC0+a2V5c1trZXlfaWR4XS5zdGFydF9pbmRleCA9IGl0ZW1faWR4 Ow0KPiAtCXRibC0+a2V5X251bSsrOw0KPiArCXRibC0+Zmxvd3NbZmxvd19pZHhdLnN0YXJ0X2lu ZGV4ID0gaXRlbV9pZHg7DQo+ICsJdGJsLT5mbG93X251bSsrOw0KPiANCj4gLQlyZXR1cm4ga2V5 X2lkeDsNCj4gKwlyZXR1cm4gZmxvd19pZHg7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGlubGluZSBp bnQNCj4gLWlzX3NhbWVfa2V5KHN0cnVjdCB0Y3A0X2tleSBrMSwgc3RydWN0IHRjcDRfa2V5IGsy KQ0KPiAtew0KPiAtCWlmIChpc19zYW1lX2V0aGVyX2FkZHIoJmsxLmV0aF9zYWRkciwgJmsyLmV0 aF9zYWRkcikgPT0gMCkNCj4gLQkJcmV0dXJuIDA7DQo+IC0NCj4gLQlpZiAoaXNfc2FtZV9ldGhl cl9hZGRyKCZrMS5ldGhfZGFkZHIsICZrMi5ldGhfZGFkZHIpID09IDApDQo+IC0JCXJldHVybiAw Ow0KPiAtDQo+IC0JcmV0dXJuICgoazEuaXBfc3JjX2FkZHIgPT0gazIuaXBfc3JjX2FkZHIpICYm DQo+IC0JCQkoazEuaXBfZHN0X2FkZHIgPT0gazIuaXBfZHN0X2FkZHIpICYmDQo+IC0JCQkoazEu cmVjdl9hY2sgPT0gazIucmVjdl9hY2spICYmDQo+IC0JCQkoazEuc3JjX3BvcnQgPT0gazIuc3Jj X3BvcnQpICYmDQo+IC0JCQkoazEuZHN0X3BvcnQgPT0gazIuZHN0X3BvcnQpKTsNCj4gLX0NCj4g LQ0KPiAtLyoNCj4gLSAqIHVwZGF0ZSBwYWNrZXQgbGVuZ3RoIGZvciB0aGUgZmx1c2hlZCBwYWNr ZXQuDQo+IC0gKi8NCj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0KPiAgdXBkYXRlX2hlYWRlcihzdHJ1 Y3QgZ3JvX3RjcDRfaXRlbSAqaXRlbSkNCj4gIHsNCj4gQEAgLTMxNSw4NCArMTk0LDEwNiBAQCBn cm9fdGNwNF9yZWFzc2VtYmxlKHN0cnVjdCBydGVfbWJ1ZiAqcGt0LA0KPiAgCXN0cnVjdCBpcHY0 X2hkciAqaXB2NF9oZHI7DQo+ICAJc3RydWN0IHRjcF9oZHIgKnRjcF9oZHI7DQo+ICAJdWludDMy X3Qgc2VudF9zZXE7DQo+IC0JdWludDE2X3QgdGNwX2RsLCBpcF9pZDsNCj4gKwl1aW50MTZfdCB0 Y3BfZGwsIGlwX2lkLCBmcmFnX29mZiwgaGRyX2xlbjsNCj4gKwl1aW50OF90IGlzX2F0b21pYzsN Cj4gDQo+IC0Jc3RydWN0IHRjcDRfa2V5IGtleTsNCj4gKwlzdHJ1Y3QgdGNwNF9mbG93X2tleSBr ZXk7DQo+ICAJdWludDMyX3QgY3VyX2lkeCwgcHJldl9pZHgsIGl0ZW1faWR4Ow0KPiAtCXVpbnQz Ml90IGksIG1heF9rZXlfbnVtOw0KPiArCXVpbnQzMl90IGksIG1heF9mbG93X251bSwgbGVmdF9m bG93X251bTsNCj4gIAlpbnQgY21wOw0KPiArCXVpbnQ4X3QgZmluZDsNCj4gDQo+ICAJZXRoX2hk ciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgZXRoZXJfaGRyICopOw0KPiAgCWlwdjRf aGRyID0gKHN0cnVjdCBpcHY0X2hkciAqKSgoY2hhciAqKWV0aF9oZHIgKyBwa3QtPmwyX2xlbik7 DQo+ICAJdGNwX2hkciA9IChzdHJ1Y3QgdGNwX2hkciAqKSgoY2hhciAqKWlwdjRfaGRyICsgcGt0 LT5sM19sZW4pOw0KPiArCWhkcl9sZW4gPSBwa3QtPmwyX2xlbiArIHBrdC0+bDNfbGVuICsgcGt0 LT5sNF9sZW47DQo+IA0KPiAgCS8qDQo+IC0JICogaWYgRklOLCBTWU4sIFJTVCwgUFNILCBVUkcs IEVDRSBvcg0KPiAtCSAqIENXUiBpcyBzZXQsIHJldHVybiBpbW1lZGlhdGVseS4NCj4gKwkgKiBE b24ndCBwcm9jZXNzIHRoZSBwYWNrZXQgd2hpY2ggaGFzIEZJTiwgU1lOLCBSU1QsIFBTSCwgVVJH LCBFQ0UNCj4gKwkgKiBvciBDV1Igc2V0Lg0KPiAgCSAqLw0KPiAgCWlmICh0Y3BfaGRyLT50Y3Bf ZmxhZ3MgIT0gVENQX0FDS19GTEFHKQ0KPiAgCQlyZXR1cm4gLTE7DQo+IC0JLyogaWYgcGF5bG9h ZCBsZW5ndGggaXMgMCwgcmV0dXJuIGltbWVkaWF0ZWx5ICovDQo+IC0JdGNwX2RsID0gcnRlX2Jl X3RvX2NwdV8xNihpcHY0X2hkci0+dG90YWxfbGVuZ3RoKSAtIHBrdC0+bDNfbGVuIC0NCj4gLQkJ cGt0LT5sNF9sZW47DQo+IC0JaWYgKHRjcF9kbCA9PSAwKQ0KPiArCS8qDQo+ICsJICogRG9uJ3Qg cHJvY2VzcyB0aGUgcGFja2V0IHdob3NlIHBheWxvYWQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvcg0K PiArCSAqIGVxdWFsIHRvIDAuDQo+ICsJICovDQo+ICsJdGNwX2RsID0gcGt0LT5wa3RfbGVuIC0g aGRyX2xlbjsNCj4gKwlpZiAodGNwX2RsIDw9IDApDQo+ICAJCXJldHVybiAtMTsNCj4gDQo+IC0J aXBfaWQgPSBydGVfYmVfdG9fY3B1XzE2KGlwdjRfaGRyLT5wYWNrZXRfaWQpOw0KPiArCS8qDQo+ ICsJICogU2F2ZSBJUHY0IElEIGZvciB0aGUgcGFja2V0IHdob3NlIERGIGJpdCBpcyAwLiBGb3Ig dGhlIHBhY2tldA0KPiArCSAqIHdob3NlIERGIGJpdCBpcyAxLCBJUHY0IElEIGlzIGlnbm9yZWQu DQo+ICsJICovDQo+ICsJZnJhZ19vZmYgPSBydGVfYmVfdG9fY3B1XzE2KGlwdjRfaGRyLT5mcmFn bWVudF9vZmZzZXQpOw0KPiArCWlzX2F0b21pYyA9IChmcmFnX29mZiAmIElQVjRfSERSX0RGX0ZM QUcpID09IElQVjRfSERSX0RGX0ZMQUc7DQo+ICsJaXBfaWQgPSBpc19hdG9taWMgPyAwIDogcnRl X2JlX3RvX2NwdV8xNihpcHY0X2hkci0+cGFja2V0X2lkKTsNCj4gIAlzZW50X3NlcSA9IHJ0ZV9i ZV90b19jcHVfMzIodGNwX2hkci0+c2VudF9zZXEpOw0KPiANCj4gIAlldGhlcl9hZGRyX2NvcHko JihldGhfaGRyLT5zX2FkZHIpLCAmKGtleS5ldGhfc2FkZHIpKTsNCj4gIAlldGhlcl9hZGRyX2Nv cHkoJihldGhfaGRyLT5kX2FkZHIpLCAmKGtleS5ldGhfZGFkZHIpKTsNCj4gIAlrZXkuaXBfc3Jj X2FkZHIgPSBpcHY0X2hkci0+c3JjX2FkZHI7DQo+ICAJa2V5LmlwX2RzdF9hZGRyID0gaXB2NF9o ZHItPmRzdF9hZGRyOw0KPiArCWtleS5yZWN2X2FjayA9IHRjcF9oZHItPnJlY3ZfYWNrOw0KPiAg CWtleS5zcmNfcG9ydCA9IHRjcF9oZHItPnNyY19wb3J0Ow0KPiAgCWtleS5kc3RfcG9ydCA9IHRj cF9oZHItPmRzdF9wb3J0Ow0KPiAtCWtleS5yZWN2X2FjayA9IHRjcF9oZHItPnJlY3ZfYWNrOw0K PiANCj4gLQkvKiBzZWFyY2ggZm9yIGEga2V5ICovDQo+IC0JbWF4X2tleV9udW0gPSB0YmwtPm1h eF9rZXlfbnVtOw0KPiAtCWZvciAoaSA9IDA7IGkgPCBtYXhfa2V5X251bTsgaSsrKSB7DQo+IC0J CWlmICgodGJsLT5rZXlzW2ldLnN0YXJ0X2luZGV4ICE9IElOVkFMSURfQVJSQVlfSU5ERVgpICYm DQo+IC0JCQkJaXNfc2FtZV9rZXkodGJsLT5rZXlzW2ldLmtleSwga2V5KSkNCj4gLQkJCWJyZWFr Ow0KPiArCS8qIFNlYXJjaCBmb3IgYSBtYXRjaGVkIGZsb3cuICovDQo+ICsJbWF4X2Zsb3dfbnVt ID0gdGJsLT5tYXhfZmxvd19udW07DQo+ICsJbGVmdF9mbG93X251bSA9IHRibC0+Zmxvd19udW07 DQo+ICsJZmluZCA9IDA7DQo+ICsJZm9yIChpID0gMDsgaSA8IG1heF9mbG93X251bSAmJiBsZWZ0 X2Zsb3dfbnVtOyBpKyspIHsNCj4gKwkJaWYgKHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggIT0g SU5WQUxJRF9BUlJBWV9JTkRFWCkgew0KPiArCQkJaWYgKGlzX3NhbWVfdGNwNF9mbG93KHRibC0+ Zmxvd3NbaV0ua2V5LCBrZXkpKSB7DQo+ICsJCQkJZmluZCA9IDE7DQo+ICsJCQkJYnJlYWs7DQo+ ICsJCQl9DQo+ICsJCQlsZWZ0X2Zsb3dfbnVtLS07DQo+ICsJCX0NCj4gIAl9DQo+IA0KPiAtCS8q IGNhbid0IGZpbmQgYSBrZXksIHNvIGluc2VydCBhIG5ldyBrZXkgYW5kIGEgbmV3IGl0ZW0uICov DQo+IC0JaWYgKGkgPT0gdGJsLT5tYXhfa2V5X251bSkgew0KPiAtCQlpdGVtX2lkeCA9IGluc2Vy dF9uZXdfaXRlbSh0YmwsIHBrdCwgaXBfaWQsIHNlbnRfc2VxLA0KPiAtCQkJCUlOVkFMSURfQVJS QVlfSU5ERVgsIHN0YXJ0X3RpbWUpOw0KPiArCS8qDQo+ICsJICogRmFpbCB0byBmaW5kIGEgbWF0 Y2hlZCBmbG93LiBJbnNlcnQgYSBuZXcgZmxvdyBhbmQgc3RvcmUgdGhlDQo+ICsJICogcGFja2V0 IGludG8gdGhlIGZsb3cuDQo+ICsJICovDQo+ICsJaWYgKGZpbmQgPT0gMCkgew0KPiArCQlpdGVt X2lkeCA9IGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwNCj4gKwkJCQlJTlZB TElEX0FSUkFZX0lOREVYLCBzZW50X3NlcSwgaXBfaWQsDQo+ICsJCQkJaXNfYXRvbWljKTsNCj4g IAkJaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpDQo+ICAJCQlyZXR1cm4gLTE7 DQo+IC0JCWlmIChpbnNlcnRfbmV3X2tleSh0YmwsICZrZXksIGl0ZW1faWR4KSA9PQ0KPiArCQlp ZiAoaW5zZXJ0X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09DQo+ICAJCQkJSU5WQUxJ RF9BUlJBWV9JTkRFWCkgew0KPiAtCQkJLyoNCj4gLQkJCSAqIGZhaWwgdG8gaW5zZXJ0IGEgbmV3 IGtleSwgc28NCj4gLQkJCSAqIGRlbGV0ZSB0aGUgaW5zZXJ0ZWQgaXRlbQ0KPiAtCQkJICovDQo+ ICsJCQkvKiBGYWlsIHRvIGluc2VydCBhIG5ldyBmbG93LiAqLw0KPiAgCQkJZGVsZXRlX2l0ZW0o dGJsLCBpdGVtX2lkeCwgSU5WQUxJRF9BUlJBWV9JTkRFWCk7DQo+ICAJCQlyZXR1cm4gLTE7DQo+ ICAJCX0NCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gLQkvKiB0cmF2ZXJzZSBhbGwgcGFj a2V0cyBpbiB0aGUgaXRlbSBncm91cCB0byBmaW5kIG9uZSB0byBtZXJnZSAqLw0KPiAtCWN1cl9p ZHggPSB0YmwtPmtleXNbaV0uc3RhcnRfaW5kZXg7DQo+ICsJLyoNCj4gKwkgKiBDaGVjayBhbGwg cGFja2V0cyBpbiB0aGUgZmxvdyBhbmQgdHJ5IHRvIGZpbmQgYSBuZWlnaGJvciBmb3INCj4gKwkg KiB0aGUgaW5wdXQgcGFja2V0Lg0KPiArCSAqLw0KPiArCWN1cl9pZHggPSB0YmwtPmZsb3dzW2ld LnN0YXJ0X2luZGV4Ow0KPiAgCXByZXZfaWR4ID0gY3VyX2lkeDsNCj4gIAlkbyB7DQo+ICAJCWNt cCA9IGNoZWNrX3NlcV9vcHRpb24oJih0YmwtPml0ZW1zW2N1cl9pZHhdKSwgdGNwX2hkciwNCj4g LQkJCQlwa3QtPmw0X2xlbiwgdGNwX2RsLCBpcF9pZCwgc2VudF9zZXEpOw0KPiArCQkJCXNlbnRf c2VxLCBpcF9pZCwgcGt0LT5sNF9sZW4sIHRjcF9kbCwgMCwNCj4gKwkJCQlpc19hdG9taWMpOw0K PiAgCQlpZiAoY21wKSB7DQo+ICAJCQlpZiAobWVyZ2VfdHdvX3RjcDRfcGFja2V0cygmKHRibC0+ aXRlbXNbY3VyX2lkeF0pLA0KPiAtCQkJCQkJcGt0LCBpcF9pZCwNCj4gLQkJCQkJCXNlbnRfc2Vx LCBjbXApKQ0KPiArCQkJCQkJcGt0LCBjbXAsIHNlbnRfc2VxLCBpcF9pZCwgMCkpDQo+ICAJCQkJ cmV0dXJuIDE7DQo+ICAJCQkvKg0KPiAtCQkJICogZmFpbCB0byBtZXJnZSB0d28gcGFja2V0cyBz aW5jZSB0aGUgcGFja2V0DQo+IC0JCQkgKiBsZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhl IG1heCB2YWx1ZS4NCj4gLQkJCSAqIFNvIGluc2VydCB0aGUgcGFja2V0IGludG8gdGhlIGl0ZW0g Z3JvdXAuDQo+ICsJCQkgKiBGYWlsIHRvIG1lcmdlIHRoZSB0d28gcGFja2V0cywgYXMgdGhlIHBh Y2tldA0KPiArCQkJICogbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHZhbHVlLiBTdG9y ZQ0KPiArCQkJICogdGhlIHBhY2tldCBpbnRvIHRoZSBmbG93Lg0KPiAgCQkJICovDQo+IC0JCQlp ZiAoaW5zZXJ0X25ld19pdGVtKHRibCwgcGt0LCBpcF9pZCwgc2VudF9zZXEsDQo+IC0JCQkJCQlw cmV2X2lkeCwgc3RhcnRfdGltZSkgPT0NCj4gKwkJCWlmIChpbnNlcnRfbmV3X2l0ZW0odGJsLCBw a3QsIHN0YXJ0X3RpbWUsIHByZXZfaWR4LA0KPiArCQkJCQkJc2VudF9zZXEsIGlwX2lkLA0KPiAr CQkJCQkJaXNfYXRvbWljKSA9PQ0KPiAgCQkJCQlJTlZBTElEX0FSUkFZX0lOREVYKQ0KPiAgCQkJ CXJldHVybiAtMTsNCj4gIAkJCXJldHVybiAwOw0KPiBAQCAtNDAxLDEyICszMDIsOSBAQCBncm9f dGNwNF9yZWFzc2VtYmxlKHN0cnVjdCBydGVfbWJ1ZiAqcGt0LA0KPiAgCQljdXJfaWR4ID0gdGJs LT5pdGVtc1tjdXJfaWR4XS5uZXh0X3BrdF9pZHg7DQo+ICAJfSB3aGlsZSAoY3VyX2lkeCAhPSBJ TlZBTElEX0FSUkFZX0lOREVYKTsNCj4gDQo+IC0JLyoNCj4gLQkgKiBjYW4ndCBmaW5kIGEgcGFj a2V0IGluIHRoZSBpdGVtIGdyb3VwIHRvIG1lcmdlLA0KPiAtCSAqIHNvIGluc2VydCB0aGUgcGFj a2V0IGludG8gdGhlIGl0ZW0gZ3JvdXAuDQo+IC0JICovDQo+IC0JaWYgKGluc2VydF9uZXdfaXRl bSh0YmwsIHBrdCwgaXBfaWQsIHNlbnRfc2VxLCBwcmV2X2lkeCwNCj4gLQkJCQlzdGFydF90aW1l KSA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQ0KPiArCS8qIEZhaWwgdG8gZmluZCBhIG5laWdoYm9y LCBzbyBzdG9yZSB0aGUgcGFja2V0IGludG8gdGhlIGZsb3cuICovDQo+ICsJaWYgKGluc2VydF9u ZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwgcHJldl9pZHgsIHNlbnRfc2VxLA0KPiArCQkJ CWlwX2lkLCBpc19hdG9taWMpID09IElOVkFMSURfQVJSQVlfSU5ERVgpDQo+ICAJCXJldHVybiAt MTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+IEBAIC00MTgsNDYgKzMxNiwzNSBAQCBncm9fdGNwNF90 YmxfdGltZW91dF9mbHVzaChzdHJ1Y3QgZ3JvX3RjcDRfdGJsDQo+ICp0YmwsDQo+ICAJCXN0cnVj dCBydGVfbWJ1ZiAqKm91dCwNCj4gIAkJdWludDE2X3QgbmJfb3V0KQ0KPiAgew0KPiAtCXVpbnQx Nl90IGsgPSAwOw0KPiArCXVpbnQzMl90IG1heF9mbG93X251bSA9IHRibC0+bWF4X2Zsb3dfbnVt Ow0KPiAgCXVpbnQzMl90IGksIGo7DQo+IC0JdWludDMyX3QgbWF4X2tleV9udW0gPSB0YmwtPm1h eF9rZXlfbnVtOw0KPiArCXVpbnQxNl90IGsgPSAwOw0KPiANCj4gLQlmb3IgKGkgPSAwOyBpIDwg bWF4X2tleV9udW07IGkrKykgew0KPiAtCQkvKiBhbGwga2V5cyBoYXZlIGJlZW4gY2hlY2tlZCwg cmV0dXJuIGltbWVkaWF0ZWx5ICovDQo+IC0JCWlmICh0YmwtPmtleV9udW0gPT0gMCkNCj4gKwlm b3IgKGkgPSAwOyBpIDwgbWF4X2Zsb3dfbnVtOyBpKyspIHsNCj4gKwkJaWYgKHVubGlrZWx5KHRi bC0+Zmxvd19udW0gPT0gMCkpDQo+ICAJCQlyZXR1cm4gazsNCj4gDQo+IC0JCWogPSB0YmwtPmtl eXNbaV0uc3RhcnRfaW5kZXg7DQo+ICsJCWogPSB0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4Ow0K PiAgCQl3aGlsZSAoaiAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7DQo+ICAJCQlpZiAodGJsLT5p dGVtc1tqXS5zdGFydF90aW1lIDw9IGZsdXNoX3RpbWVzdGFtcCkgew0KPiAgCQkJCW91dFtrKytd ID0gdGJsLT5pdGVtc1tqXS5maXJzdHNlZzsNCj4gIAkJCQlpZiAodGJsLT5pdGVtc1tqXS5uYl9t ZXJnZWQgPiAxKQ0KPiAgCQkJCQl1cGRhdGVfaGVhZGVyKCYodGJsLT5pdGVtc1tqXSkpOw0KPiAg CQkJCS8qDQo+IC0JCQkJICogZGVsZXRlIHRoZSBpdGVtIGFuZCBnZXQNCj4gLQkJCQkgKiB0aGUg bmV4dCBwYWNrZXQgaW5kZXgNCj4gKwkJCQkgKiBEZWxldGUgdGhlIHBhY2tldCBhbmQgZ2V0IHRo ZSBuZXh0DQo+ICsJCQkJICogcGFja2V0IGluIHRoZSBmbG93Lg0KPiAgCQkJCSAqLw0KPiAtCQkJ CWogPSBkZWxldGVfaXRlbSh0YmwsIGosDQo+IC0JCQkJCQlJTlZBTElEX0FSUkFZX0lOREVYKTsN Cj4gKwkJCQlqID0gZGVsZXRlX2l0ZW0odGJsLCBqLA0KPiBJTlZBTElEX0FSUkFZX0lOREVYKTsN Cj4gKwkJCQl0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4ID0gajsNCj4gKwkJCQlpZiAoaiA9PSBJ TlZBTElEX0FSUkFZX0lOREVYKQ0KPiArCQkJCQl0YmwtPmZsb3dfbnVtLS07DQo+IA0KPiAtCQkJ CS8qDQo+IC0JCQkJICogZGVsZXRlIHRoZSBrZXkgYXMgYWxsIG9mDQo+IC0JCQkJICogcGFja2V0 cyBhcmUgZmx1c2hlZA0KPiAtCQkJCSAqLw0KPiAtCQkJCWlmIChqID09IElOVkFMSURfQVJSQVlf SU5ERVgpIHsNCj4gLQkJCQkJdGJsLT5rZXlzW2ldLnN0YXJ0X2luZGV4ID0NCj4gLQkJCQkJCUlO VkFMSURfQVJSQVlfSU5ERVg7DQo+IC0JCQkJCXRibC0+a2V5X251bS0tOw0KPiAtCQkJCX0gZWxz ZQ0KPiAtCQkJCQkvKiB1cGRhdGUgc3RhcnRfaW5kZXggb2YgdGhlIGtleSAqLw0KPiAtCQkJCQl0 YmwtPmtleXNbaV0uc3RhcnRfaW5kZXggPSBqOw0KPiAtDQo+IC0JCQkJaWYgKGsgPT0gbmJfb3V0 KQ0KPiArCQkJCWlmICh1bmxpa2VseShrID09IG5iX291dCkpDQo+ICAJCQkJCXJldHVybiBrOw0K PiAgCQkJfSBlbHNlDQo+ICAJCQkJLyoNCj4gLQkJCQkgKiBsZWZ0IHBhY2tldHMgb2YgdGhpcyBr ZXkgd29uJ3QgYmUNCj4gLQkJCQkgKiB0aW1lb3V0LCBzbyBnbyB0byBjaGVjayBvdGhlciBrZXlz Lg0KPiArCQkJCSAqIFRoZSBsZWZ0IHBhY2tldHMgaW4gdGhpcyBmbG93IHdvbid0IGJlDQo+ICsJ CQkJICogdGltZW91dC4gR28gdG8gY2hlY2sgb3RoZXIgZmxvd3MuDQo+ICAJCQkJICovDQo+ICAJ CQkJYnJlYWs7DQo+ICAJCX0NCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb190Y3A0 LmggYi9saWIvbGlicnRlX2dyby9ncm9fdGNwNC5oDQo+IGluZGV4IGQxMjk1MjMuLmMyYjY2YTgg MTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfZ3JvL2dyb190Y3A0LmgNCj4gKysrIGIvbGliL2xp YnJ0ZV9ncm8vZ3JvX3RjcDQuaA0KPiBAQCAtNSwxNyArNSwyMCBAQA0KPiAgI2lmbmRlZiBfR1JP X1RDUDRfSF8NCj4gICNkZWZpbmUgX0dST19UQ1A0X0hfDQo+IA0KPiArI2luY2x1ZGUgPHJ0ZV9p cC5oPg0KPiArI2luY2x1ZGUgPHJ0ZV90Y3AuaD4NCj4gKw0KPiAgI2RlZmluZSBJTlZBTElEX0FS UkFZX0lOREVYIDB4ZmZmZmZmZmZVTA0KPiAgI2RlZmluZSBHUk9fVENQNF9UQkxfTUFYX0lURU1f TlVNICgxMDI0VUwgKiAxMDI0VUwpDQo+IA0KPiAgLyoNCj4gLSAqIHRoZSBtYXggTDMgbGVuZ3Ro IG9mIGEgVENQL0lQdjQgcGFja2V0LiBUaGUgTDMgbGVuZ3RoDQo+IC0gKiBpcyB0aGUgc3VtIG9m IGlwdjQgaGVhZGVyLCB0Y3AgaGVhZGVyIGFuZCBMNCBwYXlsb2FkLg0KPiArICogVGhlIG1heCBs ZW5ndGggb2YgYSBJUHY0IHBhY2tldCwgd2hpY2ggaW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUg TDMNCj4gKyAqIGhlYWRlciwgdGhlIEw0IGhlYWRlciBhbmQgdGhlIGRhdGEgcGF5bG9hZC4NCj4g ICAqLw0KPiAtI2RlZmluZSBUQ1A0X01BWF9MM19MRU5HVEggVUlOVDE2X01BWA0KPiArI2RlZmlu ZSBNQVhfSVBWNF9QS1RfTEVOR1RIIFVJTlQxNl9NQVgNCj4gDQo+IC0vKiBjcml0ZXJpYSBvZiBt ZXJnZWluZyBwYWNrZXRzICovDQo+IC1zdHJ1Y3QgdGNwNF9rZXkgew0KPiArLyogSGVhZGVyIGZp ZWxkcyByZXByZXNlbnRpbmcgYSBUQ1AvSVB2NCBmbG93ICovDQo+ICtzdHJ1Y3QgdGNwNF9mbG93 X2tleSB7DQo+ICAJc3RydWN0IGV0aGVyX2FkZHIgZXRoX3NhZGRyOw0KPiAgCXN0cnVjdCBldGhl cl9hZGRyIGV0aF9kYWRkcjsNCj4gIAl1aW50MzJfdCBpcF9zcmNfYWRkcjsNCj4gQEAgLTI2LDc3 ICsyOSw3NiBAQCBzdHJ1Y3QgdGNwNF9rZXkgew0KPiAgCXVpbnQxNl90IGRzdF9wb3J0Ow0KPiAg fTsNCj4gDQo+IC1zdHJ1Y3QgZ3JvX3RjcDRfa2V5IHsNCj4gLQlzdHJ1Y3QgdGNwNF9rZXkga2V5 Ow0KPiArc3RydWN0IGdyb190Y3A0X2Zsb3cgew0KPiArCXN0cnVjdCB0Y3A0X2Zsb3dfa2V5IGtl eTsNCj4gIAkvKg0KPiAtCSAqIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFja2V0IGluIHRoZSBp dGVtIGdyb3VwLg0KPiAtCSAqIElmIHRoZSB2YWx1ZSBpcyBJTlZBTElEX0FSUkFZX0lOREVYLCBp dCBtZWFucw0KPiAtCSAqIHRoZSBrZXkgaXMgZW1wdHkuDQo+ICsJICogVGhlIGluZGV4IG9mIHRo ZSBmaXJzdCBwYWNrZXQgaW4gdGhlIGZsb3cuDQo+ICsJICogSU5WQUxJRF9BUlJBWV9JTkRFWCBp bmRpY2F0ZXMgYW4gZW1wdHkgZmxvdy4NCj4gIAkgKi8NCj4gIAl1aW50MzJfdCBzdGFydF9pbmRl eDsNCj4gIH07DQo+IA0KPiAgc3RydWN0IGdyb190Y3A0X2l0ZW0gew0KPiAgCS8qDQo+IC0JICog Zmlyc3Qgc2VnbWVudCBvZiB0aGUgcGFja2V0LiBJZiB0aGUgdmFsdWUNCj4gKwkgKiBUaGUgZmly c3QgTUJVRiBzZWdtZW50IG9mIHRoZSBwYWNrZXQuIElmIHRoZSB2YWx1ZQ0KPiAgCSAqIGlzIE5V TEwsIGl0IG1lYW5zIHRoZSBpdGVtIGlzIGVtcHR5Lg0KPiAgCSAqLw0KPiAgCXN0cnVjdCBydGVf bWJ1ZiAqZmlyc3RzZWc7DQo+IC0JLyogbGFzdCBzZWdtZW50IG9mIHRoZSBwYWNrZXQgKi8NCj4g KwkvKiBUaGUgbGFzdCBNQlVGIHNlZ21lbnQgb2YgdGhlIHBhY2tldCAqLw0KPiAgCXN0cnVjdCBy dGVfbWJ1ZiAqbGFzdHNlZzsNCj4gIAkvKg0KPiAtCSAqIHRoZSB0aW1lIHdoZW4gdGhlIGZpcnN0 IHBhY2tldCBpcyBpbnNlcnRlZA0KPiAtCSAqIGludG8gdGhlIHRhYmxlLiBJZiBhIHBhY2tldCBp biB0aGUgdGFibGUgaXMNCj4gLQkgKiBtZXJnZWQgd2l0aCBhbiBpbmNvbWluZyBwYWNrZXQsIHRo aXMgdmFsdWUNCj4gLQkgKiB3b24ndCBiZSB1cGRhdGVkLiBXZSBzZXQgdGhpcyB2YWx1ZSBvbmx5 DQo+IC0JICogd2hlbiB0aGUgZmlyc3QgcGFja2V0IGlzIGluc2VydGVkIGludG8gdGhlDQo+IC0J ICogdGFibGUuDQo+ICsJICogVGhlIHRpbWUgd2hlbiB0aGUgZmlyc3QgcGFja2V0IGlzIGluc2Vy dGVkIGludG8gdGhlIHRhYmxlLg0KPiArCSAqIFRoaXMgdmFsdWUgd29uJ3QgYmUgdXBkYXRlZCwg ZXZlbiBpZiB0aGUgcGFja2V0IGlzIG1lcmdlZA0KPiArCSAqIHdpdGggb3RoZXIgcGFja2V0cy4N Cj4gIAkgKi8NCj4gIAl1aW50NjRfdCBzdGFydF90aW1lOw0KPiAgCS8qDQo+IC0JICogd2UgdXNl IG5leHRfcGt0X2lkeCB0byBjaGFpbiB0aGUgcGFja2V0cyB0aGF0DQo+IC0JICogaGF2ZSBzYW1l IGtleSB2YWx1ZSBidXQgY2FuJ3QgYmUgbWVyZ2VkIHRvZ2V0aGVyLg0KPiArCSAqIG5leHRfcGt0 X2lkeCBpcyB1c2VkIHRvIGNoYWluIHRoZSBwYWNrZXRzIHRoYXQNCj4gKwkgKiBhcmUgaW4gdGhl IHNhbWUgZmxvdyBidXQgY2FuJ3QgYmUgbWVyZ2VkIHRvZ2V0aGVyDQo+ICsJICogKGUuZy4gY2F1 c2VkIGJ5IHBhY2tldCByZW9yZGVyaW5nKS4NCj4gIAkgKi8NCj4gIAl1aW50MzJfdCBuZXh0X3Br dF9pZHg7DQo+IC0JLyogdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFja2V0ICovDQo+ICsJ LyogVENQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFja2V0ICovDQo+ICAJdWludDMyX3Qgc2Vu dF9zZXE7DQo+IC0JLyogdGhlIElQIElEIG9mIHRoZSBwYWNrZXQgKi8NCj4gKwkvKiBJUHY0IElE IG9mIHRoZSBwYWNrZXQgKi8NCj4gIAl1aW50MTZfdCBpcF9pZDsNCj4gLQkvKiB0aGUgbnVtYmVy IG9mIG1lcmdlZCBwYWNrZXRzICovDQo+ICsJLyogVGhlIG51bWJlciBvZiBtZXJnZWQgcGFja2V0 cyAqLw0KPiAgCXVpbnQxNl90IG5iX21lcmdlZDsNCj4gKwkvKiBJbmRpY2F0ZSBpZiBJUHY0IElE IGNhbiBiZSBpZ25vcmVkICovDQo+ICsJdWludDhfdCBpc19hdG9taWM7DQo+ICB9Ow0KPiANCj4g IC8qDQo+IC0gKiBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxlIHN0cnVjdHVyZS4NCj4gKyAqIFRD UC9JUHY0IHJlYXNzZW1ibHkgdGFibGUgc3RydWN0dXJlDQo+ICAgKi8NCj4gIHN0cnVjdCBncm9f dGNwNF90Ymwgew0KPiAgCS8qIGl0ZW0gYXJyYXkgKi8NCj4gIAlzdHJ1Y3QgZ3JvX3RjcDRfaXRl bSAqaXRlbXM7DQo+IC0JLyoga2V5IGFycmF5ICovDQo+IC0Jc3RydWN0IGdyb190Y3A0X2tleSAq a2V5czsNCj4gKwkvKiBmbG93IGFycmF5ICovDQo+ICsJc3RydWN0IGdyb190Y3A0X2Zsb3cgKmZs b3dzOw0KPiAgCS8qIGN1cnJlbnQgaXRlbSBudW1iZXIgKi8NCj4gIAl1aW50MzJfdCBpdGVtX251 bTsNCj4gLQkvKiBjdXJyZW50IGtleSBudW0gKi8NCj4gLQl1aW50MzJfdCBrZXlfbnVtOw0KPiAr CS8qIGN1cnJlbnQgZmxvdyBudW0gKi8NCj4gKwl1aW50MzJfdCBmbG93X251bTsNCj4gIAkvKiBp dGVtIGFycmF5IHNpemUgKi8NCj4gIAl1aW50MzJfdCBtYXhfaXRlbV9udW07DQo+IC0JLyoga2V5 IGFycmF5IHNpemUgKi8NCj4gLQl1aW50MzJfdCBtYXhfa2V5X251bTsNCj4gKwkvKiBmbG93IGFy cmF5IHNpemUgKi8NCj4gKwl1aW50MzJfdCBtYXhfZmxvd19udW07DQo+ICB9Ow0KPiANCj4gIC8q Kg0KPiAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgVENQL0lQdjQgcmVhc3NlbWJseSB0YWJs ZS4NCj4gICAqDQo+ICAgKiBAcGFyYW0gc29ja2V0X2lkDQo+IC0gKiAgc29ja2V0IGluZGV4IGZv ciBhbGxvY2F0aW5nIFRDUC9JUHY0IHJlYXNzZW1ibGUgdGFibGUNCj4gKyAqICBTb2NrZXQgaW5k ZXggZm9yIGFsbG9jYXRpbmcgdGhlIFRDUC9JUHY0IHJlYXNzZW1ibGUgdGFibGUNCj4gICAqIEBw YXJhbSBtYXhfZmxvd19udW0NCj4gLSAqICB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmxvd3MgaW4g dGhlIFRDUC9JUHY0IEdSTyB0YWJsZQ0KPiArICogIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmbG93 cyBpbiB0aGUgVENQL0lQdjQgR1JPIHRhYmxlDQo+ICAgKiBAcGFyYW0gbWF4X2l0ZW1fcGVyX2Zs b3cNCj4gLSAqICB0aGUgbWF4aW11bSBwYWNrZXQgbnVtYmVyIHBlciBmbG93Lg0KPiArICogIFRo ZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHBlciBmbG93DQo+ICAgKg0KPiAgICogQHJldHVy bg0KPiAtICogIGlmIGNyZWF0ZSBzdWNjZXNzZnVsbHksIHJldHVybiBhIHBvaW50ZXIgd2hpY2gg cG9pbnRzIHRvIHRoZQ0KPiAtICogIGNyZWF0ZWQgVENQL0lQdjQgR1JPIHRhYmxlLiBPdGhlcndp c2UsIHJldHVybiBOVUxMLg0KPiArICogIC0gUmV0dXJuIHRoZSB0YWJsZSBwb2ludGVyIG9uIHN1 Y2Nlc3MuDQo+ICsgKiAgLSBSZXR1cm4gTlVMTCBvbiBmYWlsdXJlLg0KPiAgICovDQo+ICB2b2lk ICpncm9fdGNwNF90YmxfY3JlYXRlKHVpbnQxNl90IHNvY2tldF9pZCwNCj4gIAkJdWludDE2X3Qg bWF4X2Zsb3dfbnVtLA0KPiBAQCAtMTA2LDYyICsxMDgsNTYgQEAgdm9pZCAqZ3JvX3RjcDRfdGJs X2NyZWF0ZSh1aW50MTZfdCBzb2NrZXRfaWQsDQo+ICAgKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lz IGEgVENQL0lQdjQgcmVhc3NlbWJseSB0YWJsZS4NCj4gICAqDQo+ICAgKiBAcGFyYW0gdGJsDQo+ IC0gKiAgYSBwb2ludGVyIHBvaW50cyB0byB0aGUgVENQL0lQdjQgcmVhc3NlbWJseSB0YWJsZS4N Cj4gKyAqICBQb2ludGVyIHBvaW50aW5nIHRvIHRoZSBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxl Lg0KPiAgICovDQo+ICB2b2lkIGdyb190Y3A0X3RibF9kZXN0cm95KHZvaWQgKnRibCk7DQo+IA0K PiAgLyoqDQo+IC0gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhIHBhY2tldCBpbiB0aGUg VENQL0lQdjQgcmVhc3NlbWJseSB0YWJsZQ0KPiAtICogdG8gbWVyZ2Ugd2l0aCB0aGUgaW5wdXR0 ZWQgb25lLiBUbyBtZXJnZSB0d28gcGFja2V0cyBpcyB0byBjaGFpbiB0aGVtDQo+IC0gKiB0b2dl dGhlciBhbmQgdXBkYXRlIHBhY2tldCBoZWFkZXJzLiBQYWNrZXRzLCB3aG9zZSBTWU4sIEZJTiwg UlNULCBQU0gNCj4gLSAqIENXUiwgRUNFIG9yIFVSRyBiaXQgaXMgc2V0LCBhcmUgcmV0dXJuZWQg aW1tZWRpYXRlbHkuIFBhY2tldHMgd2hpY2gNCj4gLSAqIG9ubHkgaGF2ZSBwYWNrZXQgaGVhZGVy cyAoaS5lLiB3aXRob3V0IGRhdGEpIGFyZSBhbHNvIHJldHVybmVkDQo+IC0gKiBpbW1lZGlhdGVs eS4gT3RoZXJ3aXNlLCB0aGUgcGFja2V0IGlzIGVpdGhlciBtZXJnZWQsIG9yIGluc2VydGVkIGlu dG8NCj4gLSAqIHRoZSB0YWJsZS4gQmVzaWRlcywgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIHNw YWNlIHRvIGluc2VydCB0aGUNCj4gLSAqIHBhY2tldCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGlt bWVkaWF0ZWx5IHRvby4NCj4gKyAqIFRoaXMgZnVuY3Rpb24gbWVyZ2VzIGEgVENQL0lQdjQgcGFj a2V0LiBJdCBkb2Vzbid0IHByb2Nlc3MgdGhlIHBhY2tldCwNCj4gKyAqIHdoaWNoIGhhcyBTWU4s IEZJTiwgUlNULCBQU0gsIENXUiwgRUNFIG9yIFVSRyBzZXQsIG9yIGRvZXNuJ3QgaGF2ZQ0KPiAr ICogcGF5bG9hZC4NCj4gICAqDQo+IC0gKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGlucHV0 dGVkIHBhY2tldCBpcyB3aXRoIGNvcnJlY3QgSVB2NCBhbmQNCj4gLSAqIFRDUCBjaGVja3N1bXMu IEFuZCBpZiB0d28gcGFja2V0cyBhcmUgbWVyZ2VkLCBpdCB3b24ndCByZS1jYWxjdWxhdGUNCj4g LSAqIElQdjQgYW5kIFRDUCBjaGVja3N1bXMuIEJlc2lkZXMsIGlmIHRoZSBpbnB1dHRlZCBwYWNr ZXQgaXMgSVANCj4gLSAqIGZyYWdtZW50ZWQsIGl0IGFzc3VtZXMgdGhlIHBhY2tldCBpcyBjb21w bGV0ZSAod2l0aCBUQ1AgaGVhZGVyKS4NCj4gKyAqIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVj ayBpZiB0aGUgcGFja2V0IGhhcyBjb3JyZWN0IGNoZWNrc3VtcyBhbmQNCj4gKyAqIGRvZXNuJ3Qg cmUtY2FsY3VsYXRlIGNoZWNrc3VtcyBmb3IgdGhlIG1lcmdlZCBwYWNrZXQuIEFkZGl0aW9uYWxs eSwNCj4gKyAqIGl0IGFzc3VtZXMgdGhlIHBhY2tldHMgYXJlIGNvbXBsZXRlIChpLmUuLCBNRj09 MCAmJiBmcmFnX29mZj09MCksDQo+ICsgKiB3aGVuIElQIGZyYWdtZW50YXRpb24gaXMgcG9zc2li bGUgKGkuZS4sIERGPT0wKS4gSXQgcmV0dXJucyB0aGUNCj4gKyAqIHBhY2tldCwgaWYgdGhlIHBh Y2tldCBoYXMgaW52YWxpZCBwYXJhbWV0ZXJzIChlLmcuIFNZTiBiaXQgaXMgc2V0KQ0KPiArICog b3IgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIHNwYWNlIGluIHRoZSB0YWJsZS4NCj4gICAqDQo+ICAg KiBAcGFyYW0gcGt0DQo+IC0gKiAgcGFja2V0IHRvIHJlYXNzZW1ibGUuDQo+ICsgKiAgUGFja2V0 IHRvIHJlYXNzZW1ibGUNCj4gICAqIEBwYXJhbSB0YmwNCj4gLSAqICBhIHBvaW50ZXIgdGhhdCBw b2ludHMgdG8gYSBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxlLg0KPiArICogIFBvaW50ZXIgcG9p bnRpbmcgdG8gdGhlIFRDUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUNCj4gICAqIEBzdGFydF90aW1l DQo+IC0gKiAgdGhlIHN0YXJ0IHRpbWUgdGhhdCB0aGUgcGFja2V0IGlzIGluc2VydGVkIGludG8g dGhlIHRhYmxlDQo+ICsgKiAgVGhlIHRpbWUgd2hlbiB0aGUgcGFja2V0IGlzIGluc2VydGVkIGlu dG8gdGhlIHRhYmxlDQo+ICAgKg0KPiAgICogQHJldHVybg0KPiAtICogIGlmIHRoZSBwYWNrZXQg ZG9lc24ndCBoYXZlIGRhdGEsIG9yIFNZTiwgRklOLCBSU1QsIFBTSCwgQ1dSLCBFQ0UNCj4gLSAq ICBvciBVUkcgYml0IGlzIHNldCwgb3IgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIHNwYWNlIGluIHRo ZSB0YWJsZSB0bw0KPiAtICogIGluc2VydCBhIG5ldyBpdGVtIG9yIGEgbmV3IGtleSwgcmV0dXJu IGEgbmVnYXRpdmUgdmFsdWUuIElmIHRoZQ0KPiAtICogIHBhY2tldCBpcyBtZXJnZWQgc3VjY2Vz c2Z1bGx5LCByZXR1cm4gYW4gcG9zaXRpdmUgdmFsdWUuIElmIHRoZQ0KPiAtICogIHBhY2tldCBp cyBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZSwgcmV0dXJuIDAuDQo+ICsgKiAgLSBSZXR1cm4gYSBw b3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcGFja2V0IGlzIG1lcmdlZC4NCj4gKyAqICAtIFJldHVybiB6 ZXJvIGlmIHRoZSBwYWNrZXQgaXNuJ3QgbWVyZ2VkIGJ1dCBzdG9yZWQgaW4gdGhlIHRhYmxlLg0K PiArICogIC0gUmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgZm9yIGludmFsaWQgcGFyYW1ldGVycyBv ciBubyBhdmFpbGFibGUNCj4gKyAqICAgIHNwYWNlIGluIHRoZSB0YWJsZS4NCj4gICAqLw0KPiAg aW50MzJfdCBncm9fdGNwNF9yZWFzc2VtYmxlKHN0cnVjdCBydGVfbWJ1ZiAqcGt0LA0KPiAgCQlz dHJ1Y3QgZ3JvX3RjcDRfdGJsICp0YmwsDQo+ICAJCXVpbnQ2NF90IHN0YXJ0X3RpbWUpOw0KPiAN Cj4gIC8qKg0KPiAtICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRpbWVvdXQgcGFja2V0cyBpbiBh IFRDUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUNCj4gLSAqIHRvIGFwcGxpY2F0aW9ucywgYW5kIHdp dGhvdXQgdXBkYXRpbmcgY2hlY2tzdW1zIGZvciBtZXJnZWQgcGFja2V0cy4NCj4gLSAqIFRoZSBt YXggbnVtYmVyIG9mIGZsdXNoZWQgdGltZW91dCBwYWNrZXRzIGlzIHRoZSBlbGVtZW50IG51bWJl ciBvZg0KPiAtICogdGhlIGFycmF5IHdoaWNoIGlzIHVzZWQgdG8ga2VlcCBmbHVzaGVkIHBhY2tl dHMuDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgdGltZW91dCBwYWNrZXRzIGluIGEgVENQ L0lQdjQgcmVhc3NlbWJseSB0YWJsZSwNCj4gKyAqIGFuZCB3aXRob3V0IHVwZGF0aW5nIGNoZWNr c3Vtcy4NCj4gICAqDQo+ICAgKiBAcGFyYW0gdGJsDQo+IC0gKiAgYSBwb2ludGVyIHRoYXQgcG9p bnRzIHRvIGEgVENQIEdSTyB0YWJsZS4NCj4gKyAqICBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxl IHBvaW50ZXINCj4gICAqIEBwYXJhbSBmbHVzaF90aW1lc3RhbXANCj4gLSAqICB0aGlzIGZ1bmN0 aW9uIGZsdXNoZXMgcGFja2V0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUNCj4g LSAqICBiZWZvcmUgb3IgYXQgdGhlIGZsdXNoX3RpbWVzdGFtcC4NCj4gKyAqICBGbHVzaCBwYWNr ZXRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZSBiZWZvcmUgb3IgYXQgdGhlDQo+ ICsgKiAgZmx1c2hfdGltZXN0YW1wLg0KPiAgICogQHBhcmFtIG91dA0KPiAtICogIHBvaW50ZXIg YXJyYXkgd2hpY2ggaXMgdXNlZCB0byBrZWVwIGZsdXNoZWQgcGFja2V0cy4NCj4gKyAqICBQb2lu dGVyIGFycmF5IHVzZWQgdG8ga2VlcCBmbHVzaGVkIHBhY2tldHMNCj4gICAqIEBwYXJhbSBuYl9v dXQNCj4gLSAqICB0aGUgZWxlbWVudCBudW1iZXIgb2Ygb3V0LiBJdCdzIGFsc28gdGhlIG1heCBu dW1iZXIgb2YgdGltZW91dA0KPiArICogIFRoZSBlbGVtZW50IG51bWJlciBpbiAnb3V0Jy4gSXQg YWxzbyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlcg0KPiBvZg0KPiAgICogIHBhY2tldHMg dGhhdCBjYW4gYmUgZmx1c2hlZCBmaW5hbGx5Lg0KPiAgICoNCj4gICAqIEByZXR1cm4NCj4gLSAq ICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgcmV0dXJuZWQuDQo+ICsgKiAgVGhlIG51 bWJlciBvZiBmbHVzaGVkIHBhY2tldHMNCj4gICAqLw0KPiAgdWludDE2X3QgZ3JvX3RjcDRfdGJs X3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb190Y3A0X3RibCAqdGJsLA0KPiAgCQl1aW50NjRfdCBm bHVzaF90aW1lc3RhbXAsDQo+IEBAIC0xNzMsMTAgKzE2OSwxMzEgQEAgdWludDE2X3QgZ3JvX3Rj cDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0DQo+IGdyb190Y3A0X3RibCAqdGJsLA0KPiAgICog cmVhc3NlbWJseSB0YWJsZS4NCj4gICAqDQo+ICAgKiBAcGFyYW0gdGJsDQo+IC0gKiAgcG9pbnRl ciBwb2ludHMgdG8gYSBUQ1AvSVB2NCByZWFzc2VtYmx5IHRhYmxlLg0KPiArICogIFRDUC9JUHY0 IHJlYXNzZW1ibHkgdGFibGUgcG9pbnRlcg0KPiAgICoNCj4gICAqIEByZXR1cm4NCj4gLSAqICB0 aGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gdGhlIHRhYmxlDQo+ICsgKiAgVGhlIG51bWJlciBvZiBw YWNrZXRzIGluIHRoZSB0YWJsZQ0KPiAgICovDQo+ICB1aW50MzJfdCBncm9fdGNwNF90YmxfcGt0 X2NvdW50KHZvaWQgKnRibCk7DQo+ICsNCj4gKy8qDQo+ICsgKiBDaGVjayBpZiB0d28gVENQL0lQ djQgcGFja2V0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZmxvdy4NCj4gKyAqLw0KPiArc3RhdGljIGlu bGluZSBpbnQNCj4gK2lzX3NhbWVfdGNwNF9mbG93KHN0cnVjdCB0Y3A0X2Zsb3dfa2V5IGsxLCBz dHJ1Y3QgdGNwNF9mbG93X2tleSBrMikNCj4gK3sNCj4gKwlyZXR1cm4gKGlzX3NhbWVfZXRoZXJf YWRkcigmazEuZXRoX3NhZGRyLCAmazIuZXRoX3NhZGRyKSAmJg0KPiArCQkJaXNfc2FtZV9ldGhl cl9hZGRyKCZrMS5ldGhfZGFkZHIsICZrMi5ldGhfZGFkZHIpDQo+ICYmDQo+ICsJCQkoazEuaXBf c3JjX2FkZHIgPT0gazIuaXBfc3JjX2FkZHIpICYmDQo+ICsJCQkoazEuaXBfZHN0X2FkZHIgPT0g azIuaXBfZHN0X2FkZHIpICYmDQo+ICsJCQkoazEucmVjdl9hY2sgPT0gazIucmVjdl9hY2spICYm DQo+ICsJCQkoazEuc3JjX3BvcnQgPT0gazIuc3JjX3BvcnQpICYmDQo+ICsJCQkoazEuZHN0X3Bv cnQgPT0gazIuZHN0X3BvcnQpKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIENoZWNrIGlmIHR3 byBUQ1AvSVB2NCBwYWNrZXRzIGFyZSBuZWlnaGJvcnMuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxp bmUgaW50DQo+ICtjaGVja19zZXFfb3B0aW9uKHN0cnVjdCBncm9fdGNwNF9pdGVtICppdGVtLA0K PiArCQlzdHJ1Y3QgdGNwX2hkciAqdGNwaCwNCj4gKwkJdWludDMyX3Qgc2VudF9zZXEsDQo+ICsJ CXVpbnQxNl90IGlwX2lkLA0KPiArCQl1aW50MTZfdCB0Y3BfaGwsDQo+ICsJCXVpbnQxNl90IHRj cF9kbCwNCj4gKwkJdWludDE2X3QgbDJfb2Zmc2V0LA0KPiArCQl1aW50OF90IGlzX2F0b21pYykN Cj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX21idWYgKnBrdF9vcmlnID0gaXRlbS0+Zmlyc3RzZWc7DQo+ ICsJc3RydWN0IGlwdjRfaGRyICppcGhfb3JpZzsNCj4gKwlzdHJ1Y3QgdGNwX2hkciAqdGNwaF9v cmlnOw0KPiArCXVpbnQxNl90IGxlbiwgbDRfbGVuX29yaWc7DQo+ICsNCj4gKwlpcGhfb3JpZyA9 IChzdHJ1Y3QgaXB2NF9oZHIgKikocnRlX3BrdG1idWZfbXRvZChwa3Rfb3JpZywgY2hhciAqKSAr DQo+ICsJCQlsMl9vZmZzZXQgKyBwa3Rfb3JpZy0+bDJfbGVuKTsNCj4gKwl0Y3BoX29yaWcgPSAo c3RydWN0IHRjcF9oZHIgKikoKGNoYXIgKilpcGhfb3JpZyArIHBrdF9vcmlnLT5sM19sZW4pOw0K PiArCWw0X2xlbl9vcmlnID0gcGt0X29yaWctPmw0X2xlbjsNCj4gKw0KPiArCS8qIENoZWNrIGlm IFRDUCBvcHRpb24gZmllbGRzIGVxdWFsICovDQo+ICsJbGVuID0gUlRFX01BWCh0Y3BfaGwsIGw0 X2xlbl9vcmlnKSAtIHNpemVvZihzdHJ1Y3QgdGNwX2hkcik7DQo+ICsJaWYgKCh0Y3BfaGwgIT0g bDRfbGVuX29yaWcpIHx8ICgobGVuID4gMCkgJiYNCj4gKwkJCQkobWVtY21wKHRjcGggKyAxLCB0 Y3BoX29yaWcgKyAxLA0KPiArCQkJCQlsZW4pICE9IDApKSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsN Cj4gKwkvKiBEb24ndCBtZXJnZSBwYWNrZXRzIHdob3NlIERGIGJpdHMgYXJlIGRpZmZlcmVudCAq Lw0KPiArCWlmICh1bmxpa2VseShpdGVtLT5pc19hdG9taWMgXiBpc19hdG9taWMpKQ0KPiArCQly ZXR1cm4gMDsNCj4gKw0KPiArCS8qIENoZWNrIGlmIHRoZSB0d28gcGFja2V0cyBhcmUgbmVpZ2hi b3JzICovDQo+ICsJbGVuID0gcGt0X29yaWctPnBrdF9sZW4gLSBsMl9vZmZzZXQgLSBwa3Rfb3Jp Zy0+bDJfbGVuIC0NCj4gKwkJcGt0X29yaWctPmwzX2xlbiAtIGw0X2xlbl9vcmlnOw0KPiArCWlm ICgoc2VudF9zZXEgPT0gaXRlbS0+c2VudF9zZXEgKyBsZW4pICYmIChpc19hdG9taWMgfHwNCj4g KwkJCQkoaXBfaWQgPT0gaXRlbS0+aXBfaWQgKyBpdGVtLT5uYl9tZXJnZWQpKSkNCj4gKwkJLyog QXBwZW5kIHRoZSBuZXcgcGFja2V0ICovDQo+ICsJCXJldHVybiAxOw0KPiArCWVsc2UgaWYgKChz ZW50X3NlcSArIHRjcF9kbCA9PSBpdGVtLT5zZW50X3NlcSkgJiYgKGlzX2F0b21pYyB8fA0KPiAr CQkJCShpcF9pZCArIDEgPT0gaXRlbS0+aXBfaWQpKSkNCj4gKwkJLyogUHJlLXBlbmQgdGhlIG5l dyBwYWNrZXQgKi8NCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gKy8qDQo+ICsgKiBNZXJnZSB0d28gVENQL0lQdjQgcGFja2V0cyB3aXRob3V0IHVwZGF0 aW5nIGNoZWNrc3Vtcy4NCj4gKyAqIElmIGNtcCBpcyBsYXJnZXIgdGhhbiAwLCBhcHBlbmQgdGhl IG5ldyBwYWNrZXQgdG8gdGhlDQo+ICsgKiBvcmlnaW5hbCBwYWNrZXQuIE90aGVyd2lzZSwgcHJl LXBlbmQgdGhlIG5ldyBwYWNrZXQgdG8NCj4gKyAqIHRoZSBvcmlnaW5hbCBwYWNrZXQuDQo+ICsg Ki8NCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ICttZXJnZV90d29fdGNwNF9wYWNrZXRzKHN0cnVj dCBncm9fdGNwNF9pdGVtICppdGVtLA0KPiArCQlzdHJ1Y3QgcnRlX21idWYgKnBrdCwNCj4gKwkJ aW50IGNtcCwNCj4gKwkJdWludDMyX3Qgc2VudF9zZXEsDQo+ICsJCXVpbnQxNl90IGlwX2lkLA0K PiArCQl1aW50MTZfdCBsMl9vZmZzZXQpDQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9tYnVmICpwa3Rf aGVhZCwgKnBrdF90YWlsLCAqbGFzdHNlZzsNCj4gKwl1aW50MTZfdCBoZHJfbGVuLCBsMl9sZW47 DQo+ICsNCj4gKwlpZiAoY21wID4gMCkgew0KPiArCQlwa3RfaGVhZCA9IGl0ZW0tPmZpcnN0c2Vn Ow0KPiArCQlwa3RfdGFpbCA9IHBrdDsNCj4gKwl9IGVsc2Ugew0KPiArCQlwa3RfaGVhZCA9IHBr dDsNCj4gKwkJcGt0X3RhaWwgPSBpdGVtLT5maXJzdHNlZzsNCj4gKwl9DQo+ICsNCj4gKwkvKiBD aGVjayBpZiB0aGUgSVB2NCBwYWNrZXQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHZh bHVlICovDQo+ICsJaGRyX2xlbiA9IGwyX29mZnNldCArIHBrdF9oZWFkLT5sMl9sZW4gKyBwa3Rf aGVhZC0+bDNfbGVuICsNCj4gKwkJcGt0X2hlYWQtPmw0X2xlbjsNCj4gKwlsMl9sZW4gPSBsMl9v ZmZzZXQgPiAwID8gcGt0X2hlYWQtPm91dGVyX2wyX2xlbiA6IHBrdF9oZWFkLT5sMl9sZW47DQo+ ICsJaWYgKHVubGlrZWx5KHBrdF9oZWFkLT5wa3RfbGVuIC0gbDJfbGVuICsgcGt0X3RhaWwtPnBr dF9sZW4gLSBoZHJfbGVuID4NCj4gKwkJCU1BWF9JUFY0X1BLVF9MRU5HVEgpKQ0KPiArCQlyZXR1 cm4gMDsNCj4gKw0KPiArCS8qIFJlbW92ZSB0aGUgcGFja2V0IGhlYWRlciAqLw0KPiArCXJ0ZV9w a3RtYnVmX2Fkaihwa3RfdGFpbCwgaGRyX2xlbik7DQo+ICsNCj4gKwkvKiBDaGFpbiB0d28gcGFj a2V0cyB0b2dldGhlciAqLw0KPiArCWlmIChjbXAgPiAwKSB7DQo+ICsJCWl0ZW0tPmxhc3RzZWct Pm5leHQgPSBwa3Q7DQo+ICsJCWl0ZW0tPmxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBr dCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJbGFzdHNlZyA9IHJ0ZV9wa3RtYnVmX2xhc3RzZWcocGt0 KTsNCj4gKwkJbGFzdHNlZy0+bmV4dCA9IGl0ZW0tPmZpcnN0c2VnOw0KPiArCQlpdGVtLT5maXJz dHNlZyA9IHBrdDsNCj4gKwkJLyogVXBkYXRlIHNlbnRfc2VxIGFuZCBpcF9pZCAqLw0KPiArCQlp dGVtLT5zZW50X3NlcSA9IHNlbnRfc2VxOw0KPiArCQlpdGVtLT5pcF9pZCA9IGlwX2lkOw0KPiAr CX0NCj4gKwlpdGVtLT5uYl9tZXJnZWQrKzsNCj4gKw0KPiArCS8qIFVwZGF0ZSBNQlVGIG1ldGFk YXRhIGZvciB0aGUgbWVyZ2VkIHBhY2tldCAqLw0KPiArCXBrdF9oZWFkLT5uYl9zZWdzICs9IHBr dF90YWlsLT5uYl9zZWdzOw0KPiArCXBrdF9oZWFkLT5wa3RfbGVuICs9IHBrdF90YWlsLT5wa3Rf bGVuOw0KPiArDQo+ICsJcmV0dXJuIDE7DQo+ICt9DQo+ICAjZW5kaWYNCj4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYyBiL2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYw0KPiBp bmRleCBkNmI4Y2QxLi43MTc2YzBlIDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX2dyby9ydGVf Z3JvLmMNCj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5jDQo+IEBAIC0yMywxMSArMjMs MTQgQEAgc3RhdGljIGdyb190YmxfZGVzdHJveV9mbg0KPiB0YmxfZGVzdHJveV9mbltSVEVfR1JP X1RZUEVfTUFYX05VTV0gPSB7DQo+ICBzdGF0aWMgZ3JvX3RibF9wa3RfY291bnRfZm4gdGJsX3Br dF9jb3VudF9mbltSVEVfR1JPX1RZUEVfTUFYX05VTV0NCj4gPSB7DQo+ICAJCQlncm9fdGNwNF90 YmxfcGt0X2NvdW50LCBOVUxMfTsNCj4gDQo+ICsjZGVmaW5lIElTX0lQVjRfVENQX1BLVChwdHlw ZSkgKFJURV9FVEhfSVNfSVBWNF9IRFIocHR5cGUpICYmIFwNCj4gKwkJKChwdHlwZSAmIFJURV9Q VFlQRV9MNF9UQ1ApID09IFJURV9QVFlQRV9MNF9UQ1ApKQ0KPiArDQo+ICAvKg0KPiAtICogR1JP IGNvbnRleHQgc3RydWN0dXJlLCB3aGljaCBpcyB1c2VkIHRvIG1lcmdlIHBhY2tldHMuIEl0IGtl ZXBzDQo+IC0gKiBtYW55IHJlYXNzZW1ibHkgdGFibGVzIG9mIGRlc2lyZWQgR1JPIHR5cGVzLiBB cHBsaWNhdGlvbnMgbmVlZCB0bw0KPiAtICogY3JlYXRlIEdSTyBjb250ZXh0IG9iamVjdHMgYmVm b3JlIHVzaW5nIHJ0ZV9ncm9fcmVhc3NlbWJsZSB0bw0KPiAtICogcGVyZm9ybSBHUk8uDQo+ICsg KiBHUk8gY29udGV4dCBzdHJ1Y3R1cmUuIEl0IGtlZXBzIHRoZSB0YWJsZSBzdHJ1Y3R1cmVzLCB3 aGljaCBhcmUNCj4gKyAqIHVzZWQgdG8gbWVyZ2UgcGFja2V0cywgZm9yIGRpZmZlcmVudCBHUk8g dHlwZXMuIEJlZm9yZSB1c2luZw0KPiArICogcnRlX2dyb19yZWFzc2VtYmxlKCksIGFwcGxpY2F0 aW9ucyBuZWVkIHRvIGNyZWF0ZSB0aGUgR1JPIGNvbnRleHQNCj4gKyAqIGZpcnN0Lg0KPiAgICov DQo+ICBzdHJ1Y3QgZ3JvX2N0eCB7DQo+ICAJLyogR1JPIHR5cGVzIHRvIHBlcmZvcm0gKi8NCj4g QEAgLTY1LDcgKzY4LDcgQEAgcnRlX2dyb19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBydGVfZ3Jv X3BhcmFtICpwYXJhbSkNCj4gIAkJCQlwYXJhbS0+bWF4X2Zsb3dfbnVtLA0KPiAgCQkJCXBhcmFt LT5tYXhfaXRlbV9wZXJfZmxvdyk7DQo+ICAJCWlmIChncm9fY3R4LT50YmxzW2ldID09IE5VTEwp IHsNCj4gLQkJCS8qIGRlc3Ryb3kgYWxsIGNyZWF0ZWQgdGFibGVzICovDQo+ICsJCQkvKiBEZXN0 cm95IGFsbCBjcmVhdGVkIHRhYmxlcyAqLw0KPiAgCQkJZ3JvX2N0eC0+Z3JvX3R5cGVzID0gZ3Jv X3R5cGVzOw0KPiAgCQkJcnRlX2dyb19jdHhfZGVzdHJveShncm9fY3R4KTsNCj4gIAkJCXJldHVy biBOVUxMOw0KPiBAQCAtODUsOCArODgsNiBAQCBydGVfZ3JvX2N0eF9kZXN0cm95KHZvaWQgKmN0 eCkNCj4gIAl1aW50NjRfdCBncm9fdHlwZV9mbGFnOw0KPiAgCXVpbnQ4X3QgaTsNCj4gDQo+IC0J aWYgKGdyb19jdHggPT0gTlVMTCkNCj4gLQkJcmV0dXJuOw0KPiAgCWZvciAoaSA9IDA7IGkgPCBS VEVfR1JPX1RZUEVfTUFYX05VTTsgaSsrKSB7DQo+ICAJCWdyb190eXBlX2ZsYWcgPSAxVUxMIDw8 IGk7DQo+ICAJCWlmICgoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgZ3JvX3R5cGVfZmxhZykgPT0gMCkN Cj4gQEAgLTEwMyw2MiArMTA0LDU0IEBAIHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdChzdHJ1Y3Qg cnRlX21idWYgKipwa3RzLA0KPiAgCQl1aW50MTZfdCBuYl9wa3RzLA0KPiAgCQljb25zdCBzdHJ1 Y3QgcnRlX2dyb19wYXJhbSAqcGFyYW0pDQo+ICB7DQo+IC0JdWludDE2X3QgaTsNCj4gLQl1aW50 MTZfdCBuYl9hZnRlcl9ncm8gPSBuYl9wa3RzOw0KPiAtCXVpbnQzMl90IGl0ZW1fbnVtOw0KPiAt DQo+IC0JLyogYWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBUQ1AvSVB2NCBHUk8gKi8N Cj4gKwkvKiBBbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFRDUC9JUHY0IEdSTyAqLw0K PiAgCXN0cnVjdCBncm9fdGNwNF90YmwgdGNwX3RibDsNCj4gLQlzdHJ1Y3QgZ3JvX3RjcDRfa2V5 IHRjcF9rZXlzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXTsNCj4gKwlzdHJ1Y3QgZ3JvX3Rj cDRfZmxvdw0KPiB0Y3BfZmxvd3NbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dOw0KPiAgCXN0 cnVjdCBncm9fdGNwNF9pdGVtIHRjcF9pdGVtc1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV0N Cj4gPSB7ezB9IH07DQo+IA0KPiAgCXN0cnVjdCBydGVfbWJ1ZiAqdW5wcm9jZXNzX3BrdHNbbmJf cGt0c107DQo+IC0JdWludDE2X3QgdW5wcm9jZXNzX251bSA9IDA7DQo+ICsJdWludDMyX3QgaXRl bV9udW07DQo+ICAJaW50MzJfdCByZXQ7DQo+IC0JdWludDY0X3QgY3VycmVudF90aW1lOw0KPiAr CXVpbnQxNl90IGksIHVucHJvY2Vzc19udW0gPSAwLCBuYl9hZnRlcl9ncm8gPSBuYl9wa3RzOw0K PiANCj4gLQlpZiAoKHBhcmFtLT5ncm9fdHlwZXMgJiBSVEVfR1JPX1RDUF9JUFY0KSA9PSAwKQ0K PiArCWlmICh1bmxpa2VseSgocGFyYW0tPmdyb190eXBlcyAmIFJURV9HUk9fVENQX0lQVjQpID09 IDApKQ0KPiAgCQlyZXR1cm4gbmJfcGt0czsNCj4gDQo+IC0JLyogZ2V0IHRoZSBhY3R1YWwgbnVt YmVyIG9mIHBhY2tldHMgKi8NCj4gKwkvKiBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tl dHMgKi8NCj4gIAlpdGVtX251bSA9IFJURV9NSU4obmJfcGt0cywgKHBhcmFtLT5tYXhfZmxvd19u dW0gKg0KPiAtCQkJcGFyYW0tPm1heF9pdGVtX3Blcl9mbG93KSk7DQo+ICsJCQkJcGFyYW0tPm1h eF9pdGVtX3Blcl9mbG93KSk7DQo+ICAJaXRlbV9udW0gPSBSVEVfTUlOKGl0ZW1fbnVtLA0KPiBS VEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTSk7DQo+IA0KPiAgCWZvciAoaSA9IDA7IGkgPCBpdGVt X251bTsgaSsrKQ0KPiAtCQl0Y3Bfa2V5c1tpXS5zdGFydF9pbmRleCA9IElOVkFMSURfQVJSQVlf SU5ERVg7DQo+ICsJCXRjcF9mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFMSURfQVJSQVlfSU5E RVg7DQo+IA0KPiAtCXRjcF90Ymwua2V5cyA9IHRjcF9rZXlzOw0KPiArCXRjcF90YmwuZmxvd3Mg PSB0Y3BfZmxvd3M7DQo+ICAJdGNwX3RibC5pdGVtcyA9IHRjcF9pdGVtczsNCj4gLQl0Y3BfdGJs LmtleV9udW0gPSAwOw0KPiArCXRjcF90YmwuZmxvd19udW0gPSAwOw0KPiAgCXRjcF90YmwuaXRl bV9udW0gPSAwOw0KPiAtCXRjcF90YmwubWF4X2tleV9udW0gPSBpdGVtX251bTsNCj4gKwl0Y3Bf dGJsLm1heF9mbG93X251bSA9IGl0ZW1fbnVtOw0KPiAgCXRjcF90YmwubWF4X2l0ZW1fbnVtID0g aXRlbV9udW07DQo+IA0KPiAtCWN1cnJlbnRfdGltZSA9IHJ0ZV9yZHRzYygpOw0KPiAtDQo+ICAJ Zm9yIChpID0gMDsgaSA8IG5iX3BrdHM7IGkrKykgew0KPiAtCQlpZiAoKHBrdHNbaV0tPnBhY2tl dF90eXBlICYgKFJURV9QVFlQRV9MM19JUFY0IHwNCj4gLQkJCQkJUlRFX1BUWVBFX0w0X1RDUCkp ID09DQo+IC0JCQkJKFJURV9QVFlQRV9MM19JUFY0IHwgUlRFX1BUWVBFX0w0X1RDUCkpDQo+IHsN Cj4gLQkJCXJldCA9IGdyb190Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwNCj4gLQkJCQkJJnRjcF90 YmwsDQo+IC0JCQkJCWN1cnJlbnRfdGltZSk7DQo+ICsJCWlmIChJU19JUFY0X1RDUF9QS1QocGt0 c1tpXS0+cGFja2V0X3R5cGUpKSB7DQo+ICsJCQkvKg0KPiArCQkJICogVGhlIHRpbWVzdGFtcCBp cyBpZ25vcmVkLCBzaW5jZSBhbGwgcGFja2V0cw0KPiArCQkJICogd2lsbCBiZSBmbHVzaGVkIGZy b20gdGhlIHRhYmxlcy4NCj4gKwkJCSAqLw0KPiArCQkJcmV0ID0gZ3JvX3RjcDRfcmVhc3NlbWJs ZShwa3RzW2ldLCAmdGNwX3RibCwgMCk7DQo+ICAJCQlpZiAocmV0ID4gMCkNCj4gLQkJCQkvKiBt ZXJnZSBzdWNjZXNzZnVsbHkgKi8NCj4gKwkJCQkvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8NCj4g IAkJCQluYl9hZnRlcl9ncm8tLTsNCj4gLQkJCWVsc2UgaWYgKHJldCA8IDApIHsNCj4gLQkJCQl1 bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0NCj4gLQkJCQkJcGt0c1tpXTsNCj4gLQkJ CX0NCj4gKwkJCWVsc2UgaWYgKHJldCA8IDApDQo+ICsJCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9j ZXNzX251bSsrXSA9IHBrdHNbaV07DQo+ICAJCX0gZWxzZQ0KPiAgCQkJdW5wcm9jZXNzX3BrdHNb dW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07DQo+ICAJfQ0KPiANCj4gLQkvKiByZS1hcnJhbmdl IEdST2VkIHBhY2tldHMgKi8NCj4gIAlpZiAobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0cykgew0KPiAt CQlpID0gZ3JvX3RjcDRfdGJsX3RpbWVvdXRfZmx1c2goJnRjcF90YmwsIGN1cnJlbnRfdGltZSwN Cj4gLQkJCQlwa3RzLCBuYl9wa3RzKTsNCj4gKwkJLyogRmx1c2ggYWxsIHBhY2tldHMgZnJvbSB0 aGUgdGFibGVzICovDQo+ICsJCWkgPSBncm9fdGNwNF90YmxfdGltZW91dF9mbHVzaCgmdGNwX3Ri bCwgMCwgcGt0cywgbmJfcGt0cyk7DQo+ICsJCS8qIENvcHkgdW5wcm9jZXNzZWQgcGFja2V0cyAq Lw0KPiAgCQlpZiAodW5wcm9jZXNzX251bSA+IDApIHsNCj4gIAkJCW1lbWNweSgmcGt0c1tpXSwg dW5wcm9jZXNzX3BrdHMsDQo+ICAJCQkJCXNpemVvZihzdHJ1Y3QgcnRlX21idWYgKikgKg0KPiBA QCAtMTc0LDMxICsxNjcsMjggQEAgcnRlX2dyb19yZWFzc2VtYmxlKHN0cnVjdCBydGVfbWJ1ZiAq KnBrdHMsDQo+ICAJCXVpbnQxNl90IG5iX3BrdHMsDQo+ICAJCXZvaWQgKmN0eCkNCj4gIHsNCj4g LQl1aW50MTZfdCBpLCB1bnByb2Nlc3NfbnVtID0gMDsNCj4gIAlzdHJ1Y3QgcnRlX21idWYgKnVu cHJvY2Vzc19wa3RzW25iX3BrdHNdOw0KPiAgCXN0cnVjdCBncm9fY3R4ICpncm9fY3R4ID0gY3R4 Ow0KPiArCXZvaWQgKnRjcF90Ymw7DQo+ICAJdWludDY0X3QgY3VycmVudF90aW1lOw0KPiArCXVp bnQxNl90IGksIHVucHJvY2Vzc19udW0gPSAwOw0KPiANCj4gLQlpZiAoKGdyb19jdHgtPmdyb190 eXBlcyAmIFJURV9HUk9fVENQX0lQVjQpID09IDApDQo+ICsJaWYgKHVubGlrZWx5KChncm9fY3R4 LT5ncm9fdHlwZXMgJiBSVEVfR1JPX1RDUF9JUFY0KSA9PSAwKSkNCj4gIAkJcmV0dXJuIG5iX3Br dHM7DQo+IA0KPiArCXRjcF90YmwgPSBncm9fY3R4LT50YmxzW1JURV9HUk9fVENQX0lQVjRfSU5E RVhdOw0KPiAgCWN1cnJlbnRfdGltZSA9IHJ0ZV9yZHRzYygpOw0KPiANCj4gIAlmb3IgKGkgPSAw OyBpIDwgbmJfcGt0czsgaSsrKSB7DQo+IC0JCWlmICgocGt0c1tpXS0+cGFja2V0X3R5cGUgJiAo UlRFX1BUWVBFX0wzX0lQVjQgfA0KPiAtCQkJCQlSVEVfUFRZUEVfTDRfVENQKSkgPT0NCj4gLQkJ CQkoUlRFX1BUWVBFX0wzX0lQVjQgfCBSVEVfUFRZUEVfTDRfVENQKSkNCj4gew0KPiAtCQkJaWYg KGdyb190Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwNCj4gLQkJCQkJCWdyb19jdHgtPnRibHMNCj4g LQkJCQkJCVtSVEVfR1JPX1RDUF9JUFY0X0lOREVYXSwNCj4gKwkJaWYgKElTX0lQVjRfVENQX1BL VChwa3RzW2ldLT5wYWNrZXRfdHlwZSkpIHsNCj4gKwkJCWlmIChncm9fdGNwNF9yZWFzc2VtYmxl KHBrdHNbaV0sIHRjcF90YmwsDQo+ICAJCQkJCQljdXJyZW50X3RpbWUpIDwgMCkNCj4gIAkJCQl1 bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsNCj4gIAkJfSBlbHNlDQo+ ICAJCQl1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsNCj4gIAl9DQo+ ICAJaWYgKHVucHJvY2Vzc19udW0gPiAwKSB7DQo+IC0JCW1lbWNweShwa3RzLCB1bnByb2Nlc3Nf cGt0cywNCj4gLQkJCQlzaXplb2Yoc3RydWN0IHJ0ZV9tYnVmICopICoNCj4gKwkJbWVtY3B5KHBr dHMsIHVucHJvY2Vzc19wa3RzLCBzaXplb2Yoc3RydWN0IHJ0ZV9tYnVmICopICoNCj4gIAkJCQl1 bnByb2Nlc3NfbnVtKTsNCj4gIAl9DQo+IA0KPiBAQCAtMjI0LDYgKzIxNCw3IEBAIHJ0ZV9ncm9f dGltZW91dF9mbHVzaCh2b2lkICpjdHgsDQo+ICAJCQkJZmx1c2hfdGltZXN0YW1wLA0KPiAgCQkJ CW91dCwgbWF4X25iX291dCk7DQo+ICAJfQ0KPiArDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IA0K PiBAQCAtMjMyLDE5ICsyMjMsMjAgQEAgcnRlX2dyb19nZXRfcGt0X2NvdW50KHZvaWQgKmN0eCkN Cj4gIHsNCj4gIAlzdHJ1Y3QgZ3JvX2N0eCAqZ3JvX2N0eCA9IGN0eDsNCj4gIAlncm9fdGJsX3Br dF9jb3VudF9mbiBwa3RfY291bnRfZm47DQo+ICsJdWludDY0X3QgZ3JvX3R5cGVzID0gZ3JvX2N0 eC0+Z3JvX3R5cGVzLCBmbGFnOw0KPiAgCXVpbnQ2NF90IGl0ZW1fbnVtID0gMDsNCj4gLQl1aW50 NjRfdCBncm9fdHlwZV9mbGFnOw0KPiAgCXVpbnQ4X3QgaTsNCj4gDQo+IC0JZm9yIChpID0gMDsg aSA8IFJURV9HUk9fVFlQRV9NQVhfTlVNOyBpKyspIHsNCj4gLQkJZ3JvX3R5cGVfZmxhZyA9IDFV TEwgPDwgaTsNCj4gLQkJaWYgKChncm9fY3R4LT5ncm9fdHlwZXMgJiBncm9fdHlwZV9mbGFnKSA9 PSAwKQ0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfR1JPX1RZUEVfTUFYX05VTSAmJiBncm9fdHlw ZXM7IGkrKykgew0KPiArCQlmbGFnID0gMVVMTCA8PCBpOw0KPiArCQlpZiAoKGdyb190eXBlcyAm IGZsYWcpID09IDApDQo+ICAJCQljb250aW51ZTsNCj4gDQo+ICsJCWdyb190eXBlcyBePSBmbGFn Ow0KPiAgCQlwa3RfY291bnRfZm4gPSB0YmxfcGt0X2NvdW50X2ZuW2ldOw0KPiAtCQlpZiAocGt0 X2NvdW50X2ZuID09IE5VTEwpDQo+IC0JCQljb250aW51ZTsNCj4gLQkJaXRlbV9udW0gKz0gcGt0 X2NvdW50X2ZuKGdyb19jdHgtPnRibHNbaV0pOw0KPiArCQlpZiAocGt0X2NvdW50X2ZuKQ0KPiAr CQkJaXRlbV9udW0gKz0gcGt0X2NvdW50X2ZuKGdyb19jdHgtPnRibHNbaV0pOw0KPiAgCX0NCj4g Kw0KPiAgCXJldHVybiBpdGVtX251bTsNCj4gIH0NCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVf Z3JvL3J0ZV9ncm8uaCBiL2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uaA0KPiBpbmRleCA4MWEyZWFj Li43OTc5YTU5IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX2dyby9ydGVfZ3JvLmgNCj4gKysr IGIvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5oDQo+IEBAIC0zMSw4ICszMSw4IEBAIGV4dGVybiAi QyIgew0KPiAgLyoqPCBUQ1AvSVB2NCBHUk8gZmxhZyAqLw0KPiANCj4gIC8qKg0KPiAtICogQSBz dHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCB0byBjcmVhdGUgR1JPIGNvbnRleHQgb2JqZWN0cyBvciB0 ZWxsDQo+IC0gKiBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3QoKSB3aGF0IHJlYXNzZW1ibHkgcnVs ZXMgYXJlIGRlbWFuZGVkLg0KPiArICogU3RydWN0dXJlIHVzZWQgdG8gY3JlYXRlIEdSTyBjb250 ZXh0IG9iamVjdHMgb3IgdXNlZCB0byBwYXNzDQo+ICsgKiBhcHBsaWNhdGlvbi1kZXRlcm1pbmVk IHBhcmFtZXRlcnMgdG8gcnRlX2dyb19yZWFzc2VtYmxlX2J1cnN0KCkuDQo+ICAgKi8NCj4gIHN0 cnVjdCBydGVfZ3JvX3BhcmFtIHsNCj4gIAl1aW50NjRfdCBncm9fdHlwZXM7DQo+IEBAIC03OCwy NiArNzgsMjMgQEAgdm9pZCBydGVfZ3JvX2N0eF9kZXN0cm95KHZvaWQgKmN0eCk7DQo+IA0KPiAg LyoqDQo+ICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgbWFpbiByZWFzc2VtYmx5IEFQSXMsIHdoaWNo IG1lcmdlcyBudW1iZXJzIG9mDQo+IC0gKiBwYWNrZXRzIGF0IGEgdGltZS4gSXQgYXNzdW1lcyB0 aGF0IGFsbCBpbnB1dHRlZCBwYWNrZXRzIGFyZSB3aXRoDQo+IC0gKiBjb3JyZWN0IGNoZWNrc3Vt cy4gVGhhdCBpcywgYXBwbGljYXRpb25zIHNob3VsZCBndWFyYW50ZWUgYWxsDQo+IC0gKiBpbnB1 dHRlZCBwYWNrZXRzIGFyZSBjb3JyZWN0LiBCZXNpZGVzLCBpdCBkb2Vzbid0IHJlLWNhbGN1bGF0 ZQ0KPiAtICogY2hlY2tzdW1zIGZvciBtZXJnZWQgcGFja2V0cy4gSWYgaW5wdXR0ZWQgcGFja2V0 cyBhcmUgSVAgZnJhZ21lbnRlZCwNCj4gLSAqIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGVtIGFy ZSBjb21wbGV0ZSAoaS5lLiB3aXRoIEw0IGhlYWRlcikuIEFmdGVyDQo+IC0gKiBmaW5pc2hpbmcg cHJvY2Vzc2luZywgaXQgcmV0dXJucyBhbGwgR1JPZWQgcGFja2V0cyB0byBhcHBsaWNhdGlvbnMN Cj4gLSAqIGltbWVkaWF0ZWx5Lg0KPiArICogcGFja2V0cyBhdCBhIHRpbWUuIEl0IGRvZXNuJ3Qg Y2hlY2sgaWYgaW5wdXQgcGFja2V0cyBoYXZlIGNvcnJlY3QNCj4gKyAqIGNoZWNrc3VtcyBhbmQg ZG9lc24ndCByZS1jYWxjdWxhdGUgY2hlY2tzdW1zIGZvciBtZXJnZWQgcGFja2V0cy4NCj4gKyAq IEl0IGFzc3VtZXMgdGhlIHBhY2tldHMgYXJlIGNvbXBsZXRlIChpLmUuLCBNRj09MCAmJiBmcmFn X29mZj09MCksDQo+ICsgKiB3aGVuIElQIGZyYWdtZW50YXRpb24gaXMgcG9zc2libGUgKGkuZS4s IERGPT0xKS4gVGhlIEdST2VkIHBhY2tldHMNCj4gKyAqIGFyZSByZXR1cm5lZCBhcyBzb29uIGFz IHRoZSBmdW5jdGlvbiBmaW5pc2hlcy4NCj4gICAqDQo+ICAgKiBAcGFyYW0gcGt0cw0KPiAtICog IGEgcG9pbnRlciBhcnJheSB3aGljaCBwb2ludHMgdG8gdGhlIHBhY2tldHMgdG8gcmVhc3NlbWJs ZS4gQmVzaWRlcywNCj4gLSAqICBpdCBrZWVwcyBtYnVmIGFkZHJlc3NlcyBmb3IgdGhlIEdST2Vk IHBhY2tldHMuDQo+ICsgKiAgUG9pbnRlciBhcnJheSBwb2ludGluZyB0byB0aGUgcGFja2V0cyB0 byByZWFzc2VtYmxlLiBCZXNpZGVzLCBpdA0KPiArICogIGtlZXBzIE1CVUYgYWRkcmVzc2VzIGZv ciB0aGUgR1JPZWQgcGFja2V0cy4NCj4gICAqIEBwYXJhbSBuYl9wa3RzDQo+IC0gKiAgdGhlIG51 bWJlciBvZiBwYWNrZXRzIHRvIHJlYXNzZW1ibGUuDQo+ICsgKiAgVGhlIG51bWJlciBvZiBwYWNr ZXRzIHRvIHJlYXNzZW1ibGUNCj4gICAqIEBwYXJhbSBwYXJhbQ0KPiAtICogIGFwcGxpY2F0aW9u cyB1c2UgaXQgdG8gdGVsbCBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3QoKSB3aGF0IHJ1bGVzDQo+ IC0gKiAgYXJlIGRlbWFuZGVkLg0KPiArICogIEFwcGxpY2F0aW9uLWRldGVybWluZWQgcGFyYW1l dGVycyBmb3IgcmVhc3NlbWJsaW5nIHBhY2tldHMuDQo+ICAgKg0KPiAgICogQHJldHVybg0KPiAt ICogIHRoZSBudW1iZXIgb2YgcGFja2V0cyBhZnRlciBiZWVuIEdST2VkLiBJZiBubyBwYWNrZXRz IGFyZSBtZXJnZWQsDQo+IC0gKiAgdGhlIHJldHVybmVkIHZhbHVlIGlzIG5iX3BrdHMuDQo+ICsg KiAgVGhlIG51bWJlciBvZiBwYWNrZXRzIGFmdGVyIGJlZW4gR1JPZWQuIElmIG5vIHBhY2tldHMg YXJlIG1lcmdlZCwNCj4gKyAqICB0aGUgcmV0dXJuIHZhbHVlIGlzIGVxdWFscyB0byBuYl9wa3Rz Lg0KPiAgICovDQo+ICB1aW50MTZfdCBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3Qoc3RydWN0IHJ0 ZV9tYnVmICoqcGt0cywNCj4gIAkJdWludDE2X3QgbmJfcGt0cywNCj4gQEAgLTEwNywzMiArMTA0 LDI4IEBAIHVpbnQxNl90IHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdChzdHJ1Y3QNCj4gcnRlX21i dWYgKipwa3RzLA0KPiAgICogQHdhcm5pbmcNCj4gICAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiAgICoNCj4gLSAqIFJlYXNzZW1i bHkgZnVuY3Rpb24sIHdoaWNoIHRyaWVzIHRvIG1lcmdlIGlucHV0dGVkIHBhY2tldHMgd2l0aA0K PiAtICogdGhlIHBhY2tldHMgaW4gdGhlIHJlYXNzZW1ibHkgdGFibGVzIG9mIGEgZ2l2ZW4gR1JP IGNvbnRleHQuIFRoaXMNCj4gLSAqIGZ1bmN0aW9uIGFzc3VtZXMgYWxsIGlucHV0dGVkIHBhY2tl dHMgYXJlIHdpdGggY29ycmVjdCBjaGVja3N1bXMuDQo+IC0gKiBBbmQgaXQgd29uJ3QgdXBkYXRl IGNoZWNrc3VtcyBpZiB0d28gcGFja2V0cyBhcmUgbWVyZ2VkLiBCZXNpZGVzLA0KPiAtICogaWYg aW5wdXR0ZWQgcGFja2V0cyBhcmUgSVAgZnJhZ21lbnRlZCwgdGhpcyBmdW5jdGlvbiBhc3N1bWVz IHRoZXkNCj4gLSAqIGFyZSBjb21wbGV0ZSBwYWNrZXRzIChpLmUuIHdpdGggTDQgaGVhZGVyKS4N Cj4gKyAqIFJlYXNzZW1ibHkgZnVuY3Rpb24sIHdoaWNoIHRyaWVzIHRvIG1lcmdlIGlucHV0IHBh Y2tldHMgd2l0aCB0aGUNCj4gKyAqIGV4aXN0ZWQgcGFja2V0cyBpbiB0aGUgcmVhc3NlbWJseSB0 YWJsZXMgb2YgYSBnaXZlbiBHUk8gY29udGV4dC4NCj4gKyAqIEl0IGRvZXNuJ3QgY2hlY2sgaWYg aW5wdXQgcGFja2V0cyBoYXZlIGNvcnJlY3QgY2hlY2tzdW1zIGFuZCBkb2Vzbid0DQo+ICsgKiBy ZS1jYWxjdWxhdGUgY2hlY2tzdW1zIGZvciBtZXJnZWQgcGFja2V0cy4gQWRkaXRpb25hbGx5LCBp dCBhc3N1bWVzDQo+ICsgKiB0aGUgcGFja2V0cyBhcmUgY29tcGxldGUgKGkuZS4sIE1GPT0wICYm IGZyYWdfb2ZmPT0wKSwgd2hlbiBJUA0KPiArICogZnJhZ21lbnRhdGlvbiBpcyBwb3NzaWJsZSAo aS5lLiwgREY9PTEpLg0KPiAgICoNCj4gLSAqIElmIHRoZSBpbnB1dHRlZCBwYWNrZXRzIGRvbid0 IGhhdmUgZGF0YSBvciBhcmUgd2l0aCB1bnN1cHBvcnRlZCBHUk8NCj4gLSAqIHR5cGVzIGV0Yy4s IHRoZXkgd29uJ3QgYmUgcHJvY2Vzc2VkIGFuZCBhcmUgcmV0dXJuZWQgdG8gYXBwbGljYXRpb25z Lg0KPiAtICogT3RoZXJ3aXNlLCB0aGUgaW5wdXR0ZWQgcGFja2V0cyBhcmUgZWl0aGVyIG1lcmdl ZCBvciBpbnNlcnRlZCBpbnRvDQo+IC0gKiB0aGUgdGFibGUuIElmIGFwcGxpY2F0aW9ucyB3YW50 IGdldCBwYWNrZXRzIGluIHRoZSB0YWJsZSwgdGhleSBuZWVkDQo+IC0gKiB0byBjYWxsIGZsdXNo IEFQSS4NCj4gKyAqIElmIHRoZSBpbnB1dCBwYWNrZXRzIGhhdmUgaW52YWxpZCBwYXJhbWV0ZXJz IChlLmcuIG5vIGRhdGEgcGF5bG9hZCwNCj4gKyAqIHVuc3VwcG9ydGVkIEdSTyB0eXBlcyksIHRo ZXkgYXJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9ucy4gT3RoZXJ3aXNlLA0KPiArICogdGhleSBh cmUgZWl0aGVyIG1lcmdlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZS4gQXBwbGljYXRpb25z IG5lZWQNCj4gKyAqIHRvIGZsdXNoIHBhY2tldHMgZnJvbSB0aGUgdGFibGVzIGJ5IGZsdXNoIEFQ SSwgaWYgdGhleSB3YW50IHRvIGdldCB0aGUNCj4gKyAqIEdST2VkIHBhY2tldHMuDQo+ICAgKg0K PiAgICogQHBhcmFtIHBrdHMNCj4gLSAqICBwYWNrZXQgdG8gcmVhc3NlbWJsZS4gQmVzaWRlcywg YWZ0ZXIgdGhpcyBmdW5jdGlvbiBmaW5pc2hlcywgaXQNCj4gLSAqICBrZWVwcyB0aGUgdW5wcm9j ZXNzZWQgcGFja2V0cyAoZS5nLiB3aXRob3V0IGRhdGEgb3IgdW5zdXBwb3J0ZWQNCj4gLSAqICBH Uk8gdHlwZXMpLg0KPiArICogIFBhY2tldHMgdG8gcmVhc3NlbWJsZS4gSXQncyBhbHNvIHVzZWQg dG8gc3RvcmUgdGhlIHVucHJvY2Vzc2VkIHBhY2tldHMuDQo+ICAgKiBAcGFyYW0gbmJfcGt0cw0K PiAtICogIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0byByZWFzc2VtYmxlLg0KPiArICogIFRoZSBu dW1iZXIgb2YgcGFja2V0cyB0byByZWFzc2VtYmxlDQo+ICAgKiBAcGFyYW0gY3R4DQo+IC0gKiAg YSBwb2ludGVyIHBvaW50cyB0byBhIEdSTyBjb250ZXh0IG9iamVjdC4NCj4gKyAqICBHUk8gY29u dGV4dCBvYmplY3QgcG9pbnRlcg0KPiAgICoNCj4gICAqIEByZXR1cm4NCj4gLSAqICByZXR1cm4g dGhlIG51bWJlciBvZiB1bnByb2Nlc3NlZCBwYWNrZXRzIChlLmcuIHdpdGhvdXQgZGF0YSBvcg0K PiAtICogIHVuc3VwcG9ydGVkIEdSTyB0eXBlcykuIElmIGFsbCBwYWNrZXRzIGFyZSBwcm9jZXNz ZWQgKG1lcmdlZCBvcg0KPiAtICogIGluc2VydGVkIGludG8gdGhlIHRhYmxlKSwgcmV0dXJuIDAu DQo+ICsgKiAgVGhlIG51bWJlciBvZiB1bnByb2Nlc3NlZCBwYWNrZXRzLg0KPiAgICovDQo+ICB1 aW50MTZfdCBydGVfZ3JvX3JlYXNzZW1ibGUoc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywNCj4gIAkJ dWludDE2X3QgbmJfcGt0cywNCj4gQEAgLTE0MiwyOSArMTM1LDI4IEBAIHVpbnQxNl90IHJ0ZV9n cm9fcmVhc3NlbWJsZShzdHJ1Y3QgcnRlX21idWYNCj4gKipwa3RzLA0KPiAgICogQHdhcm5pbmcN Cj4gICAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9y IG5vdGljZQ0KPiAgICoNCj4gLSAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgdGltZW91dCBw YWNrZXRzIGZyb20gcmVhc3NlbWJseSB0YWJsZXMgb2YNCj4gLSAqIGRlc2lyZWQgR1JPIHR5cGVz LiBUaGUgbWF4IG51bWJlciBvZiBmbHVzaGVkIHRpbWVvdXQgcGFja2V0cyBpcyB0aGUNCj4gLSAq IGVsZW1lbnQgbnVtYmVyIG9mIHRoZSBhcnJheSB3aGljaCBpcyB1c2VkIHRvIGtlZXAgdGhlIGZs dXNoZWQgcGFja2V0cy4NCj4gKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgdGltZW91dCBw YWNrZXRzIGZyb20gdGhlIHJlYXNzZW1ibHkgdGFibGVzDQo+ICsgKiBvZiBkZXNpcmVkIEdSTyB0 eXBlcy4gVGhlIG1heCBudW1iZXIgb2YgZmx1c2hlZCBwYWNrZXRzIGlzIHRoZQ0KPiArICogZWxl bWVudCBudW1iZXIgb2YgJ291dCcuDQo+ICAgKg0KPiAtICogQmVzaWRlcywgdGhpcyBmdW5jdGlv biB3b24ndCByZS1jYWxjdWxhdGUgY2hlY2tzdW1zIGZvciBtZXJnZWQNCj4gLSAqIHBhY2tldHMg aW4gdGhlIHRhYmxlcy4gVGhhdCBpcywgdGhlIHJldHVybmVkIHBhY2tldHMgbWF5IGJlIHdpdGgN Cj4gLSAqIHdyb25nIGNoZWNrc3Vtcy4NCj4gKyAqIEFkZGl0aW9uYWxseSwgdGhlIGZsdXNoZWQg cGFja2V0cyBtYXkgaGF2ZSBpbmNvcnJlY3QgY2hlY2tzdW1zLCBzaW5jZQ0KPiArICogdGhpcyBm dW5jdGlvbiBkb2Vzbid0IHJlLWNhbGN1bGF0ZSBjaGVja3N1bXMgZm9yIG1lcmdlZCBwYWNrZXRz Lg0KPiAgICoNCj4gICAqIEBwYXJhbSBjdHgNCj4gLSAqICBhIHBvaW50ZXIgcG9pbnRzIHRvIGEg R1JPIGNvbnRleHQgb2JqZWN0Lg0KPiArICogIEdSTyBjb250ZXh0IG9iamVjdCBwb2ludGVyLg0K PiAgICogQHBhcmFtIHRpbWVvdXRfY3ljbGVzDQo+IC0gKiAgbWF4IFRUTCBmb3IgcGFja2V0cyBp biByZWFzc2VtYmx5IHRhYmxlcywgbWVhc3VyZWQgaW4gbmFub3NlY29uZC4NCj4gKyAqICBUaGUg bWF4IFRUTCBmb3IgcGFja2V0cyBpbiByZWFzc2VtYmx5IHRhYmxlcywgbWVhc3VyZWQgaW4gbmFu b3NlY29uZC4NCj4gICAqIEBwYXJhbSBncm9fdHlwZXMNCj4gLSAqICB0aGlzIGZ1bmN0aW9uIG9u bHkgZmx1c2hlcyBwYWNrZXRzIHdoaWNoIGJlbG9uZyB0byB0aGUgR1JPIHR5cGVzDQo+IC0gKiAg c3BlY2lmaWVkIGJ5IGdyb190eXBlcy4NCj4gKyAqICBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgcGFj a2V0cyB3aG9zZSBHUk8gdHlwZXMgYXJlIHNwZWNpZmllZCBieQ0KPiArICogIGdyb190eXBlcy4N Cj4gICAqIEBwYXJhbSBvdXQNCj4gLSAqICBhIHBvaW50ZXIgYXJyYXkgdGhhdCBpcyB1c2VkIHRv IGtlZXAgZmx1c2hlZCB0aW1lb3V0IHBhY2tldHMuDQo+ICsgKiAgUG9pbnRlciBhcnJheSB1c2Vk IHRvIGtlZXAgZmx1c2hlZCBwYWNrZXRzLg0KPiAgICogQHBhcmFtIG1heF9uYl9vdXQNCj4gLSAq ICB0aGUgZWxlbWVudCBudW1iZXIgb2Ygb3V0LiBJdCdzIGFsc28gdGhlIG1heCBudW1iZXIgb2Yg dGltZW91dA0KPiArICogIFRoZSBlbGVtZW50IG51bWJlciBvZiAnb3V0Jy4gSXQncyBhbHNvIHRo ZSBtYXggbnVtYmVyIG9mIHRpbWVvdXQNCj4gICAqICBwYWNrZXRzIHRoYXQgY2FuIGJlIGZsdXNo ZWQgZmluYWxseS4NCj4gICAqDQo+ICAgKiBAcmV0dXJuDQo+IC0gKiAgdGhlIG51bWJlciBvZiBm bHVzaGVkIHBhY2tldHMuIElmIG5vIHBhY2tldHMgYXJlIGZsdXNoZWQsIHJldHVybiAwLg0KPiAr ICogIFRoZSBudW1iZXIgb2YgZmx1c2hlZCBwYWNrZXRzLg0KPiAgICovDQo+ICB1aW50MTZfdCBy dGVfZ3JvX3RpbWVvdXRfZmx1c2godm9pZCAqY3R4LA0KPiAgCQl1aW50NjRfdCB0aW1lb3V0X2N5 Y2xlcywNCj4gQEAgLTE4MCwxMCArMTcyLDEwIEBAIHVpbnQxNl90IHJ0ZV9ncm9fdGltZW91dF9m bHVzaCh2b2lkICpjdHgsDQo+ICAgKiBvZiBhIGdpdmVuIEdSTyBjb250ZXh0Lg0KPiAgICoNCj4g ICAqIEBwYXJhbSBjdHgNCj4gLSAqICBwb2ludGVyIHBvaW50cyB0byBhIEdSTyBjb250ZXh0IG9i amVjdC4NCj4gKyAqICBHUk8gY29udGV4dCBvYmplY3QgcG9pbnRlci4NCj4gICAqDQo+ICAgKiBA cmV0dXJuDQo+IC0gKiAgdGhlIG51bWJlciBvZiBwYWNrZXRzIGluIGFsbCByZWFzc2VtYmx5IHRh Ymxlcy4NCj4gKyAqICBUaGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gdGhlIHRhYmxlcy4NCj4gICAq Lw0KPiAgdWludDY0X3QgcnRlX2dyb19nZXRfcGt0X2NvdW50KHZvaWQgKmN0eCk7DQo+IA0KPiAt LQ0KPiAyLjcuNA0KDQo=