Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Mar 2014 11:11:38 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   [RFC] lm75 kernel driver and bsnmp module
Message-ID:  <CAB=2f8wqTqQekBPRGdG%2BBqTn-yt1BX-3DW6K5HBt2jptc4g4-g@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--047d7b86ccbc79981504f4cdffda
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I have this driver for the lm75 an i2c digital temperature sensor, it
works (and it is tested) on FDT and non FDT systems.

I need some help (review) for the bsnmp module. The bsnmp module reads
the sysctl(8) interface, find out how many sensors you have on your
system and export some of the sensor's information over SNMP.

Together they create a very easy way to monitor (graph and whatever)
the sensor temperature over SNMP.

The lm75 sensor is cheap and can be easily connected to most of SBCs we support.

It is also a good point of start for people who want to work with
GPIO, sensors and SNMP on FreeBSD.

Here is a sample of the data exported over SNMP: http://pastebin.com/cHYYBY1R

Comments ?

Regards,
Luiz

--047d7b86ccbc79981504f4cdffda
Content-Type: text/plain; charset=US-ASCII; name="lm75.diff"
Content-Disposition: attachment; filename="lm75.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hsvtugdh0

SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp
c2lvbiAyNjI4NjApCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMTQ0Myw2
ICsxNDQzLDcgQEAKIGRldi9paWNidXMvaWljc21iLmMJCW9wdGlvbmFsIGlpY3NtYgkJCQlcCiAJ
ZGVwZW5kZW5jeQkiaWljYnVzX2lmLmgiCiBkZXYvaWljYnVzL2lpY29jLmMJCW9wdGlvbmFsIGlp
Y29jCitkZXYvaWljYnVzL2xtNzUuYwkJb3B0aW9uYWwgbG03NQogZGV2L2lpY2J1cy9wY2Y4NTYz
LmMJCW9wdGlvbmFsIHBjZjg1NjMKIGRldi9paWNidXMvczM1MzkwYS5jCQlvcHRpb25hbCBzMzUz
OTBhCiBkZXYvaWlyL2lpci5jCQkJb3B0aW9uYWwgaWlyCkluZGV4OiBzeXMvZGV2L2lpY2J1cy9s
bTc1LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9paWNidXMvbG03NS5jCShyZXZpc2lvbiAwKQor
Kysgc3lzL2Rldi9paWNidXMvbG03NS5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTU3IEBA
CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBBbmRyZWFzIFRvYmxlci4KKyAqIENvcHlyaWdo
dCAoYykgMjAxMyBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZyZWVic2Qub3JnPi4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8
c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJvcHRfcGxh
dGZvcm0uaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4K
KyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1
ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lz
L3N5c3RtLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L2lp
Y2J1cy9paWNidXMuaD4KKyNpbmNsdWRlIDxkZXYvaWljYnVzL2lpY29uZi5oPgorCisjaWZkZWYg
RkRUCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3
X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjZW5kaWYKKworLyog
TE03NSByZWdpc3RlcnMuICovCisjZGVmaW5lCUxNNzVfVEVNUAkweDAKKyNkZWZpbmUJTE03NV9D
T05GCTB4MQorI2RlZmluZQlMTTc1X0NPTkZfRlNISUZUCTMKKyNkZWZpbmUJTE03NV9DT05GX0ZB
VUxUCQkweDE4CisjZGVmaW5lCUxNNzVfQ09ORl9QT0wJCTB4MDQKKyNkZWZpbmUJTE03NV9DT05G
X01PREUJCTB4MDIKKyNkZWZpbmUJTE03NV9DT05GX1NIVVRECQkweDAxCisjZGVmaW5lCUxNNzVf
Q09ORl9NQVNLCQkweDFmCisjZGVmaW5lCUxNNzVfVEhZU1QJMHgyCisjZGVmaW5lCUxNNzVfVE9T
CTB4MworCisvKiBMTTc1IGNvbnN0YW50cy4gKi8KKyNkZWZpbmUJTE03NV9NSU5fVEVNUAktNTUK
KyNkZWZpbmUJTE03NV9NQVhfVEVNUAkxMjUKKyNkZWZpbmUJTE03NV8wNTAwQwkweDgwCisjZGVm
aW5lCUxNNzVfMDI1MEMJMHg0MAorI2RlZmluZQlMTTc1XzAxMjVDCTB4MjAKKyNkZWZpbmUJTE03
NV9NU0IJMHg4MDAwCisjZGVmaW5lCUxNNzVfTkVHX0JJVAlMTTc1X01TQgorI2RlZmluZQlUWl9a
RVJPQwkyNzMyCisKKy8qIExNNzUgc3VwcG9ydGVkIG1vZGVscy4gKi8KKyNkZWZpbmUJSFdUWVBF
X05PTkUJMAorI2RlZmluZQlIV1RZUEVfTE03NQkxCisjZGVmaW5lCUhXVFlQRV9MTTc1QQkyCisK
KyNpZmRlZiBGRFQKK3N0YXRpYyBzdHJ1Y3Qgb2Z3X2NvbXBhdF9kYXRhIGNvbXBhdF9kYXRhW10g
PSB7CisJeyAiZnJlZWJzZCxsbTc1IiwJSFdUWVBFX0xNNzUgfSwKKwl7ICJmcmVlYnNkLGxtNzVh
IiwJSFdUWVBFX0xNNzVBIH0sCisJeyBOVUxMLAkJCUhXVFlQRV9OT05FIH0sCit9OworI2VuZGlm
CisKKy8qIFJlZ3VsYXIgYnVzIGF0dGFjaG1lbnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICBs
bTc1X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQgIGxtNzVfYXR0YWNoKGRldmljZV90KTsK
Kworc3RydWN0IGxtNzVfc29mdGMgeworCWRldmljZV90CQlzY19kZXY7CisJc3RydWN0IGludHJf
Y29uZmlnX2hvb2sgZW51bV9ob29rOworCWludDMyX3QJCQlzY19od3R5cGU7CisJdWludDMyX3QJ
CXNjX2FkZHI7CisJdWludDMyX3QJCXNjX2NvbmY7Cit9OworCitpbnQgbG03NV9mYXVsdHNbNF0g
PSB7IDEsIDIsIDQsIDYgfTsKKworLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQg
IGxtNzVfY29uZl9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV9j
b25mX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV90ZW1wX3Jl
YWQoc3RydWN0IGxtNzVfc29mdGMgKiwgdWludDhfdCwgaW50ICopOworc3RhdGljIGludCAgbG03
NV90ZW1wX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICosIHVpbnQ4X3QsIGludCk7CitzdGF0aWMg
dm9pZCBsbTc1X3N0YXJ0KHZvaWQgKik7CitzdGF0aWMgaW50ICBsbTc1X3JlYWQoZGV2aWNlX3Qs
IHVpbnQzMl90LCB1aW50OF90LCB1aW50OF90ICosIHNpemVfdCk7CitzdGF0aWMgaW50ICBsbTc1
X3dyaXRlKGRldmljZV90LCB1aW50MzJfdCwgdWludDhfdCAqLCBzaXplX3QpOworc3RhdGljIGlu
dCAgbG03NV9zdHJfbW9kZShjaGFyICopOworc3RhdGljIGludCAgbG03NV9zdHJfcG9sKGNoYXIg
Kik7CitzdGF0aWMgaW50ICBsbTc1X3RlbXBfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwor
c3RhdGljIGludCAgbG03NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworc3Rh
dGljIGludCAgbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBp
bnQgIGxtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgIGxt
NzVfc2h1dGRvd25fc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworCitzdGF0aWMgZGV2aWNl
X21ldGhvZF90ICBsbTc1X21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJ
REVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWxtNzVfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2Vf
YXR0YWNoLAlsbTc1X2F0dGFjaCksCisKKwlERVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJp
dmVyX3QgbG03NV9kcml2ZXIgPSB7CisJImxtNzUiLAorCWxtNzVfbWV0aG9kcywKKwlzaXplb2Yo
c3RydWN0IGxtNzVfc29mdGMpCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBsbTc1X2RldmNsYXNz
OworCitEUklWRVJfTU9EVUxFKGxtNzUsIGlpY2J1cywgbG03NV9kcml2ZXIsIGxtNzVfZGV2Y2xh
c3MsIDAsIDApOworCitzdGF0aWMgaW50CitsbTc1X3JlYWQoZGV2aWNlX3QgZGV2LCB1aW50MzJf
dCBhZGRyLCB1aW50OF90IHJlZywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlpbnQg
dHJ5OworCisJc3RydWN0IGlpY19tc2cgbXNnWzJdID0geworCSAgICB7IGFkZHIsIElJQ19NX1dS
IHwgSUlDX01fTk9TVE9QLCAxLCAmcmVnIH0sCisJICAgIHsgYWRkciwgSUlDX01fUkQsIGxlbiwg
ZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190cmFu
c2ZlcihkZXYsIG1zZywgMikgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgwKTsK
KwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJpaWNi
dXMgcmVhZCBmYWlsZWRcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJcGF1c2UoImxtNzVf
cmVhZCIsIGh6KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfd3JpdGUoZGV2aWNlX3QgZGV2
LCB1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCB0cnk7
CisKKwlzdHJ1Y3QgaWljX21zZyBtc2dbMV0gPSB7CisJICAgIHsgYWRkciwgSUlDX01fV1IsIGxl
biwgZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190
cmFuc2ZlcihkZXYsIG1zZywgMSkgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgw
KTsKKwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJp
aWNidXMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXBhdXNlKCJs
bTc1X3dyaXRlIiwgaHopOworCX0KK30KKworc3RhdGljIGludAorbG03NV9wcm9iZShkZXZpY2Vf
dCBkZXYpCit7CisJaW50IHR5cGU7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJdHlwZSA9
IDA7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisjaWZkZWYgRkRUCisJc2MtPnNjX2h3
dHlwZSA9IG9md19idXNfc2VhcmNoX2NvbXBhdGlibGUoZGV2LCBjb21wYXRfZGF0YSktPm9jZF9k
YXRhOworCWlmIChzYy0+c2NfaHd0eXBlID09IEhXVFlQRV9OT05FKQorCQlyZXR1cm4gKEVOWElP
KTsKKyNlbHNlCisJc2MtPnNjX2h3dHlwZSA9IEhXVFlQRV9MTTc1OworCWlmIChyZXNvdXJjZV9p
bnRfdmFsdWUoZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChkZXYpLAorCSAg
ICAibG03NWEiLCAmdHlwZSkgPT0gMCAmJiB0eXBlKQorCQlzYy0+c2NfaHd0eXBlID0gSFdUWVBF
X0xNNzVBOworI2VuZGlmCisKKwlzd2l0Y2ggKHNjLT5zY19od3R5cGUpIHsKKwljYXNlIEhXVFlQ
RV9MTTc1QToKKwkJZGV2aWNlX3NldF9kZXNjKGRldiwgIkxNNzVBIHRlbXBlcmF0dXJlIHNlbnNv
ciIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiTE03NSB0
ZW1wZXJhdHVyZSBzZW5zb3IiKTsKKwl9CisKKwlyZXR1cm4gKEJVU19QUk9CRV9HRU5FUklDKTsK
K30KKworc3RhdGljIGludAorbG03NV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBs
bTc1X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5zY19k
ZXYgPSBkZXY7CisJc2MtPnNjX2FkZHIgPSBpaWNidXNfZ2V0X2FkZHIoZGV2KTsKKworCXNjLT5l
bnVtX2hvb2suaWNoX2Z1bmMgPSBsbTc1X3N0YXJ0OworCXNjLT5lbnVtX2hvb2suaWNoX2FyZyA9
IGRldjsKKworCS8qCisJICogV2UgaGF2ZSB0byB3YWl0IHVudGlsIGludGVycnVwdHMgYXJlIGVu
YWJsZWQuIEkyQyByZWFkIGFuZCB3cml0ZQorCSAqIG9ubHkgd29ya3MgaWYgdGhlIGludGVycnVw
dHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoY29uZmlnX2ludHJob29rX2VzdGFibGlzaCgm
c2MtPmVudW1faG9vaykgIT0gMCkKKwkJcmV0dXJuIChFTk9NRU0pOworCisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIHZvaWQKK2xtNzVfc3RhcnQodm9pZCAqeGRldikKK3sKKwlkZXZpY2VfdCBk
ZXY7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKmN0
eDsKKwlzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZV9ub2RlOworCXN0cnVjdCBzeXNjdGxfb2lkX2xp
c3QgKnRyZWU7CisKKwlkZXYgPSAoZGV2aWNlX3QpeGRldjsKKwlzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKwljdHggPSBkZXZpY2VfZ2V0X3N5c2N0bF9jdHgoZGV2KTsKKwl0cmVlX25vZGUg
PSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJdHJlZSA9IFNZU0NUTF9DSElMRFJFTih0
cmVlX25vZGUpOworCisJY29uZmlnX2ludHJob29rX2Rpc2VzdGFibGlzaCgmc2MtPmVudW1faG9v
ayk7CisKKwkvKiBSZWFkIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLworCWlmIChsbTc1
X2NvbmZfcmVhZChzYykgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNhbm5vdCByZWFk
IHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBU
ZW1wZXJhdHVyZS4gKi8KKwlTWVNDVExfQUREX1BST0MoY3R4LCB0cmVlLCBPSURfQVVUTywgInRl
bXBlcmF0dXJlIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JEIHwgQ1RMRkxBR19NUFNB
RkUsIGRldiwgTE03NV9URU1QLAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiQ3VycmVu
dCB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi
dGh5c3QiLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcgfCBDVExGTEFHX01QU0FGRSwg
ZGV2LCBMTTc1X1RIWVNULAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiSHlzdGVyZXNp
cyB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi
dG9zIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXIHwgQ1RMRkxBR19NUFNBRkUsIGRl
diwgTE03NV9UT1MsCisJICAgIGxtNzVfdGVtcF9zeXNjdGwsICJJSyIsICJPdmVydGVtcGVyYXR1
cmUiKTsKKworCS8qIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KKwlTWVNDVExfQUREX1BS
T0MoY3R4LCB0cmVlLCBPSURfQVVUTywgImZhdWx0cyIsCisJICAgIENUTEZMQUdfUlcgfCBDVExU
WVBFX1VJTlQsIGRldiwgMCwKKwkgICAgbG03NV9mYXVsdHNfc3lzY3RsLCAiSVUiLCAiTE03NSBm
YXVsdCBxdWV1ZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAibW9k
ZSIsCisJICAgIENUTEZMQUdfUlcgfCBDVExUWVBFX1NUUklORywgZGV2LCAwLAorCSAgICBsbTc1
X21vZGVfc3lzY3RsLCAiQSIsICJMTTc1IG1vZGUiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCB0
cmVlLCBPSURfQVVUTywgInBvbGFyaXR5IiwKKwkgICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfU1RS
SU5HLCBkZXYsIDAsCisJICAgIGxtNzVfcG9sX3N5c2N0bCwgIkEiLCAiTE03NSBPUyBwb2xhcml0
eSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAic2h1dGRvd24iLAor
CSAgICBDVExGTEFHX1JXIHwgQ1RMVFlQRV9VSU5ULCBkZXYsIDAsCisJICAgIGxtNzVfc2h1dGRv
d25fc3lzY3RsLCAiSVUiLCAiTE03NSBzaHV0ZG93biIpOworfQorCitzdGF0aWMgaW50CitsbTc1
X2NvbmZfcmVhZChzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MpCit7CisJdWludDhfdCBidWY4OworCisJ
aWYgKGxtNzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgTE03NV9DT05GLCAmYnVmOCwg
MSkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXNjLT5zY19jb25mID0gKHVpbnQzMl90KWJ1Zjg7
CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitsbTc1X2NvbmZfd3JpdGUoc3RydWN0
IGxtNzVfc29mdGMgKnNjKQoreworCXVpbnQ4X3QgYnVmOFsyXTsKKworCWJ1ZjhbMF0gPSBMTTc1
X0NPTkY7CisJYnVmOFsxXSA9ICh1aW50OF90KXNjLT5zY19jb25mICYgTE03NV9DT05GX01BU0s7
CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgYnVmOCwgMikgPCAw
KQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVf
dGVtcF9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICpzYywgdWludDhfdCByZWcsIGludCAqdGVtcCkK
K3sKKwl1aW50OF90IGJ1ZjhbMl07CisJdWludDE2X3QgYnVmOworCWludCB0OworCisJaWYgKGxt
NzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgcmVnLCBidWY4LCAyKSA8IDApCisJCXJl
dHVybiAoLTEpOworCisJYnVmID0gKGJ1ZjhbMF0gPDwgOCkgfCAoYnVmOFsxXSAmIDB4ZmYpOwor
CisJLyoKKwkgKiBMTTc1IGhhcyBhIDkgYml0IEFEQyB3aXRoIHJlc29sdXRpb24gb2YgMC41IEMg
cGVyIGJpdC4KKwkgKiBMTTc1QSBoYXMgYSAxMSBiaXQgQURDIHdpdGggcmVzb2x1dGlvbiBvZiAw
LjEyNSBDIHBlciBiaXQuCisJICogVGVtcGVyYXR1cmUgaXMgc3RvcmVkIHdpdGggdHdvJ3MgY29t
cGxlbWVudC4KKwkgKi8KKwlpZiAoYnVmICYgTE03NV9ORUdfQklUKQorCQlidWYgPSB+YnVmICsg
MTsKKwkqdGVtcCA9ICgoaW50MTZfdClidWYgPj4gOCkgKiAxMDsKKwl0ID0gMDsKKwlpZiAoc2Mt
PnNjX2h3dHlwZSA9PSBIV1RZUEVfTE03NUEpIHsKKwkJaWYgKGJ1ZiAmIExNNzVfMDEyNUMpCisJ
CQl0ICs9IDEyNTsKKwkJaWYgKGJ1ZiAmIExNNzVfMDI1MEMpCisJCQl0ICs9IDI1MDsKKwl9CisJ
aWYgKGJ1ZiAmIExNNzVfMDUwMEMpCisJCXQgKz0gNTAwOworCXQgLz0gMTAwOworCSp0ZW1wICs9
IHQ7CisJaWYgKGJ1ZiAmIExNNzVfTkVHX0JJVCkKKwkJKnRlbXAgPSAtKCp0ZW1wKTsKKwkqdGVt
cCArPSBUWl9aRVJPQzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfdGVt
cF93cml0ZShzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MsIHVpbnQ4X3QgcmVnLCBpbnQgdGVtcCkKK3sK
Kwl1aW50OF90IGJ1ZjhbM107CisJdWludDE2X3QgYnVmOworCisJaWYgKHRlbXAgPiBMTTc1X01B
WF9URU1QKQorCQl0ZW1wID0gTE03NV9NQVhfVEVNUDsKKwlpZiAodGVtcCA8IExNNzVfTUlOX1RF
TVApCisJCXRlbXAgPSBMTTc1X01JTl9URU1QOworCisJYnVmID0gKHVpbnQxNl90KXRlbXA7CisJ
YnVmIDw8PSA4OworCisJYnVmOFswXSA9IHJlZzsKKwlidWY4WzFdID0gYnVmID4+IDg7CisJYnVm
OFsyXSA9IGJ1ZiAmIDB4ZmY7CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2Nf
YWRkciwgYnVmOCwgMykgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyBpbnQKK2xtNzVfc3RyX21vZGUoY2hhciAqYnVmKQoreworCWludCBsZW4sIHJ0cm47
CisKKwlydHJuID0gLTE7CisJbGVuID0gc3RybGVuKGJ1Zik7CisJaWYgKGxlbiA+IDIgJiYgc3Ry
bmNhc2VjbXAoImludGVycnVwdCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMTsKKwllbHNl
IGlmIChsZW4gPiAyICYmIHN0cm5jYXNlY21wKCJjb21wYXJhdG9yIiwgYnVmLCBsZW4pID09IDAp
CisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGludAorbG03NV9z
dHJfcG9sKGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGVuLCBydHJuOworCisJcnRybiA9IC0xOworCWxl
biA9IHN0cmxlbihidWYpOworCWlmIChsZW4gPiAxICYmIHN0cm5jYXNlY21wKCJoaWdoIiwgYnVm
LCBsZW4pID09IDApCisJCXJ0cm4gPSAxOworCWVsc2UgaWYgKGxlbiA+IDEgJiYgc3RybmNhc2Vj
bXAoImxvdyIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMDsKKwllbHNlIGlmIChsZW4gPiA4
ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtaGlnaCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0g
MTsKKwllbHNlIGlmIChsZW4gPiA4ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtbG93IiwgYnVmLCBs
ZW4pID09IDApCisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGlu
dAorbG03NV90ZW1wX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWRldmljZV90IGRl
djsKKwlpbnQgZXJyb3IsIHRlbXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXVpbnQ4X3Qg
cmVnOworCisJZGV2ID0gYXJnMTsKKwlyZWcgPSBhcmcyOworCXNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOworCisJaWYgKGxtNzVfdGVtcF9yZWFkKHNjLCByZWcsICZ0ZW1wKSAhPSAwKQorCQly
ZXR1cm4gKEVJTyk7CisKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0ZW1wLCAw
LCByZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVy
biAoZXJyb3IpOworCisJaWYgKGxtNzVfdGVtcF93cml0ZShzYywgcmVnLCB0ZW1wKSAhPSAwKQor
CQlyZXR1cm4gKEVJTyk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorbG03
NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2Owor
CWludCBlcnJvciwgZmF1bHRzLCBpLCBuZXdmLCB0bXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNj
OworCisJZGV2ID0gYXJnMTsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl0bXAgPSAo
c2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfRkFVTFQpID4+IExNNzVfQ09ORl9GU0hJRlQ7CisJaWYg
KHRtcCA+IG5pdGVtcyhsbTc1X2ZhdWx0cykpCisJCXRtcCA9IG5pdGVtcyhsbTc1X2ZhdWx0cyk7
CisJZmF1bHRzID0gbG03NV9mYXVsdHNbdG1wXTsKKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9p
bnQob2lkcCwgJmZhdWx0cywgMCwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0
ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChmYXVsdHMgIT0gbG03NV9mYXVs
dHNbdG1wXSkgeworCQluZXdmID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5pdGVtcyhsbTc1X2Zh
dWx0cyk7IGkrKykKKwkJCWlmIChmYXVsdHMgPj0gbG03NV9mYXVsdHNbaV0pCisJCQkJbmV3ZiA9
IGk7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfRkFVTFQ7CisJCXNjLT5zY19jb25mIHw9
IG5ld2YgPDwgTE03NV9DT05GX0ZTSElGVDsKKwkJaWYgKGxtNzVfY29uZl93cml0ZShzYykgIT0g
MCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj
IGludAorbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWNoYXIgYnVm
WzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBtb2RlLCBuZXdtOworCXN0cnVjdCBs
bTc1X3NvZnRjICpzYzsKKworCWRldiA9IGFyZzE7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJaWYgKHNjLT5zY19jb25mICYgTE03NV9DT05GX01PREUpIHsKKwkJbW9kZSA9IDE7CisJ
CXN0cmxjcHkoYnVmLCAiaW50ZXJydXB0Iiwgc2l6ZW9mKGJ1ZikpOworCX0gZWxzZSB7CisJCW1v
ZGUgPSAwOworCQlzdHJsY3B5KGJ1ZiwgImNvbXBhcmF0b3IiLCBzaXplb2YoYnVmKSk7CisJfQor
CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX3N0cmluZyhvaWRwLCBidWYsIHNpemVvZihidWYpLCBy
ZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAo
ZXJyb3IpOworCisJbmV3bSA9IGxtNzVfc3RyX21vZGUoYnVmKTsKKwlpZiAobmV3bSAhPSAtMSAm
JiBtb2RlICE9IG5ld20pIHsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9NT0RFOworCQlp
ZiAobmV3bSA9PSAxKQorCQkJc2MtPnNjX2NvbmYgfD0gTE03NV9DT05GX01PREU7CisJCWlmIChs
bTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7CisJfQorCisJcmV0dXJu
IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExF
Ul9BUkdTKQoreworCWNoYXIgYnVmWzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBu
ZXdwLCBwb2w7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJZGV2ID0gYXJnMTsKKwlzYyA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpZiAoc2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfUE9M
KSB7CisJCXBvbCA9IDE7CisJCXN0cmxjcHkoYnVmLCAiYWN0aXZlLWhpZ2giLCBzaXplb2YoYnVm
KSk7CisJfSBlbHNlIHsKKwkJcG9sID0gMDsKKwkJc3RybGNweShidWYsICJhY3RpdmUtbG93Iiwg
c2l6ZW9mKGJ1ZikpOworCX0KKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9zdHJpbmcob2lkcCwg
YnVmLCBzaXplb2YoYnVmKSwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9
PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCW5ld3AgPSBsbTc1X3N0cl9wb2woYnVmKTsK
KwlpZiAobmV3cCAhPSAtMSAmJiBwb2wgIT0gbmV3cCkgeworCQlzYy0+c2NfY29uZiAmPSB+TE03
NV9DT05GX1BPTDsKKwkJaWYgKG5ld3AgPT0gMSkKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09O
Rl9QT0w7CisJCWlmIChsbTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7
CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfc2h1dGRvd25f
c3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2OworCWludCBlcnJv
ciwgc2h1dGRvd24sIHRtcDsKKwlzdHJ1Y3QgbG03NV9zb2Z0YyAqc2M7CisKKwlkZXYgPSBhcmcx
OworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXRtcCA9IHNodXRkb3duID0gKHNjLT5z
Y19jb25mICYgTE03NV9DT05GX1NIVVREKSA/IDEgOiAwOworCisJZXJyb3IgPSBzeXNjdGxfaGFu
ZGxlX2ludChvaWRwLCAmc2h1dGRvd24sIDAsIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVx
LT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpZiAoc2h1dGRvd24gIT0g
dG1wKSB7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfU0hVVEQ7CisJCWlmIChzaHV0ZG93
bikKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09ORl9TSFVURDsKKwkJaWYgKGxtNzVfY29uZl93
cml0ZShzYykgIT0gMCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsK
K30KClByb3BlcnR5IGNoYW5nZXMgb246IHN5cy9kZXYvaWljYnVzL2xtNzUuYwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl
eHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdv
cmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUv
bWFuL21hbjQvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mjg2MCkKKysrIHNoYXJlL21hbi9tYW40L01h
a2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDcgQEAKIAlsZ2UuNCBcCiAJJHtf
bGluZGV2LjR9IFwKIAkke19saW51eC40fSBcCisJbG03NS40IFwKIAlsbWMuNCBcCiAJbG8uNCBc
CiAJbHAuNCBcCkluZGV4OiBzaGFyZS9tYW4vbWFuNC9sbTc1LjQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hh
cmUvbWFuL21hbjQvbG03NS40CShyZXZpc2lvbiAwKQorKysgc2hhcmUvbWFuL21hbjQvbG03NS40
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgKGMp
IDIwMTQgTHVpeiBPdGF2aW8gTyBTb3V6YSA8bG9vc0BmcmVlYnNkLm9yZz4KKy5cIiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJl
IG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKy5c
IiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKy5cIiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisuXCIg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisuXCIgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLlwiIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
LlwiIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKy5cIiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLlwiCisu
XCIgJEZyZWVCU0QkCisuXCIKKy5EZCBNYXJjaCA3LCAyMDE0CisuRHQgTE03NSA0CisuT3MKKy5T
aCBOQU1FCisuTm0gbG03NQorLk5kIGxtNzUgaTJjIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29y
IGRyaXZlcgorLlNoIFNZTk9QU0lTCisuQ2QgImRldmljZSBpaWMiCisuQ2QgImRldmljZSBpaWNi
dXMiCisuQ2QgImRldmljZSBsbTc1IgorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQorZHJpdmVy
IHByb3ZpZGVzIGFjY2VzcyB0byBzZW5zb3IgZGF0YSBhbmQgY29uZmlndXJhdGlvbiBvdmVyIHRo
ZQorLlhyIGlpY2J1cyA0IC4KKy5QcAorSXQgcHJvdmlkZXMgYW4gZWFzeSBhbmQgc2ltcGxlIHdh
eSB0byBjaGVjayB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBpMmMgYnVzCithcyBpdCBwcm92aWRl
cyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlCisuTm0KK2NvbmZpZ3VyYXRpb24gcmVnaXN0
ZXIuCisuUHAKK1RoZSBhY2Nlc3MgdG8KKy5ObQorZGF0YSBpcyBtYWRlIHZpYSB0aGUKKy5YciBz
eXNjdGwgOAoraW50ZXJmYWNlOgorLkJkIC1saXRlcmFsCitkZXYubG03NS4wLiVkZXNjOiBMTTc1
QSB0ZW1wZXJhdHVyZSBzZW5zb3IKK2Rldi5sbTc1LjAuJWRyaXZlcjogbG03NQorZGV2LmxtNzUu
MC4lbG9jYXRpb246IGFkZHI9MHg0OQorZGV2LmxtNzUuMC4lcG5waW5mbzogbmFtZT1sbTc1MCBj
b21wYXQ9ZnJlZWJzZCxsbTc1YQorZGV2LmxtNzUuMC4lcGFyZW50OiBpaWNidXMzCitkZXYubG03
NS4wLnRlbXBlcmF0dXJlOiAyNy4xQworZGV2LmxtNzUuMC50aHlzdDogNzUuMEMKK2Rldi5sbTc1
LjAudG9zOiA4MC4wQworZGV2LmxtNzUuMC5mYXVsdHM6IDEKK2Rldi5sbTc1LjAubW9kZTogY29t
cGFyYXRvcgorZGV2LmxtNzUuMC5wb2xhcml0eTogYWN0aXZlLWxvdworZGV2LmxtNzUuMC5zaHV0
ZG93bjogMAorLkVkCisuQmwgLXRhZyAtd2lkdGggIi5WYSBkZXYubG03NS4lZC50ZW1wZXJhdHVy
ZSIKKy5JdCBWYSBkZXYubG03NS4lZC50ZW1wZXJhdHVyZQorSXMgdGhlIHJlYWQtb25seSB2YWx1
ZSBvZiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSByZWFkIGJ5IHRoZSBzZW5zb3IuCisuSXQgVmEg
ZGV2LmxtNzUuJWQudGh5c3QKK1NldHMgdGhlIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUuCitPbmNl
IHRoZSB0ZW1wZXJhdHVyZSBnZXQgb3ZlciB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZh
bHVlICh0b3MpCitpdCBuZWVkIHRvIGRyb3AgYmVsbG93IHRoZSBoeXN0ZXJlc2lzIHRlbXBlcmF0
dXJlIHRvIGRpc2FibGUgdGhlIG91dHB1dAorKGludGVycnVwdCkgcGluIGFnYWluLgorLkl0IFZh
IGRldi5sbTc1LiVkLnRvcworU2V0cyB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZhbHVl
LgorT25jZSB0aGUgdGVtcGVyYXR1cmUgZ2V0IG92ZXIgdGhpcyB2YWx1ZSB0aGUgb3V0cHV0IHBp
biB3aWxsIGJlIGVuYWJsZWQuCitUaGUgd2F5IHRoZSBvdXRwdXQgKGludGVycnVwdCkgcGluIHdv
cmtzLCBkZXBlbmRzIG9uIHRoZSBtb2RlLgorLkl0IFZhIGRldi5sbTc1LiVkLmZhdWx0cworSXMg
dGhlIG51bWJlciBvZiBmYXVsdHMgdGhhdCBtdXN0IG9jY3VyIGNvbnNlY3V0aXZlbHkgdG8gYWN0
aXZhdGUgdGhlCitpbnRlcnJ1cHQgKG91dHB1dCkgcGluLgorSXQgY2FuIGJlIHNldCB0byAxLCAy
LCA0LCBhbmQgNi4KKy5JdCBWYSBkZXYubG03NS4lZC5tb2RlCitTZXQgdGhlIG9wZXJhdGlvbiBt
b2RlIGZvciB0aGUgc2Vuc29yIGludGVycnVwdCBwaW4uCitJdCBjYW4gYmUgc2V0IHRvICdjb21w
YXJhdG9yJyAoZGVmYXVsdCkgb3IgJ2ludGVycnVwdCcuCisuSXQgVmEgZGV2LmxtNzUuJWQucG9s
YXJpdHkKK1NldCB0aGUgcG9sYXJpdHkgb2YgdGhlIHNlbnNvciBpbnRlcnJ1cHQgcGluLgorSXQg
Y2FuIGJlIHNldCB0byAnYWN0aXZlLWxvdycgKGRlZmF1bHQpIG9yICdhY3RpdmUtaGlnaCcuCitQ
bGVhc2Ugbm90ZSB0aGF0IHRoZSBvdXRwdXQgcGluIGlzIGFuIG9wZW4tZHJhaW4gb3V0cHV0IGFu
ZCBpdCBuZWVkcyBhCitwcm9wZXIgcHVsbC11cCByZXNpc3RvciB0byB3b3JrLgorLkl0IFZhIGRl
di5sbTc1LiVkLnNodXRkb3duCitXaGVuIHNldCB0byAnMScgaXQgc2h1dGRvd24gdGhlIHNlbnNv
ci4KK1RoZSB0ZW1wZXJhdHVyZSBjb252ZXJ0aW9uIHN0b3BzIGJ1dCB0aGUgc2Vuc29yIHJlbWFp
bnMgd2l0aCBpdHMgaTJjIGJ1cworYWN0aXZlLCBpLmUuLCBpdCBjYW4gYmUgd29rZW4gdXAgYnkg
c2V0dGluZyB0aGlzIG9wdGlvbiB0byAnMCcgYWdhaW4uCisuRWwKKy5QcAorUGxlYXNlIGNoZWNr
IHRoZQorLk5tCitkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscy4KKy5QcAorV2hlbiB1c2VkIHRv
Z2V0aGVyIHdpdGgKKy5YciBzbm1wX2xtNzUgMworaXQgYWxsb3dzIHRoZSBtb25pdG9yaW5nIG9m
CisuTm0KK3RlbXBlcmF0dXJlIGRhdGEgb3ZlciBTTk1QLgorLlBwCitUaGUKKy5ObQorZHJpdmVy
IHN1cHBvcnRzIGJvdGggdGhlIGxvdyBhbmQgdGhlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlbHMuCisu
UHAKK1RoZSBsb3cgcmVzb2x1dGlvbiBtb2RlbCAobG03NSkgcHJvdmlkZXMgYSA5IGJpdCBvdXRw
dXQgd2l0aCB0aGUgTFNCCityZXByZXNlbnRpbmcgMC41Qy4KKy5QcAorVGhlIGhpZ2ggcmVzb2x1
dGlvbiBtb2RlbCAobG03NWEpIHByb3ZpZGVzIGFuIDExIGJpdCBvdXRwdXQgd2l0aCB0aGUgTFNC
CityZXByZXNlbnRpbmcgMC4xMjVDLgorLlBwCitPbiBhCisuWHIgZGV2aWNlLmhpbnRzIDUKK2Jh
c2VkIHN5c3RlbSwgbGlrZQorLkxpIE1JUFMgLAordGhlc2UgdmFsdWVzIGFyZSBjb25maWd1cmFi
bGUgZm9yIHRoZQorLk5tIDoKKy5CbCAtdGFnIC13aWR0aCAiLlZhIGhpbnQubG03NS4lZC5sbTc1
YSIKKy5JdCBWYSBoaW50LmxtNzUuJWQuYXQKK0lzIHRoZQorLlhyIGlpY2J1cyA0Cit5b3UgYXJl
IGF0dGFjaGluZyB0by4KKy5JdCBWYSBoaW50LmxtNzUuJWQuYWRkcgorSXMgdGhlCisuTm0KK2ky
YyBhZGRyZXNzIG9uIHRoZQorLlhyIGlpY2J1cyA0IC4KKy5JdCBWYSBoaW50LmxtNzUuJWQubG03
NWEKK1doZW4gc2V0IHRvICcxJyBlbmFibGVzIHRoZSBoaWdoIHJlc29sdXRpb24gdGVtcGVyYXR1
cmUgcmVhZGluZyBmb3IgdGhpcworc2Vuc29yLgorLkVsCisuUHAKK09uIGEKKy5YciBGRFQgNAor
YmFzZWQgc3lzdGVtLCBsaWtlCisuTGkgQVJNICwKK3RoZSBEVFMgcGFydCBmb3IgYQorLk5tCitk
ZXZpY2UgdXN1YWxseSBsb29rcyBsaWtlOgorLkJkIC1saXRlcmFsCitpMmMgeworCisJLi4uCisK
KwlsbTc1MCB7CisJCWNvbXBhdGlibGUgPSAiZnJlZWJzZCxsbTc1IjsKKwkJaTJjLWFkZHJlc3Mg
PSA8MHg0OD47CisJfTsKKworCWxtNzUxIHsKKwkJY29tcGF0aWJsZSA9ICJmcmVlYnNkLGxtNzVh
IjsKKwkJaTJjLWFkZHJlc3MgPSA8MHg0OT47CisJfTsKK307CisuRWQKKy5QcAorV2hlcmU6Cisu
QmwgLXRhZyAtd2lkdGggIi5WYSBpMmMtYWRkcmVzcyIKKy5JdCBWYSBjb21wYXRpYmxlCitTaG91
bGQgYmUgc2V0IHRvICJmcmVlYnNkLGxtNzUiIGZvciB0aGUgbG93IHJlc29sdXRpb24gZGV2aWNl
cyBhbmQKKyJmcmVlYnNkLGxtNzVhIiBmb3IgdGhlIGhpZ2ggcmVzb2x1dGlvbiBkZXZpY2VzLgor
Lkl0IFZhIGkyYy1hZGRyZXNzCitUaGUKKy5WYSBpMmMtYWRkcmVzcworcHJvcGVydHkgaW5kaWNh
dGVzIHdoaWNoIGkyYyBhZGRyZXNzIHRoZQorLk5tCitpcyB3aXJlZCBhdC4KKy5ObQordGVtcGVy
YXR1cmUgc2Vuc29ycyBjYW4gYmUgd2lyZWQgdG8gOCBkaWZmZXJlbnQgYWRkcmVzcywgYWxsb3dp
bmcgdXAgdG8gOAorc2Vuc29ycyBvbiB0aGUgc2FtZQorLlhyIGlpY2J1cyA0IC4KKy5FbAorLlNo
IFNFRSBBTFNPCisuWHIgc25tcF9sbTc1IDMgLAorLlhyIGZkdCA0ICwKKy5YciBpaWMgNCAsCisu
WHIgaWljYnVzIDQgLAorLlhyIHN5c2N0bCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RyaXZl
ciBmaXJzdCBhcHBlYXJlZCBpbgorLkZ4IDExLjAgLgorLlNoIEFVVEhPUlMKKy5BbiAtbm9zcGxp
dAorVGhlIGRyaXZlciBhbmQgdGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieQorLkFuIEx1
aXogT3RhdmlvIE8gU291emEgQXEgbG9vc0BGcmVlQlNELm9yZwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogc2hhcmUvbWFuL21hbjQvbG03NS40Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkFkZGVkOiBzdm46a2V5d29yZHMKIyMgLTAsMCArMSAjIworRnJlZUJTRD0lSApcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
--047d7b86ccbc79981504f4cdffda
Content-Type: text/plain; charset=US-ASCII; name="snmp_lm75.diff"
Content-Disposition: attachment; filename="snmp_lm75.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hsvtulhc1

