From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v6 03/12] drm/mediatek: Add DSI sub driver
Date: Wed, 18 Nov 2015 18:34:11 +0100
Message-ID: <1447868060-11620-4-git-send-email-p.zabel@pengutronix.de>
References: <1447868060-11620-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: <1447868060-11620-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 , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjU6CiAtIFJlZ2lzdGVyIGFu
ZCB1bnJlZ2lzdGVyIGRyaXZlcnMgaW4gYSBsb29wCiAtIEFkZGVkIHN0YXRpYyBrZXl3b3JkIHRv
IHVuZXhwb3J0ZWQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zCi0tLQogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL01ha2VmaWxlICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2Rydi5oIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwg
Nzg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kc2kuaCAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX21pcGlfdHguYyB8IDM3NyArKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX21pcGlfdHguaCB8ICAyMSArCiA3IGZpbGVzIGNoYW5nZWQsIDEyNDYgaW5zZXJ0
aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RzaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19taXBpX3R4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX21pcGlfdHguaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCBi
YTZkM2ZjLi4wZDRhZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr
ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC00LDcgKzQs
OSBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZHJtX2Rydi5vIFwKIAkJICBtdGtfZHJtX2RkcF9j
b21wLm8gXAogCQkgIG10a19kcm1fZmIubyBcCiAJCSAgbXRrX2RybV9nZW0ubyBcCi0JCSAgbXRr
X2RybV9wbGFuZS5vCisJCSAgbXRrX2RybV9wbGFuZS5vIFwKKwkJICBtdGtfZHNpLm8gXAorCQkg
IG10a19taXBpX3R4Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWst
ZHJtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRleCBhY2MwY2Zj
Li41NWY1OTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
cnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAtNTE2
LDYgKzUxNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcm1fcGxhdGZv
cm1fZHJpdmVyID0gewogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtf
ZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19kaXNw
X292bF9kcml2ZXIsCisJJm10a19kc2lfZHJpdmVyLAorCSZtdGtfbWlwaV90eF9kcml2ZXIsCiB9
OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmgKaW5kZXggNDc0MGY4NC4uMDJjYzMzMCAxMDA2NDQKLS0tIGEv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTUxLDUgKzUxLDcgQEAgc3RydWN0IG10a19k
cm1fcHJpdmF0ZSB7CiB9OwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlz
cF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2
ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90eF9kcml2ZXI7CiAK
ICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGNmZDRjCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYwpAQCAtMCwwICsxLDc4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0v
ZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5j
bHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg
PGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGlu
dXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUg
PGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp
bmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUgIm10a19kc2kuaCIKKyNpbmNs
dWRlICJtdGtfbWlwaV90eC5oIgorCisjZGVmaW5lIERTSV9WSURFT19GSUZPX0RFUFRICSgxOTIw
IC8gNCkKKyNkZWZpbmUgRFNJX0hPU1RfRklGT19ERVBUSAk2NAorCisjZGVmaW5lIERTSV9TVEFS
VAkJMHgwMAorCisjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgxMAorI2RlZmluZSBEU0lfUkVTRVQJ
CQlCSVQoMCkKKyNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQorCisjZGVmaW5lIERTSV9NT0RFX0NU
UkwJCTB4MTQKKyNkZWZpbmUgTU9ERQkJCQkoMykKKyNkZWZpbmUgQ01EX01PREUJCQkwCisjZGVm
aW5lIFNZTkNfUFVMU0VfTU9ERQkJCTEKKyNkZWZpbmUgU1lOQ19FVkVOVF9NT0RFCQkJMgorI2Rl
ZmluZSBCVVJTVF9NT0RFCQkJMworI2RlZmluZSBGUk1fTU9ERQkJCUJJVCgxNikKKyNkZWZpbmUg
TUlYX01PREUJCQlCSVQoMTcpCisKKyNkZWZpbmUgRFNJX1RYUlhfQ1RSTAkJMHgxOAorI2RlZmlu
ZSBWQ19OVU0JCQkJKDIgPDwgMCkKKyNkZWZpbmUgTEFORV9OVU0JCQkoMHhmIDw8IDIpCisjZGVm
aW5lIERJU19FT1QJCQkJQklUKDYpCisjZGVmaW5lIE5VTExfRU4JCQkJQklUKDcpCisjZGVmaW5l
IFRFX0ZSRUVSVU4JCQlCSVQoOCkKKyNkZWZpbmUgRVhUX1RFX0VOCQkJQklUKDkpCisjZGVmaW5l
IEVYVF9URV9FREdFCQkJQklUKDEwKQorI2RlZmluZSBNQVhfUlROX1NJWkUJCQkoMHhmIDw8IDEy
KQorI2RlZmluZSBIU1RYX0NLTFBfRU4JCQlCSVQoMTYpCisKKyNkZWZpbmUgRFNJX1BTQ1RSTAkJ
MHgxYworI2RlZmluZSBEU0lfUFNfV0MJCQkweDNmZmYKKyNkZWZpbmUgRFNJX1BTX1NFTAkJCSgz
IDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1CQkoMCA8PCAxNikKKyNkZWZp
bmUgTE9PU0VMWV9QU18xOEJJVF9SR0I2NjYJCSgxIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNf
MThCSVRfUkdCNjY2CQkoMiA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzI0QklUX1JHQjg4OAkJ
KDMgPDwgMTYpCisKKyNkZWZpbmUgRFNJX1ZTQV9OTAkJMHgyMAorI2RlZmluZSBEU0lfVkJQX05M
CQkweDI0CisjZGVmaW5lIERTSV9WRlBfTkwJCTB4MjgKKyNkZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4
MkMKKyNkZWZpbmUgRFNJX0hTQV9XQwkJMHg1MAorI2RlZmluZSBEU0lfSEJQX1dDCQkweDU0Cisj
ZGVmaW5lIERTSV9IRlBfV0MJCTB4NTgKKworI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQK
KworI2RlZmluZSBEU0lfUEhZX0xDQ09OCQkweDEwNAorI2RlZmluZSBMQ19IU19UWF9FTgkJCUJJ
VCgwKQorI2RlZmluZSBMQ19VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExDX1dBS0VVUF9FTgkJ
CUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfTEQwQ09OCQkweDEwOAorI2RlZmluZSBMRDBfSFNf
VFhfRU4JCQlCSVQoMCkKKyNkZWZpbmUgTEQwX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTEQw
X1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjAJMHgxMTAKKyNk
ZWZpbmUgTFBYCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIEhTX1BSUFIJCQkJKDB4ZmYgPDwgOCkK
KyNkZWZpbmUgSFNfWkVSTwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSFNfVFJBSUwJCQkoMHhm
ZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04xCTB4MTE0CisjZGVmaW5lIFRBX0dP
CQkJCSgweGZmIDw8IDApCisjZGVmaW5lIFRBX1NVUkUJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUg
VEFfR0VUCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBEQV9IU19FWElUCQkJKDB4ZmYgPDwgMjQp
CisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMgkweDExOAorI2RlZmluZSBDT05UX0RFVAkJCSgw
eGZmIDw8IDApCisjZGVmaW5lIENMS19aRVJPCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIENMS19U
UkFJTAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjMJMHgxMWMKKyNk
ZWZpbmUgQ0xLX0hTX1BSUFIJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgw
eGZmIDw8IDgpCisjZGVmaW5lIENMS19IU19FWElUCQkJKDB4ZmYgPDwgMTYpCisKKyNkZWZpbmUg
TlNfVE9fQ1lDTEUobiwgYykgICAgKChuKSAvIGMgKyAoKChuKSAlIGMpID8gMSA6IDApKQorCitz
dGF0aWMgdm9pZCBtdGtfZHNpX21hc2soc3RydWN0IG10a19kc2kgKmRzaSwgdTMyIG9mZnNldCwg
dTMyIG1hc2ssIHUzMiBkYXRhKQoreworCXUzMiB0ZW1wID0gcmVhZGwoZHNpLT5kc2lfcmVnX2Jh
c2UgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwg
ZHNpLT5kc2lfcmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcGh5X3Rp
bWNvbmZpZyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0aW1jb24wLCB0aW1jb24xLCB0
aW1jb24yLCB0aW1jb24zOworCXVuc2lnbmVkIGludCB1aSwgY3ljbGVfdGltZTsKKwl1bnNpZ25l
ZCBpbnQgbHB4OworCisJdWkgPSAxMDAwIC8gZHNpLT5kYXRhX3JhdGUgKyAweDAxOworCWN5Y2xl
X3RpbWUgPSA4MDAwIC8gZHNpLT5kYXRhX3JhdGUgKyAweDAxOworCWxweCA9IDU7CisKKwl0aW1j
b24wID0gKDggPDwgMjQpIHwgKDB4YSA8PCAxNikgfCAoMHg2IDw8IDgpIHwgbHB4OworCXRpbWNv
bjEgPSAoNyA8PCAyNCkgfCAoNSAqIGxweCA8PCAxNikgfCAoKDMgKiBscHgpIC8gMikgPDwgOCB8
CisJCSAgKDQgKiBscHgpOworCXRpbWNvbjIgPSAoKE5TX1RPX0NZQ0xFKDB4NjQsIGN5Y2xlX3Rp
bWUpICsgMHhhKSA8PCAyNCkgfAorCQkgIChOU19UT19DWUNMRSgweDE1MCwgY3ljbGVfdGltZSkg
PDwgMTYpOworCXRpbWNvbjMgPSAoMiAqIGxweCkgPDwgMTYgfCBOU19UT19DWUNMRSg4MCArIDUy
ICogdWksIGN5Y2xlX3RpbWUpIDw8IDggfAorCQkgICBOU19UT19DWUNMRSgweDQwLCBjeWNsZV90
aW1lKTsKKworCXdyaXRlbCh0aW1jb24wLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9QSFlfVElN
RUNPTjApOworCXdyaXRlbCh0aW1jb24xLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9QSFlfVElN
RUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9QSFlfVElN
RUNPTjIpOworCXdyaXRlbCh0aW1jb24zLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9QSFlfVElN
RUNPTjMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Nsa19lbmFibGUoc3RydWN0IG10a19k
c2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9FTiwgRFNJ
X0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rz
aSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAwKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQorewor
CW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQpOwor
CW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKworc3Rh
dGljIGludCBtdGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0
OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2ktPmRybV9kZXY7CisKKwkvKioKKwkgKiBk
YXRhX3JhdGUgPSAocGl4ZWxfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX2RpcHRoICogbWlwaV9yYXRp
bzsKKwkgKiBwaXhlbF9jbG9jayB1bml0IGlzIEtoeiwgZGF0YV9yYXRhIHVuaXQgaXMgTUh6LCBz
byBuZWVkIGRpdmlkZSAxMDAwLgorCSAqIG1pcGlfcmF0aW8gaXMgbWlwaSBjbGsgY29lZmZpY2ll
bnQgZm9yIGJhbGFuY2UgdGhlIHBpeGVsIGNsayBpbiBtaXBpLgorCSAqIHdlIHNldCBtaXBpX3Jh
dGlvIGlzIDEuMDUuCisJICovCisJZHNpLT5kYXRhX3JhdGUgPSBkc2ktPnZtLnBpeGVsY2xvY2sg
KiAzICogMjEgLyAoMSAqIDEwMDAgKiAxMCk7CisKKwltdGtfbWlwaV90eF9zZXRfZGF0YV9yYXRl
KGRzaS0+cGh5LCBkc2ktPmRhdGFfcmF0ZSk7CisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKwor
CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRzaTBfZW5naW5lX2Nsa19jZyk7CisJaWYg
KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImNhbid0IGVuYWJsZSBkc2kwX2VuZ2lu
ZV9jbGtfY2cgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RzaTBfZW5naW5lX2Nsa19jZzsKKwl9
CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2kwX2RpZ2l0YWxfY2xrX2NnKTsK
KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIGRzaTBf
ZGlnaXRhbF9jbGtfY2cgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RzaTBfZGlnaXRhbF9jbGtf
Y2c7CisJfQorCisJbXRrX2RzaV9jbGtfZW5hYmxlKGRzaSk7CisJbXRrX2RzaV9yZXNldChkc2kp
OworCWRzaV9waHlfdGltY29uZmlnKGRzaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RzaTBfZGln
aXRhbF9jbGtfY2c6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZHNpMF9lbmdpbmVfY2xr
X2NnKTsKKworZXJyX2RzaTBfZW5naW5lX2Nsa19jZzoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgdm9pZCBkc2lfY2xrX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJ
bXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIDApOworCW10a19k
c2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDApOworfQorCitzdGF0aWMg
dm9pZCBkc2lfY2xrX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwgMCk7CisJbXRrX2RzaV9t
YXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCBMQ19XQUtFVVBfRU4pOworCW10
a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0
YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor
eworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfSFNfVFhfRU4sIDApOwor
CW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfVUxQTV9FTiwgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAqZHNp
KQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfVUxQTV9FTiwgMCk7
CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtFVVBfRU4sIExEMF9X
QUtFVVBfRU4pOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfV0FLRVVQ
X0VOLCAwKTsKK30KKworc3RhdGljIGJvb2wgZHNpX2Nsa19oc19zdGF0ZShzdHJ1Y3QgbXRrX2Rz
aSAqZHNpKQoreworCXUzMiB0bXBfcmVnMTsKKworCXRtcF9yZWcxID0gcmVhZGwoZHNpLT5kc2lf
cmVnX2Jhc2UgKyBEU0lfUEhZX0xDQ09OKTsKKwlyZXR1cm4gKCh0bXBfcmVnMSAmIExDX0hTX1RY
X0VOKSA9PSAxKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa19oc19t
b2RlKHN0cnVjdCBtdGtfZHNpICpkc2ksIGJvb2wgZW50ZXIpCit7CisJaWYgKGVudGVyICYmICFk
c2lfY2xrX2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04s
IExDX0hTX1RYX0VOLCBMQ19IU19UWF9FTik7CisJZWxzZSBpZiAoIWVudGVyICYmIGRzaV9jbGtf
aHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNf
VFhfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfc2V0X21vZGUoc3RydWN0IG10a19kc2kg
KmRzaSkKK3sKKwl1MzIgdmlkX21vZGUgPSBDTURfTU9ERTsKKworCWlmIChkc2ktPm1vZGVfZmxh
Z3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7CisJCXZpZF9tb2RlID0gU1lOQ19QVUxTRV9NT0RF
OworCisJCWlmICgoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkg
JiYKKwkJICAgICEoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BV
TFNFKSkKKwkJCXZpZF9tb2RlID0gQlVSU1RfTU9ERTsKKwl9CisKKwl3cml0ZWwodmlkX21vZGUs
IGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRz
aV9wc19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgdmlkZW9t
b2RlICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJdTMyIHBzX2Jw
cF9tb2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJCWRz
aV9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBzX3djID0gdm0t
PmhhY3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOworCisJc3dpdGNo
IChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcHNfYnBwX21v
ZGUgfD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9G
TVRfUkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQli
cmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19icHBfbW9kZSB8
PSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRf
UkdCNTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlicmVh
azsKKwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1ZB
Q1RfTkwpOworCXdyaXRlbChwc19icHBfbW9kZSwgZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfUFND
VFJMKTsKKwl3cml0ZWwocHNfd2MsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX0hTVFhfQ0tMX1dD
KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3J4dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNp
KQoreworCXUzMiB0bXBfcmVnOworCisJc3dpdGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgor
CQl0bXBfcmVnID0gMSA8PCAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8
IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJ
Y2FzZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRt
cF9yZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+
ZHNpX3JlZ19iYXNlICsgRFNJX1RYUlhfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wc19j
b250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdW5zaWduZWQgaW50IGRzaV90bXBfYnVm
X2JwcDsKKwl1MzIgdG1wX3JlZzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1J
UElfRFNJX0ZNVF9SR0I4ODg6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMjRCSVRfUkdCODg4Owor
CQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2
NjY6CisJCXRtcF9yZWcgPSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJZHNpX3RtcF9idWZf
YnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJ
dG1wX3JlZyA9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7
CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJdG1wX3JlZyA9IFBBQ0tF
RF9QU18xNkJJVF9SR0I1NjU7CisJCWRzaV90bXBfYnVmX2JwcCA9IDI7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMjRCSVRfUkdCODg4OworCQlkc2lfdG1wX2J1
Zl9icHAgPSAzOworCQlicmVhazsKKwl9CisKKwl0bXBfcmVnICs9IGRzaS0+dm0uaGFjdGl2ZSAq
IGRzaV90bXBfYnVmX2JwcCAmIERTSV9QU19XQzsKKwl3cml0ZWwodG1wX3JlZywgZHNpLT5kc2lf
cmVnX2Jhc2UgKyBEU0lfUFNDVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2NvbmZpZ192ZG9f
dGltaW5nKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdW5zaWduZWQgaW50IGhvcml6b250YWxf
c3luY19hY3RpdmVfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0
ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGU7CisJdW5zaWduZWQg
aW50IGRzaV90bXBfYnVmX2JwcDsKKworCXN0cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+dm07
CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX3RtcF9i
dWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisKKwl3cml0ZWwodm0t
PnZzeW5jX2xlbiwgZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfVlNBX05MKTsKKwl3cml0ZWwodm0t
PnZiYWNrX3BvcmNoLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9WQlBfTkwpOworCXdyaXRlbCh2
bS0+dmZyb250X3BvcmNoLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9WRlBfTkwpOworCXdyaXRl
bCh2bS0+dmFjdGl2ZSwgZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jp
em9udGFsX3N5bmNfYWN0aXZlX2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2Jw
cCAtIDEwKTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZ
TkNfUFVMU0UpCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19w
b3JjaCAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3Bv
cmNoX2J5dGUgPSAoKHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90
bXBfYnVmX2JwcCAtIDEwKTsKKworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5o
ZnJvbnRfcG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRh
bF9zeW5jX2FjdGl2ZV9ieXRlLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9IU0FfV0MpOworCXdy
aXRlbChob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9I
QlBfV0MpOworCXdyaXRlbChob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZSwgZHNpLT5kc2lfcmVn
X2Jhc2UgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9wc19jb250cm9sKGRzaSk7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl3cml0ZWwoMCwg
ZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfU1RBUlQpOworCXdyaXRlbCgxLCBkc2ktPmRzaV9yZWdf
YmFzZSArIERTSV9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfcG93ZXJvZmYoc3Ry
dWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX2Nsa19kaXNhYmxlKGRzaSk7CisKKwljbGtf
ZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kc2kwX2VuZ2luZV9jbGtfY2cpOworCWNsa19kaXNhYmxl
X3VucHJlcGFyZShkc2ktPmRzaTBfZGlnaXRhbF9jbGtfY2cpOworCisJcGh5X3Bvd2VyX29mZihk
c2ktPnBoeSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2VuYWJsZShzdHJ1Y3Qg
bXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlpZiAoZHNpLT5lbmFibGVkKQorCQlyZXR1
cm47CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5w
YW5lbCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIHRoZSBwYW5lbFxuIik7CisJ
CQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXQgPSBtdGtfZHNpX3Bvd2Vyb24oZHNpKTsKKwlpZiAo
cmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwb3dlciBvbiBkc2lcbiIpOworCQly
ZXR1cm47CisJfQorCisJZHNpX3J4dHhfY29udHJvbChkc2kpOworCisJZHNpX2Nsa191bHBfbW9k
ZV9sZWF2ZShkc2kpOworCWRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShkc2kpOworCWRzaV9jbGtf
aHNfbW9kZShkc2ksIDApOworCWRzaV9zZXRfbW9kZShkc2kpOworCisJZHNpX3BzX2NvbnRyb2xf
dmFjdChkc2kpOworCWRzaV9jb25maWdfdmRvX3RpbWluZyhkc2kpOworCisJZHNpX3NldF9tb2Rl
KGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMSk7CisKKwltdGtfZHNpX3N0YXJ0KGRzaSk7
CisKKwlkc2ktPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3V0cHV0X2Rz
aV9kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaWYgKCFkc2ktPmVuYWJsZWQpCisJ
CXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfZGlzYWJsZShk
c2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSB0aGUgcGFuZWxc
biIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKGRz
aSk7CisJZHNpX2Nsa191bHBfbW9kZV9lbnRlcihkc2kpOworCW10a19kc2lfcG93ZXJvZmYoZHNp
KTsKKworCWRzaS0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Vu
Y29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29k
ZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rl
cl9mdW5jcyBtdGtfZHNpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBtdGtfZHNpX2Vu
Y29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIG10a19kc2lfZW5jb2Rlcl9tb2RlX2Zp
eHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0
IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t
b2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJ
CSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29k
ZXJfdG9fZHNpKGVuY29kZXIpOworCisJZHNpLT52bS5waXhlbGNsb2NrID0gYWRqdXN0ZWQtPmNs
b2NrOworCWRzaS0+dm0uaGFjdGl2ZSA9IGFkanVzdGVkLT5oZGlzcGxheTsKKwlkc2ktPnZtLmhi
YWNrX3BvcmNoID0gYWRqdXN0ZWQtPmh0b3RhbCAtIGFkanVzdGVkLT5oc3luY19lbmQ7CisJZHNp
LT52bS5oZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+aHN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+aGRp
c3BsYXk7CisJZHNpLT52bS5oc3luY19sZW4gPSBhZGp1c3RlZC0+aHN5bmNfZW5kIC0gYWRqdXN0
ZWQtPmhzeW5jX3N0YXJ0OworCisJZHNpLT52bS52YWN0aXZlID0gYWRqdXN0ZWQtPnZkaXNwbGF5
OworCWRzaS0+dm0udmJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+dnRvdGFsIC0gYWRqdXN0ZWQtPnZz
eW5jX2VuZDsKKwlkc2ktPnZtLnZmcm9udF9wb3JjaCA9IGFkanVzdGVkLT52c3luY19zdGFydCAt
IGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZzeW5jX2xlbiA9IGFkanVzdGVkLT52c3lu
Y19lbmQgLSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lf
ZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3Qg
bXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtfb3V0cHV0X2Rz
aV9kaXNhYmxlKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rlcl9lbmFibGUo
c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBl
bmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJsZShkc2kpOwor
fQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBtdGtfZHNpX2Nvbm5lY3Rvcl9k
ZXRlY3QoCisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sK
KwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK
K3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9y
X2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2Nvbm5lY3Rvcl9n
ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgbXRr
X2RzaSAqZHNpID0gY29ubmVjdG9yX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuIGRybV9w
YW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29k
ZXIgKm10a19kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJc3RydWN0IGRybV9jb25uZWN0
b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gY29ubmVjdG9yX3RvX2Rz
aShjb25uZWN0b3IpOworCisJcmV0dXJuICZkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG10a19kc2lfZW5jb2Rlcl9oZWxwZXJf
ZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBtdGtfZHNpX2VuY29kZXJfbW9kZV9maXh1cCwKKwku
bW9kZV9zZXQgPSBtdGtfZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUgPSBtdGtfZHNp
X2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxlID0gbXRrX2RzaV9lbmNvZGVyX2VuYWJsZSwKK307
CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtfZHNpX2Nvbm5l
Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1z
LAorCS5kZXRlY3QgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBk
cm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBtdGtf
ZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l
Y3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy
X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt
X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29u
c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJbXRrX2RzaV9jb25uZWN0b3Jf
aGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9k
ZXMsCisJLmJlc3RfZW5jb2RlciA9IG10a19kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307
CisKK3N0YXRpYyBpbnQgbXRrX2RybV9hdHRhY2hfbGNtX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRn
ZSAqYnJpZGdlLAorCQkJCSAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWlu
dCByZXQ7CisKKwllbmNvZGVyLT5icmlkZ2UgPSBicmlkZ2U7CisJYnJpZGdlLT5lbmNvZGVyID0g
ZW5jb2RlcjsKKwlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLT5kZXYsIGJyaWRnZSk7
CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhdHRhY2ggYnJpZGdlIHRvIGRy
bVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RzaV9jcmVhdGVfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpbnQgcmV0
OworCisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkc2ktPmRybV9kZXYsICZkc2ktPmVuY29kZXIs
CisJCQkgICAgICAgJm10a19kc2lfZW5jb2Rlcl9mdW5jcywgRFJNX01PREVfRU5DT0RFUl9EU0kp
OworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmNvZGVyIGluaXQgdG8g
ZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNp
LT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlkc2ktPmVuY29k
ZXIucG9zc2libGVfY3J0Y3MgPSAxOworCisJLyogUHJlLWVtcHQgRFAgY29ubmVjdG9yIGNyZWF0
aW9uIGlmIHRoZXJlJ3MgYSBicmlkZ2UgKi8KKwlyZXQgPSBtdGtfZHJtX2F0dGFjaF9sY21fYnJp
ZGdlKGRzaS0+YnJpZGdlLCAmZHNpLT5lbmNvZGVyKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7
CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHNpLT5kcm1fZGV2LCAmZHNpLT5jb25uLAor
CQkJCSAmbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9E
U0kpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIGluaXQg
dG8gZHJtXG4iKTsKKwkJZ290byBlcnJjb25uZWN0b3I7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9o
ZWxwZXJfYWRkKCZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor
CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmZHNpLT5jb25uKTsKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciByZWdpc3RlciB0byBkcm1cbiIpOwor
CQlnb3RvIGVycmNvbm5lY3RvcnJlZzsKKwl9CisKKwlkc2ktPmNvbm4uZHBtcyA9IERSTV9NT0RF
X0RQTVNfT0ZGOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25u
LCAmZHNpLT5lbmNvZGVyKTsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCXJldCA9IGRybV9wYW5l
bF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9F
UlJPUigiRmFpbGVkIHRvIGF0dGFjdCBwYW5lbCB0byBkcm1cbiIpOworCQkJcmV0dXJuIHJldDsK
KwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyY29ubmVjdG9yOgorCWRybV9lbmNvZGVyX2NsZWFu
dXAoJmRzaS0+ZW5jb2Rlcik7CitlcnJjb25uZWN0b3JyZWc6CisJZHJtX2Nvbm5lY3Rvcl9jbGVh
bnVwKCZkc2ktPmNvbm4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rz
aV9kZXN0cm95X2Nvbm5fZW5jKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJZHJtX2VuY29kZXJf
Y2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRzaS0+
Y29ubik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworfQorCitzdGF0aWMg
aW50IG10a19kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl
ciwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBkZXZf
Z2V0X2RydmRhdGEoZGV2KTsKKworCWRzaS0+ZHJtX2RldiA9IGRhdGE7CisKKwlyZXQgPSBtdGtf
ZHNpX2NyZWF0ZV9jb25uX2VuYyhkc2kpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJFbmNv
ZGVyIGNyZWF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV91bmJpbmQoc3RydWN0IGRldmlj
ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0
cnVjdCBtdGtfZHNpICpkc2k7CisKKwlkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0
Zm9ybV9kZXZpY2UoZGV2KSk7CisJbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKGRzaSk7CisKKwlk
c2ktPmRybV9kZXYgPSBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v
cHMgbXRrX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RzaV9iaW5kLAorCS51
bmJpbmQgPSBtdGtfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9wcm9iZShz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisJ
c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJl
bW90ZV9ub2RlLCAqZW5kcG9pbnQ7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCWludCByZXQ7
CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwor
CWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJ
REVPX1NZTkNfUFVMU0U7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4OworCWRz
aS0+bGFuZXMgPSA0OworCisJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChk
ZXYtPm9mX25vZGUsIE5VTEwpOworCWlmIChlbmRwb2ludCkgeworCQlyZW1vdGVfbm9kZSA9IG9m
X2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOworCQlpZiAoIXJlbW90ZV9u
b2RlKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vIHBhbmVsIGNvbm5lY3RlZFxuIik7CisJCQlyZXR1
cm4gLUVOT0RFVjsKKwkJfQorCisJCWRzaS0+YnJpZGdlID0gb2ZfZHJtX2ZpbmRfYnJpZGdlKHJl
bW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHJlbW90ZV9ub2Rl
KTsKKwkJb2Zfbm9kZV9wdXQocmVtb3RlX25vZGUpOworCQlpZiAoIWRzaS0+YnJpZGdlICYmICFk
c2ktPnBhbmVsKSB7CisJCQlkZXZfaW5mbyhkZXYsICJXYWl0aW5nIGZvciBicmlkZ2Ugb3IgcGFu
ZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9CisJfQorCisJZHNp
LT5kc2kwX2VuZ2luZV9jbGtfY2cgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5naW5lIik7CisJaWYg
KElTX0VSUihkc2ktPmRzaTBfZW5naW5lX2Nsa19jZykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2kt
PmRzaTBfZW5naW5lX2Nsa19jZyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBlbmdp
bmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZHNpMF9k
aWdpdGFsX2Nsa19jZyA9IGRldm1fY2xrX2dldChkZXYsICJkaWdpdGFsIik7CisJaWYgKElTX0VS
Uihkc2ktPmRzaTBfZGlnaXRhbF9jbGtfY2cpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5kc2kw
X2RpZ2l0YWxfY2xrX2NnKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGRpZ2l0YWwg
Y2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ3MgPSBwbGF0Zm9y
bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRzaS0+ZHNpX3JlZ19i
YXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkc2kt
PmRzaV9yZWdfYmFzZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRzaV9yZWdfYmFzZSk7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJkcGh5Iik7
CisJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBoeSk7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBNSVBJLURQSFk6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwly
ZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOwor
CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIERTSSBjb21wb25lbnRc
biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW10
a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZt
dGtfZHNpX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdf
UE0KK3N0YXRpYyBpbnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz
dHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlt
dGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJRFJNX0lORk8oImRzaSBzdXNwZW5kIHN1Y2Nl
c3MhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lfcmVzdW1lKHN0
cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2
X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKKwlEUk1f
SU5GTygiZHNpIHJlc3VtZSBzdWNjZXNzIVxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgor
c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kc2lfcG1fb3BzLCBtdGtfZHNpX3N1c3BlbmQs
IG10a19kc2lfcmVzdW1lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X2RzaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRz
aSIgfSwKKwl7IH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVy
ID0geworCS5wcm9iZSA9IG10a19kc2lfcHJvYmUsCisJLnJlbW92ZSA9IG10a19kc2lfcmVtb3Zl
LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10ay1kc2kiLAorCQkub2ZfbWF0Y2hfdGFibGUg
PSBtdGtfZHNpX29mX21hdGNoLAorCQkucG0gPSAmbXRrX2RzaV9wbV9vcHMsCisJfSwKK307CmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zMGExNDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kc2kuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1l
ZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKi8KKworI2lmbmRlZiBfTVRLX0RTSV9IXworI2RlZmluZSBfTVRLX0RTSV9IXworCisj
aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisKK3N0cnVjdCBwaHk7CisKK3N0cnVjdCBtdGtfZHNp
IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5j
b2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOworCXN0cnVjdCBkcm1fcGFuZWwgKnBh
bmVsOworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CisJc3RydWN0IHBoeSAqcGh5OworCisJ
dm9pZCBfX2lvbWVtICpkc2lfcmVnX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkc2lfdHhfcmVnX2Jh
c2U7CisKKwlzdHJ1Y3QgY2xrICpkc2kwX2VuZ2luZV9jbGtfY2c7CisJc3RydWN0IGNsayAqZHNp
MF9kaWdpdGFsX2Nsa19jZzsKKworCXUzMiBkYXRhX3JhdGU7CisKKwl1bnNpZ25lZCBsb25nIG1v
ZGVfZmxhZ3M7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVk
IGludCBsYW5lczsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCWJvb2wgZW5hYmxlZDsKK307CisK
K3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVjdCBkcm1f
ZW5jb2RlciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBtdGtfZHNpLCBl
bmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqY29ubmVjdG9yX3Rv
X2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMs
IHN0cnVjdCBtdGtfZHNpLCBjb25uKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfbWlwaV90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YWZk
MDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlf
dHguYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl
ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgor
I2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk
ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgor
CisjaW5jbHVkZSAibXRrX21pcGlfdHguaCIKKworI2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgw
MAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9DS0df
TERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKKyNk
ZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5lIFJHX0RTSV9QSFlDTEtf
U0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlCSVQoMTApCisj
ZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2RlZmluZSBNSVBJVFhfRFNJ
X0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBSR19EU0lfTE5UQ19MRE9PVVRfRU4JCUJJVCgwKQor
I2RlZmluZSBSR19EU0lfTE5UQ19DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5U
Q19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMyCQlC
SVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBS
R19EU0lfTE5UQ19MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBDRF9J
TUxVUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlRDX1JUX0NPREUJCSgweGYgPDwgOCkKKwor
I2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJMHgwOAorI2RlZmluZSBSR19EU0lfTE5UMF9M
RE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMF9DS0xBTkVfRU4JCUJJVCgxKQor
I2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9M
TlQwX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JTUlOVVMJ
CUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUg
UkdfRFNJX0xOVDBfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UMF9SVF9D
T0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUxCTB4MGMKKyNk
ZWZpbmUgUkdfRFNJX0xOVDFfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDFf
Q0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JUExVUzEJCUJJVCgy
KQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RT
SV9MTlQxX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBDRF9JUExV
UwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZp
bmUgUkdfRFNJX0xOVDFfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lf
REFUQV9MQU5FMgkweDEwCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xET09VVF9FTgkJQklUKDApCisj
ZGVmaW5lIFJHX0RTSV9MTlQyX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQy
X0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExVUzIJCUJJ
VCgzKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJH
X0RTSV9MTlQyX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMl9MUENEX0lN
SU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQyX1JUX0NPREUJCSgweGYgPDwgOCkKKwor
I2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAorI2RlZmluZSBSR19EU0lfTE5UM19M
RE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UM19DS0xBTkVfRU4JCUJJVCgxKQor
I2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9M
TlQzX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JTUlOVVMJ
CUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUg
UkdfRFNJX0xOVDNfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UM19SVF9D
T0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9UT1BfQ09OCTB4NDAKKyNkZWZp
bmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVF9IU19CSUFT
X0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0VOCQlCSVQoMikKKyNkZWZp
bmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlRfSU1Q
X0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RTSV9MTlRfQUlPX1NFTAkJKDcgPDwg
OCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX0RT
SV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBSR19EU0lfUFJFU0VSVkUJCQkoNyA8
PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkweDQ0CisjZGVmaW5lIFJHX0RTSV9C
R19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JHX0NLRU4JCQlCSVQoMSkKKyNkZWZp
bmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZpbmUgUkdfRFNJX0JHX0ZBU1RfQ0hB
UkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKKyNk
ZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEwX1NFTAkJ
CSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQorI2RlZmluZSBS
R19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBSR19EU0lfVjAzMl9TRUwJCQkoNyA8
PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKKyNkZWZpbmUgUkdfRFNJ
X0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0RTSV9CR19SMl9UUklNCQkoMHhm
IDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjAJMHg1MAorI2RlZmluZSBSR19E
U0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9NU0sJCSgw
eDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJFRElWCQkoMyA8PCAxKQorI2RlZmlu
ZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhE
SVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExfUE9TRElWCQkoNyA8PCA3KQorI2Rl
ZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJX01QUExM
X01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfTVBQTExfVk9EX0VOCQlCSVQoMTIp
CisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0CisjZGVmaW5lIFJHX0RTSV9NUFBM
TF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUEhfSU5J
VAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4JCUJJVCgyKQorI2RlZmlu
ZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8PCAxNikKKworI2RlZmluZSBNSVBJ
VFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9QV1IJMHg2OAor
I2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9N
UFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfQUNL
CUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTAkweDgwCisjZGVmaW5lIFNXX0NU
UkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NUUkxfQ09OMAkweDg0Cisj
ZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQorI2RlZmluZSBTV19MTlRDX0xQVFhf
T0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJCQlCSVQoMikKKyNkZWZpbmUgU1df
TE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX1BSRV9PRQkJQklUKDQp
CisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQorI2RlZmluZSBTV19MTlRDX0hTVFhf
WkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9QUkVfT0UJCUJJVCg3KQorI2Rl
ZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX1AJCQlC
SVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQoMTApCisjZGVmaW5lIFNXX0xOVDBf
SFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX09FCQkJQklUKDEyKQor
I2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9Q
UkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJQklUKDE1KQorI2RlZmlu
ZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX04JCQlCSVQo
MTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkKKyNkZWZpbmUgU1dfTE5U
MV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQyX0xQVFhfUFJFX09FCQlCSVQoMjAp
CisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkKKyNkZWZpbmUgU1dfTE5UMl9MUFRY
X1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJQklUKDIzKQorI2RlZmluZSBT
V19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9PRQkJCUJJ
VCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdW5z
aWduZWQgaW50IGRhdGFfcmF0ZTsKK307CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X21hc2so
c3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywKKwkJCSAg
ICAgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0
KTsKKworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlfdHgtPnJl
Z3MgKyBvZmZzZXQpOworfQorCitpbnQgbXRrX21pcGlfdHhfc2V0X2RhdGFfcmF0ZShzdHJ1Y3Qg
cGh5ICpwaHksIHVuc2lnbmVkIGludCBkYXRhX3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4
ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwlpZiAoZGF0YV9yYXRlIDwgNTAg
fHwgZGF0YV9yYXRlID4gMTI1MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaXBpX3R4LT5kYXRh
X3JhdGUgPSBkYXRhX3JhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfbWlw
aV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICpt
aXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdW5zaWduZWQgaW50IHR4ZGl2LCB0eGRp
djAsIHR4ZGl2MTsKKwl1NjQgcGN3OworCisJaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAp
IHsKKwkJdHhkaXYgPSAxOworCQl0eGRpdjAgPSAwOworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBp
ZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1MCkgeworCQl0eGRpdiA9IDI7CisJCXR4ZGl2MCA9
IDE7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMTI1
KSB7CisJCXR4ZGl2ID0gNDsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2Ug
aWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyKSB7CisJCXR4ZGl2ID0gODsKKwkJdHhkaXYwID0g
MjsKKwkJdHhkaXYxID0gMTsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MCkg
eworCQl0eGRpdiA9IDE2OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAyOworCX0gZWxzZSB7
CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQ
SVRYX0RTSV9CR19DT04sCisJCQkgUkdfRFNJX1ZPVVRfTVNLIHwgUkdfRFNJX0JHX0NLRU4gfCBS
R19EU0lfQkdfQ09SRV9FTiwKKwkJCSAoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8PCAxNCkg
fAorCQkJICg0IDw8IDExKSB8ICg0IDw8IDgpIHwgKDQgPDwgNSkgfAorCQkJIFJHX0RTSV9CR19D
S0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4pOworCisJdXNsZWVwX3JhbmdlKDMwLCAxMDApOworCisJ
bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkgUkdfRFNJ
X0xOVF9JTVBfQ0FMX0NPREUgfCBSR19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkgKDggPDwgNCkg
fCBSR19EU0lfTE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN
SVBJVFhfRFNJX0NPTiwKKwkJCSBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JF
X0VOLAorCQkJIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOworCisJ
bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkgUkdfRFNJ
X01QUExMX1NETV9QV1JfT04gfCBSR19EU0lfTVBQTExfU0RNX0lTT19FTiwKKwkJCSBSR19EU0lf
TVBQTExfU0RNX1BXUl9PTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9E
U0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFz
ayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJIFJHX0RTSV9NUFBMTF9UWERJVjAg
fCBSR19EU0lfTVBQTExfVFhESVYxIHwKKwkJCSBSR19EU0lfTVBQTExfUFJFRElWLAorCQkJICh0
eGRpdjAgPDwgMykgfCAodHhkaXYxIDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBjb25maWcK
KwkgKiBQQ1cgYml0IDI0fjMwID0gaW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBiaXQgMH4y
MyA9IGZyYWN0aW9uYWwgcGFydCBvZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8o
UmVmX2NsayoyKTsKKwkgKiBQb3N0IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAorCSAqIFJl
Zl9jbGsgaXMgMjZNSHoKKwkgKi8KKwlwY3cgPSAoKHU2NCkgbWlwaV90eC0+ZGF0YV9yYXRlICog
dHhkaXYpIDw8IDI0OworCXBjdyAvPSAxMzsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsg
TUlQSVRYX0RTSV9QTExfQ09OMik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU
WF9EU0lfUExMX0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9GUkFfRU4sIFJHX0RTSV9NUFBM
TF9TRE1fRlJBX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9D
TE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9FTiwgUkdfRFNJX0xOVENfTERPT1VU
X0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMCwK
KwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9FTik7CisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQkgUkdfRFNJ
X0xOVDFfTERPT1VUX0VOLCBSR19EU0lfTE5UMV9MRE9PVVRfRU4pOworCW10a19taXBpX3R4X21h
c2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJIFJHX0RTSV9MTlQyX0xET09V
VF9FTiwgUkdfRFNJX0xOVDJfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRfRU4sIFJHX0RT
SV9MTlQzX0xET09VVF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9E
U0lfUExMX0NPTjAsCisJCQkgUkdfRFNJX01QUExMX1BMTF9FTiwgUkdfRFNJX01QUExMX1BMTF9F
Tik7CisKKwl1c2xlZXBfcmFuZ2UoMjAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlf
dHgsIE1JUElUWF9EU0lfUExMX0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9TU0NfRU4sIDAp
OworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sIFJHX0RT
SV9QQURfVElFX0xPV19FTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
bWlwaV90eF9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90
eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayht
aXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExfUExMX0VOLCAwKTsKKwor
CW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLCBSR19EU0lfUEFE
X1RJRV9MT1dfRU4sCisJCQlSR19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJbXRrX21pcGlfdHhf
bWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkgUkdfRFNJX0xOVENfTERP
T1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9M
QU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4X21hc2so
bWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJIFJHX0RTSV9MTlQxX0xET09VVF9F
TiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTIs
CisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlf
dHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRfRU4sIDAp
OworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQlS
R19EU0lfTVBQTExfU0RNX0lTT19FTiB8IFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAorCQkJUkdf
RFNJX01QUExMX1NETV9JU09fRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJ
VFhfRFNJX1RPUF9DT04sIFJHX0RTSV9MTlRfSFNfQklBU19FTiwgMCk7CisKKwltdGtfbWlwaV90
eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJUkdfRFNJX0NLR19MRE9PVVRfRU4g
fCBSR19EU0lfTERPQ09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfQkdfQ09OLAorCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwg
MCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJH
X0RTSV9NUFBMTF9ESVZfTVNLLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0
IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBpX3R4X3Bv
d2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93bmVyID0g
VEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0cnVjdCBw
bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl
djsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNlICptZW07
CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsK
KwlpbnQgcmV0OworCisJbWlwaV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlwaV90
eCksIEdGUF9LRVJORUwpOworCWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlt
ZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1p
cGlfdHgtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19F
UlIobWlwaV90eC0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWdzKTsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwg
Jm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VSUihwaHkpKSB7CisJCWRldl9lcnIoZGV2LCAi
RmFpbGVkIHRvIGNyZWF0ZSBNSVBJIEQtUEhZXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsK
Kwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgbWlwaV90eCk7CisKKwlwaHlfcHJvdmlkZXIgPSBk
ZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOwor
CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlkZXIpOworfQorCitzdGF0aWMgaW50
IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl
dHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfbWlwaV90
eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1pcGktdHgi
LCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90eF9kcml2
ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9IG10a19taXBp
X3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1taXBpLXR4IiwK
KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguaCBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjM1ZjRhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX21pcGlfdHguaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX01JUElfVFhfSF8KKyNkZWZpbmUgX01US19N
SVBJX1RYX0gKKworc3RydWN0IHBoeTsKKworaW50IG10a19taXBpX3R4X3NldF9kYXRhX3JhdGUo
c3RydWN0IHBoeSAqcGh5LCB1bnNpZ25lZCBpbnQgZGF0YV9yYXRlKTsKKworI2VuZGlmCi0tIAoy
LjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp
LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6
Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK