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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F38FC433EF for ; Mon, 8 Nov 2021 20:59:39 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 6907161051 for ; Mon, 8 Nov 2021 20:59:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6907161051 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D87FB6E97F; Mon, 8 Nov 2021 20:59:38 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id B04316E97F for ; Mon, 8 Nov 2021 20:59:37 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10162"; a="219222745" X-IronPort-AV: E=Sophos;i="5.87,218,1631602800"; d="scan'208";a="219222745" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Nov 2021 12:59:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,218,1631602800"; d="scan'208";a="500024866" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by fmsmga007.fm.intel.com with ESMTP; 08 Nov 2021 12:59:34 -0800 Received: from bgsmsx602.gar.corp.intel.com (10.109.78.81) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Mon, 8 Nov 2021 12:59:34 -0800 Received: from bgsmsx604.gar.corp.intel.com (10.67.234.6) by BGSMSX602.gar.corp.intel.com (10.109.78.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 9 Nov 2021 02:29:31 +0530 Received: from bgsmsx604.gar.corp.intel.com ([10.67.234.6]) by BGSMSX604.gar.corp.intel.com ([10.67.234.6]) with mapi id 15.01.2242.012; Tue, 9 Nov 2021 02:29:31 +0530 From: "Shankar, Uma" To: Ville Syrjala , "intel-gfx@lists.freedesktop.org" Thread-Topic: [Intel-gfx] [PATCH 4/4] drm/i915: Use unlocked register accesses for LUT loads Thread-Index: AQHXxgKWCsL3/448gUuzVjQey5Qi3Kv6OV4g Date: Mon, 8 Nov 2021 20:59:31 +0000 Message-ID: <5d23af2820e2494aaa1648e0b64469db@intel.com> References: <20211020223339.669-1-ville.syrjala@linux.intel.com> <20211020223339.669-5-ville.syrjala@linux.intel.com> In-Reply-To: <20211020223339.669-5-ville.syrjala@linux.intel.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.6.200.16 x-originating-ip: [10.22.254.132] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915: Use unlocked register accesses for LUT loads 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: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSW50ZWwtZ2Z4IDxpbnRl bC1nZngtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmc+IE9uIEJlaGFsZiBPZiBWaWxsZSBT eXJqYWxhDQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDIxLCAyMDIxIDQ6MDQgQU0NCj4gVG86 IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gU3ViamVjdDogW0ludGVsLWdmeF0g W1BBVENIIDQvNF0gZHJtL2k5MTU6IFVzZSB1bmxvY2tlZCByZWdpc3RlciBhY2Nlc3NlcyBmb3Ig TFVUDQo+IGxvYWRzDQo+IA0KPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFA bGludXguaW50ZWwuY29tPg0KPiANCj4gV2UgaGF2ZSB0byBiYXNoIGluIGEgbG90IG9mIHJlZ2lz dGVycyB0byBsb2FkIHRoZSBoaWdoZXIgcHJlY2lzaW9uIExVVCBtb2Rlcy4gVGhlDQo+IGxvY2tp bmcgb3ZlcmhlYWQgaXMgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgYXMgd2UgaGF2ZSB0byBnZXQg dGhpcyBkb25lIGFzIHF1aWNrbHkgYXMNCj4gcG9zc2libGUgZHVyaW5nIHZibGFuay4NCj4gU28g bGV0J3Mgc3dpdGNoIHRvIHVubG9ja2VkIGFjY2Vzc2VzIGZvciB0aGVzZS4gRm9ydHVuYXRlbHkg dGhlIExVVCByZWdpc3RlcnMgYXJlDQo+IG1vc3RseSBzcHJlYWQgYXJvdW5kIHN1Y2ggdGhhdCB0 d28gcGlwZXMgZG8gbm90IGhhdmUgYW55IHJlZ2lzdGVycyBvbiB0aGUgc2FtZQ0KPiBjYWNoZWxp bmUuIFNvIGFzIGxvbmcgYXMgY29tbWl0cyBvbiB0aGUgc2FtZSBwaXBlIGFyZSBzZXJpYWxpemVk ICh3aGljaCB0aGV5IGFyZSkgd2UNCj4gc2hvdWxkIGdldCBhd2F5IHdpdGggdGhpcyB3aXRob3V0 IGFuZ2VyaW5nIHRoZSBoYXJkd2FyZS4NCj4gDQo+IFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIHRo ZSBQUkVDX1BJUEVHQ01BWCByZWdpc3RlcnMgb24gaWxrL3NuYiB3aGljaCB3ZSBkb24ndA0KPiB1 c2UgYXRtIGFzIHRoZXkgYXJlIG9ubHkgdXNlZCBpbiB0aGUgMTJiaXQgZ2FtbWEgbW9kZS4gSWYv d2hlbiB3ZSBhZGQgc3VwcG9ydCBmb3INCj4gdGhhdCB3ZSBtYXkgbmVlZCB0byByZW1lbWJlciB0 byBzdGlsbCBzZXJpYWxpemUgdGhvc2UgcmVnaXN0ZXJzLCB0aG91Z2ggSSdtIG5vdCBzdXJlDQo+ IGlsay9zbmIgYXJlIGFjdHVhbGx5IGFmZmVjdGVkIGJ5IHRoZSBzYW1lIGNhY2hlbGluZSBpc3N1 ZS4gSSB0aGluayBpdmIvaHN3IGF0IGxlYXN0DQo+IHdlcmUsIGJ1dCB0aGV5IHVzZSBhIGRpZmZl cmVudCBzZXQgb2YgcmVnaXN0ZXJzIGZvciB0aGUgcHJlY2lzaW9uIExVVC4NCj4gDQo+IEkgaGF2 ZSBhIHRlc3QgY2FzZSB3aGljaCBpcyB1cGRhdGluZyB0aGUgTFVUcyBvbiB0d28gcGlwZXMgZnJv bSBhIHNpbmdsZSBhdG9taWMNCj4gY29tbWl0LiBSdW5uaW5nIHRoYXQgaW4gYSBsb29wIGZvciBh IG1pbnV0ZSBJIGdldCB0aGUgZm9sbG93aW5nIHdvcnN0IGNhc2Ugd2l0aCB0aGUNCj4gbG9ja3Mg aW4gcGxhY2U6DQo+ICBpbnRlbF9jcnRjX3ZibGFua193b3JrX3N0YXJ0OiBwaXBlIEIsIGZyYW1l PTEwMDM3LCBzY2FubGluZT0xMDgxDQo+ICBpbnRlbF9jcnRjX3ZibGFua193b3JrX3N0YXJ0OiBw aXBlIEEsIGZyYW1lPTEyMjc0LCBzY2FubGluZT03NjkNCj4gIGludGVsX2NydGNfdmJsYW5rX3dv cmtfZW5kOiBwaXBlIEEsIGZyYW1lPTEyMjc0LCBzY2FubGluZT01OA0KPiAgaW50ZWxfY3J0Y192 Ymxhbmtfd29ya19lbmQ6IHBpcGUgQiwgZnJhbWU9MTAwMzcsIHNjYW5saW5lPTc0DQo+IA0KPiBB bmQgaGVyZSdzIHRoZSB3b3JzdCBjYXNlIHdpdGggdGhlIGxvY2tzIHJlbW92ZWQ6DQo+ICBpbnRl bF9jcnRjX3ZibGFua193b3JrX3N0YXJ0OiBwaXBlIEIsIGZyYW1lPTU4NjksIHNjYW5saW5lPTEw ODENCj4gIGludGVsX2NydGNfdmJsYW5rX3dvcmtfc3RhcnQ6IHBpcGUgQSwgZnJhbWU9NzYxNiwg c2NhbmxpbmU9NzY5DQo+ICBpbnRlbF9jcnRjX3ZibGFua193b3JrX2VuZDogcGlwZSBCLCBmcmFt ZT01ODY5LCBzY2FubGluZT0xMDk2DQo+ICBpbnRlbF9jcnRjX3ZibGFua193b3JrX2VuZDogcGlw ZSBBLCBmcmFtZT03NjE2LCBzY2FubGluZT03NzcNCj4gDQo+IFRoZSB0ZXN0IHdhcyBkb25lIG9u IGEgc25iIHVzaW5nIHRoZSAxMGJpdCAxMDI0IGVudHJ5IExVVCBtb2RlLg0KPiBUaGUgdnRvdGFs cyBmb3IgdGhlIHR3byBkaXNwbGF5cyBhcmUgNzkzIGFuZCAxMTI1LiBTbyB3ZSBjYW4gc2VlIHRo YXQgd2l0aCB0aGUgbG9ja3MNCj4gcmlwcGVkIG91dCB0aGUgTFVUIHVwZGF0ZXMgYXJlIHByZXR0 eSBuaWNlbHkgY29uZmluZWQgd2l0aGluIHRoZSB2YmxhbmssIHdoZXJlYXMNCj4gd2l0aCB0aGUg bG9ja3MgaW4gcGxhY2Ugd2UncmUgcm91dGluZWx5IGJsYXN0aW5nIHBhc3QgdGhlIHZibGFuayBl bmQgd2hpY2ggY2F1c2VzDQo+IHZpc3VhbCBhcnRpZmFjdHMgbmVhciB0aGUgdG9wIG9mIHRoZSBz Y3JlZW4uDQoNClVucHJvdGVjdGVkIHdyaXRlcyBzaG91bGQgYmUgb2sgdG8gdXNlIGluIGx1dCB1 cGRhdGVzLiBMb29rcyBnb29kIHRvIG1lLg0KUmV2aWV3ZWQtYnk6IFVtYSBTaGFua2FyIDx1bWEu c2hhbmthckBpbnRlbC5jb20+DQoNCk9uZSBzaWRlIHF1ZXJ5IHRob3VnaCwgd2hhdCBoYXBwZW5z IHdoZW4gd2UgZ28gZm9yIGhpZ2hlciByZWZyZXNoIHJhdGVzIGxpa2UgMzAwKywNClNvbWUgY2Fz ZXMgd2hlcmUgdmJsYW5rIHBlcmlvZCBpcyBzaHJ1bmsgdG8gYXMgbG93IGFzIDh1cyAoNDgwSHog UlIgcGFuZWxzKS4NCg0KUmVnYXJkcywNClVtYSBTaGFua2FyDQoNCj4gU2lnbmVkLW9mZi1ieTog VmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4NCj4gLS0tDQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbG9yLmMgfCAxMjggKysrKysr KysrKy0tLS0tLS0tLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rz Yi5jICAgfCAgIDQgKy0NCj4gIDIgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKSwgNjYg ZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9jb2xvci5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9jb2xvci5jDQo+IGluZGV4IDUzNTliNzMwNWE3OC4uYzg3MGEwZTUwY2IxIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbG9yLmMNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb2xvci5jDQo+IEBAIC01NTIsOCAr NTUyLDggQEAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dF84KHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLA0KPiAgCWx1dCA9IGJsb2ItPmRhdGE7DQo+IA0KPiAgCWZvciAoaSA9IDA7IGkgPCAyNTY7 IGkrKykNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBBTEVUVEUocGlwZSwgaSksDQo+ IC0JCQkgICAgICAgaTl4eF9sdXRfOCgmbHV0W2ldKSk7DQo+ICsJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQQUxFVFRFKHBpcGUsIGkpLA0KPiArCQkJCSAgaTl4eF9sdXRfOCgmbHV0W2ld KSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dHMoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpIEBAIC01NzYsMTUNCj4gKzU3NiwxNSBAQCBz dGF0aWMgdm9pZCBpOTY1X2xvYWRfbHV0XzEwcDYoc3RydWN0IGludGVsX2NydGMgKmNydGMsDQo+ ICAJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwg bHV0X3NpemUgLSAxOyBpKyspIHsNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBBTEVU VEUocGlwZSwgMiAqIGkgKyAwKSwNCj4gLQkJCSAgICAgICBpOTY1X2x1dF8xMHA2X2xkdygmbHV0 W2ldKSk7DQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBQQUxFVFRFKHBpcGUsIDIgKiBp ICsgMSksDQo+IC0JCQkgICAgICAgaTk2NV9sdXRfMTBwNl91ZHcoJmx1dFtpXSkpOw0KPiArCQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUEFMRVRURShwaXBlLCAyICogaSArIDApLA0KPiAr CQkJCSAgaTk2NV9sdXRfMTBwNl9sZHcoJmx1dFtpXSkpOw0KPiArCQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUEFMRVRURShwaXBlLCAyICogaSArIDEpLA0KPiArCQkJCSAgaTk2NV9sdXRf MTBwNl91ZHcoJmx1dFtpXSkpOw0KPiAgCX0NCj4gDQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIFBJUEVHQ01BWChwaXBlLCAwKSwgbHV0W2ldLnJlZCk7DQo+IC0JaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIFBJUEVHQ01BWChwaXBlLCAxKSwgbHV0W2ldLmdyZWVuKTsNCj4gLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgUElQRUdDTUFYKHBpcGUsIDIpLCBsdXRbaV0uYmx1ZSk7DQo+ICsJ aW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBJUEVHQ01BWChwaXBlLCAwKSwgbHV0W2ldLnJl ZCk7DQo+ICsJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBJUEVHQ01BWChwaXBlLCAxKSwg bHV0W2ldLmdyZWVuKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUElQRUdDTUFY KHBpcGUsIDIpLCBsdXRbaV0uYmx1ZSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQgaTk2NV9s b2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpIEBAIC02 MTgsOA0KPiArNjE4LDggQEAgc3RhdGljIHZvaWQgaWxrX2xvYWRfbHV0Xzgoc3RydWN0IGludGVs X2NydGMgKmNydGMsDQo+ICAJbHV0ID0gYmxvYi0+ZGF0YTsNCj4gDQo+ICAJZm9yIChpID0gMDsg aSA8IDI1NjsgaSsrKQ0KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgTEdDX1BBTEVUVEUo cGlwZSwgaSksDQo+IC0JCQkgICAgICAgaTl4eF9sdXRfOCgmbHV0W2ldKSk7DQo+ICsJCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBMR0NfUEFMRVRURShwaXBlLCBpKSwNCj4gKwkJCQkgIGk5 eHhfbHV0XzgoJmx1dFtpXSkpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkIGlsa19sb2FkX2x1 dF8xMChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywgQEAgLTYzMSw4ICs2MzEsOCBAQCBzdGF0aWMg dm9pZA0KPiBpbGtfbG9hZF9sdXRfMTAoc3RydWN0IGludGVsX2NydGMgKmNydGMsDQo+ICAJZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwgbHV0X3Np emU7IGkrKykNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBSRUNfUEFMRVRURShwaXBl LCBpKSwNCj4gLQkJCSAgICAgICBpbGtfbHV0XzEwKCZsdXRbaV0pKTsNCj4gKwkJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFBSRUNfUEFMRVRURShwaXBlLCBpKSwNCj4gKwkJCQkgIGlsa19s dXRfMTAoJmx1dFtpXSkpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkIGlsa19sb2FkX2x1dHMo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpIEBAIC02ODEsMTYNCj4g KzY4MSwxNiBAQCBzdGF0aWMgdm9pZCBpdmJfbG9hZF9sdXRfMTAoc3RydWN0IGludGVsX2NydGMg KmNydGMsDQo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fY29sb3JfbHV0ICplbnRyeSA9DQo+ICAJCQkm bHV0W2kgKiAobHV0X3NpemUgLSAxKSAvIChod19sdXRfc2l6ZSAtIDEpXTsNCj4gDQo+IC0JCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBQUkVDX1BBTF9JTkRFWChwaXBlKSwgcHJlY19pbmRleCsr KTsNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBSRUNfUEFMX0RBVEEocGlwZSksDQo+ IC0JCQkgICAgICAgaWxrX2x1dF8xMChlbnRyeSkpOw0KPiArCQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUFJFQ19QQUxfSU5ERVgocGlwZSksIHByZWNfaW5kZXgrKyk7DQo+ICsJCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUkVDX1BBTF9EQVRBKHBpcGUpLA0KPiArCQkJCSAgaWxr X2x1dF8xMChlbnRyeSkpOw0KPiAgCX0NCj4gDQo+ICAJLyoNCj4gIAkgKiBSZXNldCB0aGUgaW5k ZXgsIG90aGVyd2lzZSBpdCBwcmV2ZW50cyB0aGUgbGVnYWN5IHBhbGV0dGUgdG8gYmUNCj4gIAkg KiB3cml0dGVuIHByb3Blcmx5Lg0KPiAgCSAqLw0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBQUkVDX1BBTF9JTkRFWChwaXBlKSwgMCk7DQo+ICsJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBSRUNfUEFMX0lOREVYKHBpcGUpLCAwKTsNCj4gIH0NCj4gDQo+ICAvKiBPbiBCRFcrIHRo ZSBpbmRleCBhdXRvIGluY3JlbWVudCBtb2RlIGFjdHVhbGx5IHdvcmtzICovIEBAIC03MDQsMjMg KzcwNCwyMw0KPiBAQCBzdGF0aWMgdm9pZCBiZHdfbG9hZF9sdXRfMTAoc3RydWN0IGludGVsX2Ny dGMgKmNydGMsDQo+ICAJaW50IGksIGx1dF9zaXplID0gZHJtX2NvbG9yX2x1dF9zaXplKGJsb2Ip Ow0KPiAgCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsNCj4gDQo+IC0JaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIFBSRUNfUEFMX0lOREVYKHBpcGUpLA0KPiAtCQkgICAgICAgcHJlY19pbmRl eCB8IFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUFJFQ19QQUxfSU5ERVgocGlwZSksDQo+ICsJCQkgIHByZWNfaW5kZXggfCBQQUxfUFJF Q19BVVRPX0lOQ1JFTUVOVCk7DQo+IA0KPiAgCWZvciAoaSA9IDA7IGkgPCBod19sdXRfc2l6ZTsg aSsrKSB7DQo+ICAJCS8qIFdlIGRpc2NhcmQgaGFsZiB0aGUgdXNlciBlbnRyaWVzIGluIHNwbGl0 IGdhbW1hIG1vZGUgKi8NCj4gIAkJY29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgKmVudHJ5ID0N Cj4gIAkJCSZsdXRbaSAqIChsdXRfc2l6ZSAtIDEpIC8gKGh3X2x1dF9zaXplIC0gMSldOw0KPiAN Cj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBSRUNfUEFMX0RBVEEocGlwZSksDQo+IC0J CQkgICAgICAgaWxrX2x1dF8xMChlbnRyeSkpOw0KPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUFJFQ19QQUxfREFUQShwaXBlKSwNCj4gKwkJCQkgIGlsa19sdXRfMTAoZW50cnkpKTsN Cj4gIAl9DQo+IA0KPiAgCS8qDQo+ICAJICogUmVzZXQgdGhlIGluZGV4LCBvdGhlcndpc2UgaXQg cHJldmVudHMgdGhlIGxlZ2FjeSBwYWxldHRlIHRvIGJlDQo+ICAJICogd3JpdHRlbiBwcm9wZXJs eS4NCj4gIAkgKi8NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFQ19QQUxfSU5ERVgo cGlwZSksIDApOw0KPiArCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUkVDX1BBTF9JTkRF WChwaXBlKSwgMCk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQgaXZiX2xvYWRfbHV0X2V4dF9t YXgoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpIEBAIC0NCj4gODIx LDkgKzgyMSw5IEBAIHN0YXRpYyB2b2lkIGdsa19sb2FkX2RlZ2FtbWFfbHV0KGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlDQo+ICpjcnRjX3N0YXRlKQ0KPiAgCSAqIGlnbm9yZSB0aGUgaW5k ZXggYml0cywgc28gd2UgbmVlZCB0byByZXNldCBpdCB0byBpbmRleCAwDQo+ICAJICogc2VwYXJh dGVseS4NCj4gIAkgKi8NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFX0NTQ19HQU1D X0lOREVYKHBpcGUpLCAwKTsNCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFX0NTQ19H QU1DX0lOREVYKHBpcGUpLA0KPiAtCQkgICAgICAgUFJFX0NTQ19HQU1DX0FVVE9fSU5DUkVNRU5U KTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0lOREVYKHBp cGUpLCAwKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0lO REVYKHBpcGUpLA0KPiArCQkJICBQUkVfQ1NDX0dBTUNfQVVUT19JTkNSRU1FTlQpOw0KPiANCj4g IAlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgew0KPiAgCQkvKg0KPiBAQCAtODM5LDE1 ICs4MzksMTUgQEAgc3RhdGljIHZvaWQgZ2xrX2xvYWRfZGVnYW1tYV9sdXQoY29uc3Qgc3RydWN0 DQo+IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpDQo+ICAJCSAqIFRvRG86IEV4dGVuZCB0 byBtYXggNy4wLiBFbmFibGUgMzIgYml0IGlucHV0IHZhbHVlDQo+ICAJCSAqIGFzIGNvbXBhcmVk IHRvIGp1c3QgMTYgdG8gYWNoaWV2ZSB0aGlzLg0KPiAgCQkgKi8NCj4gLQkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIFBSRV9DU0NfR0FNQ19EQVRBKHBpcGUpLA0KPiAtCQkJICAgICAgIGx1dFtp XS5ncmVlbik7DQo+ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUkVfQ1NDX0dBTUNf REFUQShwaXBlKSwNCj4gKwkJCQkgIGx1dFtpXS5ncmVlbik7DQo+ICAJfQ0KPiANCj4gIAkvKiBD bGFtcCB2YWx1ZXMgPiAxLjAuICovDQo+ICAJd2hpbGUgKGkrKyA8IDM1KQ0KPiAtCQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0RBVEEocGlwZSksIDEgPDwgMTYpOw0KPiAr CQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0RBVEEocGlwZSksIDEg PDwgMTYpOw0KPiANCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0lO REVYKHBpcGUpLCAwKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJFX0NTQ19H QU1DX0lOREVYKHBpcGUpLCAwKTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgdm9pZCBnbGtfbG9hZF9k ZWdhbW1hX2x1dF9saW5lYXIoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpDQo+IEBAIC04NjIsMjEgKzg2MiwyMSBAQCBzdGF0aWMgdm9pZCBnbGtfbG9hZF9kZWdhbW1h X2x1dF9saW5lYXIoY29uc3Qgc3RydWN0DQo+IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdA0K PiAgCSAqIGlnbm9yZSB0aGUgaW5kZXggYml0cywgc28gd2UgbmVlZCB0byByZXNldCBpdCB0byBp bmRleCAwDQo+ICAJICogc2VwYXJhdGVseS4NCj4gIAkgKi8NCj4gLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0lOREVYKHBpcGUpLCAwKTsNCj4gLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgUFJFX0NTQ19HQU1DX0lOREVYKHBpcGUpLA0KPiAtCQkgICAgICAgUFJFX0NT Q19HQU1DX0FVVE9fSU5DUkVNRU5UKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UFJFX0NTQ19HQU1DX0lOREVYKHBpcGUpLCAwKTsNCj4gKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUFJFX0NTQ19HQU1DX0lOREVYKHBpcGUpLA0KPiArCQkJICBQUkVfQ1NDX0dBTUNfQVVU T19JTkNSRU1FTlQpOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgew0K PiAgCQl1MzIgdiA9IChpIDw8IDE2KSAvIChsdXRfc2l6ZSAtIDEpOw0KPiANCj4gLQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIFBSRV9DU0NfR0FNQ19EQVRBKHBpcGUpLCB2KTsNCj4gKwkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSRV9DU0NfR0FNQ19EQVRBKHBpcGUpLCB2KTsNCj4g IAl9DQo+IA0KPiAgCS8qIENsYW1wIHZhbHVlcyA+IDEuMC4gKi8NCj4gIAl3aGlsZSAoaSsrIDwg MzUpDQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBQUkVfQ1NDX0dBTUNfREFUQShwaXBl KSwgMSA8PCAxNik7DQo+ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUkVfQ1NDX0dB TUNfREFUQShwaXBlKSwgMSA8PCAxNik7DQo+IA0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBQUkVfQ1NDX0dBTUNfSU5ERVgocGlwZSksIDApOw0KPiArCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQUkVfQ1NDX0dBTUNfSU5ERVgocGlwZSksIDApOw0KPiAgfQ0KPiANCj4gIHN0YXRp YyB2b2lkIGdsa19sb2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpIEBAIC0xMDcxLDEwDQo+ICsxMDcxLDEwIEBAIHN0YXRpYyB2b2lkIGNodl9sb2FkX2Nn bV9kZWdhbW1hKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLA0KPiAgCWVudW0gcGlwZSBwaXBlID0g Y3J0Yy0+cGlwZTsNCj4gDQo+ICAJZm9yIChpID0gMDsgaSA8IGx1dF9zaXplOyBpKyspIHsNCj4g LQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIENHTV9QSVBFX0RFR0FNTUEocGlwZSwgaSwgMCks DQo+IC0JCQkgICAgICAgY2h2X2NnbV9kZWdhbW1hX2xkdygmbHV0W2ldKSk7DQo+IC0JCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBDR01fUElQRV9ERUdBTU1BKHBpcGUsIGksIDEpLA0KPiAtCQkJ ICAgICAgIGNodl9jZ21fZGVnYW1tYV91ZHcoJmx1dFtpXSkpOw0KPiArCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgQ0dNX1BJUEVfREVHQU1NQShwaXBlLCBpLCAwKSwNCj4gKwkJCQkgIGNo dl9jZ21fZGVnYW1tYV9sZHcoJmx1dFtpXSkpOw0KPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgQ0dNX1BJUEVfREVHQU1NQShwaXBlLCBpLCAxKSwNCj4gKwkJCQkgIGNodl9jZ21fZGVn YW1tYV91ZHcoJmx1dFtpXSkpOw0KPiAgCX0NCj4gIH0NCj4gDQo+IEBAIC0xMTA1LDEwICsxMTA1 LDEwIEBAIHN0YXRpYyB2b2lkIGNodl9sb2FkX2NnbV9nYW1tYShzdHJ1Y3QgaW50ZWxfY3J0Yw0K PiAqY3J0YywNCj4gIAllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7DQo+IA0KPiAgCWZvciAo aSA9IDA7IGkgPCBsdXRfc2l6ZTsgaSsrKSB7DQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBDR01fUElQRV9HQU1NQShwaXBlLCBpLCAwKSwNCj4gLQkJCSAgICAgICBjaHZfY2dtX2dhbW1h X2xkdygmbHV0W2ldKSk7DQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBDR01fUElQRV9H QU1NQShwaXBlLCBpLCAxKSwNCj4gLQkJCSAgICAgICBjaHZfY2dtX2dhbW1hX3VkdygmbHV0W2ld KSk7DQo+ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDR01fUElQRV9HQU1NQShwaXBl LCBpLCAwKSwNCj4gKwkJCQkgIGNodl9jZ21fZ2FtbWFfbGR3KCZsdXRbaV0pKTsNCj4gKwkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENHTV9QSVBFX0dBTU1BKHBpcGUsIGksIDEpLA0KPiAr CQkJCSAgY2h2X2NnbV9nYW1tYV91ZHcoJmx1dFtpXSkpOw0KPiAgCX0NCj4gIH0NCj4gDQo+IEBA IC0xMTMxLDggKzExMzEsOCBAQCBzdGF0aWMgdm9pZCBjaHZfbG9hZF9sdXRzKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlDQo+ICpjcnRjX3N0YXRlKQ0KPiAgCWVsc2UNCj4gIAkJaTk2NV9s b2FkX2x1dHMoY3J0Y19zdGF0ZSk7DQo+IA0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBD R01fUElQRV9NT0RFKGNydGMtPnBpcGUpLA0KPiAtCQkgICAgICAgY3J0Y19zdGF0ZS0+Y2dtX21v ZGUpOw0KPiArCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDR01fUElQRV9NT0RFKGNydGMt PnBpcGUpLA0KPiArCQkJICBjcnRjX3N0YXRlLT5jZ21fbW9kZSk7DQo+ICB9DQo+IA0KPiAgdm9p ZCBpbnRlbF9jb2xvcl9sb2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpIEBAIC0xODA4LDcNCj4gKzE4MDgsNyBAQCBzdGF0aWMgc3RydWN0IGRybV9wcm9w ZXJ0eV9ibG9iICppOXh4X3JlYWRfbHV0Xzgoc3RydWN0IGludGVsX2NydGMNCj4gKmNydGMpDQo+ ICAJbHV0ID0gYmxvYi0+ZGF0YTsNCj4gDQo+ICAJZm9yIChpID0gMDsgaSA8IExFR0FDWV9MVVRf TEVOR1RIOyBpKyspIHsNCj4gLQkJdTMyIHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBB TEVUVEUocGlwZSwgaSkpOw0KPiArCQl1MzIgdmFsID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJp diwgUEFMRVRURShwaXBlLCBpKSk7DQo+IA0KPiAgCQlpOXh4X2x1dF84X3BhY2soJmx1dFtpXSwg dmFsKTsNCj4gIAl9DQo+IEBAIC0xODQzLDE1ICsxODQzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2INCj4gKmk5NjVfcmVhZF9sdXRfMTBwNihzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YykNCj4gIAlsdXQgPSBibG9iLT5kYXRhOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwgbHV0 X3NpemUgLSAxOyBpKyspIHsNCj4gLQkJdTMyIGxkdyA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IFBBTEVUVEUocGlwZSwgMiAqIGkgKyAwKSk7DQo+IC0JCXUzMiB1ZHcgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBQQUxFVFRFKHBpcGUsIDIgKiBpICsgMSkpOw0KPiArCQl1MzIgbGR3ID0gaW50 ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwgUEFMRVRURShwaXBlLCAyICogaSArIDApKTsNCj4gKwkJ dTMyIHVkdyA9IGludGVsX2RlX3JlYWRfZncoZGV2X3ByaXYsIFBBTEVUVEUocGlwZSwgMiAqIGkg KyAxKSk7DQo+IA0KPiAgCQlpOTY1X2x1dF8xMHA2X3BhY2soJmx1dFtpXSwgbGR3LCB1ZHcpOw0K PiAgCX0NCj4gDQo+IC0JbHV0W2ldLnJlZCA9IGk5NjVfbHV0XzExcDZfbWF4X3BhY2soaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwNCj4gUElQRUdDTUFYKHBpcGUsIDApKSk7DQo+IC0JbHV0W2ldLmdy ZWVuID0gaTk2NV9sdXRfMTFwNl9tYXhfcGFjayhpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiBQ SVBFR0NNQVgocGlwZSwgMSkpKTsNCj4gLQlsdXRbaV0uYmx1ZSA9IGk5NjVfbHV0XzExcDZfbWF4 X3BhY2soaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gUElQRUdDTUFYKHBpcGUsIDIpKSk7DQo+ ICsJbHV0W2ldLnJlZCA9IGk5NjVfbHV0XzExcDZfbWF4X3BhY2soaW50ZWxfZGVfcmVhZF9mdyhk ZXZfcHJpdiwNCj4gUElQRUdDTUFYKHBpcGUsIDApKSk7DQo+ICsJbHV0W2ldLmdyZWVuID0gaTk2 NV9sdXRfMTFwNl9tYXhfcGFjayhpbnRlbF9kZV9yZWFkX2Z3KGRldl9wcml2LA0KPiBQSVBFR0NN QVgocGlwZSwgMSkpKTsNCj4gKwlsdXRbaV0uYmx1ZSA9IGk5NjVfbHV0XzExcDZfbWF4X3BhY2so aW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwNCj4gK1BJUEVHQ01BWChwaXBlLCAyKSkpOw0KPiAN Cj4gIAlyZXR1cm4gYmxvYjsNCj4gIH0NCj4gQEAgLTE4ODYsOCArMTg4Niw4IEBAIHN0YXRpYyBz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2INCj4gKmNodl9yZWFkX2NnbV9nYW1tYShzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YykNCj4gIAlsdXQgPSBibG9iLT5kYXRhOw0KPiANCj4gIAlmb3IgKGkgPSAw OyBpIDwgbHV0X3NpemU7IGkrKykgew0KPiAtCQl1MzIgbGR3ID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgQ0dNX1BJUEVfR0FNTUEocGlwZSwgaSwgMCkpOw0KPiAtCQl1MzIgdWR3ID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgQ0dNX1BJUEVfR0FNTUEocGlwZSwgaSwgMSkpOw0KPiArCQl1MzIg bGR3ID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwgQ0dNX1BJUEVfR0FNTUEocGlwZSwgaSwN Cj4gMCkpOw0KPiArCQl1MzIgdWR3ID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwgQ0dNX1BJ UEVfR0FNTUEocGlwZSwgaSwNCj4gMSkpOw0KPiANCj4gIAkJY2h2X2NnbV9nYW1tYV9wYWNrKCZs dXRbaV0sIGxkdywgdWR3KTsNCj4gIAl9DQo+IEBAIC0xOTIyLDcgKzE5MjIsNyBAQCBzdGF0aWMg c3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICppbGtfcmVhZF9sdXRfOChzdHJ1Y3QNCj4gaW50ZWxf Y3J0YyAqY3J0YykNCj4gIAlsdXQgPSBibG9iLT5kYXRhOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBp IDwgTEVHQUNZX0xVVF9MRU5HVEg7IGkrKykgew0KPiAtCQl1MzIgdmFsID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgTEdDX1BBTEVUVEUocGlwZSwgaSkpOw0KPiArCQl1MzIgdmFsID0gaW50ZWxf ZGVfcmVhZF9mdyhkZXZfcHJpdiwgTEdDX1BBTEVUVEUocGlwZSwgaSkpOw0KPiANCj4gIAkJaTl4 eF9sdXRfOF9wYWNrKCZsdXRbaV0sIHZhbCk7DQo+ICAJfQ0KPiBAQCAtMTk0Nyw3ICsxOTQ3LDcg QEAgc3RhdGljIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqaWxrX3JlYWRfbHV0XzEwKHN0cnVj dA0KPiBpbnRlbF9jcnRjICpjcnRjKQ0KPiAgCWx1dCA9IGJsb2ItPmRhdGE7DQo+IA0KPiAgCWZv ciAoaSA9IDA7IGkgPCBsdXRfc2l6ZTsgaSsrKSB7DQo+IC0JCXUzMiB2YWwgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBQUkVDX1BBTEVUVEUocGlwZSwgaSkpOw0KPiArCQl1MzIgdmFsID0gaW50 ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwgUFJFQ19QQUxFVFRFKHBpcGUsIGkpKTsNCj4gDQo+ICAJ CWlsa19sdXRfMTBfcGFjaygmbHV0W2ldLCB2YWwpOw0KPiAgCX0NCj4gQEAgLTE5OTksMTYgKzE5 OTksMTYgQEAgc3RhdGljIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYg0KPiAqYmR3X3JlYWRfbHV0 XzEwKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLA0KPiANCj4gIAlsdXQgPSBibG9iLT5kYXRhOw0K PiANCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFQ19QQUxfSU5ERVgocGlwZSksDQo+ IC0JCSAgICAgICBwcmVjX2luZGV4IHwgUEFMX1BSRUNfQVVUT19JTkNSRU1FTlQpOw0KPiArCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUkVDX1BBTF9JTkRFWChwaXBlKSwNCj4gKwkJCSAg cHJlY19pbmRleCB8IFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UKTsNCj4gDQo+ICAJZm9yIChpID0g MDsgaSA8IGx1dF9zaXplOyBpKyspIHsNCj4gLQkJdTMyIHZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIFBSRUNfUEFMX0RBVEEocGlwZSkpOw0KPiArCQl1MzIgdmFsID0gaW50ZWxfZGVfcmVh ZF9mdyhkZXZfcHJpdiwgUFJFQ19QQUxfREFUQShwaXBlKSk7DQo+IA0KPiAgCQlpbGtfbHV0XzEw X3BhY2soJmx1dFtpXSwgdmFsKTsNCj4gIAl9DQo+IA0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCBQUkVDX1BBTF9JTkRFWChwaXBlKSwgMCk7DQo+ICsJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBSRUNfUEFMX0lOREVYKHBpcGUpLCAwKTsNCj4gDQo+ICAJcmV0dXJuIGJsb2I7DQo+ ICB9DQo+IEBAIC0yMDUwLDE3ICsyMDUwLDE3IEBAIGljbF9yZWFkX2x1dF9tdWx0aV9zZWdtZW50 KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQ0KPiANCj4gIAlsdXQgPSBibG9iLT5kYXRhOw0KPiAN Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFJFQ19QQUxfTVVMVElfU0VHX0lOREVYKHBp cGUpLA0KPiAtCQkgICAgICAgUEFMX1BSRUNfQVVUT19JTkNSRU1FTlQpOw0KPiArCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQUkVDX1BBTF9NVUxUSV9TRUdfSU5ERVgocGlwZSksDQo+ICsJ CQkgIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UKTsNCj4gDQo+ICAJZm9yIChpID0gMDsgaSA8IDk7 IGkrKykgew0KPiAtCQl1MzIgbGR3ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gUFJFQ19Q QUxfTVVMVElfU0VHX0RBVEEocGlwZSkpOw0KPiAtCQl1MzIgdWR3ID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwNCj4gUFJFQ19QQUxfTVVMVElfU0VHX0RBVEEocGlwZSkpOw0KPiArCQl1MzIgbGR3 ID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwNCj4gUFJFQ19QQUxfTVVMVElfU0VHX0RBVEEo cGlwZSkpOw0KPiArCQl1MzIgdWR3ID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwNCj4gUFJF Q19QQUxfTVVMVElfU0VHX0RBVEEocGlwZSkpOw0KPiANCj4gIAkJaWNsX2x1dF9tdWx0aV9zZWdf cGFjaygmbHV0W2ldLCBsZHcsIHVkdyk7DQo+ICAJfQ0KPiANCj4gLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgUFJFQ19QQUxfTVVMVElfU0VHX0lOREVYKHBpcGUpLCAwKTsNCj4gKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJFQ19QQUxfTVVMVElfU0VHX0lOREVYKHBpcGUpLCAwKTsN Cj4gDQo+ICAJLyoNCj4gIAkgKiBGSVhNRSByZWFkb3V0cyBmcm9tIFBBTF9QUkVDX0RBVEEgcmVn aXN0ZXIgYXJlbid0IGdpdmluZyBkaWZmIC0tZ2l0DQo+IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kc2IuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHNiLmMNCj4gaW5kZXggNjJhOGE2OWY5ZjVkLi44M2E2OWE0YTRmZWEgMTAwNjQ0DQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHNiLmMNCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kc2IuYw0KPiBAQCAtMTAwLDcgKzEwMCw3 IEBAIHZvaWQgaW50ZWxfZHNiX2luZGV4ZWRfcmVnX3dyaXRlKGNvbnN0IHN0cnVjdA0KPiBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLA0KPiAgCXUzMiByZWdfdmFsOw0KPiANCj4gIAlpZiAo IWRzYikgew0KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB2YWwpOw0KPiArCQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgcmVnLCB2YWwpOw0KPiAgCQlyZXR1cm47DQo+ICAJ fQ0KPiAgCWJ1ZiA9IGRzYi0+Y21kX2J1ZjsNCj4gQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIGlu dGVsX2RzYl9yZWdfd3JpdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gKmNydGNf c3RhdGUsDQo+IA0KPiAgCWRzYiA9IGNydGNfc3RhdGUtPmRzYjsNCj4gIAlpZiAoIWRzYikgew0K PiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB2YWwpOw0KPiArCQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgcmVnLCB2YWwpOw0KPiAgCQlyZXR1cm47DQo+ICAJfQ0KPiANCj4g LS0NCj4gMi4zMi4wDQoNCg==