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 E3CA9A0524; Tue, 13 Apr 2021 15:50:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C322A161023; Tue, 13 Apr 2021 15:50:25 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id C8C9B1608EA for ; Tue, 13 Apr 2021 15:50:22 +0200 (CEST) IronPort-SDR: VjVIPVYUMMrpZyKOx4Q3PhJzfGEWt0ttBH0QM7uU8n5RJ//ovWas6MT15eDydczF8KjBgDXoTL iNyHAcVTrmVA== X-IronPort-AV: E=McAfee;i="6200,9189,9952"; a="174516387" X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="174516387" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2021 06:50:21 -0700 IronPort-SDR: 4SFug13/ep6UTCf4ShSt1fDHhJG/IiMaw2KKt411czZtqxJyCtaq9qM1Shrl5t1d2QOIIC5yIE EF2cPCobFwgw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="424256718" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga008.jf.intel.com with ESMTP; 13 Apr 2021 06:50:20 -0700 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx605.amr.corp.intel.com (10.18.126.85) 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 06:50:20 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx606.amr.corp.intel.com (10.18.126.86) 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 06:50:20 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.168) by edgegateway.intel.com (192.55.55.71) 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 06:50:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LLOilppZbUJM//vi/cSrk8+SGwq7EkWDbfw1bKUUScpiW8rJUyvqX+wqfC56ReLYvu/7N+Rt8DdzszPnT85IEdc7bO69n5lXhBk+MbHUdlxrarkgTS3I+yDPw3Ov2PbhqrDPXPoWgaH1D2Ne/0VWlFHtQO8DFuJfJzu7X5hEz11MmwXQyMF9YezemRhKhWsiyI+pUr2M1iaMW+aosu1sWOzIBVD1l88kCbt9nrTprfkA4/4/YrjOjr+e2hQNOZgiEABcfgoKvMBljE1ijTtYcXDTvVfVp3KoSb1AOrKHzFLsTMFe/ve/Fnj+71gORa0X3FA5bblVavmPSFC7ndzkjw== 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=XRuQVW0lM3MULH2+QTa5T4iKyDCdLpbI4NU8QITOgzw=; b=HsgOr3THNYJjubNDSUdDyg68UmR6NSIurn5RJlyUchGYH95ZLSwItbYBhA3uhiKHKDrjCql8Lq3SFujiGAazzcfSP/aOSeilEZKTJ82l9kKvyHE9N8tY0L70U23WeZsJ9C4eDC1hktVwMU/Ok95uJjxrZz10glt/w/jnKxa16tyEPwecPTBr/ziDZLu1cSGAqprhVyqAZRX3S5+27aerVG5XI3B0TWliWa30KXus1Rzyog1JVFZoHOw1RgjtNU1bwI+LwJVV9q3j8ASTYeB1kTD/fn6/HRd/xhycB0e6FDdnr6UN9pkSfxGO1vrcuOiePSISENodsmqZuTVZLRvomA== 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=XRuQVW0lM3MULH2+QTa5T4iKyDCdLpbI4NU8QITOgzw=; b=TJ7BgXW0XkXL8xS5xOEgn/uTdtZ68dGOMJE5P468D9RZZFVB6nVqsSMT8jGxL0nnVgCkOQ0AefwPai7OIor9ZdINijlhcxnwF6WM8RXm4B2DW/7mbmaB49WijhLj7MVYiV6nU4WPW17NnBYOI22jYm+OH6Pya5Qo952Hew+G0wo= Received: from SJ0PR11MB5006.namprd11.prod.outlook.com (2603:10b6:a03:2db::22) by SJ0PR11MB4911.namprd11.prod.outlook.com (2603:10b6:a03:2ad::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.18; Tue, 13 Apr 2021 13:50:17 +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 13:50:17 +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+AgAAjiFCAAChhAIAAC0+A Date: Tue, 13 Apr 2021 13:50:16 +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: 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: d88b0e7f-4cb8-4726-f752-08d8fe831225 x-ms-traffictypediagnostic: SJ0PR11MB4911: 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: QSDgByhLEpO9Qb8Ssbrp4pMlAA/iVS3Nt7CCtCFoM9K0yH5d+GVNUGR4ek6xIqz67QF+GFskJvUPc/9P25IWP2llKJU9Wrpa8gkW/Z+K34YIs1/Inh6SHZeHZ1Sf18rdB5Cc33FhSh0MoqrgmZRjduuliuua3BrA8a1oVV9KIcORaegEa9z75CnJ7uyCMGoezgOKwZOJJELyKvAXNdbPOYVh1pR88Dh9Nmfq3mcsKvxGmL09woQtBY22xArehlXdWxAMokw31aSaFx1rjVoc0wHR8vBEut6Od+88BN+wly/TxNnaug3Jap2uo+F/t1j8i+rg/yCgxISOrnLf0zhMPJYXNxVzUSZTU5Uw+6W9BJnR1F1zngFBRDXmmWj6zwRw70tyrMmPXi8c2uDwxQ4tBfCAiQyehFJGKnFFcDWKUb9g/vpxTbSdEVw2bIHLJ4gG9kGiFTwFz+iR70pQ3uCSIuVFb+3iFFOccKqCmDw+zeQsTtA6wfMZycvrHh7DLdQhsq6Xgl7cqs1KTizKGD7wGUV+6yKYC4GCLVARYbDOFBepUYERbYxN8QfGZdGa885oRSCAmdzDWRkXAtVMzUviSjA3t2POkcvJzWzWpFF6BEI= 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:(39860400002)(136003)(346002)(376002)(366004)(396003)(107886003)(110136005)(4326008)(66556008)(5660300002)(186003)(83380400001)(122000001)(76116006)(9686003)(66946007)(64756008)(54906003)(66476007)(316002)(55016002)(30864003)(2906002)(8676002)(8936002)(66446008)(53546011)(6506007)(7696005)(26005)(33656002)(38100700002)(71200400001)(478600001)(86362001)(6636002)(52536014)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?ZnZRT3JhbitHVkZFb2NHQU11SnpqRS9EU2ZrbTd0aThJWWcxQ3laTWZIMVVu?= =?utf-8?B?ZnRKZHZZcXAyeEdrVEFKaFF4ZkdvWmgyck5PSkcreWpqTi9pSnQ2NmdleTh4?= =?utf-8?B?b2t4VFh4RXZ6YVlwWS9XK3dYMW5KTFRBb2xKR3hUZzRVNTA5RnpLNG9sOXY4?= =?utf-8?B?aVlVQ2dQYlo5TnkrY0wxL21uRVFtalFMcy8wTU9Jd1lWd1JXZk5hWEFWOFk1?= =?utf-8?B?YTQvUGtWbEE2ZlNmVDJONVFnRzgyT3VscUhNdXNaYm13Z3N0MUhEZ3VXT21W?= =?utf-8?B?MXRwNFJOcnA3bVpoV1VCU3pZRk5URnNzU0xjeDh6cnFFUHRjTHhJRTBoaWVW?= =?utf-8?B?c0VUc3BtYkFiLzNrZTdqQkhVTzIvdFQ2Nm1WSDJkYWwvRVo1dkRMQ2xqRWxr?= =?utf-8?B?WTZCMkZZZ0VMenB2UndWSjdKVTRkdDFsSEFlc0dHN1BwdXJwS01ITTRtVG91?= =?utf-8?B?MmhEUGhLRHRBYUFCdS96V3BDa3BDQk00b3RkcmdKY2hKYUdGcit2b1lLNUE0?= =?utf-8?B?aWt0OStjWjc5QnVNY29odTJjdGRwOXZLYVVPSzJYYXVCSjZOVWs0NmhpZ2lH?= =?utf-8?B?U1ZQd2RUNGlCdVltSmxNQ1VvNnRrNllxT3k5SzVVdHpMRWJSUGxoaUJlSUlH?= =?utf-8?B?TUZad213RkdYTlFINFQ5WmNqcVRyR0JMNG1RaFhyS1RiU2VwR0xxNmtPWUxI?= =?utf-8?B?L0xKcVIzL3U0UTZhdThyNlBiWWZPL3oyYU5NZDRMMDhrb1hLQUpoUFVaQXla?= =?utf-8?B?a2VEckVvdUcrdGxMWEl4VkJFbTJ1aUdlbWc4a0NvQkxOTUpsbmpraTNxczBY?= =?utf-8?B?eEIwT2tSSXZlRG53cWZSNzFyT2syUExZVlZBWkpKaTdYV056U3pEZlZsUURR?= =?utf-8?B?aEMwSjhCbnVMTUhnV2s1bzB3T284OWMwRGZLV0xMRDd5anRxSEJROERPcVpJ?= =?utf-8?B?RmZNRmNDa2t0WkUrK1EyV0dDcUx3TDJPUE1SYUkveGVERHhESDZ0ZTc2bzYr?= =?utf-8?B?cGFZS0RKNU8ycUtyN2JST1Bob2pqMFMvb2ppaHFsZW40U1BLMW4veGY1ZmN0?= =?utf-8?B?VTNadGRLRW5Dc3FKOWNzZnRoUmFaOURpQXBmdm5WdjZ3OFRnV3hoSHM1bGNC?= =?utf-8?B?V0I4SU0xUDFia0RDRHVtVGRVZWdpRmw2NFNScmRBM3NOY21iYUtPVE5LaDdz?= =?utf-8?B?SFZzeDVLZWZvZW5mdktDWGR6VHhMU054RDNHdVdxM1h5UThaZ282YnVmMnVa?= =?utf-8?B?MzNUekxLSUk0a2w5Tk5raVJNaWpSYmpEcHo3UGYwQldqU1h2d3NTTHdKMXRi?= =?utf-8?B?UmxMWFlrYk5HN2VCandmTHRwVkk2bTZEVEZ0aUMvVkxMcHBGVm11cnZYbWZG?= =?utf-8?B?OEdsK0RtbmZQMHVlR0ZFOG91T1psSCtzU2xYL01ZdXdHckhVelJ1MHVvcmtR?= =?utf-8?B?K05xcWlvNzBXSVMwdHo0L1NCajdsK0FGRE0rUk5VMERkOE9yR29SRTlhSlZx?= =?utf-8?B?OC93U3VaY0FzTm8vRFpxalJzVUU1bHA3NnNac3djdnFHTnRhTGI1aktYRUg1?= =?utf-8?B?YXpaZlFGZHY4V2IvY2dhTGNSZit6ZnJRRHJGY25oTGZDZDIrUk9nK1NrWFEv?= =?utf-8?B?M2pXeUs1QnNCaldRYWhaNklCQ2w3UUc2NnJlZUlQaU5lUmd6eGlGaWVWSkNt?= =?utf-8?B?YnZKTmhkN3UxR0ZoU3pub3N6cU5Fa3F4VjZIYlFBVjVib2Y5YUxBaFFLN2tR?= =?utf-8?Q?D92n7lLrqiQdQ145osP43aqTYm2qL5jVr4cqt/N?= 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: d88b0e7f-4cb8-4726-f752-08d8fe831225 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Apr 2021 13:50:17.0220 (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: UlaAPW3lXAJtyssQHyfhoNWtpwGo2r5oLMUC99wVR3cbWRMErgr53Lo3yzKRgLq6ZhGdE88XUqrhpeC9CCcClQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4911 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" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1lIENvcXVlbGlu IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVHVlc2RheSwgQXByaWwgMTMs IDIwMjEgOTowOCBQTQ0KPiBUbzogSmlhbmcsIENoZW5nMSA8Y2hlbmcxLmppYW5nQGludGVsLmNv bT47IFhpYSwgQ2hlbmJvDQo+IDxjaGVuYm8ueGlhQGludGVsLmNvbT4NCj4gQ2M6IGRldkBkcGRr Lm9yZzsgSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBZYW5nLCBZdm9ubmVYDQo+IDx5 dm9ubmV4LnlhbmdAaW50ZWwuY29tPjsgV2FuZywgWWluYW4gPHlpbmFuLndhbmdAaW50ZWwuY29t PjsgTGl1LA0KPiBZb25nIDx5b25nLmxpdUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFU Q0ggdjUgMi80XSB2aG9zdDogYWRkIHN1cHBvcnQgZm9yIHBhY2tlZCByaW5nIGluIGFzeW5jIHZo b3N0DQo+IA0KPiANCj4gDQo+IE9uIDQvMTMvMjEgMTo0OCBQTSwgSmlhbmcsIENoZW5nMSB3cm90 ZToNCj4gPiBIaSBNYXhpbWUsDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPj4gRnJvbTogTWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4N Cj4gPj4gU2VudDogVHVlc2RheSwgQXByaWwgMTMsIDIwMjEgNDozNyBQTQ0KPiA+PiBUbzogSmlh bmcsIENoZW5nMSA8Y2hlbmcxLmppYW5nQGludGVsLmNvbT47IFhpYSwgQ2hlbmJvDQo+ID4+IDxj aGVuYm8ueGlhQGludGVsLmNvbT4NCj4gPj4gQ2M6IGRldkBkcGRrLm9yZzsgSHUsIEppYXl1IDxq aWF5dS5odUBpbnRlbC5jb20+OyBZYW5nLCBZdm9ubmVYDQo+ID4+IDx5dm9ubmV4LnlhbmdAaW50 ZWwuY29tPjsgV2FuZywgWWluYW4gPHlpbmFuLndhbmdAaW50ZWwuY29tPjsgTGl1LA0KPiA+PiBZ b25nIDx5b25nLmxpdUBpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjUgMi80 XSB2aG9zdDogYWRkIHN1cHBvcnQgZm9yIHBhY2tlZCByaW5nIGluDQo+ID4+IGFzeW5jIHZob3N0 DQo+ID4+DQo+ID4+DQo+ID4+DQo+ID4+IE9uIDQvMTIvMjEgMTozNCBQTSwgQ2hlbmcgSmlhbmcg d3JvdGU6DQo+ID4+PiBGb3Igbm93IGFzeW5jIHZob3N0IGRhdGEgcGF0aCBvbmx5IHN1cHBvcnRz IHNwbGl0IHJpbmcgc3RydWN0dXJlLiBJbg0KPiA+Pj4gb3JkZXIgdG8gbWFrZSBhc3luYyB2aG9z dCBjb21wYXRpYmxlIHdpdGggdmlydGlvIDEuMSBzcGVjIHRoaXMgcGF0Y2gNCj4gPj4+IGVuYWJs ZXMgcGFja2VkIHJpbmcgaW4gYXN5bmMgdmhvc3QgZGF0YSBwYXRoLg0KPiA+Pj4NCj4gPj4+IFNp Z25lZC1vZmYtYnk6IENoZW5nIEppYW5nIDxDaGVuZzEuamlhbmdAaW50ZWwuY29tPg0KPiA+Pj4g LS0tDQo+ID4+PiAgbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaCB8ICAgMSArDQo+ ID4+PiAgbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5jICAgICAgICAgICB8ICAyNyArLQ0KPiA+Pj4g IGxpYi9saWJydGVfdmhvc3Qvdmhvc3QuaCAgICAgICAgICAgfCAgIDcgKy0NCj4gPj4+ICBsaWIv bGlicnRlX3Zob3N0L3ZpcnRpb19uZXQuYyAgICAgIHwgNDM4DQo+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKy0tDQo+ID4+PiAgNCBmaWxlcyBjaGFuZ2VkLCA0NDggaW5zZXJ0aW9ucygrKSwg MjUgZGVsZXRpb25zKC0pDQo+ID4+Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfdmhv c3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gPj4+IGIvbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhvc3Rf YXN5bmMuaA0KPiA+Pj4gaW5kZXggYzg1NWZmODc1Li42ZmFhMzFmNWEgMTAwNjQ0DQo+ID4+PiAt LS0gYS9saWIvbGlicnRlX3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4+PiArKysgYi9saWIv bGlicnRlX3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4+PiBAQCAtODksNiArODksNyBAQCBz dHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIHsgIHN0cnVjdA0KPiA+Pj4gYXN5bmNf aW5mbGlnaHRfaW5mbyB7DQo+ID4+PiAgCXN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZjsNCj4gPj4+ICAJ dWludDE2X3QgZGVzY3M7IC8qIG51bSBvZiBkZXNjcyBpbmZsaWdodCAqLw0KPiA+Pj4gKwl1aW50 MTZfdCBucl9idWZmZXJzOyAvKiBudW0gb2YgYnVmZmVycyBpbmZsaWdodCBmb3IgcGFja2VkIHJp bmcgKi8NCj4gPj4+ICB9Ow0KPiA+Pj4NCj4gPj4+ICAvKioNCj4gPj4+IGRpZmYgLS1naXQgYS9s aWIvbGlicnRlX3Zob3N0L3Zob3N0LmMgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmMNCj4gPj4+ IGluZGV4IGE3MGZlMDFkOC4uOGM5OTM1YzBmIDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL2xpYnJ0 ZV92aG9zdC92aG9zdC5jDQo+ID4+PiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmMNCj4g Pj4+IEBAIC0zNDIsMTUgKzM0MiwyMSBAQCB2aG9zdF9mcmVlX2FzeW5jX21lbShzdHJ1Y3QNCj4g dmhvc3RfdmlydHF1ZXVlDQo+ID4+ICp2cSkNCj4gPj4+IHsNCj4gPj4+ICAJaWYgKHZxLT5hc3lu Y19wa3RzX2luZm8pDQo+ID4+PiAgCQlydGVfZnJlZSh2cS0+YXN5bmNfcGt0c19pbmZvKTsNCj4g Pj4+IC0JaWYgKHZxLT5hc3luY19kZXNjc19zcGxpdCkNCj4gPj4+ICsJaWYgKHZxLT5hc3luY19i dWZmZXJzX3BhY2tlZCkgew0KPiA+Pj4gKwkJcnRlX2ZyZWUodnEtPmFzeW5jX2J1ZmZlcnNfcGFj a2VkKTsNCj4gPj4+ICsJCXZxLT5hc3luY19idWZmZXJzX3BhY2tlZCA9IE5VTEw7DQo+ID4+PiAr CX0NCj4gPj4+ICsJaWYgKHZxLT5hc3luY19kZXNjc19zcGxpdCkgew0KPiA+Pg0KPiA+PiBZb3Ug Y2FuIHJlbW92ZSB0aGUgY2hlY2ssIHJ0ZV9mcmVlIGlzIHNhZmUgd2l0aCBOVUxMIHBvaW50ZXJz Lg0KPiA+PiBZb3UgY2FuIGRvIHRoZSBzYW1lIGZvciB0aGUgb3RoZXIgb25lcyBpbiB0aGlzIGZ1 bmN0aW9uLg0KPiA+DQo+ID4gT0ssIGl0IHdpbGwgYmUgZml4ZWQuDQo+ID4NCj4gPj4NCj4gPj4+ ICAJCXJ0ZV9mcmVlKHZxLT5hc3luY19kZXNjc19zcGxpdCk7DQo+ID4+PiArCQl2cS0+YXN5bmNf ZGVzY3Nfc3BsaXQgPSBOVUxMOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiAgCWlmICh2cS0+ aXRfcG9vbCkNCj4gPj4+ICAJCXJ0ZV9mcmVlKHZxLT5pdF9wb29sKTsNCj4gPj4+ICAJaWYgKHZx LT52ZWNfcG9vbCkNCj4gPj4+ICAJCXJ0ZV9mcmVlKHZxLT52ZWNfcG9vbCk7DQo+ID4+Pg0KPiA+ Pj4gIAl2cS0+YXN5bmNfcGt0c19pbmZvID0gTlVMTDsNCj4gPj4+IC0JdnEtPmFzeW5jX2Rlc2Nz X3NwbGl0ID0gTlVMTDsNCj4gPj4+ICAJdnEtPml0X3Bvb2wgPSBOVUxMOw0KPiA+Pj4gIAl2cS0+ dmVjX3Bvb2wgPSBOVUxMOw0KPiA+Pj4gIH0NCj4gPj4+IEBAIC0xNjI3LDkgKzE2MzMsOSBAQCBp bnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwNCj4gPj4gdWludDE2 X3QgcXVldWVfaWQsDQo+ID4+PiAgCQlyZXR1cm4gLTE7DQo+ID4+Pg0KPiA+Pj4gIAkvKiBwYWNr ZWQgcXVldWUgaXMgbm90IHN1cHBvcnRlZCAqLw0KPiA+Pj4gLQlpZiAodW5saWtlbHkodnFfaXNf cGFja2VkKGRldikgfHwgIWYuYXN5bmNfaW5vcmRlcikpIHsNCj4gPj4+ICsJaWYgKHVubGlrZWx5 KCFmLmFzeW5jX2lub3JkZXIpKSB7DQo+ID4+PiAgCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwNCj4g Pj4+IC0JCQkiYXN5bmMgY29weSBpcyBub3Qgc3VwcG9ydGVkIG9uIHBhY2tlZCBxdWV1ZSBvcg0K PiA+PiBub24taW5vcmRlciBtb2RlICINCj4gPj4+ICsJCQkiYXN5bmMgY29weSBpcyBub3Qgc3Vw cG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiA+Pj4gIAkJCSIodmlkICVkLCBxaWQ6ICVk KVxuIiwgdmlkLCBxdWV1ZV9pZCk7DQo+ID4+PiAgCQlyZXR1cm4gLTE7DQo+ID4+PiAgCX0NCj4g Pj4+IEBAIC0xNjY3LDExICsxNjczLDE4IEBAIGludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9y ZWdpc3RlcihpbnQNCj4gPj4+IHZpZCwNCj4gPj4gdWludDE2X3QgcXVldWVfaWQsDQo+ID4+PiAg CXZxLT52ZWNfcG9vbCA9IHJ0ZV9tYWxsb2Nfc29ja2V0KE5VTEwsDQo+ID4+PiAgCQkJVkhPU1Rf TUFYX0FTWU5DX1ZFQyAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpLA0KPiA+Pj4gIAkJCVJURV9DQUNI RV9MSU5FX1NJWkUsIG5vZGUpOw0KPiA+Pj4gLQl2cS0+YXN5bmNfZGVzY3Nfc3BsaXQgPSBydGVf bWFsbG9jX3NvY2tldChOVUxMLA0KPiA+Pj4gKwlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4g Pj4+ICsJCXZxLT5hc3luY19idWZmZXJzX3BhY2tlZCA9IHJ0ZV9tYWxsb2Nfc29ja2V0KE5VTEws DQo+ID4+PiArCQkJdnEtPnNpemUgKiBzaXplb2Yoc3RydWN0IHZyaW5nX3VzZWRfZWxlbV9wYWNr ZWQpLA0KPiA+Pj4gKwkJCVJURV9DQUNIRV9MSU5FX1NJWkUsIG5vZGUpOw0KPiA+Pj4gKwl9IGVs c2Ugew0KPiA+Pj4gKwkJdnEtPmFzeW5jX2Rlc2NzX3NwbGl0ID0gcnRlX21hbGxvY19zb2NrZXQo TlVMTCwNCj4gPj4+ICAJCQl2cS0+c2l6ZSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVt KSwNCj4gPj4+ICAJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBub2RlKTsNCj4gPj4+IC0JaWYgKCF2 cS0+YXN5bmNfZGVzY3Nfc3BsaXQgfHwgIXZxLT5hc3luY19wa3RzX2luZm8gfHwNCj4gPj4+IC0J CSF2cS0+aXRfcG9vbCB8fCAhdnEtPnZlY19wb29sKSB7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4g Pj4+ICsJaWYgKCF2cS0+YXN5bmNfYnVmZmVyc19wYWNrZWQgfHwgIXZxLT5hc3luY19kZXNjc19z cGxpdCB8fA0KPiA+Pj4gKwkJIXZxLT5hc3luY19wa3RzX2luZm8gfHwgIXZxLT5pdF9wb29sIHx8 ICF2cS0+dmVjX3Bvb2wpIHsNCj4gPj4+ICAJCXZob3N0X2ZyZWVfYXN5bmNfbWVtKHZxKTsNCj4g Pj4+ICAJCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiA+Pj4gIAkJCQkiYXN5bmMgcmVnaXN0ZXIg ZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUNCj4gPj4gbWVtb3J5IGZvciB2cSBkYXRhICINCj4gPj4+ IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmggYi9saWIvbGlicnRlX3Zob3N0 L3Zob3N0LmgNCj4gPj4+IGluZGV4IGY2Mjg3MTRjMi4uZmUxMzFhZThmIDEwMDY0NA0KPiA+Pj4g LS0tIGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5oDQo+ID4+PiArKysgYi9saWIvbGlicnRlX3Zo b3N0L3Zob3N0LmgNCj4gPj4+IEBAIC0yMDEsOSArMjAxLDE0IEBAIHN0cnVjdCB2aG9zdF92aXJ0 cXVldWUgew0KPiA+Pj4gIAl1aW50MTZfdAlhc3luY19wa3RzX2lkeDsNCj4gPj4+ICAJdWludDE2 X3QJYXN5bmNfcGt0c19pbmZsaWdodF9uOw0KPiA+Pj4gIAl1aW50MTZfdAlhc3luY19sYXN0X3Br dHNfbjsNCj4gPj4+IC0Jc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAgKmFzeW5jX2Rlc2NzX3NwbGl0 Ow0KPiA+Pj4gKwl1bmlvbiB7DQo+ID4+PiArCQlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICAqYXN5 bmNfZGVzY3Nfc3BsaXQ7DQo+ID4+PiArCQlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCAq YXN5bmNfYnVmZmVyc19wYWNrZWQ7DQo+ID4+PiArCX07DQo+ID4+PiAgCXVpbnQxNl90IGFzeW5j X2Rlc2NfaWR4Ow0KPiA+Pj4gKwl1aW50MTZfdCBhc3luY19wYWNrZWRfYnVmZmVyX2lkeDsNCj4g Pj4NCj4gPj4gRG9uJ3QgZHVwcGxpY2F0ZSB2YXJpYWJsZSBuYW1lcywgYXN5bmNfZGVzY19pZHgg Y2FuIGJlIHJldXNlZCBmb3INCj4gPj4gcGFja2VkIHJpbmcuIEFsc28sIHRoZXkgYXJlIHJlcHJl c2VudGluZyB0aGUgc2FtZSB0aGluZywgd2h5IHVzZSBkZXNjDQo+ID4+IGluIG9uZSBjYXNlIGFu ZCBidWZmZXIgaW4gdGhlIG90aGVyPw0KPiA+DQo+ID4gVGhlIG1haW4gcmVhc29uIGlzIHRoYXQg dGhlIHVuaXQgb2YgdGhlIHBhY2tlZCB1c2VkIHJpbmcgaXMgYnVmZmVyLCB3aGljaCBjYW4NCj4g Y29udGFpbiBtYW55IGRlc2MuDQo+ID4gSSB0aGluayB1c2luZyBkZXNjX2lkeCB3aWxsIGNhdXNl IGFtYmlndWl0eSwgYnV0IGlmIHlvdSB0aGluayB0aGF0IEkgc2hvdWxkDQo+IHJldXNlIHRoZSBk ZXNjX2lkeCwgSSBoYXZlIG5vIHByb2JsZW0gd2l0aCB0aGF0Lg0KPiANCj4gT0ssIGluIHRoaXMg Y2FzZSBwbGVhc2UgdXNlIGEgdW5pb24gbm90IHRvIHdhc3RlIG1lbW9yeS4NCg0KU3VyZSwgSSds bCBmaXggaXQuDQoNCj4gDQo+ID4+DQo+ID4+PiAgCXVpbnQxNl90IGxhc3RfYXN5bmNfZGVzY19p ZHg7DQo+ID4+PiArCXVpbnQxNl90IGxhc3RfYXN5bmNfYnVmZmVyX2lkeDsNCj4gPj4NCj4gPj4g U2FtZSByZW1hcmsgaGVyZS4NCj4gPj4NCj4gPj4+ICAJLyogdnEgYXN5bmMgZmVhdHVyZXMgKi8N Cj4gPj4+ICAJYm9vbAkJYXN5bmNfaW5vcmRlcjsNCj4gPj4+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3Zob3N0L3ZpcnRpb19uZXQuYw0KPiA+Pj4gYi9saWIvbGlicnRlX3Zob3N0L3ZpcnRpb19u ZXQuYyBpbmRleCBjNDNhYjAwOTMuLjQxMGJlOTY3OCAxMDA2NDQNCj4gPj4+IC0tLSBhL2xpYi9s aWJydGVfdmhvc3QvdmlydGlvX25ldC5jDQo+ID4+PiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zp cnRpb19uZXQuYw0KPiA+Pj4gQEAgLTM2MywxNCArMzYzLDE0IEBADQo+ID4+PiB2aG9zdF9zaGFk b3dfZGVxdWV1ZV9zaW5nbGVfcGFja2VkX2lub3JkZXIoc3RydWN0DQo+IHZob3N0X3ZpcnRxdWV1 ZQ0KPiA+PiAqdnEsDQo+ID4+PiB9DQo+ID4+Pg0KPiA+Pj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHZvaWQNCj4gPj4+IC12aG9zdF9zaGFkb3dfZW5xdWV1ZV9zaW5nbGVfcGFja2VkKHN0 cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+ID4+PiAtCQkJCSAgIHN0cnVjdCB2aG9zdF92aXJ0cXVl dWUgKnZxLA0KPiA+Pj4gLQkJCQkgICB1aW50MzJfdCBsZW5bXSwNCj4gPj4+IC0JCQkJICAgdWlu dDE2X3QgaWRbXSwNCj4gPj4+IC0JCQkJICAgdWludDE2X3QgY291bnRbXSwNCj4gPj4+ICt2aG9z dF9zaGFkb3dfZW5xdWV1ZV9wYWNrZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ID4+ PiArCQkJCSAgIHVpbnQzMl90ICpsZW4sDQo+ID4+PiArCQkJCSAgIHVpbnQxNl90ICppZCwNCj4g Pj4+ICsJCQkJICAgdWludDE2X3QgKmNvdW50LA0KPiA+Pj4gIAkJCQkgICB1aW50MTZfdCBudW1f YnVmZmVycykNCj4gPj4+ICB7DQo+ID4+PiAgCXVpbnQxNl90IGk7DQo+ID4+PiArDQo+ID4+PiAg CWZvciAoaSA9IDA7IGkgPCBudW1fYnVmZmVyczsgaSsrKSB7DQo+ID4+PiAgCQkvKiBlbnF1ZXVl IHNoYWRvdyBmbHVzaCBhY3Rpb24gYWxpZ25lZCB3aXRoIGJhdGNoIG51bSAqLw0KPiA+Pj4gIAkJ aWYgKCF2cS0+c2hhZG93X3VzZWRfaWR4KQ0KPiA+Pj4gQEAgLTM4Miw2ICszODIsMTcgQEAgdmhv c3Rfc2hhZG93X2VucXVldWVfc2luZ2xlX3BhY2tlZChzdHJ1Y3QNCj4gPj4gdmlydGlvX25ldCAq ZGV2LA0KPiA+Pj4gIAkJdnEtPnNoYWRvd19hbGlnbmVkX2lkeCArPSBjb3VudFtpXTsNCj4gPj4+ ICAJCXZxLT5zaGFkb3dfdXNlZF9pZHgrKzsNCj4gPj4+ICAJfQ0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4+PiArdmhvc3Rfc2hh ZG93X2VucXVldWVfc2luZ2xlX3BhY2tlZChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiA+Pj4g KwkJCQkgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPj4+ICsJCQkJICAgdWludDMy X3QgKmxlbiwNCj4gPj4+ICsJCQkJICAgdWludDE2X3QgKmlkLA0KPiA+Pj4gKwkJCQkgICB1aW50 MTZfdCAqY291bnQsDQo+ID4+PiArCQkJCSAgIHVpbnQxNl90IG51bV9idWZmZXJzKQ0KPiA+Pj4g K3sNCj4gPj4+ICsJdmhvc3Rfc2hhZG93X2VucXVldWVfcGFja2VkKHZxLCBsZW4sIGlkLCBjb3Vu dCwgbnVtX2J1ZmZlcnMpOw0KPiA+Pj4NCj4gPj4+ICAJaWYgKHZxLT5zaGFkb3dfYWxpZ25lZF9p ZHggPj0gUEFDS0VEX0JBVENIX1NJWkUpIHsNCj4gPj4+ICAJCWRvX2RhdGFfY29weV9lbnF1ZXVl KGRldiwgdnEpOw0KPiA+Pj4gQEAgLTE0ODEsNiArMTQ5Miw2MiBAQCBzaGFkb3dfcmluZ19zdG9y ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlDQo+ICp2cSwNCj4gPj4gdm9pZCAqc2hhZG93X3Jpbmcs IHZvaWQgKmRfcmluZywNCj4gPj4+ICAJfQ0KPiA+Pj4gIH0NCj4gPj4+DQo+ID4+PiArc3RhdGlj IF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+Pj4gK3Zob3N0X3VwZGF0ZV91c2VkX3BhY2tl ZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPj4+ICsJCQlzdHJ1Y3QgdnJpbmdfdXNl ZF9lbGVtX3BhY2tlZCAqc2hhZG93X3JpbmcsDQo+ID4+PiArCQkJdWludDE2X3QgY291bnQpDQo+ ID4+PiArew0KPiA+Pj4gKwlpZiAoY291bnQgPT0gMCkNCj4gPj4+ICsJCXJldHVybjsNCj4gPj4N Cj4gPj4gTW92ZSB0aGlzIGFmdGVyIHRoZSB2YXJpYWJsZXMgZGVjbGFyYXRpb24uDQo+ID4NCj4g PiBTdXJlLg0KPiA+DQo+ID4+DQo+ID4+PiArDQo+ID4+PiArCWludCBpOw0KPiA+Pj4gKwl1aW50 MTZfdCB1c2VkX2lkeCA9IHZxLT5sYXN0X3VzZWRfaWR4Ow0KPiA+Pj4gKwl1aW50MTZfdCBoZWFk X2lkeCA9IHZxLT5sYXN0X3VzZWRfaWR4Ow0KPiA+Pj4gKwl1aW50MTZfdCBoZWFkX2ZsYWdzID0g MDsNCj4gPj4+ICsNCj4gPj4+ICsJLyogU3BsaXQgbG9vcCBpbiB0d28gdG8gc2F2ZSBtZW1vcnkg YmFycmllcnMgKi8NCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCj4gPj4+ ICsJCXZxLT5kZXNjX3BhY2tlZFt1c2VkX2lkeF0uaWQgPSBzaGFkb3dfcmluZ1tpXS5pZDsNCj4g Pj4+ICsJCXZxLT5kZXNjX3BhY2tlZFt1c2VkX2lkeF0ubGVuID0gc2hhZG93X3JpbmdbaV0ubGVu Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkJdXNlZF9pZHggKz0gc2hhZG93X3JpbmdbaV0uY291bnQ7DQo+ ID4+PiArCQlpZiAodXNlZF9pZHggPj0gdnEtPnNpemUpDQo+ID4+PiArCQkJdXNlZF9pZHggLT0g dnEtPnNpemU7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogVGhlIG9yZGVyaW5nIGZv ciBzdG9yaW5nIGRlc2MgZmxhZ3MgbmVlZHMgdG8gYmUgZW5mb3JjZWQuICovDQo+ID4+PiArCXJ0 ZV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX1JFTEVBU0UpOw0KPiA+Pj4gKw0KPiA+Pj4g Kwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiA+Pj4gKwkJdWludDE2X3QgZmxhZ3M7 DQo+ID4+PiArDQo+ID4+PiArCQlpZiAodnEtPnNoYWRvd191c2VkX3BhY2tlZFtpXS5sZW4pDQo+ ID4+PiArCQkJZmxhZ3MgPSBWUklOR19ERVNDX0ZfV1JJVEU7DQo+ID4+PiArCQllbHNlDQo+ID4+ PiArCQkJZmxhZ3MgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJaWYgKHZxLT51c2VkX3dyYXBfY291 bnRlcikgew0KPiA+Pj4gKwkJCWZsYWdzIHw9IFZSSU5HX0RFU0NfRl9VU0VEOw0KPiA+Pj4gKwkJ CWZsYWdzIHw9IFZSSU5HX0RFU0NfRl9BVkFJTDsNCj4gPj4+ICsJCX0gZWxzZSB7DQo+ID4+PiAr CQkJZmxhZ3MgJj0gflZSSU5HX0RFU0NfRl9VU0VEOw0KPiA+Pj4gKwkJCWZsYWdzICY9IH5WUklO R19ERVNDX0ZfQVZBSUw7DQo+ID4+PiArCQl9DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoaSA+IDAp IHsNCj4gPj4+ICsJCQl2cS0+ZGVzY19wYWNrZWRbdnEtPmxhc3RfdXNlZF9pZHhdLmZsYWdzID0g ZmxhZ3M7DQo+ID4+PiArDQo+ID4+PiArCQl9IGVsc2Ugew0KPiA+Pj4gKwkJCWhlYWRfaWR4ID0g dnEtPmxhc3RfdXNlZF9pZHg7DQo+ID4+PiArCQkJaGVhZF9mbGFncyA9IGZsYWdzOw0KPiA+Pj4g KwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJdnFfaW5jX2xhc3RfdXNlZF9wYWNrZWQodnEsIHNoYWRv d19yaW5nW2ldLmNvdW50KTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwl2cS0+ZGVzY19w YWNrZWRbaGVhZF9pZHhdLmZsYWdzID0gaGVhZF9mbGFnczsgfQ0KPiA+Pj4gKw0KPiA+Pj4gIHN0 YXRpYyBfX3J0ZV9ub2lubGluZSB1aW50MzJfdA0KPiA+Pj4gIHZpcnRpb19kZXZfcnhfYXN5bmNf c3VibWl0X3NwbGl0KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+ID4+PiAgCXN0cnVjdCB2aG9z dF92aXJ0cXVldWUgKnZxLCB1aW50MTZfdCBxdWV1ZV9pZCwgQEAgLTE2NTYsNg0KPiA+PiArMTcy MywyOTQNCj4gPj4+IEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3NwbGl0KHN0cnVjdCB2 aXJ0aW9fbmV0ICpkZXYsDQo+ID4+PiAgCXJldHVybiBwa3RfaWR4Ow0KPiA+Pj4gIH0NCj4gPj4+ DQo+ID4+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4+PiArdmhvc3RfZW5x dWV1ZV9hc3luY19zaW5nbGVfcGFja2VkKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+ID4+PiAr CQkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+Pj4gKwkJCSAgICBzdHJ1Y3Qg cnRlX21idWYgKnBrdCwNCj4gPj4+ICsJCQkgICAgc3RydWN0IGJ1Zl92ZWN0b3IgKmJ1Zl92ZWMs DQo+ID4+PiArCQkJICAgIHVpbnQxNl90ICpucl9kZXNjcywNCj4gPj4+ICsJCQkgICAgdWludDE2 X3QgKm5yX2J1ZmZlcnMsDQo+ID4+PiArCQkJICAgIHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyAq YXN5bmNfZGVzY3MsDQo+ID4+PiArCQkJICAgIHN0cnVjdCBpb3ZlYyAqc3JjX2lvdmVjLCBzdHJ1 Y3QgaW92ZWMgKmRzdF9pb3ZlYywNCj4gPj4+ICsJCQkgICAgc3RydWN0IHJ0ZV92aG9zdF9pb3Zf aXRlciAqc3JjX2l0LA0KPiA+Pj4gKwkJCSAgICBzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICpk c3RfaXQpIHsNCj4gPj4+ICsJdWludDE2X3QgbnJfdmVjID0gMDsNCj4gPj4+ICsJdWludDE2X3Qg YXZhaWxfaWR4ID0gdnEtPmxhc3RfYXZhaWxfaWR4Ow0KPiA+Pj4gKwl1aW50MTZfdCBtYXhfdHJp ZXMsIHRyaWVzID0gMDsNCj4gPj4+ICsJdWludDE2X3QgYnVmX2lkID0gMDsNCj4gPj4+ICsJdWlu dDMyX3QgbGVuID0gMDsNCj4gPj4+ICsJdWludDE2X3QgZGVzY19jb3VudCA9IDA7DQo+ID4+PiAr CXVpbnQzMl90IHNpemUgPSBwa3QtPnBrdF9sZW4gKyBzaXplb2Yoc3RydWN0DQo+ID4+IHZpcnRp b19uZXRfaGRyX21yZ19yeGJ1Zik7DQo+ID4+PiArCXVpbnQzMl90IGJ1ZmZlcl9sZW5bdnEtPnNp emVdOw0KPiA+Pj4gKwl1aW50MTZfdCBidWZmZXJfYnVmX2lkW3ZxLT5zaXplXTsNCj4gPj4+ICsJ dWludDE2X3QgYnVmZmVyX2Rlc2NfY291bnRbdnEtPnNpemVdOw0KPiA+Pj4gKwkqbnJfYnVmZmVy cyA9IDA7DQo+ID4+PiArDQo+ID4+PiArCWlmIChyeHZxX2lzX21lcmdlYWJsZShkZXYpKQ0KPiA+ Pj4gKwkJbWF4X3RyaWVzID0gdnEtPnNpemUgLSAxOw0KPiA+Pj4gKwllbHNlDQo+ID4+PiArCQlt YXhfdHJpZXMgPSAxOw0KPiA+Pj4gKw0KPiA+Pj4gKwl3aGlsZSAoc2l6ZSA+IDApIHsNCj4gPj4+ ICsJCS8qDQo+ID4+PiArCQkgKiBpZiB3ZSB0cmllZCBhbGwgYXZhaWxhYmxlIHJpbmcgaXRlbXMs IGFuZCBzdGlsbA0KPiA+Pj4gKwkJICogY2FuJ3QgZ2V0IGVub3VnaCBidWYsIGl0IG1lYW5zIHNv bWV0aGluZyBhYm5vcm1hbA0KPiA+Pj4gKwkJICogaGFwcGVuZWQuDQo+ID4+PiArCQkgKi8NCj4g Pj4+ICsJCWlmICh1bmxpa2VseSgrK3RyaWVzID4gbWF4X3RyaWVzKSkNCj4gPj4+ICsJCQlyZXR1 cm4gLTE7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAodW5saWtlbHkoZmlsbF92ZWNfYnVmX3BhY2tl ZChkZXYsIHZxLA0KPiA+Pj4gKwkJCQkJCWF2YWlsX2lkeCwgJmRlc2NfY291bnQsDQo+ID4+PiAr CQkJCQkJYnVmX3ZlYywgJm5yX3ZlYywNCj4gPj4+ICsJCQkJCQkmYnVmX2lkLCAmbGVuLA0KPiA+ Pj4gKwkJCQkJCVZIT1NUX0FDQ0VTU19SVykgPCAwKSkNCj4gPj4+ICsJCQlyZXR1cm4gLTE7DQo+ ID4+PiArDQo+ID4+PiArCQlsZW4gPSBSVEVfTUlOKGxlbiwgc2l6ZSk7DQo+ID4+PiArCQlzaXpl IC09IGxlbjsNCj4gPj4+ICsNCj4gPj4+ICsJCWJ1ZmZlcl9sZW5bKm5yX2J1ZmZlcnNdID0gbGVu Ow0KPiA+Pj4gKwkJYnVmZmVyX2J1Zl9pZFsqbnJfYnVmZmVyc10gPSBidWZfaWQ7DQo+ID4+PiAr CQlidWZmZXJfZGVzY19jb3VudFsqbnJfYnVmZmVyc10gPSBkZXNjX2NvdW50Ow0KPiA+Pj4gKwkJ Km5yX2J1ZmZlcnMgKz0gMTsNCj4gPj4+ICsNCj4gPj4+ICsJCSpucl9kZXNjcyArPSBkZXNjX2Nv dW50Ow0KPiA+Pj4gKwkJYXZhaWxfaWR4ICs9IGRlc2NfY291bnQ7DQo+ID4+PiArCQlpZiAoYXZh aWxfaWR4ID49IHZxLT5zaXplKQ0KPiA+Pj4gKwkJCWF2YWlsX2lkeCAtPSB2cS0+c2l6ZTsNCj4g Pj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoYXN5bmNfbWJ1Zl90b19kZXNjKGRldiwgdnEs IHBrdCwgYnVmX3ZlYywgbnJfdmVjLCAqbnJfYnVmZmVycywNCj4gPj4+ICsJCXNyY19pb3ZlYywg ZHN0X2lvdmVjLCBzcmNfaXQsIGRzdF9pdCkgPCAwKQ0KPiA+Pj4gKwkJcmV0dXJuIC0xOw0KPiA+ Pj4gKwkvKiBzdG9yZSBkZXNjcmlwdG9ycyBmb3IgRE1BICovDQo+ID4+PiArCWlmIChhdmFpbF9p ZHggPj0gKm5yX2Rlc2NzKQ0KPiA+Pj4gKwkJcnRlX21lbWNweShhc3luY19kZXNjcywNCj4gPj4+ ICsJCQkmdnEtPmRlc2NfcGFja2VkW3ZxLT5sYXN0X2F2YWlsX2lkeF0sDQo+ID4+PiArCQkJKm5y X2Rlc2NzICogc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYykpOw0KPiA+Pg0KPiA+PiBQ bGVhc2UgYWRkIGJyYWNrZXRzIGZvciB0aGUgJ2lmJyBzaW5jZSB0aGVyZSBhcmUgZm9yIHRoZSAn ZWxzZScuDQo+ID4NCj4gPiBTdXJlLCBzb3JyeSBmb3IgdGhhdC4NCj4gPg0KPiA+Pg0KPiA+Pj4g KwllbHNlIHsNCj4gPj4+ICsJCXVpbnQxNl90IG5yX2NvcHkgPSB2cS0+c2l6ZSAtIHZxLT5sYXN0 X2F2YWlsX2lkeDsNCj4gPj4+ICsJCXJ0ZV9tZW1jcHkoYXN5bmNfZGVzY3MsDQo+ID4+PiArCQkJ JnZxLT5kZXNjX3BhY2tlZFt2cS0+bGFzdF9hdmFpbF9pZHhdLA0KPiA+Pj4gKwkJCW5yX2NvcHkg KiBzaXplb2Yoc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjKSk7DQo+ID4+PiArCQlydGVfbWVtY3B5 KGFzeW5jX2Rlc2NzICsgbnJfY29weSwNCj4gPj4+ICsJCQl2cS0+ZGVzY19wYWNrZWQsICgqbnJf ZGVzY3MgLSBucl9jb3B5KSAqDQo+ID4+PiArCQkJc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRf ZGVzYykpOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCXZob3N0X3NoYWRvd19lbnF1ZXVl X3BhY2tlZCh2cSwgYnVmZmVyX2xlbiwgYnVmZmVyX2J1Zl9pZCwNCj4gPj4+ICsJCQkJCSAgIGJ1 ZmZlcl9kZXNjX2NvdW50LCAqbnJfYnVmZmVycyk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAw Ow0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBp bnQxNl90DQo+ID4+PiArdmlydGlvX2Rldl9yeF9hc3luY19zaW5nbGVfcGFja2VkKHN0cnVjdCB2 aXJ0aW9fbmV0ICpkZXYsDQo+ID4+PiArCQkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZx LA0KPiA+Pj4gKwkJCSAgICBzdHJ1Y3QgcnRlX21idWYgKnBrdCwNCj4gPj4+ICsJCQkgICAgdWlu dDE2X3QgKm5yX2Rlc2NzLCB1aW50MTZfdCAqbnJfYnVmZmVycywNCj4gPj4+ICsJCQkgICAgc3Ry dWN0IHZyaW5nX3BhY2tlZF9kZXNjICphc3luY19kZXNjcywNCj4gPj4+ICsJCQkgICAgc3RydWN0 IGlvdmVjICpzcmNfaW92ZWMsIHN0cnVjdCBpb3ZlYyAqZHN0X2lvdmVjLA0KPiA+Pj4gKwkJCSAg ICBzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICpzcmNfaXQsDQo+ID4+PiArCQkJICAgIHN0cnVj dCBydGVfdmhvc3RfaW92X2l0ZXIgKmRzdF9pdCkgew0KPiA+Pj4gKwlzdHJ1Y3QgYnVmX3ZlY3Rv ciBidWZfdmVjW0JVRl9WRUNUT1JfTUFYXTsNCj4gPj4+ICsJKm5yX2Rlc2NzID0gMDsNCj4gPj4+ ICsJKm5yX2J1ZmZlcnMgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAodW5saWtlbHkodmhvc3Rf ZW5xdWV1ZV9hc3luY19zaW5nbGVfcGFja2VkKGRldiwgdnEsIHBrdCwNCj4gPj4gYnVmX3ZlYywN Cj4gPj4+ICsJCQkJCQkgbnJfZGVzY3MsDQo+ID4+PiArCQkJCQkJIG5yX2J1ZmZlcnMsDQo+ID4+ PiArCQkJCQkJIGFzeW5jX2Rlc2NzLA0KPiA+Pj4gKwkJCQkJCSBzcmNfaW92ZWMsIGRzdF9pb3Zl YywNCj4gPj4+ICsJCQkJCQkgc3JjX2l0LCBkc3RfaXQpIDwgMCkpIHsNCj4gPj4+ICsJCVZIT1NU X0xPR19EQVRBKERFQlVHLA0KPiA+Pj4gKwkJCQkiKCVkKSBmYWlsZWQgdG8gZ2V0IGVub3VnaCBk ZXNjIGZyb20gdnJpbmdcbiIsDQo+ID4+PiArCQkJCWRldi0+dmlkKTsNCj4gPj4+ICsJCXJldHVy biAtMTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlWSE9TVF9MT0dfREFUQShERUJVRywg IiglZCkgY3VycmVudCBpbmRleCAlZCB8IGVuZA0KPiA+PiBpbmRleCAlZFxuIiwNCj4gPj4+ICsJ CQlkZXYtPnZpZCwgdnEtPmxhc3RfYXZhaWxfaWR4LA0KPiA+Pj4gKwkJCXZxLT5sYXN0X2F2YWls X2lkeCArICpucl9kZXNjcyk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30N Cj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgX19ydGVfbm9pbmxpbmUgdWludDMyX3QNCj4gPj4+ICt2 aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwN Cj4gPj4+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVpbnQxNl90IHF1ZXVlX2lkLA0K PiA+Pj4gKwlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MzJfdCBjb3VudCwNCj4gPj4+ICsJ c3RydWN0IHJ0ZV9tYnVmICoqY29tcF9wa3RzLCB1aW50MzJfdCAqY29tcF9jb3VudCkgew0KPiA+ Pj4gKwl1aW50MzJfdCBwa3RfaWR4ID0gMCwgcGt0X2J1cnN0X2lkeCA9IDA7DQo+ID4+PiArCXVp bnQxNl90IGFzeW5jX2Rlc2NzX2lkeCA9IDA7DQo+ID4+PiArCXVpbnQxNl90IG51bV9idWZmZXJz Ow0KPiA+Pj4gKwl1aW50MTZfdCBudW1fZGVzYzsNCj4gPj4+ICsNCj4gPj4+ICsJc3RydWN0IHJ0 ZV92aG9zdF9pb3ZfaXRlciAqaXRfcG9vbCA9IHZxLT5pdF9wb29sOw0KPiA+Pj4gKwlzdHJ1Y3Qg aW92ZWMgKnZlY19wb29sID0gdnEtPnZlY19wb29sOw0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX3Zob3N0 X2FzeW5jX2Rlc2MgdGRlc1tNQVhfUEtUX0JVUlNUXTsNCj4gPj4+ICsJc3RydWN0IGlvdmVjICpz cmNfaW92ZWMgPSB2ZWNfcG9vbDsNCj4gPj4+ICsJc3RydWN0IGlvdmVjICpkc3RfaW92ZWMgPSB2 ZWNfcG9vbCArIChWSE9TVF9NQVhfQVNZTkNfVkVDID4+DQo+ID4+IDEpOw0KPiA+Pj4gKwlzdHJ1 Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICpzcmNfaXQgPSBpdF9wb29sOw0KPiA+Pj4gKwlzdHJ1Y3Qg cnRlX3Zob3N0X2lvdl9pdGVyICpkc3RfaXQgPSBpdF9wb29sICsgMTsNCj4gPj4+ICsJdWludDE2 X3Qgc2xvdF9pZHggPSAwOw0KPiA+Pj4gKwl1aW50MTZfdCBzZWdzX2F3YWl0ID0gMDsNCj4gPj4+ ICsJdWludDE2X3QgaW92ZWNfaWR4ID0gMCwgaXRfaWR4ID0gMDsNCj4gPj4+ICsJc3RydWN0IGFz eW5jX2luZmxpZ2h0X2luZm8gKnBrdHNfaW5mbyA9IHZxLT5hc3luY19wa3RzX2luZm87DQo+ID4+ PiArCXVpbnQzMl90IG5fcGt0cyA9IDAsIHBrdF9lcnIgPSAwOw0KPiA+Pj4gKwl1aW50MzJfdCBu dW1fYXN5bmNfcGt0cyA9IDAsIG51bV9kb25lX3BrdHMgPSAwOw0KPiA+Pj4gKwlzdHJ1Y3QgdnJp bmdfcGFja2VkX2Rlc2MgYXN5bmNfZGVzY3NbdnEtPnNpemVdOw0KPiA+Pj4gKw0KPiA+Pj4gKwly dGVfcHJlZmV0Y2gwKCZ2cS0+ZGVzY19wYWNrZWRbdnEtPmxhc3RfYXZhaWxfaWR4ICYgKHZxLT5z aXplIC0NCj4gPj4+ICsxKV0pOw0KPiA+Pg0KPiA+PiBUaGUgc2l6ZSBvZiB0aGUgcmluZyBpcyBu b3QgbmVjZXNzYXJpbHkgYSBwb3dlciBvZiB0d28gd2l0aCBwYWNrZWQgcmluZy4NCj4gPg0KPiA+ IEZvciB0aGUgc2l6ZSBvZiB0aGUgcmluZyBpcyBub3QgbmVjZXNzYXJpbHkgYSBwb3dlciBvZiB0 d28sIHNvIG1heWJlIEkNCj4gPiBjYW4gdXNlIGNvZGVzIGxpa2UgSW5keCAlIHZxLT5zaXplICA/ DQo+ID4gSSdtIG5vdCBzdXJlIGlmIGl0J3MgYSBnb29kIHdheSB0byBkbyB0aGF0Lg0KPiANCj4g SW4gdGhpcyBjYXNlIGl0IGlzIE9LLg0KDQpPSy4gSSdsbCBmaXggdGhlbSBpbiB0aGUgbmV4dCB2 ZXJzaW9uLg0KDQpUaGFua3MgYSBsb3QuDQpDaGVuZw0KDQo+IA0KPiA+Pg0KPiA+Pj4gKw0KPiA+ Pj4gKwlmb3IgKHBrdF9pZHggPSAwOyBwa3RfaWR4IDwgY291bnQ7IHBrdF9pZHgrKykgew0KPiA+ Pj4gKwkJaWYgKHVubGlrZWx5KHZpcnRpb19kZXZfcnhfYXN5bmNfc2luZ2xlX3BhY2tlZChkZXYs IHZxLA0KPiA+Pj4gKwkJCQkJCXBrdHNbcGt0X2lkeF0sDQo+ID4+PiArCQkJCQkJJm51bV9kZXNj LCAmbnVtX2J1ZmZlcnMsDQo+ID4+PiArDQo+ID4+IAkmYXN5bmNfZGVzY3NbYXN5bmNfZGVzY3Nf aWR4XSwNCj4gPj4+ICsJCQkJCQkmc3JjX2lvdmVjW2lvdmVjX2lkeF0sDQo+ID4+PiArCQkJCQkJ JmRzdF9pb3ZlY1tpb3ZlY19pZHhdLA0KPiA+Pj4gKwkJCQkJCSZzcmNfaXRbaXRfaWR4XSwNCj4g Pj4+ICsJCQkJCQkmZHN0X2l0W2l0X2lkeF0pIDwgMCkpDQo+ID4+PiArCQkJYnJlYWs7DQo+ID4+ PiArDQo+ID4+PiArCQlWSE9TVF9MT0dfREFUQShERUJVRywgIiglZCkgY3VycmVudCBpbmRleCAl ZCB8IGVuZA0KPiA+PiBpbmRleCAlZFxuIiwNCj4gPj4+ICsJCQlkZXYtPnZpZCwgdnEtPmxhc3Rf YXZhaWxfaWR4LA0KPiA+Pj4gKwkJCXZxLT5sYXN0X2F2YWlsX2lkeCArIG51bV9kZXNjKTsNCj4g Pj4+ICsNCj4gPj4+ICsJCXNsb3RfaWR4ID0gKHZxLT5hc3luY19wa3RzX2lkeCArIG51bV9hc3lu Y19wa3RzKSAmDQo+ID4+PiArCQkJKHZxLT5zaXplIC0gMSk7DQo+ID4+DQo+ID4+IFNhbWUgaGVy ZS4NCj4gPg0KPiA+IFN1cmUuDQo+ID4NCj4gPj4NCj4gPj4+ICsJCWlmIChzcmNfaXRbaXRfaWR4 XS5jb3VudCkgew0KPiA+Pj4gKwkJCXVpbnQxNl90IGZyb20sIHRvOw0KPiA+Pj4gKw0KPiA+Pj4g KwkJCWFzeW5jX2Rlc2NzX2lkeCArPSBudW1fZGVzYzsNCj4gPj4+ICsJCQlhc3luY19maWxsX2Rl c2MoJnRkZXNbcGt0X2J1cnN0X2lkeCsrXSwNCj4gPj4gJnNyY19pdFtpdF9pZHhdLA0KPiA+Pj4g KwkJCQkJJmRzdF9pdFtpdF9pZHhdKTsNCj4gPj4+ICsJCQlwa3RzX2luZm9bc2xvdF9pZHhdLmRl c2NzID0gbnVtX2Rlc2M7DQo+ID4+PiArCQkJcGt0c19pbmZvW3Nsb3RfaWR4XS5ucl9idWZmZXJz ID0gbnVtX2J1ZmZlcnM7DQo+ID4+PiArCQkJcGt0c19pbmZvW3Nsb3RfaWR4XS5tYnVmID0gcGt0 c1twa3RfaWR4XTsNCj4gPj4+ICsJCQludW1fYXN5bmNfcGt0cysrOw0KPiA+Pj4gKwkJCWlvdmVj X2lkeCArPSBzcmNfaXRbaXRfaWR4XS5ucl9zZWdzOw0KPiA+Pj4gKwkJCWl0X2lkeCArPSAyOw0K PiA+Pj4gKw0KPiA+Pj4gKwkJCXNlZ3NfYXdhaXQgKz0gc3JjX2l0W2l0X2lkeF0ubnJfc2VnczsN Cj4gPj4+ICsNCj4gPj4+ICsJCQkvKioNCj4gPj4+ICsJCQkgKiByZWNvdmVyIHNoYWRvdyB1c2Vk IHJpbmcgYW5kIGtlZXAgRE1BLW9jY3VwaWVkDQo+ID4+PiArCQkJICogZGVzY3JpcHRvcnMuDQo+ ID4+PiArCQkJICovDQo+ID4+PiArCQkJZnJvbSA9IHZxLT5zaGFkb3dfdXNlZF9pZHggLSBudW1f YnVmZmVyczsNCj4gPj4+ICsJCQl0byA9IHZxLT5hc3luY19wYWNrZWRfYnVmZmVyX2lkeCAmICh2 cS0+c2l6ZSAtIDEpOw0KPiA+Pj4gKwkJCXNoYWRvd19yaW5nX3N0b3JlKHZxLCB2cS0+c2hhZG93 X3VzZWRfcGFja2VkLA0KPiA+Pj4gKwkJCQkJdnEtPmFzeW5jX2J1ZmZlcnNfcGFja2VkLA0KPiA+ Pj4gKwkJCQkJZnJvbSwgdG8sIG51bV9idWZmZXJzLA0KPiA+Pj4gKwkJCQkJc2l6ZW9mKHN0cnVj dA0KPiA+PiB2cmluZ191c2VkX2VsZW1fcGFja2VkKSk7DQo+ID4+PiArDQo+ID4+PiArCQkJdnEt PmFzeW5jX3BhY2tlZF9idWZmZXJfaWR4ICs9IG51bV9idWZmZXJzOw0KPiA+Pj4gKwkJCXZxLT5z aGFkb3dfdXNlZF9pZHggLT0gbnVtX2J1ZmZlcnM7DQo+ID4+PiArCQl9IGVsc2UNCj4gPj4NCj4g Pj4gQnJhY2tldHMgbmVlZGVkLg0KPiA+DQo+ID4gU3VyZS4NCj4gPg0KPiA+Pg0KPiA+Pj4gKwkJ CWNvbXBfcGt0c1tudW1fZG9uZV9wa3RzKytdID0gcGt0c1twa3RfaWR4XTsNCj4gPj4+ICsNCj4g Pj4+ICsJCXZxX2luY19sYXN0X2F2YWlsX3BhY2tlZCh2cSwgbnVtX2Rlc2MpOw0KPiA+Pj4gKw0K PiA+Pj4gKwkJLyoNCj4gPj4+ICsJCSAqIGNvbmRpdGlvbnMgdG8gdHJpZ2dlciBhc3luYyBkZXZp Y2UgdHJhbnNmZXI6DQo+ID4+PiArCQkgKiAtIGJ1ZmZlcmVkIHBhY2tldCBudW1iZXIgcmVhY2hl cyB0cmFuc2ZlciB0aHJlc2hvbGQNCj4gPj4+ICsJCSAqIC0gdW51c2VkIGFzeW5jIGlvdiBudW1i ZXIgaXMgbGVzcyB0aGFuIG1heCB2aG9zdCB2ZWN0b3INCj4gPj4+ICsJCSAqLw0KPiA+Pj4gKwkJ aWYgKHVubGlrZWx5KHBrdF9idXJzdF9pZHggPj0NCj4gPj4gVkhPU1RfQVNZTkNfQkFUQ0hfVEhS RVNIT0xEIHx8DQo+ID4+PiArCQkJKChWSE9TVF9NQVhfQVNZTkNfVkVDID4+IDEpIC0gc2Vnc19h d2FpdCA8DQo+ID4+PiArCQkJQlVGX1ZFQ1RPUl9NQVgpKSkgew0KPiA+Pj4gKwkJCW5fcGt0cyA9 IHZxLT5hc3luY19vcHMudHJhbnNmZXJfZGF0YShkZXYtPnZpZCwNCj4gPj4+ICsJCQkJCXF1ZXVl X2lkLCB0ZGVzLCAwLCBwa3RfYnVyc3RfaWR4KTsNCj4gPj4+ICsJCQlpb3ZlY19pZHggPSAwOw0K PiA+Pj4gKwkJCWl0X2lkeCA9IDA7DQo+ID4+PiArCQkJc2Vnc19hd2FpdCA9IDA7DQo+ID4+PiAr CQkJdnEtPmFzeW5jX3BrdHNfaW5mbGlnaHRfbiArPSBuX3BrdHM7DQo+ID4+PiArDQo+ID4+PiAr CQkJaWYgKHVubGlrZWx5KG5fcGt0cyA8IHBrdF9idXJzdF9pZHgpKSB7DQo+ID4+PiArCQkJCS8q DQo+ID4+PiArCQkJCSAqIGxvZyBlcnJvciBwYWNrZXRzIG51bWJlciBoZXJlIGFuZCBkbw0KPiA+ PiBhY3R1YWwNCj4gPj4+ICsJCQkJICogZXJyb3IgcHJvY2Vzc2luZyB3aGVuIGFwcGxpY2F0aW9u cyBwb2xsDQo+ID4+PiArCQkJCSAqIGNvbXBsZXRpb24NCj4gPj4+ICsJCQkJICovDQo+ID4+PiAr CQkJCXBrdF9lcnIgPSBwa3RfYnVyc3RfaWR4IC0gbl9wa3RzOw0KPiA+Pj4gKwkJCQlwa3RfYnVy c3RfaWR4ID0gMDsNCj4gPj4+ICsJCQkJcGt0X2lkeCsrOw0KPiA+Pj4gKwkJCQlicmVhazsNCj4g Pj4+ICsJCQl9DQo+ID4+PiArDQo+ID4+PiArCQkJcGt0X2J1cnN0X2lkeCA9IDA7DQo+ID4+PiAr CQl9DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHBrdF9idXJzdF9pZHgpIHsNCj4g Pj4+ICsJCW5fcGt0cyA9IHZxLT5hc3luY19vcHMudHJhbnNmZXJfZGF0YShkZXYtPnZpZCwNCj4g Pj4+ICsJCQkJcXVldWVfaWQsIHRkZXMsIDAsIHBrdF9idXJzdF9pZHgpOw0KPiA+Pj4gKwkJdnEt PmFzeW5jX3BrdHNfaW5mbGlnaHRfbiArPSBuX3BrdHM7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAo dW5saWtlbHkobl9wa3RzIDwgcGt0X2J1cnN0X2lkeCkpDQo+ID4+PiArCQkJcGt0X2VyciA9IHBr dF9idXJzdF9pZHggLSBuX3BrdHM7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJZG9fZGF0 YV9jb3B5X2VucXVldWUoZGV2LCB2cSk7DQo+ID4+PiArDQo+ID4+PiArCWlmICh1bmxpa2VseShw a3RfZXJyKSkgew0KPiA+Pj4gKwkJdWludDE2X3QgZGVzY3NfZXJyID0gMDsNCj4gPj4+ICsJCXVp bnQxNl90IGJ1ZmZlcnNfZXJyID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsJCW51bV9hc3luY19wa3Rz IC09IHBrdF9lcnI7DQo+ID4+PiArCQlwa3RfaWR4IC09IHBrdF9lcnI7DQo+ID4+PiArCS8qIGNh bGN1bGF0ZSB0aGUgc3VtIG9mIGJ1ZmZlcnMgYW5kIGRlc2NzIG9mIERNQS1lcnJvciBwYWNrZXRz LiAqLw0KPiA+Pj4gKwkJd2hpbGUgKHBrdF9lcnItLSA+IDApIHsNCj4gPj4+ICsJCQlkZXNjc19l cnIgKz0NCj4gPj4+ICsJCQkJcGt0c19pbmZvW3Nsb3RfaWR4ICYgKHZxLT5zaXplIC0gMSldLmRl c2NzOw0KPiA+Pg0KPiA+PiBUaGUgc2l6ZSBvZiB0aGUgcmluZyBpcyBub3QgbmVjZXNzYXJpbHkg YSBwb3dlciBvZiB0d28gd2l0aCBwYWNrZWQgcmluZy4NCj4gPg0KPiA+IFdpbGwgYmUgZml4ZWQu DQo+ID4NCj4gPj4NCj4gPj4+ICsJCQlidWZmZXJzX2VyciArPQ0KPiA+Pj4gKwkJCQlwa3RzX2lu Zm9bc2xvdF9pZHggJiAodnEtPnNpemUgLQ0KPiA+PiAxKV0ubnJfYnVmZmVyczsNCj4gPj4NCj4g Pj4gRGl0dG8uDQo+ID4NCj4gPiBXaWxsIGJlIGZpeGVkLg0KPiA+DQo+ID4+DQo+ID4+PiArCQkJ c2xvdF9pZHgtLTsNCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ICsJCXZxLT5hc3luY19wYWNr ZWRfYnVmZmVyX2lkeCAtPSBidWZmZXJzX2VycjsNCj4gPj4+ICsNCj4gPj4+ICsJCWlmICh2cS0+ bGFzdF9hdmFpbF9pZHggPj0gZGVzY3NfZXJyKSB7DQo+ID4+PiArCQkJdnEtPmxhc3RfYXZhaWxf aWR4IC09IGRlc2NzX2VycjsNCj4gPj4+ICsNCj4gPj4+ICsJCQlydGVfbWVtY3B5KCZ2cS0+ZGVz Y19wYWNrZWRbdnEtPmxhc3RfYXZhaWxfaWR4XSwNCj4gPj4+ICsJCQkJJmFzeW5jX2Rlc2NzW2Fz eW5jX2Rlc2NzX2lkeCAtIGRlc2NzX2Vycl0sDQo+ID4+PiArCQkJCWRlc2NzX2VyciAqIHNpemVv ZihzdHJ1Y3QNCj4gPj4gdnJpbmdfcGFja2VkX2Rlc2MpKTsNCj4gPj4+ICsJCX0gZWxzZSB7DQo+ ID4+PiArCQkJdWludDE2X3QgbnJfY29weTsNCj4gPj4+ICsNCj4gPj4+ICsJCQl2cS0+bGFzdF9h dmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9pZHggKyB2cS0+c2l6ZQ0KPiA+Pj4gKwkJCQkJCS0g ZGVzY3NfZXJyOw0KPiA+Pj4gKwkJCW5yX2NvcHkgPSB2cS0+c2l6ZSAtIHZxLT5sYXN0X2F2YWls X2lkeDsNCj4gPj4+ICsJCQlydGVfbWVtY3B5KCZ2cS0+ZGVzY19wYWNrZWRbdnEtPmxhc3RfYXZh aWxfaWR4XSwNCj4gPj4+ICsJCQkJJmFzeW5jX2Rlc2NzW2FzeW5jX2Rlc2NzX2lkeCAtIGRlc2Nz X2Vycl0sDQo+ID4+PiArCQkJCW5yX2NvcHkgKiBzaXplb2Yoc3RydWN0IHZyaW5nX3BhY2tlZF9k ZXNjKSk7DQo+ID4+PiArCQkJZGVzY3NfZXJyIC09IG5yX2NvcHk7DQo+ID4+PiArCQkJcnRlX21l bWNweSh2cS0+ZGVzY19wYWNrZWQsDQo+ID4+PiArCQkJCSZhc3luY19kZXNjc1thc3luY19kZXNj c19pZHggLSBkZXNjc19lcnJdLA0KPiA+Pj4gKwkJCQlkZXNjc19lcnIgKiBzaXplb2Yoc3RydWN0 DQo+ID4+IHZyaW5nX3BhY2tlZF9kZXNjKSk7DQo+ID4+PiArCQkJdnEtPmF2YWlsX3dyYXBfY291 bnRlciBePSAxOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJbnVtX2RvbmVfcGt0cyA9 IHBrdF9pZHggLSBudW1fYXN5bmNfcGt0czsNCj4gPj4+ICsJfQ0KPiA+Pg0KPiA+PiBUaGlzIGVy cm9yIGhhbmRsaW5nIGNvdWxkIGJlIG1vdmVkIGluIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLg0KPiA+ DQo+ID4gU3VyZSwgd2lsbCBmaXggaXQgaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gPg0KPiA+Pg0K PiA+Pj4gKwl2cS0+YXN5bmNfcGt0c19pZHggKz0gbnVtX2FzeW5jX3BrdHM7DQo+ID4+PiArCSpj b21wX2NvdW50ID0gbnVtX2RvbmVfcGt0czsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGxpa2VseSh2 cS0+c2hhZG93X3VzZWRfaWR4KSkgew0KPiA+Pj4gKwkJdmhvc3RfZmx1c2hfZW5xdWV1ZV9zaGFk b3dfcGFja2VkKGRldiwgdnEpOw0KPiA+Pj4gKwkJdmhvc3RfdnJpbmdfY2FsbF9wYWNrZWQoZGV2 LCB2cSk7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIHBrdF9pZHg7DQo+ID4+ PiArfQ0KPiA+Pg0KPiA+PiBBYm92ZSBmdW5jdGlvbiBpcyB2ZXJ5IGJpZyBhbmQgY29tcGxleCwg aXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvDQo+ID4+IHNwbGl0IGl0IGluIHNldmVyYWwgb25lcyB0 byBtYWtlIGl0IG1haW50YWluYWJsZS4NCj4gPg0KPiA+IEkgdGhpbmsgbW92ZSB0aGUgZXJyb3Ig aGFuZGxpbmcgY29kZSB3aWxsIG1ha2UgaXQgc21hbGxlci4NCj4gPg0KPiA+IFRoYW5rcy4NCj4g PiBDaGVuZw0KPiA+DQo+ID4+DQo+ID4+PiArDQo+ID4+PiAgc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdm9pZA0KPiA+Pj4gIHdyaXRlX2JhY2tfY29tcGxldGVkX2Rlc2NzX3NwbGl0KHN0cnVj dCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+Pj4gdWludDE2X3QNCj4gPj4+IG5fZGVzY3MpICB7 IEBAIC0xNjkzLDEyICsyMDQ4LDQwIEBADQo+ID4+PiB3cml0ZV9iYWNrX2NvbXBsZXRlZF9kZXNj c19zcGxpdChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPj4+IHVpbnQxNl90DQo+ID4+ IG5fZGVzY3MpDQo+ID4+PiAgCX0gd2hpbGUgKG5yX2xlZnQgPiAwKTsNCj4gPj4+ICB9DQo+ID4+ Pg0KPiA+Pj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPj4+ICt3cml0ZV9i YWNrX2NvbXBsZXRlZF9kZXNjc19wYWNrZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ ID4+PiArCQkJCXVpbnQxNl90IG5fYnVmZmVycykNCj4gPj4+ICt7DQo+ID4+PiArCXVpbnQxNl90 IG5yX2xlZnQgPSBuX2J1ZmZlcnM7DQo+ID4+PiArCXVpbnQxNl90IGZyb20sIHRvOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlkbyB7DQo+ID4+PiArCQlmcm9tID0gdnEtPmxhc3RfYXN5bmNfYnVmZmVyX2lk eCAmDQo+ID4+PiArCQkJCQkJKHZxLT5zaXplIC0gMSk7DQo+ID4+PiArCQl0byA9IChmcm9tICsg bnJfbGVmdCkgJiAodnEtPnNpemUgLSAxKTsNCj4gPj4NCj4gPj4gVGhlIHNpemUgb2YgdGhlIHJp bmcgaXMgbm90IG5lY2Vzc2FyaWx5IGEgcG93ZXIgb2YgdHdvIHdpdGggcGFja2VkIHJpbmcuDQo+ ID4NCj4gPiBTdXJlLg0KPiA+DQo+ID4+DQo+ID4+PiArCQlpZiAodG8gPiBmcm9tKSB7DQo+ID4+ PiArCQkJdmhvc3RfdXBkYXRlX3VzZWRfcGFja2VkKHZxLA0KPiA+Pj4gKwkJCQl2cS0+YXN5bmNf YnVmZmVyc19wYWNrZWQgKyBmcm9tLA0KPiA+Pj4gKwkJCQl0byAtIGZyb20pOw0KPiA+Pj4gKwkJ CXZxLT5sYXN0X2FzeW5jX2J1ZmZlcl9pZHggKz0gbnJfbGVmdDsNCj4gPj4+ICsJCQlucl9sZWZ0 ID0gMDsNCj4gPj4+ICsJCX0gZWxzZSB7DQo+ID4+PiArCQkJdmhvc3RfdXBkYXRlX3VzZWRfcGFj a2VkKHZxLA0KPiA+Pj4gKwkJCQl2cS0+YXN5bmNfYnVmZmVyc19wYWNrZWQgKyBmcm9tLA0KPiA+ Pj4gKwkJCQl2cS0+c2l6ZSAtIGZyb20pOw0KPiA+Pj4gKwkJCXZxLT5sYXN0X2FzeW5jX2J1ZmZl cl9pZHggKz0NCj4gPj4+ICsJCQkJCQl2cS0+c2l6ZSAtIGZyb207DQo+ID4+PiArCQkJbnJfbGVm dCAtPSB2cS0+c2l6ZSAtIGZyb207DQo+ID4+PiArCQl9DQo+ID4+PiArCX0gd2hpbGUgKG5yX2xl ZnQgPiAwKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAgdWludDE2X3QgcnRlX3Zob3N0X3Bv bGxfZW5xdWV1ZV9jb21wbGV0ZWQoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ID4+ PiAgCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCkgIHsNCj4gPj4+ICAJ c3RydWN0IHZpcnRpb19uZXQgKmRldiA9IGdldF9kZXZpY2UodmlkKTsNCj4gPj4+ICAJc3RydWN0 IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+ID4+PiAtCXVpbnQxNl90IG5fcGt0c19jcGwgPSAwLCBu X3BrdHNfcHV0ID0gMCwgbl9kZXNjcyA9IDA7DQo+ID4+PiArCXVpbnQxNl90IG5fcGt0c19jcGwg PSAwLCBuX3BrdHNfcHV0ID0gMCwgbl9kZXNjcyA9IDAsIG5fYnVmZmVycyA9DQo+ID4+PiArMDsN Cj4gPj4+ICAJdWludDE2X3Qgc3RhcnRfaWR4LCBwa3RzX2lkeCwgdnFfc2l6ZTsNCj4gPj4+ICAJ c3RydWN0IGFzeW5jX2luZmxpZ2h0X2luZm8gKnBrdHNfaW5mbzsNCj4gPj4+ICAJdWludDE2X3Qg ZnJvbSwgaTsNCj4gPj4+IEBAIC0xNzQwLDIxICsyMTIzLDQxIEBAIHVpbnQxNl90DQo+ID4+IHJ0 ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lk LA0KPiA+Pj4gIAkJZ290byBkb25lOw0KPiA+Pj4gIAl9DQo+ID4+Pg0KPiA+Pj4gLQlmb3IgKGkg PSAwOyBpIDwgbl9wa3RzX3B1dDsgaSsrKSB7DQo+ID4+PiAtCQlmcm9tID0gKHN0YXJ0X2lkeCAr IGkpICYgKHZxX3NpemUgLSAxKTsNCj4gPj4+IC0JCW5fZGVzY3MgKz0gcGt0c19pbmZvW2Zyb21d LmRlc2NzOw0KPiA+Pj4gLQkJcGt0c1tpXSA9IHBrdHNfaW5mb1tmcm9tXS5tYnVmOw0KPiA+Pj4g KwlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBuX3Br dHNfcHV0OyBpKyspIHsNCj4gPj4+ICsJCQlmcm9tID0gKHN0YXJ0X2lkeCArIGkpICYgKHZxX3Np emUgLSAxKTsNCj4gPj4NCj4gPj4gVW5saWtlIHNwbGl0IHJpbmcsIHBhY2tlZCByaW5nIHNpemUg aXMgbm90IG5lY2Vzc2FyaWx5IGEgcG93ZXIgb2YgMi4NCj4gPg0KPiA+IFN1cmUuDQo+ID4gVGhh bmtzLg0KPiA+DQo+ID4+DQo+ID4+PiArCQkJbl9idWZmZXJzICs9IHBrdHNfaW5mb1tmcm9tXS5u cl9idWZmZXJzOw0KPiA+Pj4gKwkJCXBrdHNbaV0gPSBwa3RzX2luZm9bZnJvbV0ubWJ1ZjsNCj4g Pj4+ICsJCX0NCj4gPj4+ICsJfSBlbHNlIHsNCj4gPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBuX3Br dHNfcHV0OyBpKyspIHsNCj4gPj4+ICsJCQlmcm9tID0gKHN0YXJ0X2lkeCArIGkpICYgKHZxX3Np emUgLSAxKTsNCj4gPj4+ICsJCQluX2Rlc2NzICs9IHBrdHNfaW5mb1tmcm9tXS5kZXNjczsNCj4g Pj4+ICsJCQlwa3RzW2ldID0gcGt0c19pbmZvW2Zyb21dLm1idWY7DQo+ID4+PiArCQl9DQo+ID4+ PiAgCX0NCj4gPj4+ICsNCj4gPj4+ICAJdnEtPmFzeW5jX2xhc3RfcGt0c19uID0gbl9wa3RzX2Nw bCAtIG5fcGt0c19wdXQ7DQo+ID4+PiAgCXZxLT5hc3luY19wa3RzX2luZmxpZ2h0X24gLT0gbl9w a3RzX3B1dDsNCj4gPj4+DQo+ID4+PiAgCWlmIChsaWtlbHkodnEtPmVuYWJsZWQgJiYgdnEtPmFj Y2Vzc19vaykpIHsNCj4gPj4+IC0JCXdyaXRlX2JhY2tfY29tcGxldGVkX2Rlc2NzX3NwbGl0KHZx LCBuX2Rlc2NzKTsNCj4gPj4+ICsJCWlmICh2cV9pc19wYWNrZWQoZGV2KSkgew0KPiA+Pj4gKwkJ CXdyaXRlX2JhY2tfY29tcGxldGVkX2Rlc2NzX3BhY2tlZCh2cSwNCj4gPj4gbl9idWZmZXJzKTsN Cj4gPj4+DQo+ID4+PiAtCQlfX2F0b21pY19hZGRfZmV0Y2goJnZxLT51c2VkLT5pZHgsIG5fZGVz Y3MsDQo+ID4+IF9fQVRPTUlDX1JFTEVBU0UpOw0KPiA+Pj4gLQkJdmhvc3RfdnJpbmdfY2FsbF9z cGxpdChkZXYsIHZxKTsNCj4gPj4+IC0JfSBlbHNlDQo+ID4+PiAtCQl2cS0+bGFzdF9hc3luY19k ZXNjX2lkeCArPSBuX2Rlc2NzOw0KPiA+Pj4gKwkJCXZob3N0X3ZyaW5nX2NhbGxfcGFja2VkKGRl diwgdnEpOw0KPiA+Pj4gKwkJfSBlbHNlIHsNCj4gPj4+ICsJCQl3cml0ZV9iYWNrX2NvbXBsZXRl ZF9kZXNjc19zcGxpdCh2cSwgbl9kZXNjcyk7DQo+ID4+PiArDQo+ID4+PiArCQkJX19hdG9taWNf YWRkX2ZldGNoKCZ2cS0+dXNlZC0+aWR4LCBuX2Rlc2NzLA0KPiA+Pj4gKwkJCQkJX19BVE9NSUNf UkVMRUFTRSk7DQo+ID4+PiArCQkJdmhvc3RfdnJpbmdfY2FsbF9zcGxpdChkZXYsIHZxKTsNCj4g Pj4+ICsJCX0NCj4gPj4+ICsJfSBlbHNlIHsNCj4gPj4+ICsJCWlmICh2cV9pc19wYWNrZWQoZGV2 KSkNCj4gPj4+ICsJCQl2cS0+bGFzdF9hc3luY19idWZmZXJfaWR4ICs9IG5fYnVmZmVyczsNCj4g Pj4+ICsJCWVsc2UNCj4gPj4+ICsJCQl2cS0+bGFzdF9hc3luY19kZXNjX2lkeCArPSBuX2Rlc2Nz Ow0KPiA+Pj4gKwl9DQo+ID4+Pg0KPiA+Pj4gIGRvbmU6DQo+ID4+PiAgCXJ0ZV9zcGlubG9ja191 bmxvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4+PiBAQCAtMTc5NSw5ICsyMTk4LDEwIEBAIHZp cnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KHN0cnVjdCB2aXJ0aW9fbmV0DQo+ID4+ICpkZXYsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiA+Pj4gIAlpZiAoY291bnQgPT0gMCkNCj4gPj4+ICAJCWdvdG8g b3V0Ow0KPiA+Pj4NCj4gPj4+IC0JLyogVE9ETzogcGFja2VkIHF1ZXVlIG5vdCBpbXBsZW1lbnRl ZCAqLw0KPiA+Pj4gIAlpZiAodnFfaXNfcGFja2VkKGRldikpDQo+ID4+PiAtCQluYl90eCA9IDA7 DQo+ID4+PiArCQluYl90eCA9IHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3BhY2tlZChkZXYs DQo+ID4+PiArCQkJCXZxLCBxdWV1ZV9pZCwgcGt0cywgY291bnQsIGNvbXBfcGt0cywNCj4gPj4+ ICsJCQkJY29tcF9jb3VudCk7DQo+ID4+PiAgCWVsc2UNCj4gPj4+ICAJCW5iX3R4ID0gdmlydGlv X2Rldl9yeF9hc3luY19zdWJtaXRfc3BsaXQoZGV2LA0KPiA+Pj4gIAkJCQl2cSwgcXVldWVfaWQs IHBrdHMsIGNvdW50LCBjb21wX3BrdHMsDQo+ID4+Pg0KPiA+DQoNCg==