SW5kZXg6IGV0Yy9zbm1wZC5jb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXRjL3NubXBkLmNvbmZpZwko
cmV2aXNpb24gMjYyODYwKQorKysgZXRjL3NubXBkLmNvbmZpZwkod29ya2luZyBjb3B5KQpAQCAt
Mjk2LDYgKzI5NiwxMiBAQAogI2JlZ2Vtb3RTbm1wZE1vZHVsZVBhdGguImJyaWRnZSIgPSAiL3Vz
ci9saWIvc25tcF9icmlkZ2Uuc28iCiAKICMKKyMgTE03NSBTZW5zb3IgbW9kdWxlCisjICBUaGlz
IHJlcXVpcmVzIHRoZSBtaWJJSSBtb2R1bGUuCisjCisjYmVnZW1vdFNubXBkTW9kdWxlUGF0aC4i
bG03NSIgPSAiL3Vzci9saWIvc25tcF9sbTc1LnNvIgorCisjCiAjIFdpcmVsZXNzIG1vZHVsZQog
IyAgVGhpcyByZXF1aXJlcyB0aGUgbWliSUkgbW9kdWxlLgogIwpJbmRleDogdXNyLnNiaW4vYnNu
bXBkL21vZHVsZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vYnNubXBkL21vZHVs
ZXMvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mjg2MCkKKysrIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVz
L01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBACiAJc25tcF9icmlkZ2Ug
XAogCXNubXBfaGFzdCBcCiAJc25tcF9ob3N0cmVzIFwKKwlzbm1wX2xtNzUgXAogCXNubXBfbWli
SUkgXAogCXNubXBfdGFyZ2V0IFwKIAlzbm1wX3VzbSBcCkluZGV4OiB1c3Iuc2Jpbi9ic25tcGQv
bW9kdWxlcy9zbm1wX2xtNzUvQkVHRU1PVC1MTTc1LU1JQi50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNy
LnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L0JFR0VNT1QtTE03NS1NSUIudHh0CShyZXZp
c2lvbiAwKQorKysgdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L0JFR0VNT1QtTE03
NS1NSUIudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACistLQorLS0gQ29weXJp
Z2h0IChjKSAyMDE0IEx1aXogT3RhdmlvIE8gU291emEgPGxvb3NARnJlZUJTRC5vcmc+CistLSBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLS0KKy0tIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLS0gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCistLSBh
cmUgbWV0OgorLS0gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy0tICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy0tIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CistLSAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCistLSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLS0KKy0tIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECistLSBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKy0tIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCistLSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy0t
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCistLSBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLS0gT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCist
LSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorLS0gTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLS0gT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorLS0gU1VDSCBEQU1BR0UuCistLQorLS0gJEZyZWVCU0QkCistLQorCitCRUdFTU9ULUxNNzUt
TUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCitJTVBPUlRTCisgICAgTU9EVUxFLUlERU5USVRZ
LCBPQkpFQ1QtVFlQRSwgTk9USUZJQ0FUSU9OLVRZUEUsCisgICAgQ291bnRlcjY0LCBJbnRlZ2Vy
MzIKKwlGUk9NIFNOTVB2Mi1TTUkKKyAgICBURVhUVUFMLUNPTlZFTlRJT04sIFJvd1N0YXR1cwor
CUZST00gU05NUHYyLVRDCisgICAgYmVnZW1vdAorCUZST00gQkVHRU1PVC1NSUI7CisKK2JlZ2Vt
b3RMb29zIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAxNDAyMjQwMDAwWiIK
KyAgICBPUkdBTklaQVRJT04gIkZyZWVCU0QiCisgICAgQ09OVEFDVC1JTkZPCisJICAgICIJCUx1
aXogT3RhdmlvIE8gU291emEKKworCSAgICAgUG9zdGFsOglOL0EKKworCSAgICAgRmF4OglOL0EK
KworCSAgICAgRS1NYWlsOglsb29zQEZyZWVCU0Qub3JnIgorICAgIERFU0NSSVBUSU9OCisJICAg
ICJUaGUgQmVnZW1vdCBNSUIgZm9yIHJlYWRpbmcgbG03NSBzZW5zb3JzIGRhdGEuIgorICAgIFJF
VklTSU9OICAgICAiMjAxNDAyMjQwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSAgICAiSW5pdGlh
bCByZXZpc2lvbi4iCisgICAgOjo9IHsgYmVnZW1vdCA0MDAgfQorCitiZWdlbW90TG03NU9iamVj
dHMJT0JKRUNUIElERU5USUZJRVIgOjo9IHsgYmVnZW1vdExtNzUgMSB9CisKKy0tIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0t
IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitsbTc1U2Vuc29yCU9CSkVDVCBJ
REVOVElGSUVSIDo6PSB7IGJlZ2Vtb3RsbTc1T2JqZWN0cyAxIH0KKworbG03NVNlbnNvcnMJT0JK
RUNULVRZUEUKKyAgICBTWU5UQVgJSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkK
KyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OCisJIk51bWJlciBvZiBMTTc1IHNl
bnNvcnMgaW4gdGhlIHN5c3RlbS4iCisgICAgOjo9IHsgbG03NVNlbnNvcnMgMSB9CisKKy0tIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
LS0KKy0tIFRlbXBTZW5zb3IgVGFibGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KK2xtNzVTZW5zb3JUYWJsZSBPQkpFQ1Qt
VFlQRQorICAgIFNZTlRBWAlTRVFVRU5DRSBPRiBMbTc1U2Vuc29yRW50cnkKKyAgICBNQVgtQUND
RVNTCW5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTgor
CSJBIHRhYmxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRlbXBlcmF0dXJlIHNl
bnNvcnMuIgorICAgIDo6PSB7IGJlZ2Vtb3RMbTc1T2JqZWN0cyAyIH0KKworbG9vc1RlbXBTZW5z
b3JFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlMbTc1U2Vuc29yRW50cnkKKyAgICBNQVgt
QUNDRVNTCW5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElP
TgorCSJUYWJsZSBlbnRyeSB0aGF0IGRlc2NyaWJlcyBvbmUgdGVtcGVyYXR1cmUgc2Vuc29yLiIK
KyAgICBJTkRFWAl7IGxtNzVTZW5zb3JJbmRleCB9CisgICAgOjo9IHsgbG03NVNlbnNvclRhYmxl
IDEgfQorCitMbTc1U2Vuc29yRW50cnkgOjo9IFNFUVVFTkNFIHsKKyAgICBsbTc1U2Vuc29ySW5k
ZXgJCQlJbnRlZ2VyMzIsCisgICAgbG03NVNlbnNvclN5c2N0bEluZGV4CQlJbnRlZ2VyMzIsCisg
ICAgbG03NVNlbnNvckRlc2MJCQlPQ1RFVCBTVFJJTkcsCisgICAgbG03NVNlbnNvckxvY2F0aW9u
CQkJT0NURVQgU1RSSU5HLAorICAgIGxtNzVTZW5zb3JQbnBJbmZvCQkJT0NURVQgU1RSSU5HLAor
ICAgIGxtNzVTZW5zb3JQYXJlbnQJCQlPQ1RFVCBTVFJJTkcsCisgICAgbG03NVNlbnNvclRlbXBl
cmF0dXJlCQlJbnRlZ2VyMzIKK30KKworbG03NVNlbnNvckluZGV4IE9CSkVDVC1UWVBFCisgICAg
U1lOVEFYCUludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1
cnJlbnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNlbnNvciBpbmRleC4iCisgICAgOjo9IHsg
bG03NVNlbnNvckVudHJ5IDEgfQorCitsbTc1U2Vuc29yU3lzY3RsSW5kZXggT0JKRUNULVRZUEUK
KyAgICBTWU5UQVgJSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFU
VVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OCisJIkxNNzUgU2Vuc29yIHN5c2N0bCBpbmRleC4i
CisgICAgOjo9IHsgbG03NVNlbnNvckVudHJ5IDIgfQorCitsbTc1U2Vuc29yRGVzYyBPQkpFQ1Qt
VFlQRQorICAgIFNZTlRBWAlPQ1RFVCBTVFJJTkcKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQor
ICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04KKwkiTE03NSBTZW5zb3IgZGVzY3Jp
cHRpb24uIgorICAgIDo6PSB7IGxtNzVTZW5zb3JFbnRyeSAzIH0KKworbG03NVNlbnNvckxvY2F0
aW9uIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCU9DVEVUIFNUUklORworICAgIE1BWC1BQ0NFU1MJ
cmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNl
bnNvciBsb2NhdGlvbi4iCisgICAgOjo9IHsgbG03NVNlbnNvckVudHJ5IDQgfQorCitsbTc1U2Vu
c29yUG5wSW5mbyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlPQ1RFVCBTVFJJTkcKKyAgICBNQVgt
QUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04KKwki
TE03NSBTZW5zb3IgcG5wIGluZm9ybWF0aW9uLiIKKyAgICA6Oj0geyBsbTc1U2Vuc29yRW50cnkg
NSB9CisKK2xtNzVTZW5zb3JQYXJlbnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJT0NURVQgU1RS
SU5HCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERF
U0NSSVBUSU9OCisJIkxNNzUgU2Vuc29yIHBhcmVudCBidXMuIgorICAgIDo6PSB7IGxtNzVTZW5z
b3JFbnRyeSA2IH0KKworbG03NVNlbnNvclRlbXBlcmF0dXJlIE9CSkVDVC1UWVBFCisgICAgU1lO
VEFYCUludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJl
bnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNlbnNvciB0ZW1wZXJhdHVyZS4iCisgICAgOjo9
IHsgbG03NVNlbnNvckVudHJ5IDcgfQorCitFTkQKClByb3BlcnR5IGNoYW5nZXMgb246IHVzci5z
YmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9CRUdFTU9ULUxNNzUtTUlCLnR4dApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMK
K3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtl
eXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L01ha2VmaWxl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9NYWtlZmls
ZQkocmV2aXNpb24gMCkKKysrIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9NYWtl
ZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisjICRGcmVlQlNEJAorCisuaW5j
bHVkZSA8YnNkLm93bi5taz4KKworTU9EPSAgICBsbTc1CitTUkNTPSAgIHNubXBfbG03NS5jCitY
U1lNPSAgIGJlZ2Vtb3RMbTc1CitNQU49ICAgIHNubXBfbG03NS4zCisKK0JNSUJTPSAgQkVHRU1P
VC1MTTc1LU1JQi50eHQKK0RFRlM9ICAgJHtNT0R9X3RyZWUuZGVmCisKKy5pbmNsdWRlIDxic2Qu
c25tcG1vZC5taz4KClByb3BlcnR5IGNoYW5nZXMgb246IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVz
L3NubXBfbG03NS9NYWtlZmlsZQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBz
dm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9
JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogdXNyLnNiaW4vYnNubXBk
L21vZHVsZXMvc25tcF9sbTc1L2xtNzVfdHJlZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4v
YnNubXBkL21vZHVsZXMvc25tcF9sbTc1L2xtNzVfdHJlZS5kZWYJKHJldmlzaW9uIDApCisrKyB1
c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvbG03NV90cmVlLmRlZgkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU2IEBACisjLQorIyBDb3B5cmlnaHQgKGMpIDIwMTQgTHVpeiBPdGF2
aW8gTyBTb3V6YSA8bG9vc0BGcmVlQlNELm9yZz4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisj
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
IyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
IyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworIyAkRnJlZUJTRCQKKyMKKworKDEg
aW50ZXJuZXQKKyAgKDQgcHJpdmF0ZQorICAgICgxIGVudGVycHJpc2VzCisgICAgICAoMTIzMjUg
Zm9rdXMKKyAgICAgICAgKDEgYmVnZW1vdAorICAgICAgICAgICg0MDAgYmVnZW1vdExtNzUKKyAg
ICAgICAgICAgICgxIGJlZ2Vtb3RMbTc1T2JqZWN0cworICAgICAgICAgICAgICAoMSBsbTc1U2Vu
c29ycworICAgICAgICAgICAgICAgICgxIGxtNzVTZW5zb3JzIElOVEVHRVIzMiBvcF9sbTc1U2Vu
c29ycyBHRVQpCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgKDIgbG03NVNlbnNvclRh
YmxlCisgICAgICAgICAgICAgICAgKDEgbG03NVNlbnNvckVudHJ5IDogT0NURVRTVFJJTkcgb3Bf
bG03NVNlbnNvclRhYmxlCisgICAgICAgICAgICAgICAgICAoMSBsbTc1U2Vuc29ySW5kZXggSU5U
RUdFUjMyIEdFVCkKKyAgICAgICAgICAgICAgICAgICgyIGxtNzVTZW5zb3JTeXNjdGxJbmRleCBJ
TlRFR0VSMzIgR0VUKQorICAgICAgICAgICAgICAgICAgKDMgbG03NVNlbnNvckRlc2MgT0NURVRT
VFJJTkcgR0VUKQorICAgICAgICAgICAgICAgICAgKDQgbG03NVNlbnNvckxvY2F0aW9uIE9DVEVU
U1RSSU5HIEdFVCkKKyAgICAgICAgICAgICAgICAgICg1IGxtNzVTZW5zb3JQbnBJbmZvIE9DVEVU
U1RSSU5HIEdFVCkKKyAgICAgICAgICAgICAgICAgICg2IGxtNzVTZW5zb3JQYXJlbnQgT0NURVRT
VFJJTkcgR0VUKQorICAgICAgICAgICAgICAgICAgKDcgbG03NVNlbnNvclRlbXBlcmF0dXJlIElO
VEVHRVIzMiBHRVQpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICApCisgICAgICAg
ICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCklu
ZGV4OiB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LjMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L3NubXBfbG03NS4zCShy
ZXZpc2lvbiAwKQorKysgdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L3NubXBfbG03
NS4zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy5cIi0KKy5cIiBDb3B5cmlnaHQg
KGMpIDIwMTQgTHVpeiBPdGF2aW8gTyBTb3V6YSA8bG9vc0BGcmVlQlNELm9yZz4KKy5cIiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIg
YXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwi
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKy5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKy5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorLlwiIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
Ky5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisuXCIgU1VDSCBEQU1BR0UuCisuXCIKKy5cIiAkRnJlZUJTRCQK
Ky5cIgorLkRkIEZlYnJ1YXJ5IDI0LCAyMDE0CisuRHQgU05NUF9MTTc1IDMKKy5PcworLlNoIE5B
TUUKKy5ObSBzbm1wX2xtNzUKKy5OZCAiTE03NSBTZW5zb3IgbW9kdWxlIGZvciIKKy5YciBic25t
cGQgMQorLlNoIExJQlJBUlkKKy5QcSBiZWdlbW90U25tcGRNb2R1bGVQYXRoLiJsbTc1IiA9ICIv
dXNyL2xpYi9zbm1wX2xtNzUuc28iCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tIHNubXBfbG03
NQorbW9kdWxlIGltcGxlbWVudHMgYSBwcml2YXRlIEJFR0VNT1QtTE03NS1NSUIsIHdoaWNoIGFs
bG93cworcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgb2YgdGhlIExNNzUgc2Vuc29ycyBvbiB0aGUg
c3lzdGVtLgorLlBwCitUaGUgbW9kdWxlIHJlYWRzIHRoZSBzZW5zb3IocykgdGVtcGVyYXR1cmUg
dXNpbmcgdGhlCisuWHIgc3lzY3RsIDgKK0FQSS4KKy5TaCBGSUxFUworLkJsIC10YWcgLXdpZHRo
ICJYWFhYWFhYWFgiCisuSXQgUGEgL3Vzci9zaGFyZS9zbm1wL2RlZnMvbG03NV90cmVlLmRlZgor
VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNSUIgdHJlZSBpbXBsZW1lbnRlZCBieQorLk5tIC4KKy5J
dCBQYSAvdXNyL3NoYXJlL3NubXAvbWlicy9CRUdFTU9ULUxNNzUtTUlCLnR4dAorVGhlIHByaXZh
dGUgQkVHRU1PVC1MTTc1LU1JQiB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLgor
LkVsCisuU2ggU0VFIEFMU08KKy5YciBic25tcGQgMSAsCisuWHIgZ2Vuc25tcHRyZWUgMSAsCisu
WHIgc25tcG1vZCAzICwKKy5YciBsbTc1IDQKKy5TaCBBVVRIT1JTCisuQW4gTHVpeiBPdGF2aW8g
TyBTb3V6YSBBcSBsb29zQEZyZWVCU0Qub3JnCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiB1c3Iuc2Jp
bi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LjMKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWlu
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjprZXl3b3JkcwojIyAt
MCwwICsxICMjCitGcmVlQlNEPSVIClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9zbm1wX2xtNzUuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LmMJKHJl
dmlzaW9uIDApCisrKyB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1
LmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzYgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDE0IEx1aXogT3RhdmlvIE8gU291emEgPGxvb3NARnJlZUJTRC5vcmc+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRG
cmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVl
Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaW5jbHVkZSA8YnNubXAvc25tcG1vZC5o
PgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworI2luY2x1ZGUgImxtNzVfb2lkLmgiCisj
aW5jbHVkZSAibG03NV90cmVlLmgiCisKKyNpZm5kZWYJTE03NUJVRgorI2RlZmluZQlMTTc1QlVG
CQk2NAorI2VuZGlmCisjZGVmaW5lCVRaX1pFUk9DCTI3MzIKKyNkZWZpbmUgVVBEQVRFX0lOVEVS
VkFMCTUwMAkvKiB1cGRhdGUgaW50ZXJ2YWwgaW4gdGlja3MgKi8KKworc3RhdGljIHN0cnVjdCBs
bW9kdWxlICptb2R1bGU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXNuX29pZCBvaWRfbG03NSA9
IE9JRFhfYmVnZW1vdExtNzU7CisKKy8qIHRoZSBPYmplY3QgUmVzb3VyY2UgcmVnaXN0cmF0aW9u
IGluZGV4ICovCitzdGF0aWMgdV9pbnQgbG03NV9pbmRleCA9IDA7CisKKy8qIE51bWJlciBvZiBh
dmFpbGFibGUgc2Vuc29ycyBpbiB0aGUgc3lzdGVtLiAqLworc3RhdGljIGludCBsbTc1X3NlbnNv
cnM7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgc2luZ2xlIHNlbnNvci4KKyAq
Lworc3RydWN0IGxtNzVfc25tcF9zZW5zb3IgeworCVRBSUxRX0VOVFJZKGxtNzVfc25tcF9zZW5z
b3IpIGxpbms7CisJaW50MzJfdAkJaW5kZXg7CisJaW50MzJfdAkJc3lzY3RsaWR4OworCWludDMy
X3QJCXRlbXA7CisJY2hhcgkJZGVzY1tMTTc1QlVGXTsKKwljaGFyCQlsb2NhdGlvbltMTTc1QlVG
XTsKKwljaGFyCQlwYXJlbnRbTE03NUJVRl07CisJY2hhcgkJcG5waW5mb1tMTTc1QlVGXTsKK307
CisKK3N0YXRpYyBUQUlMUV9IRUFEKCwgbG03NV9zbm1wX3NlbnNvcikgc2Vuc29ycyA9CisgICAg
VEFJTFFfSEVBRF9JTklUSUFMSVpFUihzZW5zb3JzKTsKKworLyogVGlja3Mgb2YgdGhlIGxhc3Qg
c2Vuc29ycyByZWFkaW5nLiAqLworc3RhdGljIHVpbnQ2NF90IGxhc3Rfc2Vuc29yc191cGRhdGU7
CisKK3N0YXRpYyB2b2lkIGZyZWVfc2Vuc29ycyh2b2lkKTsKK3N0YXRpYyBpbnQgbG03NV9maW5p
KHZvaWQpOworc3RhdGljIGludCBsbTc1X2luaXQoc3RydWN0IGxtb2R1bGUgKm1vZCwgaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgdm9pZCBsbTc1X3N0YXJ0KHZvaWQpOworc3RhdGlj
IGludCB1cGRhdGVfc2Vuc29ycyh2b2lkKTsKKworY29uc3Qgc3RydWN0IHNubXBfbW9kdWxlIGNv
bmZpZyA9IHsKKyAgICAuY29tbWVudCAgID0KKwkiVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUg
QkVHRU1PVCBNSUIgZm9yIHJlYWRpbmcgTE03NSBzZW5zb3JzIGRhdGEuIiwKKyAgICAuaW5pdCAg
ICAgID0gbG03NV9pbml0LAorICAgIC5zdGFydCAgICAgPSBsbTc1X3N0YXJ0LAorICAgIC5maW5p
ICAgICAgPSBsbTc1X2ZpbmksCisgICAgLnRyZWUgICAgICA9IGxtNzVfY3RyZWUsCisgICAgLnRy
ZWVfc2l6ZSA9IGxtNzVfQ1RSRUVfU0laRSwKK307CisKK3N0YXRpYyBpbnQKK2xtNzVfaW5pdChz
dHJ1Y3QgbG1vZHVsZSAqbW9kLCBpbnQgYXJnYyBfX3VudXNlZCwgY2hhciAqYXJndltdIF9fdW51
c2VkKQoreworCisJbW9kdWxlID0gbW9kOworCisJbG03NV9zZW5zb3JzID0gMDsKKwlvcGVubG9n
KCJzbm1wX2xtNzUiLCBMT0dfTkRFTEFZIHwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisKKwlyZXR1
cm4oMCk7Cit9CisKK3N0YXRpYyB2b2lkCitsbTc1X3N0YXJ0KHZvaWQpCit7CisKKwlsbTc1X2lu
ZGV4ID0gb3JfcmVnaXN0ZXIoJm9pZF9sbTc1LAorCSAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIHJl
YWRpbmcgbG03NSBzZW5zb3JzIGRhdGEuIiwgbW9kdWxlKTsKK30KKworc3RhdGljIGludAorbG03
NV9maW5pKHZvaWQpCit7CisKKwlvcl91bnJlZ2lzdGVyKGxtNzVfaW5kZXgpOworCWZyZWVfc2Vu
c29ycygpOworCWNsb3NlbG9nKCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
ZnJlZV9zZW5zb3JzKHZvaWQpCit7CisJc3RydWN0IGxtNzVfc25tcF9zZW5zb3IgKnNlbnNvcjsK
KworCXdoaWxlICgoc2Vuc29yID0gVEFJTFFfRklSU1QoJnNlbnNvcnMpKSAhPSBOVUxMKSB7CisJ
CVRBSUxRX1JFTU9WRSgmc2Vuc29ycywgc2Vuc29yLCBsaW5rKTsKKwkJZnJlZShzZW5zb3IpOwor
CX0KK30KKworc3RhdGljIGludAorc3lzY3RsbmFtZShpbnQgKm9pZCwgaW50IG5sZW4sIGNoYXIg
Km5hbWUsIHNpemVfdCBsZW4pCit7CisJaW50IG1pYlsxMl07CisKKwlpZiAobmxlbiA+IChpbnQp
c2l6ZW9mKG1pYikgKyAyKQorCQlyZXR1cm4gKC0xKTsKKworCW1pYlswXSA9IDA7CisJbWliWzFd
ID0gMTsKKwltZW1jcHkobWliICsgMiwgb2lkLCBubGVuICogc2l6ZW9mKGludCkpOworCisJaWYg
KHN5c2N0bChtaWIsIG5sZW4gKyAyLCBuYW1lLCAmbGVuLCAwLCAwKSA9PSAtMSkKKwkJcmV0dXJu
ICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzeXNjdGxnZXRuZXh0KGlu
dCAqb2lkLCBpbnQgbmxlbiwgaW50ICpuZXh0LCBzaXplX3QgKm5leHRsZW4pCit7CisJaW50IG1p
YlsxMl07CisKKwlpZiAobmxlbiAgPiAoaW50KXNpemVvZihtaWIpICsgMikKKwkJcmV0dXJuICgt
MSk7CisKKwltaWJbMF0gPSAwOworCW1pYlsxXSA9IDI7CisJbWVtY3B5KG1pYiArIDIsIG9pZCwg
bmxlbiAqIHNpemVvZihpbnQpKTsKKworCWlmIChzeXNjdGwobWliLCBubGVuICsgMiwgbmV4dCwg
bmV4dGxlbiwgMCwgMCkgPT0gLTEpCisJCXJldHVybiAoLTEpOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAordXBkYXRlX3NlbnNvcl9zeXNjdGwoY2hhciAqb2J1Ziwgc2l6ZV90ICpv
YnVmbGVuLCBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgYnVmW0xNNzVCVUZd
OworCWludCBtaWJbNV07CisJc2l6ZV90IGxlbjsKKworCS8qIEZpbGwgb3V0IHRoZSBtaWIgaW5m
b3JtYXRpb24uICovCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICJkZXYubG03NS4l
ZC4lcyIsIGlkeCwgbmFtZSk7CisJbGVuID0gNDsKKwlpZiAoc3lzY3RsbmFtZXRvbWliKGJ1Ziwg
bWliLCAmbGVuKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBSZWFkIHRoZSBzeXNjdGwg
ZGF0YS4gKi8KKwlpZiAoc3lzY3RsKG1pYiwgbGVuLCBvYnVmLCBvYnVmbGVuLCBOVUxMLCAwKSA9
PSAtMSkKKwkJcmV0dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
dXBkYXRlX3NlbnNvcihzdHJ1Y3QgbG03NV9zbm1wX3NlbnNvciAqc2Vuc29yLCBpbnQgaWR4KQor
eworCXNpemVfdCBsZW47CisKKwlsZW4gPSBzaXplb2Yoc2Vuc29yLT5kZXNjKTsKKwl1cGRhdGVf
c2Vuc29yX3N5c2N0bChzZW5zb3ItPmRlc2MsICZsZW4sIGlkeCwgIiVkZXNjIik7CisKKwlsZW4g
PSBzaXplb2Yoc2Vuc29yLT5sb2NhdGlvbik7CisJdXBkYXRlX3NlbnNvcl9zeXNjdGwoc2Vuc29y
LT5sb2NhdGlvbiwgJmxlbiwgaWR4LCAiJWxvY2F0aW9uIik7CisKKwlsZW4gPSBzaXplb2Yoc2Vu
c29yLT5wbnBpbmZvKTsKKwl1cGRhdGVfc2Vuc29yX3N5c2N0bChzZW5zb3ItPnBucGluZm8sICZs
ZW4sIGlkeCwgIiVwbnBpbmZvIik7CisKKwlsZW4gPSBzaXplb2Yoc2Vuc29yLT5wYXJlbnQpOwor
CXVwZGF0ZV9zZW5zb3Jfc3lzY3RsKHNlbnNvci0+cGFyZW50LCAmbGVuLCBpZHgsICIlcGFyZW50
Iik7Cit9CisKK3N0YXRpYyBpbnQKK2FkZF9zZW5zb3IoY2hhciAqYnVmLCBzaXplX3QgbmxlbikK
K3sKKwlpbnQgaWR4LCBtaWJbNV0sIHRlbXA7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgbG03NV9z
bm1wX3NlbnNvciAqc2Vuc29yOworCisJaWYgKHNzY2FuZihidWYsICJkZXYubG03NS4lZC50ZW1w
ZXJhdHVyZSIsICZpZHgpICE9IDEpCisJCXJldHVybiAoLTEpOworCisJLyogRmlsbCBvdXQgdGhl
IG1pYiBpbmZvcm1hdGlvbi4gKi8KKwlpZiAoc3lzY3RsbmFtZXRvbWliKGJ1ZiwgbWliLCAmbmxl
bikgPT0gLTEpCisJCXJldHVybiAoLTEpOworCisJLyogUmVhZCB0aGUgc2Vuc29yIHRlbXBlcmF0
dXJlLiAqLworCWxlbiA9IHNpemVvZih0ZW1wKTsKKwlpZiAoc3lzY3RsKG1pYiwgbmxlbiwgJnRl
bXAsICZsZW4sIE5VTEwsIDApID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIEFkZCB0aGUg
c2Vuc29yIGRhdGEgdG8gdGhlIHRhYmxlLiAqLworCXNlbnNvciA9IGNhbGxvYygxLCBzaXplb2Yo
KnNlbnNvcikpOworCWlmIChzZW5zb3IgPT0gTlVMTCkgeworCQlzeXNsb2coTE9HX0VSUiwgIlVu
YWJsZSB0byBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yIHJlc291cmNlIiwKKwkJICAgIHNpemVvZigq
c2Vuc29yKSk7CisJCXJldHVybiAoLTEpOworCX0KKwlzZW5zb3ItPmluZGV4ID0gKytsbTc1X3Nl
bnNvcnM7CisJc2Vuc29yLT5zeXNjdGxpZHggPSBpZHg7CisJc2Vuc29yLT50ZW1wID0gKHRlbXAg
LSBUWl9aRVJPQykgLyAxMDsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc2Vuc29ycywgc2Vuc29yLCBs
aW5rKTsKKworCXVwZGF0ZV9zZW5zb3Ioc2Vuc29yLCBpZHgpOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAordXBkYXRlX3NlbnNvcnModm9pZCkKK3sKKwljaGFyIGJ1ZltMTTc1QlVG
XTsKKwlpbnQgaSwgcm9vdFs1XSwgKm5leHQsICpvaWQ7CisJc2l6ZV90IGxlbiwgbmV4dGxlbiwg
cm9vdGxlbjsKKwlzdGF0aWMgdWludDY0X3Qgbm93OworCisJbm93ID0gZ2V0X3RpY2tzKCk7CisJ
aWYgKG5vdyAtIGxhc3Rfc2Vuc29yc191cGRhdGUgPCBVUERBVEVfSU5URVJWQUwpCisJCXJldHVy
biAoMCk7CisKKwlsYXN0X3NlbnNvcnNfdXBkYXRlID0gbm93OworCisJLyogUmVzZXQgdGhlIHNl
bnNvciBkYXRhLiAqLworCWZyZWVfc2Vuc29ycygpOworCWxtNzVfc2Vuc29ycyA9IDA7CisKKwkv
KiBTdGFydCBmcm9tIHRoZSBsbTc1IGRlZmF1bHQgcm9vdCBub2RlLiAqLworCXJvb3RsZW4gPSAy
OworCWlmIChzeXNjdGxuYW1ldG9taWIoImRldi5sbTc1Iiwgcm9vdCwgJnJvb3RsZW4pID09IC0x
KQorCQlyZXR1cm4gKDApOworCisJb2lkID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSAqIHJv
b3RsZW4pOworCWlmIChvaWQgPT0gTlVMTCkgeworCQlwZXJyb3IoIm1hbGxvYyIpOworCQlyZXR1
cm4gKC0xKTsKKwl9CisJbWVtY3B5KG9pZCwgcm9vdCwgcm9vdGxlbiAqIHNpemVvZihpbnQpKTsK
KwlsZW4gPSByb290bGVuOworCisJLyogVHJhdmVyc2UgdGhlIHN5c2N0bCgzKSBpbnRlcmZhY2Ug
YW5kIGZpbmQgdGhlIGFjdGl2ZSBzZW5zb3JzLiAqLworCWZvciAoOzspIHsKKworCQkvKiBGaW5k
IHRoZSBzaXplIG9mIHRoZSBuZXh0IG1pYi4gKi8KKwkJbmV4dGxlbiA9IDA7CisJCWlmIChzeXNj
dGxnZXRuZXh0KG9pZCwgbGVuLCBOVUxMLCAmbmV4dGxlbikgPT0gLTEpIHsKKwkJCWZyZWUob2lk
KTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyogQWxvY2F0ZSBhbmQgcmVhZCB0aGUgbmV4dCBt
aWIuICovCisJCW5leHQgPSAoaW50ICopbWFsbG9jKG5leHRsZW4pOworCQlpZiAobmV4dCA9PSBO
VUxMKSB7CisJCQlzeXNsb2coTE9HX0VSUiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICV6
dSBieXRlcyBmb3IgcmVzb3VyY2UiLAorCQkJICAgIG5leHRsZW4pOworCQkJZnJlZShvaWQpOwor
CQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKHN5c2N0bGdldG5leHQob2lkLCBsZW4sIG5leHQs
ICZuZXh0bGVuKSA9PSAtMSkgeworCQkJZnJlZShvaWQpOworCQkJZnJlZShuZXh0KTsKKwkJCXJl
dHVybiAoMCk7CisJCX0KKwkJZnJlZShvaWQpOworCQkvKiBDaGVjayBpZiB3ZSBjYXJlIGFib3V0
IHRoZSBuZXh0IG1pYi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbnQpcm9vdGxlbjsgaSsrKQor
CQkJaWYgKG5leHRbaV0gIT0gcm9vdFtpXSkgeworCQkJCWZyZWUobmV4dCk7CisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJb2lkID0gKGludCAqKW1hbGxvYyhuZXh0bGVuKTsKKwkJaWYgKG9pZCA9
PSBOVUxMKSB7CisJCQlzeXNsb2coTE9HX0VSUiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRl
ICV6dSBieXRlcyBmb3IgcmVzb3VyY2UiLAorCQkJICAgIG5leHRsZW4pOworCQkJZnJlZShuZXh0
KTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW1lbWNweShvaWQsIG5leHQsIG5leHRsZW4pOwor
CQlmcmVlKG5leHQpOworCQlsZW4gPSBuZXh0bGVuIC8gc2l6ZW9mKGludCk7CisKKwkJLyogRmlu
ZCB0aGUgbWliIG5hbWUuICovCisJCWlmIChzeXNjdGxuYW1lKG9pZCwgbGVuLCBidWYsIHNpemVv
ZihidWYpKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cnN0cihidWYsICJ0ZW1wZXJh
dHVyZSIpKQorCQkJaWYgKGFkZF9zZW5zb3IoYnVmLCBsZW4pICE9IDApIHsKKwkJCQlmcmVlKG9p
ZCk7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKworaW50
CitvcF9sbTc1U2Vuc29ycyhzdHJ1Y3Qgc25tcF9jb250ZXh0ICpjb250ZXh0IF9fdW51c2VkLCBz
dHJ1Y3Qgc25tcF92YWx1ZSAqdmFsdWUsCisgICAgdV9pbnQgc3ViLCB1X2ludCBpaWR4IF9fdW51
c2VkLCBlbnVtIHNubXBfb3Agb3ApCit7CisJYXNuX3N1YmlkX3Qgd2hpY2g7CisKKwlpZiAodXBk
YXRlX3NlbnNvcnMoKSA9PSAtMSkKKwkJcmV0dXJuIChTTk1QX0VSUl9SRVNfVU5BVkFJTCk7CisK
Kwl3aGljaCA9IHZhbHVlLT52YXIuc3Vic1tzdWIgLSAxXTsKKworCXN3aXRjaCAob3ApIHsKKwlj
YXNlIFNOTVBfT1BfR0VUOgorCQlzd2l0Y2ggKHdoaWNoKSB7CisJCWNhc2UgTEVBRl9sbTc1U2Vu
c29yczoKKwkJCXZhbHVlLT52LmludGVnZXIgPSBsbTc1X3NlbnNvcnM7CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCXJldHVybiAoU05NUF9FUlJfUkVTX1VOQVZBSUwpOworCQl9CisJCWJyZWFr
OworCWNhc2UgU05NUF9PUF9TRVQ6CisJCXJldHVybiAoU05NUF9FUlJfTk9UX1dSSVRFQUJMRSk7
CisJY2FzZSBTTk1QX09QX0dFVE5FWFQ6CisJY2FzZSBTTk1QX09QX1JPTExCQUNLOgorCWNhc2Ug
U05NUF9PUF9DT01NSVQ6CisJCXJldHVybiAoU05NUF9FUlJfTk9FUlJPUik7CisJZGVmYXVsdDoK
KwkJcmV0dXJuIChTTk1QX0VSUl9SRVNfVU5BVkFJTCk7CisJfQorCisJcmV0dXJuIChTTk1QX0VS
Ul9OT0VSUk9SKTsKK30KKworaW50CitvcF9sbTc1U2Vuc29yVGFibGUoc3RydWN0IHNubXBfY29u
dGV4dCAqY29udGV4dCBfX3VudXNlZCwKKyAgICBzdHJ1Y3Qgc25tcF92YWx1ZSAqdmFsdWUsIHVf
aW50IHN1YiwgdV9pbnQgaWlkeCBfX3VudXNlZCwgZW51bSBzbm1wX29wIG9wKQoreworCXN0cnVj
dCBsbTc1X3NubXBfc2Vuc29yICpzZW5zb3I7CisJYXNuX3N1YmlkX3Qgd2hpY2g7CisJaW50IHJl
dDsKKworCWlmICh1cGRhdGVfc2Vuc29ycygpID09IC0xKQorCQlyZXR1cm4gKFNOTVBfRVJSX1JF
U19VTkFWQUlMKTsKKworCXdoaWNoID0gdmFsdWUtPnZhci5zdWJzW3N1YiAtIDFdOworCisJc3dp
dGNoIChvcCkgeworCWNhc2UgU05NUF9PUF9HRVRORVhUOgorCQlzZW5zb3IgPSBORVhUX09CSkVD
VF9JTlQoJnNlbnNvcnMsICZ2YWx1ZS0+dmFyLCBzdWIpOworCQlpZiAoc2Vuc29yID09IE5VTEwp
CisJCQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQl2YWx1ZS0+dmFyLmxlbiA9IHN1
YiArIDE7CisJCXZhbHVlLT52YXIuc3Vic1tzdWJdID0gc2Vuc29yLT5pbmRleDsKKwkJYnJlYWs7
CisJY2FzZSBTTk1QX09QX0dFVDoKKwkJaWYgKHZhbHVlLT52YXIubGVuIC0gc3ViICE9IDEpCisJ
CQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQlzZW5zb3IgPSBGSU5EX09CSkVDVF9J
TlQoJnNlbnNvcnMsICZ2YWx1ZS0+dmFyLCBzdWIpOworCQlpZiAoc2Vuc29yID09IE5VTEwpCisJ
CQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQlicmVhazsKKwljYXNlIFNOTVBfT1Bf
U0VUOgorCQlyZXR1cm4gKFNOTVBfRVJSX05PVF9XUklURUFCTEUpOworCWNhc2UgU05NUF9PUF9S
T0xMQkFDSzoKKwljYXNlIFNOTVBfT1BfQ09NTUlUOgorCQlyZXR1cm4gKFNOTVBfRVJSX05PRVJS
T1IpOworCWRlZmF1bHQ6CisJCXJldHVybiAoU05NUF9FUlJfUkVTX1VOQVZBSUwpOworCX0KKwor
CXJldCA9IFNOTVBfRVJSX05PRVJST1I7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBMRUFG
X2xtNzVTZW5zb3JJbmRleDoKKwkJdmFsdWUtPnYuaW50ZWdlciA9IHNlbnNvci0+aW5kZXg7CisJ
CWJyZWFrOworCWNhc2UgTEVBRl9sbTc1U2Vuc29yU3lzY3RsSW5kZXg6CisJCXZhbHVlLT52Lmlu
dGVnZXIgPSBzZW5zb3ItPnN5c2N0bGlkeDsKKwkJYnJlYWs7CisJY2FzZSBMRUFGX2xtNzVTZW5z
b3JEZXNjOgorCQlyZXQgPSBzdHJpbmdfZ2V0KHZhbHVlLCBzZW5zb3ItPmRlc2MsIC0xKTsKKwkJ
YnJlYWs7CisJY2FzZSBMRUFGX2xtNzVTZW5zb3JMb2NhdGlvbjoKKwkJcmV0ID0gc3RyaW5nX2dl
dCh2YWx1ZSwgc2Vuc29yLT5sb2NhdGlvbiwgLTEpOworCQlicmVhazsKKwljYXNlIExFQUZfbG03
NVNlbnNvclBucEluZm86CisJCXJldCA9IHN0cmluZ19nZXQodmFsdWUsIHNlbnNvci0+cG5waW5m
bywgLTEpOworCQlicmVhazsKKwljYXNlIExFQUZfbG03NVNlbnNvclBhcmVudDoKKwkJcmV0ID0g
c3RyaW5nX2dldCh2YWx1ZSwgc2Vuc29yLT5wYXJlbnQsIC0xKTsKKwkJYnJlYWs7CisJY2FzZSBM
RUFGX2xtNzVTZW5zb3JUZW1wZXJhdHVyZToKKwkJdmFsdWUtPnYuaW50ZWdlciA9IHNlbnNvci0+
dGVtcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gU05NUF9FUlJfUkVTX1VOQVZBSUw7
CisJCWJyZWFrOworCX0KKworCXJldHVybiAocmV0KTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246
IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9zbm1wX2xtNzUuYwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl
eHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdv
cmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQo=
--047d7b86ccbc79981504f4cdffda--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8wqTqQekBPRGdG%2BBqTn-yt1BX-3DW6K5HBt2jptc4g4-g>