From mboxrd@z Thu Jan  1 00:00:00 1970
From: Philipp Zabel 
Subject: [PATCH v13 03/14] drm/mediatek: Add DSI sub driver
Date: Tue,  8 Mar 2016 14:27:18 +0100
Message-ID: <1457443649-12133-4-git-send-email-p.zabel@pengutronix.de>
References: <1457443649-12133-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path: 
In-Reply-To: <1457443649-12133-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
 
List-Archive: 
List-Post: 
List-Help: 
List-Subscribe: ,
 
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel" 
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala 
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmln
ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgIHwg
ICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyB8ICAgMiArCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCB8ICAgMiArCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jICAgICB8IDk0MiArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIHwgNDg3
ICsrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE0MzggaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX21pcGlfdHguYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggOGRhZDg5Mi4uMGM0
OWE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTMsNiArMyw4IEBAIGNvbmZpZyBE
Uk1fTUVESUFURUsKIAlkZXBlbmRzIG9uIERSTQogCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8
fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3Qg
RFJNX01JUElfRFNJCisJc2VsZWN0IERSTV9QQU5FTAogCXNlbGVjdCBJT01NVV9ETUEKIAlzZWxl
Y3QgTVRLX1NNSQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N
YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCBkNGJkZTdj
Li5lNzgxZGI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxl
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtNiw2ICs2LDggQEAg
bWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcm1fZHJ2Lm8gXAog
CQkgIG10a19kcm1fZmIubyBcCiAJCSAgbXRrX2RybV9nZW0ubyBcCi0JCSAgbXRrX2RybV9wbGFu
ZS5vCisJCSAgbXRrX2RybV9wbGFuZS5vIFwKKwkJICBtdGtfZHNpLm8gXAorCQkgIG10a19taXBp
X3R4Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggOGEyMWNhNy4uNGZjYzBlMCAx
MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTU1MSw2ICs1NTEsOCBA
QCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1fZHJpdmVyc1td
ID0gewogCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKIAkmbXRrX2Rpc3Bfb3ZsX2RyaXZlciwK
IAkmbXRrX2Rpc3BfcmRtYV9kcml2ZXIsCisJJm10a19kc2lfZHJpdmVyLAorCSZtdGtfbWlwaV90
eF9kcml2ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9pZCkKZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKaW5kZXggZWZiNzQ0Yy4uMTYxYTM2MiAx
MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTUwLDUgKzUwLDcgQEAg
c3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy
IG10a19kaXNwX292bF9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf
ZGlzcF9yZG1hX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lf
ZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVy
OwogCiAjZW5kaWYgLyogTVRLX0RSTV9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNp
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzZDM4OQotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKQEAgLTAsMCArMSw5
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8
ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl
IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgor
I2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs
dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUg
PGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNs
dWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+
CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9j
b21wLmgiCisKKyNkZWZpbmUgRFNJX1ZJREVPX0ZJRk9fREVQVEgJKDE5MjAgLyA0KQorI2RlZmlu
ZSBEU0lfSE9TVF9GSUZPX0RFUFRICTY0CisKKyNkZWZpbmUgRFNJX1NUQVJUCQkweDAwCisKKyNk
ZWZpbmUgRFNJX0NPTl9DVFJMCQkweDEwCisjZGVmaW5lIERTSV9SRVNFVAkJCUJJVCgwKQorI2Rl
ZmluZSBEU0lfRU4JCQkJQklUKDEpCisKKyNkZWZpbmUgRFNJX01PREVfQ1RSTAkJMHgxNAorI2Rl
ZmluZSBNT0RFCQkJCSgzKQorI2RlZmluZSBDTURfTU9ERQkJCTAKKyNkZWZpbmUgU1lOQ19QVUxT
RV9NT0RFCQkJMQorI2RlZmluZSBTWU5DX0VWRU5UX01PREUJCQkyCisjZGVmaW5lIEJVUlNUX01P
REUJCQkzCisjZGVmaW5lIEZSTV9NT0RFCQkJQklUKDE2KQorI2RlZmluZSBNSVhfTU9ERQkJCUJJ
VCgxNykKKworI2RlZmluZSBEU0lfVFhSWF9DVFJMCQkweDE4CisjZGVmaW5lIFZDX05VTQkJCQko
MiA8PCAwKQorI2RlZmluZSBMQU5FX05VTQkJCSgweGYgPDwgMikKKyNkZWZpbmUgRElTX0VPVAkJ
CQlCSVQoNikKKyNkZWZpbmUgTlVMTF9FTgkJCQlCSVQoNykKKyNkZWZpbmUgVEVfRlJFRVJVTgkJ
CUJJVCg4KQorI2RlZmluZSBFWFRfVEVfRU4JCQlCSVQoOSkKKyNkZWZpbmUgRVhUX1RFX0VER0UJ
CQlCSVQoMTApCisjZGVmaW5lIE1BWF9SVE5fU0laRQkJCSgweGYgPDwgMTIpCisjZGVmaW5lIEhT
VFhfQ0tMUF9FTgkJCUJJVCgxNikKKworI2RlZmluZSBEU0lfUFNDVFJMCQkweDFjCisjZGVmaW5l
IERTSV9QU19XQwkJCTB4M2ZmZgorI2RlZmluZSBEU0lfUFNfU0VMCQkJKDMgPDwgMTYpCisjZGVm
aW5lIFBBQ0tFRF9QU18xNkJJVF9SR0I1NjUJCSgwIDw8IDE2KQorI2RlZmluZSBMT09TRUxZX1BT
XzE4QklUX1JHQjY2NgkJKDEgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18xOEJJVF9SR0I2NjYJ
CSgyIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMjRCSVRfUkdCODg4CQkoMyA8PCAxNikKKwor
I2RlZmluZSBEU0lfVlNBX05MCQkweDIwCisjZGVmaW5lIERTSV9WQlBfTkwJCTB4MjQKKyNkZWZp
bmUgRFNJX1ZGUF9OTAkJMHgyOAorI2RlZmluZSBEU0lfVkFDVF9OTAkJMHgyQworI2RlZmluZSBE
U0lfSFNBX1dDCQkweDUwCisjZGVmaW5lIERTSV9IQlBfV0MJCTB4NTQKKyNkZWZpbmUgRFNJX0hG
UF9XQwkJMHg1OAorCisjZGVmaW5lIERTSV9IU1RYX0NLTF9XQwkJMHg2NAorCisjZGVmaW5lIERT
SV9QSFlfTENDT04JCTB4MTA0CisjZGVmaW5lIExDX0hTX1RYX0VOCQkJQklUKDApCisjZGVmaW5l
IExDX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTENfV0FLRVVQX0VOCQkJQklUKDIpCisKKyNk
ZWZpbmUgRFNJX1BIWV9MRDBDT04JCTB4MTA4CisjZGVmaW5lIExEMF9IU19UWF9FTgkJCUJJVCgw
KQorI2RlZmluZSBMRDBfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMRDBfV0FLRVVQX0VOCQkJ
QklUKDIpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMAkweDExMAorI2RlZmluZSBMUFgJCQkJ
KDB4ZmYgPDwgMCkKKyNkZWZpbmUgSFNfUFJQUgkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBIU19a
RVJPCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBIU19UUkFJTAkJCSgweGZmIDw8IDI0KQorCisj
ZGVmaW5lIERTSV9QSFlfVElNRUNPTjEJMHgxMTQKKyNkZWZpbmUgVEFfR08JCQkJKDB4ZmYgPDwg
MCkKKyNkZWZpbmUgVEFfU1VSRQkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBUQV9HRVQJCQkJKDB4
ZmYgPDwgMTYpCisjZGVmaW5lIERBX0hTX0VYSVQJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBE
U0lfUEhZX1RJTUVDT04yCTB4MTE4CisjZGVmaW5lIENPTlRfREVUCQkJKDB4ZmYgPDwgMCkKKyNk
ZWZpbmUgQ0xLX1pFUk8JCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQ0xLX1RSQUlMCQkJKDB4ZmYg
PDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMwkweDExYworI2RlZmluZSBDTEtfSFNf
UFJQUgkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19IU19QT1NUCQkJKDB4ZmYgPDwgOCkKKyNk
ZWZpbmUgQ0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKKworI2RlZmluZSBOU19UT19DWUNMRShu
LCBjKSAgICAoKG4pIC8gKGMpICsgKCgobikgJSAoYykpID8gMSA6IDApKQorCitzdHJ1Y3QgcGh5
OworCitzdHJ1Y3QgbXRrX2RzaSB7CisJc3RydWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlz
dHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgaG9zdDsKKwlzdHJ1Y3Qg
ZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOworCXN0cnVj
dCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CisJc3RydWN0
IHBoeSAqcGh5OworCisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJc3RydWN0IGNsayAqZW5naW5l
X2NsazsKKwlzdHJ1Y3QgY2xrICpkaWdpdGFsX2NsazsKKwlzdHJ1Y3QgY2xrICpoc19jbGs7CisK
Kwl1MzIgZGF0YV9yYXRlOworCisJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVudW0gbWlw
aV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJc3RydWN0
IHZpZGVvbW9kZSB2bTsKKwlpbnQgcmVmY291bnQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNv
ZGVyICplKQoreworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IG10a19kc2ksIGVuY29k
ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICpjb25uZWN0b3JfdG9fZHNp
KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3Ry
dWN0IG10a19kc2ksIGNvbm4pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICpo
b3N0X3RvX2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaCkKK3sKKwlyZXR1cm4gY29udGFpbmVy
X29mKGgsIHN0cnVjdCBtdGtfZHNpLCBob3N0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9t
YXNrKHN0cnVjdCBtdGtfZHNpICpkc2ksIHUzMiBvZmZzZXQsIHUzMiBtYXNrLCB1MzIgZGF0YSkK
K3sKKwl1MzIgdGVtcCA9IHJlYWRsKGRzaS0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwoKHRl
bXAgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBkc2ktPnJlZ3MgKyBvZmZzZXQpOworfQorCitz
dGF0aWMgdm9pZCBkc2lfcGh5X3RpbWNvbmZpZyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUz
MiB0aW1jb24wLCB0aW1jb24xLCB0aW1jb24yLCB0aW1jb24zOworCXVuc2lnbmVkIGludCB1aSwg
Y3ljbGVfdGltZTsKKwl1bnNpZ25lZCBpbnQgbHB4OworCisJdWkgPSAxMDAwIC8gZHNpLT5kYXRh
X3JhdGUgKyAweDAxOworCWN5Y2xlX3RpbWUgPSA4MDAwIC8gZHNpLT5kYXRhX3JhdGUgKyAweDAx
OworCWxweCA9IDU7CisKKwl0aW1jb24wID0gKDggPDwgMjQpIHwgKDB4YSA8PCAxNikgfCAoMHg2
IDw8IDgpIHwgbHB4OworCXRpbWNvbjEgPSAoNyA8PCAyNCkgfCAoNSAqIGxweCA8PCAxNikgfCAo
KDMgKiBscHgpIC8gMikgPDwgOCB8CisJCSAgKDQgKiBscHgpOworCXRpbWNvbjIgPSAoKE5TX1RP
X0NZQ0xFKDB4NjQsIGN5Y2xlX3RpbWUpICsgMHhhKSA8PCAyNCkgfAorCQkgIChOU19UT19DWUNM
RSgweDE1MCwgY3ljbGVfdGltZSkgPDwgMTYpOworCXRpbWNvbjMgPSAoMiAqIGxweCkgPDwgMTYg
fCBOU19UT19DWUNMRSg4MCArIDUyICogdWksIGN5Y2xlX3RpbWUpIDw8IDggfAorCQkgICBOU19U
T19DWUNMRSgweDQwLCBjeWNsZV90aW1lKTsKKworCXdyaXRlbCh0aW1jb24wLCBkc2ktPnJlZ3Mg
KyBEU0lfUEhZX1RJTUVDT04wKTsKKwl3cml0ZWwodGltY29uMSwgZHNpLT5yZWdzICsgRFNJX1BI
WV9USU1FQ09OMSk7CisJd3JpdGVsKHRpbWNvbjIsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNP
TjIpOworCXdyaXRlbCh0aW1jb24zLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04zKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmFibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlt
dGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9FTiwgRFNJX0VOKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RzaV9kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2Rz
aV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHNpX3Jlc2V0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwg
RFNJX0NPTl9DVFJMLCBEU0lfUkVTRVQsIERTSV9SRVNFVCk7CisJbXRrX2RzaV9tYXNrKGRzaSwg
RFNJX0NPTl9DVFJMLCBEU0lfUkVTRVQsIDApOworfQorCitzdGF0aWMgaW50IG10a19kc2lfcG93
ZXJvbihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+
ZGV2OworCWludCByZXQ7CisKKwlpZiAoKytkc2ktPnJlZmNvdW50ICE9IDEpCisJCXJldHVybiAw
OworCisJLyoqCisJICogZGF0YV9yYXRlID0gKHBpeGVsX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9k
aXB0aCAqIG1pcGlfcmF0aW87CisJICogcGl4ZWxfY2xvY2sgdW5pdCBpcyBLaHosIGRhdGFfcmF0
YSB1bml0IGlzIE1Ieiwgc28gbmVlZCBkaXZpZGUgMTAwMC4KKwkgKiBtaXBpX3JhdGlvIGlzIG1p
cGkgY2xrIGNvZWZmaWNpZW50IGZvciBiYWxhbmNlIHRoZSBwaXhlbCBjbGsgaW4gbWlwaS4KKwkg
KiB3ZSBzZXQgbWlwaV9yYXRpbyBpcyAxLjA1LgorCSAqLworCWRzaS0+ZGF0YV9yYXRlID0gZHNp
LT52bS5waXhlbGNsb2NrICogMyAqIDIxIC8gKDEgKiAxMDAwICogMTApOworCisJcmV0ID0gY2xr
X3NldF9yYXRlKGRzaS0+aHNfY2xrLCBkc2ktPmRhdGFfcmF0ZSAqIDEwMDAwMDApOworCWlmIChy
ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBkYXRhIHJhdGU6ICVkXG4i
LCByZXQpOworCQlnb3RvIGVycl9yZWZjb3VudDsKKwl9CisKKwlwaHlfcG93ZXJfb24oZHNpLT5w
aHkpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZW5naW5lX2Nsayk7CisJaWYg
KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9j
azogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BoeV9wb3dlcl9vZmY7CisJfQorCisJcmV0ID0g
Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZGlnaXRhbF9jbGspOworCWlmIChyZXQgPCAwKSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0
KTsKKwkJZ290byBlcnJfZGlzYWJsZV9lbmdpbmVfY2xrOworCX0KKworCW10a19kc2lfZW5hYmxl
KGRzaSk7CisJbXRrX2RzaV9yZXNldChkc2kpOworCWRzaV9waHlfdGltY29uZmlnKGRzaSk7CisK
KwlyZXR1cm4gMDsKKworZXJyX2Rpc2FibGVfZW5naW5lX2NsazoKKwljbGtfZGlzYWJsZV91bnBy
ZXBhcmUoZHNpLT5lbmdpbmVfY2xrKTsKK2Vycl9waHlfcG93ZXJfb2ZmOgorCXBoeV9wb3dlcl9v
ZmYoZHNpLT5waHkpOworZXJyX3JlZmNvdW50OgorCWRzaS0+cmVmY291bnQtLTsKKwlyZXR1cm4g
cmV0OworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtf
ZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhf
RU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDAp
OworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNp
ICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwg
MCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCBMQ19X
QUtFVVBfRU4pOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9F
TiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9lbnRlcihzdHJ1Y3Qg
bXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBf
SFNfVFhfRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfVUxQ
TV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBM
RDBfVUxQTV9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9X
QUtFVVBfRU4sIExEMF9XQUtFVVBfRU4pOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQw
Q09OLCBMRDBfV0FLRVVQX0VOLCAwKTsKK30KKworc3RhdGljIGJvb2wgZHNpX2Nsa19oc19zdGF0
ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnMTsKKworCXRtcF9yZWcxID0g
cmVhZGwoZHNpLT5yZWdzICsgRFNJX1BIWV9MQ0NPTik7CisJcmV0dXJuICgodG1wX3JlZzEgJiBM
Q19IU19UWF9FTikgPT0gMSkgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9j
bGtfaHNfbW9kZShzdHJ1Y3QgbXRrX2RzaSAqZHNpLCBib29sIGVudGVyKQoreworCWlmIChlbnRl
ciAmJiAhZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ
X0xDQ09OLCBMQ19IU19UWF9FTiwgTENfSFNfVFhfRU4pOworCWVsc2UgaWYgKCFlbnRlciAmJiBk
c2lfY2xrX2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04s
IExDX0hTX1RYX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3NldF9tb2RlKHN0cnVjdCBt
dGtfZHNpICpkc2kpCit7CisJdTMyIHZpZF9tb2RlID0gQ01EX01PREU7CisKKwlpZiAoZHNpLT5t
b2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgeworCQl2aWRfbW9kZSA9IFNZTkNfUFVM
U0VfTU9ERTsKKworCQlpZiAoKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9f
QlVSU1QpICYmCisJCSAgICAhKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9f
U1lOQ19QVUxTRSkpCisJCQl2aWRfbW9kZSA9IEJVUlNUX01PREU7CisJfQorCisJd3JpdGVsKHZp
ZF9tb2RlLCBkc2ktPnJlZ3MgKyBEU0lfTU9ERV9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNp
X3BzX2NvbnRyb2xfdmFjdChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXN0cnVjdCB2aWRlb21v
ZGUgKnZtID0gJmRzaS0+dm07CisJdTMyIGRzaV9idWZfYnBwLCBwc193YzsKKwl1MzIgcHNfYnBw
X21vZGU7CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNp
X2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX2J1Zl9icHAgPSAzOworCisJcHNfd2MgPSB2bS0+
aGFjdGl2ZSAqIGRzaV9idWZfYnBwOworCXBzX2JwcF9tb2RlID0gcHNfd2M7CisKKwlzd2l0Y2gg
KGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlwc19icHBfbW9k
ZSB8PSBQQUNLRURfUFNfMjRCSVRfUkdCODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZN
VF9SR0I2NjY6CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7CisJCWJy
ZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXBzX2JwcF9tb2RlIHw9
IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9S
R0I1NjU6CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjU7CisJCWJyZWFr
OworCX0KKworCXdyaXRlbCh2bS0+dmFjdGl2ZSwgZHNpLT5yZWdzICsgRFNJX1ZBQ1RfTkwpOwor
CXdyaXRlbChwc19icHBfbW9kZSwgZHNpLT5yZWdzICsgRFNJX1BTQ1RSTCk7CisJd3JpdGVsKHBz
X3djLCBkc2ktPnJlZ3MgKyBEU0lfSFNUWF9DS0xfV0MpOworfQorCitzdGF0aWMgdm9pZCBkc2lf
cnh0eF9jb250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRtcF9yZWc7CisKKwlz
d2l0Y2ggKGRzaS0+bGFuZXMpIHsKKwljYXNlIDE6CisJCXRtcF9yZWcgPSAxIDw8IDI7CisJCWJy
ZWFrOworCWNhc2UgMjoKKwkJdG1wX3JlZyA9IDMgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSAzOgor
CQl0bXBfcmVnID0gNyA8PCAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRtcF9yZWcgPSAweGYg
PDwgMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9IDB4ZiA8PCAyOworCQlicmVh
azsKKwl9CisKKwl3cml0ZWwodG1wX3JlZywgZHNpLT5yZWdzICsgRFNJX1RYUlhfQ1RSTCk7Cit9
CisKK3N0YXRpYyB2b2lkIGRzaV9wc19jb250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJ
dW5zaWduZWQgaW50IGRzaV90bXBfYnVmX2JwcDsKKwl1MzIgdG1wX3JlZzsKKworCXN3aXRjaCAo
ZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXRtcF9yZWcgPSBQ
QUNLRURfUFNfMjRCSVRfUkdCODg4OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsK
KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXRtcF9yZWcgPSBMT09TRUxZX1BTXzE4QklU
X1JHQjY2NjsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RT
SV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7
CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JH
QjU2NToKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjU7CisJCWRzaV90bXBfYnVm
X2JwcCA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMjRC
SVRfUkdCODg4OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwl9CisKKwl0bXBf
cmVnICs9IGRzaS0+dm0uaGFjdGl2ZSAqIGRzaV90bXBfYnVmX2JwcCAmIERTSV9QU19XQzsKKwl3
cml0ZWwodG1wX3JlZywgZHNpLT5yZWdzICsgRFNJX1BTQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lk
IGRzaV9jb25maWdfdmRvX3RpbWluZyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2lnbmVk
IGludCBob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5dGU7CisJdW5zaWduZWQgaW50IGhvcml6b250
YWxfYmFja3BvcmNoX2J5dGU7CisJdW5zaWduZWQgaW50IGhvcml6b250YWxfZnJvbnRwb3JjaF9i
eXRlOworCXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisKKwlzdHJ1Y3QgdmlkZW9tb2Rl
ICp2bSA9ICZkc2ktPnZtOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1
NjUpCisJCWRzaV90bXBfYnVmX2JwcCA9IDI7CisJZWxzZQorCQlkc2lfdG1wX2J1Zl9icHAgPSAz
OworCisJd3JpdGVsKHZtLT52c3luY19sZW4sIGRzaS0+cmVncyArIERTSV9WU0FfTkwpOworCXdy
aXRlbCh2bS0+dmJhY2tfcG9yY2gsIGRzaS0+cmVncyArIERTSV9WQlBfTkwpOworCXdyaXRlbCh2
bS0+dmZyb250X3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkZQX05MKTsKKwl3cml0ZWwodm0tPnZh
Y3RpdmUsIGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKworCWhvcml6b250YWxfc3luY19hY3Rp
dmVfYnl0ZSA9ICh2bS0+aHN5bmNfbGVuICogZHNpX3RtcF9idWZfYnBwIC0gMTApOworCisJaWYg
KGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJaG9y
aXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSA9CisJCQkodm0tPmhiYWNrX3BvcmNoICogZHNpX3RtcF9i
dWZfYnBwIC0gMTApOworCWVsc2UKKwkJaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSA9ICgodm0t
PmhiYWNrX3BvcmNoICsgdm0tPmhzeW5jX2xlbikgKgorCQkJZHNpX3RtcF9idWZfYnBwIC0gMTAp
OworCisJaG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGUgPSAodm0tPmhmcm9udF9wb3JjaCAqIGRz
aV90bXBfYnVmX2JwcCAtIDEyKTsKKworCXdyaXRlbChob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5
dGUsIGRzaS0+cmVncyArIERTSV9IU0FfV0MpOworCXdyaXRlbChob3Jpem9udGFsX2JhY2twb3Jj
aF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEJQX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9mcm9u
dHBvcmNoX2J5dGUsIGRzaS0+cmVncyArIERTSV9IRlBfV0MpOworCisJZHNpX3BzX2NvbnRyb2wo
ZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9zdGFydChzdHJ1Y3QgbXRrX2RzaSAqZHNp
KQoreworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBEU0lfU1RBUlQpOworCXdyaXRlbCgxLCBkc2kt
PnJlZ3MgKyBEU0lfU1RBUlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3Bvd2Vyb2ZmKHN0
cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaWYgKFdBUk5fT04oZHNpLT5yZWZjb3VudCA9PSAwKSkK
KwkJcmV0dXJuOworCisJaWYgKC0tZHNpLT5yZWZjb3VudCAhPSAwKQorCQlyZXR1cm47CisKKwlk
c2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoZHNpKTsKKwlkc2lfY2xrX3VscF9tb2RlX2VudGVyKGRz
aSk7CisKKwltdGtfZHNpX2Rpc2FibGUoZHNpKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShk
c2ktPmVuZ2luZV9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRpZ2l0YWxfY2xr
KTsKKworCXBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3V0
cHV0X2RzaV9lbmFibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0OworCisJaWYg
KGRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRy
bV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBz
ZXR1cCB0aGUgcGFuZWxcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0ID0gbXRrX2Rz
aV9wb3dlcm9uKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g
cG93ZXIgb24gZHNpXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRzaV9yeHR4X2NvbnRyb2woZHNp
KTsKKworCWRzaV9jbGtfdWxwX21vZGVfbGVhdmUoZHNpKTsKKwlkc2lfbGFuZTBfdWxwX21vZGVf
bGVhdmUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAwKTsKKwlkc2lfc2V0X21vZGUoZHNp
KTsKKworCWRzaV9wc19jb250cm9sX3ZhY3QoZHNpKTsKKwlkc2lfY29uZmlnX3Zkb190aW1pbmco
ZHNpKTsKKworCWRzaV9zZXRfbW9kZShkc2kpOworCWRzaV9jbGtfaHNfbW9kZShkc2ksIDEpOwor
CisJbXRrX2RzaV9zdGFydChkc2kpOworCisJZHNpLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX291dHB1dF9kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQorewor
CWlmICghZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlp
ZiAoZHJtX3BhbmVsX2Rpc2FibGUoZHNpLT5wYW5lbCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVk
IHRvIGRpc2FibGUgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW10a19k
c2lfcG93ZXJvZmYoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHNpX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp
Cit7CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBtdGtfZHNpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ry
b3kgPSBtdGtfZHNpX2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIG10a19kc2lf
ZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAg
ICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVj
dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQor
CitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVy
ICplbmNvZGVyLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJ
ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IG10a19k
c2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJZHNpLT52bS5waXhlbGNsb2Nr
ID0gYWRqdXN0ZWQtPmNsb2NrOworCWRzaS0+dm0uaGFjdGl2ZSA9IGFkanVzdGVkLT5oZGlzcGxh
eTsKKwlkc2ktPnZtLmhiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPmh0b3RhbCAtIGFkanVzdGVkLT5o
c3luY19lbmQ7CisJZHNpLT52bS5oZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+aHN5bmNfc3RhcnQg
LSBhZGp1c3RlZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oc3luY19sZW4gPSBhZGp1c3RlZC0+aHN5
bmNfZW5kIC0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0OworCisJZHNpLT52bS52YWN0aXZlID0gYWRq
dXN0ZWQtPnZkaXNwbGF5OworCWRzaS0+dm0udmJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+dnRvdGFs
IC0gYWRqdXN0ZWQtPnZzeW5jX2VuZDsKKwlkc2ktPnZtLnZmcm9udF9wb3JjaCA9IGFkanVzdGVk
LT52c3luY19zdGFydCAtIGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZzeW5jX2xlbiA9
IGFkanVzdGVkLT52c3luY19lbmQgLSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQ7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl
cikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisK
KwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lf
ZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBt
dGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRfZHNp
X2VuYWJsZShkc2kpOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBtdGtf
ZHNpX2Nvbm5lY3Rvcl9kZXRlY3QoCisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwg
Ym9vbCBmb3JjZSkKK3sKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0
b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsK
Kwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBtdGtf
ZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK
K3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gY29ubmVjdG9yX3RvX2RzaShjb25uZWN0b3IpOwor
CisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRpYyBz
dHJ1Y3QgZHJtX2VuY29kZXIgKm10a19kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJc3Ry
dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0g
Y29ubmVjdG9yX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuICZkc2ktPmVuY29kZXI7Cit9
CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG10a19kc2lf
ZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBtdGtfZHNpX2VuY29kZXJf
bW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBtdGtfZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmRp
c2FibGUgPSBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxlID0gbXRrX2RzaV9lbmNv
ZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5j
cyBtdGtfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVy
X2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXRlY3QsCisJ
LmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJ
LmRlc3Ryb3kgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9t
aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy
bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0
cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9
OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJbXRr
X2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBtdGtfZHNpX2Nv
bm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IG10a19kc2lfY29ubmVjdG9yX2Jl
c3RfZW5jb2RlciwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9hdHRhY2hfYnJpZGdlKHN0cnVj
dCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK
K3sKKwlpbnQgcmV0OworCisJaWYgKCFicmlkZ2UpCisJCXJldHVybiAtRU5PRU5UOworCisJZW5j
b2Rlci0+YnJpZGdlID0gYnJpZGdlOworCWJyaWRnZS0+ZW5jb2RlciA9IGVuY29kZXI7CisJcmV0
ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2Rlci0+ZGV2LCBicmlkZ2UpOworCWlmIChyZXQpIHsK
KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGJyaWRnZSB0byBkcm1cbiIpOworCQllbmNv
ZGVyLT5icmlkZ2UgPSBOVUxMOworCQlicmlkZ2UtPmVuY29kZXIgPSBOVUxMOworCX0KKworCXJl
dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9jcmVhdGVfY29ubl9lbmMoc3RydWN0
IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0OworCisJ
cmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm0sICZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29k
ZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOworCWlmIChy
ZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5jb2RlciBpbml0IHRvIGRybVxuIik7CisJ
CXJldHVybiByZXQ7CisJfQorCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRzaS0+ZW5jb2Rlciwg
Jm10a19kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJLyoKKwkgKiBDdXJyZW50bHkgZGlz
cGxheSBkYXRhIHBhdGhzIGFyZSBzdGF0aWNhbGx5IGFzc2lnbmVkIHRvIGEgY3J0YyBlYWNoLgor
CSAqIGNydGMgMCBpcyBPVkwwIC0+IENPTE9SMCAtPiBBQUwgLT4gT0QgLT4gUkRNQTAgLT4gVUZP
RSAtPiBEU0kwCisJICovCisJZHNpLT5lbmNvZGVyLnBvc3NpYmxlX2NydGNzID0gMTsKKworCS8q
IFByZS1lbXB0IERQIGNvbm5lY3RvciBjcmVhdGlvbiBpZiB0aGVyZSdzIGEgYnJpZGdlICovCisJ
cmV0ID0gbXRrX2RybV9hdHRhY2hfYnJpZGdlKGRzaS0+YnJpZGdlLCAmZHNpLT5lbmNvZGVyKTsK
KwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJt
LCAmZHNpLT5jb25uLCAmbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NP
Tk5FQ1RPUl9EU0kpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVj
dG9yIGluaXQgdG8gZHJtXG4iKTsKKwkJZ290byBlcnJfZW5jb2Rlcl9jbGVhbnVwOworCX0KKwor
CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmZHNpLT5jb25uLCAmbXRrX2RzaV9jb25uZWN0b3Jf
aGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJmRzaS0+Y29u
bik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb25uZWN0b3IgcmVnaXN0
ZXIgdG8gZHJtXG4iKTsKKwkJZ290byBlcnJfY29ubmVjdG9yX2NsZWFudXA7CisJfQorCisJZHNp
LT5jb25uLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0
YWNoX2VuY29kZXIoJmRzaS0+Y29ubiwgJmRzaS0+ZW5jb2Rlcik7CisKKwlpZiAoZHNpLT5wYW5l
bCkgeworCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZkc2ktPmNvbm4pOwor
CQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhdHRhY2ggcGFuZWwgdG8gZHJt
XG4iKTsKKwkJCWdvdG8gZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOworCQl9CisJfQorCXJldHVy
biAwOworCitlcnJfY29ubmVjdG9yX3VucmVnaXN0ZXI6CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lz
dGVyKCZkc2ktPmNvbm4pOworZXJyX2Nvbm5lY3Rvcl9jbGVhbnVwOgorCWRybV9jb25uZWN0b3Jf
Y2xlYW51cCgmZHNpLT5jb25uKTsKK2Vycl9lbmNvZGVyX2NsZWFudXA6CisJZHJtX2VuY29kZXJf
Y2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kc2lfZGVzdHJveV9jb25uX2VuYyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWRybV9l
bmNvZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisJLyogU2tpcCBjb25uZWN0b3IgY2xlYW51
cCBpZiBjcmVhdGlvbiB3YXMgZGVsZWdhdGVkIHRvIHRoZSBicmlkZ2UgKi8KKwlpZiAoZHNpLT5j
b25uLmRldikgeworCQlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRzaS0+Y29ubik7CisJCWRy
bV9jb25uZWN0b3JfY2xlYW51cCgmZHNpLT5jb25uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kc2lfZGRwX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10
a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXAp
OworCisJbXRrX2RzaV9wb3dlcm9uKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGRw
X3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNp
ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBfY29tcCk7CisKKwltdGtf
ZHNpX3Bvd2Vyb2ZmKGRzaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21w
X2Z1bmNzIG10a19kc2lfZnVuY3MgPSB7CisJLnN0YXJ0ID0gbXRrX2RzaV9kZHBfc3RhcnQsCisJ
LnN0b3AgPSBtdGtfZHNpX2RkcF9zdG9wLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX2hvc3Rf
YXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBp
X2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gaG9zdF90b19k
c2koaG9zdCk7CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmZvcm1hdCA9
IGRldmljZS0+Zm9ybWF0OworCWRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFnczsK
KworCWlmIChkc2ktPmNvbm4uZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHNpLT5j
b25uLmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2hvc3RfZGV0
YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2Rz
aV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gaG9zdF90b19kc2ko
aG9zdCk7CisKKwlpZiAoZHNpLT5jb25uLmRldikKKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50
KGRzaS0+Y29ubi5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
bWlwaV9kc2lfaG9zdF9vcHMgbXRrX2RzaV9vcHMgPSB7CisJLmF0dGFjaCA9IG10a19kc2lfaG9z
dF9hdHRhY2gsCisJLmRldGFjaCA9IG10a19kc2lfaG9zdF9kZXRhY2gsCit9OworCitzdGF0aWMg
aW50IG10a19kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl
ciwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBk
YXRhOworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJl
dCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwlpZiAocmV0
IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6
ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5ob3N0KTsKKwlpZiAo
cmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEU0kgaG9zdDog
JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RkcF9jb21wX3VucmVnaXN0ZXI7CisJfQorCisJcmV0
ID0gbXRrX2RzaV9jcmVhdGVfY29ubl9lbmMoZHJtLCBkc2kpOworCWlmIChyZXQpIHsKKwkJRFJN
X0VSUk9SKCJFbmNvZGVyIGNyZWF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZ290byBl
cnJfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJbWlw
aV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworZXJyX2RkcF9jb21wX3VucmVnaXN0
ZXI6CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJcmV0
dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAq
ZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVj
dCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBkZXZfZ2V0
X2RydmRhdGEoZGV2KTsKKworCW10a19kc2lfZGVzdHJveV9jb25uX2VuYyhkc2kpOworCW1pcGlf
ZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5ob3N0KTsKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rl
cihkcm0sICZkc2ktPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25l
bnRfb3BzIG10a19kc2lfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IG10a19kc2lfYmluZCwK
KwkudW5iaW5kID0gbXRrX2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kc2lfcHJv
YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNp
OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2Rl
ICpyZW1vdGVfbm9kZSwgKmVuZHBvaW50OworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQg
Y29tcF9pZDsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpk
c2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc2kt
Pmhvc3Qub3BzID0gJm10a19kc2lfb3BzOworCWRzaS0+aG9zdC5kZXYgPSBkZXY7CisKKwllbmRw
b2ludCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVMTCk7CisJ
aWYgKGVuZHBvaW50KSB7CisJCXJlbW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0
X3BhcmVudChlbmRwb2ludCk7CisJCWlmICghcmVtb3RlX25vZGUpIHsKKwkJCWRldl9lcnIoZGV2
LCAiTm8gcGFuZWwgY29ubmVjdGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJ
ZHNpLT5icmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2UocmVtb3RlX25vZGUpOworCQlkc2ktPnBh
bmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocmVtb3RlX25vZGUpOworCQlvZl9ub2RlX3B1dChyZW1v
dGVfbm9kZSk7CisJCWlmICghZHNpLT5icmlkZ2UgJiYgIWRzaS0+cGFuZWwpIHsKKwkJCWRldl9p
bmZvKGRldiwgIldhaXRpbmcgZm9yIGJyaWRnZSBvciBwYW5lbCBkcml2ZXJcbiIpOworCQkJcmV0
dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlkc2ktPmVuZ2luZV9jbGsgPSBkZXZtX2Ns
a19nZXQoZGV2LCAiZW5naW5lIik7CisJaWYgKElTX0VSUihkc2ktPmVuZ2luZV9jbGspKSB7CisJ
CXJldCA9IFBUUl9FUlIoZHNpLT5lbmdpbmVfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gZ2V0IGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ
ZHNpLT5kaWdpdGFsX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJkaWdpdGFsIik7CisJaWYgKElT
X0VSUihkc2ktPmRpZ2l0YWxfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZGlnaXRhbF9j
bGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGlnaXRhbCBjbG9jazogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5oc19jbGsgPSBkZXZtX2Nsa19nZXQo
ZGV2LCAiaHMiKTsKKwlpZiAoSVNfRVJSKGRzaS0+aHNfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJS
KGRzaS0+aHNfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGhzIGNsb2NrOiAl
ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jl
c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBkZXZtX2lvcmVt
YXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpIHsKKwkJcmV0
ID0gUFRSX0VSUihkc2ktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFw
IG1lbW9yeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5waHkgPSBk
ZXZtX3BoeV9nZXQoZGV2LCAiZHBoeSIpOworCWlmIChJU19FUlIoZHNpLT5waHkpKSB7CisJCXJl
dCA9IFBUUl9FUlIoZHNpLT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTUlQ
SS1EUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0gbXRr
X2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19EU0kpOworCWlmIChjb21wX2lkIDwg
MCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIs
IGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBf
aW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJmRzaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10
a19kc2lfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5p
dGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBs
YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwlyZXR1cm4gY29tcG9uZW50X2FkZCgm
cGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBtdGtf
ZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtf
ZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW10a19vdXRwdXRfZHNp
X2Rpc2FibGUoZHNpKTsKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBv
bmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBp
bnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz
aSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2Rz
aV9kaXNhYmxlKGRzaSk7CisJRFJNX0RFQlVHX0RSSVZFUigiZHNpIHN1c3BlbmQgc3VjY2VzcyFc
biIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9yZXN1bWUoc3RydWN0
IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisKKwlkc2kgPSBkZXZfZ2V0
X2RydmRhdGEoZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJsZShkc2kpOworCURSTV9ERUJV
R19EUklWRVIoImRzaSByZXN1bWUgc3VjY2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisjZW5k
aWYKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHNpX3BtX29wcywgbXRrX2RzaV9zdXNw
ZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk
IG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1kc2kiIH0sCisJeyB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2Ry
aXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHNpX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfZHNpX3Jl
bW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdGstZHNpIiwKKwkJLm9mX21hdGNoX3Rh
YmxlID0gbXRrX2RzaV9vZl9tYXRjaCwKKwkJLnBtID0gJm10a19kc2lfcG1fb3BzLAorCX0sCit9
OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMWU4ZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g
MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5j
bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp
bmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg
PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKwor
I2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJ
QklUKDApCisjZGVmaW5lIFJHX0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdf
RFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8
IDQpCisjZGVmaW5lIFJHX0RTSV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lf
RFNJQ0xLX0ZSRVFfU0VMCQlCSVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJ
VCgxMSkKKworI2RlZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBSR19E
U0lfTE5UQ19MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UQ19DS0xBTkVfRU4J
CUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UQ19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5l
IFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBU
WF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UQ19MUENEX0lQTFVTCQlCSVQoNSkK
KyNkZWZpbmUgUkdfRFNJX0xOVENfTFBDRF9JTUxVUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9M
TlRDX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJ
MHgwOAorI2RlZmluZSBSR19EU0lfTE5UMF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19E
U0lfTE5UMF9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVT
MQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZp
bmUgUkdfRFNJX0xOVDBfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMF9M
UENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBDRF9JTUlOVVMJCUJJVCg2
KQorI2RlZmluZSBSR19EU0lfTE5UMF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQ
SVRYX0RTSV9EQVRBX0xBTkUxCTB4MGMKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTERPT1VUX0VOCQlC
SVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdf
RFNJX0xOVDFfTFBUWF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lQ
TFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNk
ZWZpbmUgUkdfRFNJX0xOVDFfTFBDRF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQx
X0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVDFfUlRfQ09ERQkJKDB4ZiA8
PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMgkweDEwCisjZGVmaW5lIFJHX0RT
SV9MTlQyX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlQyX0NLTEFORV9FTgkJ
QklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUg
UkdfRFNJX0xOVDJfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRY
X0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQQ0RfSVBMVVMJCUJJVCg1KQor
I2RlZmluZSBSR19EU0lfTE5UMl9MUENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9M
TlQyX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJ
MHgxNAorI2RlZmluZSBSR19EU0lfTE5UM19MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19E
U0lfTE5UM19DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVT
MQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZp
bmUgUkdfRFNJX0xOVDNfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UM19M
UENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBDRF9JTUlOVVMJCUJJVCg2
KQorI2RlZmluZSBSR19EU0lfTE5UM19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQ
SVRYX0RTSV9UT1BfQ09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkK
KyNkZWZpbmUgUkdfRFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xO
VF9JTVBfQ0FMX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklU
KDMpCisjZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5l
IFJHX0RTSV9MTlRfQUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9X
X0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2Rl
ZmluZSBSR19EU0lfUFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JH
X0NPTgkweDQ0CisjZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf
RFNJX0JHX0NLRU4JCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikK
KyNkZWZpbmUgUkdfRFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZP
VVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1
KQorI2RlZmluZSBSR19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcy
X1NFTAkJCSg3IDw8IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2Rl
ZmluZSBSR19EU0lfVjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJ
CQkoNyA8PCAyMCkKKyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVm
aW5lIFJHX0RTSV9CR19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lf
UExMX0NPTjAJMHg1MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZp
bmUgUkdfRFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQ
TExfUFJFRElWCQkoMyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAz
KQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lf
TVBQTExfUE9TRElWCQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJ
VCgxMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBS
R19EU0lfTVBQTExfVk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09O
MQkweDU0CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUg
UkdfRFNJX01QUExMX1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExM
X1NETV9TU0NfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4
ZmZmZiA8PCAxNikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmlu
ZSBNSVBJVFhfRFNJX1BMTF9QV1IJMHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9P
TgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZp
bmUgUkdfRFNJX01QUExMX1NETV9QV1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lf
U1dfQ1RSTAkweDgwCisjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJ
VFhfRFNJX1NXX0NUUkxfQ09OMAkweDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJ
VCgwKQorI2RlZmluZSBTV19MTlRDX0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19M
UFRYX1AJCQlCSVQoMikKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUg
U1dfTE5UQ19IU1RYX1BSRV9PRQkJQklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJ
VCg1KQorI2RlZmluZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xO
VDBfTFBUWF9QUkVfT0UJCUJJVCg3KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkK
KyNkZWZpbmUgU1dfTE5UMF9MUFRYX1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04J
CQlCSVQoMTApCisjZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUg
U1dfTE5UMF9IU1RYX09FCQkJQklUKDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQo
MTMpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5U
MV9MUFRYX09FCQkJQklUKDE1KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNk
ZWZpbmUgU1dfTE5UMV9MUFRYX04JCQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVf
T0UJCUJJVCgxOCkKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBT
V19MTlQyX0xQVFhfUFJFX09FCQlCSVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJ
VCgyMSkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJf
TFBUWF9OCQkJQklUKDIzKQorI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisj
ZGVmaW5lIFNXX0xOVDJfSFNUWF9PRQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsK
KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGlu
dCBkYXRhX3JhdGU7CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJc3RydWN0IGNsayAqcGxsOwor
fTsKKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfbWFzayhzdHJ1Y3QgbXRrX21pcGlfdHggKm1p
cGlfdHgsIHUzMiBvZmZzZXQsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZGF0YSkKK3sKKwl1MzIg
dGVtcCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYg
fm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJ
c3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRr
X21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCXVuc2lnbmVkIGludCB0eGRpdiwgdHhkaXYw
LCB0eGRpdjE7CisJdTY0IHBjdzsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTog
JXUgSHpcbiIsIG1pcGlfdHgtPmRhdGFfcmF0ZSk7CisKKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRl
ID49IDUwMDAwMDAwMCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2MCA9IDA7CisJCXR4ZGl2MSA9
IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7CisJCXR4
ZGl2ID0gMjsKKwkJdHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlf
dHgtPmRhdGFfcmF0ZSA+PSAxMjUwMDAwMDApIHsKKwkJdHhkaXYgPSA0OworCQl0eGRpdjAgPSAy
OworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAw
MDApIHsKKwkJdHhkaXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxz
ZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTY7CisJ
CXR4ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7
CisJfQorCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJ
CSBSR19EU0lfVk9VVF9NU0sgfCBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAor
CQkJICg0IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkgKDQgPDwgMTEpIHwg
KDQgPDwgOCkgfCAoNCA8PCA1KSB8CisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09S
RV9FTik7CisKKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8
IFJHX0RTSV9MTlRfSFNfQklBU19FTiwKKwkJCSAoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklB
U19FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJ
IFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4sCisJCQkgUkdfRFNJX0NL
R19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8
IFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsK
KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJ
X01QUExMX1BMTF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9E
U0lfUExMX0NPTjAsCisJCQkgUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJ
VjEgfAorCQkJIFJHX0RTSV9NUFBMTF9QUkVESVYsCisJCQkgKHR4ZGl2MCA8PCAzKSB8ICh0eGRp
djEgPDwgNSkpOworCisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAg
PSBpbnRlZ2VyIHBhcnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0
IG9mIHBjdworCSAqIHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBv
c3QgRElWID00LCBzbyBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAq
LworCXBjdyA9ICgodTY0KW1pcGlfdHgtPmRhdGFfcmF0ZSAqIDIgKiB0eGRpdikgPDwgMjQ7CisJ
cGN3IC89IDI2MDAwMDAwOworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJ
X1BMTF9DT04yKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExf
Q09OMSwKKwkJCSBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTiwgUkdfRFNJX01QUExMX1NETV9GUkFf
RU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAor
CQkJIFJHX0RTSV9NUFBMTF9QTExfRU4sIFJHX0RTSV9NUFBMTF9QTExfRU4pOworCisJdXNsZWVw
X3JhbmdlKDIwLCAxMDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJ
X1BMTF9DT04xLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fU1NDX0VOLCAwKTsKKworCXJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtf
aHcgKmh3KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5lcl9vZiho
dywgc3RydWN0IG10a19taXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKworCWRldl9kYmcobWlw
aV90eC0+ZGV2LCAidW5wcmVwYXJlXG4iKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwg
TUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX1BMTF9FTiwgMCk7CisKKwltdGtfbWlw
aV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExf
U0RNX0lTT19FTiB8IFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAorCQkJIFJHX0RTSV9NUFBMTF9T
RE1fSVNPX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9UT1Bf
Q09OLCBSR19EU0lfTE5UX0hTX0JJQVNfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp
X3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9M
RE9DT1JFX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9C
R19DT04sCisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwgMCk7CisKKwlt
dGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBM
TF9ESVZfTVNLLCAwKTsKK30KKworc3RhdGljIGxvbmcgbXRrX21pcGlfdHhfcGxsX3JvdW5kX3Jh
dGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5z
aWduZWQgbG9uZyAqcHJhdGUpCit7CisJcmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwg
MTI1MDAwMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0
cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxv
bmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFp
bmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCisJZGV2
X2RiZyhtaXBpX3R4LT5kZXYsICJzZXQgcmF0ZTogJWx1IEh6XG4iLCByYXRlKTsKKworCW1pcGlf
dHgtPmRhdGFfcmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVk
IGxvbmcgbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJ
CQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICpt
aXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBw
bGxfaHcpOworCXJldHVybiBtaXBpX3R4LT5kYXRhX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgY2xrX29wcyBtdGtfbWlwaV90eF9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRrX21p
cGlfdHhfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF91bnByZXBh
cmUsCisJLnJvdW5kX3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3Jh
dGUgPSBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUsCisJLnJlY2FsY19yYXRlID0gbXRrX21pcGlf
dHhfcGxsX3JlY2FsY19yYXRlLAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9v
bl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90
eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN
SVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkgUkdfRFNJX0xOVENfTERPT1VUX0VOLCBSR19EU0lf
TE5UQ19MRE9PVVRfRU4pOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9E
QVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xET09VVF9FTiwgUkdfRFNJX0xOVDBfTERPT1VU
X0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMSwK
KwkJCSBSR19EU0lfTE5UMV9MRE9PVVRfRU4sIFJHX0RTSV9MTlQxX0xET09VVF9FTik7CisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTIsCisJCQkgUkdfRFNJ
X0xOVDJfTERPT1VUX0VOLCBSR19EU0lfTE5UMl9MRE9PVVRfRU4pOworCW10a19taXBpX3R4X21h
c2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUzLAorCQkJIFJHX0RTSV9MTlQzX0xET09V
VF9FTiwgUkdfRFNJX0xOVDNfTERPT1VUX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90
eCwgTUlQSVRYX0RTSV9UT1BfQ09OLCBSR19EU0lfUEFEX1RJRV9MT1dfRU4sIDApOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb24oc3RydWN0IHBoeSAq
cGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShw
aHkpOworCWludCByZXQ7CisKKwkvKiBQb3dlciB1cCBjb3JlIGFuZCBlbmFibGUgUExMICovCisJ
cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1pcGlfdHgtPnBsbCk7CisJaWYgKHJldCA8IDApCisJ
CXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgRFNJIExhbmUgTERPIG91dHB1dHMsIGRpc2FibGUg
cGFkIHRpZSBsb3cgKi8KKwltdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwocGh5KTsKKworCXJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsKHN0
cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0
X2RydmRhdGEocGh5KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9U
T1BfQ09OLCBSR19EU0lfUEFEX1RJRV9MT1dfRU4sCisJCQkgUkdfRFNJX1BBRF9USUVfTE9XX0VO
KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9DTE9DS19MQU5FLAor
CQkJIFJHX0RTSV9MTlRDX0xET09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4
LCBNSVBJVFhfRFNJX0RBVEFfTEFORTAsCisJCQkgUkdfRFNJX0xOVDBfTERPT1VUX0VOLCAwKTsK
KwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMSwKKwkJCSBS
R19EU0lfTE5UMV9MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQ
SVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJIFJHX0RTSV9MTlQyX0xET09VVF9FTiwgMCk7CisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTMsCisJCQkgUkdfRFNJ
X0xOVDNfTERPT1VUX0VOLCAwKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9v
ZmYoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBo
eV9nZXRfZHJ2ZGF0YShwaHkpOworCisJLyogRW5hYmxlIHBhZCB0aWUgbG93LCBkaXNhYmxlIERT
SSBMYW5lIExETyBvdXRwdXRzICovCisJbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChwaHkp
OworCisJLyogRGlzYWJsZSBQTEwgYW5kIHBvd2VyIGRvd24gY29yZSAqLworCWNsa19kaXNhYmxl
X3VucHJlcGFyZShtaXBpX3R4LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9vcHMgPSB7CisJLnBvd2VyX29uID0gbXRrX21p
cGlfdHhfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG10a19taXBpX3R4X3Bvd2VyX29mZiwKKwku
b3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm
cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3Vy
Y2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFt
ZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfbWlw
aV90eF9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNv
bnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFU
RV9HQVRFLAorCX07CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBo
eV9wcm92aWRlcjsKKwlpbnQgcmV0OworCisJbWlwaV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNp
emVvZigqbWlwaV90eCksIEdGUF9LRVJORUwpOworCWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1F
Tk9NRU07CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N
RU0sIDApOworCW1pcGlfdHgtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0p
OworCWlmIChJU19FUlIobWlwaV90eC0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4
LT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVmX2NsayA9IGRldm1fY2xrX2dl
dChkZXYsIE5VTEwpOworCWlmIChJU19FUlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihy
ZWZfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHJlZmVyZW5jZSBjbG9jazog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dl
dF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5v
Zl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7
CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1v
dXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgt
PnBsbF9ody5pbml0ID0gJmNsa19pbml0OworCW1pcGlfdHgtPnBsbCA9IGRldm1fY2xrX3JlZ2lz
dGVyKGRldiwgJm1pcGlfdHgtPnBsbF9odyk7CisJaWYgKElTX0VSUihtaXBpX3R4LT5wbGwpKSB7
CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaHkg
PSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAmbXRrX21pcGlfdHhfb3BzKTsKKwlpZiAoSVNf
RVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihwaHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxl
ZCB0byBjcmVhdGUgTUlQSSBELVBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CXBoeV9zZXRfZHJ2ZGF0YShwaHksIG1pcGlfdHgpOworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9v
Zl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAo
SVNfRVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihwaHlfcHJvdmlkZXIpOworCQlyZXR1cm4g
cmV0OworCX0KKworCW1pcGlfdHgtPmRldiA9IGRldjsKKworCXJldHVybiBvZl9jbGtfYWRkX3By
b3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LAorCQkJCSAgIG1pcGlf
dHgtPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb2ZfY2xrX2RlbF9wcm92aWRlcihwZGV2LT5kZXYub2Zf
bm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk
IG10a19taXBpX3R4X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx
NzMtbWlwaS10eCIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19t
aXBpX3R4X2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfbWlwaV90eF9wcm9iZSwKKwkucmVtb3Zl
ID0gbXRrX21pcGlfdHhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVr
LW1pcGktdHgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfbWlwaV90eF9tYXRjaCwKKwl9LAor
fTsKLS0gCjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v
cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2
ZWwK