Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Apr 2007 16:18:20 +0800
From:      "Howard Su" <howard0su@gmail.com>
To:        current@freebsd.org
Cc:        alfred@freebsd.org
Subject:   [Review] Remove procfs dependency of truss
Message-ID:  <f126fae00704040118w25a7b291xdcf1b6300bab1ceb@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_27400_23796817.1175674700136
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Following the suggestion in idea page, I proposed the attached patch.
I didn't change any kernel part because I think PTRACE(2) is
functional although man page didn't document it.

I tested the patch under i386 and amd64 box. The help on testing and
code review will be appreciated.

To test, please try the following commands:
1. truss ps
basic stuff
2. truss -o output ps
output the result to file
3. truss -f -o output sh -c "ps"
test follow fork
4. start TOP(1) in another session, the
truss -p <pid_of_top>

-- 
-Howard

------=_Part_27400_23796817.1175674700136
Content-Type: text/plain; name=truss_patch.diff; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f03i5k1f
Content-Disposition: attachment; filename="truss_patch.diff"

PT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL01ha2VmaWxlIzkg
KHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvTWFr
ZWZpbGUjMSAodGV4dCtrbykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVl
YnNkL3NyYy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM2ICh0ZXh0K2tvKSAtIC8vZGVwb3Qv
dXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM0ICh0ZXh0K2tv
KSA9PT09IGNvbnRlbnQKQEAgLTQzLDggKzQzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgor
I2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5j
bHVkZSA8bWFjaGluZS9yZWcuaD4KQEAgLTYzLDcgKzYyLDYgQEAKICNpbmNsdWRlICJzeXNjYWxs
LmgiCiAjaW5jbHVkZSAiZXh0ZXJuLmgiCiAKLXN0YXRpYyBpbnQgZmQgPSAtMTsKIHN0YXRpYyBp
bnQgY3BpZCA9IC0xOwogCiAjaW5jbHVkZSAic3lzY2FsbHMuaCIKQEAgLTExMywyNSArMTExLDE2
IEBACiAKIHZvaWQKIGFtZDY0X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3Np
bmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAg
IGludCBzeXNjYWxsX251bTsKICAgaW50IGksIHJlZzsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwog
Ci0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50
ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3Blbihi
dWYsIE9fUkRXUik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5m
by0+b3V0ZmlsZSwgIi0tIENBTk5PVCBPUEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1
c3NpbmZvLT5waWQ7CiAKICAgY2xlYXJfZnNjKCk7Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlm
IChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYg
KHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7CiAg
ICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMg
LS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTgxLDggKzE3MCwxMyBAQAogICAgIH0KICAg
fQogICBpZiAobmFyZ3MgPiBpKSB7Ci0gICAgbHNlZWsoUHJvY2ZkLCByZWdzLnJfcnNwICsgc2l6
ZW9mKHJlZ2lzdGVyX3QpLCBTRUVLX1NFVCk7Ci0gICAgaWYgKHJlYWQoUHJvY2ZkLCAmZnNjLmFy
Z3NbaV0sIChuYXJncy1pKSAqIHNpemVvZihyZWdpc3Rlcl90KSkgPT0gLTEpCisgICAgc3RydWN0
IHB0cmFjZV9pb19kZXNjIGlvcmVxdWVzdDsKKyAgICBpb3JlcXVlc3QucGlvZF9vcCA9IFBJT0Rf
UkVBRF9EOworICAgIGlvcmVxdWVzdC5waW9kX29mZnMgPSAodm9pZCAqKShyZWdzLnJfcnNwICsg
c2l6ZW9mKHJlZ2lzdGVyX3QpKTsKKyAgICBpb3JlcXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdz
W2ldOworICAgIGlvcmVxdWVzdC5waW9kX2xlbiA9IChuYXJncyAtIGkpICogc2l6ZW9mKHJlZ2lz
dGVyX3QpOworICAgIHB0cmFjZShQVF9JTywgY3BpZCwgKGNhZGRyX3QpJmlvcmVxdWVzdCwgMCk7
CisgICAgaWYgKGlvcmVxdWVzdC5waW9kX2xlbiA9PSAwKQogICAgICAgcmV0dXJuOwogICB9CiAK
QEAgLTIyMyw3ICsyMTcsNyBAQAogCSAgICAgIGkgPCAoZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAi
Iik7CiAjZW5kaWYKICAgICAgIGlmIChzYyAmJiAhKHNjLT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7
Ci0JZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFy
Z3MsIDAsIHRydXNzaW5mbyk7CisJZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZygmc2MtPmFyZ3Nb
aV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOwogICAgICAgfQogICAgIH0KICNpZiBERUJVRwpA
QCAtMjc5LDI1ICsyNzMsMTYgQEAKIGxvbmcKIGFtZDY0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1
c3NpbmZvICp0cnVzc2luZm8sIGludCBzeXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBi
dWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAg
aW50IGVycm9ycDsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0
cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdz
IiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBp
ZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FO
Tk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAg
ICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwog
Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3Mp
KSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2Fk
ZHJfdCkmcmVncywgMCkgPCAwKQorICB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUs
ICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwogICAgIHJldHVybiAoLTEpOwogICB9
CkBAIC0zMjgsNyArMzEzLDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIw
eCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBw
cmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5m
byk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwg
dHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0g
Ly9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9leHRlcm4uaCMxMCAodGV4
dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9leHRlcm4u
aCMyICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTMyLDggKzMyLDkgQEAKICAqLwogCiBleHRl
cm4gaW50IHNldHVwX2FuZF93YWl0KGNoYXIgKiopOwotZXh0ZXJuIGludCBzdGFydF90cmFjaW5n
KGludCwgaW50LCBpbnQsIGludCk7CitleHRlcm4gaW50IHN0YXJ0X3RyYWNpbmcoaW50KTsKIGV4
dGVybiB2b2lkIHJlc3RvcmVfcHJvYyhpbnQpOworZXh0ZXJuIHZvaWQgd2FpdGV2ZW50KHN0cnVj
dCB0cnVzc2luZm8gKik7CiBleHRlcm4gY29uc3QgY2hhciAqaW9jdGxuYW1lKHJlZ2lzdGVyX3Qg
dmFsKTsKIGV4dGVybiBjaGFyICpzdHJzaWcoaW50IHNpZyk7CiAjaWZkZWYgX19hbHBoYV9fCj09
PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9pMzg2LWZic2QuYyMx
NyAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9p
Mzg2LWZic2QuYyMzICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTQzLDkgKzQzLDggQEAKICAq
LwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5j
bHVkZSA8c3lzL3Bpb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8
c3lzL3B0cmFjZS5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9yZWcuaD4KICNpbmNsdWRlIDxtYWNo
aW5lL3BzbC5oPgpAQCAtNjMsNyArNjIsNiBAQAogI2luY2x1ZGUgInN5c2NhbGwuaCIKICNpbmNs
dWRlICJleHRlcm4uaCIKIAotc3RhdGljIGludCBmZCA9IC0xOwogc3RhdGljIGludCBjcGlkID0g
LTE7CiAKICNpbmNsdWRlICJzeXNjYWxscy5oIgpAQCAtMTEzLDI2ICsxMTEsMTggQEAKIAogdm9p
ZAogaTM4Nl9zeXNjYWxsX2VudHJ5KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IG5h
cmdzKSB7Ci0gIGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBpbnQgc3lzY2Fs
bF9udW07CiAgIGludCBpOwogICB1bnNpZ25lZCBpbnQgcGFybV9vZmZzZXQ7CiAgIHN0cnVjdCBz
eXNjYWxsICpzYyA9IE5VTEw7Ci0KLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9
IGNwaWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBp
ZCk7Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAg
ICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJT
IC0tXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlk
OwotICB9CisgIHN0cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CisgIGNwaWQgPSB0cnVz
c2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYg
KHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICAKKyAg
aWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7
CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RF
UlMgLS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTQ2LDEzICsxMzYsMTEgQEAKICAgc3lz
Y2FsbF9udW0gPSByZWdzLnJfZWF4OwogICBzd2l0Y2ggKHN5c2NhbGxfbnVtKSB7CiAgIGNhc2Ug
U1lTX3N5c2NhbGw6Ci0gICAgbHNlZWsoUHJvY2ZkLCBwYXJtX29mZnNldCwgU0VFS19TRVQpOwot
ICAgIHJlYWQoUHJvY2ZkLCAmc3lzY2FsbF9udW0sIHNpemVvZihpbnQpKTsKKyAgICBzeXNjYWxs
X251bSA9IHB0cmFjZShQVF9SRUFEX0QsIGNwaWQsIChjYWRkcl90KXBhcm1fb2Zmc2V0LCAwKTsK
ICAgICBwYXJtX29mZnNldCArPSBzaXplb2YoaW50KTsKICAgICBicmVhazsKICAgY2FzZSBTWVNf
X19zeXNjYWxsOgotICAgIGxzZWVrKFByb2NmZCwgcGFybV9vZmZzZXQsIFNFRUtfU0VUKTsKLSAg
ICByZWFkKFByb2NmZCwgJnN5c2NhbGxfbnVtLCBzaXplb2YoaW50KSk7CisgICAgc3lzY2FsbF9u
dW0gPSBwdHJhY2UoUFRfUkVBRF9ELCBjcGlkLCAoY2FkZHJfdClwYXJtX29mZnNldCwgMCk7CiAg
ICAgcGFybV9vZmZzZXQgKz0gc2l6ZW9mKHF1YWRfdCk7CiAgICAgYnJlYWs7CiAgIH0KQEAgLTE3
Niw4ICsxNjQsMTIgQEAKICAgICByZXR1cm47CiAKICAgZnNjLmFyZ3MgPSBtYWxsb2MoKDErbmFy
Z3MpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLSAgbHNlZWsoUHJvY2ZkLCBwYXJtX29mZnNl
dCwgU0VFS19TRVQpOwotICBpZiAocmVhZChQcm9jZmQsIGZzYy5hcmdzLCBuYXJncyAqIHNpemVv
Zih1bnNpZ25lZCBsb25nKSkgPT0gLTEpCisgIGlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFE
X0Q7CisgIGlvcmVxdWVzdC5waW9kX29mZnMgPSAodm9pZCAqKXBhcm1fb2Zmc2V0OworICBpb3Jl
cXVlc3QucGlvZF9hZGRyID0gZnNjLmFyZ3M7CisgIGlvcmVxdWVzdC5waW9kX2xlbiA9IG5hcmdz
ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworICBwdHJhY2UoUFRfSU8sIGNwaWQsIChjYWRkcl90
KSZpb3JlcXVlc3QsIDApOworICBpZiAoaW9yZXF1ZXN0LnBpb2RfbGVuID09IDApCiAgICAgcmV0
dXJuOwogCiAgIGlmIChmc2MubmFtZSkKQEAgLTIxOCw3ICsyMTAsNyBAQAogCSAgICAgIGkgPCAo
ZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAiIik7CiAjZW5kaWYKICAgICAgIGlmIChzYyAmJiAhKHNj
LT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7Ci0JZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZyhQcm9j
ZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNzaW5mbyk7CisJZnNjLnNfYXJnc1tp
XSA9IHByaW50X2FyZygmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOwogICAg
ICAgfQogICAgIH0KICNpZiBERUJVRwpAQCAtMjc0LDI4ICsyNjYsMjAgQEAKIGxvbmcKIGkzODZf
c3lzY2FsbF9leGl0KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IHN5c2NhbGxfbnVt
IF9fdW51c2VkKQogewotICBjaGFyIGJ1ZlszMl07CiAgIHN0cnVjdCByZWcgcmVnczsKICAgbG9u
ZyByZXR2YWw7CiAgIGludCBpOwogICBpbnQgZXJyb3JwOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7
CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAgICBzcHJp
bnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVu
KGJ1ZiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnByaW50Zih0cnVz
c2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIpOwotICAgICAg
cmV0dXJuICgtMSk7Ci0gICAgfQotICAgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKLSAgfQorICBj
cGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQo
ZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICBpZiAocHRyYWNl
KFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDApCisgIHsKICAgICBmcHJp
bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lTVEVSUyAtLVxuIik7
CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KKyAgCiAgIHJldHZhbCA9IHJlZ3Mucl9lYXg7CiAgIGVy
cm9ycCA9ICEhKHJlZ3Mucl9lZmxhZ3MgJiBQU0xfQyk7CiAKQEAgLTMyMyw3ICszMDcsNyBAQAog
CWlmIChlcnJvcnApCiAJICBhc3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFy
Z3NbaV0ub2Zmc2V0XSk7CiAJZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+
YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9h
cmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2Fy
Z3NbaV0gPSB0ZW1wOwogICAgICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNk
L3NyYy91c3IuYmluL3RydXNzL2kzODYtbGludXguYyMxNiAodGV4dCtrbykgLSAvL2RlcG90L3Vz
ZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2LWxpbnV4LmMjMyAodGV4dCtrbykg
PT09PSBjb250ZW50CkBAIC00MSw4ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNp
bmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgogI2luY2x1
ZGUgPG1hY2hpbmUvcHNsLmg+CkBAIC02MCw3ICs1OSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5o
IgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50
IGNwaWQgPSAtMTsKIAogI2luY2x1ZGUgImxpbnV4X3N5c2NhbGxzLmgiCkBAIC0xMDgsMjggKzEw
NiwyMCBAQAogCiB2b2lkCiBpMzg2X2xpbnV4X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5m
byAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVn
IHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsKICAgaW50IGk7CiAgIHN0cnVjdCBzeXNjYWxsICpz
YzsKIAotICBpZiAoZmQgPT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkgewotICAgIHNw
cmludGYoYnVmLCAiL3Byb2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAgICBmZCA9IG9w
ZW4oYnVmLCBPX1JEV1IpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnByaW50Zih0cnVz
c2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9
IHRydXNzaW5mby0+cGlkOwogCiAgIGNsZWFyX2ZzYygpOwotICBsc2VlayhmZCwgMEwsIDApOwot
ICBpZiAocmVhZChmZCwgJnJlZ3MsIHNpemVvZihyZWdzKSkgIT0gc2l6ZW9mKHJlZ3MpKSB7Cisg
IAorICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDAp
CisgIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJF
R0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwotICB9CisgIH0gCiAgIHN5c2NhbGxfbnVtID0g
cmVncy5yX2VheDsKIAogICBmc2MubnVtYmVyID0gc3lzY2FsbF9udW07CkBAIC0yMDAsNyArMTkw
LDcgQEAKIAkgICAgICBpIDwgKGZzYy5uYXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAg
ICAgICBpZiAoc2MgJiYgIShzYy0+YXJnc1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3Nb
aV0gPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2lu
Zm8pOworCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywg
MCwgdHJ1c3NpbmZvKTsKICAgICAgIH0KICAgICB9CiAjaWYgREVCVUcKQEAgLTI2NCwyOCArMjU0
LDE5IEBACiBsb25nCiBpMzg2X2xpbnV4X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0
cnVzc2luZm8sIGludCBzeXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwog
ICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9y
cDsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8t
PnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3Np
bmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0g
LTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4g
UkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0g
dHJ1c3NpbmZvLT5waWQ7CisgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKKyAgaWYgKHB0cmFjZShQ
VF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7CisgICAgZnByaW50
Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwor
ICAgIHJldHVybiAoLTEpOwogICB9CiAKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQo
ZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgewotICAgIGZwcmludGYo
dHJ1c3NpbmZvLT5vdXRmaWxlLCAiXG4iKTsKLSAgICByZXR1cm4gKC0xKTsKLSAgfQogICByZXR2
YWwgPSByZWdzLnJfZWF4OwogICBlcnJvcnAgPSAhIShyZWdzLnJfZWZsYWdzICYgUFNMX0MpOwog
CkBAIC0zMTMsNyArMjk0LDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIw
eCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBw
cmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5m
byk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwg
dHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0g
Ly9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9pMzg2LmNvbmYjMSAodGV4
dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2LmNv
bmYjMSAodGV4dCtrbykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNk
L3NyYy91c3IuYmluL3RydXNzL2kzODZsaW51eC5jb25mIzEgKHRleHQra28pIC0gLy9kZXBvdC91
c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvaTM4NmxpbnV4LmNvbmYjMSAodGV4dCtr
bykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmlu
L3RydXNzL2lhNjQtZmJzZC5jIzkgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3Ry
dXNzL3Vzci5iaW4vdHJ1c3MvaWE2NC1mYnNkLmMjMiAodGV4dCtrbykgPT09PSBjb250ZW50CkBA
IC00Myw4ICs0Myw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUg
PHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHRy
YWNlLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcmVn
Lmg+CkBAIC02Miw3ICs2MSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5oIgogI2luY2x1ZGUgImV4
dGVybi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50IGNwaWQgPSAtMTsKIAog
I2luY2x1ZGUgInN5c2NhbGxzLmgiCkBAIC0xMTIsMjYgKzExMCwxNiBAQAogCiB2b2lkCiBpYTY0
X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsK
LSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsK
ICAgaW50IGk7CiAgIHVuc2lnbmVkIGxvbmcgKnBhcm1fb2Zmc2V0OwogICBzdHJ1Y3Qgc3lzY2Fs
bCAqc2M7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAg
ICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQg
PSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYo
dHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNw
aWQgPSB0cnVzc2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAw
KTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkg
eworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDAp
IHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lT
VEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yMDQsNyArMTkyLDcgQEAKIAkgICAg
ICBpIDwgKGZzYy5uYXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2Mg
JiYgIShzYy0+YXJnc1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9h
cmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5z
X2FyZ3NbaV0gPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZv
KTsKICAgICAgIH0KICAgICB9CiAjaWYgREVCVUcKQEAgLTI2MCwyNSArMjQ4LDE1IEBACiBsb25n
CiBpYTY0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8sIGludCBzeXNj
YWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7
CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9ycDsKICAgc3RydWN0IHN5c2Nh
bGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0g
ICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZk
ID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmlu
dGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsK
LSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0g
IH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwogCi0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlm
IChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYg
KHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAgICAg
ZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1c
biIpOwogICAgIHJldHVybiAoLTEpOwogICB9CkBAIC0zMDksNyArMjg3LDcgQEAKIAlpZiAoZXJy
b3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9m
ZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0s
IGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+
YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0g
dGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNy
LmJpbi90cnVzcy9tYWluLmMjMjQgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3Ry
dXNzL3Vzci5iaW4vdHJ1c3MvbWFpbi5jIzQgKHRleHQra28pID09PT0gY29udGVudApAQCAtMzks
MTEgKzM5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5
cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2lu
Y2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJy
Lmg+CkBAIC01OSwxMyArNTgsOCBAQAogI2luY2x1ZGUgInRydXNzLmgiCiAjaW5jbHVkZSAiZXh0
ZXJuLmgiCiAKLS8qCi0gKiBJdCdzIGRpZmZpY3VsdCB0byBwYXJhbWV0ZXJpemUgdGhpcyBiZWNh
dXNlIGl0IG11c3QgYmUKLSAqIGFjY2Vzc2libGUgaW4gYSBzaWduYWwgaGFuZGxlci4KLSAqLwor
I2RlZmluZSBNQVhBUkdTIDUKIAotaW50IFByb2NmZDsKLQogc3RhdGljIHZvaWQKIHVzYWdlKHZv
aWQpCiB7CkBAIC0xMTksMTggKzExMywxOSBAQAogc2V0X2V0eXBlKHN0cnVjdCB0cnVzc2luZm8g
KnRydXNzaW5mbykKIHsKIAlzdHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWNoYXIgZXR5cGVbMjRd
OwogCWNoYXIgcHJvZ3RbMzJdOwotCWludCBmZDsKKwkKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHBy
b2d0KTsKKwlpbnQgbWliWzRdOworCWludCBlcnJvcjsKIAotCXNwcmludGYoZXR5cGUsICIvcHJv
Yy8lZC9ldHlwZSIsIHRydXNzaW5mby0+cGlkKTsKLQlpZiAoKGZkID0gb3BlbihldHlwZSwgT19S
RE9OTFkpKSA9PSAtMSkgewotCQlzdHJjcHkocHJvZ3QsICJGcmVlQlNEIGEub3V0Iik7Ci0JfSBl
bHNlIHsKLQkJaW50IGxlbiA9IHJlYWQoZmQsIHByb2d0LCBzaXplb2YocHJvZ3QpKTsKLQkJcHJv
Z3RbbGVuLTFdID0gJ1wwJzsKLQkJY2xvc2UoZmQpOwotCX0KKwltaWJbMF0gPSBDVExfS0VSTjsK
KwltaWJbMV0gPSBLRVJOX1BST0M7CisJbWliWzJdID0gS0VSTl9QUk9DX1NWX05BTUU7CisJbWli
WzNdID0gdHJ1c3NpbmZvLT5waWQ7CisJZXJyb3IgPSBzeXNjdGwobWliLCA0LCBwcm9ndCwgJmxl
biwgTlVMTCwgMCk7CisJaWYgKGVycm9yICE9IDApCisJCWVycigxLCAiY2FuIG5vdCBzeXNjdGwi
KTsKIAogCWZvciAoZnVuY3MgPSBleF90eXBlczsgZnVuY3MtPnR5cGU7IGZ1bmNzKyspCiAJCWlm
ICghc3RyY21wKGZ1bmNzLT50eXBlLCBwcm9ndCkpCkBAIC0xNjcsMTQgKzE2MiwxMiBAQAogCWlu
dCBjOwogCWludCBpOwogCWNoYXIgKipjb21tYW5kOwotCXN0cnVjdCBwcm9jZnNfc3RhdHVzIHBm
czsKIAlzdHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWludCBpbl9leGVjLCBzaWdleGl0LCBpbml0
aWFsX29wZW47CisJaW50IHNpZ2V4aXQsIGluaXRpYWxfb3BlbjsKIAljaGFyICpmbmFtZTsKIAlz
dHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm87CiAJY2hhciAqc2lnbmFtZTsKIAotCWluX2V4ZWMg
PSAwOwogCXNpZ2V4aXQgPSAwOwogCWZuYW1lID0gTlVMTDsKIAlpbml0aWFsX29wZW4gPSAxOwpA
QCAtMTg2LDYgKzE3OSw3IEBACiAJYnplcm8odHJ1c3NpbmZvLCBzaXplb2Yoc3RydWN0IHRydXNz
aW5mbykpOwogCXRydXNzaW5mby0+b3V0ZmlsZSA9IHN0ZGVycjsKIAl0cnVzc2luZm8tPnN0cnNp
emUgPSAzMjsKKwl0cnVzc2luZm8tPnByX3doeSA9IFNfTk9ORTsKIAogCXdoaWxlICgoYyA9IGdl
dG9wdChhYywgYXYsICJwOm86ZmFlZERzOlMiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjKSB7CkBA
IC0yNDUsNiArMjM5LDcgQEAKIAkJc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOwogCQlzaWduYWwo
U0lHUVVJVCwgU0lHX0lHTik7CiAJfSBlbHNlIHsKKwkJc3RhcnRfdHJhY2luZyh0cnVzc2luZm8t
PnBpZCk7CiAJCXNpZ25hbChTSUdJTlQsIHJlc3RvcmVfcHJvYyk7CiAJCXNpZ25hbChTSUdURVJN
LCByZXN0b3JlX3Byb2MpOwogCQlzaWduYWwoU0lHUVVJVCwgcmVzdG9yZV9wcm9jKTsKQEAgLTI1
NywxOCArMjUyLDkgQEAKIAkgKi8KIAogU1RBUlRfVFJBQ0U6Ci0JUHJvY2ZkID0gc3RhcnRfdHJh
Y2luZygKLQkgICAgdHJ1c3NpbmZvLT5waWQsIGluaXRpYWxfb3BlbiwKLQkgICAgU19FWEVDIHwg
U19TQ0UgfCBTX1NDWCB8IFNfQ09SRSB8IFNfRVhJVCB8Ci0JICAgICgodHJ1c3NpbmZvLT5mbGFn
cyAmIE5PU0lHUykgPyAwIDogU19TSUcpLAotCSAgICAoKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xM
T1dGT1JLUykgPyBQRl9GT1JLIDogMCkpOworCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7
CisKIAlpbml0aWFsX29wZW4gPSAwOwotCWlmIChQcm9jZmQgPT0gLTEpCi0JCXJldHVybiAoMCk7
Ci0KLQlwZnMud2h5ID0gMDsKLQotCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7CiAJLyoK
IAkgKiBBdCB0aGlzIHBvaW50LCBpdCdzIGEgc2ltcGxlIGxvb3AsIHdhaXRpbmcgZm9yIHRoZSBw
cm9jZXNzIHRvCiAJICogc3RvcCwgZmluZGluZyBvdXQgd2h5LCBwcmludGluZyBvdXQgd2h5LCBh
bmQgdGhlbiBjb250aW51aW5nIGl0LgpAQCAtMjc4LDExOCArMjY0LDkyIEBACiAJY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSwgJnRydXNzaW5mby0+c3RhcnRfdGltZSk7CiAKIAlkbyB7Ci0J
CWludCB2YWwgPSAwOwogCQlzdHJ1Y3QgdGltZXNwZWMgdGltZWRpZmY7CisJCXdhaXRldmVudCh0
cnVzc2luZm8pOwogCi0JCWlmIChpb2N0bChQcm9jZmQsIFBJT0NXQUlULCAmcGZzKSA9PSAtMSkK
LQkJCXdhcm4oIlBJT0NXQUlUIHRvcCBvZiBsb29wIik7Ci0JCWVsc2UgewotCQkJc3dpdGNoKGkg
PSBwZnMud2h5KSB7Ci0JCQljYXNlIFNfU0NFOgotCQkJCWZ1bmNzLT5lbnRlcl9zeXNjYWxsKHRy
dXNzaW5mbywgcGZzLnZhbCk7Ci0JCQkJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKLQkJ
CQkgICAgJnRydXNzaW5mby0+YmVmb3JlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU19TQ1g6Ci0J
CQkJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKLQkJCQkgICAgJnRydXNzaW5mby0+YWZ0
ZXIpOwotCQkJCS8qCi0JCQkJICogVGhpcyBpcyBzbyB3ZSBkb24ndCBnZXQgdHdvIG1lc3NhZ2Vz
IGZvcgotCQkJCSAqIGFuIGV4ZWMgLS0gb25lIGZvciB0aGUgU19FWEVDLCBhbmQgb25lIGZvcgot
CQkJCSAqIHRoZSBzeXNjYWxsIGV4aXQuICBJdCBhbHNvLCBjb252ZW5pZW50bHksCi0JCQkJICog
ZW5zdXJlcyB0aGF0IHRoZSBmaXJzdCBtZXNzYWdlIHByaW50ZWQgb3V0Ci0JCQkJICogaXNuJ3Qg
dGhlIHJldHVybi1mcm9tLXN5c2NhbGwgdXNlZCB0bwotCQkJCSAqIGNyZWF0ZSB0aGUgcHJvY2Vz
cy4KLQkJCQkgKi8KLQkJCQlpZiAoaW5fZXhlYykgewotCQkJCQlpbl9leGVjID0gMDsKLQkJCQkJ
YnJlYWs7Ci0JCQkJfQorCQlzd2l0Y2goaSA9IHRydXNzaW5mby0+cHJfd2h5KSB7CisJCWNhc2Ug
U19TQ0U6CisJCQlmdW5jcy0+ZW50ZXJfc3lzY2FsbCh0cnVzc2luZm8sIE1BWEFSR1MpOworCQkJ
Y2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKKwkJCSAgICAmdHJ1c3NpbmZvLT5iZWZvcmUp
OworCQkJYnJlYWs7CisJCWNhc2UgU19TQ1g6CisJCQljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxU
SU1FLAorCQkJICAgICZ0cnVzc2luZm8tPmFmdGVyKTsKIAotCQkJCWlmICh0cnVzc2luZm8tPmlu
X2ZvcmsgJiYKLQkJCQkgICAgKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykpIHsKLQkJ
CQkJaW50IGNoaWxkcGlkOworCQkJaWYgKHRydXNzaW5mby0+aW5fZm9yayAmJgorCQkJICAgICh0
cnVzc2luZm8tPmZsYWdzICYgRk9MTE9XRk9SS1MpKSB7CisJCQkJaW50IGNoaWxkcGlkOwogCi0J
CQkJCXRydXNzaW5mby0+aW5fZm9yayA9IDA7Ci0JCQkJCWNoaWxkcGlkID0KLQkJCQkJICAgIGZ1
bmNzLT5leGl0X3N5c2NhbGwodHJ1c3NpbmZvLAotCQkJCQkJcGZzLnZhbCk7CisJCQkJdHJ1c3Np
bmZvLT5pbl9mb3JrID0gMDsKKwkJCQljaGlsZHBpZCA9CisJCQkJICAgIGZ1bmNzLT5leGl0X3N5
c2NhbGwodHJ1c3NpbmZvLAorCQkJCQl0cnVzc2luZm8tPnByX2RhdGEpOwogCi0JCQkJCS8qCi0J
CQkJCSAqIEZvcmsgYSBuZXcgY29weSBvZiBvdXJzZWxmIHRvIHRyYWNlCi0JCQkJCSAqIHRoZSBj
aGlsZCBvZiB0aGUgb3JpZ2luYWwgdHJhY2VkCi0JCQkJCSAqIHByb2Nlc3MuCi0JCQkJCSAqLwot
CQkJCQlpZiAoZm9yaygpID09IDApIHsKLQkJCQkJCXRydXNzaW5mby0+cGlkID0gY2hpbGRwaWQ7
Ci0JCQkJCQlnb3RvIFNUQVJUX1RSQUNFOwotCQkJCQl9Ci0JCQkJCWJyZWFrOworCQkJCS8qCisJ
CQkJICogRm9yayBhIG5ldyBjb3B5IG9mIG91cnNlbGYgdG8gdHJhY2UKKwkJCQkgKiB0aGUgY2hp
bGQgb2YgdGhlIG9yaWdpbmFsIHRyYWNlZAorCQkJCSAqIHByb2Nlc3MuCisJCQkJICovCisJCQkJ
aWYgKGZvcmsoKSA9PSAwKSB7CisJCQkJCXRydXNzaW5mby0+cGlkID0gY2hpbGRwaWQ7CisJCQkJ
CXN0YXJ0X3RyYWNpbmcodHJ1c3NpbmZvLT5waWQpOworCQkJCQlnb3RvIFNUQVJUX1RSQUNFOwog
CQkJCX0KLQkJCQlmdW5jcy0+ZXhpdF9zeXNjYWxsKHRydXNzaW5mbywgcGZzLnZhbCk7CiAJCQkJ
YnJlYWs7Ci0JCQljYXNlIFNfU0lHOgotCQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgRk9MTE9X
Rk9SS1MpCi0JCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJTVkOiAiLAotCQkJCQkg
ICAgdHJ1c3NpbmZvLT5waWQpOwotCQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgQUJTT0xVVEVU
SU1FU1RBTVBTKSB7Ci0JCQkJCXRpbWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKLQkJCQkJ
ICAgICZ0cnVzc2luZm8tPnN0YXJ0X3RpbWUsICZ0aW1lZGlmZik7Ci0JCQkJCWZwcmludGYodHJ1
c3NpbmZvLT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCi0JCQkJCSAgICAobG9uZyl0aW1lZGlmZi50
dl9zZWMsCi0JCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKLQkJCQl9Ci0JCQkJaWYgKHRydXNz
aW5mby0+ZmxhZ3MgJiBSRUxBVElWRVRJTUVTVEFNUFMpIHsKLQkJCQkJdGltZXNwZWNzdWJ0KCZ0
cnVzc2luZm8tPmFmdGVyLAotCQkJCQkgICAgJnRydXNzaW5mby0+YmVmb3JlLCAmdGltZWRpZmYp
OwotCQkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAotCQkJCQkg
ICAgKGxvbmcpdGltZWRpZmYudHZfc2VjLAotCQkJCQkgICAgdGltZWRpZmYudHZfbnNlYyk7Ci0J
CQkJfQotCQkJCXNpZ25hbWUgPSBzdHJzaWcocGZzLnZhbCk7Ci0JCQkJZnByaW50Zih0cnVzc2lu
Zm8tPm91dGZpbGUsCi0JCQkJICAgICJTSUdOQUwgJWx1ICglcylcbiIsIHBmcy52YWwsCi0JCQkJ
ICAgIHNpZ25hbWUgPT0gTlVMTCA/ICI/IiA6IHNpZ25hbWUpOwotCQkJCWZyZWUoc2lnbmFtZSk7
Ci0JCQkJc2lnZXhpdCA9IHBmcy52YWw7CisJCQl9CisJCQlmdW5jcy0+ZXhpdF9zeXNjYWxsKHRy
dXNzaW5mbywgTUFYQVJHUyk7CisJCQlicmVhazsKKwkJY2FzZSBTX1NJRzoKKwkJCWlmICh0cnVz
c2luZm8tPmZsYWdzICYgTk9TSUdTKQogCQkJCWJyZWFrOwotCQkJY2FzZSBTX0VYSVQ6Ci0JCQkJ
aWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykKLQkJCQkJZnByaW50Zih0cnVzc2lu
Zm8tPm91dGZpbGUsICIlNWQ6ICIsCi0JCQkJCSAgICB0cnVzc2luZm8tPnBpZCk7Ci0JCQkJaWYg
KHRydXNzaW5mby0+ZmxhZ3MgJiBBQlNPTFVURVRJTUVTVEFNUFMpIHsKLQkJCQkJdGltZXNwZWNz
dWJ0KCZ0cnVzc2luZm8tPmFmdGVyLAotCQkJCQkgICAgJnRydXNzaW5mby0+c3RhcnRfdGltZSwg
JnRpbWVkaWZmKTsKLQkJCQkJZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQg
IiwKLQkJCQkJICAgIChsb25nKXRpbWVkaWZmLnR2X3NlYywKLQkJCQkJICAgIHRpbWVkaWZmLnR2
X25zZWMpOwotCQkJCX0KLQkJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIFJFTEFUSVZFVElNRVNU
QU1QUykgewotCQkJCSAgdGltZXNwZWNzdWJ0KCZ0cnVzc2luZm8tPmFmdGVyLAotCQkJCSAgICAg
ICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKLQkJCQkgIGZwcmludGYodHJ1c3NpbmZv
LT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCi0JCQkJICAgIChsb25nKXRpbWVkaWZmLnR2X3NlYywg
dGltZWRpZmYudHZfbnNlYyk7Ci0JCQkJfQotCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxl
LAotCQkJCSAgICAicHJvY2VzcyBleGl0LCBydmFsID0gJWx1XG4iLCBwZnMudmFsKTsKLQkJCQli
cmVhazsKLQkJCWNhc2UgU19FWEVDOgotCQkJCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7
Ci0JCQkJaW5fZXhlYyA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWZwcmludGYo
dHJ1c3NpbmZvLT5vdXRmaWxlLAotCQkJCSAgICAiUHJvY2VzcyBzdG9wcGVkIGJlY2F1c2Ugb2Y6
ICAlZFxuIiwgaSk7Ci0JCQkJYnJlYWs7CisJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIEZPTExP
V0ZPUktTKQorCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJTVkOiAiLAorCQkJCSAg
ICB0cnVzc2luZm8tPnBpZCk7CisJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIEFCU09MVVRFVElN
RVNUQU1QUykgeworCQkJCXRpbWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKKwkJCQkgICAg
JnRydXNzaW5mby0+c3RhcnRfdGltZSwgJnRpbWVkaWZmKTsKKwkJCQlmcHJpbnRmKHRydXNzaW5m
by0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAorCQkJCSAgICAobG9uZyl0aW1lZGlmZi50dl9zZWMs
CisJCQkJICAgIHRpbWVkaWZmLnR2X25zZWMpOworCQkJfQorCQkJaWYgKHRydXNzaW5mby0+Zmxh
Z3MgJiBSRUxBVElWRVRJTUVTVEFNUFMpIHsKKwkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+
YWZ0ZXIsCisJCQkJICAgICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKKwkJCQlmcHJp
bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAorCQkJCSAgICAobG9uZyl0aW1l
ZGlmZi50dl9zZWMsCisJCQkJICAgIHRpbWVkaWZmLnR2X25zZWMpOworCQkJfQorCQkJc2lnbmFt
ZSA9IHN0cnNpZyh0cnVzc2luZm8tPnByX2RhdGEpOworCQkJZnByaW50Zih0cnVzc2luZm8tPm91
dGZpbGUsCisJCQkgICAgIlNJR05BTCAldSAoJXMpXG4iLCB0cnVzc2luZm8tPnByX2RhdGEsCisJ
CQkgICAgc2lnbmFtZSA9PSBOVUxMID8gIj8iIDogc2lnbmFtZSk7CisJCQlmcmVlKHNpZ25hbWUp
OworCQkJYnJlYWs7CisJCWNhc2UgU19FWElUOgorCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBG
T0xMT1dGT1JLUykKKwkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiU1ZDogIiwKKwkJ
CQkgICAgdHJ1c3NpbmZvLT5waWQpOworCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBBQlNPTFVU
RVRJTUVTVEFNUFMpIHsKKwkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+YWZ0ZXIsCisJCQkJ
ICAgICZ0cnVzc2luZm8tPnN0YXJ0X3RpbWUsICZ0aW1lZGlmZik7CisJCQkJZnByaW50Zih0cnVz
c2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCQkgICAgKGxvbmcpdGltZWRpZmYudHZf
c2VjLAorCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKKwkJCX0KKwkJCWlmICh0cnVzc2luZm8t
PmZsYWdzICYgUkVMQVRJVkVUSU1FU1RBTVBTKSB7CisJCQkgIHRpbWVzcGVjc3VidCgmdHJ1c3Np
bmZvLT5hZnRlciwKKwkJCSAgICAgICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKKwkJ
CSAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCSAgICAobG9u
Zyl0aW1lZGlmZi50dl9zZWMsIHRpbWVkaWZmLnR2X25zZWMpOwogCQkJfQorCQkJZnByaW50Zih0
cnVzc2luZm8tPm91dGZpbGUsCisJCQkgICAgInByb2Nlc3MgZXhpdCwgcnZhbCA9ICV1XG4iLCB0
cnVzc2luZm8tPnByX2RhdGEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJ
fQotCQlpZiAoaW9jdGwoUHJvY2ZkLCBQSU9DQ09OVCwgdmFsKSA9PSAtMSkgewotCQkJaWYgKGtp
bGwodHJ1c3NpbmZvLT5waWQsIDApID09IC0xICYmIGVycm5vID09IEVTUkNIKQotCQkJCWJyZWFr
OwotCQkJZWxzZQotCQkJCXdhcm4oIlBJT0NDT05UIik7Ci0JCX0KLQl9IHdoaWxlIChwZnMud2h5
ICE9IFNfRVhJVCk7CisJfSB3aGlsZSAodHJ1c3NpbmZvLT5wcl93aHkgIT0gU19FWElUKTsKIAlm
Zmx1c2godHJ1c3NpbmZvLT5vdXRmaWxlKTsKIAlpZiAoc2lnZXhpdCkgewogCQlzdHJ1Y3Qgcmxp
bWl0IHJscDsKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3Bv
d2VycGMtZmJzZC5jIzEgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vz
ci5iaW4vdHJ1c3MvcG93ZXJwYy1mYnNkLmMjMyAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC00
MSw4ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5
cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNl
Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+
CkBAIC02Miw3ICs2MSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5oIgogI2luY2x1ZGUgImV4dGVy
bi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50IGNwaWQgPSAtMTsKIAogI2lu
Y2x1ZGUgInN5c2NhbGxzLmgiCkBAIC0xMjAsMTkgKzExOCwxMCBAQAogICB1bnNpZ25lZCBpbnQg
cmVnYXJnczsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVz
c2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwg
dHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRXUik7Ci0gICAgaWYgKGZk
ID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBP
UEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwaWQgPSB0
cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKICAgY2xlYXJf
ZnNjKCk7Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9m
KHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlk
LCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZp
bGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwogICAgIHJldHVybjsKICAgfQpA
QCAtMTc2LDkgKzE2NSwxNiBAQAogICBmc2MuYXJncyA9IG1hbGxvYygoMStuYXJncykgKiBzaXpl
b2YodW5zaWduZWQgbG9uZykpOwogCiAgIGlmIChuYXJncyA+IHJlZ2FyZ3MpIHsKKyAgICBzdHJ1
Y3QgcHRyYWNlX2lvX2Rlc2MgaW9yZXF1ZXN0OwogICAgIG1lbW1vdmUoJmZzYy5hcmdzWzBdLCBh
cmdzLCByZWdhcmdzICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7Ci0gICAgbHNlZWsoUHJvY2ZkLCBy
ZWdzLmZpeHJlZ1sxXSArIDgsIFNFRUtfU0VUKTsKLSAgICByZWFkKFByb2NmZCwgJmZzYy5hcmdz
W3JlZ2FyZ3NdLCAobmFyZ3MgLSByZWdhcmdzKSAqIHNpemVvZihmc2MuYXJnc1swXSkpOworCisg
ICAgaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9EX1JFQURfRDsKKyAgICBpb3JlcXVlc3QucGlvZF9v
ZmZzID0gKHZvaWQgKikocmVncy5maXhyZWdbMV0gKyA4KTsKKyAgICBpb3JlcXVlc3QucGlvZF9h
ZGRyID0gJmZzYy5hcmdzW3JlZ2FyZ3NdOworICAgIGlvcmVxdWVzdC5waW9kX2xlbiA9IChuYXJn
cyAtIHJlZ2FyZ3MpICogc2l6ZW9mKGZzYy5hcmdzWzBdKTsKKyAgICBwdHJhY2UoUFRfSU8sIGNw
aWQsIChjYWRkcl90KSZpb3JlcXVlc3QsIDApOworICAgIGlmIChpb3JlcXVlc3QucGlvZF9sZW4g
PT0gMCkKKyAgICAgICByZXR1cm47CiAgIH0gZWxzZSB7CiAgICAgbWVtbW92ZSgmZnNjLmFyZ3Nb
MF0sIGFyZ3MsIG5hcmdzICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CiAgIH0KQEAgLTIyMCw3ICsy
MTYsNyBAQAogCSAgICAgIGkgPCAoZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAiIik7CiAjZW5kaWYK
ICAgICAgIGlmIChzYyAmJiAhKHNjLT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7Ci0JZnNjLnNfYXJn
c1tpXSA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNz
aW5mbyk7CisJZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZygmc2MtPmFyZ3NbaV0sIGZzYy5hcmdz
LCAwLCB0cnVzc2luZm8pOwogICAgICAgfQogICAgIH0KICNpZiBERUJVRwpAQCAtMjc1LDI1ICsy
NzEsMTUgQEAKIGxvbmcKIHBvd2VycGNfc3lzY2FsbF9leGl0KHN0cnVjdCB0cnVzc2luZm8gKnRy
dXNzaW5mbywgaW50IHN5c2NhbGxfbnVtIF9fdW51c2VkKQogewotICBjaGFyIGJ1ZlszMl07CiAg
IHN0cnVjdCByZWcgcmVnczsKICAgbG9uZyByZXR2YWw7CiAgIGludCBpOwogICBpbnQgZXJyb3Jw
OwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+
cGlkICE9IGNwaWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2lu
Zm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAt
MSkgewotICAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBS
RUdJU1RFUlMgLS1cbiIpOwotICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotICAgIGNwaWQgPSB0
cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKLSAgbHNlZWso
ZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVv
ZihyZWdzKSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdz
LCAwKSA8IDApIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIlxuIik7CiAgICAg
cmV0dXJuICgtMSk7CiAgIH0KQEAgLTMzMiw3ICszMTgsNyBAQAogCWlmIChlcnJvcnApCiAJICBh
c3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJ
ZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3Ms
IHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBm
c2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAg
ICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNz
L3NldHVwLmMjMTEgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5i
aW4vdHJ1c3Mvc2V0dXAuYyM1ICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTM4LDExICszOCwx
MiBAQAogICovCiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwu
aD4KLSNpbmNsdWRlIDxzeXMvcGlvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8c3lzL3B0cmFjZS5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKICNpbmNsdWRlIDxl
cnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8
c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTUxLDEwICs1MiwxMiBAQAogI2luY2x1
ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1ZGUgPG1hY2hpbmUvcmVn
Lmg+CisKICNpbmNsdWRlICJ0cnVzcy5oIgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1zdGF0aWMg
aW50IGV2ZmxhZ3MgPSAwOworc3RhdGljIGludCBjaGlsZF9waWQ7CiAKIC8qCiAgKiBzZXR1cF9h
bmRfd2FpdCgpIGlzIGNhbGxlZCB0byBzdGFydCBhIHByb2Nlc3MuICBBbGwgaXQgcmVhbGx5IGRv
ZXMKQEAgLTY2LDc1ICs2OSwyOCBAQAogaW50CiBzZXR1cF9hbmRfd2FpdChjaGFyICpjb21tYW5k
W10pCiB7Ci0Jc3RydWN0IHByb2Nmc19zdGF0dXMgcGZzOwotCWNoYXIgYnVmWzMyXTsKLQlpbnQg
ZmQ7CiAJaW50IHBpZDsKLQlpbnQgZmxhZ3M7Ci0JaW50IGxvb3A7CisJaW50IHdhaXR2YWw7CiAK
LQlwaWQgPSBmb3JrKCk7CisJcGlkID0gdmZvcmsoKTsKIAlpZiAocGlkID09IC0xKSB7CiAJCWVy
cigxLCAiZm9yayBmYWlsZWQiKTsKIAl9CiAJaWYgKHBpZCA9PSAwKSB7CS8qIENoaWxkICovCi0J
CWludCBtYXNrID0gU19FWEVDIHwgU19FWElUOwotCQlmZCA9IG9wZW4oIi9wcm9jL2N1cnByb2Mv
bWVtIiwgT19XUk9OTFkpOwotCQlpZiAoZmQgPT0gLTEpCi0JCQllcnIoMiwgImNhbm5vdCBvcGVu
IC9wcm9jL2N1cnByb2MvbWVtIik7Ci0JCWZjbnRsKGZkLCBGX1NFVEZELCAxKTsKLQkJaWYgKGlv
Y3RsKGZkLCBQSU9DQklTLCBtYXNrKSA9PSAtMSkKLQkJCWVycigzLCAiUElPQ0JJUyIpOwotCQlm
bGFncyA9IFBGX0xJTkdFUjsKLQkJLyoKLQkJICogVGhlIFBGX0xJTkdFUiBmbGFnIHRlbGxzIHBy
b2NmcyBub3QgdG8gd2FrZSB1cCB0aGUKLQkJICogcHJvY2VzcyBvbiBsYXN0IGNsb3NlOyBub3Jt
YWxseSwgdGhpcyBpcyB0aGUgYmVoYXZpb3VyCi0JCSAqIHdlIHdhbnQuCi0JCSAqLwotCQlpZiAo
aW9jdGwoZmQsIFBJT0NTRkwsIGZsYWdzKSA9PSAtMSkKLQkJCXdhcm4oImNhbm5vdCBzZXQgUEZf
TElOR0VSIik7CisJCXB0cmFjZShQVF9UUkFDRV9NRSwgMCwgMCwgMCk7CisJCXNldHBnaWQgKDAs
IDApOyAKIAkJZXhlY3ZwKGNvbW1hbmRbMF0sIGNvbW1hbmQpOwotCQltYXNrID0gfjA7Ci0JCWlv
Y3RsKGZkLCBQSU9DQklDLCB+MCk7CiAJCWVycig0LCAiZXhlY3ZwICVzIiwgY29tbWFuZFswXSk7
CiAJfQorCQogCS8qIE9ubHkgaW4gdGhlIHBhcmVudCBoZXJlICovCi0KLQlpZiAod2FpdHBpZChw
aWQsIE5VTEwsIFdOT0hBTkcpICE9IDApIHsKLQkJLyoKLQkJICogUHJvY2VzcyBleGl0ZWQgYmVm
b3JlIGl0IGdvdCB0byB1cyAtLSBtZWFuaW5nIHRoZSBleGVjIGZhaWxlZAotCQkgKiBtaXNlcmFi
bHkgLS0gc28gd2UganVzdCBxdWlldGx5IGV4aXQuCi0JCSAqLwotCQlleGl0KDEpOworCWlmICh3
YWl0cGlkKHBpZCwgJndhaXR2YWwsIDApIDwgLTEpIHsKKwkJZXJyKDEsICJ1bmV4cGVjdCBzdG9w
IGluIHdhaXRwaWQiKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0Jc3ByaW50ZihidWYsICIvcHJvYy8l
ZC9tZW0iLCBwaWQpOwotCi0JLyogVHJ5IDYgdGltZXMgdG8gdHJhY2Ugb3VyIGNoaWxkLCB3YWl0
aW5nIDEvMiBzZWNvbmQgZWFjaCB0aW1lICovCi0JZm9yIChsb29wPTYgOzsgbG9vcC0tKSB7Ci0J
CWlmIChsb29wICE9IDYpCi0JCQl1c2xlZXAoNTAwMDAwKTsKLQkJaWYgKChmZCA9IG9wZW4oYnVm
LCBPX1JEV1IpKSA9PSAtMSkgewotCQkJaWYgKGxvb3AgPiAwKQotCQkJCWNvbnRpbnVlOwotCQkJ
ZWxzZQotCQkJCWVycig1LCAiY2Fubm90IG9wZW4xICVzIiwgYnVmKTsKLQkJfQotCQlpZiAoaW9j
dGwoZmQsIFBJT0NXQUlULCAmcGZzKSA9PSAtMSkgewotCQkJaWYgKGxvb3AgPj0gMCkKLQkJCQlj
b250aW51ZTsKLQkJCWVsc2UKLQkJCQllcnIoNiwgIlBJT0NXQUlUIik7Ci0JCX0KLQkJaWYgKHBm
cy53aHkgPT0gU19FWElUKSB7Ci0JCQl3YXJueCgicHJvY2VzcyBleGl0ZWQgYmVmb3JlIGV4ZWMn
aW5nIik7Ci0JCQlpb2N0bChmZCwgUElPQ0NPTlQsIDApOwotCQkJd2FpdCgwKTsKLQkJCWV4aXQo
Nyk7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JfQotCWNsb3NlKGZkKTsKKwljaGlsZF9waWQgPSBw
aWQ7CisJCiAJcmV0dXJuIChwaWQpOwogfQogCkBAIC0xNDUsNDUgKzEwMSwyNCBAQAogICovCiAK
IGludAotc3RhcnRfdHJhY2luZyhpbnQgcGlkLCBpbnQgZmFpbGlzZmF0YWwsIGludCBldmVudGZs
YWdzLCBpbnQgZmxhZ3MpCitzdGFydF90cmFjaW5nKGludCBwaWQpCiB7Ci0JaW50IGZkOwotCWNo
YXIgYnVmWzMyXTsKLQlzdHJ1Y3QgcHJvY2ZzX3N0YXR1cyB0bXA7CisJaW50IHdhaXR2YWw7CisJ
aW50IHJldDsKKwlpbnQgcmV0cnkgPSAxMDsKIAotCXNwcmludGYoYnVmLCAiL3Byb2MvJWQvbWVt
IiwgcGlkKTsKLQkvKiB1c2xlZXAoNTAwMDAwKTsgKi8KKwlkbyB7CisJCXJldCA9IHB0cmFjZShQ
VF9BVFRBQ0gsIHBpZCwgTlVMTCwgMCk7CisJCXVzbGVlcCgyMDApOworCX0gd2hpbGUocmV0ICYm
IHJldHJ5LS0gPiAwKTsKKwlpZiAocmV0KQorCQllcnIoNSwgImNhbiBub3QgYXR0YWNoIHRvIHRh
cmdldCBwcm9jZXNzIik7CiAKLQlmZCA9IG9wZW4oYnVmLCBPX1JEV1IpOwotCWlmIChmZCA9PSAt
MSkgewotCQkvKgotCQkgKiBUaGUgcHJvY2VzcyBtYXkgaGF2ZSBydW4gYXdheSBiZWZvcmUgd2Ug
Y291bGQgc3RhcnQgLS0gdGhpcwotCQkgKiBoYXBwZW5zIHdpdGggU1VHSUQgcHJvZ3JhbXMuICBT
byB3ZSBuZWVkIHRvIHNlZSBpZiBpdCBzdGlsbAotCQkgKiBleGlzdHMgYmVmb3JlIHdlIGNvbXBs
YWluIGJpdHRlcmx5LgotCQkgKi8KLQkJaWYgKCFmYWlsaXNmYXRhbCAmJiBraWxsKHBpZCwgMCkg
PT0gLTEpCi0JCQlyZXR1cm4gKC0xKTsKLQkJZXJyKDgsICJjYW5ub3Qgb3BlbjIgJXMiLCBidWYp
OwotCX0KKwljaGlsZF9waWQgPSBwaWQ7CQorCWlmICh3YWl0cGlkKHBpZCwgJndhaXR2YWwsIDAp
IDwgLTEpIAorCQllcnIoMSwgIlVuZXhwZWN0IHN0b3AgaW4gd2FpdHBpZCIpOwogCi0JaWYgKGlv
Y3RsKGZkLCBQSU9DU1RBVFVTLCAmdG1wKSA9PSAtMSkgewotCQllcnIoMTAsICJjYW5ub3QgZ2V0
IHByb2NmcyBzdGF0dXMgc3RydWN0Iik7Ci0JfQotCWV2ZmxhZ3MgPSB0bXAuZXZlbnRzOwotCi0J
aWYgKGlvY3RsKGZkLCBQSU9DQklTLCBldmVudGZsYWdzKSA9PSAtMSkKLQkJZXJyKDksICJjYW5u
b3Qgc2V0IHByb2NmcyBldmVudCBiaXQgbWFzayIpOwotCi0JLyoKLQkgKiBUaGlzIGNsZWFycyB0
aGUgUEZfTElOR0VSIHNldCBhYm92ZSBpbiBzZXR1cF9hbmRfd2FpdCgpOwotCSAqIGlmIHRydXNz
IGhhcHBlbnMgdG8gZGllIGJlZm9yZSB0aGlzLCB0aGVuIHRoZSBwcm9jZXNzCi0JICogbmVlZHMg
dG8gYmUgd29rZW4gdXAgdmlhIHByb2NjdGwuCi0JICovCi0KLQlpZiAoaW9jdGwoZmQsIFBJT0NT
RkwsIGZsYWdzKSA9PSAtMSkKLQkJd2FybigiY2Fubm90IGNsZWFyIFBGX0xJTkdFUiIpOwotCi0J
cmV0dXJuIChmZCk7CisJcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTE5MywxMCArMTI4LDUxIEBA
CiAgKiBwcm9jZXNzLgogICovCiB2b2lkCi1yZXN0b3JlX3Byb2MoaW50IHNpZ25vIF9fdW51c2Vk
KSB7CityZXN0b3JlX3Byb2MoaW50IHNpZ25vIF9fdW51c2VkKQoreworCWludCB3YWl0dmFsOwor
CQorCWtpbGwoY2hpbGRfcGlkLCBTSUdTVE9QKTsKKwlpZiAod2FpdHBpZChjaGlsZF9waWQsICZ3
YWl0dmFsLCAwKSA8IC0xKQorCQllcnIoMSwgIlVuZXhwZWN0IHN0b3AgaW4gd2FpdHBpZCIpOwog
Ci0JaW9jdGwoUHJvY2ZkLCBQSU9DQklDLCB+MCk7Ci0JaWYgKGV2ZmxhZ3MpCi0JCWlvY3RsKFBy
b2NmZCwgUElPQ0JJUywgZXZmbGFncyk7CisJaWYgKHB0cmFjZShQVF9ERVRBQ0gsIGNoaWxkX3Bp
ZCwgKGNhZGRyX3QpMSwgMCkgPCAwKQorCQllcnIoNywgIkNhbiBub3QgZGV0YWNoIik7CisJCisJ
a2lsbChjaGlsZF9waWQsIFNJR0NPTlQpOwogCWV4aXQoMCk7CiB9CisKK3ZvaWQgd2FpdGV2ZW50
KHN0cnVjdCB0cnVzc2luZm8gKmluZm8pCit7CisJaW50IHdhaXR2YWw7CisJc3RhdGljIGludCBp
bl9zeXNjYWxsID0gMDsKKwkKKwlwdHJhY2UoUFRfU1lTQ0FMTCwgaW5mby0+cGlkLCAoY2FkZHJf
dCkxLCAwKTsKKworCWlmICh3YWl0cGlkKGluZm8tPnBpZCwgJndhaXR2YWwsIDApIDwgLTEpIHsK
KwkJZXJyKDEsICJ1bmV4cGVjdCBzdG9wIGluIHdhaXRwaWQiKTsKKwl9CisJCisJaWYgKFdJRkNP
TlRJTlVFRCh3YWl0dmFsKSkgeworCQlpbmZvLT5wcl93aHkgPSBTX05PTkU7CisJCXJldHVybjsK
Kwl9CisJaWYgKFdJRkVYSVRFRCh3YWl0dmFsKSkgeworCQlpbmZvLT5wcl93aHkgPSBTX0VYSVQ7
CisJCWluZm8tPnByX2RhdGEgPSBXRVhJVFNUQVRVUyh3YWl0dmFsKTsKKwkJcmV0dXJuOworCX0K
KwlpZiAoV0lGU1RPUFBFRCh3YWl0dmFsKSB8fCAoV0lGU0lHTkFMRUQod2FpdHZhbCkpKSB7CisJ
CXN3aXRjaChXU1RPUFNJRyh3YWl0dmFsKSkgeworCQljYXNlIFNJR1RSQVA6CisJCQlpbmZvLT5w
cl93aHkgPSBpbl9zeXNjYWxsP1NfU0NYOlNfU0NFOworCQkJaW5fc3lzY2FsbCA9IDEgLSBpbl9z
eXNjYWxsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvLT5wcl93aHkgPSBTX1NJRzsK
KwkJCWluZm8tPnByX2RhdGEgPSBXU1RPUFNJRyh3YWl0dmFsKTsKKwkJCWJyZWFrOworCQl9CisJ
fQorfQo9PT09IC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vzci5iaW4vdHJ1c3Mvc3BhcmM2
NC1mYnNkLmMjOSAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJp
bi90cnVzcy9zcGFyYzY0LWZic2QuYyMyICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTQ1LDgg
KzQ1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lv
Y3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4K
ICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9mcmFtZS5oPgpA
QCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUgInN5c2NhbGwuaCIKICNpbmNsdWRlICJleHRlcm4u
aCIKIAotc3RhdGljIGludCBmZCA9IC0xOwogc3RhdGljIGludCBjcGlkID0gLTE7CiAKICNpbmNs
dWRlICJzeXNjYWxscy5oIgpAQCAtMTE4LDI2ICsxMTYsMTggQEAKIAogdm9pZAogc3BhcmM2NF9z
eXNjYWxsX2VudHJ5KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IG5hcmdzKSB7Ci0g
IGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBpbnQgc3lzY2FsbF9udW07CiAg
IGludCBpOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAgIGludCBpbmRpciA9IDA7CS8qIGluZGly
ZWN0IHN5c3RlbSBjYWxsICovCisgIHN0cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CiAK
LSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAgICBzcHJpbnRm
KGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVuKGJ1
ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZv
LT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNwaWQgPSB0cnVz
c2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYg
KHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICAKKyAg
aWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAg
ICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMg
LS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTg2LDkgKzE3NiwxNCBAQAogCSAqIG9uIHRo
ZSBzdGFjaywgYXMgaXMgbm9ybWFsIGZvciBvdGhlciBwcm9jZXNzb3JzLgogCSAqIFRoZSBmYWxs
LXRocm91Z2ggZm9yIGFsbCBvZiB0aGVzZSBpcyBkZWxpYmVyYXRlISEhCiAJICovCi0JbHNlZWso
UHJvY2ZkLCByZWdzLnJfb3V0WzZdICsgU1BPRkYgKwotCSAgICBvZmZzZXRvZihzdHJ1Y3QgZnJh
bWUsIGZyX3BhZFs2XSksIFNFRUtfU0VUKTsKLQlyZWFkKGZkLCAmZnNjLmFyZ3NbNl0sIChuYXJn
cyAtIDYpICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CisJaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9E
X1JFQURfRDsKKwlpb3JlcXVlc3QucGlvZF9vZmZzID0gKHZvaWQgKikocmVncy5yX291dFs2XSAr
IFNQT0ZGICsKKyAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBmcmFtZSwgZnJfcGFkWzZdKTsK
Kwlpb3JlcXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdzWzZdOworCWlvcmVxdWVzdC5waW9kX2xl
biA9IChuYXJncyAtIDYpICogc2l6ZW9mKGZzYy5hcmdzWzBdKTsKKwlwdHJhY2UoUFRfSU8sIGNw
aWQsIChjYWRkcl90KSZpb3JlcXVlc3QsIDApOworCWlmIChpb3JlcXVlc3QucGlvZF9sZW4gPT0g
MCkgcmV0dXJuOworCiAgIGNhc2UgNjoJZnNjLmFyZ3NbNV0gPSByZWdzLnJfb3V0WzVdOwogICBj
YXNlIDU6CWZzYy5hcmdzWzRdID0gcmVncy5yX291dFs0XTsKICAgY2FzZSA0Oglmc2MuYXJnc1sz
XSA9IHJlZ3Mucl9vdXRbM107CkBAIC0yNDAsNyArMjM1LDcgQEAKIAkgICAgICBpIDwgKGZzYy5u
YXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2MgJiYgIShzYy0+YXJn
c1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoUHJvY2ZkLCAm
c2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5zX2FyZ3NbaV0gPSBw
cmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKICAgICAgIH0K
ICAgICB9CiAjaWYgREVCVUcKQEAgLTMwMiwxOCArMjk3LDkgQEAKICAgaW50IGVycm9ycDsKICAg
c3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAh
PSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5w
aWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsK
LSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNU
RVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3Np
bmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwogCi0gIGxzZWVrKGZkLCAw
TCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVn
cykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkg
PCAwKSB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICJcbiIpOwogICAgIHJldHVy
biAoLTEpOwogICB9CkBAIC0zNDQsNyArMzMwLDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmlu
dGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UK
LQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2
YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFy
Z3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0K
ICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9zeXNj
YWxsLmgjMTIgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4v
dHJ1c3Mvc3lzY2FsbC5oIzIgKHRleHQra28pID09PT0gY29udGVudApAQCAtNjEsNyArNjEsNyBA
QAogCiBzdHJ1Y3Qgc3lzY2FsbCAqZ2V0X3N5c2NhbGwoY29uc3QgY2hhciopOwogY2hhciAqZ2V0
X3N0cmluZyhpbnQsIHZvaWQqLCBpbnQpOwotY2hhciAqcHJpbnRfYXJnKGludCwgc3RydWN0IHN5
c2NhbGxfYXJncyAqLCB1bnNpZ25lZCBsb25nKiwgbG9uZywgc3RydWN0IHRydXNzaW5mbyAqKTsK
K2NoYXIgKnByaW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9hcmdzICosIHVuc2lnbmVkIGxvbmcqLCBs
b25nLCBzdHJ1Y3QgdHJ1c3NpbmZvICopOwogdm9pZCBwcmludF9zeXNjYWxsKHN0cnVjdCB0cnVz
c2luZm8gKiwgY29uc3QgY2hhciAqLCBpbnQsIGNoYXIgKiopOwogdm9pZCBwcmludF9zeXNjYWxs
X3JldChzdHJ1Y3QgdHJ1c3NpbmZvICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICoqLCBpbnQs
CiAgICAgbG9uZyk7Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVz
cy9zeXNjYWxscy5jIzM4ICh0ZXh0K2tvKSAtIC8vZGVwb3QvdXNlci9ob3dhcmRzdS90cnVzcy91
c3IuYmluL3RydXNzL3N5c2NhbGxzLmMjMiAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC00MSw2
ICs0MSw3IEBACiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvdW4uaD4KQEAgLTQwOCw5ICs0MDksMTMg
QEAKICAqLwogCiBzdGF0aWMgaW50Ci1nZXRfc3RydWN0KGludCBwcm9jZmQsIHZvaWQgKm9mZnNl
dCwgdm9pZCAqYnVmLCBpbnQgbGVuKSB7Ci0KLQlpZiAocHJlYWQocHJvY2ZkLCBidWYsIGxlbiwg
KHVpbnRwdHJfdClvZmZzZXQpICE9IGxlbikKK2dldF9zdHJ1Y3QoaW50IHBpZCwgdm9pZCAqb2Zm
c2V0LCB2b2lkICpidWYsIGludCBsZW4pIHsKKwlzdHJ1Y3QgcHRyYWNlX2lvX2Rlc2MgaW9yZXF1
ZXN0OworCWlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFEX0Q7CisJaW9yZXF1ZXN0LnBpb2Rf
b2ZmcyA9IG9mZnNldDsKKwlpb3JlcXVlc3QucGlvZF9hZGRyID0gYnVmOworCWlvcmVxdWVzdC5w
aW9kX2xlbiA9IGxlbjsKKwlpZiAocHRyYWNlKFBUX0lPLCBwaWQsIChjYWRkcl90KSZpb3JlcXVl
c3QsIDApICE9IGxlbikKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtNDIzLDM3ICs0
MjgsMjEgQEAKICAqLwogCiBjaGFyICoKLWdldF9zdHJpbmcoaW50IHByb2NmZCwgdm9pZCAqb2Zm
c2V0LCBpbnQgbWF4KSB7CitnZXRfc3RyaW5nKGludCBwaWQsIHZvaWQgKm9mZnNldCwgaW50IG1h
eCkgewogCWNoYXIgKmJ1ZjsKLQlpbnQgc2l6ZSwgbGVuLCBjLCBmZDsKLQlGSUxFICpwOworCXN0
cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CisJaWYgKG1heCA+IDEwMjQgfHwgbWF4IDw9
IDApCisJCW1heCA9IDEwMjQ7CisKKwlidWYgPSBtYWxsb2MobWF4KTsKKwlpZiAoYnVmID09IE5V
TEwpIHJldHVybiBOVUxMOworCWlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFEX0Q7CisJaW9y
ZXF1ZXN0LnBpb2Rfb2ZmcyA9IG9mZnNldDsKKwlpb3JlcXVlc3QucGlvZF9hZGRyID0gYnVmOwor
CWlvcmVxdWVzdC5waW9kX2xlbiA9IG1heDsKKwlwdHJhY2UoUFRfSU8sIHBpZCwgKGNhZGRyX3Qp
JmlvcmVxdWVzdCwgMCk7CisJYnVmW21heCAtIDFdID0gJ1wwJzsKIAotCWlmICgoZmQgPSBkdXAo
cHJvY2ZkKSkgPT0gLTEpCi0JCWVycigxLCAiZHVwIik7Ci0JaWYgKChwID0gZmRvcGVuKGZkLCAi
ciIpKSA9PSBOVUxMKQotCQllcnIoMSwgImZkb3BlbiIpOwotCWJ1ZiA9IG1hbGxvYyggc2l6ZSA9
IChtYXggPyBtYXggKyAxIDogNjQgKSApOwotCWxlbiA9IDA7Ci0JYnVmWzBdID0gMDsKLQlpZiAo
ZnNlZWtvKHAsICh1aW50cHRyX3Qpb2Zmc2V0LCBTRUVLX1NFVCkgPT0gMCkgewotCQl3aGlsZSAo
KGMgPSBmZ2V0YyhwKSkgIT0gRU9GKSB7Ci0JCQlidWZbbGVuKytdID0gYzsKLQkJCWlmIChjID09
IDAgfHwgbGVuID09IG1heCkKLQkJCQlicmVhazsKLQkJCWlmIChsZW4gPT0gc2l6ZSkgewotCQkJ
CWNoYXIgKnRtcDsKLQkJCQl0bXAgPSByZWFsbG9jKGJ1Ziwgc2l6ZSs2NCk7Ci0JCQkJaWYgKHRt
cCA9PSBOVUxMKSB7Ci0JCQkJCWJ1ZltsZW5dID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ
CXNpemUgKz0gNjQ7Ci0JCQkJYnVmID0gdG1wOwotCQkJfQotCQl9Ci0JCWJ1ZltsZW5dID0gMDsK
LQl9Ci0JZmNsb3NlKHApOwogCXJldHVybiAoYnVmKTsKIH0KIApAQCAtNDY5LDkgKzQ1OCw5IEBA
CiAgKi8KIAogY2hhciAqCi1wcmludF9hcmcoaW50IGZkLCBzdHJ1Y3Qgc3lzY2FsbF9hcmdzICpz
YywgdW5zaWduZWQgbG9uZyAqYXJncywgbG9uZyByZXR2YWwsIHN0cnVjdCB0cnVzc2luZm8gKnRy
dXNzaW5mbykgeworcHJpbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2FyZ3MgKnNjLCB1bnNpZ25lZCBs
b25nICphcmdzLCBsb25nIHJldHZhbCwgc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvKSB7CiAg
IGNoYXIgKnRtcCA9IE5VTEw7Ci0KKyAgaW50IHBpZCA9IHRydXNzaW5mby0+cGlkOwogICBzd2l0
Y2ggKHNjLT50eXBlICYgQVJHX01BU0spIHsKICAgY2FzZSBIZXg6CiAgICAgYXNwcmludGYoJnRt
cCwgIjB4JWx4IiwgYXJnc1tzYy0+b2Zmc2V0XSk7CkBAIC00ODYsNyArNDc1LDcgQEAKICAgICB7
CiAgICAgICAvKiBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLiAqLwogICAgICAgY2hhciAqdG1wMjsK
LSAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopYXJnc1tzYy0+b2Zmc2V0XSwgMCk7
CisgICAgICB0bXAyID0gZ2V0X3N0cmluZyhwaWQsICh2b2lkKilhcmdzW3NjLT5vZmZzZXRdLCAw
KTsKICAgICAgIGFzcHJpbnRmKCZ0bXAsICJcIiVzXCIiLCB0bXAyKTsKICAgICAgIGZyZWUodG1w
Mik7CiAgICAgfQpAQCAtNTE0LDcgKzUwMyw3IEBACiAgICAgICAgIGxlbiA9IG1heF9zdHJpbmc7
CiAgICAgICAgIHRydW5jYXRlZCA9IDE7CiAgICAgICB9Ci0gICAgICBpZiAobGVuICYmIGdldF9z
dHJ1Y3QoZmQsICh2b2lkKilhcmdzW3NjLT5vZmZzZXRdLCAmdG1wMiwgbGVuKSAhPSAtMSkgewor
ICAgICAgaWYgKGxlbiAmJiBnZXRfc3RydWN0KHBpZCwgKHZvaWQqKWFyZ3Nbc2MtPm9mZnNldF0s
ICZ0bXAyLCBsZW4pICE9IC0xKSB7CiAgICAgICAgIHRtcDMgPSBtYWxsb2MobGVuICogNCArIDEp
OwogICAgICAgICB3aGlsZSAobGVuKSB7CiAgICAgICAgICAgaWYgKHN0cnZpc3godG1wMywgdG1w
MiwgbGVuLCBWSVNfQ1NUWUxFfFZJU19UQUJ8VklTX05MKSA8PSBtYXhfc3RyaW5nKQpAQCAtNTM1
LDcgKzUyNCw3IEBACiAgICAgICBjaGFyICpzdHJpbmc7CiAgICAgICBjaGFyICpzdHJhcnJheVsx
MDBdOwkvKiBYWFggVGhpcyBpcyB1Z2x5LiAqLwogCi0gICAgICBpZiAoZ2V0X3N0cnVjdChmZCwg
KHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzdHJhcnJheSwKKyAgICAgIGlmIChn
ZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzdHJhcnJh
eSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJhcnJheSkpID09IC0xKSB7CiAJZXJy
KDEsICJnZXRfc3RydWN0ICVwIiwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdKTsKICAgICAgIH0K
QEAgLTU0NCw3ICs1MzMsNyBAQAogCiAgICAgICAvKiBGaW5kIG91dCBob3cgbGFyZ2Ugb2YgYSBi
dWZmZXIgd2UnbGwgbmVlZC4gKi8KICAgICAgIHdoaWxlIChzdHJhcnJheVtudW1dICE9IE5VTEwp
IHsKLQlzdHJpbmcgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopc3RyYXJyYXlbbnVtXSwgMCk7CisJ
c3RyaW5nID0gZ2V0X3N0cmluZyhwaWQsICh2b2lkKilzdHJhcnJheVtudW1dLCAwKTsKICAgICAg
ICAgc2l6ZSArPSBzdHJsZW4oc3RyaW5nKTsKIAlmcmVlKHN0cmluZyk7CiAJbnVtKys7CkBAIC01
NTUsNyArNTQ0LDcgQEAKIAogICAgICAgdG1wMiArPSBzcHJpbnRmKHRtcDIsICIgWyIpOwogICAg
ICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0Jc3RyaW5nID0gZ2V0X3N0cmluZyhmZCwg
KHZvaWQqKXN0cmFycmF5W2ldLCAwKTsKKwlzdHJpbmcgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQq
KXN0cmFycmF5W2ldLCAwKTsKICAgICAgICAgdG1wMiArPSBzcHJpbnRmKHRtcDIsICIgXCIlc1wi
JWMiLCBzdHJpbmcsIChpKzEgPT0gbnVtKSA/ICcgJyA6ICcsJyk7CiAJZnJlZShzdHJpbmcpOwog
ICAgICAgfQpAQCAtNTg1LDcgKzU3NCw3IEBACiAJdG1wID0gc3RyZHVwKCIiKTsKIAlicmVhazsK
ICAgICAgIH0KLSAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopYXJnc1tzYy0+b2Zm
c2V0XSwgcmV0dmFsKTsKKyAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQqKWFyZ3Nb
c2MtPm9mZnNldF0sIHJldHZhbCk7CiAgICAgICBhc3ByaW50ZigmdG1wLCAiXCIlc1wiIiwgdG1w
Mik7CiAgICAgICBmcmVlKHRtcDIpOwogICAgIH0KQEAgLTYwOCw3ICs1OTcsNyBAQAogICBjYXNl
IFVtdHg6CiAgICAgewogICAgICAgc3RydWN0IHVtdHggdW10eDsKLSAgICAgIGlmIChnZXRfc3Ry
dWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ1bXR4LCBzaXplb2YodW10eCkpICE9
IC0xKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0s
ICZ1bXR4LCBzaXplb2YodW10eCkpICE9IC0xKQogCWFzcHJpbnRmKCZ0bXAsICJ7MHglbHh9Iiwg
KGxvbmcpdW10eC51X293bmVyKTsKICAgICAgIGVsc2UKIAlhc3ByaW50ZigmdG1wLCAiMHglbHgi
LCBhcmdzW3NjLT5vZmZzZXRdKTsKQEAgLTYxNyw3ICs2MDYsNyBAQAogICBjYXNlIFRpbWVzcGVj
OgogICAgIHsKICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKLSAgICAgIGlmIChnZXRfc3RydWN0
KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0cywgc2l6ZW9mKHRzKSkgIT0gLTEpCisg
ICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnRzLCBz
aXplb2YodHMpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAieyVsZC4lMDlsZH0iLCAobG9uZyl0
cy50dl9zZWMsIHRzLnR2X25zZWMpOwogICAgICAgZWxzZQogCWFzcHJpbnRmKCZ0bXAsICIweCVs
eCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtNjI2LDcgKzYxNSw3IEBACiAgIGNhc2UgVGltZXZh
bDoKICAgICB7CiAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICAgIGlmIChnZXRfc3RydWN0
KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0diwgc2l6ZW9mKHR2KSkgIT0gLTEpCisg
ICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnR2LCBz
aXplb2YodHYpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAieyVsZC4lMDZsZH0iLCAobG9uZyl0
di50dl9zZWMsIHR2LnR2X3VzZWMpOwogICAgICAgZWxzZQogCWFzcHJpbnRmKCZ0bXAsICIweCVs
eCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtNjM1LDcgKzYyNCw3IEBACiAgIGNhc2UgVGltZXZh
bDI6CiAgICAgewogICAgICAgc3RydWN0IHRpbWV2YWwgdHZbMl07Ci0gICAgICBpZiAoZ2V0X3N0
cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAmdHYsIHNpemVvZih0dikpICE9IC0x
KQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0
diwgc2l6ZW9mKHR2KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInslbGQuJTA2bGQsICVsZC4l
MDZsZH0iLAogCSAgKGxvbmcpdHZbMF0udHZfc2VjLCB0dlswXS50dl91c2VjLAogCSAgKGxvbmcp
dHZbMV0udHZfc2VjLCB0dlsxXS50dl91c2VjKTsKQEAgLTY0Niw3ICs2MzUsNyBAQAogICBjYXNl
IEl0aW1lcnZhbDoKICAgICB7CiAgICAgICBzdHJ1Y3QgaXRpbWVydmFsIGl0djsKLSAgICAgIGlm
IChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZpdHYsIHNpemVvZihp
dHYpKSAhPSAtMSkKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5v
ZmZzZXRdLCAmaXR2LCBzaXplb2YoaXR2KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInslbGQu
JTA2bGQsICVsZC4lMDZsZH0iLAogCSAgICAobG9uZylpdHYuaXRfaW50ZXJ2YWwudHZfc2VjLAog
CSAgICBpdHYuaXRfaW50ZXJ2YWwudHZfdXNlYywKQEAgLTY3MCw3ICs2NTksNyBAQAogCiAgICAg
ICBpZiAoKHBmZCA9IG1hbGxvYyhieXRlcykpID09IE5VTEwpCiAJZXJyKDEsICJDYW5ub3QgbWFs
bG9jICVkIGJ5dGVzIGZvciBwb2xsZmQgYXJyYXkiLCBieXRlcyk7Ci0gICAgICBpZiAoZ2V0X3N0
cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCBwZmQsIGJ5dGVzKSAhPSAtMSkgewor
ICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sIHBmZCwg
Ynl0ZXMpICE9IC0xKSB7CiAKIAl1c2VkID0gMDsKIAl0bXBzaXplID0gMSArIHBlcl9mZCAqIG51
bWZkcyArIDI7CkBAIC03MDksNyArNjk4LDcgQEAKIAogICAgICAgaWYgKChmZHMgPSBtYWxsb2Mo
Ynl0ZXMpKSA9PSBOVUxMKQogCWVycigxLCAiQ2Fubm90IG1hbGxvYyAlZCBieXRlcyBmb3IgZmRf
c2V0IGFycmF5IiwgYnl0ZXMpOwotICAgICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJn
c1tzYy0+b2Zmc2V0XSwgZmRzLCBieXRlcykgIT0gLTEpIHsKKyAgICAgIGlmIChnZXRfc3RydWN0
KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCBmZHMsIGJ5dGVzKSAhPSAtMSkgewogCXVz
ZWQgPSAwOwogCXRtcHNpemUgPSAxICsgbnVtZmRzICogcGVyX2ZkICsgMjsKIAlpZiAoKHRtcCA9
IG1hbGxvYyh0bXBzaXplKSkgPT0gTlVMTCkKQEAgLTc0OSw3ICs3MzgsNyBAQAogICAgICAgaW50
IGksIHVzZWQ7CiAKICAgICAgIHNpZyA9IGFyZ3Nbc2MtPm9mZnNldF07Ci0gICAgICBpZiAoZ2V0
X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKKyAgICAg
IGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZz
cywKICAgICAgICAgICBzaXplb2Yoc3MpKSA9PSAtMSkKICAgICAgIHsKIAlhc3ByaW50ZigmdG1w
LCAiMHglbHgiLCBhcmdzW3NjLT5vZmZzZXRdKTsKQEAgLTg1Myw3ICs4NDIsNyBAQAogICAgICAg
fQogCiAgICAgICAvKiB5dWNrOiBnZXQgc3NfbGVuICovCi0gICAgICBpZiAoZ2V0X3N0cnVjdChm
ZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKKyAgICAgIGlmIChnZXRf
c3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKIAlzaXpl
b2Yoc3Muc3NfbGVuKSArIHNpemVvZihzcy5zc19mYW1pbHkpKSA9PSAtMSkKIAllcnIoMSwgImdl
dF9zdHJ1Y3QgJXAiLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0pOwogICAgICAgLyoKQEAgLTg3
NCw3ICs4NjMsNyBAQAogCQkgICAgICBicmVhazsKIAkgICAgICB9CiAgICAgICB9Ci0gICAgICBp
ZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywg
c3Muc3NfbGVuKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9m
ZnNldF0sICh2b2lkICopJnNzLCBzcy5zc19sZW4pCiAJICA9PSAtMSkgewogCSAgZXJyKDIsICJn
ZXRfc3RydWN0ICVwIiwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdKTsKICAgICAgIH0KQEAgLTkx
Myw3ICs5MDIsNyBAQAogICAgICAgY2hhciAqaGFuZDsKICAgICAgIGNvbnN0IGNoYXIgKmg7CiAK
LSAgICAgIGlmIChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZzYSwg
c2l6ZW9mKHNhKSkgIT0gLTEpIHsKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilh
cmdzW3NjLT5vZmZzZXRdLCAmc2EsIHNpemVvZihzYSkpICE9IC0xKSB7CiAKIAlhc3ByaW50Zigm
aGFuZCwgIiVwIiwgc2Euc2FfaGFuZGxlcik7CiAJaWYgKHNhLnNhX2hhbmRsZXIgPT0gU0lHX0RG
TCkKQEAgLTk1Niw3ICs5NDUsNyBAQAogICAgICAgCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCBrZXZl
bnQpICogbnVtZXZlbnRzOwogICAgICAgaWYgKChrZSA9IG1hbGxvYyhieXRlcykpID09IE5VTEwp
CiAgICAgICAgIGVycigxLCAiQ2Fubm90IG1hbGxvYyAlZCBieXRlcyBmb3Iga2V2ZW50IGFycmF5
IiwgYnl0ZXMpOwotICAgICAgaWYgKG51bWV2ZW50cyA+PSAwICYmIGdldF9zdHJ1Y3QoZmQsICh2
b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwga2UsIGJ5dGVzKSAhPSAtMSkgeworICAgICAgaWYgKG51
bWV2ZW50cyA+PSAwICYmIGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0s
IGtlLCBieXRlcykgIT0gLTEpIHsKIAl1c2VkID0gMDsKIAl0bXBzaXplID0gMSArIHBlcl9rZSAq
IG51bWV2ZW50cyArIDI7CiAJaWYgKCh0bXAgPSBtYWxsb2ModG1wc2l6ZSkpID09IE5VTEwpCkBA
IC05ODYsNyArOTc1LDcgQEAKICAgY2FzZSBTdGF0OgogICAgIHsKICAgICAgIHN0cnVjdCBzdGF0
IHN0OwotICAgICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwg
JnN0LCBzaXplb2Yoc3QpKSAhPSAtMSkgeworICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9p
ZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZzdCwgc2l6ZW9mKHN0KSkgIT0gLTEpIHsKIAljaGFyIG1v
ZGVbMTJdOwogCXN0cm1vZGUoc3Quc3RfbW9kZSwgbW9kZSk7CiAJYXNwcmludGYoJnRtcCwgIntt
b2RlPSVzLGlub2RlPSVqZCxzaXplPSVqZCxibGtzaXplPSVsZH0iLApAQCAtOTk5LDcgKzk4OCw3
IEBACiAgIGNhc2UgUnVzYWdlOgogICAgIHsKICAgICAgIHN0cnVjdCBydXNhZ2UgcnU7Ci0gICAg
ICBpZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAmcnUsIHNpemVv
ZihydSkpICE9IC0xKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2Mt
Pm9mZnNldF0sICZydSwgc2l6ZW9mKHJ1KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInt1PSVs
ZC4lMDZsZCxzPSVsZC4lMDZsZCxpbj0lbGQsb3V0PSVsZH0iLAogCSAgKGxvbmcpcnUucnVfdXRp
bWUudHZfc2VjLCBydS5ydV91dGltZS50dl91c2VjLAogCSAgKGxvbmcpcnUucnVfc3RpbWUudHZf
c2VjLCBydS5ydV9zdGltZS50dl91c2VjLApAQCAtMTAxMSw3ICsxMDAwLDcgQEAKICAgY2FzZSBS
bGltaXQ6CiAgICAgewogICAgICAgc3RydWN0IHJsaW1pdCBybDsKLSAgICAgIGlmIChnZXRfc3Ry
dWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZybCwgc2l6ZW9mKHJsKSkgIT0gLTEp
CisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnJs
LCBzaXplb2YocmwpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAie2N1cj0lanUsbWF4PSVqdX0i
LAogCSAgcmwucmxpbV9jdXIsIHJsLnJsaW1fbWF4KTsKICAgICAgIGVsc2UKPT09PSAvL2RlcG90
L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3RydXNzLjEjMTIgKHRleHQra28pIC0g
Ly9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvdHJ1c3MuMSMzICh0ZXh0
K2tvKSA9PT09IGNvbnRlbnQKQEAgLTIzLDcgKzIzLDcgQEAKIHV0aWxpdHkgdHJhY2VzIHRoZSBz
eXN0ZW0gY2FsbHMgY2FsbGVkIGJ5IHRoZSBzcGVjaWZpZWQgcHJvY2VzcyBvciBwcm9ncmFtLgog
T3V0cHV0IGlzIHRvIHRoZSBzcGVjaWZpZWQgb3V0cHV0IGZpbGUsIG9yIHN0YW5kYXJkIGVycm9y
IGJ5IGRlZmF1bHQuCiBJdCBkb2VzIHRoaXMgYnkgc3RvcHBpbmcgYW5kIHJlc3RhcnRpbmcgdGhl
IHByb2Nlc3MgYmVpbmcgbW9uaXRvcmVkIHZpYQotLlhyIHByb2NmcyA1IC4KKy5YciBwdHJhY2Ug
MiAuCiAuUHAKIFRoZSBvcHRpb25zIGFyZSBhcyBmb2xsb3dzOgogLkJsIC10YWcgLXdpZHRoIGlu
ZGVudApAQCAtNzksMTMgKzc5LDYgQEAKIC5BciBjb21tYW5kCiBvcHRpb25zIGFyZSBtdXR1YWxs
eSBleGNsdXNpdmUuKQogLkVsCi0uUHAKLVRoZQotLlhyIHByb2NjdGwgOAotdXRpbGl0eSBjYW4g
YmUgdXNlZCB0byBjbGVhciB0cmFjZXBvaW50cyBpbiBhIHN0dWNrIHByb2Nlc3MKLWxlZnQgYmVo
aW5kIGlmCi0uTm0KLXRlcm1pbmF0ZXMgYWJub3JtYWxseS4KIC5TaCBFWEFNUExFUwogIyBGb2xs
b3cgdGhlIHN5c3RlbSBjYWxscyB1c2VkIGluIGVjaG9pbmcgImhlbGxvIgogLkRsICQgdHJ1c3Mg
L2Jpbi9lY2hvIGhlbGxvCkBAIC05Niw4ICs4OSw3IEBACiAuU2ggU0VFIEFMU08KIC5YciBrZHVt
cCAxICwKIC5YciBrdHJhY2UgMSAsCi0uWHIgcHJvY2ZzIDUgLAotLlhyIHByb2NjdGwgOAorLlhy
IHB0cmFjZSAyIDIgCiAuU2ggSElTVE9SWQogVGhlCiAuTm0KPT09PSAvL2RlcG90L3ZlbmRvci9m
cmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3RydXNzLmgjNSAodGV4dCtrbykgLSAvL2RlcG90L3Vz
ZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy90cnVzcy5oIzMgKHRleHQra28pID09PT0g
Y29udGVudApAQCAtMzcsNiArMzcsOCBAQAogCWludCBwaWQ7CiAJaW50IGZsYWdzOwogCWludCBp
bl9mb3JrOworCWludCBwcl93aHk7CisJaW50IHByX2RhdGE7CiAJaW50IHN0cnNpemU7CiAJRklM
RSAqb3V0ZmlsZTsKIApAQCAtNTQsMyArNTYsMTAgQEAKIAkJCSh2dnApLT50dl9uc2VjICs9IDEw
MDAwMDAwMDA7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNfTk9O
RSAgMAorI2RlZmluZSBTX1NDRSAgIDEKKyNkZWZpbmUgU19TQ1ggICAyCisjZGVmaW5lIFNfRVhJ
VCAgMworI2RlZmluZSBTX1NJRyAgIDQKKyNkZWZpbmUgU19FWEVDICA1Cg==
------=_Part_27400_23796817.1175674700136--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f126fae00704040118w25a7b291xdcf1b6300bab1ceb>