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 5AFD0A034C; Thu, 29 Sep 2022 23:13:59 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5070B40E5A; Thu, 29 Sep 2022 23:13:59 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 704A240694 for ; Thu, 29 Sep 2022 23:13:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1664486037; x=1696022037; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=WE+DFGrb8mwEzNQmtEpo8tT2QPiSf/9KRrQxyEGh4ew=; b=aDiyyWQRQq0oRUFlr0b025gA4C+Meq5hoy2ifrjmXd99fZxkBKyMulUo v88Qpzg9egUL7+G1nwsCK2wINZGCBD6vGXhFhEzEn304Y1CjBI5gFUJAr UmU1vPrv/BJJPwxCN6QWU5WhhZxxL32CLx3GVI1nXv5+YwFZ7vJ+E7pwW n4M+WIPovhyNO9VzgY7pdIW0IcNSNfHF29Ot8tBnuMn3BXyUxR79CbA+W U+XxOZlFPgSMSFhrqYwwyvdfP8pT8xCAuBchLfiKCG+ty5S+pJ86nwylp i4sicco+nSfyaFw8RJZQp94JCRrdGuCXchX09faShd+y08KldgtI2dGHf Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10485"; a="303516080" X-IronPort-AV: E=Sophos;i="5.93,356,1654585200"; d="scan'208";a="303516080" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Sep 2022 14:13:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10485"; a="622529927" X-IronPort-AV: E=Sophos;i="5.93,356,1654585200"; d="scan'208";a="622529927" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga002.jf.intel.com with ESMTP; 29 Sep 2022 14:13:56 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Thu, 29 Sep 2022 14:13:56 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Thu, 29 Sep 2022 14:13:56 -0700 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.46) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Thu, 29 Sep 2022 14:13:55 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GaTdi0GtzxUzJMqC79LQ80dyIAjIPMDrkVG8o0UC8f/29IRYHM+lqLvIQ8pig//zWDbDcWqFQohKTes/61GjbCsDknTOANi9QVwqLt2BvenPAjpr2NVAyM372CJErVJ9LaFVoF9j096jRQqD7YdPABQSN+wLlSZLUwxrlk/1ET02q2bfNuQ+d5ZIg40ItafF2cNsAty/tME6kiygt8x8Ms2ZiUTPkx0qtK1yBzfxqQNdxVmFYpA3v4GZ4KiTgLeycQs22ZpKeru7YN2OUMzjUwM9qTp3dq+HjiTAuJY3YyAdy9p6awpKo3UG0cA5R/WwwaIgTgZmVwdb/Idm3SZ6Bg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WE+DFGrb8mwEzNQmtEpo8tT2QPiSf/9KRrQxyEGh4ew=; b=TKohCxRITvfIb80ZbHSHUpJ2zeE4EybHSJJKrRAL4ey5AYniRlni4TO/+nzd3TN4DmkTYI/aJZh74xV6oToJqxbeh5Rxl6trkyRm/CyixN91prqyxiaL909b3POYOtXacBUW8X2cJjfV0h0YBftuFyiyUl3sfvVOgNwvgU2H4emidDXcbs9t/BehIJdHtBu3xHG1dyixganwrZB9UiWKRR8mRJNduG/RHQPtVcfeQx8Eba/OfwfWyUjUEeqndMQDGbZs2olh9X60202nES9HNBOZm3ZYp9uWxmoNpMSuRjTiEFgm1tC2zD+Tav7NKWYC852SogOnsUppIXhccG1MVA== 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 Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by DM4PR11MB6456.namprd11.prod.outlook.com (2603:10b6:8:bc::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.20; Thu, 29 Sep 2022 21:13:52 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf%7]) with mapi id 15.20.5676.020; Thu, 29 Sep 2022 21:13:52 +0000 From: "Chautru, Nicolas" To: Maxime Coquelin , "dev@dpdk.org" , "thomas@monjalon.net" CC: "trix@redhat.com" , "mdr@ashroe.eu" , "Richardson, Bruce" , "hemant.agrawal@nxp.com" , "david.marchand@redhat.com" , "stephen@networkplumber.org" , "Vargas, Hernan" Subject: RE: [PATCH v6 09/14] baseband/acc: add LTE processing functions Thread-Topic: [PATCH v6 09/14] baseband/acc: add LTE processing functions Thread-Index: AQHYz6+16LlI1Mle80C7uE8rh5jpYK3zTr4AgAOiFKA= Date: Thu, 29 Sep 2022 21:13:51 +0000 Message-ID: References: <20220924005048.20302-1-nicolas.chautru@intel.com> <20220924005048.20302-10-nicolas.chautru@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BY5PR11MB4451:EE_|DM4PR11MB6456:EE_ x-ms-office365-filtering-correlation-id: 24af7b17-433d-4f95-7860-08daa25f8272 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nJ2+fmJfjnzVRMBUdoTu2I4Gl6lAGvIVvbG0epsQVMSci5rXVL4Zy3Tg9IzpA+/wgav5tDRxzuN7N3ZOvJjK8rMBM3gBWvHvCNSeWP4rrlWkWmWjyzQTlNp3/B4sZY2hV6OIk2CJCVBFO5FpiV2i+34zNbOcyD8xapkLS2wvI1X/A9oyKsdNV3crv4LlrWw7Dt34dfJHVhNpt/vhcnonyL5GuMwr4AD+cxjUdzozktcB8YyJkbINAQg0+6Z72rVYJsrxXDpuTIaWnrET8zkikHvzJ9AUsPYw1Lb3GTe3Ej7FksF8AZsUYyGr6CK6T2li1XsGMjUYuTeZHgGbtTy5xZEIcPbx9f4Q9G3j6fkNS7XfPIDmV/GKveS9ZE42YULbcWE8tvxpXz8EtHjKM4oCv5eiP07Is2dFBgvWcSZ6NJ7Mt8JUNxBqfrg7BECMBY1kbLRGr9tNQginhv+8NjNedJNs5+PWjQtAnXJaQdjj1+w3s48uEIyN91cN9ImSWB3Tkr8+SpMfrBbl4OpwCV/BDth+KVs2q9KFEzCMSK5vsg5cqMq30h8ZrTYehZlIegnkrxJlK3XMTVh0+h6MgT0vNGeeYDgvRkP7OnzSedme2zkFsvtqHdYpuV5Glixyw3ByC02f7eiUNEywgMNb4Af1PrE0A8/f3DOVoJM3tRD0vBz3qY6zFQmktKB8QXwG68pcAIdjTUqqsNFYYPFCzuPrtKUOZt5xeDt1KBhMIcnnI9INWJg3ctfI9dvmGXqNYf+Xd0R3CNmr8O5788Mk9KVRBXIvWGUQnDQ6gx+2JNPhAfM= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(366004)(451199015)(86362001)(82960400001)(33656002)(38070700005)(55016003)(122000001)(38100700002)(76116006)(4326008)(110136005)(71200400001)(8676002)(54906003)(66476007)(66946007)(52536014)(2906002)(5660300002)(8936002)(64756008)(66556008)(66446008)(83380400001)(186003)(7696005)(107886003)(498600001)(53546011)(6506007)(26005)(30864003)(9686003)(461764006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ekNhVGJCK2lBNWduSEVBTG9XZmI0aTNzbjJKa21naUw5Q1ZyaE5jWi9NeDkr?= =?utf-8?B?RU9obG5jNHVSTU5uWFdTYlpIWXRPZFY3ckI2UUFaUkF5Z2RadFdqKzNBc04r?= =?utf-8?B?MmgxNWRqMVMxcHZ0dzlXS3EzTnpPQ0Z4RHJiYkJDQTF6dE5zeHk0NWhldkRy?= =?utf-8?B?NHVZWEc1NjVpakJERk9pMVc4MFhVV2RMM2Z2b1VLNmZncW1DL2RGcG5KVnNo?= =?utf-8?B?ZjdGQUtiUktlYlVVaEt6U29IOUJ1cURRNk1rVkszM2d5bnpXeHl4TnVxWkdi?= =?utf-8?B?RVhwY1ZwRmlrUVk4eEg4MldmL3AxQVNNSThHTnpTcjJYN3VDWnVRZmppS1VW?= =?utf-8?B?NnFZSmIyUjlyMnpGWFZNaVJpR1VMbFhtYkl3SkdxbFExQ1NtU3hMUFk4bjNS?= =?utf-8?B?QlRYOHI5Wnh0UXc5MHlBU1JDVjRuQ0JXdE82MEpsSGFkeG54dElpdTRycDU1?= =?utf-8?B?dWNHcGkvenNDTlJEaC9zbjFSZVJDT1hCUTJadlBBR1dXdEFSVm5tVW1Gb1NW?= =?utf-8?B?Zi9LS2VoVkFOc1lGUHFKQXpBUzlkUzNQOGw5elU5dk9OcWZ0d1RDSTFPallV?= =?utf-8?B?NzRZNXh6Y1JQd2pJaDBEOG0vbG1EQUI2anhTQ0VhYVEvdStCZ3NMVU1RT0Zw?= =?utf-8?B?RDB1TEJraTVna29rT2JqNkZKL0RQbGJZQ3FOa1V5S3hDSmJoZUpiU3RiWE1w?= =?utf-8?B?QllYOXJQVm9uMThKUmdXaS9RMDgxMGRNVmNBQlRMRXcvdUttQmxWN1lkYjBy?= =?utf-8?B?OFRLV0JyZzhKWVdJZFBTRm1HRmhiTzd2MUszbE1ZRG9FN3ZiVmp0UmFjQWw1?= =?utf-8?B?aE1YWmd3cGRndzBpVVpFRTlqcng0MDZzbEhndTdVTzQ3L3hqMk1iWjRkcnJ0?= =?utf-8?B?ZDBlZC90N2o2dmVaSWY2OXFKYTBIbGUrcmVOUlZkSGxIc1R3Zk03SW5DUkZp?= =?utf-8?B?Y1J3UjYxbEx2dnJTSVl2bEU4VUpoSDNVTWFjTXFvbXRjQVExOUhyTlVpWkdv?= =?utf-8?B?NmY0ditIM0RnRk1oMDlvaDQzV1BIWllxd0tCeUdvaXcxTDZSQjJEcklpbEly?= =?utf-8?B?dncwSUNXMTErWnY0bmJuYUQzSUhCVThqZWhsT3BtN1NJY0ZzTWlvMzhsWlpH?= =?utf-8?B?czQwUkkrbmc3akZ6V2J0M0dBT3ZQekZwaFdVRGd0N2lHOXhYL2JMZWo2T2lY?= =?utf-8?B?ZzdNbnpNamhzRUVxTjBCKzdiSGdoek90c1czYk9IM1BRRk9McklHVUVxZ2I1?= =?utf-8?B?VE1EM1Y0aWhMMit5QmV1WW9VNktMbm5hWFF2c2F1THd6YUloVnZIM1lydWxC?= =?utf-8?B?c1I0V2NCV3V1UnVBQVArWmdvR2pPWHA4Z1J3Qmt2MDNxTXFvSTkwWXQwVDdG?= =?utf-8?B?UjFnNG5XTzBPU0RwczdqdHRxS2tjbzRvZXN6dURKYkNncHNpTExjenFUWktx?= =?utf-8?B?NWlXQnMvWXNqQ2Y4bG1mUG5CNXczRWdJMHdSWHk3bldJbUcxUy9DRVBWV1ho?= =?utf-8?B?REVBMFZZb3E5OHBRN2pYbUl3RUpDb2RuRXE3VnBtdjFjWEtOM3hLL1FTeEow?= =?utf-8?B?eWpNcGlqVGlUUTN6bDkybkFUVWRSakMvRTdld1FDa3YzUzY2RUNHZkZsZ1I5?= =?utf-8?B?TkNxK25UTWNRaGNEZS9tcUc0TTZaS3RaakdYdXlFb1dMQjdYMWU4OUE2czFj?= =?utf-8?B?b01zYitzS1hhaFJrS2I5RkRUMVlPV1VXUzJHNGpuUE1TbWYzb1dLY2R3aEZR?= =?utf-8?B?WWQ0bnFhcjh3VkNoakZ1QnBsS3pyL0RFalV6Y0hpQ1pYTWF4bCtNODlRaGs1?= =?utf-8?B?V3JVRFhSMFVlU2tWbit2WVhYTHN5ZG4zaTdWdXU0elZQQ3VqNjFVY0R5ZVdh?= =?utf-8?B?WUF1UEJWOVdsd2JPMmJ0eTRVcVUwL0tmRXJUUDhSOVl4VDN1M20rUjdZVitX?= =?utf-8?B?MkRvd1BZOCtLeSt4MmlsdlBSNjJMMDliTWFCRXd3c1AwME83Z0QxNEhGZHdk?= =?utf-8?B?ZVBXYnB3SVlHSHQyWFQ0S2tXNDNab3U5b0NzbWJSL2NmMjMzMXhIcFBSZnMr?= =?utf-8?B?TDhONjcvMHhyR1BLemphcXNyM2tDNU5JVlNmM0JNTjZBR2dnbnMrZVRIZlNh?= =?utf-8?Q?Kx7wsNGsDzptDiGv5xl1DNnVD?= 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: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24af7b17-433d-4f95-7860-08daa25f8272 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Sep 2022 21:13:52.0010 (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: AAzR3sR7XHsVWPsyNSLlr6kmCOWBL0uyy76INxg5KUBTRqY/KIFtUXjbX0uEyVVm1fwxwANwbnl9eWHHwezuRN/2H7ZLEX2RKFDlqU5Y6Mg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB6456 X-OriginatorOrg: intel.com 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 VGhhbmtzIE1heGltZSwgDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog TWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVHVl c2RheSwgU2VwdGVtYmVyIDI3LCAyMDIyIDY6NDMgQU0NCj4gVG86IENoYXV0cnUsIE5pY29sYXMg PG5pY29sYXMuY2hhdXRydUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmc7DQo+IHRob21hc0Btb25q YWxvbi5uZXQNCj4gQ2M6IHRyaXhAcmVkaGF0LmNvbTsgbWRyQGFzaHJvZS5ldTsgUmljaGFyZHNv biwgQnJ1Y2UNCj4gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgaGVtYW50LmFncmF3YWxA bnhwLmNvbTsNCj4gZGF2aWQubWFyY2hhbmRAcmVkaGF0LmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1 bWJlci5vcmc7IFZhcmdhcywgSGVybmFuDQo+IDxoZXJuYW4udmFyZ2FzQGludGVsLmNvbT4NCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2NiAwOS8xNF0gYmFzZWJhbmQvYWNjOiBhZGQgTFRFIHByb2Nl c3NpbmcgZnVuY3Rpb25zDQo+IA0KPiANCj4gDQo+IE9uIDkvMjQvMjIgMDI6NTAsIE5pY29sYXMg Q2hhdXRydSB3cm90ZToNCj4gPiBGcm9tOiBOaWMgQ2hhdXRydSA8bmljb2xhcy5jaGF1dHJ1QGlu dGVsLmNvbT4NCj4gPg0KPiA+IEFkZCBmdW5jdGlvbnMgYW5kIGNhcGFiaWxpdHkgZm9yIDRHIEZF Qw0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmljIENoYXV0cnUgPG5pY29sYXMuY2hhdXRydUBp bnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gICBkcml2ZXJzL2Jhc2ViYW5kL2FjYy9ydGVfYWNjMjAw X3BtZC5jIHwgODU0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gICAxIGZpbGUg Y2hhbmdlZCwgODUwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYw0KPiA+IGIvZHJp dmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYw0KPiA+IGluZGV4IDIyOWU1ZmJhODYu LmU4OTAxYzYwZDYgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2Fj YzIwMF9wbWQuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfcG1k LmMNCj4gPiBAQCAtNjU4LDYgKzY1OCw0NiBAQCBhY2MyMDBfZGV2X2luZm9fZ2V0KHN0cnVjdCBy dGVfYmJkZXYgKmRldiwNCj4gPiAgIAlzdHJ1Y3QgYWNjX2RldmljZSAqZCA9IGRldi0+ZGF0YS0+ ZGV2X3ByaXZhdGU7DQo+ID4gICAJaW50IGk7DQo+ID4gICAJc3RhdGljIGNvbnN0IHN0cnVjdCBy dGVfYmJkZXZfb3BfY2FwIGJiZGV2X2NhcGFiaWxpdGllc1tdID0gew0KPiA+ICsJCXsNCj4gPiAr CQkJLnR5cGUgPSBSVEVfQkJERVZfT1BfVFVSQk9fREVDLA0KPiA+ICsJCQkuY2FwLnR1cmJvX2Rl YyA9IHsNCj4gPiArCQkJCS5jYXBhYmlsaXR5X2ZsYWdzID0NCj4gPiArDQo+IAlSVEVfQkJERVZf VFVSQk9fU1VCQkxPQ0tfREVJTlRFUkxFQVZFIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9f Q1JDX1RZUEVfMjRCIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fRVFVQUxJWkVSIHwNCj4g PiArDQo+IAlSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRfU0FUVVJBVEUgfA0KPiA+ICsNCj4gCVJU RV9CQkRFVl9UVVJCT19IQUxGX0lURVJBVElPTl9FVkVOIHwNCj4gPiArDQo+IAlSVEVfQkJERVZf VFVSQk9fQ09OVElOVUVfQ1JDX01BVENIIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fU09G VF9PVVRQVVQgfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19FQVJMWV9URVJNSU5BVElPTiB8 DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX05FR19MTFJfMV9CSVRfSU4gfA0KPiA+ICsNCj4g CVJURV9CQkRFVl9UVVJCT19ORUdfTExSXzFfQklUX1NPRlRfT1VUIHwNCj4gPiArCQkJCQlSVEVf QkJERVZfVFVSQk9fTUFQX0RFQyB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0RFQ19UQl9D UkNfMjRCX0tFRVAgfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19ERUNfU0NBVFRFUl9HQVRI RVIsDQo+ID4gKwkJCQkubWF4X2xscl9tb2R1bHVzID0gSU5UOF9NQVgsDQo+ID4gKwkJCQkubnVt X2J1ZmZlcnNfc3JjID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tT LA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX2hhcmRfb3V0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZf VFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX3NvZnRfb3V0ID0N Cj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQl9DQo+ ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS50eXBlID0gUlRFX0JCREVWX09QX1RVUkJPX0VO QywNCj4gPiArCQkJLmNhcC50dXJib19lbmMgPSB7DQo+ID4gKwkJCQkuY2FwYWJpbGl0eV9mbGFn cyA9DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0NSQ18yNEJfQVRUQUNIIHwNCj4gPiArDQo+ IAlSVEVfQkJERVZfVFVSQk9fUlZfSU5ERVhfQllQQVNTIHwNCj4gPiArCQkJCQlSVEVfQkJERVZf VFVSQk9fUkFURV9NQVRDSCB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0VOQ19TQ0FUVEVS X0dBVEhFUiwNCj4gPiArCQkJCS5udW1fYnVmZmVyc19zcmMgPQ0KPiA+ICsNCj4gCVJURV9CQkRF Vl9UVVJCT19NQVhfQ09ERV9CTE9DS1MsDQo+ID4gKwkJCQkubnVtX2J1ZmZlcnNfZHN0ID0NCj4g PiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQl9DQo+ID4g KwkJfSwNCj4gPiAgIAkJew0KPiA+ICAgCQkJLnR5cGUgICA9IFJURV9CQkRFVl9PUF9MRFBDX0VO QywNCj4gPiAgIAkJCS5jYXAubGRwY19lbmMgPSB7DQo+ID4gQEAgLTcwOSwxNSArNzQ5LDE3IEBA IGFjYzIwMF9kZXZfaW5mb19nZXQoc3RydWN0IHJ0ZV9iYmRldiAqZGV2LA0KPiA+DQo+ID4gICAJ LyogRXhwb3NlZCBudW1iZXIgb2YgcXVldWVzICovDQo+ID4gICAJZGV2X2luZm8tPm51bV9xdWV1 ZXNbUlRFX0JCREVWX09QX05PTkVdID0gMDsNCj4gPiAtCWRldl9pbmZvLT5udW1fcXVldWVzW1JU RV9CQkRFVl9PUF9UVVJCT19ERUNdID0gMDsNCj4gPiAtCWRldl9pbmZvLT5udW1fcXVldWVzW1JU RV9CQkRFVl9PUF9UVVJCT19FTkNdID0gMDsNCj4gPiArCWRldl9pbmZvLT5udW1fcXVldWVzW1JU RV9CQkRFVl9PUF9UVVJCT19ERUNdID0gZC0NCj4gPmFjY19jb25mLnFfdWxfNGcubnVtX2Fxc19w ZXJfZ3JvdXBzICoNCj4gPiArCQkJZC0+YWNjX2NvbmYucV91bF80Zy5udW1fcWdyb3VwczsNCj4g PiArCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9CQkRFVl9PUF9UVVJCT19FTkNdID0gZC0NCj4g PmFjY19jb25mLnFfZGxfNGcubnVtX2Fxc19wZXJfZ3JvdXBzICoNCj4gPiArCQkJZC0+YWNjX2Nv bmYucV9kbF80Zy5udW1fcWdyb3VwczsNCj4gPiAgIAlkZXZfaW5mby0+bnVtX3F1ZXVlc1tSVEVf QkJERVZfT1BfTERQQ19ERUNdID0gZC0NCj4gPmFjY19jb25mLnFfdWxfNWcubnVtX2Fxc19wZXJf Z3JvdXBzICoNCj4gPiAgIAkJCWQtPmFjY19jb25mLnFfdWxfNWcubnVtX3Fncm91cHM7DQo+ID4g ICAJZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRFX0JCREVWX09QX0xEUENfRU5DXSA9IGQtDQo+ID5h Y2NfY29uZi5xX2RsXzVnLm51bV9hcXNfcGVyX2dyb3VwcyAqDQo+ID4gICAJCQlkLT5hY2NfY29u Zi5xX2RsXzVnLm51bV9xZ3JvdXBzOw0KPiA+ICAgCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9C QkRFVl9PUF9GRlRdID0gMDsNCj4gPiAtCWRldl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVfQkJE RVZfT1BfVFVSQk9fREVDXSA9IDA7DQo+ID4gLQlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRF X0JCREVWX09QX1RVUkJPX0VOQ10gPSAwOw0KPiA+ICsJZGV2X2luZm8tPnF1ZXVlX3ByaW9yaXR5 W1JURV9CQkRFVl9PUF9UVVJCT19ERUNdID0gZC0NCj4gPmFjY19jb25mLnFfdWxfNGcubnVtX3Fn cm91cHM7DQo+ID4gKwlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX1RVUkJP X0VOQ10gPQ0KPiA+ICtkLT5hY2NfY29uZi5xX2RsXzRnLm51bV9xZ3JvdXBzOw0KPiA+ICAgCWRl dl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVfQkJERVZfT1BfTERQQ19ERUNdID0gZC0NCj4gPmFj Y19jb25mLnFfdWxfNWcubnVtX3Fncm91cHM7DQo+ID4gICAJZGV2X2luZm8tPnF1ZXVlX3ByaW9y aXR5W1JURV9CQkRFVl9PUF9MRFBDX0VOQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV9kbF81Zy5udW1f cWdyb3VwczsNCj4gPiAgIAlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlbUlRFX0JCREVWX09QX0ZG VF0gPSAwOyBAQCAtNzYyLDYNCj4gKzgwNCw3MA0KPiA+IEBAIHN0YXRpYyBzdHJ1Y3QgcnRlX3Bj aV9pZCBwY2lfaWRfYWNjMjAwX3ZmX21hcFtdID0gew0KPiA+ICAgCXsuZGV2aWNlX2lkID0gMH0s DQo+ID4gICB9Ow0KPiA+DQo+ID4gKy8qIEZpbGwgaW4gYSBmcmFtZSBjb250cm9sIHdvcmQgZm9y IHR1cmJvIGRlY29kaW5nLiAqLyBzdGF0aWMgaW5saW5lDQo+ID4gK3ZvaWQgYWNjMjAwX2Zjd190 ZF9maWxsKGNvbnN0IHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwgc3RydWN0DQo+ID4gK2Fj Y19mY3dfdGQgKmZjdykgew0KPiA+ICsJZmN3LT5mY3dfdmVyID0gMTsNCj4gPiArCWZjdy0+bnVt X21hcHMgPSBBQ0NfRkNXX1REX0FVVE9NQVA7DQo+ID4gKwlmY3ctPmJ5cGFzc19zYl9kZWludCA9 ICFjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX1RV UkJPX1NVQkJMT0NLX0RFSU5URVJMRUFWRSk7DQo+ID4gKwlpZiAob3AtPnR1cmJvX2RlYy5jb2Rl X2Jsb2NrX21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykgew0KPiA+ICsJCS8q IEZJWE1FIGZvciBUQiBibG9jayAqLw0KPiA+ICsJCWZjdy0+a19wb3MgPSBvcC0+dHVyYm9fZGVj LnRiX3BhcmFtcy5rX3BvczsNCj4gPiArCQlmY3ctPmtfbmVnID0gb3AtPnR1cmJvX2RlYy50Yl9w YXJhbXMua19uZWc7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZjdy0+a19wb3MgPSBvcC0+dHVy Ym9fZGVjLmNiX3BhcmFtcy5rOw0KPiA+ICsJCWZjdy0+a19uZWcgPSBvcC0+dHVyYm9fZGVjLmNi X3BhcmFtcy5rOw0KPiA+ICsJfQ0KPiA+ICsJZmN3LT5jID0gMTsNCj4gPiArCWZjdy0+Y19uZWcg PSAxOw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiBSVEVf QkJERVZfVFVSQk9fU09GVF9PVVRQVVQpKSB7DQo+ID4gKwkJZmN3LT5zb2Z0X291dHB1dF9lbiA9 IDE7DQo+ID4gKwkJZmN3LT5zd19zb2Z0X291dF9kaXMgPSAwOw0KPiA+ICsJCWZjdy0+c3dfZXRf Y29udCA9IGNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsNCj4gCVJURV9C QkRFVl9UVVJCT19DT05USU5VRV9DUkNfTUFUQ0gpOw0KPiA+ICsJCWZjdy0+c3dfc29mdF9vdXRf c2F0dXJhdGlvbiA9IGNoZWNrX2JpdChvcC0NCj4gPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiAr CQkJCVJURV9CQkRFVl9UVVJCT19TT0ZUX09VVF9TQVRVUkFURSk7DQo+ID4gKwkJaWYgKGNoZWNr X2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQkJUlRFX0JCREVWX1RVUkJPX0VR VUFMSVpFUikpIHsNCj4gPiArCQkJZmN3LT5ieXBhc3NfdGVxID0gMDsNCj4gPiArCQkJZmN3LT5l YSA9IG9wLT50dXJib19kZWMuY2JfcGFyYW1zLmU7DQo+ID4gKwkJCWZjdy0+ZWIgPSBvcC0+dHVy Ym9fZGVjLmNiX3BhcmFtcy5lOw0KPiA+ICsJCQlpZiAob3AtPnR1cmJvX2RlYy5ydl9pbmRleCA9 PSAwKQ0KPiA+ICsJCQkJZmN3LT5rMF9zdGFydF9jb2wgPSBBQ0NfRkNXX1REX1JWSURYXzA7DQo+ ID4gKwkJCWVsc2UgaWYgKG9wLT50dXJib19kZWMucnZfaW5kZXggPT0gMSkNCj4gPiArCQkJCWZj dy0+azBfc3RhcnRfY29sID0gQUNDX0ZDV19URF9SVklEWF8xOw0KPiA+ICsJCQllbHNlIGlmIChv cC0+dHVyYm9fZGVjLnJ2X2luZGV4ID09IDIpDQo+ID4gKwkJCQlmY3ctPmswX3N0YXJ0X2NvbCA9 IEFDQ19GQ1dfVERfUlZJRFhfMjsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJZmN3LT5rMF9zdGFy dF9jb2wgPSBBQ0NfRkNXX1REX1JWSURYXzM7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJZmN3 LT5ieXBhc3NfdGVxID0gMTsNCj4gPiArCQkJZmN3LT5lYiA9IDY0OyAvKiBhdm9pZCB1bmRlZmlu ZWQgdmFsdWUgKi8NCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZjdy0+c29mdF9v dXRwdXRfZW4gPSAwOw0KPiA+ICsJCWZjdy0+c3dfc29mdF9vdXRfZGlzID0gMTsNCj4gPiArCQlm Y3ctPmJ5cGFzc190ZXEgPSAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZjdy0+Y29kZV9ibG9j a19tb2RlID0gMTsgLyogRklYTUUgKi8NCj4gPiArCWZjdy0+dHVyYm9fY3JjX3R5cGUgPSBjaGVj a19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX1RVUkJPX0NS Q19UWVBFXzI0Qik7DQo+ID4gKw0KPiA+ICsJZmN3LT5leHRfdGRfY29sZF9yZWdfZW4gPSAxOw0K PiA+ICsJZmN3LT5yYXdfZGVjb2Rlcl9pbnB1dF9vbiA9IDA7DQo+ID4gKwlmY3ctPm1heF9pdGVy ID0gUlRFX01BWCgodWludDhfdCkgb3AtPnR1cmJvX2RlYy5pdGVyX21heCwgMik7DQo+ID4gKwlm Y3ctPm1pbl9pdGVyID0gMjsNCj4gPiArCWZjdy0+aGFsZl9pdGVyX29uID0gIWNoZWNrX2JpdChv cC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfVFVSQk9fSEFMRl9JVEVS QVRJT05fRVZFTik7DQo+ID4gKw0KPiA+ICsJZmN3LT5lYXJseV9zdG9wX2VuID0gY2hlY2tfYml0 KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9UVVJCT19FQVJMWV9U RVJNSU5BVElPTikgJiAhZmN3LQ0KPiA+c29mdF9vdXRwdXRfZW47DQo+ID4gKwlmY3ctPmV4dF9z Y2FsZSA9IDB4RjsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8qIEZpbGwgaW4gYSBmcmFtZSBjb250 cm9sIHdvcmQgZm9yIExEUEMgZGVjb2RpbmcuICovDQo+ID4gICBzdGF0aWMgaW5saW5lIHZvaWQN Cj4gPiAgIGFjYzIwMF9mY3dfbGRfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsIHN0 cnVjdCBhY2NfZmN3X2xkDQo+ID4gKmZjdywgQEAgLTg4Nyw2ICs5OTMsMjA1IEBAIGFjYzIwMF9m Y3dfbGRfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcA0KPiAqb3AsIHN0cnVjdCBhY2NfZmN3 X2xkICpmY3csDQo+ID4gICAJCWZjdy0+dGJfY3JjX3NlbGVjdCA9IDE7DQo+ID4gICB9DQo+ID4N Cj4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArYWNjMjAwX2RtYV9kZXNjX3RlX2ZpbGwoc3Ry dWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+ICsJCXN0cnVjdCBhY2NfZG1hX3JlcV9kZXNj ICpkZXNjLCBzdHJ1Y3QgcnRlX21idWYgKippbnB1dCwNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYg Km91dHB1dCwgdWludDMyX3QgKmluX29mZnNldCwNCj4gPiArCQl1aW50MzJfdCAqb3V0X29mZnNl dCwgdWludDMyX3QgKm91dF9sZW5ndGgsDQo+ID4gKwkJdWludDMyX3QgKm1idWZfdG90YWxfbGVm dCwgdWludDMyX3QgKnNlZ190b3RhbF9sZWZ0LCB1aW50OF90IHIpDQo+IHsNCj4gPiArCWludCBu ZXh0X3RyaXBsZXQgPSAxOyAvKiBGQ1cgYWxyZWFkeSBkb25lICovDQo+ID4gKwl1aW50MzJfdCBl LCBlYSwgZWIsIGxlbmd0aDsNCj4gPiArCXVpbnQxNl90IGssIGtfbmVnLCBrX3BvczsNCj4gPiAr CXVpbnQ4X3QgY2FiLCBjX25lZzsNCj4gPiArDQo+ID4gKwlkZXNjLT53b3JkMCA9IEFDQ19ETUFf REVTQ19UWVBFOw0KPiA+ICsJZGVzYy0+d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBi ZSBkaXNhYmxlZCAqLw0KPiA+ICsJZGVzYy0+d29yZDIgPSAwOw0KPiA+ICsJZGVzYy0+d29yZDMg PSAwOw0KPiA+ICsJZGVzYy0+bnVtQ0JzID0gMTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPnR1cmJv X2VuYy5jb2RlX2Jsb2NrX21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykgew0K PiA+ICsJCWVhID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuZWE7DQo+ID4gKwkJZWIgPSBvcC0+ dHVyYm9fZW5jLnRiX3BhcmFtcy5lYjsNCj4gPiArCQljYWIgPSBvcC0+dHVyYm9fZW5jLnRiX3Bh cmFtcy5jYWI7DQo+ID4gKwkJa19uZWcgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5rX25lZzsN Cj4gPiArCQlrX3BvcyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmtfcG9zOw0KPiA+ICsJCWNf bmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuY19uZWc7DQo+ID4gKwkJZSA9IChyIDwgY2Fi KSA/IGVhIDogZWI7DQo+ID4gKwkJayA9IChyIDwgY19uZWcpID8ga19uZWcgOiBrX3BvczsNCj4g PiArCX0gZWxzZSB7DQo+ID4gKwkJZSA9IG9wLT50dXJib19lbmMuY2JfcGFyYW1zLmU7DQo+ID4g KwkJayA9IG9wLT50dXJib19lbmMuY2JfcGFyYW1zLms7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ aWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZW5jLm9wX2ZsYWdzLA0KPiBSVEVfQkJERVZfVFVSQk9f Q1JDXzI0Ql9BVFRBQ0gpKQ0KPiA+ICsJCWxlbmd0aCA9IChrIC0gMjQpID4+IDM7DQo+ID4gKwll bHNlDQo+ID4gKwkJbGVuZ3RoID0gayA+PiAzOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseSgo Km1idWZfdG90YWxfbGVmdCA9PSAwKSB8fCAoKm1idWZfdG90YWxfbGVmdCA8IGxlbmd0aCkpKSB7 DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBt YnVmIGxlbmd0aCBhbmQgaW5jbHVkZWQNCj4gQ0Igc2l6ZXM6IG1idWYgbGVuICV1LCBjYiBsZW4g JXUiLA0KPiA+ICsJCQkJKm1idWZfdG90YWxfbGVmdCwgbGVuZ3RoKTsNCj4gPiArCQlyZXR1cm4g LTE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmV4dF90cmlwbGV0ID0gYWNjX2RtYV9maWxsX2Js a190eXBlX2luKGRlc2MsIGlucHV0LCBpbl9vZmZzZXQsDQo+ID4gKwkJCWxlbmd0aCwgc2VnX3Rv dGFsX2xlZnQsIG5leHRfdHJpcGxldCwNCj4gPiArCQkJY2hlY2tfYml0KG9wLT50dXJib19lbmMu b3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9UVVJCT19FTkNfU0NBVFRFUl9HQVRIRVIpKTsN Cj4gPiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRl dl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFu ZCBtYnVmDQo+IGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJp cGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVzYy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0K PiA+ICsJKm1idWZfdG90YWxfbGVmdCAtPSBsZW5ndGg7DQo+ID4gKw0KPiA+ICsJLyogU2V0IG91 dHB1dCBsZW5ndGggKi8NCj4gPiArCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2VuYy5vcF9mbGFn cywNCj4gUlRFX0JCREVWX1RVUkJPX1JBVEVfTUFUQ0gpKQ0KPiA+ICsJCS8qIEludGVnZXIgcm91 bmQgdXAgZGl2aXNpb24gYnkgOCAqLw0KPiA+ICsJCSpvdXRfbGVuZ3RoID0gKGUgKyA3KSA+PiAz Ow0KPiA+ICsJZWxzZQ0KPiA+ICsJCSpvdXRfbGVuZ3RoID0gKGsgPj4gMykgKiAzICsgMjsNCj4g PiArDQo+ID4gKwluZXh0X3RyaXBsZXQgPSBhY2NfZG1hX2ZpbGxfYmxrX3R5cGUoZGVzYywgb3V0 cHV0LCAqb3V0X29mZnNldCwNCj4gPiArCQkJKm91dF9sZW5ndGgsIG5leHRfdHJpcGxldCwNCj4g QUNDX0RNQV9CTEtJRF9PVVRfRU5DKTsNCj4gPiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQg PCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJl dHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZCBtYnVmDQo+IGRhdGEgbGVuZ3RoIGluIGJiZGV2X29w OiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsJ b3AtPnR1cmJvX2VuYy5vdXRwdXQubGVuZ3RoICs9ICpvdXRfbGVuZ3RoOw0KPiA+ICsJKm91dF9v ZmZzZXQgKz0gKm91dF9sZW5ndGg7DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0 IC0gMV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5kMm1sZW4gPSBuZXh0X3RyaXBsZXQgLSBkZXNj LT5tMmRsZW47DQo+ID4gKw0KPiA+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICth Y2MyMDBfZG1hX2Rlc2NfdGRfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsDQo+ID4g KwkJc3RydWN0IGFjY19kbWFfcmVxX2Rlc2MgKmRlc2MsIHN0cnVjdCBydGVfbWJ1ZiAqKmlucHV0 LA0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqaF9vdXRwdXQsIHN0cnVjdCBydGVfbWJ1ZiAqc19v dXRwdXQsDQo+ID4gKwkJdWludDMyX3QgKmluX29mZnNldCwgdWludDMyX3QgKmhfb3V0X29mZnNl dCwNCj4gPiArCQl1aW50MzJfdCAqc19vdXRfb2Zmc2V0LCB1aW50MzJfdCAqaF9vdXRfbGVuZ3Ro LA0KPiA+ICsJCXVpbnQzMl90ICpzX291dF9sZW5ndGgsIHVpbnQzMl90ICptYnVmX3RvdGFsX2xl ZnQsDQo+ID4gKwkJdWludDMyX3QgKnNlZ190b3RhbF9sZWZ0LCB1aW50OF90IHIpIHsNCj4gPiAr CWludCBuZXh0X3RyaXBsZXQgPSAxOyAvKiBGQ1cgYWxyZWFkeSBkb25lICovDQo+ID4gKwl1aW50 MTZfdCBrOw0KPiA+ICsJdWludDE2X3QgY3JjMjRfb3ZlcmxhcCA9IDA7DQo+ID4gKwl1aW50MzJf dCBlLCBrdzsNCj4gPiArDQo+ID4gKwlkZXNjLT53b3JkMCA9IEFDQ19ETUFfREVTQ19UWVBFOw0K PiA+ICsJZGVzYy0+d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAq Lw0KPiA+ICsJZGVzYy0+d29yZDIgPSAwOw0KPiA+ICsJZGVzYy0+d29yZDMgPSAwOw0KPiA+ICsJ ZGVzYy0+bnVtQ0JzID0gMTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPnR1cmJvX2RlYy5jb2RlX2Js b2NrX21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykgew0KPiA+ICsJCWsgPSAo ciA8IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmNfbmVnKQ0KPiA+ICsJCQk/IG9wLT50dXJib19k ZWMudGJfcGFyYW1zLmtfbmVnDQo+ID4gKwkJCTogb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMua19w b3M7DQo+ID4gKwkJZSA9IChyIDwgb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMuY2FiKQ0KPiA+ICsJ CQk/IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmVhDQo+ID4gKwkJCTogb3AtPnR1cmJvX2RlYy50 Yl9wYXJhbXMuZWI7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWsgPSBvcC0+dHVyYm9fZGVjLmNi X3BhcmFtcy5rOw0KPiA+ICsJCWUgPSBvcC0+dHVyYm9fZGVjLmNiX3BhcmFtcy5lOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWlmICgob3AtPnR1cmJvX2RlYy5jb2RlX2Jsb2NrX21vZGUgPT0NCj4g UlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykNCj4gPiArCQkmJiAhY2hlY2tfYml0KG9wLT50dXJi b19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJUlRFX0JCREVWX1RVUkJPX0RFQ19UQl9DUkNfMjRCX0tF RVApKQ0KPiA+ICsJCWNyYzI0X292ZXJsYXAgPSAyNDsNCj4gPiArDQo+ID4gKwkvKiBDYWxjdWxh dGVzIGNpcmN1bGFyIGJ1ZmZlciBzaXplLg0KPiA+ICsJICogQWNjb3JkaW5nIHRvIDNncHAgMzYu MjEyIHNlY3Rpb24gNS4xLjQuMg0KPiA+ICsJICogICBLdyA9IDMgKiBLcGksDQo+ID4gKwkgKiB3 aGVyZToNCj4gPiArCSAqICAgS3BpID0gbkNvbCAqIG5Sb3cNCj4gPiArCSAqIHdoZXJlIG5Db2wg aXMgMzIgYW5kIG5Sb3cgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbToNCj4gPiArCSAqICAgRCA9PCBu Q29sICogblJvdw0KPiA+ICsJICogd2hlcmUgRCBpcyB0aGUgc2l6ZSBvZiBlYWNoIG91dHB1dCBm cm9tIHR1cmJvIGVuY29kZXIgYmxvY2sgKGsgKyA0KS4NCj4gPiArCSAqLw0KPiA+ICsJa3cgPSBS VEVfQUxJR05fQ0VJTChrICsgNCwgMzIpICogMzsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHko KCptYnVmX3RvdGFsX2xlZnQgPT0gMCkgfHwgKCptYnVmX3RvdGFsX2xlZnQgPCBrdykpKSB7DQo+ ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBtYnVm IGxlbmd0aCBhbmQgaW5jbHVkZWQNCj4gQ0Igc2l6ZXM6IG1idWYgbGVuICV1LCBjYiBsZW4gJXUi LA0KPiA+ICsJCQkJKm1idWZfdG90YWxfbGVmdCwga3cpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwluZXh0X3RyaXBsZXQgPSBhY2NfZG1hX2ZpbGxfYmxrX3R5cGVf aW4oZGVzYywgaW5wdXQsIGluX29mZnNldCwga3csDQo+ID4gKwkJCXNlZ190b3RhbF9sZWZ0LCBu ZXh0X3RyaXBsZXQsDQo+ID4gKwkJCWNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0K PiA+ICsJCQlSVEVfQkJERVZfVFVSQk9fREVDX1NDQVRURVJfR0FUSEVSKSk7DQo+ID4gKwlpZiAo dW5saWtlbHkobmV4dF90cmlwbGV0IDwgMCkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwN Cj4gPiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVuIGRhdGEgdG8gcHJvY2VzcyBhbmQgbWJ1Zg0KPiBk YXRhIGxlbmd0aCBpbiBiYmRldl9vcDogJXAiLA0KPiA+ICsJCQkJb3ApOw0KPiA+ICsJCXJldHVy biAtMTsNCj4gPiArCX0NCj4gPiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5s YXN0ID0gMTsNCj4gPiArCWRlc2MtPm0yZGxlbiA9IG5leHRfdHJpcGxldDsNCj4gPiArCSptYnVm X3RvdGFsX2xlZnQgLT0ga3c7DQo+ID4gKwkqaF9vdXRfbGVuZ3RoID0gKChrIC0gY3JjMjRfb3Zl cmxhcCkgPj4gMyk7DQo+ID4gKwluZXh0X3RyaXBsZXQgPSBhY2NfZG1hX2ZpbGxfYmxrX3R5cGUo DQo+ID4gKwkJCWRlc2MsIGhfb3V0cHV0LCAqaF9vdXRfb2Zmc2V0LA0KPiA+ICsJCQkqaF9vdXRf bGVuZ3RoLCBuZXh0X3RyaXBsZXQsDQo+IEFDQ19ETUFfQkxLSURfT1VUX0hBUkQpOw0KPiA+ICsJ aWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhF UlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5kIG1idWYN Cj4gZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPiArCQkJCW9wKTsNCj4gPiArCQly ZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJb3AtPnR1cmJvX2RlYy5oYXJkX291dHB1 dC5sZW5ndGggKz0gKmhfb3V0X2xlbmd0aDsNCj4gPiArCSpoX291dF9vZmZzZXQgKz0gKmhfb3V0 X2xlbmd0aDsNCj4gPiArDQo+ID4gKwkvKiBTb2Z0IG91dHB1dCAqLw0KPiA+ICsJaWYgKGNoZWNr X2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiBSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRQ VVQpKSB7DQo+ID4gKwkJaWYgKG9wLT50dXJib19kZWMuc29mdF9vdXRwdXQuZGF0YSA9PSAwKSB7 DQo+ID4gKwkJCXJ0ZV9iYmRldl9sb2coRVJSLCAiU29mdCBvdXRwdXQgaXMgbm90IGRlZmluZWQi KTsNCj4gPiArCQkJcmV0dXJuIC0xOw0KPiA+ICsJCX0NCj4gPiArCQlpZiAoY2hlY2tfYml0KG9w LT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJERVZfVFVSQk9fRVFVQUxJWkVS KSkNCj4gPiArCQkJKnNfb3V0X2xlbmd0aCA9IGU7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQkqc19v dXRfbGVuZ3RoID0gKGsgKiAzKSArIDEyOw0KPiA+ICsNCj4gPiArCQluZXh0X3RyaXBsZXQgPSBh Y2NfZG1hX2ZpbGxfYmxrX3R5cGUoZGVzYywgc19vdXRwdXQsDQo+ID4gKwkJCQkqc19vdXRfb2Zm c2V0LCAqc19vdXRfbGVuZ3RoLCBuZXh0X3RyaXBsZXQsDQo+ID4gKwkJCQlBQ0NfRE1BX0JMS0lE X09VVF9TT0ZUKTsNCj4gPiArCQlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0IDwgMCkpIHsNCj4g PiArCQkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkJIk1pc21hdGNoIGJldHdlZW4gZGF0 YSB0byBwcm9jZXNzDQo+IGFuZCBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ ID4gKwkJCQkJb3ApOw0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQlvcC0+dHVyYm9fZGVjLnNvZnRfb3V0cHV0Lmxlbmd0aCArPSAqc19vdXRfbGVuZ3RoOw0KPiA+ ICsJCSpzX291dF9vZmZzZXQgKz0gKnNfb3V0X2xlbmd0aDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0gMV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNj LT5kMm1sZW4gPSBuZXh0X3RyaXBsZXQgLSBkZXNjLT5tMmRsZW47DQo+ID4gKw0KPiA+ICsJZGVz Yy0+b3BfYWRkciA9IG9wOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICAgc3RhdGljIGlubGluZSBpbnQNCj4gPiAgIGFjYzIwMF9kbWFfZGVzY19sZF9maWxsKHN0 cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiAgIAkJc3RydWN0IGFjY19kbWFfcmVxX2Rl c2MgKmRlc2MsDQo+ID4gQEAgLTEwNTksNiArMTM2NCw0OSBAQCBhY2MyMDBfZG1hX2Rlc2NfbGRf dXBkYXRlKHN0cnVjdA0KPiBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiAgIAlkZXNjLT5vcF9h ZGRyID0gb3A7DQo+ID4gICB9DQo+ID4NCj4gPiArLyogRW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJh dGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5l IGludCBlbnF1ZXVlX2VuY19vbmVfb3BfY2Ioc3RydWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+ ID4gK3J0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVk X2NicykNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNjID0gTlVMTDsNCj4g PiArCWludCByZXQ7DQo+ID4gKwl1aW50MzJfdCBpbl9vZmZzZXQsIG91dF9vZmZzZXQsIG91dF9s ZW5ndGgsIG1idWZfdG90YWxfbGVmdCwNCj4gPiArCQlzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0 cnVjdCBydGVfbWJ1ZiAqaW5wdXQsICpvdXRwdXRfaGVhZCwgKm91dHB1dDsNCj4gPiArDQo+ID4g Kwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRf Y2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5y aW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCWFjY19mY3dfdGVfZmlsbChvcCwgJmRlc2MtPnJl cS5mY3dfdGUpOw0KPiA+ICsNCj4gPiArCWlucHV0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5kYXRh Ow0KPiA+ICsJb3V0cHV0X2hlYWQgPSBvdXRwdXQgPSBvcC0+dHVyYm9fZW5jLm91dHB1dC5kYXRh Ow0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5vZmZzZXQ7DQo+ID4gKwlv dXRfb2Zmc2V0ID0gb3AtPnR1cmJvX2VuYy5vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJb3V0X2xlbmd0 aCA9IDA7DQo+ID4gKwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+dHVyYm9fZW5jLmlucHV0Lmxlbmd0 aDsNCj4gPiArCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4ob3AtPnR1cmJv X2VuYy5pbnB1dC5kYXRhKQ0KPiA+ICsJCQktIGluX29mZnNldDsNCj4gPiArDQo+ID4gKwlyZXQg PSBhY2MyMDBfZG1hX2Rlc2NfdGVfZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlucHV0LCBvdXRwdXQs DQo+ID4gKwkJCSZpbl9vZmZzZXQsICZvdXRfb2Zmc2V0LCAmb3V0X2xlbmd0aCwNCj4gJm1idWZf dG90YWxfbGVmdCwNCj4gPiArCQkJJnNlZ190b3RhbF9sZWZ0LCAwKTsNCj4gPiArDQo+ID4gKwlp ZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlt YnVmX2FwcGVuZChvdXRwdXRfaGVhZCwgb3V0cHV0LCBvdXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4g KyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIs ICJGQ1ciLCAmZGVzYy0+cmVxLmZjd190ZSwNCj4gPiArCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3df dGUpIC0gOCk7DQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBz aXplb2YoKmRlc2MpKTsgI2VuZGlmDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCB0byBlbnF1ZXVlICovDQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0K PiA+ICsNCj4gPiAgIC8qIEVucXVldWUgb25lIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAg ZGV2aWNlIGluIENCIG1vZGUNCj4gPiAgICAqIG11bHRpcGxleGVkIG9uIHRoZSBzYW1lIGRlc2Ny aXB0b3INCj4gPiAgICAqLw0KPiA+IEBAIC0xMTc1LDYgKzE1MjMsNzggQEAgZW5xdWV1ZV9sZHBj X2VuY19wYXJ0X3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsDQo+ID4gc3RydWN0IHJ0ZV9iYmRldl9l bmNfb3AgKm9wLA0KPiA+DQo+ID4gICB9DQo+ID4NCj4gPiArLyogRW5xdWV1ZSBvbmUgZW5jb2Rl IG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8NCj4gPiArc3RhdGlj IGlubGluZSBpbnQgZW5xdWV1ZV9lbmNfb25lX29wX3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0 cnVjdA0KPiA+ICtydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0b3RhbF9l bnF1ZXVlZF9jYnMsIHVpbnQ4X3QgY2JzX2luX3RiKSB7DQo+ID4gKwl1bmlvbiBhY2NfZG1hX2Rl c2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVpbnQ4X3QgciwgYzsNCj4g PiArCXVpbnQzMl90IGluX29mZnNldCwgb3V0X29mZnNldCwgb3V0X2xlbmd0aCwgbWJ1Zl90b3Rh bF9sZWZ0LA0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICpp bnB1dCwgKm91dHB1dF9oZWFkLCAqb3V0cHV0Ow0KPiA+ICsJdWludDE2X3QgY3VycmVudF9lbnF1 ZXVlZF9jYnMgPSAwOw0KPiA+ICsNCj4gPiArCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19y aW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFw X21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+ICsJdWlu dDY0X3QgZmN3X29mZnNldCA9IChkZXNjX2lkeCA8PCA4KSArIEFDQ19ERVNDX0ZDV19PRkZTRVQ7 DQo+ID4gKwlhY2NfZmN3X3RlX2ZpbGwob3AsICZkZXNjLT5yZXEuZmN3X3RlKTsNCj4gPiArDQo+ ID4gKwlpbnB1dCA9IG9wLT50dXJib19lbmMuaW5wdXQuZGF0YTsNCj4gPiArCW91dHB1dF9oZWFk ID0gb3V0cHV0ID0gb3AtPnR1cmJvX2VuYy5vdXRwdXQuZGF0YTsNCj4gPiArCWluX29mZnNldCA9 IG9wLT50dXJib19lbmMuaW5wdXQub2Zmc2V0Ow0KPiA+ICsJb3V0X29mZnNldCA9IG9wLT50dXJi b19lbmMub3V0cHV0Lm9mZnNldDsNCj4gPiArCW91dF9sZW5ndGggPSAwOw0KPiA+ICsJbWJ1Zl90 b3RhbF9sZWZ0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5sZW5ndGg7DQo+ID4gKw0KPiA+ICsJYyA9 IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmM7DQo+ID4gKwlyID0gb3AtPnR1cmJvX2VuYy50Yl9w YXJhbXMucjsNCj4gPiArDQo+ID4gKwl3aGlsZSAobWJ1Zl90b3RhbF9sZWZ0ID4gMCAmJiByIDwg Yykgew0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4oaW5wdXQp IC0gaW5fb2Zmc2V0Ow0KPiA+ICsJCS8qIFNldCB1cCBETUEgZGVzY3JpcHRvciAqLw0KPiA+ICsJ CWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfaGVhZCArDQo+IHRvdGFsX2VucXVl dWVkX2NicykNCj4gPiArCQkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJCWRlc2Mt PnJlcS5kYXRhX3B0cnNbMF0uYWRkcmVzcyA9IHEtPnJpbmdfYWRkcl9pb3ZhICsNCj4gZmN3X29m ZnNldDsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmJsZW4gPSBBQ0NfRkNXX1RFX0JM RU47DQo+ID4gKw0KPiA+ICsJCXJldCA9IGFjYzIwMF9kbWFfZGVzY190ZV9maWxsKG9wLCAmZGVz Yy0+cmVxLCAmaW5wdXQsDQo+IG91dHB1dCwNCj4gPiArCQkJCSZpbl9vZmZzZXQsICZvdXRfb2Zm c2V0LCAmb3V0X2xlbmd0aCwNCj4gPiArCQkJCSZtYnVmX3RvdGFsX2xlZnQsICZzZWdfdG90YWxf bGVmdCwgcik7DQo+ID4gKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQ0KPiA+ICsJCQlyZXR1cm4g cmV0Ow0KPiA+ICsJCW1idWZfYXBwZW5kKG91dHB1dF9oZWFkLCBvdXRwdXQsIG91dF9sZW5ndGgp Ow0KPiA+ICsNCj4gPiArCQkvKiBTZXQgdG90YWwgbnVtYmVyIG9mIENCcyBpbiBUQiAqLw0KPiA+ ICsJCWRlc2MtPnJlcS5jYnNfaW5fdGIgPSBjYnNfaW5fdGI7DQo+ID4gKyNpZmRlZiBSVEVfTElC UlRFX0JCREVWX0RFQlVHDQo+ID4gKwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiRkNXIiwgJmRlc2Mt PnJlcS5mY3dfdGUsDQo+ID4gKwkJCQlzaXplb2YoZGVzYy0+cmVxLmZjd190ZSkgLSA4KTsNCj4g PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2Mp KTsgI2VuZGlmDQo+ID4gKw0KPiA+ICsJCWlmIChzZWdfdG90YWxfbGVmdCA9PSAwKSB7DQo+ID4g KwkJCS8qIEdvIHRvIHRoZSBuZXh0IG1idWYgKi8NCj4gPiArCQkJaW5wdXQgPSBpbnB1dC0+bmV4 dDsNCj4gPiArCQkJaW5fb2Zmc2V0ID0gMDsNCj4gPiArCQkJb3V0cHV0ID0gb3V0cHV0LT5uZXh0 Ow0KPiA+ICsJCQlvdXRfb2Zmc2V0ID0gMDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXRvdGFs X2VucXVldWVkX2NicysrOw0KPiA+ICsJCWN1cnJlbnRfZW5xdWV1ZWRfY2JzKys7DQo+ID4gKwkJ cisrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFNldCBTRG9uZSBvbiBsYXN0IENCIGRlc2Ny aXB0b3IgZm9yIFRCIG1vZGUuICovDQo+ID4gKwlkZXNjLT5yZXEuc2RvbmVfZW5hYmxlID0gMTsN Cj4gPiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKiBF bnF1ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBUQiBtb2Rl Lg0KPiA+ICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlc2NzIHVzZWQNCj4gPiAgICAqLw0K PiA+IEBAIC0xMjQwLDYgKzE2NjAsNjIgQEAgZW5xdWV1ZV9sZHBjX2VuY19vbmVfb3BfdGIoc3Ry dWN0IGFjY19xdWV1ZQ0KPiAqcSwgc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+ICAg CXJldHVybiByZXR1cm5fZGVzY3M7DQo+ID4gICB9DQo+ID4NCj4gPiArLyoqIEVucXVldWUgb25l IGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPiAr c3RhdGljIGlubGluZSBpbnQgZW5xdWV1ZV9kZWNfb25lX29wX2NiKHN0cnVjdCBhY2NfcXVldWUg KnEsIHN0cnVjdA0KPiA+ICtydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0 b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gK3sNCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVz YyA9IE5VTEw7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdWludDMyX3QgaW5fb2Zmc2V0LCBoX291 dF9vZmZzZXQsIHNfb3V0X29mZnNldCwgc19vdXRfbGVuZ3RoLA0KPiA+ICsJCWhfb3V0X2xlbmd0 aCwgbWJ1Zl90b3RhbF9sZWZ0LCBzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1 ZiAqaW5wdXQsICpoX291dHB1dF9oZWFkLCAqaF9vdXRwdXQsDQo+ID4gKwkJKnNfb3V0cHV0X2hl YWQsICpzX291dHB1dDsNCj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3df cmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3Jh cF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCWFj YzIwMF9mY3dfdGRfZmlsbChvcCwgJmRlc2MtPnJlcS5mY3dfdGQpOw0KPiA+ICsNCj4gPiArCWlu cHV0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5kYXRhOw0KPiA+ICsJaF9vdXRwdXRfaGVhZCA9IGhf b3V0cHV0ID0gb3AtPnR1cmJvX2RlYy5oYXJkX291dHB1dC5kYXRhOw0KPiA+ICsJc19vdXRwdXRf aGVhZCA9IHNfb3V0cHV0ID0gb3AtPnR1cmJvX2RlYy5zb2Z0X291dHB1dC5kYXRhOw0KPiA+ICsJ aW5fb2Zmc2V0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5vZmZzZXQ7DQo+ID4gKwloX291dF9vZmZz ZXQgPSBvcC0+dHVyYm9fZGVjLmhhcmRfb3V0cHV0Lm9mZnNldDsNCj4gPiArCXNfb3V0X29mZnNl dCA9IG9wLT50dXJib19kZWMuc29mdF9vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJaF9vdXRfbGVuZ3Ro ID0gc19vdXRfbGVuZ3RoID0gMDsNCj4gPiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19k ZWMuaW5wdXQubGVuZ3RoOw0KPiA+ICsJc2VnX3RvdGFsX2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRh X2xlbihpbnB1dCkgLSBpbl9vZmZzZXQ7DQo+ID4gKw0KPiA+ICsJLyogU2V0IHVwIERNQSBkZXNj cmlwdG9yICovDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQg KyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0K PiA+ICsNCj4gPiArCXJldCA9IGFjYzIwMF9kbWFfZGVzY190ZF9maWxsKG9wLCAmZGVzYy0+cmVx LCAmaW5wdXQsIGhfb3V0cHV0LA0KPiA+ICsJCQlzX291dHB1dCwgJmluX29mZnNldCwgJmhfb3V0 X29mZnNldCwgJnNfb3V0X29mZnNldCwNCj4gPiArCQkJJmhfb3V0X2xlbmd0aCwgJnNfb3V0X2xl bmd0aCwgJm1idWZfdG90YWxfbGVmdCwNCj4gPiArCQkJJnNlZ190b3RhbF9sZWZ0LCAwKTsNCj4g PiArDQo+ID4gKwlpZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4g PiArDQo+ID4gKwkvKiBIYXJkIG91dHB1dCAqLw0KPiA+ICsJbWJ1Zl9hcHBlbmQoaF9vdXRwdXRf aGVhZCwgaF9vdXRwdXQsIGhfb3V0X2xlbmd0aCk7DQo+ID4gKw0KPiA+ICsJLyogU29mdCBvdXRw dXQgKi8NCj4gPiArCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gUlRF X0JCREVWX1RVUkJPX1NPRlRfT1VUUFVUKSkNCj4gPiArCQltYnVmX2FwcGVuZChzX291dHB1dF9o ZWFkLCBzX291dHB1dCwgc19vdXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElC UlRFX0JCREVWX0RFQlVHDQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+ cmVxLmZjd190ZCwNCj4gPiArCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGQpKTsNCj4gPiArCXJ0 ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOyAjZW5k aWYNCj4gPiArDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3NmdWxseSBwcmVw YXJlZCB0byBlbnF1ZXVlICovDQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAg IC8qKiBFbnF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBD QiBtb2RlICovDQo+ID4gICBzdGF0aWMgaW5saW5lIGludA0KPiA+ICAgZW5xdWV1ZV9sZHBjX2Rl Y19vbmVfb3BfY2Ioc3RydWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+ID4gcnRlX2JiZGV2X2Rl Y19vcCAqb3AsIEBAIC0xNDM3LDYgKzE5MTMsMTM5IEBADQo+IGVucXVldWVfbGRwY19kZWNfb25l X29wX3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0cnVjdCBydGVfYmJkZXZfZGVjX29wDQo+ICpv cCwNCj4gPiAgIAlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4gICB9DQo+ID4NCj4g PiArLyogRW5xdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4g VEIgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCBlbnF1ZXVlX2RlY19vbmVfb3BfdGIo c3RydWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+ID4gK3J0ZV9iYmRldl9kZWNfb3AgKm9wLA0K PiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWludDhfdCBjYnNfaW5fdGIpIHsN Cj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsJdWludDhfdCByLCBjOw0KPiA+ICsJdWludDMyX3QgaW5fb2Zmc2V0LCBoX291dF9vZmZz ZXQsIHNfb3V0X29mZnNldCwgc19vdXRfbGVuZ3RoLA0KPiA+ICsJCWhfb3V0X2xlbmd0aCwgbWJ1 Zl90b3RhbF9sZWZ0LCBzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5w dXQsICpoX291dHB1dF9oZWFkLCAqaF9vdXRwdXQsDQo+ID4gKwkJKnNfb3V0cHV0X2hlYWQsICpz X291dHB1dDsNCj4gPiArCXVpbnQxNl90IGN1cnJlbnRfZW5xdWV1ZWRfY2JzID0gMDsNCj4gPiAr DQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5x dWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2Mg PSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCXVpbnQ2NF90IGZjd19vZmZzZXQgPSAo ZGVzY19pZHggPDwgOCkgKyBBQ0NfREVTQ19GQ1dfT0ZGU0VUOw0KPiA+ICsJYWNjMjAwX2Zjd190 ZF9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd190ZCk7DQo+ID4gKw0KPiA+ICsJaW5wdXQgPSBvcC0+ dHVyYm9fZGVjLmlucHV0LmRhdGE7DQo+ID4gKwloX291dHB1dF9oZWFkID0gaF9vdXRwdXQgPSBv cC0+dHVyYm9fZGVjLmhhcmRfb3V0cHV0LmRhdGE7DQo+ID4gKwlzX291dHB1dF9oZWFkID0gc19v dXRwdXQgPSBvcC0+dHVyYm9fZGVjLnNvZnRfb3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9vZmZzZXQg PSBvcC0+dHVyYm9fZGVjLmlucHV0Lm9mZnNldDsNCj4gPiArCWhfb3V0X29mZnNldCA9IG9wLT50 dXJib19kZWMuaGFyZF9vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJc19vdXRfb2Zmc2V0ID0gb3AtPnR1 cmJvX2RlYy5zb2Z0X291dHB1dC5vZmZzZXQ7DQo+ID4gKwloX291dF9sZW5ndGggPSBzX291dF9s ZW5ndGggPSAwOw0KPiA+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5s ZW5ndGg7DQo+ID4gKwljID0gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMuYzsNCj4gPiArCXIgPSBv cC0+dHVyYm9fZGVjLnRiX3BhcmFtcy5yOw0KPiA+ICsNCj4gPiArCXdoaWxlIChtYnVmX3RvdGFs X2xlZnQgPiAwICYmIHIgPCBjKSB7DQo+ID4gKw0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0ID0gcnRl X3BrdG1idWZfZGF0YV9sZW4oaW5wdXQpIC0gaW5fb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCQkvKiBT ZXQgdXAgRE1BIGRlc2NyaXB0b3IgKi8NCj4gPiArCQlkZXNjID0gcS0+cmluZ19hZGRyICsgKChx LT5zd19yaW5nX2hlYWQgKw0KPiB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCQkmIHEtPnN3 X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmFkZHJlc3Mg PSBxLT5yaW5nX2FkZHJfaW92YSArDQo+IGZjd19vZmZzZXQ7DQo+ID4gKwkJZGVzYy0+cmVxLmRh dGFfcHRyc1swXS5ibGVuID0gQUNDX0ZDV19URF9CTEVOOw0KPiA+ICsJCXJldCA9IGFjYzIwMF9k bWFfZGVzY190ZF9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsDQo+ID4gKwkJCQloX291dHB1 dCwgc19vdXRwdXQsICZpbl9vZmZzZXQsDQo+ICZoX291dF9vZmZzZXQsDQo+ID4gKwkJCQkmc19v dXRfb2Zmc2V0LCAmaF9vdXRfbGVuZ3RoLA0KPiAmc19vdXRfbGVuZ3RoLA0KPiA+ICsJCQkJJm1i dWZfdG90YWxfbGVmdCwgJnNlZ190b3RhbF9sZWZ0LCByKTsNCj4gPiArDQo+ID4gKwkJaWYgKHVu bGlrZWx5KHJldCA8IDApKQ0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCQkvKiBI YXJkIG91dHB1dCAqLw0KPiA+ICsJCW1idWZfYXBwZW5kKGhfb3V0cHV0X2hlYWQsIGhfb3V0cHV0 LCBoX291dF9sZW5ndGgpOw0KPiA+ICsNCj4gPiArCQkvKiBTb2Z0IG91dHB1dCAqLw0KPiA+ICsJ CWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJCVJURV9CQkRF Vl9UVVJCT19TT0ZUX09VVFBVVCkpDQo+ID4gKwkJCW1idWZfYXBwZW5kKHNfb3V0cHV0X2hlYWQs IHNfb3V0cHV0LA0KPiBzX291dF9sZW5ndGgpOw0KPiA+ICsNCj4gPiArCQkvKiBTZXQgdG90YWwg bnVtYmVyIG9mIENCcyBpbiBUQiAqLw0KPiA+ICsJCWRlc2MtPnJlcS5jYnNfaW5fdGIgPSBjYnNf aW5fdGI7DQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwkJcnRlX21l bWR1bXAoc3RkZXJyLCAiRkNXIiwgJmRlc2MtPnJlcS5mY3dfdGQsDQo+ID4gKwkJCQlzaXplb2Yo ZGVzYy0+cmVxLmZjd190ZCkgLSA4KTsNCj4gPiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEg RGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsgI2VuZGlmDQo+ID4gKw0KPiA+ICsJCWlmIChz ZWdfdG90YWxfbGVmdCA9PSAwKSB7DQo+ID4gKwkJCS8qIEdvIHRvIHRoZSBuZXh0IG1idWYgKi8N Cj4gPiArCQkJaW5wdXQgPSBpbnB1dC0+bmV4dDsNCj4gPiArCQkJaW5fb2Zmc2V0ID0gMDsNCj4g PiArCQkJaF9vdXRwdXQgPSBoX291dHB1dC0+bmV4dDsNCj4gPiArCQkJaF9vdXRfb2Zmc2V0ID0g MDsNCj4gPiArDQo+ID4gKwkJCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywN Cj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRQVVQpKQ0KPiB7DQo+ID4gKwkJCQlz X291dHB1dCA9IHNfb3V0cHV0LT5uZXh0Ow0KPiA+ICsJCQkJc19vdXRfb2Zmc2V0ID0gMDsNCj4g PiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdG90YWxfZW5xdWV1ZWRfY2JzKys7DQo+ ID4gKwkJY3VycmVudF9lbnF1ZXVlZF9jYnMrKzsNCj4gPiArCQlyKys7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJLyogU2V0IFNEb25lIG9uIGxhc3QgQ0IgZGVzY3JpcHRvciBmb3IgVEIgbW9kZSAq Lw0KPiA+ICsJZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9IDE7DQo+ID4gKwlkZXNjLT5yZXEuaXJx X2VuYWJsZSA9IHEtPmlycV9lbmFibGU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGN1cnJlbnRfZW5x dWV1ZWRfY2JzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRp b25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUuICovIHN0YXRpYw0KPiA+ICt1aW50MTZf dCBhY2MyMDBfZW5xdWV1ZV9lbmNfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2Rh dGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkg ew0KPiA+ICsJc3RydWN0IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4g PiArCWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9lbnEocSk7DQo+ID4gKwl1aW50MTZf dCBpOw0KPiA+ICsJdW5pb24gYWNjX2RtYV9kZXNjICpkZXNjOw0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPiArCQkvKiBDaGVjayBp ZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8NCj4g PiArCQlpZiAodW5saWtlbHkoYXZhaWwgLSAxIDwgMCkpIHsNCj4gPiArCQkJYWNjX2VucXVldWVf cmluZ19mdWxsKHFfZGF0YSk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlhdmFp bCAtPSAxOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBlbnF1ZXVlX2VuY19vbmVfb3BfY2IocSwgb3Bz W2ldLCBpKTsNCj4gPiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQlhY2NfZW5xdWV1ZV9pbnZh bGlkKHFfZGF0YSk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlpZiAodW5saWtlbHkoaSA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsgLyogTm90aGluZyB0 byBlbnF1ZXVlICovDQo+ID4gKw0KPiA+ICsJLyogU2V0IFNEb25lIGluIGxhc3QgQ0IgaW4gZW5x dWV1ZWQgb3BzIGZvciBDQiBtb2RlKi8NCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEt PnN3X3JpbmdfaGVhZCArIGkgLSAxKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsN Cj4gPiArCWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9l bmFibGUgPSBxLT5pcnFfZW5hYmxlOw0KPiA+ICsNCj4gPiArCWFjY19kbWFfZW5xdWV1ZShxLCBp LCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICov DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlx X2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKwly ZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8qKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRp b25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUuICovDQo+ID4gICBzdGF0aWMgaW5saW5l IHVpbnQxNl90DQo+ID4gICBhY2MyMDBfZW5xdWV1ZV9sZHBjX2VuY19jYihzdHJ1Y3QgcnRlX2Ji ZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwgQEANCj4gPiAtMTQ4NSw2ICsyMDk0LDQ1IEBAIGFjYzIw MF9lbnF1ZXVlX2xkcGNfZW5jX2NiKHN0cnVjdA0KPiBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9k YXRhLA0KPiA+ICAgCXJldHVybiBpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qIEVucXVldWUgZW5j b2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8gc3RhdGljDQo+ ID4gK3VpbnQxNl90IGFjYzIwMF9lbnF1ZXVlX2VuY190YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVl X2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWlu dDE2X3QgbnVtKSB7DQo+ID4gKwlzdHJ1Y3QgYWNjX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9w cml2YXRlOw0KPiA+ICsJaW50MzJfdCBhdmFpbCA9IGFjY19yaW5nX2F2YWlsX2VucShxKTsNCj4g PiArCXVpbnQxNl90IGksIGVucXVldWVkX2NicyA9IDA7DQo+ID4gKwl1aW50OF90IGNic19pbl90 YjsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgKytp KSB7DQo+ID4gKwkJY2JzX2luX3RiID0gZ2V0X251bV9jYnNfaW5fdGJfZW5jKCZvcHNbaV0tPnR1 cmJvX2VuYyk7DQo+ID4gKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBm b3IgZnVydGhlciBwcm9jZXNzaW5nICovDQo+ID4gKwkJaWYgKHVubGlrZWx5KChhdmFpbCAtIGNi c19pbl90YiA8IDApIHx8IChjYnNfaW5fdGIgPT0gMCkpKSB7DQo+ID4gKwkJCWFjY19lbnF1ZXVl X3JpbmdfZnVsbChxX2RhdGEpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJYXZh aWwgLT0gY2JzX2luX3RiOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBlbnF1ZXVlX2VuY19vbmVfb3Bf dGIocSwgb3BzW2ldLCBlbnF1ZXVlZF9jYnMsDQo+IGNic19pbl90Yik7DQo+ID4gKwkJaWYgKHJl dCA8PSAwKSB7DQo+ID4gKwkJCWFjY19lbnF1ZXVlX2ludmFsaWQocV9kYXRhKTsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsJCWVucXVldWVkX2NicyArPSByZXQ7DQo+ID4gKwl9DQo+ ID4gKwlpZiAodW5saWtlbHkoZW5xdWV1ZWRfY2JzID09IDApKQ0KPiA+ICsJCXJldHVybiAwOyAv KiBOb3RoaW5nIHRvIGVucXVldWUgKi8NCj4gPiArDQo+ID4gKwlhY2NfZG1hX2VucXVldWUocSwg ZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBk YXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9 IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAt IGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKiBFbnF1 ZXVlIExEUEMgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gVEIgbW9kZS4g Ki8NCj4gPiAgIHN0YXRpYyB1aW50MTZfdA0KPiA+ICAgYWNjMjAwX2VucXVldWVfbGRwY19lbmNf dGIoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsIEBADQo+ID4gLTE1MjUsNiAr MjE3MywyMCBAQCBhY2MyMDBfZW5xdWV1ZV9sZHBjX2VuY190YihzdHJ1Y3QNCj4gcnRlX2JiZGV2 X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiAgIAlyZXR1cm4gaTsNCj4gPiAgIH0NCj4gPg0KPiA+ ICsvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlLiAqLyBzdGF0 aWMgdWludDE2X3QNCj4gPiArYWNjMjAwX2VucXVldWVfZW5jKHN0cnVjdCBydGVfYmJkZXZfcXVl dWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3BzLCB1 aW50MTZfdCBudW0pIHsNCj4gPiArCWludDMyX3QgYXFfYXZhaWwgPSBhY2NfYXFfYXZhaWwocV9k YXRhLCBudW0pOw0KPiA+ICsJaWYgKHVubGlrZWx5KChhcV9hdmFpbCA8PSAwKSB8fCAobnVtID09 IDApKSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWlmIChvcHNbMF0tPnR1cmJvX2VuYy5jb2Rl X2Jsb2NrX21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykNCj4gPiArCQlyZXR1 cm4gYWNjMjAwX2VucXVldWVfZW5jX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ICsJZWxzZQ0K PiA+ICsJCXJldHVybiBhY2MyMDBfZW5xdWV1ZV9lbmNfY2IocV9kYXRhLCBvcHMsIG51bSk7IH0N Cj4gPiArDQo+ID4gICAvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2 aWNlLiAqLw0KPiA+ICAgc3RhdGljIHVpbnQxNl90DQo+ID4gICBhY2MyMDBfZW5xdWV1ZV9sZHBj X2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwgQEANCj4gPiAtMTUzOSw2 ICsyMjAxLDQ3IEBAIGFjYzIwMF9lbnF1ZXVlX2xkcGNfZW5jKHN0cnVjdA0KPiBydGVfYmJkZXZf cXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICAgCQlyZXR1cm4gYWNjMjAwX2VucXVldWVfbGRwY19l bmNfY2IocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gICB9DQo+ID4NCj4gPiArDQo+ID4gKy8qIEVu cXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLyBz dGF0aWMNCj4gPiArdWludDE2X3QgYWNjMjAwX2VucXVldWVfZGVjX2NiKHN0cnVjdCBydGVfYmJk ZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoq b3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPiArCXN0cnVjdCBhY2NfcXVldWUgKnEgPSBxX2RhdGEt PnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gYWNjX3JpbmdfYXZhaWxfZW5x KHEpOw0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYzsN Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7 DQo+ID4gKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhl ciBwcm9jZXNzaW5nICovDQo+ID4gKwkJaWYgKHVubGlrZWx5KGF2YWlsIC0gMSA8IDApKQ0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQlhdmFpbCAtPSAxOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBlbnF1 ZXVlX2RlY19vbmVfb3BfY2IocSwgb3BzW2ldLCBpKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4g PiArCQkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KGkgPT0gMCkp DQo+ID4gKwkJcmV0dXJuIDA7IC8qIE5vdGhpbmcgdG8gZW5xdWV1ZSAqLw0KPiA+ICsNCj4gPiAr CS8qIFNldCBTRG9uZSBpbiBsYXN0IENCIGluIGVucXVldWVkIG9wcyBmb3IgQ0IgbW9kZSovDQo+ ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKyBpIC0gMSkNCj4g PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNjLT5yZXEuc2RvbmVfZW5h YmxlID0gMTsNCj4gPiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4g PiArDQo+ID4gKwlhY2NfZG1hX2VucXVldWUocSwgaSwgJnFfZGF0YS0+cXVldWVfc3RhdHMpOw0K PiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0cyAqLw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0 cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVl X2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ICsNCj4gPiArCXJldHVybiBpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICAgLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmlj ZSBpbiBUQiBtb2RlICovDQo+ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiAgIGFjYzIwMF9lbnF1 ZXVlX2xkcGNfZGVjX3RiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0K PiA+IC0xNjIzLDYgKzIzMjYsNTggQEAgYWNjMjAwX2VucXVldWVfbGRwY19kZWNfY2Ioc3RydWN0 DQo+IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gICAJcmV0dXJuIGk7DQo+ID4g ICB9DQo+ID4NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFD QzIwMCBkZXZpY2UgaW4gVEIgbW9kZSAqLyBzdGF0aWMNCj4gPiArdWludDE2X3QgYWNjMjAwX2Vu cXVldWVfZGVjX3RiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJ CXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPiArCXN0 cnVjdCBhY2NfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90 IGF2YWlsID0gYWNjX3JpbmdfYXZhaWxfZW5xKHEpOw0KPiA+ICsJdWludDE2X3QgaSwgZW5xdWV1 ZWRfY2JzID0gMDsNCj4gPiArCXVpbnQ4X3QgY2JzX2luX3RiOw0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPiArCQljYnNfaW5fdGIg PSBnZXRfbnVtX2Nic19pbl90Yl9kZWMoJm9wc1tpXS0+dHVyYm9fZGVjKTsNCj4gPiArCQkvKiBD aGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nlc3Npbmcg Ki8NCj4gPiArCQlpZiAodW5saWtlbHkoKGF2YWlsIC0gY2JzX2luX3RiIDwgMCkgfHwgKGNic19p bl90YiA9PSAwKSkpIHsNCj4gPiArCQkJYWNjX2VucXVldWVfcmluZ19mdWxsKHFfZGF0YSk7DQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlhdmFpbCAtPSBjYnNfaW5fdGI7DQo+ID4g Kw0KPiA+ICsJCXJldCA9IGVucXVldWVfZGVjX29uZV9vcF90YihxLCBvcHNbaV0sIGVucXVldWVk X2NicywNCj4gY2JzX2luX3RiKTsNCj4gPiArCQlpZiAocmV0IDw9IDApIHsNCj4gPiArCQkJYWNj X2VucXVldWVfaW52YWxpZChxX2RhdGEpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4g KwkJZW5xdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlhY2NfZG1hX2Vu cXVldWUocSwgZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVk X2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50 ICs9IG51bSAtIGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UuICovIHN0YXRp YyB1aW50MTZfdA0KPiA+ICthY2MyMDBfZW5xdWV1ZV9kZWMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1 ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMsIHVp bnQxNl90IG51bSkgew0KPiA+ICsJaW50MzJfdCBhcV9hdmFpbCA9IGFjY19hcV9hdmFpbChxX2Rh dGEsIG51bSk7DQo+ID4gKwlpZiAodW5saWtlbHkoKGFxX2F2YWlsIDw9IDApIHx8IChudW0gPT0g MCkpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJaWYgKG9wc1swXS0+dHVyYm9fZGVjLmNvZGVf YmxvY2tfbW9kZSA9PQ0KPiBSVEVfQkJERVZfVFJBTlNQT1JUX0JMT0NLKQ0KPiA+ICsJCXJldHVy biBhY2MyMDBfZW5xdWV1ZV9kZWNfdGIocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gKwllbHNlDQo+ ID4gKwkJcmV0dXJuIGFjYzIwMF9lbnF1ZXVlX2RlY19jYihxX2RhdGEsIG9wcywgbnVtKTsgfQ0K PiA+ICsNCj4gPiAgIC8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZp Y2UuICovDQo+ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiAgIGFjYzIwMF9lbnF1ZXVlX2xkcGNf ZGVjKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0xOTc4LDYg KzI3MzMsNDggQEAgZGVxdWV1ZV9kZWNfb25lX29wX3RiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0 cnVjdA0KPiBydGVfYmJkZXZfZGVjX29wICoqcmVmX29wLA0KPiA+ICAgCXJldHVybiBjYl9pZHg7 DQo+ID4gICB9DQo+ID4NCj4gPiArLyogRGVxdWV1ZSBlbmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFD QzIwMCBkZXZpY2UuICovIHN0YXRpYyB1aW50MTZfdA0KPiA+ICthY2MyMDBfZGVxdWV1ZV9lbmMo c3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9i YmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+ICsJc3RydWN0IGFjY19xdWV1 ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCXVpbnQzMl90IGF2YWlsID0gYWNj X3JpbmdfYXZhaWxfZGVxKHEpOw0KPiA+ICsJdWludDMyX3QgYXFfZGVxdWV1ZWQgPSAwOw0KPiA+ ICsJdWludDE2X3QgaSwgZGVxdWV1ZWRfb3BzID0gMCwgZGVxdWV1ZWRfZGVzY3MgPSAwOw0KPiA+ ICsJaW50IHJldCwgY2JtOw0KPiA+ICsJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiAN Cj4gV2h5IGlzbid0IHRoZXJlICJkZWJ1ZyBjaGVja3MiIGhlcmUgd2hpbGUgdGhlcmUgYXJlIGlu IGFjYzIwMF9kZXF1ZXVlX2RlYz8NCj4gQXJlIHdlIHN1cmUgdGhhdCBoZXJlIG9wcyBhbmQgcSBh cmUgbm9uLW51bGwgd2hpbGUgd2UgY2Fubm90IGtub3cgaW4NCj4gYWNjMjAwX2RlcXVldWVfZGVj Pw0KDQpSZW1vdmluZyB0aGUgb3RoZXIgZGVidWcgY2hlY2tzIGFzIGRpc2N1c3NlZCBvbiBvdGhl ciBjb21taXRzLCBub3QgZG9pbmcgYW55dGhpbmcNCmRpZmZlcmVudCBmb3IgZGVidWcgYnVpbGQg aW4gdGhhdCBjb21taXQuIA0KUmVhbGx5IGl0IHNob3VsZCBuZXZlciBoYXBwZW4gKG9yIGl0IHdv dWxkIGJlIGNhdWdodCBieSBzdGF0aWMgY29kZSBhbmFseXNpcykgcmVnYXJkbGVzcyBvZiBkZWJ1 ZyBidWlsZCBvciBub3QNCg0KPiANCj4gPiArCWlmIChhdmFpbCA9PSAwKQ0KPiA+ICsJCXJldHVy biAwOw0KPiA+ICsJb3AgPSAocS0+cmluZ19hZGRyICsgKHEtPnN3X3JpbmdfdGFpbCAmDQo+ID4g KwkJCXEtPnN3X3Jpbmdfd3JhcF9tYXNrKSktPnJlcS5vcF9hZGRyOw0KPiA+ICsNCj4gPiArCWNi bSA9IG9wLT50dXJib19lbmMuY29kZV9ibG9ja19tb2RlOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBudW07IGkrKykgew0KPiA+ICsJCWlmIChjYm0gPT0gUlRFX0JCREVWX1RSQU5TUE9S VF9CTE9DSykNCj4gPiArCQkJcmV0ID0gZGVxdWV1ZV9lbmNfb25lX29wX3RiKHEsDQo+ICZvcHNb ZGVxdWV1ZWRfb3BzXSwNCj4gPiArCQkJCQkmZGVxdWV1ZWRfb3BzLCAmYXFfZGVxdWV1ZWQsDQo+ ID4gKwkJCQkJJmRlcXVldWVkX2Rlc2NzKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldCA9IGRl cXVldWVfZW5jX29uZV9vcF9jYihxLA0KPiAmb3BzW2RlcXVldWVkX29wc10sDQo+ID4gKwkJCQkJ JmRlcXVldWVkX29wcywgJmFxX2RlcXVldWVkLA0KPiA+ICsJCQkJCSZkZXF1ZXVlZF9kZXNjcyk7 DQo+ID4gKwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWlmIChkZXF1ZXVl ZF9vcHMgPj0gbnVtKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlxLT5h cV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVlZDsNCj4gPiArCXEtPnN3X3JpbmdfdGFpbCArPSBkZXF1 ZXVlZF9kZXNjczsNCj4gPiArDQo+ID4gKwkvKiBVcGRhdGUgZW5xdWV1ZSBzdGF0cyAqLw0KPiA+ ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5kZXF1ZXVlZF9jb3VudCArPSBkZXF1ZXVlZF9vcHM7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIGRlcXVldWVkX29wczsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8q IERlcXVldWUgTERQQyBlbmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzIwMCBkZXZpY2UuICovDQo+ ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiAgIGFjYzIwMF9kZXF1ZXVlX2xkcGNfZW5jKHN0cnVj dCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0yMDE5LDYgKzI4MTYsNTEg QEAgYWNjMjAwX2RlcXVldWVfbGRwY19lbmMoc3RydWN0DQo+IHJ0ZV9iYmRldl9xdWV1ZV9kYXRh ICpxX2RhdGEsDQo+ID4gICAJcmV0dXJuIGRlcXVldWVkX29wczsNCj4gPiAgIH0NCj4gPg0KPiA+ ICsvKiBEZXF1ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMjAwIGRldmljZS4gKi8gc3Rh dGljIHVpbnQxNl90DQo+ID4gK2FjYzIwMF9kZXF1ZXVlX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1 ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywg dWludDE2X3QgbnVtKSB7DQo+ID4gKwlzdHJ1Y3QgYWNjX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1 ZV9wcml2YXRlOw0KPiA+ICsJdWludDE2X3QgZGVxdWV1ZV9udW07DQo+ID4gKwl1aW50MzJfdCBh dmFpbCA9IGFjY19yaW5nX2F2YWlsX2RlcShxKTsNCj4gPiArCXVpbnQzMl90IGFxX2RlcXVldWVk ID0gMDsNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKwl1aW50MTZfdCBkZXF1ZXVlZF9jYnMgPSAw Ow0KPiA+ICsJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wOw0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlpZiAodW5saWtl bHkob3BzID09IDAgJiYgcSA9PSBOVUxMKSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gDQo+IEl0IG1h a2VzIHRoZSBkZWJ1ZyBidWlsZCB0byBmYWlsIHNpbGVudGx5LiBDaGVja2luZyBmb3IgcG9pbnRl cnMgdmFsaWRpdHkgaXMgZmluZSwNCj4gYnV0IHlvdSB3YW50IHRvIGVtaXQgYSB3YXJuaW5nIGlm IGl0IGhhcHBlbnMuDQo+IA0KPiA+ICsjZW5kaWYNCj4gDQo+IHEgaXMgYWxyZWFkeSBkZXJlZmVy ZW5jZWQgdG8gZ2V0IGF2YWlsLiBhY2NfcmluZ19hdmFpbF9kZXEocSkgc2hvdWxkIGJlIGNhbGxl ZA0KPiBhZnRlciB0aGUgY2hlY2suDQoNClRoYW5rcyB0YWtpbmcgb3V0DQoNCj4gDQo+ID4gKw0K PiA+ICsJZGVxdWV1ZV9udW0gPSAoYXZhaWwgPCBudW0pID8gYXZhaWwgOiBudW07DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IGRlcXVldWVfbnVtOyArK2kpIHsNCj4gPiArCQlvcCA9IChx LT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfdGFpbCArIGRlcXVldWVkX2NicykNCj4gPiArCQkJ JiBxLT5zd19yaW5nX3dyYXBfbWFzaykpLT5yZXEub3BfYWRkcjsNCj4gPiArCQlpZiAob3AtPnR1 cmJvX2RlYy5jb2RlX2Jsb2NrX21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykN Cj4gPiArCQkJcmV0ID0gZGVxdWV1ZV9kZWNfb25lX29wX3RiKHEsICZvcHNbaV0sDQo+IGRlcXVl dWVkX2NicywNCj4gPiArCQkJCQkmYXFfZGVxdWV1ZWQpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJ cmV0ID0gZGVxdWV1ZV9kZWNfb25lX29wX2NiKHFfZGF0YSwgcSwgJm9wc1tpXSwNCj4gPiArCQkJ CQlkZXF1ZXVlZF9jYnMsICZhcV9kZXF1ZXVlZCk7DQo+ID4gKw0KPiA+ICsJCWlmIChyZXQgPD0g MCkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVxdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlxLT5hcV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVlZDsNCj4gPiArCXEtPnN3 X3JpbmdfdGFpbCArPSBkZXF1ZXVlZF9jYnM7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIGVucXVl dWUgc3RhdHMgKi8NCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVxdWV1ZWRfY291bnQgKz0g aTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8qIERlcXVl dWUgZGVjb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MyMDAgZGV2aWNlLiAqLw0KPiA+ICAgc3RhdGlj IHVpbnQxNl90DQo+ID4gICBhY2MyMDBfZGVxdWV1ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2 X3F1ZXVlX2RhdGEgKnFfZGF0YSwgQEANCj4gPiAtMjA2Nyw2ICsyOTA5LDEwIEBAIGFjYzIwMF9i YmRldl9pbml0KHN0cnVjdCBydGVfYmJkZXYgKmRldiwgc3RydWN0DQo+IHJ0ZV9wY2lfZHJpdmVy ICpkcnYpDQo+ID4gICAJc3RydWN0IHJ0ZV9wY2lfZGV2aWNlICpwY2lfZGV2ID0gUlRFX0RFVl9U T19QQ0koZGV2LT5kZXZpY2UpOw0KPiA+DQo+ID4gICAJZGV2LT5kZXZfb3BzID0gJmFjYzIwMF9i YmRldl9vcHM7DQo+ID4gKwlkZXYtPmVucXVldWVfZW5jX29wcyA9IGFjYzIwMF9lbnF1ZXVlX2Vu YzsNCj4gPiArCWRldi0+ZW5xdWV1ZV9kZWNfb3BzID0gYWNjMjAwX2VucXVldWVfZGVjOw0KPiA+ ICsJZGV2LT5kZXF1ZXVlX2VuY19vcHMgPSBhY2MyMDBfZGVxdWV1ZV9lbmM7DQo+ID4gKwlkZXYt PmRlcXVldWVfZGVjX29wcyA9IGFjYzIwMF9kZXF1ZXVlX2RlYzsNCj4gPiAgIAlkZXYtPmVucXVl dWVfbGRwY19lbmNfb3BzID0gYWNjMjAwX2VucXVldWVfbGRwY19lbmM7DQo+ID4gICAJZGV2LT5l bnF1ZXVlX2xkcGNfZGVjX29wcyA9IGFjYzIwMF9lbnF1ZXVlX2xkcGNfZGVjOw0KPiA+ICAgCWRl di0+ZGVxdWV1ZV9sZHBjX2VuY19vcHMgPSBhY2MyMDBfZGVxdWV1ZV9sZHBjX2VuYzsNCg0K