From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v15 3/8] drm/mediatek: Add DSI sub driver
Date: Wed, 27 Apr 2016 17:05:47 +0200
Message-ID: <1461769552-2752-4-git-send-email-p.zabel@pengutronix.de>
References: <1461769552-2752-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: <1461769552-2752-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
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE1OgogLSB1c2UgZGl2X3U2
NCB0byBhdm9pZCAiX19hZWFiaV91bGRpdm1vZCB1bmRlZmluZWQiIGVycm9yIHdoZW4KICAgYnVp
bGRpbmcgYXMgbW9kdWxlCi0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAg
ICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgfCAgIDQg
Ky0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIHwgICAyICsKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwgOTI3ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgfCA0NjMgKysr
KysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzk5IGluc2VydGlvbnMoKyksIDEgZGVs
ZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t
aXBpX3R4LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDMwZTUzNzEuLmVlZWZjOTcg
MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC00LDYgKzQsOCBAQCBjb25maWcgRFJNX01F
RElBVEVLCiAJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNU
KQogCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlz
ZWxlY3QgRFJNX01JUElfRFNJCisJc2VsZWN0IERSTV9QQU5FTAogCXNlbGVjdCBJT01NVV9ETUEK
IAlzZWxlY3QgTUVNT1JZCiAJc2VsZWN0IE1US19TTUkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls
ZQppbmRleCBkNGJkZTdjLi5lNzgxZGI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpA
QCAtNiw2ICs2LDggQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10
a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1fZmIubyBcCiAJCSAgbXRrX2RybV9nZW0ubyBcCi0J
CSAgbXRrX2RybV9wbGFuZS5vCisJCSAgbXRrX2RybV9wbGFuZS5vIFwKKwkJICBtdGtfZHNpLm8g
XAorCQkgIG10a19taXBpX3R4Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVk
aWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggNGFh
MDlhMS4uMjBiMTc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAg
LTUxNyw2ICs1MTcsOCBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10
a19kcm1fZHJpdmVyc1tdID0gewogCSZtdGtfZGRwX2RyaXZlciwKIAkmbXRrX2Rpc3Bfb3ZsX2Ry
aXZlciwKIAkmbXRrX2Rpc3BfcmRtYV9kcml2ZXIsCisJJm10a19kc2lfZHJpdmVyLAorCSZtdGtf
bWlwaV90eF9kcml2ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9p
ZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKaW5kZXggMjdkYzhmYS4uYWM2
YzkyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTUzLDUgKzUz
LDcgQEAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2Ry
aXZlciBtdGtfZGRwX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19k
aXNwX292bF9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9y
ZG1hX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVy
OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOwogCiAj
ZW5kaWYgLyogTVRLX0RSTV9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlOGZmNQotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKQEAgLTAsMCArMSw5MjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2Ry
bVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1
ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs
aW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4
L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxs
aW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j
bHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgi
CisKKyNkZWZpbmUgRFNJX1ZJREVPX0ZJRk9fREVQVEgJKDE5MjAgLyA0KQorI2RlZmluZSBEU0lf
SE9TVF9GSUZPX0RFUFRICTY0CisKKyNkZWZpbmUgRFNJX1NUQVJUCQkweDAwCisKKyNkZWZpbmUg
RFNJX0NPTl9DVFJMCQkweDEwCisjZGVmaW5lIERTSV9SRVNFVAkJCUJJVCgwKQorI2RlZmluZSBE
U0lfRU4JCQkJQklUKDEpCisKKyNkZWZpbmUgRFNJX01PREVfQ1RSTAkJMHgxNAorI2RlZmluZSBN
T0RFCQkJCSgzKQorI2RlZmluZSBDTURfTU9ERQkJCTAKKyNkZWZpbmUgU1lOQ19QVUxTRV9NT0RF
CQkJMQorI2RlZmluZSBTWU5DX0VWRU5UX01PREUJCQkyCisjZGVmaW5lIEJVUlNUX01PREUJCQkz
CisjZGVmaW5lIEZSTV9NT0RFCQkJQklUKDE2KQorI2RlZmluZSBNSVhfTU9ERQkJCUJJVCgxNykK
KworI2RlZmluZSBEU0lfVFhSWF9DVFJMCQkweDE4CisjZGVmaW5lIFZDX05VTQkJCQkoMiA8PCAw
KQorI2RlZmluZSBMQU5FX05VTQkJCSgweGYgPDwgMikKKyNkZWZpbmUgRElTX0VPVAkJCQlCSVQo
NikKKyNkZWZpbmUgTlVMTF9FTgkJCQlCSVQoNykKKyNkZWZpbmUgVEVfRlJFRVJVTgkJCUJJVCg4
KQorI2RlZmluZSBFWFRfVEVfRU4JCQlCSVQoOSkKKyNkZWZpbmUgRVhUX1RFX0VER0UJCQlCSVQo
MTApCisjZGVmaW5lIE1BWF9SVE5fU0laRQkJCSgweGYgPDwgMTIpCisjZGVmaW5lIEhTVFhfQ0tM
UF9FTgkJCUJJVCgxNikKKworI2RlZmluZSBEU0lfUFNDVFJMCQkweDFjCisjZGVmaW5lIERTSV9Q
U19XQwkJCTB4M2ZmZgorI2RlZmluZSBEU0lfUFNfU0VMCQkJKDMgPDwgMTYpCisjZGVmaW5lIFBB
Q0tFRF9QU18xNkJJVF9SR0I1NjUJCSgwIDw8IDE2KQorI2RlZmluZSBMT09TRUxZX1BTXzE4QklU
X1JHQjY2NgkJKDEgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18xOEJJVF9SR0I2NjYJCSgyIDw8
IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMjRCSVRfUkdCODg4CQkoMyA8PCAxNikKKworI2RlZmlu
ZSBEU0lfVlNBX05MCQkweDIwCisjZGVmaW5lIERTSV9WQlBfTkwJCTB4MjQKKyNkZWZpbmUgRFNJ
X1ZGUF9OTAkJMHgyOAorI2RlZmluZSBEU0lfVkFDVF9OTAkJMHgyQworI2RlZmluZSBEU0lfSFNB
X1dDCQkweDUwCisjZGVmaW5lIERTSV9IQlBfV0MJCTB4NTQKKyNkZWZpbmUgRFNJX0hGUF9XQwkJ
MHg1OAorCisjZGVmaW5lIERTSV9IU1RYX0NLTF9XQwkJMHg2NAorCisjZGVmaW5lIERTSV9QSFlf
TENDT04JCTB4MTA0CisjZGVmaW5lIExDX0hTX1RYX0VOCQkJQklUKDApCisjZGVmaW5lIExDX1VM
UE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTENfV0FLRVVQX0VOCQkJQklUKDIpCisKKyNkZWZpbmUg
RFNJX1BIWV9MRDBDT04JCTB4MTA4CisjZGVmaW5lIExEMF9IU19UWF9FTgkJCUJJVCgwKQorI2Rl
ZmluZSBMRDBfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMRDBfV0FLRVVQX0VOCQkJQklUKDIp
CisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMAkweDExMAorI2RlZmluZSBMUFgJCQkJKDB4ZmYg
PDwgMCkKKyNkZWZpbmUgSFNfUFJQUgkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBIU19aRVJPCQkJ
CSgweGZmIDw8IDE2KQorI2RlZmluZSBIU19UUkFJTAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5l
IERTSV9QSFlfVElNRUNPTjEJMHgxMTQKKyNkZWZpbmUgVEFfR08JCQkJKDB4ZmYgPDwgMCkKKyNk
ZWZpbmUgVEFfU1VSRQkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBUQV9HRVQJCQkJKDB4ZmYgPDwg
MTYpCisjZGVmaW5lIERBX0hTX0VYSVQJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZ
X1RJTUVDT04yCTB4MTE4CisjZGVmaW5lIENPTlRfREVUCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUg
Q0xLX1pFUk8JCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQ0xLX1RSQUlMCQkJKDB4ZmYgPDwgMjQp
CisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMwkweDExYworI2RlZmluZSBDTEtfSFNfUFJQUgkJ
CSgweGZmIDw8IDApCisjZGVmaW5lIENMS19IU19QT1NUCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUg
Q0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKKworI2RlZmluZSBOU19UT19DWUNMRShuLCBjKSAg
ICAoKG4pIC8gKGMpICsgKCgobikgJSAoYykpID8gMSA6IDApKQorCitzdHJ1Y3QgcGh5OworCitz
dHJ1Y3QgbXRrX2RzaSB7CisJc3RydWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlzdHJ1Y3Qg
ZGV2aWNlICpkZXY7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgaG9zdDsKKwlzdHJ1Y3QgZHJtX2Vu
Y29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOworCXN0cnVjdCBkcm1f
cGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CisJc3RydWN0IHBoeSAq
cGh5OworCisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJc3RydWN0IGNsayAqZW5naW5lX2NsazsK
KwlzdHJ1Y3QgY2xrICpkaWdpdGFsX2NsazsKKwlzdHJ1Y3QgY2xrICpoc19jbGs7CisKKwl1MzIg
ZGF0YV9yYXRlOworCisJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVudW0gbWlwaV9kc2lf
cGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJc3RydWN0IHZpZGVv
bW9kZSB2bTsKKwlpbnQgcmVmY291bnQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlu
bGluZSBzdHJ1Y3QgbXRrX2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICpl
KQoreworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IG10a19kc2ksIGVuY29kZXIpOwor
fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICpjb25uZWN0b3JfdG9fZHNpKHN0cnVj
dCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10
a19kc2ksIGNvbm4pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICpob3N0X3Rv
X2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGgs
IHN0cnVjdCBtdGtfZHNpLCBob3N0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9tYXNrKHN0
cnVjdCBtdGtfZHNpICpkc2ksIHUzMiBvZmZzZXQsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3sKKwl1
MzIgdGVtcCA9IHJlYWRsKGRzaS0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwoKHRlbXAgJiB+
bWFzaykgfCAoZGF0YSAmIG1hc2spLCBkc2ktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMg
dm9pZCBkc2lfcGh5X3RpbWNvbmZpZyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0aW1j
b24wLCB0aW1jb24xLCB0aW1jb24yLCB0aW1jb24zOworCXVuc2lnbmVkIGludCB1aSwgY3ljbGVf
dGltZTsKKwl1bnNpZ25lZCBpbnQgbHB4OworCisJdWkgPSAxMDAwIC8gZHNpLT5kYXRhX3JhdGUg
KyAweDAxOworCWN5Y2xlX3RpbWUgPSA4MDAwIC8gZHNpLT5kYXRhX3JhdGUgKyAweDAxOworCWxw
eCA9IDU7CisKKwl0aW1jb24wID0gKDggPDwgMjQpIHwgKDB4YSA8PCAxNikgfCAoMHg2IDw8IDgp
IHwgbHB4OworCXRpbWNvbjEgPSAoNyA8PCAyNCkgfCAoNSAqIGxweCA8PCAxNikgfCAoKDMgKiBs
cHgpIC8gMikgPDwgOCB8CisJCSAgKDQgKiBscHgpOworCXRpbWNvbjIgPSAoKE5TX1RPX0NZQ0xF
KDB4NjQsIGN5Y2xlX3RpbWUpICsgMHhhKSA8PCAyNCkgfAorCQkgIChOU19UT19DWUNMRSgweDE1
MCwgY3ljbGVfdGltZSkgPDwgMTYpOworCXRpbWNvbjMgPSAoMiAqIGxweCkgPDwgMTYgfCBOU19U
T19DWUNMRSg4MCArIDUyICogdWksIGN5Y2xlX3RpbWUpIDw8IDggfAorCQkgICBOU19UT19DWUNM
RSgweDQwLCBjeWNsZV90aW1lKTsKKworCXdyaXRlbCh0aW1jb24wLCBkc2ktPnJlZ3MgKyBEU0lf
UEhZX1RJTUVDT04wKTsKKwl3cml0ZWwodGltY29uMSwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1F
Q09OMSk7CisJd3JpdGVsKHRpbWNvbjIsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjIpOwor
CXdyaXRlbCh0aW1jb24zLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04zKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RzaV9lbmFibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNp
X21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9FTiwgRFNJX0VOKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RzaV9kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNr
KGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNp
X3Jlc2V0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NP
Tl9DVFJMLCBEU0lfUkVTRVQsIERTSV9SRVNFVCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NP
Tl9DVFJMLCBEU0lfUkVTRVQsIDApOworfQorCitzdGF0aWMgaW50IG10a19kc2lfcG93ZXJvbihz
dHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owor
CWludCByZXQ7CisKKwlpZiAoKytkc2ktPnJlZmNvdW50ICE9IDEpCisJCXJldHVybiAwOworCisJ
LyoqCisJICogZGF0YV9yYXRlID0gKHBpeGVsX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9kaXB0aCAq
IG1pcGlfcmF0aW87CisJICogcGl4ZWxfY2xvY2sgdW5pdCBpcyBLaHosIGRhdGFfcmF0YSB1bml0
IGlzIE1Ieiwgc28gbmVlZCBkaXZpZGUgMTAwMC4KKwkgKiBtaXBpX3JhdGlvIGlzIG1pcGkgY2xr
IGNvZWZmaWNpZW50IGZvciBiYWxhbmNlIHRoZSBwaXhlbCBjbGsgaW4gbWlwaS4KKwkgKiB3ZSBz
ZXQgbWlwaV9yYXRpbyBpcyAxLjA1LgorCSAqLworCWRzaS0+ZGF0YV9yYXRlID0gZHNpLT52bS5w
aXhlbGNsb2NrICogMyAqIDIxIC8gKDEgKiAxMDAwICogMTApOworCisJcmV0ID0gY2xrX3NldF9y
YXRlKGRzaS0+aHNfY2xrLCBkc2ktPmRhdGFfcmF0ZSAqIDEwMDAwMDApOworCWlmIChyZXQgPCAw
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBkYXRhIHJhdGU6ICVkXG4iLCByZXQp
OworCQlnb3RvIGVycl9yZWZjb3VudDsKKwl9CisKKwlwaHlfcG93ZXJfb24oZHNpLT5waHkpOwor
CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZW5naW5lX2Nsayk7CisJaWYgKHJldCA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9jazogJWRc
biIsIHJldCk7CisJCWdvdG8gZXJyX3BoeV9wb3dlcl9vZmY7CisJfQorCisJcmV0ID0gY2xrX3By
ZXBhcmVfZW5hYmxlKGRzaS0+ZGlnaXRhbF9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ
Z290byBlcnJfZGlzYWJsZV9lbmdpbmVfY2xrOworCX0KKworCW10a19kc2lfZW5hYmxlKGRzaSk7
CisJbXRrX2RzaV9yZXNldChkc2kpOworCWRzaV9waHlfdGltY29uZmlnKGRzaSk7CisKKwlyZXR1
cm4gMDsKKworZXJyX2Rpc2FibGVfZW5naW5lX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo
ZHNpLT5lbmdpbmVfY2xrKTsKK2Vycl9waHlfcG93ZXJfb2ZmOgorCXBoeV9wb3dlcl9vZmYoZHNp
LT5waHkpOworZXJyX3JlZmNvdW50OgorCWRzaS0+cmVmY291bnQtLTsKKwlyZXR1cm4gcmV0Owor
fQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtfZHNpICpk
c2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIDAp
OworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDApOworfQor
CitzdGF0aWMgdm9pZCBkc2lfY2xrX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpkc2kp
Cit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwgMCk7CisJ
bXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCBMQ19XQUtFVVBf
RU4pOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2Rz
aSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfSFNfVFhf
RU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfVUxQTV9FTiwg
MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRr
X2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfVUxQ
TV9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtFVVBf
RU4sIExEMF9XQUtFVVBfRU4pOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBM
RDBfV0FLRVVQX0VOLCAwKTsKK30KKworc3RhdGljIGJvb2wgZHNpX2Nsa19oc19zdGF0ZShzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnMTsKKworCXRtcF9yZWcxID0gcmVhZGwo
ZHNpLT5yZWdzICsgRFNJX1BIWV9MQ0NPTik7CisJcmV0dXJuICgodG1wX3JlZzEgJiBMQ19IU19U
WF9FTikgPT0gMSkgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9jbGtfaHNf
bW9kZShzdHJ1Y3QgbXRrX2RzaSAqZHNpLCBib29sIGVudGVyKQoreworCWlmIChlbnRlciAmJiAh
ZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09O
LCBMQ19IU19UWF9FTiwgTENfSFNfVFhfRU4pOworCWVsc2UgaWYgKCFlbnRlciAmJiBkc2lfY2xr
X2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hT
X1RYX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3NldF9tb2RlKHN0cnVjdCBtdGtfZHNp
ICpkc2kpCit7CisJdTMyIHZpZF9tb2RlID0gQ01EX01PREU7CisKKwlpZiAoZHNpLT5tb2RlX2Zs
YWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgeworCQl2aWRfbW9kZSA9IFNZTkNfUFVMU0VfTU9E
RTsKKworCQlpZiAoKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1Qp
ICYmCisJCSAgICAhKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19Q
VUxTRSkpCisJCQl2aWRfbW9kZSA9IEJVUlNUX01PREU7CisJfQorCisJd3JpdGVsKHZpZF9tb2Rl
LCBkc2ktPnJlZ3MgKyBEU0lfTU9ERV9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BzX2Nv
bnRyb2xfdmFjdChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXN0cnVjdCB2aWRlb21vZGUgKnZt
ID0gJmRzaS0+dm07CisJdTMyIGRzaV9idWZfYnBwLCBwc193YzsKKwl1MzIgcHNfYnBwX21vZGU7
CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX2J1Zl9i
cHAgPSAyOworCWVsc2UKKwkJZHNpX2J1Zl9icHAgPSAzOworCisJcHNfd2MgPSB2bS0+aGFjdGl2
ZSAqIGRzaV9idWZfYnBwOworCXBzX2JwcF9tb2RlID0gcHNfd2M7CisKKwlzd2l0Y2ggKGRzaS0+
Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlwc19icHBfbW9kZSB8PSBQ
QUNLRURfUFNfMjRCSVRfUkdCODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2
NjY6CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7CisJCWJyZWFrOwor
CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXBzX2JwcF9tb2RlIHw9IExPT1NF
TFlfUFNfMThCSVRfUkdCNjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6
CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjU7CisJCWJyZWFrOworCX0K
KworCXdyaXRlbCh2bS0+dmFjdGl2ZSwgZHNpLT5yZWdzICsgRFNJX1ZBQ1RfTkwpOworCXdyaXRl
bChwc19icHBfbW9kZSwgZHNpLT5yZWdzICsgRFNJX1BTQ1RSTCk7CisJd3JpdGVsKHBzX3djLCBk
c2ktPnJlZ3MgKyBEU0lfSFNUWF9DS0xfV0MpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcnh0eF9j
b250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRtcF9yZWc7CisKKwlzd2l0Y2gg
KGRzaS0+bGFuZXMpIHsKKwljYXNlIDE6CisJCXRtcF9yZWcgPSAxIDw8IDI7CisJCWJyZWFrOwor
CWNhc2UgMjoKKwkJdG1wX3JlZyA9IDMgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl0bXBf
cmVnID0gNyA8PCAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRtcF9yZWcgPSAweGYgPDwgMjsK
KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9IDB4ZiA8PCAyOworCQlicmVhazsKKwl9
CisKKwl3cml0ZWwodG1wX3JlZywgZHNpLT5yZWdzICsgRFNJX1RYUlhfQ1RSTCk7Cit9CisKK3N0
YXRpYyB2b2lkIGRzaV9wc19jb250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdW5zaWdu
ZWQgaW50IGRzaV90bXBfYnVmX2JwcDsKKwl1MzIgdG1wX3JlZzsKKworCXN3aXRjaCAoZHNpLT5m
b3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXRtcF9yZWcgPSBQQUNLRURf
UFNfMjRCSVRfUkdCODg4OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNl
IE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXRtcF9yZWcgPSBMT09TRUxZX1BTXzE4QklUX1JHQjY2
NjsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRf
UkdCNjY2X1BBQ0tFRDoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7CisJCWRz
aV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToK
KwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjU7CisJCWRzaV90bXBfYnVmX2JwcCA9
IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMjRCSVRfUkdC
ODg4OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwl9CisKKwl0bXBfcmVnICs9
IGRzaS0+dm0uaGFjdGl2ZSAqIGRzaV90bXBfYnVmX2JwcCAmIERTSV9QU19XQzsKKwl3cml0ZWwo
dG1wX3JlZywgZHNpLT5yZWdzICsgRFNJX1BTQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9j
b25maWdfdmRvX3RpbWluZyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2lnbmVkIGludCBo
b3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5dGU7CisJdW5zaWduZWQgaW50IGhvcml6b250YWxfYmFj
a3BvcmNoX2J5dGU7CisJdW5zaWduZWQgaW50IGhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlOwor
CXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisKKwlzdHJ1Y3QgdmlkZW9tb2RlICp2bSA9
ICZkc2ktPnZtOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJ
CWRzaV90bXBfYnVmX2JwcCA9IDI7CisJZWxzZQorCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCisJ
d3JpdGVsKHZtLT52c3luY19sZW4sIGRzaS0+cmVncyArIERTSV9WU0FfTkwpOworCXdyaXRlbCh2
bS0+dmJhY2tfcG9yY2gsIGRzaS0+cmVncyArIERTSV9WQlBfTkwpOworCXdyaXRlbCh2bS0+dmZy
b250X3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkZQX05MKTsKKwl3cml0ZWwodm0tPnZhY3RpdmUs
IGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKworCWhvcml6b250YWxfc3luY19hY3RpdmVfYnl0
ZSA9ICh2bS0+aHN5bmNfbGVuICogZHNpX3RtcF9idWZfYnBwIC0gMTApOworCisJaWYgKGRzaS0+
bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJaG9yaXpvbnRh
bF9iYWNrcG9yY2hfYnl0ZSA9CisJCQkodm0tPmhiYWNrX3BvcmNoICogZHNpX3RtcF9idWZfYnBw
IC0gMTApOworCWVsc2UKKwkJaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSA9ICgodm0tPmhiYWNr
X3BvcmNoICsgdm0tPmhzeW5jX2xlbikgKgorCQkJZHNpX3RtcF9idWZfYnBwIC0gMTApOworCisJ
aG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGUgPSAodm0tPmhmcm9udF9wb3JjaCAqIGRzaV90bXBf
YnVmX2JwcCAtIDEyKTsKKworCXdyaXRlbChob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5dGUsIGRz
aS0+cmVncyArIERTSV9IU0FfV0MpOworCXdyaXRlbChob3Jpem9udGFsX2JhY2twb3JjaF9ieXRl
LCBkc2ktPnJlZ3MgKyBEU0lfSEJQX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9mcm9udHBvcmNo
X2J5dGUsIGRzaS0+cmVncyArIERTSV9IRlBfV0MpOworCisJZHNpX3BzX2NvbnRyb2woZHNpKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9zdGFydChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQorewor
CXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBEU0lfU1RBUlQpOworCXdyaXRlbCgxLCBkc2ktPnJlZ3Mg
KyBEU0lfU1RBUlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3Bvd2Vyb2ZmKHN0cnVjdCBt
dGtfZHNpICpkc2kpCit7CisJaWYgKFdBUk5fT04oZHNpLT5yZWZjb3VudCA9PSAwKSkKKwkJcmV0
dXJuOworCisJaWYgKC0tZHNpLT5yZWZjb3VudCAhPSAwKQorCQlyZXR1cm47CisKKwlkc2lfbGFu
ZTBfdWxwX21vZGVfZW50ZXIoZHNpKTsKKwlkc2lfY2xrX3VscF9tb2RlX2VudGVyKGRzaSk7CisK
KwltdGtfZHNpX2Rpc2FibGUoZHNpKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmVu
Z2luZV9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwor
CXBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3V0cHV0X2Rz
aV9lbmFibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0OworCisJaWYgKGRzaS0+
ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRybV9wYW5l
bF9wcmVwYXJlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXR1cCB0
aGUgcGFuZWxcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0ID0gbXRrX2RzaV9wb3dl
cm9uKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcG93ZXIg
b24gZHNpXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRzaV9yeHR4X2NvbnRyb2woZHNpKTsKKwor
CWRzaV9jbGtfdWxwX21vZGVfbGVhdmUoZHNpKTsKKwlkc2lfbGFuZTBfdWxwX21vZGVfbGVhdmUo
ZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAwKTsKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwor
CWRzaV9wc19jb250cm9sX3ZhY3QoZHNpKTsKKwlkc2lfY29uZmlnX3Zkb190aW1pbmcoZHNpKTsK
KworCWRzaV9zZXRfbW9kZShkc2kpOworCWRzaV9jbGtfaHNfbW9kZShkc2ksIDEpOworCisJbXRr
X2RzaV9zdGFydChkc2kpOworCisJZHNpLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgbXRrX291dHB1dF9kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmICgh
ZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlpZiAoZHJt
X3BhbmVsX2Rpc2FibGUoZHNpLT5wYW5lbCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRp
c2FibGUgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW10a19kc2lfcG93
ZXJvZmYoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHNpX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ
ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk
cm1fZW5jb2Rlcl9mdW5jcyBtdGtfZHNpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBt
dGtfZHNpX2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIG10a19kc2lfZW5jb2Rl
cl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgY29u
c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1f
ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv
ZGVyLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IG10a19kc2kgKmRz
aSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJZHNpLT52bS5waXhlbGNsb2NrID0gYWRq
dXN0ZWQtPmNsb2NrOworCWRzaS0+dm0uaGFjdGl2ZSA9IGFkanVzdGVkLT5oZGlzcGxheTsKKwlk
c2ktPnZtLmhiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPmh0b3RhbCAtIGFkanVzdGVkLT5oc3luY19l
bmQ7CisJZHNpLT52bS5oZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+aHN5bmNfc3RhcnQgLSBhZGp1
c3RlZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oc3luY19sZW4gPSBhZGp1c3RlZC0+aHN5bmNfZW5k
IC0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0OworCisJZHNpLT52bS52YWN0aXZlID0gYWRqdXN0ZWQt
PnZkaXNwbGF5OworCWRzaS0+dm0udmJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+dnRvdGFsIC0gYWRq
dXN0ZWQtPnZzeW5jX2VuZDsKKwlkc2ktPnZtLnZmcm9udF9wb3JjaCA9IGFkanVzdGVkLT52c3lu
Y19zdGFydCAtIGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZzeW5jX2xlbiA9IGFkanVz
dGVkLT52c3luY19lbmQgLSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQ7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kc2lfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK
KwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtf
b3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rl
cl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBtdGtfZHNp
ICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJs
ZShkc2kpOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBtdGtfZHNpX2Nv
bm5lY3Rvcl9kZXRlY3QoCisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBm
b3JjZSkKK3sKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNv
bm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1f
Y29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2Nv
bm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlz
dHJ1Y3QgbXRrX2RzaSAqZHNpID0gY29ubmVjdG9yX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0
dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
ZHJtX2VuY29kZXIgKm10a19kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJc3RydWN0IGRy
bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gY29ubmVj
dG9yX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuICZkc2ktPmVuY29kZXI7Cit9CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG10a19kc2lfZW5jb2Rl
cl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBtdGtfZHNpX2VuY29kZXJfbW9kZV9m
aXh1cCwKKwkubW9kZV9zZXQgPSBtdGtfZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUg
PSBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxlID0gbXRrX2RzaV9lbmNvZGVyX2Vu
YWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtf
ZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l
Y3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxf
bW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ry
b3kgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVs
cGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t
aWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0
YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitz
dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJbXRrX2RzaV9j
b25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBtdGtfZHNpX2Nvbm5lY3Rv
cl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IG10a19kc2lfY29ubmVjdG9yX2Jlc3RfZW5j
b2RlciwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9hdHRhY2hfYnJpZGdlKHN0cnVjdCBkcm1f
YnJpZGdlICpicmlkZ2UsCisJCQkJIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlp
bnQgcmV0OworCisJaWYgKCFicmlkZ2UpCisJCXJldHVybiAtRU5PRU5UOworCisJZW5jb2Rlci0+
YnJpZGdlID0gYnJpZGdlOworCWJyaWRnZS0+ZW5jb2RlciA9IGVuY29kZXI7CisJcmV0ID0gZHJt
X2JyaWRnZV9hdHRhY2goZW5jb2Rlci0+ZGV2LCBicmlkZ2UpOworCWlmIChyZXQpIHsKKwkJRFJN
X0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGJyaWRnZSB0byBkcm1cbiIpOworCQllbmNvZGVyLT5i
cmlkZ2UgPSBOVUxMOworCQlicmlkZ2UtPmVuY29kZXIgPSBOVUxMOworCX0KKworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9jcmVhdGVfY29ubmVjdG9yKHN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJldCA9
IGRybV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9m
dW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJaWYgKHJldCkgeworCQlEUk1f
RVJST1IoIkZhaWxlZCB0byBjb25uZWN0b3IgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0
OworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmZHNpLT5jb25uLCAmbXRrX2RzaV9j
b25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIo
JmRzaS0+Y29ubik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb25uZWN0
b3IgcmVnaXN0ZXIgdG8gZHJtXG4iKTsKKwkJZ290byBlcnJfY29ubmVjdG9yX2NsZWFudXA7CisJ
fQorCisJZHNpLT5jb25uLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwlkcm1fbW9kZV9jb25u
ZWN0b3JfYXR0YWNoX2VuY29kZXIoJmRzaS0+Y29ubiwgJmRzaS0+ZW5jb2Rlcik7CisKKwlpZiAo
ZHNpLT5wYW5lbCkgeworCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsICZkc2kt
PmNvbm4pOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhdHRhY2ggcGFu
ZWwgdG8gZHJtXG4iKTsKKwkJCWdvdG8gZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOworCQl9CisJ
fQorCisJcmV0dXJuIDA7CisKK2Vycl9jb25uZWN0b3JfdW5yZWdpc3RlcjoKKwlkcm1fY29ubmVj
dG9yX3VucmVnaXN0ZXIoJmRzaS0+Y29ubik7CitlcnJfY29ubmVjdG9yX2NsZWFudXA6CisJZHJt
X2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2RzaV9jcmVhdGVfY29ubl9lbmMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry
dWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2VuY29kZXJfaW5p
dChkcm0sICZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAg
RFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJG
YWlsZWQgdG8gZW5jb2RlciBpbml0IHRvIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWRy
bV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRzaS0+ZW5jb2RlciwgJm10a19kc2lfZW5jb2Rlcl9oZWxw
ZXJfZnVuY3MpOworCisJLyoKKwkgKiBDdXJyZW50bHkgZGlzcGxheSBkYXRhIHBhdGhzIGFyZSBz
dGF0aWNhbGx5IGFzc2lnbmVkIHRvIGEgY3J0YyBlYWNoLgorCSAqIGNydGMgMCBpcyBPVkwwIC0+
IENPTE9SMCAtPiBBQUwgLT4gT0QgLT4gUkRNQTAgLT4gVUZPRSAtPiBEU0kwCisJICovCisJZHNp
LT5lbmNvZGVyLnBvc3NpYmxlX2NydGNzID0gMTsKKworCS8qIElmIHRoZXJlJ3MgYSBicmlkZ2Us
IGF0dGFjaCB0byBpdCBhbmQgbGV0IGl0IGNyZWF0ZSB0aGUgY29ubmVjdG9yICovCisJcmV0ID0g
bXRrX2RybV9hdHRhY2hfYnJpZGdlKGRzaS0+YnJpZGdlLCAmZHNpLT5lbmNvZGVyKTsKKwlpZiAo
cmV0KSB7CisJCS8qIE90aGVyd2lzZSBjcmVhdGUgb3VyIG93biBjb25uZWN0b3IgYW5kIGF0dGFj
aCB0byBhIHBhbmVsICovCisJCXJldCA9IG10a19kc2lfY3JlYXRlX2Nvbm5lY3Rvcihkcm0sIGRz
aSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9lbmNvZGVyX2NsZWFudXA7CisJfQorCisJcmV0
dXJuIDA7CisKK2Vycl9lbmNvZGVyX2NsZWFudXA6CisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHNp
LT5lbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Rlc3Ry
b3lfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVw
KCZkc2ktPmVuY29kZXIpOworCS8qIFNraXAgY29ubmVjdG9yIGNsZWFudXAgaWYgY3JlYXRpb24g
d2FzIGRlbGVnYXRlZCB0byB0aGUgYnJpZGdlICovCisJaWYgKGRzaS0+Y29ubi5kZXYpIHsKKwkJ
ZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZkc2ktPmNvbm4pOworCQlkcm1fY29ubmVjdG9yX2Ns
ZWFudXAoJmRzaS0+Y29ubik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdGFy
dChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBj
b250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRkcF9jb21wKTsKKworCW10a19kc2lf
cG93ZXJvbihkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdG9wKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9v
Zihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9mZihk
c2kpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZHNp
X2Z1bmNzID0geworCS5zdGFydCA9IG10a19kc2lfZGRwX3N0YXJ0LAorCS5zdG9wID0gbXRrX2Rz
aV9kZHBfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3Qg
bWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk
ZXZpY2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJ
ZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1h
dDsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisKKwlpZiAoZHNpLT5j
b25uLmRldikKKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRzaS0+Y29ubi5kZXYpOworCisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlw
aV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZp
Y2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJaWYg
KGRzaS0+Y29ubi5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkc2ktPmNvbm4uZGV2
KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rf
b3BzIG10a19kc2lfb3BzID0geworCS5hdHRhY2ggPSBtdGtfZHNpX2hvc3RfYXR0YWNoLAorCS5k
ZXRhY2ggPSBtdGtfZHNpX2hvc3RfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX2Jp
bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEp
Cit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3Qg
bXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXQgPSBtdGtfZGRwX2Nv
bXBfcmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRl
di0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9
IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJaWYgKHJldCA8IDApIHsKKwkJ
ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgRFNJIGhvc3Q6ICVkXG4iLCByZXQpOwor
CQlnb3RvIGVycl9kZHBfY29tcF91bnJlZ2lzdGVyOworCX0KKworCXJldCA9IG10a19kc2lfY3Jl
YXRlX2Nvbm5fZW5jKGRybSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRW5jb2Rl
ciBjcmVhdGUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7
CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCW1pcGlfZHNpX2hvc3RfdW5y
ZWdpc3RlcigmZHNpLT5ob3N0KTsKK2Vycl9kZHBfY29tcF91bnJlZ2lzdGVyOgorCW10a19kZHBf
Y29tcF91bnJlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl
dmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq
ZHJtID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7
CisKKwltdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoZHNpKTsKKwltaXBpX2RzaV9ob3N0X3VucmVn
aXN0ZXIoJmRzaS0+aG9zdCk7CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtLCAmZHNpLT5k
ZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZHNp
X2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJLnVuYmluZCA9IG10
a19kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX3Byb2JlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKwlzdHJ1Y3QgZGV2
aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlX25vZGUs
ICplbmRwb2ludDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGNvbXBfaWQ7CisJaW50
IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5F
TCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5ob3N0Lm9wcyA9ICZt
dGtfZHNpX29wczsKKwlkc2ktPmhvc3QuZGV2ID0gZGV2OworCisJZW5kcG9pbnQgPSBvZl9ncmFw
aF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlmIChlbmRwb2ludCkg
eworCQlyZW1vdGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9p
bnQpOworCQlpZiAoIXJlbW90ZV9ub2RlKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vIHBhbmVsIGNv
bm5lY3RlZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWRzaS0+YnJpZGdlID0g
b2ZfZHJtX2ZpbmRfYnJpZGdlKHJlbW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5lbCA9IG9mX2RybV9m
aW5kX3BhbmVsKHJlbW90ZV9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3RlX25vZGUpOworCQlp
ZiAoIWRzaS0+YnJpZGdlICYmICFkc2ktPnBhbmVsKSB7CisJCQlkZXZfaW5mbyhkZXYsICJXYWl0
aW5nIGZvciBicmlkZ2Ugb3IgcGFuZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVybiAtRVBST0JFX0RF
RkVSOworCQl9CisJfQorCisJZHNpLT5lbmdpbmVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVu
Z2luZSIpOworCWlmIChJU19FUlIoZHNpLT5lbmdpbmVfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJS
KGRzaS0+ZW5naW5lX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBlbmdpbmUg
Y2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZGlnaXRhbF9j
bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGlnaXRhbCIpOworCWlmIChJU19FUlIoZHNpLT5kaWdp
dGFsX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRpZ2l0YWxfY2xrKTsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gZ2V0IGRpZ2l0YWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1
cm4gcmV0OworCX0KKworCWRzaS0+aHNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhzIik7CisJ
aWYgKElTX0VSUihkc2ktPmhzX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmhzX2Nsayk7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBocyBjbG9jazogJWRcbiIsIHJldCk7CisJ
CXJldHVybiByZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ
T1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl
diwgcmVncyk7CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNp
LT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW1vcnk6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRl
diwgImRwaHkiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGRz
aS0+cGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1JUEktRFBIWTogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRf
aWQoZGV2LT5vZl9ub2RlLCBNVEtfRFNJKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJ
cmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYt
Pm9mX25vZGUsICZkc2ktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZHNpX2Z1bmNzKTsK
KwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9u
ZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2
ZGF0YShwZGV2LCBkc2kpOworCisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJm10
a19kc2lfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9yZW1vdmUoc3Ry
dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gcGxh
dGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7
CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25lbnRfb3BzKTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHNp
X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiB9
LAorCXsgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXIgPSB7
CisJLnByb2JlID0gbXRrX2RzaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2RzaV9yZW1vdmUsCisJ
LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXRrLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10
a19kc2lfb2ZfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX21pcGlfdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90
eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOGYzOGQKLS0tIC9kZXYv
bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpAQCAtMCww
ICsxLDQ2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs
dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNs
dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu
dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVk
ZSA8bGludXgvcGh5L3BoeS5oPgorCisjZGVmaW5lIE1JUElUWF9EU0lfQ09OCQkweDAwCisjZGVm
aW5lIFJHX0RTSV9MRE9DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRf
RU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfQkNMS19TRUwJCQkoMyA8PCAyKQorI2RlZmluZSBS
R19EU0lfTERfSURYX1NFTAkJKDcgPDwgNCkKKyNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgy
IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9EU0lDTEtfRlJFUV9TRUwJCUJJVCgxMCkKKyNkZWZpbmUg
UkdfRFNJX0xQVFhfQ0xNUF9FTgkJQklUKDExKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQ0xPQ0tf
TEFORQkweDA0CisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMAkweDA4CisjZGVmaW5lIE1J
UElUWF9EU0lfREFUQV9MQU5FMQkweDBjCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMgkw
eDEwCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMwkweDE0CisjZGVmaW5lIFJHX0RTSV9M
TlR4X0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlR4X0NLTEFORV9FTgkJQklU
KDEpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdf
RFNJX0xOVHhfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lN
SU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQQ0RfSVBMVVMJCUJJVCg1KQorI2Rl
ZmluZSBSR19EU0lfTE5UeF9MUENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlR4
X1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1RPUF9DT04JMHg0MAor
I2RlZmluZSBSR19EU0lfTE5UX0lOVFJfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UX0hT
X0JJQVNfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UX0lNUF9DQUxfRU4JCUJJVCgyKQor
I2RlZmluZSBSR19EU0lfTE5UX1RFU1RNT0RFX0VOCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xO
VF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdfRFNJX0xOVF9BSU9fU0VMCQko
NyA8PCA4KQorI2RlZmluZSBSR19EU0lfUEFEX1RJRV9MT1dfRU4JCUJJVCgxMSkKKyNkZWZpbmUg
UkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIpCisjZGVmaW5lIFJHX0RTSV9QUkVTRVJWRQkJ
CSg3IDw8IDEzKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQkdfQ09OCTB4NDQKKyNkZWZpbmUgUkdf
RFNJX0JHX0NPUkVfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfQkdfQ0tFTgkJCUJJVCgxKQor
I2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8PCAyKQorI2RlZmluZSBSR19EU0lfQkdfRkFT
VF9DSEFSR0UJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfVk9VVF9NU0sJCQkoMHgzZmZmZiA8PCA1
KQorI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3IDw8IDUpCisjZGVmaW5lIFJHX0RTSV9WMTBf
U0VMCQkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1YwNzJfU0VMCQkJKDcgPDwgMTEpCisjZGVm
aW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQpCisjZGVmaW5lIFJHX0RTSV9WMDMyX1NFTAkJ
CSg3IDw8IDE3KQorI2RlZmluZSBSR19EU0lfVjAyX1NFTAkJCSg3IDw8IDIwKQorI2RlZmluZSBS
R19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfRFNJX0JHX1IyX1RSSU0J
CSgweGYgPDwgMjgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMAkweDUwCisjZGVmaW5l
IFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTVBQTExfRElWX01T
SwkJKDB4MWZmIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QUkVESVYJCSgzIDw8IDEpCisj
ZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgzIDw8IDMpCisjZGVmaW5lIFJHX0RTSV9NUFBM
TF9UWERJVjEJCSgzIDw8IDUpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QT1NESVYJCSg3IDw8IDcp
CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05WQ19FTgkJQklUKDEwKQorI2RlZmluZSBSR19EU0lf
TVBQTExfTU9OUkVGX0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9WT0RfRU4JCUJJ
VCgxMikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04xCTB4NTQKKyNkZWZpbmUgUkdfRFNJ
X01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19Q
SF9JTklUCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19FTgkJQklUKDIpCisj
ZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BSRAkoMHhmZmZmIDw8IDE2KQorCisjZGVmaW5l
IE1JUElUWF9EU0lfUExMX0NPTjIJMHg1OAorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX1BXUgkw
eDY4CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OCQlCSVQoMCkKKyNkZWZpbmUgUkdf
RFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BX
Ul9BQ0sJQklUKDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9TV19DVFJMCTB4ODAKKyNkZWZpbmUg
U1dfQ1RSTF9FTgkJCUJJVCgwKQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTF9DT04wCTB4
ODQKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9PRQkJQklUKDApCisjZGVmaW5lIFNXX0xOVENf
TFBUWF9PRQkJCUJJVCgxKQorI2RlZmluZSBTV19MTlRDX0xQVFhfUAkJCUJJVCgyKQorI2RlZmlu
ZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQorI2RlZmluZSBTV19MTlRDX0hTVFhfUFJFX09FCQlC
SVQoNCkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09FCQkJQklUKDUpCisjZGVmaW5lIFNXX0xOVENf
SFNUWF9aRVJPQ0xLCQlCSVQoNikKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX1BSRV9PRQkJQklUKDcp
CisjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJVCg4KQorI2RlZmluZSBTV19MTlQwX0xQVFhf
UAkJCUJJVCg5KQorI2RlZmluZSBTV19MTlQwX0xQVFhfTgkJCUJJVCgxMCkKKyNkZWZpbmUgU1df
TE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQorI2RlZmluZSBTV19MTlQwX0hTVFhfT0UJCQlCSVQo
MTIpCisjZGVmaW5lIFNXX0xOVDBfTFBSWF9FTgkJCUJJVCgxMykKKyNkZWZpbmUgU1dfTE5UMV9M
UFRYX1BSRV9PRQkJQklUKDE0KQorI2RlZmluZSBTV19MTlQxX0xQVFhfT0UJCQlCSVQoMTUpCisj
ZGVmaW5lIFNXX0xOVDFfTFBUWF9QCQkJQklUKDE2KQorI2RlZmluZSBTV19MTlQxX0xQVFhfTgkJ
CUJJVCgxNykKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX1BSRV9PRQkJQklUKDE4KQorI2RlZmluZSBT
V19MTlQxX0hTVFhfT0UJCQlCSVQoMTkpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9QUkVfT0UJCUJJ
VCgyMCkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09FCQkJQklUKDIxKQorI2RlZmluZSBTV19MTlQy
X0xQVFhfUAkJCUJJVCgyMikKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX04JCQlCSVQoMjMpCisjZGVm
aW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgyNCkKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX09F
CQkJQklUKDI1KQorCitzdHJ1Y3QgbXRrX21pcGlfdHggeworCXN0cnVjdCBkZXZpY2UgKmRldjsK
Kwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdW5zaWduZWQgaW50IGRhdGFfcmF0ZTsKKwlzdHJ1Y3Qg
Y2xrX2h3IHBsbF9odzsKKwlzdHJ1Y3QgY2xrICpwbGw7Cit9OworCitzdGF0aWMgaW5saW5lIHN0
cnVjdCBtdGtfbWlwaV90eCAqbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoc3RydWN0IGNsa19odyAq
aHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19taXBpX3R4LCBwbGxf
aHcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9jbGVhcl9iaXRzKHN0cnVjdCBtdGtf
bWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwKKwkJCQkgICB1MzIgYml0cykKK3sKKwl1MzIg
dGVtcCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKHRlbXAgJiB+
Yml0cywgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBp
X3R4X3NldF9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwKKwkJ
CQkgdTMyIGJpdHMpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0
KTsKKworCXdyaXRlbCh0ZW1wIHwgYml0cywgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAq
bWlwaV90eCwgdTMyIG9mZnNldCwKKwkJCQkgICAgdTMyIG1hc2ssIHUzMiBkYXRhKQoreworCXUz
MiB0ZW1wID0gcmVhZGwobWlwaV90eC0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwoKHRlbXAg
JiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKK30KKwor
c3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sK
KwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyho
dyk7CisJdW5zaWduZWQgaW50IHR4ZGl2LCB0eGRpdjAsIHR4ZGl2MTsKKwl1NjQgcGN3OworCisJ
ZGV2X2RiZyhtaXBpX3R4LT5kZXYsICJwcmVwYXJlOiAldSBIelxuIiwgbWlwaV90eC0+ZGF0YV9y
YXRlKTsKKworCWlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDAwKSB7CisJCXR4ZGl2
ID0gMTsKKwkJdHhkaXYwID0gMDsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgt
PmRhdGFfcmF0ZSA+PSAyNTAwMDAwMDApIHsKKwkJdHhkaXYgPSAyOworCQl0eGRpdjAgPSAxOwor
CQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDEyNTAwMDAw
MCkgeworCQl0eGRpdiA9IDQ7CisJCXR4ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNl
IGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPiA2MjAwMDAwMCkgeworCQl0eGRpdiA9IDg7CisJCXR4
ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDE7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUg
Pj0gNTAwMDAwMDApIHsKKwkJdHhkaXYgPSAxNjsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0g
MjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdGtfbWlwaV90eF91cGRh
dGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCQlSR19EU0lfVk9VVF9NU0sg
fAorCQkJCVJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sCisJCQkJKDQgPDwgMjAp
IHwgKDQgPDwgMTcpIHwgKDQgPDwgMTQpIHwKKwkJCQkoNCA8PCAxMSkgfCAoNCA8PCA4KSB8ICg0
IDw8IDUpIHwKKwkJCQlSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKKworCXVz
bGVlcF9yYW5nZSgzMCwgMTAwKTsKKworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgs
IE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCQlSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RT
SV9MTlRfSFNfQklBU19FTiwKKwkJCQkoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7
CisKKwltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSAg
ICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlw
aV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkJUkdfRFNJ
X01QUExMX1NETV9QV1JfT04gfAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOLAorCQkJCVJH
X0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90
eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsK
KworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAs
CisJCQkJUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAorCQkJCVJH
X0RTSV9NUFBMTF9QUkVESVYsCisJCQkJKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwgNSkpOwor
CisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRlZ2VyIHBh
cnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdworCSAq
IHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElWID00LCBz
byBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBjdyA9IGRp
dl91NjQoKCh1NjQpbWlwaV90eC0+ZGF0YV9yYXRlICogMiAqIHR4ZGl2KSA8PCAyNCwKKwkJICAg
ICAgMjYwMDAwMDApOworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BM
TF9DT04yKTsKKworCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM
X0NPTjEsCisJCQkgICAgIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOKTsKKworCW10a19taXBpX3R4
X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExf
RU4pOworCisJdXNsZWVwX3JhbmdlKDIwLCAxMDApOworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0
cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04xLAorCQkJICAgICAgIFJHX0RTSV9NUFBMTF9T
RE1fU1NDX0VOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9w
bGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAq
bWlwaV90eCA9IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCWRldl9kYmcobWlwaV90
eC0+ZGV2LCAidW5wcmVwYXJlXG4iKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90
eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsK
KworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwK
KwkJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTiB8CisJCQkJUkdfRFNJX01QUExMX1NETV9QV1Jf
T04sCisJCQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4pOworCisJbXRrX21pcGlfdHhfY2xlYXJf
Yml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkgICAgICAgUkdfRFNJX0xOVF9I
U19CSUFTX0VOKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RT
SV9DT04sCisJCQkgICAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9F
Tik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09O
LAorCQkJICAgICAgIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4pOworCisJbXRr
X21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJICAg
ICAgIFJHX0RTSV9NUFBMTF9ESVZfTVNLKTsKK30KKworc3RhdGljIGxvbmcgbXRrX21pcGlfdHhf
cGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJ
CQkgICAgICAgdW5zaWduZWQgbG9uZyAqcHJhdGUpCit7CisJcmV0dXJuIGNsYW1wX3ZhbChyYXRl
LCA1MDAwMDAwMCwgMTI1MDAwMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxs
X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAg
IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBp
X3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOworCisJZGV2X2RiZyhtaXBpX3R4LT5k
ZXYsICJzZXQgcmF0ZTogJWx1IEh6XG4iLCByYXRlKTsKKworCW1pcGlfdHgtPmRhdGFfcmF0ZSA9
IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX21pcGlf
dHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJIHVuc2lnbmVkIGxv
bmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21p
cGlfdHhfZnJvbV9jbGtfaHcoaHcpOworCisJcmV0dXJuIG1pcGlfdHgtPmRhdGFfcmF0ZTsKK30K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG10a19taXBpX3R4X3BsbF9vcHMgPSB7CisJ
LnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX21p
cGlfdHhfcGxsX3VucHJlcGFyZSwKKwkucm91bmRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yb3Vu
ZF9yYXRlLAorCS5zZXRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZSwKKwkucmVjYWxj
X3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUsCit9OworCitzdGF0aWMgaW50IG10
a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10
a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdW5zaWduZWQgaW50
IHJlZzsKKworCWZvciAocmVnID0gTUlQSVRYX0RTSV9DTE9DS19MQU5FOworCSAgICAgcmVnIDw9
IE1JUElUWF9EU0lfREFUQV9MQU5FMzsgcmVnICs9IDQpCisJCW10a19taXBpX3R4X3NldF9iaXRz
KG1pcGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERPT1VUX0VOKTsKKworCW10a19taXBpX3R4X2Ns
ZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJICAgICAgIFJHX0RTSV9Q
QURfVElFX0xPV19FTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90
eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBp
X3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJldDsKKworCS8qIFBvd2VyIHVwIGNv
cmUgYW5kIGVuYWJsZSBQTEwgKi8KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobWlwaV90eC0+
cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBEU0kgTGFu
ZSBMRE8gb3V0cHV0cywgZGlzYWJsZSBwYWQgdGllIGxvdyAqLworCW10a19taXBpX3R4X3Bvd2Vy
X29uX3NpZ25hbChwaHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBp
X3R4X3Bvd2VyX29mZl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlw
aV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXVuc2lnbmVkIGludCByZWc7
CisKKwltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJ
CQkgICAgIFJHX0RTSV9QQURfVElFX0xPV19FTik7CisKKwlmb3IgKHJlZyA9IE1JUElUWF9EU0lf
Q0xPQ0tfTEFORTsKKwkgICAgIHJlZyA8PSBNSVBJVFhfRFNJX0RBVEFfTEFORTM7IHJlZyArPSA0
KQorCQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERP
T1VUX0VOKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vZmYoc3RydWN0IHBo
eSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0
YShwaHkpOworCisJLyogRW5hYmxlIHBhZCB0aWUgbG93LCBkaXNhYmxlIERTSSBMYW5lIExETyBv
dXRwdXRzICovCisJbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChwaHkpOworCisJLyogRGlz
YWJsZSBQTEwgYW5kIHBvd2VyIGRvd24gY29yZSAqLworCWNsa19kaXNhYmxlX3VucHJlcGFyZSht
aXBpX3R4LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5
X29wcyBtdGtfbWlwaV90eF9vcHMgPSB7CisJLnBvd2VyX29uID0gbXRrX21pcGlfdHhfcG93ZXJf
b24sCisJLnBvd2VyX29mZiA9IG10a19taXBpX3R4X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElT
X01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRm
b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor
CXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlz
dHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1Y3Qg
Y2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfbWlwaV90eF9wbGxfb3Bz
LAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBj
b25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFURV9HQVRFLAorCX07
CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsK
KwlpbnQgcmV0OworCisJbWlwaV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlwaV90
eCksIEdGUF9LRVJORUwpOworCWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlt
ZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1p
cGlfdHgtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19F
UlIobWlwaV90eC0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWdzKTsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJcmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwp
OworCWlmIChJU19FUlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9j
bGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xv
Y2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgtPnBsbF9ody5pbml0
ID0gJmNsa19pbml0OworCW1pcGlfdHgtPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJm1p
cGlfdHgtPnBsbF9odyk7CisJaWYgKElTX0VSUihtaXBpX3R4LT5wbGwpKSB7CisJCXJldCA9IFBU
Ul9FUlIobWlwaV90eC0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIg
UExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaHkgPSBkZXZtX3BoeV9j
cmVhdGUoZGV2LCBOVUxMLCAmbXRrX21pcGlfdHhfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsK
KwkJcmV0ID0gUFRSX0VSUihwaHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUg
TUlQSSBELVBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXBoeV9zZXRfZHJ2
ZGF0YShwaHksIG1pcGlfdHgpOworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlk
ZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeSkp
IHsKKwkJcmV0ID0gUFRSX0VSUihwaHlfcHJvdmlkZXIpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CW1pcGlfdHgtPmRldiA9IGRldjsKKworCXJldHVybiBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+
b2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LAorCQkJCSAgIG1pcGlfdHgtPnBsbCk7Cit9
CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJb2ZfY2xrX2RlbF9wcm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSk7CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19taXBpX3R4
X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIs
IH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZl
ciA9IHsKKwkucHJvYmUgPSBtdGtfbWlwaV90eF9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX21pcGlf
dHhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLW1pcGktdHgiLAor
CQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfbWlwaV90eF9tYXRjaCwKKwl9LAorfTsKLS0gCjIuOC4w
LnJjMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp
LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz
Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==