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 B9FDDA0524; Tue, 13 Apr 2021 13:48:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3ABD1160E72; Tue, 13 Apr 2021 13:48:35 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 27DDA160E66 for ; Tue, 13 Apr 2021 13:48:32 +0200 (CEST) IronPort-SDR: eHbfB0vSqkxujZ4VkdtsKG1faGfpvhmE2gco0Y0UOr+7PGb3c9FFxxz2lljgVGLEiDt28QDfYm EmuI7tpjxzeQ== X-IronPort-AV: E=McAfee;i="6200,9189,9952"; a="194423505" X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="194423505" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2021 04:48:29 -0700 IronPort-SDR: ZSkJo+KSuywDXXJ078GC2tzEhAdujtrS33qbXIEDntJI3EGr/GpH8iSkrvqQGJrvvyJ63TTZvC OeuKzVjyK1JA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="521572633" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga001.fm.intel.com with ESMTP; 13 Apr 2021 04:48:29 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 13 Apr 2021 04:48:28 -0700 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 13 Apr 2021 04:48:28 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Tue, 13 Apr 2021 04:48:28 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.170) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Tue, 13 Apr 2021 04:48:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VNzfdppQWiyJIt20Wf6YQqamNc0EGGm1KffHQcwSM5GD83dgVUidTMrOAvjbNmYHgO3/YNVbasqu0u+yC4+HFvAqQzZZUfLqjiMct4aWIPFXjkobJTPxZzNeegCzdX5dmi+dBiaCavVkykn6CbQTt1RX8Vftm8NMfzuDAJShbM/ZHBOS25JiZWSj6YuwVLauL6HE0Iz0UTaerJa1AbSRFra/N7QLVWQdCbg903MCJWq6+tgEXbhnCTG71MBBV1TfJ0vrZKg2H816Gxr5k5dIgc484Tg/GU2S9O1AFpLbHtLEmc+LHzaZn8fcoMqdYX2Zp4Q9Ircv7NuLY+XTZPcMmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2YTxPUutD/vpXqQv5WXzTjJ30JCbTCRpHNEn8u4M40k=; b=TZ7yXsMUDIZqoKYapxPPzzQrcXknYnJB/3F6EuWw+iPvgNfAAo9RgzbEVtUZQy4CQBWI+RZb04qANCd9RvaySEeQtUCa9B+SGLsL2gR2RPc0GZ35rljL1KL3Nelahx5bu73FZyLGeJO7apGd5qkYQXSlcGhcsXGmntphenAuj6a2nH/Xae1GFaZX62Wljv0u7kuCJAvp5EtY0aiVSpSj7hTnEXdwq9fPGYQIybXS3nH9FNEv7PQaJpREigUhwalWhGAyEUrgG4fvqi/B4+UsyBhna1TzpNGyM04e+0sSnv5ooBbtQyNG1xqNzwXZ1cHwxKbY/ZZY/6/+OWxQXy9eDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2YTxPUutD/vpXqQv5WXzTjJ30JCbTCRpHNEn8u4M40k=; b=hUSaf1YGJwry7su0j4EWvROiD5Pz5e6GV8CkIApXx5v5AK47FfDeCFvHEcvzEXf38bEagr81+KIUZui2y+Du7OVGm+YfdzA9PEpqCW/nSU2vlvSDngtD87UrjCnAHOMIaBgmGYcV0hdlhf7oPdeH0edulccvdgI71BmoidTQ04c= Received: from SJ0PR11MB5006.namprd11.prod.outlook.com (2603:10b6:a03:2db::22) by BYAPR11MB3816.namprd11.prod.outlook.com (2603:10b6:a03:f8::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.17; Tue, 13 Apr 2021 11:48:25 +0000 Received: from SJ0PR11MB5006.namprd11.prod.outlook.com ([fe80::522:5b2:4210:a4b3]) by SJ0PR11MB5006.namprd11.prod.outlook.com ([fe80::522:5b2:4210:a4b3%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 11:48:25 +0000 From: "Jiang, Cheng1" To: Maxime Coquelin , "Xia, Chenbo" CC: "dev@dpdk.org" , "Hu, Jiayu" , "Yang, YvonneX" , "Wang, Yinan" , "Liu, Yong" Thread-Topic: [PATCH v5 2/4] vhost: add support for packed ring in async vhost Thread-Index: AQHXL5GwrwOTZbnlu02dV4OGuidWu6qyIR+AgAAjiFA= Date: Tue, 13 Apr 2021 11:48:25 +0000 Message-ID: References: <20210317085426.10119-1-Cheng1.jiang@intel.com> <20210412113430.17587-1-Cheng1.jiang@intel.com> <20210412113430.17587-3-Cheng1.jiang@intel.com> <57c07ac5-884c-b191-cfe1-0a4ae03c0cde@redhat.com> In-Reply-To: <57c07ac5-884c-b191-cfe1-0a4ae03c0cde@redhat.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.51] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3142a91e-72f7-42e4-8da5-08d8fe720bf2 x-ms-traffictypediagnostic: BYAPR11MB3816: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Z7vs6LseRZGzUelskfXnlO+zksXtFsnw55jgKeDOteN2p9LW61IouEcrOi4xwrmvfwc7GZZPrlZQyg+xaKjvb08KjJNspd5qdQID1TfzIjXMvvDdomKi/CFItBDHrfgbts4cMiAtKfSupGpXdGuAdftvpizFyOMHnTVwtRAr9DOfeXZWOX2a/TkOBpbw+GMiBQmudWSs9EEonAsWFqze3qEyuvqfH7JQUui4UsqUzDDpuytB4tHY87F0f2k6E3nyf5/Sx048BMW4YCUKG7dqZeEHlqfELJp5ApztHy2EfHdOBKzjuGtRd2ir4O62SXG4IwjYXnEUrjllBdSWOYRzDJ9IBA0+99lqee0QL2KbS0kTl68VT5MqU0ySHPcNDB3LXq1S7f18bov2LUlQvpALPHypEK51srhC3lwpGqCtq4kuagxc89iPEDOJFAG8vCohUNjNlhk4GG6mOyeiIvbnX8iyFK98qYthm20ujMEFFENYW5h3YDnFdMisQ1OQLsAoDjGTXuc9CWHmszHTetR9I4Oegx/8vStBpVqmzzEynJSH86cM4eac6ZYm0NYJqkD96WYTBLecQIG7FJkrQRuMkHf49Wk8jxi9mHmZBi+5/AQ= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR11MB5006.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(136003)(376002)(346002)(396003)(39860400002)(107886003)(478600001)(71200400001)(8676002)(8936002)(52536014)(33656002)(55016002)(86362001)(316002)(4326008)(66556008)(83380400001)(186003)(30864003)(38100700002)(26005)(76116006)(5660300002)(66946007)(6636002)(9686003)(53546011)(54906003)(7696005)(122000001)(66476007)(110136005)(64756008)(6506007)(66446008)(2906002)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?QmhPSVppNldSaEJISnd4VitZTmF5dTJFM1o3bjJwaTllejJZNDhXcFhvL1JE?= =?utf-8?B?WTdzT1EwYktQazc4bmZpVGtBajZ4MGRSNmJhSmQ0M25MUmhjY2JBWkRKNk4x?= =?utf-8?B?UHFEU0crSCt5aDVwY0drMGZlMTgwQTErdWt5YjJhZWsvZlVvQzlUdXRwMXc0?= =?utf-8?B?TmRYZlFrMXpXNkhkaTBwMW9ISWlHKytLcm5raEFWZ2E3ZGdjTEtKZm9mTzAy?= =?utf-8?B?MUNQdXNKYlFmOWZFUWY0cVV4MTNEQ2FZVVk4NVNaazNEa1JyODRESVlEcVov?= =?utf-8?B?VzdrS1BSR3FjWHVja3M4dTdmTUx0UzJTenhvTWFWakRNUmYwVHE3eFJXRUsr?= =?utf-8?B?dHRxbndpQkQxajF0NHl4V0VjbmJSOW1abDVYVDBFK2ZudVZGTTcxeE9Pd3or?= =?utf-8?B?Z2RCbGU0bWRPVTVOWmoraFc5UndOcGJaTGVLNEY5d3c2RVlaTCtkOGNlWUJC?= =?utf-8?B?b2M4ZXErcnRKVTJ5cmhjY3hqWE5YZjRCSk82NlFNWlYxY0UrUWt2S2JHa1FE?= =?utf-8?B?UkpPbS9rVWZLKzJjUDVodEtvbS90bEpoVzlENXA4R3ZNdU55UzZ3b20vNlp1?= =?utf-8?B?RmZvQlQ3ZzAyT01wQ1N0SVBTVUJwbno2OEN6N1YyWFdYS24vZjIvekFQMUg2?= =?utf-8?B?R0NSekh6NW5Obi9FcURmRnpjTHFTRjJBZ1VvdkJ2ZlNqNy9rTmhyRDlYQ3JI?= =?utf-8?B?bmltMEM2MENnMlFkZy9vUXAwVS9GVzM5SDE5eEtOdHBsT1IvYTFSYnV1bTRx?= =?utf-8?B?enFhbEp5N09JMlFQV1NBZ0RML3p5Z29BRFBWUVZxY2hDYkRqTUpsNFVmY3kx?= =?utf-8?B?a1pxNEswZ0JOc0dON0dPem9oU0l1SmRubnlpV3dIMmdpQmFuc0ZUUGdQVUVH?= =?utf-8?B?V0Zqc1A2Q2xJZmFWUXpQb0pZcksvSks4WnhvSlE1YkNJcXZ6bW9UL25wVjFv?= =?utf-8?B?ZEcrRjQ2MmpaYk9LMTlFcmgrS1NMOUlOY29oSVpYZExLZXJNcHV1Q2RVYk9q?= =?utf-8?B?WHVkSHNpb2x2NlNpWkt4Y2VQUGdsZEFaTTZzVm9wWk9nOWVaTmU5M2pPK3hB?= =?utf-8?B?cnJXRjN3SVd6WE9SWDlkQ2o4cWxwVVNiZThMek5oWGkyaW1WSExKRGx0NUVz?= =?utf-8?B?TVNKL3NNM1JKZlArMSswNUJZZ0VYeFdFRmlJS2xyOFlma1BDVytOeVk5ci9k?= =?utf-8?B?a0ptWnVDeklKNFNySTRHRFlBdUhBOExmYURLRmNQMXhTZkJLN2tyNHhmOEFm?= =?utf-8?B?VFFoMCt6ZTlqRUdqUGN4Nk9CZ1lPZm9ZRlpKMkVJeXk5Zk9xdTRZSXlNMmdD?= =?utf-8?B?cXJlU3RnV2xBVldMaEc3MkkrMVpBRmdHYjJkRU5FSWk5NThuanhLakdSTWNN?= =?utf-8?B?VDJOaVhHTXNrL1F0UEl1U0xJd1BaZVpRaDNTc2J1dFZjTXZ1Vk1xUHdONmV1?= =?utf-8?B?YUFEWFBJQ1JiSXhkQStkdERjQ3lMQmtGMWZ5ZTM5emRDQ0wyL2xKYXJwRjBs?= =?utf-8?B?akFJYUZaRkdtSmdza09NRHNiclBwZGhyU1BwSkIvNS94aTdsOXE0UjBBL2NW?= =?utf-8?B?NC9rMDdFelRrRmZ6ZVpJS3A4SVlFWmFac250R1lRKzdyUms0MEVkK3h0bTIz?= =?utf-8?B?NmRPa0libmdkaFQ4VWIyb1F2LzJqTlZXTkJXQzVmbDJoTEVQRThLK2FtVEpF?= =?utf-8?B?WVJhVjd3NW5GUisva2hNRkRjdmtlUVlwM0dYVC9TbGFRZEtCZVRwL2ZVUWU0?= =?utf-8?Q?DCKVkVD7k4WIFqzl0Kncz+hD1uuZhAAQZGWj+eR?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB5006.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3142a91e-72f7-42e4-8da5-08d8fe720bf2 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Apr 2021 11:48:25.1504 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: oqvCn2Mpd7bInoo8X39Ltkq6nXRDNkvO/2zFEV2YPYTJ07xFjr0xtbo9ABDusu9mgln3foLCArrupawXhCDodg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3816 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v5 2/4] vhost: add support for packed ring in async vhost 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 Sender: "dev" SGkgTWF4aW1lLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1heGlt ZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IFR1ZXNkYXks IEFwcmlsIDEzLCAyMDIxIDQ6MzcgUE0NCj4gVG86IEppYW5nLCBDaGVuZzEgPGNoZW5nMS5qaWFu Z0BpbnRlbC5jb20+OyBYaWEsIENoZW5ibw0KPiA8Y2hlbmJvLnhpYUBpbnRlbC5jb20+DQo+IENj OiBkZXZAZHBkay5vcmc7IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29tPjsgWWFuZywgWXZv bm5lWA0KPiA8eXZvbm5leC55YW5nQGludGVsLmNvbT47IFdhbmcsIFlpbmFuIDx5aW5hbi53YW5n QGludGVsLmNvbT47IExpdSwNCj4gWW9uZyA8eW9uZy5saXVAaW50ZWwuY29tPg0KPiBTdWJqZWN0 OiBSZTogW1BBVENIIHY1IDIvNF0gdmhvc3Q6IGFkZCBzdXBwb3J0IGZvciBwYWNrZWQgcmluZyBp biBhc3luYyB2aG9zdA0KPiANCj4gDQo+IA0KPiBPbiA0LzEyLzIxIDE6MzQgUE0sIENoZW5nIEpp YW5nIHdyb3RlOg0KPiA+IEZvciBub3cgYXN5bmMgdmhvc3QgZGF0YSBwYXRoIG9ubHkgc3VwcG9y dHMgc3BsaXQgcmluZyBzdHJ1Y3R1cmUuIEluDQo+ID4gb3JkZXIgdG8gbWFrZSBhc3luYyB2aG9z dCBjb21wYXRpYmxlIHdpdGggdmlydGlvIDEuMSBzcGVjIHRoaXMgcGF0Y2gNCj4gPiBlbmFibGVz IHBhY2tlZCByaW5nIGluIGFzeW5jIHZob3N0IGRhdGEgcGF0aC4NCj4gPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IENoZW5nIEppYW5nIDxDaGVuZzEuamlhbmdAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ ICBsaWIvbGlicnRlX3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oIHwgICAxICsNCj4gPiAgbGliL2xp YnJ0ZV92aG9zdC92aG9zdC5jICAgICAgICAgICB8ICAyNyArLQ0KPiA+ICBsaWIvbGlicnRlX3Zo b3N0L3Zob3N0LmggICAgICAgICAgIHwgICA3ICstDQo+ID4gIGxpYi9saWJydGVfdmhvc3Qvdmly dGlvX25ldC5jICAgICAgfCA0MzggKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0NCj4gPiAg NCBmaWxlcyBjaGFuZ2VkLCA0NDggaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pDQo+ID4N Cj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+ IGIvbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+IGluZGV4IGM4NTVmZjg3 NS4uNmZhYTMxZjVhIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3QvcnRlX3Zob3N0 X2FzeW5jLmgNCj4gPiArKysgYi9saWIvbGlicnRlX3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ ID4gQEAgLTg5LDYgKzg5LDcgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyB7 ICBzdHJ1Y3QNCj4gPiBhc3luY19pbmZsaWdodF9pbmZvIHsNCj4gPiAgCXN0cnVjdCBydGVfbWJ1 ZiAqbWJ1ZjsNCj4gPiAgCXVpbnQxNl90IGRlc2NzOyAvKiBudW0gb2YgZGVzY3MgaW5mbGlnaHQg Ki8NCj4gPiArCXVpbnQxNl90IG5yX2J1ZmZlcnM7IC8qIG51bSBvZiBidWZmZXJzIGluZmxpZ2h0 IGZvciBwYWNrZWQgcmluZyAqLw0KPiA+ICB9Ow0KPiA+DQo+ID4gIC8qKg0KPiA+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmMgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmMg aW5kZXgNCj4gPiBhNzBmZTAxZDguLjhjOTkzNWMwZiAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGli cnRlX3Zob3N0L3Zob3N0LmMNCj4gPiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmMNCj4g PiBAQCAtMzQyLDE1ICszNDIsMjEgQEAgdmhvc3RfZnJlZV9hc3luY19tZW0oc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZQ0KPiAqdnEpDQo+ID4gew0KPiA+ICAJaWYgKHZxLT5hc3luY19wa3RzX2luZm8p DQo+ID4gIAkJcnRlX2ZyZWUodnEtPmFzeW5jX3BrdHNfaW5mbyk7DQo+ID4gLQlpZiAodnEtPmFz eW5jX2Rlc2NzX3NwbGl0KQ0KPiA+ICsJaWYgKHZxLT5hc3luY19idWZmZXJzX3BhY2tlZCkgew0K PiA+ICsJCXJ0ZV9mcmVlKHZxLT5hc3luY19idWZmZXJzX3BhY2tlZCk7DQo+ID4gKwkJdnEtPmFz eW5jX2J1ZmZlcnNfcGFja2VkID0gTlVMTDsNCj4gPiArCX0NCj4gPiArCWlmICh2cS0+YXN5bmNf ZGVzY3Nfc3BsaXQpIHsNCj4gDQo+IFlvdSBjYW4gcmVtb3ZlIHRoZSBjaGVjaywgcnRlX2ZyZWUg aXMgc2FmZSB3aXRoIE5VTEwgcG9pbnRlcnMuDQo+IFlvdSBjYW4gZG8gdGhlIHNhbWUgZm9yIHRo ZSBvdGhlciBvbmVzIGluIHRoaXMgZnVuY3Rpb24uDQoNCk9LLCBpdCB3aWxsIGJlIGZpeGVkLg0K DQo+IA0KPiA+ICAJCXJ0ZV9mcmVlKHZxLT5hc3luY19kZXNjc19zcGxpdCk7DQo+ID4gKwkJdnEt PmFzeW5jX2Rlc2NzX3NwbGl0ID0gTlVMTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gIAlpZiAodnEt Pml0X3Bvb2wpDQo+ID4gIAkJcnRlX2ZyZWUodnEtPml0X3Bvb2wpOw0KPiA+ICAJaWYgKHZxLT52 ZWNfcG9vbCkNCj4gPiAgCQlydGVfZnJlZSh2cS0+dmVjX3Bvb2wpOw0KPiA+DQo+ID4gIAl2cS0+ YXN5bmNfcGt0c19pbmZvID0gTlVMTDsNCj4gPiAtCXZxLT5hc3luY19kZXNjc19zcGxpdCA9IE5V TEw7DQo+ID4gIAl2cS0+aXRfcG9vbCA9IE5VTEw7DQo+ID4gIAl2cS0+dmVjX3Bvb2wgPSBOVUxM Ow0KPiA+ICB9DQo+ID4gQEAgLTE2MjcsOSArMTYzMyw5IEBAIGludCBydGVfdmhvc3RfYXN5bmNf Y2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLA0KPiB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAgCQly ZXR1cm4gLTE7DQo+ID4NCj4gPiAgCS8qIHBhY2tlZCBxdWV1ZSBpcyBub3Qgc3VwcG9ydGVkICov DQo+ID4gLQlpZiAodW5saWtlbHkodnFfaXNfcGFja2VkKGRldikgfHwgIWYuYXN5bmNfaW5vcmRl cikpIHsNCj4gPiArCWlmICh1bmxpa2VseSghZi5hc3luY19pbm9yZGVyKSkgew0KPiA+ICAJCVZI T1NUX0xPR19DT05GSUcoRVJSLA0KPiA+IC0JCQkiYXN5bmMgY29weSBpcyBub3Qgc3VwcG9ydGVk IG9uIHBhY2tlZCBxdWV1ZSBvcg0KPiBub24taW5vcmRlciBtb2RlICINCj4gPiArCQkJImFzeW5j IGNvcHkgaXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICINCj4gPiAgCQkJIih2 aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gPiAgCQlyZXR1cm4gLTE7DQo+ ID4gIAl9DQo+ID4gQEAgLTE2NjcsMTEgKzE2NzMsMTggQEAgaW50IHJ0ZV92aG9zdF9hc3luY19j aGFubmVsX3JlZ2lzdGVyKGludCB2aWQsDQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAJdnEt PnZlY19wb29sID0gcnRlX21hbGxvY19zb2NrZXQoTlVMTCwNCj4gPiAgCQkJVkhPU1RfTUFYX0FT WU5DX1ZFQyAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpLA0KPiA+ICAJCQlSVEVfQ0FDSEVfTElORV9T SVpFLCBub2RlKTsNCj4gPiAtCXZxLT5hc3luY19kZXNjc19zcGxpdCA9IHJ0ZV9tYWxsb2Nfc29j a2V0KE5VTEwsDQo+ID4gKwlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gPiArCQl2cS0+YXN5 bmNfYnVmZmVyc19wYWNrZWQgPSBydGVfbWFsbG9jX3NvY2tldChOVUxMLA0KPiA+ICsJCQl2cS0+ c2l6ZSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCksDQo+ID4gKwkJCVJU RV9DQUNIRV9MSU5FX1NJWkUsIG5vZGUpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQl2cS0+YXN5 bmNfZGVzY3Nfc3BsaXQgPSBydGVfbWFsbG9jX3NvY2tldChOVUxMLA0KPiA+ICAJCQl2cS0+c2l6 ZSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSwNCj4gPiAgCQkJUlRFX0NBQ0hFX0xJ TkVfU0laRSwgbm9kZSk7DQo+ID4gLQlpZiAoIXZxLT5hc3luY19kZXNjc19zcGxpdCB8fCAhdnEt PmFzeW5jX3BrdHNfaW5mbyB8fA0KPiA+IC0JCSF2cS0+aXRfcG9vbCB8fCAhdnEtPnZlY19wb29s KSB7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCF2cS0+YXN5bmNfYnVmZmVyc19wYWNrZWQg fHwgIXZxLT5hc3luY19kZXNjc19zcGxpdCB8fA0KPiA+ICsJCSF2cS0+YXN5bmNfcGt0c19pbmZv IHx8ICF2cS0+aXRfcG9vbCB8fCAhdnEtPnZlY19wb29sKSB7DQo+ID4gIAkJdmhvc3RfZnJlZV9h c3luY19tZW0odnEpOw0KPiA+ICAJCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiA+ICAJCQkJImFz eW5jIHJlZ2lzdGVyIGZhaWxlZDogY2Fubm90IGFsbG9jYXRlDQo+IG1lbW9yeSBmb3IgdnEgZGF0 YSAiDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaCBiL2xpYi9saWJy dGVfdmhvc3Qvdmhvc3QuaCBpbmRleA0KPiA+IGY2Mjg3MTRjMi4uZmUxMzFhZThmIDEwMDY0NA0K PiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVf dmhvc3Qvdmhvc3QuaA0KPiA+IEBAIC0yMDEsOSArMjAxLDE0IEBAIHN0cnVjdCB2aG9zdF92aXJ0 cXVldWUgew0KPiA+ICAJdWludDE2X3QJYXN5bmNfcGt0c19pZHg7DQo+ID4gIAl1aW50MTZfdAlh c3luY19wa3RzX2luZmxpZ2h0X247DQo+ID4gIAl1aW50MTZfdAlhc3luY19sYXN0X3BrdHNfbjsN Cj4gPiAtCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gICphc3luY19kZXNjc19zcGxpdDsNCj4gPiAr CXVuaW9uIHsNCj4gPiArCQlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICAqYXN5bmNfZGVzY3Nfc3Bs aXQ7DQo+ID4gKwkJc3RydWN0IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQgKmFzeW5jX2J1ZmZlcnNf cGFja2VkOw0KPiA+ICsJfTsNCj4gPiAgCXVpbnQxNl90IGFzeW5jX2Rlc2NfaWR4Ow0KPiA+ICsJ dWludDE2X3QgYXN5bmNfcGFja2VkX2J1ZmZlcl9pZHg7DQo+IA0KPiBEb24ndCBkdXBwbGljYXRl IHZhcmlhYmxlIG5hbWVzLCBhc3luY19kZXNjX2lkeCBjYW4gYmUgcmV1c2VkIGZvciBwYWNrZWQN Cj4gcmluZy4gQWxzbywgdGhleSBhcmUgcmVwcmVzZW50aW5nIHRoZSBzYW1lIHRoaW5nLCB3aHkg dXNlIGRlc2MgaW4gb25lIGNhc2UNCj4gYW5kIGJ1ZmZlciBpbiB0aGUgb3RoZXI/DQoNClRoZSBt YWluIHJlYXNvbiBpcyB0aGF0IHRoZSB1bml0IG9mIHRoZSBwYWNrZWQgdXNlZCByaW5nIGlzIGJ1 ZmZlciwgd2hpY2ggY2FuIGNvbnRhaW4gbWFueSBkZXNjLg0KSSB0aGluayB1c2luZyBkZXNjX2lk eCB3aWxsIGNhdXNlIGFtYmlndWl0eSwgYnV0IGlmIHlvdSB0aGluayB0aGF0IEkgc2hvdWxkIHJl dXNlIHRoZSBkZXNjX2lkeCwgSSBoYXZlIG5vIHByb2JsZW0gd2l0aCB0aGF0Lg0KDQo+IA0KPiA+ ICAJdWludDE2X3QgbGFzdF9hc3luY19kZXNjX2lkeDsNCj4gPiArCXVpbnQxNl90IGxhc3RfYXN5 bmNfYnVmZmVyX2lkeDsNCj4gDQo+IFNhbWUgcmVtYXJrIGhlcmUuDQo+IA0KPiA+ICAJLyogdnEg YXN5bmMgZmVhdHVyZXMgKi8NCj4gPiAgCWJvb2wJCWFzeW5jX2lub3JkZXI7DQo+ID4gZGlmZiAt LWdpdCBhL2xpYi9saWJydGVfdmhvc3QvdmlydGlvX25ldC5jDQo+ID4gYi9saWIvbGlicnRlX3Zo b3N0L3ZpcnRpb19uZXQuYyBpbmRleCBjNDNhYjAwOTMuLjQxMGJlOTY3OCAxMDA2NDQNCj4gPiAt LS0gYS9saWIvbGlicnRlX3Zob3N0L3ZpcnRpb19uZXQuYw0KPiA+ICsrKyBiL2xpYi9saWJydGVf dmhvc3QvdmlydGlvX25ldC5jDQo+ID4gQEAgLTM2MywxNCArMzYzLDE0IEBADQo+ID4gdmhvc3Rf c2hhZG93X2RlcXVldWVfc2luZ2xlX3BhY2tlZF9pbm9yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVl dWUNCj4gKnZxLA0KPiA+IH0NCj4gPg0KPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2 b2lkDQo+ID4gLXZob3N0X3NoYWRvd19lbnF1ZXVlX3NpbmdsZV9wYWNrZWQoc3RydWN0IHZpcnRp b19uZXQgKmRldiwNCj4gPiAtCQkJCSAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ IC0JCQkJICAgdWludDMyX3QgbGVuW10sDQo+ID4gLQkJCQkgICB1aW50MTZfdCBpZFtdLA0KPiA+ IC0JCQkJICAgdWludDE2X3QgY291bnRbXSwNCj4gPiArdmhvc3Rfc2hhZG93X2VucXVldWVfcGFj a2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQkJICAgdWludDMyX3QgKmxl biwNCj4gPiArCQkJCSAgIHVpbnQxNl90ICppZCwNCj4gPiArCQkJCSAgIHVpbnQxNl90ICpjb3Vu dCwNCj4gPiAgCQkJCSAgIHVpbnQxNl90IG51bV9idWZmZXJzKQ0KPiA+ICB7DQo+ID4gIAl1aW50 MTZfdCBpOw0KPiA+ICsNCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBudW1fYnVmZmVyczsgaSsrKSB7 DQo+ID4gIAkJLyogZW5xdWV1ZSBzaGFkb3cgZmx1c2ggYWN0aW9uIGFsaWduZWQgd2l0aCBiYXRj aCBudW0gKi8NCj4gPiAgCQlpZiAoIXZxLT5zaGFkb3dfdXNlZF9pZHgpDQo+ID4gQEAgLTM4Miw2 ICszODIsMTcgQEAgdmhvc3Rfc2hhZG93X2VucXVldWVfc2luZ2xlX3BhY2tlZChzdHJ1Y3QNCj4g dmlydGlvX25ldCAqZGV2LA0KPiA+ICAJCXZxLT5zaGFkb3dfYWxpZ25lZF9pZHggKz0gY291bnRb aV07DQo+ID4gIAkJdnEtPnNoYWRvd191c2VkX2lkeCsrOw0KPiA+ICAJfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gK3Zob3N0X3NoYWRv d19lbnF1ZXVlX3NpbmdsZV9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gPiArCQkJ CSAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQkJICAgdWludDMyX3QgKmxl biwNCj4gPiArCQkJCSAgIHVpbnQxNl90ICppZCwNCj4gPiArCQkJCSAgIHVpbnQxNl90ICpjb3Vu dCwNCj4gPiArCQkJCSAgIHVpbnQxNl90IG51bV9idWZmZXJzKQ0KPiA+ICt7DQo+ID4gKwl2aG9z dF9zaGFkb3dfZW5xdWV1ZV9wYWNrZWQodnEsIGxlbiwgaWQsIGNvdW50LCBudW1fYnVmZmVycyk7 DQo+ID4NCj4gPiAgCWlmICh2cS0+c2hhZG93X2FsaWduZWRfaWR4ID49IFBBQ0tFRF9CQVRDSF9T SVpFKSB7DQo+ID4gIAkJZG9fZGF0YV9jb3B5X2VucXVldWUoZGV2LCB2cSk7DQo+ID4gQEAgLTE0 ODEsNiArMTQ5Miw2MiBAQCBzaGFkb3dfcmluZ19zdG9yZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVl ICp2cSwNCj4gdm9pZCAqc2hhZG93X3JpbmcsIHZvaWQgKmRfcmluZywNCj4gPiAgCX0NCj4gPiAg fQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArdmhvc3Rf dXBkYXRlX3VzZWRfcGFja2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQlz dHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCAqc2hhZG93X3JpbmcsDQo+ID4gKwkJCXVpbnQx Nl90IGNvdW50KQ0KPiA+ICt7DQo+ID4gKwlpZiAoY291bnQgPT0gMCkNCj4gPiArCQlyZXR1cm47 DQo+IA0KPiBNb3ZlIHRoaXMgYWZ0ZXIgdGhlIHZhcmlhYmxlcyBkZWNsYXJhdGlvbi4NCg0KU3Vy ZS4NCg0KPiANCj4gPiArDQo+ID4gKwlpbnQgaTsNCj4gPiArCXVpbnQxNl90IHVzZWRfaWR4ID0g dnEtPmxhc3RfdXNlZF9pZHg7DQo+ID4gKwl1aW50MTZfdCBoZWFkX2lkeCA9IHZxLT5sYXN0X3Vz ZWRfaWR4Ow0KPiA+ICsJdWludDE2X3QgaGVhZF9mbGFncyA9IDA7DQo+ID4gKw0KPiA+ICsJLyog U3BsaXQgbG9vcCBpbiB0d28gdG8gc2F2ZSBtZW1vcnkgYmFycmllcnMgKi8NCj4gPiArCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gKwkJdnEtPmRlc2NfcGFja2VkW3VzZWRfaWR4 XS5pZCA9IHNoYWRvd19yaW5nW2ldLmlkOw0KPiA+ICsJCXZxLT5kZXNjX3BhY2tlZFt1c2VkX2lk eF0ubGVuID0gc2hhZG93X3JpbmdbaV0ubGVuOw0KPiA+ICsNCj4gPiArCQl1c2VkX2lkeCArPSBz aGFkb3dfcmluZ1tpXS5jb3VudDsNCj4gPiArCQlpZiAodXNlZF9pZHggPj0gdnEtPnNpemUpDQo+ ID4gKwkJCXVzZWRfaWR4IC09IHZxLT5zaXplOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFRo ZSBvcmRlcmluZyBmb3Igc3RvcmluZyBkZXNjIGZsYWdzIG5lZWRzIHRvIGJlIGVuZm9yY2VkLiAq Lw0KPiA+ICsJcnRlX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfUkVMRUFTRSk7DQo+ID4g Kw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCj4gPiArCQl1aW50MTZfdCBm bGFnczsNCj4gPiArDQo+ID4gKwkJaWYgKHZxLT5zaGFkb3dfdXNlZF9wYWNrZWRbaV0ubGVuKQ0K PiA+ICsJCQlmbGFncyA9IFZSSU5HX0RFU0NfRl9XUklURTsNCj4gPiArCQllbHNlDQo+ID4gKwkJ CWZsYWdzID0gMDsNCj4gPiArDQo+ID4gKwkJaWYgKHZxLT51c2VkX3dyYXBfY291bnRlcikgew0K PiA+ICsJCQlmbGFncyB8PSBWUklOR19ERVNDX0ZfVVNFRDsNCj4gPiArCQkJZmxhZ3MgfD0gVlJJ TkdfREVTQ19GX0FWQUlMOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWZsYWdzICY9IH5WUklO R19ERVNDX0ZfVVNFRDsNCj4gPiArCQkJZmxhZ3MgJj0gflZSSU5HX0RFU0NfRl9BVkFJTDsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChpID4gMCkgew0KPiA+ICsJCQl2cS0+ZGVzY19wYWNr ZWRbdnEtPmxhc3RfdXNlZF9pZHhdLmZsYWdzID0gZmxhZ3M7DQo+ID4gKw0KPiA+ICsJCX0gZWxz ZSB7DQo+ID4gKwkJCWhlYWRfaWR4ID0gdnEtPmxhc3RfdXNlZF9pZHg7DQo+ID4gKwkJCWhlYWRf ZmxhZ3MgPSBmbGFnczsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZxX2luY19sYXN0X3VzZWRf cGFja2VkKHZxLCBzaGFkb3dfcmluZ1tpXS5jb3VudCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ dnEtPmRlc2NfcGFja2VkW2hlYWRfaWR4XS5mbGFncyA9IGhlYWRfZmxhZ3M7IH0NCj4gPiArDQo+ ID4gIHN0YXRpYyBfX3J0ZV9ub2lubGluZSB1aW50MzJfdA0KPiA+ICB2aXJ0aW9fZGV2X3J4X2Fz eW5jX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiA+ICAJc3RydWN0IHZo b3N0X3ZpcnRxdWV1ZSAqdnEsIHVpbnQxNl90IHF1ZXVlX2lkLCBAQCAtMTY1Niw2DQo+ICsxNzIz LDI5NA0KPiA+IEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3NwbGl0KHN0cnVjdCB2aXJ0 aW9fbmV0ICpkZXYsDQo+ID4gIAlyZXR1cm4gcGt0X2lkeDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0 YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICt2aG9zdF9lbnF1ZXVlX2FzeW5jX3Np bmdsZV9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gPiArCQkJICAgIHN0cnVjdCB2 aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQkgICAgc3RydWN0IHJ0ZV9tYnVmICpwa3QsDQo+ ID4gKwkJCSAgICBzdHJ1Y3QgYnVmX3ZlY3RvciAqYnVmX3ZlYywNCj4gPiArCQkJICAgIHVpbnQx Nl90ICpucl9kZXNjcywNCj4gPiArCQkJICAgIHVpbnQxNl90ICpucl9idWZmZXJzLA0KPiA+ICsJ CQkgICAgc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjICphc3luY19kZXNjcywNCj4gPiArCQkJICAg IHN0cnVjdCBpb3ZlYyAqc3JjX2lvdmVjLCBzdHJ1Y3QgaW92ZWMgKmRzdF9pb3ZlYywNCj4gPiAr CQkJICAgIHN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKnNyY19pdCwNCj4gPiArCQkJICAgIHN0 cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKmRzdF9pdCkgew0KPiA+ICsJdWludDE2X3QgbnJfdmVj ID0gMDsNCj4gPiArCXVpbnQxNl90IGF2YWlsX2lkeCA9IHZxLT5sYXN0X2F2YWlsX2lkeDsNCj4g PiArCXVpbnQxNl90IG1heF90cmllcywgdHJpZXMgPSAwOw0KPiA+ICsJdWludDE2X3QgYnVmX2lk ID0gMDsNCj4gPiArCXVpbnQzMl90IGxlbiA9IDA7DQo+ID4gKwl1aW50MTZfdCBkZXNjX2NvdW50 ID0gMDsNCj4gPiArCXVpbnQzMl90IHNpemUgPSBwa3QtPnBrdF9sZW4gKyBzaXplb2Yoc3RydWN0 DQo+IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1Zik7DQo+ID4gKwl1aW50MzJfdCBidWZmZXJfbGVu W3ZxLT5zaXplXTsNCj4gPiArCXVpbnQxNl90IGJ1ZmZlcl9idWZfaWRbdnEtPnNpemVdOw0KPiA+ ICsJdWludDE2X3QgYnVmZmVyX2Rlc2NfY291bnRbdnEtPnNpemVdOw0KPiA+ICsJKm5yX2J1ZmZl cnMgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChyeHZxX2lzX21lcmdlYWJsZShkZXYpKQ0KPiA+ICsJ CW1heF90cmllcyA9IHZxLT5zaXplIC0gMTsNCj4gPiArCWVsc2UNCj4gPiArCQltYXhfdHJpZXMg PSAxOw0KPiA+ICsNCj4gPiArCXdoaWxlIChzaXplID4gMCkgew0KPiA+ICsJCS8qDQo+ID4gKwkJ ICogaWYgd2UgdHJpZWQgYWxsIGF2YWlsYWJsZSByaW5nIGl0ZW1zLCBhbmQgc3RpbGwNCj4gPiAr CQkgKiBjYW4ndCBnZXQgZW5vdWdoIGJ1ZiwgaXQgbWVhbnMgc29tZXRoaW5nIGFibm9ybWFsDQo+ ID4gKwkJICogaGFwcGVuZWQuDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKHVubGlrZWx5KCsrdHJp ZXMgPiBtYXhfdHJpZXMpKQ0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJCWlmICh1 bmxpa2VseShmaWxsX3ZlY19idWZfcGFja2VkKGRldiwgdnEsDQo+ID4gKwkJCQkJCWF2YWlsX2lk eCwgJmRlc2NfY291bnQsDQo+ID4gKwkJCQkJCWJ1Zl92ZWMsICZucl92ZWMsDQo+ID4gKwkJCQkJ CSZidWZfaWQsICZsZW4sDQo+ID4gKwkJCQkJCVZIT1NUX0FDQ0VTU19SVykgPCAwKSkNCj4gPiAr CQkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCQlsZW4gPSBSVEVfTUlOKGxlbiwgc2l6ZSk7DQo+ ID4gKwkJc2l6ZSAtPSBsZW47DQo+ID4gKw0KPiA+ICsJCWJ1ZmZlcl9sZW5bKm5yX2J1ZmZlcnNd ID0gbGVuOw0KPiA+ICsJCWJ1ZmZlcl9idWZfaWRbKm5yX2J1ZmZlcnNdID0gYnVmX2lkOw0KPiA+ ICsJCWJ1ZmZlcl9kZXNjX2NvdW50Wypucl9idWZmZXJzXSA9IGRlc2NfY291bnQ7DQo+ID4gKwkJ Km5yX2J1ZmZlcnMgKz0gMTsNCj4gPiArDQo+ID4gKwkJKm5yX2Rlc2NzICs9IGRlc2NfY291bnQ7 DQo+ID4gKwkJYXZhaWxfaWR4ICs9IGRlc2NfY291bnQ7DQo+ID4gKwkJaWYgKGF2YWlsX2lkeCA+ PSB2cS0+c2l6ZSkNCj4gPiArCQkJYXZhaWxfaWR4IC09IHZxLT5zaXplOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWlmIChhc3luY19tYnVmX3RvX2Rlc2MoZGV2LCB2cSwgcGt0LCBidWZfdmVjLCBu cl92ZWMsICpucl9idWZmZXJzLA0KPiA+ICsJCXNyY19pb3ZlYywgZHN0X2lvdmVjLCBzcmNfaXQs IGRzdF9pdCkgPCAwKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCS8qIHN0b3JlIGRlc2NyaXB0 b3JzIGZvciBETUEgKi8NCj4gPiArCWlmIChhdmFpbF9pZHggPj0gKm5yX2Rlc2NzKQ0KPiA+ICsJ CXJ0ZV9tZW1jcHkoYXN5bmNfZGVzY3MsDQo+ID4gKwkJCSZ2cS0+ZGVzY19wYWNrZWRbdnEtPmxh c3RfYXZhaWxfaWR4XSwNCj4gPiArCQkJKm5yX2Rlc2NzICogc2l6ZW9mKHN0cnVjdCB2cmluZ19w YWNrZWRfZGVzYykpOw0KPiANCj4gUGxlYXNlIGFkZCBicmFja2V0cyBmb3IgdGhlICdpZicgc2lu Y2UgdGhlcmUgYXJlIGZvciB0aGUgJ2Vsc2UnLg0KDQpTdXJlLCBzb3JyeSBmb3IgdGhhdC4NCg0K PiANCj4gPiArCWVsc2Ugew0KPiA+ICsJCXVpbnQxNl90IG5yX2NvcHkgPSB2cS0+c2l6ZSAtIHZx LT5sYXN0X2F2YWlsX2lkeDsNCj4gPiArCQlydGVfbWVtY3B5KGFzeW5jX2Rlc2NzLA0KPiA+ICsJ CQkmdnEtPmRlc2NfcGFja2VkW3ZxLT5sYXN0X2F2YWlsX2lkeF0sDQo+ID4gKwkJCW5yX2NvcHkg KiBzaXplb2Yoc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjKSk7DQo+ID4gKwkJcnRlX21lbWNweShh c3luY19kZXNjcyArIG5yX2NvcHksDQo+ID4gKwkJCXZxLT5kZXNjX3BhY2tlZCwgKCpucl9kZXNj cyAtIG5yX2NvcHkpICoNCj4gPiArCQkJc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYykp Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXZob3N0X3NoYWRvd19lbnF1ZXVlX3BhY2tlZCh2cSwg YnVmZmVyX2xlbiwgYnVmZmVyX2J1Zl9pZCwNCj4gPiArCQkJCQkgICBidWZmZXJfZGVzY19jb3Vu dCwgKm5yX2J1ZmZlcnMpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQxNl90DQo+ID4gK3ZpcnRpb19kZXZf cnhfYXN5bmNfc2luZ2xlX3BhY2tlZChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiA+ICsJCQkg ICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ID4gKwkJCSAgICBzdHJ1Y3QgcnRlX21i dWYgKnBrdCwNCj4gPiArCQkJICAgIHVpbnQxNl90ICpucl9kZXNjcywgdWludDE2X3QgKm5yX2J1 ZmZlcnMsDQo+ID4gKwkJCSAgICBzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2MgKmFzeW5jX2Rlc2Nz LA0KPiA+ICsJCQkgICAgc3RydWN0IGlvdmVjICpzcmNfaW92ZWMsIHN0cnVjdCBpb3ZlYyAqZHN0 X2lvdmVjLA0KPiA+ICsJCQkgICAgc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqc3JjX2l0LA0K PiA+ICsJCQkgICAgc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqZHN0X2l0KSB7DQo+ID4gKwlz dHJ1Y3QgYnVmX3ZlY3RvciBidWZfdmVjW0JVRl9WRUNUT1JfTUFYXTsNCj4gPiArCSpucl9kZXNj cyA9IDA7DQo+ID4gKwkqbnJfYnVmZmVycyA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5 KHZob3N0X2VucXVldWVfYXN5bmNfc2luZ2xlX3BhY2tlZChkZXYsIHZxLCBwa3QsDQo+IGJ1Zl92 ZWMsDQo+ID4gKwkJCQkJCSBucl9kZXNjcywNCj4gPiArCQkJCQkJIG5yX2J1ZmZlcnMsDQo+ID4g KwkJCQkJCSBhc3luY19kZXNjcywNCj4gPiArCQkJCQkJIHNyY19pb3ZlYywgZHN0X2lvdmVjLA0K PiA+ICsJCQkJCQkgc3JjX2l0LCBkc3RfaXQpIDwgMCkpIHsNCj4gPiArCQlWSE9TVF9MT0dfREFU QShERUJVRywNCj4gPiArCQkJCSIoJWQpIGZhaWxlZCB0byBnZXQgZW5vdWdoIGRlc2MgZnJvbSB2 cmluZ1xuIiwNCj4gPiArCQkJCWRldi0+dmlkKTsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJVkhPU1RfTE9HX0RBVEEoREVCVUcsICIoJWQpIGN1cnJlbnQgaW5kZXgg JWQgfCBlbmQNCj4gaW5kZXggJWRcbiIsDQo+ID4gKwkJCWRldi0+dmlkLCB2cS0+bGFzdF9hdmFp bF9pZHgsDQo+ID4gKwkJCXZxLT5sYXN0X2F2YWlsX2lkeCArICpucl9kZXNjcyk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBfX3J0ZV9ub2lubGlu ZSB1aW50MzJfdA0KPiA+ICt2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0 IHZpcnRpb19uZXQgKmRldiwNCj4gPiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1aW50 MTZfdCBxdWV1ZV9pZCwNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQzMl90IGNv dW50LA0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICoqY29tcF9wa3RzLCB1aW50MzJfdCAqY29tcF9j b3VudCkgew0KPiA+ICsJdWludDMyX3QgcGt0X2lkeCA9IDAsIHBrdF9idXJzdF9pZHggPSAwOw0K PiA+ICsJdWludDE2X3QgYXN5bmNfZGVzY3NfaWR4ID0gMDsNCj4gPiArCXVpbnQxNl90IG51bV9i dWZmZXJzOw0KPiA+ICsJdWludDE2X3QgbnVtX2Rlc2M7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHJ0 ZV92aG9zdF9pb3ZfaXRlciAqaXRfcG9vbCA9IHZxLT5pdF9wb29sOw0KPiA+ICsJc3RydWN0IGlv dmVjICp2ZWNfcG9vbCA9IHZxLT52ZWNfcG9vbDsNCj4gPiArCXN0cnVjdCBydGVfdmhvc3RfYXN5 bmNfZGVzYyB0ZGVzW01BWF9QS1RfQlVSU1RdOw0KPiA+ICsJc3RydWN0IGlvdmVjICpzcmNfaW92 ZWMgPSB2ZWNfcG9vbDsNCj4gPiArCXN0cnVjdCBpb3ZlYyAqZHN0X2lvdmVjID0gdmVjX3Bvb2wg KyAoVkhPU1RfTUFYX0FTWU5DX1ZFQyA+Pg0KPiAxKTsNCj4gPiArCXN0cnVjdCBydGVfdmhvc3Rf aW92X2l0ZXIgKnNyY19pdCA9IGl0X3Bvb2w7DQo+ID4gKwlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9p dGVyICpkc3RfaXQgPSBpdF9wb29sICsgMTsNCj4gPiArCXVpbnQxNl90IHNsb3RfaWR4ID0gMDsN Cj4gPiArCXVpbnQxNl90IHNlZ3NfYXdhaXQgPSAwOw0KPiA+ICsJdWludDE2X3QgaW92ZWNfaWR4 ID0gMCwgaXRfaWR4ID0gMDsNCj4gPiArCXN0cnVjdCBhc3luY19pbmZsaWdodF9pbmZvICpwa3Rz X2luZm8gPSB2cS0+YXN5bmNfcGt0c19pbmZvOw0KPiA+ICsJdWludDMyX3Qgbl9wa3RzID0gMCwg cGt0X2VyciA9IDA7DQo+ID4gKwl1aW50MzJfdCBudW1fYXN5bmNfcGt0cyA9IDAsIG51bV9kb25l X3BrdHMgPSAwOw0KPiA+ICsJc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjIGFzeW5jX2Rlc2NzW3Zx LT5zaXplXTsNCj4gPiArDQo+ID4gKwlydGVfcHJlZmV0Y2gwKCZ2cS0+ZGVzY19wYWNrZWRbdnEt Pmxhc3RfYXZhaWxfaWR4ICYgKHZxLT5zaXplIC0NCj4gPiArMSldKTsNCj4gDQo+IFRoZSBzaXpl IG9mIHRoZSByaW5nIGlzIG5vdCBuZWNlc3NhcmlseSBhIHBvd2VyIG9mIHR3byB3aXRoIHBhY2tl ZCByaW5nLg0KDQpGb3IgdGhlIHNpemUgb2YgdGhlIHJpbmcgaXMgbm90IG5lY2Vzc2FyaWx5IGEg cG93ZXIgb2YgdHdvLA0Kc28gbWF5YmUgSSBjYW4gdXNlIGNvZGVzIGxpa2UgDQpJbmR4ICUgdnEt PnNpemUgID8NCkknbSBub3Qgc3VyZSBpZiBpdCdzIGEgZ29vZCB3YXkgdG8gZG8gdGhhdC4NCg0K PiANCj4gPiArDQo+ID4gKwlmb3IgKHBrdF9pZHggPSAwOyBwa3RfaWR4IDwgY291bnQ7IHBrdF9p ZHgrKykgew0KPiA+ICsJCWlmICh1bmxpa2VseSh2aXJ0aW9fZGV2X3J4X2FzeW5jX3NpbmdsZV9w YWNrZWQoZGV2LCB2cSwNCj4gPiArCQkJCQkJcGt0c1twa3RfaWR4XSwNCj4gPiArCQkJCQkJJm51 bV9kZXNjLCAmbnVtX2J1ZmZlcnMsDQo+ID4gKw0KPiAJJmFzeW5jX2Rlc2NzW2FzeW5jX2Rlc2Nz X2lkeF0sDQo+ID4gKwkJCQkJCSZzcmNfaW92ZWNbaW92ZWNfaWR4XSwNCj4gPiArCQkJCQkJJmRz dF9pb3ZlY1tpb3ZlY19pZHhdLA0KPiA+ICsJCQkJCQkmc3JjX2l0W2l0X2lkeF0sDQo+ID4gKwkJ CQkJCSZkc3RfaXRbaXRfaWR4XSkgPCAwKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJ CVZIT1NUX0xPR19EQVRBKERFQlVHLCAiKCVkKSBjdXJyZW50IGluZGV4ICVkIHwgZW5kDQo+IGlu ZGV4ICVkXG4iLA0KPiA+ICsJCQlkZXYtPnZpZCwgdnEtPmxhc3RfYXZhaWxfaWR4LA0KPiA+ICsJ CQl2cS0+bGFzdF9hdmFpbF9pZHggKyBudW1fZGVzYyk7DQo+ID4gKw0KPiA+ICsJCXNsb3RfaWR4 ID0gKHZxLT5hc3luY19wa3RzX2lkeCArIG51bV9hc3luY19wa3RzKSAmDQo+ID4gKwkJCSh2cS0+ c2l6ZSAtIDEpOw0KPiANCj4gU2FtZSBoZXJlLg0KDQpTdXJlLg0KDQo+IA0KPiA+ICsJCWlmIChz cmNfaXRbaXRfaWR4XS5jb3VudCkgew0KPiA+ICsJCQl1aW50MTZfdCBmcm9tLCB0bzsNCj4gPiAr DQo+ID4gKwkJCWFzeW5jX2Rlc2NzX2lkeCArPSBudW1fZGVzYzsNCj4gPiArCQkJYXN5bmNfZmls bF9kZXNjKCZ0ZGVzW3BrdF9idXJzdF9pZHgrK10sDQo+ICZzcmNfaXRbaXRfaWR4XSwNCj4gPiAr CQkJCQkmZHN0X2l0W2l0X2lkeF0pOw0KPiA+ICsJCQlwa3RzX2luZm9bc2xvdF9pZHhdLmRlc2Nz ID0gbnVtX2Rlc2M7DQo+ID4gKwkJCXBrdHNfaW5mb1tzbG90X2lkeF0ubnJfYnVmZmVycyA9IG51 bV9idWZmZXJzOw0KPiA+ICsJCQlwa3RzX2luZm9bc2xvdF9pZHhdLm1idWYgPSBwa3RzW3BrdF9p ZHhdOw0KPiA+ICsJCQludW1fYXN5bmNfcGt0cysrOw0KPiA+ICsJCQlpb3ZlY19pZHggKz0gc3Jj X2l0W2l0X2lkeF0ubnJfc2VnczsNCj4gPiArCQkJaXRfaWR4ICs9IDI7DQo+ID4gKw0KPiA+ICsJ CQlzZWdzX2F3YWl0ICs9IHNyY19pdFtpdF9pZHhdLm5yX3NlZ3M7DQo+ID4gKw0KPiA+ICsJCQkv KioNCj4gPiArCQkJICogcmVjb3ZlciBzaGFkb3cgdXNlZCByaW5nIGFuZCBrZWVwIERNQS1vY2N1 cGllZA0KPiA+ICsJCQkgKiBkZXNjcmlwdG9ycy4NCj4gPiArCQkJICovDQo+ID4gKwkJCWZyb20g PSB2cS0+c2hhZG93X3VzZWRfaWR4IC0gbnVtX2J1ZmZlcnM7DQo+ID4gKwkJCXRvID0gdnEtPmFz eW5jX3BhY2tlZF9idWZmZXJfaWR4ICYgKHZxLT5zaXplIC0gMSk7DQo+ID4gKwkJCXNoYWRvd19y aW5nX3N0b3JlKHZxLCB2cS0+c2hhZG93X3VzZWRfcGFja2VkLA0KPiA+ICsJCQkJCXZxLT5hc3lu Y19idWZmZXJzX3BhY2tlZCwNCj4gPiArCQkJCQlmcm9tLCB0bywgbnVtX2J1ZmZlcnMsDQo+ID4g KwkJCQkJc2l6ZW9mKHN0cnVjdA0KPiB2cmluZ191c2VkX2VsZW1fcGFja2VkKSk7DQo+ID4gKw0K PiA+ICsJCQl2cS0+YXN5bmNfcGFja2VkX2J1ZmZlcl9pZHggKz0gbnVtX2J1ZmZlcnM7DQo+ID4g KwkJCXZxLT5zaGFkb3dfdXNlZF9pZHggLT0gbnVtX2J1ZmZlcnM7DQo+ID4gKwkJfSBlbHNlDQo+ IA0KPiBCcmFja2V0cyBuZWVkZWQuDQoNClN1cmUuDQoNCj4gDQo+ID4gKwkJCWNvbXBfcGt0c1tu dW1fZG9uZV9wa3RzKytdID0gcGt0c1twa3RfaWR4XTsNCj4gPiArDQo+ID4gKwkJdnFfaW5jX2xh c3RfYXZhaWxfcGFja2VkKHZxLCBudW1fZGVzYyk7DQo+ID4gKw0KPiA+ICsJCS8qDQo+ID4gKwkJ ICogY29uZGl0aW9ucyB0byB0cmlnZ2VyIGFzeW5jIGRldmljZSB0cmFuc2ZlcjoNCj4gPiArCQkg KiAtIGJ1ZmZlcmVkIHBhY2tldCBudW1iZXIgcmVhY2hlcyB0cmFuc2ZlciB0aHJlc2hvbGQNCj4g PiArCQkgKiAtIHVudXNlZCBhc3luYyBpb3YgbnVtYmVyIGlzIGxlc3MgdGhhbiBtYXggdmhvc3Qg dmVjdG9yDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKHVubGlrZWx5KHBrdF9idXJzdF9pZHggPj0N Cj4gVkhPU1RfQVNZTkNfQkFUQ0hfVEhSRVNIT0xEIHx8DQo+ID4gKwkJCSgoVkhPU1RfTUFYX0FT WU5DX1ZFQyA+PiAxKSAtIHNlZ3NfYXdhaXQgPA0KPiA+ICsJCQlCVUZfVkVDVE9SX01BWCkpKSB7 DQo+ID4gKwkJCW5fcGt0cyA9IHZxLT5hc3luY19vcHMudHJhbnNmZXJfZGF0YShkZXYtPnZpZCwN Cj4gPiArCQkJCQlxdWV1ZV9pZCwgdGRlcywgMCwgcGt0X2J1cnN0X2lkeCk7DQo+ID4gKwkJCWlv dmVjX2lkeCA9IDA7DQo+ID4gKwkJCWl0X2lkeCA9IDA7DQo+ID4gKwkJCXNlZ3NfYXdhaXQgPSAw Ow0KPiA+ICsJCQl2cS0+YXN5bmNfcGt0c19pbmZsaWdodF9uICs9IG5fcGt0czsNCj4gPiArDQo+ ID4gKwkJCWlmICh1bmxpa2VseShuX3BrdHMgPCBwa3RfYnVyc3RfaWR4KSkgew0KPiA+ICsJCQkJ LyoNCj4gPiArCQkJCSAqIGxvZyBlcnJvciBwYWNrZXRzIG51bWJlciBoZXJlIGFuZCBkbw0KPiBh Y3R1YWwNCj4gPiArCQkJCSAqIGVycm9yIHByb2Nlc3Npbmcgd2hlbiBhcHBsaWNhdGlvbnMgcG9s bA0KPiA+ICsJCQkJICogY29tcGxldGlvbg0KPiA+ICsJCQkJICovDQo+ID4gKwkJCQlwa3RfZXJy ID0gcGt0X2J1cnN0X2lkeCAtIG5fcGt0czsNCj4gPiArCQkJCXBrdF9idXJzdF9pZHggPSAwOw0K PiA+ICsJCQkJcGt0X2lkeCsrOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ ID4gKwkJCXBrdF9idXJzdF9pZHggPSAwOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwlpZiAocGt0X2J1cnN0X2lkeCkgew0KPiA+ICsJCW5fcGt0cyA9IHZxLT5hc3luY19vcHMudHJh bnNmZXJfZGF0YShkZXYtPnZpZCwNCj4gPiArCQkJCXF1ZXVlX2lkLCB0ZGVzLCAwLCBwa3RfYnVy c3RfaWR4KTsNCj4gPiArCQl2cS0+YXN5bmNfcGt0c19pbmZsaWdodF9uICs9IG5fcGt0czsNCj4g PiArDQo+ID4gKwkJaWYgKHVubGlrZWx5KG5fcGt0cyA8IHBrdF9idXJzdF9pZHgpKQ0KPiA+ICsJ CQlwa3RfZXJyID0gcGt0X2J1cnN0X2lkeCAtIG5fcGt0czsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwlkb19kYXRhX2NvcHlfZW5xdWV1ZShkZXYsIHZxKTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtl bHkocGt0X2VycikpIHsNCj4gPiArCQl1aW50MTZfdCBkZXNjc19lcnIgPSAwOw0KPiA+ICsJCXVp bnQxNl90IGJ1ZmZlcnNfZXJyID0gMDsNCj4gPiArDQo+ID4gKwkJbnVtX2FzeW5jX3BrdHMgLT0g cGt0X2VycjsNCj4gPiArCQlwa3RfaWR4IC09IHBrdF9lcnI7DQo+ID4gKwkvKiBjYWxjdWxhdGUg dGhlIHN1bSBvZiBidWZmZXJzIGFuZCBkZXNjcyBvZiBETUEtZXJyb3IgcGFja2V0cy4gKi8NCj4g PiArCQl3aGlsZSAocGt0X2Vyci0tID4gMCkgew0KPiA+ICsJCQlkZXNjc19lcnIgKz0NCj4gPiAr CQkJCXBrdHNfaW5mb1tzbG90X2lkeCAmICh2cS0+c2l6ZSAtIDEpXS5kZXNjczsNCj4gDQo+IFRo ZSBzaXplIG9mIHRoZSByaW5nIGlzIG5vdCBuZWNlc3NhcmlseSBhIHBvd2VyIG9mIHR3byB3aXRo IHBhY2tlZCByaW5nLg0KDQpXaWxsIGJlIGZpeGVkLg0KDQo+IA0KPiA+ICsJCQlidWZmZXJzX2Vy ciArPQ0KPiA+ICsJCQkJcGt0c19pbmZvW3Nsb3RfaWR4ICYgKHZxLT5zaXplIC0NCj4gMSldLm5y X2J1ZmZlcnM7DQo+IA0KPiBEaXR0by4NCg0KV2lsbCBiZSBmaXhlZC4NCg0KPiANCj4gPiArCQkJ c2xvdF9pZHgtLTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZxLT5hc3luY19wYWNrZWRfYnVm ZmVyX2lkeCAtPSBidWZmZXJzX2VycjsNCj4gPiArDQo+ID4gKwkJaWYgKHZxLT5sYXN0X2F2YWls X2lkeCA+PSBkZXNjc19lcnIpIHsNCj4gPiArCQkJdnEtPmxhc3RfYXZhaWxfaWR4IC09IGRlc2Nz X2VycjsNCj4gPiArDQo+ID4gKwkJCXJ0ZV9tZW1jcHkoJnZxLT5kZXNjX3BhY2tlZFt2cS0+bGFz dF9hdmFpbF9pZHhdLA0KPiA+ICsJCQkJJmFzeW5jX2Rlc2NzW2FzeW5jX2Rlc2NzX2lkeCAtIGRl c2NzX2Vycl0sDQo+ID4gKwkJCQlkZXNjc19lcnIgKiBzaXplb2Yoc3RydWN0DQo+IHZyaW5nX3Bh Y2tlZF9kZXNjKSk7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJdWludDE2X3QgbnJfY29weTsN Cj4gPiArDQo+ID4gKwkJCXZxLT5sYXN0X2F2YWlsX2lkeCA9IHZxLT5sYXN0X2F2YWlsX2lkeCAr IHZxLT5zaXplDQo+ID4gKwkJCQkJCS0gZGVzY3NfZXJyOw0KPiA+ICsJCQlucl9jb3B5ID0gdnEt PnNpemUgLSB2cS0+bGFzdF9hdmFpbF9pZHg7DQo+ID4gKwkJCXJ0ZV9tZW1jcHkoJnZxLT5kZXNj X3BhY2tlZFt2cS0+bGFzdF9hdmFpbF9pZHhdLA0KPiA+ICsJCQkJJmFzeW5jX2Rlc2NzW2FzeW5j X2Rlc2NzX2lkeCAtIGRlc2NzX2Vycl0sDQo+ID4gKwkJCQlucl9jb3B5ICogc2l6ZW9mKHN0cnVj dCB2cmluZ19wYWNrZWRfZGVzYykpOw0KPiA+ICsJCQlkZXNjc19lcnIgLT0gbnJfY29weTsNCj4g PiArCQkJcnRlX21lbWNweSh2cS0+ZGVzY19wYWNrZWQsDQo+ID4gKwkJCQkmYXN5bmNfZGVzY3Nb YXN5bmNfZGVzY3NfaWR4IC0gZGVzY3NfZXJyXSwNCj4gPiArCQkJCWRlc2NzX2VyciAqIHNpemVv ZihzdHJ1Y3QNCj4gdnJpbmdfcGFja2VkX2Rlc2MpKTsNCj4gPiArCQkJdnEtPmF2YWlsX3dyYXBf Y291bnRlciBePSAxOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJbnVtX2RvbmVfcGt0cyA9IHBr dF9pZHggLSBudW1fYXN5bmNfcGt0czsNCj4gPiArCX0NCj4gDQo+IFRoaXMgZXJyb3IgaGFuZGxp bmcgY291bGQgYmUgbW92ZWQgaW4gYSBkZWRpY2F0ZWQgZnVuY3Rpb24uDQoNClN1cmUsIHdpbGwg Zml4IGl0IGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gDQo+ID4gKwl2cS0+YXN5bmNfcGt0c19p ZHggKz0gbnVtX2FzeW5jX3BrdHM7DQo+ID4gKwkqY29tcF9jb3VudCA9IG51bV9kb25lX3BrdHM7 DQo+ID4gKw0KPiA+ICsJaWYgKGxpa2VseSh2cS0+c2hhZG93X3VzZWRfaWR4KSkgew0KPiA+ICsJ CXZob3N0X2ZsdXNoX2VucXVldWVfc2hhZG93X3BhY2tlZChkZXYsIHZxKTsNCj4gPiArCQl2aG9z dF92cmluZ19jYWxsX3BhY2tlZChkZXYsIHZxKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gcGt0X2lkeDsNCj4gPiArfQ0KPiANCj4gQWJvdmUgZnVuY3Rpb24gaXMgdmVyeSBiaWcgYW5k IGNvbXBsZXgsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBzcGxpdCBpdCBpbg0KPiBzZXZlcmFs IG9uZXMgdG8gbWFrZSBpdCBtYWludGFpbmFibGUuDQoNCkkgdGhpbmsgbW92ZSB0aGUgZXJyb3Ig aGFuZGxpbmcgY29kZSB3aWxsIG1ha2UgaXQgc21hbGxlci4NCg0KVGhhbmtzLg0KQ2hlbmcNCg0K PiANCj4gPiArDQo+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAgd3Jp dGVfYmFja19jb21wbGV0ZWRfZGVzY3Nfc3BsaXQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEs IHVpbnQxNl90DQo+ID4gbl9kZXNjcykgIHsgQEAgLTE2OTMsMTIgKzIwNDgsNDAgQEANCj4gPiB3 cml0ZV9iYWNrX2NvbXBsZXRlZF9kZXNjc19zcGxpdChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2 cSwgdWludDE2X3QNCj4gbl9kZXNjcykNCj4gPiAgCX0gd2hpbGUgKG5yX2xlZnQgPiAwKTsNCj4g PiAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArd3Jp dGVfYmFja19jb21wbGV0ZWRfZGVzY3NfcGFja2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZx LA0KPiA+ICsJCQkJdWludDE2X3Qgbl9idWZmZXJzKQ0KPiA+ICt7DQo+ID4gKwl1aW50MTZfdCBu cl9sZWZ0ID0gbl9idWZmZXJzOw0KPiA+ICsJdWludDE2X3QgZnJvbSwgdG87DQo+ID4gKw0KPiA+ ICsJZG8gew0KPiA+ICsJCWZyb20gPSB2cS0+bGFzdF9hc3luY19idWZmZXJfaWR4ICYNCj4gPiAr CQkJCQkJKHZxLT5zaXplIC0gMSk7DQo+ID4gKwkJdG8gPSAoZnJvbSArIG5yX2xlZnQpICYgKHZx LT5zaXplIC0gMSk7DQo+IA0KPiBUaGUgc2l6ZSBvZiB0aGUgcmluZyBpcyBub3QgbmVjZXNzYXJp bHkgYSBwb3dlciBvZiB0d28gd2l0aCBwYWNrZWQgcmluZy4NCg0KU3VyZS4NCg0KPiANCj4gPiAr CQlpZiAodG8gPiBmcm9tKSB7DQo+ID4gKwkJCXZob3N0X3VwZGF0ZV91c2VkX3BhY2tlZCh2cSwN Cj4gPiArCQkJCXZxLT5hc3luY19idWZmZXJzX3BhY2tlZCArIGZyb20sDQo+ID4gKwkJCQl0byAt IGZyb20pOw0KPiA+ICsJCQl2cS0+bGFzdF9hc3luY19idWZmZXJfaWR4ICs9IG5yX2xlZnQ7DQo+ ID4gKwkJCW5yX2xlZnQgPSAwOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXZob3N0X3VwZGF0 ZV91c2VkX3BhY2tlZCh2cSwNCj4gPiArCQkJCXZxLT5hc3luY19idWZmZXJzX3BhY2tlZCArIGZy b20sDQo+ID4gKwkJCQl2cS0+c2l6ZSAtIGZyb20pOw0KPiA+ICsJCQl2cS0+bGFzdF9hc3luY19i dWZmZXJfaWR4ICs9DQo+ID4gKwkJCQkJCXZxLT5zaXplIC0gZnJvbTsNCj4gPiArCQkJbnJfbGVm dCAtPSB2cS0+c2l6ZSAtIGZyb207DQo+ID4gKwkJfQ0KPiA+ICsJfSB3aGlsZSAobnJfbGVmdCA+ IDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICB1aW50MTZfdCBydGVfdmhvc3RfcG9sbF9lbnF1ZXVl X2NvbXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAgCQlzdHJ1Y3QgcnRl X21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCkgIHsNCj4gPiAgCXN0cnVjdCB2aXJ0aW9fbmV0 ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4gIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2 cTsNCj4gPiAtCXVpbnQxNl90IG5fcGt0c19jcGwgPSAwLCBuX3BrdHNfcHV0ID0gMCwgbl9kZXNj cyA9IDA7DQo+ID4gKwl1aW50MTZfdCBuX3BrdHNfY3BsID0gMCwgbl9wa3RzX3B1dCA9IDAsIG5f ZGVzY3MgPSAwLCBuX2J1ZmZlcnMgPSAwOw0KPiA+ICAJdWludDE2X3Qgc3RhcnRfaWR4LCBwa3Rz X2lkeCwgdnFfc2l6ZTsNCj4gPiAgCXN0cnVjdCBhc3luY19pbmZsaWdodF9pbmZvICpwa3RzX2lu Zm87DQo+ID4gIAl1aW50MTZfdCBmcm9tLCBpOw0KPiA+IEBAIC0xNzQwLDIxICsyMTIzLDQxIEBA IHVpbnQxNl90DQo+IHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAJCWdvdG8gZG9uZTsNCj4gPiAgCX0NCj4gPg0KPiA+IC0J Zm9yIChpID0gMDsgaSA8IG5fcGt0c19wdXQ7IGkrKykgew0KPiA+IC0JCWZyb20gPSAoc3RhcnRf aWR4ICsgaSkgJiAodnFfc2l6ZSAtIDEpOw0KPiA+IC0JCW5fZGVzY3MgKz0gcGt0c19pbmZvW2Zy b21dLmRlc2NzOw0KPiA+IC0JCXBrdHNbaV0gPSBwa3RzX2luZm9bZnJvbV0ubWJ1ZjsNCj4gPiAr CWlmICh2cV9pc19wYWNrZWQoZGV2KSkgew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBuX3BrdHNf cHV0OyBpKyspIHsNCj4gPiArCQkJZnJvbSA9IChzdGFydF9pZHggKyBpKSAmICh2cV9zaXplIC0g MSk7DQo+IA0KPiBVbmxpa2Ugc3BsaXQgcmluZywgcGFja2VkIHJpbmcgc2l6ZSBpcyBub3QgbmVj ZXNzYXJpbHkgYSBwb3dlciBvZiAyLg0KDQpTdXJlLg0KVGhhbmtzLg0KDQo+IA0KPiA+ICsJCQlu X2J1ZmZlcnMgKz0gcGt0c19pbmZvW2Zyb21dLm5yX2J1ZmZlcnM7DQo+ID4gKwkJCXBrdHNbaV0g PSBwa3RzX2luZm9bZnJvbV0ubWJ1ZjsNCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJ CWZvciAoaSA9IDA7IGkgPCBuX3BrdHNfcHV0OyBpKyspIHsNCj4gPiArCQkJZnJvbSA9IChzdGFy dF9pZHggKyBpKSAmICh2cV9zaXplIC0gMSk7DQo+ID4gKwkJCW5fZGVzY3MgKz0gcGt0c19pbmZv W2Zyb21dLmRlc2NzOw0KPiA+ICsJCQlwa3RzW2ldID0gcGt0c19pbmZvW2Zyb21dLm1idWY7DQo+ ID4gKwkJfQ0KPiA+ICAJfQ0KPiA+ICsNCj4gPiAgCXZxLT5hc3luY19sYXN0X3BrdHNfbiA9IG5f cGt0c19jcGwgLSBuX3BrdHNfcHV0Ow0KPiA+ICAJdnEtPmFzeW5jX3BrdHNfaW5mbGlnaHRfbiAt PSBuX3BrdHNfcHV0Ow0KPiA+DQo+ID4gIAlpZiAobGlrZWx5KHZxLT5lbmFibGVkICYmIHZxLT5h Y2Nlc3Nfb2spKSB7DQo+ID4gLQkJd3JpdGVfYmFja19jb21wbGV0ZWRfZGVzY3Nfc3BsaXQodnEs IG5fZGVzY3MpOw0KPiA+ICsJCWlmICh2cV9pc19wYWNrZWQoZGV2KSkgew0KPiA+ICsJCQl3cml0 ZV9iYWNrX2NvbXBsZXRlZF9kZXNjc19wYWNrZWQodnEsDQo+IG5fYnVmZmVycyk7DQo+ID4NCj4g PiAtCQlfX2F0b21pY19hZGRfZmV0Y2goJnZxLT51c2VkLT5pZHgsIG5fZGVzY3MsDQo+IF9fQVRP TUlDX1JFTEVBU0UpOw0KPiA+IC0JCXZob3N0X3ZyaW5nX2NhbGxfc3BsaXQoZGV2LCB2cSk7DQo+ ID4gLQl9IGVsc2UNCj4gPiAtCQl2cS0+bGFzdF9hc3luY19kZXNjX2lkeCArPSBuX2Rlc2NzOw0K PiA+ICsJCQl2aG9zdF92cmluZ19jYWxsX3BhY2tlZChkZXYsIHZxKTsNCj4gPiArCQl9IGVsc2Ug ew0KPiA+ICsJCQl3cml0ZV9iYWNrX2NvbXBsZXRlZF9kZXNjc19zcGxpdCh2cSwgbl9kZXNjcyk7 DQo+ID4gKw0KPiA+ICsJCQlfX2F0b21pY19hZGRfZmV0Y2goJnZxLT51c2VkLT5pZHgsIG5fZGVz Y3MsDQo+ID4gKwkJCQkJX19BVE9NSUNfUkVMRUFTRSk7DQo+ID4gKwkJCXZob3N0X3ZyaW5nX2Nh bGxfc3BsaXQoZGV2LCB2cSk7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlpZiAo dnFfaXNfcGFja2VkKGRldikpDQo+ID4gKwkJCXZxLT5sYXN0X2FzeW5jX2J1ZmZlcl9pZHggKz0g bl9idWZmZXJzOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJdnEtPmxhc3RfYXN5bmNfZGVzY19pZHgg Kz0gbl9kZXNjczsNCj4gPiArCX0NCj4gPg0KPiA+ICBkb25lOg0KPiA+ICAJcnRlX3NwaW5sb2Nr X3VubG9jaygmdnEtPmFjY2Vzc19sb2NrKTsNCj4gPiBAQCAtMTc5NSw5ICsyMTk4LDEwIEBAIHZp cnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KHN0cnVjdCB2aXJ0aW9fbmV0DQo+ICpkZXYsIHVpbnQx Nl90IHF1ZXVlX2lkLA0KPiA+ICAJaWYgKGNvdW50ID09IDApDQo+ID4gIAkJZ290byBvdXQ7DQo+ ID4NCj4gPiAtCS8qIFRPRE86IHBhY2tlZCBxdWV1ZSBub3QgaW1wbGVtZW50ZWQgKi8NCj4gPiAg CWlmICh2cV9pc19wYWNrZWQoZGV2KSkNCj4gPiAtCQluYl90eCA9IDA7DQo+ID4gKwkJbmJfdHgg PSB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQoZGV2LA0KPiA+ICsJCQkJdnEsIHF1 ZXVlX2lkLCBwa3RzLCBjb3VudCwgY29tcF9wa3RzLA0KPiA+ICsJCQkJY29tcF9jb3VudCk7DQo+ ID4gIAllbHNlDQo+ID4gIAkJbmJfdHggPSB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9zcGxp dChkZXYsDQo+ID4gIAkJCQl2cSwgcXVldWVfaWQsIHBrdHMsIGNvdW50LCBjb21wX3BrdHMsDQo+ ID4NCg0K