From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E100CA034F; Mon, 7 Feb 2022 02:35:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A04DD4069D; Mon, 7 Feb 2022 02:35:01 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 80AA340685 for ; Mon, 7 Feb 2022 02:34:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644197699; x=1675733699; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=/4rtStKJ5rcTd8ds5uUGDuVOKu1MbdaqCNeLGFwr7yY=; b=KQp5uzdN50GNwaZ3IyMNS7D5SjzOxu4+TGLlJbJ1oW1org3E0Hl2L/Bf Pa8O4O1lfe4bIrB/b/Fm3XYaZk1YGugz/O1Fn7X2OUbmk4L9TuEI/vB7O ghLFDPut5pWsleM+zhTwYAaPpwnL28Bb9RyccDfo0s6oFmiJdBS5OnYFc +XnGNtXERbeJFImsDupO/lWnFzDUcqEWAKN4tPqI5V+3ctZMyPx7PN6xc fRWorO8/IvIPtP57e0BEFScc3Pb1oAbMuFJlLahXk4QG0w9vrJK+2gONl UoODef0iVXV08jvGnLN0W6LW7TkAD8EC7zk6hRy+2Ssba/r2uFewlz70z w==; X-IronPort-AV: E=McAfee;i="6200,9189,10250"; a="248571764" X-IronPort-AV: E=Sophos;i="5.88,348,1635231600"; d="scan'208";a="248571764" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Feb 2022 17:34:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,348,1635231600"; d="scan'208";a="567313716" Received: from irsmsx606.ger.corp.intel.com ([163.33.146.139]) by orsmga001.jf.intel.com with ESMTP; 06 Feb 2022 17:34:57 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by IRSMSX606.ger.corp.intel.com (163.33.146.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 7 Feb 2022 01:34:55 +0000 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2308.020; Mon, 7 Feb 2022 09:34:52 +0800 From: "Hu, Jiayu" To: Maxime Coquelin , "dev@dpdk.org" CC: "i.maximets@ovn.org" , "Xia, Chenbo" , "Richardson, Bruce" , "Van Haaren, Harry" , "Pai G, Sunil" , "Mcnamara, John" , "Ding, Xuan" , "Jiang, Cheng1" , "liangma@liangbit.com" Subject: RE: [PATCH v2 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Topic: [PATCH v2 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Index: AQHYEP2QariglXSj20a2UbkpOtnDqKyBVQ6AgAX5e/A= Date: Mon, 7 Feb 2022 01:34:52 +0000 Message-ID: <74b39fe943e740bea4e8d5a6358b99b2@intel.com> References: <20211230215505.329674-1-jiayu.hu@intel.com> <20220124164011.1402593-1-jiayu.hu@intel.com> <20220124164011.1402593-2-jiayu.hu@intel.com> <42a88a85-f4cd-d6e0-f5d2-411db1879380@redhat.com> In-Reply-To: <42a88a85-f4cd-d6e0-f5d2-411db1879380@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLA0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuIFBsZWFzZSBzZWUgcmVwbGll cyBpbmxpbmUuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1l IENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVGh1cnNkYXks IEZlYnJ1YXJ5IDMsIDIwMjIgOTowNCBQTQ0KPiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRl bC5jb20+OyBkZXZAZHBkay5vcmcNCj4gQ2M6IGkubWF4aW1ldHNAb3ZuLm9yZzsgWGlhLCBDaGVu Ym8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsgUmljaGFyZHNvbiwNCj4gQnJ1Y2UgPGJydWNlLnJp Y2hhcmRzb25AaW50ZWwuY29tPjsgVmFuIEhhYXJlbiwgSGFycnkNCj4gPGhhcnJ5LnZhbi5oYWFy ZW5AaW50ZWwuY29tPjsgUGFpIEcsIFN1bmlsIDxzdW5pbC5wYWkuZ0BpbnRlbC5jb20+Ow0KPiBN Y25hbWFyYSwgSm9obiA8am9obi5tY25hbWFyYUBpbnRlbC5jb20+OyBEaW5nLCBYdWFuDQo+IDx4 dWFuLmRpbmdAaW50ZWwuY29tPjsgSmlhbmcsIENoZW5nMSA8Y2hlbmcxLmppYW5nQGludGVsLmNv bT47DQo+IGxpYW5nbWFAbGlhbmdiaXQuY29tDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMS8x XSB2aG9zdDogaW50ZWdyYXRlIGRtYWRldiBpbiBhc3luY2hyb25vdXMNCj4gZGF0YXBhdGgNCj4g DQo+IEhpIEppYXl1LA0KPiANCj4gT24gMS8yNC8yMiAxNzo0MCwgSmlheXUgSHUgd3JvdGU6DQo+ ID4gU2luY2UgZG1hZGV2IGlzIGludHJvZHVjZWQgaW4gMjEuMTEsIHRvIGF2b2lkIHRoZSBvdmVy aGVhZCBvZiB2aG9zdA0KPiA+IERNQSBhYnN0cmFjdGlvbiBsYXllciBhbmQgc2ltcGxpZnkgYXBw bGljYXRpb24gbG9naWNzLCB0aGlzIHBhdGNoDQo+ID4gaW50ZWdyYXRlcyBkbWFkZXYgaW4gYXN5 bmNocm9ub3VzIGRhdGEgcGF0aC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEppYXl1IEh1IDxq aWF5dS5odUBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogU3VuaWwgUGFpIEcgPHN1bmls LnBhaS5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS92 aG9zdF9saWIucnN0IHwgIDk1ICsrKystLS0tLQ0KPiA+ICAgZXhhbXBsZXMvdmhvc3QvTWFrZWZp bGUgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgIGV4YW1wbGVzL3Zob3N0L2lvYXQuYyAgICAg ICAgICAgICAgIHwgMjE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gICBleGFtcGxlcy92aG9z dC9pb2F0LmggICAgICAgICAgICAgICB8ICA2MyAtLS0tLS0NCj4gPiAgIGV4YW1wbGVzL3Zob3N0 L21haW4uYyAgICAgICAgICAgICAgIHwgMjU1ICsrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4g ICBleGFtcGxlcy92aG9zdC9tYWluLmggICAgICAgICAgICAgICB8ICAxMSArDQo+ID4gICBleGFt cGxlcy92aG9zdC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgNiArLQ0KPiA+ICAgbGliL3Zob3N0 L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgIGxpYi92aG9zdC9ydGVf dmhvc3QuaCAgICAgICAgICAgICAgIHwgICAyICsNCj4gPiAgIGxpYi92aG9zdC9ydGVfdmhvc3Rf YXN5bmMuaCAgICAgICAgIHwgMTMyICsrKysrLS0tLS0tLQ0KPiA+ICAgbGliL3Zob3N0L3ZlcnNp b24ubWFwICAgICAgICAgICAgICAgfCAgIDMgKw0KPiA+ICAgbGliL3Zob3N0L3Zob3N0LmMgICAg ICAgICAgICAgICAgICAgfCAxNDggKysrKysrKysrKy0tLS0NCj4gPiAgIGxpYi92aG9zdC92aG9z dC5oICAgICAgICAgICAgICAgICAgIHwgIDY0ICsrKysrLQ0KPiA+ICAgbGliL3Zob3N0L3Zob3N0 X3VzZXIuYyAgICAgICAgICAgICAgfCAgIDIgKw0KPiA+ICAgbGliL3Zob3N0L3ZpcnRpb19uZXQu YyAgICAgICAgICAgICAgfCAzMDUgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+ICAg MTUgZmlsZXMgY2hhbmdlZCwgNzQ0IGluc2VydGlvbnMoKyksIDU2NCBkZWxldGlvbnMoLSkNCj4g PiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmMNCj4gPiAgIGRlbGV0 ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmgNCj4gPg0KPiANCj4gV2hlbiB5b3Ug cmViYXNlIHRvIHRoZSBuZXh0IHZlcnNpb24sIHBsZWFzZSBlbnN1cmUgdG8gcmV3b3JrIGFsbCB0 aGUgbG9ncyB0bw0KPiBmb2xsb3cgdGhlIG5ldyBzdGFuZGFyZDoNCj4gVkhPU1RfTE9HX0NPTkZJ RyhFUlIsIiglcykgLi4uLi4iLCBkZXYtPmlmbmFtZSwgLi4uKTsNCg0KU3VyZSwgd2lsbCBkby4N Cg0KPiANCj4gPiBnaXQgYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmggYi9saWIvdmhvc3Qv cnRlX3Zob3N0X2FzeW5jLmggaW5kZXgNCj4gPiBhODdlYTZiYTM3Li43NThhODBmNDAzIDEwMDY0 NA0KPiA+IC0tLSBhL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+ICsrKyBiL2xpYi92 aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+IEBAIC0yNiw3MyArMjYsNiBAQCBzdHJ1Y3QgcnRl X3Zob3N0X2lvdl9pdGVyIHsNCj4gPiAgIAl1bnNpZ25lZCBsb25nIG5yX3NlZ3M7DQo+ID4gICB9 Ow0KPiA+DQo+ID4gLS8qKg0KPiA+IC0gKiBkbWEgdHJhbnNmZXIgc3RhdHVzDQo+ID4gLSAqLw0K PiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyB7DQo+ID4gLQkvKiogQW4gYXJyYXkg b2YgYXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBmb3Igc291cmNlIG1lbW9yeSAqLw0KPiA+IC0J dWludHB0cl90ICpzcmNfb3BhcXVlX2RhdGE7DQo+ID4gLQkvKiogQW4gYXJyYXkgb2YgYXBwbGlj YXRpb24gc3BlY2lmaWMgZGF0YSBmb3IgZGVzdGluYXRpb24gbWVtb3J5ICovDQo+ID4gLQl1aW50 cHRyX3QgKmRzdF9vcGFxdWVfZGF0YTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0g KiBkbWEgb3BlcmF0aW9uIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNhdGlv bnMNCj4gPiAtICovDQo+ID4gLXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgew0K PiA+IC0JLyoqDQo+ID4gLQkgKiBpbnN0cnVjdCBhc3luYyBlbmdpbmVzIHRvIHBlcmZvcm0gY29w aWVzIGZvciBhIGJhdGNoIG9mIHBhY2tldHMNCj4gPiAtCSAqDQo+ID4gLQkgKiBAcGFyYW0gdmlk DQo+ID4gLQkgKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4g PiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0KPiA+IC0JICogIHF1ZXVlIGlkIHRvIHBlcmZvcm0gZGF0 YSBjb3BpZXMNCj4gPiAtCSAqIEBwYXJhbSBpb3ZfaXRlcg0KPiA+IC0JICogIGFuIGFycmF5IG9m IElPViBpdGVyYXRvcnMNCj4gPiAtCSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0KPiA+IC0JICogIG9w YXF1ZSBkYXRhIHBhaXIgc2VuZGluZyB0byBETUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gY291 bnQNCj4gPiAtCSAqICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICJkZXNjcyIgYXJyYXkNCj4g PiAtCSAqIEByZXR1cm4NCj4gPiAtCSAqICBudW1iZXIgb2YgSU9WIGl0ZXJhdG9ycyBwcm9jZXNz ZWQsIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIGVycm9yDQo+ID4gLQkgKi8NCj4gPiAtCWludDMyX3Qg KCp0cmFuc2Zlcl9kYXRhKShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1 Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppb3ZfaXRlciwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0 X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEsDQo+ID4gLQkJdWludDE2X3QgY291bnQpOw0KPiA+ IC0JLyoqDQo+ID4gLQkgKiBjaGVjayBjb3B5LWNvbXBsZXRlZCBwYWNrZXRzIGZyb20gdGhlIGFz eW5jIGVuZ2luZQ0KPiA+IC0JICogQHBhcmFtIHZpZA0KPiA+IC0JICogIGlkIG9mIHZob3N0IGRl dmljZSB0byBjaGVjayBjb3B5IGNvbXBsZXRpb24NCj4gPiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0K PiA+IC0JICogIHF1ZXVlIGlkIHRvIGNoZWNrIGNvcHkgY29tcGxldGlvbg0KPiA+IC0JICogQHBh cmFtIG9wYXF1ZV9kYXRhDQo+ID4gLQkgKiAgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG9wYXF1ZSBk YXRhIHBhaXIgZnJvbSBETUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gbWF4X3BhY2tldHMNCj4g PiAtCSAqICBtYXggbnVtYmVyIG9mIHBhY2tldHMgY291bGQgYmUgY29tcGxldGVkDQo+ID4gLQkg KiBAcmV0dXJuDQo+ID4gLQkgKiAgbnVtYmVyIG9mIGFzeW5jIGRlc2NzIGNvbXBsZXRlZCwgbmVn YXRpdmUgdmFsdWUgbWVhbnMgZXJyb3INCj4gPiAtCSAqLw0KPiA+IC0JaW50MzJfdCAoKmNoZWNr X2NvbXBsZXRlZF9jb3BpZXMpKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0 cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwNCj4gPiAtCQl1aW50MTZf dCBtYXhfcGFja2V0cyk7DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICogIGFzeW5j IGNoYW5uZWwgZmVhdHVyZXMNCj4gPiAtICovDQo+ID4gLWVudW0gew0KPiA+IC0JUlRFX1ZIT1NU X0FTWU5DX0lOT1JERVIgPSAxVSA8PCAwLA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtLyoqDQo+ID4g LSAqICBhc3luYyBjaGFubmVsIGNvbmZpZ3VyYXRpb24NCj4gPiAtICovDQo+ID4gLXN0cnVjdCBy dGVfdmhvc3RfYXN5bmNfY29uZmlnIHsNCj4gPiAtCXVpbnQzMl90IGZlYXR1cmVzOw0KPiA+IC0J dWludDMyX3QgcnN2ZFsyXTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gICAvKioNCj4gPiAgICAqIFJl Z2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwgZm9yIGEgdmhvc3QgcXVldWUNCj4gPiAgICAqDQo+ID4g QEAgLTEwMCwxNyArMzMsMTEgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiA+ ICAgICogIHZob3N0IGRldmljZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ ID4gICAgKiBAcGFyYW0gcXVldWVfaWQNCj4gPiAgICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBj aGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ID4gLSAqIEBwYXJhbSBjb25maWcNCj4gPiAtICog IEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUNCj4gPiAtICogQHBhcmFtIG9w cw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gICAgKiBA cmV0dXJuDQo+ID4gICAgKiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlcw0KPiA+ICAgICov DQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAtaW50IHJ0ZV92aG9zdF9hc3luY19jaGFu bmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0 ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3lu Y19jaGFubmVsX29wcyAqb3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3Jl Z2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g ICAgKiBVbnJlZ2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwgZm9yIGEgdmhvc3QgcXVldWUgQEAgLTEz NiwxNyArNjMsMTENCj4gPiBAQCBpbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rl cihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCk7DQo+ID4gICAgKiAgdmhvc3QgZGV2aWNlIGlk IGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQgdG8NCj4gPiAgICAqIEBwYXJhbSBxdWV1ZV9p ZA0KPiA+ICAgICogIHZob3N0IHF1ZXVlIGlkIGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQg dG8NCj4gPiAtICogQHBhcmFtIGNvbmZpZw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25maWd1 cmF0aW9uDQo+ID4gLSAqIEBwYXJhbSBvcHMNCj4gPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0 aW9uIGNhbGxiYWNrcw0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIDAgb24gc3VjY2Vzcywg LTEgb24gZmFpbHVyZXMNCj4gPiAgICAqLw0KPiA+ICAgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g LWludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2 aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19j b25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAq b3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91 bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gPiArcXVldWVfaWQpOw0KPiA+DQo+ID4gICAvKioN Cj4gPiAgICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZSB3 aXRob3V0IHBlcmZvcm1pbmcNCj4gPiBhbnkgQEAgLTE3OSwxMiArMTAwLDE3IEBAIGludA0KPiBy dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwN Cj4gPiAgICAqICBhcnJheSBvZiBwYWNrZXRzIHRvIGJlIGVucXVldWVkDQo+ID4gICAgKiBAcGFy YW0gY291bnQNCj4gPiAgICAqICBwYWNrZXRzIG51bSB0byBiZSBlbnF1ZXVlZA0KPiA+ICsgKiBA cGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0K PiA+ICsgKiBAcGFyYW0gdmNoYW5faWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZpcnR1 YWwgRE1BIGNoYW5uZWwNCj4gPiAgICAqIEByZXR1cm4NCj4gPiAgICAqICBudW0gb2YgcGFja2V0 cyBlbnF1ZXVlZA0KPiA+ICAgICovDQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAgIHVp bnQxNl90IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBx dWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCk7 DQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3Qg ZG1hX2lkLA0KPiA+ICsJCXVpbnQxNl90IHZjaGFuX2lkKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g ICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhc3luYyBjb21wbGV0aW9uIHN0YXR1cyBmb3IgYSBz cGVjaWZpYyB2aG9zdA0KPiA+IEBAIC0xOTksMTIgKzEyNSwxNyBAQCB1aW50MTZfdCBydGVfdmhv c3Rfc3VibWl0X2VucXVldWVfYnVyc3QoaW50DQo+IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ ID4gICAgKiAgYmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+ICAg ICogQHBhcmFtIGNvdW50DQo+ID4gICAgKiAgc2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ID4g KyAqIEBwYXJhbSBkbWFfaWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2 aWNlDQo+ID4gKyAqIEBwYXJhbSB2Y2hhbl9pZA0KPiA+ICsgKiAgdGhlIGlkZW50aWZpZXIgb2Yg dmlydHVhbCBETUEgY2hhbm5lbA0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIG51bSBvZiBw YWNrZXRzIHJldHVybmVkDQo+ID4gICAgKi8NCj4gPiAgIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ ICAgdWludDE2X3QgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoaW50IHZpZCwgdWlu dDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3Qg Y291bnQpOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBp bnQxNl90IGRtYV9pZCwNCj4gPiArCQl1aW50MTZfdCB2Y2hhbl9pZCk7DQo+ID4NCj4gPiAgIC8q Kg0KPiA+ICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgaW4tZmxpZ2h0 IHBhY2tldHMgZm9yIHRoZQ0KPiA+IHZob3N0IEBAIC0yMzUsMTEgKzE2Niw0NCBAQCBpbnQgcnRl X3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChpbnQgdmlkLA0KPiB1aW50MTZfdCBxdWV1ZV9pZCk7 DQo+ID4gICAgKiAgQmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+ ICAgICogQHBhcmFtIGNvdW50DQo+ID4gICAgKiAgU2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ ID4gKyAqIEBwYXJhbSBkbWFfaWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEg ZGV2aWNlDQo+ID4gKyAqIEBwYXJhbSB2Y2hhbl9pZA0KPiA+ICsgKiAgdGhlIGlkZW50aWZpZXIg b2YgdmlydHVhbCBETUEgY2hhbm5lbA0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIE51bWJl ciBvZiBwYWNrZXRzIHJldHVybmVkDQo+ID4gICAgKi8NCj4gPiAgIF9fcnRlX2V4cGVyaW1lbnRh bA0KPiA+ICAgdWludDE2X3QgcnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUoaW50 IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywg dWludDE2X3QgY291bnQpOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90 IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gPiArCQl1aW50MTZfdCB2Y2hhbl9pZCk7DQo+ID4g Ky8qKg0KPiA+ICsgKiBUaGUgRE1BIHZDaGFubmVscyB1c2VkIGluIGFzeW5jaHJvbm91cyBkYXRh IHBhdGggbXVzdCBiZQ0KPiA+ICtjb25maWd1cmVkDQo+ID4gKyAqIGZpcnN0LiBTbyB0aGlzIGZ1 bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgRE1BDQo+ID4gKyAqIGFj Y2VsZXJhdGlvbiBmb3IgdnJpbmcuIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGFzeW5jaHJvbm91 cyBkYXRhDQo+ID4gK3BhdGgNCj4gPiArICogY2Fubm90IGJlIGVuYWJsZWQgZm9yIGFueSB2cmlu ZyBmdXJ0aGVyLg0KPiA+ICsgKg0KPiA+ICsgKiBETUEgZGV2aWNlcyB1c2VkIGluIGRhdGEtcGF0 aCBtdXN0IGJlbG9uZyB0byBETUEgZGV2aWNlcyBnaXZlbiBpbg0KPiA+ICt0aGlzDQo+ID4gKyAq IGZ1bmN0aW9uLiBCdXQgdXNlcnMgYXJlIGZyZWUgdG8gdXNlIERNQSBkZXZpY2VzIGdpdmVuIGlu IHRoZQ0KPiA+ICtmdW5jdGlvbg0KPiA+ICsgKiBpbiBub24tdmhvc3Qgc2NlbmFyaW9zLCBvbmx5 IGlmIGd1YXJhbnRlZSBubyBjb3BpZXMgaW4gdmhvc3QgYXJlDQo+ID4gKyAqIG9mZmxvYWRlZCB0 byB0aGVtIGF0IHRoZSBzYW1lIHRpbWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBkbWFzX2lk DQo+ID4gKyAqICBETUEgSUQgYXJyYXkNCj4gPiArICogQHBhcmFtIGNvdW50DQo+ID4gKyAqICBF bGVtZW50IG51bWJlciBvZiAnZG1hc19pZCcNCj4gPiArICogQHBhcmFtIHBvbGxfZmFjdG9yDQo+ ID4gKyAqICBGb3IgbGFyZ2Ugb3Igc2NhdHRlci1nYXRoZXIgcGFja2V0cywgb25lIHBhY2tldCB3 b3VsZCBjb25zaXN0IG9mDQo+ID4gKyAqICBzbWFsbCBidWZmZXJzLiBJbiB0aGlzIGNhc2UsIHZo b3N0IHdpbGwgaXNzdWUgc2V2ZXJhbCBETUEgY29weQ0KPiA+ICsgKiAgb3BlcmF0aW9ucyBmb3Ig dGhlIHBhY2tldC4gVGhlcmVmb3JlLCB0aGUgbnVtYmVyIG9mIGNvcGllcyB0bw0KPiA+ICsgKiAg Y2hlY2sgYnkgcnRlX2RtYV9jb21wbGV0ZWQoKSBpcyBjYWxjdWxhdGVkIGJ5ICJuYl9wa3RzX3Rv X3BvbGwgKg0KPiA+ICsgKiAgcG9sbF9mYWN0b3IiIGFuZHVzZWQgaW4gcnRlX3Zob3N0X3BvbGxf ZW5xdWV1ZV9jb21wbGV0ZWQoKS4gVGhlDQo+ID4gKyAqICBkZWZhdWx0IHZhbHVlIG9mICJwb2xs X2ZhY3RvciIgaXMgMS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgMCBvbiBzdWNjZXNzLCBh bmQgLTEgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g K2ludCBydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShpbnQxNl90ICpkbWFzX2lkLCB1aW50 MTZfdCBjb3VudCwNCj4gPiArCQl1aW50MTZfdCBwb2xsX2ZhY3Rvcik7DQo+ID4NCj4gPiAgICNl bmRpZiAvKiBfUlRFX1ZIT1NUX0FTWU5DX0hfICovDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi92aG9z dC92ZXJzaW9uLm1hcCBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcCBpbmRleA0KPiA+IGE3ZWY3ZjE5 NzYuLjEyMDJiYTljMWEgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ ID4gKysrIGIvbGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ID4gQEAgLTg0LDYgKzg0LDkgQEAgRVhQ RVJJTUVOVEFMIHsNCj4gPg0KPiA+ICAgCSMgYWRkZWQgaW4gMjEuMTENCj4gPiAgIAlydGVfdmhv c3RfZ2V0X21vbml0b3JfYWRkcjsNCj4gPiArDQo+ID4gKwkjIGFkZGVkIGluIDIyLjAzDQo+ID4g KwlydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZTsNCj4gPiAgIH07DQo+ID4NCj4gPiAgIElO VEVSTkFMIHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3Zob3N0LmMgYi9saWIvdmhvc3Qv dmhvc3QuYyBpbmRleA0KPiA+IDEzYTliYjlkZDEuLmM0MDhjZWU2M2UgMTAwNjQ0DQo+ID4gLS0t IGEvbGliL3Zob3N0L3Zob3N0LmMNCj4gPiArKysgYi9saWIvdmhvc3Qvdmhvc3QuYw0KPiA+IEBA IC0yNSw3ICsyNSw3IEBADQo+ID4gICAjaW5jbHVkZSAidmhvc3QuaCINCj4gPiAgICNpbmNsdWRl ICJ2aG9zdF91c2VyLmgiDQo+ID4NCj4gPiAtc3RydWN0IHZpcnRpb19uZXQgKnZob3N0X2Rldmlj ZXNbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gK3N0cnVjdCB2aXJ0aW9fbmV0ICp2aG9zdF9kZXZp Y2VzW1JURV9NQVhfVkhPU1RfREVWSUNFXTsNCj4gPiAgIHB0aHJlYWRfbXV0ZXhfdCB2aG9zdF9k ZXZfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7DQo+ID4NCj4gPiAgIC8qIENhbGxl ZCB3aXRoIGlvdGxiX2xvY2sgcmVhZC1sb2NrZWQgKi8gQEAgLTM0NCw2ICszNDQsNyBAQA0KPiA+ IHZob3N0X2ZyZWVfYXN5bmNfbWVtKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQ0KPiA+ICAg CQlyZXR1cm47DQo+ID4NCj4gPiAgIAlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+ ID4gKwlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfY21wbF9mbGFnKTsNCj4gPg0KPiA+ICAgCXJ0 ZV9mcmVlKHZxLT5hc3luYy0+YnVmZmVyc19wYWNrZWQpOw0KPiA+ICAgCXZxLT5hc3luYy0+YnVm ZmVyc19wYWNrZWQgPSBOVUxMOw0KPiA+IEBAIC02NjcsMTIgKzY2OCwxMiBAQCB2aG9zdF9uZXdf ZGV2aWNlKHZvaWQpDQo+ID4gICAJaW50IGk7DQo+ID4NCj4gPiAgIAlwdGhyZWFkX211dGV4X2xv Y2soJnZob3N0X2Rldl9sb2NrKTsNCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBNQVhfVkhPU1RfREVW SUNFOyBpKyspIHsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUFYX1ZIT1NUX0RFVklDRTsg aSsrKSB7DQo+ID4gICAJCWlmICh2aG9zdF9kZXZpY2VzW2ldID09IE5VTEwpDQo+ID4gICAJCQli cmVhazsNCj4gPiAgIAl9DQo+ID4NCj4gPiAtCWlmIChpID09IE1BWF9WSE9TVF9ERVZJQ0UpIHsN Cj4gPiArCWlmIChpID09IFJURV9NQVhfVkhPU1RfREVWSUNFKSB7DQo+ID4gICAJCVZIT1NUX0xP R19DT05GSUcoRVJSLA0KPiA+ICAgCQkJIkZhaWxlZCB0byBmaW5kIGEgZnJlZSBzbG90IGZvciBu ZXcgZGV2aWNlLlxuIik7DQo+ID4gICAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ2aG9zdF9kZXZf bG9jayk7DQo+ID4gQEAgLTE2MjYsOCArMTYyNyw3IEBAIHJ0ZV92aG9zdF9leHRlcm5fY2FsbGJh Y2tfcmVnaXN0ZXIoaW50IHZpZCwNCj4gPiAgIH0NCj4gPg0KPiA+ICAgc3RhdGljIF9fcnRlX2Fs d2F5c19pbmxpbmUgaW50DQo+ID4gLWFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWlu dDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w cyAqb3BzKQ0KPiA+ICthc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1 ZXVlX2lkKQ0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2 aWNlKHZpZCk7DQo+ID4gICAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkZXYtPnZpcnRx dWV1ZVtxdWV1ZV9pZF07IEBAIC0xNjU2LDYNCj4gPiArMTY1NiwxNCBAQCBhc3luY19jaGFubmVs X3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgCQlnb3RvIG91dF9m cmVlX2FzeW5jOw0KPiA+ICAgCX0NCj4gPg0KPiA+ICsJYXN5bmMtPnBrdHNfY21wbF9mbGFnID0g cnRlX3ptYWxsb2Nfc29ja2V0KE5VTEwsIHZxLT5zaXplICoNCj4gc2l6ZW9mKGJvb2wpLA0KPiA+ ICsJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBub2RlKTsNCj4gPiArCWlmICghYXN5bmMtPnBrdHNf Y21wbF9mbGFnKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJmYWlsZWQgdG8gYWxs b2NhdGUgYXN5bmMNCj4gcGt0c19jbXBsX2ZsYWcgKHZpZCAlZCwgcWlkOiAlZClcbiIsDQo+ID4g KwkJCQl2aWQsIHF1ZXVlX2lkKTsNCj4gPiArCQlnb3RvIG91dF9mcmVlX2FzeW5jOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiAgIAlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gPiAgIAkJYXN5bmMt PmJ1ZmZlcnNfcGFja2VkID0gcnRlX21hbGxvY19zb2NrZXQoTlVMTCwNCj4gPiAgIAkJCQl2cS0+ c2l6ZSAqIHNpemVvZihzdHJ1Y3QNCj4gdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCksIEBAIC0xNjc2 LDkNCj4gPiArMTY4NCw2IEBAIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2 X3QgcXVldWVfaWQsDQo+ID4gICAJCX0NCj4gPiAgIAl9DQo+ID4NCj4gPiAtCWFzeW5jLT5vcHMu Y2hlY2tfY29tcGxldGVkX2NvcGllcyA9IG9wcy0NCj4gPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXM7 DQo+ID4gLQlhc3luYy0+b3BzLnRyYW5zZmVyX2RhdGEgPSBvcHMtPnRyYW5zZmVyX2RhdGE7DQo+ ID4gLQ0KPiA+ICAgCXZxLT5hc3luYyA9IGFzeW5jOw0KPiA+DQo+ID4gICAJcmV0dXJuIDA7DQo+ ID4gQEAgLTE2OTEsMTUgKzE2OTYsMTMgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlk LCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAgIH0NCj4gPg0KPiA+ICAgaW50DQo+ID4gLXJ0 ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lk LA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIGNvbmZpZywNCj4gPiAtCQlz dHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMpDQo+ID4gK3J0ZV92aG9zdF9h c3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ICAg ew0KPiA+ICAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICAgCXN0cnVjdCB2aXJ0 aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4gICAJaW50IHJldDsNCj4gPg0KPiA+ IC0JaWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiA+ICsJaWYgKGRldiA9PSBOVUxM KQ0KPiA+ICAgCQlyZXR1cm4gLTE7DQo+ID4NCj4gPiAgIAlpZiAocXVldWVfaWQgPj0gVkhPU1Rf TUFYX1ZSSU5HKQ0KPiA+IEBAIC0xNzEwLDMzICsxNzEzLDIwIEBAIHJ0ZV92aG9zdF9hc3luY19j aGFubmVsX3JlZ2lzdGVyKGludCB2aWQsDQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgCWlm ICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5jX2NvcHkpKQ0KPiA+ICAgCQlyZXR1 cm4gLTE7DQo+ID4NCj4gPiAtCWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJURV9W SE9TVF9BU1lOQ19JTk9SREVSKSkpIHsNCj4gPiAtCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwNCj4g PiAtCQkJImFzeW5jIGNvcHkgaXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICIN Cj4gPiAtCQkJIih2aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gPiAtCQly ZXR1cm4gLTE7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKHVubGlrZWx5KG9wcy0+Y2hlY2tf Y29tcGxldGVkX2NvcGllcyA9PSBOVUxMIHx8DQo+ID4gLQkJb3BzLT50cmFuc2Zlcl9kYXRhID09 IE5VTEwpKQ0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtDQo+ID4gICAJcnRlX3NwaW5sb2NrX2xv Y2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4gLQlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVy KHZpZCwgcXVldWVfaWQsIG9wcyk7DQo+ID4gKwlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVy KHZpZCwgcXVldWVfaWQpOw0KPiA+ICAgCXJ0ZV9zcGlubG9ja191bmxvY2soJnZxLT5hY2Nlc3Nf bG9jayk7DQo+ID4NCj4gPiAgIAlyZXR1cm4gcmV0Ow0KPiA+ICAgfQ0KPiA+DQo+ID4gICBpbnQN Cj4gPiAtcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQg dmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j X2NvbmZpZyBjb25maWcsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w cyAqb3BzKQ0KPiA+ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5z YWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gK3F1ZXVlX2lkKQ0KPiA+ICAgew0KPiA+ICAgCXN0 cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYg PSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4NCj4gPiAtCWlmIChkZXYgPT0gTlVMTCB8fCBvcHMgPT0g TlVMTCkNCj4gPiArCWlmIChkZXYgPT0gTlVMTCkNCj4gPiAgIAkJcmV0dXJuIC0xOw0KPiA+DQo+ ID4gICAJaWYgKHF1ZXVlX2lkID49IFZIT1NUX01BWF9WUklORykNCj4gPiBAQCAtMTc0NywxOCAr MTczNyw3IEBADQo+IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNh ZmUoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gICAJaWYgKHVubGlrZWx5KHZxID09 IE5VTEwgfHwgIWRldi0+YXN5bmNfY29weSkpDQo+ID4gICAJCXJldHVybiAtMTsNCj4gPg0KPiA+ IC0JaWYgKHVubGlrZWx5KCEoY29uZmlnLmZlYXR1cmVzICYgUlRFX1ZIT1NUX0FTWU5DX0lOT1JE RVIpKSkgew0KPiA+IC0JCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiA+IC0JCQkiYXN5bmMgY29w eSBpcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiA+IC0JCQkiKHZpZCAl ZCwgcWlkOiAlZClcbiIsIHZpZCwgcXVldWVfaWQpOw0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAt CX0NCj4gPiAtDQo+ID4gLQlpZiAodW5saWtlbHkob3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVz ID09IE5VTEwgfHwNCj4gPiAtCQlvcHMtPnRyYW5zZmVyX2RhdGEgPT0gTlVMTCkpDQo+ID4gLQkJ cmV0dXJuIC0xOw0KPiA+IC0NCj4gPiAtCXJldHVybiBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZp ZCwgcXVldWVfaWQsIG9wcyk7DQo+ID4gKwlyZXR1cm4gYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcih2 aWQsIHF1ZXVlX2lkKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICAgaW50DQo+ID4gQEAgLTE4MzUsNiAr MTgxNCw5NSBAQA0KPiBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91 bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpDQo+ID4gICAJcmV0dXJuIDA7DQo+ ID4gICB9DQo+ID4NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ICt2 aG9zdF9mcmVlX2FzeW5jX2RtYV9tZW0odm9pZCkNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsN Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RNQURFVl9ERUZBVUxUX01BWDsgaSsr KSB7DQo+ID4gKwkJc3RydWN0IGFzeW5jX2RtYV9pbmZvICpkbWEgPSAmZG1hX2NvcHlfdHJhY2tb aV07DQo+ID4gKwkJaW50MTZfdCBqOw0KPiA+ICsNCj4gPiArCQlpZiAoZG1hLT5tYXhfdmNoYW5z ID09IDApDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwg ZG1hLT5tYXhfdmNoYW5zOyBqKyspDQo+ID4gKwkJCXJ0ZV9mcmVlKGRtYS0+dmNoYW5zW2pdLnBr dHNfY29tcGxldGVkX2ZsYWcpOw0KPiA+ICsNCj4gPiArCQlydGVfZnJlZShkbWEtPnZjaGFucyk7 DQo+ID4gKwkJZG1hLT52Y2hhbnMgPSBOVUxMOw0KPiA+ICsJCWRtYS0+bWF4X3ZjaGFucyA9IDA7 DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtydGVfdmhvc3RfYXN5bmNf ZG1hX2NvbmZpZ3VyZShpbnQxNl90ICpkbWFzX2lkLCB1aW50MTZfdCBjb3VudCwNCj4gPiArdWlu dDE2X3QgcG9sbF9mYWN0b3IpDQo+IA0KPiBJJ20gbm90IGZhbiBvZiB0aGUgcG9sbF9mYWN0b3Is IEkgdGhpbmsgaXQgaXMgdG9vIGNvbXBsZXggZm9yIHRoZSB1c2VyIHRvIGtub3cNCj4gd2hhdCB2 YWx1ZSBoZSBzaG91bGQgc2V0Lg0KDQpJdCBzZWVtcyBzbywgYW5kIHVzZXJzIG5lZWQgdG8ga25v dyBETUEgb2ZmbG9hZGluZyBkZXRhaWxzIGJlZm9yZSBzZXR0aW5nIGl0Lg0KVGhlIHNpbXBsZSB3 YXkgaXMgc2V0dGluZyB0aGUgbWF4IGNvcGllcyB0byBjaGVjayBieSBydGVfZG1hX2NvbXBsZXRl ZCB0bw0KOTcyOC8yMDQ4KjMyLCB3aGVyZSA5NzI4IGlzIGVxdWFsIHRvIFZJUlRJT19NQVhfUlhf UEtUTEVOIGFuZCAzMiBpcw0KTUFYX1BLVF9CVVJTVC4gSXQgc2hvdWxkIGJlIGFibGUgdG8gY292 ZXIgbW9zdCBvZiBjYXNlcy4NCg0KPiANCj4gQWxzbywgSSB3b3VsZCBsaWtlIHRoYXQgdGhlIEFQ SSBvbmx5IHJlZ2lzdGVycyBvbmUgRE1BIGNoYW5uZWwgYXQgYSB0aW1lIGFuZA0KPiBsZXQgdGhl IGFwcGxpY2F0aW9uIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMuIERvbmcgdGhhdCwgdXNlciBjYW4g c3RpbGwgdXNlIHRoZSBETUENCj4gY2hhbm5lbHMgdGhhdCBjb3VsZCBiZSByZWdpc3RlcmVkLg0K DQpTdXJlLCBJIHdpbGwgY2hhbmdlIGl0Lg0KPiANCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsN Cj4gPiArDQo+ID4gKwlpZiAoIWRtYXNfaWQpIHsNCj4gPiArCQlWSE9TVF9MT0dfQ09ORklHKEVS UiwgIkludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb24NCj4gcGFyYW1ldGVyLlxuIik7DQo+ID4gKwkJ cmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChwb2xsX2ZhY3RvciA9PSAwKSB7 DQo+ID4gKwkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJJbnZhbGlkIERNQSBwb2xsIGZhY3RvciAl dVxuIiwNCj4gcG9sbF9mYWN0b3IpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAr CWRtYV9wb2xsX2ZhY3RvciA9IHBvbGxfZmFjdG9yOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gKwkJc3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvICp2 Y2hhbnM7DQo+ID4gKwkJc3RydWN0IHJ0ZV9kbWFfaW5mbyBpbmZvOw0KPiA+ICsJCXVpbnQxNl90 IG1heF92Y2hhbnM7DQo+ID4gKwkJdWludDE2X3QgbWF4X2Rlc2M7DQo+ID4gKwkJdWludDE2X3Qg ajsNCj4gPiArDQo+ID4gKwkJaWYgKCFydGVfZG1hX2lzX3ZhbGlkKGRtYXNfaWRbaV0pKSB7DQo+ ID4gKwkJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiRE1BICVkIGlzIG5vdCBmb3VuZC4NCj4gQ2Fu bm90IGVuYWJsZSBhc3luYyINCj4gPiArCQkJCSAgICAgICAiIGRhdGEtcGF0aFxuLiIsIGRtYXNf aWRbaV0pOw0KPiA+ICsJCQl2aG9zdF9mcmVlX2FzeW5jX2RtYV9tZW0oKTsNCj4gPiArCQkJcmV0 dXJuIC0xOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcnRlX2RtYV9pbmZvX2dldChkbWFzX2lk W2ldLCAmaW5mbyk7DQo+ID4gKw0KPiA+ICsJCW1heF92Y2hhbnMgPSBpbmZvLm1heF92Y2hhbnM7 DQo+ID4gKwkJbWF4X2Rlc2MgPSBpbmZvLm1heF9kZXNjOw0KPiA+ICsNCj4gPiArCQlpZiAoIXJ0 ZV9pc19wb3dlcl9vZl8yKG1heF9kZXNjKSkNCj4gPiArCQkJbWF4X2Rlc2MgPSBydGVfYWxpZ24z MnBvdzIobWF4X2Rlc2MpOw0KPiA+ICsNCj4gPiArCQl2Y2hhbnMgPSBydGVfem1hbGxvYyhOVUxM LCBzaXplb2Yoc3RydWN0DQo+IGFzeW5jX2RtYV92Y2hhbl9pbmZvKSAqIG1heF92Y2hhbnMsDQo+ ID4gKwkJCQlSVEVfQ0FDSEVfTElORV9TSVpFKTsNCj4gPiArCQlpZiAodmNoYW5zID09IE5VTEwp IHsNCj4gPiArCQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmNo YW5zDQo+IGZvciBkbWEtJWQuIg0KPiA+ICsJCQkJCSIgQ2Fubm90IGVuYWJsZSBhc3luYyBkYXRh LXBhdGguXG4iLA0KPiBkbWFzX2lkW2ldKTsNCj4gPiArCQkJdmhvc3RfZnJlZV9hc3luY19kbWFf bWVtKCk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAo aiA9IDA7IGogPCBtYXhfdmNoYW5zOyBqKyspIHsNCj4gPiArCQkJdmNoYW5zW2pdLnBrdHNfY29t cGxldGVkX2ZsYWcgPSBydGVfem1hbGxvYyhOVUxMLA0KPiBzaXplb2YoYm9vbCAqKSAqIG1heF9k ZXNjLA0KPiA+ICsJCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ICsJCQlpZiAoIXZjaGFu c1tqXS5wa3RzX2NvbXBsZXRlZF9mbGFnKSB7DQo+ID4gKwkJCQlWSE9TVF9MT0dfQ09ORklHKEVS UiwgIkZhaWxlZCB0byBhbGxvY2F0ZQ0KPiBwa3RzX2NvbXBsZXRlZF9mbGFnIGZvciAiDQo+ID4g KwkJCQkJCSJkbWEtJWQgdmNoYW4tJXVcbiIsDQo+IGRtYXNfaWRbaV0sIGopOw0KPiA+ICsJCQkJ dmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gKwkJCQlyZXR1cm4gLTE7DQo+ID4gKwkJ CX0NCj4gPiArDQo+ID4gKwkJCXZjaGFuc1tqXS5yaW5nX3NpemUgPSBtYXhfZGVzYzsNCj4gPiAr CQkJdmNoYW5zW2pdLnJpbmdfbWFzayA9IG1heF9kZXNjIC0gMTsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCWRtYV9jb3B5X3RyYWNrW2RtYXNfaWRbaV1dLnZjaGFucyA9IHZjaGFuczsNCj4gPiAr CQlkbWFfY29weV90cmFja1tkbWFzX2lkW2ldXS5tYXhfdmNoYW5zID0gbWF4X3ZjaGFuczsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIGludA0K PiA+ICAgcnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChpbnQgdmlkLCB1aW50MTZfdCBxdWV1 ZV9pZCkNCj4gPiAgIHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3Zob3N0LmggYi9saWIv dmhvc3Qvdmhvc3QuaCBpbmRleA0KPiA+IDcwODVlMDg4NWMuLjQ3NTg0M2ZlYzAgMTAwNjQ0DQo+ ID4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiArKysgYi9saWIvdmhvc3Qvdmhvc3QuaA0K PiA+IEBAIC0xOSw2ICsxOSw3IEBADQo+ID4gICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+DQo+ID4g ICAjaW5jbHVkZSA8cnRlX3J3bG9jay5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4N Cj4gPiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gPg0KPiA+ICAgI2luY2x1ZGUgInJ0ZV92 aG9zdC5oIg0KPiA+ICAgI2luY2x1ZGUgInJ0ZV92ZHBhLmgiDQo+ID4gQEAgLTUwLDYgKzUxLDcg QEANCj4gPg0KPiA+ICAgI2RlZmluZSBWSE9TVF9NQVhfQVNZTkNfSVQgKE1BWF9QS1RfQlVSU1Qp DQo+ID4gICAjZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19WRUMgMjA0OA0KPiA+ICsjZGVmaW5lIFZI T1NUX0FTWU5DX0RNQV9CQVRDSElOR19TSVpFIDMyDQo+ID4NCj4gPiAgICNkZWZpbmUgUEFDS0VE X0RFU0NfRU5RVUVVRV9VU0VEX0ZMQUcodykJXA0KPiA+ICAgCSgodykgPyAoVlJJTkdfREVTQ19G X0FWQUlMIHwgVlJJTkdfREVTQ19GX1VTRUQgfA0KPiA+IFZSSU5HX0RFU0NfRl9XUklURSkgOiBc IEBAIC0xMTksNiArMTIxLDQyIEBAIHN0cnVjdA0KPiB2cmluZ191c2VkX2VsZW1fcGFja2VkIHsN Cj4gPiAgIAl1aW50MzJfdCBjb3VudDsNCj4gPiAgIH07DQo+ID4NCj4gPiArc3RydWN0IGFzeW5j X2RtYV92Y2hhbl9pbmZvIHsNCj4gPiArCS8qIGNpcmN1bGFyIGFycmF5IHRvIHRyYWNrIGlmIHBh Y2tldCBjb3B5IGNvbXBsZXRlcyAqLw0KPiA+ICsJYm9vbCAqKnBrdHNfY29tcGxldGVkX2ZsYWc7 DQo+ID4gKw0KPiA+ICsJLyogbWF4IGVsZW1lbnRzIGluICdtZXRhZGF0YScgKi8NCj4gPiArCXVp bnQxNl90IHJpbmdfc2l6ZTsNCj4gPiArCS8qIHJpbmcgaW5kZXggbWFzayBmb3IgJ21ldGFkYXRh JyAqLw0KPiA+ICsJdWludDE2X3QgcmluZ19tYXNrOw0KPiA+ICsNCj4gPiArCS8qIGJhdGNoaW5n IGNvcGllcyBiZWZvcmUgYSBETUEgZG9vcmJlbGwgKi8NCj4gPiArCXVpbnQxNl90IG5yX2JhdGNo aW5nOw0KPiA+ICsNCj4gPiArCS8qKg0KPiA+ICsJICogRE1BIHZpcnR1YWwgY2hhbm5lbCBsb2Nr LiBBbHRob3VnaCBpdCBpcyBhYmxlIHRvIGJpbmQgRE1BDQo+ID4gKwkgKiB2aXJ0dWFsIGNoYW5u ZWxzIHRvIGRhdGEgcGxhbmUgdGhyZWFkcywgdmhvc3QgY29udHJvbCBwbGFuZQ0KPiA+ICsJICog dGhyZWFkIGNvdWxkIGNhbGwgZGF0YSBwbGFuZSBmdW5jdGlvbnMgdG9vLCB0aHVzIGNhdXNpbmcN Cj4gPiArCSAqIERNQSBkZXZpY2UgY29udGVudGlvbi4NCj4gPiArCSAqDQo+ID4gKwkgKiBGb3Ig ZXhhbXBsZSwgaW4gVk0gZXhpdCBjYXNlLCB2aG9zdCBjb250cm9sIHBsYW5lIHRocmVhZCBuZWVk cw0KPiA+ICsJICogdG8gY2xlYXIgaW4tZmxpZ2h0IHBhY2tldHMgYmVmb3JlIGRpc2FibGUgdnJp bmcsIGJ1dCB0aGVyZSBjb3VsZA0KPiA+ICsJICogYmUgYW5vdHRoZXIgZGF0YSBwbGFuZSB0aHJl YWQgaXMgZW5xdWV1aW5nIHBhY2tldHMgdG8gdGhlIHNhbWUNCj4gPiArCSAqIHZyaW5nIHdpdGgg dGhlIHNhbWUgRE1BIHZpcnR1YWwgY2hhbm5lbC4gQnV0IGRtYWRldiBQTUQNCj4gZnVuY3Rpb25z DQo+ID4gKwkgKiBhcmUgbG9jay1mcmVlLCBzbyB0aGUgY29udHJvbCBwbGFuZSBhbmQgZGF0YSBw bGFuZSB0aHJlYWRzDQo+ID4gKwkgKiBjb3VsZCBvcGVyYXRlIHRoZSBzYW1lIERNQSB2aXJ0dWFs IGNoYW5uZWwgYXQgdGhlIHNhbWUgdGltZS4NCj4gPiArCSAqLw0KPiA+ICsJcnRlX3NwaW5sb2Nr X3QgZG1hX2xvY2s7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXN5bmNfZG1hX2luZm8g ew0KPiA+ICsJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gPiArCXN0cnVjdCBhc3luY19kbWFfdmNo YW5faW5mbyAqdmNoYW5zOyB9Ow0KPiA+ICsNCj4gPiArZXh0ZXJuIHN0cnVjdCBhc3luY19kbWFf aW5mbw0KPiBkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsNCj4gPiArZXh0 ZXJuIHVpbnQxNl90IGRtYV9wb2xsX2ZhY3RvcjsNCj4gPiArDQo+ID4gICAvKioNCj4gPiAgICAq IGluZmxpZ2h0IGFzeW5jIHBhY2tldCBpbmZvcm1hdGlvbg0KPiA+ICAgICovDQo+ID4gQEAgLTEy OSw5ICsxNjcsNiBAQCBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyB7DQo+ID4gICB9Ow0KPiA+ DQo+ID4gICBzdHJ1Y3Qgdmhvc3RfYXN5bmMgew0KPiA+IC0JLyogb3BlcmF0aW9uIGNhbGxiYWNr cyBmb3IgRE1BICovDQo+ID4gLQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIG9w czsNCj4gPiAtDQo+ID4gICAJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciBpb3ZfaXRlcltWSE9T VF9NQVhfQVNZTkNfSVRdOw0KPiA+ICAgCXN0cnVjdCBydGVfdmhvc3RfaW92ZWMgaW92ZWNbVkhP U1RfTUFYX0FTWU5DX1ZFQ107DQo+ID4gICAJdWludDE2X3QgaXRlcl9pZHg7DQo+ID4gQEAgLTEz OSw2ICsxNzQsMjUgQEAgc3RydWN0IHZob3N0X2FzeW5jIHsNCj4gPg0KPiA+ICAgCS8qIGRhdGEg dHJhbnNmZXIgc3RhdHVzICovDQo+ID4gICAJc3RydWN0IGFzeW5jX2luZmxpZ2h0X2luZm8gKnBr dHNfaW5mbzsNCj4gPiArCS8qKg0KPiA+ICsJICogUGFja2V0IHJlb3JkZXIgYXJyYXkuICJ0cnVl IiBpbmRpY2F0ZXMgdGhhdCBETUEgZGV2aWNlDQo+ID4gKwkgKiBjb21wbGV0ZXMgYWxsIGNvcGll cyBmb3IgdGhlIHBhY2tldC4NCj4gPiArCSAqDQo+ID4gKwkgKiBOb3RlIHRoYXQgdGhpcyBhcnJh eSBjb3VsZCBiZSB3cml0dGVuIGJ5IG11bHRpcGxlIHRocmVhZHMNCj4gPiArCSAqIHNpbXVsdGFu ZW91c2x5LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkMCBhbmQNCj4gPiArCSAq IHRocmVhZDEgUlggcGFja2V0cyBmcm9tIE5JQyBhbmQgdGhlbiBlbnF1ZXVlIHBhY2tldHMgdG8N Cj4gPiArCSAqIHZyaW5nMCBhbmQgdnJpbmcxIHdpdGggb3duIERNQSBkZXZpY2UgRE1BMCBhbmQg RE1BMSwgaXQncw0KPiA+ICsJICogcG9zc2libGUgZm9yIHRocmVhZDAgdG8gZ2V0IGNvbXBsZXRl ZCBjb3BpZXMgYmVsb25naW5nIHRvDQo+ID4gKwkgKiB2cmluZzEgZnJvbSBETUEwLCB3aGlsZSB0 aHJlYWQwIGlzIGNhbGxpbmcgcnRlX3Zob3N0X3BvbGwNCj4gPiArCSAqIF9lbnF1ZXVlX2NvbXBs ZXRlZCgpIGZvciB2cmluZzAgYW5kIHRocmVhZDEgaXMgY2FsbGluZw0KPiA+ICsJICogcnRlX3Zo b3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KCkgZm9yIHZyaW5nMS4gSW4gdGhpcyBjYXNlLA0KPiA+ ICsJICogdnEtPmFjY2Vzc19sb2NrIGNhbm5vdCBwcm90ZWN0IHBrdHNfY21wbF9mbGFnIG9mIHZy aW5nMS4NCj4gPiArCSAqDQo+ID4gKwkgKiBIb3dldmVyLCBzaW5jZSBvZmZsb2FkaW5nIGlzIHBl ci1wYWNrZXQgYmFzaXMsIGVhY2ggcGFja2V0DQo+ID4gKwkgKiBmbGFnIHdpbGwgb25seSBiZSB3 cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFuZCBzaW5nbGUgYnl0ZQ0KPiA+ICsJICogd3JpdGUgaXMg YXRvbWljLCBzbyBubyBsb2NrIGZvciBwa3RzX2NtcGxfZmxhZyBpcyBuZWVkZWQuDQo+ID4gKwkg Ki8NCj4gPiArCWJvb2wgKnBrdHNfY21wbF9mbGFnOw0KPiA+ICAgCXVpbnQxNl90IHBrdHNfaWR4 Ow0KPiA+ICAgCXVpbnQxNl90IHBrdHNfaW5mbGlnaHRfbjsNCj4gPiAgIAl1bmlvbiB7DQo+ID4g QEAgLTE5OCw2ICsyNTIsNyBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHsNCj4gPiAgIAkvKiBS ZWNvcmQgcGFja2VkIHJpbmcgZmlyc3QgZGVxdWV1ZSBkZXNjIGluZGV4ICovDQo+ID4gICAJdWlu dDE2X3QJCXNoYWRvd19sYXN0X3VzZWRfaWR4Ow0KPiA+DQo+ID4gKwl1aW50MTZfdAkJYmF0Y2hf Y29weV9tYXhfZWxlbXM7DQo+ID4gICAJdWludDE2X3QJCWJhdGNoX2NvcHlfbmJfZWxlbXM7DQo+ ID4gICAJc3RydWN0IGJhdGNoX2NvcHlfZWxlbQkqYmF0Y2hfY29weV9lbGVtczsNCj4gPiAgIAlp bnQJCQludW1hX25vZGU7DQo+ID4gQEAgLTU2OCw4ICs2MjMsNyBAQCBleHRlcm4gaW50IHZob3N0 X2RhdGFfbG9nX2xldmVsOw0KPiA+ICAgI2RlZmluZSBQUklOVF9QQUNLRVQoZGV2aWNlLCBhZGRy LCBzaXplLCBoZWFkZXIpIGRvIHt9IHdoaWxlICgwKQ0KPiA+ICAgI2VuZGlmDQo+ID4NCj4gPiAt I2RlZmluZSBNQVhfVkhPU1RfREVWSUNFCTEwMjQNCj4gPiAtZXh0ZXJuIHN0cnVjdCB2aXJ0aW9f bmV0ICp2aG9zdF9kZXZpY2VzW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+ICtleHRlcm4gc3RydWN0 IHZpcnRpb19uZXQgKnZob3N0X2RldmljZXNbUlRFX01BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+DQo+ ID4gICAjZGVmaW5lIFZIT1NUX0JJTkFSWV9TRUFSQ0hfVEhSRVNIIDI1Ng0KPiA+DQo+ID4gZGlm ZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdF91c2VyLmMgYi9saWIvdmhvc3Qvdmhvc3RfdXNlci5j IGluZGV4DQo+ID4gNWViMWRkNjgxMi4uMzE0N2U3MmYwNCAxMDA2NDQNCj4gPiAtLS0gYS9saWIv dmhvc3Qvdmhvc3RfdXNlci5jDQo+ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+ IEBAIC01MjcsNiArNTI3LDggQEAgdmhvc3RfdXNlcl9zZXRfdnJpbmdfbnVtKHN0cnVjdCB2aXJ0 aW9fbmV0DQo+ICoqcGRldiwNCj4gPiAgIAkJcmV0dXJuIFJURV9WSE9TVF9NU0dfUkVTVUxUX0VS UjsNCj4gPiAgIAl9DQo+ID4NCj4gPiArCXZxLT5iYXRjaF9jb3B5X21heF9lbGVtcyA9IHZxLT5z aXplOw0KPiA+ICsNCj4gDQo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgdGhpcyBu ZXcgZmllbGQuIEJ1dCBpdCBjYW4gYmUgcmVtb3ZlZCBhbnl3YXkNCj4gaWYgd2UgYWdyZWUgdG8g ZHJvcCB0aGUgU1cgZmFsbGJhY2suDQoNClRoaXMgaXMgZm9yIGhhbmRsaW5nIGxhY2tpbmcgb2Yg YmF0Y2hfY29weSBlbGVtZW50cyBpbiBTVyBmYWxsYmFjay4NCg0KPiANCj4gPiAgIAlyZXR1cm4g UlRFX1ZIT1NUX01TR19SRVNVTFRfT0s7DQo+ID4gICB9DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEv bGliL3Zob3N0L3ZpcnRpb19uZXQuYyBiL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMgaW5kZXgNCj4g PiBiM2Q5NTRhYWI0Li4zMDVmNmNkNTYyIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi92aG9zdC92aXJ0 aW9fbmV0LmMNCj4gPiArKysgYi9saWIvdmhvc3QvdmlydGlvX25ldC5jDQo+ID4gQEAgLTExLDYg KzExLDcgQEANCj4gPiAgICNpbmNsdWRlIDxydGVfbmV0Lmg+DQo+ID4gICAjaW5jbHVkZSA8cnRl X2V0aGVyLmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX2lwLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVf ZG1hZGV2Lmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX3Zob3N0Lmg+DQo+ID4gICAjaW5jbHVkZSA8 cnRlX3RjcC5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4NCj4gPiBAQCAtMjUsNiArMjYs MTAgQEANCj4gPg0KPiA+ICAgI2RlZmluZSBNQVhfQkFUQ0hfTEVOIDI1Ng0KPiA+DQo+ID4gKy8q IERNQSBkZXZpY2UgY29weSBvcGVyYXRpb24gdHJhY2tpbmcgYXJyYXkuICovIHN0cnVjdCBhc3lu Y19kbWFfaW5mbw0KPiA+ICtkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsN Cj4gPiArdWludDE2X3QgZG1hX3BvbGxfZmFjdG9yID0gMTsNCj4gPiArDQo+ID4gICBzdGF0aWMg IF9fcnRlX2Fsd2F5c19pbmxpbmUgYm9vbA0KPiA+ICAgcnh2cV9pc19tZXJnZWFibGUoc3RydWN0 IHZpcnRpb19uZXQgKmRldikNCj4gPiAgIHsNCj4gPiBAQCAtNDMsNiArNDgsMTQwIEBAIGlzX3Zh bGlkX3ZpcnRfcXVldWVfaWR4KHVpbnQzMl90IGlkeCwgaW50IGlzX3R4LA0KPiB1aW50MzJfdCBu cl92cmluZykNCj4gPiAgIAlyZXR1cm4gKGlzX3R4IF4gKGlkeCAmIDEpKSA9PSAwICYmIGlkeCA8 IG5yX3ZyaW5nOw0KPiA+ICAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVpbnQxNl90DQo+ID4gK3Zob3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3Rfdmly dHF1ZXVlICp2cSwgaW50MTZfdCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW5faWQsIHVp bnQxNl90IGhlYWRfaWR4LA0KPiA+ICsJCXN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKnBrdHMs IHVpbnQxNl90IG5yX3BrdHMpIHsNCj4gPiArCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAq ZG1hX2luZm8gPQ0KPiAmZG1hX2NvcHlfdHJhY2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5faWRdOw0K PiA+ICsJdWludDE2X3QgcmluZ19tYXNrID0gZG1hX2luZm8tPnJpbmdfbWFzazsNCj4gPiArCXVp bnQxNl90IHBrdF9pZHgsIGJjZV9pZHggPSAwOw0KPiA+ICsNCj4gPiArCXJ0ZV9zcGlubG9ja19s b2NrKCZkbWFfaW5mby0+ZG1hX2xvY2spOw0KPiA+ICsNCj4gPiArCWZvciAocGt0X2lkeCA9IDA7 IHBrdF9pZHggPCBucl9wa3RzOyBwa3RfaWR4KyspIHsNCj4gPiArCQlzdHJ1Y3QgcnRlX3Zob3N0 X2lvdmVjICppb3YgPSBwa3RzW3BrdF9pZHhdLmlvdjsNCj4gPiArCQlpbnQgY29weV9pZHgsIGxh c3RfY29weV9pZHggPSAwOw0KPiA+ICsJCXVpbnQxNl90IG5yX3NlZ3MgPSBwa3RzW3BrdF9pZHhd Lm5yX3NlZ3M7DQo+ID4gKwkJdWludDE2X3QgbnJfc3dfY29weSA9IDA7DQo+ID4gKwkJdWludDE2 X3QgaTsNCj4gPiArDQo+ID4gKwkJaWYgKHJ0ZV9kbWFfYnVyc3RfY2FwYWNpdHkoZG1hX2lkLCB2 Y2hhbl9pZCkgPCBucl9zZWdzKQ0KPiA+ICsJCQlnb3RvIG91dDsNCj4gDQo+IEkgd291bGQgY29u c2lkZXIgaW50cm9kdWNpbmcgYSB2aG9zdF9hc3luY19kbWFfdHJhbnNmZXJfb25lIGZ1bmN0aW9u IHRvDQo+IGF2b2lkIG5lc3RpbmcgdG9vIG11Y2ggbG9vcHMgYW5kIG1ha2UgdGhlIGNvZGUgY2xl YW5lci4NCg0KU3VyZSwgSSB3aWxsIGFkZCBpdC4NCg0KPiANCj4gPiArCQlmb3IgKGkgPSAwOyBp IDwgbnJfc2VnczsgaSsrKSB7DQo+ID4gKwkJCS8qIEZhbGxiYWNrIHRvIFNXIGNvcHkgaWYgZXJy b3IgaGFwcGVucyAqLw0KPiA+ICsJCQljb3B5X2lkeCA9IHJ0ZV9kbWFfY29weShkbWFfaWQsIHZj aGFuX2lkLA0KPiAocnRlX2lvdmFfdClpb3ZbaV0uc3JjX2FkZHIsDQo+ID4gKwkJCQkJKHJ0ZV9p b3ZhX3QpaW92W2ldLmRzdF9hZGRyLCBpb3ZbaV0ubGVuLA0KPiA+ICsJCQkJCVJURV9ETUFfT1Bf RkxBR19MTEMpOw0KPiA+ICsJCQlpZiAodW5saWtlbHkoY29weV9pZHggPCAwKSkgew0KPiANCj4g VGhlIERNQSBjaGFubmVsIGlzIHByb3RlY3RlZCBieSBhIGxvY2ssIGFuZCB3ZSBjaGVjayB0aGUg Y2FwYWNpdHkgYmVmb3JlDQo+IGluaXRpYXRpbmcgdGhlIGNvcHkuDQo+IFNvIEkgZG9uJ3QgZXhw ZWN0IHJ0ZV9kbWFfY29weSgpIHRvIGZhaWwgYmVjYXVzZSBvZiBsYWNrIG9mIGNhcGFjaXR5LiBJ ZiBhbg0KPiBlcnJvciBoYXBwZW5zLCB0aGF0IGlzIGEgc2VyaW91cyBvbmUuDQo+IA0KPiBTbywg SSB3b25kZXIgd2hldGhlciBoYXZpbmcgYSBTVyBmYWxsYmFjayBtYWtlcyBzZW5zZS4gQ29kZSB3 b3VsZCBiZQ0KPiBtdWNoIHNpbXBsZXIgaWYgd2UganVzdCBleGl0IGVhcmx5IGlmIGFuIGVycm9y IGhhcHBlbnMuIExvZ2dpbmcgYW4gZXJyb3INCj4gbWVzc2FnZSBpbnN0ZWFkIHdvdWxkIGhlbHAg ZGVidWdnaW5nLiBDZXJ0YWlubHkgd2l0aCByYXRlIGxpbWl0aW5nIG5vdCB0bw0KPiBmbG9vZCB0 aGUgbG9nIGZpbGUuDQoNClRoYXQncyBjb3JyZWN0LiBJZiBlcnJvciByZWFsbHkgaGFwcGVucyBp biB0aGlzIGNhc2UsIGl0IG1lYW5zIERNQSBkZWZpbml0ZWx5DQpoYXMgc29tZXRoaW5nIHdyb25n LiBCZXR0ZXIgdG8gc3RvcCBhc3luYyBkYXRhLXBhdGggYW5kIGRlYnVnLiBTVyBmYWxsYmFjaw0K bWF5IGhpZGUgdGhpcyBzZXJpb3VzIGlzc3VlLg0KDQpJZiBubyBvYmplY3Rpb25zLCBJIHdpbGwg cmVtb3ZlIFNXIGZhbGxiYWNrIGJ1dCBhZGRpbmcgYW4gZXJyb3IgbG9nLg0KDQo+IA0KPiA+ICsJ CQkJLyogRmluZCBjb3JyZXNwb25kaW5nIFZBIHBhaXIgYW5kIGRvIFNXDQo+IGNvcHkgKi8NCj4g PiArCQkJCXJ0ZV9tZW1jcHkodnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLmRzdCwN Cj4gPiArCQkJCQkJdnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLnNyYywNCj4gPiAr CQkJCQkJdnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLmxlbik7DQo+ID4gKwkJCQlu cl9zd19jb3B5Kys7DQo+ID4gKw0KPiA+ICsJCQkJLyoqDQo+ID4gKwkJCQkgKiBBbGwgY29waWVz IG9mIHRoZSBwYWNrZXQgYXJlIHBlcmZvcm1lZA0KPiA+ICsJCQkJICogYnkgdGhlIENQVSwgc2V0 IHRoZSBwYWNrZXQgY29tcGxldGlvbiBmbGFnDQo+ID4gKwkJCQkgKiB0byB0cnVlLCBhcyBhbGwg Y29waWVzIGFyZSBkb25lLg0KPiA+ICsJCQkJICovDQo+IA0KPiBJIHRoaW5rIGl0IHdvdWxkIGJl dHRlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGxvb3AgdG8gYXZvaWQgZG9pbmcgdGhlIGNoZWNrIGZv cg0KPiBldmVyeSBzZWdtZW50IHdoaWxlIG9ubHkgdGhlIGxhc3Qgb25lIGhhcyBhIGNoYW5jZSB0 byBtYXRjaC4NCg0KSSBkaWRuJ3QgZ2V0IHRoZSBwb2ludC4gSG93IHRvIGdldCByaWQgb2YgdGhl IGxvb3A/IERvIHlvdSBzdWdnZXN0IHRvIGRvIFNXIGNvcHkNCmZvciBhbGwgbGVmdCBjb3BpZXMg b25jZSBvbmUgRE1BIGVycm9yIGhhcHBlbnMgKGlmIFNXIGNvcHkgaXMga2VwdCk/DQoNCj4gDQo+ ID4gKwkJCQlpZiAobnJfc3dfY29weSA9PSBucl9zZWdzKSB7DQo+ID4gKwkJCQkJdnEtPmFzeW5j LT5wa3RzX2NtcGxfZmxhZ1toZWFkX2lkeCAlDQo+IHZxLT5zaXplXSA9IHRydWU7DQo+ID4gKwkJ CQkJYnJlYWs7DQo+ID4gKwkJCQl9IGVsc2UgaWYgKGkgPT0gKG5yX3NlZ3MgLSAxKSkgew0KPiA+ ICsJCQkJCS8qKg0KPiA+ICsJCQkJCSAqIEEgcGFydCBvZiBjb3BpZXMgb2YgY3VycmVudCBwYWNr ZXQNCj4gPiArCQkJCQkgKiBhcmUgZW5xdWV1ZWQgdG8gdGhlIERNQQ0KPiBzdWNjZXNzZnVsbHkN Cj4gPiArCQkJCQkgKiBidXQgdGhlIGxhc3QgY29weSBmYWlscywgc3RvcmUgdGhlDQo+ID4gKwkJ CQkJICogcGFja2V0IGNvbXBsZXRpb24gZmxhZyBhZGRyZXNzDQo+ID4gKwkJCQkJICogaW4gdGhl IGxhc3QgRE1BIGNvcHkgc2xvdC4NCj4gPiArCQkJCQkgKi8NCj4gPiArCQkJCQlkbWFfaW5mby0N Cj4gPnBrdHNfY29tcGxldGVkX2ZsYWdbbGFzdF9jb3B5X2lkeCAmIHJpbmdfbWFza10gPQ0KPiA+ ICsJCQkJCQkmdnEtPmFzeW5jLQ0KPiA+cGt0c19jbXBsX2ZsYWdbaGVhZF9pZHggJSB2cS0+c2l6 ZV07DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCX0gZWxzZQ0KPiA+ICsJ CQkJbGFzdF9jb3B5X2lkeCA9IGNvcHlfaWR4Ow0KPiANCj4gQnJhY2VzIG9uIHRoZSBlbHNlIGFz IHlvdSBoYXZlIGJyYWNlcyBmb3IgdGhlIGlmIHN0YXRlbWVudC4NCj4gDQo+ID4gKw0KPiA+ICsJ CQliY2VfaWR4Kys7DQo+ID4gKw0KPiA+ICsJCQkvKioNCj4gPiArCQkJICogT25seSBzdG9yZSBw YWNrZXQgY29tcGxldGlvbiBmbGFnIGFkZHJlc3MgaW4gdGhlDQo+IGxhc3QgY29weSdzDQo+ID4g KwkJCSAqIHNsb3QsIGFuZCBvdGhlciBzbG90cyBhcmUgc2V0IHRvIE5VTEwuDQo+ID4gKwkJCSAq Lw0KPiA+ICsJCQlpZiAoaSA9PSAobnJfc2VncyAtIDEpKSB7DQo+ID4gKwkJCQlkbWFfaW5mby0+ cGt0c19jb21wbGV0ZWRfZmxhZ1tjb3B5X2lkeCAmDQo+IHJpbmdfbWFza10gPQ0KPiA+ICsJCQkJ CSZ2cS0+YXN5bmMtDQo+ID5wa3RzX2NtcGxfZmxhZ1toZWFkX2lkeCAlIHZxLT5zaXplXTsNCj4g PiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZG1hX2luZm8tPm5yX2JhdGNoaW5nICs9 IG5yX3NlZ3M7DQo+ID4gKwkJaWYgKHVubGlrZWx5KGRtYV9pbmZvLT5ucl9iYXRjaGluZyA+PQ0K PiBWSE9TVF9BU1lOQ19ETUFfQkFUQ0hJTkdfU0laRSkpIHsNCj4gPiArCQkJcnRlX2RtYV9zdWJt aXQoZG1hX2lkLCB2Y2hhbl9pZCk7DQo+ID4gKwkJCWRtYV9pbmZvLT5ucl9iYXRjaGluZyA9IDA7 DQo+ID4gKwkJfQ0KPiANCj4gSSB3b25kZXIgd2hldGhlciB3ZSBjb3VsZCBqdXN0IHJlbW92ZSB0 aGlzIHN1Ym1pdC4NCj4gSSBkb24ndCBleHBlY3QgY29tcGxldGlvbnMgdG8gaGFwcGVuIGJldHdl ZW4gdHdvIHBhY2tldHMgYXMgdGhlIERNQQ0KPiBjaGFubmVsIGlzIHByb3RlY3RlZCBieSBhIGxv Y2ssIHNvIG15IHVuZGVyc3RhbmRpbmcgaXMgb25jZSB0aGUgRE1BIHJpbmcgaXMNCj4gZnVsbCwg d2UganVzdCBlbmQtdXAgZXhpdGluZyBlYXJseSBiZWNhdXNlIERNQSBjaGFubmVsIGNhcGFjaXR5 IGlzIGNoZWNrZWQNCj4gZm9yIGV2ZXJ5IHBhY2tldC4NCj4gDQo+IFJlbW92aW5nIGl0IHdpbGwg bWF5YmUgaW1wcm92ZSBwZXJmb3JtYW5jZSBhICh2ZXJ5KSBsaXR0bGUgYml0LCBidXQgd2lsbA0K PiBjZXJ0YWlubHkgbWFrZSB0aGUgY29kZSBzaW1wbGVyIHRvIGZvbGxvdy4NCg0KR29vZCBzdWdn ZXN0aW9uLiBJIHdpbGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICsNCj4gPiArCQloZWFkX2lkeCsr Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsJaWYgKGRtYV9pbmZvLT5ucl9iYXRj aGluZyA+IDApIHsNCj4gDQo+IGlmIChsaWtlbHkoLi4uKSkNCg0KU3VyZSwgSSB3aWxsIGFkZCBs YXRlci4NCg0KPiANCj4gPiArCQlydGVfZG1hX3N1Ym1pdChkbWFfaWQsIHZjaGFuX2lkKTsNCj4g PiArCQlkbWFfaW5mby0+bnJfYmF0Y2hpbmcgPSAwOw0KPiA+ICsJfQ0KPiA+ICsJcnRlX3NwaW5s b2NrX3VubG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsNCj4gPiArCXZxLT5iYXRjaF9jb3B5X25i X2VsZW1zID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcGt0X2lkeDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDE2X3QNCj4gPiArdmhvc3RfYXN5 bmNfZG1hX2NoZWNrX2NvbXBsZXRlZChpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNoYW5faWQs DQo+ID4gK3VpbnQxNl90IG1heF9wa3RzKSB7DQo+ID4gKwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFu X2luZm8gKmRtYV9pbmZvID0NCj4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFu X2lkXTsNCj4gPiArCXVpbnQxNl90IHJpbmdfbWFzayA9IGRtYV9pbmZvLT5yaW5nX21hc2s7DQo+ ID4gKwl1aW50MTZfdCBsYXN0X2lkeCA9IDA7DQo+ID4gKwl1aW50MTZfdCBucl9jb3BpZXM7DQo+ ID4gKwl1aW50MTZfdCBjb3B5X2lkeDsNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKwlib29sIGhh c19lcnJvciA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXJ0ZV9zcGlubG9ja19sb2NrKCZkbWFfaW5m by0+ZG1hX2xvY2spOw0KPiA+ICsNCj4gPiArCS8qKg0KPiA+ICsJICogUHJpbnQgZXJyb3IgbG9n IGZvciBkZWJ1Z2dpbmcsIGlmIERNQSByZXBvcnRzIGVycm9yIGR1cmluZw0KPiA+ICsJICogRE1B IHRyYW5zZmVyLiBXZSBkbyBub3QgaGFuZGxlIGVycm9yIGluIHZob3N0IGxldmVsLg0KPiA+ICsJ ICovDQo+ID4gKwlucl9jb3BpZXMgPSBydGVfZG1hX2NvbXBsZXRlZChkbWFfaWQsIHZjaGFuX2lk LCBtYXhfcGt0cywNCj4gJmxhc3RfaWR4LCAmaGFzX2Vycm9yKTsNCj4gPiArCWlmICh1bmxpa2Vs eShoYXNfZXJyb3IpKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiZG1hICVkIHZjaGFu bmVsICV1IHJlcG9ydHMgZXJyb3INCj4gaW4gcnRlX2RtYV9jb21wbGV0ZWQoKVxuIiwNCj4gPiAr CQkJCWRtYV9pZCwgdmNoYW5faWQpOw0KPiANCj4gSSB3b25kZXIgaWYgcmF0ZSBsaW1pdGluZyB3 b3VsZA0KDQpTdXJlLCBJIHdpbGwgYXZvaWQgbG9nIGZsb29kaW5nLg0KDQo+IA0KPiA+ICsJfSBl bHNlIGlmIChucl9jb3BpZXMgPT0gMCkNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArDQo+ID4gKwlj b3B5X2lkeCA9IGxhc3RfaWR4IC0gbnJfY29waWVzICsgMTsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBucl9jb3BpZXM7IGkrKykgew0KPiA+ICsJCWJvb2wgKmZsYWc7DQo+ID4gKw0KPiA+ICsJCWZs YWcgPSBkbWFfaW5mby0+cGt0c19jb21wbGV0ZWRfZmxhZ1tjb3B5X2lkeCAmDQo+IHJpbmdfbWFz a107DQo+ID4gKwkJaWYgKGZsYWcpIHsNCj4gPiArCQkJLyoqDQo+ID4gKwkJCSAqIE1hcmsgdGhl IHBhY2tldCBmbGFnIGFzIHJlY2VpdmVkLiBUaGUgZmxhZw0KPiA+ICsJCQkgKiBjb3VsZCBiZWxv bmcgdG8gYW5vdGhlciB2aXJ0cXVldWUgYnV0IHdyaXRlDQo+ID4gKwkJCSAqIGlzIGF0b21pYy4N Cj4gPiArCQkJICovDQo+ID4gKwkJCSpmbGFnID0gdHJ1ZTsNCj4gPiArCQkJZG1hX2luZm8tPnBr dHNfY29tcGxldGVkX2ZsYWdbY29weV9pZHggJg0KPiByaW5nX21hc2tdID0gTlVMTDsNCj4gPiAr CQl9DQo+ID4gKwkJY29weV9pZHgrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gK291dDoNCj4gPiAr CXJ0ZV9zcGlubG9ja191bmxvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ID4gKwlyZXR1cm4g bnJfY29waWVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgc3RhdGljIGlubGluZSB2b2lkDQo+ID4g ICBkb19kYXRhX2NvcHlfZW5xdWV1ZShzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3Qgdmhv c3RfdmlydHF1ZXVlICp2cSkNCj4gPiAgIHsNCj4gPiBAQCAtODY1LDEyICsxMDA0LDEzIEBAIGFz eW5jX2l0ZXJfcmVzZXQoc3RydWN0IHZob3N0X2FzeW5jICphc3luYykNCj4gPiAgIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICAgYXN5bmNfbWJ1Zl90b19kZXNjX3NlZyhzdHJ1 Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlDQo+ICp2cSwNCj4gPiAg IAkJc3RydWN0IHJ0ZV9tYnVmICptLCB1aW50MzJfdCBtYnVmX29mZnNldCwNCj4gPiAtCQl1aW50 NjRfdCBidWZfaW92YSwgdWludDMyX3QgY3B5X2xlbikNCj4gPiArCQl1aW50NjRfdCBidWZfYWRk ciwgdWludDY0X3QgYnVmX2lvdmEsIHVpbnQzMl90IGNweV9sZW4pDQo+ID4gICB7DQo+ID4gICAJ c3RydWN0IHZob3N0X2FzeW5jICphc3luYyA9IHZxLT5hc3luYzsNCj4gPiAgIAl1aW50NjRfdCBt YXBwZWRfbGVuOw0KPiA+ICAgCXVpbnQzMl90IGJ1Zl9vZmZzZXQgPSAwOw0KPiA+ICAgCXZvaWQg KmhwYTsNCj4gPiArCXN0cnVjdCBiYXRjaF9jb3B5X2VsZW0gKmJjZSA9IHZxLT5iYXRjaF9jb3B5 X2VsZW1zOw0KPiA+DQo+ID4gICAJd2hpbGUgKGNweV9sZW4pIHsNCj4gPiAgIAkJaHBhID0gKHZv aWQgKikodWludHB0cl90KWdwYV90b19maXJzdF9ocGEoZGV2LA0KPiA+IEBAIC04ODYsNiArMTAy NiwzMSBAQCBhc3luY19tYnVmX3RvX2Rlc2Nfc2VnKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+ IHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICAgCQkJCQkJaHBhLCAoc2l6ZV90KW1h cHBlZF9sZW4pKSkNCj4gPiAgIAkJCXJldHVybiAtMTsNCj4gPg0KPiA+ICsJCS8qKg0KPiA+ICsJ CSAqIEtlZXAgVkEgZm9yIGFsbCBJT1ZBIHNlZ21lbnRzIGZvciBmYWxsaW5nIGJhY2sgdG8gU1cN Cj4gPiArCQkgKiBjb3B5IGluIGNhc2Ugb2YgcnRlX2RtYV9jb3B5KCkgZXJyb3IuDQo+ID4gKwkJ ICovDQo+IA0KPiBBcyBzYWlkIGJlbG93LCBJIHRoaW5rIHdlIGNvdWxkIGdldCByaWQgb2ZmIHRo ZSBTVyBmYWxsYmFjay4NCg0KTGlrZSB0aGUgcmVwbGllcyBhYm92ZSwgYSBiZXR0ZXIgd2F5IGZv ciBtZSBpcyB0byByZW1vdmUgU1cgZmFsbGJhY2suDQoNCj4gQnV0IGluIGNhc2Ugd2UgZGlkbid0 LCBJIHRoaW5rIGl0IHdvdWxkIGJlIHByZWZmZXJhYmxlIHRvIGNoYW5nZSB0aGUNCj4gcnRlX3Zo b3N0X2lvdmVjIHN0cnVjdCB0byBoYXZlIGJvdGggdGhlIGlvdmEgYW5kIHRoZSBWQSwgdGhhdCB3 b3VsZCBtYWtlDQo+IHRoZSBjb2RlIHNpbXBsZXIuDQo+IA0KPiBBbHNvLCB3aGlsZSBsb29raW5n IGF0IHRoaXMsIEkgbm90aWNlIHRoZSBzdHJ1Y3RzIHJ0ZV92aG9zdF9pb3ZfaXRlciBhbmQNCj4g cnRlX3Zob3N0X2lvdmVjIGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSBWaG9zdCBBUEksIGJ1dCBpdCBz aG91bGQgbm90IGJlIG5lY2Vzc2FyeQ0KPiBub3cgc2luY2UgYXBwbGljYXRpb24gbm8gbW9yZSBu ZWVkIHRvIGtub3cgYWJvdXQgaXQuDQoNCkdvb2QgY2F0Y2gsIGFuZCBJIHdpbGwgY2hhbmdlIGl0 IGxhdGVyLg0KDQo+IA0KPiA+ICsJCWlmICh1bmxpa2VseSh2cS0+YmF0Y2hfY29weV9uYl9lbGVt cyA+PSB2cS0NCj4gPmJhdGNoX2NvcHlfbWF4X2VsZW1zKSkgew0KPiA+ICsJCQlzdHJ1Y3QgYmF0 Y2hfY29weV9lbGVtICp0bXA7DQo+ID4gKwkJCXVpbnQxNl90IG5iX2VsZW1zID0gMiAqIHZxLT5i YXRjaF9jb3B5X21heF9lbGVtczsNCj4gPiArDQo+ID4gKwkJCVZIT1NUX0xPR19EQVRBKERFQlVH LCAiKCVkKSAlczogcnVuIG91dCBvZg0KPiBiYXRjaF9jb3B5X2VsZW1zLCAiDQo+ID4gKwkJCQkJ ImFuZCByZWFsbG9jIGRvdWJsZSBlbGVtZW50cy5cbiIsDQo+IGRldi0+dmlkLCBfX2Z1bmNfXyk7 DQo+ID4gKwkJCXRtcCA9IHJ0ZV9yZWFsbG9jX3NvY2tldCh2cS0+YmF0Y2hfY29weV9lbGVtcywN Cj4gbmJfZWxlbXMgKiBzaXplb2YoKnRtcCksDQo+ID4gKwkJCQkJUlRFX0NBQ0hFX0xJTkVfU0la RSwgdnEtDQo+ID5udW1hX25vZGUpOw0KPiA+ICsJCQlpZiAoIXRtcCkgew0KPiA+ICsJCQkJVkhP U1RfTE9HX0RBVEEoRVJSLCAiRmFpbGVkIHRvIHJlLWFsbG9jDQo+IGJhdGNoX2NvcHlfZWxlbXNc biIpOw0KPiA+ICsJCQkJcmV0dXJuIC0xOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQl2cS0+ YmF0Y2hfY29weV9tYXhfZWxlbXMgPSBuYl9lbGVtczsNCj4gPiArCQkJdnEtPmJhdGNoX2NvcHlf ZWxlbXMgPSB0bXA7DQo+ID4gKwkJCWJjZSA9IHRtcDsNCj4gPiArCQl9DQo+ID4gKwkJYmNlW3Zx LT5iYXRjaF9jb3B5X25iX2VsZW1zXS5kc3QgPSAodm9pZA0KPiAqKSgodWludHB0cl90KShidWZf YWRkciArIGJ1Zl9vZmZzZXQpKTsNCj4gPiArCQliY2VbdnEtPmJhdGNoX2NvcHlfbmJfZWxlbXNd LnNyYyA9DQo+IHJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KG0sIHZvaWQgKiwgbWJ1Zl9vZmZzZXQp Ow0KPiA+ICsJCWJjZVt2cS0+YmF0Y2hfY29weV9uYl9lbGVtcysrXS5sZW4gPSBtYXBwZWRfbGVu Ow0KPiA+ICsNCj4gPiAgIAkJY3B5X2xlbiAtPSAodWludDMyX3QpbWFwcGVkX2xlbjsNCj4gPiAg IAkJbWJ1Zl9vZmZzZXQgKz0gKHVpbnQzMl90KW1hcHBlZF9sZW47DQo+ID4gICAJCWJ1Zl9vZmZz ZXQgKz0gKHVpbnQzMl90KW1hcHBlZF9sZW47IEBAIC05MDEsNyArMTA2Niw4DQo+IEBADQo+ID4g c3luY19tYnVmX3RvX2Rlc2Nfc2VnKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHN0cnVjdCB2aG9z dF92aXJ0cXVldWUgKnZxLA0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCBiYXRjaF9jb3B5X2VsZW0g KmJhdGNoX2NvcHkgPSB2cS0+YmF0Y2hfY29weV9lbGVtczsNCj4gPg0KPiA+IC0JaWYgKGxpa2Vs eShjcHlfbGVuID4gTUFYX0JBVENIX0xFTiB8fCB2cS0+YmF0Y2hfY29weV9uYl9lbGVtcyA+PQ0K PiB2cS0+c2l6ZSkpIHsNCj4gPiArCWlmIChsaWtlbHkoY3B5X2xlbiA+IE1BWF9CQVRDSF9MRU4g fHwNCj4gPiArCQkJCXZxLT5iYXRjaF9jb3B5X25iX2VsZW1zID49IHZxLQ0KPiA+YmF0Y2hfY29w eV9tYXhfZWxlbXMpKSB7DQo+ID4gICAJCXJ0ZV9tZW1jcHkoKHZvaWQgKikoKHVpbnRwdHJfdCko YnVmX2FkZHIpKSwNCj4gPiAgIAkJCQlydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChtLCB2b2lkICos DQo+IG1idWZfb2Zmc2V0KSwNCj4gPiAgIAkJCQljcHlfbGVuKTsNCj4gPiBAQCAtMTAyMCw4ICsx MTg2LDEwIEBAIG1idWZfdG9fZGVzYyhzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3QNCj4g PiB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+DQo+ID4gICAJCWlmIChpc19hc3luYykgew0KPiA+ ICAgCQkJaWYgKGFzeW5jX21idWZfdG9fZGVzY19zZWcoZGV2LCB2cSwgbSwgbWJ1Zl9vZmZzZXQs DQo+ID4gKwkJCQkJCWJ1Zl9hZGRyICsgYnVmX29mZnNldCwNCj4gPiAgIAkJCQkJCWJ1Zl9pb3Zh ICsgYnVmX29mZnNldCwNCj4gY3B5X2xlbikgPCAwKQ0KPiA+ICAgCQkJCWdvdG8gZXJyb3I7DQo+ ID4gKw0KPiANCj4gUmVtb3ZlIG5ldyBsaW5lLg0KDQpJIHdpbGwgcmVtb3ZlIGl0IGxhdGVyLg0K DQpUaGFua3MsDQpKaWF5dQ0K