From mirko@openwrt.org Mon Jun 18 10:47:51 2012
Received: with ECARTIS (v1.0.0; list asterisk_channel_lantiq); Mon, 18 Jun 2012 10:47:55 +0200 (CEST)
Received: from arrakis.dune.hu ([78.24.191.176]:43283 "EHLO arrakis.dune.hu"
        rhost-flags-OK-OK-OK-OK) by eddie.linux-mips.org with ESMTP
        id S1903520Ab2FRIrv (ORCPT
        <rfc822;asterisk_channel_lantiq@linux-mips.org>);
        Mon, 18 Jun 2012 10:47:51 +0200
X-Virus-Scanned: at arrakis.dune.hu
Received: from [192.168.178.101] (91-66-168-196-dynip.superkabel.de [91.66.168.196])
        by arrakis.dune.hu (Postfix) with ESMTPSA id B821623C0086
        for <asterisk_channel_lantiq@linux-mips.org>; Mon, 18 Jun 2012 10:47:49 +0200 (CEST)
Message-ID: <4FDEEB34.7030706@openwrt.org>
Date:   Mon, 18 Jun 2012 10:47:48 +0200
From:   Mirko Vogt <mirko@openwrt.org>
MIME-Version: 1.0
To:     asterisk_channel_lantiq@linux-mips.org
Subject: test
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Return-Path: <mirko@openwrt.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s asterisk_channel_lantiq"> (uid 0)
X-Orcpt: rfc822;asterisk_channel_lantiq@linux-mips.org
Original-Recipient: rfc822;asterisk_channel_lantiq@linux-mips.org
X-archive-position: 1
X-ecartis-version: Ecartis v1.0.0
Sender: asterisk_channel_lantiq-bounce@linux-mips.org
Errors-to: asterisk_channel_lantiq-bounce@linux-mips.org
X-original-sender: mirko@openwrt.org
Precedence: bulk
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20asterisk_channel_lantiq>
List-software: Ecartis version 1.0.0
List-Id: asterisk_channel_lantiq <asterisk_channel_lantiq.eddie.linux-mips.org>
X-List-ID: asterisk_channel_lantiq <asterisk_channel_lantiq.eddie.linux-mips.org>
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20asterisk_channel_lantiq>
List-owner: <mailto:mirko@nanl.de>
List-post: <mailto:config asterisk_channel_lantiq@linux-mips.org>
List-archive: <http://www.linux-mips.org/archives/asterisk_channel_lantiq/>
X-list: asterisk_channel_lantiq

test

From Martins.Pukitis@lantiq.com Thu Jun 28 14:23:32 2012
Received: with ECARTIS (v1.0.0; list asterisk_channel_lantiq); Thu, 28 Jun 2012 14:23:36 +0200 (CEST)
Received: from Smtp1.Lantiq.com ([195.219.66.200]:40706 "EHLO smtp1.lantiq.com"
        rhost-flags-OK-OK-OK-OK) by eddie.linux-mips.org with ESMTP
        id S1903692Ab2F1MXc (ORCPT
        <rfc822;asterisk_channel_lantiq@linux-mips.org>);
        Thu, 28 Jun 2012 14:23:32 +0200
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: Ap4EALBL7E8KQLW+/2dsb2JhbABFgkW0d4IaBS1eAQwJBw4mHRMmAQQTCAbBMos3hSpgA40KgT2MY4xq
X-IronPort-AV: E=McAfee;i="5400,1158,6755"; a="353249"
Received: from unknown (HELO MUCSVECH045.lantiq.com) ([10.64.181.190])
  by smtp1.lantiq.com with ESMTP; 28 Jun 2012 14:23:26 +0200
Received: from MUCSE039.lantiq.com ([169.254.3.50]) by MUCSVECH045.lantiq.com
 ([10.64.181.78]) with mapi id 14.02.0247.003; Thu, 28 Jun 2012 14:23:40 +0200
From:   "Pukitis Martins (LQLA CPE ST VD)" <Martins.Pukitis@lantiq.com>
To:     "asterisk_channel_lantiq@linux-mips.org" 
        <asterisk_channel_lantiq@linux-mips.org>
Subject: implementation for Lantiq SVIP device
Thread-Topic: implementation for Lantiq SVIP device
Thread-Index: Ac1VKNiLDvVgfJQjSdm3W8fzFXgo3Q==
Date:   Thu, 28 Jun 2012 12:23:39 +0000
Message-ID: <0516062BB218664B8C4CF0F51E20E69F011CAE@MUCSE039.lantiq.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
x-originating-ip: [10.64.132.27]
Content-Type: multipart/mixed;
        boundary="_004_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_"
MIME-Version: 1.0
Return-Path: <Martins.Pukitis@lantiq.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s asterisk_channel_lantiq"> (uid 0)
X-Orcpt: rfc822;asterisk_channel_lantiq@linux-mips.org
Original-Recipient: rfc822;asterisk_channel_lantiq@linux-mips.org
X-archive-position: 2
X-ecartis-version: Ecartis v1.0.0
Sender: asterisk_channel_lantiq-bounce@linux-mips.org
Errors-to: asterisk_channel_lantiq-bounce@linux-mips.org
X-original-sender: Martins.Pukitis@lantiq.com
Precedence: bulk
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20asterisk_channel_lantiq>
List-software: Ecartis version 1.0.0
List-Id: asterisk_channel_lantiq <asterisk_channel_lantiq.eddie.linux-mips.org>
X-List-ID: asterisk_channel_lantiq <asterisk_channel_lantiq.eddie.linux-mips.org>
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20asterisk_channel_lantiq>
List-owner: <mailto:mirko@nanl.de>
List-post: <mailto:config asterisk_channel_lantiq@linux-mips.org>
List-archive: <http://www.linux-mips.org/archives/asterisk_channel_lantiq/>
X-list: asterisk_channel_lantiq

--_004_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_
Content-Type: multipart/alternative;
	boundary="_000_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_"

--_000_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Patch on top of
* commit 553ea59a4cc2d4b963d25ca6c82c0d71311331ac
| Author: Kaspar Schleiser <kaspar@schleiser.de>
| Date:   Wed Jun 20 16:56:27 2012 +0200
|
|     implement transmission of dtmf in call
|
|     Contributed by T-Labs, Deutsche Telekom Innovation Laboratories

--_000_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"blue" vlink=3D"purple">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span lang=3D"LV">Patch on top of<o:p></o:p></span><=
/p>
<p class=3D"MsoNormal"><span lang=3D"LV">* commit 553ea59a4cc2d4b963d25ca6c=
82c0d71311331ac<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">| Author: Kaspar Schleiser &lt;kas=
par@schleiser.de&gt;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">| Date:&nbsp;&nbsp; Wed Jun 20 16:=
56:27 2012 &#43;0200<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">|<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">|&nbsp;&nbsp;&nbsp;&nbsp; implemen=
t transmission of dtmf in call<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">|<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"LV">|&nbsp;&nbsp;&nbsp;&nbsp; Contribu=
ted by T-Labs, Deutsche Telekom Innovation Laboratories<o:p></o:p></span></=
p>
</div>
</body>
</html>

--_000_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_--

--_004_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_
Content-Type: application/octet-stream;
	name="0001-Implementation-for-SVIP.patch"
Content-Description: 0001-Implementation-for-SVIP.patch
Content-Disposition: attachment;
	filename="0001-Implementation-for-SVIP.patch"; size=43565;
	creation-date="Thu, 28 Jun 2012 12:23:12 GMT";
	modification-date="Thu, 28 Jun 2012 11:03:18 GMT"
Content-Transfer-Encoding: base64

