From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 922DEA04B5; Wed, 30 Sep 2020 21:10:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0CD591D57B; Wed, 30 Sep 2020 21:10:53 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 941F81D579 for ; Wed, 30 Sep 2020 21:10:49 +0200 (CEST) IronPort-SDR: 7Os0y0peoZ1Y8QBAn6l7byEX4SAypEPyaNF0m24vY3OGWUME5/SutDGeyerUDLJ6OQ5f/SqJyE PeKUXF3LFvEw== X-IronPort-AV: E=McAfee;i="6000,8403,9760"; a="150177015" X-IronPort-AV: E=Sophos;i="5.77,322,1596524400"; d="scan'208";a="150177015" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Sep 2020 12:10:44 -0700 IronPort-SDR: pZt+VTYpQl6X7TGpw6e8Nn7XJGz2I82157RKUXSJ/Z7yUwhYH5IHYqL6dDRL3fRRTze7PGKKPs Zb6OYGaYH+6g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,322,1596524400"; d="scan'208";a="312698201" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga006.jf.intel.com with ESMTP; 30 Sep 2020 12:10:44 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 30 Sep 2020 12:10:44 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 30 Sep 2020 12:10:43 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 30 Sep 2020 12:10:43 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (104.47.46.57) 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.1713.5; Wed, 30 Sep 2020 12:10:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cU6k0hSoB1qpK6nx3tEe5ucGDo7QrqnWhSCJrwCeBsJu8JXSa9cAVPwUvrNcrQwzFK8WTQQwAGg4EIk/hoYRkEwF7N38HI25xLzCf3T7wBRrOds37z/M46P5nOQFM4n+GQ1oH8JgUjIznJDFzsblA51jIVEHFH/E4tvdyl4G4GKAhZKqCIA4mSebuVVWEP6jcomnGz3bY0BnvxRRUoIgAZL7S4hw+gizi45pcUs87ppmM7Tn7/lxVU+bJPjQeaKTRjQVJk08HKc0iIpRIcLGJcgZss1H+BUobkil3nXdV8ZXugKguDfjMKYeH1J1DSSOM8qhfV8AoSbFLdrwxty8Tw== 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=3flhuVGoYLSaXFCvB6pNg+6T1On6sLe585r23aWwVws=; b=P/HnWWdLip0Nl/1whUjkZ5Z6urm4OtulH1aatme9uuf3Ksayj7/1FS+P+D35AL7pmz7pxbcItDPtOE5iR1RgwQDASk/puhw28tHinUUA9KUCTpjTeQTsPln8CfnwgwzuiMxo8rdDVOjC+Q7XR9WAG4+BrZ+kDjWOPpHpAGabNw8NbydIUwk2YjoO8hy2aBcdLAkvl21v3Yt00WUAzvp1j4lODXlmjeyn1VWAtrxFVe0cHUDxXW8IJzccenPRA1bJCXNaebIpiWgKqe1b7Bhq2YYiDtcu9BkomFw9oLQL58suf/+HKsJDHz/35jcK4IppXPLwQlxPXIm1sbdCnI9Ipw== 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=3flhuVGoYLSaXFCvB6pNg+6T1On6sLe585r23aWwVws=; b=eht69V66ZVBjrLhl+T8X3SkBqhzCrw0rFRWKJi7agCW6t94FO+MktSqbS+UE8MhzWHYFAzgI+45Zq+HK5UIon3IoSsduIVUv48dv2w62yBPF1GW3tjfkipQ9SH9F7q/7l1u1TgKYBKeTJJsM83enwmHBvwVGHogb8F3ONVAV4Pk= Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BYAPR11MB2888.namprd11.prod.outlook.com (2603:10b6:a03:8c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3412.29; Wed, 30 Sep 2020 19:10:38 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508%7]) with mapi id 15.20.3412.028; Wed, 30 Sep 2020 19:10:38 +0000 From: "Chautru, Nicolas" To: Tom Rix , "dev@dpdk.org" , "akhil.goyal@nxp.com" CC: "Richardson, Bruce" , "Xu, Rosen" , "dave.burley@accelercomm.com" , "aidan.goddard@accelercomm.com" , "Yigit, Ferruh" , "Liu, Tianjiao" Thread-Topic: [dpdk-dev] [PATCH v9 07/10] baseband/acc100: add support for 4G processing Thread-Index: AQHWlffi2D99yx50j0KeQ5g2OlCDdKmBhXkAgAAFtUA= Date: Wed, 30 Sep 2020 19:10:38 +0000 Message-ID: References: <1597796731-57841-12-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-1-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-8-git-send-email-nicolas.chautru@intel.com> <9798b533-1898-12dd-443e-be25ad1180f1@redhat.com> In-Reply-To: <9798b533-1898-12dd-443e-be25ad1180f1@redhat.com> 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.5.1.3 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: [45.28.143.88] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9ac3306f-bf0d-49da-6287-08d865748475 x-ms-traffictypediagnostic: BYAPR11MB2888: 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:295; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2asJDvon+kMoLLtsWzR9U1ZxZDSo2cmLc0badWOwEJ9u9wHJEysAVkIrpl0SDz5SrdyVrzNHzr1mTYo5yxSTvt7jH9vewqdMVO91MGrc41rnhA/jXcS90o97Uti5fh3JpEvKMxB8lYkwklr3+Mu2j76bcaEAwhWHQQ6eUE1WwNMYCRFxIHKO7x8Fzz+0QE0JnuPSn30KPfDp4wLuQXcF+Ik5iimUsQEY0/WiNSkRz6J2bKCcR43EycxNraXzdHNHfguohV0/ud6c0nwmudbfmz7pZ7YR67CT/TmnaBoe5asnr/gUA/O83+Mum9VYu9CuOlEm05Z85Y79tscDAEE7Pc/Zx9m0eAWH14MwSSIgCXijPEIGI+ewSmD157feXZ7cOYzEuSlhDvVl2ma51R8Hf87kEQop1nBhhsAQUH74/YQ= 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:(4636009)(366004)(136003)(396003)(39860400002)(376002)(346002)(5660300002)(86362001)(8936002)(110136005)(8676002)(54906003)(316002)(55016002)(2906002)(26005)(107886003)(6506007)(186003)(7696005)(9686003)(52536014)(53546011)(4326008)(83380400001)(30864003)(33656002)(66946007)(66556008)(66446008)(71200400001)(64756008)(478600001)(76116006)(66476007)(461764006)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: DFJHDMLMxgLZOmx5yNQtkfvKMO187/jSyEI6vAziLORC/GDRp3DVlxxjEuKbh56HNjV2pwZSv/giucVxZZ2D/8AIOF5vdN9WwBNmzcCcid85nSHBYixpjK7o388JDBmVlkvOU2L92hnKiAuQx2DNoB1qE/BUkdX9g91KyrFy/uJ4UCcf6p/vK8LNriFuDW6a0+M/LG+fHK1rJS2qPwP12gvfABL70AvwMxbNwKgIkmPsackiA7bEifZ6qKYAwKQzltJC1XaNniUCYHwqE/zET63gDJZ5oNxpB5FV2SqnHLKYOvoRUcwiAbJimUIb2ZHIvyauxfakfFItPqAQF6YnrO61VWz5sBBfRH6nqT17HusFoMKLQnUa5O4jrhN9wup0Wd8ceDZHOyU43grAHyF/2zotW7nD37OQndgyOQ0RcRV57H380bhkNOAoIxmbbQ/OqyZKAfHy8w9JcK29X5bysYQVAB70B9WIf1Z9cwO1AYitlHSaOpRrevXmvx1uCa1MMiyw0BKIoR+/k3dkU49COGk1JrRQHORPoyh/9ct5SQVl5lAmnkqsmZO+cQMeXilLqrrcBEMJvvXwzeESHnUZ86ZUfsyurM4UvmyNOWaH1CBWzHisN6EB68kVzfOFzc65fuj2QY4YPiJjBqSI1rvgkA== 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: 9ac3306f-bf0d-49da-6287-08d865748475 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2020 19:10:38.1095 (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: GlVf0o6xTx9qLHEYJNPuikMP+skZyYhiQllqfxeYCh4RxQpyFqZqfHtx/HZDX6ioPuN23JOqiWPyOliEgSYm5SA0+ips600XOR9xZl6vvFk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2888 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v9 07/10] baseband/acc100: add support for 4G processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgVG9tLCANCg0KPiBGcm9tOiBUb20gUml4IDx0cml4QHJlZGhhdC5jb20+DQo+IE9uIDkvMjgv MjAgNToyOSBQTSwgTmljb2xhcyBDaGF1dHJ1IHdyb3RlOg0KPiA+IEFkZGluZyBjYXBhYmlsaXR5 IGZvciA0RyBlbmNvZGUgYW5kIGRlY29kZXIgcHJvY2Vzc2luZw0KPiA+DQo+ID4gU2lnbmVkLW9m Zi1ieTogTmljb2xhcyBDaGF1dHJ1IDxuaWNvbGFzLmNoYXV0cnVAaW50ZWwuY29tPg0KPiA+IEFj a2VkLWJ5OiBMaXUgVGlhbmppYW8gPFRpYW5qaWFvLmxpdUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ ID4gIGRvYy9ndWlkZXMvYmJkZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkgICAgfCAgICA0ICstDQo+ ID4gIGRyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMgfCAxMDEwDQo+ID4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tDQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgOTQ1 IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Rv Yy9ndWlkZXMvYmJkZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkNCj4gPiBiL2RvYy9ndWlkZXMvYmJk ZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkNCj4gPiBpbmRleCA0MGM3YWRjLi42NDJjZDQ4IDEwMDY0 NA0KPiA+IC0tLSBhL2RvYy9ndWlkZXMvYmJkZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkNCj4gPiAr KysgYi9kb2MvZ3VpZGVzL2JiZGV2cy9mZWF0dXJlcy9hY2MxMDAuaW5pDQo+ID4gQEAgLTQsOCAr NCw4IEBADQo+ID4gIDsgUmVmZXIgdG8gZGVmYXVsdC5pbmkgZm9yIHRoZSBmdWxsIGxpc3Qgb2Yg YXZhaWxhYmxlIFBNRCBmZWF0dXJlcy4NCj4gPiAgOw0KPiA+ICBbRmVhdHVyZXNdDQo+ID4gLVR1 cmJvIERlY29kZXIgKDRHKSAgICAgPSBODQo+ID4gLVR1cmJvIEVuY29kZXIgKDRHKSAgICAgPSBO DQo+ID4gK1R1cmJvIERlY29kZXIgKDRHKSAgICAgPSBZDQo+ID4gK1R1cmJvIEVuY29kZXIgKDRH KSAgICAgPSBZDQo+ID4gIExEUEMgRGVjb2RlciAoNUcpICAgICAgPSBZDQo+ID4gIExEUEMgRW5j b2RlciAoNUcpICAgICAgPSBZDQo+ID4gIExMUi9IQVJRIENvbXByZXNzaW9uICAgPSBZDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4g PiBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPiBpbmRleCBl NDg0YzBhLi43ZDRjM2RmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAw L3J0ZV9hY2MxMDBfcG1kLmMNCj4gPiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVf YWNjMTAwX3BtZC5jDQo+ID4gQEAgLTMzOSw3ICszMzksNiBAQA0KPiA+ICAJZnJlZV9iYXNlX2Fk ZHJlc3NlcyhiYXNlX2FkZHJzLCBpKTsNCj4gPiAgfQ0KPiA+DQo+ID4gLQ0KPiA+ICAvKiBBbGxv Y2F0ZSA2NE1CIG1lbW9yeSB1c2VkIGZvciBhbGwgc29mdHdhcmUgcmluZ3MgKi8gIHN0YXRpYyBp bnQNCj4gPiBhY2MxMDBfc2V0dXBfcXVldWVzKHN0cnVjdCBydGVfYmJkZXYgKmRldiwgdWludDE2 X3QgbnVtX3F1ZXVlcywgaW50DQo+ID4gc29ja2V0X2lkKSBAQCAtNjM3LDYgKzYzNiw0MSBAQA0K PiA+DQo+ID4gIAlzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZV9iYmRldl9vcF9jYXAgYmJkZXZfY2Fw YWJpbGl0aWVzW10gPSB7DQo+ID4gIAkJew0KPiA+ICsJCQkudHlwZSA9IFJURV9CQkRFVl9PUF9U VVJCT19ERUMsDQo+ID4gKwkJCS5jYXAudHVyYm9fZGVjID0gew0KPiA+ICsJCQkJLmNhcGFiaWxp dHlfZmxhZ3MgPQ0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19TVUJCTE9DS19ERUlOVEVSTEVB VkUgfA0KPiA+ICsJCQkJCVJURV9CQkRFVl9UVVJCT19DUkNfVFlQRV8yNEINCj4gfA0KPiA+ICsN Cj4gCVJURV9CQkRFVl9UVVJCT19IQUxGX0lURVJBVElPTl9FVkVOIHwNCj4gPiArDQo+IAlSVEVf QkJERVZfVFVSQk9fRUFSTFlfVEVSTUlOQVRJT04gfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJC T19ORUdfTExSXzFfQklUX0lOIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fTUFQX0RFQyB8 DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0RFQ19UQl9DUkNfMjRCX0tFRVAgfA0KPiA+ICsN Cj4gCVJURV9CQkRFVl9UVVJCT19ERUNfU0NBVFRFUl9HQVRIRVIsDQo+ID4gKwkJCQkubWF4X2xs cl9tb2R1bHVzID0gSU5UOF9NQVgsDQo+ID4gKwkJCQkubnVtX2J1ZmZlcnNfc3JjID0NCj4gPiAr DQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51bV9idWZm ZXJzX2hhcmRfb3V0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tT LA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX3NvZnRfb3V0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZf VFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ ID4gKwkJCS50eXBlID0gUlRFX0JCREVWX09QX1RVUkJPX0VOQywNCj4gPiArCQkJLmNhcC50dXJi b19lbmMgPSB7DQo+ID4gKwkJCQkuY2FwYWJpbGl0eV9mbGFncyA9DQo+ID4gKw0KPiAJUlRFX0JC REVWX1RVUkJPX0NSQ18yNEJfQVRUQUNIIHwNCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fUlZf SU5ERVhfQllQQVNTIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fUkFURV9NQVRDSCB8DQo+ ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0VOQ19TQ0FUVEVSX0dBVEhFUiwNCj4gPiArCQkJCS5u dW1fYnVmZmVyc19zcmMgPQ0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19NQVhfQ09ERV9CTE9D S1MsDQo+ID4gKwkJCQkubnVtX2J1ZmZlcnNfZHN0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVS Qk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4g IAkJCS50eXBlICAgPSBSVEVfQkJERVZfT1BfTERQQ19FTkMsDQo+ID4gIAkJCS5jYXAubGRwY19l bmMgPSB7DQo+ID4gIAkJCQkuY2FwYWJpbGl0eV9mbGFncyA9DQo+ID4gQEAgLTcxOSw3ICs3NTMs NiBAQA0KPiA+ICAjZW5kaWYNCj4gPiAgfQ0KPiA+DQo+ID4gLQ0KPiA+ICBzdGF0aWMgY29uc3Qg c3RydWN0IHJ0ZV9iYmRldl9vcHMgYWNjMTAwX2JiZGV2X29wcyA9IHsNCj4gPiAgCS5zZXR1cF9x dWV1ZXMgPSBhY2MxMDBfc2V0dXBfcXVldWVzLA0KPiA+ICAJLmNsb3NlID0gYWNjMTAwX2Rldl9j bG9zZSwNCj4gPiBAQCAtNzYzLDYgKzc5Niw1OCBAQA0KPiA+ICAJcmV0dXJuIHRhaWw7DQo+ID4g IH0NCj4gPg0KPiA+ICsvKiBGaWxsIGluIGEgZnJhbWUgY29udHJvbCB3b3JkIGZvciB0dXJibyBl bmNvZGluZy4gKi8gc3RhdGljIGlubGluZQ0KPiA+ICt2b2lkIGFjYzEwMF9mY3dfdGVfZmlsbChj b25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqb3AsIHN0cnVjdA0KPiA+ICthY2MxMDBfZmN3 X3RlICpmY3cpIHsNCj4gPiArCWZjdy0+Y29kZV9ibG9ja19tb2RlID0gb3AtPnR1cmJvX2VuYy5j b2RlX2Jsb2NrX21vZGU7DQo+ID4gKwlpZiAoZmN3LT5jb2RlX2Jsb2NrX21vZGUgPT0gMCkgeyAv KiBGb3IgVEIgbW9kZSAqLw0KPiA+ICsJCWZjdy0+a19uZWcgPSBvcC0+dHVyYm9fZW5jLnRiX3Bh cmFtcy5rX25lZzsNCj4gPiArCQlmY3ctPmtfcG9zID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMu a19wb3M7DQo+ID4gKwkJZmN3LT5jX25lZyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmNfbmVn Ow0KPiA+ICsJCWZjdy0+YyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmM7DQo+ID4gKwkJZmN3 LT5uY2JfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMubmNiX25lZzsNCj4gPiArCQlmY3ct Pm5jYl9wb3MgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5uY2JfcG9zOw0KPiA+ICsNCj4gPiAr CQlpZiAoY2hlY2tfYml0KG9wLT50dXJib19lbmMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJE RVZfVFVSQk9fUkFURV9NQVRDSCkpIHsNCj4gPiArCQkJZmN3LT5ieXBhc3Nfcm0gPSAwOw0KPiA+ ICsJCQlmY3ctPmNhYiA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmNhYjsNCj4gPiArCQkJZmN3 LT5lYSA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmVhOw0KPiA+ICsJCQlmY3ctPmViID0gb3At PnR1cmJvX2VuYy50Yl9wYXJhbXMuZWI7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJLyogRSBp cyBzZXQgdG8gdGhlIGVuY29kaW5nIG91dHB1dCBzaXplIHdoZW4gUk0gaXMNCj4gPiArCQkJICog YnlwYXNzZWQuDQo+ID4gKwkJCSAqLw0KPiA+ICsJCQlmY3ctPmJ5cGFzc19ybSA9IDE7DQo+ID4g KwkJCWZjdy0+Y2FiID0gZmN3LT5jX25lZzsNCj4gPiArCQkJZmN3LT5lYSA9IDMgKiBmY3ctPmtf bmVnICsgMTI7DQo+ID4gKwkJCWZjdy0+ZWIgPSAzICogZmN3LT5rX3BvcyArIDEyOw0KPiA+ICsJ CX0NCj4gPiArCX0gZWxzZSB7IC8qIEZvciBDQiBtb2RlICovDQo+ID4gKwkJZmN3LT5rX3BvcyA9 IG9wLT50dXJib19lbmMuY2JfcGFyYW1zLms7DQo+ID4gKwkJZmN3LT5uY2JfcG9zID0gb3AtPnR1 cmJvX2VuYy5jYl9wYXJhbXMubmNiOw0KPiA+ICsNCj4gPiArCQlpZiAoY2hlY2tfYml0KG9wLT50 dXJib19lbmMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJERVZfVFVSQk9fUkFURV9NQVRDSCkp IHsNCj4gPiArCQkJZmN3LT5ieXBhc3Nfcm0gPSAwOw0KPiA+ICsJCQlmY3ctPmViID0gb3AtPnR1 cmJvX2VuYy5jYl9wYXJhbXMuZTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQkvKiBFIGlzIHNl dCB0byB0aGUgZW5jb2Rpbmcgb3V0cHV0IHNpemUgd2hlbiBSTSBpcw0KPiA+ICsJCQkgKiBieXBh c3NlZC4NCj4gPiArCQkJICovDQo+ID4gKwkJCWZjdy0+YnlwYXNzX3JtID0gMTsNCj4gPiArCQkJ ZmN3LT5lYiA9IDMgKiBmY3ctPmtfcG9zICsgMTI7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWZjdy0+YnlwYXNzX3J2X2lkeDEgPSBjaGVja19iaXQob3AtPnR1cmJvX2VuYy5vcF9m bGFncywNCj4gPiArCQkJUlRFX0JCREVWX1RVUkJPX1JWX0lOREVYX0JZUEFTUyk7DQo+ID4gKwlm Y3ctPmNvZGVfYmxvY2tfY3JjID0gY2hlY2tfYml0KG9wLT50dXJib19lbmMub3BfZmxhZ3MsDQo+ ID4gKwkJCVJURV9CQkRFVl9UVVJCT19DUkNfMjRCX0FUVEFDSCk7DQo+ID4gKwlmY3ctPnJ2X2lk eDEgPSBvcC0+dHVyYm9fZW5jLnJ2X2luZGV4OyB9DQo+ID4gKw0KPiA+ICAvKiBDb21wdXRlIHZh bHVlIG9mIGswLg0KPiA+ICAgKiBCYXNlZCBvbiAzR1BQIDM4LjIxMiBUYWJsZSA1LjQuMi4xLTIN Cj4gPiAgICogU3RhcnRpbmcgcG9zaXRpb24gb2YgZGlmZmVyZW50IHJlZHVuZGFuY3kgdmVyc2lv bnMsIGswIEBAIC04MTMsNg0KPiA+ICs4OTgsMjUgQEANCj4gPiAgCWZjdy0+bWNiX2NvdW50ID0g bnVtX2NiOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogRmlsbCBpbiBhIGZyYW1lIGNvbnRyb2wgd29y ZCBmb3IgdHVyYm8gZGVjb2RpbmcuICovIHN0YXRpYyBpbmxpbmUNCj4gPiArdm9pZCBhY2MxMDBf ZmN3X3RkX2ZpbGwoY29uc3Qgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLCBzdHJ1Y3QNCj4g PiArYWNjMTAwX2Zjd190ZCAqZmN3KSB7DQo+ID4gKwkvKiBOb3RlIDogRWFybHkgdGVybWluYXRp b24gaXMgYWx3YXlzIGVuYWJsZWQgZm9yIDRHVUwgKi8NCj4gPiArCWZjdy0+ZmN3X3ZlciA9IDE7 DQo+ID4gKwlpZiAob3AtPnR1cmJvX2RlYy5jb2RlX2Jsb2NrX21vZGUgPT0gMCkNCj4gPiArCQlm Y3ctPmtfcG9zID0gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMua19wb3M7DQo+ID4gKwllbHNlDQo+ ID4gKwkJZmN3LT5rX3BvcyA9IG9wLT50dXJib19kZWMuY2JfcGFyYW1zLms7DQo+ID4gKwlmY3ct PnR1cmJvX2NyY190eXBlID0gY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4g KwkJCVJURV9CQkRFVl9UVVJCT19DUkNfVFlQRV8yNEIpOw0KPiA+ICsJZmN3LT5ieXBhc3Nfc2Jf ZGVpbnQgPSAwOw0KPiA+ICsJZmN3LT5yYXdfZGVjb2Rlcl9pbnB1dF9vbiA9IDA7DQo+ID4gKwlm Y3ctPm1heF9pdGVyID0gb3AtPnR1cmJvX2RlYy5pdGVyX21heDsNCj4gPiArCWZjdy0+aGFsZl9p dGVyX29uID0gIWNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVf QkJERVZfVFVSQk9fSEFMRl9JVEVSQVRJT05fRVZFTik7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8q IEZpbGwgaW4gYSBmcmFtZSBjb250cm9sIHdvcmQgZm9yIExEUEMgZGVjb2RpbmcuICovICBzdGF0 aWMgaW5saW5lDQo+ID4gdm9pZCAgYWNjMTAwX2Zjd19sZF9maWxsKGNvbnN0IHN0cnVjdCBydGVf YmJkZXZfZGVjX29wICpvcCwgc3RydWN0DQo+ID4gYWNjMTAwX2Zjd19sZCAqZmN3LCBAQCAtMTA0 Miw2ICsxMTQ2LDg3IEBAICB9DQo+ID4NCj4gPiAgc3RhdGljIGlubGluZSBpbnQNCj4gPiArYWNj MTAwX2RtYV9kZXNjX3RlX2ZpbGwoc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+ICsJ CXN0cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNjICpkZXNjLCBzdHJ1Y3QgcnRlX21idWYgKippbnB1 dCwNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKm91dHB1dCwgdWludDMyX3QgKmluX29mZnNldCwN Cj4gPiArCQl1aW50MzJfdCAqb3V0X29mZnNldCwgdWludDMyX3QgKm91dF9sZW5ndGgsDQo+ID4g KwkJdWludDMyX3QgKm1idWZfdG90YWxfbGVmdCwgdWludDMyX3QgKnNlZ190b3RhbF9sZWZ0LCB1 aW50OF90DQo+IHIpIHsNCj4gPiArCWludCBuZXh0X3RyaXBsZXQgPSAxOyAvKiBGQ1cgYWxyZWFk eSBkb25lICovDQo+ID4gKwl1aW50MzJfdCBlLCBlYSwgZWIsIGxlbmd0aDsNCj4gPiArCXVpbnQx Nl90IGssIGtfbmVnLCBrX3BvczsNCj4gPiArCXVpbnQ4X3QgY2FiLCBjX25lZzsNCj4gPiArDQo+ ID4gKwlkZXNjLT53b3JkMCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+ICsJZGVzYy0+d29y ZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAqLw0KPiA+ICsJZGVzYy0+ d29yZDIgPSAwOw0KPiA+ICsJZGVzYy0+d29yZDMgPSAwOw0KPiA+ICsJZGVzYy0+bnVtQ0JzID0g MTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPnR1cmJvX2VuYy5jb2RlX2Jsb2NrX21vZGUgPT0gMCkg ew0KPiA+ICsJCWVhID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuZWE7DQo+ID4gKwkJZWIgPSBv cC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5lYjsNCj4gPiArCQljYWIgPSBvcC0+dHVyYm9fZW5jLnRi X3BhcmFtcy5jYWI7DQo+ID4gKwkJa19uZWcgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5rX25l ZzsNCj4gPiArCQlrX3BvcyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmtfcG9zOw0KPiA+ICsJ CWNfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuY19uZWc7DQo+ID4gKwkJZSA9IChyIDwg Y2FiKSA/IGVhIDogZWI7DQo+ID4gKwkJayA9IChyIDwgY19uZWcpID8ga19uZWcgOiBrX3BvczsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZSA9IG9wLT50dXJib19lbmMuY2JfcGFyYW1zLmU7DQo+ ID4gKwkJayA9IG9wLT50dXJib19lbmMuY2JfcGFyYW1zLms7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZW5jLm9wX2ZsYWdzLA0KPiBSVEVfQkJERVZfVFVS Qk9fQ1JDXzI0Ql9BVFRBQ0gpKQ0KPiA+ICsJCWxlbmd0aCA9IChrIC0gMjQpID4+IDM7DQo+ID4g KwllbHNlDQo+ID4gKwkJbGVuZ3RoID0gayA+PiAzOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2Vs eSgoKm1idWZfdG90YWxfbGVmdCA9PSAwKSB8fCAoKm1idWZfdG90YWxfbGVmdCA8DQo+ID4gK2xl bmd0aCkpKSB7DQo+IA0KPiBzaW1pbGFyIHRvIG90aGVyIHBhdGNoZXMsIHRoaXMgY2hlY2sgY2Fu IGJlIGNvbWJpbmVkIHRvIDw9DQo+IA0KPiBjaGFuZ2UgZ2VuZXJhbGx5DQoNCnNhbWUgY29tbWVu dCBvbiBvdGhlciBwYXRjaA0KDQo+IA0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJ CQkJIk1pc21hdGNoIGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kDQo+IGluY2x1ZGVkIENCIHNpemVz OiBtYnVmIGxlbiAldSwgY2IgbGVuICV1IiwNCj4gPiArCQkJCSptYnVmX3RvdGFsX2xlZnQsIGxl bmd0aCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5leHRfdHJp cGxldCA9IGFjYzEwMF9kbWFfZmlsbF9ibGtfdHlwZV9pbihkZXNjLCBpbnB1dCwgaW5fb2Zmc2V0 LA0KPiA+ICsJCQlsZW5ndGgsIHNlZ190b3RhbF9sZWZ0LCBuZXh0X3RyaXBsZXQpOw0KPiA+ICsJ aWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhF UlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5kDQo+IG1i dWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPiArCQkJCW9wKTsNCj4gPiArCQly ZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0g MV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5tMmRsZW4gPSBuZXh0X3RyaXBsZXQ7DQo+ID4gKwkq bWJ1Zl90b3RhbF9sZWZ0IC09IGxlbmd0aDsNCj4gPiArDQo+ID4gKwkvKiBTZXQgb3V0cHV0IGxl bmd0aCAqLw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZW5jLm9wX2ZsYWdzLA0KPiBS VEVfQkJERVZfVFVSQk9fUkFURV9NQVRDSCkpDQo+ID4gKwkJLyogSW50ZWdlciByb3VuZCB1cCBk aXZpc2lvbiBieSA4ICovDQo+ID4gKwkJKm91dF9sZW5ndGggPSAoZSArIDcpID4+IDM7DQo+ID4g KwllbHNlDQo+ID4gKwkJKm91dF9sZW5ndGggPSAoayA+PiAzKSAqIDMgKyAyOw0KPiA+ICsNCj4g PiArCW5leHRfdHJpcGxldCA9IGFjYzEwMF9kbWFfZmlsbF9ibGtfdHlwZV9vdXQoZGVzYywgb3V0 cHV0LA0KPiAqb3V0X29mZnNldCwNCj4gPiArCQkJKm91dF9sZW5ndGgsIG5leHRfdHJpcGxldCwN Cj4gQUNDMTAwX0RNQV9CTEtJRF9PVVRfRU5DKTsNCj4gPiArCWlmICh1bmxpa2VseShuZXh0X3Ry aXBsZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21h dGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJi ZGV2X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0K PiA+ICsJb3AtPnR1cmJvX2VuYy5vdXRwdXQubGVuZ3RoICs9ICpvdXRfbGVuZ3RoOw0KPiA+ICsJ Km91dF9vZmZzZXQgKz0gKm91dF9sZW5ndGg7DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90 cmlwbGV0IC0gMV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5kMm1sZW4gPSBuZXh0X3RyaXBsZXQg LSBkZXNjLT5tMmRsZW47DQo+ID4gKw0KPiA+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0K PiA+ICBhY2MxMDBfZG1hX2Rlc2NfbGVfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqb3As DQo+ID4gIAkJc3RydWN0IGFjYzEwMF9kbWFfcmVxX2Rlc2MgKmRlc2MsIHN0cnVjdCBydGVfbWJ1 ZiAqKmlucHV0LA0KPiA+ICAJCXN0cnVjdCBydGVfbWJ1ZiAqb3V0cHV0LCB1aW50MzJfdCAqaW5f b2Zmc2V0LCBAQCAtMTExMCw2DQo+ICsxMjk1LDExNw0KPiA+IEBAICB9DQo+ID4NCj4gPiAgc3Rh dGljIGlubGluZSBpbnQNCj4gPiArYWNjMTAwX2RtYV9kZXNjX3RkX2ZpbGwoc3RydWN0IHJ0ZV9i YmRldl9kZWNfb3AgKm9wLA0KPiA+ICsJCXN0cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNjICpkZXNj LCBzdHJ1Y3QgcnRlX21idWYgKippbnB1dCwNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKmhfb3V0 cHV0LCBzdHJ1Y3QgcnRlX21idWYgKnNfb3V0cHV0LA0KPiA+ICsJCXVpbnQzMl90ICppbl9vZmZz ZXQsIHVpbnQzMl90ICpoX291dF9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3QgKnNfb3V0X29mZnNl dCwgdWludDMyX3QgKmhfb3V0X2xlbmd0aCwNCj4gPiArCQl1aW50MzJfdCAqc19vdXRfbGVuZ3Ro LCB1aW50MzJfdCAqbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+ICsJCXVpbnQzMl90ICpzZWdfdG90YWxf bGVmdCwgdWludDhfdCByKSB7DQo+ID4gKwlpbnQgbmV4dF90cmlwbGV0ID0gMTsgLyogRkNXIGFs cmVhZHkgZG9uZSAqLw0KPiA+ICsJdWludDE2X3QgazsNCj4gPiArCXVpbnQxNl90IGNyYzI0X292 ZXJsYXAgPSAwOw0KPiA+ICsJdWludDMyX3QgZSwga3c7DQo+ID4gKw0KPiA+ICsJZGVzYy0+d29y ZDAgPSBBQ0MxMDBfRE1BX0RFU0NfVFlQRTsNCj4gPiArCWRlc2MtPndvcmQxID0gMDsgLyoqPCBU aW1lc3RhbXAgY291bGQgYmUgZGlzYWJsZWQgKi8NCj4gPiArCWRlc2MtPndvcmQyID0gMDsNCj4g PiArCWRlc2MtPndvcmQzID0gMDsNCj4gPiArCWRlc2MtPm51bUNCcyA9IDE7DQo+ID4gKw0KPiA+ ICsJaWYgKG9wLT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09IDApIHsNCj4gPiArCQlrID0g KHIgPCBvcC0+dHVyYm9fZGVjLnRiX3BhcmFtcy5jX25lZykNCj4gPiArCQkJPyBvcC0+dHVyYm9f ZGVjLnRiX3BhcmFtcy5rX25lZw0KPiA+ICsJCQk6IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmtf cG9zOw0KPiA+ICsJCWUgPSAociA8IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmNhYikNCj4gPiAr CQkJPyBvcC0+dHVyYm9fZGVjLnRiX3BhcmFtcy5lYQ0KPiA+ICsJCQk6IG9wLT50dXJib19kZWMu dGJfcGFyYW1zLmViOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlrID0gb3AtPnR1cmJvX2RlYy5j Yl9wYXJhbXMuazsNCj4gPiArCQllID0gb3AtPnR1cmJvX2RlYy5jYl9wYXJhbXMuZTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlpZiAoKG9wLT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09IDAp DQo+ID4gKwkJJiYgIWNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCVJU RV9CQkRFVl9UVVJCT19ERUNfVEJfQ1JDXzI0Ql9LRUVQKSkNCj4gPiArCQljcmMyNF9vdmVybGFw ID0gMjQ7DQo+ID4gKw0KPiA+ICsJLyogQ2FsY3VsYXRlcyBjaXJjdWxhciBidWZmZXIgc2l6ZS4N Cj4gPiArCSAqIEFjY29yZGluZyB0byAzZ3BwIDM2LjIxMiBzZWN0aW9uIDUuMS40LjINCj4gPiAr CSAqICAgS3cgPSAzICogS3BpLA0KPiA+ICsJICogd2hlcmU6DQo+ID4gKwkgKiAgIEtwaSA9IG5D b2wgKiBuUm93DQo+ID4gKwkgKiB3aGVyZSBuQ29sIGlzIDMyIGFuZCBuUm93IGNhbiBiZSBjYWxj dWxhdGVkIGZyb206DQo+ID4gKwkgKiAgIEQgPTwgbkNvbCAqIG5Sb3cNCj4gPiArCSAqIHdoZXJl IEQgaXMgdGhlIHNpemUgb2YgZWFjaCBvdXRwdXQgZnJvbSB0dXJibyBlbmNvZGVyIGJsb2NrIChr ICsNCj4gNCkuDQo+ID4gKwkgKi8NCj4gPiArCWt3ID0gUlRFX0FMSUdOX0NFSUwoayArIDQsIDMy KSAqIDM7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCgqbWJ1Zl90b3RhbF9sZWZ0ID09IDAp IHx8ICgqbWJ1Zl90b3RhbF9sZWZ0IDwga3cpKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJS LA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kDQo+IGluY2x1ZGVk IENCIHNpemVzOiBtYnVmIGxlbiAldSwgY2IgbGVuICV1IiwNCj4gPiArCQkJCSptYnVmX3RvdGFs X2xlZnQsIGt3KTsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmV4 dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX2luKGRlc2MsIGlucHV0LCBpbl9v ZmZzZXQsDQo+IGt3LA0KPiA+ICsJCQlzZWdfdG90YWxfbGVmdCwgbmV4dF90cmlwbGV0KTsNCj4g PiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9s b2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0K PiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4g KwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxl dCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVzYy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+ ICsJKm1idWZfdG90YWxfbGVmdCAtPSBrdzsNCj4gPiArDQo+ID4gKwluZXh0X3RyaXBsZXQgPSBh Y2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfb3V0KA0KPiA+ICsJCQlkZXNjLCBoX291dHB1dCwgKmhf b3V0X29mZnNldCwNCj4gPiArCQkJayA+PiAzLCBuZXh0X3RyaXBsZXQsDQo+IEFDQzEwMF9ETUFf QkxLSURfT1VUX0hBUkQpOw0KPiA+ICsJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7 DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBk YXRhIHRvIHByb2Nlc3MgYW5kDQo+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwN Cj4gPiArCQkJCW9wKTsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ Kmhfb3V0X2xlbmd0aCA9ICgoayAtIGNyYzI0X292ZXJsYXApID4+IDMpOw0KPiA+ICsJb3AtPnR1 cmJvX2RlYy5oYXJkX291dHB1dC5sZW5ndGggKz0gKmhfb3V0X2xlbmd0aDsNCj4gPiArCSpoX291 dF9vZmZzZXQgKz0gKmhfb3V0X2xlbmd0aDsNCj4gPiArDQo+ID4gKwkvKiBTb2Z0IG91dHB1dCAq Lw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiBSVEVfQkJE RVZfVFVSQk9fU09GVF9PVVRQVVQpKSB7DQo+ID4gKwkJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9f ZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQkJUlRFX0JCREVWX1RVUkJPX0VRVUFMSVpFUikpDQo+ID4g KwkJCSpzX291dF9sZW5ndGggPSBlOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJKnNfb3V0X2xlbmd0 aCA9IChrICogMykgKyAxMjsNCj4gPiArDQo+ID4gKwkJbmV4dF90cmlwbGV0ID0gYWNjMTAwX2Rt YV9maWxsX2Jsa190eXBlX291dChkZXNjLCBzX291dHB1dCwNCj4gPiArCQkJCSpzX291dF9vZmZz ZXQsICpzX291dF9sZW5ndGgsIG5leHRfdHJpcGxldCwNCj4gPiArCQkJCUFDQzEwMF9ETUFfQkxL SURfT1VUX1NPRlQpOw0KPiA+ICsJCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0K PiA+ICsJCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBk YXRhIHRvIHByb2Nlc3MNCj4gYW5kIG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwN Cj4gPiArCQkJCQlvcCk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ ICsJCW9wLT50dXJib19kZWMuc29mdF9vdXRwdXQubGVuZ3RoICs9ICpzX291dF9sZW5ndGg7DQo+ ID4gKwkJKnNfb3V0X29mZnNldCArPSAqc19vdXRfbGVuZ3RoOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPiArCWRl c2MtPmQybWxlbiA9IG5leHRfdHJpcGxldCAtIGRlc2MtPm0yZGxlbjsNCj4gPiArDQo+ID4gKwlk ZXNjLT5vcF9hZGRyID0gb3A7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gIGFjYzEwMF9kbWFfZGVzY19sZF9maWxsKHN0 cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiAgCQlzdHJ1Y3QgYWNjMTAwX2RtYV9yZXFf ZGVzYyAqZGVzYywNCj4gPiAgCQlzdHJ1Y3QgcnRlX21idWYgKippbnB1dCwgc3RydWN0IHJ0ZV9t YnVmICpoX291dHB1dCwgQEAgLQ0KPiAxMzc0LDYNCj4gPiArMTY3MCw1NyBAQA0KPiA+DQo+ID4g IC8qIEVucXVldWUgb25lIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIENC IG1vZGUgKi8NCj4gPiBzdGF0aWMgaW5saW5lIGludA0KPiA+ICtlbnF1ZXVlX2VuY19vbmVfb3Bf Y2Ioc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9lbmNfb3AgKm9w LA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicykNCj4gPiArew0KPiA+ICsJdW5p b24gYWNjMTAwX2RtYV9kZXNjICpkZXNjID0gTlVMTDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1 aW50MzJfdCBpbl9vZmZzZXQsIG91dF9vZmZzZXQsIG91dF9sZW5ndGgsIG1idWZfdG90YWxfbGVm dCwNCj4gPiArCQlzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5wdXQs ICpvdXRwdXRfaGVhZCwgKm91dHB1dDsNCj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9 ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3 X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsN Cj4gPiArCWFjYzEwMF9mY3dfdGVfZmlsbChvcCwgJmRlc2MtPnJlcS5mY3dfdGUpOw0KPiA+ICsN Cj4gPiArCWlucHV0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5kYXRhOw0KPiA+ICsJb3V0cHV0X2hl YWQgPSBvdXRwdXQgPSBvcC0+dHVyYm9fZW5jLm91dHB1dC5kYXRhOw0KPiA+ICsJaW5fb2Zmc2V0 ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5vZmZzZXQ7DQo+ID4gKwlvdXRfb2Zmc2V0ID0gb3AtPnR1 cmJvX2VuYy5vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJb3V0X2xlbmd0aCA9IDA7DQo+ID4gKwltYnVm X3RvdGFsX2xlZnQgPSBvcC0+dHVyYm9fZW5jLmlucHV0Lmxlbmd0aDsNCj4gPiArCXNlZ190b3Rh bF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4ob3AtPnR1cmJvX2VuYy5pbnB1dC5kYXRhKQ0K PiA+ICsJCQktIGluX29mZnNldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBhY2MxMDBfZG1hX2Rlc2Nf dGVfZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlucHV0LCBvdXRwdXQsDQo+ID4gKwkJCSZpbl9vZmZz ZXQsICZvdXRfb2Zmc2V0LCAmb3V0X2xlbmd0aCwNCj4gJm1idWZfdG90YWxfbGVmdCwNCj4gPiAr CQkJJnNlZ190b3RhbF9sZWZ0LCAwKTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkocmV0IDwg MCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwltYnVmX2FwcGVuZChvdXRwdXRf aGVhZCwgb3V0cHV0LCBvdXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRF X0JCREVWX0RFQlVHDQo+ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVx LmZjd190ZSwNCj4gPiArCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGUpIC0gOCk7DQo+ID4gKwly dGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4g PiArDQo+ID4gKwkvKiBDaGVjayBpZiBhbnkgZGF0YSBsZWZ0IGFmdGVyIHByb2Nlc3Npbmcgb25l IENCICovDQo+ID4gKwlpZiAobWJ1Zl90b3RhbF9sZWZ0ICE9IDApIHsNCj4gPiArCQlydGVfYmJk ZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJTb21lIGRhdGUgc3RpbGwgbGVmdCBhZnRlciBwcm9jZXNz aW5nIG9uZSBDQjoNCj4gbWJ1Zl90b3RhbF9sZWZ0ID0gJXUiLA0KPiA+ICsJCQkJbWJ1Zl90b3Rh bF9sZWZ0KTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArI2VuZGlmDQo+ ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCB0byBlbnF1 ZXVlICovDQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRW5xdWV1ZSBv bmUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICBlbnF1ZXVlX2xkcGNfZW5jX25fb3BfY2Ioc3RydWN0 IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsDQo+ID4g IAkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfY2JzLCBpbnQxNl90IG51bSkgIHsgQEAgLTE0ODEs NzgNCj4gKzE4MjgsMjM1DQo+ID4gQEANCj4gPiAgCXJldHVybiAxOw0KPiA+ICB9DQo+ID4NCj4g PiAtc3RhdGljIGlubGluZSBpbnQNCj4gPiAtaGFycV9sb29wYmFjayhzdHJ1Y3QgYWNjMTAwX3F1 ZXVlICpxLCBzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsDQo+ID4gLQkJdWludDE2X3QgdG90 YWxfZW5xdWV1ZWRfY2JzKSB7DQo+ID4gLQlzdHJ1Y3QgYWNjMTAwX2Zjd19sZCAqZmN3Ow0KPiA+ IC0JdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjOw0KPiA+IC0JaW50IG5leHRfdHJpcGxldCA9 IDE7DQo+ID4gLQlzdHJ1Y3QgcnRlX21idWYgKmhxX291dHB1dF9oZWFkLCAqaHFfb3V0cHV0Ow0K PiA+IC0JdWludDE2X3QgaGFycV9pbl9sZW5ndGggPSBvcC0NCj4gPmxkcGNfZGVjLmhhcnFfY29t YmluZWRfaW5wdXQubGVuZ3RoOw0KPiA+IC0JaWYgKGhhcnFfaW5fbGVuZ3RoID09IDApIHsNCj4g PiAtCQlydGVfYmJkZXZfbG9nKEVSUiwgIkxvb3BiYWNrIG9mIGludmFsaWQgbnVsbCBzaXplXG4i KTsNCj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAtCX0NCj4gPg0KPiA+IC0JaW50IGhfY29t cCA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gLQkJCVJURV9CQkRFVl9M RFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTg0KPiA+IC0JCQkpID8gMSA6IDA7DQo+ID4gLQlpZiAo aF9jb21wID09IDEpDQo+ID4gLQkJaGFycV9pbl9sZW5ndGggPSBoYXJxX2luX2xlbmd0aCAqIDgg LyA2Ow0KPiA+IC0JaGFycV9pbl9sZW5ndGggPSBSVEVfQUxJR04oaGFycV9pbl9sZW5ndGgsIDY0 KTsNCj4gPiAtCXVpbnQxNl90IGhhcnFfZG1hX2xlbmd0aF9pbiA9IChoX2NvbXAgPT0gMCkgPw0K PiA+IC0JCQloYXJxX2luX2xlbmd0aCA6DQo+ID4gLQkJCWhhcnFfaW5fbGVuZ3RoICogNiAvIDg7 DQo+ID4gLQl1aW50MTZfdCBoYXJxX2RtYV9sZW5ndGhfb3V0ID0gaGFycV9kbWFfbGVuZ3RoX2lu Ow0KPiA+IC0JYm9vbCBkZHJfbWVtX2luID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFn cywNCj4gPiAtDQo+IAlSVEVfQkJERVZfTERQQ19JTlRFUk5BTF9IQVJRX01FTU9SWV9JTl9FTkFC TEUpOw0KPiA+IC0JdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0ID0g cS0+ZC0+aGFycV9sYXlvdXQ7DQo+ID4gLQl1aW50MTZfdCBoYXJxX2luZGV4ID0gKGRkcl9tZW1f aW4gPw0KPiA+IC0JCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5vZmZzZXQgOg0K PiA+IC0JCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0KQ0KPiA+IC0J CQkvIEFDQzEwMF9IQVJRX09GRlNFVDsNCj4gPiArLyogRW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJh dGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8NCj4gPiArc3RhdGljIGlubGlu ZSBpbnQgZW5xdWV1ZV9lbmNfb25lX29wX3RiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsDQo+ID4g K3N0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0b3RhbF9lbnF1 ZXVlZF9jYnMsIHVpbnQ4X3QgY2JzX2luX3RiKSB7DQo+ID4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rl c2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVpbnQ4X3QgciwgYzsNCj4g PiArCXVpbnQzMl90IGluX29mZnNldCwgb3V0X29mZnNldCwgb3V0X2xlbmd0aCwgbWJ1Zl90b3Rh bF9sZWZ0LA0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICpp bnB1dCwgKm91dHB1dF9oZWFkLCAqb3V0cHV0Ow0KPiA+ICsJdWludDE2X3QgY3VycmVudF9lbnF1 ZXVlZF9jYnMgPSAwOw0KPiA+DQo+ID4gIAl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmlu Z19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICAJCQkmIHEtPnN3X3Jpbmdfd3JhcF9t YXNrKTsNCj4gPiAgCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiAtCWZjdyA9 ICZkZXNjLT5yZXEuZmN3X2xkOw0KPiA+IC0JLyogU2V0IHRoZSBGQ1cgZnJvbSBsb29wYmFjayBp bnRvIEREUiAqLw0KPiA+IC0JbWVtc2V0KGZjdywgMCwgc2l6ZW9mKHN0cnVjdCBhY2MxMDBfZmN3 X2xkKSk7DQo+ID4gLQlmY3ctPkZDV3ZlcnNpb24gPSBBQ0MxMDBfRkNXX1ZFUjsNCj4gPiAtCWZj dy0+cW0gPSAyOw0KPiA+IC0JZmN3LT5aYyA9IDM4NDsNCj4gPiAtCWlmIChoYXJxX2luX2xlbmd0 aCA8IDE2ICogTl9aQ18xKQ0KPiA+IC0JCWZjdy0+WmMgPSAxNjsNCj4gPiAtCWZjdy0+bmNiID0g ZmN3LT5aYyAqIE5fWkNfMTsNCj4gPiAtCWZjdy0+cm1fZSA9IDI7DQo+ID4gLQlmY3ctPmhjaW5f ZW4gPSAxOw0KPiA+IC0JZmN3LT5oY291dF9lbiA9IDE7DQo+ID4gKwl1aW50NjRfdCBmY3dfb2Zm c2V0ID0gKGRlc2NfaWR4IDw8IDgpICsgQUNDMTAwX0RFU0NfRkNXX09GRlNFVDsNCj4gPiArCWFj YzEwMF9mY3dfdGVfZmlsbChvcCwgJmRlc2MtPnJlcS5mY3dfdGUpOw0KPiA+DQo+ID4gLQlydGVf YmJkZXZfbG9nKERFQlVHLCAiTG9vcGJhY2sgSU4gJWQgSW5kZXggJWQgb2Zmc2V0ICVkIGxlbmd0 aA0KPiAlZCAlZFxuIiwNCj4gPiAtCQkJZGRyX21lbV9pbiwgaGFycV9pbmRleCwNCj4gPiAtCQkJ aGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0LCBoYXJxX2luX2xlbmd0aCwNCj4gPiAtCQkJ aGFycV9kbWFfbGVuZ3RoX2luKTsNCj4gPiArCWlucHV0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5k YXRhOw0KPiA+ICsJb3V0cHV0X2hlYWQgPSBvdXRwdXQgPSBvcC0+dHVyYm9fZW5jLm91dHB1dC5k YXRhOw0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPnR1cmJvX2VuYy5pbnB1dC5vZmZzZXQ7DQo+ID4g KwlvdXRfb2Zmc2V0ID0gb3AtPnR1cmJvX2VuYy5vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJb3V0X2xl bmd0aCA9IDA7DQo+ID4gKwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+dHVyYm9fZW5jLmlucHV0Lmxl bmd0aDsNCj4gPg0KPiA+IC0JaWYgKGRkcl9tZW1faW4gJiYgKGhhcnFfbGF5b3V0W2hhcnFfaW5k ZXhdLm9mZnNldCA+IDApKSB7DQo+ID4gLQkJZmN3LT5oY2luX3NpemUwID0gaGFycV9sYXlvdXRb aGFycV9pbmRleF0uc2l6ZTA7DQo+ID4gLQkJZmN3LT5oY2luX29mZnNldCA9IGhhcnFfbGF5b3V0 W2hhcnFfaW5kZXhdLm9mZnNldDsNCj4gPiAtCQlmY3ctPmhjaW5fc2l6ZTEgPSBoYXJxX2luX2xl bmd0aCAtIGZjdy0+aGNpbl9vZmZzZXQ7DQo+ID4gLQkJaGFycV9kbWFfbGVuZ3RoX2luID0gKGZj dy0+aGNpbl9zaXplMCArIGZjdy0+aGNpbl9zaXplMSk7DQo+ID4gLQkJaWYgKGhfY29tcCA9PSAx KQ0KPiA+IC0JCQloYXJxX2RtYV9sZW5ndGhfaW4gPSBoYXJxX2RtYV9sZW5ndGhfaW4gKiA2IC8g ODsNCj4gPiAtCX0gZWxzZSB7DQo+ID4gLQkJZmN3LT5oY2luX3NpemUwID0gaGFycV9pbl9sZW5n dGg7DQo+ID4gLQl9DQo+ID4gLQloYXJxX2xheW91dFtoYXJxX2luZGV4XS52YWwgPSAwOw0KPiA+ IC0JcnRlX2JiZGV2X2xvZyhERUJVRywgIkxvb3BiYWNrIEZDVyBDb25maWcgJWQgJWQgJWRcbiIs DQo+ID4gLQkJCWZjdy0+aGNpbl9zaXplMCwgZmN3LT5oY2luX29mZnNldCwgZmN3LT5oY2luX3Np emUxKTsNCj4gPiAtCWZjdy0+aGNvdXRfc2l6ZTAgPSBoYXJxX2luX2xlbmd0aDsNCj4gPiAtCWZj dy0+aGNpbl9kZWNvbXBfbW9kZSA9IGhfY29tcDsNCj4gPiAtCWZjdy0+aGNvdXRfY29tcF9tb2Rl ID0gaF9jb21wOw0KPiA+IC0JZmN3LT5nYWluX2kgPSAxOw0KPiA+IC0JZmN3LT5nYWluX2ggPSAx Ow0KPiA+ICsJYyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmM7DQo+ID4gKwlyID0gb3AtPnR1 cmJvX2VuYy50Yl9wYXJhbXMucjsNCj4gPg0KPiA+IC0JLyogU2V0IHRoZSBwcmVmaXggb2YgZGVz Y3JpcHRvci4gVGhpcyBjb3VsZCBiZSBkb25lIGF0IHBvbGxpbmcgKi8NCj4gPiArCXdoaWxlICht YnVmX3RvdGFsX2xlZnQgPiAwICYmIHIgPCBjKSB7DQo+ID4gKwkJc2VnX3RvdGFsX2xlZnQgPSBy dGVfcGt0bWJ1Zl9kYXRhX2xlbihpbnB1dCkgLSBpbl9vZmZzZXQ7DQo+ID4gKwkJLyogU2V0IHVw IERNQSBkZXNjcmlwdG9yICovDQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3df cmluZ19oZWFkICsNCj4gdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkJJiBxLT5zd19yaW5n X3dyYXBfbWFzayk7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5hZGRyZXNzID0gcS0+ cmluZ19hZGRyX3BoeXMgKw0KPiBmY3dfb2Zmc2V0Ow0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0 cnNbMF0uYmxlbiA9IEFDQzEwMF9GQ1dfVEVfQkxFTjsNCj4gPiArDQo+ID4gKwkJcmV0ID0gYWNj MTAwX2RtYV9kZXNjX3RlX2ZpbGwob3AsICZkZXNjLT5yZXEsICZpbnB1dCwNCj4gb3V0cHV0LA0K PiA+ICsJCQkJJmluX29mZnNldCwgJm91dF9vZmZzZXQsICZvdXRfbGVuZ3RoLA0KPiA+ICsJCQkJ Jm1idWZfdG90YWxfbGVmdCwgJnNlZ190b3RhbF9sZWZ0LCByKTsNCj4gPiArCQlpZiAodW5saWtl bHkocmV0IDwgMCkpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJbWJ1Zl9hcHBlbmQob3V0 cHV0X2hlYWQsIG91dHB1dCwgb3V0X2xlbmd0aCk7DQo+ID4gKw0KPiA+ICsJCS8qIFNldCB0b3Rh bCBudW1iZXIgb2YgQ0JzIGluIFRCICovDQo+ID4gKwkJZGVzYy0+cmVxLmNic19pbl90YiA9IGNi c19pbl90YjsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPiArCQlydGVf bWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd190ZSwNCj4gPiArCQkJCXNpemVv ZihkZXNjLT5yZXEuZmN3X3RlKSAtIDgpOw0KPiA+ICsJCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJl cSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0KPiAjZW5kaWYNCj4gPiArDQo+ID4gKwkJ aWYgKHNlZ190b3RhbF9sZWZ0ID09IDApIHsNCj4gPiArCQkJLyogR28gdG8gdGhlIG5leHQgbWJ1 ZiAqLw0KPiA+ICsJCQlpbnB1dCA9IGlucHV0LT5uZXh0Ow0KPiA+ICsJCQlpbl9vZmZzZXQgPSAw Ow0KPiA+ICsJCQlvdXRwdXQgPSBvdXRwdXQtPm5leHQ7DQo+ID4gKwkJCW91dF9vZmZzZXQgPSAw Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdG90YWxfZW5xdWV1ZWRfY2JzKys7DQo+ID4gKwkJ Y3VycmVudF9lbnF1ZXVlZF9jYnMrKzsNCj4gPiArCQlyKys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKHVubGlrZWx5KGRlc2MgPT0gTlVMTCkpDQo+ID4gKwkJcmV0dXJuIGN1cnJlbnRfZW5x dWV1ZWRfY2JzOw0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4g PiArCS8qIENoZWNrIGlmIGFueSBDQnMgbGVmdCBmb3IgcHJvY2Vzc2luZyAqLw0KPiA+ICsJaWYg KG1idWZfdG90YWxfbGVmdCAhPSAwKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4g KwkJCQkiU29tZSBkYXRlIHN0aWxsIGxlZnQgZm9yIHByb2Nlc3Npbmc6DQo+IG1idWZfdG90YWxf bGVmdCA9ICV1IiwNCj4gPiArCQkJCW1idWZfdG90YWxfbGVmdCk7DQo+ID4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ID4gKwl9DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArCS8qIFNldCBTRG9uZSBv biBsYXN0IENCIGRlc2NyaXB0b3IgZm9yIFRCIG1vZGUuICovDQo+ID4gKwlkZXNjLT5yZXEuc2Rv bmVfZW5hYmxlID0gMTsNCj4gPiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJs ZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKiBFbnF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRl dmljZSBpbiBDQiBtb2RlICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZGVjX29u ZV9vcF9jYihzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLA0KPiA+ICtzdHJ1Y3QgcnRlX2JiZGV2X2Rl Y19vcCAqb3AsDQo+ID4gKwkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICt7DQo+ ID4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zmc2V0LCBzX291dF9vZmZzZXQsIHNf b3V0X2xlbmd0aCwNCj4gPiArCQloX291dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwgc2VnX3Rv dGFsX2xlZnQ7DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKmlucHV0LCAqaF9vdXRwdXRfaGVhZCwg Kmhfb3V0cHV0LA0KPiA+ICsJCSpzX291dHB1dF9oZWFkLCAqc19vdXRwdXQ7DQo+ID4gKw0KPiA+ ICsJdWludDE2X3QgZGVzY19pZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVk X2NicykNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNjID0gcS0+ cmluZ19hZGRyICsgZGVzY19pZHg7DQo+ID4gKwlhY2MxMDBfZmN3X3RkX2ZpbGwob3AsICZkZXNj LT5yZXEuZmN3X3RkKTsNCj4gPiArDQo+ID4gKwlpbnB1dCA9IG9wLT50dXJib19kZWMuaW5wdXQu ZGF0YTsNCj4gPiArCWhfb3V0cHV0X2hlYWQgPSBoX291dHB1dCA9IG9wLT50dXJib19kZWMuaGFy ZF9vdXRwdXQuZGF0YTsNCj4gPiArCXNfb3V0cHV0X2hlYWQgPSBzX291dHB1dCA9IG9wLT50dXJi b19kZWMuc29mdF9vdXRwdXQuZGF0YTsNCj4gPiArCWluX29mZnNldCA9IG9wLT50dXJib19kZWMu aW5wdXQub2Zmc2V0Ow0KPiA+ICsJaF9vdXRfb2Zmc2V0ID0gb3AtPnR1cmJvX2RlYy5oYXJkX291 dHB1dC5vZmZzZXQ7DQo+ID4gKwlzX291dF9vZmZzZXQgPSBvcC0+dHVyYm9fZGVjLnNvZnRfb3V0 cHV0Lm9mZnNldDsNCj4gPiArCWhfb3V0X2xlbmd0aCA9IHNfb3V0X2xlbmd0aCA9IDA7DQo+ID4g KwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+dHVyYm9fZGVjLmlucHV0Lmxlbmd0aDsNCj4gPiArCXNl Z190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4oaW5wdXQpIC0gaW5fb2Zmc2V0Ow0K PiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPiArCWlmICh1bmxp a2VseShpbnB1dCA9PSBOVUxMKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLCAiSW52YWxp ZCBtYnVmIHBvaW50ZXIiKTsNCj4gPiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCX0NCj4gPiAr I2VuZGlmDQo+ID4gKw0KPiA+ICsJLyogU2V0IHVwIERNQSBkZXNjcmlwdG9yICovDQo+ID4gKwlk ZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9j YnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsNCj4gPiArCXJldCA9 IGFjYzEwMF9kbWFfZGVzY190ZF9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsIGhfb3V0cHV0 LA0KPiA+ICsJCQlzX291dHB1dCwgJmluX29mZnNldCwgJmhfb3V0X29mZnNldCwgJnNfb3V0X29m ZnNldCwNCj4gPiArCQkJJmhfb3V0X2xlbmd0aCwgJnNfb3V0X2xlbmd0aCwgJm1idWZfdG90YWxf bGVmdCwNCj4gPiArCQkJJnNlZ190b3RhbF9sZWZ0LCAwKTsNCj4gPiArDQo+ID4gKwlpZiAodW5s aWtlbHkocmV0IDwgMCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiBIYXJk IG91dHB1dCAqLw0KPiA+ICsJbWJ1Zl9hcHBlbmQoaF9vdXRwdXRfaGVhZCwgaF9vdXRwdXQsIGhf b3V0X2xlbmd0aCk7DQo+ID4gKw0KPiA+ICsJLyogU29mdCBvdXRwdXQgKi8NCj4gPiArCWlmIChj aGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gUlRFX0JCREVWX1RVUkJPX1NPRlRf T1VUUFVUKSkNCj4gPiArCQltYnVmX2FwcGVuZChzX291dHB1dF9oZWFkLCBzX291dHB1dCwgc19v dXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ ID4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd190ZCwNCj4gPiAr CQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGQpIC0gOCk7DQo+ID4gKwlydGVfbWVtZHVtcChzdGRl cnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPiArDQo+ID4gKwkvKiBD aGVjayBpZiBhbnkgQ0JzIGxlZnQgZm9yIHByb2Nlc3NpbmcgKi8NCj4gPiArCWlmIChtYnVmX3Rv dGFsX2xlZnQgIT0gMCkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIlNv bWUgZGF0ZSBzdGlsbCBsZWZ0IGFmdGVyIHByb2Nlc3Npbmcgb25lIENCOg0KPiBtYnVmX3RvdGFs X2xlZnQgPSAldSIsDQo+ID4gKwkJCQltYnVmX3RvdGFsX2xlZnQpOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsjZW5kaWYNCj4gbG9naWMgc2ltaWxhciB0byBkZWJ1ZyBp biBtYnVmX2FwcGVuZCwgc2hvdWxkIGJlIGEgY29tbW9uIGZ1bmN0aW9uLg0KDQpOb3QgZXhhY3Rs eSBleGNlcHQgaWYgSSBtaXNzIHlvdXIgcG9pbnQuIA0KDQo+ID4gKw0KPiA+ICsJLyogT25lIENC IChvbmUgb3ApIHdhcyBzdWNjZXNzZnVsbHkgcHJlcGFyZWQgdG8gZW5xdWV1ZSAqLw0KPiA+ICsJ cmV0dXJuIDE7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2hh cnFfbG9vcGJhY2soc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0IHJ0ZV9iYmRldl9kZWNf b3AgKm9wLA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2Nicykgew0KPiA+ICsJc3Ry dWN0IGFjYzEwMF9mY3dfbGQgKmZjdzsNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVz YzsNCj4gPiArCWludCBuZXh0X3RyaXBsZXQgPSAxOw0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICpo cV9vdXRwdXRfaGVhZCwgKmhxX291dHB1dDsNCj4gPiArCXVpbnQxNl90IGhhcnFfaW5fbGVuZ3Ro ID0gb3AtDQo+ID5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lucHV0Lmxlbmd0aDsNCj4gPiArCWlm IChoYXJxX2luX2xlbmd0aCA9PSAwKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsICJMb29w YmFjayBvZiBpbnZhbGlkIG51bGwgc2l6ZVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaW50IGhfY29tcCA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMu b3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTg0K PiA+ICsJCQkpID8gMSA6IDA7DQo+ID4gKwlpZiAoaF9jb21wID09IDEpDQo+ID4gKwkJaGFycV9p bl9sZW5ndGggPSBoYXJxX2luX2xlbmd0aCAqIDggLyA2Ow0KPiA+ICsJaGFycV9pbl9sZW5ndGgg PSBSVEVfQUxJR04oaGFycV9pbl9sZW5ndGgsIDY0KTsNCj4gPiArCXVpbnQxNl90IGhhcnFfZG1h X2xlbmd0aF9pbiA9IChoX2NvbXAgPT0gMCkgPw0KPiBDYW4gdGhlc2UgaF9jb21wIGNoZWNrcyBi ZSBjb21iaW5lZCB0byBhIHNpbmdsZSBpZi9lbHNlID8NCg0KaXQgbWF5IGJlIGNsZWFyZXIsIG9r Lg0KDQoNCj4gPiArCQkJaGFycV9pbl9sZW5ndGggOg0KPiA+ICsJCQloYXJxX2luX2xlbmd0aCAq IDYgLyA4Ow0KPiA+ICsJdWludDE2X3QgaGFycV9kbWFfbGVuZ3RoX291dCA9IGhhcnFfZG1hX2xl bmd0aF9pbjsNCj4gPiArCWJvb2wgZGRyX21lbV9pbiA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMu b3BfZmxhZ3MsDQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSU5URVJOQUxfSEFSUV9NRU1PUllf SU5fRU5BQkxFKTsNCj4gPiArCXVuaW9uIGFjYzEwMF9oYXJxX2xheW91dF9kYXRhICpoYXJxX2xh eW91dCA9IHEtPmQtPmhhcnFfbGF5b3V0Ow0KPiA+ICsJdWludDE2X3QgaGFycV9pbmRleCA9IChk ZHJfbWVtX2luID8NCj4gPiArCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfaW5wdXQub2Zm c2V0IDoNCj4gPiArCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lm9mZnNldCkN Cj4gPiArCQkJLyBBQ0MxMDBfSEFSUV9PRkZTRVQ7DQo+ID4gKw0KPiA+ICsJdWludDE2X3QgZGVz Y19pZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVkX2NicykNCj4gPiArCQkJ JiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgZGVz Y19pZHg7DQo+ID4gKwlmY3cgPSAmZGVzYy0+cmVxLmZjd19sZDsNCj4gPiArCS8qIFNldCB0aGUg RkNXIGZyb20gbG9vcGJhY2sgaW50byBERFIgKi8NCj4gPiArCW1lbXNldChmY3csIDAsIHNpemVv ZihzdHJ1Y3QgYWNjMTAwX2Zjd19sZCkpOw0KPiA+ICsJZmN3LT5GQ1d2ZXJzaW9uID0gQUNDMTAw X0ZDV19WRVI7DQo+ID4gKwlmY3ctPnFtID0gMjsNCj4gPiArCWZjdy0+WmMgPSAzODQ7DQo+IHRo ZXNlIG1hZ2ljIG51bWJlcnMgc2hvdWxkIGhhdmUgI2RlZmluZXMNCg0KVGhlc2UgYXJlIG5vdCBt YWdpYyBudW1iZXJzLCBidXQgYWN0dWFsbHkgM0dQUCB2YWx1ZXMNCg0KPiA+ICsJaWYgKGhhcnFf aW5fbGVuZ3RoIDwgMTYgKiBOX1pDXzEpDQo+ID4gKwkJZmN3LT5aYyA9IDE2Ow0KPiA+ICsJZmN3 LT5uY2IgPSBmY3ctPlpjICogTl9aQ18xOw0KPiA+ICsJZmN3LT5ybV9lID0gMjsNCj4gPiArCWZj dy0+aGNpbl9lbiA9IDE7DQo+ID4gKwlmY3ctPmhjb3V0X2VuID0gMTsNCj4gPiArDQo+ID4gKwly dGVfYmJkZXZfbG9nKERFQlVHLCAiTG9vcGJhY2sgSU4gJWQgSW5kZXggJWQgb2Zmc2V0ICVkIGxl bmd0aA0KPiAlZCAlZFxuIiwNCj4gPiArCQkJZGRyX21lbV9pbiwgaGFycV9pbmRleCwNCj4gPiAr CQkJaGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0LCBoYXJxX2luX2xlbmd0aCwNCj4gPiAr CQkJaGFycV9kbWFfbGVuZ3RoX2luKTsNCj4gPiArDQo+ID4gKwlpZiAoZGRyX21lbV9pbiAmJiAo aGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0ID4gMCkpIHsNCj4gPiArCQlmY3ctPmhjaW5f c2l6ZTAgPSBoYXJxX2xheW91dFtoYXJxX2luZGV4XS5zaXplMDsNCj4gPiArCQlmY3ctPmhjaW5f b2Zmc2V0ID0gaGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0Ow0KPiA+ICsJCWZjdy0+aGNp bl9zaXplMSA9IGhhcnFfaW5fbGVuZ3RoIC0gZmN3LT5oY2luX29mZnNldDsNCj4gPiArCQloYXJx X2RtYV9sZW5ndGhfaW4gPSAoZmN3LT5oY2luX3NpemUwICsgZmN3LT5oY2luX3NpemUxKTsNCj4g PiArCQlpZiAoaF9jb21wID09IDEpDQo+ID4gKwkJCWhhcnFfZG1hX2xlbmd0aF9pbiA9IGhhcnFf ZG1hX2xlbmd0aF9pbiAqIDYgLyA4Ow0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmY3ctPmhjaW5f c2l6ZTAgPSBoYXJxX2luX2xlbmd0aDsNCj4gPiArCX0NCj4gPiArCWhhcnFfbGF5b3V0W2hhcnFf aW5kZXhdLnZhbCA9IDA7DQo+ID4gKwlydGVfYmJkZXZfbG9nKERFQlVHLCAiTG9vcGJhY2sgRkNX IENvbmZpZyAlZCAlZCAlZFxuIiwNCj4gPiArCQkJZmN3LT5oY2luX3NpemUwLCBmY3ctPmhjaW5f b2Zmc2V0LCBmY3ctPmhjaW5fc2l6ZTEpOw0KPiA+ICsJZmN3LT5oY291dF9zaXplMCA9IGhhcnFf aW5fbGVuZ3RoOw0KPiA+ICsJZmN3LT5oY2luX2RlY29tcF9tb2RlID0gaF9jb21wOw0KPiA+ICsJ ZmN3LT5oY291dF9jb21wX21vZGUgPSBoX2NvbXA7DQo+ID4gKwlmY3ctPmdhaW5faSA9IDE7DQo+ ID4gKwlmY3ctPmdhaW5faCA9IDE7DQo+ID4gKw0KPiA+ICsJLyogU2V0IHRoZSBwcmVmaXggb2Yg ZGVzY3JpcHRvci4gVGhpcyBjb3VsZCBiZSBkb25lIGF0IHBvbGxpbmcgKi8NCj4gPiAgCWRlc2Mt PnJlcS53b3JkMCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+ICAJZGVzYy0+cmVxLndvcmQx ID0gMDsgLyoqPCBUaW1lc3RhbXAgY291bGQgYmUgZGlzYWJsZWQgKi8NCj4gPiAgCWRlc2MtPnJl cS53b3JkMiA9IDA7DQo+ID4gQEAgLTE4MTYsNiArMjMyMCwxMDcgQEANCj4gPiAgCXJldHVybiBj dXJyZW50X2VucXVldWVkX2NiczsNCj4gPiAgfQ0KPiA+DQo+ID4gKy8qIEVucXVldWUgb25lIGRl Y29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRCIG1vZGUgKi8NCj4gPiArc3Rh dGljIGlubGluZSBpbnQgZW5xdWV1ZV9kZWNfb25lX29wX3RiKHN0cnVjdCBhY2MxMDBfcXVldWUg KnEsDQo+ID4gK3N0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiArCQl1aW50MTZfdCB0 b3RhbF9lbnF1ZXVlZF9jYnMsIHVpbnQ4X3QgY2JzX2luX3RiKSB7DQo+ID4gKwl1bmlvbiBhY2Mx MDBfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVpbnQ4X3Qg ciwgYzsNCj4gPiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zmc2V0LCBzX291dF9vZmZz ZXQsIHNfb3V0X2xlbmd0aCwNCj4gPiArCQloX291dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwg c2VnX3RvdGFsX2xlZnQ7DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKmlucHV0LCAqaF9vdXRwdXRf aGVhZCwgKmhfb3V0cHV0LA0KPiA+ICsJCSpzX291dHB1dF9oZWFkLCAqc19vdXRwdXQ7DQo+ID4g Kwl1aW50MTZfdCBjdXJyZW50X2VucXVldWVkX2NicyA9IDA7DQo+ID4gKw0KPiA+ICsJdWludDE2 X3QgZGVzY19pZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVkX2NicykNCj4g PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRy ICsgZGVzY19pZHg7DQo+ID4gKwl1aW50NjRfdCBmY3dfb2Zmc2V0ID0gKGRlc2NfaWR4IDw8IDgp ICsgQUNDMTAwX0RFU0NfRkNXX09GRlNFVDsNCj4gPiArCWFjYzEwMF9mY3dfdGRfZmlsbChvcCwg JmRlc2MtPnJlcS5mY3dfdGQpOw0KPiA+ICsNCj4gPiArCWlucHV0ID0gb3AtPnR1cmJvX2RlYy5p bnB1dC5kYXRhOw0KPiA+ICsJaF9vdXRwdXRfaGVhZCA9IGhfb3V0cHV0ID0gb3AtPnR1cmJvX2Rl Yy5oYXJkX291dHB1dC5kYXRhOw0KPiA+ICsJc19vdXRwdXRfaGVhZCA9IHNfb3V0cHV0ID0gb3At PnR1cmJvX2RlYy5zb2Z0X291dHB1dC5kYXRhOw0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPnR1cmJv X2RlYy5pbnB1dC5vZmZzZXQ7DQo+ID4gKwloX291dF9vZmZzZXQgPSBvcC0+dHVyYm9fZGVjLmhh cmRfb3V0cHV0Lm9mZnNldDsNCj4gPiArCXNfb3V0X29mZnNldCA9IG9wLT50dXJib19kZWMuc29m dF9vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJaF9vdXRfbGVuZ3RoID0gc19vdXRfbGVuZ3RoID0gMDsN Cj4gPiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19kZWMuaW5wdXQubGVuZ3RoOw0KPiA+ ICsJYyA9IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmM7DQo+ID4gKwlyID0gb3AtPnR1cmJvX2Rl Yy50Yl9wYXJhbXMucjsNCj4gPiArDQo+ID4gKwl3aGlsZSAobWJ1Zl90b3RhbF9sZWZ0ID4gMCAm JiByIDwgYykgew0KPiA+ICsNCj4gPiArCQlzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2Rh dGFfbGVuKGlucHV0KSAtIGluX29mZnNldDsNCj4gPiArDQo+ID4gKwkJLyogU2V0IHVwIERNQSBk ZXNjcmlwdG9yICovDQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ19o ZWFkICsNCj4gdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkJJiBxLT5zd19yaW5nX3dyYXBf bWFzayk7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5hZGRyZXNzID0gcS0+cmluZ19h ZGRyX3BoeXMgKw0KPiBmY3dfb2Zmc2V0Ow0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbMF0u YmxlbiA9IEFDQzEwMF9GQ1dfVERfQkxFTjsNCj4gPiArCQlyZXQgPSBhY2MxMDBfZG1hX2Rlc2Nf dGRfZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlucHV0LA0KPiA+ICsJCQkJaF9vdXRwdXQsIHNfb3V0 cHV0LCAmaW5fb2Zmc2V0LA0KPiAmaF9vdXRfb2Zmc2V0LA0KPiA+ICsJCQkJJnNfb3V0X29mZnNl dCwgJmhfb3V0X2xlbmd0aCwNCj4gJnNfb3V0X2xlbmd0aCwNCj4gPiArCQkJCSZtYnVmX3RvdGFs X2xlZnQsICZzZWdfdG90YWxfbGVmdCwgcik7DQo+ID4gKw0KPiA+ICsJCWlmICh1bmxpa2VseShy ZXQgPCAwKSkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkJLyogSGFyZCBvdXRw dXQgKi8NCj4gPiArCQltYnVmX2FwcGVuZChoX291dHB1dF9oZWFkLCBoX291dHB1dCwgaF9vdXRf bGVuZ3RoKTsNCj4gPiArDQo+ID4gKwkJLyogU29mdCBvdXRwdXQgKi8NCj4gPiArCQlpZiAoY2hl Y2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCQlSVEVfQkJERVZfVFVSQk9f U09GVF9PVVRQVVQpKQ0KPiA+ICsJCQltYnVmX2FwcGVuZChzX291dHB1dF9oZWFkLCBzX291dHB1 dCwNCj4gc19vdXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4gKwkJLyogU2V0IHRvdGFsIG51bWJlciBv ZiBDQnMgaW4gVEIgKi8NCj4gPiArCQlkZXNjLT5yZXEuY2JzX2luX3RiID0gY2JzX2luX3RiOw0K PiA+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJCXJ0ZV9tZW1kdW1wKHN0 ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEuZmN3X3RkLA0KPiA+ICsJCQkJc2l6ZW9mKGRlc2MtPnJl cS5mY3dfdGQpIC0gOCk7DQo+ID4gKwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiUmVxIERlc2MuIiwg ZGVzYywgc2l6ZW9mKCpkZXNjKSk7DQo+ICNlbmRpZg0KPiA+ICsNCj4gPiArCQlpZiAoc2VnX3Rv dGFsX2xlZnQgPT0gMCkgew0KPiA+ICsJCQkvKiBHbyB0byB0aGUgbmV4dCBtYnVmICovDQo+ID4g KwkJCWlucHV0ID0gaW5wdXQtPm5leHQ7DQo+ID4gKwkJCWluX29mZnNldCA9IDA7DQo+ID4gKwkJ CWhfb3V0cHV0ID0gaF9vdXRwdXQtPm5leHQ7DQo+ID4gKwkJCWhfb3V0X29mZnNldCA9IDA7DQo+ ID4gKw0KPiA+ICsJCQlpZiAoY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4g KwkJCQkJUlRFX0JCREVWX1RVUkJPX1NPRlRfT1VUUFVUKSkNCj4gew0KPiA+ICsJCQkJc19vdXRw dXQgPSBzX291dHB1dC0+bmV4dDsNCj4gPiArCQkJCXNfb3V0X29mZnNldCA9IDA7DQo+ID4gKwkJ CX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXRvdGFsX2VucXVldWVkX2NicysrOw0KPiA+ICsJ CWN1cnJlbnRfZW5xdWV1ZWRfY2JzKys7DQo+ID4gKwkJcisrOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmICh1bmxpa2VseShkZXNjID09IE5VTEwpKQ0KPiA+ICsJCXJldHVybiBjdXJyZW50X2Vu cXVldWVkX2NiczsNCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ ID4gKwkvKiBDaGVjayBpZiBhbnkgQ0JzIGxlZnQgZm9yIHByb2Nlc3NpbmcgKi8NCj4gPiArCWlm IChtYnVmX3RvdGFsX2xlZnQgIT0gMCkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ ICsJCQkJIlNvbWUgZGF0ZSBzdGlsbCBsZWZ0IGZvciBwcm9jZXNzaW5nOg0KPiBtYnVmX3RvdGFs X2xlZnQgPSAldSIsDQo+ID4gKwkJCQltYnVmX3RvdGFsX2xlZnQpOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsjZW5kaWYNCj4gPiArCS8qIFNldCBTRG9uZSBvbiBsYXN0 IENCIGRlc2NyaXB0b3IgZm9yIFRCIG1vZGUgKi8NCj4gPiArCWRlc2MtPnJlcS5zZG9uZV9lbmFi bGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5pcnFfZW5hYmxlOw0KPiA+ ICsNCj4gPiArCXJldHVybiBjdXJyZW50X2VucXVldWVkX2NiczsNCj4gPiArfQ0KPiA+DQo+ID4g IC8qIENhbGN1bGF0ZXMgbnVtYmVyIG9mIENCcyBpbiBwcm9jZXNzZWQgZW5jb2RlciBUQiBiYXNl ZCBvbiAncicgYW5kDQo+IGlucHV0DQo+ID4gICAqIGxlbmd0aC4NCj4gPiBAQCAtMTg5Myw2ICsy NDk4LDQ1IEBADQo+ID4gIAlyZXR1cm4gY2JzX2luX3RiOw0KPiA+ICB9DQo+ID4NCj4gPiArLyog RW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZSBpbiBDQiBtb2RlLiAq LyBzdGF0aWMNCj4gPiArdWludDE2X3QgYWNjMTAwX2VucXVldWVfZW5jX2NiKHN0cnVjdCBydGVf YmJkZXZfcXVldWVfZGF0YQ0KPiAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5j X29wICoqb3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEg PSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gcS0+c3dfcmlu Z19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ID5zd19yaW5nX2hlYWQ7DQo+ID4gKwl1 aW50MTZfdCBpOw0KPiA+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPiArCQkv KiBDaGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nlc3Np bmcgKi8NCj4gPiArCQlpZiAodW5saWtlbHkoYXZhaWwgLSAxIDwgMCkpDQo+ID4gKwkJCWJyZWFr Ow0KPiA+ICsJCWF2YWlsIC09IDE7DQo+ID4gKw0KPiA+ICsJCXJldCA9IGVucXVldWVfZW5jX29u ZV9vcF9jYihxLCBvcHNbaV0sIGkpOw0KPiA+ICsJCWlmIChyZXQgPCAwKQ0KPiA+ICsJCQlicmVh azsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkoaSA9PSAwKSkNCj4gPiArCQly ZXR1cm4gMDsgLyogTm90aGluZyB0byBlbnF1ZXVlICovDQo+ID4gKw0KPiA+ICsJLyogU2V0IFNE b25lIGluIGxhc3QgQ0IgaW4gZW5xdWV1ZWQgb3BzIGZvciBDQiBtb2RlKi8NCj4gPiArCWRlc2Mg PSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfaGVhZCArIGkgLSAxKQ0KPiA+ICsJCQkmIHEt PnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0K PiA+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5pcnFfZW5hYmxlOw0KPiA+ICsNCj4gPiAr CWFjYzEwMF9kbWFfZW5xdWV1ZShxLCBpLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0K PiA+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVl dWVkX2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2Nv dW50ICs9IG51bSAtIGk7DQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyog Q2hlY2sgd2UgY2FuIG11eCBlbmNvZGUgb3BlcmF0aW9ucyB3aXRoIGNvbW1vbiBGQ1cgKi8gIHN0 YXRpYw0KPiA+IGlubGluZSBib29sICBjaGVja19tdXgoc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3Ag KipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+IEBAIC0xOTYwLDYgKzI2MDQsNTIgQEANCj4gPiAg CXJldHVybiBpOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9u cyBmb3IgQUNDMTAwIGRldmljZSBpbiBUQiBtb2RlLiAqLyBzdGF0aWMNCj4gPiArdWludDE2X3Qg YWNjMTAwX2VucXVldWVfZW5jX3RiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YQ0KPiAqcV9k YXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3BzLCB1aW50MTZfdCBudW0p IHsNCj4gPiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7 DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gcS0+c3dfcmluZ19kZXB0aCArIHEtPnN3X3JpbmdfdGFp bCAtIHEtDQo+ID5zd19yaW5nX2hlYWQ7DQo+ID4gKwl1aW50MTZfdCBpLCBlbnF1ZXVlZF9jYnMg PSAwOw0KPiA+ICsJdWludDhfdCBjYnNfaW5fdGI7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+ICsJCWNic19pbl90YiA9IGdldF9u dW1fY2JzX2luX3RiX2VuYygmb3BzW2ldLT50dXJib19lbmMpOw0KPiA+ICsJCS8qIENoZWNrIGlm IHRoZXJlIGFyZSBhdmFpbGFibGUgc3BhY2UgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLw0KPiA+ ICsJCWlmICh1bmxpa2VseShhdmFpbCAtIGNic19pbl90YiA8IDApKQ0KPiA+ICsJCQlicmVhazsN Cj4gPiArCQlhdmFpbCAtPSBjYnNfaW5fdGI7DQo+ID4gKw0KPiA+ICsJCXJldCA9IGVucXVldWVf ZW5jX29uZV9vcF90YihxLCBvcHNbaV0sIGVucXVldWVkX2NicywNCj4gY2JzX2luX3RiKTsNCj4g PiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZW5xdWV1ZWRfY2JzICs9 IHJldDsNCj4gPiArCX0NCj4gPiArDQo+IG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zIGhhdmUgYSAo aSA9PSAwKSBjaGVjayBoZXJlLg0KDQpvaw0KDQo+ID4gKwlhY2MxMDBfZG1hX2VucXVldWUocSwg ZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBk YXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9 IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAt IGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVl dWUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UuICovIHN0YXRpYyB1aW50MTZf dA0KPiA+ICthY2MxMDBfZW5xdWV1ZV9lbmMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpx X2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51 bSkgew0KPiA+ICsJaWYgKHVubGlrZWx5KG51bSA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsNCj4g bnVtID09IDAgY2hlY2sgc2hvdWxkIG1vdmUgaW50byB0aGUgdGIvY2IgZnVuY3Rpb25zDQoNCnNh bWUgY29tbWVudCBvbiBvdGhlciBwYXRjaCwgd2h5IG5vdCBjYXRjaCBpdCBlYXJseT8NCg0KPiA+ ICsJaWYgKG9wc1swXS0+dHVyYm9fZW5jLmNvZGVfYmxvY2tfbW9kZSA9PSAwKQ0KPiA+ICsJCXJl dHVybiBhY2MxMDBfZW5xdWV1ZV9lbmNfdGIocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gKwllbHNl DQo+ID4gKwkJcmV0dXJuIGFjYzEwMF9lbnF1ZXVlX2VuY19jYihxX2RhdGEsIG9wcywgbnVtKTsg fQ0KPiA+ICsNCj4gPiAgLyogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRl dmljZS4gKi8gIHN0YXRpYyB1aW50MTZfdA0KPiA+IGFjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jKHN0 cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0xOTY3LDcgKzI2NTcs NTEgQEAgIHsNCj4gPiAgCWlmICh1bmxpa2VseShudW0gPT0gMCkpDQo+ID4gIAkJcmV0dXJuIDA7 DQo+ID4gLQlyZXR1cm4gYWNjMTAwX2VucXVldWVfbGRwY19lbmNfY2IocV9kYXRhLCBvcHMsIG51 bSk7DQo+ID4gKwlpZiAob3BzWzBdLT5sZHBjX2VuYy5jb2RlX2Jsb2NrX21vZGUgPT0gMCkNCj4g PiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfZW5jX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ ICsJZWxzZQ0KPiA+ICsJCXJldHVybiBhY2MxMDBfZW5xdWV1ZV9sZHBjX2VuY19jYihxX2RhdGEs IG9wcywgbnVtKTsgfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJh dGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLyBzdGF0aWMNCj4gPiArdWludDE2 X3QgYWNjMTAwX2VucXVldWVfZGVjX2NiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YQ0KPiAq cV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBu dW0pIHsNCj4gDQo+IFNlZW1zIGxpa2UgdGhlIDEwdGggdmFyaWFudCBvZiBhIHNpbWlsYXIgZnVu Y3Rpb24gY291bGQgdGhlc2UgYmUgY29tYmluZWQgdG8NCj4gZmV3ZXIgZnVuY3Rpb25zID8NCj4g DQo+IE1heWJlIGJ5IHBhc3NpbmcgaW4gYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBlbnF1ZXVl X29uZV9kZWNfb25lKiB0aGF0DQo+IGRvZXMgdGhlIHdvcmsgPw0KDQpUaGV5IGhhdmUgc29tZSB2 YXJpYW50cyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgb3BlcmF0aW9uIGFuZCBjb25zdHJhaW50cy4N Ck5vdCBvYnZpb3VzIHRvIGhhdmUgYSB2YWx1YWJsZSByZWZhY3Rvci4gDQoNCg0KPiANCj4gPiAr CXN0cnVjdCBhY2MxMDBfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlp bnQzMl90IGF2YWlsID0gcS0+c3dfcmluZ19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ ID5zd19yaW5nX2hlYWQ7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJdW5pb24gYWNjMTAwX2Rt YV9kZXNjICpkZXNjOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtOyArK2kpIHsNCj4gPiArCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNw YWNlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8NCj4gPiArCQlpZiAodW5saWtlbHkoYXZhaWwg LSAxIDwgMCkpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWF2YWlsIC09IDE7DQo+ID4gKw0KPiA+ ICsJCXJldCA9IGVucXVldWVfZGVjX29uZV9vcF9jYihxLCBvcHNbaV0sIGkpOw0KPiA+ICsJCWlm IChyZXQgPCAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAodW5s aWtlbHkoaSA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsgLyogTm90aGluZyB0byBlbnF1ZXVlICov DQo+ID4gKw0KPiA+ICsJLyogU2V0IFNEb25lIGluIGxhc3QgQ0IgaW4gZW5xdWV1ZWQgb3BzIGZv ciBDQiBtb2RlKi8NCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfaGVh ZCArIGkgLSAxKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2Mt PnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5p cnFfZW5hYmxlOw0KPiA+ICsNCj4gPiArCWFjYzEwMF9kbWFfZW5xdWV1ZShxLCBpLCAmcV9kYXRh LT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlx X2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1 ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIGk7DQo+ID4gIH0NCj4gPg0KPiA+ICAvKiBDaGVjayB3ZSBjYW4gbXV4IGVuY29kZSBvcGVy YXRpb25zIHdpdGggY29tbW9uIEZDVyAqLyBAQCAtDQo+IDIwNjUsNg0KPiA+ICsyNzk5LDUzIEBA DQo+ID4gIAlyZXR1cm4gaTsNCj4gPiAgfQ0KPiA+DQo+ID4gKw0KPiA+ICsvKiBFbnF1ZXVlIGRl Y29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRCIG1vZGUgKi8gc3RhdGljDQo+ ID4gK3VpbnQxNl90IGFjYzEwMF9lbnF1ZXVlX2RlY190YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVl X2RhdGENCj4gKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywg dWludDE2X3QgbnVtKSB7DQo+IDExdGggOykNCj4gPiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEg PSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gcS0+c3dfcmlu Z19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ID5zd19yaW5nX2hlYWQ7DQo+ID4gKwl1 aW50MTZfdCBpLCBlbnF1ZXVlZF9jYnMgPSAwOw0KPiA+ICsJdWludDhfdCBjYnNfaW5fdGI7DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0K PiA+ICsJCWNic19pbl90YiA9IGdldF9udW1fY2JzX2luX3RiX2RlYygmb3BzW2ldLT50dXJib19k ZWMpOw0KPiA+ICsJCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhdmFpbGFibGUgc3BhY2UgZm9yIGZ1 cnRoZXIgcHJvY2Vzc2luZyAqLw0KPiA+ICsJCWlmICh1bmxpa2VseShhdmFpbCAtIGNic19pbl90 YiA8IDApKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlhdmFpbCAtPSBjYnNfaW5fdGI7DQo+ID4g Kw0KPiA+ICsJCXJldCA9IGVucXVldWVfZGVjX29uZV9vcF90YihxLCBvcHNbaV0sIGVucXVldWVk X2NicywNCj4gY2JzX2luX3RiKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKwkJZW5xdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlhY2Mx MDBfZG1hX2VucXVldWUocSwgZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRz LmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVf ZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2Uu ICovIHN0YXRpYyB1aW50MTZfdA0KPiA+ICthY2MxMDBfZW5xdWV1ZV9kZWMoc3RydWN0IHJ0ZV9i YmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3Ag KipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+ICsJaWYgKHVubGlrZWx5KG51bSA9PSAwKSkNCj4g PiArCQlyZXR1cm4gMDsNCj4gc2ltaWxhciBtb3ZlIHRoZSBudW0gPT0gMCBjaGVjayB0byB0aGUg dGIvY2IgZnVuY3Rpb25zLg0KDQpzYW1lIGNvbW1lbnQNCg0KPiA+ICsJaWYgKG9wc1swXS0+dHVy Ym9fZGVjLmNvZGVfYmxvY2tfbW9kZSA9PSAwKQ0KPiA+ICsJCXJldHVybiBhY2MxMDBfZW5xdWV1 ZV9kZWNfdGIocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIGFj YzEwMF9lbnF1ZXVlX2RlY19jYihxX2RhdGEsIG9wcywgbnVtKTsgfQ0KPiA+ICsNCj4gPiAgLyog RW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZS4gKi8gIHN0YXRpYyB1 aW50MTZfdA0KPiA+IGFjYzEwMF9lbnF1ZXVlX2xkcGNfZGVjKHN0cnVjdCBydGVfYmJkZXZfcXVl dWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0yMzg4LDYgKzMxNjksNTEgQEANCj4gPiAgCXJldHVy biBjYl9pZHg7DQo+ID4gIH0NCj4gPg0KPiA+ICsvKiBEZXF1ZXVlIGVuY29kZSBvcGVyYXRpb25z IGZyb20gQUNDMTAwIGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4gK2FjYzEwMF9kZXF1 ZXVlX2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1 Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWludDE2X3QgbnVtKSB7DQo+ID4gKwlzdHJ1Y3Qg YWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+ICsJdWludDE2X3Qg ZGVxdWV1ZV9udW07DQo+ID4gKwl1aW50MzJfdCBhdmFpbCA9IHEtPnN3X3JpbmdfaGVhZCAtIHEt PnN3X3JpbmdfdGFpbDsNCj4gPiArCXVpbnQzMl90IGFxX2RlcXVldWVkID0gMDsNCj4gPiArCXVp bnQxNl90IGk7DQo+ID4gKwl1aW50MTZfdCBkZXF1ZXVlZF9jYnMgPSAwOw0KPiA+ICsJc3RydWN0 IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKyNpZmRl ZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwlpZiAodW5saWtlbHkob3BzID09IDAgJiYg cSA9PSBOVUxMKSkNCj4gDQo+IG9wcyBpcyBhIHBvaW50ZXIgc28gc2hvdWxkIGNvbXBhcmUgd2l0 aCBOVUxMDQo+IA0KPiBUaGUgJiYgbGlrZWx5IG5lZWRzIHRvIGJlIHx8DQo+IA0KPiBNYXliZSBw cmludCBvdXQgYSBtZXNzYWdlIHNvIGNhbGxlciBrbm93cyBzb21ldGhpbmcgd3JvbmcgaGFwcGVu ZWQuDQoNCm9rDQoNCj4gDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4g PiArCWRlcXVldWVfbnVtID0gKGF2YWlsIDwgbnVtKSA/IGF2YWlsIDogbnVtOw0KPiA+ICsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCBkZXF1ZXVlX251bTsgKytpKSB7DQo+ID4gKwkJb3AgPSAocS0+ cmluZ19hZGRyICsgKChxLT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYg cS0+c3dfcmluZ193cmFwX21hc2spKS0+cmVxLm9wX2FkZHI7DQo+ID4gKwkJaWYgKG9wLT50dXJi b19lbmMuY29kZV9ibG9ja19tb2RlID09IDApDQo+ID4gKwkJCXJldCA9IGRlcXVldWVfZW5jX29u ZV9vcF90YihxLCAmb3BzW2ldLA0KPiBkZXF1ZXVlZF9jYnMsDQo+ID4gKwkJCQkJJmFxX2RlcXVl dWVkKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldCA9IGRlcXVldWVfZW5jX29uZV9vcF9jYihx LCAmb3BzW2ldLA0KPiBkZXF1ZXVlZF9jYnMsDQo+ID4gKwkJCQkJJmFxX2RlcXVldWVkKTsNCj4g PiArDQo+ID4gKwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlcXVldWVk X2NicyArPSByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcS0+YXFfZGVxdWV1ZWQgKz0gYXFf ZGVxdWV1ZWQ7DQo+ID4gKwlxLT5zd19yaW5nX3RhaWwgKz0gZGVxdWV1ZWRfY2JzOw0KPiA+ICsN Cj4gPiArCS8qIFVwZGF0ZSBlbnF1ZXVlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0 YXRzLmRlcXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30N Cj4gPiArDQo+ID4gIC8qIERlcXVldWUgTERQQyBlbmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzEw MCBkZXZpY2UuICovICBzdGF0aWMNCj4gPiB1aW50MTZfdCAgYWNjMTAwX2RlcXVldWVfbGRwY19l bmMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhDQo+ICpxX2RhdGEsDQo+ID4gQEAgLTI0MjYs NiArMzI1Miw1MiBAQA0KPiA+ICAJcmV0dXJuIGRlcXVldWVkX2NiczsNCj4gPiAgfQ0KPiA+DQo+ ID4gKw0KPiA+ICsvKiBEZXF1ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMTAwIGRldmlj ZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4gK2FjYzEwMF9kZXF1ZXVlX2RlYyhzdHJ1Y3QgcnRl X2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19v cCAqKm9wcywgdWludDE2X3QgbnVtKSB7DQo+IA0KPiB2ZXJ5IHNpbWlsYXIgdG8gZW5jIGZ1bmN0 aW9uIGFib3ZlLCBjb25zaWRlciBob3cgdG8gY29tYmluZSB0aGVtIHRvIGENCj4gc2luZ2xlIGZ1 bmN0aW9uLg0KPiANCj4gVG9tDQo+IA0KPiA+ICsJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSA9IHFf ZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCXVpbnQxNl90IGRlcXVldWVfbnVtOw0KPiA+ICsJ dWludDMyX3QgYXZhaWwgPSBxLT5zd19yaW5nX2hlYWQgLSBxLT5zd19yaW5nX3RhaWw7DQo+ID4g Kwl1aW50MzJfdCBhcV9kZXF1ZXVlZCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJdWlu dDE2X3QgZGVxdWV1ZWRfY2JzID0gMDsNCj4gPiArCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpv cDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9E RUJVRw0KPiA+ICsJaWYgKHVubGlrZWx5KG9wcyA9PSAwICYmIHEgPT0gTlVMTCkpDQo+ID4gKwkJ cmV0dXJuIDA7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArCWRlcXVldWVfbnVtID0gKGF2YWls IDwgbnVtKSA/IGF2YWlsIDogbnVtOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBkZXF1 ZXVlX251bTsgKytpKSB7DQo+ID4gKwkJb3AgPSAocS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5n X3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spKS0+ cmVxLm9wX2FkZHI7DQo+ID4gKwkJaWYgKG9wLT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09 IDApDQo+ID4gKwkJCXJldCA9IGRlcXVldWVfZGVjX29uZV9vcF90YihxLCAmb3BzW2ldLA0KPiBk ZXF1ZXVlZF9jYnMsDQo+ID4gKwkJCQkJJmFxX2RlcXVldWVkKTsNCj4gPiArCQllbHNlDQo+ID4g KwkJCXJldCA9IGRlcXVldWVfZGVjX29uZV9vcF9jYihxX2RhdGEsIHEsICZvcHNbaV0sDQo+ID4g KwkJCQkJZGVxdWV1ZWRfY2JzLCAmYXFfZGVxdWV1ZWQpOw0KPiA+ICsNCj4gPiArCQlpZiAocmV0 IDwgMCkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVxdWV1ZWRfY2JzICs9IHJldDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlxLT5hcV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVlZDsNCj4gPiArCXEt PnN3X3JpbmdfdGFpbCArPSBkZXF1ZXVlZF9jYnM7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIGVu cXVldWUgc3RhdHMgKi8NCj4gPiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVxdWV1ZWRfY291bnQg Kz0gaTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyogRGVx dWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzEwMCBkZXZpY2UuICovICBzdGF0aWMgdWlu dDE2X3QNCj4gPiBhY2MxMDBfZGVxdWV1ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVl X2RhdGEgKnFfZGF0YSwgQEANCj4gPiAtMjQ3OSw2ICszMzUxLDEwIEBADQo+ID4gIAlzdHJ1Y3Qg cnRlX3BjaV9kZXZpY2UgKnBjaV9kZXYgPSBSVEVfREVWX1RPX1BDSShkZXYtPmRldmljZSk7DQo+ ID4NCj4gPiAgCWRldi0+ZGV2X29wcyA9ICZhY2MxMDBfYmJkZXZfb3BzOw0KPiA+ICsJZGV2LT5l bnF1ZXVlX2VuY19vcHMgPSBhY2MxMDBfZW5xdWV1ZV9lbmM7DQo+ID4gKwlkZXYtPmVucXVldWVf ZGVjX29wcyA9IGFjYzEwMF9lbnF1ZXVlX2RlYzsNCj4gPiArCWRldi0+ZGVxdWV1ZV9lbmNfb3Bz ID0gYWNjMTAwX2RlcXVldWVfZW5jOw0KPiA+ICsJZGV2LT5kZXF1ZXVlX2RlY19vcHMgPSBhY2Mx MDBfZGVxdWV1ZV9kZWM7DQo+ID4gIAlkZXYtPmVucXVldWVfbGRwY19lbmNfb3BzID0gYWNjMTAw X2VucXVldWVfbGRwY19lbmM7DQo+ID4gIAlkZXYtPmVucXVldWVfbGRwY19kZWNfb3BzID0gYWNj MTAwX2VucXVldWVfbGRwY19kZWM7DQo+ID4gIAlkZXYtPmRlcXVldWVfbGRwY19lbmNfb3BzID0g YWNjMTAwX2RlcXVldWVfbGRwY19lbmM7DQoNCg==