From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v10 04/13] drm/mediatek: Add DPI sub driver
Date: Wed, 3 Feb 2016 20:25:53 +0100
Message-ID: <1454527562-28154-5-git-send-email-p.zabel@pengutronix.de>
References: <1454527562-28154-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: <1454527562-28154-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: linux-mediatek@lists.infradead.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpBZGQgRFBJIGNvbm5lY3Rvci9l
bmNvZGVyIHRvIHN1cHBvcnQgSERNSSBvdXRwdXQgdmlhIHRoZQphdHRhY2hlZCBIRE1JIGJyaWRn
ZS4KClNpZ25lZC1vZmYtYnk6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQt
b2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdl
cyBzaW5jZSB2OToKIC0gd2hpdGVzcGFjZSBmaXhlcwotLS0KIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9NYWtlZmlsZSAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcGkuYyAgICAgIHwgNzU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5oICAgICAgfCAgODUgKysrKwogZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oIHwgMjI4ICsrKysrKysrKysKIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgfCAgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCAxMDc0IGlu
c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcGkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHBpX3JlZ3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRl
eCBlNzgxZGI1YS4uNWZjZjU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtOCw2
ICs4LDcgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcm1f
Z2VtLm8gXAogCQkgIG10a19kcm1fcGxhbmUubyBcCiAJCSAgbXRrX2RzaS5vIFwKLQkJICBtdGtf
bWlwaV90eC5vCisJCSAgbXRrX21pcGlfdHgubyBcCisJCSAgbXRrX2RwaS5vCiAKIG9iai0kKENP
TkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTgxOTA2Ci0tLSAv
ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYwpAQCAtMCww
ICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBB
dXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGRybS9kcm1QLmg+
CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl
ci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVu
dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4
L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRl
cnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgIm10a19kcGkuaCIK
KyNpbmNsdWRlICJtdGtfZHBpX3JlZ3MuaCIKKworZW51bSBtdGtfZHBpX3BvbGFyaXR5IHsKKwlN
VEtfRFBJX1BPTEFSSVRZX1JJU0lORywKKwlNVEtfRFBJX1BPTEFSSVRZX0ZBTExJTkcsCit9Owor
CitlbnVtIG10a19kcGlfcG93ZXJfY3RsIHsKKwlEUElfUE9XRVJfU1RBUlQgPSBCSVQoMCksCisJ
RFBJX1BPV0VSX0VOQUJMRSA9IEJJVCgxKSwKKwlEUElfUE9XRVJfUkVTVU1FID0gQklUKDIpLAor
fTsKKworc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyB7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5
IGRlX3BvbDsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkgY2tfcG9sOworCWVudW0gbXRrX2RwaV9w
b2xhcml0eSBoc3luY19wb2w7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5IHZzeW5jX3BvbDsKK307
CisKK3N0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0geworCXUzMiBzeW5jX3dpZHRoOworCXUzMiBm
cm9udF9wb3JjaDsKKwl1MzIgYmFja19wb3JjaDsKKwlib29sIHNoaWZ0X2hhbGZfbGluZTsKK307
CisKK3N0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IHsKKwl1MTYgeV90b3A7CisJdTE2IHlfYm90dG9t
OworCXUxNiBjX3RvcDsKKwl1MTYgY19ib3R0b207Cit9OworCitzdGF0aWMgdm9pZCBtdGtfZHBp
X21hc2soc3RydWN0IG10a19kcGkgKmRwaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2sp
Cit7CisJdTMyIHRtcCA9IHJlYWRsKGRwaS0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRt
cCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgZHBpLT5yZWdzICsgb2Zmc2V0KTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RwaV9zd19yZXNldChzdHJ1Y3QgbXRrX2RwaSAqZHBpLCBib29s
IHJlc2V0KQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9SRVQsIHJlc2V0ID8gUlNUIDogMCwg
UlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9lbmFibGUoc3RydWN0IG10a19kcGkgKmRw
aSkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfRU4sIEVOLCBFTik7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfZGlzYWJsZShzdHJ1Y3QgbXRrX2RwaSAqZHBpKQoreworCW10a19kcGlfbWFz
ayhkcGksIERQSV9FTiwgMCwgRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19o
c3luYyhzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFt
ICpzeW5jKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hXSURUSCwKKwkJICAgICBz
eW5jLT5zeW5jX3dpZHRoIDw8IEhQVywgSFBXX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQ
SV9UR0VOX0hQT1JDSCwKKwkJICAgICBzeW5jLT5iYWNrX3BvcmNoIDw8IEhCUCwgSEJQX01BU0sp
OworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hQT1JDSCwgc3luYy0+ZnJvbnRfcG9yY2gg
PDwgSEZQLAorCQkgICAgIEhGUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25m
aWdfdnN5bmMoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgc3RydWN0IG10a19kcGlfc3luY19w
YXJhbSAqc3luYywKKwkJCQkgdTMyIHdpZHRoX2FkZHIsIHUzMiBwb3JjaF9hZGRyKQoreworCW10
a19kcGlfbWFzayhkcGksIHdpZHRoX2FkZHIsCisJCSAgICAgc3luYy0+c3luY193aWR0aCA8PCBW
U1lOQ19XSURUSF9TSElGVCwKKwkJICAgICBWU1lOQ19XSURUSF9NQVNLKTsKKwltdGtfZHBpX21h
c2soZHBpLCB3aWR0aF9hZGRyLAorCQkgICAgIHN5bmMtPnNoaWZ0X2hhbGZfbGluZSA8PCBWU1lO
Q19IQUxGX0xJTkVfU0hJRlQsCisJCSAgICAgVlNZTkNfSEFMRl9MSU5FX01BU0spOworCW10a19k
cGlfbWFzayhkcGksIHBvcmNoX2FkZHIsCisJCSAgICAgc3luYy0+YmFja19wb3JjaCA8PCBWU1lO
Q19CQUNLX1BPUkNIX1NISUZULAorCQkgICAgIFZTWU5DX0JBQ0tfUE9SQ0hfTUFTSyk7CisJbXRr
X2RwaV9tYXNrKGRwaSwgcG9yY2hfYWRkciwKKwkJICAgICBzeW5jLT5mcm9udF9wb3JjaCA8PCBW
U1lOQ19GUk9OVF9QT1JDSF9TSElGVCwKKwkJICAgICBWU1lOQ19GUk9OVF9QT1JDSF9NQVNLKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfbG9kZChzdHJ1Y3QgbXRrX2Rw
aSAqZHBpLAorCQkJCSAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gKnN5bmMpCit7CisJ
bXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lEVEgsIERQSV9UR0VO
X1ZQT1JDSCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX2xldmVuKHN0
cnVjdCBtdGtfZHBpICpkcGksCisJCQkJICAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0g
KnN5bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lE
VEhfTEVWRU4sCisJCQkgICAgIERQSV9UR0VOX1ZQT1JDSF9MRVZFTik7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX3JvZGQoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkg
ICAgICBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpzeW5jKQoreworCW10a19kcGlfY29uZmln
X3ZzeW5jKGRwaSwgc3luYywgRFBJX1RHRU5fVldJRFRIX1JPREQsCisJCQkgICAgIERQSV9UR0VO
X1ZQT1JDSF9ST0REKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfcmV2
ZW4oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICAgICAgc3RydWN0IG10a19kcGlfc3luY19w
YXJhbSAqc3luYykKK3sKKwltdGtfZHBpX2NvbmZpZ192c3luYyhkcGksIHN5bmMsIERQSV9UR0VO
X1ZXSURUSF9SRVZFTiwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNIX1JFVkVOKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RwaV9jb25maWdfcG9sKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkgICAg
ICAgc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyAqZHBpX3BvbCkKK3sKKwl1bnNpZ25lZCBpbnQg
cG9sOworCisJcG9sID0gKGRwaV9wb2wtPmNrX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lO
RyA/IDAgOiBDS19QT0wpIHwKKwkgICAgICAoZHBpX3BvbC0+ZGVfcG9sID09IE1US19EUElfUE9M
QVJJVFlfUklTSU5HID8gMCA6IERFX1BPTCkgfAorCSAgICAgIChkcGlfcG9sLT5oc3luY19wb2wg
PT0gTVRLX0RQSV9QT0xBUklUWV9SSVNJTkcgPyAwIDogSFNZTkNfUE9MKSB8CisJICAgICAgKGRw
aV9wb2wtPnZzeW5jX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lORyA/IDAgOiBWU1lOQ19Q
T0wpOworCW10a19kcGlfbWFzayhkcGksIERQSV9PVVRQVVRfU0VUVElORywgcG9sLAorCQkgICAg
IENLX1BPTCB8IERFX1BPTCB8IEhTWU5DX1BPTCB8IFZTWU5DX1BPTCk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfY29uZmlnXzNkKHN0cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5fM2QpCit7
CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5fM2QgPyBUREZQX0VOIDogMCwgVERGUF9F
Tik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgbXRr
X2RwaSAqZHBpLCBib29sIGludGVyKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGlu
dGVyID8gSU5UTF9FTiA6IDAsIElOVExfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2Nv
bmZpZ19mYl9zaXplKHN0cnVjdCBtdGtfZHBpICpkcGksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkK
K3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfU0laRSwgd2lkdGggPDwgSFNJWkUsIEhTSVpFX01B
U0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9TSVpFLCBoZWlnaHQgPDwgVlNJWkUsIFZTSVpF
X01BU0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jaGFubmVsX2xpbWl0KHN0
cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCSBzdHJ1Y3QgbXRrX2RwaV95Y19saW1pdCAqbGltaXQp
Cit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1lfTElNSVQsIGxpbWl0LT55X2JvdHRvbSA8PCBZ
X0xJTUlOVF9CT1QsCisJCSAgICAgWV9MSU1JTlRfQk9UX01BU0spOworCW10a19kcGlfbWFzayhk
cGksIERQSV9ZX0xJTUlULCBsaW1pdC0+eV90b3AgPDwgWV9MSU1JTlRfVE9QLAorCQkgICAgIFlf
TElNSU5UX1RPUF9NQVNLKTsKKwltdGtfZHBpX21hc2soZHBpLCBEUElfQ19MSU1JVCwgbGltaXQt
PmNfYm90dG9tIDw8IENfTElNSVRfQk9ULAorCQkgICAgIENfTElNSVRfQk9UX01BU0spOworCW10
a19kcGlfbWFzayhkcGksIERQSV9DX0xJTUlULCBsaW1pdC0+Y190b3AgPDwgQ19MSU1JVF9UT1As
CisJCSAgICAgQ19MSU1JVF9UT1BfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29u
ZmlnX2JpdF9udW0oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICBlbnVtIG10a19kcGlfb3V0
X2JpdF9udW0gbnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG51bSkgeworCWNhc2UgTVRL
X0RQSV9PVVRfQklUX05VTV84QklUUzoKKwkJdmFsID0gT1VUX0JJVF84OworCQlicmVhazsKKwlj
YXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTBCSVRTOgorCQl2YWwgPSBPVVRfQklUXzEwOworCQli
cmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTOgorCQl2YWwgPSBPVVRfQklU
XzEyOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTZCSVRTOgorCQl2YWwg
PSBPVVRfQklUXzE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBPVVRfQklUXzg7CisJ
CWJyZWFrOworCX0KKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8
PCBPVVRfQklULAorCQkgICAgIE9VVF9CSVRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k
cGlfY29uZmlnX3ljX21hcChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgZW51bSBtdGtfZHBp
X291dF95Y19tYXAgbWFwKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG1hcCkgeworCWNhc2Ug
TVRLX0RQSV9PVVRfWUNfTUFQX1JHQjoKKwkJdmFsID0gWUNfTUFQX1JHQjsKKwkJYnJlYWs7CisJ
Y2FzZSBNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWToKKwkJdmFsID0gWUNfTUFQX0NZQ1k7CisJCWJy
ZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1lDWUM6CisJCXZhbCA9IFlDX01BUF9ZQ1lD
OworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9DWToKKwkJdmFsID0gWUNfTUFQ
X0NZOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9ZQzoKKwkJdmFsID0gWUNf
TUFQX1lDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBZQ19NQVBfUkdCOworCQlicmVh
azsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBZ
Q19NQVAsIFlDX01BUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfY2hh
bm5lbF9zd2FwKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCWVudW0gbXRrX2RwaV9vdXRfY2hh
bm5lbF9zd2FwIHN3YXApCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2Ug
TVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjoKKwkJdmFsID0gU1dBUF9SR0I7CisJCWJyZWFr
OworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dCUjoKKwkJdmFsID0gU1dBUF9HQlI7
CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JSRzoKKwkJdmFsID0g
U1dBUF9CUkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JCRzoK
KwkJdmFsID0gU1dBUF9SQkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9T
V0FQX0dSQjoKKwkJdmFsID0gU1dBUF9HUkI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRf
Q0hBTk5FTF9TV0FQX0JHUjoKKwkJdmFsID0gU1dBUF9CR1I7CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCXZhbCA9IFNXQVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBE
UElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBDSF9TV0FQLCBDSF9TV0FQX01BU0spOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKHN0cnVjdCBtdGtfZHBpICpk
cGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVuYWJsZSA/
IFlVVjQyMl9FTiA6IDAsIFlVVjQyMl9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29u
ZmlnX2NzY19lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBlbmFibGUpCit7CisJbXRr
X2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5hYmxlID8gQ1NDX0VOQUJMRSA6IDAsIENTQ19FTkFC
TEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KHN0cnVjdCBt
dGtfZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04s
IGVuYWJsZSA/IElOX1JCX1NXQVAgOiAwLCBJTl9SQl9TV0FQKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2RwaV9jb25maWdfMm5faF9mcmUoc3RydWN0IG10a19kcGkgKmRwaSkKK3sKKwltdGtfZHBp
X21hc2soZHBpLCBEUElfSF9GUkVfQ09OLCBIX0ZSRV8yTiwgSF9GUkVfMk4pOworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0IG10a19kcGkgKmRwaSwK
KwkJCQkJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgZm9ybWF0KQoreworCWlmICgoZm9y
bWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQ0NCkgfHwKKwkgICAgKGZvcm1hdCA9
PSBNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCkpIHsKKwkJbXRrX2RwaV9jb25m
aWdfeXV2NDIyX2VuYWJsZShkcGksIGZhbHNlKTsKKwkJbXRrX2RwaV9jb25maWdfY3NjX2VuYWJs
ZShkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2UpOwor
CQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NX
QVBfQkdSKTsKKwl9IGVsc2UgaWYgKChmb3JtYXQgPT0gTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNC
Q1JfNDIyKSB8fAorCQkgICAoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQy
Ml9GVUxMKSkgeworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgdHJ1ZSk7CisJ
CW10a19kcGlfY29uZmlnX2NzY19lbmFibGUoZHBpLCB0cnVlKTsKKwkJbXRrX2RwaV9jb25maWdf
c3dhcF9pbnB1dChkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBp
LCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9IGVsc2UgeworCQltdGtfZHBpX2Nv
bmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jc2NfZW5h
YmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2Up
OworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVM
X1NXQVBfUkdCKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfcG93ZXJfb2ZmKHN0cnVj
dCBtdGtfZHBpICpkcGksIGVudW0gbXRrX2RwaV9wb3dlcl9jdGwgcGN0bCkKK3sKKwlkcGktPnBv
d2VyX2N0bCAmPSB+cGN0bDsKKworCWlmICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfU1RB
UlQpIHx8CisJICAgICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfRU5BQkxFKSAmJgorCSAg
ICAgKGRwaS0+cG93ZXJfY3RsICYgRFBJX1BPV0VSX1JFU1VNRSkpKQorCQlyZXR1cm47CisKKwlp
ZiAoIWRwaS0+cG93ZXJfc3RhKQorCQlyZXR1cm47CisKKwltdGtfZHBpX2Rpc2FibGUoZHBpKTsK
KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5waXhlbF9jbGspOworCWNsa19kaXNhYmxlX3Vu
cHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworCWRwaS0+cG93ZXJfc3RhID0gZmFsc2U7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2RwaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2RwaSAqZHBpLCBlbnVtIG10
a19kcGlfcG93ZXJfY3RsIHBjdGwpCit7CisJaW50IHJldDsKKworCWRwaS0+cG93ZXJfY3RsIHw9
IHBjdGw7CisKKwlpZiAoIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9TVEFSVCkgJiYKKwkg
ICAgISgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfRU5BQkxFKSAmJgorCSAgICAgICgoZHBp
LT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfUkVTVU1FKSkpKQorCQlyZXR1cm4gMDsKKworCWlmIChk
cGktPnBvd2VyX3N0YSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo
ZHBpLT5lbmdpbmVfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHBpLT5kZXYsICJGYWls
ZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuZzsK
Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5waXhlbF9jbGspOworCWlmIChy
ZXQpIHsKKwkJZGV2X2VycihkcGktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgcGl4ZWwgY2xvY2s6
ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waXhlbDsKKwl9CisKKwltdGtfZHBpX2VuYWJsZShk
cGkpOworCWRwaS0+cG93ZXJfc3RhID0gdHJ1ZTsKKwlyZXR1cm4gMDsKKworZXJyX3BpeGVsOgor
CWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworZXJyX2VuZzoKKwlkcGkt
PnBvd2VyX2N0bCAmPSB+cGN0bDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RwaV9zZXRf
ZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfZHBpICpkcGksIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICptb2RlKQoreworCXN0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IGxpbWl0OworCXN0cnVjdCBtdGtf
ZHBpX3BvbGFyaXRpZXMgZHBpX3BvbDsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIGhzeW5j
OworCXN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gdnN5bmNfbG9kZCA9IHsgMCB9OworCXN0cnVj
dCBtdGtfZHBpX3N5bmNfcGFyYW0gdnN5bmNfbGV2ZW4gPSB7IDAgfTsKKwlzdHJ1Y3QgbXRrX2Rw
aV9zeW5jX3BhcmFtIHZzeW5jX3JvZGQgPSB7IDAgfTsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3Bh
cmFtIHZzeW5jX3JldmVuID0geyAwIH07CisJdW5zaWduZWQgbG9uZyBwaXhfcmF0ZTsKKwl1bnNp
Z25lZCBsb25nIHBsbF9yYXRlOworCXVuc2lnbmVkIGludCBmYWN0b3I7CisKKwlpZiAoIWRwaSkg
eworCQlkZXZfZXJyKGRwaS0+ZGV2LCAiaW52YWxpZCBhcmd1bWVudFxuIik7CisJCXJldHVybiAt
RUlOVkFMOworCX0KKworCXBpeF9yYXRlID0gMTAwMFVMICogbW9kZS0+Y2xvY2s7CisJaWYgKG1v
ZGUtPmNsb2NrIDw9IDc0MDAwKQorCQlmYWN0b3IgPSA4ICogMzsKKwllbHNlCisJCWZhY3RvciA9
IDQgKiAzOworCXBsbF9yYXRlID0gcGl4X3JhdGUgKiBmYWN0b3I7CisKKwlkZXZfZGJnKGRwaS0+
ZGV2LCAiV2FudCBQTEwgJWx1IEh6LCBwaXhlbCBjbG9jayAlbHUgSHpcbiIsCisJCXBsbF9yYXRl
LCBwaXhfcmF0ZSk7CisKKwljbGtfc2V0X3JhdGUoZHBpLT50dmRfY2xrLCBwbGxfcmF0ZSk7CisJ
cGxsX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHBpLT50dmRfY2xrKTsKKworCXBpeF9yYXRlID0gcGxs
X3JhdGUgLyBmYWN0b3I7CisJY2xrX3NldF9yYXRlKGRwaS0+cGl4ZWxfY2xrLCBwaXhfcmF0ZSk7
CisJcGl4X3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHBpLT5waXhlbF9jbGspOworCisJZGV2X2RiZyhk
cGktPmRldiwgIkdvdCAgUExMICVsdSBIeiwgcGl4ZWwgY2xvY2sgJWx1IEh6XG4iLAorCQlwbGxf
cmF0ZSwgcGl4X3JhdGUpOworCisJbGltaXQuY19ib3R0b20gPSAweDAwMTA7CisJbGltaXQuY190
b3AgPSAweDBGRTA7CisJbGltaXQueV9ib3R0b20gPSAweDAwMTA7CisJbGltaXQueV90b3AgPSAw
eDBGRTA7CisKKwlkcGlfcG9sLmNrX3BvbCA9IE1US19EUElfUE9MQVJJVFlfRkFMTElORzsKKwlk
cGlfcG9sLmRlX3BvbCA9IE1US19EUElfUE9MQVJJVFlfUklTSU5HOworCWRwaV9wb2wuaHN5bmNf
cG9sID0gbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQyA/CisJCQkgICAgTVRLX0RQ
SV9QT0xBUklUWV9GQUxMSU5HIDogTVRLX0RQSV9QT0xBUklUWV9SSVNJTkc7CisJZHBpX3BvbC52
c3luY19wb2wgPSBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DID8KKwkJCSAgICBN
VEtfRFBJX1BPTEFSSVRZX0ZBTExJTkcgOiBNVEtfRFBJX1BPTEFSSVRZX1JJU0lORzsKKworCWhz
eW5jLnN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwlo
c3luYy5iYWNrX3BvcmNoID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCWhzeW5j
LmZyb250X3BvcmNoID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwloc3lu
Yy5zaGlmdF9oYWxmX2xpbmUgPSBmYWxzZTsKKworCXZzeW5jX2xvZGQuc3luY193aWR0aCA9IG1v
ZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZzeW5jX2xvZGQuYmFja19wb3Jj
aCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKwl2c3luY19sb2RkLmZyb250X3Bv
cmNoID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3luY19sb2RkLnNo
aWZ0X2hhbGZfbGluZSA9IGZhbHNlOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB
R19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHXzNEX01BU0sp
IHsKKwkJdnN5bmNfbGV2ZW4gPSB2c3luY19sb2RkOworCQl2c3luY19yb2RkID0gdnN5bmNfbG9k
ZDsKKwkJdnN5bmNfcmV2ZW4gPSB2c3luY19sb2RkOworCQl2c3luY19sZXZlbi5zaGlmdF9oYWxm
X2xpbmUgPSB0cnVlOworCQl2c3luY19yZXZlbi5zaGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCX0g
ZWxzZSBpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSAmJgorCQkgICAh
KG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSkgeworCQl2c3luY19sZXZlbiA9
IHZzeW5jX2xvZGQ7CisJCXZzeW5jX2xldmVuLnNoaWZ0X2hhbGZfbGluZSA9IHRydWU7CisJfSBl
bHNlIGlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpICYmCisJCSAg
IG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSB7CisJCXZzeW5jX3JvZGQgPSB2
c3luY19sb2RkOworCX0KKwltdGtfZHBpX3N3X3Jlc2V0KGRwaSwgdHJ1ZSk7CisJbXRrX2RwaV9j
b25maWdfcG9sKGRwaSwgJmRwaV9wb2wpOworCisJbXRrX2RwaV9jb25maWdfaHN5bmMoZHBpLCAm
aHN5bmMpOworCW10a19kcGlfY29uZmlnX3ZzeW5jX2xvZGQoZHBpLCAmdnN5bmNfbG9kZCk7CisJ
bXRrX2RwaV9jb25maWdfdnN5bmNfcm9kZChkcGksICZ2c3luY19yb2RkKTsKKwltdGtfZHBpX2Nv
bmZpZ192c3luY19sZXZlbihkcGksICZ2c3luY19sZXZlbik7CisJbXRrX2RwaV9jb25maWdfdnN5
bmNfcmV2ZW4oZHBpLCAmdnN5bmNfcmV2ZW4pOworCisJbXRrX2RwaV9jb25maWdfM2QoZHBpLCAh
IShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykpOworCW10a19kcGlfY29uZmln
X2ludGVyZmFjZShkcGksICEhKG1vZGUtPmZsYWdzICYKKwkJCQkJIERSTV9NT0RFX0ZMQUdfSU5U
RVJMQUNFKSk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJ
CW10a19kcGlfY29uZmlnX2ZiX3NpemUoZHBpLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3Bs
YXkgLyAyKTsKKwllbHNlCisJCW10a19kcGlfY29uZmlnX2ZiX3NpemUoZHBpLCBtb2RlLT5oZGlz
cGxheSwgbW9kZS0+dmRpc3BsYXkpOworCisJbXRrX2RwaV9jb25maWdfY2hhbm5lbF9saW1pdChk
cGksICZsaW1pdCk7CisJbXRrX2RwaV9jb25maWdfYml0X251bShkcGksIGRwaS0+Yml0X251bSk7
CisJbXRrX2RwaV9jb25maWdfY2hhbm5lbF9zd2FwKGRwaSwgZHBpLT5jaGFubmVsX3N3YXApOwor
CW10a19kcGlfY29uZmlnX3ljX21hcChkcGksIGRwaS0+eWNfbWFwKTsKKwltdGtfZHBpX2NvbmZp
Z19jb2xvcl9mb3JtYXQoZHBpLCBkcGktPmNvbG9yX2Zvcm1hdCk7CisJbXRrX2RwaV9jb25maWdf
Mm5faF9mcmUoZHBpKTsKKwltdGtfZHBpX3N3X3Jlc2V0KGRwaSwgZmFsc2UpOworCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1f
ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQor
CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG10a19kcGlfZW5jb2Rlcl9m
dW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19kcGlfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3Rh
dGljIGJvb2wgbXRrX2RwaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICpl
bmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwK
KwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJ
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rlcl9tb2RlX3NldChz
dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf
bW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t
b2RlKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBtdGtfZHBpX2Zyb21fZW5jb2RlcihlbmNv
ZGVyKTsKKworCWRybV9tb2RlX2NvcHkoJmRwaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq
ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gbXRrX2RwaV9mcm9tX2VuY29kZXIo
ZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2VyX29mZihkcGksIERQSV9QT1dFUl9FTkFCTEUpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2Rl
ciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gbXRrX2RwaV9mcm9tX2VuY29k
ZXIoZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2VyX29uKGRwaSwgRFBJX1BPV0VSX0VOQUJMRSk7
CisJbXRrX2RwaV9zZXRfZGlzcGxheV9tb2RlKGRwaSwgJmRwaS0+bW9kZSk7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2RwaV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAor
CQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2Nv
bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2RwaV9lbmNvZGVyX2hlbHBl
cl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG10a19kcGlfZW5jb2Rlcl9tb2RlX2ZpeHVwLAor
CS5tb2RlX3NldCA9IG10a19kcGlfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19k
cGlfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSBtdGtfZHBpX2VuY29kZXJfZW5hYmxlLAor
CS5hdG9taWNfY2hlY2sgPSBtdGtfZHBpX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyB2b2lk
IG10a19kcGlfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRr
X2RwaSAqZHBpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHBpLCBkZHBfY29tcCk7
CisKKwltdGtfZHBpX3Bvd2VyX29uKGRwaSwgRFBJX1BPV0VSX1NUQVJUKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2RwaV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0
IG10a19kcGkgKmRwaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RwaSwgZGRwX2Nv
bXApOworCisJbXRrX2RwaV9wb3dlcl9vZmYoZHBpLCBEUElfUE9XRVJfU1RBUlQpOworfQorCitz
dGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZHBpX2Z1bmNzID0gewor
CS5zdGFydCA9IG10a19kcGlfc3RhcnQsCisJLnN0b3AgPSBtdGtfZHBpX3N0b3AsCit9OworCitz
dGF0aWMgaW50IG10a19kcGlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug
Km1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gZGV2X2dldF9k
cnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCBy
ZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJmRwaS0+ZGRwX2Nv
bXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVy
IGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsK
KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYsICZk
cGktPmVuY29kZXIsICZtdGtfZHBpX2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVf
RU5DT0RFUl9UTURTLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGluaXRpYWxpemUgZGVjb2RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3VucmVnaXN0
ZXI7CisJfQorCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRwaS0+ZW5jb2RlciwgJm10a19kcGlf
ZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJLyogQ3VycmVudGx5IERQSTAgaXMgZml4ZWQgdG8g
YmUgZHJpdmVuIGJ5IE9WTDEgKi8KKwlkcGktPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSBCSVQo
MSk7CisKKwlkcGktPmVuY29kZXIuYnJpZGdlLT5lbmNvZGVyID0gJmRwaS0+ZW5jb2RlcjsKKwly
ZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChkcGktPmVuY29kZXIuZGV2LCBkcGktPmVuY29kZXIuYnJp
ZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGF0dGFjaCBicmlk
Z2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jbGVhbnVwOworCX0KKworCWRwaS0+Yml0X251
bSA9IE1US19EUElfT1VUX0JJVF9OVU1fOEJJVFM7CisJZHBpLT5jaGFubmVsX3N3YXAgPSBNVEtf
RFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCOworCWRwaS0+eWNfbWFwID0gTVRLX0RQSV9PVVRfWUNf
TUFQX1JHQjsKKwlkcGktPmNvbG9yX2Zvcm1hdCA9IE1US19EUElfQ09MT1JfRk9STUFUX1JHQjsK
KworCXJldHVybiAwOworCitlcnJfY2xlYW51cDoKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkcGkt
PmVuY29kZXIpOworZXJyX3VucmVnaXN0ZXI6CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJt
X2RldiwgJmRwaS0+ZGRwX2NvbXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kcGlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAor
CQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gZGV2X2dldF9kcnZk
YXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJZHJtX2Vu
Y29kZXJfY2xlYW51cCgmZHBpLT5lbmNvZGVyKTsKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihk
cm1fZGV2LCAmZHBpLT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u
ZW50X29wcyBtdGtfZHBpX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQgPSBtdGtfZHBpX2JpbmQs
CisJLnVuYmluZCA9IG10a19kcGlfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZHBpX3By
b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2
ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpOworCXN0cnVjdCByZXNvdXJjZSAq
bWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXAsICpicmlkZ2Vfbm9kZSA9IE5VTEw7CisJaW50
IGNvbXBfaWQ7CisJaW50IHJldDsKKworCWRwaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
ZHBpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcGkpCisJCXJldHVybiAtRU5PTUVNOworCisJZHBp
LT5kZXYgPSBkZXY7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP
VVJDRV9NRU0sIDApOworCWRwaS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1l
bSk7CisJaWYgKElTX0VSUihkcGktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT5yZWdz
KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW0gcmVzb3VyY2U6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRwaS0+ZW5naW5lX2NsayA9IGRldm1fY2xr
X2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNfRVJSKGRwaS0+ZW5naW5lX2NsaykpIHsKKwkJ
cmV0ID0gUFRSX0VSUihkcGktPmVuZ2luZV9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk
cGktPnBpeGVsX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbCIpOworCWlmIChJU19FUlIo
ZHBpLT5waXhlbF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT5waXhlbF9jbGspOworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcGl4ZWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCWRwaS0+dHZkX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwbGwi
KTsKKwlpZiAoSVNfRVJSKGRwaS0+dHZkX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkcGktPnR2
ZF9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgdHZkcGxsIGNsb2NrOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcGktPmlycSA9IHBsYXRmb3JtX2dldF9p
cnEocGRldiwgMCk7CisJaWYgKGRwaS0+aXJxIDw9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZ2V0IGlycTogJWRcbiIsIGRwaS0+aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor
CisJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOwor
CWlmIChlcCkgeworCQlicmlkZ2Vfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl
bnQoZXApOworCQlvZl9ub2RlX3B1dChlcCk7CisJfQorCWlmICghYnJpZGdlX25vZGUpIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBicmlkZ2Ugbm9kZTogJWRcbiIsIHJldCk7CisJ
CXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiRm91bmQgYnJpZGdlIG5vZGU6ICVz
XG4iLCBicmlkZ2Vfbm9kZS0+ZnVsbF9uYW1lKTsKKworCWRwaS0+ZW5jb2Rlci5icmlkZ2UgPSBv
Zl9kcm1fZmluZF9icmlkZ2UoYnJpZGdlX25vZGUpOworCW9mX25vZGVfcHV0KGJyaWRnZV9ub2Rl
KTsKKwlpZiAoIWRwaS0+ZW5jb2Rlci5icmlkZ2UpCisJCXJldHVybiAtRVBST0JFX0RFRkVSOwor
CisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRFBJKTsK
KwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkg
YnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0
ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUsICZkcGktPmRkcF9jb21wLCBj
b21wX2lkLAorCQkJCSZtdGtfZHBpX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2
LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcGkpOworCisJcmV0ID0g
Y29tcG9uZW50X2FkZChkZXYsICZtdGtfZHBpX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpIHsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJ
CXJldHVybiByZXQ7CisJfQorCisJZHBpLT5wb3dlcl9jdGwgfD0gRFBJX1BPV0VSX1JFU1VNRTsK
KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcGlfcmVtb3ZlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rw
aV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NM
RUVQCitzdGF0aWMgaW50IG10a19kcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ
c3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKElTX0VS
UihkcGkpKSB7CisJCWRldl9pbmZvKGRldiwgImRwaSBzdXNwZW5kIGZhaWxlZCFcbiIpOworCQly
ZXR1cm4gUFRSX0VSUihkcGkpOworCX0KKworCW10a19kcGlfcG93ZXJfb2ZmKGRwaSwgRFBJX1BP
V0VSX1JFU1VNRSk7CisKKwlkZXZfaW5mbyhkZXYsICJkcGkgc3VzcGVuZCBzdWNjZXNzIVxuIik7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHBpX3Jlc3VtZShzdHJ1Y3QgZGV2
aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp
OworCWludCByZXQ7CisKKwlpZiAoSVNfRVJSKGRwaSkpIHsKKwkJZGV2X2VycihkZXYsICJkcGkg
cmVzdW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGkpOworCX0KKworCXJldCA9
IG10a19kcGlfcG93ZXJfb24oZHBpLCBEUElfUE9XRVJfUkVTVU1FKTsKKwlpZiAocmV0KSB7CisJ
CWRldl9lcnIoZGV2LCAiZHBpIHJlc3VtZSBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlkZXZfaW5mbyhkZXYsICJkcGkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAw
OworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHBpX3BtX29wcywg
bXRrX2RwaV9zdXNwZW5kLCBtdGtfZHBpX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
b2ZfZGV2aWNlX2lkIG10a19kcGlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRp
YXRlayxtdDgxNzMtZHBpIiwgfSwKKwl7fQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt
dGtfZHBpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHBpX3Byb2JlLAorCS5yZW1vdmUgPSBt
dGtfZHBpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1kcGkiLAor
CQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHBpX29mX2lkcywKKwkJLnBtID0gJm10a19kcGlfcG1f
b3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNDExNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVA
bWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0RQSV9ICisjZGVmaW5lIF9NVEtfRFBJX0gKKworI2lu
Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisKKyNpbmNs
dWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgY2xrOwor
CitlbnVtIG10a19kcGlfb3V0X2JpdF9udW0geworCU1US19EUElfT1VUX0JJVF9OVU1fOEJJVFMs
CisJTVRLX0RQSV9PVVRfQklUX05VTV8xMEJJVFMsCisJTVRLX0RQSV9PVVRfQklUX05VTV8xMkJJ
VFMsCisJTVRLX0RQSV9PVVRfQklUX05VTV8xNkJJVFMKK307CisKK2VudW0gbXRrX2RwaV9vdXRf
eWNfbWFwIHsKKwlNVEtfRFBJX09VVF9ZQ19NQVBfUkdCLAorCU1US19EUElfT1VUX1lDX01BUF9D
WUNZLAorCU1US19EUElfT1VUX1lDX01BUF9ZQ1lDLAorCU1US19EUElfT1VUX1lDX01BUF9DWSwK
KwlNVEtfRFBJX09VVF9ZQ19NQVBfWUMKK307CisKK2VudW0gbXRrX2RwaV9vdXRfY2hhbm5lbF9z
d2FwIHsKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCLAorCU1US19EUElfT1VUX0NIQU5O
RUxfU1dBUF9HQlIsCisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JSRywKKwlNVEtfRFBJX09V
VF9DSEFOTkVMX1NXQVBfUkJHLAorCU1US19EUElfT1VUX0NIQU5ORUxfU1dBUF9HUkIsCisJTVRL
X0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JHUgorfTsKKworZW51bSBtdGtfZHBpX291dF9jb2xvcl9m
b3JtYXQgeworCU1US19EUElfQ09MT1JfRk9STUFUX1JHQiwKKwlNVEtfRFBJX0NPTE9SX0ZPUk1B
VF9SR0JfRlVMTCwKKwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDQsCisJTVRLX0RQSV9D
T0xPUl9GT1JNQVRfWUNCQ1JfNDIyLAorCU1US19EUElfQ09MT1JfRk9STUFUX1hWX1lDQywKKwlN
VEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCwKKwlNVEtfRFBJX0NPTE9SX0ZPUk1B
VF9ZQ0JDUl80MjJfRlVMTAorfTsKKworc3RydWN0IG10a19kcGkgeworCXN0cnVjdCBtdGtfZGRw
X2NvbXAgZGRwX2NvbXA7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJdm9pZCBfX2lv
bWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2xrICplbmdpbmVfY2xr
OworCXN0cnVjdCBjbGsgKnBpeGVsX2NsazsKKwlzdHJ1Y3QgY2xrICp0dmRfY2xrOworCWludCBp
cnE7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwllbnVtIG10a19kcGlfb3V0X2Nv
bG9yX2Zvcm1hdCBjb2xvcl9mb3JtYXQ7CisJZW51bSBtdGtfZHBpX291dF95Y19tYXAgeWNfbWFw
OworCWVudW0gbXRrX2RwaV9vdXRfYml0X251bSBiaXRfbnVtOworCWVudW0gbXRrX2RwaV9vdXRf
Y2hhbm5lbF9zd2FwIGNoYW5uZWxfc3dhcDsKKwlib29sIHBvd2VyX3N0YTsKKwl1OCBwb3dlcl9j
dGw7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHBpICptdGtfZHBpX2Zyb21fZW5j
b2RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlLCBz
dHJ1Y3QgbXRrX2RwaSwgZW5jb2Rlcik7Cit9CisKK2ludCBtdGtfZHBpX3NldF9kaXNwbGF5X21v
ZGUoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg
Km1vZGUpOworCisjZW5kaWYgLyogX01US19EUElfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcGlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNmFk
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9y
ZWdzLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFU
ZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYg
X19NVEtfRFBJX1JFR1NfSAorI2RlZmluZSBfX01US19EUElfUkVHU19ICisKKyNkZWZpbmUgRFBJ
X0VOCQkJMHgwMAorI2RlZmluZSBFTgkJCQlCSVQoMCkKKworI2RlZmluZSBEUElfUkVUCQkJMHgw
NAorI2RlZmluZSBSU1QJCQkJQklUKDApCisKKyNkZWZpbmUgRFBJX0lOVEVOCQkweDA4CisjZGVm
aW5lIElOVF9WU1lOQ19FTgkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX0VOCQkJQklUKDEpCisj
ZGVmaW5lIElOVF9VTkRFUkZMT1dfRU4JCUJJVCgyKQorCisjZGVmaW5lIERQSV9JTlRTVEEJCTB4
MEMKKyNkZWZpbmUgSU5UX1ZTWU5DX1NUQQkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX1NUQQkJ
CUJJVCgxKQorI2RlZmluZSBJTlRfVU5ERVJGTE9XX1NUQQkJQklUKDIpCisKKyNkZWZpbmUgRFBJ
X0NPTgkJCTB4MTAKKyNkZWZpbmUgQkdfRU5BQkxFCQkJQklUKDApCisjZGVmaW5lIElOX1JCX1NX
QVAJCQlCSVQoMSkKKyNkZWZpbmUgSU5UTF9FTgkJCQlCSVQoMikKKyNkZWZpbmUgVERGUF9FTgkJ
CQlCSVQoMykKKyNkZWZpbmUgQ0xQRl9FTgkJCQlCSVQoNCkKKyNkZWZpbmUgWVVWNDIyX0VOCQkJ
QklUKDUpCisjZGVmaW5lIENTQ19FTkFCTEUJCQlCSVQoNikKKyNkZWZpbmUgUjYwMV9TRUwJCQlC
SVQoNykKKyNkZWZpbmUgRU1CU1lOQ19FTgkJCUJJVCg4KQorI2RlZmluZSBWU19MT0REX0VOCQkJ
QklUKDE2KQorI2RlZmluZSBWU19MRVZFTl9FTgkJCUJJVCgxNykKKyNkZWZpbmUgVlNfUk9ERF9F
TgkJCUJJVCgxOCkKKyNkZWZpbmUgVlNfUkVWRU4JCQlCSVQoMTkpCisjZGVmaW5lIEZBS0VfREVf
TE9ERAkJCUJJVCgyMCkKKyNkZWZpbmUgRkFLRV9ERV9MRVZFTgkJCUJJVCgyMSkKKyNkZWZpbmUg
RkFLRV9ERV9ST0RECQkJQklUKDIyKQorI2RlZmluZSBGQUtFX0RFX1JFVkVOCQkJQklUKDIzKQor
CisjZGVmaW5lIERQSV9PVVRQVVRfU0VUVElORwkweDE0CisjZGVmaW5lIENIX1NXQVAJCQkJMAor
I2RlZmluZSBDSF9TV0FQX01BU0sJCQkoMHg3IDw8IDApCisjZGVmaW5lIFNXQVBfUkdCCQkJMHgw
MAorI2RlZmluZSBTV0FQX0dCUgkJCTB4MDEKKyNkZWZpbmUgU1dBUF9CUkcJCQkweDAyCisjZGVm
aW5lIFNXQVBfUkJHCQkJMHgwMworI2RlZmluZSBTV0FQX0dSQgkJCTB4MDQKKyNkZWZpbmUgU1dB
UF9CR1IJCQkweDA1CisjZGVmaW5lIEJJVF9TV0FQCQkJQklUKDMpCisjZGVmaW5lIEJfTUFTSwkJ
CQlCSVQoNCkKKyNkZWZpbmUgR19NQVNLCQkJCUJJVCg1KQorI2RlZmluZSBSX01BU0sJCQkJQklU
KDYpCisjZGVmaW5lIERFX01BU0sJCQkJQklUKDgpCisjZGVmaW5lIEhTX01BU0sJCQkJQklUKDkp
CisjZGVmaW5lIFZTX01BU0sJCQkJQklUKDEwKQorI2RlZmluZSBERV9QT0wJCQkJQklUKDEyKQor
I2RlZmluZSBIU1lOQ19QT0wJCQlCSVQoMTMpCisjZGVmaW5lIFZTWU5DX1BPTAkJCUJJVCgxNCkK
KyNkZWZpbmUgQ0tfUE9MCQkJCUJJVCgxNSkKKyNkZWZpbmUgT0VOX09GRgkJCQlCSVQoMTYpCisj
ZGVmaW5lIEVER0VfU0VMCQkJQklUKDE3KQorI2RlZmluZSBPVVRfQklUCQkJCTE4CisjZGVmaW5l
IE9VVF9CSVRfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9VVF9CSVRfOAkJCTB4MDAKKyNk
ZWZpbmUgT1VUX0JJVF8xMAkJCTB4MDEKKyNkZWZpbmUgT1VUX0JJVF8xMgkJCTB4MDIKKyNkZWZp
bmUgT1VUX0JJVF8xNgkJCTB4MDMKKyNkZWZpbmUgWUNfTUFQCQkJCTIwCisjZGVmaW5lIFlDX01B
UF9NQVNLCQkJKDB4NyA8PCAyMCkKKyNkZWZpbmUgWUNfTUFQX1JHQgkJCTB4MDAKKyNkZWZpbmUg
WUNfTUFQX0NZQ1kJCQkweDA0CisjZGVmaW5lIFlDX01BUF9ZQ1lDCQkJMHgwNQorI2RlZmluZSBZ
Q19NQVBfQ1kJCQkweDA2CisjZGVmaW5lIFlDX01BUF9ZQwkJCTB4MDcKKworI2RlZmluZSBEUElf
U0laRQkJMHgxOAorI2RlZmluZSBIU0laRQkJCQkwCisjZGVmaW5lIEhTSVpFX01BU0sJCQkoMHgx
RkZGIDw8IDApCisjZGVmaW5lIFZTSVpFCQkJCTE2CisjZGVmaW5lIFZTSVpFX01BU0sJCQkoMHgx
RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9ERFJfU0VUVElORwkJMHgxQworI2RlZmluZSBERFJf
RU4JCQkJQklUKDApCisjZGVmaW5lIERERFJfU0VMCQkJQklUKDEpCisjZGVmaW5lIEREUl80UEhB
U0UJCQlCSVQoMikKKyNkZWZpbmUgRERSX1dJRFRICQkJKDB4MyA8PCA0KQorI2RlZmluZSBERFJf
UEFEX01PREUJCQkoMHgxIDw8IDgpCisKKyNkZWZpbmUgRFBJX1RHRU5fSFdJRFRICQkweDIwCisj
ZGVmaW5lIEhQVwkJCQkwCisjZGVmaW5lIEhQV19NQVNLCQkJKDB4RkZGIDw8IDApCisKKyNkZWZp
bmUgRFBJX1RHRU5fSFBPUkNICQkweDI0CisjZGVmaW5lIEhCUAkJCQkwCisjZGVmaW5lIEhCUF9N
QVNLCQkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEhGUAkJCQkxNgorI2RlZmluZSBIRlBfTUFTSwkJ
CSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfVEdFTl9WV0lEVEgJCTB4MjgKKyNkZWZpbmUg
RFBJX1RHRU5fVlBPUkNICQkweDJDCisKKyNkZWZpbmUgVlNZTkNfV0lEVEhfU0hJRlQJCTAKKyNk
ZWZpbmUgVlNZTkNfV0lEVEhfTUFTSwkJKDB4RkZGIDw8IDApCisjZGVmaW5lIFZTWU5DX0hBTEZf
TElORV9TSElGVAkJMTYKKyNkZWZpbmUgVlNZTkNfSEFMRl9MSU5FX01BU0sJCUJJVCgxNikKKyNk
ZWZpbmUgVlNZTkNfQkFDS19QT1JDSF9TSElGVAkJMAorI2RlZmluZSBWU1lOQ19CQUNLX1BPUkNI
X01BU0sJCSgweEZGRiA8PCAwKQorI2RlZmluZSBWU1lOQ19GUk9OVF9QT1JDSF9TSElGVAkJMTYK
KyNkZWZpbmUgVlNZTkNfRlJPTlRfUE9SQ0hfTUFTSwkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5l
IERQSV9CR19IQ05UTAkJMHgzMAorI2RlZmluZSBCR19SSUdIVAkJCSgweDFGRkYgPDwgMCkKKyNk
ZWZpbmUgQkdfTEVGVAkJCQkoMHgxRkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9CR19WQ05UTAkJ
MHgzNAorI2RlZmluZSBCR19CT1QJCQkJKDB4MUZGRiA8PCAwKQorI2RlZmluZSBCR19UT1AJCQkJ
KDB4MUZGRiA8PCAxNikKKworI2RlZmluZSBEUElfQkdfQ09MT1IJCTB4MzgKKyNkZWZpbmUgQkdf
QgkJCQkoMHhGIDw8IDApCisjZGVmaW5lIEJHX0cJCQkJKDB4RiA8PCA4KQorI2RlZmluZSBCR19S
CQkJCSgweEYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0ZJRk9fQ1RMCQkweDNDCisjZGVmaW5lIEZJ
Rk9fVkFMSURfU0VUCQkJKDB4MUYgPDwgMCkKKyNkZWZpbmUgRklGT19SU1RfU0VMCQkJKDB4MSA8
PCA4KQorCisjZGVmaW5lIERQSV9TVEFUVVMJCTB4NDAKKyNkZWZpbmUgVkNPVU5URVIJCQkoMHgx
RkZGIDw8IDApCisjZGVmaW5lIERQSV9CVVNZCQkJQklUKDE2KQorI2RlZmluZSBPVVRFTgkJCQlC
SVQoMTcpCisjZGVmaW5lIEZJRUxECQkJCUJJVCgyMCkKKyNkZWZpbmUgVERMUgkJCQlCSVQoMjEp
CisKKyNkZWZpbmUgRFBJX1RNT0RFCQkweDQ0CisjZGVmaW5lIERQSV9PRU5fT04JCQlCSVQoMCkK
KworI2RlZmluZSBEUElfQ0hFQ0tTVU0JCTB4NDgKKyNkZWZpbmUgRFBJX0NIRUNLU1VNX01BU0sJ
CSgweEZGRkZGRiA8PCAwKQorI2RlZmluZSBEUElfQ0hFQ0tTVU1fUkVBRFkJCUJJVCgzMCkKKyNk
ZWZpbmUgRFBJX0NIRUNLU1VNX0VOCQkJQklUKDMxKQorCisjZGVmaW5lIERQSV9EVU1NWQkJMHg1
MAorI2RlZmluZSBEUElfRFVNTVlfTUFTSwkJCSgweEZGRkZGRkZGIDw8IDApCisKKyNkZWZpbmUg
RFBJX1RHRU5fVldJRFRIX0xFVkVOCTB4NjgKKyNkZWZpbmUgRFBJX1RHRU5fVlBPUkNIX0xFVkVO
CTB4NkMKKyNkZWZpbmUgRFBJX1RHRU5fVldJRFRIX1JPREQJMHg3MAorI2RlZmluZSBEUElfVEdF
Tl9WUE9SQ0hfUk9ERAkweDc0CisjZGVmaW5lIERQSV9UR0VOX1ZXSURUSF9SRVZFTgkweDc4Cisj
ZGVmaW5lIERQSV9UR0VOX1ZQT1JDSF9SRVZFTgkweDdDCisKKyNkZWZpbmUgRFBJX0VTQVZfVlRJ
TUlOR19MT0RECTB4ODAKKyNkZWZpbmUgRVNBVl9WT0ZTVF9MT0RECQkJKDB4RkZGIDw8IDApCisj
ZGVmaW5lIEVTQVZfVldJRF9MT0RECQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FW
X1ZUSU1JTkdfTEVWRU4JMHg4NAorI2RlZmluZSBFU0FWX1ZPRlNUX0xFVkVOCQkoMHhGRkYgPDwg
MCkKKyNkZWZpbmUgRVNBVl9WV0lEX0xFVkVOCQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQ
SV9FU0FWX1ZUSU1JTkdfUk9ERAkweDg4CisjZGVmaW5lIEVTQVZfVk9GU1RfUk9ERAkJCSgweEZG
RiA8PCAwKQorI2RlZmluZSBFU0FWX1ZXSURfUk9ERAkJCSgweEZGRiA8PCAxNikKKworI2RlZmlu
ZSBEUElfRVNBVl9WVElNSU5HX1JFVkVOCTB4OEMKKyNkZWZpbmUgRVNBVl9WT0ZTVF9SRVZFTgkJ
KDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9SRVZFTgkJCSgweEZGRiA8PCAxNikKKwor
I2RlZmluZSBEUElfRVNBVl9GVElNSU5HCTB4OTAKKyNkZWZpbmUgRVNBVl9GT0ZTVF9PREQJCQko
MHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9GT0ZTVF9FVkVOCQkJKDB4RkZGIDw8IDE2KQorCisj
ZGVmaW5lIERQSV9DTFBGX1NFVFRJTkcJMHg5NAorI2RlZmluZSBDTFBGX1RZUEUJCQkoMHgzIDw8
IDApCisjZGVmaW5lIFJPVU5EX0VOCQkJQklUKDQpCisKKyNkZWZpbmUgRFBJX1lfTElNSVQJCTB4
OTgKKyNkZWZpbmUgWV9MSU1JTlRfQk9UCQkJMAorI2RlZmluZSBZX0xJTUlOVF9CT1RfTUFTSwkJ
KDB4RkZGIDw8IDApCisjZGVmaW5lIFlfTElNSU5UX1RPUAkJCTE2CisjZGVmaW5lIFlfTElNSU5U
X1RPUF9NQVNLCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0NfTElNSVQJCTB4OUMKKyNk
ZWZpbmUgQ19MSU1JVF9CT1QJCQkwCisjZGVmaW5lIENfTElNSVRfQk9UX01BU0sJCSgweEZGRiA8
PCAwKQorI2RlZmluZSBDX0xJTUlUX1RPUAkJCTE2CisjZGVmaW5lIENfTElNSVRfVE9QX01BU0sJ
CSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfWVVWNDIyX1NFVFRJTkcJMHhBMAorI2RlZmlu
ZSBVVl9TV0FQCQkJCUJJVCgwKQorI2RlZmluZSBDUl9ERUxTRUwJCQlCSVQoNCkKKyNkZWZpbmUg
Q0JfREVMU0VMCQkJQklUKDUpCisjZGVmaW5lIFlfREVMU0VMCQkJQklUKDYpCisjZGVmaW5lIERF
X0RFTFNFTAkJCUJJVCg3KQorCisjZGVmaW5lIERQSV9FTUJTWU5DX1NFVFRJTkcJMHhBNAorI2Rl
ZmluZSBFTUJTWU5DX1JfQ1JfRU4JCQlCSVQoMCkKKyNkZWZpbmUgRU1QU1lOQ19HX1lfRU4JCQlC
SVQoMSkKKyNkZWZpbmUgRU1QU1lOQ19CX0NCX0VOCQkJQklUKDIpCisjZGVmaW5lIEVTQVZfRl9J
TlYJCQlCSVQoNCkKKyNkZWZpbmUgRVNBVl9WX0lOVgkJCUJJVCg1KQorI2RlZmluZSBFU0FWX0hf
SU5WCQkJQklUKDYpCisjZGVmaW5lIEVTQVZfQ09ERV9NQU4JCQlCSVQoOCkKKyNkZWZpbmUgVlNf
T1VUX1NFTAkJCSgweDcgPDwgMTIpCisKKyNkZWZpbmUgRFBJX0VTQVZfQ09ERV9TRVQwCTB4QTgK
KyNkZWZpbmUgRVNBVl9DT0RFMAkJCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX0NPREUxCQkJ
KDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FWX0NPREVfU0VUMQkweEFDCisjZGVmaW5l
IEVTQVZfQ09ERTIJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9DT0RFM19NU0IJCQlCSVQo
MTYpCisKKyNkZWZpbmUgRFBJX0hfRlJFX0NPTgkJMHhFMAorI2RlZmluZSBIX0ZSRV8yTgkJCUJJ
VCgyNSkKKyNlbmRpZiAvKiBfX01US19EUElfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jCmluZGV4IGVkOGJjM2MuLmEwODEyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01NDAsNiArNTQwLDcgQEAgc3RhdGljIHN0cnVjdCBw
bGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2Rpc3Bf
cmRtYV9kcml2ZXIsCiAJJm10a19kc2lfZHJpdmVyLAogCSZtdGtfbWlwaV90eF9kcml2ZXIsCisJ
Jm10a19kcGlfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZv
aWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IDJjZDA0ZTAuLmIx
MzQwZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5o
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC01MSw1ICs1
MSw2IEBAIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7
CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlcjsKIGV4
dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVyOwogZXh0ZXJuIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX2RwaV9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICov
Ci0tIAoyLjcuMC5yYzMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w
Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl
dmVsCg==