RnJvbSBmNjMxZGM4NGU5OTA1YTZiMzU3ZDI3ZjVjZTI5NjFkY2M4MDgzYjA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW5zIFB1a2l0aXMgPG1hcnRpbnMucHVraXRpc0BsYW50
aXEuY29tPgpEYXRlOiBUaHUsIDI4IEp1biAyMDEyIDE0OjAyOjAwICswMzAwClN1YmplY3Q6IFtQ
QVRDSF0gSW1wbGVtZW50YXRpb24gZm9yIFNWSVAKCi0tLQogc3JjL2NoYW5uZWxzL2NoYW5fbGFu
dGlxLmMgfCAxMDIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t
CiAxIGZpbGVzIGNoYW5nZWQsIDkzNyBpbnNlcnRpb25zKCspLCA4MyBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9zcmMvY2hhbm5lbHMvY2hhbl9sYW50aXEuYyBiL3NyYy9jaGFubmVscy9jaGFu
X2xhbnRpcS5jCmluZGV4IDE2ODZiYWEuLmEyMjQwNGQgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFubmVs
cy9jaGFuX2xhbnRpcS5jCisrKyBiL3NyYy9jaGFubmVscy9jaGFuX2xhbnRpcS5jCkBAIC0zLDE1
ICszLDE1IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyLCBMdWthIFBlcmtvdgogICogQ29w
eXJpZ2h0IChDKSAyMDEyLCBKb2huIENyaXNwaW4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgQW5k
cmVqIFZsYcWhacSHCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEFuZHJlaiBWbGHwaeMKICAqIENv
cHlyaWdodCAoQykgMjAxMiwgS2FzcGFyIFNjaGxlaXNlciBmb3IgVC1MYWJzCi0gKiAgICAgICAg
ICAgICAgICAgICAgIChEZXV0c2NoZSBUZWxla29tIElubm92YXRpb24gTGFib3JhdG9yaWVzKQor
ICoJCQkJCQkJKERldXRzY2hlIFRlbGVrb20gSW5ub3ZhdGlvbiBMYWJvcmF0b3JpZXMpCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIE1pcmtvIFZvZ3QgZm9yIFQtTGFicwotICogICAgICAgICAgICAg
ICAgICAgICAoRGV1dHNjaGUgVGVsZWtvbSBJbm5vdmF0aW9uIExhYm9yYXRvcmllcykKKyAqCQkJ
CQkJCShEZXV0c2NoZSBUZWxla29tIElubm92YXRpb24gTGFib3JhdG9yaWVzKQogICoKICAqIEx1
a2EgUGVya292IDxvcGVud3J0QGx1a2FwZXJrb3YubmV0PgogICogSm9obiBDcmlzcGluIDxibG9n
aWNAb3BlbndydC5vcmc+Ci0gKiBBbmRyZWogVmxhxaFpxIcgPGFuZHJlai52bGFzaWMwQGdtYWls
LmNvbT4KKyAqIEFuZHJlaiBWbGHwaeMgPGFuZHJlai52bGFzaWMwQGdtYWlsLmNvbT4KICAqIEth
c3BhciBTY2hsZWlzZXIgPGthc3BhckBzY2hsZWlzZXIuZGU+CiAgKiBNaXJrbyBWb2d0IDxtaXJr
b0BvcGVud3J0Lm9yZz4KICAqCkBAIC0zMiw3ICszMiw3IEBACiAgKgogICogXGF1dGhvciBMdWth
IFBlcmtvdiA8b3BlbndydEBsdWthcGVya292Lm5ldD4KICAqIFxhdXRob3IgSm9obiBDcmlzcGlu
IDxibG9naWNAb3BlbndydC5vcmc+Ci0gKiBcYXV0aG9yIEFuZHJlaiBWbGHFoWnEhyA8YW5kcmVq
LnZsYXNpYzBAZ21haWwuY29tPgorICogXGF1dGhvciBBbmRyZWogVmxh8GnjIDxhbmRyZWoudmxh
c2ljMEBnbWFpbC5jb20+CiAgKiBcYXV0aG9yIEthc3BhciBTY2hsZWlzZXIgPGthc3BhckBzY2hs
ZWlzZXIuZGU+CiAgKiBcYXV0aG9yIE1pcmtvIFZvZ3QgPG1pcmtvQG9wZW53cnQub3JnPgogICog
CkBAIC02NywyOSArNjcsMTQ0IEBAIEFTVEVSSVNLX0ZJTEVfVkVSU0lPTihfX0ZJTEVfXywgIiRS
ZXZpc2lvbjogeHh4ICQiKQogI2luY2x1ZGUgPGFzdGVyaXNrL211c2ljb25ob2xkLmg+CiAjaW5j
bHVkZSA8YXN0ZXJpc2svc2NoZWQuaD4KIAorI2lmICFkZWZpbmVkKFZNTUMpICYmICFkZWZpbmVk
KFNWSVApCisjZXJyb3IgIkRldmljZSBub3Qgc3BlY2lmaWVkIG9yIHN1cHBvcnRlZCIKKyNlbmRp
ZgorCiAvKiBMYW50aXEgVEFQSSBpbmNsdWRlcyAqLwogI2luY2x1ZGUgPGRydl90YXBpL2Rydl90
YXBpX2lvLmg+CisjaWZkZWYgVk1NQwogI2luY2x1ZGUgPGRydl92bW1jL3ZtbWNfaW8uaD4KKyNl
bmRpZgorI2lmZGVmIFNWSVAKKyNpbmNsdWRlIDxkcnZfc3ZpcC9kcnZfc3ZpcF9zeXNfZGVmLmg+
CisjZW5kaWYKIAogI2RlZmluZSBSVFBfSEVBREVSX0xFTiAxMgogCi0jZGVmaW5lIFRBUElfQVVE
SU9fUE9SVF9OVU1fTUFYICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRBUElfVE9ORV9MT0NB
TEVfTk9ORSAgICAgICAgICAgICAgICAgICAwIAotI2RlZmluZSBUQVBJX1RPTkVfTE9DQUxFX1JJ
TkdJTkdfQ09ERSAgICAgICAgICAgMjYKLSNkZWZpbmUgVEFQSV9UT05FX0xPQ0FMRV9CVVNZX0NP
REUgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFRBUElfVE9ORV9MT0NBTEVfQ09OR0VTVElPTl9D
T0RFICAgICAgICAyNwotI2RlZmluZSBUQVBJX1RPTkVfTE9DQUxFX0RJQUxfQ09ERSAgICAgICAg
ICAgICAgMjUKLSNkZWZpbmUgVEFQSV9UT05FX0xPQ0FMRV9XQUlUSU5HX0NPREUgICAgICAgICAg
IDM3CisjZGVmaW5lIFRBUElfQVVESU9fUE9SVF9OVU1fTUFYCQkJCQkgIDIKKyNkZWZpbmUgVEFQ
SV9UT05FX0xPQ0FMRV9OT05FCQkJCQkJIDAgCisjZGVmaW5lIFRBUElfVE9ORV9MT0NBTEVfUklO
R0lOR19DT0RFCQkJICAyNgorI2RlZmluZSBUQVBJX1RPTkVfTE9DQUxFX0JVU1lfQ09ERQkJCQkg
IDI3CisjZGVmaW5lIFRBUElfVE9ORV9MT0NBTEVfQ09OR0VTVElPTl9DT0RFCQkgIDI3CisjZGVm
aW5lIFRBUElfVE9ORV9MT0NBTEVfRElBTF9DT0RFCQkJCSAgMjUKKyNkZWZpbmUgVEFQSV9UT05F
X0xPQ0FMRV9XQUlUSU5HX0NPREUJCQkgIDM3CiAKICNkZWZpbmUgTEFOVElRX0NPTlRFWFRfUFJF
RklYICJsYW50aXEiCiAKKyNpZmRlZiBUQVBJX1ZFUlNJT040CisjZGVmaW5lIFRBUElfREVWX05V
TQkJCQkJCQkJICAwCisjZW5kaWYKKworI2lmZGVmIFNWSVAKKyNpZm5kZWYgSU5FVF9BRERSX0xF
TgorI2RlZmluZSAgSU5FVF9BRERSX0xFTiAgMTgKKyNlbmRpZgorLyogTUFDIGFkZHJlc3Mgc3Ry
aW5nIGxlbmd0aCBYWDpYWDpYWDpYWDpYWDpYWCAqLworI2RlZmluZSBTVklQX0VUSF9TQVNDSUlf
TEVOICAxNworLyoqIE1BQyBhZGRyZXNzIGxlbmd0aCAqLworI2RlZmluZSBFVEhfQUxFTiA2Cisj
ZW5kaWYKKworI2lmZGVmIFZNTUMKIHN0YXRpYyBjb25zdCBjaGFyIGNvbmZpZ1tdID0gImxhbnRp
cS5jb25mIjsKIAogc3RhdGljIGNoYXIgZmlybXdhcmVfZmlsZW5hbWVbUEFUSF9NQVhdID0gIi9s
aWIvZmlybXdhcmUvaWZ4X2Zpcm13YXJlLmJpbiI7CiBzdGF0aWMgY2hhciBiYmRfZmlsZW5hbWVb
UEFUSF9NQVhdID0gIi9saWIvZmlybXdhcmUvaWZ4X2JiZF9meHMuYmluIjsKIHN0YXRpYyBjaGFy
IGJhc2VfcGF0aFtQQVRIX01BWF0gPSAiL2Rldi92bW1jIjsKKyNlbmRpZgorI2lmZGVmIFNWSVAK
K3N0YXRpYyBjb25zdCBjaGFyIGNvbmZpZ1tdID0gIlNWSVAuY29uZiI7CisKK3N0YXRpYyBjaGFy
IGZpcm13YXJlX2ZpbGVuYW1lW1BBVEhfTUFYXSA9CisJIi9vcHQvbGFudGlxL2Rvd25sb2Fkcy9m
aXJtd2FyZS1lbmMuYmluIjsKK3N0YXRpYyBjaGFyIGJiZF9maWxlbmFtZVtQQVRIX01BWF0gPSAi
L29wdC9sYW50aXEvZG93bmxvYWRzL2JiZF9zdmlwX3IuYmluIjsKK3N0YXRpYyBjaGFyIGJhc2Vf
cGF0aFtQQVRIX01BWF0gPSAiL2Rldi9zdmlwIjsKKworI2RlZmluZSBTVklQX1VEUF9QT1JUCQkJ
CQk1MDAwMAorI2VuZGlmIC8qIFNWSVAgKi8KIHN0YXRpYyBpbnQgcGVyX2NoYW5uZWxfY29udGV4
dCA9IDA7CiAKKyNpZmRlZiBUQVBJX1ZFUlNJT040CisvKiogZXZlbnRzIHRoYXQgYXJlIGhhbmRs
ZWQgKi8KK2ludCBhRXZlbnRzW10gPQoreworCUlGWF9UQVBJX0VWRU5UX0RUTUZfRElHSVQsCisJ
LyogRlhTICovCisJSUZYX1RBUElfRVZFTlRfRlhTX09OSE9PSywKKwlJRlhfVEFQSV9FVkVOVF9G
WFNfT0ZGSE9PSywKKwlJRlhfVEFQSV9FVkVOVF9GWFNfRkxBU0gsCisJLyogUFVMU0UgKi8KKwlJ
RlhfVEFQSV9FVkVOVF9QVUxTRV9ESUdJVCwKKwkvKiBDSUQgKi8KKwlJRlhfVEFQSV9FVkVOVF9D
SURfVFhfU0VRX1NUQVJULAorCUlGWF9UQVBJX0VWRU5UX0NJRF9UWF9TRVFfRU5ELAorCUlGWF9U
QVBJX0VWRU5UX0NJRF9UWF9JTkZPX1NUQVJULAorCUlGWF9UQVBJX0VWRU5UX0NJRF9UWF9JTkZP
X0VORCwKKwlJRlhfVEFQSV9FVkVOVF9DSURfVFhfTk9BQ0tfRVJSLAorCUlGWF9UQVBJX0VWRU5U
X0NJRF9UWF9SSU5HQ0FEX0VSUiwKKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9U
QVBJX0VWRU5UX0NJRF9UWF9VTkRFUlJVTl9FUlIsICovCisJSUZYX1RBUElfRVZFTlRfQ0lEX1RY
X05PQUNLMl9FUlIsCisJLyogQ09EICovCisJSUZYX1RBUElfRVZFTlRfQ09EX0RFQ19DSEcsCisJ
LyogUkZDIDI4MzMgKi8KKwlJRlhfVEFQSV9FVkVOVF9SRkMyODMzX0VWRU5ULAorCUlGWF9UQVBJ
X0VWRU5UX0lORk9fTUJYX0NPTkdFU1RJT04sCisJLyogRkFVTFRfR0VORVJBTCAqLworCS8qIG5v
dCBoYW5kbGVkIGJ5IHRhcGkgZHJ2CisJSUZYX1RBUElfRVZFTlRfRkFVTFRfR0VORVJBTF9DSElO
Rk8sICovCisJLyogbm90IGhhbmRsZWQgYnkgdGFwaSBkcnYKKwlJRlhfVEFQSV9FVkVOVF9GQVVM
VF9HRU5FUkFMX0RFVklORk8sICovCisJLyogbm90IGhhbmRsZWQgYnkgdGFwaSBkcnYKKwlJRlhf
VEFQSV9FVkVOVF9GQVVMVF9HRU5FUkFMX0VWVF9GSUZPX09WRVJGTE9XLCAqLworCS8qIEZBVUxU
X0xJTkUgKi8KKwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9MSU5FX0dLX1BPUywKKwlJRlhfVEFQSV9F
VkVOVF9GQVVMVF9MSU5FX0dLX05FRywKKwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9MSU5FX0dLX0xP
VywKKwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9MSU5FX0dLX0hJR0gsCisJSUZYX1RBUElfRVZFTlRf
RkFVTFRfTElORV9PVkVSVEVNUCwKKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9U
QVBJX0VWRU5UX0ZBVUxUX0xJTkVfT1ZFUkNVUlJFTlQsICovCisJSUZYX1RBUElfRVZFTlRfRkFV
TFRfTElORV9HS19MT1dfRU5ELAorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0xJTkVfR0tfSElHSF9F
TkQsCisJSUZYX1RBUElfRVZFTlRfRkFVTFRfTElORV9PVkVSVEVNUF9FTkQsCisJLyogRkFVTFRf
SFcgKi8KKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxU
X0hXX1NQSV9BQ0NFU1MsICovCisJSUZYX1RBUElfRVZFTlRfRkFVTFRfSFdfQ0xPQ0tfRkFJTCwK
KwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9IV19DTE9DS19GQUlMX0VORCwKKwlJRlhfVEFQSV9FVkVO
VF9GQVVMVF9IV19GQVVMVCwKKwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9IV19TWU5DLAorCUlGWF9U
QVBJX0VWRU5UX0ZBVUxUX0hXX1JFU0VULAorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0hXX1NTSV9F
UlIsCisJLyogRkFVTFRfRlcgKi8KKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9U
QVBJX0VWRU5UX0ZBVUxUX0ZXX0VCT19VRiwgKi8KKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRy
dgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0ZXX0VCT19PRiwgKi8KKwkvKiBub3QgaGFuZGxlZCBi
eSB0YXBpIGRydgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0ZXX0NCT19VRiwgKi8KKwkvKiBub3Qg
aGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0ZXX0NCT19PRiwgKi8K
KwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0ZXX0NC
SV9PRiwgKi8KKwkvKiBub3QgaGFuZGxlZCBieSB0YXBpIGRydgorCUlGWF9UQVBJX0VWRU5UX0ZB
VUxUX0ZXX1dBVENIRE9HLCAqLworCS8qKiBIRExDIGVycm9ycyAqLworCS8qIG5vdCBoYW5kbGVk
IGJ5IHRhcGkgZHJ2CisJSUZYX1RBUElfRVZFTlRfRkFVTFRfSERMQ19GUkFNRV9MRU5HVEgsICov
CisJLyogbm90IGhhbmRsZWQgYnkgdGFwaSBkcnYKKwlJRlhfVEFQSV9FVkVOVF9GQVVMVF9IRExD
X05PX0tQSV9QQVRILCAqLworCS8qIG5vdCBoYW5kbGVkIGJ5IHRhcGkgZHJ2CisJSUZYX1RBUElf
RVZFTlRfRkFVTFRfSERMQ19UWF9PVkVSRkxPVywgKi8KKwkvKiBub3QgaGFuZGxlZCBieSB0YXBp
IGRydgorCUlGWF9UQVBJX0VWRU5UX0ZBVUxUX0hETENfRElTQUJMRUQsICovCisJLyogZW5kICov
CisJSUZYX1RBUElfRVZFTlRfTk9ORQorfTsKKyNlbmRpZgorCiAvKgogICogVGhlIHByaXZhdGUg
c3RydWN0dXJlcyBvZiB0aGUgUGhvbmUgSmFjayBjaGFubmVscyBhcmUgbGlua2VkIGZvciBzZWxl
Y3RpbmcKICAqIG91dGdvaW5nIGNoYW5uZWxzLgpAQCAtMTA1LDE2ICsyMjAsMjIgQEAgZW51bSBj
aGFubmVsX3N0YXRlIHsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbGFudGlxX3B2dCB7Ci0Jc3RydWN0
IGFzdF9jaGFubmVsICpvd25lcjsgICAgICAgICAvKiBDaGFubmVsIHdlIGJlbG9uZyB0bywgcG9z
c2libHkgTlVMTCAgKi8KLQlpbnQgcG9ydF9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBv
cnQgbnVtYmVyIG9mIHRoaXMgb2JqZWN0LCAwLi5uICAgICAqLworCXN0cnVjdCBhc3RfY2hhbm5l
bCAqb3duZXI7CQkJLyogQ2hhbm5lbCB3ZSBiZWxvbmcgdG8sIHBvc3NpYmx5IE5VTEwgICovCisJ
aW50IHBvcnRfaWQ7CQkJCQkJCSAgLyogUG9ydCBudW1iZXIgb2YgdGhpcyBvYmplY3QsIDAuLm4J
ICAqLwogCWludCBjaGFubmVsX3N0YXRlOwotCWNoYXIgY29udGV4dFtBU1RfTUFYX0NPTlRFWFRd
OyAgICAgLyogdGhpcyBwb3J0J3MgZGlhbHBsYW4gY29udGV4dCAgICAgICAgICovCi0JY2hhciBl
eHRbQVNUX01BWF9FWFRFTlNJT04rMV07ICAgICAvKiB0aGUgZXh0ZW5zaW9uIHRoaXMgcG9ydCBp
cyBjb25uZWN0aW5nKi8KLQlpbnQgZGlhbF90aW1lcjsgICAgICAgICAgICAgICAgICAgIC8qIHRp
bWVyIGhhbmRsZSBmb3IgYXV0b2RpYWwgdGltZW91dCAgICAqLwotCWNoYXIgZHRtZmJ1ZltBU1Rf
TUFYX0VYVEVOU0lPTisxXTsgLyogYnVmZmVyIGhvbGRpbmcgZGlhbGVkIGRpZ2l0cyAgICAgICAg
ICovCi0JaW50IGR0bWZidWZfbGVuOyAgICAgICAgICAgICAgICAgICAvKiBsZW5naHQgb2YgZHRt
ZmJ1ZiAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQgcnRwX3RpbWVzdGFtcDsgICAgICAgICAg
ICAgICAgIC8qIHRpbWVzdGFtcCBmb3IgUlRQIHBhY2tldHMgICAgICAgICAgICAqLwotCXVpbnQx
Nl90IHJ0cF9zZXFubzsgICAgICAgICAgICAgICAgLyogU2VxdWVuY2UgbnIgZm9yIFJUUCBwYWNr
ZXRzICAgICAgICAgICovCisJY2hhciBjb250ZXh0W0FTVF9NQVhfQ09OVEVYVF07CSAgLyogdGhp
cyBwb3J0J3MgZGlhbHBsYW4gY29udGV4dAkJCSovCisJY2hhciBleHRbQVNUX01BWF9FWFRFTlNJ
T04rMV07CSAgLyogdGhlIGV4dGVuc2lvbiB0aGlzIHBvcnQgaXMgY29ubmVjdGluZyovCisJaW50
IGRpYWxfdGltZXI7CQkJCQkJICAvKiB0aW1lciBoYW5kbGUgZm9yIGF1dG9kaWFsIHRpbWVvdXQJ
ICovCisJY2hhciBkdG1mYnVmW0FTVF9NQVhfRVhURU5TSU9OKzFdOyAvKiBidWZmZXIgaG9sZGlu
ZyBkaWFsZWQgZGlnaXRzCQkJKi8KKwlpbnQgZHRtZmJ1Zl9sZW47CQkJCQkJIC8qIGxlbmdodCBv
ZiBkdG1mYnVmCQkJCQkJICAqLworCWludCBydHBfdGltZXN0YW1wOwkJCQkJICAvKiB0aW1lc3Rh
bXAgZm9yIFJUUCBwYWNrZXRzCQkJCSovCisJdWludDE2X3QgcnRwX3NlcW5vOwkJCQkJIC8qIFNl
cXVlbmNlIG5yIGZvciBSVFAgcGFja2V0cwkJCSAqLworI2lmZGVmIFNWSVAKKwkvKiBTb2NrZXQg
Zm9yIFJUUCBzdHJlYW1pbmcgdG8vZnJvbSBmaXJtd2FyZSAqLworCWludCBza3Q7CisJLyogRG93
bnN0cmVhbSBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyX2luIHJ0cF9kb3duc3RyZWFtX2Fk
ZHI7CisjZW5kaWYKIH0gKmlmbGlzdCA9IE5VTEw7CiAKIHN0YXRpYyBzdHJ1Y3QgbGFudGlxX2N0
eCB7CkBAIC0xMzUsNiArMjU2LDE0IEBAIHN0YXRpYyBpbnQgYXN0X2xhbnRpcV9pbmRpY2F0ZShz
dHJ1Y3QgYXN0X2NoYW5uZWwgKmNoYW4sIGludCBjb25kaXRpb24sIGNvbnN0IHZvCiBzdGF0aWMg
aW50IGFzdF9sYW50aXFfZml4dXAoc3RydWN0IGFzdF9jaGFubmVsICpvbGQsIHN0cnVjdCBhc3Rf
Y2hhbm5lbCAqbmV3KTsKIHN0YXRpYyBzdHJ1Y3QgYXN0X2NoYW5uZWwgKmFzdF9sYW50aXFfcmVx
dWVzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIGZvcm1hdF90IGZvcm1hdCwgY29uc3Qgc3RydWN0IGFz
dF9jaGFubmVsICpyZXF1ZXN0b3IsIHZvaWQgKmRhdGEsIGludCAqY2F1c2UpOwogCisjaWZkZWYg
U1ZJUAorc3RhdGljIGludCBsYW50aXFfc29ja2V0X2dldChpbnQgYyk7CitzdGF0aWMgaW50IGxh
bnRpcV9zb2NrZXRfcmVsZWFzZShpbnQgYyk7CitzdGF0aWMgaW50IGxhbnRpcV91ZHBfaXBfaGVh
ZGVyX2NmZyhpbnQgYyk7CitzdGF0aWMgaW50IGxhbnRpcV9GV19JUF9nZXQoY29uc3QgdW5zaWdu
ZWQgaW50IG5EZXYsIHVuc2lnbmVkIGludCogcElQKTsKK3N0YXRpYyBpbnQgbGFudGlxX2Rvd25z
dHJlYW1fYWRkcmVzc19zZXQoaW50IGMpOworI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
YXN0X2NoYW5uZWxfdGVjaCBsYW50aXFfdGVjaCA9IHsKIAkudHlwZSA9ICJUQVBJIiwKIAkuZGVz
Y3JpcHRpb24gPSAiTGFudGlxIFRBUEkgVGVsZXBob255IEFQSSBEcml2ZXIiLApAQCAtMTY2LDcg
KzI5NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbW9uaXRvcjsKIAogLyogVGhlIHNjaGVkdWxp
bmcgdGhyZWFkICovCiBzdHJ1Y3QgYXN0X3NjaGVkX3RocmVhZCAqc2NoZWRfdGhyZWFkOwotICAg
CisJCiAvKgogICogVGhpcyBpcyB0aGUgdGhyZWFkIGZvciB0aGUgbW9uaXRvciB3aGljaCBjaGVj
a3MgZm9yIGlucHV0IG9uIHRoZSBjaGFubmVscwogICogd2hpY2ggYXJlIG5vdCBjdXJyZW50bHkg
aW4gdXNlLgpAQCAtMTk1LDIxICszMjQsMzkgQEAgdHlwZWRlZiBzdHJ1Y3QgcnRwX2hlYWRlcgog
CiBzdGF0aWMgaW50IGxhbnRpcV9kZXZfb3Blbihjb25zdCBjaGFyICpkZXZfcGF0aCwgY29uc3Qg
aW50MzJfdCBjaF9udW0pCiB7CisjaWZkZWYgVk1NQwogCWNoYXIgZGV2X25hbWVbUEFUSF9NQVhd
OwogCW1lbXNldChkZXZfbmFtZSwgMCwgc2l6ZW9mKGRldl9uYW1lKSk7CiAJc25wcmludGYoZGV2
X25hbWUsIFBBVEhfTUFYLCAiJXMldSV1IiwgZGV2X3BhdGgsIDEsIGNoX251bSk7CiAJcmV0dXJu
IG9wZW4oKGNvbnN0IGNoYXIqKWRldl9uYW1lLCBPX1JEV1IsIDA2NDQpOworI2VuZGlmCisjaWZk
ZWYgU1ZJUAorCXJldHVybiBvcGVuKChjb25zdCBjaGFyKilkZXZfcGF0aCwgT19SRFdSLCAwNjQ0
KTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBsYW50aXFfcmluZyhpbnQgYywgaW50IHIpCiB7
CisjaWZkZWYgVEFQSV9WRVJTSU9ONAorCUlGWF9UQVBJX1JJTkdfdCByaW5nOworI2VuZGlmCiAJ
dWludDhfdCBzdGF0dXM7CiAKKyNpZm5kZWYgVEFQSV9WRVJTSU9ONAogCWlmIChyKSB7CiAJCXN0
YXR1cyA9ICh1aW50OF90KSBpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9SSU5HX1NU
QVJULCAwKTsKIAl9IGVsc2UgewogCQlzdGF0dXMgPSAodWludDhfdCkgaW9jdGwoZGV2X2N0eC5j
aF9mZFtjXSwgSUZYX1RBUElfUklOR19TVE9QLCAwKTsKIAl9CisjZWxzZQorCW1lbXNldCgmcmlu
ZywgMHgwLCBzaXplb2YoSUZYX1RBUElfUklOR190KSk7CisJcmluZy5kZXYgPSBUQVBJX0RFVl9O
VU07CisJcmluZy5jaCA9IGM7CisJaWYgKHIpCisJCXN0YXR1cyA9ICh1aW50OF90KSBpb2N0bChk
ZXZfY3R4LmRldl9mZCwgIElGWF9UQVBJX1JJTkdfU1RBUlQsICZyaW5nKTsKKwllbHNlCisJCXN0
YXR1cyA9ICh1aW50OF90KSBpb2N0bChkZXZfY3R4LmRldl9mZCwgIElGWF9UQVBJX1JJTkdfU1RP
UCwgJnJpbmcpOworI2VuZGlmCiAKIAlpZiAoc3RhdHVzKSB7CiAJCWFzdF9sb2coTE9HX0VSUk9S
LCAiJXMgaW9jdGwgZmFpbGVkXG4iLApAQCAtMjE5LDM1ICszNjYsNzUgQEAgc3RhdGljIHZvaWQg
bGFudGlxX3JpbmcoaW50IGMsIGludCByKQogCiBzdGF0aWMgaW50IGxhbnRpcV9wbGF5X3RvbmUo
aW50IGMsIGludCB0KQogeworI2lmZGVmIFRBUElfVkVSU0lPTjQKKwlJRlhfVEFQSV9UT05FX1BM
QVlfdCB0b25lOworI2VuZGlmIC8qIFRBUElfVkVSU0lPTjQgKi8KKworI2lmZGVmIFRBUElfVkVS
U0lPTjQKKwltZW1zZXQgKCZ0b25lLCAwLCBzaXplb2YgKHRvbmUpKTsKKwl0b25lLmRldiA9IFRB
UElfREVWX05VTTsKKwl0b25lLmNoID0gYzsKKwl0b25lLm1vZHVsZSA9IElGWF9UQVBJX01PRFVM
RV9UWVBFX0FMTTsKKwl0b25lLmV4dGVybmFsID0gSUZYX1RSVUU7CisjZW5kaWYKIAkvKiBzdG9w
IGN1cnJlbnRseSBwbGF5aW5nIHRvbmUgYmVmb3JlIHN0YXJ0aW5nIG5ldyBvbmUgKi8KIAlpZiAo
dCAhPSBUQVBJX1RPTkVfTE9DQUxFX05PTkUpIHsKKyNpZm5kZWYgVEFQSV9WRVJTSU9ONAogCQlp
b2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9UT05FX0xPQ0FMX1BMQVksIFRBUElfVE9O
RV9MT0NBTEVfTk9ORSk7CisjZWxzZQorCQl0b25lLmluZGV4ID0gVEFQSV9UT05FX0xPQ0FMRV9O
T05FOworCQlpb2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfVE9ORV9QTEFZLCAmdG9uZSk7
CisjZW5kaWYKIAl9Ci0KLQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElfVE9O
RV9MT0NBTF9QTEFZLCB0KSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJaWYgKGlvY3RsKGRl
dl9jdHguY2hfZmRbY10sIElGWF9UQVBJX1RPTkVfTE9DQUxfUExBWSwgdCkpCisjZWxzZQorCXRv
bmUuaW5kZXggPSB0OworCWlmIChpb2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfVE9ORV9Q
TEFZLCAmdG9uZSkpCisjZW5kaWYKKwl7CiAJCWFzdF9sb2coTE9HX0VSUk9SLCAiSUZYX1RBUElf
VE9ORV9MT0NBTF9QTEFZIGlvY3RsIGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0KIAly
ZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2hhbm5lbF9zdGF0ZSBsYW50aXFfZ2V0X2hvb2tz
dGF0dXMoaW50IHBvcnQpCiB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQKIAl1aW50OF90IHN0YXR1
czsKKyNlbHNlCisJSUZYX1RBUElfTElORV9IT09LX1NUQVRVU19HRVRfdCBsaW5lX2hvb2tfc3Rh
dHVzOworI2VuZGlmCiAKLQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtwb3J0XSwgSUZYX1RBUElf
TElORV9IT09LX1NUQVRVU19HRVQsICZzdGF0dXMpKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQK
KwlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtwb3J0XSwgSUZYX1RBUElfTElORV9IT09LX1NUQVRV
U19HRVQsICZzdGF0dXMpKQorI2Vsc2UKKwltZW1zZXQgKCZsaW5lX2hvb2tfc3RhdHVzLCAwLCBz
aXplb2YgKElGWF9UQVBJX0xJTkVfSE9PS19TVEFUVVNfR0VUX3QpKTsKKwlsaW5lX2hvb2tfc3Rh
dHVzLmNoID0gcG9ydDsKKwlsaW5lX2hvb2tfc3RhdHVzLmRldiA9IFRBUElfREVWX05VTTsKKwlp
ZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0xJTkVfSE9PS19TVEFUVVNfR0VULCAm
bGluZV9ob29rX3N0YXR1cykpCisjZW5kaWYKKwl7CiAJCWFzdF9sb2coTE9HX0VSUk9SLCAiSUZY
X1RBUElfTElORV9IT09LX1NUQVRVU19HRVQgaW9jdGwgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIFVO
S05PV047CiAJfQogCisjaWZuZGVmIFRBUElfVkVSU0lPTjQKIAlpZiAoc3RhdHVzKSB7CiAJCXJl
dHVybiBPRkZIT09LOwogCX0gZWxzZSB7CiAJCXJldHVybiBPTkhPT0s7CiAJfQorI2Vsc2UKKwlp
ZiAobGluZV9ob29rX3N0YXR1cy5ob29rTW9kZSA9PSBJRlhfVEFQSV9MSU5FX09GRkhPT0spCisJ
CXJldHVybiBPRkZIT09LOworCWVsc2UKKwkJcmV0dXJuIE9OSE9PSzsKKyNlbmRpZgogfQogCisj
aWZkZWYgVk1NQwogc3RhdGljIGludAogbGFudGlxX2Rldl9iaW5hcnlfYnVmZmVyX2NyZWF0ZShj
b25zdCBjaGFyICpwYXRoLCB1aW50OF90ICoqcHBCdWYsIHVpbnQzMl90ICpwQnVmU3opCiB7CkBA
IC0zMTYsNiArNTAzLDcgQEAgc3RhdGljIGludDMyX3QgbGFudGlxX2Rldl9maXJtd2FyZV9kb3du
bG9hZChpbnQzMl90IGZkLCBjb25zdCBjaGFyICpwYXRoKQogCiAJcmV0dXJuIDA7CiB9CisjZW5k
aWYKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlX3N0cmluZyhlbnVtIGNoYW5uZWxfc3RhdGUg
cykKIHsKQEAgLTM4MCw4ICs1NjgsOCBAQCBzdGF0aWMgaW50IGFzdF9sYW50aXFfaW5kaWNhdGUo
c3RydWN0IGFzdF9jaGFubmVsICpjaGFuLCBpbnQgY29uZGl0aW9uLCBjb25zdCB2bwogCQljYXNl
IEFTVF9DT05UUk9MX1JJTkdJTkc6CiAJCQl7CiAJCQkJbGFudGlxX3BsYXlfdG9uZShwdnQtPnBv
cnRfaWQsIFRBUElfVE9ORV9MT0NBTEVfUklOR0lOR19DT0RFKTsKLQkJCQlyZXR1cm4gMDsKLQkJ
CX0KKwlyZXR1cm4gMDsKK30KIAkJZGVmYXVsdDoKIAkJCXsKIAkJCQkvKiAtMSBsZXRzIGFzdGVy
aXNrIGdlbmVyYXRlIHRoZSB0b25lICovCkBAIC00MTMsNyArNjAxLDcgQEAgc3RhdGljIGludCBh
c3RfbGFudGlxX2NhbGwoc3RydWN0IGFzdF9jaGFubmVsICphc3QsIGNoYXIgKmRlc3QsIGludCB0
aW1lb3V0KQogewogCS8qIGxvY2sgdG8gcHJldmVudCBzaW11bHRhbmVvdXMgYWNjZXNzIHdpdGgg
ZG9fbW9uaXRvciB0aHJlYWQgcHJvY2Vzc2luZyAqLwogCWFzdF9tdXRleF9sb2NrKCZpZmxvY2sp
OwotCisJCiAJc3RydWN0IGxhbnRpcV9wdnQgKnB2dCA9IGFzdC0+dGVjaF9wdnQ7CiAJYXN0X2xv
ZyhMT0dfREVCVUcsICJzdGF0ZTogJXNcbiIsIHN0YXRlX3N0cmluZyhwdnQtPmNoYW5uZWxfc3Rh
dGUpKTsKIApAQCAtNDUxLDE0ICs2MzksMTQgQEAgc3RhdGljIGludCBhc3RfbGFudGlxX2hhbmd1
cChzdHJ1Y3QgYXN0X2NoYW5uZWwgKmFzdCkKIAlzd2l0Y2ggKHB2dC0+Y2hhbm5lbF9zdGF0ZSkg
ewogCQljYXNlIFJJTkdJTkc6CiAJCWNhc2UgT05IT09LOiAKLQkJCWxhbnRpcV9yaW5nKHB2dC0+
cG9ydF9pZCwgMCk7Ci0JCQlwdnQtPmNoYW5uZWxfc3RhdGUgPSBPTkhPT0s7Ci0JCQlicmVhazsK
KwkJCQlsYW50aXFfcmluZyhwdnQtPnBvcnRfaWQsIDApOworCQkJCXB2dC0+Y2hhbm5lbF9zdGF0
ZSA9IE9OSE9PSzsKKwkJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWFzdF9sb2coTE9HX0RFQlVH
LCAid2Ugd2VyZSBodW5nIHVwLCBwbGF5IGJ1c3kgdG9uZVxuIik7Ci0JCQlwdnQtPmNoYW5uZWxf
c3RhdGUgPSBDQUxMX0VOREVEOwotCQkJbGFudGlxX3BsYXlfdG9uZShwdnQtPnBvcnRfaWQsIFRB
UElfVE9ORV9MT0NBTEVfQlVTWV9DT0RFKTsKLQl9CisJCQkJcHZ0LT5jaGFubmVsX3N0YXRlID0g
Q0FMTF9FTkRFRDsKKwkJCQlsYW50aXFfcGxheV90b25lKHB2dC0+cG9ydF9pZCwgVEFQSV9UT05F
X0xPQ0FMRV9CVVNZX0NPREUpOworCQkJfQogCiAJYXN0X3NldHN0YXRlKGFzdCwgQVNUX1NUQVRF
X0RPV04pOwogCWFzdF9tb2R1bGVfdW5yZWYoYXN0X21vZHVsZV9pbmZvLT5zZWxmKTsKQEAgLTUw
MCwyNSArNjg4LDM4IEBAIHN0YXRpYyBpbnQgYXN0X2xhbnRpcV93cml0ZShzdHJ1Y3QgYXN0X2No
YW5uZWwgKmFzdCwgc3RydWN0IGFzdF9mcmFtZSAqZnJhbWUpCiAJfQogCiAJbWVtc2V0KGJ1Ziwg
MCwgc2l6ZW9mKHJ0cF9oZWFkZXJfdCkpOwotCXJ0cF9oZWFkZXItPnZlcnNpb24gICAgICA9IDI7
Ci0JcnRwX2hlYWRlci0+cGFkZGluZyAgICAgID0gMDsKLQlydHBfaGVhZGVyLT5leHRlbnNpb24g
ICAgPSAwOwotCXJ0cF9oZWFkZXItPmNzcmNfY291bnQgICA9IDA7Ci0JcnRwX2hlYWRlci0+bWFy
a2VyICAgICAgID0gMDsKLQlydHBfaGVhZGVyLT50aW1lc3RhbXAgICAgPSBwdnQtPnJ0cF90aW1l
c3RhbXA7Ci0JcnRwX2hlYWRlci0+c2Vxbm8gICAgICAgID0gcHZ0LT5ydHBfc2Vxbm8rKzsKLQly
dHBfaGVhZGVyLT5zc3JjICAgICAgICAgPSAwOworCXJ0cF9oZWFkZXItPnZlcnNpb24JCT0gMjsK
KwlydHBfaGVhZGVyLT5wYWRkaW5nCQk9IDA7CisJcnRwX2hlYWRlci0+ZXh0ZW5zaW9uCSA9IDA7
CisJcnRwX2hlYWRlci0+Y3NyY19jb3VudAk9IDA7CisJcnRwX2hlYWRlci0+bWFya2VyCQkgPSAw
OworCXJ0cF9oZWFkZXItPnRpbWVzdGFtcAkgPSBwdnQtPnJ0cF90aW1lc3RhbXA7CisJcnRwX2hl
YWRlci0+c2Vxbm8JCSAgPSBwdnQtPnJ0cF9zZXFubysrOworCXJ0cF9oZWFkZXItPnNzcmMJCQk9
IDA7CiAJcnRwX2hlYWRlci0+cGF5bG9hZF90eXBlID0gKHVpbnQ4X3QpIGZyYW1lLT5zdWJjbGFz
cy5jb2RlYzsKIAogCXB2dC0+cnRwX3RpbWVzdGFtcCArPSAxNjA7CiAKIAltZW1jcHkoYnVmK1JU
UF9IRUFERVJfTEVOLCBmcmFtZS0+ZGF0YS5wdHIsIGZyYW1lLT5kYXRhbGVuKTsKIAorI2lmZGVm
IFZNTUMKIAlyZXQgPSB3cml0ZShkZXZfY3R4LmNoX2ZkW3B2dC0+cG9ydF9pZF0sIGJ1ZiwgZnJh
bWUtPmRhdGFsZW4rUlRQX0hFQURFUl9MRU4pOwogCWlmIChyZXQgPD0gMCkgewogCQlhc3RfZGVi
dWcoMSwgIlRBUEk6IGFzdF9sYW50aXFfd3JpdGUoKTogZXJyb3Igd3JpdGluZy5cbiIpOwogCQly
ZXR1cm4gLTE7CiAJfQorI2VuZGlmCisjaWZkZWYgU1ZJUAorCXJldCA9IHNlbmR0byhpZmxpc3Rb
cHZ0LT5wb3J0X2lkXS5za3QsIGJ1ZiwgZnJhbWUtPmRhdGFsZW4gKyBSVFBfSEVBREVSX0xFTiwK
KwkJMCwgJmlmbGlzdFtwdnQtPnBvcnRfaWRdLnJ0cF9kb3duc3RyZWFtX2FkZHIsCisJCXNpemVv
ZihpZmxpc3RbcHZ0LT5wb3J0X2lkXS5ydHBfZG93bnN0cmVhbV9hZGRyKSk7CisJaWYgKHJldCA8
PSAwKQorCXsKKwkJYXN0X2RlYnVnKDEsICJUQVBJOiBhc3RfbGFudGlxX3dyaXRlKCk6IGVycm9y
IHNlbmRpbmcgUlRQIHBhY2tldCB0byAiCisJCQkiZGV2aWNlLlxuIik7CisJCXJldHVybiAtMTsK
Kwl9CisjZW5kaWYKIAogI2lmZGVmIFRPRE9fREVWRUxfSU5GTwogCWFzdF9kZWJ1ZygxLCAiYXN0
X2xhbnRpcV93cml0ZSgpOiBzaXplOiAlaSB2ZXJzaW9uOiAlaSBwYWRkaW5nOiAlaSBleHRlbnNp
b246ICVpIGNzcmNfY291bnQ6ICVpXG4iCkBAIC01NDYsMTcgKzc0Nyw0OCBAQCBzdGF0aWMgc3Ry
dWN0IGFzdF9mcmFtZSAqIGFzdF9sYW50aXFfZXhjZXB0aW9uKHN0cnVjdCBhc3RfY2hhbm5lbCAq
YXN0KQogCiBzdGF0aWMgaW50IGxhbnRpcV9zdGFuZGJ5KGludCBjKQogewotCWlmIChpb2N0bChk
ZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9MSU5FX0ZFRURfU0VULCBJRlhfVEFQSV9MSU5FX0ZF
RURfU1RBTkRCWSkpIHsKKyNpZmRlZiBUQVBJX1ZFUlNJT040CisJSUZYX1RBUElfTElORV9GRUVE
X3QgbGluZV9mZWVkOworCUlGWF9UQVBJX0VOQ19NT0RFX3QgZW5jX21vZGU7CisJSUZYX1RBUElf
REVDX3QgZGVjOworI2VuZGlmCisKKyNpZm5kZWYgVEFQSV9WRVJTSU9ONAorCWlmIChpb2N0bChk
ZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9MSU5FX0ZFRURfU0VULCBJRlhfVEFQSV9MSU5FX0ZF
RURfU1RBTkRCWSkpCisjZWxzZQorCW1lbXNldCgmbGluZV9mZWVkLCAweDAsIHNpemVvZihJRlhf
VEFQSV9MSU5FX0ZFRURfdCkpOworCWxpbmVfZmVlZC5kZXYgPSBUQVBJX0RFVl9OVU07CisJbGlu
ZV9mZWVkLmNoID0gYzsKKwlsaW5lX2ZlZWQubGluZU1vZGUgPSBJRlhfVEFQSV9MSU5FX0ZFRURf
U1RBTkRCWTsKKwlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0xJTkVfRkVFRF9T
RVQsICZsaW5lX2ZlZWQpKQorI2VuZGlmCisJewogCQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9U
QVBJX0xJTkVfRkVFRF9TRVQgaW9jdGwgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAot
CWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9FTkNfU1RPUCwgMCkpIHsKKyNp
Zm5kZWYgVEFQSV9WRVJTSU9ONAorCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQ
SV9FTkNfU1RPUCwgMCkpCisjZWxzZQorCW1lbXNldCgmZW5jX21vZGUsIDB4MCwgc2l6ZW9mKElG
WF9UQVBJX0VOQ19NT0RFX3QpKTsKKwllbmNfbW9kZS5kZXYgPSBUQVBJX0RFVl9OVU07CisJZW5j
X21vZGUuY2ggPSBjOworCWlmIChpb2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfRU5DX1NU
T1AsICZlbmNfbW9kZSkpCisjZW5kaWYKKwl7CiAJCWFzdF9sb2coTE9HX0VSUk9SLCAiSUZYX1RB
UElfRU5DX1NUT1AgaW9jdGwgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChp
b2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9ERUNfU1RPUCwgMCkpIHsKKyNpZm5kZWYg
VEFQSV9WRVJTSU9ONAorCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9ERUNf
U1RPUCwgMCkpCisjZWxzZQorCW1lbXNldCgmZGVjLCAweDAsIHNpemVvZihkZWMpKTsKKwlkZWMu
ZGV2ID0gVEFQSV9ERVZfTlVNOworCWRlYy5jaCA9IGM7CisJaWYgKGlvY3RsKGRldl9jdHguZGV2
X2ZkLCBJRlhfVEFQSV9ERUNfU1RPUCwgJmRlYykpCisjZW5kaWYKKwl7CiAJCWFzdF9sb2coTE9H
X0VSUk9SLCAiSUZYX1RBUElfREVDX1NUT1AgaW9jdGwgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0x
OwogCX0KQEAgLTY1OCw3ICs4OTAsMTIgQEAgc3RhdGljIGludCBsYW50aXFfZGV2X2RhdGFfaGFu
ZGxlcihpbnQgYykKIAljaGFyIGJ1ZltCVUZTSVpdOwogCXN0cnVjdCBhc3RfZnJhbWUgZnJhbWUg
PSB7MH07CiAKKyNpZmRlZiBWTU1DCiAJaW50IHJlcyA9IHJlYWQoZGV2X2N0eC5jaF9mZFtjXSwg
YnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKyNpZmRlZiBTVklQCisJaW50IHJlcyA9IHJlY3Yo
aWZsaXN0W2NdLnNrdCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisjZW5kaWYKIAlpZiAocmVzIDw9
IDApIGFzdF9sb2coTE9HX0VSUk9SLCAid2UgZ290IHJlYWQgZXJyb3IgJWlcbiIsIHJlcyk7CiAJ
CiAJcnRwX2hlYWRlcl90ICpydHAgPSAocnRwX2hlYWRlcl90KikgYnVmOwpAQCAtNjk4LDcgKzkz
NSw3IEBAIHN0YXRpYyBpbnQgbGFudGlxX2Rldl9kYXRhX2hhbmRsZXIoaW50IGMpCiB9CiAKIHN0
YXRpYyBpbnQgYWNjZXB0X2NhbGwoaW50IGMpCi17IAorewogCWFzdF9sb2coTE9HX0RFQlVHLCAi
VE9ETyAtIERFQlVHIE1TRyIpOwogCiAJc3RydWN0IGxhbnRpcV9wdnQgKnB2dCA9ICZpZmxpc3Rb
Y107CkBAIC03MDgsOSArOTQ1LDkgQEAgc3RhdGljIGludCBhY2NlcHRfY2FsbChpbnQgYykKIAog
CQlzd2l0Y2ggKGNoYW4tPl9zdGF0ZSkgewogCQkJY2FzZSBBU1RfU1RBVEVfUklOR0lORzoKLQkJ
CQlhc3RfcXVldWVfY29udHJvbChwdnQtPm93bmVyLCBBU1RfQ09OVFJPTF9BTlNXRVIpOwotCQkJ
CXB2dC0+Y2hhbm5lbF9zdGF0ZSA9IElOQ0FMTDsKLQkJCQlicmVhazsKKwkJCQkJYXN0X3F1ZXVl
X2NvbnRyb2wocHZ0LT5vd25lciwgQVNUX0NPTlRST0xfQU5TV0VSKTsKKwkJCQkJcHZ0LT5jaGFu
bmVsX3N0YXRlID0gSU5DQUxMOworCQkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJYXN0X2xv
ZyhMT0dfV0FSTklORywgImVudGVyZWQgdW5oYW5kbGVkIHN0YXRlICVzXG4iLCBhc3Rfc3RhdGUy
c3RyKGNoYW4tPl9zdGF0ZSkpOwogCQl9CkBAIC03MjEsNiArOTU4LDEyIEBAIHN0YXRpYyBpbnQg
YWNjZXB0X2NhbGwoaW50IGMpCiAKIHN0YXRpYyBpbnQgbGFudGlxX2Rldl9ldmVudF9ob29rKGlu
dCBjLCBpbnQgc3RhdGUpCiB7CisjaWZkZWYgVEFQSV9WRVJTSU9ONAorCUlGWF9UQVBJX0xJTkVf
RkVFRF90IGxpbmVfZmVlZDsKKwlJRlhfVEFQSV9FTkNfTU9ERV90IGVuY19tb2RlOworCUlGWF9U
QVBJX0RFQ190IGRlYzsKKyNlbmRpZgorCiAJYXN0X211dGV4X2xvY2soJmlmbG9jayk7CiAKIAlh
c3RfbG9nKExPR19ERUJVRywgIm9uIHBvcnQgJWkgZGV0ZWN0ZWQgZXZlbnQgJXMgaG9va1xuIiwg
Yywgc3RhdGUgPyAib24iIDogIm9mZiIpOwpAQCAtNzQ0LDIyICs5ODcsNjcgQEAgc3RhdGljIGlu
dCBsYW50aXFfZGV2X2V2ZW50X2hvb2soaW50IGMsIGludCBzdGF0ZSkKIAkJCQlicmVhazsKIAkJ
fQogCQlpZmxpc3RbY10uY2hhbm5lbF9zdGF0ZSA9IE9OSE9PSzsKKyNpZmRlZiBTVklQCisJCWlm
IChsYW50aXFfc29ja2V0X3JlbGVhc2UoYykpCisJCQlnb3RvIG91dDsKKyNlbmRpZgogCX0gZWxz
ZSB7Ci0JCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9MSU5FX0ZFRURfU0VU
LCBJRlhfVEFQSV9MSU5FX0ZFRURfQUNUSVZFKSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJ
CWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9MSU5FX0ZFRURfU0VULCBJRlhf
VEFQSV9MSU5FX0ZFRURfQUNUSVZFKSkKKyNlbHNlCisJCW1lbXNldCgmbGluZV9mZWVkLCAweDAs
IHNpemVvZihJRlhfVEFQSV9MSU5FX0ZFRURfdCkpOworCQlsaW5lX2ZlZWQuZGV2ID0gVEFQSV9E
RVZfTlVNOworCQlsaW5lX2ZlZWQuY2ggPSBjOworCQlsaW5lX2ZlZWQubGluZU1vZGUgPSBJRlhf
VEFQSV9MSU5FX0ZFRURfQUNUSVZFOworCQlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9U
QVBJX0xJTkVfRkVFRF9TRVQsICZsaW5lX2ZlZWQpKQorI2VuZGlmCisJCXsKIAkJCWFzdF9sb2co
TE9HX0VSUk9SLCAiSUZYX1RBUElfTElORV9GRUVEX1NFVCBpb2N0bCBmYWlsZWRcbiIpOwogCQkJ
Z290byBvdXQ7CiAJCX0KIAotCQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElf
RU5DX1NUQVJULCAwKSkgeworI2lmZGVmIFNWSVAKKwkJLyogVURQL0lQIHBhY2tldCBoZWFkZXIg
Y29uZmlndXJhdGlvbiAqLworCQlpZiAobGFudGlxX3VkcF9pcF9oZWFkZXJfY2ZnKGMpKQorCQl7
CisJCQlhc3RfbG9nKExPR19FUlJPUiwgIlVEUC9JUCBwYWNrZXQgaGVhZGVyIGNvbmZpZ3VyYXRp
b24gZmFpbGVkXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisjZW5kaWYKKworI2lmbmRlZiBUQVBJ
X1ZFUlNJT040CisJCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9FTkNfU1RB
UlQsIDApKQorI2Vsc2UKKwkJbWVtc2V0KCZlbmNfbW9kZSwgMHgwLCBzaXplb2YoSUZYX1RBUElf
RU5DX01PREVfdCkpOworCQllbmNfbW9kZS5kZXYgPSBUQVBJX0RFVl9OVU07CisJCWVuY19tb2Rl
LmNoID0gYzsKKwkJaWYgKGlvY3RsKGRldl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9FTkNfU1RBUlQs
ICZlbmNfbW9kZSkpCisjZW5kaWYKKwkJewogCQkJYXN0X2xvZyhMT0dfRVJST1IsICJJRlhfVEFQ
SV9FTkNfU1RBUlQgaW9jdGwgZmFpbGVkXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYg
KGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0RFQ19TVEFSVCwgMCkpIHsKKyNpZm5k
ZWYgVEFQSV9WRVJTSU9ONAorCQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElf
REVDX1NUQVJULCAwKSkKKyNlbHNlCisJCW1lbXNldCgmZGVjLCAweDAsIHNpemVvZihkZWMpKTsK
KwkJZGVjLmRldiA9IFRBUElfREVWX05VTTsKKwkJZGVjLmNoID0gYzsKKwkJaWYgKGlvY3RsKGRl
dl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9ERUNfU1RBUlQsICZkZWMpKQorI2VuZGlmCisJCXsKIAkJ
CWFzdF9sb2coTE9HX0VSUk9SLCAiSUZYX1RBUElfREVDX1NUQVJUIGlvY3RsIGZhaWxlZFxuIik7
CiAJCQlnb3RvIG91dDsKIAkJfQogCisjaWZkZWYgU1ZJUAorCQlpZiAobGFudGlxX3NvY2tldF9n
ZXQoYykpCisJCQlnb3RvIG91dDsKKwkJaWYgKGxhbnRpcV9kb3duc3RyZWFtX2FkZHJlc3Nfc2V0
KGMpKQorCQkJZ290byBvdXQ7CisjZW5kaWYKKwogCQlzd2l0Y2ggKGlmbGlzdFtjXS5jaGFubmVs
X3N0YXRlKSB7CiAJCQljYXNlIFJJTkdJTkc6IAogCQkJCXJldCA9IGFjY2VwdF9jYWxsKGMpOwpA
QCAtNzk3LDcgKzEwODUsNyBAQCBzdGF0aWMgdm9pZCBsYW50aXFfZGlhbChzdHJ1Y3QgbGFudGlx
X3B2dCAqcHZ0KQogCiAJCXN0cmNweShwdnQtPmV4dCwgcHZ0LT5kdG1mYnVmKTsKIAotCQlhc3Rf
dmVyYm9zZShWRVJCT1NFX1BSRUZJWF8zICIgZXh0ZW5zaW9uIGV4aXN0cywgc3RhcnRpbmcgUEJY
ICVzXG4iLCBwdnQtPmV4dCk7CisJCWFzdF92ZXJib3NlKCBWRVJCT1NFX1BSRUZJWF8zICIgIGV4
dGVuc2lvbiBleGlzdHMsIHN0YXJ0aW5nIFBCWCAlc1xuIiwgcHZ0LT5leHQpOwogCiAJCWNoYW4g
PSBsYW50aXFfY2hhbm5lbChBU1RfU1RBVEVfVVAsIDEsIHB2dC0+ZXh0KzEsIHB2dC0+Y29udGV4
dCk7CiAJCWNoYW4tPnRlY2hfcHZ0ID0gcHZ0OwpAQCAtODM2LDcgKzExMjQsNyBAQCBzdGF0aWMg
aW50IGxhbnRpcV9ldmVudF9kaWFsX3RpbWVvdXQoY29uc3Qgdm9pZCogZGF0YSkKIAlyZXR1cm4g
MDsKIH0KIAotc3RhdGljIGludCBsYW50aXFfc2VuZF9kaWdpdChpbnQgYywgY2hhciBkaWdpdCkg
CitzdGF0aWMgaW50IGxhbnRpcV9zZW5kX2RpZ2l0KGludCBjLCBjaGFyIGRpZ2l0KQogewogCXN0
cnVjdCBsYW50aXFfcHZ0ICpwdnQgPSAmaWZsaXN0W2NdOwogCkBAIC05MTMsNiArMTIwMSw5IEBA
IHN0YXRpYyB2b2lkIGxhbnRpcV9kZXZfZXZlbnRfaGFuZGxlcih2b2lkKQogCQlhc3RfbXV0ZXhf
bG9jaygmaWZsb2NrKTsKIAogCQltZW1zZXQgKCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7Cisj
aWZkZWYgVEFQSV9WRVJTSU9ONAorCQlldmVudC5kZXYgPSBUQVBJX0RFVl9OVU07CisjZW5kaWYg
LyogVEFQSV9WRVJTSU9ONCAqLwogCQlldmVudC5jaCA9IGk7CiAJCWlmIChpb2N0bChkZXZfY3R4
LmRldl9mZCwgSUZYX1RBUElfRVZFTlRfR0VULCAmZXZlbnQpKSB7CiAJCQlhc3RfbXV0ZXhfdW5s
b2NrKCZpZmxvY2spOwpAQCAtOTU1LDI0ICsxMjQ2LDUwIEBAIHN0YXRpYyB2b2lkIGxhbnRpcV9k
ZXZfZXZlbnRfaGFuZGxlcih2b2lkKQogCiBzdGF0aWMgdm9pZCAqIGxhbnRpcV9ldmVudHNfbW9u
aXRvcih2b2lkICpkYXRhKQogeworI2lmZGVmIFZNTUMKKwlzdHJ1Y3QgcG9sbGZkIGZkc1szXTsK
KyNlbmRpZgorI2lmZGVmIFNWSVAKKwlzdHJ1Y3QgcG9sbGZkKiBmZHM7CisJYXN0X2Zkc2V0IHNr
dF9mZHM7CisJaW50IHdpZHRoID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCWludCBp
OworI2VuZGlmCisKIAlhc3RfdmVyYm9zZSgiVEFQSSB0aHJlYWQgc3RhcnRlZFxuIik7CiAKLQlz
dHJ1Y3QgcG9sbGZkIGZkc1szXTsKKyNpZmRlZiBTVklQCisJZmRzID0gYXN0X2NhbGxvYygxLCBz
aXplb2Yoc3RydWN0IHBvbGxmZCkpOworCXRpbWVvdXQudHZfc2VjID0gMDsKKwkvKiBSVFAgcGFj
a2V0IHNlbGVjdCB0aW1lb3V0OiAxMDAgbXMgKi8KKwl0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDA7
CisjZW5kaWYKIAogCWZkc1swXS5mZCA9IGRldl9jdHguZGV2X2ZkOwogCWZkc1swXS5ldmVudHMg
PSBQT0xMSU47CisjaWZkZWYgVk1NQwogCWZkc1sxXS5mZCA9IGRldl9jdHguY2hfZmRbMF07CiAJ
ZmRzWzFdLmV2ZW50cyA9IFBPTExJTjsKIAlmZHNbMl0uZmQgPSBkZXZfY3R4LmNoX2ZkWzFdOwog
CWZkc1syXS5ldmVudHMgPSBQT0xMSU47CisjZW5kaWYKIAogCXdoaWxlIChtb25pdG9yKSB7CiAJ
CWFzdF9tdXRleF9sb2NrKCZtb25sb2NrKTsKIAorI2lmZGVmIFZNTUMKIAkJaWYgKHBvbGwoZmRz
LCBkZXZfY3R4LmNoYW5uZWxzICsgMSwgMjAwMCkgPD0gMCkgewogCQkJYXN0X211dGV4X3VubG9j
aygmbW9ubG9jayk7CiAJCQljb250aW51ZTsKIAkJfQorI2VuZGlmCisjaWZkZWYgU1ZJUAorCQkv
KiBTbGVlcCBvbmx5IDIgbXMsIGJlY2F1c2Ugd2UgcG9sbCBmb3IgUlRQIHN0cmVhbSB3aXRoIGFu
b3RoZXIKKwkJICogc2VsZWN0IGNhbGwuCisJCSAqLworCQlwb2xsKGZkcywgMSwgMik7CisjZW5k
aWYKIAogCQlpZiAoZmRzWzBdLnJldmVudHMgJiBQT0xMSU4pIHsKIAkJCWxhbnRpcV9kZXZfZXZl
bnRfaGFuZGxlcigpOwpAQCAtOTgwLDYgKzEyOTcsNyBAQCBzdGF0aWMgdm9pZCAqIGxhbnRpcV9l
dmVudHNfbW9uaXRvcih2b2lkICpkYXRhKQogCiAJCWFzdF9tdXRleF91bmxvY2soJm1vbmxvY2sp
OwogCisjaWZkZWYgVk1NQwogCQlpZiAoKGZkc1sxXS5yZXZlbnRzICYgUE9MTElOKSAmJiAobGFu
dGlxX2Rldl9kYXRhX2hhbmRsZXIoMCkpKSB7CiAJCQlhc3RfbG9nKExPR19FUlJPUiwgImRhdGEg
aGFuZGxlciAwIGZhaWxlZFxuIik7CiAJCQlicmVhazsKQEAgLTk4OSw2ICsxMzA3LDI5IEBAIHN0
YXRpYyB2b2lkICogbGFudGlxX2V2ZW50c19tb25pdG9yKHZvaWQgKmRhdGEpCiAJCQlhc3RfbG9n
KExPR19FUlJPUiwgImRhdGEgaGFuZGxlciAxIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQor
I2VuZGlmCisjaWZkZWYgU1ZJUAorCQlGRF9aRVJPKCZza3RfZmRzKTsKKworCQlmb3IgKGkgPSAw
OyBpIDwgZGV2X2N0eC5jaGFubmVsczsgaSsrKQorCQkJaWYgKGlmbGlzdFtpXS5za3QgIT0gLTEp
CisJCQl7CisJCQkJRkRfU0VUKGlmbGlzdFtpXS5za3QsICZza3RfZmRzKTsKKwkJCQlpZiAod2lk
dGggPCBpZmxpc3RbaV0uc2t0KQorCQkJCQl3aWR0aCA9IGlmbGlzdFtpXS5za3Q7CisJCQl9CisJ
CWlmIChhc3Rfc2VsZWN0KHdpZHRoICsgMSwgJnNrdF9mZHMsIE5VTEwsIE5VTEwsICZ0aW1lb3V0
KSA8PSAwKQorCQkJY29udGludWU7CisJCWZvciAoaSA9IDA7IGkgPCBkZXZfY3R4LmNoYW5uZWxz
OyBpKyspCisJCXsKKwkJCWlmIChpZmxpc3RbaV0uc2t0ICE9IC0xICYmIEZEX0lTU0VUKGlmbGlz
dFtpXS5za3QsICZza3RfZmRzKSAmJgorCQkJCShsYW50aXFfZGV2X2RhdGFfaGFuZGxlcihpKSkp
CisJCQl7CisJCQkJYXN0X2xvZyhMT0dfRVJST1IsICJkYXRhIGhhbmRsZXIgJWQgZmFpbGVkXG4i
LCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmIC8qIFNWSVAgKi8KIAl9CiAKIAly
ZXR1cm4gTlVMTDsKQEAgLTEwMzcsMjIgKzEzNzgsNjAgQEAgc3RhdGljIGludCByZXN0YXJ0X21v
bml0b3Iodm9pZCkKIHN0YXRpYyB2b2lkIGxhbnRpcV9jbGVhbnVwKHZvaWQpCiB7CiAJaW50IGM7
CisjaWZkZWYgVEFQSV9WRVJTSU9ONAorCUlGWF9UQVBJX0xJTkVfRkVFRF90IGxpbmVfZmVlZDsK
KwlJRlhfVEFQSV9FTkNfTU9ERV90IGVuY19tb2RlOworCUlGWF9UQVBJX0RFQ190IGRlYzsKKwlJ
RlhfVEFQSV9ERVZfU1RBUlRfQ0ZHX3QgZGV2X3N0YXJ0OworI2VuZGlmCiAKLQlmb3IgKGMgPSAw
OyBjIDwgZGV2X2N0eC5jaGFubmVscyA7IGMrKykgeyAKLQkJaWYgKGlvY3RsKGRldl9jdHguY2hf
ZmRbY10sIElGWF9UQVBJX0xJTkVfRkVFRF9TRVQsIElGWF9UQVBJX0xJTkVfRkVFRF9TVEFOREJZ
KSkgeworCWZvciAoYyA9IDA7IGMgPCBkZXZfY3R4LmNoYW5uZWxzIDsgYysrKSB7CisjaWZuZGVm
IFRBUElfVkVSU0lPTjQKKwkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0xJ
TkVfRkVFRF9TRVQsIElGWF9UQVBJX0xJTkVfRkVFRF9TVEFOREJZKSkKKyNlbHNlCisJCW1lbXNl
dCgmbGluZV9mZWVkLCAweDAsIHNpemVvZihJRlhfVEFQSV9MSU5FX0ZFRURfdCkpOworCQlsaW5l
X2ZlZWQuZGV2ID0gVEFQSV9ERVZfTlVNOworCQlsaW5lX2ZlZWQuY2ggPSBjOworCQlsaW5lX2Zl
ZWQubGluZU1vZGUgPSBJRlhfVEFQSV9MSU5FX0ZFRURfU1RBTkRCWTsKKwkJaWYgKGlvY3RsKGRl
dl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9MSU5FX0ZFRURfU0VULCAmbGluZV9mZWVkKSkKKyNlbmRp
ZgorCQl7CiAJCQlhc3RfbG9nKExPR19XQVJOSU5HLCAiSUZYX1RBUElfTElORV9GRUVEX1NFVCBp
b2N0bCBmYWlsZWRcbiIpOwogCQl9CiAKLQkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElG
WF9UQVBJX0VOQ19TVE9QLCAwKSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJCWlmIChpb2N0
bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9FTkNfU1RPUCwgMCkpCisjZWxzZQorCQltZW1z
ZXQoJmVuY19tb2RlLCAweDAsIHNpemVvZihJRlhfVEFQSV9FTkNfTU9ERV90KSk7CisJCWVuY19t
b2RlLmRldiA9IFRBUElfREVWX05VTTsKKwkJZW5jX21vZGUuY2ggPSBjOworCQlpZiAoaW9jdGwo
ZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0VOQ19TVE9QLCAmZW5jX21vZGUpKQorI2VuZGlmCisJ
CXsKIAkJCWFzdF9sb2coTE9HX1dBUk5JTkcsICJJRlhfVEFQSV9FTkNfU1RPUCBpb2N0bCBmYWls
ZWRcbiIpOwogCQl9CiAKLQkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0RF
Q19TVE9QLCAwKSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJCWlmIChpb2N0bChkZXZfY3R4
LmNoX2ZkW2NdLCBJRlhfVEFQSV9ERUNfU1RPUCwgMCkpCisjZWxzZQorCQltZW1zZXQoJmRlYywg
MHgwLCBzaXplb2YoZGVjKSk7CisJCWRlYy5kZXYgPSBUQVBJX0RFVl9OVU07CisJCWRlYy5jaCA9
IGM7CisJCWlmIChpb2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfREVDX1NUT1AsICZkZWMp
KQorI2VuZGlmCisJCXsKIAkJCWFzdF9sb2coTE9HX1dBUk5JTkcsICJJRlhfVEFQSV9ERUNfU1RP
UCBpb2N0bCBmYWlsZWRcbiIpOwogCQl9CiAJfQogCi0JaWYgKGlvY3RsKGRldl9jdHguZGV2X2Zk
LCBJRlhfVEFQSV9ERVZfU1RPUCwgMCkpIHsKKyNpZm5kZWYgVEFQSV9WRVJTSU9ONAorCWlmIChp
b2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfREVWX1NUT1AsIDApKQorI2Vsc2UKKwltZW1z
ZXQoJmRldl9zdGFydCwgMHgwLCBzaXplb2YoZGV2X3N0YXJ0KSk7CisJZGV2X3N0YXJ0LmRldiA9
IFRBUElfREVWX05VTTsKKwlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0RFVl9T
VE9QLCAmZGV2X3N0YXJ0KSkKKyNlbmRpZgorCXsKIAkJYXN0X2xvZyhMT0dfV0FSTklORywgIklG
WF9UQVBJX0RFVl9TVE9QIGlvY3RsIGZhaWxlZFxuIik7CiAJfQogCkBAIC0xMTE1LDcgKzE0OTQs
NyBAQCBzdGF0aWMgaW50IGxhbnRpcV9jcmVhdGVfcHZ0cyh2b2lkKQogewogCWludCBpOwogCi0J
aWZsaXN0ID0gYXN0X2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxhbnRpcV9wdnQpICogZGV2X2N0
eC5jaGFubmVscyk7CisJaWZsaXN0ID0gYXN0X2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxhbnRp
cV9wdnQpKmRldl9jdHguY2hhbm5lbHMpOwogCiAJaWYgKGlmbGlzdCkgeyAKIAkJZm9yIChpPTAg
OyBpPGRldl9jdHguY2hhbm5lbHMgOyBpKyspIHsKQEAgLTExMjcsNiArMTUwNiw5IEBAIHN0YXRp
YyBpbnQgbGFudGlxX2NyZWF0ZV9wdnRzKHZvaWQpCiAJCQl9IGVsc2UgewogCQkJCXNucHJpbnRm
KGlmbGlzdFtpXS5jb250ZXh0LCBBU1RfTUFYX0NPTlRFWFQsICJkZWZhdWx0Iik7CiAJCQl9Cisj
aWZkZWYgU1ZJUAorCQkJaWZsaXN0W2ldLnNrdCA9IC0xOworI2VuZGlmCiAJCX0KIAkJcmV0dXJu
IDA7CiAJfSBlbHNlIHsKQEAgLTExNDIsNiArMTUyNCwxMSBAQCBzdGF0aWMgaW50IGxhbnRpcV9z
ZXR1cF9ydHAoaW50IGMpCiAKIAltZW1zZXQoKGNoYXIqKSZydHBQVENvbmYsICdcMCcsIHNpemVv
ZihydHBQVENvbmYpKTsKIAorI2lmZGVmIFRBUElfVkVSU0lPTjQKKwlydHBQVENvbmYuZGV2ID0g
VEFQSV9ERVZfTlVNOworCXJ0cFBUQ29uZi5jaCA9IGM7CisjZW5kaWYKKwogCXJ0cFBUQ29uZi5u
UFR1cFtJRlhfVEFQSV9DT0RfVFlQRV9NTEFXXSA9IEFTVF9GT1JNQVRfVUxBVzsKIAlydHBQVENv
bmYublBUdXBbSUZYX1RBUElfQ09EX1RZUEVfQUxBV10gPSBBU1RfRk9STUFUX0FMQVc7CiAvLwly
dHBQVENvbmYublBUdXBbSUZYX1RBUElfQ09EX1RZUEVfRzcyM182M10gPSBBU1RfRk9STUFUX0c3
MjNfMTsKQEAgLTExNTcsNyArMTU0NCwxMiBAQCBzdGF0aWMgaW50IGxhbnRpcV9zZXR1cF9ydHAo
aW50IGMpCiAvLwlydHBQVENvbmYublBUZG93bltJRlhfVEFQSV9DT0RfVFlQRV9HNzIyXzY0XSA9
IEFTVF9GT1JNQVRfRzcyMjsKIAogCWludCByZXQ7Ci0JaWYgKChyZXQgPSBpb2N0bChkZXZfY3R4
LmNoX2ZkW2NdLCBJRlhfVEFQSV9QS1RfUlRQX1BUX0NGR19TRVQsIChJRlhfaW50MzJfdCkgJnJ0
cFBUQ29uZikpKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQKKwlpZiAoKHJldCA9IGlvY3RsKGRl
dl9jdHguY2hfZmRbY10sIElGWF9UQVBJX1BLVF9SVFBfUFRfQ0ZHX1NFVCwgKGludCkgJnJ0cFBU
Q29uZikpKQorI2Vsc2UKKwlpZiAoKHJldCA9IGlvY3RsKGRldl9jdHguZGV2X2ZkLCBJRlhfVEFQ
SV9QS1RfUlRQX1BUX0NGR19TRVQsIChpbnQpICZydHBQVENvbmYpKSkKKyNlbmRpZgorCXsKIAkJ
YXN0X2xvZyhMT0dfRVJST1IsICJJRlhfVEFQSV9QS1RfUlRQX1BUX0NGR19TRVQgZmFpbGVkOiBy
ZXQ9JWlcbiIsIHJldCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMTY1LDYgKzE1NTcsMzgwIEBA
IHN0YXRpYyBpbnQgbGFudGlxX3NldHVwX3J0cChpbnQgYykKIAlyZXR1cm4gMDsKIH0KIAorI2lm
ZGVmIFRBUElfVkVSU0lPTjQKK3N0YXRpYyBpbnQgbGFudGlxX2V2ZW50X2RldGVjdGlvbl9tdWx0
aXBsZSh1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCUlGWF9UQVBJX0VWRU5UX3QgZXZlbnQ7CisJ
aW50IGogPSAwLCByZXQsIG5FcnIgPSAwOworCisJLyogZm9yIGFsbCBldmVudHMgaW4gdGFibGUg
Ki8KKwl3aGlsZSAoSUZYX1RBUElfRVZFTlRfTk9ORSAhPSBhRXZlbnRzW2pdKQorCXsKKwkJLyog
cHJlcGFyZSBldmVudCBzdHJydWN0dXJlICovCisJCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihl
dmVudCkpOworCQkvKiBzZXQgZm9yIGFsbCBjaGFubmVsIGFuZCBkZXZpY2VzICovCisJCWV2ZW50
LmRldiA9IFRBUElfREVWX05VTTsKKwkJZXZlbnQuY2ggPSBJRlhfVEFQSV9FVkVOVF9BTExfQ0hB
Tk5FTFM7CisJCWlmIChhRXZlbnRzW2pdICE9IElGWF9UQVBJX0VWRU5UX0RUTUZfRElHSVQpCisJ
CQkvKiBmb3IgYWxsIG1vZHVsZXMgKi8KKwkJCWV2ZW50Lm1vZHVsZSA9IElGWF9UQVBJX01PRFVM
RV9UWVBFX0FMTDsKKwkJZWxzZQorCQl7CisJCQlldmVudC5tb2R1bGUgPSBJRlhfVEFQSV9NT0RV
TEVfVFlQRV9BTE07CisJCQlldmVudC5kYXRhLmR0bWYuZXh0ZXJuYWwgPSAxOworCQkJZXZlbnQu
ZGF0YS5kdG1mLmludGVybmFsID0gMDsKKwkJfQorCQkvKiBzZXQgZXZlbnQgKi8KKwkJZXZlbnQu
aWQgPSBhRXZlbnRzW2orK107CisJCWlmIChlbmFibGUpCisJCQlyZXQgPSAgaW9jdGwoZGV2X2N0
eC5kZXZfZmQsIElGWF9UQVBJX0VWRU5UX0VOQUJMRSwgJmV2ZW50KTsKKwkJZWxzZQorCQkJcmV0
ID0gIGlvY3RsKGRldl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9FVkVOVF9ESVNBQkxFLCAmZXZlbnQp
OworCQlpZiAocmV0KQorCQl7CisJCQlhc3RfbG9nKExPR19FUlJPUiwgIiVzIGZvciBldmVudCAl
MDhYIGZhaWxlZDogcmV0PSVpXG4iLAorCQkJCWVuYWJsZSA/ICJJRlhfVEFQSV9FVkVOVF9FTkFC
TEUiIDogIklGWF9UQVBJX0VWRU5UX0RJU0FCTEUiLAorCQkJCWV2ZW50LmlkLCByZXQpOworCQkJ
bkVyciA9IC0xOworCQl9CisJfQorCXJldHVybiBuRXJyOworfQorI2VuZGlmCisKKyNpZmRlZiBT
VklQCisvKioKKwlHZXRzIElQIGFuZCBNQUMgYWRkcmVzc2VzIG9mIExDQy4KKworXHBhcmFtIGlm
TmFtZSBOYW1lIG9mIHRoZSBpbnRlcmZhY2UgdG8gdXNlCitccGFyYW0gcElQIE91dHB1dCwgSVAg
YWRkcmVzcyBvZiB0aGUgbG9jYWwgbWFjaGluZS4gUGFzc2VkIHBvaW50ZXIgc2hvdWxkIGhhdmUK
K2FsbG9jYXRlZCBlbm91Z2ggcGxhY2UgdG8gaG9sZCB0aGUgZGF0YS4gSWYgTlVMTCBwYXNzZWQs
IGRvbid0IHJlYWQgdGhlIHZhbHVlLgorUmV0dXJuZWQgc3RyaW5nIGlzIDAgZW5kaW5nLgorXHBh
cmFtIE1BQyBPdXRwdXQsIE1BQyBhZGRyZXNzIG9mIHRoZSBsb2NhbCBtYWNoaW5lLiBQYXNzZWQg
cG9pbnRlciBzaG91bGQgaGF2ZQorYWxsb2NhdGVkIGVub3VnaCBwbGFjZSB0byBob2xkIHRoZSBk
YXRhLiBJZiBOVUxMIHBhc3NlZCwgZG9uJ3QgcmVhZCB0aGUgdmFsdWUuCitccmV0dXJuCisJMCBp
ZiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCitccmVtYXJrCisJRG9lc24ndCB3b3JrIHdpdGggSVB2
Ni4KKyovCitzdGF0aWMgaW50IGxhbnRpcV9nZXRfYWRkcmVzcyAoY29uc3QgY2hhciogaWZOYW1l
LCBjaGFyICpwSVAsCisJdW5zaWduZWQgY2hhciBNQUNbRVRIX0FMRU5dKQoreworCXN0cnVjdCBp
ZnJlcSBpZnJlcTsKKwlpbnQgc29jazsKKworCXNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19E
R1JBTSwgSVBQUk9UT19JUCk7CisJaWYgKHNvY2sgPCAwKQorCXsKKwkJYXN0X2xvZyhMT0dfRVJS
T1IsICJVbmFibGUgdG8gY3JlYXRlIG5ldHdvcmsgc29ja2V0OiAlc1xuIiwKKwkJCXN0cmVycm9y
KGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoJmlmcmVxLCAwLCBzaXplb2Yo
aWZyZXEpKTsKKwlzdHJuY3B5KGlmcmVxLmlmcl9uYW1lLCBpZk5hbWUsIElGTkFNU0laKTsKKwlp
ZnJlcS5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworCisJYXN0X2xvZyhMT0dfREVCVUcs
ICJjaGVja2luZyBpbnRlcmZhY2UgJXNcbiIsIGlmcmVxLmlmcl9uYW1lKTsKKworCWlmIChwSVAg
IT0gTlVMTCkKKwl7CisJCS8qIE5vdGU6IFNJT0NHSUZBRERSIGRvZXMgbm90IHdvcmsgZm9yIElQ
djYhICovCisJCWlmIChpb2N0bChzb2NrLCBTSU9DR0lGQUREUiwgJmlmcmVxKSAhPSAwKQorCQl7
CisJCQlhc3RfbG9nKExPR19FUlJPUiwgImlvY3RsKFNJT0NHSUZBRERSKSBmb3IgaW50ZXJmYWNl
ICVzIGZhaWxlZDogJXNcbiIsCisJCQkJaWZyZXEuaWZyX25hbWUsIHN0cmVycm9yKGVycm5vKSk7
CisJCQljbG9zZShzb2NrKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQllbHNlCisJCQlzdHJjcHko
cElQLCBhc3RfaW5ldF9udG9hKCgoc3RydWN0IHNvY2thZGRyX2luICopCisJCQkJJmlmcmVxLmlm
cl9pZnJ1LmlmcnVfYWRkciktPnNpbl9hZGRyKSk7CisJfQorCWlmIChNQUMgIT0gTlVMTCkKKwl7
CisJCWlmIChpb2N0bChzb2NrLCBTSU9DR0lGSFdBRERSLCAmaWZyZXEpICE9IDApCisJCXsKKwkJ
CWFzdF9sb2coTE9HX0VSUk9SLCAiaW9jdGwoU0lPQ0dJRkhXQUREUikgZm9yIGludGVyZmFjZSAl
cyBmYWlsZWQ6ICIKKwkJCQkiJXNcbiIsIGlmcmVxLmlmcl9uYW1lLCBzdHJlcnJvcihlcnJubykp
OworCQkJY2xvc2Uoc29jayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZWxzZQorCQkJbWVtY3B5
KE1BQywgaWZyZXEuaWZyX2h3YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7CisJfQorCWNsb3NlKHNv
Y2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhbnRpcV9ibG9ja2luZ19zZXQoaW50
IHNrdCwgaW50IGJCbG9ja2luZykKK3sKKwkgaW50IGZmbGFnczsKKworCSBpZiAoKGZmbGFncyA9
IGZjbnRsKHNrdCwgRl9HRVRGTCkpIDwgMCkKKwkJIHJldHVybiAtMTsKKworCSBpZiAoYkJsb2Nr
aW5nKQorCQkgIGZmbGFncyAmPSB+T19OT05CTE9DSzsKKwkgZWxzZQorCQkgIGZmbGFncyB8PSBP
X05PTkJMT0NLOworCisJIGlmIChmY250bChza3QsIEZfU0VURkwsIGZmbGFncykgPCAwKQorCQkg
cmV0dXJuIC0xOworCSBlbHNlCisJCSByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYW50aXFf
c29ja2V0X2dldChpbnQgYykKK3sKKwljb25zdCBpbnQgcmV1c2VGbGFnID0gMTsKKwljaGFyIHNW
ZXRoX0lQW0lORVRfQUREUl9MRU5dOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisJLyog
TWFrZSBhIFVEUCBzb2NrZXQgKi8KKwlpZmxpc3RbY10uc2t0ID0gc29ja2V0KEFGX0lORVQsIFNP
Q0tfREdSQU0sIElQUFJPVE9fSVApOworCWlmIChpZmxpc3RbY10uc2t0IDwgMCkKKwl7CisJCWFz
dF9sb2coTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBuZXR3b3JrIHNvY2tldDogJXNcbiIs
CisJCQlzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogc2V0IHNvY2tl
dCB0byBub24tYmxvY2tpbmcgbW9kZSAqLworCWlmIChsYW50aXFfYmxvY2tpbmdfc2V0KGlmbGlz
dFtjXS5za3QsIDApKQorCXsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJVbmFibGUgdG8gc2V0IHNv
Y2tldCB0byBub24tYmxvY2tpbmcgbW9kZVxuIik7CisJCWNsb3NlKGlmbGlzdFtjXS5za3QpOwor
CQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHNldHNvY2tvcHQoaWZsaXN0W2NdLnNrdCwgU09MX1NP
Q0tFVCwgU09fUkVVU0VBRERSLCAoY2hhciAqKSZyZXVzZUZsYWcsCisJCXNpemVvZihyZXVzZUZs
YWcpKSA8IDApCisJeworCQlhc3RfbG9nKExPR19XQVJOSU5HLCAiRXJyb3Igc2V0dGluZyBTT19S
RVVTRUFERFIgb24gc29ja2ZkICclZCdcbiIsCisJCQlpZmxpc3RbY10uc2t0KTsKKwl9CisKKwkv
KiBnZXQgSVAgYW5kIE1BQyBhZGRyZXNzZXMgb2YgdmV0aDAgaW50ZXJmYWNlIG9mIGxpbmUgY2Fy
ZCBjb250cm9sbGVyICovCisJaWYgKGxhbnRpcV9nZXRfYWRkcmVzcyAoInZldGgwIiwgc1ZldGhf
SVAsIE5VTEwpKQorCXsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJVbmFibGUgdG8gZ2V0IHZldGgw
IElQIGFkZHJlc3NcbiIpOworCQljbG9zZShpZmxpc3RbY10uc2t0KTsKKwkJcmV0dXJuIC0xOwor
CX0KKworCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKwlhZGRyLnNpbl9mYW1pbHkg
PSBBRl9JTkVUOworCWlmIChpbmV0X2F0b24oc1ZldGhfSVAsICZhZGRyLnNpbl9hZGRyKSA9PSAw
KQorCXsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJVbmFibGUgdG8gc2V0IGFkZHJlc3MgYW5kIHBv
cnQgZm9yIGxpc3RlbmluZ1xuIik7CisJCWNsb3NlKGlmbGlzdFtjXS5za3QpOworCQlyZXR1cm4g
LTE7CisJfQorCWFkZHIuc2luX3BvcnQgPSBodG9ucyhTVklQX1VEUF9QT1JUICsgYyk7CisKKwlp
ZiAoYmluZChpZmxpc3RbY10uc2t0LCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCXNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSkKKwl7CisJCWFzdF9sb2coTE9HX0VSUk9SLCAiVW5hYmxl
IHRvIGJpbmQgdG8gJXMgcG9ydCAlZDogJXNcbiIsCisJCQlhc3RfaW5ldF9udG9hKGFkZHIuc2lu
X2FkZHIpLCBudG9ocyhhZGRyLnNpbl9wb3J0KSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uo
aWZsaXN0W2NdLnNrdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlhc3RfbG9nKExPR19ERUJVRywg
Ikxpc3RlbmluZyBvbiBJUCAlcywgcG9ydCAldSBmb3IgcGFja2V0cyBmcm9tIGNoYW5uZWwgIgor
CQkiJWRcbiIsIGFzdF9pbmV0X250b2EoYWRkci5zaW5fYWRkciksIG50b2hzKGFkZHIuc2luX3Bv
cnQpLCBjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhbnRpcV9kb3duc3RyZWFt
X2FkZHJlc3Nfc2V0KGludCBjKQoreworCW1lbXNldCgmaWZsaXN0W2NdLnJ0cF9kb3duc3RyZWFt
X2FkZHIsIDAsCisJCXNpemVvZihpZmxpc3RbY10ucnRwX2Rvd25zdHJlYW1fYWRkcikpOworCWlm
bGlzdFtjXS5ydHBfZG93bnN0cmVhbV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCS8qIGdl
dCBJUCBhZGRyZXNzIG9mIFNWSVAgKi8KKwlpZiAobGFudGlxX0ZXX0lQX2dldChUQVBJX0RFVl9O
VU0sCisJCSZpZmxpc3RbY10ucnRwX2Rvd25zdHJlYW1fYWRkci5zaW5fYWRkci5zX2FkZHIpKQor
CXsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJGYWlsZWQgdG8gcmVhZCBTVklQJWQgZmlybXdhcmUg
SVAgYWRkcmVzc1xuIiwKKwkJCVRBUElfREVWX05VTSk7CisJCXJldHVybiAtMTsKKwl9CisJaWZs
aXN0W2NdLnJ0cF9kb3duc3RyZWFtX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTVklQX1VEUF9QT1JU
ICsgYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYW50aXFfc29ja2V0X3JlbGVh
c2UoaW50IGMpCit7CisJaW50IHJjID0gMDsKKworCWlmIChpZmxpc3RbY10uc2t0ICE9IC0xKQor
CXsKKwkJcmMgPSBjbG9zZShpZmxpc3RbY10uc2t0KTsKKwkJaWZsaXN0W2NdLnNrdCA9IC0xOwor
CX0KKwlpZiAocmMpCisJCWFzdF9sb2coTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNsb3NlIHNvY2tl
dDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyBGdW5j
dGlvbiByZWFkcyBkZXZpY2UgSVAgYWRkcmVzcyBpbiBiaW5hcnkgbmV0d29yayBieXRlIG9yZGVy
IGZvcm1hdC4KKworXHBhcmFtIG5EZXYgRGV2aWNlIG51bWJlci4KK1xwYXJhbSBwSVAgRGV2aWNl
IElQIGFkZHJlc3MKKworXHJldHVybgorCTAgaWYgc3VjY2Vzc2Z1bCwgLTEgb24gZXJyb3IKKyov
CitzdGF0aWMgaW50IGxhbnRpcV9GV19JUF9nZXQoY29uc3QgdW5zaWduZWQgaW50IG5EZXYsIHVu
c2lnbmVkIGludCogcElQKQoreworCXN0cnVjdCBpbl9hZGRyIElQX0FkZHI7CisKKwlpZiAobkRl
diA+PSBTVklQX05PKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaW5ldF9hdG9uKHBTVklQX1N5c3Rl
bURlZltuRGV2XS52b2Z3SVAsICZJUF9BZGRyKSA9PSAwKQorCXsKKwkJYXN0X2xvZyhMT0dfRVJS
T1IsICJGYWlsZWQgdG8gY29udmVydCBJUCBzdHJpbmcgJXMgdG8gbnVtYmVyOiAlc1xuIiwKKwkJ
CXBTVklQX1N5c3RlbURlZltuRGV2XS52b2Z3SVAsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVy
biAtMTsKKwl9CisJKnBJUCA9IElQX0FkZHIuc19hZGRyOworCXJldHVybiAwOworfQorCisvKioK
KyBGdW5jdGlvbiBjb252ZXJ0cyBoZXhhZGVjaW1hbCByYWRpeCBBU0NJSSBNQUMgc3RyaW5nIGlu
IGZvcm0KKyAiWFg6WFg6WFg6WFg6WFg6WFgiIHRvIGJpbmFyeSBhcnJheS4KKworXHBhcmFtIHBN
QUNfQVNDSUkgcG9pbnRlciB0byBBU0NJSSBNQUMgc3RyaW5nLgorXHBhcmFtIHBNQUNfSGV4IHBv
aW50ZXIgdG8gYmluYXJ5IGFycmF5IGZvciBNQUMgc3RvcmluZy4gTWVtb3J5IGFsbG9jYXRlZCBi
eQorCWNhbGxlci4gSXQgc2hvdWxkIGNvbnRhaW4gZW5vdWdoIHNwYWNlIGZvciBvdXRwdXQgc3Rv
cmFnZS4KKworXHJldHVybgorCTAgaWYgc3VjY2Vzc2Z1bCwgLTEgb24gZXJyb3IKKyovCitzdGF0
aWMgaW50IGxhbnRpcV9BU0NJSV8yX01BQyhjb25zdCBjaGFyKiBwTUFDX0FTQ0lJLCB1bnNpZ25l
ZCBjaGFyKiBwTUFDX0hleCkKK3sKKwlpbnQgaSwgaiA9IDI7CisJY2hhciBwTUFDX0J5dGVbM107
CisKKwkvKiBNQUMgYWRkcmVzcyBzYW5pdHkgY2hlY2sgYXJlIHBlcmZvcm1lZCBiZWxvdyAqLwor
CS8qIGNoZWNrIGlmIGxlbmd0aCBpcyB2YWxpZCAqLworCWlmIChzdHJsZW4ocE1BQ19BU0NJSSkg
IT0gU1ZJUF9FVEhfU0FTQ0lJX0xFTikKKwl7CisJCWFzdF9sb2coTE9HX0VSUk9SLCAiSW52YWxp
ZCBNQUMgYWRkcmVzcyBmb3JtYXQgWyVzXSFcbiIsIHBNQUNfQVNDSUkpOworCQlyZXR1cm4gLTE7
CisJfQorCWZvciAoaSA9IDA7IGkgPCBTVklQX0VUSF9TQVNDSUlfTEVOOyBpKyspCisJeworCQlp
ZiAoaSA9PSBqKQorCQl7CisJCQlpZiAocE1BQ19BU0NJSVtpXSAhPSAnOicpCisJCQl7CisJCQkJ
YXN0X2xvZyhMT0dfRVJST1IsICJJbnZhbGlkIE1BQyBhZGRyZXNzIGZvcm1hdCBbJXNdIVxuIiwK
KwkJCQkJcE1BQ19BU0NJSSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJaiArPSAzOworCQkJ
Y29udGludWU7CisJCX0KKwkJLyogY2hlY2sgZm9yIHZhbGlkIGhleCB2YWx1ZXMgKi8KKwkJaWYg
KHBNQUNfQVNDSUlbaV0gPj0gJzAnICYmIHBNQUNfQVNDSUlbaV0gPD0gJzknKQorCQkJY29udGlu
dWU7CisJCWlmIChwTUFDX0FTQ0lJW2ldID49ICdhJyAmJiBwTUFDX0FTQ0lJW2ldIDw9ICdmJykK
KwkJCWNvbnRpbnVlOworCQlpZiAocE1BQ19BU0NJSVtpXSA+PSAnQScgJiYgcE1BQ19BU0NJSVtp
XSA8PSAnRicpCisJCQljb250aW51ZTsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJJbnZhbGlkIE1B
QyBhZGRyZXNzIGZvcm1hdCBbJXNdIVxuIiwgcE1BQ19BU0NJSSk7CisJCXJldHVybiAtMTsKKwl9
CisJcE1BQ19CeXRlWzJdID0gMDsKKwkvKiBzcGxpdCBhZGRyZXNzIGludG8gYnl0ZXMgYW5kIHdy
aXRlIHRvIHBEZXN0X01BQyAqLworCWlmIChwTUFDX0hleCAhPSBOVUxMKQorCQlmb3IgKGkgPSAw
OyBpIDwgRVRIX0FMRU47IGkrKykKKwkJeworCQkJc3RybmNweShwTUFDX0J5dGUsIHBNQUNfQVND
SUkgKyAoaSAqIDMpLCAyKTsKKwkJCXBNQUNfSGV4W2ldID0gKHVuc2lnbmVkIGNoYXIpIHN0cnRv
dWwocE1BQ19CeXRlLCBJRlhfTlVMTCwgMTYpOworCQl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgor
IEZ1bmN0aW9uIHJlYWRzIGRldmljZSBNQUMgYWRkcmVzcyBpbiBiaW5hcnkgZm9ybWF0LgorCitc
cGFyYW0gbkRldiBEZXZpY2UgbnVtYmVyLgorXHBhcmFtIHBNQUMgRGV2aWNlIE1BQyBhZGRyZXNz
LiBwTUFDIHNob3VsZCBiZSBsb25nIGVub3VnaCB0byBzdG9yZSB0aGUgZGF0YS4KKworXHJldHVy
bgorCTAgaWYgc3VjY2Vzc2Z1bCwgLTEgb24gZXJyb3IKKyovCitzdGF0aWMgaW50IGxhbnRpcV9G
V19NQUNfZ2V0KGNvbnN0IHVuc2lnbmVkIGludCBuRGV2LCB1bnNpZ25lZCBjaGFyKiBwTUFDKQor
eworCWlmIChuRGV2ID49IFNWSVBfTk8pCisJCXJldHVybiAtMTsKKworCXJldHVybiBsYW50aXFf
QVNDSUlfMl9NQUMocFNWSVBfU3lzdGVtRGVmW25EZXZdLnZvZndNQUMsIHBNQUMpOworfQorCitz
dGF0aWMgaW50IGxhbnRpcV91ZHBfaXBfaGVhZGVyX2NmZyhpbnQgYykKK3sKKwl1bnNpZ25lZCBj
aGFyIHBWZXRoX01BQ1tFVEhfQUxFTl0sIHBGV19NQUNbRVRIX0FMRU5dOworCWNoYXIgc1ZldGhf
SVBbSU5FVF9BRERSX0xFTl07CisJc3RydWN0IGluX2FkZHIgdmV0aElQOworCXVuc2lnbmVkIGlu
dCBuRldfSVA7CisJSUZYX1RBUElfUEtUX05FVF9DRkdfdCBwa3ROZXRDZmc7CisKKwlhc3RfbG9n
KExPR19ERUJVRywgImxhbnRpcV91ZHBfaXBfaGVhZGVyX2NmZygpXG4iKTsKKworCS8qIGdldCBJ
UCBhbmQgTUFDIGFkZHJlc3NlcyBvZiB2ZXRoMCBpbnRlcmZhY2Ugb2YgbGluZSBjYXJkIGNvbnRy
b2xsZXIgKi8KKwlpZiAobGFudGlxX2dldF9hZGRyZXNzICgidmV0aDAiLCBzVmV0aF9JUCwgcFZl
dGhfTUFDKSkKKwkJcmV0dXJuIC0xOworCS8qIGNvbnZlcnQgdmV0aDAgSVAgZnJvbSBzdHJpbmcg
dG8gbnVtYmVyIG5vdGF0aW9uICovCisJaWYgKGluZXRfYXRvbihzVmV0aF9JUCwgJnZldGhJUCkg
PT0gMCkKKwl7CisJCWFzdF9sb2coTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNvbnZlcnQgSVAgc3Ry
aW5nICVzIHRvIG51bWJlcjogJXNcbiIsCisJCQlzVmV0aF9JUCwgc3RyZXJyb3IoZXJybm8pKTsK
KwkJcmV0dXJuIC0xOworCX0KKworCS8qIGdldCBJUCBhZGRyZXNzIG9mIFNWSVAgKi8KKwlpZiAo
bGFudGlxX0ZXX0lQX2dldChUQVBJX0RFVl9OVU0sICZuRldfSVApKQorCXsKKwkJYXN0X2xvZyhM
T0dfRVJST1IsICJGYWlsZWQgdG8gcmVhZCBTVklQIGZpcm13YXJlIElQIGFkZHJlc3NcbiIpOwor
CQlyZXR1cm4gLTE7CisJfQorCS8qIGdldCBNQUMgYWRkcmVzcyBvZiBTVklQICovCisJaWYgKGxh
bnRpcV9GV19NQUNfZ2V0KDAsIHBGV19NQUMpKQorCXsKKwkJYXN0X2xvZyhMT0dfRVJST1IsICJG
YWlsZWQgdG8gcmVhZCBTVklQIGZpcm13YXJlIE1BQyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC0x
OworCX0KKworCW1lbXNldCgmcGt0TmV0Q2ZnLCAwLCBzaXplb2YocGt0TmV0Q2ZnKSk7CisJcGt0
TmV0Q2ZnLmRldiA9IFRBUElfREVWX05VTTsKKwlwa3ROZXRDZmcuY2ggPSBjOworCXBrdE5ldENm
Zy5uUGt0VHlwZSA9IFZvaWNlOworCW1lbWNweShwa3ROZXRDZmcuTWFjRHN0LCBwVmV0aF9NQUMs
IEVUSF9BTEVOKTsKKwltZW1jcHkocGt0TmV0Q2ZnLk1hY1NyYywgcEZXX01BQywgRVRIX0FMRU4p
OworCXBrdE5ldENmZy5uSXBNb2RlID0gSUZYX1RBUElfUEtUX05FVF9JUFY0OworCXBrdE5ldENm
Zy5uSXAudjQuSXBTcmMgPSBuRldfSVA7CisJcGt0TmV0Q2ZnLm5JcC52NC5JcERzdCA9IHZldGhJ
UC5zX2FkZHI7CisJcGt0TmV0Q2ZnLm5VZHBEc3QgPSBodG9ucyhTVklQX1VEUF9QT1JUICsgYyk7
CisJcGt0TmV0Q2ZnLm5VZHBTcmMgPSBodG9ucyhTVklQX1VEUF9QT1JUICsgYyk7CisJcGt0TmV0
Q2ZnLm5VZHBSY3YgPSBodG9ucyhTVklQX1VEUF9QT1JUICsgYyk7CisJaWYgKGlvY3RsKGRldl9j
dHguZGV2X2ZkLCBJRlhfVEFQSV9QS1RfTkVUX0NGR19TRVQsICZwa3ROZXRDZmcpICE9IDApCisJ
eworCQlhc3RfbG9nKExPR19FUlJPUiwgIkVSUk9SIC0gSUZYX1RBUElfUEtUX05FVF9DRkdfU0VU
IGlvY3RsIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5k
aWYKKwogc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBhc3RfY29uZmln
ICpjZmc7CkBAIC0xMzg3LDYgKzIxNTMsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lk
KQogCUlGWF9UQVBJX0pCX0NGR190IGpiX2NmZzsKIAlJRlhfVEFQSV9DSURfQ0ZHX3QgY2lkX2Nm
ZzsKIAl1aW50OF90IGM7CisjaWZkZWYgVEFQSV9WRVJTSU9ONAorCUlGWF9UQVBJX0xJTkVfRkVF
RF90IGxpbmVfZmVlZDsKKwlJRlhfVEFQSV9FTkNfVkFEX0NGR190IFZBRDsKKyNlbmRpZgogCiAJ
Lyogb3BlbiBkZXZpY2UgKi8KIAlkZXZfY3R4LmRldl9mZCA9IGxhbnRpcV9kZXZfb3BlbihiYXNl
X3BhdGgsIDApOwpAQCAtMTM5Niw2ICsyMTY2LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZSh2
b2lkKQogCQlyZXR1cm4gQVNUX01PRFVMRV9MT0FEX0ZBSUxVUkU7CiAJfQogCisjaWZkZWYgVk1N
QwogCWZvciAoYyA9IDA7IGMgPCBkZXZfY3R4LmNoYW5uZWxzIDsgYysrKSB7CiAJCWRldl9jdHgu
Y2hfZmRbY10gPSBsYW50aXFfZGV2X29wZW4oYmFzZV9wYXRoLCBjICsgMSk7CiAKQEAgLTE0MDks
MTUgKzIxODAsMjYgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lkKQogCQlhc3RfbG9nKExP
R19FUlJPUiwgInZvaWNlIGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiBB
U1RfTU9EVUxFX0xPQURfRkFJTFVSRTsKIAl9CisjZW5kaWYKIAotCWlmIChpb2N0bChkZXZfY3R4
LmRldl9mZCwgSUZYX1RBUElfREVWX1NUT1AsIDApKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQK
KwlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0RFVl9TVE9QLCAwKSkKKyNlbHNl
CisJbWVtc2V0KCZkZXZfc3RhcnQsIDB4MCwgc2l6ZW9mKGRldl9zdGFydCkpOworCWRldl9zdGFy
dC5kZXYgPSBUQVBJX0RFVl9OVU07CisJZGV2X3N0YXJ0Lm5Nb2RlID0gSUZYX1RBUElfSU5JVF9N
T0RFX1ZPSUNFX0NPREVSOworCWlmIChpb2N0bChkZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfREVW
X1NUT1AsICZkZXZfc3RhcnQpKQorI2VuZGlmCisJewogCQlhc3RfbG9nKExPR19FUlJPUiwgIklG
WF9UQVBJX0RFVl9TVE9QIGlvY3RsIGZhaWxlZFxuIik7CiAJCXJldHVybiBBU1RfTU9EVUxFX0xP
QURfRkFJTFVSRTsKIAl9CiAKIAltZW1zZXQoJmRldl9zdGFydCwgMHgwLCBzaXplb2YoSUZYX1RB
UElfREVWX1NUQVJUX0NGR190KSk7CiAJZGV2X3N0YXJ0Lm5Nb2RlID0gSUZYX1RBUElfSU5JVF9N
T0RFX1ZPSUNFX0NPREVSOwotCisjaWZkZWYgVEFQSV9WRVJTSU9ONAorCWRldl9zdGFydC5kZXYg
PSBUQVBJX0RFVl9OVU07CisjZW5kaWYKIAkvKiBTdGFydCBUQVBJICovCiAJaWYgKGlvY3RsKGRl
dl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9ERVZfU1RBUlQsICZkZXZfc3RhcnQpKSB7CiAJCWFzdF9s
b2coTE9HX0VSUk9SLCAiSUZYX1RBUElfREVWX1NUQVJUIGlvY3RsIGZhaWxlZFxuIik7CkBAIC0x
NDM4LDIyICsyMjIwLDM1IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUodm9pZCkKIAkJbWVtc2V0
KCZyaW5naW5nVHlwZSwgMCwgc2l6ZW9mKElGWF9UQVBJX1JJTkdfQ0ZHX3QpKTsKIAkJcmluZ2lu
Z1R5cGUubk1vZGUgPSBJRlhfVEFQSV9SSU5HX0NGR19NT0RFX0lOVEVSTkFMX0JBTEFOQ0VEOwog
CQlyaW5naW5nVHlwZS5uU3VibW9kZSA9IElGWF9UQVBJX1JJTkdfQ0ZHX1NVQk1PREVfRENfUk5H
X1RSSVBfRkFTVDsKLQkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX1JJTkdf
Q0ZHX1NFVCwgKElGWF9pbnQzMl90KSAmcmluZ2luZ1R5cGUpKSB7CisjaWZuZGVmIFRBUElfVkVS
U0lPTjQKKwkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX1JJTkdfQ0ZHX1NF
VCwgKGludCkgJnJpbmdpbmdUeXBlKSkKKyNlbHNlCisJCXJpbmdpbmdUeXBlLmRldiA9IFRBUElf
REVWX05VTTsKKwkJcmluZ2luZ1R5cGUuY2ggPSBjOworCQlpZiAoaW9jdGwoZGV2X2N0eC5kZXZf
ZmQsIElGWF9UQVBJX1JJTkdfQ0ZHX1NFVCwgKGludCkgJnJpbmdpbmdUeXBlKSkKKyNlbmRpZgor
CQl7CiAJCQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9UQVBJX1JJTkdfQ0ZHX1NFVCBmYWlsZWRc
biIpOwogCQkJcmV0dXJuIEFTVF9NT0RVTEVfTE9BRF9GQUlMVVJFOwogCQl9CiAKIAkJLyogcmlu
ZyBjYWRlbmNlICovCiAJCUlGWF9jaGFyX3QgZGF0YVsxNV0gPSB7IDB4RkYsIDB4RkYsIDB4RkYs
IDB4RkYsIDB4RkYsCi0JCQkJCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAK
KwkJCQkJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJICAKIAkJCQkJCQkJMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiAJCUlGWF9UQVBJX1JJTkdfQ0FERU5DRV90IHJp
bmdDYWRlbmNlOwogCQltZW1zZXQoJnJpbmdDYWRlbmNlLCAwLCBzaXplb2YoSUZYX1RBUElfUklO
R19DQURFTkNFX3QpKTsKIAkJbWVtY3B5KCZyaW5nQ2FkZW5jZS5kYXRhLCBkYXRhLCBzaXplb2Yo
ZGF0YSkpOwogCQlyaW5nQ2FkZW5jZS5uciA9IHNpemVvZihkYXRhKSAqIDg7Ci0KLQkJaWYgKGlv
Y3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX1JJTkdfQ0FERU5DRV9IUl9TRVQsICZyaW5n
Q2FkZW5jZSkpIHsKKyNpZm5kZWYgVEFQSV9WRVJTSU9ONAorCQlpZiAoaW9jdGwoZGV2X2N0eC5j
aF9mZFtjXSwgSUZYX1RBUElfUklOR19DQURFTkNFX0hSX1NFVCwgJnJpbmdDYWRlbmNlKSkKKyNl
bHNlCisJCXJpbmdDYWRlbmNlLmRldiA9IFRBUElfREVWX05VTTsKKwkJcmluZ0NhZGVuY2UuY2gg
PSBjOworCQlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX1JJTkdfQ0FERU5DRV9I
Ul9TRVQsICZyaW5nQ2FkZW5jZSkpCisjZW5kaWYKKwkJewogCQkJYXN0X2xvZyhMT0dfRVJST1Is
ICJJRlhfVEFQSV9SSU5HX0NBREVOQ0VfSFJfU0VUIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gQVNU
X01PRFVMRV9MT0FEX0ZBSUxVUkU7CiAJCX0KQEAgLTE0NjIsMTQgKzIyNTcsMjkgQEAgc3RhdGlj
IGludCBsb2FkX21vZHVsZSh2b2lkKQogCQltZW1zZXQoJm1hcF9kYXRhLCAweDAsIHNpemVvZihJ
RlhfVEFQSV9NQVBfREFUQV90KSk7CiAJCW1hcF9kYXRhLm5Ec3RDaCA9IGM7CiAJCW1hcF9kYXRh
Lm5DaFR5cGUgPSBJRlhfVEFQSV9NQVBfVFlQRV9QSE9ORTsKLQotCQlpZiAoaW9jdGwoZGV2X2N0
eC5jaF9mZFtjXSwgSUZYX1RBUElfTUFQX0RBVEFfQURELCAmbWFwX2RhdGEpKSB7CisjaWZuZGVm
IFRBUElfVkVSU0lPTjQKKwkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX01B
UF9EQVRBX0FERCwgJm1hcF9kYXRhKSkKKyNlbHNlCisJCW1hcF9kYXRhLmRldiA9IFRBUElfREVW
X05VTTsKKwkJbWFwX2RhdGEuY2ggPSBjOworCQlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElG
WF9UQVBJX01BUF9EQVRBX0FERCwgJm1hcF9kYXRhKSkKKyNlbmRpZgorCQl7CiAJCQlhc3RfbG9n
KExPR19FUlJPUiwgIklGWF9UQVBJX01BUF9EQVRBX0FERCAlZCBmYWlsZWRcbiIsIGMpOwogCQkJ
cmV0dXJuIEFTVF9NT0RVTEVfTE9BRF9GQUlMVVJFOwogCQl9CiAKIAkJLyogc2V0IGxpbmUgZmVl
ZCAqLwotCQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElfTElORV9GRUVEX1NF
VCwgSUZYX1RBUElfTElORV9GRUVEX1NUQU5EQlkpKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQK
KwkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0xJTkVfRkVFRF9TRVQsIElG
WF9UQVBJX0xJTkVfRkVFRF9TVEFOREJZKSkKKyNlbHNlCisJCW1lbXNldCgmbGluZV9mZWVkLCAw
eDAsIHNpemVvZihJRlhfVEFQSV9MSU5FX0ZFRURfdCkpOworCQlsaW5lX2ZlZWQuZGV2ID0gVEFQ
SV9ERVZfTlVNOworCQlsaW5lX2ZlZWQuY2ggPSBjOworCQlsaW5lX2ZlZWQubGluZU1vZGUgPSBJ
RlhfVEFQSV9MSU5FX0ZFRURfU1RBTkRCWTsKKwkJaWYgKGlvY3RsKGRldl9jdHguZGV2X2ZkLCBJ
RlhfVEFQSV9MSU5FX0ZFRURfU0VULCAmbGluZV9mZWVkKSkKKyNlbmRpZgorCQl7CiAJCQlhc3Rf
bG9nKExPR19FUlJPUiwgIklGWF9UQVBJX0xJTkVfRkVFRF9TRVQgJWQgZmFpbGVkXG4iLCBjKTsK
IAkJCXJldHVybiBBU1RfTU9EVUxFX0xPQURfRkFJTFVSRTsKIAkJfQpAQCAtMTQ3OCw4ICsyMjg4
LDE0IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUodm9pZCkKIAkJbWVtc2V0KCZlbmNfY2ZnLCAw
eDAsIHNpemVvZihJRlhfVEFQSV9FTkNfQ0ZHX3QpKTsKIAkJZW5jX2NmZy5uRnJhbWVMZW4gPSBJ
RlhfVEFQSV9DT0RfTEVOR1RIXzIwOwogCQllbmNfY2ZnLm5FbmNUeXBlID0gSUZYX1RBUElfQ09E
X1RZUEVfTUxBVzsKLQotCQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElfRU5D
X0NGR19TRVQsICZlbmNfY2ZnKSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJCWlmIChpb2N0
bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9FTkNfQ0ZHX1NFVCwgJmVuY19jZmcpKQorI2Vs
c2UKKwkJZW5jX2NmZy5kZXYgPSBUQVBJX0RFVl9OVU07CisJCWVuY19jZmcuY2ggPSBjOworCQlp
ZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX0VOQ19DRkdfU0VULCAmZW5jX2NmZykp
CisjZW5kaWYKKwkJewogCQkJYXN0X2xvZyhMT0dfRVJST1IsICJJRlhfVEFQSV9FTkNfQ0ZHX1NF
VCAlZCBmYWlsZWRcbiIsIGMpOwogCQkJcmV0dXJuIEFTVF9NT0RVTEVfTE9BRF9GQUlMVVJFOwog
CQl9CkBAIC0xNDg4LDggKzIzMDQsMTQgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lkKQog
CQltZW1zZXQoJmxpbmVfdm9sLCAwLCBzaXplb2YobGluZV92b2wpKTsKIAkJbGluZV92b2wubkdh
aW5SeCA9IHJ4Z2FpbjsKIAkJbGluZV92b2wubkdhaW5UeCA9IHR4Z2FpbjsKLQotCQlpZiAoaW9j
dGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElfUEhPTkVfVk9MVU1FX1NFVCwgJmxpbmVfdm9s
KSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040CisJCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2Nd
LCBJRlhfVEFQSV9QSE9ORV9WT0xVTUVfU0VULCAmbGluZV92b2wpKQorI2Vsc2UKKwkJbGluZV92
b2wuZGV2ID0gVEFQSV9ERVZfTlVNOworCQlsaW5lX3ZvbC5jaCA9IGM7CisJCWlmIChpb2N0bChk
ZXZfY3R4LmRldl9mZCwgSUZYX1RBUElfUEhPTkVfVk9MVU1FX1NFVCwgJmxpbmVfdm9sKSkKKyNl
bmRpZgorCQl7CiAJCQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9UQVBJX1BIT05FX1ZPTFVNRV9T
RVQgJWQgZmFpbGVkXG4iLCBjKTsKIAkJCXJldHVybiBBU1RfTU9EVUxFX0xPQURfRkFJTFVSRTsK
IAkJfQpAQCAtMTUwMSw4ICsyMzIzLDE0IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUodm9pZCkK
IAkJd2xlY19jZmcubk5CRkV3aW5kb3cgPSB3bGVjX25iZmU7CiAJCXdsZWNfY2ZnLm5OQk5Fd2lu
ZG93ID0gd2xlY19uYm5lOwogCQl3bGVjX2NmZy5uV0JORXdpbmRvdyA9IHdsZWNfd2JuZTsKLQot
CQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElfV0xFQ19QSE9ORV9DRkdfU0VU
LCAmd2xlY19jZmcpKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQKKwkJaWYgKGlvY3RsKGRldl9j
dHguY2hfZmRbY10sIElGWF9UQVBJX1dMRUNfUEhPTkVfQ0ZHX1NFVCwgJndsZWNfY2ZnKSkKKyNl
bHNlCisJCXdsZWNfY2ZnLmRldiA9IFRBUElfREVWX05VTTsKKwkJd2xlY19jZmcuY2ggPSBjOwor
CQlpZiAoaW9jdGwoZGV2X2N0eC5kZXZfZmQsIElGWF9UQVBJX1dMRUNfUEhPTkVfQ0ZHX1NFVCwg
JndsZWNfY2ZnKSkKKyNlbmRpZgorCQl7CiAJCQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9UQVBJ
X1dMRUNfUEhPTkVfQ0ZHX1NFVCAlZCBmYWlsZWRcbiIsIGMpOwogCQkJcmV0dXJuIEFTVF9NT0RV
TEVfTE9BRF9GQUlMVVJFOwogCQl9CkBAIC0xNTE2LDggKzIzNDQsMTQgQEAgc3RhdGljIGludCBs
b2FkX21vZHVsZSh2b2lkKQogCQlqYl9jZmcubkluaXRpYWxTaXplID0gamJfaW5pdGlhbHNpemU7
CiAJCWpiX2NmZy5uTWluU2l6ZSA9IGpiX21pbnNpemU7CiAJCWpiX2NmZy5uTWF4U2l6ZSA9IGpi
X21heHNpemU7Ci0KLQkJaWYgKGlvY3RsKGRldl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0pCX0NG
R19TRVQsICZqYl9jZmcpKSB7CisjaWZuZGVmIFRBUElfVkVSU0lPTjQKKwkJaWYgKGlvY3RsKGRl
dl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0pCX0NGR19TRVQsICZqYl9jZmcpKQorI2Vsc2UKKwkJ
amJfY2ZnLmRldiA9IFRBUElfREVWX05VTTsKKwkJamJfY2ZnLmNoID0gYzsKKwkJaWYgKGlvY3Rs
KGRldl9jdHguZGV2X2ZkLCBJRlhfVEFQSV9KQl9DRkdfU0VULCAmamJfY2ZnKSkKKyNlbmRpZgor
CQl7CiAJCQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9UQVBJX0pCX0NGR19TRVQgJWQgZmFpbGVk
XG4iLCBjKTsKIAkJCXJldHVybiBBU1RfTU9EVUxFX0xPQURfRkFJTFVSRTsKIAkJfQpAQCAtMTUy
NSwxNCArMjM1OSwyOCBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHZvaWQpCiAJCS8qIENvbmZp
Z3VyZSBDYWxsZXIgSUQgdHlwZSAqLwogCQltZW1zZXQoJmNpZF9jZmcsIDAsIHNpemVvZihjaWRf
Y2ZnKSk7CiAJCWNpZF9jZmcublN0YW5kYXJkID0gY2lkX3R5cGU7Ci0KLQkJaWYgKGlvY3RsKGRl
dl9jdHguY2hfZmRbY10sIElGWF9UQVBJX0NJRF9DRkdfU0VULCAmY2lkX2NmZykpIHsKKyNpZm5k
ZWYgVEFQSV9WRVJTSU9ONAorCQlpZiAoaW9jdGwoZGV2X2N0eC5jaF9mZFtjXSwgSUZYX1RBUElf
Q0lEX0NGR19TRVQsICZjaWRfY2ZnKSkKKyNlbHNlCisJCWNpZF9jZmcuZGV2ID0gVEFQSV9ERVZf
TlVNOworCQljaWRfY2ZnLmNoID0gYzsKKwkJaWYgKGlvY3RsKGRldl9jdHguZGV2X2ZkLCBJRlhf
VEFQSV9DSURfQ0ZHX1NFVCwgJmNpZF9jZmcpKQorI2VuZGlmCisJCXsKIAkJCWFzdF9sb2coTE9H
X0VSUk9SLCAiSUlGWF9UQVBJX0NJRF9DRkdfU0VUICVkIGZhaWxlZFxuIiwgYyk7CiAJCQlyZXR1
cm4gQVNUX01PRFVMRV9MT0FEX0ZBSUxVUkU7CiAJCX0KIAogCQkvKiBDb25maWd1cmUgdm9pY2Ug
YWN0aXZpdHkgZGV0ZWN0aW9uICovCi0JCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhf
VEFQSV9FTkNfVkFEX0NGR19TRVQsIHZhZF90eXBlKSkgeworI2lmbmRlZiBUQVBJX1ZFUlNJT040
CisJCWlmIChpb2N0bChkZXZfY3R4LmNoX2ZkW2NdLCBJRlhfVEFQSV9FTkNfVkFEX0NGR19TRVQs
IHZhZF90eXBlKSkKKyNlbHNlCisJCW1lbXNldCgmVkFELCAwLCBzaXplb2YoVkFEKSk7CisJCVZB
RC5kZXYgPSBUQVBJX0RFVl9OVU07CisJCVZBRC5jaCA9IGM7CisJCWlmIChpb2N0bChkZXZfY3R4
LmRldl9mZCwgSUZYX1RBUElfRU5DX1ZBRF9DRkdfU0VULCAmVkFEKSkKKyNlbmRpZgorCQl7CiAJ
CQlhc3RfbG9nKExPR19FUlJPUiwgIklGWF9UQVBJX0VOQ19WQURfQ0ZHX1NFVCAlZCBmYWlsZWRc
biIsIGMpOwogCQkJcmV0dXJuIEFTVF9NT0RVTEVfTE9BRF9GQUlMVVJFOwogCQl9CkBAIC0xNTUw
LDYgKzIzOTgsMTIgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lkKQogCQl9CiAJfQogCisj
aWZkZWYgVEFQSV9WRVJTSU9ONAorCS8qIGVuYWJsZSBldmVudCBkZXRlY3Rpb24gKi8KKwlpZiAo
bGFudGlxX2V2ZW50X2RldGVjdGlvbl9tdWx0aXBsZSgxKSkKKwkJcmV0dXJuIEFTVF9NT0RVTEVf
TE9BRF9GQUlMVVJFOworI2VuZGlmCisKIAkvKiBtYWtlIHN1cmUgb3VyIGRldmljZSB3aWxsIGJl
IGNsb3NlZCBwcm9wZXJseSAqLwogCWFzdF9yZWdpc3Rlcl9hdGV4aXQobGFudGlxX2NsZWFudXAp
OwogCi0tIAoxLjYuNC40Cgo=

--_004_0516062BB218664B8C4CF0F51E20E69F011CAEMUCSE039lantiqcom_--

