From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ADBDCC7EE22 for ; Thu, 11 May 2023 23:25:08 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1BE3310E5FB; Thu, 11 May 2023 23:25:08 +0000 (UTC) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2189910E5FB for ; Thu, 11 May 2023 23:25:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683847504; x=1715383504; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=0tsDRtbTr0V4SzfL5zUUJXsyU/0FyUaf2cTIJ5TXjYE=; b=hvOOWBmagWz6BDVXobPnenffKEw7U5lMmXEdqrBCmqC/Fq5BqdFEtGLv /+8FqF1kLBAfWkJY9NPjZtbuWMf04V5UcmMeNq4sfu+O2av8sAXDzMPdH 3b9LGwHTlXV9V/2F5WsCx8zwPOXmG0kd351eb3qYC3O6scfhSUcDfHNNz thN7GRIdc/Qg+VPTI3CmFhxFPmCyCXDqpc1Au0j14xMPmZ3PlBIU3TGHQ 5WaU2vBpZWumxsRm5V4KKqxDZuWc+M8TTIlm7piR2jQiQhUF4gw/zysfo v+qgXYgTe8oKt0qdpqcoVYLq1LzsKOZH5nTU7LlfX6KujbW0vZz09KyhJ Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10707"; a="353776666" X-IronPort-AV: E=Sophos;i="5.99,268,1677571200"; d="scan'208";a="353776666" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2023 16:25:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10707"; a="824158240" X-IronPort-AV: E=Sophos;i="5.99,268,1677571200"; d="scan'208";a="824158240" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga004.jf.intel.com with ESMTP; 11 May 2023 16:25:00 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 11 May 2023 16:24:59 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 11 May 2023 16:24:59 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.171) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Thu, 11 May 2023 16:24:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H8HGXZ17Dhu6XjJfEAoAoRJWtxtBj5X5rVCD4ol0qaB1ymUw3S5YyaodcVu+vve/s5rnZbdAl6DZep7pufDOH9bSRUyBPSPuE4yfpMxb5hEHLSjLp7z4AgdcALqSb5cOELhjBNO8qyKf4F4JngPdpmp8QxyEYitQBjBMJEih/4EH61zoZ7J+QQ+EKu/Nu5UbpGInwrz0uO5wAkF1yTS19yVdNQCl38mZaBPCyFBdAGiwC8E7/EH6tTsIFbKP+RQ6WJTLrSL6/JLA6f+WiQdkw4SUssnCibUozlnT5/Suqy4Ut2I+43/1tWY6rcWkE+X40m9gOHTRQ2frrYOm1Z2dtQ== 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=0tsDRtbTr0V4SzfL5zUUJXsyU/0FyUaf2cTIJ5TXjYE=; b=V7RVL1bM+3ba3M5zeue8VJ0mdxmpeJMYAsGFswKwVH9uUljcN87TgtOgnFVB69HaXnVh75LC2v1SJq6oGxk/wv+4iXGiwP+HdjodmlVMQG5IrM8DXw0z2ed73+vdX9cxR2mgWZ43eRSj644NF6wrisIocENxHilFrAHE4JeV6YpuYRpSm6BvXM9zcYWduGAC/d7GS02JI1r9zMDLHl5veNEqGGZbjfwGFn6AF8wCPcZ3dZHzfn5Xs2XuHYd3fcgb1k1hnZ8BuZTjNNojq856e93pdbPUdz6sOt0qjjY+zI8TBb4Dxu9nJ+hNPqMuKVxjXZE9chK6oSbu75LN9QH6ZQ== 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 PH0PR11MB4968.namprd11.prod.outlook.com (2603:10b6:510:39::15) by SA1PR11MB8593.namprd11.prod.outlook.com (2603:10b6:806:3ab::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.20; Thu, 11 May 2023 23:24:56 +0000 Received: from PH0PR11MB4968.namprd11.prod.outlook.com ([fe80::c5fc:f1a9:e647:faef]) by PH0PR11MB4968.namprd11.prod.outlook.com ([fe80::c5fc:f1a9:e647:faef%5]) with mapi id 15.20.6363.033; Thu, 11 May 2023 23:24:55 +0000 From: "Govindapillai, Vinod" To: "Sousa, Gustavo" , "intel-gfx@lists.freedesktop.org" Thread-Topic: [PATCH v3 7/8] drm/i915/mtl: Add support for PM DEMAND Thread-Index: AQHZeUZRlePNVp6RaUCusUbpmeqyrq9VzQeA Date: Thu, 11 May 2023 23:24:55 +0000 Message-ID: References: <20230427150016.1566833-1-vinod.govindapillai@intel.com> <20230427150016.1566833-8-vinod.govindapillai@intel.com> <168262708244.338531.17809194296977573819@gjsousa-mobl2> In-Reply-To: <168262708244.338531.17809194296977573819@gjsousa-mobl2> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu1 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: PH0PR11MB4968:EE_|SA1PR11MB8593:EE_ x-ms-office365-filtering-correlation-id: bf42f756-fa32-4691-db6c-08db5276ee14 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iAhykGRJzOmWuVWVcoOe5dHr9RUlPHb3eZLVeT73+gbx2ooqcROJWGu0wHQOThScdSRq3lNGDBvbAVkT3ieNHflzgDL/Uf6HxKgto4KTUeNpZeSdkpYUDr46KtVzTxJswHgDF9/ohLDsV4l5QHASj2RaGZqsauY7xHbKya/Qzi5E50BbDkHmUuWBYFdNWCjCPErWTppsabHNl0BiEvkXRb4Qk9Hke4m3+ABPs5rfC/+NDHpkypQmSu3d4t2wBbXZyuFDGl/NM+lYNtuGN/u+01haoQTDRVmuPCwdXCOnKbu3HbgqbKnnwgVunaZd6K/dCi21VYpVVdADRmd07xCHzf1iVisJgPNeORT061KFM9pRq3goocBkFuVz2i9sxr66aN0HsgzolnnfICMkQuDYINFz0ST8gXkygkGqaKN5Bo8Bvis3CLqdu5z2LDXBJ0t6Kj0Xd9r2c7eS8dTCjYs5pLrgvgtSSudxQRhJpK/ZW7MIP1o8j4YLOv5P0K27iEQLtnyglyFzhSJRzi5/rNX+R00dYODV09e79Rr2N0JMtL/OI1w4RBu/LxSj6YURrYg/ x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB4968.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(136003)(39860400002)(376002)(396003)(346002)(366004)(451199021)(41300700001)(8936002)(478600001)(66476007)(110136005)(316002)(66556008)(71200400001)(54906003)(64756008)(66946007)(66446008)(76116006)(4326008)(8676002)(966005)(91956017)(6486002)(5660300002)(86362001)(6512007)(186003)(107886003)(30864003)(2906002)(6506007)(26005)(38100700002)(38070700005)(82960400001)(36756003)(122000001)(83380400001)(2616005)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QWZjR1U4RlVldzBJNUlSZWVKbDl4ak9OZlplZnJRUHoxcW5vOU9aZEZWWXYx?= =?utf-8?B?UVZ3VmoyeHU2aXhRZ2srbEVxcmhONnRjaEgxM3R0U0JVT0tuU3ovUmxYYjk5?= =?utf-8?B?UGFTamhuYTBaQTlZd3UvaHdkMEhWcTA3cE10SEU3UEZjS25wOXlKWTl5dTN4?= =?utf-8?B?c0RWck5lS1VIM1gwU2sxTzlkbEh5cTFjNHpoWmMycXlValFBUmV2MysyUHRW?= =?utf-8?B?Mk5qVnJ3cUpxZEVOVjdhZU1seXFOUkwxY292NEYwb2YyeG1uM2tzUGM4Zmg2?= =?utf-8?B?TWlmM0s3ZVFXOHpqVXlwWUZOSFp6VVNiMkJwWGhLdXFoajNMRXpocFBlNTlZ?= =?utf-8?B?K1hNTTZSQnMzQS9ydjVzRHRRMDN6TDZpL0lwcm5EN0dPSjZuYloydS9rT3lG?= =?utf-8?B?c0FKTmlaM3pLR3l1VUt2c1Jlbm9iN2I1QUwwMk8rLzV3M0V6ekNxSERVYW04?= =?utf-8?B?WEVaajdISDhmM3FJamgzMTVPQ0NXbDIzckJXa3dNUkdhR042VDBOcHNEUm9j?= =?utf-8?B?ck9kd0RBWk5vUUxxZTQ1VERUeUpJTXU0bTBza3MxRFFaUUZNRDg3WlFGUEVi?= =?utf-8?B?Qk9UUVp0bENZdjFGZDJaZERJTklqT3VWM29qb0oxTklyUERFaFNFYitCZzQy?= =?utf-8?B?WHZCekIvbUlXVVhUZFN6a0FNdm5Gc2g3Qm9uaVp6T0dUMEdqbkZaM3FWZ3RB?= =?utf-8?B?VVd1QSsyOXoyQXFXVStoUmJERHdPemNPSmNuUVdIblozRXg2TXNXcVk3dXNZ?= =?utf-8?B?eDNjRHQ1ZE9nKzZ1NDVaYTJqQmtWaUcyN2R4ZVhObjVXL2tFWXYyTURwc2xr?= =?utf-8?B?WjVPVSt4ajRZaEw0Q3BwTkhaUkhOUTFyVGJBd29yTEwrMEJwdjYrb0FpNWRr?= =?utf-8?B?VlY4SU5hNEppUU9jZjJ3OGVuMFIvMWE4T3o1eG1RTGJiQ0NNZitkajNGenll?= =?utf-8?B?dWExTnAra2VFalViVWxIREIvUUhGSTNPcVZ5cHpVMzRLWGV5UmRVN0IwWlFK?= =?utf-8?B?TkJmMm8zS0h1YWhHS0Y2Qmo4djhKQk1NOERYRzc0KzdUSG9KSTFDM3ZMS3p0?= =?utf-8?B?NU43N0tPZ3lzU3JXNkF5V2NCYksrRGY0SGdrcGh3c3V3cWd1NzQxajNXU1Qr?= =?utf-8?B?OGRXZ01kRmNvbHE2RTJwSVZSenVwUUIzQVQ3NWo4MGt5OTNYUGxabDNkMWpj?= =?utf-8?B?S3N6eWVoV0FoRno2dDFwa0NPNXY4NTBLM3ZOR2FsdnJ4dEVvVHIvVTJPVlc4?= =?utf-8?B?cnA1VnlxZjNKcG5vSFZrN2xadzNLdkEwalFva3htRDNxOXRtTkxPZ1NPTTBy?= =?utf-8?B?eUorZndLc3NWai9FK2JTTUxaajV2dEkzZkRLZVh0eWVjdCs4Q0hWUWF5clBk?= =?utf-8?B?MXAzNS9JU3d1di91VlJrbmpZVm03aWI0U201VzU2RzdWRnIwRGZsOFhRbll0?= =?utf-8?B?cmR5Y2RXY2IzNTdWcjUyTUdycmFGdjVaaGFFRFBVbllJVVdWMFJXMDZsNUpH?= =?utf-8?B?cXd3Y0kwWlhqbUlyYmFyREQyS004dUR5dzBNQ3VoQ2pDNTU2ZlEvdzlhN2Jv?= =?utf-8?B?UUN6SE1JNERSd0VVcnZRVGpZVmdlelJMcjZqN2pLZ0lQYUJmL3hVbU1FRXpJ?= =?utf-8?B?WHBiVjAvZjBETWR0dDA3eTI2Sk41aFRlOVBQbUZtSkdwZklLMm9WYXFpWjQy?= =?utf-8?B?WGtsNmQ3S0tJeFFpOGxzRVVETkJNS2w5aEFJeDh0Nmw2YktabGJiNmxnR3dJ?= =?utf-8?B?bW9ZVWtsRTlmQ0hNbHo1Q21pYjh3QnNnbk9zSWpKZzBIai9DZjZuRU5UaFAy?= =?utf-8?B?QWIrTmpuM25aNVlEdDJUK214MkljWXluVDljVDN6MkpwdVZGTlJFQ0ZGNUhN?= =?utf-8?B?aFZzRmJWUTNIREJaOW93QVB0WGp0djNZejBBUTBQZ2lBTTQwcUZtQ1UvdUlN?= =?utf-8?B?eElpc1h5dmdSQUZZY3IyM2Y5bnQyQmdEZjU2YUJGSkhvQ2tmOVFJYm1oU01v?= =?utf-8?B?Z2VuZXpTdW5LMEJPLytFNlA2NTVKYklpd2o5bDZSbkN3SmNxWVRsK25oUGxl?= =?utf-8?B?VHQ2Z0liSUUwVmIxazNhZ1Q2aFlSeEF4ZEdPVzZRUC9EcURqak0rMHFMUEVH?= =?utf-8?B?RTRYRWxzREpvWFRmTXFvVmdzLzdkejZjMno2Q1o2YkdDQkQzMlNpa2pGMytF?= =?utf-8?Q?zfRsuqow58Qv/ESQpkZnNsI=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <58FD14D1E4D1BF44AAB71DF8D142BD2C@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB4968.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf42f756-fa32-4691-db6c-08db5276ee14 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 May 2023 23:24:55.6636 (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: zKC4QIpvUHBb82natkTPAErVXHmjGwRQClGZqPY1hL3LrrXckmI0nlUkPqb9rMxAHrvKoM8N4dx9s+snNl2B0pmcoaB92Y6QLP/ODKNlMt8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB8593 X-OriginatorOrg: intel.com Subject: Re: [Intel-gfx] [PATCH v3 7/8] drm/i915/mtl: Add support for PM DEMAND X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Syrjala, Ville" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SGVsbG8NCg0KVGhhbmtzIGZvciB0aGUgY29tbWVudHMuIFBscyBzZWUgc29tZSBpbmxpbmUgcmVw bGllcy4uDQoNCk9uIFRodSwgMjAyMy0wNC0yNyBhdCAxNzoyNCAtMDMwMCwgR3VzdGF2byBTb3Vz YSB3cm90ZToNCj4gUXVvdGluZyBWaW5vZCBHb3ZpbmRhcGlsbGFpICgyMDIzLTA0LTI3IDEyOjAw OjE1KQ0KPiA+IEZyb206IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+DQo+ID4g DQo+ID4gRGlzcGxheTE0IGludHJvZHVjZXMgYSBuZXcgd2F5IHRvIGluc3RydWN0IHRoZSBQVW5p dCB3aXRoDQo+ID4gcG93ZXIgYW5kIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgb2YgREUuIEFkZCB0 aGUgZnVuY3Rpb25hbGl0eQ0KPiA+IHRvIHByb2dyYW0gdGhlIHJlZ2lzdGVycyBhbmQgaGFuZGxl IHdhaXRzIHVzaW5nIGludGVycnVwdHMuDQo+ID4gVGhlIGN1cnJlbnQgd2FpdCB0aW1lIGZvciB0 aW1lb3V0cyBpcyBwcm9ncmFtbWVkIGZvciAxMCBtc2VjcyB0bw0KPiA+IGZhY3RvciBpbiB0aGUg d29yc3QgY2FzZSBzY2VuYXJpb3MuIENoYW5nZXMgbWFkZSB0byB1c2UgUkVHX0JJVA0KPiA+IGZv ciBhIHJlZ2lzdGVyIHRoYXQgd2UgdG91Y2hlZChHRU44X0RFX01JU0NfSUVSIF9NTUlPKS4NCj4g PiANCj4gPiBXYV8xNDAxNjc0MDQ3NCBpcyBhZGRlZCB3aGljaCBhcHBsaWVzIHRvIFhlX0xQRCsg ZGlzcGxheQ0KPiA+IA0KPiA+IHYyOiBjaGVja3BhdGNoIHdhcm5pbmcgZml4ZXMsIHNpbXBsaWZ5 IHByb2dyYW0gcG1kZW1hbmQgcGFydA0KPiA+IA0KPiA+IHYzOiB1cGRhdGUgdG8gZGJ1ZnMgYW5k IHBpcGVzIHZhbHVlcyB0byBwbWRlbWFuZCByZWdpc3RlcihzdGFuKQ0KPiA+IMKgwqAgUmVtb3Zl ZCB0aGUgbWFjcm8gdXNhZ2UgaW4gdXBkYXRlX3BtZGVtYW5kX3ZhbHVlcygpDQo+ID4gDQo+ID4g QnNwZWM6IDY2NDUxLCA2NDYzNiwgNjQ2MDIsIDY0NjAzDQo+ID4gQ2M6IE1hdHQgQXR3b29kIDxt YXR0aGV3LnMuYXR3b29kQGludGVsLmNvbT4NCj4gPiBDYzogTWF0dCBSb3BlciA8bWF0dGhldy5k LnJvcGVyQGludGVsLmNvbT4NCj4gPiBDYzogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNo aUBpbnRlbC5jb20+DQo+ID4gQ2M6IEd1c3Rhdm8gU291c2EgPGd1c3Rhdm8uc291c2FAaW50ZWwu Y29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291 emFAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJhZGhha3Jpc2huYSBTcmlwYWRhIDxy YWRoYWtyaXNobmEuc3JpcGFkYUBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogR3VzdGF2 byBTb3VzYSA8Z3VzdGF2by5zb3VzYUBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogTWlr YSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBWaW5v ZCBHb3ZpbmRhcGlsbGFpIDx2aW5vZC5nb3ZpbmRhcGlsbGFpQGludGVsLmNvbT4NCj4gPiAtLS0N Cj4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDMgKy0NCj4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuY8KgIHzCoMKgIDcgKw0KPiA+IC4uLi9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5X2NvcmUuaCB8wqDCoCA2ICsNCj4gPiAuLi4vZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5X2RyaXZlci5jwqDCoCB8wqDCoCA3ICsNCj4gPiAuLi4vZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmPCoMKgwqAgfMKgwqAgOCArDQo+ID4gZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jIHwgNDU1ICsrKysrKysrKysrKysr KysrKw0KPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuaCB8 wqAgMjQgKw0KPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoCAyMSArLQ0KPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzNiArLQ0KPiA+IDkgZmlsZXMg Y2hhbmdlZCwgNTYyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYw0K PiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X3BtZGVtYW5kLmgNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiA+IGluZGV4IDlhZjc2 ZTM3NmNhOS4uZWI4OTlmYTg2ZTUxIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4g PiBAQCAtMjgxLDcgKzI4MSw4IEBAIGk5MTUteSArPSBcDQo+ID4gwqDCoMKgwqDCoMKgIGRpc3Bs YXkvaTl4eF93bS5vIFwNCj4gPiDCoMKgwqDCoMKgwqAgZGlzcGxheS9za2xfc2NhbGVyLm8gXA0K PiA+IMKgwqDCoMKgwqDCoCBkaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUubyBcDQo+ID4gLcKg IGRpc3BsYXkvc2tsX3dhdGVybWFyay5vDQo+ID4gK8KgIGRpc3BsYXkvc2tsX3dhdGVybWFyay5v IFwNCj4gPiArwqAgZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5vDQo+ID4gaTkxNS0kKENPTkZJR19B Q1BJKSArPSBcDQo+ID4gwqDCoMKgwqDCoMKgIGRpc3BsYXkvaW50ZWxfYWNwaS5vIFwNCj4gPiDC oMKgwqDCoMKgwqAgZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5vDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jDQo+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYw0KPiA+IGluZGV4IGJmMzkxYTZj ZDhkNi4uZjk4ZTIzNWZhZGM2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jDQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMNCj4gPiBAQCAtOTksNiArOTksNyBAQA0KPiA+ICNpbmNs dWRlICJpbnRlbF9wY29kZS5oIg0KPiA+ICNpbmNsdWRlICJpbnRlbF9waXBlX2NyYy5oIg0KPiA+ ICNpbmNsdWRlICJpbnRlbF9wbGFuZV9pbml0aWFsLmgiDQo+ID4gKyNpbmNsdWRlICJpbnRlbF9w bWRlbWFuZC5oIg0KPiA+ICNpbmNsdWRlICJpbnRlbF9wcHMuaCINCj4gPiAjaW5jbHVkZSAiaW50 ZWxfcHNyLmgiDQo+ID4gI2luY2x1ZGUgImludGVsX3Nkdm8uaCINCj4gPiBAQCAtNjMwNiw2ICs2 MzA3LDEwIEBAIGludCBpbnRlbF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Ow0KPiA+IMKgwqDCoMKgwqDCoCB9DQo+ID4gDQo+ID4gK8KgIHJldCA9IGludGVsX3BtZGVt YW5kX2F0b21pY19jaGVjayhzdGF0ZSk7DQo+ID4gK8KgIGlmIChyZXQpDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+ID4gKw0KPiA+IMKgwqDCoMKgwqDCoCByZXQgPSBpbnRl bF9hdG9taWNfY2hlY2tfY3J0Y3Moc3RhdGUpOw0KPiA+IMKgwqDCoMKgwqDCoCBpZiAocmV0KQ0K PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOw0KPiA+IEBAIC02OTYw LDYgKzY5NjUsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0 IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ID4gwqDCoMKgwqDCoMKgIH0NCj4gPiANCj4g PiDCoMKgwqDCoMKgwqAgaW50ZWxfc2Fndl9wcmVfcGxhbmVfdXBkYXRlKHN0YXRlKTsNCj4gPiAr wqAgaW50ZWxfcG1kZW1hbmRfcHJlX3BsYW5lX3VwZGF0ZShzdGF0ZSk7DQo+ID4gDQo+ID4gwqDC oMKgwqDCoMKgIC8qIENvbXBsZXRlIHRoZSBldmVudHMgZm9yIHBpcGVzIHRoYXQgaGF2ZSBub3cg YmVlbiBkaXNhYmxlZCAqLw0KPiA+IMKgwqDCoMKgwqDCoCBmb3JfZWFjaF9uZXdfaW50ZWxfY3J0 Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgbmV3X2NydGNfc3RhdGUsIGkpIHsNCj4gPiBAQCAtNzA3 MCw2ICs3MDc2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW50ZWxfdmVyaWZ5X3BsYW5lcyhzdGF0ZSk7DQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKg IGludGVsX3NhZ3ZfcG9zdF9wbGFuZV91cGRhdGUoc3RhdGUpOw0KPiA+ICvCoCBpbnRlbF9wbWRl bWFuZF9wb3N0X3BsYW5lX3VwZGF0ZShzdGF0ZSk7DQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgIGRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lKCZzdGF0ZS0+YmFzZSk7DQo+ID4gDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9j b3JlLmgNCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9j b3JlLmgNCj4gPiBpbmRleCA5ZjY2ZDczNGVkZjYuLjk0NzFhMDUyYWE1NyAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfY29yZS5oDQo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2NvcmUu aA0KPiA+IEBAIC0zNDUsNiArMzQ1LDEyIEBAIHN0cnVjdCBpbnRlbF9kaXNwbGF5IHsNCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqIG9iajsN Cj4gPiDCoMKgwqDCoMKgwqAgfSBkYnVmOw0KPiA+IA0KPiA+ICvCoCBzdHJ1Y3Qgew0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IG11dGV4IGxvY2s7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX29iaiBvYmo7DQo+ID4gK8KgIH0gcG1kZW1hbmQ7DQo+ID4g Kw0KPiA+IMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLyoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBka2wucGh5X2xv Y2sgcHJvdGVjdHMgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyBvZiB0aGUNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RyaXZlci5j DQo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZHJpdmVy LmMNCj4gPiBpbmRleCA2MGNlMTBmYzcyMDUuLjc5ODUzZDhjMzI0MCAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZHJpdmVyLmMNCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZHJpdmVy LmMNCj4gPiBAQCAtNDcsNiArNDcsNyBAQA0KPiA+ICNpbmNsdWRlICJpbnRlbF9vcHJlZ2lvbi5o Ig0KPiA+ICNpbmNsdWRlICJpbnRlbF9vdmVybGF5LmgiDQo+ID4gI2luY2x1ZGUgImludGVsX3Bs YW5lX2luaXRpYWwuaCINCj4gPiArI2luY2x1ZGUgImludGVsX3BtZGVtYW5kLmgiDQo+ID4gI2lu Y2x1ZGUgImludGVsX3Bwcy5oIg0KPiA+ICNpbmNsdWRlICJpbnRlbF9xdWlya3MuaCINCj4gPiAj aW5jbHVkZSAiaW50ZWxfdmdhLmgiDQo+ID4gQEAgLTIxMSw2ICsyMTIsOCBAQCBpbnQgaW50ZWxf ZGlzcGxheV9kcml2ZXJfcHJvYmVfbm9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp DQo+ID4gwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byBjbGVhbnVwX3ZnYTsNCj4gPiANCj4gPiArwqAgaW50ZWxfcG1kZW1hbmRf aW5pdChpOTE1KTsNCj4gPiArDQo+ID4gwqDCoMKgwqDCoMKgIGludGVsX3Bvd2VyX2RvbWFpbnNf aW5pdF9odyhpOTE1LCBmYWxzZSk7DQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgIGlmICghSEFTX0RJ U1BMQVkoaTkxNSkpDQo+ID4gQEAgLTI0MCw2ICsyNDMsMTAgQEAgaW50IGludGVsX2Rpc3BsYXlf ZHJpdmVyX3Byb2JlX25vaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQ0KPiA+IMKg wqDCoMKgwqDCoCBpZiAocmV0KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBjbGVhbnVwX3ZnYV9jbGllbnRfcHdfZG9tYWluX2RtYzsNCj4gPiANCj4gPiArwqAgcmV0ID0g aW50ZWxfcG1kZW1hbmRfc3RhdGVfaW5pdChpOTE1KTsNCj4gPiArwqAgaWYgKHJldCkNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cF92Z2FfY2xpZW50X3B3X2RvbWFpbl9kbWM7 DQo+ID4gKw0KPiA+IMKgwqDCoMKgwqDCoCBpbml0X2xsaXN0X2hlYWQoJmk5MTUtPmRpc3BsYXku YXRvbWljX2hlbHBlci5mcmVlX2xpc3QpOw0KPiA+IMKgwqDCoMKgwqDCoCBJTklUX1dPUksoJmk5 MTUtPmRpc3BsYXkuYXRvbWljX2hlbHBlci5mcmVlX3dvcmssDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfYXRvbWljX2hlbHBlcl9mcmVlX3N0YXRlX3dvcmtlcik7 DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9wb3dlci5jDQo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfcG93ZXIuYw0KPiA+IGluZGV4IDUxNTAwNjlmM2Y4Mi4uZjVjNWE0ODZlZmJjIDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9w b3dlci5jDQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5X3Bvd2VyLmMNCj4gPiBAQCAtMjAsNiArMjAsNyBAQA0KPiA+ICNpbmNsdWRlICJpbnRlbF9t Y2hiYXJfcmVncy5oIg0KPiA+ICNpbmNsdWRlICJpbnRlbF9wY2hfcmVmY2xrLmgiDQo+ID4gI2lu Y2x1ZGUgImludGVsX3Bjb2RlLmgiDQo+ID4gKyNpbmNsdWRlICJpbnRlbF9wbWRlbWFuZC5oIg0K PiA+ICNpbmNsdWRlICJpbnRlbF9wcHNfcmVncy5oIg0KPiA+ICNpbmNsdWRlICJpbnRlbF9zbnBz X3BoeS5oIg0KPiA+ICNpbmNsdWRlICJza2xfd2F0ZXJtYXJrLmgiDQo+ID4gQEAgLTEwODUsNiAr MTA4NiwxMCBAQCBzdGF0aWMgdm9pZCBnZW45X2RidWZfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikNCj4gPiDCoMKgwqDCoMKgwqAgZGV2X3ByaXYtPmRpc3BsYXkuZGJ1 Zi5lbmFibGVkX3NsaWNlcyA9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRl bF9lbmFibGVkX2RidWZfc2xpY2VzX21hc2soZGV2X3ByaXYpOw0KPiA+IA0KPiA+ICvCoCBpZiAo RElTUExBWV9WRVIoZGV2X3ByaXYpID49IDE0KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgaW50 ZWxfcHJvZ3JhbV9kYnVmX3BtZGVtYW5kKGRldl9wcml2LCBCSVQoREJVRl9TMSkgfA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZXZfcHJpdi0+ZGlzcGxheS5kYnVmLmVuYWJsZWRfc2xpY2VzKTsN Cj4gPiArDQo+ID4gwqDCoMKgwqDCoMKgIC8qDQo+ID4gwqDCoMKgwqDCoMKgwqAgKiBKdXN0IHBv d2VyIHVwIGF0IGxlYXN0IDEgc2xpY2UsIHdlIHdpbGwNCj4gPiDCoMKgwqDCoMKgwqDCoCAqIGZp Z3VyZSBvdXQgbGF0ZXIgd2hpY2ggc2xpY2VzIHdlIGhhdmUgYW5kIHdoYXQgd2UgbmVlZC4NCj4g PiBAQCAtMTA5Niw2ICsxMTAxLDkgQEAgc3RhdGljIHZvaWQgZ2VuOV9kYnVmX2VuYWJsZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gc3RhdGljIHZvaWQgZ2VuOV9kYnVm X2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiA+IHsNCj4gPiDC oMKgwqDCoMKgwqAgZ2VuOV9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsIDApOw0KPiA+ICsN Cj4gPiArwqAgaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA+PSAxNCkNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgIGludGVsX3Byb2dyYW1fZGJ1Zl9wbWRlbWFuZChkZXZfcHJpdiwgMCk7DQo+ID4g fQ0KPiA+IA0KPiA+IHN0YXRpYyB2b2lkIGdlbjEyX2RidWZfc2xpY2VzX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYw0KPiA+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmRmNjQyOWU3MDU5ZA0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmMN Cj4gPiBAQCAtMCwwICsxLDQ1NSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDI0IEludGVsIENvcnBvcmF0aW9u DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiDQo+ID4gKyNpbmNsdWRlICJpOTE1X3JlZy5oIg0K PiA+ICsjaW5jbHVkZSAiaW50ZWxfYncuaCINCj4gPiArI2luY2x1ZGUgImludGVsX2NkY2xrLmgi DQo+ID4gKyNpbmNsdWRlICJpbnRlbF9jeDBfcGh5LmgiDQo+ID4gKyNpbmNsdWRlICJpbnRlbF9k ZS5oIg0KPiA+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIg0KPiA+ICsjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheV90cmFjZS5oIg0KPiA+ICsjaW5jbHVkZSAiaW50ZWxfcG1kZW1hbmQuaCINCj4g PiArI2luY2x1ZGUgInNrbF93YXRlcm1hcmsuaCINCj4gPiArDQo+ID4gK3N0cnVjdCBpbnRlbF9w bWRlbWFuZF9zdGF0ZSB7DQo+ID4gK8KgIHN0cnVjdCBpbnRlbF9nbG9iYWxfc3RhdGUgYmFzZTsN Cj4gPiArDQo+ID4gK8KgIHUxNiBxY2xrX2d2X2J3Ow0KPiA+ICvCoCB1OCB2b2x0YWdlX2luZGV4 Ow0KPiA+ICvCoCB1OCBxY2xrX2d2X2luZGV4Ow0KPiA+ICvCoCB1OCBhY3RpdmVfcGlwZXM7DQo+ ID4gK8KgIHU4IGRidWZzOw0KPiA+ICvCoCB1OCBhY3RpdmVfcGh5c19wbGxzX21hc2s7DQo+IA0K PiBJcyB1OCBlbm91Z2ggZm9yIHRoZSBtYXNrPyBUaGUgZW51bSBwaHkgc2hvd3MgOSBwb3NzaWJs ZSBQSFlfKiBtZW1iZXJzLg0KPiBBbHNvLCBJIHRoaW5rIGhhdmluZyBCVUlMRF9CVUdfT04oKSBz b21ld2hlcmUgaW4gdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZQ0KPiB3ZSBoYXZlIGVub3VnaCBiaXRz IHdvdWxkIGJlIG5pY2UuDQpUaGFua3MuIHVwZGF0ZWQuDQo+IA0KPiA+ICvCoCB1MTYgY2RjbGtf ZnJlcV9taHo7DQo+ID4gK8KgIHUxNiBkZGljbGtfZnJlcV9taHo7DQo+ID4gK8KgIHU4IHNjYWxl cnM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIHRvX2ludGVsX3BtZGVtYW5kX3N0YXRl KHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBpbnRlbF9wbWRlbWFuZF9zdGF0ZSwgYmFzZSkN Cj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICoNCj4gPiAraW50 ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqICpvYmop DQo+ID4gK3sNCj4gPiArwqAgc3RydWN0IGludGVsX3BtZGVtYW5kX3N0YXRlICpwbWRtbmRfc3Rh dGU7DQo+ID4gKw0KPiA+ICvCoCBwbWRtbmRfc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNp emVvZigqcG1kbW5kX3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ID4gK8KgIGlmICghcG1kbW5kX3N0 YXRlKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICvC oCByZXR1cm4gJnBtZG1uZF9zdGF0ZS0+YmFzZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgaW50ZWxfcG1kZW1hbmRfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgaW50ZWxfZ2xvYmFsX29i aiAqb2JqLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICpzdGF0 ZSkNCj4gPiArew0KPiA+ICvCoCBrZnJlZShzdGF0ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlX2Z1bmNzIGludGVsX3BtZGVtYW5k X2Z1bmNzID0gew0KPiA+ICvCoCAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BtZGVt YW5kX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gPiArwqAgLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50 ZWxfcG1kZW1hbmRfZGVzdHJveV9zdGF0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBz dHJ1Y3QgaW50ZWxfcG1kZW1hbmRfc3RhdGUgKg0KPiA+ICtpbnRlbF9hdG9taWNfZ2V0X3BtZGVt YW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQ0KPiA+ICt7DQo+ID4g K8KgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShzdGF0ZS0+YmFzZS5k ZXYpOw0KPiA+ICvCoCBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICpwbWRlbWFuZF9zdGF0ZTsN Cj4gPiArDQo+ID4gK8KgIHBtZGVtYW5kX3N0YXRlID0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg IGludGVsX2F0b21pY19nZXRfZ2xvYmFsX29ial9zdGF0ZShzdGF0ZSwNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJmk5MTUtPmRpc3BsYXkucG1kZW1hbmQub2JqKTsNCj4gPiAr wqAgaWYgKElTX0VSUihwbWRlbWFuZF9zdGF0ZSkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gRVJSX0NBU1QocG1kZW1hbmRfc3RhdGUpOw0KPiA+ICsNCj4gPiArwqAgcmV0dXJuIHRv X2ludGVsX3BtZGVtYW5kX3N0YXRlKHBtZGVtYW5kX3N0YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHN0cnVjdCBpbnRlbF9wbWRlbWFuZF9zdGF0ZSAqDQo+ID4gK2ludGVsX2F0b21p Y19nZXRfb2xkX3BtZGVtYW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRl KQ0KPiA+ICt7DQo+ID4gK8KgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkx NShzdGF0ZS0+YmFzZS5kZXYpOw0KPiA+ICvCoCBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICpw bWRlbWFuZF9zdGF0ZTsNCj4gPiArDQo+ID4gK8KgIHBtZGVtYW5kX3N0YXRlID0gaW50ZWxfYXRv bWljX2dldF9vbGRfZ2xvYmFsX29ial9zdGF0ZShzdGF0ZSwgJmk5MTUtPmRpc3BsYXkucG1kZW1h bmQub2JqKTsNCj4gDQo+IFdvdWxkbid0IGl0IGJlIHNhZmVyIGlmIHdlIHJldHVybmVkIGVhcmx5 IGhlcmUgd2hlbiBwbWRlbWFuZF9zdGF0ZSBpcw0KPiBOVUxMPw0KPiANCj4gSSB0aGluayB0b19p bnRlbF9wbWRlbWFuZF9zdGF0ZShOVUxMKSBwbWRlbWFuZF9zdGF0ZSBqdXN0IGhhcHBlbnMgdG8N Cj4gd29yayAoaS5lLiBzdGlsbCByZXR1cm5zIE5VTEwpIGJlY2F1c2UgdGhlICJiYXNlIiBtZW1i ZXIgaXMgYXQgdGhlDQo+IGJlZ2lubmluZyBvZiB0aGUgc3RydWN0LiBIb3dldmVyLCB3ZSBzaG91 bGRuJ3QgcmVseSBvbiB0aGF0IElNTy4NCg0KV2VsbC4gSXQgaXMgYSB2YWxpZCBwb2ludC4gQnV0 IHRoZSBiYXNlIHBvaW50ZXIgaXMgdGhlIGZpcnN0IG1lbWJlciBmb3IgZXhhY2x0eSB0aGUgcmVh c29uIHlvdQ0KcG9pbnRlZCBvdXQuIFNvICB0byBwcmV2ZW50IHNvbWVvbmUgZnJvbSBhY2NpZGVu dGFsbHkgbW92ZSB0aGF0ICJiYXNlIiBmcm9tIHRoYXQgcG9zaXRpb24sIEkgYWRkZWQgYQ0KQlVJ TERfQlVHX09OKCkgY2hlY2suIFRoZXJlIGFyZSBmZXcgb3RoZXIgc3RhdGUgb2JqZWN0cyB3aGlj aCBsYWNrIHN1Y2ggYSBjaGVjay4gSSB3aWxsIGFkZHJlc3MgdGhhdA0KYXMgYSBzZXBhcmF0ZSBw YXRjaC4NCg0KPiANCj4gPiArDQo+ID4gK8KgIHJldHVybiB0b19pbnRlbF9wbWRlbWFuZF9zdGF0 ZShwbWRlbWFuZF9zdGF0ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaW50 ZWxfcG1kZW1hbmRfc3RhdGUgKg0KPiA+ICtpbnRlbF9hdG9taWNfZ2V0X25ld19wbWRlbWFuZF9z dGF0ZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICvCoCBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoc3RhdGUtPmJhc2UuZGV2KTsN Cj4gPiArwqAgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZSAqcG1kZW1hbmRfc3RhdGU7DQo+ID4g Kw0KPiA+ICvCoCBwbWRlbWFuZF9zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfbmV3X2dsb2JhbF9v Ympfc3RhdGUoc3RhdGUsICZpOTE1LT5kaXNwbGF5LnBtZGVtYW5kLm9iaik7DQo+IA0KPiBKdXN0 IGFzIHdpdGggaW50ZWxfYXRvbWljX2dldF9vbGRfcG1kZW1hbmRfc3RhdGUoKSwgc2hvdWxkbid0 IHdlIHJldHVybg0KPiBlYXJseSBpZiBwbWRlbWFuZF9zdGF0ZSBpcyBOVUxMIGhlcmU/DQo+IA0K PiA+ICsNCj4gPiArwqAgcmV0dXJuIHRvX2ludGVsX3BtZGVtYW5kX3N0YXRlKHBtZGVtYW5kX3N0 YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IGludGVsX3BtZGVtYW5kX3N0YXRlX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpDQo+ID4gK3sNCj4gPiArwqAgc3RydWN0IGlu dGVsX3BtZGVtYW5kX3N0YXRlICpwbWRlbWFuZF9zdGF0ZTsNCj4gPiArDQo+ID4gK8KgIHBtZGVt YW5kX3N0YXRlID0ga3phbGxvYyhzaXplb2YoKnBtZGVtYW5kX3N0YXRlKSwgR0ZQX0tFUk5FTCk7 DQo+ID4gK8KgIGlmICghcG1kZW1hbmRfc3RhdGUpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gK8KgIGludGVsX2F0b21pY19nbG9iYWxfb2JqX2lu aXQoaTkxNSwgJmk5MTUtPmRpc3BsYXkucG1kZW1hbmQub2JqLA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBtZGVtYW5k X3N0YXRlLT5iYXNlLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmludGVsX3BtZGVtYW5kX2Z1bmNzKTsNCj4gPiArDQo+ ID4gKw0KPiA+ICvCoCBpZiAoSVNfTVRMX0RJU1BMQVlfU1RFUChpOTE1LCBTVEVQX0EwLCBTVEVQ X0MwKSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFdhXzE0MDE2NzQwNDc0ICovDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9kZV9ybXcoaTkxNSwgWEVMUERfQ0hJQ0tFTl9EQ1BS XzMsIDAsIERNRF9SU1BfVElNRU9VVF9ESVNBQkxFKTsNCj4gPiArDQo+ID4gK8KgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIGludGVsX3BtZGVtYW5kX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpDQo+ID4gK3sNCj4gPiArwqAgbXV0ZXhfaW5pdCgmaTkxNS0+ ZGlzcGxheS5wbWRlbWFuZC5sb2NrKTsNCj4gPiArwqAgaW5pdF93YWl0cXVldWVfaGVhZCgmaTkx NS0+ZGlzcGxheS5wbWRlbWFuZC53YWl0cXVldWUpOw0KPiA+ICt9DQo+IA0KPiBUaGUgZnVuY3Rp b25zIGludGVsX3BtZGVtYW5kX3N0YXRlX2luaXQoKSBhbmQgaW50ZWxfcG1kZW1hbmRfaW5pdCgp IGFyZQ0KPiBib3RoIGNhbGxlZCBmcm9tIHRoZSBzYW1lIHBsYWNlLiBGdXJ0aGVybW9yZSwNCj4g aW50ZWxfcG1kZW1hbmRfc3RhdGVfaW5pdCgpIGlzbid0IG9ubHkgaW5pdGlhbGl6aW5nIHRoZSBz dGF0ZSwgYXMgdGhlDQo+IFdhXzE0MDE2NzQwNDc0IHdvcmthcm91bmQgaXMgcHJvZ3JhbW1lZCB0 aGVyZS4gQ291bGQgd2UgaGF2ZSBvbmx5IHRoZQ0KPiBmdW5jdGlvbiBpbnRlbF9wbWRlbWFuZF9p bml0KCkgYW5kIGluY29ycG9yYXRlIHdoYXQNCj4gaW50ZWxfcG1kZW1hbmRfc3RhdGVfaW5pdCgp IGRvZXMgaW4gaXQ/DQoNCkkgdHJpZWQgdGhhdCBlYXJsaWVyIGFuZCB3YXNuJ3QgcG9zc2libGUu IEJlY2F1c2UgdGhlIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odygpIHdpbGwgY2FsbCB0aGUN CnBtZGVtYW5kIGRlYnVmIGNvbmZpZy4gQW5kIEkgY2FuJ3QgcmVjYWxsIHRoZSBvdGhlciBpc3N1 ZS4gQnV0IEkgd2lsbCBjb25maXJtIHRoaXMgYWdhaW4gYW5kIHVwZGF0ZQ0KYXMgSSBhbSBub3Qg YWJsZSB0byB0cnkgdGhpcyBsb2NhbGx5Lg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHBt ZGVtYW5kX25lZWRzX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkNCj4g PiArew0KPiA+ICvCoCBib29sIGNoYW5nZWQgPSBmYWxzZTsNCj4gPiArwqAgc3RydWN0IGludGVs X2NydGMgKmNydGM7DQo+ID4gK8KgIGludCBpOw0KPiA+ICvCoCBjb25zdCBzdHJ1Y3QgaW50ZWxf Yndfc3RhdGUgKm5ld19id19zdGF0ZSwgKm9sZF9id19zdGF0ZTsNCj4gPiArwqAgY29uc3Qgc3Ry dWN0IGludGVsX2NkY2xrX3N0YXRlICpuZXdfY2RjbGtfc3RhdGU7DQo+ID4gK8KgIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwgKm9sZF9jcnRjX3N0YXRlOw0K PiA+ICvCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfZGJ1Zl9zdGF0ZSAqbmV3X2RidWZfc3RhdGUsICpv bGRfZGJ1Zl9zdGF0ZTsNCj4gPiArDQo+ID4gK8KgIGZvcl9lYWNoX29sZG5ld19pbnRlbF9jcnRj X2luX3N0YXRlKHN0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbmV3X2NydGNfc3RhdGUsIGkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIG5ld19i d19zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfbmV3X2J3X3N0YXRlKHN0YXRlKTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgIG9sZF9id19zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfb2xkX2J3X3N0 YXRlKHN0YXRlKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBuZXdfZGJ1Zl9zdGF0 ZSA9IGludGVsX2F0b21pY19nZXRfbmV3X2RidWZfc3RhdGUoc3RhdGUpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqAgb2xkX2RidWZfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X29sZF9kYnVmX3N0 YXRlKHN0YXRlKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBuZXdfY2RjbGtfc3Rh dGUgPSBpbnRlbF9hdG9taWNfZ2V0X25ld19jZGNsa19zdGF0ZShzdGF0ZSk7DQo+ID4gKw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKChuZXdfYndfc3RhdGUgJiYgbmV3X2J3X3N0YXRlLT5x Z3ZfcG9pbnRfcGVha2J3ICE9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2xk X2J3X3N0YXRlLT5xZ3ZfcG9pbnRfcGVha2J3KSB8fA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAobmV3X2RidWZfc3RhdGUgJiYgbmV3X2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyAh PQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9sZF9kYnVmX3N0YXRlLT5hY3Rp dmVfcGlwZXMpIHx8IG5ld19jZGNsa19zdGF0ZSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjaGFuZ2VkID0gdHJ1ZTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoCAvKg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGJyZWFrIG5lZWRzIHRvIGJlIHJl bW92ZWQsIGlmIHNvbWUgY3J0Y19zdGF0ZSBkZXBlbmRlbnQNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBwYXJhbWV0ZXJzIGFyZSBhZGRlZCBoZXJlDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gPiArwqAgfQ0KPiA+ICsN Cj4gPiArwqAgcmV0dXJuIGNoYW5nZWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBpbnRlbF9w bWRlbWFuZF9hdG9taWNfY2hlY2soc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ ID4gK3sNCj4gPiArwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHN0 YXRlLT5iYXNlLmRldik7DQo+ID4gK8KgIGludCBwb3J0X2Nsb2NrID0gMDsNCj4gPiArwqAgc3Ry dWN0IGludGVsX2NydGMgKmNydGM7DQo+ID4gK8KgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyOw0KPiA+ICvCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKm5ld19id19zdGF0ZTsN Cj4gPiArwqAgY29uc3Qgc3RydWN0IGludGVsX2NkY2xrX3N0YXRlICpuZXdfY2RjbGtfc3RhdGU7 DQo+ID4gK8KgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwg Km9sZF9jcnRjX3N0YXRlOw0KPiA+ICvCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfZGJ1Zl9zdGF0ZSAq bmV3X2RidWZfc3RhdGU7DQo+ID4gK8KgIHN0cnVjdCBpbnRlbF9wbWRlbWFuZF9zdGF0ZSAqbmV3 X3BtZGVtYW5kX3N0YXRlOw0KPiA+ICvCoCBlbnVtIHBoeSBwaHk7DQo+ID4gK8KgIGludCBpLCBy ZXQ7DQo+ID4gKw0KPiA+ICvCoCBpZiAoRElTUExBWV9WRVIoaTkxNSkgPCAxNCkNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArwqAgaWYgKCFwbWRlbWFuZF9u ZWVkc191cGRhdGUoc3RhdGUpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+ ID4gKw0KPiA+ICvCoCBuZXdfcG1kZW1hbmRfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X3BtZGVt YW5kX3N0YXRlKHN0YXRlKTsNCj4gPiArwqAgaWYgKElTX0VSUihuZXdfcG1kZW1hbmRfc3RhdGUp KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIobmV3X3BtZGVtYW5kX3N0 YXRlKTsNCj4gPiArDQo+ID4gK8KgIHJldCA9IGludGVsX2F0b21pY19sb2NrX2dsb2JhbF9zdGF0 ZSgmbmV3X3BtZGVtYW5kX3N0YXRlLT5iYXNlKTsNCj4gPiArwqAgaWYgKHJldCkNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICvCoCAvKiBQdW5pdCBmaWd1 cmVzIG91dCB0aGUgdm9sdGFnZSBpbmRleCBiYXNlZCBvbiBiYW5kd2lkdGgqLw0KPiA+ICvCoCBu ZXdfYndfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2J3X3N0YXRlKHN0YXRlKTsNCj4gPiArwqAg aWYgKElTX0VSUihuZXdfYndfc3RhdGUpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlIobmV3X2J3X3N0YXRlKTsNCj4gPiArDQo+ID4gK8KgIC8qIGZpcm13YXJlIHdpbGwg Y2FsY3VsYXRlIHRoZSBxY2xja19nY19pbmRleCwgcmVxdWlyZW1lbnQgaXMgc2V0IHRvIDAgKi8N Cj4gPiArwqAgbmV3X3BtZGVtYW5kX3N0YXRlLT5xY2xrX2d2X2luZGV4ID0gMDsNCj4gPiArwqAg bmV3X3BtZGVtYW5kX3N0YXRlLT5xY2xrX2d2X2J3ID0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg IG1pbl90KHUxNiwgbmV3X2J3X3N0YXRlLT5xZ3ZfcG9pbnRfcGVha2J3LCAweGZmZmYpOw0KPiA+ ICsNCj4gPiArwqAgbmV3X2RidWZfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2RidWZfc3RhdGUo c3RhdGUpOw0KPiA+ICvCoCBpZiAoSVNfRVJSKG5ld19kYnVmX3N0YXRlKSkNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKG5ld19kYnVmX3N0YXRlKTsNCj4gPiArDQo+ID4g K8KgIGkgPSBod2VpZ2h0OChuZXdfZGJ1Zl9zdGF0ZS0+YWN0aXZlX3BpcGVzKTsNCj4gPiArwqAg bmV3X3BtZGVtYW5kX3N0YXRlLT5hY3RpdmVfcGlwZXMgPSBtaW4oaSwgMyk7DQo+ID4gKw0KPiA+ ICvCoCBuZXdfY2RjbGtfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2NkY2xrX3N0YXRlKHN0YXRl KTsNCj4gPiArwqAgaWYgKElTX0VSUihuZXdfY2RjbGtfc3RhdGUpKQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIobmV3X2NkY2xrX3N0YXRlKTsNCj4gPiArDQo+ID4gK8Kg IG5ld19wbWRlbWFuZF9zdGF0ZS0+dm9sdGFnZV9pbmRleCA9DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoCBuZXdfY2RjbGtfc3RhdGUtPmxvZ2ljYWwudm9sdGFnZV9sZXZlbDsNCj4gPiArwqAgLyog S0h6IHRvIE1IeiAqLw0KPiA+ICvCoCBuZXdfcG1kZW1hbmRfc3RhdGUtPmNkY2xrX2ZyZXFfbWh6 ID0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIERJVl9ST1VORF9VUChuZXdfY2RjbGtfc3RhdGUt PmxvZ2ljYWwuY2RjbGssIDEwMDApOw0KPiA+ICsNCj4gPiArwqAgbmV3X3BtZGVtYW5kX3N0YXRl LT5hY3RpdmVfcGh5c19wbGxzX21hc2sgPSAwOw0KPiA+ICsNCj4gPiArwqAgZm9yX2VhY2hfb2xk bmV3X2ludGVsX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLA0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuZXdfY3J0Y19zdGF0ZSwgaSkgew0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCFuZXdfY3J0Y19zdGF0ZS0+aHcuYWN0aXZlKQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgIGVuY29kZXIgPSBpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2RlcihzdGF0ZSwgbmV3 X2NydGNfc3RhdGUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFlbmNvZGVyKQ0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgIHBoeSA9IGludGVsX3BvcnRfdG9fcGh5KGk5MTUsIGVuY29k ZXItPnBvcnQpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpbnRlbF9pc19j MTBwaHkoaTkxNSwgcGh5KSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBuZXdfcG1kZW1hbmRfc3RhdGUtPmFjdGl2ZV9waHlzX3BsbHNfbWFzayB8PSBCSVQocGh5KTsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBwb3J0X2Nsb2NrID0gbWF4KHBvcnRfY2xv Y2ssIG5ld19jcnRjX3N0YXRlLT5wb3J0X2Nsb2NrKTsNCj4gPiArwqAgfQ0KPiANCj4gQXMgcHJl dmlvdXNseSBub3RlZCBpbiBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gv NTMwNDk1wqAsDQo+IEknbSB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoaXMgbG9vcCB3b3Vs ZCBub3QgbGV0IHVzIGFjY291bnQgZm9yIGFsDQo+IGFjdGl2ZSBjcnRjcywgb25seSB0aG9zZSBj dXJyZW50bHkgYmVpbmcgdG91Y2hlZCBieSB0aGlzIGF0b21pYw0KPiB0cmFuc2FjdGlvbi4gQW0g SSB3cm9uZyB0byBhc3N1bWUgdGhhdA0KPiBmb3JfZWFjaF9vbGRuZXdfaW50ZWxfY3J0Y19pbl9z dGF0ZSgpIHdvdWxkIG9ubHkgaXRlcmF0ZSBvdmVyIGNydGNzDQo+IHRvdWNoZWQgYnkgdGhlIGF0 b21pYyB1cGRhdGU/DQoNCkkgY2hlY2tlZCB0aGUgaW50ZWxfYndfY2hlY2tfZGF0YV9yYXRlKCkg d2hpY2ggc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGluZyBzaW1pbGFyIHRvIGZpbmQgb3V0IGFib3V0 DQp0aGUgZGF0YXJhdGUgZnJvbSBlYWNoaSBwaXBlIGFuZCBmaWd1cmUgb3V0IHRoZSB0b3RhbCBk YXRhIHJhdGUuIFNvIEkgdGhvdWdodCB0aGlzIHNob3VsZCBiZQ0Kc3VmZmljaWVudC4gDQoNCj4g DQo+ID4gKw0KPiA+ICvCoCAvKiBUbyBNSHogKi8NCj4gPiArwqAgbmV3X3BtZGVtYW5kX3N0YXRl LT5kZGljbGtfZnJlcV9taHogPSBESVZfUk9VTkRfVVAocG9ydF9jbG9jaywgMTAwMCk7DQo+ID4g Kw0KPiA+ICvCoCAvKg0KPiA+ICvCoMKgICogU2V0dGluZyBzY2FsZXJzIHRvIG1heCBhcyBpdCBj YW4gbm90IGJlIGNhbGN1bGF0ZWQgZHVyaW5nIGZsaXBzIGFuZA0KPiA+ICvCoMKgICogZmFzdHNl dHMgd2l0aG91dCB0YWtpbmcgZ2xvYmFsIHN0YXRlcyBsb2Nrcy4NCj4gPiArwqDCoCAqLw0KPiA+ ICvCoCBuZXdfcG1kZW1hbmRfc3RhdGUtPnNjYWxlcnMgPSA3Ow0KPiA+ICsNCj4gPiArwqAgcmV0 ID0gaW50ZWxfYXRvbWljX3NlcmlhbGl6ZV9nbG9iYWxfc3RhdGUoJm5ld19wbWRlbWFuZF9zdGF0 ZS0+YmFzZSk7DQo+ID4gK8KgIGlmIChyZXQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Ow0KPiA+ICsNCj4gPiArwqAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBib29sIGludGVsX3BtZGVtYW5kX2NoZWNrX3ByZXZfdHJhbnNhY3Rpb24oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpDQo+ID4gK3sNCj4gPiArwqAgcmV0dXJuICEoKGludGVsX2Rl X3JlYWQoaTkxNSwgWEVMUERQX0lOSVRJQVRFX1BNREVNQU5EX1JFUVVFU1QoMSkpICYNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRUxQRFBfUE1ERU1BTkRfUkVRX0VOQUJMRSkgfHwNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgIChpbnRlbF9kZV9yZWFkKGk5MTUsIEdFTjEyX0RDUFJfU1RB VFVTXzEpICYNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVMUERQX1BNREVNQU5EX0lORkxJ R0hUX1NUQVRVUykpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBpbnRlbF9wbWRl bWFuZF9yZXFfY29tcGxldGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpDQo+ID4gK3sN Cj4gPiArwqAgcmV0dXJuICEoaW50ZWxfZGVfcmVhZChpOTE1LCBYRUxQRFBfSU5JVElBVEVfUE1E RU1BTkRfUkVRVUVTVCgxKSkgJg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRUxQRFBfUE1E RU1BTkRfUkVRX0VOQUJMRSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaW50ZWxf cG1kZW1hbmRfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkNCj4gPiArew0KPiA+ ICvCoCBERUZJTkVfV0FJVCh3YWl0KTsNCj4gPiArwqAgaW50IHJldDsNCj4gPiArwqAgY29uc3Qg dW5zaWduZWQgaW50IHRpbWVvdXRfbXMgPSAxMDsNCj4gPiArDQo+ID4gK8KgIHJldCA9IHdhaXRf ZXZlbnRfdGltZW91dChpOTE1LT5kaXNwbGF5LnBtZGVtYW5kLndhaXRxdWV1ZSwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9w bWRlbWFuZF9yZXFfY29tcGxldGUoaTkxNSksDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNlY3NfdG9famlmZmllc190aW1lb3V0KHRp bWVvdXRfbXMpKTsNCj4gPiArwqAgaWYgKHJldCA9PSAwKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqAgZHJtX2VycigmaTkxNS0+ZHJtLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgUHVuaXQgUE0gRGVtYW5kIFJlc3BvbnNlXG4i KTsNCj4gPiArDQo+ID4gK8KgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIFJl cXVpcmVkIHRvIGJlIHByb2dyYW1tZWQgZHVyaW5nIERpc3BsYXkgSW5pdCBTZXF1ZW5jZXMuICov DQo+ID4gK3ZvaWQgaW50ZWxfcHJvZ3JhbV9kYnVmX3BtZGVtYW5kKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHU4IGRidWZfc2xpY2VzKQ0KPiA+ICt7DQo+ID4gK8KgIHUzMiBkYnVm cyA9IG1pbl90KHUzMiwgaHdlaWdodDgoZGJ1Zl9zbGljZXMpLCAzKTsNCj4gPiArDQo+ID4gK8Kg IG11dGV4X2xvY2soJmk5MTUtPmRpc3BsYXkucG1kZW1hbmQubG9jayk7DQo+ID4gK8KgIGlmIChk cm1fV0FSTl9PTigmaTkxNS0+ZHJtLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICFpbnRlbF9wbWRlbWFuZF9jaGVja19wcmV2X3RyYW5zYWN0aW9uKGk5MTUpKSkNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gdW5sb2NrOw0KPiA+ICsNCj4gPiArwqAgaW50ZWxf ZGVfcm13KGk5MTUsIFhFTFBEUF9JTklUSUFURV9QTURFTUFORF9SRVFVRVNUKDApLA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhFTFBEUF9QTURFTUFORF9EQlVGU19NQVNLLCBY RUxQRFBfUE1ERU1BTkRfREJVRlMoZGJ1ZnMpKTsNCj4gPiArwqAgaW50ZWxfZGVfcm13KGk5MTUs IFhFTFBEUF9JTklUSUFURV9QTURFTUFORF9SRVFVRVNUKDEpLCAwLA0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFhFTFBEUF9QTURFTUFORF9SRVFfRU5BQkxFKTsNCj4gPiArDQo+ ID4gK8KgIGludGVsX3BtZGVtYW5kX3dhaXQoaTkxNSk7DQo+ID4gKw0KPiA+ICt1bmxvY2s6DQo+ ID4gK8KgIG11dGV4X3VubG9jaygmaTkxNS0+ZGlzcGxheS5wbWRlbWFuZC5sb2NrKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdXBkYXRlX3BtZGVtYW5kX3ZhbHVlcyhjb25zdCBz dHJ1Y3QgaW50ZWxfcG1kZW1hbmRfc3RhdGUgKm5ldywNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGludGVs X3BtZGVtYW5kX3N0YXRlICpvbGQsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiAqcmVnMSwgdTMyICpyZWcyKQ0KPiA+ICt7 DQo+ID4gK8KgIHUzMiBwbGxzLCB0bXA7DQo+ID4gKw0KPiA+ICvCoCAvKg0KPiA+ICvCoMKgICog VGhlIHBtZGVtYW5kIHBhcmFtZXRlciB1cGRhdGVzIGhhcHBlbnMgaW4gdHdvIHN0ZXBzLiBQcmUg cGxhbmUgYW5kDQo+ID4gK8KgwqAgKiBwb3N0IHBsYW5lIHVwZGF0ZXMuIER1cmluZyB0aGUgcHJl IHBsYW5lLCBhcyBERSBtaWdodCBzdGlsbCBiZQ0KPiA+ICvCoMKgICogaGFuZGxpbmcgd2l0aCBz b21lIG9sZCBvcGVyYXRpb25zLCB0byBhdm9pZCB1bndhbnRlZCBwZXJmb3JtYW5jZQ0KPiA+ICvC oMKgICogaXNzdWVzLCBwcm9ncmFtIHRoZSBwbWRlbWFuZCBwYXJhbWV0ZXJzIHdpdGggaGlnaGVy IG9mIG9sZCBhbmQgbmV3DQo+ID4gK8KgwqAgKiB2YWx1ZXMuIEFuZCB0aGVuIGFmdGVyIG9uY2Ug c2V0dGxlZCwgdXNlIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcw0KPiA+ICvCoMKgICogYXMgcGFy dCBvZiB0aGUgcG9zdCBwbGFuZSB1cGRhdGUuDQo+ID4gK8KgwqAgKi8NCj4gPiArDQo+ID4gK8Kg IC8qIFNldCAxKi8NCj4gPiArwqAgKnJlZzEgJj0gflhFTFBEUF9QTURFTUFORF9RQ0xLX0dWX0JX X01BU0s7DQo+ID4gK8KgIHRtcCA9IG9sZCA/IG1heChvbGQtPnFjbGtfZ3ZfYncsIG5ldy0+cWNs a19ndl9idykgOiBuZXctPnFjbGtfZ3ZfYnc7DQo+ID4gK8KgICpyZWcxIHw9IFhFTFBEUF9QTURF TUFORF9RQ0xLX0dWX0JXKHRtcCk7DQo+ID4gKw0KPiA+ICvCoCAqcmVnMSAmPSB+WEVMUERQX1BN REVNQU5EX1ZPTFRBR0VfSU5ERVhfTUFTSzsNCj4gPiArwqAgdG1wID0gb2xkID8gbWF4KG9sZC0+ dm9sdGFnZV9pbmRleCwgbmV3LT52b2x0YWdlX2luZGV4KSA6DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG5ldy0+dm9sdGFnZV9pbmRleDsNCj4gPiArwqAgKnJlZzEgfD0gWEVMUERQ X1BNREVNQU5EX1ZPTFRBR0VfSU5ERVgodG1wKTsNCj4gPiArDQo+ID4gK8KgICpyZWcxICY9IH5Y RUxQRFBfUE1ERU1BTkRfUUNMS19HVl9JTkRFWF9NQVNLOw0KPiA+ICvCoCB0bXAgPSBvbGQgPyBt YXgob2xkLT5xY2xrX2d2X2luZGV4LCBuZXctPnFjbGtfZ3ZfaW5kZXgpIDoNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3LT5xY2xrX2d2X2luZGV4Ow0KPiA+ICvCoCAqcmVnMSB8 PSBYRUxQRFBfUE1ERU1BTkRfUUNMS19HVl9JTkRFWCh0bXApOw0KPiA+ICsNCj4gPiArwqAgKnJl ZzEgJj0gflhFTFBEUF9QTURFTUFORF9QSVBFU19NQVNLOw0KPiA+ICvCoCB0bXAgPSBvbGQgPyBt YXgob2xkLT5hY3RpdmVfcGlwZXMsIG5ldy0+YWN0aXZlX3BpcGVzKSA6DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5ldy0+YWN0aXZlX3BpcGVzOw0KPiA+ICvCoCAqcmVnMSB8PSBY RUxQRFBfUE1ERU1BTkRfUElQRVModG1wKTsNCj4gPiArDQo+ID4gK8KgICpyZWcxICY9IH5YRUxQ RFBfUE1ERU1BTkRfUEhZU19NQVNLOw0KPiA+ICvCoCBwbGxzID0gaHdlaWdodDMyKG5ldy0+YWN0 aXZlX3BoeXNfcGxsc19tYXNrKTsNCj4gPiArwqAgaWYgKG9sZCkNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgIHBsbHMgPSBtYXgocGxscywgaHdlaWdodDMyKG9sZC0+YWN0aXZlX3BoeXNfcGxsc19t YXNrKSk7DQo+ID4gK8KgICpyZWcxIHw9IFhFTFBEUF9QTURFTUFORF9QSFlTKHBsbHMpOw0KPiAN Cj4gSWYgcGxscyA+IDcsIHdlIHdvdWxkIGJlIHBvdGVudGlhbGx5IHByb2dyYW1taW5nIHRoaXMg d3JvbmcgKGUuZy4gZm9yDQo+IHBsbHM9OCwgd2Ugd291bGQgc2V0dGluZyB0aGUgZmllbGQgdG8g MCkuDQoNClRoYW5rcyBmb3IgcG9pbnRpbmcgdGhhdCBvdXQuIEZpeGVkLg0KDQo+IA0KPiA+ICsN Cj4gPiArwqAgLyogU2V0IDIqLw0KPiA+ICvCoCAqcmVnMiAmPSB+WEVMUERQX1BNREVNQU5EX0NE Q0xLX0ZSRVFfTUFTSzsNCj4gPiArwqAgdG1wID0gb2xkID8gbWF4KG9sZC0+Y2RjbGtfZnJlcV9t aHosIG5ldy0+Y2RjbGtfZnJlcV9taHopIDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmV3LT5jZGNsa19mcmVxX21oejsNCj4gPiArwqAgKnJlZzIgfD0gWEVMUERQX1BNREVNQU5E X0NEQ0xLX0ZSRVEodG1wKTsNCj4gPiArDQo+ID4gK8KgICpyZWcyICY9IH5YRUxQRFBfUE1ERU1B TkRfRERJQ0xLX0ZSRVFfTUFTSzsNCj4gPiArwqAgdG1wID0gb2xkID8gbWF4KG9sZC0+ZGRpY2xr X2ZyZXFfbWh6LCBuZXctPmRkaWNsa19mcmVxX21oeikgOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBuZXctPmRkaWNsa19mcmVxX21oejsNCj4gPiArwqAgKnJlZzIgfD0gWEVMUERQ X1BNREVNQU5EX0RESUNMS19GUkVRKHRtcCk7DQo+ID4gKw0KPiA+ICvCoCAvKiBIYXJkIGNvZGUg c2NhbGVycyB0byA3Ki8NCj4gDQo+IEkgdGhpbmsgdGhpcyBjb21tZW50IGNhbiBiZSBkcm9wcGVk OiB0aGUgaGFyZGNvZGluZyBoYXBwZW5zIGluDQo+IGludGVsX3BtZGVtYW5kX2F0b21pY19jaGVj aygpLg0KDQpEb25lDQo+IA0KPiA+ICvCoCAqcmVnMiAmPSB+WEVMUERQX1BNREVNQU5EX1NDQUxF UlNfTUFTSzsNCj4gPiArwqAgdG1wID0gb2xkID8gbWF4KG9sZC0+c2NhbGVycywgbmV3LT5zY2Fs ZXJzKSA6IG5ldy0+c2NhbGVyczsNCj4gPiArwqAgKnJlZzIgfD0gWEVMUERQX1BNREVNQU5EX1ND QUxFUlModG1wKTsNCj4gPiArDQo+ID4gK8KgIC8qDQo+ID4gK8KgwqAgKiBBY3RpdmVfUExMcyBz dGFydHMgd2l0aCAxIGJlY2F1c2Ugb2YgQ0RDTEsgUExMLg0KPiA+ICvCoMKgICogVE9ETzogTWlz c2luZyB0byBhY2NvdW50IGdlbmxvY2sgZmlsdGVyIHdoZW4gaXQgZ2V0cyB1c2VkLg0KPiA+ICvC oMKgICovDQo+ID4gK8KgICpyZWcyICY9IH5YRUxQRFBfUE1ERU1BTkRfUExMU19NQVNLOw0KPiAN Cj4gSSB0aGluayB3ZSBhcmUgbWlzc2luZyB0aGUgdGVybmFyeSBvcGVyYXRvciBoZXJlIHRvIHNl bGVjdCB0aGUgbWF4aW11bQ0KPiB2YWx1ZSBmb3IgdGhlIHByZS1wbGFuZSBjYXNlLg0KQXMgcGV0 IHRoZSBhYm92ZSBjb21tZW50cywgaXQgaXMganVzdCB0aGUgcGxscyBmcm9tIHN0ZXAgZWFybGll ciArIDENCg0KPiANCj4gPiArwqAgKnJlZzIgfD0gWEVMUERQX1BNREVNQU5EX1BMTFMocGxscyAr IDEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBpbnRlbF9wcm9ncmFtX3BtZGVt YW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgaW50 ZWxfcG1kZW1hbmRfc3RhdGUgKm5ldywNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGludGVsX3BtZGVtYW5k X3N0YXRlICpvbGQpDQo+ID4gK3sNCj4gPiArwqAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7DQo+ID4g K8KgIHUzMiByZWcxLCBtb2RfcmVnMTsNCj4gPiArwqAgdTMyIHJlZzIsIG1vZF9yZWcyOw0KPiA+ ICsNCj4gPiArwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZGlzcGxheS5wbWRlbWFuZC5sb2NrKTsNCj4g PiArwqAgaWYgKGRybV9XQVJOX09OKCZpOTE1LT5kcm0sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgIWludGVsX3BtZGVtYW5kX2NoZWNrX3ByZXZfdHJhbnNhY3Rpb24o aTkxNSkpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2s7DQo+IA0KPiBBY2Nv cmRpbmcgdG8gdGhlIHNwZWMsIHdlIHNob3VsZCB3YWl0IGFuZCB0aW1lb3V0IGFmdGVyIDEwbXMg aGVyZS4NCj4gDQo+ID4gKw0KPiA+ICvCoCByZWcxID0gaW50ZWxfZGVfcmVhZChpOTE1LCBYRUxQ RFBfSU5JVElBVEVfUE1ERU1BTkRfUkVRVUVTVCgwKSk7DQo+ID4gK8KgIG1vZF9yZWcxID0gcmVn MTsNCj4gPiArDQo+ID4gK8KgIHJlZzIgPSBpbnRlbF9kZV9yZWFkKGk5MTUsIFhFTFBEUF9JTklU SUFURV9QTURFTUFORF9SRVFVRVNUKDEpKTsNCj4gPiArwqAgbW9kX3JlZzIgPSByZWcyOw0KPiA+ ICsNCj4gPiArwqAgdXBkYXRlX3BtZGVtYW5kX3ZhbHVlcyhuZXcsIG9sZCwgJm1vZF9yZWcxLCAm bW9kX3JlZzIpOw0KPiA+ICsNCj4gPiArwqAgaWYgKHJlZzEgIT0gbW9kX3JlZzEpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2RlX3dyaXRlKGk5MTUsIFhFTFBEUF9JTklUSUFURV9Q TURFTUFORF9SRVFVRVNUKDApLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbW9kX3JlZzEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgY2hh bmdlZCA9IHRydWU7DQo+ID4gK8KgIH0NCj4gPiArDQo+ID4gK8KgIGlmIChyZWcyICE9IG1vZF9y ZWcyKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9kZV93cml0ZShpOTE1LCBYRUxQ RFBfSU5JVElBVEVfUE1ERU1BTkRfUkVRVUVTVCgxKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vZF9yZWcyKTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgIGNoYW5nZWQgPSB0cnVlOw0KPiA+ICvCoCB9DQo+ID4gKw0KPiA+ICvCoCAvKiBJ bml0aWF0ZSBwbSBkZW1hbmQgcmVxdWVzdCBvbmx5IGlmIHJlZ2lzdGVyIHZhbHVlcyBhcmUgY2hh bmdlZCAqLw0KPiA+ICvCoCBpZiAoY2hhbmdlZCkgew0KPiANCj4gTml0cGljazogd2UgY291bGQg aGF2ZQ0KPiANCj4gwqDCoMKgIGlmICghY2hhbmdlZCkNCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIHVubG9jazsNCj4gDQo+IGFuZCBkZWRlbnQgdGhlIGJsb2NrIGJlbG93Lg0KDQpEb25l Lg0KPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9kYmdfa21zKCZpOTE1LT5kcm0sDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaW5pdGF0ZSBw bWRlbWFuZCByZXF1ZXN0IHZhbHVlczogKDB4JXggMHgleClcbiIsDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtb2RfcmVnMSwgbW9kX3JlZzIpOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2RlX3JtdyhpOTE1LCBYRUxQRFBfSU5J VElBVEVfUE1ERU1BTkRfUkVRVUVTVCgxKSwgMCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVMUERQX1BNREVNQU5EX1JFUV9FTkFCTEUpOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX3BtZGVtYW5kX3dhaXQoaTkxNSk7DQo+ ID4gK8KgIH0NCj4gPiArDQo+ID4gK3VubG9jazoNCj4gPiArwqAgbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kaXNwbGF5LnBtZGVtYW5kLmxvY2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9v bA0KPiA+ICtpbnRlbF9wbWRlbWFuZF9zdGF0ZV9jaGFuZ2VkKGNvbnN0IHN0cnVjdCBpbnRlbF9w bWRlbWFuZF9zdGF0ZSAqbmV3LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfcG1kZW1hbmRfc3RhdGUgKm9sZCkNCj4g PiArew0KPiA+ICvCoCByZXR1cm4gbWVtY21wKCZuZXctPnFjbGtfZ3ZfYncsICZvbGQtPnFjbGtf Z3ZfYncsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKm5ldykg LSBvZmZzZXRvZih0eXBlb2YoKm5ldyksIHFjbGtfZ3ZfYncpKSAhPSAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICt2b2lkIGludGVsX3BtZGVtYW5kX3ByZV9wbGFuZV91cGRhdGUoc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArwqAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KHN0YXRlLT5iYXNlLmRldik7DQo+ID4gK8KgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbWRlbWFuZF9zdGF0ZSAqbmV3X3BtZG1uZF9zdGF0ZSA9DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoCBpbnRlbF9hdG9taWNfZ2V0X25ld19wbWRlbWFuZF9zdGF0ZShzdGF0ZSk7 DQo+ID4gK8KgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbWRlbWFuZF9zdGF0ZSAqb2xkX3BtZG1uZF9z dGF0ZSA9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9hdG9taWNfZ2V0X29sZF9wbWRl bWFuZF9zdGF0ZShzdGF0ZSk7DQo+ID4gKw0KPiA+ICvCoCBpZiAoRElTUExBWV9WRVIoaTkxNSkg PCAxNCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsNCj4gPiArDQo+ID4gK8KgIGlm ICghbmV3X3BtZG1uZF9zdGF0ZSB8fA0KPiA+ICvCoMKgwqDCoMKgICFpbnRlbF9wbWRlbWFuZF9z dGF0ZV9jaGFuZ2VkKG5ld19wbWRtbmRfc3RhdGUsIG9sZF9wbWRtbmRfc3RhdGUpKQ0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOw0KPiA+ICsNCj4gPiArwqAgaW50ZWxfcHJvZ3JhbV9w bWRlbWFuZChpOTE1LCBuZXdfcG1kbW5kX3N0YXRlLCBvbGRfcG1kbW5kX3N0YXRlKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArdm9pZCBpbnRlbF9wbWRlbWFuZF9wb3N0X3BsYW5lX3VwZGF0ZShzdHJ1 Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICvCoCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoc3RhdGUtPmJhc2UuZGV2KTsNCj4gPiArwqAg Y29uc3Qgc3RydWN0IGludGVsX3BtZGVtYW5kX3N0YXRlICpuZXdfcG1kbW5kX3N0YXRlID0NCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2F0b21pY19nZXRfbmV3X3BtZGVtYW5kX3N0YXRl KHN0YXRlKTsNCj4gPiArwqAgY29uc3Qgc3RydWN0IGludGVsX3BtZGVtYW5kX3N0YXRlICpvbGRf cG1kbW5kX3N0YXRlID0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2F0b21pY19nZXRf b2xkX3BtZGVtYW5kX3N0YXRlKHN0YXRlKTsNCj4gPiArDQo+ID4gK8KgIGlmIChESVNQTEFZX1ZF UihpOTE1KSA8IDE0KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOw0KPiA+ICsNCj4g PiArwqAgaWYgKCFuZXdfcG1kbW5kX3N0YXRlIHx8DQo+ID4gK8KgwqDCoMKgwqAgIWludGVsX3Bt ZGVtYW5kX3N0YXRlX2NoYW5nZWQobmV3X3BtZG1uZF9zdGF0ZSwgb2xkX3BtZG1uZF9zdGF0ZSkp DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+ID4gKw0KPiA+ICvCoCBpbnRlbF9w cm9ncmFtX3BtZGVtYW5kKGk5MTUsIG5ld19wbWRtbmRfc3RhdGUsIE5VTEwpOw0KPiA+ICt9DQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1h bmQuaA0KPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5o DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjAxMTRm NGUwMjI1YQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmgNCj4gPiBAQCAtMCwwICsxLDI0IEBADQo+ID4gKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8NCj4gPiArLyoNCj4gPiArICogQ29weXJp Z2h0IMKpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZu ZGVmIF9fSU5URUxfUE1ERU1BTkRfSF9fDQo+ID4gKyNkZWZpbmUgX19JTlRFTF9QTURFTUFORF9I X18NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsNCj4gPiArc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGU7DQo+ID4gK3N0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7DQo+ ID4gK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOw0KPiA+ICtzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGU7DQo+ID4gKw0KPiA+ICt2b2lkIGludGVsX3BtZGVtYW5kX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOw0KPiA+ICtpbnQgaW50ZWxfcG1kZW1hbmRfc3RhdGVfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+ID4gK3ZvaWQgaW50ZWxfcHJvZ3JhbV9kYnVm X3BtZGVtYW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IGRidWZfc2xpY2Vz KTsNCj4gPiArdm9pZCBpbnRlbF9wbWRlbWFuZF9wcmVfcGxhbmVfdXBkYXRlKHN0cnVjdCBpbnRl bF9hdG9taWNfc3RhdGUgKnN0YXRlKTsNCj4gPiArdm9pZCBpbnRlbF9wbWRlbWFuZF9wb3N0X3Bs YW5lX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSk7DQo+ID4gK2ludCBp bnRlbF9wbWRlbWFuZF9hdG9taWNfY2hlY2soc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3Rh dGUpOw0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9fSU5URUxfUE1ERU1BTkRfSF9fICovDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2lycS5jDQo+ID4gaW5kZXggMmI5NGI4Y2E4ZWM5Li45MDdmYTNhZWUx NzkgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYw0KPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMNCj4gPiBAQCAtNDEsNiArNDEs NyBAQA0KPiA+ICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2ZpZm9fdW5kZXJydW4uaCINCj4gPiAj aW5jbHVkZSAiZGlzcGxheS9pbnRlbF9ob3RwbHVnLmgiDQo+ID4gI2luY2x1ZGUgImRpc3BsYXkv aW50ZWxfbHBlX2F1ZGlvLmgiDQo+ID4gKyNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3BtZGVtYW5k LmgiDQo+ID4gI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfcHNyLmgiDQo+ID4gI2luY2x1ZGUgImRp c3BsYXkvaW50ZWxfcHNyX3JlZ3MuaCINCj4gPiANCj4gPiBAQCAtMTk4NiwxMiArMTk4NywyNSBA QCBzdGF0aWMgdTMyIGdlbjhfZGVfcGlwZV9mYXVsdF9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBH RU44X0RFX1BJUEVfSVJRX0ZBVUxUX0VSUk9SUzsNCj4gPiB9DQo+ID4gDQo+ID4gK3N0YXRpYyB2 b2lkIGludGVsX3BtZGVtYW5kX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikNCj4gPiArew0KPiA+ICvCoCB3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPmRpc3BsYXku cG1kZW1hbmQud2FpdHF1ZXVlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiBzdGF0aWMgdm9pZA0KPiA+ IGdlbjhfZGVfbWlzY19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBpaXIpDQo+ID4gew0KPiA+IMKgwqDCoMKgwqDCoCBib29sIGZvdW5kID0gZmFsc2U7 DQo+ID4gDQo+ID4gLcKgIGlmIChpaXIgJiBHRU44X0RFX01JU0NfR1NFKSB7DQo+ID4gK8KgIGlm IChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTQgJiYNCj4gPiArwqDCoMKgwqDCoCAoaWlyICYg KFhFTFBEUF9QTURFTUFORF9SU1AgfCBYRUxQRFBfUE1ERU1BTkRfUlNQVE9VVF9FUlIpKSkgew0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGlpciAmIFhFTFBEUF9QTURFTUFORF9SU1BUT1VU X0VSUikNCj4gDQo+IEkgdGhpbmsgd2Ugc2hvdWxkIGhhdmUgdGhlIChpaXIgJiAoWEVMUERQX1BN REVNQU5EX1JTUCB8DQo+IFhFTFBEUF9QTURFTUFORF9SU1BUT1VUX0VSUikpIHBhcnQgYXMgbmVz dGVkIGlmIHN0YXRlbWVudCBoZXJlLg0KPiBPdGhlcndpc2UsIHdoZW4gdGhlIGludGVycnVwdCBk aWQgbm90IGhhcHBlbiwgd2UgY291bGQgZW5kdXAgY2hlY2tpbmcNCj4gZm9yIHRoZSBHRU44X0RF X01JU0NfR1NFIGV2ZW4gd2hlbiBESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTQuDQo+IA0KPiBF dmVuIHRob3VnaCB3ZSBrbm93IHRoYXQgaWlyICYgR0VOOF9ERV9NSVNDX0dTRSB3b3VsZCBiZSBm YWxzZSBpbiB0aGlzDQo+IHNpdHVhdGlvbiAoYmVjYXVzZSBib3RoIFhFTFBEUF9QTURFTUFORF9S U1BUT1VUX0VSUiBhbmQgR0VOOF9ERV9NSVNDX0dTRQ0KPiBtYXAgdG8gdGhlIHNhbWUgYml0KSwg SSB0aGluayBoYXZpbmcgdGhhdCBvbmUgY2hlY2tlZCBvbmx5IGZvciBwcmV2aW91cw0KPiBkaXNw bGF5IGVuZ2luZXMgd291bGQgc291bmQgbW9yZSBjb3JyZWN0IHNlbWFudGljYWxseSBzcGVha2lu Zy4NCg0KVGhhbmtzLiB1cGRhdGVkLg0KDQo+IA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRybV9kYmcoJmRldl9wcml2LT5kcm0sDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJFcnJvciB3YWl0aW5nIGZvciBQ dW5pdCBQTSBEZW1hbmQgUmVzcG9uc2VcbiIpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgIGludGVsX3BtZGVtYW5kX2lycV9oYW5kbGVyKGRldl9wcml2KTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgIGZvdW5kID0gdHJ1ZTsNCj4gPiArwqAgfSBlbHNlIGlmIChpaXIgJiBHRU44X0RF X01JU0NfR1NFKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9vcHJl Z2lvbl9hc2xlX2ludHIoZGV2X3ByaXYpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZm91bmQgPSB0cnVlOw0KPiA+IMKgwqDCoMKgwqDCoCB9DQo+ID4gQEAgLTM3NDIsNyArMzc1 NiwxMCBAQCBzdGF0aWMgdm9pZCBnZW44X2RlX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gwqDCoMKgwqDCoMKgIGlmIChJU19HRU1JTklMQUtF KGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2KSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRlX3BvcnRfbWFza2VkIHw9IEJYVF9ERV9QT1JUX0dNQlVTOw0KPiA+IA0K PiA+IC3CoCBpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYpID49IDExKSB7DQo+ID4gK8KgIGlmIChE SVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCBkZV9t aXNjX21hc2tlZCB8PSBYRUxQRFBfUE1ERU1BTkRfUlNQVE9VVF9FUlIgfA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVMUERQX1BN REVNQU5EX1JTUDsNCj4gPiArwqAgZWxzZSBpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYpID49IDEx KSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHBvcnQgcG9ydDsNCj4g PiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpbnRlbF9iaW9zX2lzX2Rz aV9wcmVzZW50KGRldl9wcml2LCAmcG9ydCkpDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oDQo+ ID4gaW5kZXggZGRlNmU5MTA1NWJkLi42MGMwMDdhZWExY2UgMTAwNjQ0DQo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaA0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVnLmgNCj4gPiBAQCAtNDQyNiw4ICs0NDI2LDEwIEBADQo+ID4gI2RlZmluZSBH RU44X0RFX01JU0NfSU1SIF9NTUlPKDB4NDQ0NjQpDQo+ID4gI2RlZmluZSBHRU44X0RFX01JU0Nf SUlSIF9NTUlPKDB4NDQ0NjgpDQo+ID4gI2RlZmluZSBHRU44X0RFX01JU0NfSUVSIF9NTUlPKDB4 NDQ0NmMpDQo+ID4gLSNkZWZpbmXCoCBHRU44X0RFX01JU0NfR1NFwqDCoMKgwqDCoMKgwqDCoCAo MSA8PCAyNykNCj4gPiAtI2RlZmluZcKgIEdFTjhfREVfRURQX1BTUsKgwqDCoMKgwqDCoMKgwqDC oCAoMSA8PCAxOSkNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9SU1BUT1VUX0VSUsKg wqDCoMKgwqAgUkVHX0JJVCgyNykNCj4gPiArI2RlZmluZcKgIEdFTjhfREVfTUlTQ19HU0XCoMKg wqDCoMKgwqDCoMKgIFJFR19CSVQoMjcpDQo+ID4gKyNkZWZpbmXCoCBHRU44X0RFX0VEUF9QU1LC oMKgwqDCoMKgwqDCoMKgwqAgUkVHX0JJVCgxOSkNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURF TUFORF9SU1DCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfQklUKDMpDQo+ID4gDQo+ID4g I2RlZmluZSBHRU44X1BDVV9JU1IgX01NSU8oMHg0NDRlMCkNCj4gPiAjZGVmaW5lIEdFTjhfUENV X0lNUiBfTU1JTygweDQ0NGU0KQ0KPiA+IEBAIC00NTEyLDYgKzQ1MTQsMzMgQEANCj4gPiAjZGVm aW5lwqAgWEVMUERQX0RQX0FMVF9IUERfTE9OR19ERVRFQ1TCoMKgwqDCoMKgwqDCoMKgIFJFR19C SVQoMSkNCj4gPiAjZGVmaW5lwqAgWEVMUERQX0RQX0FMVF9IUERfU0hPUlRfREVURUNUwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR19CSVQoMCkNCj4gPiANCj4gPiArI2RlZmluZSBY RUxQRFBfSU5JVElBVEVfUE1ERU1BTkRfUkVRVUVTVChkd29yZCnCoMKgwqDCoMKgwqDCoMKgwqDC oCBfTU1JTygweDQ1MjMwICsgNCAqIChkd29yZCkpDQo+ID4gKyNkZWZpbmXCoCBYRUxQRFBfUE1E RU1BTkRfUUNMS19HVl9CV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgIFJFR19HRU5NQVNLKDMxLCAx NikNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9RQ0xLX0dWX0JXKHgpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqANCj4gPiBSRUdfRklFTERfUFJFUChYRUxQRFBf UE1ERU1BTkRfUUNMS19HVl9CV19NQVNLLCB4KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVN QU5EX1ZPTFRBR0VfSU5ERVhfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHX0dF Tk1BU0soMTQsIDEyKQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1ZPTFRBR0VfSU5E RVgoeCnCoMKgwqDCoMKgwqDCoMKgDQo+ID4gUkVHX0ZJRUxEX1BSRVAoWEVMUERQX1BNREVNQU5E X1ZPTFRBR0VfSU5ERVhfTUFTSywgeCkNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9R Q0xLX0dWX0lOREVYX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR19HRU5NQVNL KDExLCA4KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1FDTEtfR1ZfSU5ERVgoeCnC oMKgwqDCoMKgwqDCoMKgDQo+ID4gUkVHX0ZJRUxEX1BSRVAoWEVMUERQX1BNREVNQU5EX1FDTEtf R1ZfSU5ERVhfTUFTSywgeCkNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9QSVBFU19N QVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHX0dFTk1B U0soNywgNikNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9QSVBFUyh4KcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR19GSUVMRF9QUkVQKFhFTFBEUF9QTURFTUFORF9Q SVBFU19NQVNLLCB4KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX0RCVUZTX01BU0vC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfR0VOTUFTSyg1 LCA0KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX0RCVUZTKHgpwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHX0ZJRUxEX1BSRVAoWEVMUERQX1BNREVNQU5EX0RCVUZT X01BU0ssIHgpDQo+ID4gKyNkZWZpbmXCoCBYRUxQRFBfUE1ERU1BTkRfUEhZU19NQVNLwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfR0VOTUFTSygyLCAw KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1BIWVMoeCnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFJFR19GSUVMRF9QUkVQKFhFTFBEUF9QTURFTUFORF9QSFlTX01B U0ssIHgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1JFUV9FTkFCTEXC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfQklUKDMxKQ0K PiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX0NEQ0xLX0ZSRVFfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoCBSRUdfR0VOTUFTSygzMCwgMjApDQo+ID4gKyNkZWZpbmXCoCBYRUxQRFBfUE1ERU1B TkRfQ0RDTEtfRlJFUSh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQo+ ID4gUkVHX0ZJRUxEX1BSRVAoWEVMUERQX1BNREVNQU5EX0NEQ0xLX0ZSRVFfTUFTSywgeCkNCj4g PiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9ERElDTEtfRlJFUV9NQVNLwqDCoMKgwqDCoMKg wqDCoCBSRUdfR0VOTUFTSygxOCwgOCkNCj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9E RElDTEtfRlJFUSh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KPiA+IFJF R19GSUVMRF9QUkVQKFhFTFBEUF9QTURFTUFORF9ERElDTEtfRlJFUV9NQVNLLCB4KQ0KPiA+ICsj ZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1NDQUxFUlNfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHX0dFTk1BU0soNiwgNCkNCj4gPiArI2RlZmluZcKgIFhF TFBEUF9QTURFTUFORF9TQ0FMRVJTKHgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqANCj4gPiBSRUdfRklFTERfUFJFUChYRUxQRFBfUE1ERU1BTkRfU0NBTEVSU19N QVNLLCB4KQ0KPiA+ICsjZGVmaW5lwqAgWEVMUERQX1BNREVNQU5EX1BMTFNfTUFTS8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHX0dFTk1BU0soMiwgMCkN Cj4gPiArI2RlZmluZcKgIFhFTFBEUF9QTURFTUFORF9QTExTKHgpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBSRUdfRklFTERfUFJFUChYRUxQRFBfUE1ERU1BTkRfUExMU19NQVNL LCB4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBHRU4xMl9EQ1BSX1NUQVRVU18xwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9NTUlPKDB4 NDY0NDApDQo+ID4gKyNkZWZpbmXCoCBYRUxQRFBfUE1ERU1BTkRfSU5GTElHSFRfU1RBVFVTwqDC oMKgwqDCoMKgwqDCoMKgIFJFR19CSVQoMjYpDQo+ID4gKw0KPiA+ICNkZWZpbmUgSUxLX0RJU1BM QVlfQ0hJQ0tFTjLCoMKgIF9NTUlPKDB4NDIwMDQpDQo+ID4gLyogUmVxdWlyZWQgb24gYWxsIEly b25sYWtlIGFuZCBTYW5keWJyaWRnZSBhY2NvcmRpbmcgdG8gdGhlIEItU3BlYy4gKi8NCj4gPiAj ZGVmaW5lwqDCoCBJTEtfRUxQSU5fNDA5X1NFTEVDVCBSRUdfQklUKDI1KQ0KPiA+IEBAIC00Njcx LDYgKzQ3MDAsOSBAQA0KPiA+ICNkZWZpbmXCoMKgIERDUFJfU0VORF9SRVNQX0lNTcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfQklUKDI1KQ0KPiA+ICNkZWZpbmXCoMKg IERDUFJfQ0xFQVJfTUVNU1RBVF9ESVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR19C SVQoMjQpDQo+ID4gDQo+ID4gKyNkZWZpbmUgWEVMUERfQ0hJQ0tFTl9EQ1BSXzPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX01NSU8oMHg0NjQzOCkNCj4gPiArI2Rl ZmluZcKgwqAgRE1EX1JTUF9USU1FT1VUX0RJU0FCTEXCoMKgwqDCoMKgwqDCoMKgIFJFR19CSVQo MTkpDQo+ID4gKw0KPiA+ICNkZWZpbmUgU0tMX0RGU03CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBfTU1JTygweDUxMDAwKQ0KPiA+ICNkZWZpbmXCoMKgIFNLTF9E RlNNX0RJU1BMQVlfUE1fRElTQUJMRcKgICgxIDw8IDI3KQ0KPiA+ICNkZWZpbmXCoMKgIFNLTF9E RlNNX0RJU1BMQVlfSERDUF9ESVNBQkxFwqDCoMKgwqDCoMKgwqAgKDEgPDwgMjUpDQo+ID4gLS0g DQo+ID4gMi4zNC4xDQo+ID4gDQoNCg==