From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 306EE2D97A6; Wed, 8 Jul 2026 20:08:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783541304; cv=none; b=Ua6vONPBA9np4K18QUFNKCnpFTk8kpj/ixo7ZROkUhNvIruZVmg+u8TYuXOdx3dlp0XdKF3AQskV3w0pU+xC02+JTtOcgAmBEmkhuCdD0W9jzBsw3M/tQxYuAlpO84Lp2FbGqNMj8ngz9RS0kgulFf+dHHeKAtWOnmmFASTorsg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783541304; c=relaxed/simple; bh=QAIaFZLka29HW2sZz2rAP+BR+hjJV+TRf0IFEWbJPbY=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=BT2h/BsPlqvz5upGLlbEP1wYmaDvGEfiavNOki8o4nTZUUpSKKZneY9ahlQPBnDKA6sfS1HAJpa3B2oCplY25pO3snQc22VbhtK630AJL7s0EUxdjdv32r2u4i/RIZ4YWdzw3GRLfXOLoZOCA+WwaR+AVQHoTctvbyadLJjjL/Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=Oc9b63TM; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="Oc9b63TM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1783541288; x=1784146088; i=w_armin@gmx.de; bh=QAIaFZLka29HW2sZz2rAP+BR+hjJV+TRf0IFEWbJPbY=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:To:Cc: References:From:In-Reply-To:Content-Type: Content-Transfer-Encoding:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=Oc9b63TMz7TzzZEVEQ4v9HW4RHxfw6d05P4MmIUvxdJPdTY+Gd9bEbSN7OG4V2KC 3eNjj4f+CwzqV4twaAQd6PyexLbbljtco0Ip+IJGjDy8ORGnN4GjNNslhQN5gcrFA tydPbZ6WBKIUuww2Bib5ohApvgZLCq5cREBA6MLifK+rINBBEf/y/8RYttU/0eSv0 VYblBeQpN5gEw+EaawPprFrHYVsCpISDBbAJJyn4jC0+YPQNCPxJrLcRwEXHqcGv0 HY8kunYp3xW30tEMnWApfEe701ZMeuWVO8oqXoYLsdS0+3MKD+AqZpw1XfhUUs+R4 buDZRzx4In2HF0zDGQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MAfYw-1wo73w010a-006PiJ; Wed, 08 Jul 2026 22:08:08 +0200 Message-ID: Date: Wed, 8 Jul 2026 22:08:06 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/7] platform/x86: uniwill-laptop: Add keyboard backlight support To: Werner Sembach , ilpo.jarvinen@linux.intel.com, hansg@kernel.org Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260530170813.10166-1-W_Armin@gmx.de> <20260530170813.10166-2-W_Armin@gmx.de> <10e25d5c-7c50-45fd-a5a9-c06b087a89dd@tuxedocomputers.com> Content-Language: en-US From: Armin Wolf In-Reply-To: <10e25d5c-7c50-45fd-a5a9-c06b087a89dd@tuxedocomputers.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:h5cQqwtiiIfhxFr6c6x0lau6qARSx1JTzjXRnfE1ushA1RZj99O 9/jQa5TcUAT5WOjtdWsK9Pumx7bZyIqHGCLnRfz1JFvG4QdAf4vVm8hfC18NuXuRnxjxgFm JlRUG0Pc62FyIaJNlu2XVev70JMyjaq+RUN6SQJPa3AO2l0aN11sVU6wh/yqDBSM58ka32c ShCe8a4AF2RcQsxvS4rcg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:uLSFGYFajLo=;KknRLjFEU2IsXXvnbTCINWzZ+dL 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 HMukJ4BbzfV7E9/DLgPAP3ofQHFPXn QW0gMDguMDcuMjYgdW0gMjE6MTEgc2NocmllYiBXZXJuZXIgU2VtYmFjaDoNCg0KPiBIaSwNCj4N Cj4gQW0gMzAuMDUuMjYgdW0gMTk6MDggc2NocmllYiBBcm1pbiBXb2xmOg0KPj4gTWFueSBVbml3 aWxsLWJhc2VkIGRldmljZXMgc3VwcG9ydCBlaXRoZXIgYSB3aGl0ZS1vbmx5IG9yIGZ1bGx5DQo+ PiBmZWF0dXJlcyBSR0Iga2V5Ym9hcmQgYmFja2xpZ2h0LiBBZGQgc3VwcG9ydCBmb3IgdGhpcyBm ZWF0dXJlDQo+PiBhbmQgaGFuZGxlIHRoZSBhc3NvY2lhdGVkIFdNSSBldmVudHMuDQo+Pg0KPj4g U2lnbmVkLW9mZi1ieTogQXJtaW4gV29sZiA8V19Bcm1pbkBnbXguZGU+DQo+PiAtLS0NCj4+IMKg IC4uLi9hZG1pbi1ndWlkZS9sYXB0b3BzL3VuaXdpbGwtbGFwdG9wLnJzdMKgwqDCoCB8wqAgMTMg Kw0KPj4gwqAgZHJpdmVycy9wbGF0Zm9ybS94ODYvdW5pd2lsbC91bml3aWxsLWFjcGkuY8KgwqAg fCAzOTIgKysrKysrKysrKysrKysrKystDQo+PiDCoCAyIGZpbGVzIGNoYW5nZWQsIDM5NyBpbnNl cnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQ0KPj4NCj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2FkbWluLWd1aWRlL2xhcHRvcHMvdW5pd2lsbC1sYXB0b3AucnN0IA0KPj4gYi9Eb2N1bWVu dGF0aW9uL2FkbWluLWd1aWRlL2xhcHRvcHMvdW5pd2lsbC1sYXB0b3AucnN0DQo+PiBpbmRleCAy NGI0MWRiYWI4ODYuLjJiMWU1ZGE3MDNhNSAxMDA2NDQNCj4+IC0tLSBhL0RvY3VtZW50YXRpb24v YWRtaW4tZ3VpZGUvbGFwdG9wcy91bml3aWxsLWxhcHRvcC5yc3QNCj4+ICsrKyBiL0RvY3VtZW50 YXRpb24vYWRtaW4tZ3VpZGUvbGFwdG9wcy91bml3aWxsLWxhcHRvcC5yc3QNCj4+IEBAIC03Nyw2 ICs3NywxOSBAQCBMRUQgY2xhc3MgZGV2aWNlLiBUaGUgZGVmYXVsdCBuYW1lIG9mIHRoaXMgTEVE IA0KPj4gY2xhc3MgZGV2aWNlIGlzIGBgdW5pd2lsbDptdWx0aWNvDQo+PiDCoCBTZWUgRG9jdW1l bnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItdW5pd2lsbC1sYXB0b3AgZm9yIA0KPj4g ZGV0YWlscyBvbiBob3cgdG8gY29udHJvbCB0aGUgdmFyaW91cw0KPj4gwqAgYW5pbWF0aW9uIG1v ZGVzIG9mIHRoZSBsaWdodGJhci4NCj4+IMKgICtLZXlib2FyZCBCYWNrbGlnaHQNCj4+ICstLS0t LS0tLS0tLS0tLS0tLS0NCj4+ICsNCj4+ICtUaGUgYGB1bml3aWxsLWxhcHRvcGBgIGRyaXZlciBz dXBwb3J0cyBjb250cm9sbGluZyB0aGUga2V5Ym9hcmQgDQo+PiBiYWNrbGlnaHQgdXNpbmcgdGhl IHN0YW5kYXJkDQo+PiArTEVEIGNsYXNzIGludGVyZmFjZS4gVGhlIGRlZmF1bHQgbmFtZSBvZiB0 aGlzIExFRCBjbGFzcyBkZXZpY2UgaXMgDQo+PiBgYHVuaXdpbGw6d2hpdGU6a2JkX2JhY2tsaWdo dGBgDQo+PiArd2hlbiB0aGUga2V5Ym9hcmQgYmFja2xpZ2h0IHN1cHBvcnRzIG9ubHkgYSBzaW5n bGUgY29sb3IsIG9yIA0KPj4gYGB1bml3aWxsOm11bHRpY29sb3I6a2JkX2JhY2tsaWdodGBgDQo+ PiArd2hlbiB0aGUga2V5Ym9hcmQgYmFja2xpZ2h0IHN1cHBvcnRzIFJHQiBjb2xvcnMuIFRoZSBt YXhpbXVtIA0KPj4gaW50ZW5zaXR5IGZvciBlYWNoIGNvbG9yIGNoYW5uZWwNCj4+ICtpbiBSR0Ig bW9kZSBpcyA1MC4NCj4+ICsNCj4+ICtLZWVwIGluIG1pbmQgdGhhdCBkdWUgdG8gaGFyZHdhcmUg ZGVzaWduIGNob2ljZXMsIHRoZSBkcml2ZXIgZG9lcyANCj4+IG5vdCBzdXBwb3J0IHRoZSBSR0Ig dmFsdWUNCj4+ICtgYDB4MDAwMDAwYGAgKGJsYWNrKSwgaW5zdGVhZCBpdCB3aWxsIGZhbGwgYmFj ayB0byBgYDB4MDEwMTAxYGAgDQo+PiAoZmFpbnQgd2hpdGUpLiBJbiBvcmRlciB0bw0KPj4gK2Rp c2FibGUgdGhlIGtleWJvYXJkIGJhY2tsaWdodCwgdGhlIHN0YW5kYXJkIExFRCBicmlnaHRuZXNz IHNldHRpbmcgDQo+PiBoYXMgdG8gYmUgdXNlZCBpbnN0ZWFkLg0KPj4gKw0KPj4gwqAgQ29uZmln dXJhYmxlIFRHUA0KPj4gwqAgLS0tLS0tLS0tLS0tLS0tLQ0KPj4gwqAgZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGxhdGZvcm0veDg2L3VuaXdpbGwvdW5pd2lsbC1hY3BpLmMgDQo+PiBiL2RyaXZlcnMv cGxhdGZvcm0veDg2L3VuaXdpbGwvdW5pd2lsbC1hY3BpLmMNCj4+IGluZGV4IGFiMDYzZWFkNDVi OS4uZmQwNDAxOTdiMTg5IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdW5p d2lsbC91bml3aWxsLWFjcGkuYw0KPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdW5pd2ls bC91bml3aWxsLWFjcGkuYw0KPj4gQEAgLTExMCw4ICsxMTAsMzEgQEANCj4+IMKgICNkZWZpbmUg RUNfQUREUl9CQVRfQ1lDTEVfQ09VTlRfMsKgwqDCoCAweDA0QTcNCj4+IMKgIMKgICNkZWZpbmUg RUNfQUREUl9QUk9KRUNUX0lEwqDCoMKgwqDCoMKgwqAgMHgwNzQwDQo+PiArI2RlZmluZSBQUk9K RUNUX0lEX05PTkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDANCj4+ICsjZGVmaW5lIFBST0pF Q1RfSURfR0nCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDENCj4+ICsjZGVmaW5lIFBST0pFQ1Rf SURfR0rCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDINCj4+ICsjZGVmaW5lIFBST0pFQ1RfSURf R0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDMNCj4+ICsjZGVmaW5lIFBST0pFQ1RfSURfR0lD TsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwNA0KPj4gKyNkZWZpbmUgUFJPSkVDVF9JRF9HSkNO wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA1DQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX0dLNUNO X1jCoMKgwqDCoMKgwqDCoCAweDA2DQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX0dLN0NOX1PCoMKg wqDCoMKgwqDCoCAweDA3DQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX0dLN0NQQ1NfR0s1Q1E3WsKg wqDCoCAweDA4DQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX1BGwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDA5DQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX0dLNUNQXzRYXzVYXzZYwqDCoMKgIDB4MEEN Cj4+ICsjZGVmaW5lIFBST0pFQ1RfSURfSURQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDBCDQo+ PiArI2RlZmluZSBQUk9KRUNUX0lEX0lEWV82WcKgwqDCoMKgwqDCoMKgIDB4MEMNCj4+ICsjZGVm aW5lIFBST0pFQ1RfSURfSURZXzdZwqDCoMKgwqDCoMKgwqAgMHgwRA0KPj4gKyNkZWZpbmUgUFJP SkVDVF9JRF9QRjRNVV9QRjRNTl9QRjVNVcKgwqDCoCAweDBFDQo+PiArI2RlZmluZSBQUk9KRUNU X0lEX0NNTF9HQU1JTkfCoMKgwqDCoMKgwqDCoCAweDBGDQo+PiArI2RlZmluZSBQUk9KRUNUX0lE X0dLN05YWFLCoMKgwqDCoMKgwqDCoCAweDEwDQo+PiArI2RlZmluZSBQUk9KRUNUX0lEX0dNNU1V MVnCoMKgwqDCoMKgwqDCoCAweDExDQo+PiDCoCAjZGVmaW5lIFBST0pFQ1RfSURfUEg0VFJYMcKg wqDCoMKgwqDCoMKgIDB4MTINCj4+ICsjZGVmaW5lIFBST0pFQ1RfSURfUEg0VFVYMcKgwqDCoMKg wqDCoMKgIDB4MTMNCj4+ICsjZGVmaW5lIFBST0pFQ1RfSURfUEg0VFFYMcKgwqDCoMKgwqDCoMKg IDB4MTQNCj4+IMKgICNkZWZpbmUgUFJPSkVDVF9JRF9QSDZUUlgxwqDCoMKgwqDCoMKgwqAgMHgx NQ0KPj4gKyNkZWZpbmUgUFJPSkVDVF9JRF9QSDZUUVhYwqDCoMKgwqDCoMKgwqAgMHgxNg0KPj4g KyNkZWZpbmUgUFJPSkVDVF9JRF9QSFhBWFhYwqDCoMKgwqDCoMKgwqAgMHgxNw0KPj4gKyNkZWZp bmUgUFJPSkVDVF9JRF9QSFhQWFhYwqDCoMKgwqDCoMKgwqAgMHgxOA0KPj4gwqAgwqAgI2RlZmlu ZSBFQ19BRERSX0FQX09FTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwNzQxDQo+PiDCoCAjZGVm aW5lwqDCoMKgIEVOQUJMRV9NQU5VQUxfQ1RSTMKgwqDCoMKgwqDCoMKgIEJJVCgwKQ0KPj4gQEAg LTIxNCw2ICsyMzcsNyBAQA0KPj4gwqAgI2RlZmluZSBGQU5fVEFCTEVfT0ZGSUNFX01PREXCoMKg wqDCoMKgwqDCoCBCSVQoMikNCj4+IMKgICNkZWZpbmUgRkFOX1YzwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJJVCgzKQ0KPj4gwqAgI2RlZmluZSBERUZBVUxUX01PREXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJJVCg0KQ0KPj4gKyNkZWZpbmUgRU5BQkxFX0NISU5BX01PREXCoMKgwqDC oMKgwqDCoCBCSVQoNikNCj4+IMKgIMKgICNkZWZpbmUgRUNfQUREUl9QTDFfU0VUVElOR8KgwqDC oMKgwqDCoMKgIDB4MDc4Mw0KPj4gwqAgQEAgLTIyNSwxMSArMjQ5LDExIEBADQo+PiDCoCAjZGVm aW5lIEZBTl9DVVJWRV9MRU5HVEjCoMKgwqDCoMKgwqDCoCA1DQo+PiDCoCDCoCAjZGVmaW5lIEVD X0FERFJfS0JEX1NUQVRVU8KgwqDCoMKgwqDCoMKgIDB4MDc4Qw0KPj4gLSNkZWZpbmUgS0JEX1dI SVRFX09OTFnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKcKgwqDCoCAvLyB+c2luZ2xlIGNv bG9yDQo+PiAtI2RlZmluZSBLQkRfU0lOR0xFX0NPTE9SX09GRsKgwqDCoMKgwqDCoMKgIEJJVCgx KQ0KPj4gKyNkZWZpbmUgS0JEX1dISVRFX09OTFnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgw KQ0KPj4gKyNkZWZpbmUgS0JEX1BPV0VSX09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDEp DQo+PiDCoCAjZGVmaW5lIEtCRF9UVVJCT19MRVZFTF9NQVNLwqDCoMKgwqDCoMKgwqAgR0VOTUFT SygzLCAyKQ0KPj4gwqAgI2RlZmluZSBLQkRfQVBQTFnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJ VCg0KQ0KPj4gLSNkZWZpbmUgS0JEX0JSSUdIVE5FU1PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdF Tk1BU0soNywgNSkNCj4+ICsjZGVmaW5lIEtCRF9CUklHSFRORVNTX01BU0vCoMKgwqDCoMKgwqDC oCBHRU5NQVNLKDcsIDUpDQo+PiDCoCDCoCAjZGVmaW5lIEVDX0FERFJfRkFOX0NUUkzCoMKgwqDC oMKgwqDCoCAweDA3OEUNCj4+IMKgICNkZWZpbmUgRkFOM1A1wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEJJVCgxKQ0KPj4gQEAgLTMyMCw2ICszNDQsOSBAQA0KPj4gwqAgI2RlZmluZSBM RURfQ0hBTk5FTFPCoMKgwqDCoMKgwqDCoCAzDQo+PiDCoCAjZGVmaW5lIExFRF9NQVhfQlJJR0hU TkVTU8KgwqDCoCAyMDANCj4+IMKgICsjZGVmaW5lIEtCRF9MRURfQ0hBTk5FTFPCoMKgwqAgMw0K Pj4gKyNkZWZpbmUgS0JEX0xFRF9NQVhfSU5URU5TSVRZwqDCoMKgIDUwDQo+PiArDQo+PiDCoCAj ZGVmaW5lIFVOSVdJTExfRkVBVFVSRV9GTl9MT0NLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQo MCkNCj4+IMKgICNkZWZpbmUgVU5JV0lMTF9GRUFUVVJFX1NVUEVSX0tFWcKgwqDCoMKgwqDCoMKg IEJJVCgxKQ0KPj4gwqAgI2RlZmluZSBVTklXSUxMX0ZFQVRVUkVfVE9VQ0hQQURfVE9HR0xFwqDC oMKgwqDCoMKgwqAgQklUKDIpDQo+PiBAQCAtMzMzLDYgKzM2MCw3IEBADQo+PiDCoCAjZGVmaW5l IFVOSVdJTExfRkVBVFVSRV9TRUNPTkRBUllfRkFOwqDCoMKgwqDCoMKgwqAgQklUKDkpDQo+PiDC oCAjZGVmaW5lIFVOSVdJTExfRkVBVFVSRV9OVklESUFfQ1RHUF9DT05UUk9MwqDCoMKgIEJJVCgx MCkNCj4+IMKgICNkZWZpbmUgVU5JV0lMTF9GRUFUVVJFX1VTQl9DX1BPV0VSX1BSSU9SSVRZwqDC oMKgIEJJVCgxMSkNCj4+ICsjZGVmaW5lIFVOSVdJTExfRkVBVFVSRV9LRVlCT0FSRF9CQUNLTElH SFTCoMKgwqAgQklUKDEyKQ0KPj4gwqAgwqAgZW51bSB1c2JfY19wb3dlcl9wcmlvcml0eV9vcHRp b25zIHsNCj4+IMKgwqDCoMKgwqAgVVNCX0NfUE9XRVJfUFJJT1JJVFlfQ0hBUkdJTkcgPSAwLA0K Pj4gQEAgLTM0NCw2ICszNzIsNyBAQCBzdHJ1Y3QgdW5pd2lsbF9kYXRhIHsNCj4+IMKgwqDCoMKg wqAgYWNwaV9oYW5kbGUgaGFuZGxlOw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgcmVnbWFwICpyZWdt YXA7DQo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBmZWF0dXJlczsNCj4+ICvCoMKgwqAgdTgg cHJvamVjdF9pZDsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFjcGlfYmF0dGVyeV9ob29rIGhvb2s7 DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtdXRleCBiYXR0ZXJ5X2xvY2s7wqDCoMKgIC8qIFByb3Rl Y3RzIHRoZSBsaXN0IG9mIGN1cnJlbnRseSANCj4+IHJlZ2lzdGVyZWQgYmF0dGVyaWVzICovDQo+ PiDCoMKgwqDCoMKgIHVuaW9uIHsNCj4+IEBAIC0zNjIsNiArMzkxLDE4IEBAIHN0cnVjdCB1bml3 aWxsX2RhdGEgew0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbXV0ZXggbGVkX2xvY2s7wqDCoMKgwqDC oMKgwqAgLyogUHJvdGVjdHMgd3JpdGVzIHRvIHRoZSANCj4+IGxpZ2h0YmFyIHJlZ2lzdGVycyAq Lw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbGVkX2NsYXNzZGV2X21jIGxlZF9tY19jZGV2Ow0KPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgbWNfc3VibGVkIGxlZF9tY19zdWJsZWRfaW5mb1tMRURfQ0hBTk5F TFNdOw0KPj4gK8KgwqDCoCBib29sIHNpbmdsZV9jb2xvcl9rYmQ7DQo+PiArwqDCoMKgIHU4IGti ZF9sZWRfbWF4X2JyaWdodG5lc3M7DQo+PiArwqDCoMKgIHVuc2lnbmVkIGludCBsYXN0X2tiZF9z dGF0dXM7DQo+PiArwqDCoMKgIHVuaW9uIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgew0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogUHJvdGVjdHMgd3JpdGVzIHRvIHRoZSBSR0Ig a2V5Ym9hcmQgYmFja2xpZ2h0IA0KPj4gcmVnaXN0ZXJzICovDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgbXV0ZXgga2JkX3JnYl9sZWRfbG9jazsNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBsZWRfY2xhc3NkZXZfbWMga2JkX2xlZF9tY19jZGV2Ow0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG1jX3N1YmxlZCBrYmRfbGVkX21jX3N1YmxlZF9p bmZvW0tCRF9MRURfQ0hBTk5FTFNdOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH07DQo+PiArwqDCoMKg wqDCoMKgwqAgc3RydWN0IGxlZF9jbGFzc2RldiBrYmRfbGVkX2NkZXY7DQo+PiArwqDCoMKgIH07 DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtdXRleCBpbnB1dF9sb2NrO8KgwqDCoCAvKiBQcm90ZWN0 cyBpbnB1dCBzZXF1ZW5jZSBkdXJpbmcgDQo+PiBub3RpZnkgKi8NCj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGlucHV0X2RldiAqaW5wdXRfZGV2aWNlOw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgbmI7DQo+PiBAQCAtMzc2LDYgKzQxNyw3IEBAIHN0cnVjdCB1bml3aWxsX2JhdHRl cnlfZW50cnkgew0KPj4gwqAgwqAgc3RydWN0IHVuaXdpbGxfZGV2aWNlX2Rlc2NyaXB0b3Igew0K Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgZmVhdHVyZXM7DQo+PiArwqDCoMKgIHU4IGtiZF9s ZWRfbWF4X2JyaWdodG5lc3M7DQo+PiDCoMKgwqDCoMKgIC8qIEV4ZWN1dGVkIGR1cmluZyBkcml2 ZXIgcHJvYmluZyAqLw0KPj4gwqDCoMKgwqDCoCBpbnQgKCpwcm9iZSkoc3RydWN0IHVuaXdpbGxf ZGF0YSAqZGF0YSk7DQo+PiDCoCB9Ow0KPj4gQEAgLTQyNyw2ICs0NjksOSBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGtleV9lbnRyeSB1bml3aWxsX2tleW1hcFtdID0gew0KPj4gwqDCoMKgwqDCoCB7 IEtFX0tFWSzCoMKgwqDCoMKgwqAgVU5JV0lMTF9PU0RfS0JESUxMVU1ET1dOLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgeyANCj4+IEtFWV9LQkRJTExVTURPV04gfX0sDQo+PiDCoMKgwqDC oMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBVTklXSUxMX09TRF9LQkRJTExVTVVQLMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+PiBLRVlfS0JESUxMVU1VUCB9fSwNCj4+IMKg ICvCoMKgwqAgLyogUmVwb3J0ZWQgd2hlbiB0aGUgRUMgY2hhbmdlZCB0aGUga2V5Ym9hcmQgYmFj a2xpZ2h0IA0KPj4gYnJpZ2h0bmVzcyAqLw0KPj4gK8KgwqDCoCB7IEtFX0lHTk9SRSzCoMKgwqAg VU5JV0lMTF9PU0RfQkFDS0xJR0hUX0xFVkVMX0NIQU5HRSzCoMKgwqAgeyANCj4+IEtFWV9VTktO T1dOIH19LA0KPj4gKw0KPj4gwqDCoMKgwqDCoCAvKiBSZXBvcnRlZCB3aGVuIHRoZSB1c2VyIHdh bnRzIHRvIHRvZ2dsZSB0aGUgbWljcm9waG9uZSBtdXRlIA0KPj4gc3RhdHVzICovDQo+PiDCoMKg wqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBVTklXSUxMX09TRF9NSUNfTVVURSzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeyANCj4+IEtFWV9NSUNNVVRFIH19LA0KPj4g wqAgQEAgLTQzNSwxMSArNDgwLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlfZW50cnkgdW5p d2lsbF9rZXltYXBbXSANCj4+ID0gew0KPj4gwqAgwqDCoMKgwqDCoCAvKiBSZXBvcnRlZCB3aGVu IHRoZSB1c2VyIHdhbnRzIHRvIHRvZ2dsZSB0aGUgYnJpZ2h0bmVzcyBvZiANCj4+IHRoZSBrZXli b2FyZCAqLw0KPj4gwqDCoMKgwqDCoCB7IEtFX0tFWSzCoMKgwqDCoMKgwqAgVU5JV0lMTF9PU0Rf S0JESUxMVU1UT0dHTEUswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+PiBLRVlfS0JESUxM VU1UT0dHTEUgfX0sDQo+PiAtwqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBVTklXSUxMX09T RF9LQl9MRURfTEVWRUwwLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+PiBLRVlfS0JE SUxMVU1UT0dHTEUgfX0sDQo+PiAtwqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBVTklXSUxM X09TRF9LQl9MRURfTEVWRUwxLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+PiBLRVlf S0JESUxMVU1UT0dHTEUgfX0sDQo+PiAtwqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBVTklX SUxMX09TRF9LQl9MRURfTEVWRUwyLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+PiBL RVlfS0JESUxMVU1UT0dHTEUgfX0sDQo+PiAtwqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDCoCBV TklXSUxMX09TRF9LQl9MRURfTEVWRUwzLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgDQo+ PiBLRVlfS0JESUxMVU1UT0dHTEUgfX0sDQo+PiAtwqDCoMKgIHsgS0VfS0VZLMKgwqDCoMKgwqDC oCBVTklXSUxMX09TRF9LQl9MRURfTEVWRUw0LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsg DQo+PiBLRVlfS0JESUxMVU1UT0dHTEUgfX0sDQo+PiDCoCDCoMKgwqDCoMKgIC8qIEZJWE1FOiBm aW5kIG91dCB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aG9zZSBldmVudHMgKi8NCj4+IMKgwqDCoMKg wqAgeyBLRV9JR05PUkUswqDCoMKgIFVOSVdJTExfT1NEX0JBVF9DSEFSR0VfRlVMTF8yNF9ILMKg wqDCoMKgwqDCoCB7IA0KPj4gS0VZX1VOS05PV04gfX0sDQo+PiBAQCAtNTQ3LDYgKzU4NywxMSBA QCBzdGF0aWMgYm9vbCB1bml3aWxsX3dyaXRlYWJsZV9yZWcoc3RydWN0IGRldmljZSANCj4+ICpk ZXYsIHVuc2lnbmVkIGludCByZWcpDQo+PiDCoMKgwqDCoMKgIGNhc2UgRUNfQUREUl9MSUdIVEJB Ul9BQ19CTFVFOg0KPj4gwqDCoMKgwqDCoCBjYXNlIEVDX0FERFJfQklPU19PRU06DQo+PiDCoMKg wqDCoMKgIGNhc2UgRUNfQUREUl9UUklHR0VSOg0KPj4gK8KgwqDCoCBjYXNlIEVDX0FERFJfUkdC X1JFRDoNCj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX1JHQl9HUkVFTjoNCj4+ICvCoMKgwqAgY2Fz ZSBFQ19BRERSX1JHQl9CTFVFOg0KPj4gK8KgwqDCoCBjYXNlIEVDX0FERFJfQklPU19PRU1fMjoN Cj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX0tCRF9TVEFUVVM6DQo+PiDCoMKgwqDCoMKgIGNhc2Ug RUNfQUREUl9PRU1fNDoNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19BRERSX0NIQVJHRV9DVFJMOg0K Pj4gwqDCoMKgwqDCoCBjYXNlIEVDX0FERFJfTElHSFRCQVJfQkFUX0NUUkw6DQo+PiBAQCAtNTgz LDggKzYyOCwxNCBAQCBzdGF0aWMgYm9vbCB1bml3aWxsX3JlYWRhYmxlX3JlZyhzdHJ1Y3QgZGV2 aWNlIA0KPj4gKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19B RERSX0JJT1NfT0VNOg0KPj4gwqDCoMKgwqDCoCBjYXNlIEVDX0FERFJfUFdNXzE6DQo+PiDCoMKg wqDCoMKgIGNhc2UgRUNfQUREUl9QV01fMjoNCj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX1NVUFBP UlRfMjoNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19BRERSX1RSSUdHRVI6DQo+PiDCoMKgwqDCoMKg IGNhc2UgRUNfQUREUl9TV0lUQ0hfU1RBVFVTOg0KPj4gK8KgwqDCoCBjYXNlIEVDX0FERFJfUkdC X1JFRDoNCj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX1JHQl9HUkVFTjoNCj4+ICvCoMKgwqAgY2Fz ZSBFQ19BRERSX1JHQl9CTFVFOg0KPj4gK8KgwqDCoCBjYXNlIEVDX0FERFJfQklPU19PRU1fMjoN Cj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX0tCRF9TVEFUVVM6DQo+PiDCoMKgwqDCoMKgIGNhc2Ug RUNfQUREUl9PRU1fNDoNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19BRERSX0NIQVJHRV9DVFJMOg0K Pj4gwqDCoMKgwqDCoCBjYXNlIEVDX0FERFJfTElHSFRCQVJfQkFUX0NUUkw6DQo+PiBAQCAtNjE2 LDggKzY2NywxMCBAQCBzdGF0aWMgYm9vbCB1bml3aWxsX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2 aWNlIA0KPj4gKmRldiwgdW5zaWduZWQgaW50IHJlZykNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19B RERSX0JJT1NfT0VNOg0KPj4gwqDCoMKgwqDCoCBjYXNlIEVDX0FERFJfUFdNXzE6DQo+PiDCoMKg wqDCoMKgIGNhc2UgRUNfQUREUl9QV01fMjoNCj4+ICvCoMKgwqAgY2FzZSBFQ19BRERSX1NVUFBP UlRfMjoNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19BRERSX1RSSUdHRVI6DQo+PiDCoMKgwqDCoMKg IGNhc2UgRUNfQUREUl9TV0lUQ0hfU1RBVFVTOg0KPj4gK8KgwqDCoCBjYXNlIEVDX0FERFJfS0JE X1NUQVRVUzoNCj4+IMKgwqDCoMKgwqAgY2FzZSBFQ19BRERSX09FTV80Og0KPj4gwqDCoMKgwqDC oCBjYXNlIEVDX0FERFJfQ0hBUkdFX0NUUkw6DQo+PiDCoMKgwqDCoMKgIGNhc2UgRUNfQUREUl9V U0JfQ19QT1dFUl9QUklPUklUWToNCj4+IEBAIC0xNDQxLDYgKzE0OTQsMjQ2IEBAIHN0YXRpYyBp bnQgdW5pd2lsbF9sZWRfaW5pdChzdHJ1Y3QgDQo+PiB1bml3aWxsX2RhdGEgKmRhdGEpDQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJmluaXRfZGF0YSk7DQo+PiDCoCB9DQo+PiDCoCArc3RhdGljIGludCB1bml3aWxsX25vdGlm eV9rYmRfbGVkKHN0cnVjdCB1bml3aWxsX2RhdGEgKmRhdGEsIGludCANCj4+IGJyaWdodG5lc3Mp DQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsNCj4+ICvC oMKgwqAgaW50IHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKGRhdGEtPnNpbmdsZV9jb2xvcl9r YmQpDQo+PiArwqDCoMKgwqDCoMKgwqAgbGVkX2NkZXYgPSAmZGF0YS0+a2JkX2xlZF9jZGV2Ow0K Pj4gK8KgwqDCoCBlbHNlDQo+PiArwqDCoMKgwqDCoMKgwqAgbGVkX2NkZXYgPSAmZGF0YS0+a2Jk X2xlZF9tY19jZGV2LmxlZF9jZGV2Ow0KPj4gKw0KPj4gK8KgwqDCoCBndWFyZChtdXRleCkoJmxl ZF9jZGV2LT5sZWRfYWNjZXNzKTsNCj4+ICsNCj4+ICvCoMKgwqAgLyogU3luYyB0aGUgTEVEIGJy aWdodG5lc3Mgd2l0aCB0aGUgYWN0dWFsIGhhcmR3YXJlIHN0YXRlICovDQo+PiArwqDCoMKgIHJl dCA9IGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7DQo+PiArwqDCoMKgIGlmIChyZXQg PCAwKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiArDQo+PiArwqDCoMKgIGxl ZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKGxlZF9jZGV2LCBicmlnaHRu ZXNzKTsNCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKyNkZWZp bmUgS0JEX0xFRF9NQVNLwqDCoMKgIChLQkRfQlJJR0hUTkVTU19NQVNLIHwgS0JEX0FQUExZIHwg DQo+PiBLQkRfUE9XRVJfT0ZGKQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdW5pd2lsbF9rYmRfbGVk X3dyaXRlX2JyaWdodG5lc3Moc3RydWN0IHVuaXdpbGxfZGF0YSANCj4+ICpkYXRhLCBpbnQgYnJp Z2h0bmVzcykNCj4+ICt7DQo+PiArwqDCoMKgIC8qIEtCRF9QT1dFUl9PRkYgaXMgYWx3YXlzIGlt cGxpY2l0bHkgY2xlYXJlZCAqLw0KPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgcmVndmFsID0gRklF TERfUFJFUChLQkRfQlJJR0hUTkVTU19NQVNLLCANCj4+IGJyaWdodG5lc3MpIHwgS0JEX0FQUExZ Ow0KPj4gKw0KPj4gK8KgwqDCoCAvKiBXZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSAiYXBwbHkiIGJp dCBpcyBhbHdheXMgd3JpdHRlbiAqLw0KPj4gK8KgwqDCoCByZXR1cm4gcmVnbWFwX3dyaXRlX2Jp dHMoZGF0YS0+cmVnbWFwLCBFQ19BRERSX0tCRF9TVEFUVVMsIA0KPj4gS0JEX0xFRF9NQVNLLCBy ZWd2YWwpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHVuaXdpbGxfa2JkX2xlZF9yZWFk X2JyaWdodG5lc3Moc3RydWN0IHVuaXdpbGxfZGF0YSAqZGF0YSkNCj4+ICt7DQo+PiArwqDCoMKg IHVuc2lnbmVkIGludCByZWd2YWw7DQo+PiArwqDCoMKgIGludCByZXQ7DQo+PiArDQo+PiArwqDC oMKgIHJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgRUNfQUREUl9LQkRfU1RBVFVTLCAm cmVndmFsKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIG1pbihGSUVMRF9HRVQoS0JEX0JSSUdI VE5FU1NfTUFTSywgcmVndmFsKSwgDQo+PiBkYXRhLT5rYmRfbGVkX21heF9icmlnaHRuZXNzKTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCB1bml3aWxsX2tiZF9sZWRfYnJpZ2h0bmVzc19z ZXQoc3RydWN0IGxlZF9jbGFzc2RldiANCj4+ICpsZWRfY2RldiwNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRu ZXNzKQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IHVuaXdpbGxfZGF0YSAqZGF0YSA9IGNvbnRh aW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IA0KPj4gdW5pd2lsbF9kYXRhLCBrYmRfbGVkX2NkZXYp Ow0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gdW5pd2lsbF9rYmRfbGVkX3dyaXRlX2JyaWdodG5l c3MoZGF0YSwgYnJpZ2h0bmVzcyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBlbnVtIGxlZF9i cmlnaHRuZXNzIHVuaXdpbGxfa2JkX2xlZF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgDQo+PiBsZWRf Y2xhc3NkZXYgKmxlZF9jZGV2KQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IHVuaXdpbGxfZGF0 YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IA0KPj4gdW5pd2lsbF9kYXRh LCBrYmRfbGVkX2NkZXYpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gdW5pd2lsbF9rYmRfbGVk X3JlYWRfYnJpZ2h0bmVzcyhkYXRhKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHVu c2lnbmVkIGludCANCj4+IHVuaXdpbGxfa2JkX2xlZF9jaGFubmVsX3RvX3JlZ1tLQkRfTEVEX0NI QU5ORUxTXSA9IHsNCj4+ICvCoMKgwqAgRUNfQUREUl9SR0JfUkVELA0KPj4gK8KgwqDCoCBFQ19B RERSX1JHQl9HUkVFTiwNCj4+ICvCoMKgwqAgRUNfQUREUl9SR0JfQkxVRSwNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyBpbnQgdW5pd2lsbF9rYmRfbGVkX21jX2JyaWdodG5lc3Nfc2V0KHN0cnVj dCBsZWRfY2xhc3NkZXYgDQo+PiAqbGVkX2NkZXYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVz cykNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgKmxlZF9tY19jZGV2 ID0gbGNkZXZfdG9fbWNjZGV2KGxlZF9jZGV2KTsNCj4+ICvCoMKgwqAgc3RydWN0IHVuaXdpbGxf ZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihsZWRfbWNfY2Rldiwgc3RydWN0IA0KPj4gdW5pd2ls bF9kYXRhLCBrYmRfbGVkX21jX2NkZXYpOw0KPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbWluX2lu dGVuc2l0eSA9IDA7DQo+PiArwqDCoMKgIHVuc2lnbmVkIGludCByZWd2YWw7DQo+PiArwqDCoMKg IGludCByZXQ7DQo+PiArDQo+PiArwqDCoMKgIGd1YXJkKG11dGV4KSgmZGF0YS0+a2JkX3JnYl9s ZWRfbG9jayk7DQo+PiArDQo+PiArwqDCoMKgIC8qDQo+PiArwqDCoMKgwqAgKiBUaGUgRUMgaW50 ZXJwcmV0cyBhIFJHQiB2YWx1ZSBvZiAweDAwMDAwMCBhcyBhIGNvbW1hbmQgdG8gDQo+PiByZXN0 b3JlDQo+PiArwqDCoMKgwqAgKiB0aGUgZGV2aWNlLXNwZWNmaWMgZGVmYXVsdCBSR0IgdmFsdWUu IFdvcmsgYXJvdW5kIHRoaXMgYnkgDQo+PiB3cml0aW5nDQo+PiArwqDCoMKgwqAgKiBhIFJHQiB2 YWx1ZSBvZiAweDAxMDEwMSAoZmFpbnQgd2hpdGUpIGluc3RlYWQuDQo+PiArwqDCoMKgwqAgKi8N Cj4+ICvCoMKgwqAgaWYgKGRhdGEtPmtiZF9sZWRfbWNfc3VibGVkX2luZm9bMF0uaW50ZW5zaXR5 ID09IDAgJiYNCj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhLT5rYmRfbGVkX21jX3N1YmxlZF9pbmZv WzFdLmludGVuc2l0eSA9PSAwICYmDQo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9t Y19zdWJsZWRfaW5mb1syXS5pbnRlbnNpdHkgPT0gMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCBtaW5f aW50ZW5zaXR5ID0gMTsNCj4+ICsNCj4+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBLQkRf TEVEX0NIQU5ORUxTOyBpKyspIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZWd2YWwgPSBtYXgoZGF0 YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tpXS5pbnRlbnNpdHksIA0KPj4gbWluX2ludGVuc2l0 eSk7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwg DQo+PiB1bml3aWxsX2tiZF9sZWRfY2hhbm5lbF90b19yZWdbaV0sIHJlZ3ZhbCk7DQo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Ow0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIHJldCA9IHJlZ21hcF93cml0 ZV9iaXRzKGRhdGEtPnJlZ21hcCwgRUNfQUREUl9UUklHR0VSLCANCj4+IFJHQl9BUFBMWV9DT0xP UiwgUkdCX0FQUExZX0NPTE9SKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIHVuaXdpbGxfa2Jk X2xlZF93cml0ZV9icmlnaHRuZXNzKGRhdGEsIGJyaWdodG5lc3MpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyB1bml3aWxsX2tiZF9sZWRfbWNfYnJpZ2h0bmVz c19nZXQoc3RydWN0IA0KPj4gbGVkX2NsYXNzZGV2ICpsZWRfY2RldikNCj4+ICt7DQo+PiArwqDC oMKgIHN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgKmxlZF9tY19jZGV2ID0gbGNkZXZfdG9fbWNjZGV2 KGxlZF9jZGV2KTsNCj4+ICvCoMKgwqAgc3RydWN0IHVuaXdpbGxfZGF0YSAqZGF0YSA9IGNvbnRh aW5lcl9vZihsZWRfbWNfY2Rldiwgc3RydWN0IA0KPj4gdW5pd2lsbF9kYXRhLCBrYmRfbGVkX21j X2NkZXYpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gdW5pd2lsbF9rYmRfbGVkX3JlYWRfYnJp Z2h0bmVzcyhkYXRhKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCB1bml3aWxsX2tiZF9s ZWRfaW5pdChzdHJ1Y3QgdW5pd2lsbF9kYXRhICpkYXRhKQ0KPj4gK3sNCj4+ICvCoMKgwqAgdW5z aWduZWQgaW50IGNvbG9yX2luZGljZXNbS0JEX0xFRF9DSEFOTkVMU10gPSB7DQo+PiArwqDCoMKg wqDCoMKgwqAgTEVEX0NPTE9SX0lEX1JFRCwNCj4+ICvCoMKgwqDCoMKgwqDCoCBMRURfQ09MT1Jf SURfR1JFRU4sDQo+PiArwqDCoMKgwqDCoMKgwqAgTEVEX0NPTE9SX0lEX0JMVUUsDQo+PiArwqDC oMKgIH07DQo+PiArwqDCoMKgIHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YSA9IHsNCj4+ ICvCoMKgwqDCoMKgwqDCoCAuZGV2aWNlbmFtZSA9IERSSVZFUl9OQU1FLA0KPj4gK8KgwqDCoMKg wqDCoMKgIC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsDQo+PiArwqDCoMKgIH07DQo+PiArwqDC oMKgIGJvb2wgaW50ZW5zaXR5X2FsbF96ZXJvcyA9IHRydWU7DQo+PiArwqDCoMKgIGJvb2wgbmVl ZHNfdHJpZ2dlciA9IGZhbHNlOw0KPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgcmVndmFsOw0KPj4g K8KgwqDCoCBpbnQgcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIXVuaXdpbGxfZGV2aWNlX3N1 cHBvcnRzKGRhdGEsIA0KPj4gVU5JV0lMTF9GRUFUVVJFX0tFWUJPQVJEX0JBQ0tMSUdIVCkpDQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+PiArDQo+PiArwqDCoMKgIHJldCA9IHJlZ21h cF9yZWFkKGRhdGEtPnJlZ21hcCwgRUNfQUREUl9TVVBQT1JUXzIsICZyZWd2YWwpOw0KPj4gK8Kg wqDCoCBpZiAocmV0IDwgMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0K Pj4gK8KgwqDCoCBpZiAoIShyZWd2YWwgJiBDSElOQV9NT0RFKSkgew0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IHJlZ21hcF9zZXRfYml0cyhkYXRhLT5yZWdtYXAsIEVDX0FERFJfQklPU19PRU1f MiwgDQo+PiBFTkFCTEVfQ0hJTkFfTU9ERSk7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8 IDApDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gK8KgwqDCoCB9 DQo+PiArDQo+PiArwqDCoMKgIHJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgRUNfQURE Ul9LQkRfU1RBVFVTLCAmcmVndmFsKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgcmVndmFsIHw9IEtCRF9B UFBMWTsNCj4+ICvCoMKgwqAgcmVndmFsICY9IH5LQkRfUE9XRVJfT0ZGOw0KPj4gK8KgwqDCoCBy ZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBFQ19BRERSX0tCRF9TVEFUVVMsIHJlZ3Zh bCk7DQo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7DQo+PiArDQo+PiArwqDCoMKgIHN3aXRjaCAoZGF0YS0+cHJvamVjdF9pZCkgew0KPj4gK8Kg wqDCoCBjYXNlIFBST0pFQ1RfSURfUEY6DQo+PiArwqDCoMKgIGNhc2UgUFJPSkVDVF9JRF9QRjRN VV9QRjRNTl9QRjVNVToNCj4+ICvCoMKgwqAgY2FzZSBQUk9KRUNUX0lEX1BINFRSWDE6DQo+PiAr wqDCoMKgIGNhc2UgUFJPSkVDVF9JRF9QSDRUVVgxOg0KPj4gK8KgwqDCoCBjYXNlIFBST0pFQ1Rf SURfUEg0VFFYMToNCj4+ICvCoMKgwqAgY2FzZSBQUk9KRUNUX0lEX1BINlRSWDE6DQo+PiArwqDC oMKgIGNhc2UgUFJPSkVDVF9JRF9QSDZUUVhYOg0KPj4gK8KgwqDCoCBjYXNlIFBST0pFQ1RfSURf UEhYQVhYWDoNCj4+ICvCoMKgwqAgY2FzZSBQUk9KRUNUX0lEX1BIWFBYWFg6DQo+PiArwqDCoMKg wqDCoMKgwqAgZGF0YS0+c2luZ2xlX2NvbG9yX2tiZCA9IHRydWU7DQo+PiArwqDCoMKgwqDCoMKg wqAgYnJlYWs7DQo+PiArwqDCoMKgIGRlZmF1bHQ6DQo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS0+ c2luZ2xlX2NvbG9yX2tiZCA9IHJlZ3ZhbCAmIEtCRF9XSElURV9PTkxZOw0KPj4gK8KgwqDCoMKg wqDCoMKgIGJyZWFrOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGlmIChkYXRhLT5z aW5nbGVfY29sb3Jfa2JkKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgaW5pdF9kYXRhLmRlZmF1bHRf bGFiZWwgPSAid2hpdGU6IiBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDsNCj4+ICvCoMKgwqDC oMKgwqDCoCBkYXRhLT5rYmRfbGVkX2NkZXYubWF4X2JyaWdodG5lc3MgPSANCj4+IGRhdGEtPmti ZF9sZWRfbWF4X2JyaWdodG5lc3M7DQo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9j ZGV2LmNvbG9yID0gTEVEX0NPTE9SX0lEX1dISVRFOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEt PmtiZF9sZWRfY2Rldi5mbGFncyA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IA0KPj4gTEVEX1JF SkVDVF9OQU1FX0NPTkZMSUNUOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEtPmtiZF9sZWRfY2Rl di5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IA0KPj4gdW5pd2lsbF9rYmRfbGVkX2JyaWdodG5l c3Nfc2V0Ow0KPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEtPmtiZF9sZWRfY2Rldi5icmlnaHRuZXNz X2dldCA9IA0KPj4gdW5pd2lsbF9rYmRfbGVkX2JyaWdodG5lc3NfZ2V0Ow0KPj4gKw0KPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGF0YS0+ ZGV2LCANCj4+ICZkYXRhLT5rYmRfbGVkX2NkZXYsICZpbml0X2RhdGEpOw0KPj4gK8KgwqDCoCB9 DQo+PiArDQo+PiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgS0JEX0xFRF9DSEFOTkVMUzsg aSsrKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tp XS5jb2xvcl9pbmRleCA9IGNvbG9yX2luZGljZXNbaV07DQo+PiArDQo+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCANCj4+IHVuaXdpbGxfa2JkX2xlZF9j aGFubmVsX3RvX3JlZ1tpXSwgJnJlZ3ZhbCk7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8 IDApDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gK8Kg wqDCoMKgwqDCoMKgIC8qDQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIE1ha2Ugc3VyZSB0aGF0IHRo ZSBpbml0aWFsIGludGVuc2l0eSB2YWx1ZSBpcyBub3QgZ3JlYXRlciANCj4+IHRoYW4NCj4+ICvC oMKgwqDCoMKgwqDCoMKgICogdGhlIG1heGltdW0gaW50ZW5zaXR5Lg0KPj4gK8KgwqDCoMKgwqDC oMKgwqAgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmVndmFsID4gS0JEX0xFRF9NQVhfSU5U RU5TSVRZKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWd2YWwgPSBLQkRfTEVEX01B WF9JTlRFTlNJVFk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSByZWdtYXBfd3Jp dGUoZGF0YS0+cmVnbWFwLCANCj4+IHVuaXdpbGxfa2JkX2xlZF9jaGFubmVsX3RvX3JlZ1tpXSwg cmVndmFsKTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQ0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbmVlZHNfdHJpZ2dlciA9IHRydWU7DQo+PiArwqDCoMKgwqDCoMKg wqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZWd2YWwpDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbnRlbnNpdHlfYWxsX3plcm9zID0gZmFsc2U7DQo+PiArDQo+PiArwqDC oMKgwqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tpXS5pbnRlbnNpdHkgPSBy ZWd2YWw7DQo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tp XS5tYXhfaW50ZW5zaXR5ID0gDQo+PiBLQkRfTEVEX01BWF9JTlRFTlNJVFk7DQo+PiArwqDCoMKg wqDCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tpXS5jaGFubmVsID0gaTsNCj4+ ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCAvKiBTZWUgdW5pd2lsbF9rYmRfbGVkX21jX2Jy aWdodG5lc3Nfc2V0KCkgZm9yIGFuIGV4cGxhaW5hdGlvbi4gKi8NCj4+ICvCoMKgwqAgaWYgKGlu dGVuc2l0eV9hbGxfemVyb3MpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBpID0gMDsg aSA8IEtCRF9MRURfQ0hBTk5FTFM7IGkrKykgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZGF0YS0+a2JkX2xlZF9tY19zdWJsZWRfaW5mb1tpXS5pbnRlbnNpdHkgPSAxOw0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgDQo+PiB1 bml3aWxsX2tiZF9sZWRfY2hhbm5lbF90b19yZWdbaV0sIDEpOw0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiByZXQ7DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDC oMKgIG5lZWRzX3RyaWdnZXIgPSB0cnVlOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKg IGlmIChuZWVkc190cmlnZ2VyKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmVnbWFwX3dy aXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBFQ19BRERSX1RSSUdHRVIsIA0KPj4gUkdCX0FQUExZX0NP TE9SLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJHQl9BUFBM WV9DT0xPUik7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKg IHJldCA9IGRldm1fbXV0ZXhfaW5pdChkYXRhLT5kZXYsICZkYXRhLT5rYmRfcmdiX2xlZF9sb2Nr KTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsNCj4+ICsNCj4+ICvCoMKgwqAgaW5pdF9kYXRhLmRlZmF1bHRfbGFiZWwgPSAibXVsdGljb2xv cjoiIExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUOw0KPj4gK8KgwqDCoCBkYXRhLT5rYmRfbGVk X21jX2NkZXYubGVkX2NkZXYubWF4X2JyaWdodG5lc3MgPSANCj4+IGRhdGEtPmtiZF9sZWRfbWF4 X2JyaWdodG5lc3M7DQo+PiArwqDCoMKgIGRhdGEtPmtiZF9sZWRfbWNfY2Rldi5sZWRfY2Rldi5j b2xvciA9IExFRF9DT0xPUl9JRF9NVUxUSTsNCj4+ICvCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19j ZGV2LmxlZF9jZGV2LmZsYWdzID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgDQo+PiBMRURfUkVK RUNUX05BTUVfQ09ORkxJQ1Q7DQo+PiArwqDCoMKgIGRhdGEtPmtiZF9sZWRfbWNfY2Rldi5sZWRf Y2Rldi5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IA0KPj4gdW5pd2lsbF9rYmRfbGVkX21jX2Jy aWdodG5lc3Nfc2V0Ow0KPj4gK8KgwqDCoCBkYXRhLT5rYmRfbGVkX21jX2NkZXYubGVkX2NkZXYu YnJpZ2h0bmVzc19nZXQgPSANCj4+IHVuaXdpbGxfa2JkX2xlZF9tY19icmlnaHRuZXNzX2dldDsN Cj4+ICvCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19jZGV2LnN1YmxlZF9pbmZvID0gZGF0YS0+a2Jk X2xlZF9tY19zdWJsZWRfaW5mbzsNCj4+ICvCoMKgwqAgZGF0YS0+a2JkX2xlZF9tY19jZGV2Lm51 bV9jb2xvcnMgPSBLQkRfTEVEX0NIQU5ORUxTOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gZGV2 bV9sZWRfY2xhc3NkZXZfbXVsdGljb2xvcl9yZWdpc3Rlcl9leHQoZGF0YS0+ZGV2LCANCj4+ICZk YXRhLT5rYmRfbGVkX21jX2NkZXYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmluaXRfZGF0YSk7DQo+PiArfQ0KPj4gKw0KPg0K PiBTb3JyeSBJIGtub3cgSSdtIHdheSB0byBsYXRlIHdpdGggbXkgY29tbWVudCwgYnV0IEknbSBu b3QgYXQgYWxsIGEgZmFuIA0KPiBvZiBob3cgY29tcGxleCB0aGlzIHdob2xlIGZ1bmN0aW9uIGlz Og0KPg0KPiAtIFdoZW4gd2UgaGF2ZSB0byBzZXQgbWF4IGJyaWdodG5lc3Mgb24gYSBwZXIgZGV2 aWNlIGJhc2lzIGFueXdheSwgd2UgDQo+IGNhbiBhbHNvIHNldCByZ2Igb3Igd2hpdGUgb25seSB0 aGVyZSBhbmQgY2FuIHNraXAgdGhpcyB3aG9sZSBkZXRlY3Rpb24gDQo+IG1lY2hhbmlzbSB3aXRo IHRoZSBzdXBwb3J0ZWQgYml0cyB0aGF0IGFyZSB1bnJlbGlhYmxlIGFueXdheQ0KPg0KPiAtIHdl IGhhdmUgYSAybmQgInN1cHBvcnRlZCBkZXZpY2VzL2ZlYXR1cmVzIGxpc3QiIGluc2lkZSB0aGlz IGZ1bmN0aW9uIA0KPiB3aGljaCBpcyBhYnN0cmFjdGluZyBhd2F5IGZyb20gdGhlIGFjdHVhbCBz dXBwb3J0ZWQgZmVhdHVyZSBsaXN0DQo+DQo+IFNob3VsZCBpIHRyeSB0byBzcGluIHVwIHNvbWV0 aGluZyBtdWNoIHNpbXBsZXIsIGJ1dCB0aGF0IHJlcXVpcmVzIA0KPiBleHBsaWNpdCBzZXR0aW5n IGluIHRoZSBkZXZpY2UgZGVzY3JpcHRvcj8NCj4NCj4gQmVzdCByZWdhcmRzDQo+DQo+IFdlcm5l cg0KPg0KR29vZCBwb2ludCwgYnV0IGluIHRoaXMgY2FzZSBpIHRoaW5rIGhhdmluZyB0aGlzIHNt YWxsIGRldmljZSBsaXN0IGlzIE9LLCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb250cm9sIGNlbnRl cg0KZG9lcyBzb21ldGhpbmcgc2ltaWxhci4gSWYgd2UgZW5jb3VudGVyIGEgZGV2aWNlIHRoYXQg ZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgc3RyYXRlZ3kgdGhlbiB3ZSBjYW4gaW5kZWVkDQptb3Zl IHRoZSBjb2RlIGludG8gdGhlIGRldmljZSBkZXNjcmlwdG9yLg0KDQpUaGFua3MsDQpBcm1pbiBX b2xmDQoNCj4+IMKgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdW5pd2lsbF9zYW5pdGl6ZV9iYXR0ZXJ5 X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgDQo+PiB2YWx1ZSkNCj4+IMKgIHsNCj4+IMKgwqDCoMKg wqAgLyogMCBtZWFucyAiY2hhcmdpbmcgdGhyZXNob2xkIG5vdCBhY3RpdmUiICovDQo+PiBAQCAt MTc4OSw2ICsyMDgyLDMxIEBAIHN0YXRpYyBpbnQgdW5pd2lsbF9ub3RpZmllcl9jYWxsKHN0cnVj dCANCj4+IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24NCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBzeXNmc19ub3RpZnkoJmRhdGEtPmRldi0+a29iaiwgTlVMTCwgImZuX2xv Y2siKTsNCj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTk9USUZZX09LOw0KPj4gK8Kg wqDCoCBjYXNlIFVOSVdJTExfT1NEX0tCX0xFRF9MRVZFTDA6DQo+PiArwqDCoMKgwqDCoMKgwqAg aWYgKCF1bml3aWxsX2RldmljZV9zdXBwb3J0cyhkYXRhLCANCj4+IFVOSVdJTExfRkVBVFVSRV9L RVlCT0FSRF9CQUNLTElHSFQpKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5P VElGWV9ET05FOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBub3RpZmllcl9mcm9t X2Vycm5vKHVuaXdpbGxfbm90aWZ5X2tiZF9sZWQoZGF0YSwgMCkpOw0KPj4gK8KgwqDCoCBjYXNl IFVOSVdJTExfT1NEX0tCX0xFRF9MRVZFTDE6DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF1bml3 aWxsX2RldmljZV9zdXBwb3J0cyhkYXRhLCANCj4+IFVOSVdJTExfRkVBVFVSRV9LRVlCT0FSRF9C QUNLTElHSFQpKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05F Ow0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHVu aXdpbGxfbm90aWZ5X2tiZF9sZWQoZGF0YSwgMSkpOw0KPj4gK8KgwqDCoCBjYXNlIFVOSVdJTExf T1NEX0tCX0xFRF9MRVZFTDI6DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF1bml3aWxsX2Rldmlj ZV9zdXBwb3J0cyhkYXRhLCANCj4+IFVOSVdJTExfRkVBVFVSRV9LRVlCT0FSRF9CQUNLTElHSFQp KQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05FOw0KPj4gKw0K Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHVuaXdpbGxfbm90 aWZ5X2tiZF9sZWQoZGF0YSwgMikpOw0KPj4gK8KgwqDCoCBjYXNlIFVOSVdJTExfT1NEX0tCX0xF RF9MRVZFTDM6DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF1bml3aWxsX2RldmljZV9zdXBwb3J0 cyhkYXRhLCANCj4+IFVOSVdJTExfRkVBVFVSRV9LRVlCT0FSRF9CQUNLTElHSFQpKQ0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05FOw0KPj4gKw0KPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHVuaXdpbGxfbm90aWZ5X2tiZF9s ZWQoZGF0YSwgMykpOw0KPj4gK8KgwqDCoCBjYXNlIFVOSVdJTExfT1NEX0tCX0xFRF9MRVZFTDQ6 DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF1bml3aWxsX2RldmljZV9zdXBwb3J0cyhkYXRhLCAN Cj4+IFVOSVdJTExfRkVBVFVSRV9LRVlCT0FSRF9CQUNLTElHSFQpKQ0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05FOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHVuaXdpbGxfbm90aWZ5X2tiZF9sZWQoZGF0YSwg NCkpOw0KPj4gwqDCoMKgwqDCoCBkZWZhdWx0Og0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIG11dGV4 X2xvY2soJmRhdGEtPmlucHV0X2xvY2spOw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJzZV9r ZXltYXBfcmVwb3J0X2V2ZW50KGRhdGEtPmlucHV0X2RldmljZSwgYWN0aW9uLCAxLCANCj4+IHRy dWUpOw0KPj4gQEAgLTE4NDIsNiArMjE2MCw3IEBAIHN0YXRpYyBpbnQgdW5pd2lsbF9lY19pbml0 KHN0cnVjdCB1bml3aWxsX2RhdGEgDQo+PiAqZGF0YSkNCj4+IMKgwqDCoMKgwqAgaWYgKHJldCA8 IDApDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+IMKgICvCoMKgwqAgZGF0 YS0+cHJvamVjdF9pZCA9IHZhbHVlOw0KPj4gwqDCoMKgwqDCoCBkZXZfZGJnKGRhdGEtPmRldiwg IlByb2plY3QgSUQ6ICV1XG4iLCB2YWx1ZSk7DQo+PiDCoCDCoMKgwqDCoMKgIHJldCA9IHJlZ21h cF9zZXRfYml0cyhkYXRhLT5yZWdtYXAsIEVDX0FERFJfQVBfT0VNLCANCj4+IEVOQUJMRV9NQU5V QUxfQ1RSTCk7DQo+PiBAQCAtMTg4NSw2ICsyMjA0LDcgQEAgc3RhdGljIGludCB1bml3aWxsX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgDQo+PiAqcGRldikNCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gcmV0Ow0KPj4gwqAgwqDCoMKgwqDCoCBkYXRhLT5mZWF0dXJlcyA9IGRldmlj ZV9kZXNjcmlwdG9yLmZlYXR1cmVzOw0KPj4gK8KgwqDCoCBkYXRhLT5rYmRfbGVkX21heF9icmln aHRuZXNzID0gDQo+PiBkZXZpY2VfZGVzY3JpcHRvci5rYmRfbGVkX21heF9icmlnaHRuZXNzOw0K Pj4gwqAgwqDCoMKgwqDCoCAvKg0KPj4gwqDCoMKgwqDCoMKgICogU29tZSBkZXZpY2VzIG1pZ2h0 IG5lZWQgdG8gcGVyZm9ybSBzb21lIGRldmljZS1zcGVjaWZpYyANCj4+IGluaXRpYWxpemF0aW9u IHN0ZXBzDQo+PiBAQCAtMTkwNSw2ICsyMjI1LDEwIEBAIHN0YXRpYyBpbnQgdW5pd2lsbF9wcm9i ZShzdHJ1Y3QgDQo+PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiDCoMKgwqDCoMKgIGlmIChy ZXQgPCAwKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiDCoCArwqDCoMKg IHJldCA9IHVuaXdpbGxfa2JkX2xlZF9pbml0KGRhdGEpOw0KPj4gK8KgwqDCoCBpZiAocmV0IDwg MCkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gwqDCoMKgwqDCoCBy ZXQgPSB1bml3aWxsX2h3bW9uX2luaXQoZGF0YSk7DQo+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAw KQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiBAQCAtMTk3Niw2ICsyMzAw LDMxIEBAIHN0YXRpYyBpbnQgdW5pd2lsbF9zdXNwZW5kX2JhdHRlcnkoc3RydWN0IA0KPj4gdW5p d2lsbF9kYXRhICpkYXRhKQ0KPj4gwqDCoMKgwqDCoCByZXR1cm4gcmVnbWFwX3JlYWQoZGF0YS0+ cmVnbWFwLCBFQ19BRERSX0NIQVJHRV9DVFJMLCANCj4+ICZkYXRhLT5sYXN0X2NoYXJnZV9jdHJs KTsNCj4+IMKgIH0NCj4+IMKgICtzdGF0aWMgaW50IHVuaXdpbGxfc3VzcGVuZF9rYmRfbGVkKHN0 cnVjdCB1bml3aWxsX2RhdGEgKmRhdGEpDQo+PiArew0KPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQg cmVndmFsOw0KPj4gK8KgwqDCoCBpbnQgcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIXVuaXdp bGxfZGV2aWNlX3N1cHBvcnRzKGRhdGEsIA0KPj4gVU5JV0lMTF9GRUFUVVJFX0tFWUJPQVJEX0JB Q0tMSUdIVCkpDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+PiArDQo+PiArwqDCoMKg IHJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgRUNfQUREUl9LQkRfU1RBVFVTLCAmcmVn dmFsKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgLyoNCj4+ICvCoMKgwqDCoCAqIFNhdmUgdGhlIGN1cnJl bnQga2V5Ym9hcmQgYmFja2xpZ2h0IHNldHRpbmdzIGluIG9yZGVyIHRvIA0KPj4gcmVzdG9yZSB0 aGVtDQo+PiArwqDCoMKgwqAgKiBkdXJpbmcgcmVzdW1lLiBXZSBjYW5ub3QgdXNlIHRoZSByZWdt YXAgY29kZSBmb3IgdGhhdCBzaW5jZSANCj4+IHRoaXMgcmVnaXN0ZXINCj4+ICvCoMKgwqDCoCAq IG5lZWRzIHRvIGJlIGRlY2xhcmVkIGFzIHZvbGF0aWxlIGJlY2F1c2UgdGhlIGJyaWdodG5lc3Mg Y2FuIA0KPj4gYmUgY2hhbmdlZA0KPj4gK8KgwqDCoMKgICogYnkgdGhlIEVDLg0KPj4gK8KgwqDC oMKgICovDQo+PiArwqDCoMKgIGRhdGEtPmxhc3Rfa2JkX3N0YXR1cyA9IHJlZ3ZhbDsNCj4+ICvC oMKgwqAgRklFTERfTU9ESUZZKEtCRF9CUklHSFRORVNTX01BU0ssICZyZWd2YWwsIDApOw0KPj4g K8KgwqDCoCByZWd2YWwgfD0gS0JEX0FQUExZIHwgS0JEX1BPV0VSX09GRjsNCj4+ICsNCj4+ICvC oMKgwqAgcmV0dXJuIHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIEVDX0FERFJfS0JEX1NUQVRV UywgcmVndmFsKTsNCj4+ICt9DQo+PiArDQo+PiDCoCBzdGF0aWMgaW50IHVuaXdpbGxfc3VzcGVu ZF9udmlkaWFfY3RncChzdHJ1Y3QgdW5pd2lsbF9kYXRhICpkYXRhKQ0KPj4gwqAgew0KPj4gwqDC oMKgwqDCoCBpZiAoIXVuaXdpbGxfZGV2aWNlX3N1cHBvcnRzKGRhdGEsIA0KPj4gVU5JV0lMTF9G RUFUVVJFX05WSURJQV9DVEdQX0NPTlRST0wpKQ0KPj4gQEAgLTIwMDYsNiArMjM1NSwxMCBAQCBz dGF0aWMgaW50IHVuaXdpbGxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+PiDCoMKgwqDC oMKgIGlmIChyZXQgPCAwKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiDC oCArwqDCoMKgIHJldCA9IHVuaXdpbGxfc3VzcGVuZF9rYmRfbGVkKGRhdGEpOw0KPj4gK8KgwqDC oCBpZiAocmV0IDwgMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0KPj4g wqDCoMKgwqDCoCByZXQgPSB1bml3aWxsX3N1c3BlbmRfbnZpZGlhX2N0Z3AoZGF0YSk7DQo+PiDC oMKgwqDCoMKgIGlmIChyZXQgPCAwKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 DQo+PiBAQCAtMjA1Miw2ICsyNDA1LDIzIEBAIHN0YXRpYyBpbnQgdW5pd2lsbF9yZXN1bWVfYmF0 dGVyeShzdHJ1Y3QgDQo+PiB1bml3aWxsX2RhdGEgKmRhdGEpDQo+PiDCoMKgwqDCoMKgIHJldHVy biAwOw0KPj4gwqAgfQ0KPj4gwqAgK3N0YXRpYyBpbnQgdW5pd2lsbF9yZXN1bWVfa2JkX2xlZChz dHJ1Y3QgdW5pd2lsbF9kYXRhICpkYXRhKQ0KPj4gK3sNCj4+ICvCoMKgwqAgaW50IHJldDsNCj4+ ICsNCj4+ICvCoMKgwqAgaWYgKCF1bml3aWxsX2RldmljZV9zdXBwb3J0cyhkYXRhLCANCj4+IFVO SVdJTExfRkVBVFVSRV9LRVlCT0FSRF9CQUNLTElHSFQpKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAwOw0KPj4gKw0KPj4gK8KgwqDCoCByZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFw LCBFQ19BRERSX0tCRF9TVEFUVVMsIA0KPj4gZGF0YS0+bGFzdF9rYmRfc3RhdHVzIHwgS0JEX0FQ UExZKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKGRhdGEtPnNpbmdsZV9jb2xvcl9rYmQpDQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiByZWdtYXBf d3JpdGVfYml0cyhkYXRhLT5yZWdtYXAsIEVDX0FERFJfVFJJR0dFUiwgDQo+PiBSR0JfQVBQTFlf Q09MT1IsIFJHQl9BUFBMWV9DT0xPUik7DQo+PiArfQ0KPj4gKw0KPj4gwqAgc3RhdGljIGludCB1 bml3aWxsX3Jlc3VtZV9udmlkaWFfY3RncChzdHJ1Y3QgdW5pd2lsbF9kYXRhICpkYXRhKQ0KPj4g wqAgew0KPj4gwqDCoMKgwqDCoCBpZiAoIXVuaXdpbGxfZGV2aWNlX3N1cHBvcnRzKGRhdGEsIA0K Pj4gVU5JV0lMTF9GRUFUVVJFX05WSURJQV9DVEdQX0NPTlRST0wpKQ0KPj4gQEAgLTIwOTYsNiAr MjQ2NiwxMCBAQCBzdGF0aWMgaW50IHVuaXdpbGxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikN Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCA8IDApDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsNCj4+IMKgICvCoMKgwqAgcmV0ID0gdW5pd2lsbF9yZXN1bWVfa2JkX2xlZChkYXRhKTsN Cj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsN Cj4+ICsNCj4+IMKgwqDCoMKgwqAgcmV0ID0gdW5pd2lsbF9yZXN1bWVfbnZpZGlhX2N0Z3AoZGF0 YSk7DQo+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7DQo+PiBAQCAtMjc0NSw2ICszMTE5LDggQEAgc3RhdGljIGludCBfX2luaXQgdW5p d2lsbF9pbml0KHZvaWQpDQo+PiDCoMKgwqDCoMKgIGlmIChmb3JjZSkgew0KPj4gwqDCoMKgwqDC oMKgwqDCoMKgIC8qIEFzc3VtZSB0aGF0IHRoZSBkZXZpY2Ugc3VwcG9ydHMgYWxsIGZlYXR1cmVz IGV4Y2VwdCB0aGUgDQo+PiBjaGFyZ2UgbGltaXQgKi8NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBk ZXZpY2VfZGVzY3JpcHRvci5mZWF0dXJlcyA9IFVJTlRfTUFYICYgDQo+PiB+VU5JV0lMTF9GRUFU VVJFX0JBVFRFUllfQ0hBUkdFX0xJTUlUOw0KPj4gK8KgwqDCoMKgwqDCoMKgIC8qIFNvbWUgbW9k ZWxzIG9ubHkgc3VwcG9ydCAzIGJyaWdodG5lc3MgbGV2ZWxzICovDQo+PiArwqDCoMKgwqDCoMKg wqAgZGV2aWNlX2Rlc2NyaXB0b3Iua2JkX2xlZF9tYXhfYnJpZ2h0bmVzcyA9IDQ7DQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgcHJfd2FybigiRW5hYmxpbmcgcG90ZW50aWFsbHkgdW5zdXBwb3J0ZWQg ZmVhdHVyZXNcbiIpOw0KPj4gwqDCoMKgwqDCoCB9DQo+DQo=